From e5cb79f3ce5fe7bf6377bdcf7357931eb710be4c Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Sun, 29 Mar 2026 01:36:53 +0800 Subject: [PATCH] chore: sync workspace state --- .gitattributes | 1 + .trae/documents/RHI模块审查报告.md | 466 - .trae/documents/XCEngine项目熟悉计划.md | 335 - .vscode/settings.json | 3 + CMakeLists.txt | 3 +- MVS/3DGS-Unity/Editor.meta | 8 + MVS/3DGS-Unity/Editor/GaussianMoveTool.cs | 35 + .../Editor/GaussianMoveTool.cs.meta | 11 + MVS/3DGS-Unity/Editor/GaussianRotateTool.cs | 70 + .../Editor/GaussianRotateTool.cs.meta | 3 + MVS/3DGS-Unity/Editor/GaussianScaleTool.cs | 68 + .../Editor/GaussianScaleTool.cs.meta | 3 + .../Editor/GaussianSplatAssetCreator.cs | 1208 + .../Editor/GaussianSplatAssetCreator.cs.meta | 11 + .../Editor/GaussianSplatAssetEditor.cs | 71 + .../Editor/GaussianSplatAssetEditor.cs.meta | 11 + .../Editor/GaussianSplatRendererEditor.cs | 444 + .../GaussianSplatRendererEditor.cs.meta | 11 + .../Editor/GaussianSplatValidator.cs | 210 + .../Editor/GaussianSplatValidator.cs.meta | 11 + .../Editor/GaussianSplattingEditor.asmdef | 21 + .../GaussianSplattingEditor.asmdef.meta | 7 + MVS/3DGS-Unity/Editor/GaussianTool.cs | 43 + MVS/3DGS-Unity/Editor/GaussianTool.cs.meta | 11 + MVS/3DGS-Unity/Editor/GaussianToolContext.cs | 192 + .../Editor/GaussianToolContext.cs.meta | 3 + MVS/3DGS-Unity/Editor/Icons.meta | 8 + .../Editor/Icons/GaussianContext.png | Bin 0 -> 4460 bytes .../Editor/Icons/GaussianContext.png.meta | 153 + .../Editor/Icons/GaussianContext@2x.png | Bin 0 -> 4877 bytes .../Editor/Icons/GaussianContext@2x.png.meta | 153 + .../Editor/Icons/d_GaussianContext.png | Bin 0 -> 4464 bytes .../Editor/Icons/d_GaussianContext.png.meta | 231 + .../Editor/Icons/d_GaussianContext@2x.png | Bin 0 -> 4892 bytes .../Icons/d_GaussianContext@2x.png.meta | 153 + MVS/3DGS-Unity/Editor/Utils.meta | 8 + .../Editor/Utils/CaptureScreenshot.cs | 26 + .../Editor/Utils/CaptureScreenshot.cs.meta | 11 + .../Editor/Utils/FilePickerControl.cs | 274 + .../Editor/Utils/FilePickerControl.cs.meta | 11 + .../Editor/Utils/KMeansClustering.cs | 595 + .../Editor/Utils/KMeansClustering.cs.meta | 11 + MVS/3DGS-Unity/Editor/Utils/PLYFileReader.cs | 107 + .../Editor/Utils/PLYFileReader.cs.meta | 11 + MVS/3DGS-Unity/Editor/Utils/TinyJsonParser.cs | 403 + .../Editor/Utils/TinyJsonParser.cs.meta | 11 + MVS/3DGS-Unity/LICENSE.md | 21 + MVS/3DGS-Unity/LICENSE.md.meta | 7 + MVS/3DGS-Unity/Materials.meta | 8 + MVS/3DGS-Unity/Materials/BlackSkybox.mat | 30 + MVS/3DGS-Unity/Materials/BlackSkybox.mat.meta | 8 + MVS/3DGS-Unity/Runtime.meta | 8 + MVS/3DGS-Unity/Runtime/GaussianCutout.cs | 77 + MVS/3DGS-Unity/Runtime/GaussianCutout.cs.meta | 11 + MVS/3DGS-Unity/Runtime/GaussianSplatAsset.cs | 247 + .../Runtime/GaussianSplatAsset.cs.meta | 11 + .../Runtime/GaussianSplatHDRPPass.cs | 59 + .../Runtime/GaussianSplatHDRPPass.cs.meta | 11 + .../Runtime/GaussianSplatRenderer.cs | 1070 + .../Runtime/GaussianSplatRenderer.cs.meta | 17 + .../Runtime/GaussianSplatURPFeature.cs | 158 + .../Runtime/GaussianSplatURPFeature.cs.meta | 17 + .../Runtime/GaussianSplatting.asmdef | 31 + .../Runtime/GaussianSplatting.asmdef.meta | 7 + MVS/3DGS-Unity/Runtime/GaussianUtils.cs | 107 + MVS/3DGS-Unity/Runtime/GaussianUtils.cs.meta | 11 + MVS/3DGS-Unity/Runtime/GpuSorting.cs | 200 + MVS/3DGS-Unity/Runtime/GpuSorting.cs.meta | 11 + MVS/3DGS-Unity/Shaders.meta | 8 + MVS/3DGS-Unity/Shaders/BlackSkybox.shader | 44 + .../Shaders/BlackSkybox.shader.meta | 9 + MVS/3DGS-Unity/Shaders/DeviceRadixSort.hlsl | 531 + .../Shaders/DeviceRadixSort.hlsl.meta | 7 + .../Shaders/GaussianComposite.shader | 45 + .../Shaders/GaussianComposite.shader.meta | 9 + .../Shaders/GaussianDebugRenderBoxes.shader | 102 + .../GaussianDebugRenderBoxes.shader.meta | 9 + .../Shaders/GaussianDebugRenderPoints.shader | 65 + .../GaussianDebugRenderPoints.shader.meta | 9 + MVS/3DGS-Unity/Shaders/GaussianSplatting.hlsl | 617 + .../Shaders/GaussianSplatting.hlsl.meta | 7 + .../Shaders/RenderGaussianSplats.shader | 111 + .../Shaders/RenderGaussianSplats.shader.meta | 9 + MVS/3DGS-Unity/Shaders/SortCommon.hlsl | 959 + MVS/3DGS-Unity/Shaders/SortCommon.hlsl.meta | 7 + .../Shaders/SphericalHarmonics.hlsl | 212 + .../Shaders/SphericalHarmonics.hlsl.meta | 7 + MVS/3DGS-Unity/Shaders/SplatUtilities.compute | 757 + .../Shaders/SplatUtilities.compute.meta | 7 + MVS/3DGS-Unity/package.json | 13 + MVS/3DGS-Unity/package.json.meta | 7 + MVS/3DGS-Unity/room.ply | 3 + .../OpenGL/res/models/backpack/ao.jpg | Bin .../OpenGL/res/models/backpack/backpack.mtl | 0 .../OpenGL/res/models/backpack/diffuse.jpg | Bin .../OpenGL/res/models/backpack/normal.png | Bin .../OpenGL/res/models/backpack/roughness.jpg | Bin .../models/backpack/source_attribution.txt | 0 .../OpenGL/res/models/backpack/specular.jpg | Bin docs/api/XCEngine/Editor/Editor.md | 85 +- .../Editor/UI/BuiltInIcons/BuiltInIcons.md | 107 + .../Editor/UI/DividerChrome/DividerChrome.md | 73 + .../UI/DockTabBarChrome/DockTabBarChrome.md | 103 + .../UI/PropertyLayout/PropertyLayout.md | 105 + .../UI/SplitterChrome/SplitterChrome.md | 88 + .../Editor/UI/StyleTokens/StyleTokens.md | 89 +- .../XCEngine/Editor/UI/TreeView/TreeView.md | 122 + docs/api/XCEngine/Editor/UI/UI.md | 121 +- .../panels/HierarchyPanel/HierarchyPanel.md | 115 +- .../panels/ProjectPanel/ProjectPanel.md | 121 +- docs/api/XCEngine/RHI/RHI.md | 138 +- docs/api/XCEngine/RHI/RHIBuffer/RHIBuffer.md | 147 +- .../RHI/RHICapabilities/RHICapabilities.md | 149 +- .../RHI/RHICommandList/RHICommandList.md | 196 +- .../RHI/RHICommandQueue/RHICommandQueue.md | 109 +- .../RHIDescriptorPool/RHIDescriptorPool.md | 113 +- .../RHI/RHIDescriptorSet/RHIDescriptorSet.md | 135 +- docs/api/XCEngine/RHI/RHIDevice/RHIDevice.md | 192 +- docs/api/XCEngine/RHI/RHIEnums/RHIEnums.md | 181 +- .../api/XCEngine/RHI/RHIFactory/RHIFactory.md | 80 +- docs/api/XCEngine/RHI/RHIFence/RHIFence.md | 117 +- .../RHI/RHIFramebuffer/RHIFramebuffer.md | 174 +- .../RHIPipelineLayout/RHIPipelineLayout.md | 195 +- .../RHI/RHIPipelineState/RHIPipelineState.md | 152 +- .../RHI/RHIRenderPass/RHIRenderPass.md | 108 +- .../XCEngine/RHI/RHIResource/RHIResource.md | 82 +- .../RHI/RHIResourceView/RHIResourceView.md | 149 +- .../api/XCEngine/RHI/RHISampler/RHISampler.md | 165 +- .../RHI/RHIScreenshot/RHIScreenshot.md | 177 +- docs/api/XCEngine/RHI/RHIShader/RHIShader.md | 231 +- .../XCEngine/RHI/RHISwapChain/RHISwapChain.md | 126 +- .../api/XCEngine/RHI/RHITexture/RHITexture.md | 130 +- docs/api/XCEngine/RHI/RHITypes/RHITypes.md | 203 +- docs/api/XCEngine/RHI/Vulkan/Vulkan.md | 81 + .../RHI/Vulkan/VulkanBuffer/VulkanBuffer.md | 94 + .../VulkanCommandList/BeginRenderPass.md | 31 + .../RHI/Vulkan/VulkanCommandList/Clear.md | 26 + .../VulkanCommandList/ClearDepthStencil.md | 20 + .../VulkanCommandList/ClearRenderTarget.md | 20 + .../RHI/Vulkan/VulkanCommandList/Close.md | 25 + .../Vulkan/VulkanCommandList/CopyResource.md | 24 + .../RHI/Vulkan/VulkanCommandList/Dispatch.md | 29 + .../RHI/Vulkan/VulkanCommandList/Draw.md | 27 + .../Vulkan/VulkanCommandList/DrawIndexed.md | 26 + .../Vulkan/VulkanCommandList/Initialize.md | 27 + .../RHI/Vulkan/VulkanCommandList/Reset.md | 26 + .../SetComputeDescriptorSets.md | 25 + .../SetGraphicsDescriptorSets.md | 27 + .../VulkanCommandList/SetIndexBuffer.md | 21 + .../VulkanCommandList/SetPipelineState.md | 22 + .../VulkanCommandList/SetRenderTargets.md | 22 + .../VulkanCommandList/SetScissorRect.md | 19 + .../VulkanCommandList/SetVertexBuffers.md | 26 + .../Vulkan/VulkanCommandList/SetViewport.md | 21 + .../VulkanCommandList/TransitionBarrier.md | 26 + .../VulkanCommandList/VulkanCommandList.md | 187 + .../VulkanCommandQueue/ExecuteCommandLists.md | 36 + .../VulkanCommandQueue/GetCompletedValue.md | 23 + .../Vulkan/VulkanCommandQueue/Initialize.md | 30 + .../RHI/Vulkan/VulkanCommandQueue/Signal.md | 20 + .../VulkanCommandQueue/VulkanCommandQueue.md | 120 + .../RHI/Vulkan/VulkanCommandQueue/Wait.md | 24 + .../Vulkan/VulkanCommandQueue/WaitForIdle.md | 24 + .../RHI/Vulkan/VulkanCommon/VulkanCommon.md | 83 + .../VulkanDescriptorPool.md | 81 + .../VulkanDescriptorSet.md | 109 + .../RHI/Vulkan/VulkanDevice/CreateBuffer.md | 36 + .../Vulkan/VulkanDevice/CreateCommandList.md | 30 + .../Vulkan/VulkanDevice/CreateCommandQueue.md | 25 + .../VulkanDevice/CreateDepthStencilView.md | 21 + .../VulkanDevice/CreateDescriptorPool.md | 22 + .../VulkanDevice/CreateDescriptorSet.md | 26 + .../RHI/Vulkan/VulkanDevice/CreateFence.md | 19 + .../Vulkan/VulkanDevice/CreateFramebuffer.md | 21 + .../VulkanDevice/CreateIndexBufferView.md | 21 + .../VulkanDevice/CreatePipelineLayout.md | 25 + .../VulkanDevice/CreatePipelineState.md | 26 + .../Vulkan/VulkanDevice/CreateRenderPass.md | 21 + .../VulkanDevice/CreateRenderTargetView.md | 21 + .../RHI/Vulkan/VulkanDevice/CreateSampler.md | 20 + .../RHI/Vulkan/VulkanDevice/CreateShader.md | 32 + .../VulkanDevice/CreateShaderResourceView.md | 21 + .../Vulkan/VulkanDevice/CreateSwapChain.md | 32 + .../RHI/Vulkan/VulkanDevice/CreateTexture.md | 46 + .../VulkanDevice/CreateUnorderedAccessView.md | 21 + .../VulkanDevice/CreateVertexBufferView.md | 21 + .../RHI/Vulkan/VulkanDevice/FindMemoryType.md | 33 + .../RHI/Vulkan/VulkanDevice/Initialize.md | 41 + .../RHI/Vulkan/VulkanDevice/Shutdown.md | 29 + .../RHI/Vulkan/VulkanDevice/VulkanDevice.md | 153 + .../RHI/Vulkan/VulkanFence/VulkanFence.md | 65 + .../GetColorAttachmentCount.md | 14 + .../GetColorAttachmentTexture.md | 19 + .../GetColorAttachmentView.md | 18 + .../GetDepthStencilTexture.md | 18 + .../VulkanFramebuffer/GetDepthStencilView.md | 14 + .../VulkanFramebuffer/GetFramebuffer.md | 14 + .../RHI/Vulkan/VulkanFramebuffer/GetHeight.md | 14 + .../VulkanFramebuffer/GetNativeHandle.md | 19 + .../Vulkan/VulkanFramebuffer/GetRenderPass.md | 14 + .../RHI/Vulkan/VulkanFramebuffer/GetWidth.md | 14 + .../Vulkan/VulkanFramebuffer/Initialize.md | 34 + .../RHI/Vulkan/VulkanFramebuffer/IsValid.md | 18 + .../RHI/Vulkan/VulkanFramebuffer/Shutdown.md | 19 + .../VulkanFramebuffer/VulkanFramebuffer.md | 113 + .../Vulkan/VulkanPipelineLayout/GetDesc.md | 19 + .../VulkanPipelineLayout/GetNativeHandle.md | 19 + .../VulkanPipelineLayout/GetPipelineLayout.md | 19 + .../Vulkan/VulkanPipelineLayout/Initialize.md | 37 + .../Vulkan/VulkanPipelineLayout/Shutdown.md | 21 + .../VulkanPipelineLayout/UsesSetLayouts.md | 19 + .../VulkanPipelineLayout.md | 132 + .../RHI/Vulkan/VulkanPipelineState/Bind.md | 19 + .../Vulkan/VulkanPipelineState/EnsureValid.md | 25 + .../VulkanPipelineState/GetComputeShader.md | 14 + .../RHI/Vulkan/VulkanPipelineState/GetHash.md | 20 + .../VulkanPipelineState/GetNativeHandle.md | 19 + .../RHI/Vulkan/VulkanPipelineState/GetType.md | 19 + .../VulkanPipelineState/HasComputeShader.md | 18 + .../Vulkan/VulkanPipelineState/Initialize.md | 33 + .../RHI/Vulkan/VulkanPipelineState/IsValid.md | 20 + .../VulkanPipelineState/SetBlendState.md | 18 + .../VulkanPipelineState/SetComputeShader.md | 22 + .../SetDepthStencilState.md | 18 + .../VulkanPipelineState/SetInputLayout.md | 19 + .../VulkanPipelineState/SetRasterizerState.md | 19 + .../SetRenderTargetFormats.md | 25 + .../VulkanPipelineState/SetSampleCount.md | 18 + .../Vulkan/VulkanPipelineState/SetTopology.md | 19 + .../Vulkan/VulkanPipelineState/Shutdown.md | 21 + .../RHI/Vulkan/VulkanPipelineState/Unbind.md | 18 + .../VulkanPipelineState.md | 168 + .../VulkanRenderPass/GetAttachmentCount.md | 18 + .../GetColorAttachmentCount.md | 14 + .../VulkanRenderPass/GetColorAttachments.md | 19 + .../GetDepthStencilAttachment.md | 19 + .../VulkanRenderPass/GetNativeHandle.md | 19 + .../Vulkan/VulkanRenderPass/GetRenderPass.md | 14 + .../VulkanRenderPass/HasDepthStencil.md | 18 + .../RHI/Vulkan/VulkanRenderPass/Initialize.md | 31 + .../RHI/Vulkan/VulkanRenderPass/Shutdown.md | 20 + .../VulkanRenderPass/VulkanRenderPass.md | 121 + .../VulkanResourceView/VulkanResourceView.md | 123 + .../RHI/Vulkan/VulkanSampler/VulkanSampler.md | 65 + .../VulkanScreenshot/VulkanScreenshot.md | 72 + .../RHI/Vulkan/VulkanShader/Compile.md | 32 + .../Vulkan/VulkanShader/CompileFromFile.md | 29 + .../RHI/Vulkan/VulkanShader/GetUniformInfo.md | 24 + .../RHI/Vulkan/VulkanShader/Shutdown.md | 19 + .../RHI/Vulkan/VulkanShader/VulkanShader.md | 121 + .../CompileVulkanShader.md | 44 + .../VulkanShaderCompiler.md | 167 + .../VulkanSwapChain/AcquireNextImage.md | 31 + .../VulkanSwapChain/GetCurrentBackBuffer.md | 24 + .../RHI/Vulkan/VulkanSwapChain/Initialize.md | 30 + .../RHI/Vulkan/VulkanSwapChain/Present.md | 25 + .../RHI/Vulkan/VulkanSwapChain/Resize.md | 24 + .../Vulkan/VulkanSwapChain/VulkanSwapChain.md | 153 + .../RHI/Vulkan/VulkanTexture/VulkanTexture.md | 112 + .../CameraRenderRequest.md | 52 + .../Rendering/CameraRenderRequest/IsValid.md | 48 + .../CameraRenderer/CameraRenderer.md | 65 + .../Rendering/CameraRenderer/Constructor.md | 39 + .../Rendering/CameraRenderer/Destructor.md | 36 + .../Rendering/CameraRenderer/GetPipeline.md | 37 + .../Rendering/CameraRenderer/Render.md | 65 + .../Rendering/CameraRenderer/SetPipeline.md | 46 + .../ApplyMaterialRenderState.md | 50 + .../RenderMaterialUtility/BuildBlendState.md | 32 + .../BuildDepthStencilState.md | 37 + .../BuildRasterizerState.md | 37 + .../IsTransparentRenderQueue.md | 37 + .../MatchesBuiltinPass.md | 41 + .../RenderMaterialUtility.md | 76 + .../RenderMaterialUtility/ResolveMaterial.md | 57 + .../ResolveMaterialRenderQueue.md | 31 + docs/api/XCEngine/Rendering/Rendering.md | 73 +- ...eues-CommandLists-And-Resource-Creation.md | 236 + docs/api/_meta/rebuild-status.md | 47 +- docs/plan/Renderer模块设计与实现.md | 556 + docs/plan/Unity绝区零开发文档还原版.md | 1377 + .../C#脚本系统_Editor前置缺口.md | 0 docs/{plan => used}/D3D12后端测试设计.md | 0 docs/{plan => used}/Editor设计与实现.md | 0 docs/{plan => used}/OpenGL后端测试设计.md | 0 docs/{plan => used}/OpenGL测试实施计划.md | 0 .../RHI_OpenGL_State_Not_Applied.md | 0 docs/{plan => used}/RHI抽象层设计与实现.md | 0 ...EditorViewport缺少RenderSurface接入层3.27.md | 120 + ...terial与Shader资产模型暂不满足SRP演进需求.md | 146 + ...ene层缺少MeshFilter与MeshRenderer抽象3.27.md | 129 + .../XCEngine渲染引擎架构设计.md | 0 docs/{plan => used}/XCGameEngine架构设计.md | 0 docs/{plan => used}/仿Unity RHI架构设计.md | 0 docs/{plan => used}/第三阶段计划.md | 0 docs/{plan => used}/第二阶段计划.md | 0 editor/caidan.png | Bin 0 -> 180 bytes editor/color.png | Bin 0 -> 51420 bytes editor/color_xc.png | Bin 0 -> 32137 bytes editor/resources/Icons/scene_icon.png | Bin 9575 -> 926 bytes editor/src/Actions/HierarchyActionRouter.h | 2 +- editor/src/Actions/ProjectActionRouter.h | 74 +- editor/src/Commands/ProjectCommands.h | 98 +- editor/src/Core/IProjectManager.h | 3 +- editor/src/Managers/ProjectManager.h | 3 +- editor/src/UI/BuiltInIcons.cpp | 169 +- editor/src/UI/BuiltInIcons.h | 9 +- editor/src/UI/ColorPicker.h | 52 +- editor/src/UI/Core.h | 3 +- editor/src/UI/PropertyLayout.h | 23 +- editor/src/UI/StyleTokens.h | 114 +- editor/src/UI/Widgets.h | 97 +- editor/src/panels/ProjectPanel.cpp | 236 +- editor/src/panels/ProjectPanel.h | 28 +- editor/unity_grid.png | Bin 0 -> 119665 bytes .../include/XCEngine/RHI/D3D12/D3D12Texture.h | 25 +- .../XCEngine/RHI/OpenGL/OpenGLCommandQueue.h | 2 +- engine/src/Core/Math/Quaternion.cpp | 2 +- engine/src/RHI/D3D12/D3D12Device.cpp | 137 +- engine/src/RHI/D3D12/D3D12ResourceView.cpp | 73 +- engine/src/RHI/D3D12/D3D12Texture.cpp | 48 +- engine/src/RHI/OpenGL/OpenGLDevice.cpp | 126 +- engine/src/RHI/OpenGL/OpenGLTexture.cpp | 25 +- engine/third_party/stb/stb_image.cpp | 3 +- imgui.ini | 55 - project/.xceditor/imgui_layout.ini | 64 + .../Assets/NewFolder4/Models/Character.fbx | 0 project/Assets/NewFolder4/Scenes/Main.unity | 30 + project/Assets/NewFolder4/Scenes/Main.xc | 54 + .../NewFolder4/Scenes/Untitled Scene.xc | 13 + project/Assets/Scenes/Main.xc | 14 +- .../Assets/Scripts/Textures/Grass.png | 0 .../Scripts/Textures/PlayerController.cs | 0 .../Assets/Scripts/Textures/Stone.png | 0 project/Project.xcproject | 3 + tests/CMakeLists.txt | 24 +- tests/Core/Asset/CMakeLists.txt | 2 +- tests/Core/IO/CMakeLists.txt | 2 +- tests/Input/CMakeLists.txt | 2 +- tests/OpenGL/AGENT.md | 54 - tests/OpenGL/CMakeLists.txt | 47 - tests/OpenGL/GT.ppm | 44212 ---------------- tests/OpenGL/README.md | 149 - tests/OpenGL/Shaders/fragmentshader.glsl | 114 - tests/OpenGL/Shaders/vertexshader.glsl | 21 - tests/OpenGL/compare_ppm.py | 75 - tests/OpenGL/main.cpp | 415 - tests/OpenGL/package/README.txt | 55 - tests/OpenGL/package/dll/assimp-vc143-mt.dll | Bin 6686208 -> 0 bytes tests/OpenGL/package/glm/.appveyor.yml | 87 - tests/OpenGL/package/glm/.gitignore | 61 - tests/OpenGL/package/glm/.travis.yml | 735 - tests/OpenGL/package/glm/CMakeLists.txt | 15 - .../glm/cmake/glm/glmConfig-version.cmake | 11 - .../package/glm/cmake/glm/glmConfig.cmake | 22 - tests/OpenGL/package/glm/copying.txt | 54 - .../package/glm/doc/api/a00001_source.html | 493 - .../package/glm/doc/api/a00002_source.html | 121 - .../package/glm/doc/api/a00003_source.html | 182 - .../package/glm/doc/api/a00004_source.html | 905 - .../package/glm/doc/api/a00005_source.html | 781 - .../package/glm/doc/api/a00006_source.html | 262 - tests/OpenGL/package/glm/doc/api/a00007.html | 205 - .../package/glm/doc/api/a00007_source.html | 250 - tests/OpenGL/package/glm/doc/api/a00008.html | 149 - .../package/glm/doc/api/a00008_source.html | 154 - tests/OpenGL/package/glm/doc/api/a00009.html | 223 - .../package/glm/doc/api/a00009_source.html | 212 - tests/OpenGL/package/glm/doc/api/a00010.html | 124 - .../package/glm/doc/api/a00010_source.html | 133 - tests/OpenGL/package/glm/doc/api/a00011.html | 137 - .../package/glm/doc/api/a00011_source.html | 139 - tests/OpenGL/package/glm/doc/api/a00012.html | 134 - .../package/glm/doc/api/a00012_source.html | 136 - tests/OpenGL/package/glm/doc/api/a00013.html | 139 - .../package/glm/doc/api/a00013_source.html | 150 - tests/OpenGL/package/glm/doc/api/a00014.html | 131 - .../package/glm/doc/api/a00014_source.html | 141 - tests/OpenGL/package/glm/doc/api/a00015.html | 267 - .../package/glm/doc/api/a00015_source.html | 276 - tests/OpenGL/package/glm/doc/api/a00016.html | 131 - .../package/glm/doc/api/a00016_source.html | 139 - tests/OpenGL/package/glm/doc/api/a00017.html | 443 - .../package/glm/doc/api/a00017_source.html | 282 - tests/OpenGL/package/glm/doc/api/a00018.html | 141 - .../package/glm/doc/api/a00018_source.html | 145 - .../package/glm/doc/api/a00019_source.html | 150 - .../package/glm/doc/api/a00020_source.html | 130 - tests/OpenGL/package/glm/doc/api/a00021.html | 223 - .../package/glm/doc/api/a00021_source.html | 224 - tests/OpenGL/package/glm/doc/api/a00022.html | 192 - .../package/glm/doc/api/a00022_source.html | 317 - tests/OpenGL/package/glm/doc/api/a00023.html | 244 - .../package/glm/doc/api/a00023_source.html | 254 - tests/OpenGL/package/glm/doc/api/a00024.html | 133 - .../package/glm/doc/api/a00024_source.html | 132 - tests/OpenGL/package/glm/doc/api/a00025.html | 279 - .../package/glm/doc/api/a00025_source.html | 380 - tests/OpenGL/package/glm/doc/api/a00026.html | 143 - .../package/glm/doc/api/a00026_source.html | 147 - tests/OpenGL/package/glm/doc/api/a00027.html | 108 - .../package/glm/doc/api/a00027_source.html | 449 - tests/OpenGL/package/glm/doc/api/a00028.html | 119 - .../package/glm/doc/api/a00028_source.html | 127 - tests/OpenGL/package/glm/doc/api/a00029.html | 183 - .../package/glm/doc/api/a00029_source.html | 219 - tests/OpenGL/package/glm/doc/api/a00030.html | 121 - .../package/glm/doc/api/a00030_source.html | 125 - tests/OpenGL/package/glm/doc/api/a00031.html | 165 - .../package/glm/doc/api/a00031_source.html | 161 - tests/OpenGL/package/glm/doc/api/a00032.html | 151 - .../package/glm/doc/api/a00032_source.html | 154 - tests/OpenGL/package/glm/doc/api/a00033.html | 147 - .../package/glm/doc/api/a00033_source.html | 152 - tests/OpenGL/package/glm/doc/api/a00034.html | 125 - .../package/glm/doc/api/a00034_source.html | 136 - .../package/glm/doc/api/a00035_source.html | 1544 - tests/OpenGL/package/glm/doc/api/a00036.html | 147 - .../package/glm/doc/api/a00036_source.html | 152 - tests/OpenGL/package/glm/doc/api/a00037.html | 108 - .../package/glm/doc/api/a00037_source.html | 154 - tests/OpenGL/package/glm/doc/api/a00038.html | 125 - .../package/glm/doc/api/a00038_source.html | 136 - tests/OpenGL/package/glm/doc/api/a00039.html | 123 - .../package/glm/doc/api/a00039_source.html | 134 - tests/OpenGL/package/glm/doc/api/a00040.html | 109 - .../package/glm/doc/api/a00040_source.html | 232 - tests/OpenGL/package/glm/doc/api/a00041.html | 129 - .../package/glm/doc/api/a00041_source.html | 133 - tests/OpenGL/package/glm/doc/api/a00042.html | 150 - .../package/glm/doc/api/a00042_source.html | 149 - tests/OpenGL/package/glm/doc/api/a00043.html | 167 - .../package/glm/doc/api/a00043_source.html | 185 - tests/OpenGL/package/glm/doc/api/a00044.html | 141 - .../package/glm/doc/api/a00044_source.html | 168 - tests/OpenGL/package/glm/doc/api/a00045.html | 114 - .../package/glm/doc/api/a00045_source.html | 280 - tests/OpenGL/package/glm/doc/api/a00046.html | 123 - .../package/glm/doc/api/a00046_source.html | 132 - .../package/glm/doc/api/a00047_source.html | 2515 - tests/OpenGL/package/glm/doc/api/a00048.html | 108 - .../package/glm/doc/api/a00048_source.html | 110 - tests/OpenGL/package/glm/doc/api/a00049.html | 108 - .../package/glm/doc/api/a00049_source.html | 110 - tests/OpenGL/package/glm/doc/api/a00050.html | 108 - .../package/glm/doc/api/a00050_source.html | 110 - tests/OpenGL/package/glm/doc/api/a00051.html | 108 - .../package/glm/doc/api/a00051_source.html | 110 - tests/OpenGL/package/glm/doc/api/a00052.html | 108 - .../package/glm/doc/api/a00052_source.html | 109 - tests/OpenGL/package/glm/doc/api/a00053.html | 108 - .../package/glm/doc/api/a00053_source.html | 109 - tests/OpenGL/package/glm/doc/api/a00054.html | 108 - .../package/glm/doc/api/a00054_source.html | 109 - tests/OpenGL/package/glm/doc/api/a00055.html | 108 - .../package/glm/doc/api/a00055_source.html | 109 - tests/OpenGL/package/glm/doc/api/a00056.html | 108 - .../package/glm/doc/api/a00056_source.html | 110 - tests/OpenGL/package/glm/doc/api/a00057.html | 135 - .../package/glm/doc/api/a00057_source.html | 216 - tests/OpenGL/package/glm/doc/api/a00058.html | 131 - .../package/glm/doc/api/a00058_source.html | 140 - tests/OpenGL/package/glm/doc/api/a00059.html | 282 - .../package/glm/doc/api/a00059_source.html | 327 - tests/OpenGL/package/glm/doc/api/a00060.html | 108 - .../package/glm/doc/api/a00060_source.html | 123 - tests/OpenGL/package/glm/doc/api/a00061.html | 125 - .../package/glm/doc/api/a00061_source.html | 130 - tests/OpenGL/package/glm/doc/api/a00062.html | 119 - .../package/glm/doc/api/a00062_source.html | 134 - tests/OpenGL/package/glm/doc/api/a00063.html | 120 - .../package/glm/doc/api/a00063_source.html | 114 - tests/OpenGL/package/glm/doc/api/a00064.html | 132 - .../package/glm/doc/api/a00064_source.html | 126 - tests/OpenGL/package/glm/doc/api/a00065.html | 117 - .../package/glm/doc/api/a00065_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00066.html | 123 - .../package/glm/doc/api/a00066_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00067.html | 117 - .../package/glm/doc/api/a00067_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00068.html | 123 - .../package/glm/doc/api/a00068_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00069.html | 117 - .../package/glm/doc/api/a00069_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00070.html | 123 - .../package/glm/doc/api/a00070_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00071.html | 120 - .../package/glm/doc/api/a00071_source.html | 114 - tests/OpenGL/package/glm/doc/api/a00072.html | 132 - .../package/glm/doc/api/a00072_source.html | 126 - tests/OpenGL/package/glm/doc/api/a00073.html | 117 - .../package/glm/doc/api/a00073_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00074.html | 123 - .../package/glm/doc/api/a00074_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00075.html | 117 - .../package/glm/doc/api/a00075_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00076.html | 123 - .../package/glm/doc/api/a00076_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00077.html | 117 - .../package/glm/doc/api/a00077_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00078.html | 123 - .../package/glm/doc/api/a00078_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00079.html | 120 - .../package/glm/doc/api/a00079_source.html | 114 - tests/OpenGL/package/glm/doc/api/a00080.html | 132 - .../package/glm/doc/api/a00080_source.html | 126 - tests/OpenGL/package/glm/doc/api/a00081.html | 131 - .../package/glm/doc/api/a00081_source.html | 142 - tests/OpenGL/package/glm/doc/api/a00082.html | 120 - .../package/glm/doc/api/a00082_source.html | 114 - tests/OpenGL/package/glm/doc/api/a00083.html | 132 - .../package/glm/doc/api/a00083_source.html | 126 - tests/OpenGL/package/glm/doc/api/a00084.html | 117 - .../package/glm/doc/api/a00084_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00085.html | 123 - .../package/glm/doc/api/a00085_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00086.html | 117 - .../package/glm/doc/api/a00086_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00087.html | 123 - .../package/glm/doc/api/a00087_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00088.html | 117 - .../package/glm/doc/api/a00088_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00089.html | 123 - .../package/glm/doc/api/a00089_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00090.html | 120 - .../package/glm/doc/api/a00090_source.html | 114 - tests/OpenGL/package/glm/doc/api/a00091.html | 132 - .../package/glm/doc/api/a00091_source.html | 126 - tests/OpenGL/package/glm/doc/api/a00092.html | 117 - .../package/glm/doc/api/a00092_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00093.html | 123 - .../package/glm/doc/api/a00093_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00094.html | 117 - .../package/glm/doc/api/a00094_source.html | 111 - .../package/glm/doc/api/a00095_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00096.html | 117 - .../package/glm/doc/api/a00096_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00097.html | 123 - .../package/glm/doc/api/a00097_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00098.html | 116 - .../package/glm/doc/api/a00098_source.html | 114 - tests/OpenGL/package/glm/doc/api/a00099.html | 132 - .../package/glm/doc/api/a00099_source.html | 126 - tests/OpenGL/package/glm/doc/api/a00100.html | 403 - .../package/glm/doc/api/a00100_source.html | 477 - tests/OpenGL/package/glm/doc/api/a00101.html | 132 - .../package/glm/doc/api/a00101_source.html | 140 - tests/OpenGL/package/glm/doc/api/a00102.html | 123 - .../package/glm/doc/api/a00102_source.html | 128 - tests/OpenGL/package/glm/doc/api/a00103.html | 165 - .../package/glm/doc/api/a00103_source.html | 186 - tests/OpenGL/package/glm/doc/api/a00104.html | 163 - .../package/glm/doc/api/a00104_source.html | 175 - tests/OpenGL/package/glm/doc/api/a00105.html | 142 - .../package/glm/doc/api/a00105_source.html | 155 - tests/OpenGL/package/glm/doc/api/a00106.html | 149 - .../package/glm/doc/api/a00106_source.html | 151 - tests/OpenGL/package/glm/doc/api/a00107.html | 154 - .../package/glm/doc/api/a00107_source.html | 149 - tests/OpenGL/package/glm/doc/api/a00108.html | 143 - .../package/glm/doc/api/a00108_source.html | 155 - tests/OpenGL/package/glm/doc/api/a00109.html | 113 - .../package/glm/doc/api/a00109_source.html | 116 - tests/OpenGL/package/glm/doc/api/a00110.html | 136 - .../package/glm/doc/api/a00110_source.html | 152 - tests/OpenGL/package/glm/doc/api/a00111.html | 120 - .../package/glm/doc/api/a00111_source.html | 127 - tests/OpenGL/package/glm/doc/api/a00112.html | 127 - .../package/glm/doc/api/a00112_source.html | 139 - tests/OpenGL/package/glm/doc/api/a00113.html | 159 - .../package/glm/doc/api/a00113_source.html | 158 - tests/OpenGL/package/glm/doc/api/a00114.html | 121 - .../package/glm/doc/api/a00114_source.html | 124 - tests/OpenGL/package/glm/doc/api/a00115.html | 125 - .../package/glm/doc/api/a00115_source.html | 128 - tests/OpenGL/package/glm/doc/api/a00116.html | 159 - .../package/glm/doc/api/a00116_source.html | 158 - tests/OpenGL/package/glm/doc/api/a00117.html | 127 - .../package/glm/doc/api/a00117_source.html | 134 - tests/OpenGL/package/glm/doc/api/a00118.html | 125 - .../package/glm/doc/api/a00118_source.html | 129 - tests/OpenGL/package/glm/doc/api/a00119.html | 333 - .../package/glm/doc/api/a00119_source.html | 356 - tests/OpenGL/package/glm/doc/api/a00120.html | 153 - .../package/glm/doc/api/a00120_source.html | 155 - tests/OpenGL/package/glm/doc/api/a00121.html | 121 - .../package/glm/doc/api/a00121_source.html | 125 - tests/OpenGL/package/glm/doc/api/a00122.html | 123 - .../package/glm/doc/api/a00122_source.html | 130 - tests/OpenGL/package/glm/doc/api/a00123.html | 119 - .../package/glm/doc/api/a00123_source.html | 124 - .../package/glm/doc/api/a00124_source.html | 332 - tests/OpenGL/package/glm/doc/api/a00125.html | 177 - .../package/glm/doc/api/a00125_source.html | 195 - tests/OpenGL/package/glm/doc/api/a00126.html | 181 - .../package/glm/doc/api/a00126_source.html | 221 - tests/OpenGL/package/glm/doc/api/a00127.html | 142 - .../package/glm/doc/api/a00127_source.html | 149 - tests/OpenGL/package/glm/doc/api/a00128.html | 118 - .../package/glm/doc/api/a00128_source.html | 118 - tests/OpenGL/package/glm/doc/api/a00129.html | 123 - .../package/glm/doc/api/a00129_source.html | 124 - tests/OpenGL/package/glm/doc/api/a00130.html | 130 - .../package/glm/doc/api/a00130_source.html | 135 - tests/OpenGL/package/glm/doc/api/a00131.html | 118 - .../package/glm/doc/api/a00131_source.html | 118 - tests/OpenGL/package/glm/doc/api/a00132.html | 126 - .../package/glm/doc/api/a00132_source.html | 124 - tests/OpenGL/package/glm/doc/api/a00133.html | 130 - .../package/glm/doc/api/a00133_source.html | 134 - tests/OpenGL/package/glm/doc/api/a00134.html | 130 - .../package/glm/doc/api/a00134_source.html | 131 - tests/OpenGL/package/glm/doc/api/a00135.html | 118 - .../package/glm/doc/api/a00135_source.html | 123 - tests/OpenGL/package/glm/doc/api/a00136.html | 126 - .../package/glm/doc/api/a00136_source.html | 134 - tests/OpenGL/package/glm/doc/api/a00137.html | 145 - .../package/glm/doc/api/a00137_source.html | 145 - tests/OpenGL/package/glm/doc/api/a00138.html | 109 - .../package/glm/doc/api/a00138_source.html | 185 - tests/OpenGL/package/glm/doc/api/a00139.html | 127 - .../package/glm/doc/api/a00139_source.html | 133 - tests/OpenGL/package/glm/doc/api/a00140.html | 163 - .../package/glm/doc/api/a00140_source.html | 165 - tests/OpenGL/package/glm/doc/api/a00141.html | 127 - .../package/glm/doc/api/a00141_source.html | 137 - tests/OpenGL/package/glm/doc/api/a00142.html | 161 - .../package/glm/doc/api/a00142_source.html | 188 - tests/OpenGL/package/glm/doc/api/a00143.html | 165 - .../package/glm/doc/api/a00143_source.html | 163 - tests/OpenGL/package/glm/doc/api/a00144.html | 154 - .../package/glm/doc/api/a00144_source.html | 150 - tests/OpenGL/package/glm/doc/api/a00145.html | 124 - .../package/glm/doc/api/a00145_source.html | 124 - tests/OpenGL/package/glm/doc/api/a00146.html | 130 - .../package/glm/doc/api/a00146_source.html | 159 - tests/OpenGL/package/glm/doc/api/a00147.html | 143 - .../package/glm/doc/api/a00147_source.html | 150 - tests/OpenGL/package/glm/doc/api/a00148.html | 112 - .../package/glm/doc/api/a00148_source.html | 174 - tests/OpenGL/package/glm/doc/api/a00149.html | 130 - .../package/glm/doc/api/a00149_source.html | 130 - tests/OpenGL/package/glm/doc/api/a00150.html | 109 - .../package/glm/doc/api/a00150_source.html | 122 - tests/OpenGL/package/glm/doc/api/a00151.html | 130 - .../package/glm/doc/api/a00151_source.html | 159 - tests/OpenGL/package/glm/doc/api/a00152.html | 136 - .../package/glm/doc/api/a00152_source.html | 134 - .../package/glm/doc/api/a00153_source.html | 1212 - tests/OpenGL/package/glm/doc/api/a00154.html | 127 - .../package/glm/doc/api/a00154_source.html | 148 - tests/OpenGL/package/glm/doc/api/a00155.html | 141 - .../package/glm/doc/api/a00155_source.html | 145 - tests/OpenGL/package/glm/doc/api/a00156.html | 123 - .../package/glm/doc/api/a00156_source.html | 133 - tests/OpenGL/package/glm/doc/api/a00157.html | 119 - .../package/glm/doc/api/a00157_source.html | 127 - tests/OpenGL/package/glm/doc/api/a00158.html | 133 - .../package/glm/doc/api/a00158_source.html | 138 - tests/OpenGL/package/glm/doc/api/a00159.html | 153 - .../package/glm/doc/api/a00159_source.html | 165 - tests/OpenGL/package/glm/doc/api/a00160.html | 175 - .../package/glm/doc/api/a00160_source.html | 172 - tests/OpenGL/package/glm/doc/api/a00161.html | 1523 - .../package/glm/doc/api/a00161_source.html | 1401 - tests/OpenGL/package/glm/doc/api/a00162.html | 735 - .../package/glm/doc/api/a00162_source.html | 842 - .../package/glm/doc/api/a00163_source.html | 169 - .../package/glm/doc/api/a00164_source.html | 116 - tests/OpenGL/package/glm/doc/api/a00165.html | 108 - .../package/glm/doc/api/a00165_source.html | 277 - tests/OpenGL/package/glm/doc/api/a00166.html | 108 - .../package/glm/doc/api/a00166_source.html | 260 - tests/OpenGL/package/glm/doc/api/a00167.html | 108 - .../package/glm/doc/api/a00167_source.html | 262 - tests/OpenGL/package/glm/doc/api/a00168.html | 108 - .../package/glm/doc/api/a00168_source.html | 268 - tests/OpenGL/package/glm/doc/api/a00169.html | 108 - .../package/glm/doc/api/a00169_source.html | 284 - tests/OpenGL/package/glm/doc/api/a00170.html | 108 - .../package/glm/doc/api/a00170_source.html | 267 - tests/OpenGL/package/glm/doc/api/a00171.html | 108 - .../package/glm/doc/api/a00171_source.html | 272 - tests/OpenGL/package/glm/doc/api/a00172.html | 108 - .../package/glm/doc/api/a00172_source.html | 272 - tests/OpenGL/package/glm/doc/api/a00173.html | 108 - .../package/glm/doc/api/a00173_source.html | 289 - tests/OpenGL/package/glm/doc/api/a00174.html | 111 - .../package/glm/doc/api/a00174_source.html | 1682 - tests/OpenGL/package/glm/doc/api/a00175.html | 249 - .../package/glm/doc/api/a00175_source.html | 247 - tests/OpenGL/package/glm/doc/api/a00176.html | 108 - .../package/glm/doc/api/a00176_source.html | 269 - tests/OpenGL/package/glm/doc/api/a00177.html | 109 - .../package/glm/doc/api/a00177_source.html | 171 - tests/OpenGL/package/glm/doc/api/a00178.html | 108 - .../package/glm/doc/api/a00178_source.html | 402 - tests/OpenGL/package/glm/doc/api/a00179.html | 108 - .../package/glm/doc/api/a00179_source.html | 493 - tests/OpenGL/package/glm/doc/api/a00180.html | 108 - .../package/glm/doc/api/a00180_source.html | 523 - tests/OpenGL/package/glm/doc/api/a00181.html | 108 - .../package/glm/doc/api/a00181_source.html | 584 - tests/OpenGL/package/glm/doc/api/a00182.html | 169 - .../package/glm/doc/api/a00182_source.html | 159 - tests/OpenGL/package/glm/doc/api/a00183.html | 109 - .../package/glm/doc/api/a00183_source.html | 118 - tests/OpenGL/package/glm/doc/api/a00184.html | 108 - .../package/glm/doc/api/a00184_source.html | 121 - tests/OpenGL/package/glm/doc/api/a00185.html | 108 - .../package/glm/doc/api/a00185_source.html | 121 - tests/OpenGL/package/glm/doc/api/a00186.html | 108 - .../package/glm/doc/api/a00186_source.html | 122 - tests/OpenGL/package/glm/doc/api/a00187.html | 109 - .../package/glm/doc/api/a00187_source.html | 2871 - tests/OpenGL/package/glm/doc/api/a00188.html | 131 - .../package/glm/doc/api/a00188_source.html | 134 - tests/OpenGL/package/glm/doc/api/a00189.html | 118 - .../package/glm/doc/api/a00189_source.html | 116 - tests/OpenGL/package/glm/doc/api/a00190.html | 126 - .../package/glm/doc/api/a00190_source.html | 122 - tests/OpenGL/package/glm/doc/api/a00191.html | 117 - .../package/glm/doc/api/a00191_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00192.html | 123 - .../package/glm/doc/api/a00192_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00193.html | 117 - .../package/glm/doc/api/a00193_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00194.html | 123 - .../package/glm/doc/api/a00194_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00195.html | 117 - .../package/glm/doc/api/a00195_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00196.html | 123 - .../package/glm/doc/api/a00196_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00197.html | 162 - .../package/glm/doc/api/a00197_source.html | 157 - tests/OpenGL/package/glm/doc/api/a00198.html | 118 - .../package/glm/doc/api/a00198_source.html | 116 - tests/OpenGL/package/glm/doc/api/a00199.html | 126 - .../package/glm/doc/api/a00199_source.html | 122 - tests/OpenGL/package/glm/doc/api/a00200.html | 117 - .../package/glm/doc/api/a00200_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00201.html | 123 - .../package/glm/doc/api/a00201_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00202.html | 117 - .../package/glm/doc/api/a00202_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00203.html | 123 - .../package/glm/doc/api/a00203_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00204.html | 117 - .../package/glm/doc/api/a00204_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00205.html | 123 - .../package/glm/doc/api/a00205_source.html | 118 - tests/OpenGL/package/glm/doc/api/a00206.html | 118 - .../package/glm/doc/api/a00206_source.html | 116 - tests/OpenGL/package/glm/doc/api/a00207.html | 126 - .../package/glm/doc/api/a00207_source.html | 122 - tests/OpenGL/package/glm/doc/api/a00208.html | 117 - .../package/glm/doc/api/a00208_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00209.html | 123 - .../package/glm/doc/api/a00209_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00210.html | 117 - .../package/glm/doc/api/a00210_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00211.html | 123 - .../package/glm/doc/api/a00211_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00212.html | 117 - .../package/glm/doc/api/a00212_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00213.html | 123 - .../package/glm/doc/api/a00213_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00214.html | 118 - .../package/glm/doc/api/a00214_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00215.html | 126 - .../package/glm/doc/api/a00215_source.html | 122 - tests/OpenGL/package/glm/doc/api/a00216.html | 117 - .../package/glm/doc/api/a00216_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00217.html | 123 - .../package/glm/doc/api/a00217_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00218.html | 117 - .../package/glm/doc/api/a00218_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00219.html | 123 - .../package/glm/doc/api/a00219_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00220.html | 117 - .../package/glm/doc/api/a00220_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00221.html | 123 - .../package/glm/doc/api/a00221_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00222.html | 157 - .../package/glm/doc/api/a00222_source.html | 158 - tests/OpenGL/package/glm/doc/api/a00223.html | 139 - .../package/glm/doc/api/a00223_source.html | 147 - tests/OpenGL/package/glm/doc/api/a00224.html | 149 - .../package/glm/doc/api/a00224_source.html | 143 - tests/OpenGL/package/glm/doc/api/a00225.html | 151 - .../package/glm/doc/api/a00225_source.html | 148 - tests/OpenGL/package/glm/doc/api/a00226.html | 118 - .../package/glm/doc/api/a00226_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00227.html | 123 - .../package/glm/doc/api/a00227_source.html | 122 - tests/OpenGL/package/glm/doc/api/a00228.html | 117 - .../package/glm/doc/api/a00228_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00229.html | 123 - .../package/glm/doc/api/a00229_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00230.html | 117 - .../package/glm/doc/api/a00230_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00231.html | 123 - .../package/glm/doc/api/a00231_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00232.html | 117 - .../package/glm/doc/api/a00232_source.html | 111 - tests/OpenGL/package/glm/doc/api/a00233.html | 123 - .../package/glm/doc/api/a00233_source.html | 117 - tests/OpenGL/package/glm/doc/api/a00234.html | 146 - .../package/glm/doc/api/a00234_source.html | 139 - tests/OpenGL/package/glm/doc/api/a00235.html | 131 - .../package/glm/doc/api/a00235_source.html | 137 - tests/OpenGL/package/glm/doc/api/a00241.html | 1595 - tests/OpenGL/package/glm/doc/api/a00242.html | 375 - tests/OpenGL/package/glm/doc/api/a00243.html | 2717 - tests/OpenGL/package/glm/doc/api/a00244.html | 97 - tests/OpenGL/package/glm/doc/api/a00245.html | 539 - tests/OpenGL/package/glm/doc/api/a00246.html | 576 - tests/OpenGL/package/glm/doc/api/a00247.html | 444 - tests/OpenGL/package/glm/doc/api/a00248.html | 402 - tests/OpenGL/package/glm/doc/api/a00249.html | 121 - tests/OpenGL/package/glm/doc/api/a00250.html | 163 - tests/OpenGL/package/glm/doc/api/a00251.html | 100 - tests/OpenGL/package/glm/doc/api/a00252.html | 121 - tests/OpenGL/package/glm/doc/api/a00253.html | 114 - tests/OpenGL/package/glm/doc/api/a00254.html | 248 - tests/OpenGL/package/glm/doc/api/a00255.html | 280 - tests/OpenGL/package/glm/doc/api/a00256.html | 293 - tests/OpenGL/package/glm/doc/api/a00257.html | 218 - tests/OpenGL/package/glm/doc/api/a00258.html | 570 - tests/OpenGL/package/glm/doc/api/a00259.html | 112 - tests/OpenGL/package/glm/doc/api/a00260.html | 119 - tests/OpenGL/package/glm/doc/api/a00261.html | 336 - tests/OpenGL/package/glm/doc/api/a00262.html | 100 - tests/OpenGL/package/glm/doc/api/a00263.html | 119 - tests/OpenGL/package/glm/doc/api/a00264.html | 99 - tests/OpenGL/package/glm/doc/api/a00265.html | 107 - tests/OpenGL/package/glm/doc/api/a00266.html | 114 - tests/OpenGL/package/glm/doc/api/a00267.html | 674 - tests/OpenGL/package/glm/doc/api/a00268.html | 109 - tests/OpenGL/package/glm/doc/api/a00269.html | 115 - tests/OpenGL/package/glm/doc/api/a00270.html | 109 - tests/OpenGL/package/glm/doc/api/a00271.html | 115 - tests/OpenGL/package/glm/doc/api/a00272.html | 109 - tests/OpenGL/package/glm/doc/api/a00273.html | 114 - tests/OpenGL/package/glm/doc/api/a00274.html | 510 - tests/OpenGL/package/glm/doc/api/a00275.html | 484 - tests/OpenGL/package/glm/doc/api/a00276.html | 109 - tests/OpenGL/package/glm/doc/api/a00277.html | 163 - tests/OpenGL/package/glm/doc/api/a00278.html | 101 - tests/OpenGL/package/glm/doc/api/a00279.html | 431 - tests/OpenGL/package/glm/doc/api/a00280.html | 165 - tests/OpenGL/package/glm/doc/api/a00281.html | 402 - tests/OpenGL/package/glm/doc/api/a00282.html | 1101 - tests/OpenGL/package/glm/doc/api/a00283.html | 563 - tests/OpenGL/package/glm/doc/api/a00284.html | 1689 - tests/OpenGL/package/glm/doc/api/a00285.html | 211 - tests/OpenGL/package/glm/doc/api/a00286.html | 163 - tests/OpenGL/package/glm/doc/api/a00287.html | 289 - tests/OpenGL/package/glm/doc/api/a00288.html | 1228 - tests/OpenGL/package/glm/doc/api/a00289.html | 187 - tests/OpenGL/package/glm/doc/api/a00290.html | 697 - tests/OpenGL/package/glm/doc/api/a00291.html | 263 - tests/OpenGL/package/glm/doc/api/a00292.html | 202 - tests/OpenGL/package/glm/doc/api/a00293.html | 247 - tests/OpenGL/package/glm/doc/api/a00294.html | 2023 - tests/OpenGL/package/glm/doc/api/a00295.html | 173 - tests/OpenGL/package/glm/doc/api/a00296.html | 96 - tests/OpenGL/package/glm/doc/api/a00297.html | 182 - tests/OpenGL/package/glm/doc/api/a00298.html | 2034 - tests/OpenGL/package/glm/doc/api/a00299.html | 619 - tests/OpenGL/package/glm/doc/api/a00300.html | 320 - tests/OpenGL/package/glm/doc/api/a00301.html | 460 - tests/OpenGL/package/glm/doc/api/a00302.html | 547 - tests/OpenGL/package/glm/doc/api/a00303.html | 1510 - tests/OpenGL/package/glm/doc/api/a00304.html | 8955 ---- tests/OpenGL/package/glm/doc/api/a00305.html | 873 - tests/OpenGL/package/glm/doc/api/a00306.html | 95 - tests/OpenGL/package/glm/doc/api/a00307.html | 95 - tests/OpenGL/package/glm/doc/api/a00308.html | 1357 - tests/OpenGL/package/glm/doc/api/a00309.html | 322 - tests/OpenGL/package/glm/doc/api/a00310.html | 147 - tests/OpenGL/package/glm/doc/api/a00311.html | 122 - tests/OpenGL/package/glm/doc/api/a00312.html | 261 - tests/OpenGL/package/glm/doc/api/a00313.html | 199 - tests/OpenGL/package/glm/doc/api/a00314.html | 257 - tests/OpenGL/package/glm/doc/api/a00315.html | 430 - tests/OpenGL/package/glm/doc/api/a00316.html | 241 - tests/OpenGL/package/glm/doc/api/a00317.html | 547 - tests/OpenGL/package/glm/doc/api/a00318.html | 892 - tests/OpenGL/package/glm/doc/api/a00319.html | 1609 - tests/OpenGL/package/glm/doc/api/a00320.html | 142 - tests/OpenGL/package/glm/doc/api/a00321.html | 831 - tests/OpenGL/package/glm/doc/api/a00322.html | 143 - tests/OpenGL/package/glm/doc/api/a00323.html | 409 - tests/OpenGL/package/glm/doc/api/a00324.html | 332 - tests/OpenGL/package/glm/doc/api/a00325.html | 296 - tests/OpenGL/package/glm/doc/api/a00326.html | 181 - tests/OpenGL/package/glm/doc/api/a00327.html | 187 - tests/OpenGL/package/glm/doc/api/a00328.html | 181 - tests/OpenGL/package/glm/doc/api/a00329.html | 95 - tests/OpenGL/package/glm/doc/api/a00330.html | 366 - tests/OpenGL/package/glm/doc/api/a00331.html | 451 - tests/OpenGL/package/glm/doc/api/a00332.html | 97 - tests/OpenGL/package/glm/doc/api/a00333.html | 169 - tests/OpenGL/package/glm/doc/api/a00334.html | 149 - tests/OpenGL/package/glm/doc/api/a00335.html | 160 - tests/OpenGL/package/glm/doc/api/a00336.html | 197 - tests/OpenGL/package/glm/doc/api/a00337.html | 237 - tests/OpenGL/package/glm/doc/api/a00338.html | 475 - tests/OpenGL/package/glm/doc/api/a00339.html | 379 - tests/OpenGL/package/glm/doc/api/a00340.html | 367 - tests/OpenGL/package/glm/doc/api/a00341.html | 298 - tests/OpenGL/package/glm/doc/api/a00342.html | 107 - tests/OpenGL/package/glm/doc/api/a00343.html | 399 - tests/OpenGL/package/glm/doc/api/a00344.html | 142 - tests/OpenGL/package/glm/doc/api/a00345.html | 171 - tests/OpenGL/package/glm/doc/api/a00346.html | 142 - tests/OpenGL/package/glm/doc/api/a00347.html | 172 - tests/OpenGL/package/glm/doc/api/a00348.html | 159 - tests/OpenGL/package/glm/doc/api/a00349.html | 136 - tests/OpenGL/package/glm/doc/api/a00350.html | 149 - tests/OpenGL/package/glm/doc/api/a00351.html | 143 - tests/OpenGL/package/glm/doc/api/a00352.html | 622 - tests/OpenGL/package/glm/doc/api/a00353.html | 96 - tests/OpenGL/package/glm/doc/api/a00354.html | 183 - tests/OpenGL/package/glm/doc/api/a00355.html | 209 - tests/OpenGL/package/glm/doc/api/a00356.html | 492 - tests/OpenGL/package/glm/doc/api/a00357.html | 95 - tests/OpenGL/package/glm/doc/api/a00358.html | 256 - tests/OpenGL/package/glm/doc/api/a00359.html | 263 - tests/OpenGL/package/glm/doc/api/a00360.html | 127 - tests/OpenGL/package/glm/doc/api/a00361.html | 139 - tests/OpenGL/package/glm/doc/api/a00362.html | 188 - tests/OpenGL/package/glm/doc/api/a00363.html | 423 - tests/OpenGL/package/glm/doc/api/a00364.html | 7945 --- tests/OpenGL/package/glm/doc/api/a00365.html | 96 - tests/OpenGL/package/glm/doc/api/a00366.html | 95 - tests/OpenGL/package/glm/doc/api/a00367.html | 208 - tests/OpenGL/package/glm/doc/api/a00368.html | 319 - tests/OpenGL/package/glm/doc/api/a00369.html | 195 - tests/OpenGL/package/glm/doc/api/a00370.html | 639 - tests/OpenGL/package/glm/doc/api/a00371.html | 293 - tests/OpenGL/package/glm/doc/api/a00372.html | 420 - tests/OpenGL/package/glm/doc/api/a00373.html | 621 - tests/OpenGL/package/glm/doc/api/a00374.html | 452 - .../OpenGL/package/glm/doc/api/arrowdown.png | Bin 246 -> 0 bytes .../OpenGL/package/glm/doc/api/arrowright.png | Bin 229 -> 0 bytes tests/OpenGL/package/glm/doc/api/bc_s.png | Bin 600 -> 0 bytes tests/OpenGL/package/glm/doc/api/bdwn.png | Bin 200 -> 0 bytes tests/OpenGL/package/glm/doc/api/closed.png | Bin 194 -> 0 bytes .../dir_033f5edb0915b828d2c46ed4804e5503.html | 164 - .../dir_3a581ba30d25676e4b797b1f96d53b45.html | 100 - .../dir_44e5e654415abd9ca6fdeaddaff8565e.html | 102 - .../dir_4c6bd29c73fa4e5a2509e1c15f846751.html | 158 - .../dir_5189610d3ba09ec39b766fb99b34cd93.html | 100 - .../dir_6b66465792d005310484819a0eb0b0d3.html | 403 - .../dir_9e5fe034a00e89334fd5186c3e7db156.html | 100 - .../dir_a8bee7be44182a33f3820393ae0b105d.html | 100 - .../dir_cef2d71d502cb69a9252bca2297d9549.html | 177 - .../dir_d9496f0844b48bc7e53b5af8c99b9ab2.html | 100 - .../dir_f35778ec600a1b9bbc4524e62e226aa2.html | 287 - tests/OpenGL/package/glm/doc/api/doc.png | Bin 624 -> 0 bytes tests/OpenGL/package/glm/doc/api/doxygen.css | 1496 - tests/OpenGL/package/glm/doc/api/doxygen.png | Bin 2419 -> 0 bytes .../OpenGL/package/glm/doc/api/dynsections.js | 104 - tests/OpenGL/package/glm/doc/api/files.html | 334 - .../package/glm/doc/api/folderclosed.png | Bin 573 -> 0 bytes .../OpenGL/package/glm/doc/api/folderopen.png | Bin 596 -> 0 bytes tests/OpenGL/package/glm/doc/api/index.html | 95 - tests/OpenGL/package/glm/doc/api/jquery.js | 68 - .../OpenGL/package/glm/doc/api/logo-mini.png | Bin 11967 -> 0 bytes tests/OpenGL/package/glm/doc/api/modules.html | 228 - tests/OpenGL/package/glm/doc/api/nav_f.png | Bin 233 -> 0 bytes tests/OpenGL/package/glm/doc/api/nav_g.png | Bin 95 -> 0 bytes tests/OpenGL/package/glm/doc/api/nav_h.png | Bin 188 -> 0 bytes tests/OpenGL/package/glm/doc/api/open.png | Bin 177 -> 0 bytes .../package/glm/doc/api/search/all_0.html | 26 - .../package/glm/doc/api/search/all_0.js | 209 - .../package/glm/doc/api/search/all_1.html | 26 - .../package/glm/doc/api/search/all_1.js | 41 - .../package/glm/doc/api/search/all_10.html | 26 - .../package/glm/doc/api/search/all_10.js | 50 - .../package/glm/doc/api/search/all_11.html | 26 - .../package/glm/doc/api/search/all_11.js | 41 - .../package/glm/doc/api/search/all_12.html | 26 - .../package/glm/doc/api/search/all_12.js | 97 - .../package/glm/doc/api/search/all_13.html | 26 - .../package/glm/doc/api/search/all_13.js | 62 - .../package/glm/doc/api/search/all_14.html | 26 - .../package/glm/doc/api/search/all_14.js | 6 - .../package/glm/doc/api/search/all_15.html | 26 - .../package/glm/doc/api/search/all_15.js | 7 - .../package/glm/doc/api/search/all_16.html | 26 - .../package/glm/doc/api/search/all_16.js | 4 - .../package/glm/doc/api/search/all_2.html | 26 - .../package/glm/doc/api/search/all_2.js | 51 - .../package/glm/doc/api/search/all_3.html | 26 - .../package/glm/doc/api/search/all_3.js | 59 - .../package/glm/doc/api/search/all_4.html | 26 - .../package/glm/doc/api/search/all_4.js | 68 - .../package/glm/doc/api/search/all_5.html | 26 - .../package/glm/doc/api/search/all_5.js | 131 - .../package/glm/doc/api/search/all_6.html | 26 - .../package/glm/doc/api/search/all_6.js | 143 - .../package/glm/doc/api/search/all_7.html | 26 - .../package/glm/doc/api/search/all_7.js | 194 - .../package/glm/doc/api/search/all_8.html | 26 - .../package/glm/doc/api/search/all_8.js | 93 - .../package/glm/doc/api/search/all_9.html | 26 - .../package/glm/doc/api/search/all_9.js | 214 - .../package/glm/doc/api/search/all_a.html | 26 - .../package/glm/doc/api/search/all_a.js | 297 - .../package/glm/doc/api/search/all_b.html | 26 - .../package/glm/doc/api/search/all_b.js | 15 - .../package/glm/doc/api/search/all_c.html | 26 - .../package/glm/doc/api/search/all_c.js | 27 - .../package/glm/doc/api/search/all_d.html | 26 - .../package/glm/doc/api/search/all_d.js | 263 - .../package/glm/doc/api/search/all_e.html | 26 - .../package/glm/doc/api/search/all_e.js | 31 - .../package/glm/doc/api/search/all_f.html | 26 - .../package/glm/doc/api/search/all_f.js | 43 - .../package/glm/doc/api/search/close.png | Bin 273 -> 0 bytes .../package/glm/doc/api/search/files_0.html | 26 - .../package/glm/doc/api/search/files_0.js | 4 - .../package/glm/doc/api/search/files_1.html | 26 - .../package/glm/doc/api/search/files_1.js | 5 - .../package/glm/doc/api/search/files_10.html | 26 - .../package/glm/doc/api/search/files_10.js | 13 - .../package/glm/doc/api/search/files_11.html | 26 - .../package/glm/doc/api/search/files_11.js | 24 - .../package/glm/doc/api/search/files_12.html | 26 - .../package/glm/doc/api/search/files_12.js | 4 - .../package/glm/doc/api/search/files_13.html | 26 - .../package/glm/doc/api/search/files_13.js | 54 - .../package/glm/doc/api/search/files_14.html | 26 - .../package/glm/doc/api/search/files_14.js | 4 - .../package/glm/doc/api/search/files_2.html | 26 - .../package/glm/doc/api/search/files_2.js | 10 - .../package/glm/doc/api/search/files_3.html | 26 - .../package/glm/doc/api/search/files_3.js | 4 - .../package/glm/doc/api/search/files_4.html | 26 - .../package/glm/doc/api/search/files_4.js | 14 - .../package/glm/doc/api/search/files_5.html | 26 - .../package/glm/doc/api/search/files_5.js | 7 - .../package/glm/doc/api/search/files_6.html | 26 - .../package/glm/doc/api/search/files_6.js | 18 - .../package/glm/doc/api/search/files_7.html | 26 - .../package/glm/doc/api/search/files_7.js | 5 - .../package/glm/doc/api/search/files_8.html | 26 - .../package/glm/doc/api/search/files_8.js | 6 - .../package/glm/doc/api/search/files_9.html | 26 - .../package/glm/doc/api/search/files_9.js | 4 - .../package/glm/doc/api/search/files_a.html | 26 - .../package/glm/doc/api/search/files_a.js | 64 - .../package/glm/doc/api/search/files_b.html | 26 - .../package/glm/doc/api/search/files_b.js | 8 - .../package/glm/doc/api/search/files_c.html | 26 - .../package/glm/doc/api/search/files_c.js | 5 - .../package/glm/doc/api/search/files_d.html | 26 - .../package/glm/doc/api/search/files_d.js | 7 - .../package/glm/doc/api/search/files_e.html | 26 - .../package/glm/doc/api/search/files_e.js | 13 - .../package/glm/doc/api/search/files_f.html | 26 - .../package/glm/doc/api/search/files_f.js | 10 - .../glm/doc/api/search/functions_0.html | 26 - .../package/glm/doc/api/search/functions_0.js | 31 - .../glm/doc/api/search/functions_1.html | 26 - .../package/glm/doc/api/search/functions_1.js | 20 - .../glm/doc/api/search/functions_10.html | 26 - .../glm/doc/api/search/functions_10.js | 30 - .../glm/doc/api/search/functions_11.html | 26 - .../glm/doc/api/search/functions_11.js | 20 - .../glm/doc/api/search/functions_12.html | 26 - .../glm/doc/api/search/functions_12.js | 52 - .../glm/doc/api/search/functions_13.html | 26 - .../glm/doc/api/search/functions_13.js | 4 - .../glm/doc/api/search/functions_14.html | 26 - .../glm/doc/api/search/functions_14.js | 4 - .../glm/doc/api/search/functions_15.html | 26 - .../glm/doc/api/search/functions_15.js | 7 - .../glm/doc/api/search/functions_16.html | 26 - .../glm/doc/api/search/functions_16.js | 4 - .../glm/doc/api/search/functions_2.html | 26 - .../package/glm/doc/api/search/functions_2.js | 42 - .../glm/doc/api/search/functions_3.html | 26 - .../package/glm/doc/api/search/functions_3.js | 24 - .../glm/doc/api/search/functions_4.html | 26 - .../package/glm/doc/api/search/functions_4.js | 55 - .../glm/doc/api/search/functions_5.html | 26 - .../package/glm/doc/api/search/functions_5.js | 51 - .../glm/doc/api/search/functions_6.html | 26 - .../package/glm/doc/api/search/functions_6.js | 9 - .../glm/doc/api/search/functions_7.html | 26 - .../package/glm/doc/api/search/functions_7.js | 7 - .../glm/doc/api/search/functions_8.html | 26 - .../package/glm/doc/api/search/functions_8.js | 31 - .../glm/doc/api/search/functions_9.html | 26 - .../package/glm/doc/api/search/functions_9.js | 28 - .../glm/doc/api/search/functions_a.html | 26 - .../package/glm/doc/api/search/functions_a.js | 36 - .../glm/doc/api/search/functions_b.html | 26 - .../package/glm/doc/api/search/functions_b.js | 10 - .../glm/doc/api/search/functions_c.html | 26 - .../package/glm/doc/api/search/functions_c.js | 24 - .../glm/doc/api/search/functions_d.html | 26 - .../package/glm/doc/api/search/functions_d.js | 83 - .../glm/doc/api/search/functions_e.html | 26 - .../package/glm/doc/api/search/functions_e.js | 19 - .../glm/doc/api/search/functions_f.html | 26 - .../package/glm/doc/api/search/functions_f.js | 35 - .../package/glm/doc/api/search/groups_0.html | 26 - .../package/glm/doc/api/search/groups_0.js | 4 - .../package/glm/doc/api/search/groups_1.html | 26 - .../package/glm/doc/api/search/groups_1.js | 5 - .../package/glm/doc/api/search/groups_2.html | 26 - .../package/glm/doc/api/search/groups_2.js | 5 - .../package/glm/doc/api/search/groups_3.html | 26 - .../package/glm/doc/api/search/groups_3.js | 4 - .../package/glm/doc/api/search/groups_4.html | 26 - .../package/glm/doc/api/search/groups_4.js | 122 - .../package/glm/doc/api/search/groups_5.html | 26 - .../package/glm/doc/api/search/groups_5.js | 4 - .../package/glm/doc/api/search/groups_6.html | 26 - .../package/glm/doc/api/search/groups_6.js | 6 - .../package/glm/doc/api/search/groups_7.html | 26 - .../package/glm/doc/api/search/groups_7.js | 4 - .../package/glm/doc/api/search/groups_8.html | 26 - .../package/glm/doc/api/search/groups_8.js | 4 - .../package/glm/doc/api/search/groups_9.html | 26 - .../package/glm/doc/api/search/groups_9.js | 6 - .../package/glm/doc/api/search/mag_sel.png | Bin 563 -> 0 bytes .../package/glm/doc/api/search/nomatches.html | 12 - .../package/glm/doc/api/search/pages_0.html | 26 - .../package/glm/doc/api/search/pages_0.js | 4 - .../package/glm/doc/api/search/search.css | 271 - .../package/glm/doc/api/search/search.js | 791 - .../package/glm/doc/api/search/search_l.png | Bin 604 -> 0 bytes .../package/glm/doc/api/search/search_m.png | Bin 158 -> 0 bytes .../package/glm/doc/api/search/search_r.png | Bin 612 -> 0 bytes .../package/glm/doc/api/search/searchdata.js | 30 - .../glm/doc/api/search/typedefs_0.html | 26 - .../package/glm/doc/api/search/typedefs_0.js | 179 - .../glm/doc/api/search/typedefs_1.html | 26 - .../package/glm/doc/api/search/typedefs_1.js | 22 - .../glm/doc/api/search/typedefs_2.html | 26 - .../package/glm/doc/api/search/typedefs_2.js | 37 - .../glm/doc/api/search/typedefs_3.html | 26 - .../package/glm/doc/api/search/typedefs_3.js | 78 - .../glm/doc/api/search/typedefs_4.html | 26 - .../package/glm/doc/api/search/typedefs_4.js | 188 - .../glm/doc/api/search/typedefs_5.html | 26 - .../package/glm/doc/api/search/typedefs_5.js | 61 - .../glm/doc/api/search/typedefs_6.html | 26 - .../package/glm/doc/api/search/typedefs_6.js | 188 - .../glm/doc/api/search/typedefs_7.html | 26 - .../package/glm/doc/api/search/typedefs_7.js | 200 - .../glm/doc/api/search/typedefs_8.html | 26 - .../package/glm/doc/api/search/typedefs_8.js | 179 - .../glm/doc/api/search/typedefs_9.html | 26 - .../package/glm/doc/api/search/typedefs_9.js | 5 - .../glm/doc/api/search/typedefs_a.html | 26 - .../package/glm/doc/api/search/typedefs_a.js | 12 - .../glm/doc/api/search/typedefs_b.html | 26 - .../package/glm/doc/api/search/typedefs_b.js | 47 - .../glm/doc/api/search/typedefs_c.html | 26 - .../package/glm/doc/api/search/typedefs_c.js | 7 - .../glm/doc/api/search/typedefs_d.html | 26 - .../package/glm/doc/api/search/typedefs_d.js | 4 - tests/OpenGL/package/glm/doc/api/splitbar.png | Bin 262 -> 0 bytes tests/OpenGL/package/glm/doc/api/sync_off.png | Bin 717 -> 0 bytes tests/OpenGL/package/glm/doc/api/sync_on.png | Bin 712 -> 0 bytes tests/OpenGL/package/glm/doc/api/tab_a.png | Bin 217 -> 0 bytes tests/OpenGL/package/glm/doc/api/tab_b.png | Bin 253 -> 0 bytes tests/OpenGL/package/glm/doc/api/tab_h.png | Bin 255 -> 0 bytes tests/OpenGL/package/glm/doc/api/tab_s.png | Bin 260 -> 0 bytes tests/OpenGL/package/glm/doc/api/tabs.css | 60 - tests/OpenGL/package/glm/doc/man.doxy | 2415 - tests/OpenGL/package/glm/doc/manual.pdf | Bin 1466032 -> 0 bytes .../package/glm/doc/manual/frontpage1.png | Bin 731902 -> 0 bytes .../package/glm/doc/manual/frontpage2.png | Bin 233177 -> 0 bytes .../OpenGL/package/glm/doc/manual/g-truc.png | Bin 13441 -> 0 bytes .../package/glm/doc/manual/logo-mini.png | Bin 11967 -> 0 bytes .../package/glm/doc/manual/noise-perlin1.jpg | Bin 8464 -> 0 bytes .../package/glm/doc/manual/noise-perlin2.jpg | Bin 7755 -> 0 bytes .../package/glm/doc/manual/noise-perlin3.jpg | Bin 7143 -> 0 bytes .../package/glm/doc/manual/noise-perlin4.png | Bin 1253 -> 0 bytes .../package/glm/doc/manual/noise-perlin5.png | Bin 1025 -> 0 bytes .../package/glm/doc/manual/noise-perlin6.png | Bin 1092 -> 0 bytes .../package/glm/doc/manual/noise-simplex1.jpg | Bin 10985 -> 0 bytes .../package/glm/doc/manual/noise-simplex2.jpg | Bin 9494 -> 0 bytes .../package/glm/doc/manual/noise-simplex3.jpg | Bin 9873 -> 0 bytes .../glm/doc/manual/random-ballrand.png | Bin 3431 -> 0 bytes .../glm/doc/manual/random-circularrand.png | Bin 503 -> 0 bytes .../glm/doc/manual/random-diskrand.png | Bin 3113 -> 0 bytes .../glm/doc/manual/random-gaussrand.png | Bin 3137 -> 0 bytes .../glm/doc/manual/random-linearrand.png | Bin 3108 -> 0 bytes .../glm/doc/manual/random-sphericalrand.png | Bin 3703 -> 0 bytes .../glm/doc/manual/references-cinder.png | Bin 77425 -> 0 bytes .../glm/doc/manual/references-glsl4book.jpg | Bin 9668 -> 0 bytes .../doc/manual/references-leosfortune.jpeg | Bin 13608 -> 0 bytes .../doc/manual/references-leosfortune2.jpg | Bin 13183 -> 0 bytes .../glm/doc/manual/references-opencloth1.png | Bin 12531 -> 0 bytes .../glm/doc/manual/references-opencloth3.png | Bin 21325 -> 0 bytes .../glm/doc/manual/references-outerra1.jpg | Bin 5355 -> 0 bytes .../glm/doc/manual/references-outerra2.jpg | Bin 4827 -> 0 bytes .../glm/doc/manual/references-outerra3.jpg | Bin 3906 -> 0 bytes .../glm/doc/manual/references-outerra4.jpg | Bin 5427 -> 0 bytes tests/OpenGL/package/glm/doc/theme/bc_s.png | Bin 600 -> 0 bytes tests/OpenGL/package/glm/doc/theme/bdwn.png | Bin 200 -> 0 bytes tests/OpenGL/package/glm/doc/theme/closed.png | Bin 194 -> 0 bytes tests/OpenGL/package/glm/doc/theme/doc.png | Bin 624 -> 0 bytes .../OpenGL/package/glm/doc/theme/doxygen.css | 1496 - .../OpenGL/package/glm/doc/theme/doxygen.png | Bin 2419 -> 0 bytes .../package/glm/doc/theme/folderclosed.png | Bin 573 -> 0 bytes .../package/glm/doc/theme/folderopen.png | Bin 596 -> 0 bytes .../package/glm/doc/theme/logo-mini.png | Bin 11967 -> 0 bytes tests/OpenGL/package/glm/doc/theme/nav_f.png | Bin 233 -> 0 bytes tests/OpenGL/package/glm/doc/theme/nav_g.png | Bin 95 -> 0 bytes tests/OpenGL/package/glm/doc/theme/nav_h.png | Bin 188 -> 0 bytes tests/OpenGL/package/glm/doc/theme/open.png | Bin 177 -> 0 bytes .../OpenGL/package/glm/doc/theme/splitbar.png | Bin 262 -> 0 bytes .../OpenGL/package/glm/doc/theme/sync_off.png | Bin 717 -> 0 bytes .../OpenGL/package/glm/doc/theme/sync_on.png | Bin 712 -> 0 bytes tests/OpenGL/package/glm/doc/theme/tab_a.png | Bin 217 -> 0 bytes tests/OpenGL/package/glm/doc/theme/tab_b.png | Bin 253 -> 0 bytes tests/OpenGL/package/glm/doc/theme/tab_h.png | Bin 255 -> 0 bytes tests/OpenGL/package/glm/doc/theme/tab_s.png | Bin 260 -> 0 bytes tests/OpenGL/package/glm/glm/CMakeLists.txt | 70 - tests/OpenGL/package/glm/glm/common.hpp | 539 - .../package/glm/glm/detail/_features.hpp | 394 - .../OpenGL/package/glm/glm/detail/_fixes.hpp | 27 - .../OpenGL/package/glm/glm/detail/_noise.hpp | 81 - .../package/glm/glm/detail/_swizzle.hpp | 804 - .../package/glm/glm/detail/_swizzle_func.hpp | 682 - .../package/glm/glm/detail/_vectorize.hpp | 162 - .../package/glm/glm/detail/compute_common.hpp | 50 - .../glm/detail/compute_vector_relational.hpp | 30 - .../package/glm/glm/detail/func_common.inl | 792 - .../glm/glm/detail/func_common_simd.inl | 231 - .../glm/glm/detail/func_exponential.inl | 152 - .../glm/glm/detail/func_exponential_simd.inl | 37 - .../package/glm/glm/detail/func_geometric.inl | 243 - .../glm/glm/detail/func_geometric_simd.inl | 163 - .../package/glm/glm/detail/func_integer.inl | 372 - .../glm/glm/detail/func_integer_simd.inl | 65 - .../package/glm/glm/detail/func_matrix.inl | 398 - .../glm/glm/detail/func_matrix_simd.inl | 249 - .../package/glm/glm/detail/func_packing.inl | 189 - .../glm/glm/detail/func_packing_simd.inl | 6 - .../glm/glm/detail/func_trigonometric.inl | 197 - .../glm/glm/detail/func_vector_relational.inl | 87 - .../detail/func_vector_relational_simd.inl | 6 - tests/OpenGL/package/glm/glm/detail/glm.cpp | 263 - .../package/glm/glm/detail/qualifier.hpp | 230 - tests/OpenGL/package/glm/glm/detail/setup.hpp | 1135 - .../package/glm/glm/detail/type_float.hpp | 68 - .../package/glm/glm/detail/type_half.hpp | 16 - .../package/glm/glm/detail/type_half.inl | 241 - .../package/glm/glm/detail/type_mat2x2.hpp | 177 - .../package/glm/glm/detail/type_mat2x2.inl | 536 - .../package/glm/glm/detail/type_mat2x3.hpp | 159 - .../package/glm/glm/detail/type_mat2x3.inl | 510 - .../package/glm/glm/detail/type_mat2x4.hpp | 161 - .../package/glm/glm/detail/type_mat2x4.inl | 520 - .../package/glm/glm/detail/type_mat3x2.hpp | 167 - .../package/glm/glm/detail/type_mat3x2.inl | 532 - .../package/glm/glm/detail/type_mat3x3.hpp | 184 - .../package/glm/glm/detail/type_mat3x3.inl | 601 - .../package/glm/glm/detail/type_mat3x4.hpp | 166 - .../package/glm/glm/detail/type_mat3x4.inl | 578 - .../package/glm/glm/detail/type_mat4x2.hpp | 171 - .../package/glm/glm/detail/type_mat4x2.inl | 574 - .../package/glm/glm/detail/type_mat4x3.hpp | 171 - .../package/glm/glm/detail/type_mat4x3.inl | 598 - .../package/glm/glm/detail/type_mat4x4.hpp | 189 - .../package/glm/glm/detail/type_mat4x4.inl | 706 - .../glm/glm/detail/type_mat4x4_simd.inl | 6 - .../package/glm/glm/detail/type_quat.hpp | 186 - .../package/glm/glm/detail/type_quat.inl | 408 - .../package/glm/glm/detail/type_quat_simd.inl | 188 - .../package/glm/glm/detail/type_vec1.hpp | 308 - .../package/glm/glm/detail/type_vec1.inl | 551 - .../package/glm/glm/detail/type_vec2.hpp | 399 - .../package/glm/glm/detail/type_vec2.inl | 913 - .../package/glm/glm/detail/type_vec3.hpp | 432 - .../package/glm/glm/detail/type_vec3.inl | 1068 - .../package/glm/glm/detail/type_vec4.hpp | 505 - .../package/glm/glm/detail/type_vec4.inl | 1140 - .../package/glm/glm/detail/type_vec4_simd.inl | 775 - tests/OpenGL/package/glm/glm/exponential.hpp | 110 - tests/OpenGL/package/glm/glm/ext.hpp | 253 - .../package/glm/glm/ext/matrix_clip_space.hpp | 522 - .../package/glm/glm/ext/matrix_clip_space.inl | 555 - .../package/glm/glm/ext/matrix_common.hpp | 36 - .../package/glm/glm/ext/matrix_common.inl | 16 - .../package/glm/glm/ext/matrix_double2x2.hpp | 23 - .../glm/ext/matrix_double2x2_precision.hpp | 49 - .../package/glm/glm/ext/matrix_double2x3.hpp | 18 - .../glm/ext/matrix_double2x3_precision.hpp | 31 - .../package/glm/glm/ext/matrix_double2x4.hpp | 18 - .../glm/ext/matrix_double2x4_precision.hpp | 31 - .../package/glm/glm/ext/matrix_double3x2.hpp | 18 - .../glm/ext/matrix_double3x2_precision.hpp | 31 - .../package/glm/glm/ext/matrix_double3x3.hpp | 23 - .../glm/ext/matrix_double3x3_precision.hpp | 49 - .../package/glm/glm/ext/matrix_double3x4.hpp | 18 - .../glm/ext/matrix_double3x4_precision.hpp | 31 - .../package/glm/glm/ext/matrix_double4x2.hpp | 18 - .../glm/ext/matrix_double4x2_precision.hpp | 31 - .../package/glm/glm/ext/matrix_double4x3.hpp | 18 - .../glm/ext/matrix_double4x3_precision.hpp | 31 - .../package/glm/glm/ext/matrix_double4x4.hpp | 23 - .../glm/ext/matrix_double4x4_precision.hpp | 49 - .../package/glm/glm/ext/matrix_float2x2.hpp | 23 - .../glm/glm/ext/matrix_float2x2_precision.hpp | 49 - .../package/glm/glm/ext/matrix_float2x3.hpp | 18 - .../glm/glm/ext/matrix_float2x3_precision.hpp | 31 - .../package/glm/glm/ext/matrix_float2x4.hpp | 18 - .../glm/glm/ext/matrix_float2x4_precision.hpp | 31 - .../package/glm/glm/ext/matrix_float3x2.hpp | 18 - .../glm/glm/ext/matrix_float3x2_precision.hpp | 31 - .../package/glm/glm/ext/matrix_float3x3.hpp | 23 - .../glm/glm/ext/matrix_float3x3_precision.hpp | 49 - .../package/glm/glm/ext/matrix_float3x4.hpp | 18 - .../glm/glm/ext/matrix_float3x4_precision.hpp | 31 - .../package/glm/glm/ext/matrix_float4x2.hpp | 18 - .../glm/glm/ext/matrix_float4x2_precision.hpp | 31 - .../package/glm/glm/ext/matrix_float4x3.hpp | 18 - .../glm/glm/ext/matrix_float4x3_precision.hpp | 31 - .../package/glm/glm/ext/matrix_float4x4.hpp | 23 - .../glm/glm/ext/matrix_float4x4_precision.hpp | 49 - .../package/glm/glm/ext/matrix_int2x2.hpp | 38 - .../glm/glm/ext/matrix_int2x2_sized.hpp | 70 - .../package/glm/glm/ext/matrix_int2x3.hpp | 33 - .../glm/glm/ext/matrix_int2x3_sized.hpp | 49 - .../package/glm/glm/ext/matrix_int2x4.hpp | 33 - .../glm/glm/ext/matrix_int2x4_sized.hpp | 49 - .../package/glm/glm/ext/matrix_int3x2.hpp | 33 - .../glm/glm/ext/matrix_int3x2_sized.hpp | 49 - .../package/glm/glm/ext/matrix_int3x3.hpp | 38 - .../glm/glm/ext/matrix_int3x3_sized.hpp | 70 - .../package/glm/glm/ext/matrix_int3x4.hpp | 33 - .../glm/glm/ext/matrix_int3x4_sized.hpp | 49 - .../package/glm/glm/ext/matrix_int4x2.hpp | 33 - .../glm/glm/ext/matrix_int4x2_sized.hpp | 49 - .../package/glm/glm/ext/matrix_int4x3.hpp | 33 - .../glm/glm/ext/matrix_int4x3_sized.hpp | 49 - .../package/glm/glm/ext/matrix_int4x4.hpp | 38 - .../glm/glm/ext/matrix_int4x4_sized.hpp | 70 - .../package/glm/glm/ext/matrix_projection.hpp | 149 - .../package/glm/glm/ext/matrix_projection.inl | 106 - .../package/glm/glm/ext/matrix_relational.hpp | 132 - .../package/glm/glm/ext/matrix_relational.inl | 82 - .../package/glm/glm/ext/matrix_transform.hpp | 144 - .../package/glm/glm/ext/matrix_transform.inl | 152 - .../package/glm/glm/ext/matrix_uint2x2.hpp | 38 - .../glm/glm/ext/matrix_uint2x2_sized.hpp | 70 - .../package/glm/glm/ext/matrix_uint2x3.hpp | 33 - .../glm/glm/ext/matrix_uint2x3_sized.hpp | 49 - .../package/glm/glm/ext/matrix_uint2x4.hpp | 33 - .../glm/glm/ext/matrix_uint2x4_sized.hpp | 49 - .../package/glm/glm/ext/matrix_uint3x2.hpp | 33 - .../glm/glm/ext/matrix_uint3x2_sized.hpp | 49 - .../package/glm/glm/ext/matrix_uint3x3.hpp | 38 - .../glm/glm/ext/matrix_uint3x3_sized.hpp | 70 - .../package/glm/glm/ext/matrix_uint3x4.hpp | 33 - .../glm/glm/ext/matrix_uint3x4_sized.hpp | 49 - .../package/glm/glm/ext/matrix_uint4x2.hpp | 33 - .../glm/glm/ext/matrix_uint4x2_sized.hpp | 49 - .../package/glm/glm/ext/matrix_uint4x3.hpp | 33 - .../glm/glm/ext/matrix_uint4x3_sized.hpp | 49 - .../package/glm/glm/ext/matrix_uint4x4.hpp | 38 - .../glm/glm/ext/matrix_uint4x4_sized.hpp | 70 - .../package/glm/glm/ext/quaternion_common.hpp | 135 - .../package/glm/glm/ext/quaternion_common.inl | 144 - .../glm/glm/ext/quaternion_common_simd.inl | 18 - .../package/glm/glm/ext/quaternion_double.hpp | 39 - .../glm/ext/quaternion_double_precision.hpp | 42 - .../glm/glm/ext/quaternion_exponential.hpp | 63 - .../glm/glm/ext/quaternion_exponential.inl | 85 - .../package/glm/glm/ext/quaternion_float.hpp | 39 - .../glm/ext/quaternion_float_precision.hpp | 36 - .../glm/glm/ext/quaternion_geometric.hpp | 70 - .../glm/glm/ext/quaternion_geometric.inl | 36 - .../glm/glm/ext/quaternion_relational.hpp | 62 - .../glm/glm/ext/quaternion_relational.inl | 35 - .../glm/glm/ext/quaternion_transform.hpp | 47 - .../glm/glm/ext/quaternion_transform.inl | 24 - .../glm/glm/ext/quaternion_trigonometric.hpp | 63 - .../glm/glm/ext/quaternion_trigonometric.inl | 34 - .../package/glm/glm/ext/scalar_common.hpp | 157 - .../package/glm/glm/ext/scalar_common.inl | 152 - .../package/glm/glm/ext/scalar_constants.hpp | 40 - .../package/glm/glm/ext/scalar_constants.inl | 24 - .../package/glm/glm/ext/scalar_int_sized.hpp | 70 - .../package/glm/glm/ext/scalar_integer.hpp | 92 - .../package/glm/glm/ext/scalar_integer.inl | 243 - .../package/glm/glm/ext/scalar_packing.hpp | 32 - .../package/glm/glm/ext/scalar_relational.hpp | 65 - .../package/glm/glm/ext/scalar_relational.inl | 40 - .../package/glm/glm/ext/scalar_uint_sized.hpp | 70 - .../OpenGL/package/glm/glm/ext/scalar_ulp.hpp | 74 - .../OpenGL/package/glm/glm/ext/scalar_ulp.inl | 284 - .../package/glm/glm/ext/vector_bool1.hpp | 30 - .../glm/glm/ext/vector_bool1_precision.hpp | 34 - .../package/glm/glm/ext/vector_bool2.hpp | 18 - .../glm/glm/ext/vector_bool2_precision.hpp | 31 - .../package/glm/glm/ext/vector_bool3.hpp | 18 - .../glm/glm/ext/vector_bool3_precision.hpp | 31 - .../package/glm/glm/ext/vector_bool4.hpp | 18 - .../glm/glm/ext/vector_bool4_precision.hpp | 31 - .../package/glm/glm/ext/vector_common.hpp | 204 - .../package/glm/glm/ext/vector_common.inl | 129 - .../package/glm/glm/ext/vector_double1.hpp | 31 - .../glm/glm/ext/vector_double1_precision.hpp | 36 - .../package/glm/glm/ext/vector_double2.hpp | 18 - .../glm/glm/ext/vector_double2_precision.hpp | 31 - .../package/glm/glm/ext/vector_double3.hpp | 18 - .../glm/glm/ext/vector_double3_precision.hpp | 34 - .../package/glm/glm/ext/vector_double4.hpp | 18 - .../glm/glm/ext/vector_double4_precision.hpp | 35 - .../package/glm/glm/ext/vector_float1.hpp | 31 - .../glm/glm/ext/vector_float1_precision.hpp | 36 - .../package/glm/glm/ext/vector_float2.hpp | 18 - .../glm/glm/ext/vector_float2_precision.hpp | 31 - .../package/glm/glm/ext/vector_float3.hpp | 18 - .../glm/glm/ext/vector_float3_precision.hpp | 31 - .../package/glm/glm/ext/vector_float4.hpp | 18 - .../glm/glm/ext/vector_float4_precision.hpp | 31 - .../package/glm/glm/ext/vector_int1.hpp | 32 - .../package/glm/glm/ext/vector_int1_sized.hpp | 49 - .../package/glm/glm/ext/vector_int2.hpp | 18 - .../package/glm/glm/ext/vector_int2_sized.hpp | 49 - .../package/glm/glm/ext/vector_int3.hpp | 18 - .../package/glm/glm/ext/vector_int3_sized.hpp | 49 - .../package/glm/glm/ext/vector_int4.hpp | 18 - .../package/glm/glm/ext/vector_int4_sized.hpp | 49 - .../package/glm/glm/ext/vector_integer.hpp | 149 - .../package/glm/glm/ext/vector_integer.inl | 85 - .../package/glm/glm/ext/vector_packing.hpp | 32 - .../package/glm/glm/ext/vector_relational.hpp | 107 - .../package/glm/glm/ext/vector_relational.inl | 75 - .../package/glm/glm/ext/vector_uint1.hpp | 32 - .../glm/glm/ext/vector_uint1_sized.hpp | 49 - .../package/glm/glm/ext/vector_uint2.hpp | 18 - .../glm/glm/ext/vector_uint2_sized.hpp | 49 - .../package/glm/glm/ext/vector_uint3.hpp | 18 - .../glm/glm/ext/vector_uint3_sized.hpp | 49 - .../package/glm/glm/ext/vector_uint4.hpp | 18 - .../glm/glm/ext/vector_uint4_sized.hpp | 49 - .../OpenGL/package/glm/glm/ext/vector_ulp.hpp | 109 - .../OpenGL/package/glm/glm/ext/vector_ulp.inl | 74 - tests/OpenGL/package/glm/glm/fwd.hpp | 1233 - tests/OpenGL/package/glm/glm/geometric.hpp | 116 - tests/OpenGL/package/glm/glm/glm.hpp | 136 - tests/OpenGL/package/glm/glm/gtc/bitfield.hpp | 266 - tests/OpenGL/package/glm/glm/gtc/bitfield.inl | 626 - .../package/glm/glm/gtc/color_space.hpp | 56 - .../package/glm/glm/gtc/color_space.inl | 84 - .../OpenGL/package/glm/glm/gtc/constants.hpp | 165 - .../OpenGL/package/glm/glm/gtc/constants.inl | 167 - tests/OpenGL/package/glm/glm/gtc/epsilon.hpp | 60 - tests/OpenGL/package/glm/glm/gtc/epsilon.inl | 80 - tests/OpenGL/package/glm/glm/gtc/integer.hpp | 65 - tests/OpenGL/package/glm/glm/gtc/integer.inl | 68 - .../package/glm/glm/gtc/matrix_access.hpp | 60 - .../package/glm/glm/gtc/matrix_access.inl | 62 - .../package/glm/glm/gtc/matrix_integer.hpp | 433 - .../package/glm/glm/gtc/matrix_inverse.hpp | 50 - .../package/glm/glm/gtc/matrix_inverse.inl | 118 - .../package/glm/glm/gtc/matrix_transform.hpp | 36 - .../package/glm/glm/gtc/matrix_transform.inl | 3 - tests/OpenGL/package/glm/glm/gtc/noise.hpp | 61 - tests/OpenGL/package/glm/glm/gtc/noise.inl | 807 - tests/OpenGL/package/glm/glm/gtc/packing.hpp | 728 - tests/OpenGL/package/glm/glm/gtc/packing.inl | 938 - .../OpenGL/package/glm/glm/gtc/quaternion.hpp | 173 - .../OpenGL/package/glm/glm/gtc/quaternion.inl | 202 - tests/OpenGL/package/glm/glm/gtc/random.hpp | 82 - tests/OpenGL/package/glm/glm/gtc/random.inl | 303 - .../OpenGL/package/glm/glm/gtc/reciprocal.hpp | 135 - .../OpenGL/package/glm/glm/gtc/reciprocal.inl | 191 - tests/OpenGL/package/glm/glm/gtc/round.hpp | 160 - tests/OpenGL/package/glm/glm/gtc/round.inl | 155 - .../package/glm/glm/gtc/type_aligned.hpp | 1315 - .../package/glm/glm/gtc/type_precision.hpp | 2094 - .../package/glm/glm/gtc/type_precision.inl | 6 - tests/OpenGL/package/glm/glm/gtc/type_ptr.hpp | 230 - tests/OpenGL/package/glm/glm/gtc/type_ptr.inl | 386 - tests/OpenGL/package/glm/glm/gtc/ulp.hpp | 152 - tests/OpenGL/package/glm/glm/gtc/ulp.inl | 173 - tests/OpenGL/package/glm/glm/gtc/vec1.hpp | 30 - .../glm/glm/gtx/associated_min_max.hpp | 207 - .../glm/glm/gtx/associated_min_max.inl | 354 - tests/OpenGL/package/glm/glm/gtx/bit.hpp | 98 - tests/OpenGL/package/glm/glm/gtx/bit.inl | 92 - .../package/glm/glm/gtx/closest_point.hpp | 49 - .../package/glm/glm/gtx/closest_point.inl | 45 - .../package/glm/glm/gtx/color_encoding.hpp | 54 - .../package/glm/glm/gtx/color_encoding.inl | 45 - .../package/glm/glm/gtx/color_space.hpp | 72 - .../package/glm/glm/gtx/color_space.inl | 141 - .../package/glm/glm/gtx/color_space_YCoCg.hpp | 60 - .../package/glm/glm/gtx/color_space_YCoCg.inl | 107 - tests/OpenGL/package/glm/glm/gtx/common.hpp | 76 - tests/OpenGL/package/glm/glm/gtx/common.inl | 125 - .../package/glm/glm/gtx/compatibility.hpp | 133 - .../package/glm/glm/gtx/compatibility.inl | 62 - .../package/glm/glm/gtx/component_wise.hpp | 69 - .../package/glm/glm/gtx/component_wise.inl | 127 - .../package/glm/glm/gtx/dual_quaternion.hpp | 274 - .../package/glm/glm/gtx/dual_quaternion.inl | 352 - tests/OpenGL/package/glm/glm/gtx/easing.hpp | 219 - tests/OpenGL/package/glm/glm/gtx/easing.inl | 436 - .../package/glm/glm/gtx/euler_angles.hpp | 335 - .../package/glm/glm/gtx/euler_angles.inl | 899 - tests/OpenGL/package/glm/glm/gtx/extend.hpp | 42 - tests/OpenGL/package/glm/glm/gtx/extend.inl | 48 - .../package/glm/glm/gtx/extended_min_max.hpp | 137 - .../package/glm/glm/gtx/extended_min_max.inl | 138 - .../package/glm/glm/gtx/exterior_product.hpp | 45 - .../package/glm/glm/gtx/exterior_product.inl | 26 - .../package/glm/glm/gtx/fast_exponential.hpp | 95 - .../package/glm/glm/gtx/fast_exponential.inl | 136 - .../package/glm/glm/gtx/fast_square_root.hpp | 92 - .../package/glm/glm/gtx/fast_square_root.inl | 75 - .../package/glm/glm/gtx/fast_trigonometry.hpp | 79 - .../package/glm/glm/gtx/fast_trigonometry.inl | 142 - .../package/glm/glm/gtx/float_notmalize.inl | 13 - .../OpenGL/package/glm/glm/gtx/functions.hpp | 56 - .../OpenGL/package/glm/glm/gtx/functions.inl | 30 - .../package/glm/glm/gtx/gradient_paint.hpp | 53 - .../package/glm/glm/gtx/gradient_paint.inl | 36 - .../glm/glm/gtx/handed_coordinate_space.hpp | 50 - .../glm/glm/gtx/handed_coordinate_space.inl | 26 - tests/OpenGL/package/glm/glm/gtx/hash.hpp | 142 - tests/OpenGL/package/glm/glm/gtx/hash.inl | 184 - tests/OpenGL/package/glm/glm/gtx/integer.hpp | 76 - tests/OpenGL/package/glm/glm/gtx/integer.inl | 185 - .../OpenGL/package/glm/glm/gtx/intersect.hpp | 92 - .../OpenGL/package/glm/glm/gtx/intersect.inl | 200 - tests/OpenGL/package/glm/glm/gtx/io.hpp | 201 - tests/OpenGL/package/glm/glm/gtx/io.inl | 440 - tests/OpenGL/package/glm/glm/gtx/log_base.hpp | 48 - tests/OpenGL/package/glm/glm/gtx/log_base.inl | 16 - .../glm/glm/gtx/matrix_cross_product.hpp | 47 - .../glm/glm/gtx/matrix_cross_product.inl | 37 - .../package/glm/glm/gtx/matrix_decompose.hpp | 46 - .../package/glm/glm/gtx/matrix_decompose.inl | 186 - .../glm/glm/gtx/matrix_factorisation.hpp | 69 - .../glm/glm/gtx/matrix_factorisation.inl | 84 - .../glm/glm/gtx/matrix_interpolation.hpp | 60 - .../glm/glm/gtx/matrix_interpolation.inl | 129 - .../glm/glm/gtx/matrix_major_storage.hpp | 119 - .../glm/glm/gtx/matrix_major_storage.inl | 166 - .../package/glm/glm/gtx/matrix_operation.hpp | 103 - .../package/glm/glm/gtx/matrix_operation.inl | 176 - .../package/glm/glm/gtx/matrix_query.hpp | 77 - .../package/glm/glm/gtx/matrix_query.inl | 113 - .../glm/glm/gtx/matrix_transform_2d.hpp | 81 - .../glm/glm/gtx/matrix_transform_2d.inl | 68 - .../package/glm/glm/gtx/mixed_product.hpp | 41 - .../package/glm/glm/gtx/mixed_product.inl | 15 - tests/OpenGL/package/glm/glm/gtx/norm.hpp | 88 - tests/OpenGL/package/glm/glm/gtx/norm.inl | 95 - tests/OpenGL/package/glm/glm/gtx/normal.hpp | 41 - tests/OpenGL/package/glm/glm/gtx/normal.inl | 15 - .../package/glm/glm/gtx/normalize_dot.hpp | 49 - .../package/glm/glm/gtx/normalize_dot.inl | 16 - .../package/glm/glm/gtx/number_precision.hpp | 61 - .../package/glm/glm/gtx/number_precision.inl | 6 - .../package/glm/glm/gtx/optimum_pow.hpp | 54 - .../package/glm/glm/gtx/optimum_pow.inl | 22 - .../package/glm/glm/gtx/orthonormalize.hpp | 49 - .../package/glm/glm/gtx/orthonormalize.inl | 29 - .../package/glm/glm/gtx/perpendicular.hpp | 41 - .../package/glm/glm/gtx/perpendicular.inl | 10 - .../package/glm/glm/gtx/polar_coordinates.hpp | 48 - .../package/glm/glm/gtx/polar_coordinates.inl | 36 - .../OpenGL/package/glm/glm/gtx/projection.hpp | 43 - .../OpenGL/package/glm/glm/gtx/projection.inl | 10 - .../OpenGL/package/glm/glm/gtx/quaternion.hpp | 174 - .../OpenGL/package/glm/glm/gtx/quaternion.inl | 159 - tests/OpenGL/package/glm/glm/gtx/range.hpp | 98 - tests/OpenGL/package/glm/glm/gtx/raw_data.hpp | 51 - tests/OpenGL/package/glm/glm/gtx/raw_data.inl | 2 - .../glm/glm/gtx/rotate_normalized_axis.hpp | 68 - .../glm/glm/gtx/rotate_normalized_axis.inl | 58 - .../package/glm/glm/gtx/rotate_vector.hpp | 123 - .../package/glm/glm/gtx/rotate_vector.inl | 187 - .../glm/glm/gtx/scalar_multiplication.hpp | 75 - .../package/glm/glm/gtx/scalar_relational.hpp | 36 - .../package/glm/glm/gtx/scalar_relational.inl | 88 - tests/OpenGL/package/glm/glm/gtx/spline.hpp | 65 - tests/OpenGL/package/glm/glm/gtx/spline.inl | 60 - .../package/glm/glm/gtx/std_based_type.hpp | 68 - .../package/glm/glm/gtx/std_based_type.inl | 6 - .../package/glm/glm/gtx/string_cast.hpp | 52 - .../package/glm/glm/gtx/string_cast.inl | 492 - tests/OpenGL/package/glm/glm/gtx/texture.hpp | 46 - tests/OpenGL/package/glm/glm/gtx/texture.inl | 17 - .../OpenGL/package/glm/glm/gtx/transform.hpp | 60 - .../OpenGL/package/glm/glm/gtx/transform.inl | 23 - .../OpenGL/package/glm/glm/gtx/transform2.hpp | 89 - .../OpenGL/package/glm/glm/gtx/transform2.inl | 125 - .../package/glm/glm/gtx/type_aligned.hpp | 982 - .../package/glm/glm/gtx/type_aligned.inl | 6 - .../OpenGL/package/glm/glm/gtx/type_trait.hpp | 85 - .../OpenGL/package/glm/glm/gtx/type_trait.inl | 61 - .../package/glm/glm/gtx/vec_swizzle.hpp | 2782 - .../package/glm/glm/gtx/vector_angle.hpp | 57 - .../package/glm/glm/gtx/vector_angle.inl | 44 - .../package/glm/glm/gtx/vector_query.hpp | 66 - .../package/glm/glm/gtx/vector_query.inl | 154 - tests/OpenGL/package/glm/glm/gtx/wrap.hpp | 37 - tests/OpenGL/package/glm/glm/gtx/wrap.inl | 6 - tests/OpenGL/package/glm/glm/integer.hpp | 212 - tests/OpenGL/package/glm/glm/mat2x2.hpp | 9 - tests/OpenGL/package/glm/glm/mat2x3.hpp | 9 - tests/OpenGL/package/glm/glm/mat2x4.hpp | 9 - tests/OpenGL/package/glm/glm/mat3x2.hpp | 9 - tests/OpenGL/package/glm/glm/mat3x3.hpp | 8 - tests/OpenGL/package/glm/glm/mat3x4.hpp | 8 - tests/OpenGL/package/glm/glm/mat4x2.hpp | 9 - tests/OpenGL/package/glm/glm/mat4x3.hpp | 8 - tests/OpenGL/package/glm/glm/mat4x4.hpp | 9 - tests/OpenGL/package/glm/glm/matrix.hpp | 161 - tests/OpenGL/package/glm/glm/packing.hpp | 173 - tests/OpenGL/package/glm/glm/simd/common.h | 240 - .../OpenGL/package/glm/glm/simd/exponential.h | 20 - tests/OpenGL/package/glm/glm/simd/geometric.h | 124 - tests/OpenGL/package/glm/glm/simd/integer.h | 115 - tests/OpenGL/package/glm/glm/simd/matrix.h | 1028 - tests/OpenGL/package/glm/glm/simd/neon.h | 155 - tests/OpenGL/package/glm/glm/simd/packing.h | 8 - tests/OpenGL/package/glm/glm/simd/platform.h | 398 - .../package/glm/glm/simd/trigonometric.h | 9 - .../package/glm/glm/simd/vector_relational.h | 8 - .../OpenGL/package/glm/glm/trigonometric.hpp | 210 - tests/OpenGL/package/glm/glm/vec2.hpp | 14 - tests/OpenGL/package/glm/glm/vec3.hpp | 14 - tests/OpenGL/package/glm/glm/vec4.hpp | 15 - .../package/glm/glm/vector_relational.hpp | 121 - tests/OpenGL/package/glm/manual.md | 2411 - tests/OpenGL/package/glm/readme.md | 1209 - tests/OpenGL/package/glm/test/CMakeLists.txt | 246 - .../package/glm/test/bug/CMakeLists.txt | 1 - .../glm/test/bug/bug_ms_vec_static.cpp | 31 - .../package/glm/test/cmake/CMakeLists.txt | 8 - .../package/glm/test/cmake/test_find_glm.cpp | 22 - .../package/glm/test/core/CMakeLists.txt | 52 - .../glm/test/core/core_cpp_constexpr.cpp | 750 - .../glm/test/core/core_cpp_defaulted_ctor.cpp | 145 - .../test/core/core_force_aligned_gentypes.cpp | 10 - .../glm/test/core/core_force_arch_unknown.cpp | 14 - .../test/core/core_force_compiler_unknown.cpp | 14 - .../glm/test/core/core_force_ctor_init.cpp | 139 - .../glm/test/core/core_force_cxx03.cpp | 14 - .../glm/test/core/core_force_cxx98.cpp | 14 - .../glm/test/core/core_force_cxx_unknown.cpp | 14 - .../core/core_force_depth_zero_to_one.cpp | 12 - .../test/core/core_force_explicit_ctor.cpp | 17 - .../glm/test/core/core_force_inline.cpp | 12 - .../glm/test/core/core_force_left_handed.cpp | 12 - .../test/core/core_force_platform_unknown.cpp | 14 - .../package/glm/test/core/core_force_pure.cpp | 434 - .../glm/test/core/core_force_quat_wxyz.cpp | 13 - .../test/core/core_force_size_t_length.cpp | 12 - .../core/core_force_unrestricted_gentype.cpp | 12 - .../glm/test/core/core_force_xyzw_only.cpp | 58 - .../glm/test/core/core_func_common.cpp | 1349 - .../glm/test/core/core_func_exponential.cpp | 185 - .../glm/test/core/core_func_geometric.cpp | 200 - .../glm/test/core/core_func_integer.cpp | 1556 - .../test/core/core_func_integer_bit_count.cpp | 291 - .../test/core/core_func_integer_find_lsb.cpp | 416 - .../test/core/core_func_integer_find_msb.cpp | 440 - .../glm/test/core/core_func_matrix.cpp | 329 - .../package/glm/test/core/core_func_noise.cpp | 7 - .../glm/test/core/core_func_packing.cpp | 156 - .../glm/test/core/core_func_swizzle.cpp | 164 - .../glm/test/core/core_func_trigonometric.cpp | 10 - .../test/core/core_func_vector_relational.cpp | 180 - .../glm/test/core/core_setup_force_cxx98.cpp | 12 - .../core/core_setup_force_size_t_length.cpp | 22 - .../glm/test/core/core_setup_message.cpp | 230 - .../test/core/core_setup_platform_unknown.cpp | 21 - .../glm/test/core/core_setup_precision.cpp | 58 - .../glm/test/core/core_type_aligned.cpp | 92 - .../package/glm/test/core/core_type_cast.cpp | 146 - .../package/glm/test/core/core_type_ctor.cpp | 351 - .../package/glm/test/core/core_type_int.cpp | 26 - .../glm/test/core/core_type_length.cpp | 79 - .../glm/test/core/core_type_mat2x2.cpp | 177 - .../glm/test/core/core_type_mat2x3.cpp | 142 - .../glm/test/core/core_type_mat2x4.cpp | 147 - .../glm/test/core/core_type_mat3x2.cpp | 148 - .../glm/test/core/core_type_mat3x3.cpp | 197 - .../glm/test/core/core_type_mat3x4.cpp | 149 - .../glm/test/core/core_type_mat4x2.cpp | 151 - .../glm/test/core/core_type_mat4x3.cpp | 152 - .../glm/test/core/core_type_mat4x4.cpp | 218 - .../package/glm/test/core/core_type_vec1.cpp | 169 - .../package/glm/test/core/core_type_vec2.cpp | 392 - .../package/glm/test/core/core_type_vec3.cpp | 628 - .../package/glm/test/core/core_type_vec4.cpp | 850 - .../package/glm/test/ext/CMakeLists.txt | 52 - .../glm/test/ext/ext_matrix_clip_space.cpp | 13 - .../glm/test/ext/ext_matrix_common.cpp | 53 - .../glm/test/ext/ext_matrix_int2x2_sized.cpp | 28 - .../glm/test/ext/ext_matrix_int2x3_sized.cpp | 28 - .../glm/test/ext/ext_matrix_int2x4_sized.cpp | 28 - .../glm/test/ext/ext_matrix_int3x2_sized.cpp | 28 - .../glm/test/ext/ext_matrix_int3x3_sized.cpp | 28 - .../glm/test/ext/ext_matrix_int3x4_sized.cpp | 28 - .../glm/test/ext/ext_matrix_int4x2_sized.cpp | 28 - .../glm/test/ext/ext_matrix_int4x3_sized.cpp | 28 - .../glm/test/ext/ext_matrix_int4x4_sized.cpp | 28 - .../glm/test/ext/ext_matrix_projection.cpp | 13 - .../glm/test/ext/ext_matrix_relational.cpp | 163 - .../glm/test/ext/ext_matrix_transform.cpp | 61 - .../glm/test/ext/ext_matrix_uint2x2_sized.cpp | 28 - .../glm/test/ext/ext_matrix_uint2x3_sized.cpp | 28 - .../glm/test/ext/ext_matrix_uint2x4_sized.cpp | 28 - .../glm/test/ext/ext_matrix_uint3x2_sized.cpp | 28 - .../glm/test/ext/ext_matrix_uint3x3_sized.cpp | 28 - .../glm/test/ext/ext_matrix_uint3x4_sized.cpp | 28 - .../glm/test/ext/ext_matrix_uint4x2_sized.cpp | 28 - .../glm/test/ext/ext_matrix_uint4x3_sized.cpp | 28 - .../glm/test/ext/ext_matrix_uint4x4_sized.cpp | 28 - .../glm/test/ext/ext_quaternion_common.cpp | 61 - .../test/ext/ext_quaternion_exponential.cpp | 87 - .../glm/test/ext/ext_quaternion_geometric.cpp | 88 - .../test/ext/ext_quaternion_relational.cpp | 51 - .../glm/test/ext/ext_quaternion_transform.cpp | 45 - .../test/ext/ext_quaternion_trigonometric.cpp | 34 - .../glm/test/ext/ext_quaternion_type.cpp | 113 - .../glm/test/ext/ext_scalar_common.cpp | 327 - .../glm/test/ext/ext_scalar_constants.cpp | 36 - .../glm/test/ext/ext_scalar_int_sized.cpp | 43 - .../glm/test/ext/ext_scalar_integer.cpp | 686 - .../glm/test/ext/ext_scalar_packing.cpp | 28 - .../glm/test/ext/ext_scalar_relational.cpp | 106 - .../glm/test/ext/ext_scalar_uint_sized.cpp | 43 - .../package/glm/test/ext/ext_scalar_ulp.cpp | 96 - .../OpenGL/package/glm/test/ext/ext_vec1.cpp | 157 - .../package/glm/test/ext/ext_vector_bool1.cpp | 104 - .../glm/test/ext/ext_vector_common.cpp | 332 - .../glm/test/ext/ext_vector_iec559.cpp | 166 - .../glm/test/ext/ext_vector_int1_sized.cpp | 41 - .../glm/test/ext/ext_vector_int2_sized.cpp | 41 - .../glm/test/ext/ext_vector_int3_sized.cpp | 41 - .../glm/test/ext/ext_vector_int4_sized.cpp | 41 - .../glm/test/ext/ext_vector_integer.cpp | 547 - .../glm/test/ext/ext_vector_integer_sized.cpp | 216 - .../glm/test/ext/ext_vector_packing.cpp | 58 - .../glm/test/ext/ext_vector_relational.cpp | 205 - .../glm/test/ext/ext_vector_uint1_sized.cpp | 41 - .../glm/test/ext/ext_vector_uint2_sized.cpp | 41 - .../glm/test/ext/ext_vector_uint3_sized.cpp | 41 - .../glm/test/ext/ext_vector_uint4_sized.cpp | 41 - .../package/glm/test/ext/ext_vector_ulp.cpp | 99 - tests/OpenGL/package/glm/test/glm.cppcheck | 6 - .../package/glm/test/gtc/CMakeLists.txt | 20 - .../package/glm/test/gtc/gtc_bitfield.cpp | 936 - .../package/glm/test/gtc/gtc_color_space.cpp | 78 - .../package/glm/test/gtc/gtc_constants.cpp | 30 - .../package/glm/test/gtc/gtc_epsilon.cpp | 78 - .../package/glm/test/gtc/gtc_integer.cpp | 233 - .../glm/test/gtc/gtc_matrix_access.cpp | 383 - .../glm/test/gtc/gtc_matrix_integer.cpp | 8 - .../glm/test/gtc/gtc_matrix_inverse.cpp | 51 - .../glm/test/gtc/gtc_matrix_transform.cpp | 55 - .../OpenGL/package/glm/test/gtc/gtc_noise.cpp | 86 - .../package/glm/test/gtc/gtc_packing.cpp | 878 - .../package/glm/test/gtc/gtc_quaternion.cpp | 345 - .../package/glm/test/gtc/gtc_random.cpp | 381 - .../package/glm/test/gtc/gtc_reciprocal.cpp | 8 - .../OpenGL/package/glm/test/gtc/gtc_round.cpp | 458 - .../package/glm/test/gtc/gtc_type_aligned.cpp | 181 - .../glm/test/gtc/gtc_type_precision.cpp | 1041 - .../package/glm/test/gtc/gtc_type_ptr.cpp | 335 - tests/OpenGL/package/glm/test/gtc/gtc_ulp.cpp | 99 - .../glm/test/gtc/gtc_user_defined_types.cpp | 30 - .../OpenGL/package/glm/test/gtc/gtc_vec1.cpp | 8 - .../package/glm/test/gtx/CMakeLists.txt | 58 - tests/OpenGL/package/glm/test/gtx/gtx.cpp | 8 - .../glm/test/gtx/gtx_associated_min_max.cpp | 10 - .../glm/test/gtx/gtx_closest_point.cpp | 9 - .../glm/test/gtx/gtx_color_encoding.cpp | 51 - .../package/glm/test/gtx/gtx_color_space.cpp | 20 - .../glm/test/gtx/gtx_color_space_YCoCg.cpp | 9 - .../package/glm/test/gtx/gtx_common.cpp | 161 - .../glm/test/gtx/gtx_compatibility.cpp | 19 - .../glm/test/gtx/gtx_component_wise.cpp | 116 - .../glm/test/gtx/gtx_dual_quaternion.cpp | 205 - .../package/glm/test/gtx/gtx_easing.cpp | 65 - .../package/glm/test/gtx/gtx_euler_angle.cpp | 539 - .../package/glm/test/gtx/gtx_extend.cpp | 9 - .../glm/test/gtx/gtx_extended_min_max.cpp | 101 - .../glm/test/gtx/gtx_extented_min_max.cpp | 39 - .../glm/test/gtx/gtx_exterior_product.cpp | 14 - .../glm/test/gtx/gtx_fast_exponential.cpp | 9 - .../glm/test/gtx/gtx_fast_square_root.cpp | 45 - .../glm/test/gtx/gtx_fast_trigonometry.cpp | 564 - .../package/glm/test/gtx/gtx_functions.cpp | 36 - .../glm/test/gtx/gtx_gradient_paint.cpp | 34 - .../test/gtx/gtx_handed_coordinate_space.cpp | 9 - .../glm/test/gtx/gtx_int_10_10_10_2.cpp | 18 - .../package/glm/test/gtx/gtx_integer.cpp | 108 - .../package/glm/test/gtx/gtx_intersect.cpp | 88 - tests/OpenGL/package/glm/test/gtx/gtx_io.cpp | 186 - .../OpenGL/package/glm/test/gtx/gtx_load.cpp | 124 - .../package/glm/test/gtx/gtx_log_base.cpp | 54 - .../glm/test/gtx/gtx_matrix_cross_product.cpp | 9 - .../glm/test/gtx/gtx_matrix_decompose.cpp | 19 - .../glm/test/gtx/gtx_matrix_factorisation.cpp | 105 - .../glm/test/gtx/gtx_matrix_interpolation.cpp | 59 - .../glm/test/gtx/gtx_matrix_major_storage.cpp | 9 - .../glm/test/gtx/gtx_matrix_operation.cpp | 9 - .../package/glm/test/gtx/gtx_matrix_query.cpp | 66 - .../glm/test/gtx/gtx_matrix_transform_2d.cpp | 9 - .../glm/test/gtx/gtx_mixed_product.cpp | 18 - .../OpenGL/package/glm/test/gtx/gtx_norm.cpp | 81 - .../package/glm/test/gtx/gtx_normal.cpp | 9 - .../glm/test/gtx/gtx_normalize_dot.cpp | 9 - .../glm/test/gtx/gtx_number_precision.cpp | 9 - .../package/glm/test/gtx/gtx_optimum_pow.cpp | 9 - .../glm/test/gtx/gtx_orthonormalize.cpp | 9 - .../glm/test/gtx/gtx_perpendicular.cpp | 9 - .../glm/test/gtx/gtx_polar_coordinates.cpp | 9 - .../package/glm/test/gtx/gtx_projection.cpp | 9 - .../package/glm/test/gtx/gtx_quaternion.cpp | 107 - .../package/glm/test/gtx/gtx_random.cpp | 99 - .../OpenGL/package/glm/test/gtx/gtx_range.cpp | 83 - .../test/gtx/gtx_rotate_normalized_axis.cpp | 9 - .../glm/test/gtx/gtx_rotate_vector.cpp | 77 - .../test/gtx/gtx_scalar_multiplication.cpp | 37 - .../glm/test/gtx/gtx_scalar_relational.cpp | 174 - .../package/glm/test/gtx/gtx_simd_mat4.cpp | 324 - .../package/glm/test/gtx/gtx_simd_vec4.cpp | 71 - .../package/glm/test/gtx/gtx_spline.cpp | 100 - .../package/glm/test/gtx/gtx_string_cast.cpp | 155 - .../package/glm/test/gtx/gtx_texture.cpp | 22 - .../package/glm/test/gtx/gtx_type_aligned.cpp | 114 - .../package/glm/test/gtx/gtx_type_trait.cpp | 13 - .../package/glm/test/gtx/gtx_vec_swizzle.cpp | 11 - .../package/glm/test/gtx/gtx_vector_angle.cpp | 59 - .../package/glm/test/gtx/gtx_vector_query.cpp | 82 - .../OpenGL/package/glm/test/gtx/gtx_wrap.cpp | 191 - .../package/glm/test/perf/CMakeLists.txt | 6 - .../package/glm/test/perf/perf_matrix_div.cpp | 153 - .../glm/test/perf/perf_matrix_inverse.cpp | 150 - .../package/glm/test/perf/perf_matrix_mul.cpp | 154 - .../glm/test/perf/perf_matrix_mul_vector.cpp | 154 - .../glm/test/perf/perf_matrix_transpose.cpp | 150 - .../glm/test/perf/perf_vector_mul_matrix.cpp | 154 - tests/OpenGL/package/glm/util/autoexp.txt | 28 - .../package/glm/util/autoexp.vc2010.dat | 3896 -- tests/OpenGL/package/glm/util/glm.natvis | 65 - tests/OpenGL/package/glm/util/usertype.dat | 407 - tests/OpenGL/package/include/GLFW/glfw3.h | 5912 --- .../OpenGL/package/include/GLFW/glfw3native.h | 628 - .../OpenGL/package/include/KHR/khrplatform.h | 311 - .../package/include/assimp/.editorconfig | 8 - .../package/include/assimp/BaseImporter.h | 418 - tests/OpenGL/package/include/assimp/Bitmap.h | 125 - .../package/include/assimp/BlobIOSystem.h | 338 - .../package/include/assimp/ByteSwapper.h | 287 - .../include/assimp/Compiler/poppack1.h | 22 - .../package/include/assimp/Compiler/pstdint.h | 912 - .../include/assimp/Compiler/pushpack1.h | 43 - .../package/include/assimp/CreateAnimMesh.h | 58 - .../package/include/assimp/DefaultIOStream.h | 140 - .../package/include/assimp/DefaultIOSystem.h | 93 - .../package/include/assimp/DefaultLogger.hpp | 188 - tests/OpenGL/package/include/assimp/Defines.h | 49 - .../package/include/assimp/Exceptional.h | 125 - .../package/include/assimp/Exporter.hpp | 505 - .../package/include/assimp/GenericProperty.h | 133 - tests/OpenGL/package/include/assimp/Hash.h | 118 - .../package/include/assimp/IOStream.hpp | 142 - .../package/include/assimp/IOStreamBuffer.h | 355 - .../package/include/assimp/IOSystem.hpp | 357 - .../package/include/assimp/Importer.hpp | 659 - .../package/include/assimp/LineSplitter.h | 285 - tests/OpenGL/package/include/assimp/LogAux.h | 131 - .../package/include/assimp/LogStream.hpp | 111 - .../OpenGL/package/include/assimp/Logger.hpp | 305 - tests/OpenGL/package/include/assimp/Macros.h | 49 - .../package/include/assimp/MathFunctions.h | 86 - .../package/include/assimp/MemoryIOWrapper.h | 244 - .../package/include/assimp/NullLogger.hpp | 99 - .../package/include/assimp/ParsingUtils.h | 259 - .../OpenGL/package/include/assimp/Profiler.h | 99 - .../include/assimp/ProgressHandler.hpp | 145 - .../package/include/assimp/RemoveComments.h | 91 - .../package/include/assimp/SGSpatialSort.h | 150 - .../package/include/assimp/SceneCombiner.h | 403 - .../include/assimp/SkeletonMeshBuilder.h | 125 - .../package/include/assimp/SmoothingGroups.h | 108 - .../include/assimp/SmoothingGroups.inl | 138 - .../package/include/assimp/SpatialSort.h | 174 - .../package/include/assimp/StandardShapes.h | 200 - .../package/include/assimp/StreamReader.h | 343 - .../package/include/assimp/StreamWriter.h | 303 - .../package/include/assimp/StringComparison.h | 233 - .../package/include/assimp/StringUtils.h | 143 - .../package/include/assimp/Subdivision.h | 131 - .../package/include/assimp/TinyFormatter.h | 166 - tests/OpenGL/package/include/assimp/Vertex.h | 348 - .../OpenGL/package/include/assimp/XMLTools.h | 83 - .../include/assimp/ZipArchiveIOSystem.h | 87 - tests/OpenGL/package/include/assimp/aabb.h | 76 - .../OpenGL/package/include/assimp/ai_assert.h | 57 - tests/OpenGL/package/include/assimp/anim.h | 577 - tests/OpenGL/package/include/assimp/camera.h | 221 - tests/OpenGL/package/include/assimp/cexport.h | 261 - tests/OpenGL/package/include/assimp/cfileio.h | 138 - tests/OpenGL/package/include/assimp/cimport.h | 565 - tests/OpenGL/package/include/assimp/color4.h | 104 - .../OpenGL/package/include/assimp/color4.inl | 209 - tests/OpenGL/package/include/assimp/config.h | 1018 - .../OpenGL/package/include/assimp/config.h.in | 1018 - tests/OpenGL/package/include/assimp/defs.h | 310 - .../OpenGL/package/include/assimp/fast_atof.h | 373 - .../package/include/assimp/importerdesc.h | 146 - .../package/include/assimp/irrXMLWrapper.h | 149 - tests/OpenGL/package/include/assimp/light.h | 259 - .../OpenGL/package/include/assimp/material.h | 1600 - .../package/include/assimp/material.inl | 390 - .../OpenGL/package/include/assimp/matrix3x3.h | 183 - .../package/include/assimp/matrix3x3.inl | 357 - .../OpenGL/package/include/assimp/matrix4x4.h | 280 - .../package/include/assimp/matrix4x4.inl | 685 - tests/OpenGL/package/include/assimp/mesh.h | 859 - .../OpenGL/package/include/assimp/metadata.h | 380 - .../package/include/assimp/pbrmaterial.h | 77 - .../port/AndroidJNI/AndroidJNIIOSystem.h | 92 - .../package/include/assimp/postprocess.h | 684 - tests/OpenGL/package/include/assimp/qnan.h | 165 - .../package/include/assimp/quaternion.h | 130 - .../package/include/assimp/quaternion.inl | 286 - tests/OpenGL/package/include/assimp/scene.h | 425 - tests/OpenGL/package/include/assimp/texture.h | 227 - tests/OpenGL/package/include/assimp/types.h | 541 - tests/OpenGL/package/include/assimp/vector2.h | 107 - .../OpenGL/package/include/assimp/vector2.inl | 244 - tests/OpenGL/package/include/assimp/vector3.h | 146 - .../OpenGL/package/include/assimp/vector3.inl | 309 - tests/OpenGL/package/include/assimp/version.h | 115 - tests/OpenGL/package/include/glad/glad.h | 5169 -- tests/OpenGL/package/include/stb_image.h | 7874 --- tests/OpenGL/package/lib/assimp-vc143-mt.lib | Bin 374310 -> 0 bytes tests/OpenGL/package/lib/glfw3.lib | Bin 633870 -> 0 bytes tests/OpenGL/package/src/glad.c | 2532 - tests/OpenGL/run.bat | 7 - .../D3D12/integration/minimal/CMakeLists.txt | 4 +- .../RHI/D3D12/integration/quad/CMakeLists.txt | 4 +- .../integration/quad/Res/Shader/quad.hlsl | 2 +- tests/RHI/D3D12/integration/quad/main.cpp | 613 +- .../D3D12/integration/sphere/CMakeLists.txt | 4 +- tests/RHI/D3D12/integration/sphere/main.cpp | 745 +- .../D3D12/integration/triangle/CMakeLists.txt | 4 +- tests/RHI/D3D12/integration/triangle/main.cpp | 20 +- .../OpenGL/integration/minimal/CMakeLists.txt | 6 +- .../OpenGL/integration/quad/CMakeLists.txt | 8 +- .../OpenGL/integration/sphere/CMakeLists.txt | 8 +- .../integration/triangle/CMakeLists.txt | 8 +- tests/RHI/OpenGL/unit/CMakeLists.txt | 4 +- tests/RHI/integration/backpack/CMakeLists.txt | 2 +- tests/RHI/integration/backpack/GT.ppm | 3567 +- tests/RHI/integration/backpack/main.cpp | 3 +- tests/RHI/integration/minimal/CMakeLists.txt | 2 +- tests/RHI/integration/quad/CMakeLists.txt | 2 +- tests/RHI/integration/sphere/CMakeLists.txt | 2 +- tests/RHI/integration/triangle/CMakeLists.txt | 2 +- tests/RHI/unit/CMakeLists.txt | 4 +- .../integration/backpack_scene/CMakeLists.txt | 2 +- .../integration/backpack_scene/main.cpp | 3 +- .../cull_material_scene/CMakeLists.txt | 2 +- .../depth_sort_scene/CMakeLists.txt | 2 +- .../material_state_scene/CMakeLists.txt | 2 +- .../offscreen_scene/CMakeLists.txt | 2 +- .../textured_quad_scene/CMakeLists.txt | 2 +- .../transparent_material_scene/CMakeLists.txt | 2 +- tests/Resources/AudioClip/CMakeLists.txt | 2 +- tests/Resources/Material/CMakeLists.txt | 2 +- tests/Resources/Mesh/CMakeLists.txt | 4 +- tests/Resources/Shader/CMakeLists.txt | 2 +- tests/Resources/Texture/CMakeLists.txt | 4 +- tests/containers/CMakeLists.txt | 32 - tests/core/CMakeLists.txt | 12 +- tests/core/Containers/CMakeLists.txt | 32 + .../Containers}/test_array.cpp | 0 .../Containers}/test_hashmap.cpp | 0 .../Containers}/test_string.cpp | 0 tests/core/Math/CMakeLists.txt | 34 + tests/{math => core/Math}/test_geometry.cpp | 0 tests/{math => core/Math}/test_matrix.cpp | 0 tests/{math => core/Math}/test_quaternion.cpp | 22 + tests/{math => core/Math}/test_vector.cpp | 0 tests/editor/test_action_routing.cpp | 35 +- tests/math/CMakeLists.txt | 34 - tests/memory/CMakeLists.txt | 2 +- tests/threading/CMakeLists.txt | 2 +- 参考/TransformGizmo/Resources.meta | 8 + 参考/TransformGizmo/Resources/Materials.meta | 8 + .../TransformGizmo/Resources/Materials/Blue.mat | 117 + .../Resources/Materials/Blue.mat.meta | 8 + .../TransformGizmo/Resources/Materials/Gray.mat | 83 + .../Resources/Materials/Gray.mat.meta | 8 + .../Resources/Materials/Green.mat | 117 + .../Resources/Materials/Green.mat.meta | 8 + .../Resources/Materials/Orange.mat | 117 + .../Resources/Materials/Orange.mat.meta | 8 + .../TransformGizmo/Resources/Materials/Red.mat | 43 + .../Resources/Materials/Red.mat.meta | 8 + .../Resources/Materials/RotateBlue.mat | 116 + .../Resources/Materials/RotateBlue.mat.meta | 8 + .../Resources/Materials/RotateGreen.mat | 116 + .../Resources/Materials/RotateGreen.mat.meta | 8 + .../Resources/Materials/RotateRed.mat | 117 + .../Resources/Materials/RotateRed.mat.meta | 8 + .../Resources/Materials/Sphere.mat | 84 + .../Resources/Materials/Sphere.mat.meta | 8 + .../Resources/Materials/White.mat | 118 + .../Resources/Materials/White.mat.meta | 8 + .../Resources/Materials/Yellow.mat | 116 + .../Resources/Materials/Yellow.mat.meta | 8 + 参考/TransformGizmo/Resources/Models.meta | 8 + .../Resources/Models/Arrow_Rotate.fbx | Bin 0 -> 37148 bytes .../Resources/Models/Arrow_Rotate.fbx.meta | 109 + .../Resources/Models/Arrow_Scale.fbx | Bin 0 -> 15756 bytes .../Resources/Models/Arrow_Scale.fbx.meta | 109 + .../Resources/Models/Arrow_Translate.fbx | Bin 0 -> 16204 bytes .../Resources/Models/Arrow_Translate.fbx.meta | 109 + .../Resources/Models/CircularCone.obj.meta | 109 + .../Resources/Models/RotatePlane.obj.meta | 109 + .../Resources/Models/RotatePlaneDetect.obj.meta | 109 + .../Resources/Models/RotateXYZ.obj.meta | 109 + .../Resources/Models/RotateXYZDetect.obj.meta | 109 + 参考/TransformGizmo/Resources/Prefabs.meta | 8 + .../Resources/Prefabs/RotateGizmo.prefab | 875 + .../Resources/Prefabs/RotateGizmo.prefab.meta | 7 + .../Resources/Prefabs/TranslateGizmo.prefab | 510 + .../Prefabs/TranslateGizmo.prefab.meta | 7 + 参考/TransformGizmo/Resources/Shaders.meta | 8 + .../Resources/Shaders/GizmoSelectEncode.shader | 48 + .../Shaders/GizmoSelectEncode.shader.meta | 9 + .../Resources/Shaders/NormalGizmo.shader | 55 + .../Resources/Shaders/NormalGizmo.shader.meta | 9 + .../Resources/Shaders/ObjectSelectEncode.shader | 47 + .../Shaders/ObjectSelectEncode.shader.meta | 9 + .../Resources/Shaders/Outline.shader | 55 + .../Resources/Shaders/Outline.shader.meta | 9 + .../Resources/Shaders/RotateXYZGizmo.shader | 64 + .../Shaders/RotateXYZGizmo.shader.meta | 9 + .../Resources/Shaders/SphereGizmo.shader | 53 + .../Resources/Shaders/SphereGizmo.shader.meta | 9 + 参考/TransformGizmo/Scripts.meta | 8 + .../TransformGizmo/Scripts/DirectController.cs | 283 + .../Scripts/DirectController.cs.meta | 11 + 参考/TransformGizmo/Scripts/RuntimeGizmo.cs | 62 + .../TransformGizmo/Scripts/RuntimeGizmo.cs.meta | 11 + .../Scripts/RuntimeRotateGizmo.cs | 284 + .../Scripts/RuntimeRotateGizmo.cs.meta | 11 + .../Scripts/RuntimeTransformGizmo.cs | 109 + .../Scripts/RuntimeTransformGizmo.cs.meta | 11 + .../Scripts/RuntimeTranslateGizmo.cs | 336 + .../Scripts/RuntimeTranslateGizmo.cs.meta | 11 + 参考/TransformGizmo/Scripts/SelectDetector.cs | 327 + .../Scripts/SelectDetector.cs.meta | 11 + 参考/TransformGizmo/Test.meta | 8 + 参考/TransformGizmo/Test/New Material.mat | 83 + .../TransformGizmo/Test/New Material.mat.meta | 8 + 参考/TransformGizmo/Test/Test.cs | 28 + 参考/TransformGizmo/Test/Test.cs.meta | 11 + 参考/TransformGizmo/Test/Test.unity | 520 + 参考/TransformGizmo/Test/Test.unity.meta | 7 + 参考/unity-editor-icons/.gitignore | 9 + 参考/unity-editor-icons/Assets/Editor.meta | 9 + .../Assets/Editor/IconMiner.cs | 175 + .../Assets/Editor/IconMiner.cs.meta | 12 + .../unity-editor-icons/Packages/manifest.json | 5 + .../Packages/packages-lock.json | 11 + .../ProjectSettings/AudioManager.asset | 17 + .../ProjectSettings/ClusterInputManager.asset | 6 + .../ProjectSettings/DynamicsManager.asset | 19 + .../ProjectSettings/EditorBuildSettings.asset | 7 + .../ProjectSettings/EditorSettings.asset | 16 + .../ProjectSettings/GraphicsSettings.asset | 61 + .../ProjectSettings/InputManager.asset | 7 + .../ProjectSettings/NavMeshAreas.asset | 89 + .../ProjectSettings/NetworkManager.asset | 8 + .../ProjectSettings/Physics2DSettings.asset | 36 + .../ProjectSettings/PresetManager.asset | 6 + .../ProjectSettings/ProjectSettings.asset | 597 + .../ProjectSettings/ProjectVersion.txt | 2 + .../ProjectSettings/QualitySettings.asset | 52 + .../ProjectSettings/TagManager.asset | 43 + .../ProjectSettings/TimeManager.asset | 9 + .../ProjectSettings/UnityConnectSettings.asset | 34 + .../ProjectSettings/VFXManager.asset | 11 + .../VersionControlSettings.asset | 8 + .../ProjectSettings/XRSettings.asset | 10 + 参考/unity-editor-icons/README.md | 2219 + .../UserSettings/EditorUserSettings.asset | 19 + .../icons/small/AlphabeticalSorting.png | Bin 0 -> 307 bytes .../icons/small/AlphabeticalSorting@2x.png | Bin 0 -> 583 bytes .../icons/small/Animation.AddEvent.png | Bin 0 -> 187 bytes .../icons/small/Animation.AddKeyframe.png | Bin 0 -> 208 bytes .../icons/small/Animation.EventMarker.png | Bin 0 -> 111 bytes .../icons/small/Animation.FilterBySelection.png | Bin 0 -> 128 bytes .../icons/small/Animation.FirstKey.png | Bin 0 -> 197 bytes .../icons/small/Animation.LastKey.png | Bin 0 -> 201 bytes .../icons/small/Animation.NextKey.png | Bin 0 -> 145 bytes .../icons/small/Animation.Play.png | Bin 0 -> 150 bytes .../icons/small/Animation.PrevKey.png | Bin 0 -> 151 bytes .../icons/small/Animation.Record.png | Bin 0 -> 245 bytes .../icons/small/Animation.Record@2x.png | Bin 0 -> 413 bytes .../icons/small/Animation.SequencerLink.png | Bin 0 -> 167 bytes .../icons/small/AnimationWrapModeMenu.png | Bin 0 -> 287 bytes .../icons/small/AssemblyLock.png | Bin 0 -> 187 bytes .../icons/small/Asset Store.png | Bin 0 -> 167 bytes .../icons/small/Asset Store@2x.png | Bin 0 -> 261 bytes .../icons/small/Audio Mixer.png | Bin 0 -> 168 bytes .../icons/small/Audio Mixer@2x.png | Bin 0 -> 270 bytes .../icons/small/AutoLightbakingOff.png | Bin 0 -> 440 bytes .../icons/small/AutoLightbakingOff@2x.png | Bin 0 -> 938 bytes .../icons/small/AutoLightbakingOn.png | Bin 0 -> 418 bytes .../icons/small/AutoLightbakingOn@2x.png | Bin 0 -> 863 bytes .../icons/small/AvatarCompass.png | Bin 0 -> 365 bytes .../icons/small/AvatarController.Layer.png | Bin 0 -> 499 bytes .../icons/small/AvatarController.LayerHover.png | Bin 0 -> 520 bytes .../small/AvatarController.LayerSelected.png | Bin 0 -> 469 bytes .../icons/small/AvatarPivot.png | Bin 0 -> 177 bytes .../icons/small/AvatarPivot@2x.png | Bin 0 -> 355 bytes .../icons/small/AvatarSelector.png | Bin 0 -> 313 bytes .../icons/small/AvatarSelector@2x.png | Bin 0 -> 533 bytes .../icons/small/BuildSettings.Android On.png | Bin 0 -> 448 bytes .../icons/small/BuildSettings.Android On@2x.png | Bin 0 -> 579 bytes .../icons/small/BuildSettings.Android.Small.png | Bin 0 -> 269 bytes .../small/BuildSettings.Android.Small@2x.png | Bin 0 -> 439 bytes .../icons/small/BuildSettings.Android.png | Bin 0 -> 439 bytes .../icons/small/BuildSettings.Android@2x.png | Bin 0 -> 593 bytes .../icons/small/BuildSettings.Broadcom.png | Bin 0 -> 1356 bytes .../icons/small/BuildSettings.Editor.Small.png | Bin 0 -> 890 bytes .../icons/small/BuildSettings.Editor.png | Bin 0 -> 2292 bytes .../icons/small/BuildSettings.Facebook On.png | Bin 0 -> 308 bytes .../small/BuildSettings.Facebook On@2x.png | Bin 0 -> 416 bytes .../small/BuildSettings.Facebook.Small.png | Bin 0 -> 192 bytes .../small/BuildSettings.Facebook.Small@2x.png | Bin 0 -> 300 bytes .../icons/small/BuildSettings.Facebook.png | Bin 0 -> 300 bytes .../icons/small/BuildSettings.Facebook@2x.png | Bin 0 -> 414 bytes .../small/BuildSettings.FlashPlayer.Small.png | Bin 0 -> 336 bytes .../icons/small/BuildSettings.FlashPlayer.png | Bin 0 -> 1246 bytes .../icons/small/BuildSettings.Lumin On.png | Bin 0 -> 472 bytes .../icons/small/BuildSettings.Lumin On@2x.png | Bin 0 -> 571 bytes .../icons/small/BuildSettings.Lumin.png | Bin 0 -> 512 bytes .../icons/small/BuildSettings.Lumin.small.png | Bin 0 -> 272 bytes .../small/BuildSettings.Lumin.small@2x.png | Bin 0 -> 512 bytes .../icons/small/BuildSettings.Lumin@2x.png | Bin 0 -> 605 bytes .../icons/small/BuildSettings.Metro On.png | Bin 0 -> 329 bytes .../icons/small/BuildSettings.Metro On@2x.png | Bin 0 -> 471 bytes .../icons/small/BuildSettings.Metro.Small.png | Bin 0 -> 237 bytes .../small/BuildSettings.Metro.Small@2x.png | Bin 0 -> 346 bytes .../icons/small/BuildSettings.Metro.png | Bin 0 -> 346 bytes .../icons/small/BuildSettings.Metro@2x.png | Bin 0 -> 481 bytes .../icons/small/BuildSettings.N3DS On.png | Bin 0 -> 232 bytes .../icons/small/BuildSettings.N3DS On@2x.png | Bin 0 -> 338 bytes .../icons/small/BuildSettings.N3DS.Small.png | Bin 0 -> 127 bytes .../icons/small/BuildSettings.N3DS.Small@2x.png | Bin 0 -> 176 bytes .../icons/small/BuildSettings.N3DS.png | Bin 0 -> 176 bytes .../icons/small/BuildSettings.N3DS@2x.png | Bin 0 -> 287 bytes .../icons/small/BuildSettings.PS4 On.png | Bin 0 -> 350 bytes .../icons/small/BuildSettings.PS4 On@2x.png | Bin 0 -> 441 bytes .../icons/small/BuildSettings.PS4.Small.png | Bin 0 -> 204 bytes .../icons/small/BuildSettings.PS4.Small@2x.png | Bin 0 -> 369 bytes .../icons/small/BuildSettings.PS4.png | Bin 0 -> 369 bytes .../icons/small/BuildSettings.PS4@2x.png | Bin 0 -> 448 bytes .../icons/small/BuildSettings.PSM.Small.png | Bin 0 -> 1151 bytes .../icons/small/BuildSettings.PSM.png | Bin 0 -> 2478 bytes .../icons/small/BuildSettings.PSP2.Small.png | Bin 0 -> 202 bytes .../icons/small/BuildSettings.PSP2.png | Bin 0 -> 376 bytes .../icons/small/BuildSettings.SelectedIcon.png | Bin 0 -> 872 bytes .../icons/small/BuildSettings.Stadia On.png | Bin 0 -> 427 bytes .../icons/small/BuildSettings.Stadia On@2x.png | Bin 0 -> 530 bytes .../small/BuildSettings.Stadia.Small@2x.png | Bin 0 -> 428 bytes .../icons/small/BuildSettings.Stadia.png | Bin 0 -> 428 bytes .../icons/small/BuildSettings.Stadia.small.png | Bin 0 -> 261 bytes .../icons/small/BuildSettings.Stadia@2x.png | Bin 0 -> 542 bytes .../icons/small/BuildSettings.Standalone On.png | Bin 0 -> 211 bytes .../small/BuildSettings.Standalone On@2x.png | Bin 0 -> 388 bytes .../small/BuildSettings.Standalone.Small.png | Bin 0 -> 150 bytes .../small/BuildSettings.Standalone.Small@2x.png | Bin 0 -> 241 bytes .../icons/small/BuildSettings.Standalone.png | Bin 0 -> 241 bytes .../icons/small/BuildSettings.Standalone@2x.png | Bin 0 -> 400 bytes .../BuildSettings.StandaloneBroadcom.Small.png | Bin 0 -> 703 bytes .../BuildSettings.StandaloneGLES20Emu.Small.png | Bin 0 -> 703 bytes .../BuildSettings.StandaloneGLESEmu.Small.png | Bin 0 -> 703 bytes .../small/BuildSettings.StandaloneGLESEmu.png | Bin 0 -> 703 bytes .../icons/small/BuildSettings.Switch On.png | Bin 0 -> 380 bytes .../icons/small/BuildSettings.Switch On@2x.png | Bin 0 -> 525 bytes .../icons/small/BuildSettings.Switch.Small.png | Bin 0 -> 232 bytes .../small/BuildSettings.Switch.Small@2x.png | Bin 0 -> 386 bytes .../icons/small/BuildSettings.Switch.png | Bin 0 -> 386 bytes .../icons/small/BuildSettings.Switch@2x.png | Bin 0 -> 529 bytes .../icons/small/BuildSettings.WP8.Small.png | Bin 0 -> 372 bytes .../icons/small/BuildSettings.WP8.png | Bin 0 -> 658 bytes .../icons/small/BuildSettings.Web.Small.png | Bin 0 -> 291 bytes .../icons/small/BuildSettings.Web.png | Bin 0 -> 2476 bytes .../icons/small/BuildSettings.WebGL On.png | Bin 0 -> 426 bytes .../icons/small/BuildSettings.WebGL On@2x.png | Bin 0 -> 688 bytes .../icons/small/BuildSettings.WebGL.Small.png | Bin 0 -> 253 bytes .../small/BuildSettings.WebGL.Small@2x.png | Bin 0 -> 415 bytes .../icons/small/BuildSettings.WebGL.png | Bin 0 -> 415 bytes .../icons/small/BuildSettings.WebGL@2x.png | Bin 0 -> 694 bytes .../icons/small/BuildSettings.Xbox360.Small.png | Bin 0 -> 348 bytes .../icons/small/BuildSettings.Xbox360.png | Bin 0 -> 2479 bytes .../icons/small/BuildSettings.XboxOne On.png | Bin 0 -> 510 bytes .../icons/small/BuildSettings.XboxOne On@2x.png | Bin 0 -> 630 bytes .../icons/small/BuildSettings.XboxOne.Small.png | Bin 0 -> 277 bytes .../small/BuildSettings.XboxOne.Small@2x.png | Bin 0 -> 532 bytes .../icons/small/BuildSettings.XboxOne.png | Bin 0 -> 532 bytes .../icons/small/BuildSettings.XboxOne@2x.png | Bin 0 -> 642 bytes .../icons/small/BuildSettings.iPhone On.png | Bin 0 -> 558 bytes .../icons/small/BuildSettings.iPhone On@2x.png | Bin 0 -> 673 bytes .../icons/small/BuildSettings.iPhone.Small.png | Bin 0 -> 271 bytes .../small/BuildSettings.iPhone.Small@2x.png | Bin 0 -> 609 bytes .../icons/small/BuildSettings.iPhone.png | Bin 0 -> 609 bytes .../icons/small/BuildSettings.iPhone@2x.png | Bin 0 -> 674 bytes .../icons/small/BuildSettings.tvOS On.png | Bin 0 -> 456 bytes .../icons/small/BuildSettings.tvOS On@2x.png | Bin 0 -> 554 bytes .../icons/small/BuildSettings.tvOS.Small.png | Bin 0 -> 254 bytes .../icons/small/BuildSettings.tvOS.Small@2x.png | Bin 0 -> 499 bytes .../icons/small/BuildSettings.tvOS.png | Bin 0 -> 499 bytes .../icons/small/BuildSettings.tvOS@2x.png | Bin 0 -> 586 bytes .../icons/small/CacheServerConnected.png | Bin 0 -> 521 bytes .../icons/small/CacheServerConnected@2x.png | Bin 0 -> 780 bytes .../icons/small/CacheServerDisabled.png | Bin 0 -> 390 bytes .../icons/small/CacheServerDisabled@2x.png | Bin 0 -> 716 bytes .../icons/small/CacheServerDisconnected.png | Bin 0 -> 533 bytes .../icons/small/CacheServerDisconnected@2x.png | Bin 0 -> 767 bytes .../icons/small/CheckerFloor.png | Bin 0 -> 184 bytes .../icons/small/Clipboard.png | Bin 0 -> 323 bytes .../icons/small/ClothInspector.PaintTool.png | Bin 0 -> 431 bytes .../icons/small/ClothInspector.PaintValue.png | Bin 0 -> 431 bytes .../icons/small/ClothInspector.SelectTool.png | Bin 0 -> 244 bytes .../icons/small/ClothInspector.SettingsTool.png | Bin 0 -> 389 bytes .../icons/small/ClothInspector.ViewValue.png | Bin 0 -> 422 bytes .../icons/small/CloudConnect.png | Bin 0 -> 238 bytes .../icons/small/CloudConnect@2x.png | Bin 0 -> 384 bytes .../icons/small/Collab.Build.png | Bin 0 -> 848 bytes .../icons/small/Collab.BuildFailed.png | Bin 0 -> 848 bytes .../icons/small/Collab.BuildSucceeded.png | Bin 0 -> 848 bytes .../icons/small/Collab.FileAdded.png | Bin 0 -> 743 bytes .../icons/small/Collab.FileConflict.png | Bin 0 -> 706 bytes .../icons/small/Collab.FileDeleted.png | Bin 0 -> 536 bytes .../icons/small/Collab.FileIgnored.png | Bin 0 -> 620 bytes .../icons/small/Collab.FileMoved.png | Bin 0 -> 754 bytes .../icons/small/Collab.FileUpdated.png | Bin 0 -> 759 bytes .../icons/small/Collab.FolderAdded.png | Bin 0 -> 757 bytes .../icons/small/Collab.FolderConflict.png | Bin 0 -> 730 bytes .../icons/small/Collab.FolderDeleted.png | Bin 0 -> 544 bytes .../icons/small/Collab.FolderIgnored.png | Bin 0 -> 641 bytes .../icons/small/Collab.FolderMoved.png | Bin 0 -> 769 bytes .../icons/small/Collab.FolderUpdated.png | Bin 0 -> 791 bytes .../icons/small/Collab.NoInternet.png | Bin 0 -> 546 bytes .../icons/small/Collab.Warning.png | Bin 0 -> 588 bytes .../unity-editor-icons/icons/small/Collab.png | Bin 0 -> 180 bytes .../icons/small/Collab@2x.png | Bin 0 -> 334 bytes .../icons/small/CollabConflict.png | Bin 0 -> 183 bytes .../icons/small/CollabError.png | Bin 0 -> 238 bytes .../icons/small/CollabNew.png | Bin 0 -> 262 bytes .../icons/small/CollabOffline.png | Bin 0 -> 400 bytes .../icons/small/CollabProgress.png | Bin 0 -> 216 bytes .../icons/small/CollabPull.png | Bin 0 -> 256 bytes .../icons/small/CollabPush.png | Bin 0 -> 253 bytes .../icons/small/ColorPicker.ColorCycle.png | Bin 0 -> 729 bytes .../icons/small/ColorPicker.CycleColor.png | Bin 0 -> 594 bytes .../icons/small/ColorPicker.CycleSlider.png | Bin 0 -> 639 bytes .../icons/small/ColorPicker.SliderCycle.png | Bin 0 -> 811 bytes .../icons/small/CreateAddNew.png | Bin 0 -> 95 bytes .../icons/small/CreateAddNew@2x.png | Bin 0 -> 96 bytes .../icons/small/CrossIcon.png | Bin 0 -> 235 bytes .../icons/small/CustomSorting.png | Bin 0 -> 263 bytes .../icons/small/CustomTool.png | Bin 0 -> 372 bytes .../icons/small/CustomTool@2x.png | Bin 0 -> 763 bytes .../icons/small/DebuggerAttached.png | Bin 0 -> 538 bytes .../icons/small/DebuggerAttached@2x.png | Bin 0 -> 905 bytes .../icons/small/DebuggerDisabled.png | Bin 0 -> 401 bytes .../icons/small/DebuggerDisabled@2x.png | Bin 0 -> 753 bytes .../icons/small/DebuggerEnabled.png | Bin 0 -> 481 bytes .../icons/small/DebuggerEnabled@2x.png | Bin 0 -> 930 bytes .../icons/small/DefaultSorting.png | Bin 0 -> 265 bytes .../icons/small/DefaultSorting@2x.png | Bin 0 -> 511 bytes .../icons/small/EditCollider.png | Bin 0 -> 151 bytes .../unity-editor-icons/icons/small/Exposure.png | Bin 0 -> 188 bytes .../icons/small/Exposure@2x.png | Bin 0 -> 285 bytes .../unity-editor-icons/icons/small/Favorite.png | Bin 0 -> 221 bytes .../icons/small/Favorite@2x.png | Bin 0 -> 403 bytes .../icons/small/FilterByLabel.png | Bin 0 -> 176 bytes .../icons/small/FilterByLabel@2x.png | Bin 0 -> 255 bytes .../icons/small/FilterByType.png | Bin 0 -> 227 bytes .../icons/small/FilterByType@2x.png | Bin 0 -> 422 bytes .../icons/small/FilterSelectedOnly.png | Bin 0 -> 261 bytes .../icons/small/FilterSelectedOnly@2x.png | Bin 0 -> 482 bytes .../icons/small/FrameCapture.png | Bin 0 -> 284 bytes .../icons/small/FrameCapture@2x.png | Bin 0 -> 528 bytes 参考/unity-editor-icons/icons/small/GEAR.png | Bin 0 -> 175 bytes .../icons/small/Grid.BoxTool.png | Bin 0 -> 190 bytes .../icons/small/Grid.BoxTool@2x.png | Bin 0 -> 269 bytes .../icons/small/Grid.Default.png | Bin 0 -> 151 bytes .../icons/small/Grid.Default@2x.png | Bin 0 -> 235 bytes .../icons/small/Grid.EraserTool.png | Bin 0 -> 252 bytes .../icons/small/Grid.EraserTool@2x.png | Bin 0 -> 338 bytes .../icons/small/Grid.FillTool.png | Bin 0 -> 287 bytes .../icons/small/Grid.FillTool@2x.png | Bin 0 -> 460 bytes .../icons/small/Grid.MoveTool.png | Bin 0 -> 320 bytes .../icons/small/Grid.MoveTool@2x.png | Bin 0 -> 494 bytes .../icons/small/Grid.PaintTool.png | Bin 0 -> 269 bytes .../icons/small/Grid.PaintTool@2x.png | Bin 0 -> 480 bytes .../icons/small/Grid.PickingTool.png | Bin 0 -> 287 bytes .../icons/small/Grid.PickingTool@2x.png | Bin 0 -> 437 bytes .../unity-editor-icons/icons/small/Groove.png | Bin 0 -> 210 bytes .../icons/small/HorizontalSplit.png | Bin 0 -> 181 bytes .../unity-editor-icons/icons/small/Import.png | Bin 0 -> 309 bytes .../icons/small/Import@2x.png | Bin 0 -> 460 bytes .../icons/small/InspectorLock.png | Bin 0 -> 187 bytes .../unity-editor-icons/icons/small/Invalid.png | Bin 0 -> 202 bytes .../icons/small/Invalid@2x.png | Bin 0 -> 323 bytes .../icons/small/JointAngularLimits.png | Bin 0 -> 306 bytes .../icons/small/KnobCShape.png | Bin 0 -> 609 bytes .../icons/small/KnobCShapeMini.png | Bin 0 -> 420 bytes .../unity-editor-icons/icons/small/Lighting.png | Bin 0 -> 211 bytes .../icons/small/Lighting@2x.png | Bin 0 -> 323 bytes .../icons/small/LightmapEditor.WindowTitle.png | Bin 0 -> 211 bytes .../small/LightmapEditor.WindowTitle@2x.png | Bin 0 -> 323 bytes .../icons/small/Lightmapping.png | Bin 0 -> 240 bytes .../unity-editor-icons/icons/small/Linked.png | Bin 0 -> 207 bytes .../icons/small/Linked@2x.png | Bin 0 -> 380 bytes .../icons/small/LockIcon-On.png | Bin 0 -> 147 bytes .../unity-editor-icons/icons/small/LockIcon.png | Bin 0 -> 147 bytes .../icons/small/MainStageView.png | Bin 0 -> 117 bytes .../icons/small/MainStageView@2x.png | Bin 0 -> 165 bytes .../unity-editor-icons/icons/small/Mirror.png | Bin 0 -> 340 bytes .../icons/small/MoreOptions.png | Bin 0 -> 303 bytes .../icons/small/MoreOptions@2x.png | Bin 0 -> 524 bytes .../icons/small/MoveTool On@2x.png | Bin 0 -> 337 bytes .../icons/small/MoveTool on.png | Bin 0 -> 285 bytes .../unity-editor-icons/icons/small/MoveTool.png | Bin 0 -> 328 bytes .../icons/small/MoveTool@2x.png | Bin 0 -> 445 bytes .../icons/small/Navigation.png | Bin 0 -> 211 bytes .../icons/small/Occlusion.png | Bin 0 -> 104 bytes .../icons/small/Occlusion@2x.png | Bin 0 -> 107 bytes .../icons/small/Package Manager.png | Bin 0 -> 160 bytes .../icons/small/Package Manager@2x.png | Bin 0 -> 204 bytes .../icons/small/PackageBadgeDelete.png | Bin 0 -> 439 bytes .../icons/small/PackageBadgeNew.png | Bin 0 -> 493 bytes .../icons/small/Particle Effect.png | Bin 0 -> 246 bytes .../icons/small/ParticleShapeTool On.png | Bin 0 -> 408 bytes .../icons/small/ParticleShapeTool On@2x.png | Bin 0 -> 748 bytes .../icons/small/ParticleShapeTool On@3x.png | Bin 0 -> 1283 bytes .../icons/small/ParticleShapeTool On@4x.png | Bin 0 -> 1131 bytes .../icons/small/ParticleShapeTool.png | Bin 0 -> 408 bytes .../icons/small/ParticleShapeTool@2x.png | Bin 0 -> 748 bytes .../icons/small/ParticleShapeTool@3x.png | Bin 0 -> 1283 bytes .../icons/small/ParticleShapeTool@4x.png | Bin 0 -> 1131 bytes .../icons/small/PauseButton On.png | Bin 0 -> 114 bytes .../icons/small/PauseButton On@2x.png | Bin 0 -> 145 bytes .../icons/small/PauseButton.png | Bin 0 -> 106 bytes .../icons/small/PauseButton@2x.png | Bin 0 -> 143 bytes .../icons/small/PlayButton On.png | Bin 0 -> 140 bytes .../icons/small/PlayButton On@2x.png | Bin 0 -> 251 bytes .../icons/small/PlayButton.png | Bin 0 -> 169 bytes .../icons/small/PlayButton@2x.png | Bin 0 -> 287 bytes .../icons/small/PlayButtonProfile On.png | Bin 0 -> 1142 bytes .../icons/small/PlayButtonProfile.png | Bin 0 -> 704 bytes .../icons/small/PreMatCube.png | Bin 0 -> 279 bytes .../icons/small/PreMatCube@2x.png | Bin 0 -> 537 bytes .../icons/small/PreMatCylinder.png | Bin 0 -> 199 bytes .../icons/small/PreMatCylinder@2x.png | Bin 0 -> 351 bytes .../icons/small/PreMatLight0.png | Bin 0 -> 316 bytes .../icons/small/PreMatLight0@2x.png | Bin 0 -> 477 bytes .../icons/small/PreMatLight1.png | Bin 0 -> 338 bytes .../icons/small/PreMatLight1@2x.png | Bin 0 -> 523 bytes .../icons/small/PreMatQuad.png | Bin 0 -> 90 bytes .../icons/small/PreMatQuad@2x.png | Bin 0 -> 91 bytes .../icons/small/PreMatSphere.png | Bin 0 -> 281 bytes .../icons/small/PreMatSphere@2x.png | Bin 0 -> 523 bytes .../icons/small/PreMatTorus.png | Bin 0 -> 239 bytes .../icons/small/PreMatTorus@2x.png | Bin 0 -> 443 bytes .../unity-editor-icons/icons/small/PreTexA.png | Bin 0 -> 188 bytes .../icons/small/PreTexA@2x.png | Bin 0 -> 352 bytes .../unity-editor-icons/icons/small/PreTexB.png | Bin 0 -> 196 bytes .../icons/small/PreTexB@2x.png | Bin 0 -> 329 bytes .../unity-editor-icons/icons/small/PreTexG.png | Bin 0 -> 220 bytes .../icons/small/PreTexG@2x.png | Bin 0 -> 403 bytes .../unity-editor-icons/icons/small/PreTexR.png | Bin 0 -> 191 bytes .../icons/small/PreTexR@2x.png | Bin 0 -> 316 bytes .../icons/small/PreTexRGB.png | Bin 0 -> 379 bytes .../icons/small/PreTexRGB@2x.png | Bin 0 -> 584 bytes .../icons/small/PreTextureAlpha.png | Bin 0 -> 247 bytes .../icons/small/PreTextureArrayFirstSlice.png | Bin 0 -> 919 bytes .../icons/small/PreTextureArrayLastSlice.png | Bin 0 -> 875 bytes .../icons/small/PreTextureMipMapHigh.png | Bin 0 -> 301 bytes .../icons/small/PreTextureMipMapLow.png | Bin 0 -> 478 bytes .../icons/small/PreTextureRGB.png | Bin 0 -> 295 bytes .../icons/small/Preset.Context.png | Bin 0 -> 141 bytes .../icons/small/Preset.Context@2x.png | Bin 0 -> 200 bytes .../icons/small/PreviewPackageInUse.png | Bin 0 -> 159 bytes .../icons/small/PreviewPackageInUse@2x.png | Bin 0 -> 731 bytes .../icons/small/Profiler.Audio.png | Bin 0 -> 199 bytes .../icons/small/Profiler.Audio@2x.png | Bin 0 -> 305 bytes .../icons/small/Profiler.CPU.png | Bin 0 -> 348 bytes .../icons/small/Profiler.CPU@2x.png | Bin 0 -> 742 bytes .../icons/small/Profiler.FirstFrame.png | Bin 0 -> 163 bytes .../icons/small/Profiler.GPU.png | Bin 0 -> 351 bytes .../icons/small/Profiler.GPU@2x.png | Bin 0 -> 725 bytes .../icons/small/Profiler.GlobalIllumination.png | Bin 0 -> 387 bytes .../small/Profiler.GlobalIllumination@2x.png | Bin 0 -> 910 bytes .../icons/small/Profiler.Instrumentation.png | Bin 0 -> 319 bytes .../icons/small/Profiler.LastFrame.png | Bin 0 -> 159 bytes .../icons/small/Profiler.Memory.png | Bin 0 -> 220 bytes .../icons/small/Profiler.Memory@2x.png | Bin 0 -> 260 bytes .../icons/small/Profiler.NetworkMessages.png | Bin 0 -> 342 bytes .../icons/small/Profiler.NetworkMessages@2x.png | Bin 0 -> 632 bytes .../icons/small/Profiler.NetworkOperations.png | Bin 0 -> 324 bytes .../small/Profiler.NetworkOperations@2x.png | Bin 0 -> 677 bytes .../icons/small/Profiler.NextFrame.png | Bin 0 -> 117 bytes .../icons/small/Profiler.Physics.png | Bin 0 -> 317 bytes .../icons/small/Profiler.Physics2D.png | Bin 0 -> 295 bytes .../icons/small/Profiler.Physics2D@2x.png | Bin 0 -> 515 bytes .../icons/small/Profiler.Physics@2x.png | Bin 0 -> 576 bytes .../icons/small/Profiler.PrevFrame.png | Bin 0 -> 117 bytes .../icons/small/Profiler.Record.png | Bin 0 -> 319 bytes .../icons/small/Profiler.Rendering.png | Bin 0 -> 304 bytes .../icons/small/Profiler.Rendering@2x.png | Bin 0 -> 554 bytes .../icons/small/Profiler.UI.png | Bin 0 -> 277 bytes .../icons/small/Profiler.UI@2x.png | Bin 0 -> 560 bytes .../icons/small/Profiler.UIDetails.png | Bin 0 -> 179 bytes .../icons/small/Profiler.UIDetails@2x.png | Bin 0 -> 252 bytes .../icons/small/Profiler.Video.png | Bin 0 -> 141 bytes .../icons/small/Profiler.Video@2x.png | Bin 0 -> 229 bytes .../icons/small/ProfilerColumn.WarningCount.png | Bin 0 -> 329 bytes .../unity-editor-icons/icons/small/Progress.png | Bin 0 -> 359 bytes .../icons/small/Progress@2x.png | Bin 0 -> 718 bytes .../unity-editor-icons/icons/small/Project.png | Bin 0 -> 137 bytes .../icons/small/Project@2x.png | Bin 0 -> 161 bytes .../icons/small/Record Off.png | Bin 0 -> 334 bytes .../icons/small/Record Off@2x.png | Bin 0 -> 585 bytes .../icons/small/Record On.png | Bin 0 -> 248 bytes .../icons/small/Record On@2x.png | Bin 0 -> 448 bytes .../icons/small/RectTool On.png | Bin 0 -> 155 bytes .../icons/small/RectTool On@2x.png | Bin 0 -> 251 bytes .../unity-editor-icons/icons/small/RectTool.png | Bin 0 -> 167 bytes .../icons/small/RectTool@2x.png | Bin 0 -> 239 bytes .../icons/small/RectTransformBlueprint.png | Bin 0 -> 105 bytes .../icons/small/RectTransformRaw.png | Bin 0 -> 108 bytes .../icons/small/ReflectionProbeSelector.png | Bin 0 -> 304 bytes .../icons/small/ReflectionProbeSelector@2x.png | Bin 0 -> 567 bytes .../unity-editor-icons/icons/small/Refresh.png | Bin 0 -> 287 bytes .../icons/small/Refresh@2x.png | Bin 0 -> 563 bytes .../icons/small/RotateTool On.png | Bin 0 -> 285 bytes .../icons/small/RotateTool On@2x.png | Bin 0 -> 565 bytes .../icons/small/RotateTool.png | Bin 0 -> 330 bytes .../icons/small/RotateTool@2x.png | Bin 0 -> 625 bytes .../icons/small/RotateTool@4x.png | Bin 0 -> 604 bytes .../icons/small/SaveActive.png | Bin 0 -> 219 bytes .../unity-editor-icons/icons/small/SaveAs.png | Bin 0 -> 196 bytes .../icons/small/SaveAs@2x.png | Bin 0 -> 256 bytes .../icons/small/SaveFromPlay.png | Bin 0 -> 492 bytes .../icons/small/SavePassive.png | Bin 0 -> 155 bytes .../icons/small/ScaleTool On.png | Bin 0 -> 195 bytes .../icons/small/ScaleTool On@2x.png | Bin 0 -> 295 bytes .../icons/small/ScaleTool.png | Bin 0 -> 198 bytes .../icons/small/ScaleTool@2x.png | Bin 0 -> 298 bytes .../icons/small/SceneLoadIn.png | Bin 0 -> 410 bytes .../icons/small/SceneLoadOut.png | Bin 0 -> 400 bytes .../icons/small/SceneSave.png | Bin 0 -> 164 bytes .../icons/small/SceneSaveGrey.png | Bin 0 -> 187 bytes .../icons/small/SceneView2D.png | Bin 0 -> 245 bytes .../icons/small/SceneView2D@2x.png | Bin 0 -> 443 bytes .../icons/small/SceneViewAlpha.png | Bin 0 -> 263 bytes .../icons/small/SceneViewAudio Off.png | Bin 0 -> 198 bytes .../icons/small/SceneViewAudio Off@2x.png | Bin 0 -> 398 bytes .../icons/small/SceneViewAudio.png | Bin 0 -> 208 bytes .../icons/small/SceneViewAudio@2x.png | Bin 0 -> 403 bytes .../icons/small/SceneViewCamera.png | Bin 0 -> 165 bytes .../icons/small/SceneViewCamera@2x.png | Bin 0 -> 241 bytes .../icons/small/SceneViewFX@2x.png | Bin 0 -> 520 bytes .../icons/small/SceneViewFx.png | Bin 0 -> 298 bytes .../icons/small/SceneViewLighting Off.png | Bin 0 -> 249 bytes .../icons/small/SceneViewLighting Off@2x.png | Bin 0 -> 446 bytes .../icons/small/SceneViewLighting.png | Bin 0 -> 207 bytes .../icons/small/SceneViewLighting@2x.png | Bin 0 -> 340 bytes .../icons/small/SceneViewOrtho.png | Bin 0 -> 309 bytes .../icons/small/SceneViewRGB.png | Bin 0 -> 304 bytes .../icons/small/SceneViewTools.png | Bin 0 -> 284 bytes .../icons/small/SceneViewTools@2x.png | Bin 0 -> 661 bytes .../icons/small/SceneViewVisibility.png | Bin 0 -> 298 bytes .../icons/small/SceneViewVisibility@2x.png | Bin 0 -> 520 bytes .../icons/small/ScrollShadow.png | Bin 0 -> 122 bytes .../unity-editor-icons/icons/small/Settings.png | Bin 0 -> 278 bytes .../icons/small/Settings@2x.png | Bin 0 -> 534 bytes .../icons/small/SettingsIcon.png | Bin 0 -> 278 bytes .../icons/small/SettingsIcon@2x.png | Bin 0 -> 534 bytes .../small/SocialNetworks.FacebookShare.png | Bin 0 -> 799 bytes .../small/SocialNetworks.LinkedInShare.png | Bin 0 -> 799 bytes .../icons/small/SocialNetworks.Tweet.png | Bin 0 -> 867 bytes .../icons/small/SocialNetworks.UDNLogo.png | Bin 0 -> 1352 bytes .../icons/small/SocialNetworks.UDNOpen.png | Bin 0 -> 805 bytes .../icons/small/SoftlockInline.png | Bin 0 -> 190 bytes .../icons/small/SpeedScale.png | Bin 0 -> 456 bytes .../icons/small/StateMachineEditor.ArrowTip.png | Bin 0 -> 218 bytes .../StateMachineEditor.ArrowTipSelected.png | Bin 0 -> 187 bytes .../small/StateMachineEditor.Background.png | Bin 0 -> 306 bytes .../icons/small/StateMachineEditor.State.png | Bin 0 -> 1230 bytes .../small/StateMachineEditor.StateHover.png | Bin 0 -> 1357 bytes .../small/StateMachineEditor.StateSelected.png | Bin 0 -> 1180 bytes .../icons/small/StateMachineEditor.StateSub.png | Bin 0 -> 874 bytes .../small/StateMachineEditor.StateSubHover.png | Bin 0 -> 967 bytes .../StateMachineEditor.StateSubSelected.png | Bin 0 -> 991 bytes .../icons/small/StateMachineEditor.UpButton.png | Bin 0 -> 784 bytes .../small/StateMachineEditor.UpButtonHover.png | Bin 0 -> 817 bytes .../icons/small/StepButton On.png | Bin 0 -> 164 bytes .../icons/small/StepButton On@2x.png | Bin 0 -> 293 bytes .../icons/small/StepButton.png | Bin 0 -> 177 bytes .../icons/small/StepButton@2x.png | Bin 0 -> 322 bytes .../icons/small/StepLeftButton-On.png | Bin 0 -> 1084 bytes .../icons/small/StepLeftButton.png | Bin 0 -> 354 bytes .../small/TerrainInspector.TerrainToolAdd.png | Bin 0 -> 374 bytes .../TerrainInspector.TerrainToolLower On.png | Bin 0 -> 303 bytes .../small/TerrainInspector.TerrainToolLower.png | Bin 0 -> 555 bytes .../TerrainInspector.TerrainToolLowerAlt.png | Bin 0 -> 294 bytes .../TerrainInspector.TerrainToolPlants On.png | Bin 0 -> 428 bytes .../TerrainInspector.TerrainToolPlants.png | Bin 0 -> 337 bytes ...TerrainInspector.TerrainToolPlantsAlt On.png | Bin 0 -> 1043 bytes .../TerrainInspector.TerrainToolPlantsAlt.png | Bin 0 -> 763 bytes .../TerrainInspector.TerrainToolRaise On.png | Bin 0 -> 315 bytes .../small/TerrainInspector.TerrainToolRaise.png | Bin 0 -> 296 bytes .../TerrainInspector.TerrainToolSculpt On.png | Bin 0 -> 247 bytes .../TerrainInspector.TerrainToolSculpt.png | Bin 0 -> 263 bytes ...TerrainInspector.TerrainToolSetheight On.png | Bin 0 -> 321 bytes .../TerrainInspector.TerrainToolSetheight.png | Bin 0 -> 295 bytes ...rainInspector.TerrainToolSetheightAlt On.png | Bin 0 -> 331 bytes ...TerrainInspector.TerrainToolSetheightAlt.png | Bin 0 -> 281 bytes .../TerrainInspector.TerrainToolSettings On.png | Bin 0 -> 427 bytes .../TerrainInspector.TerrainToolSettings.png | Bin 0 -> 389 bytes ...rainInspector.TerrainToolSmoothHeight On.png | Bin 0 -> 502 bytes ...TerrainInspector.TerrainToolSmoothHeight.png | Bin 0 -> 443 bytes .../TerrainInspector.TerrainToolSplat On.png | Bin 0 -> 615 bytes .../small/TerrainInspector.TerrainToolSplat.png | Bin 0 -> 431 bytes .../TerrainInspector.TerrainToolSplatAlt On.png | Bin 0 -> 659 bytes .../TerrainInspector.TerrainToolSplatAlt.png | Bin 0 -> 435 bytes .../TerrainInspector.TerrainToolTrees On.png | Bin 0 -> 399 bytes .../small/TerrainInspector.TerrainToolTrees.png | Bin 0 -> 316 bytes .../TerrainInspector.TerrainToolTreesAlt On.png | Bin 0 -> 941 bytes .../TerrainInspector.TerrainToolTreesAlt.png | Bin 0 -> 682 bytes .../icons/small/TestFailed.png | Bin 0 -> 210 bytes .../icons/small/TestIgnored.png | Bin 0 -> 204 bytes .../icons/small/TestInconclusive.png | Bin 0 -> 214 bytes .../icons/small/TestNormal.png | Bin 0 -> 204 bytes .../icons/small/TestPassed.png | Bin 0 -> 260 bytes .../icons/small/TestStopwatch.png | Bin 0 -> 405 bytes .../icons/small/ToggleUVOverlay.png | Bin 0 -> 349 bytes .../icons/small/ToggleUVOverlay@2x.png | Bin 0 -> 784 bytes .../icons/small/ToolHandleCenter.png | Bin 0 -> 210 bytes .../icons/small/ToolHandleCenter@2x.png | Bin 0 -> 325 bytes .../icons/small/ToolHandleGlobal.png | Bin 0 -> 553 bytes .../icons/small/ToolHandleGlobal@2x.png | Bin 0 -> 1076 bytes .../icons/small/ToolHandleLocal.png | Bin 0 -> 554 bytes .../icons/small/ToolHandleLocal@2x.png | Bin 0 -> 965 bytes .../icons/small/ToolHandlePivot.png | Bin 0 -> 235 bytes .../icons/small/ToolHandlePivot@2x.png | Bin 0 -> 343 bytes .../icons/small/Toolbar Minus.png | Bin 0 -> 92 bytes .../icons/small/Toolbar Minus@2x.png | Bin 0 -> 129 bytes .../icons/small/Toolbar Plus More.png | Bin 0 -> 157 bytes .../icons/small/Toolbar Plus More@2x.png | Bin 0 -> 240 bytes .../icons/small/Toolbar Plus.png | Bin 0 -> 123 bytes .../icons/small/Toolbar Plus@2x.png | Bin 0 -> 176 bytes .../icons/small/ToolsIcon.png | Bin 0 -> 402 bytes .../icons/small/TransformTool On.png | Bin 0 -> 337 bytes .../icons/small/TransformTool On@2x.png | Bin 0 -> 559 bytes .../icons/small/TransformTool.png | Bin 0 -> 408 bytes .../icons/small/TransformTool@2x.png | Bin 0 -> 847 bytes .../icons/small/TreeEditor.AddBranches.png | Bin 0 -> 279 bytes .../icons/small/TreeEditor.AddLeaves.png | Bin 0 -> 641 bytes .../icons/small/TreeEditor.Branch On.png | Bin 0 -> 322 bytes .../icons/small/TreeEditor.Branch.png | Bin 0 -> 264 bytes .../small/TreeEditor.BranchFreeHand On.png | Bin 0 -> 380 bytes .../icons/small/TreeEditor.BranchFreeHand.png | Bin 0 -> 307 bytes .../icons/small/TreeEditor.BranchRotate On.png | Bin 0 -> 440 bytes .../icons/small/TreeEditor.BranchRotate.png | Bin 0 -> 356 bytes .../icons/small/TreeEditor.BranchScale On.png | Bin 0 -> 434 bytes .../icons/small/TreeEditor.BranchScale.png | Bin 0 -> 328 bytes .../small/TreeEditor.BranchTranslate On.png | Bin 0 -> 428 bytes .../icons/small/TreeEditor.BranchTranslate.png | Bin 0 -> 363 bytes .../icons/small/TreeEditor.Distribution On.png | Bin 0 -> 338 bytes .../icons/small/TreeEditor.Distribution.png | Bin 0 -> 334 bytes .../icons/small/TreeEditor.Duplicate.png | Bin 0 -> 231 bytes .../icons/small/TreeEditor.Geometry On.png | Bin 0 -> 405 bytes .../icons/small/TreeEditor.Geometry.png | Bin 0 -> 415 bytes .../icons/small/TreeEditor.Leaf On.png | Bin 0 -> 270 bytes .../icons/small/TreeEditor.Leaf.png | Bin 0 -> 275 bytes .../icons/small/TreeEditor.LeafFreeHand On.png | Bin 0 -> 352 bytes .../icons/small/TreeEditor.LeafFreeHand.png | Bin 0 -> 355 bytes .../icons/small/TreeEditor.LeafRotate On.png | Bin 0 -> 408 bytes .../icons/small/TreeEditor.LeafRotate.png | Bin 0 -> 380 bytes .../icons/small/TreeEditor.LeafScale On.png | Bin 0 -> 392 bytes .../icons/small/TreeEditor.LeafScale.png | Bin 0 -> 365 bytes .../icons/small/TreeEditor.LeafTranslate On.png | Bin 0 -> 387 bytes .../icons/small/TreeEditor.LeafTranslate.png | Bin 0 -> 398 bytes .../icons/small/TreeEditor.Material On.png | Bin 0 -> 487 bytes .../icons/small/TreeEditor.Material.png | Bin 0 -> 507 bytes .../icons/small/TreeEditor.Refresh.png | Bin 0 -> 345 bytes .../icons/small/TreeEditor.Trash.png | Bin 0 -> 214 bytes .../icons/small/TreeEditor.Wind On.png | Bin 0 -> 265 bytes .../icons/small/TreeEditor.Wind.png | Bin 0 -> 256 bytes .../unity-editor-icons/icons/small/UnLinked.png | Bin 0 -> 258 bytes .../icons/small/UnLinked@2x.png | Bin 0 -> 537 bytes .../icons/small/UnityEditor.AnimationWindow.png | Bin 0 -> 244 bytes .../small/UnityEditor.AnimationWindow@2x.png | Bin 0 -> 465 bytes .../icons/small/UnityEditor.ConsoleWindow.png | Bin 0 -> 126 bytes .../small/UnityEditor.ConsoleWindow@2x.png | Bin 0 -> 165 bytes .../small/UnityEditor.DebugInspectorWindow.png | Bin 0 -> 244 bytes .../small/UnityEditor.FindDependencies.png | Bin 0 -> 256 bytes .../icons/small/UnityEditor.GameView.png | Bin 0 -> 211 bytes .../icons/small/UnityEditor.GameView@2x.png | Bin 0 -> 353 bytes ...nityEditor.Graphs.AnimatorControllerTool.png | Bin 0 -> 196 bytes ...yEditor.Graphs.AnimatorControllerTool@2x.png | Bin 0 -> 409 bytes .../icons/small/UnityEditor.HierarchyWindow.png | Bin 0 -> 117 bytes .../small/UnityEditor.HierarchyWindow@2x.png | Bin 0 -> 165 bytes .../icons/small/UnityEditor.InspectorWindow.png | Bin 0 -> 209 bytes .../small/UnityEditor.InspectorWindow@2x.png | Bin 0 -> 324 bytes .../icons/small/UnityEditor.ProfilerWindow.png | Bin 0 -> 340 bytes .../small/UnityEditor.ProfilerWindow@2x.png | Bin 0 -> 703 bytes .../small/UnityEditor.SceneHierarchyWindow.png | Bin 0 -> 171 bytes .../UnityEditor.SceneHierarchyWindow@2x.png | Bin 0 -> 153 bytes .../icons/small/UnityEditor.SceneView.png | Bin 0 -> 117 bytes .../icons/small/UnityEditor.SceneView@2x.png | Bin 0 -> 169 bytes .../UnityEditor.Timeline.TimelineWindow.png | Bin 0 -> 141 bytes .../UnityEditor.Timeline.TimelineWindow@2x.png | Bin 0 -> 196 bytes .../icons/small/UnityEditor.VersionControl.png | Bin 0 -> 210 bytes .../icons/small/UnityLogo.png | Bin 0 -> 1286 bytes .../icons/small/UnityLogoLarge.png | Bin 0 -> 1914 bytes .../unity-editor-icons/icons/small/UpArrow.png | Bin 0 -> 363 bytes .../icons/small/VUMeterTextureHorizontal.png | Bin 0 -> 293 bytes .../icons/small/VUMeterTextureVertical.png | Bin 0 -> 293 bytes 参考/unity-editor-icons/icons/small/Valid.png | Bin 0 -> 170 bytes .../unity-editor-icons/icons/small/Valid@2x.png | Bin 0 -> 366 bytes .../icons/small/VerticalSplit.png | Bin 0 -> 172 bytes .../icons/small/ViewToolMove On.png | Bin 0 -> 311 bytes .../icons/small/ViewToolMove On@2x.png | Bin 0 -> 657 bytes .../icons/small/ViewToolMove.png | Bin 0 -> 322 bytes .../icons/small/ViewToolMove@2x.png | Bin 0 -> 639 bytes .../icons/small/ViewToolOrbit On.png | Bin 0 -> 236 bytes .../icons/small/ViewToolOrbit On@2x.png | Bin 0 -> 381 bytes .../icons/small/ViewToolOrbit.png | Bin 0 -> 355 bytes .../icons/small/ViewToolOrbit@2x.png | Bin 0 -> 522 bytes .../icons/small/ViewToolZoom On.png | Bin 0 -> 263 bytes .../icons/small/ViewToolZoom On@2x.png | Bin 0 -> 458 bytes .../icons/small/ViewToolZoom.png | Bin 0 -> 336 bytes .../icons/small/ViewToolZoom@2x.png | Bin 0 -> 571 bytes .../icons/small/VisibilityOff.png | Bin 0 -> 154 bytes .../icons/small/VisibilityOn.png | Bin 0 -> 236 bytes .../icons/small/WaitSpin00.png | Bin 0 -> 314 bytes .../icons/small/WaitSpin01.png | Bin 0 -> 318 bytes .../icons/small/WaitSpin02.png | Bin 0 -> 320 bytes .../icons/small/WaitSpin03.png | Bin 0 -> 322 bytes .../icons/small/WaitSpin04.png | Bin 0 -> 318 bytes .../icons/small/WaitSpin05.png | Bin 0 -> 314 bytes .../icons/small/WaitSpin06.png | Bin 0 -> 314 bytes .../icons/small/WaitSpin07.png | Bin 0 -> 307 bytes .../icons/small/WaitSpin08.png | Bin 0 -> 310 bytes .../icons/small/WaitSpin09.png | Bin 0 -> 323 bytes .../icons/small/WaitSpin10.png | Bin 0 -> 317 bytes .../icons/small/WaitSpin11.png | Bin 0 -> 318 bytes .../small/WelcomeScreen.AssetStoreLogo.png | Bin 0 -> 1866 bytes 参考/unity-editor-icons/icons/small/_Help.png | Bin 0 -> 255 bytes .../unity-editor-icons/icons/small/_Help@2x.png | Bin 0 -> 446 bytes 参考/unity-editor-icons/icons/small/_Menu.png | Bin 0 -> 149 bytes .../unity-editor-icons/icons/small/_Menu@2x.png | Bin 0 -> 204 bytes .../unity-editor-icons/icons/small/_Popup.png | Bin 0 -> 250 bytes .../icons/small/_Popup@2x.png | Bin 0 -> 423 bytes .../icons/small/aboutwindow.mainheader.png | Bin 0 -> 934 bytes .../icons/small/ageialogo.png | Bin 0 -> 1300 bytes .../icons/small/animationanimated.png | Bin 0 -> 125 bytes .../icons/small/animationdopesheetkeyframe.png | Bin 0 -> 109 bytes .../icons/small/animationkeyframe.png | Bin 0 -> 123 bytes .../icons/small/animationnocurve.png | Bin 0 -> 109 bytes .../small/animationvisibilitytoggleoff.png | Bin 0 -> 316 bytes .../small/animationvisibilitytoggleoff@2x.png | Bin 0 -> 573 bytes .../icons/small/animationvisibilitytoggleon.png | Bin 0 -> 277 bytes .../small/animationvisibilitytoggleon@2x.png | Bin 0 -> 538 bytes .../Unity-AssetStore-Originals-Logo-White.png | Bin 0 -> 266 bytes ...Unity-AssetStore-Originals-Logo-White@2x.png | Bin 0 -> 265 bytes .../small/avatarinspector/BodyPartPicker.png | Bin 0 -> 1055 bytes .../small/avatarinspector/BodySilhouette.png | Bin 0 -> 419 bytes .../icons/small/avatarinspector/DotFill.png | Bin 0 -> 133 bytes .../icons/small/avatarinspector/DotFrame.png | Bin 0 -> 273 bytes .../small/avatarinspector/DotFrameDotted.png | Bin 0 -> 323 bytes .../small/avatarinspector/DotSelection.png | Bin 0 -> 246 bytes .../icons/small/avatarinspector/Head.png | Bin 0 -> 133 bytes .../icons/small/avatarinspector/HeadIk.png | Bin 0 -> 114 bytes .../icons/small/avatarinspector/HeadZoom.png | Bin 0 -> 309 bytes .../avatarinspector/HeadZoomSilhouette.png | Bin 0 -> 334 bytes .../icons/small/avatarinspector/LeftArm.png | Bin 0 -> 177 bytes .../icons/small/avatarinspector/LeftFeetIk.png | Bin 0 -> 102 bytes .../icons/small/avatarinspector/LeftFingers.png | Bin 0 -> 105 bytes .../small/avatarinspector/LeftFingersIk.png | Bin 0 -> 111 bytes .../small/avatarinspector/LeftHandZoom.png | Bin 0 -> 287 bytes .../avatarinspector/LeftHandZoomSilhouette.png | Bin 0 -> 323 bytes .../icons/small/avatarinspector/LeftLeg.png | Bin 0 -> 173 bytes .../small/avatarinspector/MaskEditor_Root.png | Bin 0 -> 148 bytes .../icons/small/avatarinspector/RightArm.png | Bin 0 -> 177 bytes .../icons/small/avatarinspector/RightFeetIk.png | Bin 0 -> 105 bytes .../small/avatarinspector/RightFingers.png | Bin 0 -> 106 bytes .../small/avatarinspector/RightFingersIk.png | Bin 0 -> 112 bytes .../small/avatarinspector/RightHandZoom.png | Bin 0 -> 285 bytes .../avatarinspector/RightHandZoomSilhouette.png | Bin 0 -> 329 bytes .../icons/small/avatarinspector/RightLeg.png | Bin 0 -> 169 bytes .../icons/small/avatarinspector/Torso.png | Bin 0 -> 171 bytes 参考/unity-editor-icons/icons/small/back.png | Bin 0 -> 133 bytes .../unity-editor-icons/icons/small/back@2x.png | Bin 0 -> 218 bytes .../icons/small/beginButton-On.png | Bin 0 -> 1064 bytes .../icons/small/beginButton.png | Bin 0 -> 387 bytes .../unity-editor-icons/icons/small/blendKey.png | Bin 0 -> 118 bytes .../icons/small/blendKeyOverlay.png | Bin 0 -> 110 bytes .../icons/small/blendKeySelected.png | Bin 0 -> 120 bytes .../icons/small/blendSampler.png | Bin 0 -> 169 bytes .../icons/small/blueGroove.png | Bin 0 -> 201 bytes .../small/console.erroricon.inactive.sml.png | Bin 0 -> 211 bytes .../small/console.erroricon.inactive.sml@2x.png | Bin 0 -> 350 bytes .../icons/small/console.erroricon.png | Bin 0 -> 432 bytes .../icons/small/console.erroricon.sml.png | Bin 0 -> 273 bytes .../icons/small/console.erroricon.sml@2x.png | Bin 0 -> 432 bytes .../icons/small/console.erroricon@2x.png | Bin 0 -> 597 bytes .../small/console.infoicon.inactive.sml.png | Bin 0 -> 309 bytes .../small/console.infoicon.inactive.sml@2x.png | Bin 0 -> 511 bytes .../icons/small/console.infoicon.png | Bin 0 -> 862 bytes .../icons/small/console.infoicon.sml.png | Bin 0 -> 410 bytes .../icons/small/console.infoicon.sml@2x.png | Bin 0 -> 862 bytes .../icons/small/console.infoicon@2x.png | Bin 0 -> 1034 bytes .../small/console.warnicon.inactive.sml.png | Bin 0 -> 249 bytes .../small/console.warnicon.inactive.sml@2x.png | Bin 0 -> 486 bytes .../icons/small/console.warnicon.png | Bin 0 -> 624 bytes .../icons/small/console.warnicon.sml.png | Bin 0 -> 344 bytes .../icons/small/console.warnicon.sml@2x.png | Bin 0 -> 624 bytes .../icons/small/console.warnicon@2x.png | Bin 0 -> 757 bytes .../icons/small/curvekeyframe.png | Bin 0 -> 117 bytes .../icons/small/curvekeyframeselected.png | Bin 0 -> 99 bytes .../small/curvekeyframeselectedoverlay.png | Bin 0 -> 99 bytes .../small/curvekeyframesemiselectedoverlay.png | Bin 0 -> 93 bytes .../icons/small/curvekeyframeweighted.png | Bin 0 -> 118 bytes .../icons/small/d_AS Badge Delete.png | Bin 0 -> 532 bytes .../icons/small/d_AS Badge New.png | Bin 0 -> 549 bytes .../icons/small/d_AlphabeticalSorting.png | Bin 0 -> 297 bytes .../icons/small/d_AlphabeticalSorting@2x.png | Bin 0 -> 597 bytes .../icons/small/d_Animation.AddEvent.png | Bin 0 -> 191 bytes .../icons/small/d_Animation.AddKeyframe.png | Bin 0 -> 213 bytes .../icons/small/d_Animation.EventMarker.png | Bin 0 -> 111 bytes .../small/d_Animation.FilterBySelection.png | Bin 0 -> 143 bytes .../icons/small/d_Animation.FirstKey.png | Bin 0 -> 204 bytes .../icons/small/d_Animation.LastKey.png | Bin 0 -> 202 bytes .../icons/small/d_Animation.NextKey.png | Bin 0 -> 146 bytes .../icons/small/d_Animation.Play.png | Bin 0 -> 150 bytes .../icons/small/d_Animation.PrevKey.png | Bin 0 -> 151 bytes .../icons/small/d_Animation.Record.png | Bin 0 -> 233 bytes .../icons/small/d_Animation.Record@2x.png | Bin 0 -> 413 bytes .../icons/small/d_Animation.SequencerLink.png | Bin 0 -> 175 bytes .../icons/small/d_AnimationWrapModeMenu.png | Bin 0 -> 286 bytes .../icons/small/d_AssemblyLock.png | Bin 0 -> 193 bytes .../icons/small/d_Asset Store.png | Bin 0 -> 169 bytes .../icons/small/d_Asset Store@2x.png | Bin 0 -> 253 bytes .../icons/small/d_Audio Mixer.png | Bin 0 -> 168 bytes .../icons/small/d_Audio Mixer@2x.png | Bin 0 -> 256 bytes .../icons/small/d_AutoLightbakingOff.png | Bin 0 -> 437 bytes .../icons/small/d_AutoLightbakingOff@2x.png | Bin 0 -> 876 bytes .../icons/small/d_AutoLightbakingOn.png | Bin 0 -> 406 bytes .../icons/small/d_AutoLightbakingOn@2x.png | Bin 0 -> 810 bytes .../icons/small/d_AvatarBlendBackground.png | Bin 0 -> 405 bytes .../icons/small/d_AvatarBlendLeft.png | Bin 0 -> 784 bytes .../icons/small/d_AvatarBlendLeftA.png | Bin 0 -> 1015 bytes .../icons/small/d_AvatarBlendRight.png | Bin 0 -> 786 bytes .../icons/small/d_AvatarBlendRightA.png | Bin 0 -> 1016 bytes .../icons/small/d_AvatarCompass.png | Bin 0 -> 359 bytes .../icons/small/d_AvatarPivot.png | Bin 0 -> 175 bytes .../icons/small/d_AvatarPivot@2x.png | Bin 0 -> 343 bytes .../icons/small/d_AvatarSelector.png | Bin 0 -> 307 bytes .../icons/small/d_AvatarSelector@2x.png | Bin 0 -> 538 bytes .../small/d_BuildSettings.Android.Small.png | Bin 0 -> 274 bytes .../small/d_BuildSettings.Android.Small@2x.png | Bin 0 -> 460 bytes .../icons/small/d_BuildSettings.Android.png | Bin 0 -> 460 bytes .../icons/small/d_BuildSettings.Android@2x.png | Bin 0 -> 597 bytes .../icons/small/d_BuildSettings.Broadcom.png | Bin 0 -> 1502 bytes .../small/d_BuildSettings.Facebook.Small.png | Bin 0 -> 193 bytes .../small/d_BuildSettings.Facebook.Small@2x.png | Bin 0 -> 299 bytes .../icons/small/d_BuildSettings.Facebook.png | Bin 0 -> 299 bytes .../icons/small/d_BuildSettings.Facebook@2x.png | Bin 0 -> 425 bytes .../small/d_BuildSettings.FlashPlayer.Small.png | Bin 0 -> 330 bytes .../icons/small/d_BuildSettings.FlashPlayer.png | Bin 0 -> 1242 bytes .../icons/small/d_BuildSettings.Lumin.png | Bin 0 -> 492 bytes .../icons/small/d_BuildSettings.Lumin.small.png | Bin 0 -> 267 bytes .../small/d_BuildSettings.Lumin.small@2x.png | Bin 0 -> 492 bytes .../icons/small/d_BuildSettings.Lumin@2x.png | Bin 0 -> 592 bytes .../icons/small/d_BuildSettings.Metro.Small.png | Bin 0 -> 243 bytes .../small/d_BuildSettings.Metro.Small@2x.png | Bin 0 -> 340 bytes .../icons/small/d_BuildSettings.Metro.png | Bin 0 -> 340 bytes .../icons/small/d_BuildSettings.Metro@2x.png | Bin 0 -> 486 bytes .../icons/small/d_BuildSettings.N3DS.Small.png | Bin 0 -> 133 bytes .../small/d_BuildSettings.N3DS.Small@2x.png | Bin 0 -> 185 bytes .../icons/small/d_BuildSettings.N3DS.png | Bin 0 -> 185 bytes .../icons/small/d_BuildSettings.N3DS@2x.png | Bin 0 -> 276 bytes .../icons/small/d_BuildSettings.PS4.Small.png | Bin 0 -> 205 bytes .../small/d_BuildSettings.PS4.Small@2x.png | Bin 0 -> 367 bytes .../icons/small/d_BuildSettings.PS4.png | Bin 0 -> 367 bytes .../icons/small/d_BuildSettings.PS4@2x.png | Bin 0 -> 445 bytes .../icons/small/d_BuildSettings.PSP2.Small.png | Bin 0 -> 202 bytes .../icons/small/d_BuildSettings.PSP2.png | Bin 0 -> 376 bytes .../small/d_BuildSettings.SelectedIcon.png | Bin 0 -> 872 bytes .../small/d_BuildSettings.Stadia.Small.png | Bin 0 -> 253 bytes .../small/d_BuildSettings.Stadia.Small@2x.png | Bin 0 -> 436 bytes .../icons/small/d_BuildSettings.Stadia.png | Bin 0 -> 436 bytes .../icons/small/d_BuildSettings.Stadia@2x.png | Bin 0 -> 537 bytes .../small/d_BuildSettings.Standalone.Small.png | Bin 0 -> 153 bytes .../d_BuildSettings.Standalone.Small@2x.png | Bin 0 -> 213 bytes .../icons/small/d_BuildSettings.Standalone.png | Bin 0 -> 213 bytes .../small/d_BuildSettings.Standalone@2x.png | Bin 0 -> 393 bytes .../small/d_BuildSettings.Switch.Small.png | Bin 0 -> 232 bytes .../small/d_BuildSettings.Switch.Small@2x.png | Bin 0 -> 386 bytes .../icons/small/d_BuildSettings.Switch.png | Bin 0 -> 386 bytes .../icons/small/d_BuildSettings.Switch@2x.png | Bin 0 -> 524 bytes .../icons/small/d_BuildSettings.Web.Small.png | Bin 0 -> 282 bytes .../icons/small/d_BuildSettings.Web.png | Bin 0 -> 2491 bytes .../icons/small/d_BuildSettings.WebGL.Small.png | Bin 0 -> 254 bytes .../small/d_BuildSettings.WebGL.Small@2x.png | Bin 0 -> 426 bytes .../icons/small/d_BuildSettings.WebGL.png | Bin 0 -> 426 bytes .../icons/small/d_BuildSettings.WebGL@2x.png | Bin 0 -> 697 bytes .../small/d_BuildSettings.Xbox360.Small.png | Bin 0 -> 351 bytes .../icons/small/d_BuildSettings.Xbox360.png | Bin 0 -> 2490 bytes .../small/d_BuildSettings.XboxOne.Small.png | Bin 0 -> 271 bytes .../small/d_BuildSettings.XboxOne.Small@2x.png | Bin 0 -> 530 bytes .../icons/small/d_BuildSettings.XboxOne.png | Bin 0 -> 530 bytes .../icons/small/d_BuildSettings.XboxOne@2x.png | Bin 0 -> 645 bytes .../small/d_BuildSettings.Xiaomi.Small.png | Bin 0 -> 159 bytes .../small/d_BuildSettings.Xiaomi.Small@2x.png | Bin 0 -> 224 bytes .../icons/small/d_BuildSettings.Xiaomi.png | Bin 0 -> 224 bytes .../icons/small/d_BuildSettings.Xiaomi@2x.png | Bin 0 -> 373 bytes .../small/d_BuildSettings.iPhone.Small.png | Bin 0 -> 262 bytes .../small/d_BuildSettings.iPhone.Small@2x.png | Bin 0 -> 615 bytes .../icons/small/d_BuildSettings.iPhone.png | Bin 0 -> 615 bytes .../icons/small/d_BuildSettings.iPhone@2x.png | Bin 0 -> 693 bytes .../icons/small/d_BuildSettings.tvOS.Small.png | Bin 0 -> 252 bytes .../small/d_BuildSettings.tvOS.Small@2x.png | Bin 0 -> 471 bytes .../icons/small/d_BuildSettings.tvOS.png | Bin 0 -> 471 bytes .../icons/small/d_BuildSettings.tvOS@2x.png | Bin 0 -> 563 bytes .../icons/small/d_CacheServerConnected.png | Bin 0 -> 517 bytes .../icons/small/d_CacheServerConnected@2x.png | Bin 0 -> 757 bytes .../icons/small/d_CacheServerDisabled.png | Bin 0 -> 395 bytes .../icons/small/d_CacheServerDisabled@2x.png | Bin 0 -> 690 bytes .../icons/small/d_CacheServerDisconnected.png | Bin 0 -> 545 bytes .../small/d_CacheServerDisconnected@2x.png | Bin 0 -> 763 bytes .../icons/small/d_CheckerFloor.png | Bin 0 -> 175 bytes .../icons/small/d_CloudConnect.png | Bin 0 -> 229 bytes .../icons/small/d_CloudConnect@2x.png | Bin 0 -> 389 bytes .../icons/small/d_Collab.FileAdded.png | Bin 0 -> 753 bytes .../icons/small/d_Collab.FileConflict.png | Bin 0 -> 712 bytes .../icons/small/d_Collab.FileDeleted.png | Bin 0 -> 527 bytes .../icons/small/d_Collab.FileIgnored.png | Bin 0 -> 629 bytes .../icons/small/d_Collab.FileMoved.png | Bin 0 -> 768 bytes .../icons/small/d_Collab.FileUpdated.png | Bin 0 -> 773 bytes .../icons/small/d_Collab.FolderAdded.png | Bin 0 -> 765 bytes .../icons/small/d_Collab.FolderConflict.png | Bin 0 -> 734 bytes .../icons/small/d_Collab.FolderDeleted.png | Bin 0 -> 532 bytes .../icons/small/d_Collab.FolderIgnored.png | Bin 0 -> 630 bytes .../icons/small/d_Collab.FolderMoved.png | Bin 0 -> 766 bytes .../icons/small/d_Collab.FolderUpdated.png | Bin 0 -> 787 bytes .../unity-editor-icons/icons/small/d_Collab.png | Bin 0 -> 175 bytes .../icons/small/d_Collab@2x.png | Bin 0 -> 350 bytes .../icons/small/d_ColorPicker.CycleColor.png | Bin 0 -> 618 bytes .../icons/small/d_ColorPicker.CycleSlider.png | Bin 0 -> 639 bytes .../icons/small/d_CreateAddNew.png | Bin 0 -> 105 bytes .../icons/small/d_CreateAddNew@2x.png | Bin 0 -> 115 bytes .../icons/small/d_CustomSorting.png | Bin 0 -> 345 bytes .../icons/small/d_CustomTool.png | Bin 0 -> 370 bytes .../icons/small/d_CustomTool@2x.png | Bin 0 -> 727 bytes .../icons/small/d_DebuggerAttached.png | Bin 0 -> 526 bytes .../icons/small/d_DebuggerAttached@2x.png | Bin 0 -> 868 bytes .../icons/small/d_DebuggerDisabled.png | Bin 0 -> 392 bytes .../icons/small/d_DebuggerDisabled@2x.png | Bin 0 -> 726 bytes .../icons/small/d_DebuggerEnabled.png | Bin 0 -> 479 bytes .../icons/small/d_DebuggerEnabled@2x.png | Bin 0 -> 920 bytes .../icons/small/d_DefaultSorting.png | Bin 0 -> 259 bytes .../icons/small/d_DefaultSorting@2x.png | Bin 0 -> 509 bytes .../icons/small/d_EditCollider.png | Bin 0 -> 175 bytes .../icons/small/d_Exposure.png | Bin 0 -> 196 bytes .../icons/small/d_Exposure@2x.png | Bin 0 -> 284 bytes .../icons/small/d_Favorite.png | Bin 0 -> 224 bytes .../icons/small/d_Favorite@2x.png | Bin 0 -> 386 bytes .../icons/small/d_FilterByLabel.png | Bin 0 -> 185 bytes .../icons/small/d_FilterByLabel@2x.png | Bin 0 -> 267 bytes .../icons/small/d_FilterByType.png | Bin 0 -> 231 bytes .../icons/small/d_FilterByType@2x.png | Bin 0 -> 432 bytes .../icons/small/d_FilterSelectedOnly.png | Bin 0 -> 350 bytes .../icons/small/d_FilterSelectedOnly@2x.png | Bin 0 -> 595 bytes .../icons/small/d_FrameCapture.png | Bin 0 -> 284 bytes .../icons/small/d_FrameCapture@2x.png | Bin 0 -> 523 bytes .../unity-editor-icons/icons/small/d_GEAR.png | Bin 0 -> 175 bytes .../icons/small/d_Grid.BoxTool.png | Bin 0 -> 193 bytes .../icons/small/d_Grid.BoxTool@2x.png | Bin 0 -> 277 bytes .../icons/small/d_Grid.Default.png | Bin 0 -> 145 bytes .../icons/small/d_Grid.Default@2x.png | Bin 0 -> 225 bytes .../icons/small/d_Grid.EraserTool.png | Bin 0 -> 241 bytes .../icons/small/d_Grid.EraserTool@2x.png | Bin 0 -> 334 bytes .../icons/small/d_Grid.FillTool.png | Bin 0 -> 261 bytes .../icons/small/d_Grid.FillTool@2x.png | Bin 0 -> 452 bytes .../icons/small/d_Grid.MoveTool.png | Bin 0 -> 313 bytes .../icons/small/d_Grid.MoveTool@2x.png | Bin 0 -> 488 bytes .../icons/small/d_Grid.PaintTool.png | Bin 0 -> 273 bytes .../icons/small/d_Grid.PaintTool@2x.png | Bin 0 -> 483 bytes .../icons/small/d_Grid.PickingTool.png | Bin 0 -> 285 bytes .../icons/small/d_Grid.PickingTool@2x.png | Bin 0 -> 409 bytes .../unity-editor-icons/icons/small/d_Groove.png | Bin 0 -> 210 bytes .../icons/small/d_HorizontalSplit.png | Bin 0 -> 167 bytes .../unity-editor-icons/icons/small/d_Import.png | Bin 0 -> 306 bytes .../icons/small/d_Import@2x.png | Bin 0 -> 453 bytes .../icons/small/d_InspectorLock.png | Bin 0 -> 178 bytes .../icons/small/d_Invalid.png | Bin 0 -> 211 bytes .../icons/small/d_Invalid@2x.png | Bin 0 -> 330 bytes .../icons/small/d_JointAngularLimits.png | Bin 0 -> 318 bytes .../icons/small/d_Lighting.png | Bin 0 -> 200 bytes .../icons/small/d_Lighting@2x.png | Bin 0 -> 314 bytes .../small/d_LightmapEditor.WindowTitle.png | Bin 0 -> 200 bytes .../small/d_LightmapEditor.WindowTitle@2x.png | Bin 0 -> 314 bytes .../unity-editor-icons/icons/small/d_Linked.png | Bin 0 -> 200 bytes .../icons/small/d_Linked@2x.png | Bin 0 -> 372 bytes .../icons/small/d_MainStageView.png | Bin 0 -> 123 bytes .../icons/small/d_MainStageView@2x.png | Bin 0 -> 166 bytes .../unity-editor-icons/icons/small/d_Mirror.png | Bin 0 -> 309 bytes .../icons/small/d_MoreOptions.png | Bin 0 -> 292 bytes .../icons/small/d_MoreOptions@2x.png | Bin 0 -> 523 bytes .../icons/small/d_MoveTool On@2x.png | Bin 0 -> 337 bytes .../icons/small/d_MoveTool on.png | Bin 0 -> 285 bytes .../icons/small/d_MoveTool.png | Bin 0 -> 283 bytes .../icons/small/d_MoveTool@2x.png | Bin 0 -> 413 bytes .../icons/small/d_Navigation.png | Bin 0 -> 230 bytes .../icons/small/d_Occlusion.png | Bin 0 -> 125 bytes .../icons/small/d_Occlusion@2x.png | Bin 0 -> 128 bytes .../icons/small/d_Package Manager.png | Bin 0 -> 141 bytes .../icons/small/d_Package Manager@2x.png | Bin 0 -> 194 bytes .../icons/small/d_Particle Effect.png | Bin 0 -> 386 bytes .../icons/small/d_ParticleShapeTool On.png | Bin 0 -> 412 bytes .../icons/small/d_ParticleShapeTool On@2x.png | Bin 0 -> 725 bytes .../icons/small/d_ParticleShapeTool On@3x.png | Bin 0 -> 1263 bytes .../icons/small/d_ParticleShapeTool On@4x.png | Bin 0 -> 1074 bytes .../icons/small/d_ParticleShapeTool.png | Bin 0 -> 412 bytes .../icons/small/d_ParticleShapeTool@2x.png | Bin 0 -> 725 bytes .../icons/small/d_ParticleShapeTool@3x.png | Bin 0 -> 1263 bytes .../icons/small/d_ParticleShapeTool@4x.png | Bin 0 -> 1074 bytes .../icons/small/d_PauseButton On.png | Bin 0 -> 114 bytes .../icons/small/d_PauseButton On@2x.png | Bin 0 -> 145 bytes .../icons/small/d_PauseButton.png | Bin 0 -> 112 bytes .../icons/small/d_PauseButton@2x.png | Bin 0 -> 148 bytes .../icons/small/d_PlayButton On.png | Bin 0 -> 140 bytes .../icons/small/d_PlayButton On@2x.png | Bin 0 -> 251 bytes .../icons/small/d_PlayButton.png | Bin 0 -> 155 bytes .../icons/small/d_PlayButton@2x.png | Bin 0 -> 282 bytes .../icons/small/d_PlayButtonProfile On.png | Bin 0 -> 872 bytes .../icons/small/d_PlayButtonProfile.png | Bin 0 -> 689 bytes .../icons/small/d_PreMatCube.png | Bin 0 -> 280 bytes .../icons/small/d_PreMatCube@2x.png | Bin 0 -> 491 bytes .../icons/small/d_PreMatCylinder.png | Bin 0 -> 203 bytes .../icons/small/d_PreMatCylinder@2x.png | Bin 0 -> 355 bytes .../icons/small/d_PreMatLight0.png | Bin 0 -> 316 bytes .../icons/small/d_PreMatLight0@2x.png | Bin 0 -> 479 bytes .../icons/small/d_PreMatLight1.png | Bin 0 -> 338 bytes .../icons/small/d_PreMatLight1@2x.png | Bin 0 -> 526 bytes .../icons/small/d_PreMatQuad.png | Bin 0 -> 100 bytes .../icons/small/d_PreMatQuad@2x.png | Bin 0 -> 107 bytes .../icons/small/d_PreMatSphere.png | Bin 0 -> 292 bytes .../icons/small/d_PreMatSphere@2x.png | Bin 0 -> 525 bytes .../icons/small/d_PreMatTorus.png | Bin 0 -> 248 bytes .../icons/small/d_PreMatTorus@2x.png | Bin 0 -> 435 bytes .../icons/small/d_PreTexA.png | Bin 0 -> 180 bytes .../icons/small/d_PreTexA@2x.png | Bin 0 -> 364 bytes .../icons/small/d_PreTexB.png | Bin 0 -> 195 bytes .../icons/small/d_PreTexB@2x.png | Bin 0 -> 333 bytes .../icons/small/d_PreTexG.png | Bin 0 -> 217 bytes .../icons/small/d_PreTexG@2x.png | Bin 0 -> 397 bytes .../icons/small/d_PreTexR.png | Bin 0 -> 193 bytes .../icons/small/d_PreTexR@2x.png | Bin 0 -> 317 bytes .../icons/small/d_PreTexRGB.png | Bin 0 -> 385 bytes .../icons/small/d_PreTexRGB@2x.png | Bin 0 -> 593 bytes .../icons/small/d_PreTextureAlpha.png | Bin 0 -> 247 bytes .../icons/small/d_PreTextureMipMapHigh.png | Bin 0 -> 301 bytes .../icons/small/d_PreTextureMipMapLow.png | Bin 0 -> 445 bytes .../icons/small/d_PreTextureRGB.png | Bin 0 -> 295 bytes .../icons/small/d_Preset.Context.png | Bin 0 -> 141 bytes .../icons/small/d_Preset.Context@2x.png | Bin 0 -> 199 bytes .../icons/small/d_Profiler.Audio.png | Bin 0 -> 196 bytes .../icons/small/d_Profiler.Audio@2x.png | Bin 0 -> 325 bytes .../icons/small/d_Profiler.CPU.png | Bin 0 -> 336 bytes .../icons/small/d_Profiler.CPU@2x.png | Bin 0 -> 734 bytes .../icons/small/d_Profiler.FirstFrame.png | Bin 0 -> 161 bytes .../icons/small/d_Profiler.GPU.png | Bin 0 -> 342 bytes .../icons/small/d_Profiler.GPU@2x.png | Bin 0 -> 728 bytes .../small/d_Profiler.GlobalIllumination.png | Bin 0 -> 388 bytes .../small/d_Profiler.GlobalIllumination@2x.png | Bin 0 -> 818 bytes .../icons/small/d_Profiler.LastFrame.png | Bin 0 -> 159 bytes .../icons/small/d_Profiler.Memory.png | Bin 0 -> 212 bytes .../icons/small/d_Profiler.Memory@2x.png | Bin 0 -> 265 bytes .../icons/small/d_Profiler.Network.png | Bin 0 -> 2425 bytes .../icons/small/d_Profiler.NetworkMessages.png | Bin 0 -> 328 bytes .../small/d_Profiler.NetworkMessages@2x.png | Bin 0 -> 623 bytes .../small/d_Profiler.NetworkOperations.png | Bin 0 -> 330 bytes .../small/d_Profiler.NetworkOperations@2x.png | Bin 0 -> 677 bytes .../icons/small/d_Profiler.NextFrame.png | Bin 0 -> 124 bytes .../icons/small/d_Profiler.Physics.png | Bin 0 -> 318 bytes .../icons/small/d_Profiler.Physics2D.png | Bin 0 -> 291 bytes .../icons/small/d_Profiler.Physics2D@2x.png | Bin 0 -> 516 bytes .../icons/small/d_Profiler.Physics@2x.png | Bin 0 -> 565 bytes .../icons/small/d_Profiler.PrevFrame.png | Bin 0 -> 124 bytes .../icons/small/d_Profiler.Record.png | Bin 0 -> 319 bytes .../icons/small/d_Profiler.Rendering.png | Bin 0 -> 313 bytes .../icons/small/d_Profiler.Rendering@2x.png | Bin 0 -> 640 bytes .../icons/small/d_Profiler.UI.png | Bin 0 -> 243 bytes .../icons/small/d_Profiler.UI@2x.png | Bin 0 -> 490 bytes .../icons/small/d_Profiler.UIDetails.png | Bin 0 -> 208 bytes .../icons/small/d_Profiler.UIDetails@2x.png | Bin 0 -> 292 bytes .../icons/small/d_Profiler.Video.png | Bin 0 -> 143 bytes .../icons/small/d_Profiler.Video@2x.png | Bin 0 -> 236 bytes .../small/d_ProfilerColumn.WarningCount.png | Bin 0 -> 329 bytes .../icons/small/d_Progress.png | Bin 0 -> 335 bytes .../icons/small/d_Progress@2x.png | Bin 0 -> 649 bytes .../icons/small/d_Project.png | Bin 0 -> 138 bytes .../icons/small/d_Project@2x.png | Bin 0 -> 160 bytes .../icons/small/d_Record Off.png | Bin 0 -> 320 bytes .../icons/small/d_Record Off@2x.png | Bin 0 -> 632 bytes .../icons/small/d_Record On.png | Bin 0 -> 239 bytes .../icons/small/d_Record On@2x.png | Bin 0 -> 450 bytes .../icons/small/d_RectTool On.png | Bin 0 -> 155 bytes .../icons/small/d_RectTool On@2x.png | Bin 0 -> 251 bytes .../icons/small/d_RectTool.png | Bin 0 -> 171 bytes .../icons/small/d_RectTool@2x.png | Bin 0 -> 254 bytes .../icons/small/d_RectTransformBlueprint.png | Bin 0 -> 105 bytes .../icons/small/d_RectTransformRaw.png | Bin 0 -> 108 bytes .../icons/small/d_ReflectionProbeSelector.png | Bin 0 -> 304 bytes .../small/d_ReflectionProbeSelector@2x.png | Bin 0 -> 572 bytes .../icons/small/d_Refresh.png | Bin 0 -> 286 bytes .../icons/small/d_Refresh@2x.png | Bin 0 -> 567 bytes .../icons/small/d_RotateTool On.png | Bin 0 -> 285 bytes .../icons/small/d_RotateTool On@2x.png | Bin 0 -> 565 bytes .../icons/small/d_RotateTool.png | Bin 0 -> 318 bytes .../icons/small/d_RotateTool@2x.png | Bin 0 -> 633 bytes .../unity-editor-icons/icons/small/d_SaveAs.png | Bin 0 -> 202 bytes .../icons/small/d_SaveAs@2x.png | Bin 0 -> 262 bytes .../icons/small/d_ScaleTool On.png | Bin 0 -> 195 bytes .../icons/small/d_ScaleTool On@2x.png | Bin 0 -> 295 bytes .../icons/small/d_ScaleTool.png | Bin 0 -> 197 bytes .../icons/small/d_ScaleTool@2x.png | Bin 0 -> 304 bytes .../icons/small/d_SceneView2D.png | Bin 0 -> 266 bytes .../icons/small/d_SceneView2D@2x.png | Bin 0 -> 484 bytes .../icons/small/d_SceneViewAlpha.png | Bin 0 -> 246 bytes .../icons/small/d_SceneViewAudio Off.png | Bin 0 -> 210 bytes .../icons/small/d_SceneViewAudio Off@2x.png | Bin 0 -> 416 bytes .../icons/small/d_SceneViewAudio.png | Bin 0 -> 222 bytes .../icons/small/d_SceneViewAudio@2x.png | Bin 0 -> 403 bytes .../icons/small/d_SceneViewCamera.png | Bin 0 -> 168 bytes .../icons/small/d_SceneViewCamera@2x.png | Bin 0 -> 266 bytes .../icons/small/d_SceneViewFX@2x.png | Bin 0 -> 534 bytes .../icons/small/d_SceneViewFx.png | Bin 0 -> 291 bytes .../icons/small/d_SceneViewLighting Off.png | Bin 0 -> 254 bytes .../icons/small/d_SceneViewLighting Off@2x.png | Bin 0 -> 449 bytes .../icons/small/d_SceneViewLighting.png | Bin 0 -> 202 bytes .../icons/small/d_SceneViewLighting@2x.png | Bin 0 -> 320 bytes .../icons/small/d_SceneViewOrtho.png | Bin 0 -> 316 bytes .../icons/small/d_SceneViewRGB.png | Bin 0 -> 304 bytes .../icons/small/d_SceneViewTools.png | Bin 0 -> 298 bytes .../icons/small/d_SceneViewTools@2x.png | Bin 0 -> 723 bytes .../icons/small/d_SceneViewVisibility.png | Bin 0 -> 295 bytes .../icons/small/d_SceneViewVisibility@2x.png | Bin 0 -> 515 bytes .../icons/small/d_ScrollShadow.png | Bin 0 -> 127 bytes .../icons/small/d_Settings.png | Bin 0 -> 277 bytes .../icons/small/d_Settings@2x.png | Bin 0 -> 543 bytes .../icons/small/d_SettingsIcon.png | Bin 0 -> 277 bytes .../icons/small/d_SettingsIcon@2x.png | Bin 0 -> 543 bytes .../small/d_SocialNetworks.FacebookShare.png | Bin 0 -> 770 bytes .../small/d_SocialNetworks.LinkedInShare.png | Bin 0 -> 766 bytes .../icons/small/d_SocialNetworks.Tweet.png | Bin 0 -> 793 bytes .../icons/small/d_SocialNetworks.UDNOpen.png | Bin 0 -> 759 bytes .../icons/small/d_SpeedScale.png | Bin 0 -> 457 bytes .../icons/small/d_StepButton On.png | Bin 0 -> 164 bytes .../icons/small/d_StepButton On@2x.png | Bin 0 -> 293 bytes .../icons/small/d_StepButton.png | Bin 0 -> 173 bytes .../icons/small/d_StepButton@2x.png | Bin 0 -> 330 bytes .../icons/small/d_StepLeftButton-On.png | Bin 0 -> 748 bytes .../icons/small/d_StepLeftButton.png | Bin 0 -> 402 bytes .../d_TerrainInspector.TerrainToolLower On.png | Bin 0 -> 303 bytes .../d_TerrainInspector.TerrainToolLowerAlt.png | Bin 0 -> 334 bytes .../d_TerrainInspector.TerrainToolPlants On.png | Bin 0 -> 428 bytes .../d_TerrainInspector.TerrainToolPlants.png | Bin 0 -> 337 bytes ...TerrainInspector.TerrainToolPlantsAlt On.png | Bin 0 -> 1043 bytes .../d_TerrainInspector.TerrainToolPlantsAlt.png | Bin 0 -> 763 bytes .../d_TerrainInspector.TerrainToolRaise On.png | Bin 0 -> 315 bytes .../d_TerrainInspector.TerrainToolRaise.png | Bin 0 -> 355 bytes ...TerrainInspector.TerrainToolSetheight On.png | Bin 0 -> 321 bytes .../d_TerrainInspector.TerrainToolSetheight.png | Bin 0 -> 343 bytes ...rainInspector.TerrainToolSetheightAlt On.png | Bin 0 -> 331 bytes ...TerrainInspector.TerrainToolSetheightAlt.png | Bin 0 -> 349 bytes ..._TerrainInspector.TerrainToolSettings On.png | Bin 0 -> 427 bytes .../d_TerrainInspector.TerrainToolSettings.png | Bin 0 -> 477 bytes ...rainInspector.TerrainToolSmoothHeight On.png | Bin 0 -> 502 bytes ...TerrainInspector.TerrainToolSmoothHeight.png | Bin 0 -> 464 bytes .../d_TerrainInspector.TerrainToolSplat On.png | Bin 0 -> 615 bytes .../d_TerrainInspector.TerrainToolSplat.png | Bin 0 -> 431 bytes ..._TerrainInspector.TerrainToolSplatAlt On.png | Bin 0 -> 659 bytes .../d_TerrainInspector.TerrainToolSplatAlt.png | Bin 0 -> 435 bytes .../d_TerrainInspector.TerrainToolTrees On.png | Bin 0 -> 399 bytes .../d_TerrainInspector.TerrainToolTrees.png | Bin 0 -> 316 bytes ..._TerrainInspector.TerrainToolTreesAlt On.png | Bin 0 -> 941 bytes .../d_TerrainInspector.TerrainToolTreesAlt.png | Bin 0 -> 682 bytes .../icons/small/d_ToggleUVOverlay.png | Bin 0 -> 346 bytes .../icons/small/d_ToggleUVOverlay@2x.png | Bin 0 -> 755 bytes .../icons/small/d_ToolHandleCenter.png | Bin 0 -> 210 bytes .../icons/small/d_ToolHandleCenter@2x.png | Bin 0 -> 320 bytes .../icons/small/d_ToolHandleGlobal.png | Bin 0 -> 543 bytes .../icons/small/d_ToolHandleGlobal@2x.png | Bin 0 -> 1072 bytes .../icons/small/d_ToolHandleLocal.png | Bin 0 -> 540 bytes .../icons/small/d_ToolHandleLocal@2x.png | Bin 0 -> 961 bytes .../icons/small/d_ToolHandlePivot.png | Bin 0 -> 242 bytes .../icons/small/d_ToolHandlePivot@2x.png | Bin 0 -> 343 bytes .../icons/small/d_Toolbar Minus.png | Bin 0 -> 91 bytes .../icons/small/d_Toolbar Minus@2x.png | Bin 0 -> 126 bytes .../icons/small/d_Toolbar Plus More.png | Bin 0 -> 156 bytes .../icons/small/d_Toolbar Plus More@2x.png | Bin 0 -> 231 bytes .../icons/small/d_Toolbar Plus.png | Bin 0 -> 122 bytes .../icons/small/d_Toolbar Plus@2x.png | Bin 0 -> 182 bytes .../icons/small/d_ToolsIcon.png | Bin 0 -> 400 bytes .../icons/small/d_TransformTool On.png | Bin 0 -> 337 bytes .../icons/small/d_TransformTool On@2x.png | Bin 0 -> 559 bytes .../icons/small/d_TransformTool.png | Bin 0 -> 361 bytes .../icons/small/d_TransformTool@2x.png | Bin 0 -> 777 bytes .../icons/small/d_TreeEditor.AddBranches.png | Bin 0 -> 287 bytes .../icons/small/d_TreeEditor.AddLeaves.png | Bin 0 -> 667 bytes .../icons/small/d_TreeEditor.Branch On.png | Bin 0 -> 322 bytes .../icons/small/d_TreeEditor.Branch.png | Bin 0 -> 326 bytes .../small/d_TreeEditor.BranchFreeHand On.png | Bin 0 -> 380 bytes .../icons/small/d_TreeEditor.BranchFreeHand.png | Bin 0 -> 390 bytes .../small/d_TreeEditor.BranchRotate On.png | Bin 0 -> 440 bytes .../icons/small/d_TreeEditor.BranchRotate.png | Bin 0 -> 461 bytes .../icons/small/d_TreeEditor.BranchScale On.png | Bin 0 -> 434 bytes .../icons/small/d_TreeEditor.BranchScale.png | Bin 0 -> 454 bytes .../small/d_TreeEditor.BranchTranslate On.png | Bin 0 -> 428 bytes .../small/d_TreeEditor.BranchTranslate.png | Bin 0 -> 439 bytes .../small/d_TreeEditor.Distribution On.png | Bin 0 -> 338 bytes .../icons/small/d_TreeEditor.Distribution.png | Bin 0 -> 334 bytes .../icons/small/d_TreeEditor.Duplicate.png | Bin 0 -> 191 bytes .../icons/small/d_TreeEditor.Geometry On.png | Bin 0 -> 405 bytes .../icons/small/d_TreeEditor.Geometry.png | Bin 0 -> 415 bytes .../icons/small/d_TreeEditor.Leaf On.png | Bin 0 -> 270 bytes .../icons/small/d_TreeEditor.Leaf.png | Bin 0 -> 279 bytes .../small/d_TreeEditor.LeafFreeHand On.png | Bin 0 -> 352 bytes .../icons/small/d_TreeEditor.LeafFreeHand.png | Bin 0 -> 365 bytes .../icons/small/d_TreeEditor.LeafRotate On.png | Bin 0 -> 408 bytes .../icons/small/d_TreeEditor.LeafRotate.png | Bin 0 -> 405 bytes .../icons/small/d_TreeEditor.LeafScale On.png | Bin 0 -> 392 bytes .../icons/small/d_TreeEditor.LeafScale.png | Bin 0 -> 422 bytes .../small/d_TreeEditor.LeafTranslate On.png | Bin 0 -> 387 bytes .../icons/small/d_TreeEditor.LeafTranslate.png | Bin 0 -> 393 bytes .../icons/small/d_TreeEditor.Material On.png | Bin 0 -> 487 bytes .../icons/small/d_TreeEditor.Material.png | Bin 0 -> 507 bytes .../icons/small/d_TreeEditor.Refresh.png | Bin 0 -> 406 bytes .../icons/small/d_TreeEditor.Trash.png | Bin 0 -> 270 bytes .../icons/small/d_TreeEditor.Wind On.png | Bin 0 -> 265 bytes .../icons/small/d_TreeEditor.Wind.png | Bin 0 -> 256 bytes .../small/d_UnityEditor.AnimationWindow.png | Bin 0 -> 247 bytes .../small/d_UnityEditor.AnimationWindow@2x.png | Bin 0 -> 465 bytes .../icons/small/d_UnityEditor.ConsoleWindow.png | Bin 0 -> 122 bytes .../small/d_UnityEditor.ConsoleWindow@2x.png | Bin 0 -> 166 bytes .../d_UnityEditor.DebugInspectorWindow.png | Bin 0 -> 229 bytes .../small/d_UnityEditor.FindDependencies.png | Bin 0 -> 259 bytes .../icons/small/d_UnityEditor.GameView.png | Bin 0 -> 212 bytes .../icons/small/d_UnityEditor.GameView@2x.png | Bin 0 -> 326 bytes ...nityEditor.Graphs.AnimatorControllerTool.png | Bin 0 -> 196 bytes ...yEditor.Graphs.AnimatorControllerTool@2x.png | Bin 0 -> 403 bytes .../small/d_UnityEditor.HierarchyWindow.png | Bin 0 -> 108 bytes .../small/d_UnityEditor.InspectorWindow.png | Bin 0 -> 187 bytes .../small/d_UnityEditor.InspectorWindow@2x.png | Bin 0 -> 312 bytes .../small/d_UnityEditor.ProfilerWindow.png | Bin 0 -> 330 bytes .../small/d_UnityEditor.ProfilerWindow@2x.png | Bin 0 -> 713 bytes .../d_UnityEditor.SceneHierarchyWindow.png | Bin 0 -> 137 bytes .../d_UnityEditor.SceneHierarchyWindow@2x.png | Bin 0 -> 150 bytes .../icons/small/d_UnityEditor.SceneView.png | Bin 0 -> 123 bytes .../icons/small/d_UnityEditor.SceneView@2x.png | Bin 0 -> 166 bytes .../d_UnityEditor.Timeline.TimelineWindow.png | Bin 0 -> 127 bytes ...d_UnityEditor.Timeline.TimelineWindow@2x.png | Bin 0 -> 201 bytes .../small/d_UnityEditor.VersionControl.png | Bin 0 -> 211 bytes .../icons/small/d_UnityLogo.png | Bin 0 -> 764 bytes .../icons/small/d_Unlinked.png | Bin 0 -> 255 bytes .../icons/small/d_Unlinked@2x.png | Bin 0 -> 532 bytes .../icons/small/d_VUMeterTextureHorizontal.png | Bin 0 -> 292 bytes .../icons/small/d_VUMeterTextureVertical.png | Bin 0 -> 290 bytes .../unity-editor-icons/icons/small/d_Valid.png | Bin 0 -> 170 bytes .../icons/small/d_Valid@2x.png | Bin 0 -> 361 bytes .../icons/small/d_VerticalSplit.png | Bin 0 -> 164 bytes .../icons/small/d_ViewToolMove On.png | Bin 0 -> 320 bytes .../icons/small/d_ViewToolMove On@2x.png | Bin 0 -> 658 bytes .../icons/small/d_ViewToolMove.png | Bin 0 -> 320 bytes .../icons/small/d_ViewToolMove@2x.png | Bin 0 -> 658 bytes .../icons/small/d_ViewToolOrbit On.png | Bin 0 -> 236 bytes .../icons/small/d_ViewToolOrbit On@2x.png | Bin 0 -> 381 bytes .../icons/small/d_ViewToolOrbit.png | Bin 0 -> 315 bytes .../icons/small/d_ViewToolOrbit@2x.png | Bin 0 -> 518 bytes .../icons/small/d_ViewToolZoom On.png | Bin 0 -> 263 bytes .../icons/small/d_ViewToolZoom On@2x.png | Bin 0 -> 458 bytes .../icons/small/d_ViewToolZoom.png | Bin 0 -> 305 bytes .../icons/small/d_ViewToolZoom@2x.png | Bin 0 -> 565 bytes .../icons/small/d_VisibilityOff.png | Bin 0 -> 171 bytes .../icons/small/d_VisibilityOn.png | Bin 0 -> 288 bytes .../icons/small/d_WaitSpin00.png | Bin 0 -> 338 bytes .../icons/small/d_WaitSpin01.png | Bin 0 -> 340 bytes .../icons/small/d_WaitSpin02.png | Bin 0 -> 338 bytes .../icons/small/d_WaitSpin03.png | Bin 0 -> 339 bytes .../icons/small/d_WaitSpin04.png | Bin 0 -> 339 bytes .../icons/small/d_WaitSpin05.png | Bin 0 -> 339 bytes .../icons/small/d_WaitSpin06.png | Bin 0 -> 334 bytes .../icons/small/d_WaitSpin07.png | Bin 0 -> 334 bytes .../icons/small/d_WaitSpin08.png | Bin 0 -> 335 bytes .../icons/small/d_WaitSpin09.png | Bin 0 -> 348 bytes .../icons/small/d_WaitSpin10.png | Bin 0 -> 338 bytes .../icons/small/d_WaitSpin11.png | Bin 0 -> 343 bytes .../small/d_WelcomeScreen.AssetStoreLogo.png | Bin 0 -> 1859 bytes .../unity-editor-icons/icons/small/d__Help.png | Bin 0 -> 231 bytes .../icons/small/d__Help@2x.png | Bin 0 -> 440 bytes .../unity-editor-icons/icons/small/d__Menu.png | Bin 0 -> 147 bytes .../icons/small/d__Menu@2x.png | Bin 0 -> 194 bytes .../unity-editor-icons/icons/small/d__Popup.png | Bin 0 -> 247 bytes .../icons/small/d__Popup@2x.png | Bin 0 -> 436 bytes .../icons/small/d_aboutwindow.mainheader.png | Bin 0 -> 475 bytes .../icons/small/d_ageialogo.png | Bin 0 -> 1287 bytes .../icons/small/d_animationanimated.png | Bin 0 -> 125 bytes .../icons/small/d_animationkeyframe.png | Bin 0 -> 123 bytes .../icons/small/d_animationnocurve.png | Bin 0 -> 109 bytes .../small/d_animationvisibilitytoggleoff.png | Bin 0 -> 317 bytes .../small/d_animationvisibilitytoggleoff@2x.png | Bin 0 -> 581 bytes .../small/d_animationvisibilitytoggleon.png | Bin 0 -> 279 bytes .../small/d_animationvisibilitytoggleon@2x.png | Bin 0 -> 544 bytes .../unity-editor-icons/icons/small/d_back.png | Bin 0 -> 133 bytes .../icons/small/d_back@2x.png | Bin 0 -> 226 bytes .../icons/small/d_beginButton-On.png | Bin 0 -> 892 bytes .../icons/small/d_beginButton.png | Bin 0 -> 499 bytes .../icons/small/d_blueGroove.png | Bin 0 -> 201 bytes .../small/d_console.erroricon.inactive.sml.png | Bin 0 -> 223 bytes .../d_console.erroricon.inactive.sml@2x.png | Bin 0 -> 351 bytes .../icons/small/d_console.erroricon.png | Bin 0 -> 346 bytes .../icons/small/d_console.erroricon.sml.png | Bin 0 -> 249 bytes .../icons/small/d_console.erroricon.sml@2x.png | Bin 0 -> 343 bytes .../icons/small/d_console.erroricon@2x.png | Bin 0 -> 480 bytes .../small/d_console.infoicon.inactive.sml.png | Bin 0 -> 301 bytes .../d_console.infoicon.inactive.sml@2x.png | Bin 0 -> 527 bytes .../icons/small/d_console.infoicon.png | Bin 0 -> 510 bytes .../icons/small/d_console.infoicon.sml.png | Bin 0 -> 263 bytes .../icons/small/d_console.infoicon.sml@2x.png | Bin 0 -> 510 bytes .../icons/small/d_console.infoicon@2x.png | Bin 0 -> 633 bytes .../small/d_console.warnicon.inactive.sml.png | Bin 0 -> 274 bytes .../d_console.warnicon.inactive.sml@2x.png | Bin 0 -> 470 bytes .../icons/small/d_console.warnicon.png | Bin 0 -> 571 bytes .../icons/small/d_console.warnicon.sml.png | Bin 0 -> 326 bytes .../icons/small/d_console.warnicon.sml@2x.png | Bin 0 -> 571 bytes .../icons/small/d_console.warnicon@2x.png | Bin 0 -> 709 bytes .../icons/small/d_curvekeyframe.png | Bin 0 -> 117 bytes .../icons/small/d_curvekeyframeselected.png | Bin 0 -> 99 bytes .../small/d_curvekeyframeselectedoverlay.png | Bin 0 -> 99 bytes .../d_curvekeyframesemiselectedoverlay.png | Bin 0 -> 90 bytes .../icons/small/d_curvekeyframeweighted.png | Bin 0 -> 118 bytes .../icons/small/d_editcollision_16.png | Bin 0 -> 427 bytes .../icons/small/d_editcollision_16@2x.png | Bin 0 -> 778 bytes .../icons/small/d_editcollision_32.png | Bin 0 -> 778 bytes .../icons/small/d_editconstraints_16.png | Bin 0 -> 365 bytes .../icons/small/d_editconstraints_16@2x.png | Bin 0 -> 568 bytes .../icons/small/d_editconstraints_32.png | Bin 0 -> 568 bytes .../icons/small/d_editicon.sml.png | Bin 0 -> 393 bytes .../icons/small/d_endButton-On.png | Bin 0 -> 892 bytes .../icons/small/d_endButton.png | Bin 0 -> 507 bytes .../icons/small/d_eyeDropper.Large.png | Bin 0 -> 315 bytes .../icons/small/d_eyeDropper.Large@2x.png | Bin 0 -> 598 bytes .../icons/small/d_eyeDropper.sml.png | Bin 0 -> 82 bytes .../icons/small/d_forward.png | Bin 0 -> 147 bytes .../icons/small/d_forward@2x.png | Bin 0 -> 216 bytes .../icons/small/d_icon dropdown.png | Bin 0 -> 135 bytes .../icons/small/d_icon dropdown@2x.png | Bin 0 -> 194 bytes .../icons/small/d_leftBracket.png | Bin 0 -> 573 bytes .../icons/small/d_model large.png | Bin 0 -> 1405 bytes .../icons/small/d_monologo.png | Bin 0 -> 1956 bytes .../icons/small/d_playLoopOff.png | Bin 0 -> 298 bytes .../icons/small/d_playLoopOn.png | Bin 0 -> 1056 bytes .../icons/small/d_preAudioAutoPlayOff.png | Bin 0 -> 288 bytes .../icons/small/d_preAudioAutoPlayOff@2x.png | Bin 0 -> 605 bytes .../icons/small/d_preAudioAutoPlayOn.png | Bin 0 -> 691 bytes .../icons/small/d_preAudioLoopOff.png | Bin 0 -> 212 bytes .../icons/small/d_preAudioLoopOff@2x.png | Bin 0 -> 423 bytes .../icons/small/d_preAudioLoopOn.png | Bin 0 -> 852 bytes .../icons/small/d_preAudioPlayOff.png | Bin 0 -> 236 bytes .../icons/small/d_preAudioPlayOn.png | Bin 0 -> 609 bytes .../icons/small/d_redGroove.png | Bin 0 -> 189 bytes .../icons/small/d_rightBracket.png | Bin 0 -> 574 bytes .../small/d_scenepicking_notpickable-mixed.png | Bin 0 -> 328 bytes .../d_scenepicking_notpickable-mixed@2x.png | Bin 0 -> 665 bytes .../d_scenepicking_notpickable-mixed_hover.png | Bin 0 -> 305 bytes ..._scenepicking_notpickable-mixed_hover@2x.png | Bin 0 -> 630 bytes .../icons/small/d_scenepicking_notpickable.png | Bin 0 -> 304 bytes .../small/d_scenepicking_notpickable@2x.png | Bin 0 -> 595 bytes .../small/d_scenepicking_notpickable_hover.png | Bin 0 -> 289 bytes .../d_scenepicking_notpickable_hover@2x.png | Bin 0 -> 578 bytes .../small/d_scenepicking_pickable-mixed.png | Bin 0 -> 277 bytes .../small/d_scenepicking_pickable-mixed@2x.png | Bin 0 -> 486 bytes .../d_scenepicking_pickable-mixed_hover.png | Bin 0 -> 262 bytes .../d_scenepicking_pickable-mixed_hover@2x.png | Bin 0 -> 448 bytes .../icons/small/d_scenepicking_pickable.png | Bin 0 -> 239 bytes .../icons/small/d_scenepicking_pickable@2x.png | Bin 0 -> 408 bytes .../small/d_scenepicking_pickable_hover.png | Bin 0 -> 231 bytes .../small/d_scenepicking_pickable_hover@2x.png | Bin 0 -> 394 bytes .../icons/small/d_scenevis_hidden-mixed.png | Bin 0 -> 305 bytes .../icons/small/d_scenevis_hidden-mixed@2x.png | Bin 0 -> 633 bytes .../small/d_scenevis_hidden-mixed_hover.png | Bin 0 -> 310 bytes .../small/d_scenevis_hidden-mixed_hover@2x.png | Bin 0 -> 606 bytes .../icons/small/d_scenevis_hidden.png | Bin 0 -> 288 bytes .../icons/small/d_scenevis_hidden@2x.png | Bin 0 -> 540 bytes .../icons/small/d_scenevis_hidden_hover.png | Bin 0 -> 299 bytes .../icons/small/d_scenevis_hidden_hover@2x.png | Bin 0 -> 514 bytes .../icons/small/d_scenevis_scene_hover.png | Bin 0 -> 292 bytes .../icons/small/d_scenevis_scene_hover@2x.png | Bin 0 -> 494 bytes .../icons/small/d_scenevis_visible-mixed.png | Bin 0 -> 281 bytes .../icons/small/d_scenevis_visible-mixed@2x.png | Bin 0 -> 548 bytes .../small/d_scenevis_visible-mixed_hover.png | Bin 0 -> 280 bytes .../small/d_scenevis_visible-mixed_hover@2x.png | Bin 0 -> 507 bytes .../icons/small/d_scenevis_visible.png | Bin 0 -> 238 bytes .../icons/small/d_scenevis_visible@2x.png | Bin 0 -> 469 bytes .../icons/small/d_scenevis_visible_hover.png | Bin 0 -> 245 bytes .../icons/small/d_scenevis_visible_hover@2x.png | Bin 0 -> 473 bytes .../icons/small/d_tab_next.png | Bin 0 -> 119 bytes .../icons/small/d_tab_next@2x.png | Bin 0 -> 204 bytes .../icons/small/d_tab_prev.png | Bin 0 -> 121 bytes .../icons/small/d_tab_prev@2x.png | Bin 0 -> 202 bytes .../unity-editor-icons/icons/small/d_tranp.png | Bin 0 -> 83 bytes .../icons/small/d_tree_icon.png | Bin 0 -> 1061 bytes .../icons/small/d_tree_icon_branch.png | Bin 0 -> 1066 bytes .../icons/small/d_tree_icon_branch_frond.png | Bin 0 -> 1448 bytes .../icons/small/d_tree_icon_frond.png | Bin 0 -> 2059 bytes .../icons/small/d_tree_icon_leaf.png | Bin 0 -> 1699 bytes .../icons/small/d_winbtn_graph.png | Bin 0 -> 558 bytes .../icons/small/d_winbtn_graph_close_h.png | Bin 0 -> 531 bytes .../icons/small/d_winbtn_graph_max_h.png | Bin 0 -> 535 bytes .../icons/small/d_winbtn_graph_min_h.png | Bin 0 -> 545 bytes .../icons/small/d_winbtn_mac_close.png | Bin 0 -> 210 bytes .../icons/small/d_winbtn_mac_close@2x.png | Bin 0 -> 345 bytes .../icons/small/d_winbtn_mac_close_a.png | Bin 0 -> 258 bytes .../icons/small/d_winbtn_mac_close_a@2x.png | Bin 0 -> 485 bytes .../icons/small/d_winbtn_mac_close_h.png | Bin 0 -> 259 bytes .../icons/small/d_winbtn_mac_close_h@2x.png | Bin 0 -> 506 bytes .../icons/small/d_winbtn_mac_inact.png | Bin 0 -> 522 bytes .../icons/small/d_winbtn_mac_max.png | Bin 0 -> 206 bytes .../icons/small/d_winbtn_mac_max@2x.png | Bin 0 -> 352 bytes .../icons/small/d_winbtn_mac_max_a.png | Bin 0 -> 260 bytes .../icons/small/d_winbtn_mac_max_a@2x.png | Bin 0 -> 413 bytes .../icons/small/d_winbtn_mac_max_h.png | Bin 0 -> 266 bytes .../icons/small/d_winbtn_mac_max_h@2x.png | Bin 0 -> 423 bytes .../icons/small/d_winbtn_mac_min.png | Bin 0 -> 212 bytes .../icons/small/d_winbtn_mac_min@2x.png | Bin 0 -> 348 bytes .../icons/small/d_winbtn_mac_min_a.png | Bin 0 -> 241 bytes .../icons/small/d_winbtn_mac_min_a@2x.png | Bin 0 -> 373 bytes .../icons/small/d_winbtn_mac_min_h.png | Bin 0 -> 233 bytes .../icons/small/d_winbtn_mac_min_h@2x.png | Bin 0 -> 377 bytes .../icons/small/d_winbtn_win_close.png | Bin 0 -> 162 bytes .../icons/small/d_winbtn_win_close@2x.png | Bin 0 -> 237 bytes .../icons/small/d_winbtn_win_close_a.png | Bin 0 -> 158 bytes .../icons/small/d_winbtn_win_close_a@2x.png | Bin 0 -> 284 bytes .../icons/small/d_winbtn_win_close_h.png | Bin 0 -> 158 bytes .../icons/small/d_winbtn_win_close_h@2x.png | Bin 0 -> 284 bytes .../icons/small/d_winbtn_win_max.png | Bin 0 -> 117 bytes .../icons/small/d_winbtn_win_max@2x.png | Bin 0 -> 158 bytes .../icons/small/d_winbtn_win_max_a.png | Bin 0 -> 114 bytes .../icons/small/d_winbtn_win_max_a@2x.png | Bin 0 -> 157 bytes .../icons/small/d_winbtn_win_max_h.png | Bin 0 -> 114 bytes .../icons/small/d_winbtn_win_max_h@2x.png | Bin 0 -> 157 bytes .../icons/small/d_winbtn_win_min.png | Bin 0 -> 141 bytes .../icons/small/d_winbtn_win_min_a.png | Bin 0 -> 211 bytes .../icons/small/d_winbtn_win_min_h.png | Bin 0 -> 232 bytes .../icons/small/d_winbtn_win_rest.png | Bin 0 -> 213 bytes .../icons/small/d_winbtn_win_rest_a.png | Bin 0 -> 282 bytes .../icons/small/d_winbtn_win_rest_h.png | Bin 0 -> 301 bytes .../icons/small/d_winbtn_win_restore.png | Bin 0 -> 133 bytes .../icons/small/d_winbtn_win_restore@2x.png | Bin 0 -> 196 bytes .../icons/small/d_winbtn_win_restore_a.png | Bin 0 -> 235 bytes .../icons/small/d_winbtn_win_restore_a@2x.png | Bin 0 -> 345 bytes .../icons/small/d_winbtn_win_restore_h.png | Bin 0 -> 235 bytes .../icons/small/d_winbtn_win_restore_h@2x.png | Bin 0 -> 345 bytes .../icons/small/editcollision_16.png | Bin 0 -> 428 bytes .../icons/small/editcollision_16@2x.png | Bin 0 -> 777 bytes .../icons/small/editcollision_32.png | Bin 0 -> 777 bytes .../icons/small/editconstraints_16.png | Bin 0 -> 370 bytes .../icons/small/editconstraints_16@2x.png | Bin 0 -> 566 bytes .../icons/small/editconstraints_32.png | Bin 0 -> 566 bytes .../icons/small/editicon.sml.png | Bin 0 -> 378 bytes .../icons/small/endButton-On.png | Bin 0 -> 1053 bytes .../icons/small/endButton.png | Bin 0 -> 379 bytes .../icons/small/eyeDropper.Large.png | Bin 0 -> 315 bytes .../icons/small/eyeDropper.Large@2x.png | Bin 0 -> 607 bytes .../icons/small/eyeDropper.sml.png | Bin 0 -> 82 bytes .../unity-editor-icons/icons/small/forward.png | Bin 0 -> 146 bytes .../icons/small/forward@2x.png | Bin 0 -> 210 bytes .../small/guisystem/align_horizontally.png | Bin 0 -> 134 bytes .../guisystem/align_horizontally_center.png | Bin 0 -> 108 bytes .../align_horizontally_center_active.png | Bin 0 -> 107 bytes .../small/guisystem/align_horizontally_left.png | Bin 0 -> 104 bytes .../align_horizontally_left_active.png | Bin 0 -> 103 bytes .../guisystem/align_horizontally_right.png | Bin 0 -> 104 bytes .../align_horizontally_right_active.png | Bin 0 -> 104 bytes .../icons/small/guisystem/align_vertically.png | Bin 0 -> 127 bytes .../small/guisystem/align_vertically_bottom.png | Bin 0 -> 95 bytes .../align_vertically_bottom_active.png | Bin 0 -> 95 bytes .../small/guisystem/align_vertically_center.png | Bin 0 -> 95 bytes .../align_vertically_center_active.png | Bin 0 -> 95 bytes .../small/guisystem/align_vertically_top.png | Bin 0 -> 95 bytes .../guisystem/align_vertically_top_active.png | Bin 0 -> 95 bytes .../small/guisystem/d_align_horizontally.png | Bin 0 -> 128 bytes .../guisystem/d_align_horizontally_center.png | Bin 0 -> 107 bytes .../d_align_horizontally_center_active.png | Bin 0 -> 107 bytes .../guisystem/d_align_horizontally_left.png | Bin 0 -> 103 bytes .../d_align_horizontally_left_active.png | Bin 0 -> 103 bytes .../guisystem/d_align_horizontally_right.png | Bin 0 -> 104 bytes .../d_align_horizontally_right_active.png | Bin 0 -> 104 bytes .../small/guisystem/d_align_vertically.png | Bin 0 -> 127 bytes .../guisystem/d_align_vertically_bottom.png | Bin 0 -> 95 bytes .../d_align_vertically_bottom_active.png | Bin 0 -> 95 bytes .../guisystem/d_align_vertically_center.png | Bin 0 -> 95 bytes .../d_align_vertically_center_active.png | Bin 0 -> 95 bytes .../small/guisystem/d_align_vertically_top.png | Bin 0 -> 95 bytes .../guisystem/d_align_vertically_top_active.png | Bin 0 -> 95 bytes .../icons/small/icon dropdown.png | Bin 0 -> 147 bytes .../icons/small/icon dropdown@2x.png | Bin 0 -> 200 bytes .../icons/small/leftBracket.png | Bin 0 -> 584 bytes .../icons/small/lightmeter/d_greenLight.png | Bin 0 -> 1893 bytes .../icons/small/lightmeter/d_lightOff.png | Bin 0 -> 698 bytes .../icons/small/lightmeter/d_lightRim.png | Bin 0 -> 865 bytes .../icons/small/lightmeter/d_orangeLight.png | Bin 0 -> 1538 bytes .../icons/small/lightmeter/d_redLight.png | Bin 0 -> 1509 bytes .../icons/small/lightmeter/greenLight.png | Bin 0 -> 1893 bytes .../icons/small/lightmeter/lightOff.png | Bin 0 -> 698 bytes .../icons/small/lightmeter/lightRim.png | Bin 0 -> 865 bytes .../icons/small/lightmeter/orangeLight.png | Bin 0 -> 1538 bytes .../icons/small/lightmeter/redLight.png | Bin 0 -> 1509 bytes 参考/unity-editor-icons/icons/small/loop.png | Bin 0 -> 1051 bytes .../unity-editor-icons/icons/small/monologo.png | Bin 0 -> 1955 bytes .../small/packagemanager/dark/Add-Available.png | Bin 0 -> 216 bytes .../packagemanager/dark/Add-Available@2x.png | Bin 0 -> 343 bytes .../packagemanager/dark/Download-Available.png | Bin 0 -> 208 bytes .../dark/Download-Available@2x.png | Bin 0 -> 314 bytes .../icons/small/packagemanager/dark/Error.png | Bin 0 -> 336 bytes .../small/packagemanager/dark/Error@2x.png | Bin 0 -> 492 bytes .../packagemanager/dark/Import-Available.png | Bin 0 -> 203 bytes .../packagemanager/dark/Import-Available@2x.png | Bin 0 -> 370 bytes .../packagemanager/dark/In-Development.png | Bin 0 -> 229 bytes .../packagemanager/dark/In-Development@2x.png | Bin 0 -> 490 bytes .../small/packagemanager/dark/Installed.png | Bin 0 -> 206 bytes .../small/packagemanager/dark/Installed@2x.png | Bin 0 -> 246 bytes .../icons/small/packagemanager/dark/Loading.png | Bin 0 -> 292 bytes .../small/packagemanager/dark/Loading@2x.png | Bin 0 -> 678 bytes .../icons/small/packagemanager/dark/Refresh.png | Bin 0 -> 286 bytes .../small/packagemanager/dark/Refresh@2x.png | Bin 0 -> 567 bytes .../packagemanager/dark/Update-Available.png | Bin 0 -> 318 bytes .../packagemanager/dark/Update-Available@2x.png | Bin 0 -> 562 bytes .../icons/small/packagemanager/dark/Warning.png | Bin 0 -> 272 bytes .../small/packagemanager/dark/Warning@2x.png | Bin 0 -> 478 bytes .../packagemanager/light/Add-Available.png | Bin 0 -> 214 bytes .../packagemanager/light/Add-Available@2x.png | Bin 0 -> 336 bytes .../packagemanager/light/Download-Available.png | Bin 0 -> 213 bytes .../light/Download-Available@2x.png | Bin 0 -> 318 bytes .../icons/small/packagemanager/light/Error.png | Bin 0 -> 348 bytes .../small/packagemanager/light/Error@2x.png | Bin 0 -> 530 bytes .../packagemanager/light/Import-Available.png | Bin 0 -> 201 bytes .../light/Import-Available@2x.png | Bin 0 -> 376 bytes .../packagemanager/light/In-Development.png | Bin 0 -> 259 bytes .../packagemanager/light/In-Development@2x.png | Bin 0 -> 485 bytes .../small/packagemanager/light/Installed.png | Bin 0 -> 206 bytes .../small/packagemanager/light/Installed@2x.png | Bin 0 -> 246 bytes .../small/packagemanager/light/Loading.png | Bin 0 -> 281 bytes .../small/packagemanager/light/Loading@2x.png | Bin 0 -> 639 bytes .../small/packagemanager/light/Refresh.png | Bin 0 -> 287 bytes .../small/packagemanager/light/Refresh@2x.png | Bin 0 -> 563 bytes .../packagemanager/light/Update-Available.png | Bin 0 -> 323 bytes .../light/Update-Available@2x.png | Bin 0 -> 570 bytes .../small/packagemanager/light/Warning.png | Bin 0 -> 278 bytes .../small/packagemanager/light/Warning@2x.png | Bin 0 -> 480 bytes .../icons/small/playLoopOff.png | Bin 0 -> 309 bytes .../icons/small/playLoopOn.png | Bin 0 -> 834 bytes .../icons/small/playSpeed.png | Bin 0 -> 1003 bytes .../icons/small/preAudioAutoPlayOff.png | Bin 0 -> 305 bytes .../icons/small/preAudioAutoPlayOff@2x.png | Bin 0 -> 618 bytes .../icons/small/preAudioAutoPlayOn.png | Bin 0 -> 691 bytes .../icons/small/preAudioLoopOff.png | Bin 0 -> 215 bytes .../icons/small/preAudioLoopOff@2x.png | Bin 0 -> 441 bytes .../icons/small/preAudioLoopOn.png | Bin 0 -> 834 bytes .../icons/small/preAudioPlayOff.png | Bin 0 -> 232 bytes .../icons/small/preAudioPlayOn.png | Bin 0 -> 613 bytes .../icons/small/processed/AreaLight Gizmo.png | Bin 0 -> 980 bytes .../icons/small/processed/AreaLight Icon.png | Bin 0 -> 465 bytes .../icons/small/processed/Assembly Icon.png | Bin 0 -> 396 bytes .../icons/small/processed/AssetStore Icon.png | Bin 0 -> 359 bytes .../small/processed/AudioMixerView Icon.png | Bin 0 -> 319 bytes .../icons/small/processed/AudioSource Gizmo.png | Bin 0 -> 344 bytes .../icons/small/processed/CGProgram Icon.png | Bin 0 -> 522 bytes .../icons/small/processed/Camera Gizmo.png | Bin 0 -> 672 bytes .../icons/small/processed/ChorusFilter Icon.png | Bin 0 -> 1737 bytes .../small/processed/CollabChanges Icon.png | Bin 0 -> 637 bytes .../processed/CollabChangesConflict Icon.png | Bin 0 -> 624 bytes .../processed/CollabChangesDeleted Icon.png | Bin 0 -> 442 bytes .../small/processed/CollabConflict Icon.png | Bin 0 -> 411 bytes .../icons/small/processed/CollabCreate Icon.png | Bin 0 -> 379 bytes .../small/processed/CollabDeleted Icon.png | Bin 0 -> 346 bytes .../icons/small/processed/CollabEdit Icon.png | Bin 0 -> 695 bytes .../small/processed/CollabExclude Icon.png | Bin 0 -> 799 bytes .../icons/small/processed/CollabMoved Icon.png | Bin 0 -> 817 bytes .../icons/small/processed/DefaultSlate Icon.png | Bin 0 -> 1311 bytes .../small/processed/DirectionalLight Gizmo.png | Bin 0 -> 890 bytes .../small/processed/DirectionalLight Icon.png | Bin 0 -> 530 bytes .../icons/small/processed/DiscLight Icon.png | Bin 0 -> 1174 bytes .../icons/small/processed/EchoFilter Icon.png | Bin 0 -> 1592 bytes .../icons/small/processed/Favorite Icon.png | Bin 0 -> 608 bytes .../icons/small/processed/Favorite On Icon.png | Bin 0 -> 511 bytes .../icons/small/processed/Folder Icon.png | Bin 0 -> 270 bytes .../icons/small/processed/Folder On Icon.png | Bin 0 -> 261 bytes .../icons/small/processed/FolderEmpty Icon.png | Bin 0 -> 360 bytes .../small/processed/FolderEmpty On Icon.png | Bin 0 -> 209 bytes .../small/processed/FolderFavorite Icon.png | Bin 0 -> 892 bytes .../small/processed/FolderFavorite On Icon.png | Bin 0 -> 598 bytes .../icons/small/processed/FolderOpened Icon.png | Bin 0 -> 339 bytes .../small/processed/FolderOpened On Icon.png | Bin 0 -> 322 bytes .../icons/small/processed/GameManager Icon.png | Bin 0 -> 2237 bytes .../icons/small/processed/GridBrush Icon.png | Bin 0 -> 2049 bytes .../small/processed/HighPassFilter Icon.png | Bin 0 -> 1302 bytes .../processed/HorizontalLayoutGroup Icon.png | Bin 0 -> 263 bytes .../icons/small/processed/Js Script Icon.png | Bin 0 -> 1321 bytes .../icons/small/processed/LensFlare Gizmo.png | Bin 0 -> 572 bytes .../small/processed/LightProbeGroup Gizmo.png | Bin 0 -> 993 bytes .../processed/LightProbeProxyVolume Gizmo.png | Bin 0 -> 1219 bytes .../processed/LightingDataAssetParent Icon.png | Bin 0 -> 897 bytes .../small/processed/LowPassFilter Icon.png | Bin 0 -> 1193 bytes .../icons/small/processed/Main Light Gizmo.png | Bin 0 -> 1166 bytes .../icons/small/processed/MetaFile Icon.png | Bin 0 -> 1532 bytes .../icons/small/processed/Microphone Icon.png | Bin 0 -> 621 bytes .../icons/small/processed/MuscleClip Icon.png | Bin 0 -> 1302 bytes .../small/processed/ParticleSystem Gizmo.png | Bin 0 -> 692 bytes .../ParticleSystemForceField Gizmo.png | Bin 0 -> 1666 bytes .../icons/small/processed/PointLight Gizmo.png | Bin 0 -> 875 bytes .../icons/small/processed/Prefab Icon.png | Bin 0 -> 762 bytes .../icons/small/processed/Prefab On Icon.png | Bin 0 -> 636 bytes .../icons/small/processed/PrefabModel Icon.png | Bin 0 -> 1177 bytes .../small/processed/PrefabModel On Icon.png | Bin 0 -> 752 bytes .../small/processed/PrefabOverlayAdded Icon.png | Bin 0 -> 420 bytes .../processed/PrefabOverlayModified Icon.png | Bin 0 -> 379 bytes .../processed/PrefabOverlayRemoved Icon.png | Bin 0 -> 342 bytes .../small/processed/PrefabVariant Icon.png | Bin 0 -> 1242 bytes .../small/processed/PrefabVariant On Icon.png | Bin 0 -> 815 bytes .../icons/small/processed/Projector Gizmo.png | Bin 0 -> 653 bytes .../small/processed/RaycastCollider Icon.png | Bin 0 -> 701 bytes .../small/processed/ReflectionProbe Gizmo.png | Bin 0 -> 835 bytes .../icons/small/processed/ReverbFilter Icon.png | Bin 0 -> 1930 bytes .../icons/small/processed/SceneSet Icon.png | Bin 0 -> 1674 bytes .../icons/small/processed/Search Icon.png | Bin 0 -> 540 bytes .../icons/small/processed/Search On Icon.png | Bin 0 -> 450 bytes .../processed/SoftlockProjectBrowser Icon.png | Bin 0 -> 1016 bytes .../small/processed/SpeedTreeModel Icon.png | Bin 0 -> 1390 bytes .../icons/small/processed/SpotLight Gizmo.png | Bin 0 -> 519 bytes .../icons/small/processed/Spotlight Icon.png | Bin 0 -> 635 bytes .../small/processed/SpriteCollider Icon.png | Bin 0 -> 2063 bytes .../icons/small/processed/UssScript Icon.png | Bin 0 -> 1063 bytes .../icons/small/processed/UxmlScript Icon.png | Bin 0 -> 1469 bytes .../processed/VerticalLayoutGroup Icon.png | Bin 0 -> 210 bytes .../icons/small/processed/VideoEffect Icon.png | Bin 0 -> 1034 bytes .../small/processed/VisualEffect Gizmo.png | Bin 0 -> 613 bytes .../small/processed/VisualEffectAsset Icon.png | Bin 0 -> 1009 bytes .../icons/small/processed/WindZone Gizmo.png | Bin 0 -> 1119 bytes .../icons/small/processed/boo Script Icon.png | Bin 0 -> 706 bytes .../icons/small/processed/cs Script Icon.png | Bin 0 -> 1318 bytes .../icons/small/processed/d_AreaLight Icon.png | Bin 0 -> 465 bytes .../icons/small/processed/d_Assembly Icon.png | Bin 0 -> 391 bytes .../icons/small/processed/d_AssetStore Icon.png | Bin 0 -> 358 bytes .../small/processed/d_AudioMixerView Icon.png | Bin 0 -> 319 bytes .../icons/small/processed/d_CGProgram Icon.png | Bin 0 -> 426 bytes .../small/processed/d_CollabChanges Icon.png | Bin 0 -> 680 bytes .../processed/d_CollabChangesConflict Icon.png | Bin 0 -> 659 bytes .../processed/d_CollabChangesDeleted Icon.png | Bin 0 -> 449 bytes .../small/processed/d_CollabConflict Icon.png | Bin 0 -> 444 bytes .../small/processed/d_CollabCreate Icon.png | Bin 0 -> 419 bytes .../small/processed/d_CollabDeleted Icon.png | Bin 0 -> 357 bytes .../icons/small/processed/d_CollabEdit Icon.png | Bin 0 -> 735 bytes .../small/processed/d_CollabExclude Icon.png | Bin 0 -> 799 bytes .../small/processed/d_CollabMoved Icon.png | Bin 0 -> 856 bytes .../small/processed/d_DirectionalLight Icon.png | Bin 0 -> 544 bytes .../icons/small/processed/d_Favorite Icon.png | Bin 0 -> 612 bytes .../small/processed/d_Favorite On Icon.png | Bin 0 -> 511 bytes .../icons/small/processed/d_Folder Icon.png | Bin 0 -> 270 bytes .../small/processed/d_FolderEmpty Icon.png | Bin 0 -> 353 bytes .../small/processed/d_FolderEmpty On Icon.png | Bin 0 -> 209 bytes .../small/processed/d_FolderFavorite Icon.png | Bin 0 -> 884 bytes .../processed/d_FolderFavorite On Icon.png | Bin 0 -> 598 bytes .../small/processed/d_FolderOpened Icon.png | Bin 0 -> 350 bytes .../small/processed/d_GridLayoutGroup Icon.png | Bin 0 -> 172 bytes .../processed/d_HorizontalLayoutGroup Icon.png | Bin 0 -> 232 bytes .../icons/small/processed/d_Js Script Icon.png | Bin 0 -> 1237 bytes .../d_LightingDataAssetParent Icon.png | Bin 0 -> 856 bytes .../icons/small/processed/d_Microphone Icon.png | Bin 0 -> 621 bytes .../icons/small/processed/d_Prefab Icon.png | Bin 0 -> 717 bytes .../icons/small/processed/d_Prefab On Icon.png | Bin 0 -> 636 bytes .../small/processed/d_PrefabModel Icon.png | Bin 0 -> 1166 bytes .../small/processed/d_PrefabModel On Icon.png | Bin 0 -> 752 bytes .../small/processed/d_PrefabVariant Icon.png | Bin 0 -> 1207 bytes .../small/processed/d_PrefabVariant On Icon.png | Bin 0 -> 815 bytes .../small/processed/d_RaycastCollider Icon.png | Bin 0 -> 708 bytes .../icons/small/processed/d_Search Icon.png | Bin 0 -> 507 bytes .../icons/small/processed/d_Spotlight Icon.png | Bin 0 -> 616 bytes .../processed/d_VerticalLayoutGroup Icon.png | Bin 0 -> 215 bytes .../icons/small/processed/d_boo Script Icon.png | Bin 0 -> 562 bytes .../icons/small/processed/d_cs Script Icon.png | Bin 0 -> 1296 bytes .../icons/small/processed/dll Script Icon.png | Bin 0 -> 1378 bytes .../processed/sv_icon_dot0_pix16_gizmo.png | Bin 0 -> 744 bytes .../processed/sv_icon_dot10_pix16_gizmo.png | Bin 0 -> 1032 bytes .../processed/sv_icon_dot11_pix16_gizmo.png | Bin 0 -> 1071 bytes .../processed/sv_icon_dot12_pix16_gizmo.png | Bin 0 -> 1195 bytes .../processed/sv_icon_dot13_pix16_gizmo.png | Bin 0 -> 1210 bytes .../processed/sv_icon_dot14_pix16_gizmo.png | Bin 0 -> 1441 bytes .../processed/sv_icon_dot15_pix16_gizmo.png | Bin 0 -> 1388 bytes .../processed/sv_icon_dot1_pix16_gizmo.png | Bin 0 -> 1385 bytes .../processed/sv_icon_dot2_pix16_gizmo.png | Bin 0 -> 1384 bytes .../processed/sv_icon_dot3_pix16_gizmo.png | Bin 0 -> 1304 bytes .../processed/sv_icon_dot4_pix16_gizmo.png | Bin 0 -> 1388 bytes .../processed/sv_icon_dot5_pix16_gizmo.png | Bin 0 -> 1354 bytes .../processed/sv_icon_dot6_pix16_gizmo.png | Bin 0 -> 1242 bytes .../processed/sv_icon_dot7_pix16_gizmo.png | Bin 0 -> 1277 bytes .../processed/sv_icon_dot8_pix16_gizmo.png | Bin 0 -> 474 bytes .../processed/sv_icon_dot9_pix16_gizmo.png | Bin 0 -> 1001 bytes .../unityeditor/AnimationWindowEvent Icon.png | Bin 0 -> 992 bytes .../unityeditor/AudioImporter Icon.png | Bin 0 -> 537 bytes .../processed/unityeditor/DefaultAsset Icon.png | Bin 0 -> 386 bytes .../unityeditor/EditorSettings Icon.png | Bin 0 -> 2237 bytes .../unityeditor/HumanTemplate Icon.png | Bin 0 -> 873 bytes .../unityeditor/IHVImageFormatImporter Icon.png | Bin 0 -> 336 bytes .../unityeditor/LightingDataAsset Icon.png | Bin 0 -> 897 bytes .../unityeditor/LightmapParameters Icon.png | Bin 0 -> 764 bytes .../unityeditor/LightmapParameters On Icon.png | Bin 0 -> 643 bytes .../unityeditor/ModelImporter Icon.png | Bin 0 -> 806 bytes .../processed/unityeditor/SceneAsset Icon.png | Bin 0 -> 741 bytes .../unityeditor/SceneAsset On Icon.png | Bin 0 -> 749 bytes .../unityeditor/ShaderImporter Icon.png | Bin 0 -> 1494 bytes .../unityeditor/SpeedTreeImporter Icon.png | Bin 0 -> 1390 bytes .../unityeditor/SubstanceArchive Icon.png | Bin 0 -> 1817 bytes .../unityeditor/TextScriptImporter Icon.png | Bin 0 -> 623 bytes .../unityeditor/TextureImporter Icon.png | Bin 0 -> 336 bytes .../unityeditor/TrueTypeFontImporter Icon.png | Bin 0 -> 677 bytes .../unityeditor/VideoClipImporter Icon.png | Bin 0 -> 1148 bytes .../animations/AnimatorController Icon.png | Bin 0 -> 408 bytes .../animations/AnimatorController On Icon.png | Bin 0 -> 433 bytes .../animations/AnimatorState Icon.png | Bin 0 -> 508 bytes .../animations/AnimatorStateMachine Icon.png | Bin 0 -> 516 bytes .../animations/AnimatorStateTransition Icon.png | Bin 0 -> 664 bytes .../unityeditor/animations/BlendTree Icon.png | Bin 0 -> 707 bytes .../animations/d_AnimatorController Icon.png | Bin 0 -> 408 bytes .../animations/d_AnimatorController On Icon.png | Bin 0 -> 433 bytes .../animations/d_AnimatorState Icon.png | Bin 0 -> 502 bytes .../animations/d_AnimatorStateMachine Icon.png | Bin 0 -> 518 bytes .../d_AnimatorStateTransition Icon.png | Bin 0 -> 682 bytes .../unityeditor/animations/d_BlendTree Icon.png | Bin 0 -> 736 bytes .../audio/AudioMixerController Icon.png | Bin 0 -> 378 bytes .../audio/AudioMixerController On Icon.png | Bin 0 -> 391 bytes .../audio/d_AudioMixerController Icon.png | Bin 0 -> 365 bytes .../audio/d_AudioMixerController On Icon.png | Bin 0 -> 391 bytes .../unityeditor/d_AudioImporter Icon.png | Bin 0 -> 523 bytes .../unityeditor/d_DefaultAsset Icon.png | Bin 0 -> 258 bytes .../d_IHVImageFormatImporter Icon.png | Bin 0 -> 336 bytes .../unityeditor/d_LightingDataAsset Icon.png | Bin 0 -> 856 bytes .../unityeditor/d_LightmapParameters Icon.png | Bin 0 -> 776 bytes .../d_LightmapParameters On Icon.png | Bin 0 -> 643 bytes .../unityeditor/d_ModelImporter Icon.png | Bin 0 -> 787 bytes .../processed/unityeditor/d_SceneAsset Icon.png | Bin 0 -> 697 bytes .../unityeditor/d_ShaderImporter Icon.png | Bin 0 -> 1436 bytes .../unityeditor/d_TextScriptImporter Icon.png | Bin 0 -> 448 bytes .../unityeditor/d_TextureImporter Icon.png | Bin 0 -> 336 bytes .../unityeditor/d_TrueTypeFontImporter Icon.png | Bin 0 -> 670 bytes .../animationstatemachine/AnyStateNode Icon.png | Bin 0 -> 999 bytes .../d_AnyStateNode Icon.png | Bin 0 -> 989 bytes .../unityeditor/presets/Preset Icon.png | Bin 0 -> 1251 bytes .../unityeditor/u2d/SpriteAtlasAsset Icon.png | Bin 0 -> 487 bytes .../u2d/SpriteAtlasImporter Icon.png | Bin 0 -> 487 bytes .../unityeditor/u2d/d_SpriteAtlasAsset Icon.png | Bin 0 -> 501 bytes .../u2d/d_SpriteAtlasImporter Icon.png | Bin 0 -> 501 bytes .../vfx/VisualEffectSubgraphBlock Icon.png | Bin 0 -> 883 bytes .../vfx/VisualEffectSubgraphOperator Icon.png | Bin 0 -> 910 bytes .../vfx/d_VisualEffectSubgraphBlock Icon.png | Bin 0 -> 877 bytes .../vfx/d_VisualEffectSubgraphOperator Icon.png | Bin 0 -> 923 bytes .../AssemblyDefinitionAsset Icon.png | Bin 0 -> 774 bytes .../AssemblyDefinitionReferenceAsset Icon.png | Bin 0 -> 1343 bytes .../d_AssemblyDefinitionAsset Icon.png | Bin 0 -> 592 bytes .../d_AssemblyDefinitionReferenceAsset Icon.png | Bin 0 -> 1246 bytes .../processed/unityengine/Animation Icon.png | Bin 0 -> 597 bytes .../unityengine/AnimationClip Icon.png | Bin 0 -> 678 bytes .../unityengine/AnimationClip On Icon.png | Bin 0 -> 478 bytes .../processed/unityengine/Animator Icon.png | Bin 0 -> 808 bytes .../AnimatorOverrideController Icon.png | Bin 0 -> 436 bytes .../AnimatorOverrideController On Icon.png | Bin 0 -> 437 bytes .../unityengine/AreaEffector2D Icon.png | Bin 0 -> 389 bytes .../unityengine/AudioChorusFilter Icon.png | Bin 0 -> 555 bytes .../processed/unityengine/AudioClip Icon.png | Bin 0 -> 537 bytes .../processed/unityengine/AudioClip On Icon.png | Bin 0 -> 436 bytes .../unityengine/AudioDistortionFilter Icon.png | Bin 0 -> 1013 bytes .../unityengine/AudioEchoFilter Icon.png | Bin 0 -> 1215 bytes .../unityengine/AudioHighPassFilter Icon.png | Bin 0 -> 395 bytes .../unityengine/AudioListener Icon.png | Bin 0 -> 536 bytes .../unityengine/AudioLowPassFilter Icon.png | Bin 0 -> 395 bytes .../unityengine/AudioReverbFilter Icon.png | Bin 0 -> 677 bytes .../unityengine/AudioReverbZone Icon.png | Bin 0 -> 815 bytes .../processed/unityengine/AudioSource Icon.png | Bin 0 -> 625 bytes .../small/processed/unityengine/Avatar Icon.png | Bin 0 -> 784 bytes .../processed/unityengine/AvatarMask Icon.png | Bin 0 -> 953 bytes .../unityengine/AvatarMask On Icon.png | Bin 0 -> 696 bytes .../unityengine/BillboardAsset Icon.png | Bin 0 -> 580 bytes .../unityengine/BillboardRenderer Icon.png | Bin 0 -> 729 bytes .../processed/unityengine/BoxCollider Icon.png | Bin 0 -> 710 bytes .../unityengine/BoxCollider2D Icon.png | Bin 0 -> 232 bytes .../unityengine/BuoyancyEffector2D Icon.png | Bin 0 -> 977 bytes .../small/processed/unityengine/Camera Icon.png | Bin 0 -> 400 bytes .../small/processed/unityengine/Canvas Icon.png | Bin 0 -> 424 bytes .../processed/unityengine/CanvasGroup Icon.png | Bin 0 -> 161 bytes .../unityengine/CanvasRenderer Icon.png | Bin 0 -> 396 bytes .../unityengine/CapsuleCollider Icon.png | Bin 0 -> 815 bytes .../unityengine/CapsuleCollider2D Icon.png | Bin 0 -> 397 bytes .../unityengine/CharacterController Icon.png | Bin 0 -> 606 bytes .../unityengine/CharacterJoint Icon.png | Bin 0 -> 783 bytes .../unityengine/CircleCollider2D Icon.png | Bin 0 -> 455 bytes .../small/processed/unityengine/Cloth Icon.png | Bin 0 -> 555 bytes .../unityengine/CompositeCollider2D Icon.png | Bin 0 -> 593 bytes .../unityengine/ComputeShader Icon.png | Bin 0 -> 1419 bytes .../unityengine/ConfigurableJoint Icon.png | Bin 0 -> 877 bytes .../unityengine/ConstantForce Icon.png | Bin 0 -> 637 bytes .../unityengine/ConstantForce2D Icon.png | Bin 0 -> 1094 bytes .../processed/unityengine/Cubemap Icon.png | Bin 0 -> 588 bytes .../unityengine/DistanceJoint2D Icon.png | Bin 0 -> 371 bytes .../unityengine/EdgeCollider2D Icon.png | Bin 0 -> 596 bytes .../processed/unityengine/FixedJoint Icon.png | Bin 0 -> 1303 bytes .../processed/unityengine/FixedJoint2D Icon.png | Bin 0 -> 1296 bytes .../small/processed/unityengine/Flare Icon.png | Bin 0 -> 797 bytes .../processed/unityengine/Flare On Icon.png | Bin 0 -> 749 bytes .../processed/unityengine/FlareLayer Icon.png | Bin 0 -> 645 bytes .../small/processed/unityengine/Font Icon.png | Bin 0 -> 621 bytes .../processed/unityengine/Font On Icon.png | Bin 0 -> 670 bytes .../unityengine/FrictionJoint2D Icon.png | Bin 0 -> 680 bytes .../processed/unityengine/GUILayer Icon.png | Bin 0 -> 1394 bytes .../processed/unityengine/GUISkin Icon.png | Bin 0 -> 476 bytes .../processed/unityengine/GUISkin On Icon.png | Bin 0 -> 507 bytes .../processed/unityengine/GUIText Icon.png | Bin 0 -> 1135 bytes .../processed/unityengine/GUITexture Icon.png | Bin 0 -> 1986 bytes .../processed/unityengine/GameObject Icon.png | Bin 0 -> 778 bytes .../unityengine/GameObject On Icon.png | Bin 0 -> 741 bytes .../small/processed/unityengine/Grid Icon.png | Bin 0 -> 484 bytes .../small/processed/unityengine/Halo Icon.png | Bin 0 -> 895 bytes .../processed/unityengine/HingeJoint Icon.png | Bin 0 -> 593 bytes .../processed/unityengine/HingeJoint2D Icon.png | Bin 0 -> 362 bytes .../processed/unityengine/LODGroup Icon.png | Bin 0 -> 403 bytes .../processed/unityengine/LensFlare Icon.png | Bin 0 -> 1537 bytes .../small/processed/unityengine/Light Icon.png | Bin 0 -> 515 bytes .../unityengine/LightProbeGroup Icon.png | Bin 0 -> 793 bytes .../unityengine/LightProbeProxyVolume Icon.png | Bin 0 -> 330 bytes .../processed/unityengine/LightProbes Icon.png | Bin 0 -> 679 bytes .../unityengine/LightingSettings Icon.png | Bin 0 -> 943 bytes .../processed/unityengine/LineRenderer Icon.png | Bin 0 -> 629 bytes .../processed/unityengine/Material Icon.png | Bin 0 -> 540 bytes .../processed/unityengine/Material On Icon.png | Bin 0 -> 689 bytes .../small/processed/unityengine/Mesh Icon.png | Bin 0 -> 227 bytes .../processed/unityengine/MeshCollider Icon.png | Bin 0 -> 227 bytes .../processed/unityengine/MeshFilter Icon.png | Bin 0 -> 227 bytes .../processed/unityengine/MeshRenderer Icon.png | Bin 0 -> 789 bytes .../small/processed/unityengine/Motion Icon.png | Bin 0 -> 742 bytes .../processed/unityengine/MovieTexture Icon.png | Bin 0 -> 1923 bytes .../processed/unityengine/NetworkView Icon.png | Bin 0 -> 2201 bytes .../unityengine/OcclusionArea Icon.png | Bin 0 -> 1015 bytes .../unityengine/OcclusionPortal Icon.png | Bin 0 -> 1211 bytes .../unityengine/ParticleSystem Icon.png | Bin 0 -> 407 bytes .../ParticleSystemForceField Icon.png | Bin 0 -> 1369 bytes .../unityengine/PhysicMaterial Icon.png | Bin 0 -> 1074 bytes .../unityengine/PhysicMaterial On Icon.png | Bin 0 -> 760 bytes .../unityengine/PhysicsMaterial2D Icon.png | Bin 0 -> 552 bytes .../unityengine/PhysicsMaterial2D On Icon.png | Bin 0 -> 568 bytes .../unityengine/PlatformEffector2D Icon.png | Bin 0 -> 994 bytes .../unityengine/PointEffector2D Icon.png | Bin 0 -> 489 bytes .../unityengine/PolygonCollider2D Icon.png | Bin 0 -> 877 bytes .../unityengine/ProceduralMaterial Icon.png | Bin 0 -> 984 bytes .../processed/unityengine/Projector Icon.png | Bin 0 -> 766 bytes .../unityengine/RayTracingShader Icon.png | Bin 0 -> 1215 bytes .../unityengine/RectTransform Icon.png | Bin 0 -> 676 bytes .../unityengine/ReflectionProbe Icon.png | Bin 0 -> 847 bytes .../unityengine/RelativeJoint2D Icon.png | Bin 0 -> 622 bytes .../unityengine/RenderTexture Icon.png | Bin 0 -> 809 bytes .../unityengine/RenderTexture On Icon.png | Bin 0 -> 407 bytes .../processed/unityengine/Rigidbody Icon.png | Bin 0 -> 749 bytes .../processed/unityengine/Rigidbody2D Icon.png | Bin 0 -> 749 bytes .../unityengine/ScriptableObject Icon.png | Bin 0 -> 1189 bytes .../unityengine/ScriptableObject On Icon.png | Bin 0 -> 833 bytes .../small/processed/unityengine/Shader Icon.png | Bin 0 -> 1958 bytes .../ShaderVariantCollection Icon.png | Bin 0 -> 1945 bytes .../unityengine/SkinnedMeshRenderer Icon.png | Bin 0 -> 1064 bytes .../small/processed/unityengine/Skybox Icon.png | Bin 0 -> 597 bytes .../unityengine/SliderJoint2D Icon.png | Bin 0 -> 404 bytes .../unityengine/SphereCollider Icon.png | Bin 0 -> 1100 bytes .../processed/unityengine/SpringJoint Icon.png | Bin 0 -> 718 bytes .../unityengine/SpringJoint2D Icon.png | Bin 0 -> 718 bytes .../small/processed/unityengine/Sprite Icon.png | Bin 0 -> 366 bytes .../processed/unityengine/SpriteMask Icon.png | Bin 0 -> 373 bytes .../unityengine/SpriteRenderer Icon.png | Bin 0 -> 938 bytes .../unityengine/StreamingController Icon.png | Bin 0 -> 1114 bytes .../unityengine/SurfaceEffector2D Icon.png | Bin 0 -> 512 bytes .../unityengine/TargetJoint2D Icon.png | Bin 0 -> 1638 bytes .../processed/unityengine/Terrain Icon.png | Bin 0 -> 1105 bytes .../unityengine/TerrainCollider Icon.png | Bin 0 -> 985 bytes .../processed/unityengine/TerrainData Icon.png | Bin 0 -> 1598 bytes .../processed/unityengine/TextAsset Icon.png | Bin 0 -> 453 bytes .../processed/unityengine/TextMesh Icon.png | Bin 0 -> 1476 bytes .../processed/unityengine/Texture Icon.png | Bin 0 -> 387 bytes .../processed/unityengine/Texture2D Icon.png | Bin 0 -> 336 bytes .../unityengine/TrailRenderer Icon.png | Bin 0 -> 1066 bytes .../processed/unityengine/Transform Icon.png | Bin 0 -> 910 bytes .../processed/unityengine/VisualEffect Icon.png | Bin 0 -> 712 bytes .../unityengine/VisualEffectAsset Icon.png | Bin 0 -> 1009 bytes .../unityengine/WheelCollider Icon.png | Bin 0 -> 1167 bytes .../processed/unityengine/WheelJoint2D Icon.png | Bin 0 -> 1325 bytes .../processed/unityengine/WindZone Icon.png | Bin 0 -> 574 bytes .../unityengine/ai/NavMeshAgent Icon.png | Bin 0 -> 980 bytes .../unityengine/ai/NavMeshData Icon.png | Bin 0 -> 1360 bytes .../unityengine/ai/NavMeshObstacle Icon.png | Bin 0 -> 744 bytes .../unityengine/ai/OffMeshLink Icon.png | Bin 0 -> 1135 bytes .../unityengine/ai/d_NavMeshAgent Icon.png | Bin 0 -> 964 bytes .../unityengine/ai/d_NavMeshData Icon.png | Bin 0 -> 1392 bytes .../unityengine/ai/d_NavMeshObstacle Icon.png | Bin 0 -> 766 bytes .../unityengine/ai/d_OffMeshLink Icon.png | Bin 0 -> 1152 bytes .../analytics/AnalyticsTracker Icon.png | Bin 0 -> 575 bytes .../analytics/d_AnalyticsTracker Icon.png | Bin 0 -> 555 bytes .../animations/AimConstraint Icon.png | Bin 0 -> 1253 bytes .../animations/LookAtConstraint Icon.png | Bin 0 -> 1033 bytes .../animations/ParentConstraint Icon.png | Bin 0 -> 770 bytes .../animations/PositionConstraint Icon.png | Bin 0 -> 1096 bytes .../animations/RotationConstraint Icon.png | Bin 0 -> 1293 bytes .../animations/ScaleConstraint Icon.png | Bin 0 -> 921 bytes .../animations/d_AimConstraint Icon.png | Bin 0 -> 1247 bytes .../animations/d_LookAtConstraint Icon.png | Bin 0 -> 1029 bytes .../animations/d_ParentConstraint Icon.png | Bin 0 -> 757 bytes .../animations/d_PositionConstraint Icon.png | Bin 0 -> 1102 bytes .../animations/d_RotationConstraint Icon.png | Bin 0 -> 1308 bytes .../animations/d_ScaleConstraint Icon.png | Bin 0 -> 940 bytes .../unityengine/audio/AudioMixerGroup Icon.png | Bin 0 -> 404 bytes .../audio/AudioMixerSnapshot Icon.png | Bin 0 -> 340 bytes .../audio/AudioSpatializerMicrosoft Icon.png | Bin 0 -> 734 bytes .../audio/d_AudioMixerGroup Icon.png | Bin 0 -> 409 bytes .../audio/d_AudioMixerSnapshot Icon.png | Bin 0 -> 340 bytes .../audio/d_AudioSpatializerMicrosoft Icon.png | Bin 0 -> 734 bytes .../processed/unityengine/d_Animation Icon.png | Bin 0 -> 597 bytes .../unityengine/d_AnimationClip Icon.png | Bin 0 -> 683 bytes .../unityengine/d_AnimationClip On Icon.png | Bin 0 -> 478 bytes .../processed/unityengine/d_Animator Icon.png | Bin 0 -> 831 bytes .../d_AnimatorOverrideController Icon.png | Bin 0 -> 422 bytes .../d_AnimatorOverrideController On Icon.png | Bin 0 -> 437 bytes .../unityengine/d_AreaEffector2D Icon.png | Bin 0 -> 386 bytes .../unityengine/d_AudioChorusFilter Icon.png | Bin 0 -> 555 bytes .../processed/unityengine/d_AudioClip Icon.png | Bin 0 -> 523 bytes .../unityengine/d_AudioClip On Icon.png | Bin 0 -> 436 bytes .../d_AudioDistortionFilter Icon.png | Bin 0 -> 997 bytes .../unityengine/d_AudioEchoFilter Icon.png | Bin 0 -> 1254 bytes .../unityengine/d_AudioHighPassFilter Icon.png | Bin 0 -> 395 bytes .../unityengine/d_AudioListener Icon.png | Bin 0 -> 532 bytes .../unityengine/d_AudioLowPassFilter Icon.png | Bin 0 -> 395 bytes .../unityengine/d_AudioReverbFilter Icon.png | Bin 0 -> 655 bytes .../unityengine/d_AudioReverbZone Icon.png | Bin 0 -> 793 bytes .../unityengine/d_AudioSource Icon.png | Bin 0 -> 632 bytes .../processed/unityengine/d_Avatar Icon.png | Bin 0 -> 821 bytes .../processed/unityengine/d_AvatarMask Icon.png | Bin 0 -> 964 bytes .../unityengine/d_AvatarMask On Icon.png | Bin 0 -> 696 bytes .../unityengine/d_BillboardAsset Icon.png | Bin 0 -> 573 bytes .../unityengine/d_BillboardRenderer Icon.png | Bin 0 -> 748 bytes .../unityengine/d_BoxCollider Icon.png | Bin 0 -> 679 bytes .../unityengine/d_BoxCollider2D Icon.png | Bin 0 -> 232 bytes .../unityengine/d_BuoyancyEffector2D Icon.png | Bin 0 -> 932 bytes .../processed/unityengine/d_Camera Icon.png | Bin 0 -> 398 bytes .../processed/unityengine/d_Canvas Icon.png | Bin 0 -> 393 bytes .../unityengine/d_CanvasGroup Icon.png | Bin 0 -> 121 bytes .../unityengine/d_CanvasRenderer Icon.png | Bin 0 -> 372 bytes .../unityengine/d_CapsuleCollider Icon.png | Bin 0 -> 786 bytes .../unityengine/d_CapsuleCollider2D Icon.png | Bin 0 -> 398 bytes .../unityengine/d_CharacterController Icon.png | Bin 0 -> 610 bytes .../unityengine/d_CharacterJoint Icon.png | Bin 0 -> 790 bytes .../unityengine/d_CircleCollider2D Icon.png | Bin 0 -> 462 bytes .../processed/unityengine/d_Cloth Icon.png | Bin 0 -> 560 bytes .../unityengine/d_CompositeCollider2D Icon.png | Bin 0 -> 573 bytes .../unityengine/d_ComputeShader Icon.png | Bin 0 -> 1392 bytes .../unityengine/d_ConfigurableJoint Icon.png | Bin 0 -> 879 bytes .../unityengine/d_ConstantForce Icon.png | Bin 0 -> 635 bytes .../unityengine/d_ConstantForce2D Icon.png | Bin 0 -> 419 bytes .../processed/unityengine/d_Cubemap Icon.png | Bin 0 -> 572 bytes .../unityengine/d_DistanceJoint2D Icon.png | Bin 0 -> 367 bytes .../unityengine/d_EdgeCollider2D Icon.png | Bin 0 -> 565 bytes .../processed/unityengine/d_FixedJoint Icon.png | Bin 0 -> 1264 bytes .../processed/unityengine/d_Flare Icon.png | Bin 0 -> 808 bytes .../processed/unityengine/d_Flare On Icon.png | Bin 0 -> 749 bytes .../processed/unityengine/d_FlareLayer Icon.png | Bin 0 -> 636 bytes .../small/processed/unityengine/d_Font Icon.png | Bin 0 -> 618 bytes .../unityengine/d_FrictionJoint2D Icon.png | Bin 0 -> 686 bytes .../processed/unityengine/d_GUISkin Icon.png | Bin 0 -> 467 bytes .../processed/unityengine/d_GUISkin On Icon.png | Bin 0 -> 507 bytes .../processed/unityengine/d_GameObject Icon.png | Bin 0 -> 782 bytes .../small/processed/unityengine/d_Grid Icon.png | Bin 0 -> 484 bytes .../small/processed/unityengine/d_Halo Icon.png | Bin 0 -> 899 bytes .../processed/unityengine/d_HingeJoint Icon.png | Bin 0 -> 582 bytes .../unityengine/d_HingeJoint2D Icon.png | Bin 0 -> 362 bytes .../processed/unityengine/d_LODGroup Icon.png | Bin 0 -> 399 bytes .../processed/unityengine/d_Light Icon.png | Bin 0 -> 528 bytes .../unityengine/d_LightProbeGroup Icon.png | Bin 0 -> 782 bytes .../d_LightProbeProxyVolume Icon.png | Bin 0 -> 335 bytes .../unityengine/d_LightProbes Icon.png | Bin 0 -> 685 bytes .../unityengine/d_LightingSettings Icon.png | Bin 0 -> 958 bytes .../unityengine/d_LineRenderer Icon.png | Bin 0 -> 636 bytes .../processed/unityengine/d_Material Icon.png | Bin 0 -> 756 bytes .../unityengine/d_Material On Icon.png | Bin 0 -> 689 bytes .../small/processed/unityengine/d_Mesh Icon.png | Bin 0 -> 232 bytes .../unityengine/d_MeshCollider Icon.png | Bin 0 -> 227 bytes .../processed/unityengine/d_MeshFilter Icon.png | Bin 0 -> 232 bytes .../unityengine/d_MeshRenderer Icon.png | Bin 0 -> 819 bytes .../processed/unityengine/d_Motion Icon.png | Bin 0 -> 737 bytes .../unityengine/d_OcclusionArea Icon.png | Bin 0 -> 1033 bytes .../unityengine/d_OcclusionPortal Icon.png | Bin 0 -> 1232 bytes .../unityengine/d_ParticleSystem Icon.png | Bin 0 -> 407 bytes .../d_ParticleSystemForceField Icon.png | Bin 0 -> 1400 bytes .../unityengine/d_PhysicMaterial Icon.png | Bin 0 -> 882 bytes .../unityengine/d_PhysicMaterial On Icon.png | Bin 0 -> 760 bytes .../unityengine/d_PhysicsMaterial2D Icon.png | Bin 0 -> 542 bytes .../unityengine/d_PhysicsMaterial2D On Icon.png | Bin 0 -> 568 bytes .../unityengine/d_PlatformEffector2D Icon.png | Bin 0 -> 959 bytes .../unityengine/d_PointEffector2D Icon.png | Bin 0 -> 483 bytes .../unityengine/d_PolygonCollider2D Icon.png | Bin 0 -> 889 bytes .../unityengine/d_ProceduralMaterial Icon.png | Bin 0 -> 969 bytes .../processed/unityengine/d_Projector Icon.png | Bin 0 -> 766 bytes .../unityengine/d_RayTracingShader Icon.png | Bin 0 -> 1215 bytes .../unityengine/d_RectTransform Icon.png | Bin 0 -> 661 bytes .../unityengine/d_ReflectionProbe Icon.png | Bin 0 -> 827 bytes .../unityengine/d_RelativeJoint2D Icon.png | Bin 0 -> 602 bytes .../unityengine/d_RenderTexture Icon.png | Bin 0 -> 812 bytes .../unityengine/d_RenderTexture On Icon.png | Bin 0 -> 407 bytes .../processed/unityengine/d_Rigidbody Icon.png | Bin 0 -> 740 bytes .../unityengine/d_Rigidbody2D Icon.png | Bin 0 -> 740 bytes .../unityengine/d_ScriptableObject Icon.png | Bin 0 -> 1174 bytes .../unityengine/d_ScriptableObject On Icon.png | Bin 0 -> 833 bytes .../processed/unityengine/d_Shader Icon.png | Bin 0 -> 1712 bytes .../d_ShaderVariantCollection Icon.png | Bin 0 -> 1741 bytes .../unityengine/d_SkinnedMeshRenderer Icon.png | Bin 0 -> 1099 bytes .../processed/unityengine/d_Skybox Icon.png | Bin 0 -> 598 bytes .../unityengine/d_SliderJoint2D Icon.png | Bin 0 -> 400 bytes .../unityengine/d_SphereCollider Icon.png | Bin 0 -> 1052 bytes .../unityengine/d_SpringJoint Icon.png | Bin 0 -> 708 bytes .../unityengine/d_SpringJoint2D Icon.png | Bin 0 -> 708 bytes .../processed/unityengine/d_Sprite Icon.png | Bin 0 -> 372 bytes .../processed/unityengine/d_SpriteMask Icon.png | Bin 0 -> 378 bytes .../unityengine/d_SpriteRenderer Icon.png | Bin 0 -> 955 bytes .../unityengine/d_StreamingController Icon.png | Bin 0 -> 1070 bytes .../unityengine/d_SurfaceEffector2D Icon.png | Bin 0 -> 512 bytes .../unityengine/d_TargetJoint2D Icon.png | Bin 0 -> 1621 bytes .../processed/unityengine/d_Terrain Icon.png | Bin 0 -> 1110 bytes .../unityengine/d_TerrainCollider Icon.png | Bin 0 -> 956 bytes .../unityengine/d_TerrainData Icon.png | Bin 0 -> 1213 bytes .../processed/unityengine/d_TextAsset Icon.png | Bin 0 -> 321 bytes .../processed/unityengine/d_Texture Icon.png | Bin 0 -> 382 bytes .../processed/unityengine/d_Texture2D Icon.png | Bin 0 -> 336 bytes .../unityengine/d_TrailRenderer Icon.png | Bin 0 -> 1079 bytes .../processed/unityengine/d_Transform Icon.png | Bin 0 -> 918 bytes .../unityengine/d_WheelCollider Icon.png | Bin 0 -> 1138 bytes .../unityengine/d_WheelJoint2D Icon.png | Bin 0 -> 1303 bytes .../processed/unityengine/d_WindZone Icon.png | Bin 0 -> 561 bytes .../eventsystems/EventSystem Icon.png | Bin 0 -> 981 bytes .../eventsystems/EventTrigger Icon.png | Bin 0 -> 780 bytes .../eventsystems/HoloLensInputModule Icon.png | Bin 0 -> 1298 bytes .../eventsystems/Physics2DRaycaster Icon.png | Bin 0 -> 524 bytes .../eventsystems/PhysicsRaycaster Icon.png | Bin 0 -> 1065 bytes .../eventsystems/StandaloneInputModule Icon.png | Bin 0 -> 551 bytes .../eventsystems/TouchInputModule Icon.png | Bin 0 -> 991 bytes .../eventsystems/d_EventSystem Icon.png | Bin 0 -> 981 bytes .../eventsystems/d_EventTrigger Icon.png | Bin 0 -> 782 bytes .../eventsystems/d_HoloLensInputModule Icon.png | Bin 0 -> 1269 bytes .../eventsystems/d_Physics2DRaycaster Icon.png | Bin 0 -> 511 bytes .../eventsystems/d_PhysicsRaycaster Icon.png | Bin 0 -> 1056 bytes .../d_StandaloneInputModule Icon.png | Bin 0 -> 552 bytes .../eventsystems/d_TouchInputModule Icon.png | Bin 0 -> 985 bytes .../rendering/RayTracingShader Icon.png | Bin 0 -> 1215 bytes .../rendering/d_RaytracingShader Icon.png | Bin 0 -> 1215 bytes .../networking/NetworkAnimator Icon.png | Bin 0 -> 880 bytes .../networking/NetworkDiscovery Icon.png | Bin 0 -> 1511 bytes .../networking/NetworkIdentity Icon.png | Bin 0 -> 789 bytes .../networking/NetworkLobbyManager Icon.png | Bin 0 -> 724 bytes .../networking/NetworkLobbyPlayer Icon.png | Bin 0 -> 752 bytes .../networking/NetworkManager Icon.png | Bin 0 -> 1079 bytes .../networking/NetworkManagerHUD Icon.png | Bin 0 -> 602 bytes .../networking/NetworkMigrationManager Icon.png | Bin 0 -> 777 bytes .../networking/NetworkProximityChecker Icon.png | Bin 0 -> 761 bytes .../networking/NetworkStartPosition Icon.png | Bin 0 -> 1259 bytes .../networking/NetworkTransform Icon.png | Bin 0 -> 827 bytes .../networking/NetworkTransformChild Icon.png | Bin 0 -> 971 bytes .../NetworkTransformVisualizer Icon.png | Bin 0 -> 1205 bytes .../networking/d_NetworkAnimator Icon.png | Bin 0 -> 900 bytes .../networking/d_NetworkDiscovery Icon.png | Bin 0 -> 1479 bytes .../networking/d_NetworkIdentity Icon.png | Bin 0 -> 765 bytes .../networking/d_NetworkLobbyManager Icon.png | Bin 0 -> 679 bytes .../networking/d_NetworkLobbyPlayer Icon.png | Bin 0 -> 679 bytes .../networking/d_NetworkManager Icon.png | Bin 0 -> 1053 bytes .../networking/d_NetworkManagerHUD Icon.png | Bin 0 -> 602 bytes .../d_NetworkMigrationManager Icon.png | Bin 0 -> 770 bytes .../d_NetworkProximityChecker Icon.png | Bin 0 -> 780 bytes .../networking/d_NetworkStartPosition Icon.png | Bin 0 -> 1277 bytes .../networking/d_NetworkTransform Icon.png | Bin 0 -> 834 bytes .../networking/d_NetworkTransformChild Icon.png | Bin 0 -> 971 bytes .../d_NetworkTransformVisualizer Icon.png | Bin 0 -> 1175 bytes .../playables/PlayableDirector Icon.png | Bin 0 -> 606 bytes .../playables/d_PlayableDirector Icon.png | Bin 0 -> 615 bytes .../unityengine/rendering/SortingGroup Icon.png | Bin 0 -> 1389 bytes .../rendering/d_SortingGroup Icon.png | Bin 0 -> 1395 bytes .../spatialtracking/TrackedPoseDriver Icon.png | Bin 0 -> 1199 bytes .../unityengine/tilemaps/Tile Icon.png | Bin 0 -> 1004 bytes .../unityengine/tilemaps/Tilemap Icon.png | Bin 0 -> 480 bytes .../tilemaps/TilemapCollider2D Icon.png | Bin 0 -> 476 bytes .../tilemaps/TilemapRenderer Icon.png | Bin 0 -> 977 bytes .../unityengine/tilemaps/d_Tile Icon.png | Bin 0 -> 1012 bytes .../unityengine/tilemaps/d_Tilemap Icon.png | Bin 0 -> 480 bytes .../tilemaps/d_TilemapCollider2D Icon.png | Bin 0 -> 480 bytes .../tilemaps/d_TilemapRenderer Icon.png | Bin 0 -> 995 bytes .../unityengine/timeline/SignalAsset Icon.png | Bin 0 -> 223 bytes .../unityengine/timeline/SignalEmitter Icon.png | Bin 0 -> 594 bytes .../timeline/SignalReceiver Icon.png | Bin 0 -> 845 bytes .../unityengine/timeline/TimelineAsset Icon.png | Bin 0 -> 443 bytes .../timeline/TimelineAsset On Icon.png | Bin 0 -> 422 bytes .../unityengine/timeline/d_SignalAsset Icon.png | Bin 0 -> 227 bytes .../timeline/d_SignalEmitter Icon.png | Bin 0 -> 584 bytes .../timeline/d_SignalReceiver Icon.png | Bin 0 -> 847 bytes .../timeline/d_TimelineAsset Icon.png | Bin 0 -> 442 bytes .../timeline/d_TimelineAsset On Icon.png | Bin 0 -> 422 bytes .../unityengine/u2d/SpriteAtlas Icon.png | Bin 0 -> 474 bytes .../unityengine/u2d/SpriteAtlas On Icon.png | Bin 0 -> 537 bytes .../u2d/SpriteShapeRenderer Icon.png | Bin 0 -> 1300 bytes .../unityengine/u2d/d_SpriteAtlas Icon.png | Bin 0 -> 469 bytes .../unityengine/u2d/d_SpriteAtlas On Icon.png | Bin 0 -> 537 bytes .../u2d/d_SpriteShapeRenderer Icon.png | Bin 0 -> 1315 bytes .../unityengine/ui/AspectRatioFitter Icon.png | Bin 0 -> 247 bytes .../processed/unityengine/ui/Button Icon.png | Bin 0 -> 615 bytes .../unityengine/ui/CanvasScaler Icon.png | Bin 0 -> 321 bytes .../unityengine/ui/ContentSizeFitter Icon.png | Bin 0 -> 339 bytes .../processed/unityengine/ui/Dropdown Icon.png | Bin 0 -> 279 bytes .../unityengine/ui/FreeformLayoutGroup Icon.png | Bin 0 -> 222 bytes .../unityengine/ui/GraphicRaycaster Icon.png | Bin 0 -> 473 bytes .../unityengine/ui/GridLayoutGroup Icon.png | Bin 0 -> 278 bytes .../ui/HorizontalLayoutGroup Icon.png | Bin 0 -> 267 bytes .../processed/unityengine/ui/Image Icon.png | Bin 0 -> 406 bytes .../unityengine/ui/InputField Icon.png | Bin 0 -> 335 bytes .../unityengine/ui/LayoutElement Icon.png | Bin 0 -> 222 bytes .../processed/unityengine/ui/Mask Icon.png | Bin 0 -> 669 bytes .../processed/unityengine/ui/Outline Icon.png | Bin 0 -> 194 bytes .../unityengine/ui/PositionAsUV1 Icon.png | Bin 0 -> 372 bytes .../processed/unityengine/ui/RawImage Icon.png | Bin 0 -> 424 bytes .../unityengine/ui/RectMask2D Icon.png | Bin 0 -> 225 bytes .../unityengine/ui/ScrollRect Icon.png | Bin 0 -> 288 bytes .../processed/unityengine/ui/Scrollbar Icon.png | Bin 0 -> 328 bytes .../unityengine/ui/Selectable Icon.png | Bin 0 -> 343 bytes .../processed/unityengine/ui/Shadow Icon.png | Bin 0 -> 568 bytes .../processed/unityengine/ui/Slider Icon.png | Bin 0 -> 336 bytes .../processed/unityengine/ui/Text Icon.png | Bin 0 -> 274 bytes .../processed/unityengine/ui/Toggle Icon.png | Bin 0 -> 339 bytes .../unityengine/ui/ToggleGroup Icon.png | Bin 0 -> 363 bytes .../unityengine/ui/VerticalLayoutGroup Icon.png | Bin 0 -> 205 bytes .../unityengine/ui/d_AspectRatioFitter Icon.png | Bin 0 -> 260 bytes .../processed/unityengine/ui/d_Button Icon.png | Bin 0 -> 551 bytes .../unityengine/ui/d_CanvasScaler Icon.png | Bin 0 -> 191 bytes .../unityengine/ui/d_ContentSizeFitter Icon.png | Bin 0 -> 300 bytes .../unityengine/ui/d_Dropdown Icon.png | Bin 0 -> 305 bytes .../ui/d_FreeformLayoutGroup Icon.png | Bin 0 -> 178 bytes .../unityengine/ui/d_GraphicRaycaster Icon.png | Bin 0 -> 469 bytes .../unityengine/ui/d_GridLayoutGroup Icon.png | Bin 0 -> 177 bytes .../ui/d_HorizontalLayoutGroup Icon.png | Bin 0 -> 161 bytes .../processed/unityengine/ui/d_Image Icon.png | Bin 0 -> 393 bytes .../unityengine/ui/d_InputField Icon.png | Bin 0 -> 339 bytes .../unityengine/ui/d_LayoutElement Icon.png | Bin 0 -> 149 bytes .../processed/unityengine/ui/d_Mask Icon.png | Bin 0 -> 666 bytes .../processed/unityengine/ui/d_Outline Icon.png | Bin 0 -> 176 bytes .../ui/d_PhysicalResolution Icon.png | Bin 0 -> 212 bytes .../unityengine/ui/d_PositionAsUV1 Icon.png | Bin 0 -> 373 bytes .../unityengine/ui/d_RawImage Icon.png | Bin 0 -> 433 bytes .../unityengine/ui/d_RectMask2D Icon.png | Bin 0 -> 242 bytes .../unityengine/ui/d_ScrollRect Icon.png | Bin 0 -> 290 bytes .../unityengine/ui/d_ScrollViewArea Icon.png | Bin 0 -> 185 bytes .../unityengine/ui/d_Scrollbar Icon.png | Bin 0 -> 320 bytes .../unityengine/ui/d_Selectable Icon.png | Bin 0 -> 356 bytes .../unityengine/ui/d_SelectionList Icon.png | Bin 0 -> 255 bytes .../unityengine/ui/d_SelectionListItem Icon.png | Bin 0 -> 218 bytes .../ui/d_SelectionListTemplate Icon.png | Bin 0 -> 181 bytes .../processed/unityengine/ui/d_Shadow Icon.png | Bin 0 -> 638 bytes .../processed/unityengine/ui/d_Slider Icon.png | Bin 0 -> 341 bytes .../processed/unityengine/ui/d_Text Icon.png | Bin 0 -> 278 bytes .../processed/unityengine/ui/d_Toggle Icon.png | Bin 0 -> 344 bytes .../unityengine/ui/d_ToggleGroup Icon.png | Bin 0 -> 370 bytes .../ui/d_VerticalLayoutGroup Icon.png | Bin 0 -> 215 bytes .../unityengine/uielements/StyleSheet Icon.png | Bin 0 -> 856 bytes .../uielements/VisualTreeAsset Icon.png | Bin 0 -> 1216 bytes .../uielements/d_StyleSheet Icon.png | Bin 0 -> 705 bytes .../uielements/d_VisualTreeAsset Icon.png | Bin 0 -> 1124 bytes .../unityengine/vfx/VisualEffect Icon.png | Bin 0 -> 1183 bytes .../unityengine/vfx/VisualEffectAsset Icon.png | Bin 0 -> 901 bytes .../unityengine/vfx/d_VisualEffect Icon.png | Bin 0 -> 1184 bytes .../vfx/d_VisualEffectAsset Icon.png | Bin 0 -> 875 bytes .../unityengine/video/VideoClip Icon.png | Bin 0 -> 1148 bytes .../unityengine/video/VideoPlayer Icon.png | Bin 0 -> 567 bytes .../unityengine/video/d_VideoPlayer Icon.png | Bin 0 -> 559 bytes .../xr/wsa/SpatialMappingCollider Icon.png | Bin 0 -> 848 bytes .../xr/wsa/SpatialMappingRenderer Icon.png | Bin 0 -> 759 bytes .../unityengine/xr/wsa/WorldAnchor Icon.png | Bin 0 -> 700 bytes .../xr/wsa/d_SpatialMappingCollider Icon.png | Bin 0 -> 801 bytes .../icons/small/redGroove.png | Bin 0 -> 189 bytes .../icons/small/rightBracket.png | Bin 0 -> 585 bytes .../small/scenepicking_notpickable-mixed.png | Bin 0 -> 300 bytes .../small/scenepicking_notpickable-mixed@2x.png | Bin 0 -> 621 bytes .../scenepicking_notpickable-mixed_hover.png | Bin 0 -> 309 bytes .../scenepicking_notpickable-mixed_hover@2x.png | Bin 0 -> 641 bytes .../icons/small/scenepicking_notpickable.png | Bin 0 -> 280 bytes .../icons/small/scenepicking_notpickable@2x.png | Bin 0 -> 559 bytes .../small/scenepicking_notpickable_hover.png | Bin 0 -> 298 bytes .../small/scenepicking_notpickable_hover@2x.png | Bin 0 -> 593 bytes .../icons/small/scenepicking_pickable-mixed.png | Bin 0 -> 264 bytes .../small/scenepicking_pickable-mixed@2x.png | Bin 0 -> 469 bytes .../small/scenepicking_pickable-mixed_hover.png | Bin 0 -> 264 bytes .../scenepicking_pickable-mixed_hover@2x.png | Bin 0 -> 472 bytes .../icons/small/scenepicking_pickable.png | Bin 0 -> 240 bytes .../icons/small/scenepicking_pickable@2x.png | Bin 0 -> 410 bytes .../icons/small/scenepicking_pickable_hover.png | Bin 0 -> 233 bytes .../small/scenepicking_pickable_hover@2x.png | Bin 0 -> 418 bytes .../icons/small/scenevis_hidden-mixed.png | Bin 0 -> 286 bytes .../icons/small/scenevis_hidden-mixed@2x.png | Bin 0 -> 593 bytes .../icons/small/scenevis_hidden-mixed_hover.png | Bin 0 -> 311 bytes .../small/scenevis_hidden-mixed_hover@2x.png | Bin 0 -> 622 bytes .../icons/small/scenevis_hidden.png | Bin 0 -> 277 bytes .../icons/small/scenevis_hidden@2x.png | Bin 0 -> 517 bytes .../icons/small/scenevis_hidden_hover.png | Bin 0 -> 290 bytes .../icons/small/scenevis_hidden_hover@2x.png | Bin 0 -> 521 bytes .../icons/small/scenevis_scene_hover.png | Bin 0 -> 293 bytes .../icons/small/scenevis_scene_hover@2x.png | Bin 0 -> 502 bytes .../icons/small/scenevis_visible-mixed.png | Bin 0 -> 263 bytes .../icons/small/scenevis_visible-mixed@2x.png | Bin 0 -> 515 bytes .../small/scenevis_visible-mixed_hover.png | Bin 0 -> 284 bytes .../small/scenevis_visible-mixed_hover@2x.png | Bin 0 -> 535 bytes .../icons/small/scenevis_visible.png | Bin 0 -> 233 bytes .../icons/small/scenevis_visible@2x.png | Bin 0 -> 472 bytes .../icons/small/scenevis_visible_hover.png | Bin 0 -> 245 bytes .../icons/small/scenevis_visible_hover@2x.png | Bin 0 -> 506 bytes .../icons/small/shortcutmanager/alertDialog.png | Bin 0 -> 1524 bytes .../small/shortcutmanager/alertDialog@2x.png | Bin 0 -> 1478 bytes .../small/shortcutmanager/conflict-icon.png | Bin 0 -> 202 bytes .../small/shortcutmanager/conflict-icon@2x.png | Bin 0 -> 298 bytes .../icons/small/snap/GridAxisX.png | Bin 0 -> 294 bytes .../icons/small/snap/GridAxisX@2x.png | Bin 0 -> 539 bytes .../icons/small/snap/GridAxisY.png | Bin 0 -> 270 bytes .../icons/small/snap/GridAxisY@2x.png | Bin 0 -> 439 bytes .../icons/small/snap/GridAxisZ.png | Bin 0 -> 258 bytes .../icons/small/snap/GridAxisZ@2x.png | Bin 0 -> 417 bytes .../icons/small/snap/SceneViewSnap-Off.png | Bin 0 -> 180 bytes .../icons/small/snap/SceneViewSnap-Off@2x.png | Bin 0 -> 276 bytes .../icons/small/snap/SceneViewSnap-On.png | Bin 0 -> 180 bytes .../icons/small/snap/SceneViewSnap-On@2x.png | Bin 0 -> 276 bytes .../icons/small/snap/d_GridAxisX.png | Bin 0 -> 257 bytes .../icons/small/snap/d_GridAxisX@2x.png | Bin 0 -> 545 bytes .../icons/small/snap/d_GridAxisY.png | Bin 0 -> 254 bytes .../icons/small/snap/d_GridAxisY@2x.png | Bin 0 -> 441 bytes .../icons/small/snap/d_GridAxisZ.png | Bin 0 -> 263 bytes .../icons/small/snap/d_GridAxisZ@2x.png | Bin 0 -> 418 bytes .../icons/small/snap/d_SceneViewSnap-Off.png | Bin 0 -> 188 bytes .../icons/small/snap/d_SceneViewSnap-Off@2x.png | Bin 0 -> 279 bytes .../icons/small/snap/d_SceneViewSnap-On.png | Bin 0 -> 184 bytes .../icons/small/snap/d_SceneViewSnap-On@2x.png | Bin 0 -> 276 bytes .../icons/small/sv_icon_dot0_sml.png | Bin 0 -> 186 bytes .../icons/small/sv_icon_dot10_sml.png | Bin 0 -> 227 bytes .../icons/small/sv_icon_dot11_sml.png | Bin 0 -> 231 bytes .../icons/small/sv_icon_dot12_sml.png | Bin 0 -> 238 bytes .../icons/small/sv_icon_dot13_sml.png | Bin 0 -> 230 bytes .../icons/small/sv_icon_dot14_sml.png | Bin 0 -> 227 bytes .../icons/small/sv_icon_dot15_sml.png | Bin 0 -> 239 bytes .../icons/small/sv_icon_dot1_sml.png | Bin 0 -> 175 bytes .../icons/small/sv_icon_dot2_sml.png | Bin 0 -> 170 bytes .../icons/small/sv_icon_dot3_sml.png | Bin 0 -> 174 bytes .../icons/small/sv_icon_dot4_sml.png | Bin 0 -> 175 bytes .../icons/small/sv_icon_dot5_sml.png | Bin 0 -> 175 bytes .../icons/small/sv_icon_dot6_sml.png | Bin 0 -> 174 bytes .../icons/small/sv_icon_dot7_sml.png | Bin 0 -> 180 bytes .../icons/small/sv_icon_dot8_sml.png | Bin 0 -> 203 bytes .../icons/small/sv_icon_dot9_sml.png | Bin 0 -> 233 bytes .../icons/small/sv_icon_name0.png | Bin 0 -> 324 bytes .../icons/small/sv_icon_name1.png | Bin 0 -> 592 bytes .../icons/small/sv_icon_name2.png | Bin 0 -> 593 bytes .../icons/small/sv_icon_name3.png | Bin 0 -> 584 bytes .../icons/small/sv_icon_name4.png | Bin 0 -> 575 bytes .../icons/small/sv_icon_name5.png | Bin 0 -> 575 bytes .../icons/small/sv_icon_name6.png | Bin 0 -> 585 bytes .../icons/small/sv_icon_name7.png | Bin 0 -> 584 bytes .../icons/small/sv_icon_none.png | Bin 0 -> 196 bytes .../icons/small/sv_label_0.png | Bin 0 -> 385 bytes .../icons/small/sv_label_1.png | Bin 0 -> 708 bytes .../icons/small/sv_label_2.png | Bin 0 -> 719 bytes .../icons/small/sv_label_3.png | Bin 0 -> 706 bytes .../icons/small/sv_label_4.png | Bin 0 -> 717 bytes .../icons/small/sv_label_5.png | Bin 0 -> 708 bytes .../icons/small/sv_label_6.png | Bin 0 -> 690 bytes .../icons/small/sv_label_7.png | Bin 0 -> 718 bytes .../unity-editor-icons/icons/small/tab_next.png | Bin 0 -> 119 bytes .../icons/small/tab_next@2x.png | Bin 0 -> 205 bytes .../unity-editor-icons/icons/small/tab_prev.png | Bin 0 -> 142 bytes .../icons/small/tab_prev@2x.png | Bin 0 -> 202 bytes 参考/unity-editor-icons/icons/small/tranp.png | Bin 0 -> 83 bytes .../icons/small/tree_icon.png | Bin 0 -> 1053 bytes .../icons/small/tree_icon_branch.png | Bin 0 -> 1066 bytes .../icons/small/tree_icon_branch_frond.png | Bin 0 -> 1424 bytes .../icons/small/tree_icon_frond.png | Bin 0 -> 2052 bytes .../icons/small/tree_icon_leaf.png | Bin 0 -> 1746 bytes .../icons/small/vcs_change.png | Bin 0 -> 341 bytes .../icons/small/vcs_document.png | Bin 0 -> 188 bytes .../icons/small/vcs_incoming.png | Bin 0 -> 374 bytes .../small/versioncontrol/P4_AddedLocal.png | Bin 0 -> 180 bytes .../small/versioncontrol/P4_AddedLocal@2x.png | Bin 0 -> 237 bytes .../small/versioncontrol/P4_AddedRemote.png | Bin 0 -> 180 bytes .../small/versioncontrol/P4_AddedRemote@2x.png | Bin 0 -> 237 bytes .../versioncontrol/P4_BlueLeftParenthesis.png | Bin 0 -> 430 bytes .../P4_BlueLeftParenthesis@2x.png | Bin 0 -> 865 bytes .../versioncontrol/P4_BlueRightParenthesis.png | Bin 0 -> 418 bytes .../P4_BlueRightParenthesis@2x.png | Bin 0 -> 835 bytes .../small/versioncontrol/P4_CheckOutLocal.png | Bin 0 -> 431 bytes .../versioncontrol/P4_CheckOutLocal@2x.png | Bin 0 -> 821 bytes .../small/versioncontrol/P4_CheckOutRemote.png | Bin 0 -> 410 bytes .../versioncontrol/P4_CheckOutRemote@2x.png | Bin 0 -> 899 bytes .../small/versioncontrol/P4_Conflicted.png | Bin 0 -> 447 bytes .../small/versioncontrol/P4_Conflicted@2x.png | Bin 0 -> 908 bytes .../small/versioncontrol/P4_DeletedLocal.png | Bin 0 -> 263 bytes .../small/versioncontrol/P4_DeletedLocal@2x.png | Bin 0 -> 376 bytes .../small/versioncontrol/P4_DeletedRemote.png | Bin 0 -> 258 bytes .../versioncontrol/P4_DeletedRemote@2x.png | Bin 0 -> 395 bytes .../icons/small/versioncontrol/P4_Local.png | Bin 0 -> 187 bytes .../icons/small/versioncontrol/P4_Local@2x.png | Bin 0 -> 303 bytes .../small/versioncontrol/P4_LockedLocal.png | Bin 0 -> 326 bytes .../small/versioncontrol/P4_LockedLocal@2x.png | Bin 0 -> 547 bytes .../small/versioncontrol/P4_LockedRemote.png | Bin 0 -> 337 bytes .../small/versioncontrol/P4_LockedRemote@2x.png | Bin 0 -> 589 bytes .../icons/small/versioncontrol/P4_OutOfSync.png | Bin 0 -> 343 bytes .../small/versioncontrol/P4_OutOfSync@2x.png | Bin 0 -> 658 bytes .../versioncontrol/P4_RedLeftParenthesis.png | Bin 0 -> 430 bytes .../versioncontrol/P4_RedLeftParenthesis@2x.png | Bin 0 -> 822 bytes .../versioncontrol/P4_RedRightParenthesis.png | Bin 0 -> 415 bytes .../P4_RedRightParenthesis@2x.png | Bin 0 -> 822 bytes .../icons/small/versioncontrol/P4_Updating.png | Bin 0 -> 309 bytes .../small/versioncontrol/P4_Updating@2x.png | Bin 0 -> 677 bytes .../icons/small/winbtn_graph.png | Bin 0 -> 573 bytes .../icons/small/winbtn_graph_close_h.png | Bin 0 -> 553 bytes .../icons/small/winbtn_graph_max_h.png | Bin 0 -> 552 bytes .../icons/small/winbtn_graph_min_h.png | Bin 0 -> 568 bytes .../icons/small/winbtn_mac_close.png | Bin 0 -> 210 bytes .../icons/small/winbtn_mac_close@2x.png | Bin 0 -> 345 bytes .../icons/small/winbtn_mac_close_a.png | Bin 0 -> 258 bytes .../icons/small/winbtn_mac_close_a@2x.png | Bin 0 -> 485 bytes .../icons/small/winbtn_mac_close_h.png | Bin 0 -> 259 bytes .../icons/small/winbtn_mac_close_h@2x.png | Bin 0 -> 506 bytes .../icons/small/winbtn_mac_inact.png | Bin 0 -> 255 bytes .../icons/small/winbtn_mac_inact@2x.png | Bin 0 -> 493 bytes .../icons/small/winbtn_mac_max.png | Bin 0 -> 206 bytes .../icons/small/winbtn_mac_max@2x.png | Bin 0 -> 352 bytes .../icons/small/winbtn_mac_max_a.png | Bin 0 -> 260 bytes .../icons/small/winbtn_mac_max_a@2x.png | Bin 0 -> 413 bytes .../icons/small/winbtn_mac_max_h.png | Bin 0 -> 266 bytes .../icons/small/winbtn_mac_max_h@2x.png | Bin 0 -> 423 bytes .../icons/small/winbtn_mac_min.png | Bin 0 -> 212 bytes .../icons/small/winbtn_mac_min@2x.png | Bin 0 -> 348 bytes .../icons/small/winbtn_mac_min_a.png | Bin 0 -> 241 bytes .../icons/small/winbtn_mac_min_a@2x.png | Bin 0 -> 373 bytes .../icons/small/winbtn_mac_min_h.png | Bin 0 -> 233 bytes .../icons/small/winbtn_mac_min_h@2x.png | Bin 0 -> 377 bytes .../icons/small/winbtn_win_close.png | Bin 0 -> 170 bytes .../icons/small/winbtn_win_close@2x.png | Bin 0 -> 267 bytes .../icons/small/winbtn_win_close_a.png | Bin 0 -> 193 bytes .../icons/small/winbtn_win_close_a@2x.png | Bin 0 -> 252 bytes .../icons/small/winbtn_win_close_h.png | Bin 0 -> 193 bytes .../icons/small/winbtn_win_close_h@2x.png | Bin 0 -> 252 bytes .../icons/small/winbtn_win_max.png | Bin 0 -> 114 bytes .../icons/small/winbtn_win_max@2x.png | Bin 0 -> 158 bytes .../icons/small/winbtn_win_max_a.png | Bin 0 -> 112 bytes .../icons/small/winbtn_win_max_a@2x.png | Bin 0 -> 157 bytes .../icons/small/winbtn_win_max_h.png | Bin 0 -> 112 bytes .../icons/small/winbtn_win_max_h@2x.png | Bin 0 -> 157 bytes .../icons/small/winbtn_win_min.png | Bin 0 -> 110 bytes .../icons/small/winbtn_win_min_a.png | Bin 0 -> 203 bytes .../icons/small/winbtn_win_min_h.png | Bin 0 -> 216 bytes .../icons/small/winbtn_win_rest.png | Bin 0 -> 171 bytes .../icons/small/winbtn_win_rest_a.png | Bin 0 -> 266 bytes .../icons/small/winbtn_win_rest_h.png | Bin 0 -> 254 bytes .../icons/small/winbtn_win_restore.png | Bin 0 -> 140 bytes .../icons/small/winbtn_win_restore@2x.png | Bin 0 -> 194 bytes .../icons/small/winbtn_win_restore_a.png | Bin 0 -> 140 bytes .../icons/small/winbtn_win_restore_a@2x.png | Bin 0 -> 194 bytes .../icons/small/winbtn_win_restore_h.png | Bin 0 -> 140 bytes .../icons/small/winbtn_win_restore_h@2x.png | Bin 0 -> 194 bytes 参考/unity-editor-icons/resize.bat | 5 + 参考/unity-icons/AreaLight Gizmo.png | Bin 0 -> 980 bytes 参考/unity-icons/AreaLight Icon.png | Bin 0 -> 465 bytes 参考/unity-icons/Assembly Icon.png | Bin 0 -> 396 bytes 参考/unity-icons/AssetStore Icon.png | Bin 0 -> 359 bytes 参考/unity-icons/AudioMixerView Icon.png | Bin 0 -> 319 bytes 参考/unity-icons/AudioSource Gizmo.png | Bin 0 -> 344 bytes 参考/unity-icons/CGProgram Icon.png | Bin 0 -> 522 bytes 参考/unity-icons/Camera Gizmo.png | Bin 0 -> 672 bytes 参考/unity-icons/ChorusFilter Icon.png | Bin 0 -> 1737 bytes 参考/unity-icons/CollabChanges Icon.png | Bin 0 -> 637 bytes .../unity-icons/CollabChangesConflict Icon.png | Bin 0 -> 624 bytes .../unity-icons/CollabChangesDeleted Icon.png | Bin 0 -> 442 bytes 参考/unity-icons/CollabConflict Icon.png | Bin 0 -> 411 bytes 参考/unity-icons/CollabCreate Icon.png | Bin 0 -> 379 bytes 参考/unity-icons/CollabDeleted Icon.png | Bin 0 -> 346 bytes 参考/unity-icons/CollabEdit Icon.png | Bin 0 -> 695 bytes 参考/unity-icons/CollabExclude Icon.png | Bin 0 -> 799 bytes 参考/unity-icons/CollabMoved Icon.png | Bin 0 -> 817 bytes 参考/unity-icons/DefaultSlate Icon.png | Bin 0 -> 1311 bytes 参考/unity-icons/DirectionalLight Gizmo.png | Bin 0 -> 890 bytes 参考/unity-icons/DirectionalLight Icon.png | Bin 0 -> 530 bytes 参考/unity-icons/DiscLight Icon.png | Bin 0 -> 1174 bytes 参考/unity-icons/EchoFilter Icon.png | Bin 0 -> 1592 bytes 参考/unity-icons/Favorite Icon.png | Bin 0 -> 608 bytes 参考/unity-icons/Favorite On Icon.png | Bin 0 -> 511 bytes 参考/unity-icons/Folder Icon.png | Bin 0 -> 270 bytes 参考/unity-icons/Folder On Icon.png | Bin 0 -> 261 bytes 参考/unity-icons/FolderEmpty Icon.png | Bin 0 -> 360 bytes 参考/unity-icons/FolderEmpty On Icon.png | Bin 0 -> 209 bytes 参考/unity-icons/FolderFavorite Icon.png | Bin 0 -> 892 bytes 参考/unity-icons/FolderFavorite On Icon.png | Bin 0 -> 598 bytes 参考/unity-icons/FolderOpened Icon.png | Bin 0 -> 339 bytes 参考/unity-icons/FolderOpened On Icon.png | Bin 0 -> 322 bytes 参考/unity-icons/GameManager Icon.png | Bin 0 -> 2237 bytes 参考/unity-icons/GridBrush Icon.png | Bin 0 -> 2049 bytes 参考/unity-icons/HighPassFilter Icon.png | Bin 0 -> 1302 bytes .../unity-icons/HorizontalLayoutGroup Icon.png | Bin 0 -> 263 bytes 参考/unity-icons/Js Script Icon.png | Bin 0 -> 1321 bytes 参考/unity-icons/LensFlare Gizmo.png | Bin 0 -> 572 bytes 参考/unity-icons/LightProbeGroup Gizmo.png | Bin 0 -> 993 bytes .../unity-icons/LightProbeProxyVolume Gizmo.png | Bin 0 -> 1219 bytes .../LightingDataAssetParent Icon.png | Bin 0 -> 897 bytes 参考/unity-icons/LowPassFilter Icon.png | Bin 0 -> 1193 bytes 参考/unity-icons/Main Light Gizmo.png | Bin 0 -> 1166 bytes 参考/unity-icons/MetaFile Icon.png | Bin 0 -> 1532 bytes 参考/unity-icons/Microphone Icon.png | Bin 0 -> 621 bytes 参考/unity-icons/MuscleClip Icon.png | Bin 0 -> 1302 bytes 参考/unity-icons/ParticleSystem Gizmo.png | Bin 0 -> 692 bytes .../ParticleSystemForceField Gizmo.png | Bin 0 -> 1666 bytes 参考/unity-icons/PointLight Gizmo.png | Bin 0 -> 875 bytes 参考/unity-icons/Prefab Icon.png | Bin 0 -> 762 bytes 参考/unity-icons/Prefab On Icon.png | Bin 0 -> 636 bytes 参考/unity-icons/PrefabModel Icon.png | Bin 0 -> 1177 bytes 参考/unity-icons/PrefabModel On Icon.png | Bin 0 -> 752 bytes 参考/unity-icons/PrefabOverlayAdded Icon.png | Bin 0 -> 420 bytes .../unity-icons/PrefabOverlayModified Icon.png | Bin 0 -> 379 bytes .../unity-icons/PrefabOverlayRemoved Icon.png | Bin 0 -> 342 bytes 参考/unity-icons/PrefabVariant Icon.png | Bin 0 -> 1242 bytes 参考/unity-icons/PrefabVariant On Icon.png | Bin 0 -> 815 bytes 参考/unity-icons/Projector Gizmo.png | Bin 0 -> 653 bytes 参考/unity-icons/RaycastCollider Icon.png | Bin 0 -> 701 bytes 参考/unity-icons/ReflectionProbe Gizmo.png | Bin 0 -> 835 bytes 参考/unity-icons/ReverbFilter Icon.png | Bin 0 -> 1930 bytes 参考/unity-icons/SceneSet Icon.png | Bin 0 -> 1674 bytes 参考/unity-icons/Search Icon.png | Bin 0 -> 540 bytes 参考/unity-icons/Search On Icon.png | Bin 0 -> 450 bytes .../unity-icons/SoftlockProjectBrowser Icon.png | Bin 0 -> 1016 bytes 参考/unity-icons/SpeedTreeModel Icon.png | Bin 0 -> 1390 bytes 参考/unity-icons/SpotLight Gizmo.png | Bin 0 -> 519 bytes 参考/unity-icons/Spotlight Icon.png | Bin 0 -> 635 bytes 参考/unity-icons/SpriteCollider Icon.png | Bin 0 -> 2063 bytes 参考/unity-icons/UssScript Icon.png | Bin 0 -> 1063 bytes 参考/unity-icons/UxmlScript Icon.png | Bin 0 -> 1469 bytes 参考/unity-icons/VerticalLayoutGroup Icon.png | Bin 0 -> 210 bytes 参考/unity-icons/VideoEffect Icon.png | Bin 0 -> 1034 bytes 参考/unity-icons/VisualEffect Gizmo.png | Bin 0 -> 613 bytes 参考/unity-icons/VisualEffectAsset Icon.png | Bin 0 -> 1009 bytes 参考/unity-icons/WindZone Gizmo.png | Bin 0 -> 1119 bytes 参考/unity-icons/boo Script Icon.png | Bin 0 -> 706 bytes 参考/unity-icons/cs Script Icon.png | Bin 0 -> 1318 bytes 参考/unity-icons/d_AreaLight Icon.png | Bin 0 -> 465 bytes 参考/unity-icons/d_Assembly Icon.png | Bin 0 -> 391 bytes 参考/unity-icons/d_AssetStore Icon.png | Bin 0 -> 358 bytes 参考/unity-icons/d_AudioMixerView Icon.png | Bin 0 -> 319 bytes 参考/unity-icons/d_CGProgram Icon.png | Bin 0 -> 426 bytes 参考/unity-icons/d_CollabChanges Icon.png | Bin 0 -> 680 bytes .../d_CollabChangesConflict Icon.png | Bin 0 -> 659 bytes .../unity-icons/d_CollabChangesDeleted Icon.png | Bin 0 -> 449 bytes 参考/unity-icons/d_CollabConflict Icon.png | Bin 0 -> 444 bytes 参考/unity-icons/d_CollabCreate Icon.png | Bin 0 -> 419 bytes 参考/unity-icons/d_CollabDeleted Icon.png | Bin 0 -> 357 bytes 参考/unity-icons/d_CollabEdit Icon.png | Bin 0 -> 735 bytes 参考/unity-icons/d_CollabExclude Icon.png | Bin 0 -> 799 bytes 参考/unity-icons/d_CollabMoved Icon.png | Bin 0 -> 856 bytes 参考/unity-icons/d_DirectionalLight Icon.png | Bin 0 -> 544 bytes 参考/unity-icons/d_Favorite Icon.png | Bin 0 -> 612 bytes 参考/unity-icons/d_Favorite On Icon.png | Bin 0 -> 511 bytes 参考/unity-icons/d_Folder Icon.png | Bin 0 -> 270 bytes 参考/unity-icons/d_FolderEmpty Icon.png | Bin 0 -> 353 bytes 参考/unity-icons/d_FolderEmpty On Icon.png | Bin 0 -> 209 bytes 参考/unity-icons/d_FolderFavorite Icon.png | Bin 0 -> 884 bytes 参考/unity-icons/d_FolderFavorite On Icon.png | Bin 0 -> 598 bytes 参考/unity-icons/d_FolderOpened Icon.png | Bin 0 -> 350 bytes 参考/unity-icons/d_GridLayoutGroup Icon.png | Bin 0 -> 172 bytes .../d_HorizontalLayoutGroup Icon.png | Bin 0 -> 232 bytes 参考/unity-icons/d_Js Script Icon.png | Bin 0 -> 1237 bytes .../d_LightingDataAssetParent Icon.png | Bin 0 -> 856 bytes 参考/unity-icons/d_Microphone Icon.png | Bin 0 -> 621 bytes 参考/unity-icons/d_Prefab Icon.png | Bin 0 -> 717 bytes 参考/unity-icons/d_Prefab On Icon.png | Bin 0 -> 636 bytes 参考/unity-icons/d_PrefabModel Icon.png | Bin 0 -> 1166 bytes 参考/unity-icons/d_PrefabModel On Icon.png | Bin 0 -> 752 bytes 参考/unity-icons/d_PrefabVariant Icon.png | Bin 0 -> 1207 bytes 参考/unity-icons/d_PrefabVariant On Icon.png | Bin 0 -> 815 bytes 参考/unity-icons/d_RaycastCollider Icon.png | Bin 0 -> 708 bytes 参考/unity-icons/d_Search Icon.png | Bin 0 -> 507 bytes 参考/unity-icons/d_Spotlight Icon.png | Bin 0 -> 616 bytes .../unity-icons/d_VerticalLayoutGroup Icon.png | Bin 0 -> 215 bytes 参考/unity-icons/d_boo Script Icon.png | Bin 0 -> 562 bytes 参考/unity-icons/d_cs Script Icon.png | Bin 0 -> 1296 bytes 参考/unity-icons/dll Script Icon.png | Bin 0 -> 1378 bytes 参考/unity-icons/sv_icon_dot0_pix16_gizmo.png | Bin 0 -> 744 bytes .../unity-icons/sv_icon_dot10_pix16_gizmo.png | Bin 0 -> 1032 bytes .../unity-icons/sv_icon_dot11_pix16_gizmo.png | Bin 0 -> 1071 bytes .../unity-icons/sv_icon_dot12_pix16_gizmo.png | Bin 0 -> 1195 bytes .../unity-icons/sv_icon_dot13_pix16_gizmo.png | Bin 0 -> 1210 bytes .../unity-icons/sv_icon_dot14_pix16_gizmo.png | Bin 0 -> 1441 bytes .../unity-icons/sv_icon_dot15_pix16_gizmo.png | Bin 0 -> 1388 bytes 参考/unity-icons/sv_icon_dot1_pix16_gizmo.png | Bin 0 -> 1385 bytes 参考/unity-icons/sv_icon_dot2_pix16_gizmo.png | Bin 0 -> 1384 bytes 参考/unity-icons/sv_icon_dot3_pix16_gizmo.png | Bin 0 -> 1304 bytes 参考/unity-icons/sv_icon_dot4_pix16_gizmo.png | Bin 0 -> 1388 bytes 参考/unity-icons/sv_icon_dot5_pix16_gizmo.png | Bin 0 -> 1354 bytes 参考/unity-icons/sv_icon_dot6_pix16_gizmo.png | Bin 0 -> 1242 bytes 参考/unity-icons/sv_icon_dot7_pix16_gizmo.png | Bin 0 -> 1277 bytes 参考/unity-icons/sv_icon_dot8_pix16_gizmo.png | Bin 0 -> 474 bytes 参考/unity-icons/sv_icon_dot9_pix16_gizmo.png | Bin 0 -> 1001 bytes .../unityeditor/AnimationWindowEvent Icon.png | Bin 0 -> 992 bytes .../unityeditor/AudioImporter Icon.png | Bin 0 -> 537 bytes .../unityeditor/DefaultAsset Icon.png | Bin 0 -> 386 bytes .../unityeditor/EditorSettings Icon.png | Bin 0 -> 2237 bytes .../unityeditor/HumanTemplate Icon.png | Bin 0 -> 873 bytes .../unityeditor/IHVImageFormatImporter Icon.png | Bin 0 -> 336 bytes .../unityeditor/LightingDataAsset Icon.png | Bin 0 -> 897 bytes .../unityeditor/LightmapParameters Icon.png | Bin 0 -> 764 bytes .../unityeditor/LightmapParameters On Icon.png | Bin 0 -> 643 bytes .../unityeditor/ModelImporter Icon.png | Bin 0 -> 806 bytes .../unity-icons/unityeditor/SceneAsset Icon.png | Bin 0 -> 741 bytes .../unityeditor/SceneAsset On Icon.png | Bin 0 -> 749 bytes .../unityeditor/ShaderImporter Icon.png | Bin 0 -> 1494 bytes .../unityeditor/SpeedTreeImporter Icon.png | Bin 0 -> 1390 bytes .../unityeditor/SubstanceArchive Icon.png | Bin 0 -> 1817 bytes .../unityeditor/TextScriptImporter Icon.png | Bin 0 -> 623 bytes .../unityeditor/TextureImporter Icon.png | Bin 0 -> 336 bytes .../unityeditor/TrueTypeFontImporter Icon.png | Bin 0 -> 677 bytes .../unityeditor/VideoClipImporter Icon.png | Bin 0 -> 1148 bytes .../animations/AnimatorController Icon.png | Bin 0 -> 408 bytes .../animations/AnimatorController On Icon.png | Bin 0 -> 433 bytes .../animations/AnimatorState Icon.png | Bin 0 -> 508 bytes .../animations/AnimatorStateMachine Icon.png | Bin 0 -> 516 bytes .../animations/AnimatorStateTransition Icon.png | Bin 0 -> 664 bytes .../unityeditor/animations/BlendTree Icon.png | Bin 0 -> 707 bytes .../animations/d_AnimatorController Icon.png | Bin 0 -> 408 bytes .../animations/d_AnimatorController On Icon.png | Bin 0 -> 433 bytes .../animations/d_AnimatorState Icon.png | Bin 0 -> 502 bytes .../animations/d_AnimatorStateMachine Icon.png | Bin 0 -> 518 bytes .../d_AnimatorStateTransition Icon.png | Bin 0 -> 682 bytes .../unityeditor/animations/d_BlendTree Icon.png | Bin 0 -> 736 bytes .../audio/AudioMixerController Icon.png | Bin 0 -> 378 bytes .../audio/AudioMixerController On Icon.png | Bin 0 -> 391 bytes .../audio/d_AudioMixerController Icon.png | Bin 0 -> 365 bytes .../audio/d_AudioMixerController On Icon.png | Bin 0 -> 391 bytes .../unityeditor/d_AudioImporter Icon.png | Bin 0 -> 523 bytes .../unityeditor/d_DefaultAsset Icon.png | Bin 0 -> 258 bytes .../d_IHVImageFormatImporter Icon.png | Bin 0 -> 336 bytes .../unityeditor/d_LightingDataAsset Icon.png | Bin 0 -> 856 bytes .../unityeditor/d_LightmapParameters Icon.png | Bin 0 -> 776 bytes .../d_LightmapParameters On Icon.png | Bin 0 -> 643 bytes .../unityeditor/d_ModelImporter Icon.png | Bin 0 -> 787 bytes .../unityeditor/d_SceneAsset Icon.png | Bin 0 -> 697 bytes .../unityeditor/d_ShaderImporter Icon.png | Bin 0 -> 1436 bytes .../unityeditor/d_TextScriptImporter Icon.png | Bin 0 -> 448 bytes .../unityeditor/d_TextureImporter Icon.png | Bin 0 -> 336 bytes .../unityeditor/d_TrueTypeFontImporter Icon.png | Bin 0 -> 670 bytes .../animationstatemachine/AnyStateNode Icon.png | Bin 0 -> 999 bytes .../d_AnyStateNode Icon.png | Bin 0 -> 989 bytes .../unityeditor/presets/Preset Icon.png | Bin 0 -> 1251 bytes .../unityeditor/u2d/SpriteAtlasAsset Icon.png | Bin 0 -> 487 bytes .../u2d/SpriteAtlasImporter Icon.png | Bin 0 -> 487 bytes .../unityeditor/u2d/d_SpriteAtlasAsset Icon.png | Bin 0 -> 501 bytes .../u2d/d_SpriteAtlasImporter Icon.png | Bin 0 -> 501 bytes .../vfx/VisualEffectSubgraphBlock Icon.png | Bin 0 -> 883 bytes .../vfx/VisualEffectSubgraphOperator Icon.png | Bin 0 -> 910 bytes .../vfx/d_VisualEffectSubgraphBlock Icon.png | Bin 0 -> 877 bytes .../vfx/d_VisualEffectSubgraphOperator Icon.png | Bin 0 -> 923 bytes .../AssemblyDefinitionAsset Icon.png | Bin 0 -> 774 bytes .../AssemblyDefinitionReferenceAsset Icon.png | Bin 0 -> 1343 bytes .../d_AssemblyDefinitionAsset Icon.png | Bin 0 -> 592 bytes .../d_AssemblyDefinitionReferenceAsset Icon.png | Bin 0 -> 1246 bytes .../unity-icons/unityengine/Animation Icon.png | Bin 0 -> 597 bytes .../unityengine/AnimationClip Icon.png | Bin 0 -> 678 bytes .../unityengine/AnimationClip On Icon.png | Bin 0 -> 478 bytes .../unity-icons/unityengine/Animator Icon.png | Bin 0 -> 808 bytes .../AnimatorOverrideController Icon.png | Bin 0 -> 436 bytes .../AnimatorOverrideController On Icon.png | Bin 0 -> 437 bytes .../unityengine/AreaEffector2D Icon.png | Bin 0 -> 389 bytes .../unityengine/AudioChorusFilter Icon.png | Bin 0 -> 555 bytes .../unity-icons/unityengine/AudioClip Icon.png | Bin 0 -> 537 bytes .../unityengine/AudioClip On Icon.png | Bin 0 -> 436 bytes .../unityengine/AudioDistortionFilter Icon.png | Bin 0 -> 1013 bytes .../unityengine/AudioEchoFilter Icon.png | Bin 0 -> 1215 bytes .../unityengine/AudioHighPassFilter Icon.png | Bin 0 -> 395 bytes .../unityengine/AudioListener Icon.png | Bin 0 -> 536 bytes .../unityengine/AudioLowPassFilter Icon.png | Bin 0 -> 395 bytes .../unityengine/AudioReverbFilter Icon.png | Bin 0 -> 677 bytes .../unityengine/AudioReverbZone Icon.png | Bin 0 -> 815 bytes .../unityengine/AudioSource Icon.png | Bin 0 -> 625 bytes 参考/unity-icons/unityengine/Avatar Icon.png | Bin 0 -> 784 bytes .../unity-icons/unityengine/AvatarMask Icon.png | Bin 0 -> 953 bytes .../unityengine/AvatarMask On Icon.png | Bin 0 -> 696 bytes .../unityengine/BillboardAsset Icon.png | Bin 0 -> 580 bytes .../unityengine/BillboardRenderer Icon.png | Bin 0 -> 729 bytes .../unityengine/BoxCollider Icon.png | Bin 0 -> 710 bytes .../unityengine/BoxCollider2D Icon.png | Bin 0 -> 232 bytes .../unityengine/BuoyancyEffector2D Icon.png | Bin 0 -> 977 bytes 参考/unity-icons/unityengine/Camera Icon.png | Bin 0 -> 400 bytes 参考/unity-icons/unityengine/Canvas Icon.png | Bin 0 -> 424 bytes .../unityengine/CanvasGroup Icon.png | Bin 0 -> 161 bytes .../unityengine/CanvasRenderer Icon.png | Bin 0 -> 396 bytes .../unityengine/CapsuleCollider Icon.png | Bin 0 -> 815 bytes .../unityengine/CapsuleCollider2D Icon.png | Bin 0 -> 397 bytes .../unityengine/CharacterController Icon.png | Bin 0 -> 606 bytes .../unityengine/CharacterJoint Icon.png | Bin 0 -> 783 bytes .../unityengine/CircleCollider2D Icon.png | Bin 0 -> 455 bytes 参考/unity-icons/unityengine/Cloth Icon.png | Bin 0 -> 555 bytes .../unityengine/CompositeCollider2D Icon.png | Bin 0 -> 593 bytes .../unityengine/ComputeShader Icon.png | Bin 0 -> 1419 bytes .../unityengine/ConfigurableJoint Icon.png | Bin 0 -> 877 bytes .../unityengine/ConstantForce Icon.png | Bin 0 -> 637 bytes .../unityengine/ConstantForce2D Icon.png | Bin 0 -> 1094 bytes 参考/unity-icons/unityengine/Cubemap Icon.png | Bin 0 -> 588 bytes .../unityengine/DistanceJoint2D Icon.png | Bin 0 -> 371 bytes .../unityengine/EdgeCollider2D Icon.png | Bin 0 -> 596 bytes .../unity-icons/unityengine/FixedJoint Icon.png | Bin 0 -> 1303 bytes .../unityengine/FixedJoint2D Icon.png | Bin 0 -> 1296 bytes 参考/unity-icons/unityengine/Flare Icon.png | Bin 0 -> 797 bytes .../unity-icons/unityengine/Flare On Icon.png | Bin 0 -> 749 bytes .../unity-icons/unityengine/FlareLayer Icon.png | Bin 0 -> 645 bytes 参考/unity-icons/unityengine/Font Icon.png | Bin 0 -> 621 bytes 参考/unity-icons/unityengine/Font On Icon.png | Bin 0 -> 670 bytes .../unityengine/FrictionJoint2D Icon.png | Bin 0 -> 680 bytes .../unity-icons/unityengine/GUILayer Icon.png | Bin 0 -> 1394 bytes 参考/unity-icons/unityengine/GUISkin Icon.png | Bin 0 -> 476 bytes .../unity-icons/unityengine/GUISkin On Icon.png | Bin 0 -> 507 bytes 参考/unity-icons/unityengine/GUIText Icon.png | Bin 0 -> 1135 bytes .../unity-icons/unityengine/GUITexture Icon.png | Bin 0 -> 1986 bytes .../unity-icons/unityengine/GameObject Icon.png | Bin 0 -> 778 bytes .../unityengine/GameObject On Icon.png | Bin 0 -> 741 bytes 参考/unity-icons/unityengine/Grid Icon.png | Bin 0 -> 484 bytes 参考/unity-icons/unityengine/Halo Icon.png | Bin 0 -> 895 bytes .../unity-icons/unityengine/HingeJoint Icon.png | Bin 0 -> 593 bytes .../unityengine/HingeJoint2D Icon.png | Bin 0 -> 362 bytes .../unity-icons/unityengine/LODGroup Icon.png | Bin 0 -> 403 bytes .../unity-icons/unityengine/LensFlare Icon.png | Bin 0 -> 1537 bytes 参考/unity-icons/unityengine/Light Icon.png | Bin 0 -> 515 bytes .../unityengine/LightProbeGroup Icon.png | Bin 0 -> 793 bytes .../unityengine/LightProbeProxyVolume Icon.png | Bin 0 -> 330 bytes .../unityengine/LightProbes Icon.png | Bin 0 -> 679 bytes .../unityengine/LightingSettings Icon.png | Bin 0 -> 943 bytes .../unityengine/LineRenderer Icon.png | Bin 0 -> 629 bytes .../unity-icons/unityengine/Material Icon.png | Bin 0 -> 540 bytes .../unityengine/Material On Icon.png | Bin 0 -> 689 bytes 参考/unity-icons/unityengine/Mesh Icon.png | Bin 0 -> 227 bytes .../unityengine/MeshCollider Icon.png | Bin 0 -> 227 bytes .../unity-icons/unityengine/MeshFilter Icon.png | Bin 0 -> 227 bytes .../unityengine/MeshRenderer Icon.png | Bin 0 -> 789 bytes 参考/unity-icons/unityengine/Motion Icon.png | Bin 0 -> 742 bytes .../unityengine/MovieTexture Icon.png | Bin 0 -> 1923 bytes .../unityengine/NetworkView Icon.png | Bin 0 -> 2201 bytes .../unityengine/OcclusionArea Icon.png | Bin 0 -> 1015 bytes .../unityengine/OcclusionPortal Icon.png | Bin 0 -> 1211 bytes .../unityengine/ParticleSystem Icon.png | Bin 0 -> 407 bytes .../ParticleSystemForceField Icon.png | Bin 0 -> 1369 bytes .../unityengine/PhysicMaterial Icon.png | Bin 0 -> 1074 bytes .../unityengine/PhysicMaterial On Icon.png | Bin 0 -> 760 bytes .../unityengine/PhysicsMaterial2D Icon.png | Bin 0 -> 552 bytes .../unityengine/PhysicsMaterial2D On Icon.png | Bin 0 -> 568 bytes .../unityengine/PlatformEffector2D Icon.png | Bin 0 -> 994 bytes .../unityengine/PointEffector2D Icon.png | Bin 0 -> 489 bytes .../unityengine/PolygonCollider2D Icon.png | Bin 0 -> 877 bytes .../unityengine/ProceduralMaterial Icon.png | Bin 0 -> 984 bytes .../unity-icons/unityengine/Projector Icon.png | Bin 0 -> 766 bytes .../unityengine/RayTracingShader Icon.png | Bin 0 -> 1215 bytes .../unityengine/RectTransform Icon.png | Bin 0 -> 676 bytes .../unityengine/ReflectionProbe Icon.png | Bin 0 -> 847 bytes .../unityengine/RelativeJoint2D Icon.png | Bin 0 -> 622 bytes .../unityengine/RenderTexture Icon.png | Bin 0 -> 809 bytes .../unityengine/RenderTexture On Icon.png | Bin 0 -> 407 bytes .../unity-icons/unityengine/Rigidbody Icon.png | Bin 0 -> 749 bytes .../unityengine/Rigidbody2D Icon.png | Bin 0 -> 749 bytes .../unityengine/ScriptableObject Icon.png | Bin 0 -> 1189 bytes .../unityengine/ScriptableObject On Icon.png | Bin 0 -> 833 bytes 参考/unity-icons/unityengine/Shader Icon.png | Bin 0 -> 1958 bytes .../ShaderVariantCollection Icon.png | Bin 0 -> 1945 bytes .../unityengine/SkinnedMeshRenderer Icon.png | Bin 0 -> 1064 bytes 参考/unity-icons/unityengine/Skybox Icon.png | Bin 0 -> 597 bytes .../unityengine/SliderJoint2D Icon.png | Bin 0 -> 404 bytes .../unityengine/SphereCollider Icon.png | Bin 0 -> 1100 bytes .../unityengine/SpringJoint Icon.png | Bin 0 -> 718 bytes .../unityengine/SpringJoint2D Icon.png | Bin 0 -> 718 bytes 参考/unity-icons/unityengine/Sprite Icon.png | Bin 0 -> 366 bytes .../unity-icons/unityengine/SpriteMask Icon.png | Bin 0 -> 373 bytes .../unityengine/SpriteRenderer Icon.png | Bin 0 -> 938 bytes .../unityengine/StreamingController Icon.png | Bin 0 -> 1114 bytes .../unityengine/SurfaceEffector2D Icon.png | Bin 0 -> 512 bytes .../unityengine/TargetJoint2D Icon.png | Bin 0 -> 1638 bytes 参考/unity-icons/unityengine/Terrain Icon.png | Bin 0 -> 1105 bytes .../unityengine/TerrainCollider Icon.png | Bin 0 -> 985 bytes .../unityengine/TerrainData Icon.png | Bin 0 -> 1598 bytes .../unity-icons/unityengine/TextAsset Icon.png | Bin 0 -> 453 bytes .../unity-icons/unityengine/TextMesh Icon.png | Bin 0 -> 1476 bytes 参考/unity-icons/unityengine/Texture Icon.png | Bin 0 -> 387 bytes .../unity-icons/unityengine/Texture2D Icon.png | Bin 0 -> 336 bytes .../unityengine/TrailRenderer Icon.png | Bin 0 -> 1066 bytes .../unity-icons/unityengine/Transform Icon.png | Bin 0 -> 910 bytes .../unityengine/VisualEffect Icon.png | Bin 0 -> 712 bytes .../unityengine/VisualEffectAsset Icon.png | Bin 0 -> 1009 bytes .../unityengine/WheelCollider Icon.png | Bin 0 -> 1167 bytes .../unityengine/WheelJoint2D Icon.png | Bin 0 -> 1325 bytes .../unity-icons/unityengine/WindZone Icon.png | Bin 0 -> 574 bytes .../unityengine/ai/NavMeshAgent Icon.png | Bin 0 -> 980 bytes .../unityengine/ai/NavMeshData Icon.png | Bin 0 -> 1360 bytes .../unityengine/ai/NavMeshObstacle Icon.png | Bin 0 -> 744 bytes .../unityengine/ai/OffMeshLink Icon.png | Bin 0 -> 1135 bytes .../unityengine/ai/d_NavMeshAgent Icon.png | Bin 0 -> 964 bytes .../unityengine/ai/d_NavMeshData Icon.png | Bin 0 -> 1392 bytes .../unityengine/ai/d_NavMeshObstacle Icon.png | Bin 0 -> 766 bytes .../unityengine/ai/d_OffMeshLink Icon.png | Bin 0 -> 1152 bytes .../analytics/AnalyticsTracker Icon.png | Bin 0 -> 575 bytes .../analytics/d_AnalyticsTracker Icon.png | Bin 0 -> 555 bytes .../animations/AimConstraint Icon.png | Bin 0 -> 1253 bytes .../animations/LookAtConstraint Icon.png | Bin 0 -> 1033 bytes .../animations/ParentConstraint Icon.png | Bin 0 -> 770 bytes .../animations/PositionConstraint Icon.png | Bin 0 -> 1096 bytes .../animations/RotationConstraint Icon.png | Bin 0 -> 1293 bytes .../animations/ScaleConstraint Icon.png | Bin 0 -> 921 bytes .../animations/d_AimConstraint Icon.png | Bin 0 -> 1247 bytes .../animations/d_LookAtConstraint Icon.png | Bin 0 -> 1029 bytes .../animations/d_ParentConstraint Icon.png | Bin 0 -> 757 bytes .../animations/d_PositionConstraint Icon.png | Bin 0 -> 1102 bytes .../animations/d_RotationConstraint Icon.png | Bin 0 -> 1308 bytes .../animations/d_ScaleConstraint Icon.png | Bin 0 -> 940 bytes .../unityengine/audio/AudioMixerGroup Icon.png | Bin 0 -> 404 bytes .../audio/AudioMixerSnapshot Icon.png | Bin 0 -> 340 bytes .../audio/AudioSpatializerMicrosoft Icon.png | Bin 0 -> 734 bytes .../audio/d_AudioMixerGroup Icon.png | Bin 0 -> 409 bytes .../audio/d_AudioMixerSnapshot Icon.png | Bin 0 -> 340 bytes .../audio/d_AudioSpatializerMicrosoft Icon.png | Bin 0 -> 734 bytes .../unityengine/d_Animation Icon.png | Bin 0 -> 597 bytes .../unityengine/d_AnimationClip Icon.png | Bin 0 -> 683 bytes .../unityengine/d_AnimationClip On Icon.png | Bin 0 -> 478 bytes .../unity-icons/unityengine/d_Animator Icon.png | Bin 0 -> 831 bytes .../d_AnimatorOverrideController Icon.png | Bin 0 -> 422 bytes .../d_AnimatorOverrideController On Icon.png | Bin 0 -> 437 bytes .../unityengine/d_AreaEffector2D Icon.png | Bin 0 -> 386 bytes .../unityengine/d_AudioChorusFilter Icon.png | Bin 0 -> 555 bytes .../unityengine/d_AudioClip Icon.png | Bin 0 -> 523 bytes .../unityengine/d_AudioClip On Icon.png | Bin 0 -> 436 bytes .../d_AudioDistortionFilter Icon.png | Bin 0 -> 997 bytes .../unityengine/d_AudioEchoFilter Icon.png | Bin 0 -> 1254 bytes .../unityengine/d_AudioHighPassFilter Icon.png | Bin 0 -> 395 bytes .../unityengine/d_AudioListener Icon.png | Bin 0 -> 532 bytes .../unityengine/d_AudioLowPassFilter Icon.png | Bin 0 -> 395 bytes .../unityengine/d_AudioReverbFilter Icon.png | Bin 0 -> 655 bytes .../unityengine/d_AudioReverbZone Icon.png | Bin 0 -> 793 bytes .../unityengine/d_AudioSource Icon.png | Bin 0 -> 632 bytes .../unity-icons/unityengine/d_Avatar Icon.png | Bin 0 -> 821 bytes .../unityengine/d_AvatarMask Icon.png | Bin 0 -> 964 bytes .../unityengine/d_AvatarMask On Icon.png | Bin 0 -> 696 bytes .../unityengine/d_BillboardAsset Icon.png | Bin 0 -> 573 bytes .../unityengine/d_BillboardRenderer Icon.png | Bin 0 -> 748 bytes .../unityengine/d_BoxCollider Icon.png | Bin 0 -> 679 bytes .../unityengine/d_BoxCollider2D Icon.png | Bin 0 -> 232 bytes .../unityengine/d_BuoyancyEffector2D Icon.png | Bin 0 -> 932 bytes .../unity-icons/unityengine/d_Camera Icon.png | Bin 0 -> 398 bytes .../unity-icons/unityengine/d_Canvas Icon.png | Bin 0 -> 393 bytes .../unityengine/d_CanvasGroup Icon.png | Bin 0 -> 121 bytes .../unityengine/d_CanvasRenderer Icon.png | Bin 0 -> 372 bytes .../unityengine/d_CapsuleCollider Icon.png | Bin 0 -> 786 bytes .../unityengine/d_CapsuleCollider2D Icon.png | Bin 0 -> 398 bytes .../unityengine/d_CharacterController Icon.png | Bin 0 -> 610 bytes .../unityengine/d_CharacterJoint Icon.png | Bin 0 -> 790 bytes .../unityengine/d_CircleCollider2D Icon.png | Bin 0 -> 462 bytes 参考/unity-icons/unityengine/d_Cloth Icon.png | Bin 0 -> 560 bytes .../unityengine/d_CompositeCollider2D Icon.png | Bin 0 -> 573 bytes .../unityengine/d_ComputeShader Icon.png | Bin 0 -> 1392 bytes .../unityengine/d_ConfigurableJoint Icon.png | Bin 0 -> 879 bytes .../unityengine/d_ConstantForce Icon.png | Bin 0 -> 635 bytes .../unityengine/d_ConstantForce2D Icon.png | Bin 0 -> 419 bytes .../unity-icons/unityengine/d_Cubemap Icon.png | Bin 0 -> 572 bytes .../unityengine/d_DistanceJoint2D Icon.png | Bin 0 -> 367 bytes .../unityengine/d_EdgeCollider2D Icon.png | Bin 0 -> 565 bytes .../unityengine/d_FixedJoint Icon.png | Bin 0 -> 1264 bytes 参考/unity-icons/unityengine/d_Flare Icon.png | Bin 0 -> 808 bytes .../unity-icons/unityengine/d_Flare On Icon.png | Bin 0 -> 749 bytes .../unityengine/d_FlareLayer Icon.png | Bin 0 -> 636 bytes 参考/unity-icons/unityengine/d_Font Icon.png | Bin 0 -> 618 bytes .../unityengine/d_FrictionJoint2D Icon.png | Bin 0 -> 686 bytes .../unity-icons/unityengine/d_GUISkin Icon.png | Bin 0 -> 467 bytes .../unityengine/d_GUISkin On Icon.png | Bin 0 -> 507 bytes .../unityengine/d_GameObject Icon.png | Bin 0 -> 782 bytes 参考/unity-icons/unityengine/d_Grid Icon.png | Bin 0 -> 484 bytes 参考/unity-icons/unityengine/d_Halo Icon.png | Bin 0 -> 899 bytes .../unityengine/d_HingeJoint Icon.png | Bin 0 -> 582 bytes .../unityengine/d_HingeJoint2D Icon.png | Bin 0 -> 362 bytes .../unity-icons/unityengine/d_LODGroup Icon.png | Bin 0 -> 399 bytes 参考/unity-icons/unityengine/d_Light Icon.png | Bin 0 -> 528 bytes .../unityengine/d_LightProbeGroup Icon.png | Bin 0 -> 782 bytes .../d_LightProbeProxyVolume Icon.png | Bin 0 -> 335 bytes .../unityengine/d_LightProbes Icon.png | Bin 0 -> 685 bytes .../unityengine/d_LightingSettings Icon.png | Bin 0 -> 958 bytes .../unityengine/d_LineRenderer Icon.png | Bin 0 -> 636 bytes .../unity-icons/unityengine/d_Material Icon.png | Bin 0 -> 756 bytes .../unityengine/d_Material On Icon.png | Bin 0 -> 689 bytes 参考/unity-icons/unityengine/d_Mesh Icon.png | Bin 0 -> 232 bytes .../unityengine/d_MeshCollider Icon.png | Bin 0 -> 227 bytes .../unityengine/d_MeshFilter Icon.png | Bin 0 -> 232 bytes .../unityengine/d_MeshRenderer Icon.png | Bin 0 -> 819 bytes .../unity-icons/unityengine/d_Motion Icon.png | Bin 0 -> 737 bytes .../unityengine/d_OcclusionArea Icon.png | Bin 0 -> 1033 bytes .../unityengine/d_OcclusionPortal Icon.png | Bin 0 -> 1232 bytes .../unityengine/d_ParticleSystem Icon.png | Bin 0 -> 407 bytes .../d_ParticleSystemForceField Icon.png | Bin 0 -> 1400 bytes .../unityengine/d_PhysicMaterial Icon.png | Bin 0 -> 882 bytes .../unityengine/d_PhysicMaterial On Icon.png | Bin 0 -> 760 bytes .../unityengine/d_PhysicsMaterial2D Icon.png | Bin 0 -> 542 bytes .../unityengine/d_PhysicsMaterial2D On Icon.png | Bin 0 -> 568 bytes .../unityengine/d_PlatformEffector2D Icon.png | Bin 0 -> 959 bytes .../unityengine/d_PointEffector2D Icon.png | Bin 0 -> 483 bytes .../unityengine/d_PolygonCollider2D Icon.png | Bin 0 -> 889 bytes .../unityengine/d_ProceduralMaterial Icon.png | Bin 0 -> 969 bytes .../unityengine/d_Projector Icon.png | Bin 0 -> 766 bytes .../unityengine/d_RayTracingShader Icon.png | Bin 0 -> 1215 bytes .../unityengine/d_RectTransform Icon.png | Bin 0 -> 661 bytes .../unityengine/d_ReflectionProbe Icon.png | Bin 0 -> 827 bytes .../unityengine/d_RelativeJoint2D Icon.png | Bin 0 -> 602 bytes .../unityengine/d_RenderTexture Icon.png | Bin 0 -> 812 bytes .../unityengine/d_RenderTexture On Icon.png | Bin 0 -> 407 bytes .../unityengine/d_Rigidbody Icon.png | Bin 0 -> 740 bytes .../unityengine/d_Rigidbody2D Icon.png | Bin 0 -> 740 bytes .../unityengine/d_ScriptableObject Icon.png | Bin 0 -> 1174 bytes .../unityengine/d_ScriptableObject On Icon.png | Bin 0 -> 833 bytes .../unity-icons/unityengine/d_Shader Icon.png | Bin 0 -> 1712 bytes .../d_ShaderVariantCollection Icon.png | Bin 0 -> 1741 bytes .../unityengine/d_SkinnedMeshRenderer Icon.png | Bin 0 -> 1099 bytes .../unity-icons/unityengine/d_Skybox Icon.png | Bin 0 -> 598 bytes .../unityengine/d_SliderJoint2D Icon.png | Bin 0 -> 400 bytes .../unityengine/d_SphereCollider Icon.png | Bin 0 -> 1052 bytes .../unityengine/d_SpringJoint Icon.png | Bin 0 -> 708 bytes .../unityengine/d_SpringJoint2D Icon.png | Bin 0 -> 708 bytes .../unity-icons/unityengine/d_Sprite Icon.png | Bin 0 -> 372 bytes .../unityengine/d_SpriteMask Icon.png | Bin 0 -> 378 bytes .../unityengine/d_SpriteRenderer Icon.png | Bin 0 -> 955 bytes .../unityengine/d_StreamingController Icon.png | Bin 0 -> 1070 bytes .../unityengine/d_SurfaceEffector2D Icon.png | Bin 0 -> 512 bytes .../unityengine/d_TargetJoint2D Icon.png | Bin 0 -> 1621 bytes .../unity-icons/unityengine/d_Terrain Icon.png | Bin 0 -> 1110 bytes .../unityengine/d_TerrainCollider Icon.png | Bin 0 -> 956 bytes .../unityengine/d_TerrainData Icon.png | Bin 0 -> 1213 bytes .../unityengine/d_TextAsset Icon.png | Bin 0 -> 321 bytes .../unity-icons/unityengine/d_Texture Icon.png | Bin 0 -> 382 bytes .../unityengine/d_Texture2D Icon.png | Bin 0 -> 336 bytes .../unityengine/d_TrailRenderer Icon.png | Bin 0 -> 1079 bytes .../unityengine/d_Transform Icon.png | Bin 0 -> 918 bytes .../unityengine/d_WheelCollider Icon.png | Bin 0 -> 1138 bytes .../unityengine/d_WheelJoint2D Icon.png | Bin 0 -> 1303 bytes .../unity-icons/unityengine/d_WindZone Icon.png | Bin 0 -> 561 bytes .../eventsystems/EventSystem Icon.png | Bin 0 -> 981 bytes .../eventsystems/EventTrigger Icon.png | Bin 0 -> 780 bytes .../eventsystems/HoloLensInputModule Icon.png | Bin 0 -> 1298 bytes .../eventsystems/Physics2DRaycaster Icon.png | Bin 0 -> 524 bytes .../eventsystems/PhysicsRaycaster Icon.png | Bin 0 -> 1065 bytes .../eventsystems/StandaloneInputModule Icon.png | Bin 0 -> 551 bytes .../eventsystems/TouchInputModule Icon.png | Bin 0 -> 991 bytes .../eventsystems/d_EventSystem Icon.png | Bin 0 -> 981 bytes .../eventsystems/d_EventTrigger Icon.png | Bin 0 -> 782 bytes .../eventsystems/d_HoloLensInputModule Icon.png | Bin 0 -> 1269 bytes .../eventsystems/d_Physics2DRaycaster Icon.png | Bin 0 -> 511 bytes .../eventsystems/d_PhysicsRaycaster Icon.png | Bin 0 -> 1056 bytes .../d_StandaloneInputModule Icon.png | Bin 0 -> 552 bytes .../eventsystems/d_TouchInputModule Icon.png | Bin 0 -> 985 bytes .../rendering/RayTracingShader Icon.png | Bin 0 -> 1215 bytes .../rendering/d_RaytracingShader Icon.png | Bin 0 -> 1215 bytes .../networking/NetworkAnimator Icon.png | Bin 0 -> 880 bytes .../networking/NetworkDiscovery Icon.png | Bin 0 -> 1511 bytes .../networking/NetworkIdentity Icon.png | Bin 0 -> 789 bytes .../networking/NetworkLobbyManager Icon.png | Bin 0 -> 724 bytes .../networking/NetworkLobbyPlayer Icon.png | Bin 0 -> 752 bytes .../networking/NetworkManager Icon.png | Bin 0 -> 1079 bytes .../networking/NetworkManagerHUD Icon.png | Bin 0 -> 602 bytes .../networking/NetworkMigrationManager Icon.png | Bin 0 -> 777 bytes .../networking/NetworkProximityChecker Icon.png | Bin 0 -> 761 bytes .../networking/NetworkStartPosition Icon.png | Bin 0 -> 1259 bytes .../networking/NetworkTransform Icon.png | Bin 0 -> 827 bytes .../networking/NetworkTransformChild Icon.png | Bin 0 -> 971 bytes .../NetworkTransformVisualizer Icon.png | Bin 0 -> 1205 bytes .../networking/d_NetworkAnimator Icon.png | Bin 0 -> 900 bytes .../networking/d_NetworkDiscovery Icon.png | Bin 0 -> 1479 bytes .../networking/d_NetworkIdentity Icon.png | Bin 0 -> 765 bytes .../networking/d_NetworkLobbyManager Icon.png | Bin 0 -> 679 bytes .../networking/d_NetworkLobbyPlayer Icon.png | Bin 0 -> 679 bytes .../networking/d_NetworkManager Icon.png | Bin 0 -> 1053 bytes .../networking/d_NetworkManagerHUD Icon.png | Bin 0 -> 602 bytes .../d_NetworkMigrationManager Icon.png | Bin 0 -> 770 bytes .../d_NetworkProximityChecker Icon.png | Bin 0 -> 780 bytes .../networking/d_NetworkStartPosition Icon.png | Bin 0 -> 1277 bytes .../networking/d_NetworkTransform Icon.png | Bin 0 -> 834 bytes .../networking/d_NetworkTransformChild Icon.png | Bin 0 -> 971 bytes .../d_NetworkTransformVisualizer Icon.png | Bin 0 -> 1175 bytes .../playables/PlayableDirector Icon.png | Bin 0 -> 606 bytes .../playables/d_PlayableDirector Icon.png | Bin 0 -> 615 bytes .../unityengine/rendering/SortingGroup Icon.png | Bin 0 -> 1389 bytes .../rendering/d_SortingGroup Icon.png | Bin 0 -> 1395 bytes .../spatialtracking/TrackedPoseDriver Icon.png | Bin 0 -> 1199 bytes .../unityengine/tilemaps/Tile Icon.png | Bin 0 -> 1004 bytes .../unityengine/tilemaps/Tilemap Icon.png | Bin 0 -> 480 bytes .../tilemaps/TilemapCollider2D Icon.png | Bin 0 -> 476 bytes .../tilemaps/TilemapRenderer Icon.png | Bin 0 -> 977 bytes .../unityengine/tilemaps/d_Tile Icon.png | Bin 0 -> 1012 bytes .../unityengine/tilemaps/d_Tilemap Icon.png | Bin 0 -> 480 bytes .../tilemaps/d_TilemapCollider2D Icon.png | Bin 0 -> 480 bytes .../tilemaps/d_TilemapRenderer Icon.png | Bin 0 -> 995 bytes .../unityengine/timeline/SignalAsset Icon.png | Bin 0 -> 223 bytes .../unityengine/timeline/SignalEmitter Icon.png | Bin 0 -> 594 bytes .../timeline/SignalReceiver Icon.png | Bin 0 -> 845 bytes .../unityengine/timeline/TimelineAsset Icon.png | Bin 0 -> 443 bytes .../timeline/TimelineAsset On Icon.png | Bin 0 -> 422 bytes .../unityengine/timeline/d_SignalAsset Icon.png | Bin 0 -> 227 bytes .../timeline/d_SignalEmitter Icon.png | Bin 0 -> 584 bytes .../timeline/d_SignalReceiver Icon.png | Bin 0 -> 847 bytes .../timeline/d_TimelineAsset Icon.png | Bin 0 -> 442 bytes .../timeline/d_TimelineAsset On Icon.png | Bin 0 -> 422 bytes .../unityengine/u2d/SpriteAtlas Icon.png | Bin 0 -> 474 bytes .../unityengine/u2d/SpriteAtlas On Icon.png | Bin 0 -> 537 bytes .../u2d/SpriteShapeRenderer Icon.png | Bin 0 -> 1300 bytes .../unityengine/u2d/d_SpriteAtlas Icon.png | Bin 0 -> 469 bytes .../unityengine/u2d/d_SpriteAtlas On Icon.png | Bin 0 -> 537 bytes .../u2d/d_SpriteShapeRenderer Icon.png | Bin 0 -> 1315 bytes .../unityengine/ui/AspectRatioFitter Icon.png | Bin 0 -> 247 bytes .../unity-icons/unityengine/ui/Button Icon.png | Bin 0 -> 615 bytes .../unityengine/ui/CanvasScaler Icon.png | Bin 0 -> 321 bytes .../unityengine/ui/ContentSizeFitter Icon.png | Bin 0 -> 339 bytes .../unityengine/ui/Dropdown Icon.png | Bin 0 -> 279 bytes .../unityengine/ui/FreeformLayoutGroup Icon.png | Bin 0 -> 222 bytes .../unityengine/ui/GraphicRaycaster Icon.png | Bin 0 -> 473 bytes .../unityengine/ui/GridLayoutGroup Icon.png | Bin 0 -> 278 bytes .../ui/HorizontalLayoutGroup Icon.png | Bin 0 -> 267 bytes .../unity-icons/unityengine/ui/Image Icon.png | Bin 0 -> 406 bytes .../unityengine/ui/InputField Icon.png | Bin 0 -> 335 bytes .../unityengine/ui/LayoutElement Icon.png | Bin 0 -> 222 bytes 参考/unity-icons/unityengine/ui/Mask Icon.png | Bin 0 -> 669 bytes .../unity-icons/unityengine/ui/Outline Icon.png | Bin 0 -> 194 bytes .../unityengine/ui/PositionAsUV1 Icon.png | Bin 0 -> 372 bytes .../unityengine/ui/RawImage Icon.png | Bin 0 -> 424 bytes .../unityengine/ui/RectMask2D Icon.png | Bin 0 -> 225 bytes .../unityengine/ui/ScrollRect Icon.png | Bin 0 -> 288 bytes .../unityengine/ui/Scrollbar Icon.png | Bin 0 -> 328 bytes .../unityengine/ui/Selectable Icon.png | Bin 0 -> 343 bytes .../unity-icons/unityengine/ui/Shadow Icon.png | Bin 0 -> 568 bytes .../unity-icons/unityengine/ui/Slider Icon.png | Bin 0 -> 336 bytes 参考/unity-icons/unityengine/ui/Text Icon.png | Bin 0 -> 274 bytes .../unity-icons/unityengine/ui/Toggle Icon.png | Bin 0 -> 339 bytes .../unityengine/ui/ToggleGroup Icon.png | Bin 0 -> 363 bytes .../unityengine/ui/VerticalLayoutGroup Icon.png | Bin 0 -> 205 bytes .../unityengine/ui/d_AspectRatioFitter Icon.png | Bin 0 -> 260 bytes .../unityengine/ui/d_Button Icon.png | Bin 0 -> 551 bytes .../unityengine/ui/d_CanvasScaler Icon.png | Bin 0 -> 191 bytes .../unityengine/ui/d_ContentSizeFitter Icon.png | Bin 0 -> 300 bytes .../unityengine/ui/d_Dropdown Icon.png | Bin 0 -> 305 bytes .../ui/d_FreeformLayoutGroup Icon.png | Bin 0 -> 178 bytes .../unityengine/ui/d_GraphicRaycaster Icon.png | Bin 0 -> 469 bytes .../unityengine/ui/d_GridLayoutGroup Icon.png | Bin 0 -> 177 bytes .../ui/d_HorizontalLayoutGroup Icon.png | Bin 0 -> 161 bytes .../unity-icons/unityengine/ui/d_Image Icon.png | Bin 0 -> 393 bytes .../unityengine/ui/d_InputField Icon.png | Bin 0 -> 339 bytes .../unityengine/ui/d_LayoutElement Icon.png | Bin 0 -> 149 bytes .../unity-icons/unityengine/ui/d_Mask Icon.png | Bin 0 -> 666 bytes .../unityengine/ui/d_Outline Icon.png | Bin 0 -> 176 bytes .../ui/d_PhysicalResolution Icon.png | Bin 0 -> 212 bytes .../unityengine/ui/d_PositionAsUV1 Icon.png | Bin 0 -> 373 bytes .../unityengine/ui/d_RawImage Icon.png | Bin 0 -> 433 bytes .../unityengine/ui/d_RectMask2D Icon.png | Bin 0 -> 242 bytes .../unityengine/ui/d_ScrollRect Icon.png | Bin 0 -> 290 bytes .../unityengine/ui/d_ScrollViewArea Icon.png | Bin 0 -> 185 bytes .../unityengine/ui/d_Scrollbar Icon.png | Bin 0 -> 320 bytes .../unityengine/ui/d_Selectable Icon.png | Bin 0 -> 356 bytes .../unityengine/ui/d_SelectionList Icon.png | Bin 0 -> 255 bytes .../unityengine/ui/d_SelectionListItem Icon.png | Bin 0 -> 218 bytes .../ui/d_SelectionListTemplate Icon.png | Bin 0 -> 181 bytes .../unityengine/ui/d_Shadow Icon.png | Bin 0 -> 638 bytes .../unityengine/ui/d_Slider Icon.png | Bin 0 -> 341 bytes .../unity-icons/unityengine/ui/d_Text Icon.png | Bin 0 -> 278 bytes .../unityengine/ui/d_Toggle Icon.png | Bin 0 -> 344 bytes .../unityengine/ui/d_ToggleGroup Icon.png | Bin 0 -> 370 bytes .../ui/d_VerticalLayoutGroup Icon.png | Bin 0 -> 215 bytes .../unityengine/uielements/StyleSheet Icon.png | Bin 0 -> 856 bytes .../uielements/VisualTreeAsset Icon.png | Bin 0 -> 1216 bytes .../uielements/d_StyleSheet Icon.png | Bin 0 -> 705 bytes .../uielements/d_VisualTreeAsset Icon.png | Bin 0 -> 1124 bytes .../unityengine/vfx/VisualEffect Icon.png | Bin 0 -> 1183 bytes .../unityengine/vfx/VisualEffectAsset Icon.png | Bin 0 -> 901 bytes .../unityengine/vfx/d_VisualEffect Icon.png | Bin 0 -> 1184 bytes .../vfx/d_VisualEffectAsset Icon.png | Bin 0 -> 875 bytes .../unityengine/video/VideoClip Icon.png | Bin 0 -> 1148 bytes .../unityengine/video/VideoPlayer Icon.png | Bin 0 -> 567 bytes .../unityengine/video/d_VideoPlayer Icon.png | Bin 0 -> 559 bytes .../xr/wsa/SpatialMappingCollider Icon.png | Bin 0 -> 848 bytes .../xr/wsa/SpatialMappingRenderer Icon.png | Bin 0 -> 759 bytes .../unityengine/xr/wsa/WorldAnchor Icon.png | Bin 0 -> 700 bytes .../xr/wsa/d_SpatialMappingCollider Icon.png | Bin 0 -> 801 bytes 4935 files changed, 35593 insertions(+), 360696 deletions(-) create mode 100644 .gitattributes delete mode 100644 .trae/documents/RHI模块审查报告.md delete mode 100644 .trae/documents/XCEngine项目熟悉计划.md create mode 100644 .vscode/settings.json create mode 100644 MVS/3DGS-Unity/Editor.meta create mode 100644 MVS/3DGS-Unity/Editor/GaussianMoveTool.cs create mode 100644 MVS/3DGS-Unity/Editor/GaussianMoveTool.cs.meta create mode 100644 MVS/3DGS-Unity/Editor/GaussianRotateTool.cs create mode 100644 MVS/3DGS-Unity/Editor/GaussianRotateTool.cs.meta create mode 100644 MVS/3DGS-Unity/Editor/GaussianScaleTool.cs create mode 100644 MVS/3DGS-Unity/Editor/GaussianScaleTool.cs.meta create mode 100644 MVS/3DGS-Unity/Editor/GaussianSplatAssetCreator.cs create mode 100644 MVS/3DGS-Unity/Editor/GaussianSplatAssetCreator.cs.meta create mode 100644 MVS/3DGS-Unity/Editor/GaussianSplatAssetEditor.cs create mode 100644 MVS/3DGS-Unity/Editor/GaussianSplatAssetEditor.cs.meta create mode 100644 MVS/3DGS-Unity/Editor/GaussianSplatRendererEditor.cs create mode 100644 MVS/3DGS-Unity/Editor/GaussianSplatRendererEditor.cs.meta create mode 100644 MVS/3DGS-Unity/Editor/GaussianSplatValidator.cs create mode 100644 MVS/3DGS-Unity/Editor/GaussianSplatValidator.cs.meta create mode 100644 MVS/3DGS-Unity/Editor/GaussianSplattingEditor.asmdef create mode 100644 MVS/3DGS-Unity/Editor/GaussianSplattingEditor.asmdef.meta create mode 100644 MVS/3DGS-Unity/Editor/GaussianTool.cs create mode 100644 MVS/3DGS-Unity/Editor/GaussianTool.cs.meta create mode 100644 MVS/3DGS-Unity/Editor/GaussianToolContext.cs create mode 100644 MVS/3DGS-Unity/Editor/GaussianToolContext.cs.meta create mode 100644 MVS/3DGS-Unity/Editor/Icons.meta create mode 100644 MVS/3DGS-Unity/Editor/Icons/GaussianContext.png create mode 100644 MVS/3DGS-Unity/Editor/Icons/GaussianContext.png.meta create mode 100644 MVS/3DGS-Unity/Editor/Icons/GaussianContext@2x.png create mode 100644 MVS/3DGS-Unity/Editor/Icons/GaussianContext@2x.png.meta create mode 100644 MVS/3DGS-Unity/Editor/Icons/d_GaussianContext.png create mode 100644 MVS/3DGS-Unity/Editor/Icons/d_GaussianContext.png.meta create mode 100644 MVS/3DGS-Unity/Editor/Icons/d_GaussianContext@2x.png create mode 100644 MVS/3DGS-Unity/Editor/Icons/d_GaussianContext@2x.png.meta create mode 100644 MVS/3DGS-Unity/Editor/Utils.meta create mode 100644 MVS/3DGS-Unity/Editor/Utils/CaptureScreenshot.cs create mode 100644 MVS/3DGS-Unity/Editor/Utils/CaptureScreenshot.cs.meta create mode 100644 MVS/3DGS-Unity/Editor/Utils/FilePickerControl.cs create mode 100644 MVS/3DGS-Unity/Editor/Utils/FilePickerControl.cs.meta create mode 100644 MVS/3DGS-Unity/Editor/Utils/KMeansClustering.cs create mode 100644 MVS/3DGS-Unity/Editor/Utils/KMeansClustering.cs.meta create mode 100644 MVS/3DGS-Unity/Editor/Utils/PLYFileReader.cs create mode 100644 MVS/3DGS-Unity/Editor/Utils/PLYFileReader.cs.meta create mode 100644 MVS/3DGS-Unity/Editor/Utils/TinyJsonParser.cs create mode 100644 MVS/3DGS-Unity/Editor/Utils/TinyJsonParser.cs.meta create mode 100644 MVS/3DGS-Unity/LICENSE.md create mode 100644 MVS/3DGS-Unity/LICENSE.md.meta create mode 100644 MVS/3DGS-Unity/Materials.meta create mode 100644 MVS/3DGS-Unity/Materials/BlackSkybox.mat create mode 100644 MVS/3DGS-Unity/Materials/BlackSkybox.mat.meta create mode 100644 MVS/3DGS-Unity/Runtime.meta create mode 100644 MVS/3DGS-Unity/Runtime/GaussianCutout.cs create mode 100644 MVS/3DGS-Unity/Runtime/GaussianCutout.cs.meta create mode 100644 MVS/3DGS-Unity/Runtime/GaussianSplatAsset.cs create mode 100644 MVS/3DGS-Unity/Runtime/GaussianSplatAsset.cs.meta create mode 100644 MVS/3DGS-Unity/Runtime/GaussianSplatHDRPPass.cs create mode 100644 MVS/3DGS-Unity/Runtime/GaussianSplatHDRPPass.cs.meta create mode 100644 MVS/3DGS-Unity/Runtime/GaussianSplatRenderer.cs create mode 100644 MVS/3DGS-Unity/Runtime/GaussianSplatRenderer.cs.meta create mode 100644 MVS/3DGS-Unity/Runtime/GaussianSplatURPFeature.cs create mode 100644 MVS/3DGS-Unity/Runtime/GaussianSplatURPFeature.cs.meta create mode 100644 MVS/3DGS-Unity/Runtime/GaussianSplatting.asmdef create mode 100644 MVS/3DGS-Unity/Runtime/GaussianSplatting.asmdef.meta create mode 100644 MVS/3DGS-Unity/Runtime/GaussianUtils.cs create mode 100644 MVS/3DGS-Unity/Runtime/GaussianUtils.cs.meta create mode 100644 MVS/3DGS-Unity/Runtime/GpuSorting.cs create mode 100644 MVS/3DGS-Unity/Runtime/GpuSorting.cs.meta create mode 100644 MVS/3DGS-Unity/Shaders.meta create mode 100644 MVS/3DGS-Unity/Shaders/BlackSkybox.shader create mode 100644 MVS/3DGS-Unity/Shaders/BlackSkybox.shader.meta create mode 100644 MVS/3DGS-Unity/Shaders/DeviceRadixSort.hlsl create mode 100644 MVS/3DGS-Unity/Shaders/DeviceRadixSort.hlsl.meta create mode 100644 MVS/3DGS-Unity/Shaders/GaussianComposite.shader create mode 100644 MVS/3DGS-Unity/Shaders/GaussianComposite.shader.meta create mode 100644 MVS/3DGS-Unity/Shaders/GaussianDebugRenderBoxes.shader create mode 100644 MVS/3DGS-Unity/Shaders/GaussianDebugRenderBoxes.shader.meta create mode 100644 MVS/3DGS-Unity/Shaders/GaussianDebugRenderPoints.shader create mode 100644 MVS/3DGS-Unity/Shaders/GaussianDebugRenderPoints.shader.meta create mode 100644 MVS/3DGS-Unity/Shaders/GaussianSplatting.hlsl create mode 100644 MVS/3DGS-Unity/Shaders/GaussianSplatting.hlsl.meta create mode 100644 MVS/3DGS-Unity/Shaders/RenderGaussianSplats.shader create mode 100644 MVS/3DGS-Unity/Shaders/RenderGaussianSplats.shader.meta create mode 100644 MVS/3DGS-Unity/Shaders/SortCommon.hlsl create mode 100644 MVS/3DGS-Unity/Shaders/SortCommon.hlsl.meta create mode 100644 MVS/3DGS-Unity/Shaders/SphericalHarmonics.hlsl create mode 100644 MVS/3DGS-Unity/Shaders/SphericalHarmonics.hlsl.meta create mode 100644 MVS/3DGS-Unity/Shaders/SplatUtilities.compute create mode 100644 MVS/3DGS-Unity/Shaders/SplatUtilities.compute.meta create mode 100644 MVS/3DGS-Unity/package.json create mode 100644 MVS/3DGS-Unity/package.json.meta create mode 100644 MVS/3DGS-Unity/room.ply rename {tests => MVS}/OpenGL/res/models/backpack/ao.jpg (100%) rename {tests => MVS}/OpenGL/res/models/backpack/backpack.mtl (100%) rename {tests => MVS}/OpenGL/res/models/backpack/diffuse.jpg (100%) rename {tests => MVS}/OpenGL/res/models/backpack/normal.png (100%) rename {tests => MVS}/OpenGL/res/models/backpack/roughness.jpg (100%) rename {tests => MVS}/OpenGL/res/models/backpack/source_attribution.txt (100%) rename {tests => MVS}/OpenGL/res/models/backpack/specular.jpg (100%) create mode 100644 docs/api/XCEngine/Editor/UI/BuiltInIcons/BuiltInIcons.md create mode 100644 docs/api/XCEngine/Editor/UI/DividerChrome/DividerChrome.md create mode 100644 docs/api/XCEngine/Editor/UI/DockTabBarChrome/DockTabBarChrome.md create mode 100644 docs/api/XCEngine/Editor/UI/PropertyLayout/PropertyLayout.md create mode 100644 docs/api/XCEngine/Editor/UI/SplitterChrome/SplitterChrome.md create mode 100644 docs/api/XCEngine/Editor/UI/TreeView/TreeView.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/Vulkan.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanBuffer/VulkanBuffer.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/BeginRenderPass.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Clear.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/ClearDepthStencil.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/ClearRenderTarget.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Close.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/CopyResource.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Dispatch.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Draw.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/DrawIndexed.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Initialize.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Reset.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetComputeDescriptorSets.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetGraphicsDescriptorSets.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetIndexBuffer.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetPipelineState.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetRenderTargets.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetScissorRect.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetVertexBuffers.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetViewport.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/TransitionBarrier.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/VulkanCommandList.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/ExecuteCommandLists.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/GetCompletedValue.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/Initialize.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/Signal.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/VulkanCommandQueue.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/Wait.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/WaitForIdle.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanCommon/VulkanCommon.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDescriptorPool/VulkanDescriptorPool.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDescriptorSet/VulkanDescriptorSet.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateBuffer.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateCommandList.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateCommandQueue.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateDepthStencilView.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateDescriptorPool.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateDescriptorSet.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateFence.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateFramebuffer.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateIndexBufferView.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreatePipelineLayout.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreatePipelineState.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateRenderPass.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateRenderTargetView.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateSampler.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateShader.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateShaderResourceView.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateSwapChain.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateTexture.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateUnorderedAccessView.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateVertexBufferView.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/FindMemoryType.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/Initialize.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/Shutdown.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanDevice/VulkanDevice.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanFence/VulkanFence.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetColorAttachmentCount.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetColorAttachmentTexture.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetColorAttachmentView.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetDepthStencilTexture.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetDepthStencilView.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetFramebuffer.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetHeight.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetNativeHandle.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetRenderPass.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetWidth.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/Initialize.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/IsValid.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/Shutdown.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/VulkanFramebuffer.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/GetDesc.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/GetNativeHandle.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/GetPipelineLayout.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/Initialize.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/Shutdown.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/UsesSetLayouts.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/VulkanPipelineLayout.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Bind.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/EnsureValid.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetComputeShader.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetHash.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetNativeHandle.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetType.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/HasComputeShader.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Initialize.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/IsValid.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetBlendState.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetComputeShader.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetDepthStencilState.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetInputLayout.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetRasterizerState.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetRenderTargetFormats.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetSampleCount.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetTopology.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Shutdown.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Unbind.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/VulkanPipelineState.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetAttachmentCount.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetColorAttachmentCount.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetColorAttachments.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetDepthStencilAttachment.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetNativeHandle.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetRenderPass.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/HasDepthStencil.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/Initialize.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/Shutdown.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/VulkanRenderPass.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanResourceView/VulkanResourceView.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanSampler/VulkanSampler.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanScreenshot/VulkanScreenshot.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanShader/Compile.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanShader/CompileFromFile.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanShader/GetUniformInfo.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanShader/Shutdown.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanShader/VulkanShader.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanShaderCompiler/CompileVulkanShader.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanShaderCompiler/VulkanShaderCompiler.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/AcquireNextImage.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/GetCurrentBackBuffer.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/Initialize.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/Present.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/Resize.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/VulkanSwapChain.md create mode 100644 docs/api/XCEngine/RHI/Vulkan/VulkanTexture/VulkanTexture.md create mode 100644 docs/api/XCEngine/Rendering/CameraRenderRequest/CameraRenderRequest.md create mode 100644 docs/api/XCEngine/Rendering/CameraRenderRequest/IsValid.md create mode 100644 docs/api/XCEngine/Rendering/CameraRenderer/CameraRenderer.md create mode 100644 docs/api/XCEngine/Rendering/CameraRenderer/Constructor.md create mode 100644 docs/api/XCEngine/Rendering/CameraRenderer/Destructor.md create mode 100644 docs/api/XCEngine/Rendering/CameraRenderer/GetPipeline.md create mode 100644 docs/api/XCEngine/Rendering/CameraRenderer/Render.md create mode 100644 docs/api/XCEngine/Rendering/CameraRenderer/SetPipeline.md create mode 100644 docs/api/XCEngine/Rendering/RenderMaterialUtility/ApplyMaterialRenderState.md create mode 100644 docs/api/XCEngine/Rendering/RenderMaterialUtility/BuildBlendState.md create mode 100644 docs/api/XCEngine/Rendering/RenderMaterialUtility/BuildDepthStencilState.md create mode 100644 docs/api/XCEngine/Rendering/RenderMaterialUtility/BuildRasterizerState.md create mode 100644 docs/api/XCEngine/Rendering/RenderMaterialUtility/IsTransparentRenderQueue.md create mode 100644 docs/api/XCEngine/Rendering/RenderMaterialUtility/MatchesBuiltinPass.md create mode 100644 docs/api/XCEngine/Rendering/RenderMaterialUtility/RenderMaterialUtility.md create mode 100644 docs/api/XCEngine/Rendering/RenderMaterialUtility/ResolveMaterial.md create mode 100644 docs/api/XCEngine/Rendering/RenderMaterialUtility/ResolveMaterialRenderQueue.md create mode 100644 docs/api/_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md create mode 100644 docs/plan/Renderer模块设计与实现.md create mode 100644 docs/plan/Unity绝区零开发文档还原版.md rename docs/{issues => used}/C#脚本系统_Editor前置缺口.md (100%) rename docs/{plan => used}/D3D12后端测试设计.md (100%) rename docs/{plan => used}/Editor设计与实现.md (100%) rename docs/{plan => used}/OpenGL后端测试设计.md (100%) rename docs/{plan => used}/OpenGL测试实施计划.md (100%) rename docs/{issues => used}/RHI_OpenGL_State_Not_Applied.md (100%) rename docs/{plan => used}/RHI抽象层设计与实现.md (100%) create mode 100644 docs/used/Renderer模块_EditorViewport缺少RenderSurface接入层3.27.md create mode 100644 docs/used/Renderer模块_Material与Shader资产模型暂不满足SRP演进需求.md create mode 100644 docs/used/Renderer模块_Scene层缺少MeshFilter与MeshRenderer抽象3.27.md rename docs/{plan => used}/XCEngine渲染引擎架构设计.md (100%) rename docs/{plan => used}/XCGameEngine架构设计.md (100%) rename docs/{plan => used}/仿Unity RHI架构设计.md (100%) rename docs/{plan => used}/第三阶段计划.md (100%) rename docs/{plan => used}/第二阶段计划.md (100%) create mode 100644 editor/caidan.png create mode 100644 editor/color.png create mode 100644 editor/color_xc.png create mode 100644 editor/unity_grid.png delete mode 100644 imgui.ini create mode 100644 project/.xceditor/imgui_layout.ini rename tests/OpenGL/package/glm/glm/detail/func_trigonometric_simd.inl => project/Assets/NewFolder4/Models/Character.fbx (100%) create mode 100644 project/Assets/NewFolder4/Scenes/Main.unity create mode 100644 project/Assets/NewFolder4/Scenes/Main.xc create mode 100644 project/Assets/NewFolder4/Scenes/Untitled Scene.xc rename tests/OpenGL/package/glm/glm/ext/scalar_packing.inl => project/Assets/Scripts/Textures/Grass.png (100%) rename tests/OpenGL/package/glm/glm/ext/vector_packing.inl => project/Assets/Scripts/Textures/PlayerController.cs (100%) rename tests/OpenGL/package/glm/glm/gtc/quaternion_simd.inl => project/Assets/Scripts/Textures/Stone.png (100%) create mode 100644 project/Project.xcproject delete mode 100644 tests/OpenGL/AGENT.md delete mode 100644 tests/OpenGL/CMakeLists.txt delete mode 100644 tests/OpenGL/GT.ppm delete mode 100644 tests/OpenGL/README.md delete mode 100644 tests/OpenGL/Shaders/fragmentshader.glsl delete mode 100644 tests/OpenGL/Shaders/vertexshader.glsl delete mode 100644 tests/OpenGL/compare_ppm.py delete mode 100644 tests/OpenGL/main.cpp delete mode 100644 tests/OpenGL/package/README.txt delete mode 100644 tests/OpenGL/package/dll/assimp-vc143-mt.dll delete mode 100644 tests/OpenGL/package/glm/.appveyor.yml delete mode 100644 tests/OpenGL/package/glm/.gitignore delete mode 100644 tests/OpenGL/package/glm/.travis.yml delete mode 100644 tests/OpenGL/package/glm/CMakeLists.txt delete mode 100644 tests/OpenGL/package/glm/cmake/glm/glmConfig-version.cmake delete mode 100644 tests/OpenGL/package/glm/cmake/glm/glmConfig.cmake delete mode 100644 tests/OpenGL/package/glm/copying.txt delete mode 100644 tests/OpenGL/package/glm/doc/api/a00001_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00002_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00003_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00004_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00005_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00006_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00007.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00007_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00008.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00008_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00009.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00009_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00010.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00010_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00011.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00011_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00012.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00012_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00013.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00013_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00014.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00014_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00015.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00015_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00016.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00016_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00017.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00017_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00018.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00018_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00019_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00020_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00021.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00021_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00022.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00022_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00023.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00023_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00024.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00024_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00025.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00025_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00026.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00026_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00027.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00027_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00028.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00028_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00029.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00029_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00030.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00030_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00031.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00031_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00032.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00032_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00033.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00033_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00034.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00034_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00035_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00036.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00036_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00037.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00037_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00038.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00038_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00039.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00039_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00040.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00040_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00041.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00041_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00042.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00042_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00043.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00043_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00044.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00044_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00045.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00045_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00046.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00046_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00047_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00048.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00048_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00049.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00049_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00050.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00050_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00051.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00051_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00052.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00052_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00053.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00053_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00054.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00054_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00055.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00055_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00056.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00056_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00057.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00057_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00058.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00058_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00059.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00059_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00060.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00060_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00061.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00061_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00062.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00062_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00063.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00063_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00064.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00064_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00065.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00065_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00066.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00066_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00067.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00067_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00068.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00068_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00069.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00069_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00070.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00070_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00071.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00071_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00072.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00072_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00073.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00073_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00074.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00074_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00075.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00075_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00076.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00076_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00077.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00077_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00078.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00078_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00079.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00079_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00080.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00080_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00081.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00081_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00082.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00082_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00083.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00083_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00084.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00084_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00085.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00085_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00086.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00086_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00087.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00087_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00088.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00088_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00089.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00089_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00090.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00090_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00091.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00091_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00092.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00092_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00093.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00093_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00094.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00094_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00095_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00096.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00096_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00097.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00097_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00098.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00098_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00099.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00099_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00100.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00100_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00101.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00101_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00102.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00102_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00103.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00103_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00104.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00104_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00105.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00105_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00106.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00106_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00107.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00107_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00108.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00108_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00109.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00109_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00110.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00110_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00111.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00111_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00112.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00112_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00113.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00113_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00114.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00114_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00115.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00115_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00116.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00116_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00117.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00117_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00118.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00118_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00119.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00119_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00120.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00120_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00121.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00121_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00122.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00122_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00123.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00123_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00124_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00125.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00125_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00126.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00126_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00127.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00127_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00128.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00128_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00129.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00129_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00130.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00130_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00131.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00131_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00132.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00132_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00133.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00133_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00134.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00134_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00135.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00135_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00136.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00136_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00137.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00137_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00138.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00138_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00139.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00139_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00140.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00140_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00141.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00141_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00142.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00142_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00143.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00143_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00144.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00144_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00145.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00145_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00146.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00146_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00147.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00147_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00148.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00148_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00149.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00149_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00150.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00150_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00151.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00151_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00152.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00152_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00153_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00154.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00154_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00155.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00155_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00156.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00156_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00157.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00157_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00158.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00158_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00159.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00159_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00160.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00160_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00161.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00161_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00162.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00162_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00163_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00164_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00165.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00165_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00166.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00166_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00167.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00167_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00168.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00168_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00169.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00169_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00170.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00170_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00171.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00171_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00172.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00172_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00173.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00173_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00174.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00174_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00175.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00175_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00176.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00176_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00177.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00177_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00178.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00178_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00179.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00179_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00180.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00180_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00181.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00181_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00182.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00182_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00183.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00183_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00184.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00184_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00185.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00185_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00186.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00186_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00187.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00187_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00188.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00188_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00189.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00189_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00190.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00190_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00191.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00191_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00192.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00192_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00193.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00193_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00194.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00194_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00195.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00195_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00196.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00196_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00197.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00197_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00198.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00198_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00199.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00199_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00200.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00200_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00201.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00201_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00202.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00202_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00203.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00203_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00204.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00204_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00205.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00205_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00206.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00206_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00207.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00207_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00208.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00208_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00209.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00209_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00210.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00210_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00211.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00211_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00212.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00212_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00213.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00213_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00214.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00214_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00215.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00215_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00216.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00216_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00217.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00217_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00218.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00218_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00219.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00219_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00220.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00220_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00221.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00221_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00222.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00222_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00223.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00223_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00224.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00224_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00225.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00225_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00226.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00226_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00227.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00227_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00228.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00228_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00229.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00229_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00230.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00230_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00231.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00231_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00232.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00232_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00233.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00233_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00234.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00234_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00235.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00235_source.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00241.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00242.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00243.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00244.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00245.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00246.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00247.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00248.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00249.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00250.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00251.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00252.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00253.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00254.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00255.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00256.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00257.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00258.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00259.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00260.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00261.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00262.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00263.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00264.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00265.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00266.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00267.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00268.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00269.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00270.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00271.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00272.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00273.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00274.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00275.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00276.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00277.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00278.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00279.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00280.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00281.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00282.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00283.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00284.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00285.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00286.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00287.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00288.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00289.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00290.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00291.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00292.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00293.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00294.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00295.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00296.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00297.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00298.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00299.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00300.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00301.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00302.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00303.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00304.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00305.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00306.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00307.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00308.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00309.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00310.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00311.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00312.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00313.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00314.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00315.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00316.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00317.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00318.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00319.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00320.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00321.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00322.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00323.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00324.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00325.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00326.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00327.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00328.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00329.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00330.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00331.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00332.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00333.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00334.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00335.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00336.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00337.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00338.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00339.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00340.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00341.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00342.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00343.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00344.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00345.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00346.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00347.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00348.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00349.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00350.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00351.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00352.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00353.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00354.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00355.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00356.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00357.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00358.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00359.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00360.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00361.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00362.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00363.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00364.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00365.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00366.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00367.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00368.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00369.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00370.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00371.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00372.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00373.html delete mode 100644 tests/OpenGL/package/glm/doc/api/a00374.html delete mode 100644 tests/OpenGL/package/glm/doc/api/arrowdown.png delete mode 100644 tests/OpenGL/package/glm/doc/api/arrowright.png delete mode 100644 tests/OpenGL/package/glm/doc/api/bc_s.png delete mode 100644 tests/OpenGL/package/glm/doc/api/bdwn.png delete mode 100644 tests/OpenGL/package/glm/doc/api/closed.png delete mode 100644 tests/OpenGL/package/glm/doc/api/dir_033f5edb0915b828d2c46ed4804e5503.html delete mode 100644 tests/OpenGL/package/glm/doc/api/dir_3a581ba30d25676e4b797b1f96d53b45.html delete mode 100644 tests/OpenGL/package/glm/doc/api/dir_44e5e654415abd9ca6fdeaddaff8565e.html delete mode 100644 tests/OpenGL/package/glm/doc/api/dir_4c6bd29c73fa4e5a2509e1c15f846751.html delete mode 100644 tests/OpenGL/package/glm/doc/api/dir_5189610d3ba09ec39b766fb99b34cd93.html delete mode 100644 tests/OpenGL/package/glm/doc/api/dir_6b66465792d005310484819a0eb0b0d3.html delete mode 100644 tests/OpenGL/package/glm/doc/api/dir_9e5fe034a00e89334fd5186c3e7db156.html delete mode 100644 tests/OpenGL/package/glm/doc/api/dir_a8bee7be44182a33f3820393ae0b105d.html delete mode 100644 tests/OpenGL/package/glm/doc/api/dir_cef2d71d502cb69a9252bca2297d9549.html delete mode 100644 tests/OpenGL/package/glm/doc/api/dir_d9496f0844b48bc7e53b5af8c99b9ab2.html delete mode 100644 tests/OpenGL/package/glm/doc/api/dir_f35778ec600a1b9bbc4524e62e226aa2.html delete mode 100644 tests/OpenGL/package/glm/doc/api/doc.png delete mode 100644 tests/OpenGL/package/glm/doc/api/doxygen.css delete mode 100644 tests/OpenGL/package/glm/doc/api/doxygen.png delete mode 100644 tests/OpenGL/package/glm/doc/api/dynsections.js delete mode 100644 tests/OpenGL/package/glm/doc/api/files.html delete mode 100644 tests/OpenGL/package/glm/doc/api/folderclosed.png delete mode 100644 tests/OpenGL/package/glm/doc/api/folderopen.png delete mode 100644 tests/OpenGL/package/glm/doc/api/index.html delete mode 100644 tests/OpenGL/package/glm/doc/api/jquery.js delete mode 100644 tests/OpenGL/package/glm/doc/api/logo-mini.png delete mode 100644 tests/OpenGL/package/glm/doc/api/modules.html delete mode 100644 tests/OpenGL/package/glm/doc/api/nav_f.png delete mode 100644 tests/OpenGL/package/glm/doc/api/nav_g.png delete mode 100644 tests/OpenGL/package/glm/doc/api/nav_h.png delete mode 100644 tests/OpenGL/package/glm/doc/api/open.png delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_0.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_0.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_1.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_1.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_10.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_10.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_11.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_11.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_12.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_12.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_13.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_13.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_14.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_14.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_15.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_15.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_16.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_16.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_2.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_2.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_3.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_3.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_4.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_4.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_5.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_5.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_6.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_6.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_7.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_7.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_8.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_8.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_9.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_9.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_a.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_a.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_b.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_b.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_c.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_c.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_d.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_d.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_e.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_e.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_f.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/all_f.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/close.png delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_0.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_0.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_1.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_1.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_10.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_10.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_11.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_11.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_12.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_12.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_13.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_13.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_14.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_14.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_2.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_2.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_3.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_3.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_4.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_4.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_5.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_5.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_6.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_6.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_7.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_7.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_8.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_8.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_9.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_9.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_a.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_a.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_b.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_b.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_c.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_c.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_d.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_d.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_e.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_e.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_f.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/files_f.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_0.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_0.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_1.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_1.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_10.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_10.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_11.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_11.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_12.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_12.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_13.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_13.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_14.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_14.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_15.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_15.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_16.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_16.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_2.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_2.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_3.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_3.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_4.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_4.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_5.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_5.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_6.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_6.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_7.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_7.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_8.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_8.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_9.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_9.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_a.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_a.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_b.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_b.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_c.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_c.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_d.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_d.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_e.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_e.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_f.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/functions_f.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_0.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_0.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_1.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_1.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_2.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_2.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_3.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_3.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_4.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_4.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_5.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_5.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_6.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_6.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_7.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_7.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_8.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_8.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_9.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/groups_9.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/mag_sel.png delete mode 100644 tests/OpenGL/package/glm/doc/api/search/nomatches.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/pages_0.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/pages_0.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/search.css delete mode 100644 tests/OpenGL/package/glm/doc/api/search/search.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/search_l.png delete mode 100644 tests/OpenGL/package/glm/doc/api/search/search_m.png delete mode 100644 tests/OpenGL/package/glm/doc/api/search/search_r.png delete mode 100644 tests/OpenGL/package/glm/doc/api/search/searchdata.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_0.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_0.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_1.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_1.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_2.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_2.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_3.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_3.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_4.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_4.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_5.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_5.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_6.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_6.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_7.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_7.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_8.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_8.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_9.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_9.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_a.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_a.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_b.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_b.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_c.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_c.js delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_d.html delete mode 100644 tests/OpenGL/package/glm/doc/api/search/typedefs_d.js delete mode 100644 tests/OpenGL/package/glm/doc/api/splitbar.png delete mode 100644 tests/OpenGL/package/glm/doc/api/sync_off.png delete mode 100644 tests/OpenGL/package/glm/doc/api/sync_on.png delete mode 100644 tests/OpenGL/package/glm/doc/api/tab_a.png delete mode 100644 tests/OpenGL/package/glm/doc/api/tab_b.png delete mode 100644 tests/OpenGL/package/glm/doc/api/tab_h.png delete mode 100644 tests/OpenGL/package/glm/doc/api/tab_s.png delete mode 100644 tests/OpenGL/package/glm/doc/api/tabs.css delete mode 100644 tests/OpenGL/package/glm/doc/man.doxy delete mode 100644 tests/OpenGL/package/glm/doc/manual.pdf delete mode 100644 tests/OpenGL/package/glm/doc/manual/frontpage1.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/frontpage2.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/g-truc.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/logo-mini.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/noise-perlin1.jpg delete mode 100644 tests/OpenGL/package/glm/doc/manual/noise-perlin2.jpg delete mode 100644 tests/OpenGL/package/glm/doc/manual/noise-perlin3.jpg delete mode 100644 tests/OpenGL/package/glm/doc/manual/noise-perlin4.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/noise-perlin5.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/noise-perlin6.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/noise-simplex1.jpg delete mode 100644 tests/OpenGL/package/glm/doc/manual/noise-simplex2.jpg delete mode 100644 tests/OpenGL/package/glm/doc/manual/noise-simplex3.jpg delete mode 100644 tests/OpenGL/package/glm/doc/manual/random-ballrand.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/random-circularrand.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/random-diskrand.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/random-gaussrand.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/random-linearrand.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/random-sphericalrand.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/references-cinder.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/references-glsl4book.jpg delete mode 100644 tests/OpenGL/package/glm/doc/manual/references-leosfortune.jpeg delete mode 100644 tests/OpenGL/package/glm/doc/manual/references-leosfortune2.jpg delete mode 100644 tests/OpenGL/package/glm/doc/manual/references-opencloth1.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/references-opencloth3.png delete mode 100644 tests/OpenGL/package/glm/doc/manual/references-outerra1.jpg delete mode 100644 tests/OpenGL/package/glm/doc/manual/references-outerra2.jpg delete mode 100644 tests/OpenGL/package/glm/doc/manual/references-outerra3.jpg delete mode 100644 tests/OpenGL/package/glm/doc/manual/references-outerra4.jpg delete mode 100644 tests/OpenGL/package/glm/doc/theme/bc_s.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/bdwn.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/closed.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/doc.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/doxygen.css delete mode 100644 tests/OpenGL/package/glm/doc/theme/doxygen.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/folderclosed.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/folderopen.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/logo-mini.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/nav_f.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/nav_g.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/nav_h.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/open.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/splitbar.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/sync_off.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/sync_on.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/tab_a.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/tab_b.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/tab_h.png delete mode 100644 tests/OpenGL/package/glm/doc/theme/tab_s.png delete mode 100644 tests/OpenGL/package/glm/glm/CMakeLists.txt delete mode 100644 tests/OpenGL/package/glm/glm/common.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/_features.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/_fixes.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/_noise.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/_swizzle.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/_swizzle_func.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/_vectorize.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/compute_common.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/compute_vector_relational.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/func_common.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/func_common_simd.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/func_exponential.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/func_exponential_simd.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/func_geometric.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/func_geometric_simd.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/func_integer.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/func_integer_simd.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/func_matrix.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/func_matrix_simd.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/func_packing.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/func_packing_simd.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/func_trigonometric.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/func_vector_relational.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/func_vector_relational_simd.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/glm.cpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/qualifier.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/setup.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_float.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_half.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_half.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat2x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat2x2.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat2x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat2x3.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat2x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat2x4.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat3x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat3x2.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat3x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat3x3.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat3x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat3x4.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat4x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat4x2.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat4x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat4x3.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat4x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat4x4.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_mat4x4_simd.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_quat.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_quat.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_quat_simd.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_vec1.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_vec1.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_vec2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_vec2.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_vec3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_vec3.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_vec4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_vec4.inl delete mode 100644 tests/OpenGL/package/glm/glm/detail/type_vec4_simd.inl delete mode 100644 tests/OpenGL/package/glm/glm/exponential.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_clip_space.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_clip_space.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_common.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_common.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double2x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double2x2_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double2x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double2x3_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double2x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double2x4_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double3x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double3x2_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double3x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double3x3_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double3x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double3x4_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double4x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double4x2_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double4x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double4x3_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double4x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_double4x4_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float2x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float2x2_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float2x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float2x3_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float2x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float2x4_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float3x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float3x2_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float3x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float3x3_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float3x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float3x4_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float4x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float4x2_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float4x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float4x3_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float4x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_float4x4_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int2x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int2x2_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int2x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int2x3_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int2x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int2x4_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int3x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int3x2_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int3x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int3x3_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int3x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int3x4_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int4x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int4x2_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int4x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int4x3_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int4x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_int4x4_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_projection.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_projection.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_relational.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_relational.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_transform.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_transform.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint2x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint2x2_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint2x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint2x3_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint2x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint2x4_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint3x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint3x2_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint3x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint3x3_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint3x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint3x4_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint4x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint4x2_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint4x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint4x3_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint4x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/matrix_uint4x4_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_common.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_common.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_common_simd.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_double.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_double_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_exponential.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_exponential.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_float.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_float_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_geometric.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_geometric.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_relational.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_relational.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_transform.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_transform.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_trigonometric.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/quaternion_trigonometric.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/scalar_common.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/scalar_common.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/scalar_constants.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/scalar_constants.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/scalar_int_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/scalar_integer.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/scalar_integer.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/scalar_packing.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/scalar_relational.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/scalar_relational.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/scalar_uint_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/scalar_ulp.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/scalar_ulp.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_bool1.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_bool1_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_bool2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_bool2_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_bool3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_bool3_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_bool4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_bool4_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_common.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_common.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_double1.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_double1_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_double2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_double2_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_double3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_double3_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_double4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_double4_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_float1.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_float1_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_float2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_float2_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_float3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_float3_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_float4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_float4_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_int1.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_int1_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_int2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_int2_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_int3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_int3_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_int4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_int4_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_integer.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_integer.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_packing.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_relational.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_relational.inl delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_uint1.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_uint1_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_uint2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_uint2_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_uint3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_uint3_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_uint4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_uint4_sized.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_ulp.hpp delete mode 100644 tests/OpenGL/package/glm/glm/ext/vector_ulp.inl delete mode 100644 tests/OpenGL/package/glm/glm/fwd.hpp delete mode 100644 tests/OpenGL/package/glm/glm/geometric.hpp delete mode 100644 tests/OpenGL/package/glm/glm/glm.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/bitfield.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/bitfield.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/color_space.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/color_space.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/constants.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/constants.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/epsilon.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/epsilon.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/integer.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/integer.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/matrix_access.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/matrix_access.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/matrix_integer.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/matrix_inverse.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/matrix_inverse.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/matrix_transform.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/matrix_transform.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/noise.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/noise.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/packing.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/packing.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/quaternion.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/quaternion.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/random.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/random.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/reciprocal.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/reciprocal.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/round.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/round.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/type_aligned.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/type_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/type_precision.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/type_ptr.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/type_ptr.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/ulp.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtc/ulp.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtc/vec1.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/associated_min_max.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/associated_min_max.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/bit.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/bit.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/closest_point.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/closest_point.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/color_encoding.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/color_encoding.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/color_space.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/color_space.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/color_space_YCoCg.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/color_space_YCoCg.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/common.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/common.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/compatibility.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/compatibility.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/component_wise.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/component_wise.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/dual_quaternion.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/dual_quaternion.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/easing.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/easing.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/euler_angles.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/euler_angles.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/extend.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/extend.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/extended_min_max.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/extended_min_max.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/exterior_product.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/exterior_product.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/fast_exponential.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/fast_exponential.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/fast_square_root.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/fast_square_root.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/fast_trigonometry.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/fast_trigonometry.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/float_notmalize.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/functions.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/functions.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/gradient_paint.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/gradient_paint.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/handed_coordinate_space.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/handed_coordinate_space.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/hash.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/hash.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/integer.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/integer.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/intersect.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/intersect.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/io.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/io.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/log_base.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/log_base.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_cross_product.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_cross_product.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_decompose.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_decompose.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_factorisation.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_factorisation.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_interpolation.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_interpolation.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_major_storage.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_major_storage.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_operation.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_operation.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_query.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_query.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_transform_2d.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/matrix_transform_2d.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/mixed_product.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/mixed_product.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/norm.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/norm.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/normal.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/normal.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/normalize_dot.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/normalize_dot.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/number_precision.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/number_precision.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/optimum_pow.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/optimum_pow.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/orthonormalize.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/orthonormalize.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/perpendicular.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/perpendicular.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/polar_coordinates.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/polar_coordinates.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/projection.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/projection.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/quaternion.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/quaternion.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/range.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/raw_data.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/raw_data.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/rotate_normalized_axis.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/rotate_normalized_axis.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/rotate_vector.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/rotate_vector.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/scalar_multiplication.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/scalar_relational.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/scalar_relational.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/spline.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/spline.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/std_based_type.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/std_based_type.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/string_cast.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/string_cast.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/texture.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/texture.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/transform.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/transform.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/transform2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/transform2.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/type_aligned.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/type_aligned.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/type_trait.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/type_trait.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/vec_swizzle.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/vector_angle.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/vector_angle.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/vector_query.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/vector_query.inl delete mode 100644 tests/OpenGL/package/glm/glm/gtx/wrap.hpp delete mode 100644 tests/OpenGL/package/glm/glm/gtx/wrap.inl delete mode 100644 tests/OpenGL/package/glm/glm/integer.hpp delete mode 100644 tests/OpenGL/package/glm/glm/mat2x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/mat2x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/mat2x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/mat3x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/mat3x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/mat3x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/mat4x2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/mat4x3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/mat4x4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/matrix.hpp delete mode 100644 tests/OpenGL/package/glm/glm/packing.hpp delete mode 100644 tests/OpenGL/package/glm/glm/simd/common.h delete mode 100644 tests/OpenGL/package/glm/glm/simd/exponential.h delete mode 100644 tests/OpenGL/package/glm/glm/simd/geometric.h delete mode 100644 tests/OpenGL/package/glm/glm/simd/integer.h delete mode 100644 tests/OpenGL/package/glm/glm/simd/matrix.h delete mode 100644 tests/OpenGL/package/glm/glm/simd/neon.h delete mode 100644 tests/OpenGL/package/glm/glm/simd/packing.h delete mode 100644 tests/OpenGL/package/glm/glm/simd/platform.h delete mode 100644 tests/OpenGL/package/glm/glm/simd/trigonometric.h delete mode 100644 tests/OpenGL/package/glm/glm/simd/vector_relational.h delete mode 100644 tests/OpenGL/package/glm/glm/trigonometric.hpp delete mode 100644 tests/OpenGL/package/glm/glm/vec2.hpp delete mode 100644 tests/OpenGL/package/glm/glm/vec3.hpp delete mode 100644 tests/OpenGL/package/glm/glm/vec4.hpp delete mode 100644 tests/OpenGL/package/glm/glm/vector_relational.hpp delete mode 100644 tests/OpenGL/package/glm/manual.md delete mode 100644 tests/OpenGL/package/glm/readme.md delete mode 100644 tests/OpenGL/package/glm/test/CMakeLists.txt delete mode 100644 tests/OpenGL/package/glm/test/bug/CMakeLists.txt delete mode 100644 tests/OpenGL/package/glm/test/bug/bug_ms_vec_static.cpp delete mode 100644 tests/OpenGL/package/glm/test/cmake/CMakeLists.txt delete mode 100644 tests/OpenGL/package/glm/test/cmake/test_find_glm.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/CMakeLists.txt delete mode 100644 tests/OpenGL/package/glm/test/core/core_cpp_constexpr.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_cpp_defaulted_ctor.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_aligned_gentypes.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_arch_unknown.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_compiler_unknown.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_ctor_init.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_cxx03.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_cxx98.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_cxx_unknown.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_depth_zero_to_one.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_explicit_ctor.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_inline.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_left_handed.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_platform_unknown.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_pure.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_quat_wxyz.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_size_t_length.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_unrestricted_gentype.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_force_xyzw_only.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_func_common.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_func_exponential.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_func_geometric.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_func_integer.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_func_integer_bit_count.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_func_integer_find_lsb.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_func_integer_find_msb.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_func_matrix.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_func_noise.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_func_packing.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_func_swizzle.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_func_trigonometric.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_func_vector_relational.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_setup_force_cxx98.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_setup_force_size_t_length.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_setup_message.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_setup_platform_unknown.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_setup_precision.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_aligned.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_cast.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_ctor.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_int.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_length.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_mat2x2.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_mat2x3.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_mat2x4.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_mat3x2.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_mat3x3.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_mat3x4.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_mat4x2.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_mat4x3.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_mat4x4.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_vec1.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_vec2.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_vec3.cpp delete mode 100644 tests/OpenGL/package/glm/test/core/core_type_vec4.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/CMakeLists.txt delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_clip_space.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_common.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_int2x2_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_int2x3_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_int2x4_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_int3x2_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_int3x3_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_int3x4_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_int4x2_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_int4x3_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_int4x4_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_projection.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_relational.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_transform.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_uint2x2_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_uint2x3_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_uint2x4_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_uint3x2_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_uint3x3_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_uint3x4_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_uint4x2_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_uint4x3_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_matrix_uint4x4_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_quaternion_common.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_quaternion_exponential.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_quaternion_geometric.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_quaternion_relational.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_quaternion_transform.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_quaternion_trigonometric.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_quaternion_type.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_scalar_common.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_scalar_constants.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_scalar_int_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_scalar_integer.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_scalar_packing.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_scalar_relational.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_scalar_uint_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_scalar_ulp.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vec1.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_bool1.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_common.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_iec559.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_int1_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_int2_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_int3_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_int4_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_integer.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_integer_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_packing.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_relational.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_uint1_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_uint2_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_uint3_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_uint4_sized.cpp delete mode 100644 tests/OpenGL/package/glm/test/ext/ext_vector_ulp.cpp delete mode 100644 tests/OpenGL/package/glm/test/glm.cppcheck delete mode 100644 tests/OpenGL/package/glm/test/gtc/CMakeLists.txt delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_bitfield.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_color_space.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_constants.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_epsilon.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_integer.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_matrix_access.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_matrix_integer.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_matrix_inverse.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_matrix_transform.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_noise.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_packing.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_quaternion.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_random.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_reciprocal.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_round.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_type_aligned.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_type_precision.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_type_ptr.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_ulp.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_user_defined_types.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtc/gtc_vec1.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/CMakeLists.txt delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_associated_min_max.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_closest_point.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_color_encoding.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_color_space.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_color_space_YCoCg.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_common.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_compatibility.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_component_wise.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_dual_quaternion.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_easing.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_euler_angle.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_extend.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_extended_min_max.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_extented_min_max.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_exterior_product.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_fast_exponential.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_fast_square_root.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_fast_trigonometry.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_functions.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_gradient_paint.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_handed_coordinate_space.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_int_10_10_10_2.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_integer.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_intersect.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_io.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_load.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_log_base.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_matrix_cross_product.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_matrix_decompose.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_matrix_factorisation.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_matrix_interpolation.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_matrix_major_storage.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_matrix_operation.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_matrix_query.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_matrix_transform_2d.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_mixed_product.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_norm.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_normal.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_normalize_dot.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_number_precision.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_optimum_pow.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_orthonormalize.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_perpendicular.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_polar_coordinates.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_projection.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_quaternion.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_random.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_range.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_rotate_normalized_axis.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_rotate_vector.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_scalar_multiplication.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_scalar_relational.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_simd_mat4.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_simd_vec4.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_spline.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_string_cast.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_texture.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_type_aligned.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_type_trait.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_vec_swizzle.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_vector_angle.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_vector_query.cpp delete mode 100644 tests/OpenGL/package/glm/test/gtx/gtx_wrap.cpp delete mode 100644 tests/OpenGL/package/glm/test/perf/CMakeLists.txt delete mode 100644 tests/OpenGL/package/glm/test/perf/perf_matrix_div.cpp delete mode 100644 tests/OpenGL/package/glm/test/perf/perf_matrix_inverse.cpp delete mode 100644 tests/OpenGL/package/glm/test/perf/perf_matrix_mul.cpp delete mode 100644 tests/OpenGL/package/glm/test/perf/perf_matrix_mul_vector.cpp delete mode 100644 tests/OpenGL/package/glm/test/perf/perf_matrix_transpose.cpp delete mode 100644 tests/OpenGL/package/glm/test/perf/perf_vector_mul_matrix.cpp delete mode 100644 tests/OpenGL/package/glm/util/autoexp.txt delete mode 100644 tests/OpenGL/package/glm/util/autoexp.vc2010.dat delete mode 100644 tests/OpenGL/package/glm/util/glm.natvis delete mode 100644 tests/OpenGL/package/glm/util/usertype.dat delete mode 100644 tests/OpenGL/package/include/GLFW/glfw3.h delete mode 100644 tests/OpenGL/package/include/GLFW/glfw3native.h delete mode 100644 tests/OpenGL/package/include/KHR/khrplatform.h delete mode 100644 tests/OpenGL/package/include/assimp/.editorconfig delete mode 100644 tests/OpenGL/package/include/assimp/BaseImporter.h delete mode 100644 tests/OpenGL/package/include/assimp/Bitmap.h delete mode 100644 tests/OpenGL/package/include/assimp/BlobIOSystem.h delete mode 100644 tests/OpenGL/package/include/assimp/ByteSwapper.h delete mode 100644 tests/OpenGL/package/include/assimp/Compiler/poppack1.h delete mode 100644 tests/OpenGL/package/include/assimp/Compiler/pstdint.h delete mode 100644 tests/OpenGL/package/include/assimp/Compiler/pushpack1.h delete mode 100644 tests/OpenGL/package/include/assimp/CreateAnimMesh.h delete mode 100644 tests/OpenGL/package/include/assimp/DefaultIOStream.h delete mode 100644 tests/OpenGL/package/include/assimp/DefaultIOSystem.h delete mode 100644 tests/OpenGL/package/include/assimp/DefaultLogger.hpp delete mode 100644 tests/OpenGL/package/include/assimp/Defines.h delete mode 100644 tests/OpenGL/package/include/assimp/Exceptional.h delete mode 100644 tests/OpenGL/package/include/assimp/Exporter.hpp delete mode 100644 tests/OpenGL/package/include/assimp/GenericProperty.h delete mode 100644 tests/OpenGL/package/include/assimp/Hash.h delete mode 100644 tests/OpenGL/package/include/assimp/IOStream.hpp delete mode 100644 tests/OpenGL/package/include/assimp/IOStreamBuffer.h delete mode 100644 tests/OpenGL/package/include/assimp/IOSystem.hpp delete mode 100644 tests/OpenGL/package/include/assimp/Importer.hpp delete mode 100644 tests/OpenGL/package/include/assimp/LineSplitter.h delete mode 100644 tests/OpenGL/package/include/assimp/LogAux.h delete mode 100644 tests/OpenGL/package/include/assimp/LogStream.hpp delete mode 100644 tests/OpenGL/package/include/assimp/Logger.hpp delete mode 100644 tests/OpenGL/package/include/assimp/Macros.h delete mode 100644 tests/OpenGL/package/include/assimp/MathFunctions.h delete mode 100644 tests/OpenGL/package/include/assimp/MemoryIOWrapper.h delete mode 100644 tests/OpenGL/package/include/assimp/NullLogger.hpp delete mode 100644 tests/OpenGL/package/include/assimp/ParsingUtils.h delete mode 100644 tests/OpenGL/package/include/assimp/Profiler.h delete mode 100644 tests/OpenGL/package/include/assimp/ProgressHandler.hpp delete mode 100644 tests/OpenGL/package/include/assimp/RemoveComments.h delete mode 100644 tests/OpenGL/package/include/assimp/SGSpatialSort.h delete mode 100644 tests/OpenGL/package/include/assimp/SceneCombiner.h delete mode 100644 tests/OpenGL/package/include/assimp/SkeletonMeshBuilder.h delete mode 100644 tests/OpenGL/package/include/assimp/SmoothingGroups.h delete mode 100644 tests/OpenGL/package/include/assimp/SmoothingGroups.inl delete mode 100644 tests/OpenGL/package/include/assimp/SpatialSort.h delete mode 100644 tests/OpenGL/package/include/assimp/StandardShapes.h delete mode 100644 tests/OpenGL/package/include/assimp/StreamReader.h delete mode 100644 tests/OpenGL/package/include/assimp/StreamWriter.h delete mode 100644 tests/OpenGL/package/include/assimp/StringComparison.h delete mode 100644 tests/OpenGL/package/include/assimp/StringUtils.h delete mode 100644 tests/OpenGL/package/include/assimp/Subdivision.h delete mode 100644 tests/OpenGL/package/include/assimp/TinyFormatter.h delete mode 100644 tests/OpenGL/package/include/assimp/Vertex.h delete mode 100644 tests/OpenGL/package/include/assimp/XMLTools.h delete mode 100644 tests/OpenGL/package/include/assimp/ZipArchiveIOSystem.h delete mode 100644 tests/OpenGL/package/include/assimp/aabb.h delete mode 100644 tests/OpenGL/package/include/assimp/ai_assert.h delete mode 100644 tests/OpenGL/package/include/assimp/anim.h delete mode 100644 tests/OpenGL/package/include/assimp/camera.h delete mode 100644 tests/OpenGL/package/include/assimp/cexport.h delete mode 100644 tests/OpenGL/package/include/assimp/cfileio.h delete mode 100644 tests/OpenGL/package/include/assimp/cimport.h delete mode 100644 tests/OpenGL/package/include/assimp/color4.h delete mode 100644 tests/OpenGL/package/include/assimp/color4.inl delete mode 100644 tests/OpenGL/package/include/assimp/config.h delete mode 100644 tests/OpenGL/package/include/assimp/config.h.in delete mode 100644 tests/OpenGL/package/include/assimp/defs.h delete mode 100644 tests/OpenGL/package/include/assimp/fast_atof.h delete mode 100644 tests/OpenGL/package/include/assimp/importerdesc.h delete mode 100644 tests/OpenGL/package/include/assimp/irrXMLWrapper.h delete mode 100644 tests/OpenGL/package/include/assimp/light.h delete mode 100644 tests/OpenGL/package/include/assimp/material.h delete mode 100644 tests/OpenGL/package/include/assimp/material.inl delete mode 100644 tests/OpenGL/package/include/assimp/matrix3x3.h delete mode 100644 tests/OpenGL/package/include/assimp/matrix3x3.inl delete mode 100644 tests/OpenGL/package/include/assimp/matrix4x4.h delete mode 100644 tests/OpenGL/package/include/assimp/matrix4x4.inl delete mode 100644 tests/OpenGL/package/include/assimp/mesh.h delete mode 100644 tests/OpenGL/package/include/assimp/metadata.h delete mode 100644 tests/OpenGL/package/include/assimp/pbrmaterial.h delete mode 100644 tests/OpenGL/package/include/assimp/port/AndroidJNI/AndroidJNIIOSystem.h delete mode 100644 tests/OpenGL/package/include/assimp/postprocess.h delete mode 100644 tests/OpenGL/package/include/assimp/qnan.h delete mode 100644 tests/OpenGL/package/include/assimp/quaternion.h delete mode 100644 tests/OpenGL/package/include/assimp/quaternion.inl delete mode 100644 tests/OpenGL/package/include/assimp/scene.h delete mode 100644 tests/OpenGL/package/include/assimp/texture.h delete mode 100644 tests/OpenGL/package/include/assimp/types.h delete mode 100644 tests/OpenGL/package/include/assimp/vector2.h delete mode 100644 tests/OpenGL/package/include/assimp/vector2.inl delete mode 100644 tests/OpenGL/package/include/assimp/vector3.h delete mode 100644 tests/OpenGL/package/include/assimp/vector3.inl delete mode 100644 tests/OpenGL/package/include/assimp/version.h delete mode 100644 tests/OpenGL/package/include/glad/glad.h delete mode 100644 tests/OpenGL/package/include/stb_image.h delete mode 100644 tests/OpenGL/package/lib/assimp-vc143-mt.lib delete mode 100644 tests/OpenGL/package/lib/glfw3.lib delete mode 100644 tests/OpenGL/package/src/glad.c delete mode 100644 tests/OpenGL/run.bat delete mode 100644 tests/containers/CMakeLists.txt create mode 100644 tests/core/Containers/CMakeLists.txt rename tests/{containers => core/Containers}/test_array.cpp (100%) rename tests/{containers => core/Containers}/test_hashmap.cpp (100%) rename tests/{containers => core/Containers}/test_string.cpp (100%) create mode 100644 tests/core/Math/CMakeLists.txt rename tests/{math => core/Math}/test_geometry.cpp (100%) rename tests/{math => core/Math}/test_matrix.cpp (100%) rename tests/{math => core/Math}/test_quaternion.cpp (90%) rename tests/{math => core/Math}/test_vector.cpp (100%) delete mode 100644 tests/math/CMakeLists.txt create mode 100644 参考/TransformGizmo/Resources.meta create mode 100644 参考/TransformGizmo/Resources/Materials.meta create mode 100644 参考/TransformGizmo/Resources/Materials/Blue.mat create mode 100644 参考/TransformGizmo/Resources/Materials/Blue.mat.meta create mode 100644 参考/TransformGizmo/Resources/Materials/Gray.mat create mode 100644 参考/TransformGizmo/Resources/Materials/Gray.mat.meta create mode 100644 参考/TransformGizmo/Resources/Materials/Green.mat create mode 100644 参考/TransformGizmo/Resources/Materials/Green.mat.meta create mode 100644 参考/TransformGizmo/Resources/Materials/Orange.mat create mode 100644 参考/TransformGizmo/Resources/Materials/Orange.mat.meta create mode 100644 参考/TransformGizmo/Resources/Materials/Red.mat create mode 100644 参考/TransformGizmo/Resources/Materials/Red.mat.meta create mode 100644 参考/TransformGizmo/Resources/Materials/RotateBlue.mat create mode 100644 参考/TransformGizmo/Resources/Materials/RotateBlue.mat.meta create mode 100644 参考/TransformGizmo/Resources/Materials/RotateGreen.mat create mode 100644 参考/TransformGizmo/Resources/Materials/RotateGreen.mat.meta create mode 100644 参考/TransformGizmo/Resources/Materials/RotateRed.mat create mode 100644 参考/TransformGizmo/Resources/Materials/RotateRed.mat.meta create mode 100644 参考/TransformGizmo/Resources/Materials/Sphere.mat create mode 100644 参考/TransformGizmo/Resources/Materials/Sphere.mat.meta create mode 100644 参考/TransformGizmo/Resources/Materials/White.mat create mode 100644 参考/TransformGizmo/Resources/Materials/White.mat.meta create mode 100644 参考/TransformGizmo/Resources/Materials/Yellow.mat create mode 100644 参考/TransformGizmo/Resources/Materials/Yellow.mat.meta create mode 100644 参考/TransformGizmo/Resources/Models.meta create mode 100644 参考/TransformGizmo/Resources/Models/Arrow_Rotate.fbx create mode 100644 参考/TransformGizmo/Resources/Models/Arrow_Rotate.fbx.meta create mode 100644 参考/TransformGizmo/Resources/Models/Arrow_Scale.fbx create mode 100644 参考/TransformGizmo/Resources/Models/Arrow_Scale.fbx.meta create mode 100644 参考/TransformGizmo/Resources/Models/Arrow_Translate.fbx create mode 100644 参考/TransformGizmo/Resources/Models/Arrow_Translate.fbx.meta create mode 100644 参考/TransformGizmo/Resources/Models/CircularCone.obj.meta create mode 100644 参考/TransformGizmo/Resources/Models/RotatePlane.obj.meta create mode 100644 参考/TransformGizmo/Resources/Models/RotatePlaneDetect.obj.meta create mode 100644 参考/TransformGizmo/Resources/Models/RotateXYZ.obj.meta create mode 100644 参考/TransformGizmo/Resources/Models/RotateXYZDetect.obj.meta create mode 100644 参考/TransformGizmo/Resources/Prefabs.meta create mode 100644 参考/TransformGizmo/Resources/Prefabs/RotateGizmo.prefab create mode 100644 参考/TransformGizmo/Resources/Prefabs/RotateGizmo.prefab.meta create mode 100644 参考/TransformGizmo/Resources/Prefabs/TranslateGizmo.prefab create mode 100644 参考/TransformGizmo/Resources/Prefabs/TranslateGizmo.prefab.meta create mode 100644 参考/TransformGizmo/Resources/Shaders.meta create mode 100644 参考/TransformGizmo/Resources/Shaders/GizmoSelectEncode.shader create mode 100644 参考/TransformGizmo/Resources/Shaders/GizmoSelectEncode.shader.meta create mode 100644 参考/TransformGizmo/Resources/Shaders/NormalGizmo.shader create mode 100644 参考/TransformGizmo/Resources/Shaders/NormalGizmo.shader.meta create mode 100644 参考/TransformGizmo/Resources/Shaders/ObjectSelectEncode.shader create mode 100644 参考/TransformGizmo/Resources/Shaders/ObjectSelectEncode.shader.meta create mode 100644 参考/TransformGizmo/Resources/Shaders/Outline.shader create mode 100644 参考/TransformGizmo/Resources/Shaders/Outline.shader.meta create mode 100644 参考/TransformGizmo/Resources/Shaders/RotateXYZGizmo.shader create mode 100644 参考/TransformGizmo/Resources/Shaders/RotateXYZGizmo.shader.meta create mode 100644 参考/TransformGizmo/Resources/Shaders/SphereGizmo.shader create mode 100644 参考/TransformGizmo/Resources/Shaders/SphereGizmo.shader.meta create mode 100644 参考/TransformGizmo/Scripts.meta create mode 100644 参考/TransformGizmo/Scripts/DirectController.cs create mode 100644 参考/TransformGizmo/Scripts/DirectController.cs.meta create mode 100644 参考/TransformGizmo/Scripts/RuntimeGizmo.cs create mode 100644 参考/TransformGizmo/Scripts/RuntimeGizmo.cs.meta create mode 100644 参考/TransformGizmo/Scripts/RuntimeRotateGizmo.cs create mode 100644 参考/TransformGizmo/Scripts/RuntimeRotateGizmo.cs.meta create mode 100644 参考/TransformGizmo/Scripts/RuntimeTransformGizmo.cs create mode 100644 参考/TransformGizmo/Scripts/RuntimeTransformGizmo.cs.meta create mode 100644 参考/TransformGizmo/Scripts/RuntimeTranslateGizmo.cs create mode 100644 参考/TransformGizmo/Scripts/RuntimeTranslateGizmo.cs.meta create mode 100644 参考/TransformGizmo/Scripts/SelectDetector.cs create mode 100644 参考/TransformGizmo/Scripts/SelectDetector.cs.meta create mode 100644 参考/TransformGizmo/Test.meta create mode 100644 参考/TransformGizmo/Test/New Material.mat create mode 100644 参考/TransformGizmo/Test/New Material.mat.meta create mode 100644 参考/TransformGizmo/Test/Test.cs create mode 100644 参考/TransformGizmo/Test/Test.cs.meta create mode 100644 参考/TransformGizmo/Test/Test.unity create mode 100644 参考/TransformGizmo/Test/Test.unity.meta create mode 100644 参考/unity-editor-icons/.gitignore create mode 100644 参考/unity-editor-icons/Assets/Editor.meta create mode 100644 参考/unity-editor-icons/Assets/Editor/IconMiner.cs create mode 100644 参考/unity-editor-icons/Assets/Editor/IconMiner.cs.meta create mode 100644 参考/unity-editor-icons/Packages/manifest.json create mode 100644 参考/unity-editor-icons/Packages/packages-lock.json create mode 100644 参考/unity-editor-icons/ProjectSettings/AudioManager.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/ClusterInputManager.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/DynamicsManager.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/EditorBuildSettings.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/EditorSettings.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/GraphicsSettings.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/InputManager.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/NavMeshAreas.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/NetworkManager.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/Physics2DSettings.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/PresetManager.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/ProjectSettings.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/ProjectVersion.txt create mode 100644 参考/unity-editor-icons/ProjectSettings/QualitySettings.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/TagManager.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/TimeManager.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/UnityConnectSettings.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/VFXManager.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/VersionControlSettings.asset create mode 100644 参考/unity-editor-icons/ProjectSettings/XRSettings.asset create mode 100644 参考/unity-editor-icons/README.md create mode 100644 参考/unity-editor-icons/UserSettings/EditorUserSettings.asset create mode 100644 参考/unity-editor-icons/icons/small/AlphabeticalSorting.png create mode 100644 参考/unity-editor-icons/icons/small/AlphabeticalSorting@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Animation.AddEvent.png create mode 100644 参考/unity-editor-icons/icons/small/Animation.AddKeyframe.png create mode 100644 参考/unity-editor-icons/icons/small/Animation.EventMarker.png create mode 100644 参考/unity-editor-icons/icons/small/Animation.FilterBySelection.png create mode 100644 参考/unity-editor-icons/icons/small/Animation.FirstKey.png create mode 100644 参考/unity-editor-icons/icons/small/Animation.LastKey.png create mode 100644 参考/unity-editor-icons/icons/small/Animation.NextKey.png create mode 100644 参考/unity-editor-icons/icons/small/Animation.Play.png create mode 100644 参考/unity-editor-icons/icons/small/Animation.PrevKey.png create mode 100644 参考/unity-editor-icons/icons/small/Animation.Record.png create mode 100644 参考/unity-editor-icons/icons/small/Animation.Record@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Animation.SequencerLink.png create mode 100644 参考/unity-editor-icons/icons/small/AnimationWrapModeMenu.png create mode 100644 参考/unity-editor-icons/icons/small/AssemblyLock.png create mode 100644 参考/unity-editor-icons/icons/small/Asset Store.png create mode 100644 参考/unity-editor-icons/icons/small/Asset Store@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Audio Mixer.png create mode 100644 参考/unity-editor-icons/icons/small/Audio Mixer@2x.png create mode 100644 参考/unity-editor-icons/icons/small/AutoLightbakingOff.png create mode 100644 参考/unity-editor-icons/icons/small/AutoLightbakingOff@2x.png create mode 100644 参考/unity-editor-icons/icons/small/AutoLightbakingOn.png create mode 100644 参考/unity-editor-icons/icons/small/AutoLightbakingOn@2x.png create mode 100644 参考/unity-editor-icons/icons/small/AvatarCompass.png create mode 100644 参考/unity-editor-icons/icons/small/AvatarController.Layer.png create mode 100644 参考/unity-editor-icons/icons/small/AvatarController.LayerHover.png create mode 100644 参考/unity-editor-icons/icons/small/AvatarController.LayerSelected.png create mode 100644 参考/unity-editor-icons/icons/small/AvatarPivot.png create mode 100644 参考/unity-editor-icons/icons/small/AvatarPivot@2x.png create mode 100644 参考/unity-editor-icons/icons/small/AvatarSelector.png create mode 100644 参考/unity-editor-icons/icons/small/AvatarSelector@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Android On.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Android On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Android.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Android.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Android.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Android@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Broadcom.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Editor.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Editor.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Facebook On.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Facebook On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Facebook.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Facebook.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Facebook.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Facebook@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.FlashPlayer.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.FlashPlayer.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Lumin On.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Lumin On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Lumin.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Lumin.small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Lumin.small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Lumin@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Metro On.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Metro On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Metro.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Metro.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Metro.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Metro@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.N3DS On.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.N3DS On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.N3DS.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.N3DS.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.N3DS.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.N3DS@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.PS4 On.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.PS4 On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.PS4.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.PS4.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.PS4.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.PS4@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.PSM.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.PSM.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.PSP2.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.PSP2.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.SelectedIcon.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Stadia On.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Stadia On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Stadia.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Stadia.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Stadia.small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Stadia@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Standalone On.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Standalone On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Standalone.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Standalone.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Standalone.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Standalone@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.StandaloneBroadcom.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.StandaloneGLES20Emu.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.StandaloneGLESEmu.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.StandaloneGLESEmu.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Switch On.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Switch On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Switch.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Switch.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Switch.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Switch@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.WP8.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.WP8.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Web.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Web.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.WebGL On.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.WebGL On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.WebGL.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.WebGL.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.WebGL.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.WebGL@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Xbox360.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.Xbox360.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.XboxOne On.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.XboxOne On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.XboxOne.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.XboxOne.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.XboxOne.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.XboxOne@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.iPhone On.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.iPhone On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.iPhone.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.iPhone.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.iPhone.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.iPhone@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.tvOS On.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.tvOS On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.tvOS.Small.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.tvOS.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.tvOS.png create mode 100644 参考/unity-editor-icons/icons/small/BuildSettings.tvOS@2x.png create mode 100644 参考/unity-editor-icons/icons/small/CacheServerConnected.png create mode 100644 参考/unity-editor-icons/icons/small/CacheServerConnected@2x.png create mode 100644 参考/unity-editor-icons/icons/small/CacheServerDisabled.png create mode 100644 参考/unity-editor-icons/icons/small/CacheServerDisabled@2x.png create mode 100644 参考/unity-editor-icons/icons/small/CacheServerDisconnected.png create mode 100644 参考/unity-editor-icons/icons/small/CacheServerDisconnected@2x.png create mode 100644 参考/unity-editor-icons/icons/small/CheckerFloor.png create mode 100644 参考/unity-editor-icons/icons/small/Clipboard.png create mode 100644 参考/unity-editor-icons/icons/small/ClothInspector.PaintTool.png create mode 100644 参考/unity-editor-icons/icons/small/ClothInspector.PaintValue.png create mode 100644 参考/unity-editor-icons/icons/small/ClothInspector.SelectTool.png create mode 100644 参考/unity-editor-icons/icons/small/ClothInspector.SettingsTool.png create mode 100644 参考/unity-editor-icons/icons/small/ClothInspector.ViewValue.png create mode 100644 参考/unity-editor-icons/icons/small/CloudConnect.png create mode 100644 参考/unity-editor-icons/icons/small/CloudConnect@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.Build.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.BuildFailed.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.BuildSucceeded.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.FileAdded.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.FileConflict.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.FileDeleted.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.FileIgnored.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.FileMoved.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.FileUpdated.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.FolderAdded.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.FolderConflict.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.FolderDeleted.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.FolderIgnored.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.FolderMoved.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.FolderUpdated.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.NoInternet.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.Warning.png create mode 100644 参考/unity-editor-icons/icons/small/Collab.png create mode 100644 参考/unity-editor-icons/icons/small/Collab@2x.png create mode 100644 参考/unity-editor-icons/icons/small/CollabConflict.png create mode 100644 参考/unity-editor-icons/icons/small/CollabError.png create mode 100644 参考/unity-editor-icons/icons/small/CollabNew.png create mode 100644 参考/unity-editor-icons/icons/small/CollabOffline.png create mode 100644 参考/unity-editor-icons/icons/small/CollabProgress.png create mode 100644 参考/unity-editor-icons/icons/small/CollabPull.png create mode 100644 参考/unity-editor-icons/icons/small/CollabPush.png create mode 100644 参考/unity-editor-icons/icons/small/ColorPicker.ColorCycle.png create mode 100644 参考/unity-editor-icons/icons/small/ColorPicker.CycleColor.png create mode 100644 参考/unity-editor-icons/icons/small/ColorPicker.CycleSlider.png create mode 100644 参考/unity-editor-icons/icons/small/ColorPicker.SliderCycle.png create mode 100644 参考/unity-editor-icons/icons/small/CreateAddNew.png create mode 100644 参考/unity-editor-icons/icons/small/CreateAddNew@2x.png create mode 100644 参考/unity-editor-icons/icons/small/CrossIcon.png create mode 100644 参考/unity-editor-icons/icons/small/CustomSorting.png create mode 100644 参考/unity-editor-icons/icons/small/CustomTool.png create mode 100644 参考/unity-editor-icons/icons/small/CustomTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/DebuggerAttached.png create mode 100644 参考/unity-editor-icons/icons/small/DebuggerAttached@2x.png create mode 100644 参考/unity-editor-icons/icons/small/DebuggerDisabled.png create mode 100644 参考/unity-editor-icons/icons/small/DebuggerDisabled@2x.png create mode 100644 参考/unity-editor-icons/icons/small/DebuggerEnabled.png create mode 100644 参考/unity-editor-icons/icons/small/DebuggerEnabled@2x.png create mode 100644 参考/unity-editor-icons/icons/small/DefaultSorting.png create mode 100644 参考/unity-editor-icons/icons/small/DefaultSorting@2x.png create mode 100644 参考/unity-editor-icons/icons/small/EditCollider.png create mode 100644 参考/unity-editor-icons/icons/small/Exposure.png create mode 100644 参考/unity-editor-icons/icons/small/Exposure@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Favorite.png create mode 100644 参考/unity-editor-icons/icons/small/Favorite@2x.png create mode 100644 参考/unity-editor-icons/icons/small/FilterByLabel.png create mode 100644 参考/unity-editor-icons/icons/small/FilterByLabel@2x.png create mode 100644 参考/unity-editor-icons/icons/small/FilterByType.png create mode 100644 参考/unity-editor-icons/icons/small/FilterByType@2x.png create mode 100644 参考/unity-editor-icons/icons/small/FilterSelectedOnly.png create mode 100644 参考/unity-editor-icons/icons/small/FilterSelectedOnly@2x.png create mode 100644 参考/unity-editor-icons/icons/small/FrameCapture.png create mode 100644 参考/unity-editor-icons/icons/small/FrameCapture@2x.png create mode 100644 参考/unity-editor-icons/icons/small/GEAR.png create mode 100644 参考/unity-editor-icons/icons/small/Grid.BoxTool.png create mode 100644 参考/unity-editor-icons/icons/small/Grid.BoxTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Grid.Default.png create mode 100644 参考/unity-editor-icons/icons/small/Grid.Default@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Grid.EraserTool.png create mode 100644 参考/unity-editor-icons/icons/small/Grid.EraserTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Grid.FillTool.png create mode 100644 参考/unity-editor-icons/icons/small/Grid.FillTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Grid.MoveTool.png create mode 100644 参考/unity-editor-icons/icons/small/Grid.MoveTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Grid.PaintTool.png create mode 100644 参考/unity-editor-icons/icons/small/Grid.PaintTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Grid.PickingTool.png create mode 100644 参考/unity-editor-icons/icons/small/Grid.PickingTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Groove.png create mode 100644 参考/unity-editor-icons/icons/small/HorizontalSplit.png create mode 100644 参考/unity-editor-icons/icons/small/Import.png create mode 100644 参考/unity-editor-icons/icons/small/Import@2x.png create mode 100644 参考/unity-editor-icons/icons/small/InspectorLock.png create mode 100644 参考/unity-editor-icons/icons/small/Invalid.png create mode 100644 参考/unity-editor-icons/icons/small/Invalid@2x.png create mode 100644 参考/unity-editor-icons/icons/small/JointAngularLimits.png create mode 100644 参考/unity-editor-icons/icons/small/KnobCShape.png create mode 100644 参考/unity-editor-icons/icons/small/KnobCShapeMini.png create mode 100644 参考/unity-editor-icons/icons/small/Lighting.png create mode 100644 参考/unity-editor-icons/icons/small/Lighting@2x.png create mode 100644 参考/unity-editor-icons/icons/small/LightmapEditor.WindowTitle.png create mode 100644 参考/unity-editor-icons/icons/small/LightmapEditor.WindowTitle@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Lightmapping.png create mode 100644 参考/unity-editor-icons/icons/small/Linked.png create mode 100644 参考/unity-editor-icons/icons/small/Linked@2x.png create mode 100644 参考/unity-editor-icons/icons/small/LockIcon-On.png create mode 100644 参考/unity-editor-icons/icons/small/LockIcon.png create mode 100644 参考/unity-editor-icons/icons/small/MainStageView.png create mode 100644 参考/unity-editor-icons/icons/small/MainStageView@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Mirror.png create mode 100644 参考/unity-editor-icons/icons/small/MoreOptions.png create mode 100644 参考/unity-editor-icons/icons/small/MoreOptions@2x.png create mode 100644 参考/unity-editor-icons/icons/small/MoveTool On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/MoveTool on.png create mode 100644 参考/unity-editor-icons/icons/small/MoveTool.png create mode 100644 参考/unity-editor-icons/icons/small/MoveTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Navigation.png create mode 100644 参考/unity-editor-icons/icons/small/Occlusion.png create mode 100644 参考/unity-editor-icons/icons/small/Occlusion@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Package Manager.png create mode 100644 参考/unity-editor-icons/icons/small/Package Manager@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PackageBadgeDelete.png create mode 100644 参考/unity-editor-icons/icons/small/PackageBadgeNew.png create mode 100644 参考/unity-editor-icons/icons/small/Particle Effect.png create mode 100644 参考/unity-editor-icons/icons/small/ParticleShapeTool On.png create mode 100644 参考/unity-editor-icons/icons/small/ParticleShapeTool On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/ParticleShapeTool On@3x.png create mode 100644 参考/unity-editor-icons/icons/small/ParticleShapeTool On@4x.png create mode 100644 参考/unity-editor-icons/icons/small/ParticleShapeTool.png create mode 100644 参考/unity-editor-icons/icons/small/ParticleShapeTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/ParticleShapeTool@3x.png create mode 100644 参考/unity-editor-icons/icons/small/ParticleShapeTool@4x.png create mode 100644 参考/unity-editor-icons/icons/small/PauseButton On.png create mode 100644 参考/unity-editor-icons/icons/small/PauseButton On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PauseButton.png create mode 100644 参考/unity-editor-icons/icons/small/PauseButton@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PlayButton On.png create mode 100644 参考/unity-editor-icons/icons/small/PlayButton On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PlayButton.png create mode 100644 参考/unity-editor-icons/icons/small/PlayButton@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PlayButtonProfile On.png create mode 100644 参考/unity-editor-icons/icons/small/PlayButtonProfile.png create mode 100644 参考/unity-editor-icons/icons/small/PreMatCube.png create mode 100644 参考/unity-editor-icons/icons/small/PreMatCube@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PreMatCylinder.png create mode 100644 参考/unity-editor-icons/icons/small/PreMatCylinder@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PreMatLight0.png create mode 100644 参考/unity-editor-icons/icons/small/PreMatLight0@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PreMatLight1.png create mode 100644 参考/unity-editor-icons/icons/small/PreMatLight1@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PreMatQuad.png create mode 100644 参考/unity-editor-icons/icons/small/PreMatQuad@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PreMatSphere.png create mode 100644 参考/unity-editor-icons/icons/small/PreMatSphere@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PreMatTorus.png create mode 100644 参考/unity-editor-icons/icons/small/PreMatTorus@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PreTexA.png create mode 100644 参考/unity-editor-icons/icons/small/PreTexA@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PreTexB.png create mode 100644 参考/unity-editor-icons/icons/small/PreTexB@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PreTexG.png create mode 100644 参考/unity-editor-icons/icons/small/PreTexG@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PreTexR.png create mode 100644 参考/unity-editor-icons/icons/small/PreTexR@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PreTexRGB.png create mode 100644 参考/unity-editor-icons/icons/small/PreTexRGB@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PreTextureAlpha.png create mode 100644 参考/unity-editor-icons/icons/small/PreTextureArrayFirstSlice.png create mode 100644 参考/unity-editor-icons/icons/small/PreTextureArrayLastSlice.png create mode 100644 参考/unity-editor-icons/icons/small/PreTextureMipMapHigh.png create mode 100644 参考/unity-editor-icons/icons/small/PreTextureMipMapLow.png create mode 100644 参考/unity-editor-icons/icons/small/PreTextureRGB.png create mode 100644 参考/unity-editor-icons/icons/small/Preset.Context.png create mode 100644 参考/unity-editor-icons/icons/small/Preset.Context@2x.png create mode 100644 参考/unity-editor-icons/icons/small/PreviewPackageInUse.png create mode 100644 参考/unity-editor-icons/icons/small/PreviewPackageInUse@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.Audio.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.Audio@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.CPU.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.CPU@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.FirstFrame.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.GPU.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.GPU@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.GlobalIllumination.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.GlobalIllumination@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.Instrumentation.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.LastFrame.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.Memory.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.Memory@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.NetworkMessages.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.NetworkMessages@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.NetworkOperations.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.NetworkOperations@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.NextFrame.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.Physics.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.Physics2D.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.Physics2D@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.Physics@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.PrevFrame.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.Record.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.Rendering.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.Rendering@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.UI.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.UI@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.UIDetails.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.UIDetails@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.Video.png create mode 100644 参考/unity-editor-icons/icons/small/Profiler.Video@2x.png create mode 100644 参考/unity-editor-icons/icons/small/ProfilerColumn.WarningCount.png create mode 100644 参考/unity-editor-icons/icons/small/Progress.png create mode 100644 参考/unity-editor-icons/icons/small/Progress@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Project.png create mode 100644 参考/unity-editor-icons/icons/small/Project@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Record Off.png create mode 100644 参考/unity-editor-icons/icons/small/Record Off@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Record On.png create mode 100644 参考/unity-editor-icons/icons/small/Record On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/RectTool On.png create mode 100644 参考/unity-editor-icons/icons/small/RectTool On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/RectTool.png create mode 100644 参考/unity-editor-icons/icons/small/RectTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/RectTransformBlueprint.png create mode 100644 参考/unity-editor-icons/icons/small/RectTransformRaw.png create mode 100644 参考/unity-editor-icons/icons/small/ReflectionProbeSelector.png create mode 100644 参考/unity-editor-icons/icons/small/ReflectionProbeSelector@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Refresh.png create mode 100644 参考/unity-editor-icons/icons/small/Refresh@2x.png create mode 100644 参考/unity-editor-icons/icons/small/RotateTool On.png create mode 100644 参考/unity-editor-icons/icons/small/RotateTool On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/RotateTool.png create mode 100644 参考/unity-editor-icons/icons/small/RotateTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/RotateTool@4x.png create mode 100644 参考/unity-editor-icons/icons/small/SaveActive.png create mode 100644 参考/unity-editor-icons/icons/small/SaveAs.png create mode 100644 参考/unity-editor-icons/icons/small/SaveAs@2x.png create mode 100644 参考/unity-editor-icons/icons/small/SaveFromPlay.png create mode 100644 参考/unity-editor-icons/icons/small/SavePassive.png create mode 100644 参考/unity-editor-icons/icons/small/ScaleTool On.png create mode 100644 参考/unity-editor-icons/icons/small/ScaleTool On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/ScaleTool.png create mode 100644 参考/unity-editor-icons/icons/small/ScaleTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/SceneLoadIn.png create mode 100644 参考/unity-editor-icons/icons/small/SceneLoadOut.png create mode 100644 参考/unity-editor-icons/icons/small/SceneSave.png create mode 100644 参考/unity-editor-icons/icons/small/SceneSaveGrey.png create mode 100644 参考/unity-editor-icons/icons/small/SceneView2D.png create mode 100644 参考/unity-editor-icons/icons/small/SceneView2D@2x.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewAlpha.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewAudio Off.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewAudio Off@2x.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewAudio.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewAudio@2x.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewCamera.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewCamera@2x.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewFX@2x.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewFx.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewLighting Off.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewLighting Off@2x.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewLighting.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewLighting@2x.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewOrtho.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewRGB.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewTools.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewTools@2x.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewVisibility.png create mode 100644 参考/unity-editor-icons/icons/small/SceneViewVisibility@2x.png create mode 100644 参考/unity-editor-icons/icons/small/ScrollShadow.png create mode 100644 参考/unity-editor-icons/icons/small/Settings.png create mode 100644 参考/unity-editor-icons/icons/small/Settings@2x.png create mode 100644 参考/unity-editor-icons/icons/small/SettingsIcon.png create mode 100644 参考/unity-editor-icons/icons/small/SettingsIcon@2x.png create mode 100644 参考/unity-editor-icons/icons/small/SocialNetworks.FacebookShare.png create mode 100644 参考/unity-editor-icons/icons/small/SocialNetworks.LinkedInShare.png create mode 100644 参考/unity-editor-icons/icons/small/SocialNetworks.Tweet.png create mode 100644 参考/unity-editor-icons/icons/small/SocialNetworks.UDNLogo.png create mode 100644 参考/unity-editor-icons/icons/small/SocialNetworks.UDNOpen.png create mode 100644 参考/unity-editor-icons/icons/small/SoftlockInline.png create mode 100644 参考/unity-editor-icons/icons/small/SpeedScale.png create mode 100644 参考/unity-editor-icons/icons/small/StateMachineEditor.ArrowTip.png create mode 100644 参考/unity-editor-icons/icons/small/StateMachineEditor.ArrowTipSelected.png create mode 100644 参考/unity-editor-icons/icons/small/StateMachineEditor.Background.png create mode 100644 参考/unity-editor-icons/icons/small/StateMachineEditor.State.png create mode 100644 参考/unity-editor-icons/icons/small/StateMachineEditor.StateHover.png create mode 100644 参考/unity-editor-icons/icons/small/StateMachineEditor.StateSelected.png create mode 100644 参考/unity-editor-icons/icons/small/StateMachineEditor.StateSub.png create mode 100644 参考/unity-editor-icons/icons/small/StateMachineEditor.StateSubHover.png create mode 100644 参考/unity-editor-icons/icons/small/StateMachineEditor.StateSubSelected.png create mode 100644 参考/unity-editor-icons/icons/small/StateMachineEditor.UpButton.png create mode 100644 参考/unity-editor-icons/icons/small/StateMachineEditor.UpButtonHover.png create mode 100644 参考/unity-editor-icons/icons/small/StepButton On.png create mode 100644 参考/unity-editor-icons/icons/small/StepButton On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/StepButton.png create mode 100644 参考/unity-editor-icons/icons/small/StepButton@2x.png create mode 100644 参考/unity-editor-icons/icons/small/StepLeftButton-On.png create mode 100644 参考/unity-editor-icons/icons/small/StepLeftButton.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolAdd.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolLower On.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolLower.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolLowerAlt.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolPlants On.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolPlants.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolPlantsAlt On.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolPlantsAlt.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolRaise On.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolRaise.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolSculpt On.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolSculpt.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolSetheight On.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolSetheight.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolSetheightAlt On.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolSetheightAlt.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolSettings On.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolSettings.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolSmoothHeight On.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolSmoothHeight.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolSplat On.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolSplat.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolSplatAlt On.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolSplatAlt.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolTrees On.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolTrees.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolTreesAlt On.png create mode 100644 参考/unity-editor-icons/icons/small/TerrainInspector.TerrainToolTreesAlt.png create mode 100644 参考/unity-editor-icons/icons/small/TestFailed.png create mode 100644 参考/unity-editor-icons/icons/small/TestIgnored.png create mode 100644 参考/unity-editor-icons/icons/small/TestInconclusive.png create mode 100644 参考/unity-editor-icons/icons/small/TestNormal.png create mode 100644 参考/unity-editor-icons/icons/small/TestPassed.png create mode 100644 参考/unity-editor-icons/icons/small/TestStopwatch.png create mode 100644 参考/unity-editor-icons/icons/small/ToggleUVOverlay.png create mode 100644 参考/unity-editor-icons/icons/small/ToggleUVOverlay@2x.png create mode 100644 参考/unity-editor-icons/icons/small/ToolHandleCenter.png create mode 100644 参考/unity-editor-icons/icons/small/ToolHandleCenter@2x.png create mode 100644 参考/unity-editor-icons/icons/small/ToolHandleGlobal.png create mode 100644 参考/unity-editor-icons/icons/small/ToolHandleGlobal@2x.png create mode 100644 参考/unity-editor-icons/icons/small/ToolHandleLocal.png create mode 100644 参考/unity-editor-icons/icons/small/ToolHandleLocal@2x.png create mode 100644 参考/unity-editor-icons/icons/small/ToolHandlePivot.png create mode 100644 参考/unity-editor-icons/icons/small/ToolHandlePivot@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Toolbar Minus.png create mode 100644 参考/unity-editor-icons/icons/small/Toolbar Minus@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Toolbar Plus More.png create mode 100644 参考/unity-editor-icons/icons/small/Toolbar Plus More@2x.png create mode 100644 参考/unity-editor-icons/icons/small/Toolbar Plus.png create mode 100644 参考/unity-editor-icons/icons/small/Toolbar Plus@2x.png create mode 100644 参考/unity-editor-icons/icons/small/ToolsIcon.png create mode 100644 参考/unity-editor-icons/icons/small/TransformTool On.png create mode 100644 参考/unity-editor-icons/icons/small/TransformTool On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/TransformTool.png create mode 100644 参考/unity-editor-icons/icons/small/TransformTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.AddBranches.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.AddLeaves.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.Branch On.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.Branch.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.BranchFreeHand On.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.BranchFreeHand.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.BranchRotate On.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.BranchRotate.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.BranchScale On.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.BranchScale.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.BranchTranslate On.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.BranchTranslate.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.Distribution On.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.Distribution.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.Duplicate.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.Geometry On.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.Geometry.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.Leaf On.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.Leaf.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.LeafFreeHand On.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.LeafFreeHand.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.LeafRotate On.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.LeafRotate.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.LeafScale On.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.LeafScale.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.LeafTranslate On.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.LeafTranslate.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.Material On.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.Material.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.Refresh.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.Trash.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.Wind On.png create mode 100644 参考/unity-editor-icons/icons/small/TreeEditor.Wind.png create mode 100644 参考/unity-editor-icons/icons/small/UnLinked.png create mode 100644 参考/unity-editor-icons/icons/small/UnLinked@2x.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.AnimationWindow.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.AnimationWindow@2x.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.ConsoleWindow.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.ConsoleWindow@2x.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.DebugInspectorWindow.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.FindDependencies.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.GameView.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.GameView@2x.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.Graphs.AnimatorControllerTool.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.Graphs.AnimatorControllerTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.HierarchyWindow.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.HierarchyWindow@2x.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.InspectorWindow.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.InspectorWindow@2x.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.ProfilerWindow.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.ProfilerWindow@2x.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.SceneHierarchyWindow.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.SceneHierarchyWindow@2x.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.SceneView.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.SceneView@2x.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.Timeline.TimelineWindow.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.Timeline.TimelineWindow@2x.png create mode 100644 参考/unity-editor-icons/icons/small/UnityEditor.VersionControl.png create mode 100644 参考/unity-editor-icons/icons/small/UnityLogo.png create mode 100644 参考/unity-editor-icons/icons/small/UnityLogoLarge.png create mode 100644 参考/unity-editor-icons/icons/small/UpArrow.png create mode 100644 参考/unity-editor-icons/icons/small/VUMeterTextureHorizontal.png create mode 100644 参考/unity-editor-icons/icons/small/VUMeterTextureVertical.png create mode 100644 参考/unity-editor-icons/icons/small/Valid.png create mode 100644 参考/unity-editor-icons/icons/small/Valid@2x.png create mode 100644 参考/unity-editor-icons/icons/small/VerticalSplit.png create mode 100644 参考/unity-editor-icons/icons/small/ViewToolMove On.png create mode 100644 参考/unity-editor-icons/icons/small/ViewToolMove On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/ViewToolMove.png create mode 100644 参考/unity-editor-icons/icons/small/ViewToolMove@2x.png create mode 100644 参考/unity-editor-icons/icons/small/ViewToolOrbit On.png create mode 100644 参考/unity-editor-icons/icons/small/ViewToolOrbit On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/ViewToolOrbit.png create mode 100644 参考/unity-editor-icons/icons/small/ViewToolOrbit@2x.png create mode 100644 参考/unity-editor-icons/icons/small/ViewToolZoom On.png create mode 100644 参考/unity-editor-icons/icons/small/ViewToolZoom On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/ViewToolZoom.png create mode 100644 参考/unity-editor-icons/icons/small/ViewToolZoom@2x.png create mode 100644 参考/unity-editor-icons/icons/small/VisibilityOff.png create mode 100644 参考/unity-editor-icons/icons/small/VisibilityOn.png create mode 100644 参考/unity-editor-icons/icons/small/WaitSpin00.png create mode 100644 参考/unity-editor-icons/icons/small/WaitSpin01.png create mode 100644 参考/unity-editor-icons/icons/small/WaitSpin02.png create mode 100644 参考/unity-editor-icons/icons/small/WaitSpin03.png create mode 100644 参考/unity-editor-icons/icons/small/WaitSpin04.png create mode 100644 参考/unity-editor-icons/icons/small/WaitSpin05.png create mode 100644 参考/unity-editor-icons/icons/small/WaitSpin06.png create mode 100644 参考/unity-editor-icons/icons/small/WaitSpin07.png create mode 100644 参考/unity-editor-icons/icons/small/WaitSpin08.png create mode 100644 参考/unity-editor-icons/icons/small/WaitSpin09.png create mode 100644 参考/unity-editor-icons/icons/small/WaitSpin10.png create mode 100644 参考/unity-editor-icons/icons/small/WaitSpin11.png create mode 100644 参考/unity-editor-icons/icons/small/WelcomeScreen.AssetStoreLogo.png create mode 100644 参考/unity-editor-icons/icons/small/_Help.png create mode 100644 参考/unity-editor-icons/icons/small/_Help@2x.png create mode 100644 参考/unity-editor-icons/icons/small/_Menu.png create mode 100644 参考/unity-editor-icons/icons/small/_Menu@2x.png create mode 100644 参考/unity-editor-icons/icons/small/_Popup.png create mode 100644 参考/unity-editor-icons/icons/small/_Popup@2x.png create mode 100644 参考/unity-editor-icons/icons/small/aboutwindow.mainheader.png create mode 100644 参考/unity-editor-icons/icons/small/ageialogo.png create mode 100644 参考/unity-editor-icons/icons/small/animationanimated.png create mode 100644 参考/unity-editor-icons/icons/small/animationdopesheetkeyframe.png create mode 100644 参考/unity-editor-icons/icons/small/animationkeyframe.png create mode 100644 参考/unity-editor-icons/icons/small/animationnocurve.png create mode 100644 参考/unity-editor-icons/icons/small/animationvisibilitytoggleoff.png create mode 100644 参考/unity-editor-icons/icons/small/animationvisibilitytoggleoff@2x.png create mode 100644 参考/unity-editor-icons/icons/small/animationvisibilitytoggleon.png create mode 100644 参考/unity-editor-icons/icons/small/animationvisibilitytoggleon@2x.png create mode 100644 参考/unity-editor-icons/icons/small/assetstore/Unity-AssetStore-Originals-Logo-White.png create mode 100644 参考/unity-editor-icons/icons/small/assetstore/Unity-AssetStore-Originals-Logo-White@2x.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/BodyPartPicker.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/BodySilhouette.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/DotFill.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/DotFrame.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/DotFrameDotted.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/DotSelection.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/Head.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/HeadIk.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/HeadZoom.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/HeadZoomSilhouette.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/LeftArm.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/LeftFeetIk.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/LeftFingers.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/LeftFingersIk.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/LeftHandZoom.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/LeftHandZoomSilhouette.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/LeftLeg.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/MaskEditor_Root.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/RightArm.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/RightFeetIk.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/RightFingers.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/RightFingersIk.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/RightHandZoom.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/RightHandZoomSilhouette.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/RightLeg.png create mode 100644 参考/unity-editor-icons/icons/small/avatarinspector/Torso.png create mode 100644 参考/unity-editor-icons/icons/small/back.png create mode 100644 参考/unity-editor-icons/icons/small/back@2x.png create mode 100644 参考/unity-editor-icons/icons/small/beginButton-On.png create mode 100644 参考/unity-editor-icons/icons/small/beginButton.png create mode 100644 参考/unity-editor-icons/icons/small/blendKey.png create mode 100644 参考/unity-editor-icons/icons/small/blendKeyOverlay.png create mode 100644 参考/unity-editor-icons/icons/small/blendKeySelected.png create mode 100644 参考/unity-editor-icons/icons/small/blendSampler.png create mode 100644 参考/unity-editor-icons/icons/small/blueGroove.png create mode 100644 参考/unity-editor-icons/icons/small/console.erroricon.inactive.sml.png create mode 100644 参考/unity-editor-icons/icons/small/console.erroricon.inactive.sml@2x.png create mode 100644 参考/unity-editor-icons/icons/small/console.erroricon.png create mode 100644 参考/unity-editor-icons/icons/small/console.erroricon.sml.png create mode 100644 参考/unity-editor-icons/icons/small/console.erroricon.sml@2x.png create mode 100644 参考/unity-editor-icons/icons/small/console.erroricon@2x.png create mode 100644 参考/unity-editor-icons/icons/small/console.infoicon.inactive.sml.png create mode 100644 参考/unity-editor-icons/icons/small/console.infoicon.inactive.sml@2x.png create mode 100644 参考/unity-editor-icons/icons/small/console.infoicon.png create mode 100644 参考/unity-editor-icons/icons/small/console.infoicon.sml.png create mode 100644 参考/unity-editor-icons/icons/small/console.infoicon.sml@2x.png create mode 100644 参考/unity-editor-icons/icons/small/console.infoicon@2x.png create mode 100644 参考/unity-editor-icons/icons/small/console.warnicon.inactive.sml.png create mode 100644 参考/unity-editor-icons/icons/small/console.warnicon.inactive.sml@2x.png create mode 100644 参考/unity-editor-icons/icons/small/console.warnicon.png create mode 100644 参考/unity-editor-icons/icons/small/console.warnicon.sml.png create mode 100644 参考/unity-editor-icons/icons/small/console.warnicon.sml@2x.png create mode 100644 参考/unity-editor-icons/icons/small/console.warnicon@2x.png create mode 100644 参考/unity-editor-icons/icons/small/curvekeyframe.png create mode 100644 参考/unity-editor-icons/icons/small/curvekeyframeselected.png create mode 100644 参考/unity-editor-icons/icons/small/curvekeyframeselectedoverlay.png create mode 100644 参考/unity-editor-icons/icons/small/curvekeyframesemiselectedoverlay.png create mode 100644 参考/unity-editor-icons/icons/small/curvekeyframeweighted.png create mode 100644 参考/unity-editor-icons/icons/small/d_AS Badge Delete.png create mode 100644 参考/unity-editor-icons/icons/small/d_AS Badge New.png create mode 100644 参考/unity-editor-icons/icons/small/d_AlphabeticalSorting.png create mode 100644 参考/unity-editor-icons/icons/small/d_AlphabeticalSorting@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Animation.AddEvent.png create mode 100644 参考/unity-editor-icons/icons/small/d_Animation.AddKeyframe.png create mode 100644 参考/unity-editor-icons/icons/small/d_Animation.EventMarker.png create mode 100644 参考/unity-editor-icons/icons/small/d_Animation.FilterBySelection.png create mode 100644 参考/unity-editor-icons/icons/small/d_Animation.FirstKey.png create mode 100644 参考/unity-editor-icons/icons/small/d_Animation.LastKey.png create mode 100644 参考/unity-editor-icons/icons/small/d_Animation.NextKey.png create mode 100644 参考/unity-editor-icons/icons/small/d_Animation.Play.png create mode 100644 参考/unity-editor-icons/icons/small/d_Animation.PrevKey.png create mode 100644 参考/unity-editor-icons/icons/small/d_Animation.Record.png create mode 100644 参考/unity-editor-icons/icons/small/d_Animation.Record@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Animation.SequencerLink.png create mode 100644 参考/unity-editor-icons/icons/small/d_AnimationWrapModeMenu.png create mode 100644 参考/unity-editor-icons/icons/small/d_AssemblyLock.png create mode 100644 参考/unity-editor-icons/icons/small/d_Asset Store.png create mode 100644 参考/unity-editor-icons/icons/small/d_Asset Store@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Audio Mixer.png create mode 100644 参考/unity-editor-icons/icons/small/d_Audio Mixer@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_AutoLightbakingOff.png create mode 100644 参考/unity-editor-icons/icons/small/d_AutoLightbakingOff@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_AutoLightbakingOn.png create mode 100644 参考/unity-editor-icons/icons/small/d_AutoLightbakingOn@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_AvatarBlendBackground.png create mode 100644 参考/unity-editor-icons/icons/small/d_AvatarBlendLeft.png create mode 100644 参考/unity-editor-icons/icons/small/d_AvatarBlendLeftA.png create mode 100644 参考/unity-editor-icons/icons/small/d_AvatarBlendRight.png create mode 100644 参考/unity-editor-icons/icons/small/d_AvatarBlendRightA.png create mode 100644 参考/unity-editor-icons/icons/small/d_AvatarCompass.png create mode 100644 参考/unity-editor-icons/icons/small/d_AvatarPivot.png create mode 100644 参考/unity-editor-icons/icons/small/d_AvatarPivot@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_AvatarSelector.png create mode 100644 参考/unity-editor-icons/icons/small/d_AvatarSelector@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Android.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Android.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Android.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Android@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Broadcom.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Facebook.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Facebook.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Facebook.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Facebook@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.FlashPlayer.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.FlashPlayer.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Lumin.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Lumin.small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Lumin.small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Lumin@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Metro.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Metro.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Metro.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Metro@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.N3DS.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.N3DS.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.N3DS.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.N3DS@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.PS4.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.PS4.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.PS4.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.PS4@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.PSP2.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.PSP2.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.SelectedIcon.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Stadia.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Stadia.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Stadia.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Stadia@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Standalone.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Standalone.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Standalone.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Standalone@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Switch.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Switch.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Switch.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Switch@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Web.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Web.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.WebGL.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.WebGL.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.WebGL.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.WebGL@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Xbox360.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Xbox360.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.XboxOne.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.XboxOne.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.XboxOne.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.XboxOne@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Xiaomi.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Xiaomi.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Xiaomi.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.Xiaomi@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.iPhone.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.iPhone.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.iPhone.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.iPhone@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.tvOS.Small.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.tvOS.Small@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.tvOS.png create mode 100644 参考/unity-editor-icons/icons/small/d_BuildSettings.tvOS@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_CacheServerConnected.png create mode 100644 参考/unity-editor-icons/icons/small/d_CacheServerConnected@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_CacheServerDisabled.png create mode 100644 参考/unity-editor-icons/icons/small/d_CacheServerDisabled@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_CacheServerDisconnected.png create mode 100644 参考/unity-editor-icons/icons/small/d_CacheServerDisconnected@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_CheckerFloor.png create mode 100644 参考/unity-editor-icons/icons/small/d_CloudConnect.png create mode 100644 参考/unity-editor-icons/icons/small/d_CloudConnect@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Collab.FileAdded.png create mode 100644 参考/unity-editor-icons/icons/small/d_Collab.FileConflict.png create mode 100644 参考/unity-editor-icons/icons/small/d_Collab.FileDeleted.png create mode 100644 参考/unity-editor-icons/icons/small/d_Collab.FileIgnored.png create mode 100644 参考/unity-editor-icons/icons/small/d_Collab.FileMoved.png create mode 100644 参考/unity-editor-icons/icons/small/d_Collab.FileUpdated.png create mode 100644 参考/unity-editor-icons/icons/small/d_Collab.FolderAdded.png create mode 100644 参考/unity-editor-icons/icons/small/d_Collab.FolderConflict.png create mode 100644 参考/unity-editor-icons/icons/small/d_Collab.FolderDeleted.png create mode 100644 参考/unity-editor-icons/icons/small/d_Collab.FolderIgnored.png create mode 100644 参考/unity-editor-icons/icons/small/d_Collab.FolderMoved.png create mode 100644 参考/unity-editor-icons/icons/small/d_Collab.FolderUpdated.png create mode 100644 参考/unity-editor-icons/icons/small/d_Collab.png create mode 100644 参考/unity-editor-icons/icons/small/d_Collab@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ColorPicker.CycleColor.png create mode 100644 参考/unity-editor-icons/icons/small/d_ColorPicker.CycleSlider.png create mode 100644 参考/unity-editor-icons/icons/small/d_CreateAddNew.png create mode 100644 参考/unity-editor-icons/icons/small/d_CreateAddNew@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_CustomSorting.png create mode 100644 参考/unity-editor-icons/icons/small/d_CustomTool.png create mode 100644 参考/unity-editor-icons/icons/small/d_CustomTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_DebuggerAttached.png create mode 100644 参考/unity-editor-icons/icons/small/d_DebuggerAttached@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_DebuggerDisabled.png create mode 100644 参考/unity-editor-icons/icons/small/d_DebuggerDisabled@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_DebuggerEnabled.png create mode 100644 参考/unity-editor-icons/icons/small/d_DebuggerEnabled@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_DefaultSorting.png create mode 100644 参考/unity-editor-icons/icons/small/d_DefaultSorting@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_EditCollider.png create mode 100644 参考/unity-editor-icons/icons/small/d_Exposure.png create mode 100644 参考/unity-editor-icons/icons/small/d_Exposure@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Favorite.png create mode 100644 参考/unity-editor-icons/icons/small/d_Favorite@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_FilterByLabel.png create mode 100644 参考/unity-editor-icons/icons/small/d_FilterByLabel@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_FilterByType.png create mode 100644 参考/unity-editor-icons/icons/small/d_FilterByType@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_FilterSelectedOnly.png create mode 100644 参考/unity-editor-icons/icons/small/d_FilterSelectedOnly@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_FrameCapture.png create mode 100644 参考/unity-editor-icons/icons/small/d_FrameCapture@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_GEAR.png create mode 100644 参考/unity-editor-icons/icons/small/d_Grid.BoxTool.png create mode 100644 参考/unity-editor-icons/icons/small/d_Grid.BoxTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Grid.Default.png create mode 100644 参考/unity-editor-icons/icons/small/d_Grid.Default@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Grid.EraserTool.png create mode 100644 参考/unity-editor-icons/icons/small/d_Grid.EraserTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Grid.FillTool.png create mode 100644 参考/unity-editor-icons/icons/small/d_Grid.FillTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Grid.MoveTool.png create mode 100644 参考/unity-editor-icons/icons/small/d_Grid.MoveTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Grid.PaintTool.png create mode 100644 参考/unity-editor-icons/icons/small/d_Grid.PaintTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Grid.PickingTool.png create mode 100644 参考/unity-editor-icons/icons/small/d_Grid.PickingTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Groove.png create mode 100644 参考/unity-editor-icons/icons/small/d_HorizontalSplit.png create mode 100644 参考/unity-editor-icons/icons/small/d_Import.png create mode 100644 参考/unity-editor-icons/icons/small/d_Import@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_InspectorLock.png create mode 100644 参考/unity-editor-icons/icons/small/d_Invalid.png create mode 100644 参考/unity-editor-icons/icons/small/d_Invalid@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_JointAngularLimits.png create mode 100644 参考/unity-editor-icons/icons/small/d_Lighting.png create mode 100644 参考/unity-editor-icons/icons/small/d_Lighting@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_LightmapEditor.WindowTitle.png create mode 100644 参考/unity-editor-icons/icons/small/d_LightmapEditor.WindowTitle@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Linked.png create mode 100644 参考/unity-editor-icons/icons/small/d_Linked@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_MainStageView.png create mode 100644 参考/unity-editor-icons/icons/small/d_MainStageView@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Mirror.png create mode 100644 参考/unity-editor-icons/icons/small/d_MoreOptions.png create mode 100644 参考/unity-editor-icons/icons/small/d_MoreOptions@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_MoveTool On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_MoveTool on.png create mode 100644 参考/unity-editor-icons/icons/small/d_MoveTool.png create mode 100644 参考/unity-editor-icons/icons/small/d_MoveTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Navigation.png create mode 100644 参考/unity-editor-icons/icons/small/d_Occlusion.png create mode 100644 参考/unity-editor-icons/icons/small/d_Occlusion@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Package Manager.png create mode 100644 参考/unity-editor-icons/icons/small/d_Package Manager@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Particle Effect.png create mode 100644 参考/unity-editor-icons/icons/small/d_ParticleShapeTool On.png create mode 100644 参考/unity-editor-icons/icons/small/d_ParticleShapeTool On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ParticleShapeTool On@3x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ParticleShapeTool On@4x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ParticleShapeTool.png create mode 100644 参考/unity-editor-icons/icons/small/d_ParticleShapeTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ParticleShapeTool@3x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ParticleShapeTool@4x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PauseButton On.png create mode 100644 参考/unity-editor-icons/icons/small/d_PauseButton On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PauseButton.png create mode 100644 参考/unity-editor-icons/icons/small/d_PauseButton@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PlayButton On.png create mode 100644 参考/unity-editor-icons/icons/small/d_PlayButton On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PlayButton.png create mode 100644 参考/unity-editor-icons/icons/small/d_PlayButton@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PlayButtonProfile On.png create mode 100644 参考/unity-editor-icons/icons/small/d_PlayButtonProfile.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreMatCube.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreMatCube@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreMatCylinder.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreMatCylinder@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreMatLight0.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreMatLight0@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreMatLight1.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreMatLight1@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreMatQuad.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreMatQuad@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreMatSphere.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreMatSphere@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreMatTorus.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreMatTorus@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreTexA.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreTexA@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreTexB.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreTexB@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreTexG.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreTexG@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreTexR.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreTexR@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreTexRGB.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreTexRGB@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreTextureAlpha.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreTextureMipMapHigh.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreTextureMipMapLow.png create mode 100644 参考/unity-editor-icons/icons/small/d_PreTextureRGB.png create mode 100644 参考/unity-editor-icons/icons/small/d_Preset.Context.png create mode 100644 参考/unity-editor-icons/icons/small/d_Preset.Context@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.Audio.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.Audio@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.CPU.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.CPU@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.FirstFrame.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.GPU.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.GPU@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.GlobalIllumination.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.GlobalIllumination@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.LastFrame.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.Memory.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.Memory@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.Network.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.NetworkMessages.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.NetworkMessages@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.NetworkOperations.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.NetworkOperations@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.NextFrame.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.Physics.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.Physics2D.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.Physics2D@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.Physics@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.PrevFrame.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.Record.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.Rendering.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.Rendering@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.UI.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.UI@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.UIDetails.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.UIDetails@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.Video.png create mode 100644 参考/unity-editor-icons/icons/small/d_Profiler.Video@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ProfilerColumn.WarningCount.png create mode 100644 参考/unity-editor-icons/icons/small/d_Progress.png create mode 100644 参考/unity-editor-icons/icons/small/d_Progress@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Project.png create mode 100644 参考/unity-editor-icons/icons/small/d_Project@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Record Off.png create mode 100644 参考/unity-editor-icons/icons/small/d_Record Off@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Record On.png create mode 100644 参考/unity-editor-icons/icons/small/d_Record On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_RectTool On.png create mode 100644 参考/unity-editor-icons/icons/small/d_RectTool On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_RectTool.png create mode 100644 参考/unity-editor-icons/icons/small/d_RectTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_RectTransformBlueprint.png create mode 100644 参考/unity-editor-icons/icons/small/d_RectTransformRaw.png create mode 100644 参考/unity-editor-icons/icons/small/d_ReflectionProbeSelector.png create mode 100644 参考/unity-editor-icons/icons/small/d_ReflectionProbeSelector@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Refresh.png create mode 100644 参考/unity-editor-icons/icons/small/d_Refresh@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_RotateTool On.png create mode 100644 参考/unity-editor-icons/icons/small/d_RotateTool On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_RotateTool.png create mode 100644 参考/unity-editor-icons/icons/small/d_RotateTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_SaveAs.png create mode 100644 参考/unity-editor-icons/icons/small/d_SaveAs@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ScaleTool On.png create mode 100644 参考/unity-editor-icons/icons/small/d_ScaleTool On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ScaleTool.png create mode 100644 参考/unity-editor-icons/icons/small/d_ScaleTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneView2D.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneView2D@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewAlpha.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewAudio Off.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewAudio Off@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewAudio.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewAudio@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewCamera.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewCamera@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewFX@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewFx.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewLighting Off.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewLighting Off@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewLighting.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewLighting@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewOrtho.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewRGB.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewTools.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewTools@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewVisibility.png create mode 100644 参考/unity-editor-icons/icons/small/d_SceneViewVisibility@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ScrollShadow.png create mode 100644 参考/unity-editor-icons/icons/small/d_Settings.png create mode 100644 参考/unity-editor-icons/icons/small/d_Settings@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_SettingsIcon.png create mode 100644 参考/unity-editor-icons/icons/small/d_SettingsIcon@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_SocialNetworks.FacebookShare.png create mode 100644 参考/unity-editor-icons/icons/small/d_SocialNetworks.LinkedInShare.png create mode 100644 参考/unity-editor-icons/icons/small/d_SocialNetworks.Tweet.png create mode 100644 参考/unity-editor-icons/icons/small/d_SocialNetworks.UDNOpen.png create mode 100644 参考/unity-editor-icons/icons/small/d_SpeedScale.png create mode 100644 参考/unity-editor-icons/icons/small/d_StepButton On.png create mode 100644 参考/unity-editor-icons/icons/small/d_StepButton On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_StepButton.png create mode 100644 参考/unity-editor-icons/icons/small/d_StepButton@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_StepLeftButton-On.png create mode 100644 参考/unity-editor-icons/icons/small/d_StepLeftButton.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolLower On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolLowerAlt.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolPlants On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolPlants.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolPlantsAlt On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolPlantsAlt.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolRaise On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolRaise.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolSetheight On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolSetheight.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolSetheightAlt On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolSetheightAlt.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolSettings On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolSettings.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolSmoothHeight On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolSmoothHeight.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolSplat On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolSplat.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolSplatAlt On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolSplatAlt.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolTrees On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolTrees.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolTreesAlt On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TerrainInspector.TerrainToolTreesAlt.png create mode 100644 参考/unity-editor-icons/icons/small/d_ToggleUVOverlay.png create mode 100644 参考/unity-editor-icons/icons/small/d_ToggleUVOverlay@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ToolHandleCenter.png create mode 100644 参考/unity-editor-icons/icons/small/d_ToolHandleCenter@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ToolHandleGlobal.png create mode 100644 参考/unity-editor-icons/icons/small/d_ToolHandleGlobal@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ToolHandleLocal.png create mode 100644 参考/unity-editor-icons/icons/small/d_ToolHandleLocal@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ToolHandlePivot.png create mode 100644 参考/unity-editor-icons/icons/small/d_ToolHandlePivot@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Toolbar Minus.png create mode 100644 参考/unity-editor-icons/icons/small/d_Toolbar Minus@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Toolbar Plus More.png create mode 100644 参考/unity-editor-icons/icons/small/d_Toolbar Plus More@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_Toolbar Plus.png create mode 100644 参考/unity-editor-icons/icons/small/d_Toolbar Plus@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ToolsIcon.png create mode 100644 参考/unity-editor-icons/icons/small/d_TransformTool On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TransformTool On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_TransformTool.png create mode 100644 参考/unity-editor-icons/icons/small/d_TransformTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.AddBranches.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.AddLeaves.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.Branch On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.Branch.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.BranchFreeHand On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.BranchFreeHand.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.BranchRotate On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.BranchRotate.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.BranchScale On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.BranchScale.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.BranchTranslate On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.BranchTranslate.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.Distribution On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.Distribution.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.Duplicate.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.Geometry On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.Geometry.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.Leaf On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.Leaf.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.LeafFreeHand On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.LeafFreeHand.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.LeafRotate On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.LeafRotate.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.LeafScale On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.LeafScale.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.LeafTranslate On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.LeafTranslate.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.Material On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.Material.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.Refresh.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.Trash.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.Wind On.png create mode 100644 参考/unity-editor-icons/icons/small/d_TreeEditor.Wind.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.AnimationWindow.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.AnimationWindow@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.ConsoleWindow.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.ConsoleWindow@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.DebugInspectorWindow.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.FindDependencies.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.GameView.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.GameView@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.Graphs.AnimatorControllerTool.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.Graphs.AnimatorControllerTool@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.HierarchyWindow.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.InspectorWindow.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.InspectorWindow@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.ProfilerWindow.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.ProfilerWindow@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.SceneHierarchyWindow.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.SceneHierarchyWindow@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.SceneView.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.SceneView@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.Timeline.TimelineWindow.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.Timeline.TimelineWindow@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityEditor.VersionControl.png create mode 100644 参考/unity-editor-icons/icons/small/d_UnityLogo.png create mode 100644 参考/unity-editor-icons/icons/small/d_Unlinked.png create mode 100644 参考/unity-editor-icons/icons/small/d_Unlinked@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_VUMeterTextureHorizontal.png create mode 100644 参考/unity-editor-icons/icons/small/d_VUMeterTextureVertical.png create mode 100644 参考/unity-editor-icons/icons/small/d_Valid.png create mode 100644 参考/unity-editor-icons/icons/small/d_Valid@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_VerticalSplit.png create mode 100644 参考/unity-editor-icons/icons/small/d_ViewToolMove On.png create mode 100644 参考/unity-editor-icons/icons/small/d_ViewToolMove On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ViewToolMove.png create mode 100644 参考/unity-editor-icons/icons/small/d_ViewToolMove@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ViewToolOrbit On.png create mode 100644 参考/unity-editor-icons/icons/small/d_ViewToolOrbit On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ViewToolOrbit.png create mode 100644 参考/unity-editor-icons/icons/small/d_ViewToolOrbit@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ViewToolZoom On.png create mode 100644 参考/unity-editor-icons/icons/small/d_ViewToolZoom On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_ViewToolZoom.png create mode 100644 参考/unity-editor-icons/icons/small/d_ViewToolZoom@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_VisibilityOff.png create mode 100644 参考/unity-editor-icons/icons/small/d_VisibilityOn.png create mode 100644 参考/unity-editor-icons/icons/small/d_WaitSpin00.png create mode 100644 参考/unity-editor-icons/icons/small/d_WaitSpin01.png create mode 100644 参考/unity-editor-icons/icons/small/d_WaitSpin02.png create mode 100644 参考/unity-editor-icons/icons/small/d_WaitSpin03.png create mode 100644 参考/unity-editor-icons/icons/small/d_WaitSpin04.png create mode 100644 参考/unity-editor-icons/icons/small/d_WaitSpin05.png create mode 100644 参考/unity-editor-icons/icons/small/d_WaitSpin06.png create mode 100644 参考/unity-editor-icons/icons/small/d_WaitSpin07.png create mode 100644 参考/unity-editor-icons/icons/small/d_WaitSpin08.png create mode 100644 参考/unity-editor-icons/icons/small/d_WaitSpin09.png create mode 100644 参考/unity-editor-icons/icons/small/d_WaitSpin10.png create mode 100644 参考/unity-editor-icons/icons/small/d_WaitSpin11.png create mode 100644 参考/unity-editor-icons/icons/small/d_WelcomeScreen.AssetStoreLogo.png create mode 100644 参考/unity-editor-icons/icons/small/d__Help.png create mode 100644 参考/unity-editor-icons/icons/small/d__Help@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d__Menu.png create mode 100644 参考/unity-editor-icons/icons/small/d__Menu@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d__Popup.png create mode 100644 参考/unity-editor-icons/icons/small/d__Popup@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_aboutwindow.mainheader.png create mode 100644 参考/unity-editor-icons/icons/small/d_ageialogo.png create mode 100644 参考/unity-editor-icons/icons/small/d_animationanimated.png create mode 100644 参考/unity-editor-icons/icons/small/d_animationkeyframe.png create mode 100644 参考/unity-editor-icons/icons/small/d_animationnocurve.png create mode 100644 参考/unity-editor-icons/icons/small/d_animationvisibilitytoggleoff.png create mode 100644 参考/unity-editor-icons/icons/small/d_animationvisibilitytoggleoff@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_animationvisibilitytoggleon.png create mode 100644 参考/unity-editor-icons/icons/small/d_animationvisibilitytoggleon@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_back.png create mode 100644 参考/unity-editor-icons/icons/small/d_back@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_beginButton-On.png create mode 100644 参考/unity-editor-icons/icons/small/d_beginButton.png create mode 100644 参考/unity-editor-icons/icons/small/d_blueGroove.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.erroricon.inactive.sml.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.erroricon.inactive.sml@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.erroricon.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.erroricon.sml.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.erroricon.sml@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.erroricon@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.infoicon.inactive.sml.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.infoicon.inactive.sml@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.infoicon.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.infoicon.sml.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.infoicon.sml@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.infoicon@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.warnicon.inactive.sml.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.warnicon.inactive.sml@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.warnicon.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.warnicon.sml.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.warnicon.sml@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_console.warnicon@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_curvekeyframe.png create mode 100644 参考/unity-editor-icons/icons/small/d_curvekeyframeselected.png create mode 100644 参考/unity-editor-icons/icons/small/d_curvekeyframeselectedoverlay.png create mode 100644 参考/unity-editor-icons/icons/small/d_curvekeyframesemiselectedoverlay.png create mode 100644 参考/unity-editor-icons/icons/small/d_curvekeyframeweighted.png create mode 100644 参考/unity-editor-icons/icons/small/d_editcollision_16.png create mode 100644 参考/unity-editor-icons/icons/small/d_editcollision_16@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_editcollision_32.png create mode 100644 参考/unity-editor-icons/icons/small/d_editconstraints_16.png create mode 100644 参考/unity-editor-icons/icons/small/d_editconstraints_16@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_editconstraints_32.png create mode 100644 参考/unity-editor-icons/icons/small/d_editicon.sml.png create mode 100644 参考/unity-editor-icons/icons/small/d_endButton-On.png create mode 100644 参考/unity-editor-icons/icons/small/d_endButton.png create mode 100644 参考/unity-editor-icons/icons/small/d_eyeDropper.Large.png create mode 100644 参考/unity-editor-icons/icons/small/d_eyeDropper.Large@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_eyeDropper.sml.png create mode 100644 参考/unity-editor-icons/icons/small/d_forward.png create mode 100644 参考/unity-editor-icons/icons/small/d_forward@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_icon dropdown.png create mode 100644 参考/unity-editor-icons/icons/small/d_icon dropdown@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_leftBracket.png create mode 100644 参考/unity-editor-icons/icons/small/d_model large.png create mode 100644 参考/unity-editor-icons/icons/small/d_monologo.png create mode 100644 参考/unity-editor-icons/icons/small/d_playLoopOff.png create mode 100644 参考/unity-editor-icons/icons/small/d_playLoopOn.png create mode 100644 参考/unity-editor-icons/icons/small/d_preAudioAutoPlayOff.png create mode 100644 参考/unity-editor-icons/icons/small/d_preAudioAutoPlayOff@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_preAudioAutoPlayOn.png create mode 100644 参考/unity-editor-icons/icons/small/d_preAudioLoopOff.png create mode 100644 参考/unity-editor-icons/icons/small/d_preAudioLoopOff@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_preAudioLoopOn.png create mode 100644 参考/unity-editor-icons/icons/small/d_preAudioPlayOff.png create mode 100644 参考/unity-editor-icons/icons/small/d_preAudioPlayOn.png create mode 100644 参考/unity-editor-icons/icons/small/d_redGroove.png create mode 100644 参考/unity-editor-icons/icons/small/d_rightBracket.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_notpickable-mixed.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_notpickable-mixed@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_notpickable-mixed_hover.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_notpickable-mixed_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_notpickable.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_notpickable@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_notpickable_hover.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_notpickable_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_pickable-mixed.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_pickable-mixed@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_pickable-mixed_hover.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_pickable-mixed_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_pickable.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_pickable@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_pickable_hover.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenepicking_pickable_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_hidden-mixed.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_hidden-mixed@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_hidden-mixed_hover.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_hidden-mixed_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_hidden.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_hidden@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_hidden_hover.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_hidden_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_scene_hover.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_scene_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_visible-mixed.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_visible-mixed@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_visible-mixed_hover.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_visible-mixed_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_visible.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_visible@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_visible_hover.png create mode 100644 参考/unity-editor-icons/icons/small/d_scenevis_visible_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_tab_next.png create mode 100644 参考/unity-editor-icons/icons/small/d_tab_next@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_tab_prev.png create mode 100644 参考/unity-editor-icons/icons/small/d_tab_prev@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_tranp.png create mode 100644 参考/unity-editor-icons/icons/small/d_tree_icon.png create mode 100644 参考/unity-editor-icons/icons/small/d_tree_icon_branch.png create mode 100644 参考/unity-editor-icons/icons/small/d_tree_icon_branch_frond.png create mode 100644 参考/unity-editor-icons/icons/small/d_tree_icon_frond.png create mode 100644 参考/unity-editor-icons/icons/small/d_tree_icon_leaf.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_graph.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_graph_close_h.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_graph_max_h.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_graph_min_h.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_close.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_close@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_close_a.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_close_a@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_close_h.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_close_h@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_inact.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_max.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_max@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_max_a.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_max_a@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_max_h.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_max_h@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_min.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_min@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_min_a.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_min_a@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_min_h.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_mac_min_h@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_close.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_close@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_close_a.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_close_a@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_close_h.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_close_h@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_max.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_max@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_max_a.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_max_a@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_max_h.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_max_h@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_min.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_min_a.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_min_h.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_rest.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_rest_a.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_rest_h.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_restore.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_restore@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_restore_a.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_restore_a@2x.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_restore_h.png create mode 100644 参考/unity-editor-icons/icons/small/d_winbtn_win_restore_h@2x.png create mode 100644 参考/unity-editor-icons/icons/small/editcollision_16.png create mode 100644 参考/unity-editor-icons/icons/small/editcollision_16@2x.png create mode 100644 参考/unity-editor-icons/icons/small/editcollision_32.png create mode 100644 参考/unity-editor-icons/icons/small/editconstraints_16.png create mode 100644 参考/unity-editor-icons/icons/small/editconstraints_16@2x.png create mode 100644 参考/unity-editor-icons/icons/small/editconstraints_32.png create mode 100644 参考/unity-editor-icons/icons/small/editicon.sml.png create mode 100644 参考/unity-editor-icons/icons/small/endButton-On.png create mode 100644 参考/unity-editor-icons/icons/small/endButton.png create mode 100644 参考/unity-editor-icons/icons/small/eyeDropper.Large.png create mode 100644 参考/unity-editor-icons/icons/small/eyeDropper.Large@2x.png create mode 100644 参考/unity-editor-icons/icons/small/eyeDropper.sml.png create mode 100644 参考/unity-editor-icons/icons/small/forward.png create mode 100644 参考/unity-editor-icons/icons/small/forward@2x.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/align_horizontally.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/align_horizontally_center.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/align_horizontally_center_active.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/align_horizontally_left.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/align_horizontally_left_active.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/align_horizontally_right.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/align_horizontally_right_active.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/align_vertically.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/align_vertically_bottom.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/align_vertically_bottom_active.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/align_vertically_center.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/align_vertically_center_active.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/align_vertically_top.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/align_vertically_top_active.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/d_align_horizontally.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/d_align_horizontally_center.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/d_align_horizontally_center_active.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/d_align_horizontally_left.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/d_align_horizontally_left_active.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/d_align_horizontally_right.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/d_align_horizontally_right_active.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/d_align_vertically.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/d_align_vertically_bottom.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/d_align_vertically_bottom_active.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/d_align_vertically_center.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/d_align_vertically_center_active.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/d_align_vertically_top.png create mode 100644 参考/unity-editor-icons/icons/small/guisystem/d_align_vertically_top_active.png create mode 100644 参考/unity-editor-icons/icons/small/icon dropdown.png create mode 100644 参考/unity-editor-icons/icons/small/icon dropdown@2x.png create mode 100644 参考/unity-editor-icons/icons/small/leftBracket.png create mode 100644 参考/unity-editor-icons/icons/small/lightmeter/d_greenLight.png create mode 100644 参考/unity-editor-icons/icons/small/lightmeter/d_lightOff.png create mode 100644 参考/unity-editor-icons/icons/small/lightmeter/d_lightRim.png create mode 100644 参考/unity-editor-icons/icons/small/lightmeter/d_orangeLight.png create mode 100644 参考/unity-editor-icons/icons/small/lightmeter/d_redLight.png create mode 100644 参考/unity-editor-icons/icons/small/lightmeter/greenLight.png create mode 100644 参考/unity-editor-icons/icons/small/lightmeter/lightOff.png create mode 100644 参考/unity-editor-icons/icons/small/lightmeter/lightRim.png create mode 100644 参考/unity-editor-icons/icons/small/lightmeter/orangeLight.png create mode 100644 参考/unity-editor-icons/icons/small/lightmeter/redLight.png create mode 100644 参考/unity-editor-icons/icons/small/loop.png create mode 100644 参考/unity-editor-icons/icons/small/monologo.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Add-Available.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Add-Available@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Download-Available.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Download-Available@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Error.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Error@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Import-Available.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Import-Available@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/In-Development.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/In-Development@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Installed.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Installed@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Loading.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Loading@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Refresh.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Refresh@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Update-Available.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Update-Available@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Warning.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/dark/Warning@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Add-Available.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Add-Available@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Download-Available.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Download-Available@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Error.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Error@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Import-Available.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Import-Available@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/In-Development.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/In-Development@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Installed.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Installed@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Loading.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Loading@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Refresh.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Refresh@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Update-Available.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Update-Available@2x.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Warning.png create mode 100644 参考/unity-editor-icons/icons/small/packagemanager/light/Warning@2x.png create mode 100644 参考/unity-editor-icons/icons/small/playLoopOff.png create mode 100644 参考/unity-editor-icons/icons/small/playLoopOn.png create mode 100644 参考/unity-editor-icons/icons/small/playSpeed.png create mode 100644 参考/unity-editor-icons/icons/small/preAudioAutoPlayOff.png create mode 100644 参考/unity-editor-icons/icons/small/preAudioAutoPlayOff@2x.png create mode 100644 参考/unity-editor-icons/icons/small/preAudioAutoPlayOn.png create mode 100644 参考/unity-editor-icons/icons/small/preAudioLoopOff.png create mode 100644 参考/unity-editor-icons/icons/small/preAudioLoopOff@2x.png create mode 100644 参考/unity-editor-icons/icons/small/preAudioLoopOn.png create mode 100644 参考/unity-editor-icons/icons/small/preAudioPlayOff.png create mode 100644 参考/unity-editor-icons/icons/small/preAudioPlayOn.png create mode 100644 参考/unity-editor-icons/icons/small/processed/AreaLight Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/AreaLight Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/Assembly Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/AssetStore Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/AudioMixerView Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/AudioSource Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/CGProgram Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/Camera Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/ChorusFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/CollabChanges Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/CollabChangesConflict Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/CollabChangesDeleted Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/CollabConflict Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/CollabCreate Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/CollabDeleted Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/CollabEdit Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/CollabExclude Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/CollabMoved Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/DefaultSlate Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/DirectionalLight Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/DirectionalLight Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/DiscLight Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/EchoFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/Favorite Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/Favorite On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/Folder Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/Folder On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/FolderEmpty Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/FolderEmpty On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/FolderFavorite Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/FolderFavorite On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/FolderOpened Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/FolderOpened On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/GameManager Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/GridBrush Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/HighPassFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/HorizontalLayoutGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/Js Script Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/LensFlare Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/LightProbeGroup Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/LightProbeProxyVolume Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/LightingDataAssetParent Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/LowPassFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/Main Light Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/MetaFile Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/Microphone Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/MuscleClip Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/ParticleSystem Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/ParticleSystemForceField Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/PointLight Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/Prefab Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/Prefab On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/PrefabModel Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/PrefabModel On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/PrefabOverlayAdded Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/PrefabOverlayModified Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/PrefabOverlayRemoved Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/PrefabVariant Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/PrefabVariant On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/Projector Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/RaycastCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/ReflectionProbe Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/ReverbFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/SceneSet Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/Search Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/Search On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/SoftlockProjectBrowser Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/SpeedTreeModel Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/SpotLight Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/Spotlight Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/SpriteCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/UssScript Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/UxmlScript Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/VerticalLayoutGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/VideoEffect Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/VisualEffect Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/VisualEffectAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/WindZone Gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/boo Script Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/cs Script Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_AreaLight Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_Assembly Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_AssetStore Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_AudioMixerView Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_CGProgram Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_CollabChanges Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_CollabChangesConflict Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_CollabChangesDeleted Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_CollabConflict Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_CollabCreate Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_CollabDeleted Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_CollabEdit Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_CollabExclude Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_CollabMoved Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_DirectionalLight Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_Favorite Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_Favorite On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_Folder Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_FolderEmpty Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_FolderEmpty On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_FolderFavorite Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_FolderFavorite On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_FolderOpened Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_GridLayoutGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_HorizontalLayoutGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_Js Script Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_LightingDataAssetParent Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_Microphone Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_Prefab Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_Prefab On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_PrefabModel Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_PrefabModel On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_PrefabVariant Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_PrefabVariant On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_RaycastCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_Search Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_Spotlight Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_VerticalLayoutGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_boo Script Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/d_cs Script Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/dll Script Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot0_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot10_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot11_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot12_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot13_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot14_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot15_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot1_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot2_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot3_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot4_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot5_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot6_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot7_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot8_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/sv_icon_dot9_pix16_gizmo.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/AnimationWindowEvent Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/AudioImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/DefaultAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/EditorSettings Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/HumanTemplate Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/IHVImageFormatImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/LightingDataAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/LightmapParameters Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/LightmapParameters On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/ModelImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/SceneAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/SceneAsset On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/ShaderImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/SpeedTreeImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/SubstanceArchive Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/TextScriptImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/TextureImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/TrueTypeFontImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/VideoClipImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/animations/AnimatorController Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/animations/AnimatorController On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/animations/AnimatorState Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/animations/AnimatorStateMachine Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/animations/AnimatorStateTransition Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/animations/BlendTree Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/animations/d_AnimatorController Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/animations/d_AnimatorController On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/animations/d_AnimatorState Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/animations/d_AnimatorStateMachine Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/animations/d_AnimatorStateTransition Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/animations/d_BlendTree Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/audio/AudioMixerController Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/audio/AudioMixerController On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/audio/d_AudioMixerController Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/audio/d_AudioMixerController On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/d_AudioImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/d_DefaultAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/d_IHVImageFormatImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/d_LightingDataAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/d_LightmapParameters Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/d_LightmapParameters On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/d_ModelImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/d_SceneAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/d_ShaderImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/d_TextScriptImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/d_TextureImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/d_TrueTypeFontImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/graphs/animationstatemachine/AnyStateNode Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/graphs/animationstatemachine/d_AnyStateNode Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/presets/Preset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/u2d/SpriteAtlasAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/u2d/SpriteAtlasImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/u2d/d_SpriteAtlasAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/u2d/d_SpriteAtlasImporter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/vfx/VisualEffectSubgraphBlock Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/vfx/VisualEffectSubgraphOperator Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/vfx/d_VisualEffectSubgraphBlock Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditor/vfx/d_VisualEffectSubgraphOperator Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditorinternal/AssemblyDefinitionAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditorinternal/AssemblyDefinitionReferenceAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditorinternal/d_AssemblyDefinitionAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityeditorinternal/d_AssemblyDefinitionReferenceAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Animation Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AnimationClip Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AnimationClip On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Animator Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AnimatorOverrideController Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AnimatorOverrideController On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AreaEffector2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AudioChorusFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AudioClip Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AudioClip On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AudioDistortionFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AudioEchoFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AudioHighPassFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AudioListener Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AudioLowPassFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AudioReverbFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AudioReverbZone Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AudioSource Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Avatar Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AvatarMask Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/AvatarMask On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/BillboardAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/BillboardRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/BoxCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/BoxCollider2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/BuoyancyEffector2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Camera Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Canvas Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/CanvasGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/CanvasRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/CapsuleCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/CapsuleCollider2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/CharacterController Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/CharacterJoint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/CircleCollider2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Cloth Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/CompositeCollider2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ComputeShader Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ConfigurableJoint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ConstantForce Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ConstantForce2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Cubemap Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/DistanceJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/EdgeCollider2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/FixedJoint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/FixedJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Flare Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Flare On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/FlareLayer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Font Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Font On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/FrictionJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/GUILayer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/GUISkin Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/GUISkin On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/GUIText Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/GUITexture Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/GameObject Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/GameObject On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Grid Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Halo Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/HingeJoint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/HingeJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/LODGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/LensFlare Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Light Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/LightProbeGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/LightProbeProxyVolume Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/LightProbes Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/LightingSettings Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/LineRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Material Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Material On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Mesh Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/MeshCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/MeshFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/MeshRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Motion Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/MovieTexture Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/NetworkView Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/OcclusionArea Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/OcclusionPortal Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ParticleSystem Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ParticleSystemForceField Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/PhysicMaterial Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/PhysicMaterial On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/PhysicsMaterial2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/PhysicsMaterial2D On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/PlatformEffector2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/PointEffector2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/PolygonCollider2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ProceduralMaterial Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Projector Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/RayTracingShader Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/RectTransform Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ReflectionProbe Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/RelativeJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/RenderTexture Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/RenderTexture On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Rigidbody Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Rigidbody2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ScriptableObject Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ScriptableObject On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Shader Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ShaderVariantCollection Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/SkinnedMeshRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Skybox Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/SliderJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/SphereCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/SpringJoint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/SpringJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Sprite Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/SpriteMask Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/SpriteRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/StreamingController Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/SurfaceEffector2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/TargetJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Terrain Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/TerrainCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/TerrainData Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/TextAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/TextMesh Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Texture Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Texture2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/TrailRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/Transform Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/VisualEffect Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/VisualEffectAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/WheelCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/WheelJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/WindZone Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ai/NavMeshAgent Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ai/NavMeshData Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ai/NavMeshObstacle Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ai/OffMeshLink Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ai/d_NavMeshAgent Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ai/d_NavMeshData Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ai/d_NavMeshObstacle Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ai/d_OffMeshLink Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/analytics/AnalyticsTracker Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/analytics/d_AnalyticsTracker Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/animations/AimConstraint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/animations/LookAtConstraint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/animations/ParentConstraint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/animations/PositionConstraint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/animations/RotationConstraint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/animations/ScaleConstraint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/animations/d_AimConstraint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/animations/d_LookAtConstraint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/animations/d_ParentConstraint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/animations/d_PositionConstraint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/animations/d_RotationConstraint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/animations/d_ScaleConstraint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/audio/AudioMixerGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/audio/AudioMixerSnapshot Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/audio/AudioSpatializerMicrosoft Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/audio/d_AudioMixerGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/audio/d_AudioMixerSnapshot Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/audio/d_AudioSpatializerMicrosoft Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Animation Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AnimationClip Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AnimationClip On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Animator Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AnimatorOverrideController Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AnimatorOverrideController On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AreaEffector2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AudioChorusFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AudioClip Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AudioClip On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AudioDistortionFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AudioEchoFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AudioHighPassFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AudioListener Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AudioLowPassFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AudioReverbFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AudioReverbZone Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AudioSource Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Avatar Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AvatarMask Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_AvatarMask On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_BillboardAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_BillboardRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_BoxCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_BoxCollider2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_BuoyancyEffector2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Camera Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Canvas Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_CanvasGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_CanvasRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_CapsuleCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_CapsuleCollider2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_CharacterController Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_CharacterJoint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_CircleCollider2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Cloth Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_CompositeCollider2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_ComputeShader Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_ConfigurableJoint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_ConstantForce Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_ConstantForce2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Cubemap Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_DistanceJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_EdgeCollider2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_FixedJoint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Flare Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Flare On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_FlareLayer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Font Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_FrictionJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_GUISkin Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_GUISkin On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_GameObject Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Grid Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Halo Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_HingeJoint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_HingeJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_LODGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Light Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_LightProbeGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_LightProbeProxyVolume Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_LightProbes Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_LightingSettings Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_LineRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Material Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Material On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Mesh Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_MeshCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_MeshFilter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_MeshRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Motion Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_OcclusionArea Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_OcclusionPortal Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_ParticleSystem Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_ParticleSystemForceField Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_PhysicMaterial Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_PhysicMaterial On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_PhysicsMaterial2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_PhysicsMaterial2D On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_PlatformEffector2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_PointEffector2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_PolygonCollider2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_ProceduralMaterial Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Projector Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_RayTracingShader Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_RectTransform Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_ReflectionProbe Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_RelativeJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_RenderTexture Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_RenderTexture On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Rigidbody Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Rigidbody2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_ScriptableObject Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_ScriptableObject On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Shader Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_ShaderVariantCollection Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_SkinnedMeshRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Skybox Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_SliderJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_SphereCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_SpringJoint Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_SpringJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Sprite Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_SpriteMask Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_SpriteRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_StreamingController Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_SurfaceEffector2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_TargetJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Terrain Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_TerrainCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_TerrainData Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_TextAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Texture Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Texture2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_TrailRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_Transform Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_WheelCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_WheelJoint2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/d_WindZone Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/eventsystems/EventSystem Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/eventsystems/EventTrigger Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/eventsystems/HoloLensInputModule Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/eventsystems/Physics2DRaycaster Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/eventsystems/PhysicsRaycaster Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/eventsystems/StandaloneInputModule Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/eventsystems/TouchInputModule Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/eventsystems/d_EventSystem Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/eventsystems/d_EventTrigger Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/eventsystems/d_HoloLensInputModule Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/eventsystems/d_Physics2DRaycaster Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/eventsystems/d_PhysicsRaycaster Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/eventsystems/d_StandaloneInputModule Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/eventsystems/d_TouchInputModule Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/experimental/rendering/RayTracingShader Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/experimental/rendering/d_RaytracingShader Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/NetworkAnimator Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/NetworkDiscovery Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/NetworkIdentity Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/NetworkLobbyManager Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/NetworkLobbyPlayer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/NetworkManager Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/NetworkManagerHUD Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/NetworkMigrationManager Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/NetworkProximityChecker Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/NetworkStartPosition Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/NetworkTransform Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/NetworkTransformChild Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/NetworkTransformVisualizer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/d_NetworkAnimator Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/d_NetworkDiscovery Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/d_NetworkIdentity Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/d_NetworkLobbyManager Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/d_NetworkLobbyPlayer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/d_NetworkManager Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/d_NetworkManagerHUD Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/d_NetworkMigrationManager Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/d_NetworkProximityChecker Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/d_NetworkStartPosition Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/d_NetworkTransform Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/d_NetworkTransformChild Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/networking/d_NetworkTransformVisualizer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/playables/PlayableDirector Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/playables/d_PlayableDirector Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/rendering/SortingGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/rendering/d_SortingGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/spatialtracking/TrackedPoseDriver Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/tilemaps/Tile Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/tilemaps/Tilemap Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/tilemaps/TilemapCollider2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/tilemaps/TilemapRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/tilemaps/d_Tile Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/tilemaps/d_Tilemap Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/tilemaps/d_TilemapCollider2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/tilemaps/d_TilemapRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/timeline/SignalAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/timeline/SignalEmitter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/timeline/SignalReceiver Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/timeline/TimelineAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/timeline/TimelineAsset On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/timeline/d_SignalAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/timeline/d_SignalEmitter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/timeline/d_SignalReceiver Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/timeline/d_TimelineAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/timeline/d_TimelineAsset On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/u2d/SpriteAtlas Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/u2d/SpriteAtlas On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/u2d/SpriteShapeRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/u2d/d_SpriteAtlas Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/u2d/d_SpriteAtlas On Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/u2d/d_SpriteShapeRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/AspectRatioFitter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/Button Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/CanvasScaler Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/ContentSizeFitter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/Dropdown Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/FreeformLayoutGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/GraphicRaycaster Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/GridLayoutGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/HorizontalLayoutGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/Image Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/InputField Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/LayoutElement Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/Mask Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/Outline Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/PositionAsUV1 Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/RawImage Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/RectMask2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/ScrollRect Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/Scrollbar Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/Selectable Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/Shadow Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/Slider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/Text Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/Toggle Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/ToggleGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/VerticalLayoutGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_AspectRatioFitter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_Button Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_CanvasScaler Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_ContentSizeFitter Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_Dropdown Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_FreeformLayoutGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_GraphicRaycaster Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_GridLayoutGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_HorizontalLayoutGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_Image Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_InputField Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_LayoutElement Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_Mask Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_Outline Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_PhysicalResolution Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_PositionAsUV1 Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_RawImage Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_RectMask2D Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_ScrollRect Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_ScrollViewArea Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_Scrollbar Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_Selectable Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_SelectionList Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_SelectionListItem Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_SelectionListTemplate Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_Shadow Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_Slider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_Text Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_Toggle Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_ToggleGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/ui/d_VerticalLayoutGroup Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/uielements/StyleSheet Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/uielements/VisualTreeAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/uielements/d_StyleSheet Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/uielements/d_VisualTreeAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/vfx/VisualEffect Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/vfx/VisualEffectAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/vfx/d_VisualEffect Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/vfx/d_VisualEffectAsset Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/video/VideoClip Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/video/VideoPlayer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/video/d_VideoPlayer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/xr/wsa/SpatialMappingCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/xr/wsa/SpatialMappingRenderer Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/xr/wsa/WorldAnchor Icon.png create mode 100644 参考/unity-editor-icons/icons/small/processed/unityengine/xr/wsa/d_SpatialMappingCollider Icon.png create mode 100644 参考/unity-editor-icons/icons/small/redGroove.png create mode 100644 参考/unity-editor-icons/icons/small/rightBracket.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_notpickable-mixed.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_notpickable-mixed@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_notpickable-mixed_hover.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_notpickable-mixed_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_notpickable.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_notpickable@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_notpickable_hover.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_notpickable_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_pickable-mixed.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_pickable-mixed@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_pickable-mixed_hover.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_pickable-mixed_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_pickable.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_pickable@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_pickable_hover.png create mode 100644 参考/unity-editor-icons/icons/small/scenepicking_pickable_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_hidden-mixed.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_hidden-mixed@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_hidden-mixed_hover.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_hidden-mixed_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_hidden.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_hidden@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_hidden_hover.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_hidden_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_scene_hover.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_scene_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_visible-mixed.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_visible-mixed@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_visible-mixed_hover.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_visible-mixed_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_visible.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_visible@2x.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_visible_hover.png create mode 100644 参考/unity-editor-icons/icons/small/scenevis_visible_hover@2x.png create mode 100644 参考/unity-editor-icons/icons/small/shortcutmanager/alertDialog.png create mode 100644 参考/unity-editor-icons/icons/small/shortcutmanager/alertDialog@2x.png create mode 100644 参考/unity-editor-icons/icons/small/shortcutmanager/conflict-icon.png create mode 100644 参考/unity-editor-icons/icons/small/shortcutmanager/conflict-icon@2x.png create mode 100644 参考/unity-editor-icons/icons/small/snap/GridAxisX.png create mode 100644 参考/unity-editor-icons/icons/small/snap/GridAxisX@2x.png create mode 100644 参考/unity-editor-icons/icons/small/snap/GridAxisY.png create mode 100644 参考/unity-editor-icons/icons/small/snap/GridAxisY@2x.png create mode 100644 参考/unity-editor-icons/icons/small/snap/GridAxisZ.png create mode 100644 参考/unity-editor-icons/icons/small/snap/GridAxisZ@2x.png create mode 100644 参考/unity-editor-icons/icons/small/snap/SceneViewSnap-Off.png create mode 100644 参考/unity-editor-icons/icons/small/snap/SceneViewSnap-Off@2x.png create mode 100644 参考/unity-editor-icons/icons/small/snap/SceneViewSnap-On.png create mode 100644 参考/unity-editor-icons/icons/small/snap/SceneViewSnap-On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/snap/d_GridAxisX.png create mode 100644 参考/unity-editor-icons/icons/small/snap/d_GridAxisX@2x.png create mode 100644 参考/unity-editor-icons/icons/small/snap/d_GridAxisY.png create mode 100644 参考/unity-editor-icons/icons/small/snap/d_GridAxisY@2x.png create mode 100644 参考/unity-editor-icons/icons/small/snap/d_GridAxisZ.png create mode 100644 参考/unity-editor-icons/icons/small/snap/d_GridAxisZ@2x.png create mode 100644 参考/unity-editor-icons/icons/small/snap/d_SceneViewSnap-Off.png create mode 100644 参考/unity-editor-icons/icons/small/snap/d_SceneViewSnap-Off@2x.png create mode 100644 参考/unity-editor-icons/icons/small/snap/d_SceneViewSnap-On.png create mode 100644 参考/unity-editor-icons/icons/small/snap/d_SceneViewSnap-On@2x.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot0_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot10_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot11_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot12_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot13_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot14_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot15_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot1_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot2_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot3_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot4_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot5_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot6_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot7_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot8_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_dot9_sml.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_name0.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_name1.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_name2.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_name3.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_name4.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_name5.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_name6.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_name7.png create mode 100644 参考/unity-editor-icons/icons/small/sv_icon_none.png create mode 100644 参考/unity-editor-icons/icons/small/sv_label_0.png create mode 100644 参考/unity-editor-icons/icons/small/sv_label_1.png create mode 100644 参考/unity-editor-icons/icons/small/sv_label_2.png create mode 100644 参考/unity-editor-icons/icons/small/sv_label_3.png create mode 100644 参考/unity-editor-icons/icons/small/sv_label_4.png create mode 100644 参考/unity-editor-icons/icons/small/sv_label_5.png create mode 100644 参考/unity-editor-icons/icons/small/sv_label_6.png create mode 100644 参考/unity-editor-icons/icons/small/sv_label_7.png create mode 100644 参考/unity-editor-icons/icons/small/tab_next.png create mode 100644 参考/unity-editor-icons/icons/small/tab_next@2x.png create mode 100644 参考/unity-editor-icons/icons/small/tab_prev.png create mode 100644 参考/unity-editor-icons/icons/small/tab_prev@2x.png create mode 100644 参考/unity-editor-icons/icons/small/tranp.png create mode 100644 参考/unity-editor-icons/icons/small/tree_icon.png create mode 100644 参考/unity-editor-icons/icons/small/tree_icon_branch.png create mode 100644 参考/unity-editor-icons/icons/small/tree_icon_branch_frond.png create mode 100644 参考/unity-editor-icons/icons/small/tree_icon_frond.png create mode 100644 参考/unity-editor-icons/icons/small/tree_icon_leaf.png create mode 100644 参考/unity-editor-icons/icons/small/vcs_change.png create mode 100644 参考/unity-editor-icons/icons/small/vcs_document.png create mode 100644 参考/unity-editor-icons/icons/small/vcs_incoming.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_AddedLocal.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_AddedLocal@2x.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_AddedRemote.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_AddedRemote@2x.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_BlueLeftParenthesis.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_BlueLeftParenthesis@2x.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_BlueRightParenthesis.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_BlueRightParenthesis@2x.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_CheckOutLocal.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_CheckOutLocal@2x.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_CheckOutRemote.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_CheckOutRemote@2x.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_Conflicted.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_Conflicted@2x.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_DeletedLocal.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_DeletedLocal@2x.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_DeletedRemote.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_DeletedRemote@2x.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_Local.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_Local@2x.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_LockedLocal.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_LockedLocal@2x.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_LockedRemote.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_LockedRemote@2x.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_OutOfSync.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_OutOfSync@2x.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_RedLeftParenthesis.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_RedLeftParenthesis@2x.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_RedRightParenthesis.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_RedRightParenthesis@2x.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_Updating.png create mode 100644 参考/unity-editor-icons/icons/small/versioncontrol/P4_Updating@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_graph.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_graph_close_h.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_graph_max_h.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_graph_min_h.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_close.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_close@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_close_a.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_close_a@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_close_h.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_close_h@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_inact.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_inact@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_max.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_max@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_max_a.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_max_a@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_max_h.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_max_h@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_min.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_min@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_min_a.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_min_a@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_min_h.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_mac_min_h@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_close.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_close@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_close_a.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_close_a@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_close_h.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_close_h@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_max.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_max@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_max_a.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_max_a@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_max_h.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_max_h@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_min.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_min_a.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_min_h.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_rest.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_rest_a.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_rest_h.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_restore.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_restore@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_restore_a.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_restore_a@2x.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_restore_h.png create mode 100644 参考/unity-editor-icons/icons/small/winbtn_win_restore_h@2x.png create mode 100644 参考/unity-editor-icons/resize.bat create mode 100644 参考/unity-icons/AreaLight Gizmo.png create mode 100644 参考/unity-icons/AreaLight Icon.png create mode 100644 参考/unity-icons/Assembly Icon.png create mode 100644 参考/unity-icons/AssetStore Icon.png create mode 100644 参考/unity-icons/AudioMixerView Icon.png create mode 100644 参考/unity-icons/AudioSource Gizmo.png create mode 100644 参考/unity-icons/CGProgram Icon.png create mode 100644 参考/unity-icons/Camera Gizmo.png create mode 100644 参考/unity-icons/ChorusFilter Icon.png create mode 100644 参考/unity-icons/CollabChanges Icon.png create mode 100644 参考/unity-icons/CollabChangesConflict Icon.png create mode 100644 参考/unity-icons/CollabChangesDeleted Icon.png create mode 100644 参考/unity-icons/CollabConflict Icon.png create mode 100644 参考/unity-icons/CollabCreate Icon.png create mode 100644 参考/unity-icons/CollabDeleted Icon.png create mode 100644 参考/unity-icons/CollabEdit Icon.png create mode 100644 参考/unity-icons/CollabExclude Icon.png create mode 100644 参考/unity-icons/CollabMoved Icon.png create mode 100644 参考/unity-icons/DefaultSlate Icon.png create mode 100644 参考/unity-icons/DirectionalLight Gizmo.png create mode 100644 参考/unity-icons/DirectionalLight Icon.png create mode 100644 参考/unity-icons/DiscLight Icon.png create mode 100644 参考/unity-icons/EchoFilter Icon.png create mode 100644 参考/unity-icons/Favorite Icon.png create mode 100644 参考/unity-icons/Favorite On Icon.png create mode 100644 参考/unity-icons/Folder Icon.png create mode 100644 参考/unity-icons/Folder On Icon.png create mode 100644 参考/unity-icons/FolderEmpty Icon.png create mode 100644 参考/unity-icons/FolderEmpty On Icon.png create mode 100644 参考/unity-icons/FolderFavorite Icon.png create mode 100644 参考/unity-icons/FolderFavorite On Icon.png create mode 100644 参考/unity-icons/FolderOpened Icon.png create mode 100644 参考/unity-icons/FolderOpened On Icon.png create mode 100644 参考/unity-icons/GameManager Icon.png create mode 100644 参考/unity-icons/GridBrush Icon.png create mode 100644 参考/unity-icons/HighPassFilter Icon.png create mode 100644 参考/unity-icons/HorizontalLayoutGroup Icon.png create mode 100644 参考/unity-icons/Js Script Icon.png create mode 100644 参考/unity-icons/LensFlare Gizmo.png create mode 100644 参考/unity-icons/LightProbeGroup Gizmo.png create mode 100644 参考/unity-icons/LightProbeProxyVolume Gizmo.png create mode 100644 参考/unity-icons/LightingDataAssetParent Icon.png create mode 100644 参考/unity-icons/LowPassFilter Icon.png create mode 100644 参考/unity-icons/Main Light Gizmo.png create mode 100644 参考/unity-icons/MetaFile Icon.png create mode 100644 参考/unity-icons/Microphone Icon.png create mode 100644 参考/unity-icons/MuscleClip Icon.png create mode 100644 参考/unity-icons/ParticleSystem Gizmo.png create mode 100644 参考/unity-icons/ParticleSystemForceField Gizmo.png create mode 100644 参考/unity-icons/PointLight Gizmo.png create mode 100644 参考/unity-icons/Prefab Icon.png create mode 100644 参考/unity-icons/Prefab On Icon.png create mode 100644 参考/unity-icons/PrefabModel Icon.png create mode 100644 参考/unity-icons/PrefabModel On Icon.png create mode 100644 参考/unity-icons/PrefabOverlayAdded Icon.png create mode 100644 参考/unity-icons/PrefabOverlayModified Icon.png create mode 100644 参考/unity-icons/PrefabOverlayRemoved Icon.png create mode 100644 参考/unity-icons/PrefabVariant Icon.png create mode 100644 参考/unity-icons/PrefabVariant On Icon.png create mode 100644 参考/unity-icons/Projector Gizmo.png create mode 100644 参考/unity-icons/RaycastCollider Icon.png create mode 100644 参考/unity-icons/ReflectionProbe Gizmo.png create mode 100644 参考/unity-icons/ReverbFilter Icon.png create mode 100644 参考/unity-icons/SceneSet Icon.png create mode 100644 参考/unity-icons/Search Icon.png create mode 100644 参考/unity-icons/Search On Icon.png create mode 100644 参考/unity-icons/SoftlockProjectBrowser Icon.png create mode 100644 参考/unity-icons/SpeedTreeModel Icon.png create mode 100644 参考/unity-icons/SpotLight Gizmo.png create mode 100644 参考/unity-icons/Spotlight Icon.png create mode 100644 参考/unity-icons/SpriteCollider Icon.png create mode 100644 参考/unity-icons/UssScript Icon.png create mode 100644 参考/unity-icons/UxmlScript Icon.png create mode 100644 参考/unity-icons/VerticalLayoutGroup Icon.png create mode 100644 参考/unity-icons/VideoEffect Icon.png create mode 100644 参考/unity-icons/VisualEffect Gizmo.png create mode 100644 参考/unity-icons/VisualEffectAsset Icon.png create mode 100644 参考/unity-icons/WindZone Gizmo.png create mode 100644 参考/unity-icons/boo Script Icon.png create mode 100644 参考/unity-icons/cs Script Icon.png create mode 100644 参考/unity-icons/d_AreaLight Icon.png create mode 100644 参考/unity-icons/d_Assembly Icon.png create mode 100644 参考/unity-icons/d_AssetStore Icon.png create mode 100644 参考/unity-icons/d_AudioMixerView Icon.png create mode 100644 参考/unity-icons/d_CGProgram Icon.png create mode 100644 参考/unity-icons/d_CollabChanges Icon.png create mode 100644 参考/unity-icons/d_CollabChangesConflict Icon.png create mode 100644 参考/unity-icons/d_CollabChangesDeleted Icon.png create mode 100644 参考/unity-icons/d_CollabConflict Icon.png create mode 100644 参考/unity-icons/d_CollabCreate Icon.png create mode 100644 参考/unity-icons/d_CollabDeleted Icon.png create mode 100644 参考/unity-icons/d_CollabEdit Icon.png create mode 100644 参考/unity-icons/d_CollabExclude Icon.png create mode 100644 参考/unity-icons/d_CollabMoved Icon.png create mode 100644 参考/unity-icons/d_DirectionalLight Icon.png create mode 100644 参考/unity-icons/d_Favorite Icon.png create mode 100644 参考/unity-icons/d_Favorite On Icon.png create mode 100644 参考/unity-icons/d_Folder Icon.png create mode 100644 参考/unity-icons/d_FolderEmpty Icon.png create mode 100644 参考/unity-icons/d_FolderEmpty On Icon.png create mode 100644 参考/unity-icons/d_FolderFavorite Icon.png create mode 100644 参考/unity-icons/d_FolderFavorite On Icon.png create mode 100644 参考/unity-icons/d_FolderOpened Icon.png create mode 100644 参考/unity-icons/d_GridLayoutGroup Icon.png create mode 100644 参考/unity-icons/d_HorizontalLayoutGroup Icon.png create mode 100644 参考/unity-icons/d_Js Script Icon.png create mode 100644 参考/unity-icons/d_LightingDataAssetParent Icon.png create mode 100644 参考/unity-icons/d_Microphone Icon.png create mode 100644 参考/unity-icons/d_Prefab Icon.png create mode 100644 参考/unity-icons/d_Prefab On Icon.png create mode 100644 参考/unity-icons/d_PrefabModel Icon.png create mode 100644 参考/unity-icons/d_PrefabModel On Icon.png create mode 100644 参考/unity-icons/d_PrefabVariant Icon.png create mode 100644 参考/unity-icons/d_PrefabVariant On Icon.png create mode 100644 参考/unity-icons/d_RaycastCollider Icon.png create mode 100644 参考/unity-icons/d_Search Icon.png create mode 100644 参考/unity-icons/d_Spotlight Icon.png create mode 100644 参考/unity-icons/d_VerticalLayoutGroup Icon.png create mode 100644 参考/unity-icons/d_boo Script Icon.png create mode 100644 参考/unity-icons/d_cs Script Icon.png create mode 100644 参考/unity-icons/dll Script Icon.png create mode 100644 参考/unity-icons/sv_icon_dot0_pix16_gizmo.png create mode 100644 参考/unity-icons/sv_icon_dot10_pix16_gizmo.png create mode 100644 参考/unity-icons/sv_icon_dot11_pix16_gizmo.png create mode 100644 参考/unity-icons/sv_icon_dot12_pix16_gizmo.png create mode 100644 参考/unity-icons/sv_icon_dot13_pix16_gizmo.png create mode 100644 参考/unity-icons/sv_icon_dot14_pix16_gizmo.png create mode 100644 参考/unity-icons/sv_icon_dot15_pix16_gizmo.png create mode 100644 参考/unity-icons/sv_icon_dot1_pix16_gizmo.png create mode 100644 参考/unity-icons/sv_icon_dot2_pix16_gizmo.png create mode 100644 参考/unity-icons/sv_icon_dot3_pix16_gizmo.png create mode 100644 参考/unity-icons/sv_icon_dot4_pix16_gizmo.png create mode 100644 参考/unity-icons/sv_icon_dot5_pix16_gizmo.png create mode 100644 参考/unity-icons/sv_icon_dot6_pix16_gizmo.png create mode 100644 参考/unity-icons/sv_icon_dot7_pix16_gizmo.png create mode 100644 参考/unity-icons/sv_icon_dot8_pix16_gizmo.png create mode 100644 参考/unity-icons/sv_icon_dot9_pix16_gizmo.png create mode 100644 参考/unity-icons/unityeditor/AnimationWindowEvent Icon.png create mode 100644 参考/unity-icons/unityeditor/AudioImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/DefaultAsset Icon.png create mode 100644 参考/unity-icons/unityeditor/EditorSettings Icon.png create mode 100644 参考/unity-icons/unityeditor/HumanTemplate Icon.png create mode 100644 参考/unity-icons/unityeditor/IHVImageFormatImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/LightingDataAsset Icon.png create mode 100644 参考/unity-icons/unityeditor/LightmapParameters Icon.png create mode 100644 参考/unity-icons/unityeditor/LightmapParameters On Icon.png create mode 100644 参考/unity-icons/unityeditor/ModelImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/SceneAsset Icon.png create mode 100644 参考/unity-icons/unityeditor/SceneAsset On Icon.png create mode 100644 参考/unity-icons/unityeditor/ShaderImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/SpeedTreeImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/SubstanceArchive Icon.png create mode 100644 参考/unity-icons/unityeditor/TextScriptImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/TextureImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/TrueTypeFontImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/VideoClipImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/animations/AnimatorController Icon.png create mode 100644 参考/unity-icons/unityeditor/animations/AnimatorController On Icon.png create mode 100644 参考/unity-icons/unityeditor/animations/AnimatorState Icon.png create mode 100644 参考/unity-icons/unityeditor/animations/AnimatorStateMachine Icon.png create mode 100644 参考/unity-icons/unityeditor/animations/AnimatorStateTransition Icon.png create mode 100644 参考/unity-icons/unityeditor/animations/BlendTree Icon.png create mode 100644 参考/unity-icons/unityeditor/animations/d_AnimatorController Icon.png create mode 100644 参考/unity-icons/unityeditor/animations/d_AnimatorController On Icon.png create mode 100644 参考/unity-icons/unityeditor/animations/d_AnimatorState Icon.png create mode 100644 参考/unity-icons/unityeditor/animations/d_AnimatorStateMachine Icon.png create mode 100644 参考/unity-icons/unityeditor/animations/d_AnimatorStateTransition Icon.png create mode 100644 参考/unity-icons/unityeditor/animations/d_BlendTree Icon.png create mode 100644 参考/unity-icons/unityeditor/audio/AudioMixerController Icon.png create mode 100644 参考/unity-icons/unityeditor/audio/AudioMixerController On Icon.png create mode 100644 参考/unity-icons/unityeditor/audio/d_AudioMixerController Icon.png create mode 100644 参考/unity-icons/unityeditor/audio/d_AudioMixerController On Icon.png create mode 100644 参考/unity-icons/unityeditor/d_AudioImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/d_DefaultAsset Icon.png create mode 100644 参考/unity-icons/unityeditor/d_IHVImageFormatImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/d_LightingDataAsset Icon.png create mode 100644 参考/unity-icons/unityeditor/d_LightmapParameters Icon.png create mode 100644 参考/unity-icons/unityeditor/d_LightmapParameters On Icon.png create mode 100644 参考/unity-icons/unityeditor/d_ModelImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/d_SceneAsset Icon.png create mode 100644 参考/unity-icons/unityeditor/d_ShaderImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/d_TextScriptImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/d_TextureImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/d_TrueTypeFontImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/graphs/animationstatemachine/AnyStateNode Icon.png create mode 100644 参考/unity-icons/unityeditor/graphs/animationstatemachine/d_AnyStateNode Icon.png create mode 100644 参考/unity-icons/unityeditor/presets/Preset Icon.png create mode 100644 参考/unity-icons/unityeditor/u2d/SpriteAtlasAsset Icon.png create mode 100644 参考/unity-icons/unityeditor/u2d/SpriteAtlasImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/u2d/d_SpriteAtlasAsset Icon.png create mode 100644 参考/unity-icons/unityeditor/u2d/d_SpriteAtlasImporter Icon.png create mode 100644 参考/unity-icons/unityeditor/vfx/VisualEffectSubgraphBlock Icon.png create mode 100644 参考/unity-icons/unityeditor/vfx/VisualEffectSubgraphOperator Icon.png create mode 100644 参考/unity-icons/unityeditor/vfx/d_VisualEffectSubgraphBlock Icon.png create mode 100644 参考/unity-icons/unityeditor/vfx/d_VisualEffectSubgraphOperator Icon.png create mode 100644 参考/unity-icons/unityeditorinternal/AssemblyDefinitionAsset Icon.png create mode 100644 参考/unity-icons/unityeditorinternal/AssemblyDefinitionReferenceAsset Icon.png create mode 100644 参考/unity-icons/unityeditorinternal/d_AssemblyDefinitionAsset Icon.png create mode 100644 参考/unity-icons/unityeditorinternal/d_AssemblyDefinitionReferenceAsset Icon.png create mode 100644 参考/unity-icons/unityengine/Animation Icon.png create mode 100644 参考/unity-icons/unityengine/AnimationClip Icon.png create mode 100644 参考/unity-icons/unityengine/AnimationClip On Icon.png create mode 100644 参考/unity-icons/unityengine/Animator Icon.png create mode 100644 参考/unity-icons/unityengine/AnimatorOverrideController Icon.png create mode 100644 参考/unity-icons/unityengine/AnimatorOverrideController On Icon.png create mode 100644 参考/unity-icons/unityengine/AreaEffector2D Icon.png create mode 100644 参考/unity-icons/unityengine/AudioChorusFilter Icon.png create mode 100644 参考/unity-icons/unityengine/AudioClip Icon.png create mode 100644 参考/unity-icons/unityengine/AudioClip On Icon.png create mode 100644 参考/unity-icons/unityengine/AudioDistortionFilter Icon.png create mode 100644 参考/unity-icons/unityengine/AudioEchoFilter Icon.png create mode 100644 参考/unity-icons/unityengine/AudioHighPassFilter Icon.png create mode 100644 参考/unity-icons/unityengine/AudioListener Icon.png create mode 100644 参考/unity-icons/unityengine/AudioLowPassFilter Icon.png create mode 100644 参考/unity-icons/unityengine/AudioReverbFilter Icon.png create mode 100644 参考/unity-icons/unityengine/AudioReverbZone Icon.png create mode 100644 参考/unity-icons/unityengine/AudioSource Icon.png create mode 100644 参考/unity-icons/unityengine/Avatar Icon.png create mode 100644 参考/unity-icons/unityengine/AvatarMask Icon.png create mode 100644 参考/unity-icons/unityengine/AvatarMask On Icon.png create mode 100644 参考/unity-icons/unityengine/BillboardAsset Icon.png create mode 100644 参考/unity-icons/unityengine/BillboardRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/BoxCollider Icon.png create mode 100644 参考/unity-icons/unityengine/BoxCollider2D Icon.png create mode 100644 参考/unity-icons/unityengine/BuoyancyEffector2D Icon.png create mode 100644 参考/unity-icons/unityengine/Camera Icon.png create mode 100644 参考/unity-icons/unityengine/Canvas Icon.png create mode 100644 参考/unity-icons/unityengine/CanvasGroup Icon.png create mode 100644 参考/unity-icons/unityengine/CanvasRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/CapsuleCollider Icon.png create mode 100644 参考/unity-icons/unityengine/CapsuleCollider2D Icon.png create mode 100644 参考/unity-icons/unityengine/CharacterController Icon.png create mode 100644 参考/unity-icons/unityengine/CharacterJoint Icon.png create mode 100644 参考/unity-icons/unityengine/CircleCollider2D Icon.png create mode 100644 参考/unity-icons/unityengine/Cloth Icon.png create mode 100644 参考/unity-icons/unityengine/CompositeCollider2D Icon.png create mode 100644 参考/unity-icons/unityengine/ComputeShader Icon.png create mode 100644 参考/unity-icons/unityengine/ConfigurableJoint Icon.png create mode 100644 参考/unity-icons/unityengine/ConstantForce Icon.png create mode 100644 参考/unity-icons/unityengine/ConstantForce2D Icon.png create mode 100644 参考/unity-icons/unityengine/Cubemap Icon.png create mode 100644 参考/unity-icons/unityengine/DistanceJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/EdgeCollider2D Icon.png create mode 100644 参考/unity-icons/unityengine/FixedJoint Icon.png create mode 100644 参考/unity-icons/unityengine/FixedJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/Flare Icon.png create mode 100644 参考/unity-icons/unityengine/Flare On Icon.png create mode 100644 参考/unity-icons/unityengine/FlareLayer Icon.png create mode 100644 参考/unity-icons/unityengine/Font Icon.png create mode 100644 参考/unity-icons/unityengine/Font On Icon.png create mode 100644 参考/unity-icons/unityengine/FrictionJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/GUILayer Icon.png create mode 100644 参考/unity-icons/unityengine/GUISkin Icon.png create mode 100644 参考/unity-icons/unityengine/GUISkin On Icon.png create mode 100644 参考/unity-icons/unityengine/GUIText Icon.png create mode 100644 参考/unity-icons/unityengine/GUITexture Icon.png create mode 100644 参考/unity-icons/unityengine/GameObject Icon.png create mode 100644 参考/unity-icons/unityengine/GameObject On Icon.png create mode 100644 参考/unity-icons/unityengine/Grid Icon.png create mode 100644 参考/unity-icons/unityengine/Halo Icon.png create mode 100644 参考/unity-icons/unityengine/HingeJoint Icon.png create mode 100644 参考/unity-icons/unityengine/HingeJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/LODGroup Icon.png create mode 100644 参考/unity-icons/unityengine/LensFlare Icon.png create mode 100644 参考/unity-icons/unityengine/Light Icon.png create mode 100644 参考/unity-icons/unityengine/LightProbeGroup Icon.png create mode 100644 参考/unity-icons/unityengine/LightProbeProxyVolume Icon.png create mode 100644 参考/unity-icons/unityengine/LightProbes Icon.png create mode 100644 参考/unity-icons/unityengine/LightingSettings Icon.png create mode 100644 参考/unity-icons/unityengine/LineRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/Material Icon.png create mode 100644 参考/unity-icons/unityengine/Material On Icon.png create mode 100644 参考/unity-icons/unityengine/Mesh Icon.png create mode 100644 参考/unity-icons/unityengine/MeshCollider Icon.png create mode 100644 参考/unity-icons/unityengine/MeshFilter Icon.png create mode 100644 参考/unity-icons/unityengine/MeshRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/Motion Icon.png create mode 100644 参考/unity-icons/unityengine/MovieTexture Icon.png create mode 100644 参考/unity-icons/unityengine/NetworkView Icon.png create mode 100644 参考/unity-icons/unityengine/OcclusionArea Icon.png create mode 100644 参考/unity-icons/unityengine/OcclusionPortal Icon.png create mode 100644 参考/unity-icons/unityengine/ParticleSystem Icon.png create mode 100644 参考/unity-icons/unityengine/ParticleSystemForceField Icon.png create mode 100644 参考/unity-icons/unityengine/PhysicMaterial Icon.png create mode 100644 参考/unity-icons/unityengine/PhysicMaterial On Icon.png create mode 100644 参考/unity-icons/unityengine/PhysicsMaterial2D Icon.png create mode 100644 参考/unity-icons/unityengine/PhysicsMaterial2D On Icon.png create mode 100644 参考/unity-icons/unityengine/PlatformEffector2D Icon.png create mode 100644 参考/unity-icons/unityengine/PointEffector2D Icon.png create mode 100644 参考/unity-icons/unityengine/PolygonCollider2D Icon.png create mode 100644 参考/unity-icons/unityengine/ProceduralMaterial Icon.png create mode 100644 参考/unity-icons/unityengine/Projector Icon.png create mode 100644 参考/unity-icons/unityengine/RayTracingShader Icon.png create mode 100644 参考/unity-icons/unityengine/RectTransform Icon.png create mode 100644 参考/unity-icons/unityengine/ReflectionProbe Icon.png create mode 100644 参考/unity-icons/unityengine/RelativeJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/RenderTexture Icon.png create mode 100644 参考/unity-icons/unityengine/RenderTexture On Icon.png create mode 100644 参考/unity-icons/unityengine/Rigidbody Icon.png create mode 100644 参考/unity-icons/unityengine/Rigidbody2D Icon.png create mode 100644 参考/unity-icons/unityengine/ScriptableObject Icon.png create mode 100644 参考/unity-icons/unityengine/ScriptableObject On Icon.png create mode 100644 参考/unity-icons/unityengine/Shader Icon.png create mode 100644 参考/unity-icons/unityengine/ShaderVariantCollection Icon.png create mode 100644 参考/unity-icons/unityengine/SkinnedMeshRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/Skybox Icon.png create mode 100644 参考/unity-icons/unityengine/SliderJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/SphereCollider Icon.png create mode 100644 参考/unity-icons/unityengine/SpringJoint Icon.png create mode 100644 参考/unity-icons/unityengine/SpringJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/Sprite Icon.png create mode 100644 参考/unity-icons/unityengine/SpriteMask Icon.png create mode 100644 参考/unity-icons/unityengine/SpriteRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/StreamingController Icon.png create mode 100644 参考/unity-icons/unityengine/SurfaceEffector2D Icon.png create mode 100644 参考/unity-icons/unityengine/TargetJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/Terrain Icon.png create mode 100644 参考/unity-icons/unityengine/TerrainCollider Icon.png create mode 100644 参考/unity-icons/unityengine/TerrainData Icon.png create mode 100644 参考/unity-icons/unityengine/TextAsset Icon.png create mode 100644 参考/unity-icons/unityengine/TextMesh Icon.png create mode 100644 参考/unity-icons/unityengine/Texture Icon.png create mode 100644 参考/unity-icons/unityengine/Texture2D Icon.png create mode 100644 参考/unity-icons/unityengine/TrailRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/Transform Icon.png create mode 100644 参考/unity-icons/unityengine/VisualEffect Icon.png create mode 100644 参考/unity-icons/unityengine/VisualEffectAsset Icon.png create mode 100644 参考/unity-icons/unityengine/WheelCollider Icon.png create mode 100644 参考/unity-icons/unityengine/WheelJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/WindZone Icon.png create mode 100644 参考/unity-icons/unityengine/ai/NavMeshAgent Icon.png create mode 100644 参考/unity-icons/unityengine/ai/NavMeshData Icon.png create mode 100644 参考/unity-icons/unityengine/ai/NavMeshObstacle Icon.png create mode 100644 参考/unity-icons/unityengine/ai/OffMeshLink Icon.png create mode 100644 参考/unity-icons/unityengine/ai/d_NavMeshAgent Icon.png create mode 100644 参考/unity-icons/unityengine/ai/d_NavMeshData Icon.png create mode 100644 参考/unity-icons/unityengine/ai/d_NavMeshObstacle Icon.png create mode 100644 参考/unity-icons/unityengine/ai/d_OffMeshLink Icon.png create mode 100644 参考/unity-icons/unityengine/analytics/AnalyticsTracker Icon.png create mode 100644 参考/unity-icons/unityengine/analytics/d_AnalyticsTracker Icon.png create mode 100644 参考/unity-icons/unityengine/animations/AimConstraint Icon.png create mode 100644 参考/unity-icons/unityengine/animations/LookAtConstraint Icon.png create mode 100644 参考/unity-icons/unityengine/animations/ParentConstraint Icon.png create mode 100644 参考/unity-icons/unityengine/animations/PositionConstraint Icon.png create mode 100644 参考/unity-icons/unityengine/animations/RotationConstraint Icon.png create mode 100644 参考/unity-icons/unityengine/animations/ScaleConstraint Icon.png create mode 100644 参考/unity-icons/unityengine/animations/d_AimConstraint Icon.png create mode 100644 参考/unity-icons/unityengine/animations/d_LookAtConstraint Icon.png create mode 100644 参考/unity-icons/unityengine/animations/d_ParentConstraint Icon.png create mode 100644 参考/unity-icons/unityengine/animations/d_PositionConstraint Icon.png create mode 100644 参考/unity-icons/unityengine/animations/d_RotationConstraint Icon.png create mode 100644 参考/unity-icons/unityengine/animations/d_ScaleConstraint Icon.png create mode 100644 参考/unity-icons/unityengine/audio/AudioMixerGroup Icon.png create mode 100644 参考/unity-icons/unityengine/audio/AudioMixerSnapshot Icon.png create mode 100644 参考/unity-icons/unityengine/audio/AudioSpatializerMicrosoft Icon.png create mode 100644 参考/unity-icons/unityengine/audio/d_AudioMixerGroup Icon.png create mode 100644 参考/unity-icons/unityengine/audio/d_AudioMixerSnapshot Icon.png create mode 100644 参考/unity-icons/unityengine/audio/d_AudioSpatializerMicrosoft Icon.png create mode 100644 参考/unity-icons/unityengine/d_Animation Icon.png create mode 100644 参考/unity-icons/unityengine/d_AnimationClip Icon.png create mode 100644 参考/unity-icons/unityengine/d_AnimationClip On Icon.png create mode 100644 参考/unity-icons/unityengine/d_Animator Icon.png create mode 100644 参考/unity-icons/unityengine/d_AnimatorOverrideController Icon.png create mode 100644 参考/unity-icons/unityengine/d_AnimatorOverrideController On Icon.png create mode 100644 参考/unity-icons/unityengine/d_AreaEffector2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_AudioChorusFilter Icon.png create mode 100644 参考/unity-icons/unityengine/d_AudioClip Icon.png create mode 100644 参考/unity-icons/unityengine/d_AudioClip On Icon.png create mode 100644 参考/unity-icons/unityengine/d_AudioDistortionFilter Icon.png create mode 100644 参考/unity-icons/unityengine/d_AudioEchoFilter Icon.png create mode 100644 参考/unity-icons/unityengine/d_AudioHighPassFilter Icon.png create mode 100644 参考/unity-icons/unityengine/d_AudioListener Icon.png create mode 100644 参考/unity-icons/unityengine/d_AudioLowPassFilter Icon.png create mode 100644 参考/unity-icons/unityengine/d_AudioReverbFilter Icon.png create mode 100644 参考/unity-icons/unityengine/d_AudioReverbZone Icon.png create mode 100644 参考/unity-icons/unityengine/d_AudioSource Icon.png create mode 100644 参考/unity-icons/unityengine/d_Avatar Icon.png create mode 100644 参考/unity-icons/unityengine/d_AvatarMask Icon.png create mode 100644 参考/unity-icons/unityengine/d_AvatarMask On Icon.png create mode 100644 参考/unity-icons/unityengine/d_BillboardAsset Icon.png create mode 100644 参考/unity-icons/unityengine/d_BillboardRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/d_BoxCollider Icon.png create mode 100644 参考/unity-icons/unityengine/d_BoxCollider2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_BuoyancyEffector2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_Camera Icon.png create mode 100644 参考/unity-icons/unityengine/d_Canvas Icon.png create mode 100644 参考/unity-icons/unityengine/d_CanvasGroup Icon.png create mode 100644 参考/unity-icons/unityengine/d_CanvasRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/d_CapsuleCollider Icon.png create mode 100644 参考/unity-icons/unityengine/d_CapsuleCollider2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_CharacterController Icon.png create mode 100644 参考/unity-icons/unityengine/d_CharacterJoint Icon.png create mode 100644 参考/unity-icons/unityengine/d_CircleCollider2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_Cloth Icon.png create mode 100644 参考/unity-icons/unityengine/d_CompositeCollider2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_ComputeShader Icon.png create mode 100644 参考/unity-icons/unityengine/d_ConfigurableJoint Icon.png create mode 100644 参考/unity-icons/unityengine/d_ConstantForce Icon.png create mode 100644 参考/unity-icons/unityengine/d_ConstantForce2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_Cubemap Icon.png create mode 100644 参考/unity-icons/unityengine/d_DistanceJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_EdgeCollider2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_FixedJoint Icon.png create mode 100644 参考/unity-icons/unityengine/d_Flare Icon.png create mode 100644 参考/unity-icons/unityengine/d_Flare On Icon.png create mode 100644 参考/unity-icons/unityengine/d_FlareLayer Icon.png create mode 100644 参考/unity-icons/unityengine/d_Font Icon.png create mode 100644 参考/unity-icons/unityengine/d_FrictionJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_GUISkin Icon.png create mode 100644 参考/unity-icons/unityengine/d_GUISkin On Icon.png create mode 100644 参考/unity-icons/unityengine/d_GameObject Icon.png create mode 100644 参考/unity-icons/unityengine/d_Grid Icon.png create mode 100644 参考/unity-icons/unityengine/d_Halo Icon.png create mode 100644 参考/unity-icons/unityengine/d_HingeJoint Icon.png create mode 100644 参考/unity-icons/unityengine/d_HingeJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_LODGroup Icon.png create mode 100644 参考/unity-icons/unityengine/d_Light Icon.png create mode 100644 参考/unity-icons/unityengine/d_LightProbeGroup Icon.png create mode 100644 参考/unity-icons/unityengine/d_LightProbeProxyVolume Icon.png create mode 100644 参考/unity-icons/unityengine/d_LightProbes Icon.png create mode 100644 参考/unity-icons/unityengine/d_LightingSettings Icon.png create mode 100644 参考/unity-icons/unityengine/d_LineRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/d_Material Icon.png create mode 100644 参考/unity-icons/unityengine/d_Material On Icon.png create mode 100644 参考/unity-icons/unityengine/d_Mesh Icon.png create mode 100644 参考/unity-icons/unityengine/d_MeshCollider Icon.png create mode 100644 参考/unity-icons/unityengine/d_MeshFilter Icon.png create mode 100644 参考/unity-icons/unityengine/d_MeshRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/d_Motion Icon.png create mode 100644 参考/unity-icons/unityengine/d_OcclusionArea Icon.png create mode 100644 参考/unity-icons/unityengine/d_OcclusionPortal Icon.png create mode 100644 参考/unity-icons/unityengine/d_ParticleSystem Icon.png create mode 100644 参考/unity-icons/unityengine/d_ParticleSystemForceField Icon.png create mode 100644 参考/unity-icons/unityengine/d_PhysicMaterial Icon.png create mode 100644 参考/unity-icons/unityengine/d_PhysicMaterial On Icon.png create mode 100644 参考/unity-icons/unityengine/d_PhysicsMaterial2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_PhysicsMaterial2D On Icon.png create mode 100644 参考/unity-icons/unityengine/d_PlatformEffector2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_PointEffector2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_PolygonCollider2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_ProceduralMaterial Icon.png create mode 100644 参考/unity-icons/unityengine/d_Projector Icon.png create mode 100644 参考/unity-icons/unityengine/d_RayTracingShader Icon.png create mode 100644 参考/unity-icons/unityengine/d_RectTransform Icon.png create mode 100644 参考/unity-icons/unityengine/d_ReflectionProbe Icon.png create mode 100644 参考/unity-icons/unityengine/d_RelativeJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_RenderTexture Icon.png create mode 100644 参考/unity-icons/unityengine/d_RenderTexture On Icon.png create mode 100644 参考/unity-icons/unityengine/d_Rigidbody Icon.png create mode 100644 参考/unity-icons/unityengine/d_Rigidbody2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_ScriptableObject Icon.png create mode 100644 参考/unity-icons/unityengine/d_ScriptableObject On Icon.png create mode 100644 参考/unity-icons/unityengine/d_Shader Icon.png create mode 100644 参考/unity-icons/unityengine/d_ShaderVariantCollection Icon.png create mode 100644 参考/unity-icons/unityengine/d_SkinnedMeshRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/d_Skybox Icon.png create mode 100644 参考/unity-icons/unityengine/d_SliderJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_SphereCollider Icon.png create mode 100644 参考/unity-icons/unityengine/d_SpringJoint Icon.png create mode 100644 参考/unity-icons/unityengine/d_SpringJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_Sprite Icon.png create mode 100644 参考/unity-icons/unityengine/d_SpriteMask Icon.png create mode 100644 参考/unity-icons/unityengine/d_SpriteRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/d_StreamingController Icon.png create mode 100644 参考/unity-icons/unityengine/d_SurfaceEffector2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_TargetJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_Terrain Icon.png create mode 100644 参考/unity-icons/unityengine/d_TerrainCollider Icon.png create mode 100644 参考/unity-icons/unityengine/d_TerrainData Icon.png create mode 100644 参考/unity-icons/unityengine/d_TextAsset Icon.png create mode 100644 参考/unity-icons/unityengine/d_Texture Icon.png create mode 100644 参考/unity-icons/unityengine/d_Texture2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_TrailRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/d_Transform Icon.png create mode 100644 参考/unity-icons/unityengine/d_WheelCollider Icon.png create mode 100644 参考/unity-icons/unityengine/d_WheelJoint2D Icon.png create mode 100644 参考/unity-icons/unityengine/d_WindZone Icon.png create mode 100644 参考/unity-icons/unityengine/eventsystems/EventSystem Icon.png create mode 100644 参考/unity-icons/unityengine/eventsystems/EventTrigger Icon.png create mode 100644 参考/unity-icons/unityengine/eventsystems/HoloLensInputModule Icon.png create mode 100644 参考/unity-icons/unityengine/eventsystems/Physics2DRaycaster Icon.png create mode 100644 参考/unity-icons/unityengine/eventsystems/PhysicsRaycaster Icon.png create mode 100644 参考/unity-icons/unityengine/eventsystems/StandaloneInputModule Icon.png create mode 100644 参考/unity-icons/unityengine/eventsystems/TouchInputModule Icon.png create mode 100644 参考/unity-icons/unityengine/eventsystems/d_EventSystem Icon.png create mode 100644 参考/unity-icons/unityengine/eventsystems/d_EventTrigger Icon.png create mode 100644 参考/unity-icons/unityengine/eventsystems/d_HoloLensInputModule Icon.png create mode 100644 参考/unity-icons/unityengine/eventsystems/d_Physics2DRaycaster Icon.png create mode 100644 参考/unity-icons/unityengine/eventsystems/d_PhysicsRaycaster Icon.png create mode 100644 参考/unity-icons/unityengine/eventsystems/d_StandaloneInputModule Icon.png create mode 100644 参考/unity-icons/unityengine/eventsystems/d_TouchInputModule Icon.png create mode 100644 参考/unity-icons/unityengine/experimental/rendering/RayTracingShader Icon.png create mode 100644 参考/unity-icons/unityengine/experimental/rendering/d_RaytracingShader Icon.png create mode 100644 参考/unity-icons/unityengine/networking/NetworkAnimator Icon.png create mode 100644 参考/unity-icons/unityengine/networking/NetworkDiscovery Icon.png create mode 100644 参考/unity-icons/unityengine/networking/NetworkIdentity Icon.png create mode 100644 参考/unity-icons/unityengine/networking/NetworkLobbyManager Icon.png create mode 100644 参考/unity-icons/unityengine/networking/NetworkLobbyPlayer Icon.png create mode 100644 参考/unity-icons/unityengine/networking/NetworkManager Icon.png create mode 100644 参考/unity-icons/unityengine/networking/NetworkManagerHUD Icon.png create mode 100644 参考/unity-icons/unityengine/networking/NetworkMigrationManager Icon.png create mode 100644 参考/unity-icons/unityengine/networking/NetworkProximityChecker Icon.png create mode 100644 参考/unity-icons/unityengine/networking/NetworkStartPosition Icon.png create mode 100644 参考/unity-icons/unityengine/networking/NetworkTransform Icon.png create mode 100644 参考/unity-icons/unityengine/networking/NetworkTransformChild Icon.png create mode 100644 参考/unity-icons/unityengine/networking/NetworkTransformVisualizer Icon.png create mode 100644 参考/unity-icons/unityengine/networking/d_NetworkAnimator Icon.png create mode 100644 参考/unity-icons/unityengine/networking/d_NetworkDiscovery Icon.png create mode 100644 参考/unity-icons/unityengine/networking/d_NetworkIdentity Icon.png create mode 100644 参考/unity-icons/unityengine/networking/d_NetworkLobbyManager Icon.png create mode 100644 参考/unity-icons/unityengine/networking/d_NetworkLobbyPlayer Icon.png create mode 100644 参考/unity-icons/unityengine/networking/d_NetworkManager Icon.png create mode 100644 参考/unity-icons/unityengine/networking/d_NetworkManagerHUD Icon.png create mode 100644 参考/unity-icons/unityengine/networking/d_NetworkMigrationManager Icon.png create mode 100644 参考/unity-icons/unityengine/networking/d_NetworkProximityChecker Icon.png create mode 100644 参考/unity-icons/unityengine/networking/d_NetworkStartPosition Icon.png create mode 100644 参考/unity-icons/unityengine/networking/d_NetworkTransform Icon.png create mode 100644 参考/unity-icons/unityengine/networking/d_NetworkTransformChild Icon.png create mode 100644 参考/unity-icons/unityengine/networking/d_NetworkTransformVisualizer Icon.png create mode 100644 参考/unity-icons/unityengine/playables/PlayableDirector Icon.png create mode 100644 参考/unity-icons/unityengine/playables/d_PlayableDirector Icon.png create mode 100644 参考/unity-icons/unityengine/rendering/SortingGroup Icon.png create mode 100644 参考/unity-icons/unityengine/rendering/d_SortingGroup Icon.png create mode 100644 参考/unity-icons/unityengine/spatialtracking/TrackedPoseDriver Icon.png create mode 100644 参考/unity-icons/unityengine/tilemaps/Tile Icon.png create mode 100644 参考/unity-icons/unityengine/tilemaps/Tilemap Icon.png create mode 100644 参考/unity-icons/unityengine/tilemaps/TilemapCollider2D Icon.png create mode 100644 参考/unity-icons/unityengine/tilemaps/TilemapRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/tilemaps/d_Tile Icon.png create mode 100644 参考/unity-icons/unityengine/tilemaps/d_Tilemap Icon.png create mode 100644 参考/unity-icons/unityengine/tilemaps/d_TilemapCollider2D Icon.png create mode 100644 参考/unity-icons/unityengine/tilemaps/d_TilemapRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/timeline/SignalAsset Icon.png create mode 100644 参考/unity-icons/unityengine/timeline/SignalEmitter Icon.png create mode 100644 参考/unity-icons/unityengine/timeline/SignalReceiver Icon.png create mode 100644 参考/unity-icons/unityengine/timeline/TimelineAsset Icon.png create mode 100644 参考/unity-icons/unityengine/timeline/TimelineAsset On Icon.png create mode 100644 参考/unity-icons/unityengine/timeline/d_SignalAsset Icon.png create mode 100644 参考/unity-icons/unityengine/timeline/d_SignalEmitter Icon.png create mode 100644 参考/unity-icons/unityengine/timeline/d_SignalReceiver Icon.png create mode 100644 参考/unity-icons/unityengine/timeline/d_TimelineAsset Icon.png create mode 100644 参考/unity-icons/unityengine/timeline/d_TimelineAsset On Icon.png create mode 100644 参考/unity-icons/unityengine/u2d/SpriteAtlas Icon.png create mode 100644 参考/unity-icons/unityengine/u2d/SpriteAtlas On Icon.png create mode 100644 参考/unity-icons/unityengine/u2d/SpriteShapeRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/u2d/d_SpriteAtlas Icon.png create mode 100644 参考/unity-icons/unityengine/u2d/d_SpriteAtlas On Icon.png create mode 100644 参考/unity-icons/unityengine/u2d/d_SpriteShapeRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/ui/AspectRatioFitter Icon.png create mode 100644 参考/unity-icons/unityengine/ui/Button Icon.png create mode 100644 参考/unity-icons/unityengine/ui/CanvasScaler Icon.png create mode 100644 参考/unity-icons/unityengine/ui/ContentSizeFitter Icon.png create mode 100644 参考/unity-icons/unityengine/ui/Dropdown Icon.png create mode 100644 参考/unity-icons/unityengine/ui/FreeformLayoutGroup Icon.png create mode 100644 参考/unity-icons/unityengine/ui/GraphicRaycaster Icon.png create mode 100644 参考/unity-icons/unityengine/ui/GridLayoutGroup Icon.png create mode 100644 参考/unity-icons/unityengine/ui/HorizontalLayoutGroup Icon.png create mode 100644 参考/unity-icons/unityengine/ui/Image Icon.png create mode 100644 参考/unity-icons/unityengine/ui/InputField Icon.png create mode 100644 参考/unity-icons/unityengine/ui/LayoutElement Icon.png create mode 100644 参考/unity-icons/unityengine/ui/Mask Icon.png create mode 100644 参考/unity-icons/unityengine/ui/Outline Icon.png create mode 100644 参考/unity-icons/unityengine/ui/PositionAsUV1 Icon.png create mode 100644 参考/unity-icons/unityengine/ui/RawImage Icon.png create mode 100644 参考/unity-icons/unityengine/ui/RectMask2D Icon.png create mode 100644 参考/unity-icons/unityengine/ui/ScrollRect Icon.png create mode 100644 参考/unity-icons/unityengine/ui/Scrollbar Icon.png create mode 100644 参考/unity-icons/unityengine/ui/Selectable Icon.png create mode 100644 参考/unity-icons/unityengine/ui/Shadow Icon.png create mode 100644 参考/unity-icons/unityengine/ui/Slider Icon.png create mode 100644 参考/unity-icons/unityengine/ui/Text Icon.png create mode 100644 参考/unity-icons/unityengine/ui/Toggle Icon.png create mode 100644 参考/unity-icons/unityengine/ui/ToggleGroup Icon.png create mode 100644 参考/unity-icons/unityengine/ui/VerticalLayoutGroup Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_AspectRatioFitter Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_Button Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_CanvasScaler Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_ContentSizeFitter Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_Dropdown Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_FreeformLayoutGroup Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_GraphicRaycaster Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_GridLayoutGroup Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_HorizontalLayoutGroup Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_Image Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_InputField Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_LayoutElement Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_Mask Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_Outline Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_PhysicalResolution Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_PositionAsUV1 Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_RawImage Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_RectMask2D Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_ScrollRect Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_ScrollViewArea Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_Scrollbar Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_Selectable Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_SelectionList Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_SelectionListItem Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_SelectionListTemplate Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_Shadow Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_Slider Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_Text Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_Toggle Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_ToggleGroup Icon.png create mode 100644 参考/unity-icons/unityengine/ui/d_VerticalLayoutGroup Icon.png create mode 100644 参考/unity-icons/unityengine/uielements/StyleSheet Icon.png create mode 100644 参考/unity-icons/unityengine/uielements/VisualTreeAsset Icon.png create mode 100644 参考/unity-icons/unityengine/uielements/d_StyleSheet Icon.png create mode 100644 参考/unity-icons/unityengine/uielements/d_VisualTreeAsset Icon.png create mode 100644 参考/unity-icons/unityengine/vfx/VisualEffect Icon.png create mode 100644 参考/unity-icons/unityengine/vfx/VisualEffectAsset Icon.png create mode 100644 参考/unity-icons/unityengine/vfx/d_VisualEffect Icon.png create mode 100644 参考/unity-icons/unityengine/vfx/d_VisualEffectAsset Icon.png create mode 100644 参考/unity-icons/unityengine/video/VideoClip Icon.png create mode 100644 参考/unity-icons/unityengine/video/VideoPlayer Icon.png create mode 100644 参考/unity-icons/unityengine/video/d_VideoPlayer Icon.png create mode 100644 参考/unity-icons/unityengine/xr/wsa/SpatialMappingCollider Icon.png create mode 100644 参考/unity-icons/unityengine/xr/wsa/SpatialMappingRenderer Icon.png create mode 100644 参考/unity-icons/unityengine/xr/wsa/WorldAnchor Icon.png create mode 100644 参考/unity-icons/unityengine/xr/wsa/d_SpatialMappingCollider Icon.png diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..33d51780 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +MVS/3DGS-Unity/*.ply filter=lfs diff=lfs merge=lfs -text diff --git a/.trae/documents/RHI模块审查报告.md b/.trae/documents/RHI模块审查报告.md deleted file mode 100644 index ddb89918..00000000 --- a/.trae/documents/RHI模块审查报告.md +++ /dev/null @@ -1,466 +0,0 @@ -# RHI 模块审查报告 - -## 审查范围 - -基于设计文档 `RHI模块总览.md` 中定义的设计理念,对当前 RHI 模块的设计和实现进行全面审查。 - ---- - -## 一、设计问题 - -### 1. 接口一致性问题 - -#### 1.1 RHIResource 基类接口过于简单 - -**当前实现** ([RHIResource.h](file:///d:/Xuanchi/Main/XCEngine/engine/include/XCEngine/RHI/RHIResource.h)): -```cpp -class RHIResource { -public: - virtual ~RHIResource() = default; - virtual void* GetNativeHandle() = 0; - virtual ResourceStates GetState() const = 0; - virtual void SetState(ResourceStates state) = 0; -}; -``` - -**问题**: -- 缺少资源命名接口 (`SetName`/`GetName`) -- 缺少资源类型查询接口 -- 缺少资源大小查询接口 - -**影响**: RHITexture 自行添加了 `SetName`/`GetName`/`GetWidth` 等方法,导致接口不统一。 - -**建议**: 扩展 RHIResource 基类接口: -```cpp -class RHIResource { -public: - virtual ~RHIResource() = default; - - // 现有接口 - virtual void* GetNativeHandle() = 0; - virtual ResourceStates GetState() const = 0; - virtual void SetState(ResourceStates state) = 0; - - // 建议新增 - virtual void SetName(const char* name) = 0; - virtual const char* GetName() const = 0; - virtual ResourceType GetResourceType() const = 0; - virtual uint64_t GetGpuVirtualAddress() const = 0; // 对于 Buffer -}; -``` - ---- - -#### 1.2 资源生命周期管理不一致 - -**当前问题**: -- 所有资源使用 `Shutdown()` + `delete` 的手动管理方式 -- 容易导致资源泄漏或重复释放 -- 与引擎 Core 模块的智能指针体系 (`Ref`, `UniqueRef`) 不统一 - -**建议**: -1. 考虑使用引用计数管理 RHI 资源 -2. 或者提供 RAII 包装器类 -3. 至少应该提供统一的资源销毁接口(如 `RHIDevice::DestroyResource()`) - ---- - -### 2. 描述符系统设计问题 - -#### 2.1 描述符接口偏向 D3D12 - -**当前实现** ([RHIDescriptorPool.h](file:///d:/Xuanchi/Main/XCEngine/engine/include/XCEngine/RHI/RHIDescriptorPool.h)): -```cpp -struct DescriptorPoolDesc { - uint32_t maxDescriptorCount; // D3D12 风格 - // ... -}; -``` - -**问题**: -- OpenGL 没有原生的描述符池概念 -- OpenGL 后端需要完全模拟,可能效率低下 -- 缺少 DescriptorSetLayout 的概念 - -**建议**: 参考 Vulkan 的描述符系统设计: -```cpp -// 1. 先创建 DescriptorSetLayout -struct DescriptorSetLayoutDesc { - std::vector bindings; -}; -class RHIDescriptorSetLayout { ... }; - -// 2. 从 Layout 创建 Pool -struct DescriptorPoolDesc { - std::vector poolSizes; // 按类型指定数量 - uint32_t maxSets; -}; - -// 3. 从 Pool 分配 Set -class RHIDescriptorSet { - virtual void Update(uint32_t binding, RHIResource* resource) = 0; -}; -``` - ---- - -#### 2.2 缺少描述符集绑定机制 - -**当前问题**: -- RHICommandList 直接绑定资源 (`SetVertexBuffer`, `SetTexture`) -- 缺少批量绑定描述符集的能力 - -**建议**: 添加描述符集绑定接口: -```cpp -virtual void BindDescriptorSet( - uint32_t setIndex, - RHIDescriptorSet* descriptorSet, - RHIPipelineLayout* layout -) = 0; -``` - ---- - -### 3. 命令列表设计问题 - -#### 3.1 命令列表生命周期管理 - -**当前问题**: -- 缺少命令列表池化管理 -- 每帧可能需要重新创建命令列表 - -**建议**: 添加命令分配器概念: -```cpp -class RHICommandAllocator { -public: - virtual void Reset() = 0; // 重用命令列表内存 -}; - -// Device 接口 -virtual RHICommandAllocator* CreateCommandAllocator( - CommandListType type -) = 0; -``` - ---- - -#### 3.2 屏障接口不够清晰 - -**当前实现**: -```cpp -virtual void ResourceBarrier( - uint32_t numBarriers, - ResourceBarrierDesc* barriers -) = 0; - -virtual void ExecuteBarriers() = 0; // 这个方法名容易误解 -``` - -**问题**: `ExecuteBarriers` 方法名暗示有延迟执行,但实际行为不明确。 - -**建议**: -- 明确屏障是立即执行还是批量执行 -- 考虑添加 `FlushBarriers()` 方法名替代 `ExecuteBarriers()` - ---- - -### 4. 着色器系统问题 - -#### 4.1 编译接口职责混乱 - -**当前实现** ([RHIShader.h](file:///d:/Xuanchi/Main/XCEngine/engine/include/XCEngine/RHI/RHIShader.h)): -```cpp -class RHIShader { -public: - // RHIShader 自己有编译方法 - virtual bool CompileFromFile(...) = 0; - virtual bool Compile(...) = 0; -}; - -// RHIDevice 也有编译方法 -virtual RHIShader* CompileShader(const ShaderCompileDesc& desc) = 0; -``` - -**问题**: 编译职责分散,用户不知道该用哪个接口。 - -**建议**: 统一着色器创建流程: -```cpp -// 方案1: 只在 Device 中创建 -class RHIDevice { - virtual RHIShader* CreateShader(const ShaderDesc& desc) = 0; -}; - -// 方案2: 使用 ShaderCompiler 工具类 -class RHIShaderCompiler { - virtual RHIShader* CompileFromFile(...) = 0; - virtual RHIShader* CompileFromSource(...) = 0; -}; -``` - ---- - -#### 4.2 缺少着色器反射接口 - -**当前问题**: -- 只有 `GetUniformInfos()` 方法 -- 缺少完整的着色器反射(输入/输出语义、资源绑定等) - -**建议**: 添加完整的着色器反射接口: -```cpp -struct ShaderReflection { - std::vector vertexInputs; - std::vector fragmentOutputs; - std::vector resourceBindings; - std::vector pushConstantRanges; -}; - -virtual ShaderReflection GetReflection() const = 0; -``` - ---- - -### 5. 管线状态对象问题 - -#### 5.1 缺少管线缓存 - -**当前问题**: 每次创建 PSO 都需要完整编译,没有缓存机制。 - -**建议**: 添加管线缓存接口: -```cpp -class RHIPipelineCache { -public: - virtual void Save(const char* filePath) = 0; - virtual void Load(const char* filePath) = 0; - virtual size_t GetDataSize() const = 0; - virtual void* GetData() const = 0; -}; - -// Device 接口 -virtual RHIPipelineCache* CreatePipelineCache() = 0; -virtual RHIPipelineState* CreatePipelineState( - const PipelineStateDesc& desc, - RHIPipelineCache* cache = nullptr -) = 0; -``` - ---- - -### 6. 缺失的关键功能 - -#### 6.1 缺少资源别名 (Aliasing) 支持 - -**设计文档提到**: "求同存异" - -**问题**: D3D12 和 Vulkan 都支持资源别名(多个资源共享同一块内存),但当前 RHI 没有暴露。 - -**建议**: 添加资源别名支持: -```cpp -struct ResourceAliasingDesc { - RHIResource* overlappingResources; - uint32_t resourceCount; -}; - -virtual void AliasingResources( - const ResourceAliasingDesc& desc -) = 0; -``` - ---- - -#### 6.2 缺少多队列支持 - -**当前问题**: -- RHICommandQueue 只支持单一类型 -- 缺少多队列同步机制 - -**建议**: 添加跨队列同步支持: -```cpp -struct QueueSyncDesc { - RHICommandQueue* waitQueue; - RHIFence* fence; - uint64_t value; -}; - -virtual void QueueSubmit( - const QueueSubmitDesc& desc, - const QueueSyncDesc* waitSyncs = nullptr, - uint32_t waitSyncCount = 0, - const QueueSyncDesc* signalSyncs = nullptr, - uint32_t signalSyncCount = 0 -) = 0; -``` - ---- - -#### 6.3 缺少 RenderGraph 支持 - -**设计文档提到**: "渲染管线层(SRP/Render Graph)" - -**问题**: 当前 RHI 接口没有为 RenderGraph 提供必要的支持: -- 缺少资源传递机制 -- 缺少自动屏障生成 -- 缺少资源生命周期跟踪 - -**建议**: 添加 RenderGraph 友好的接口: -```cpp -struct ResourceTransition { - RHIResource* resource; - ResourceStates fromState; - ResourceStates toState; - uint32_t queueFamily; // 支持跨队列传递 -}; - -virtual void TransitionResources( - const ResourceTransition* transitions, - uint32_t count -) = 0; -``` - ---- - -## 二、实现问题 - -### 1. OpenGL 后端状态管理 - -**问题**: OpenGL 是状态机模型,需要仔细管理状态。 - -**建议检查点**: -- [ ] 是否正确跟踪当前绑定的 VAO/VBO/纹理 -- [ ] 是否正确跟踪当前激活的着色器程序 -- [ ] 是否正确跟踪混合/深度/模板状态 -- [ ] 是否有不必要的冗余状态切换 - -**建议**: 实现状态跟踪器: -```cpp -class OpenGLStateTracker { -public: - void BindTexture(uint32_t unit, uint32_t texture); - void BindVertexArray(uint32_t vao); - void UseProgram(uint32_t program); - // ... 避免重复绑定 -}; -``` - ---- - -### 2. 资源状态跟踪不一致 - -**问题**: -- D3D12 需要精确的资源状态跟踪 -- OpenGL 没有显式的资源状态概念 -- 当前实现在 OpenGL 后端如何处理状态? - -**建议**: -- OpenGL 后端可以忽略资源状态(或仅用于调试) -- 或者实现软件状态跟踪用于验证 - ---- - -### 3. 内存管理缺失 - -**问题**: -- 缺少显式的 GPU 内存分配接口 -- D3D12 有 Heap 概念,OpenGL 没有 - -**建议**: 添加内存分配抽象: -```cpp -struct HeapDesc { - HeapType type; // Default, Upload, Readback - uint64_t size; - HeapFlags flags; -}; - -class RHIHeap { -public: - virtual void* Map() = 0; - virtual void Unmap() = 0; -}; - -// 资源创建时指定堆 -struct BufferDesc { - // ... - RHIHeap* heap; // 可选 - uint64_t heapOffset; // 可选 -}; -``` - ---- - -### 4. 错误处理机制 - -**当前问题**: -- 大部分方法返回 `void` 或 `bool` -- 缺少详细的错误信息 - -**建议**: 添加结果类型: -```cpp -template -struct RHIResult { - T value; - RHIErrorCode error; - const char* errorMessage; -}; - -// 使用示例 -RHIResult result = device->CreateTexture(desc); -if (result.error != RHIErrorCode::Success) { - LogError(result.errorMessage); -} -``` - ---- - -## 三、与设计理念的对比 - -### 设计理念 vs 实际实现 - -| 设计理念 | 设计文档要求 | 当前实现状态 | 问题 | -|---------|------------|------------|------| -| **求同存异** | 提取 API 共性 | ✅ 部分实现 | 描述符系统偏向 D3D12 | -| **分层抽象** | 清晰的层级结构 | ✅ 已实现 | 层级清晰 | -| **特性降级** | 能力检测和替代方案 | ⚠️ 部分实现 | RHICapabilities 存在但使用不明确 | -| **底层逃逸** | 允许访问原生 API | ✅ 已实现 | GetNativeHandle() 接口存在 | - ---- - -## 四、优先级建议 - -### 高优先级(影响功能正确性) - -1. **统一资源生命周期管理** - 防止内存泄漏 -2. **完善错误处理机制** - 便于调试 -3. **OpenGL 状态跟踪** - 避免渲染错误 - -### 中优先级(影响性能和可维护性) - -4. **重构描述符系统** - 提高 OpenGL 效率 -5. **统一着色器编译接口** - 提高易用性 -6. **添加命令分配器** - 提高性能 - -### 低优先级(增强功能) - -7. **添加管线缓存** - 加速启动 -8. **添加资源别名支持** - 优化内存 -9. **RenderGraph 支持** - 高级功能 - ---- - -## 五、总结 - -### 优点 - -1. ✅ 分层架构清晰,符合设计文档 -2. ✅ 核心抽象接口基本完整 -3. ✅ D3D12 后端实现较为完善 -4. ✅ 测试覆盖较好 - -### 主要问题 - -1. ❌ 描述符系统设计偏向 D3D12,OpenGL 后端效率可能受影响 -2. ❌ 资源生命周期管理不一致,存在泄漏风险 -3. ❌ 着色器编译接口职责混乱 -4. ⚠️ 缺少部分高级功能(资源别名、多队列同步等) - -### 建议 - -建议按照优先级逐步改进,首先解决高优先级问题,确保引擎的稳定性和正确性。 diff --git a/.trae/documents/XCEngine项目熟悉计划.md b/.trae/documents/XCEngine项目熟悉计划.md deleted file mode 100644 index 2cd09cdf..00000000 --- a/.trae/documents/XCEngine项目熟悉计划.md +++ /dev/null @@ -1,335 +0,0 @@ -# XCEngine 项目熟悉计划 - -## 项目概述 - -XCEngine 是一个正在开发中的模块化 C++ 游戏引擎,采用 RHI(Render Hardware Interface)抽象层设计,支持 DirectX 12 和 OpenGL 4.6+ 多种渲染 API。 - -### 技术栈 -- **语言**: C++17 -- **渲染 API**: DirectX 12, OpenGL 4.6+ -- **构建系统**: CMake 3.15+ -- **测试框架**: Google Test -- **UI**: ImGui(用于编辑器) - ---- - -## 项目结构 - -``` -XCEngine/ -├── engine/ # 核心引擎库(静态库) -│ ├── include/XCEngine/ # 头文件 -│ │ ├── Audio/ # 音频系统 -│ │ ├── Components/ # 组件系统 -│ │ ├── Core/ # 核心基础模块 -│ │ ├── Debug/ # 调试与日志 -│ │ ├── Input/ # 输入模块 -│ │ ├── Memory/ # 内存管理 -│ │ ├── Platform/ # 平台抽象层 -│ │ ├── RHI/ # 渲染硬件接口 -│ │ ├── Resources/ # 资源管理 -│ │ ├── Scene/ # 场景管理 -│ │ └── Threading/ # 线程系统 -│ ├── src/ # 实现文件 -│ └── third_party/ # 第三方库 -│ -├── editor/ # 编辑器 UI 应用程序 -│ └── src/ # 编辑器源代码 -│ -├── tests/ # 单元测试 -│ ├── math/ # 数学库测试 -│ ├── containers/ # 容器测试 -│ ├── memory/ # 内存管理测试 -│ ├── threading/ # 线程模块测试 -│ ├── debug/ # 调试模块测试 -│ ├── core/ # 核心模块测试 -│ ├── Scene/ # 场景测试 -│ ├── Resources/ # 资源管理测试 -│ ├── Input/ # 输入模块测试 -│ └── RHI/ # RHI 抽象层测试 -│ -├── mvs/ # 示例程序 -│ ├── D3D12/ # DirectX 12 渲染示例 -│ ├── OpenGL/ # OpenGL 渲染示例 -│ ├── VolumeRenderer/ # 体积渲染器 -│ ├── RenderDoc/ # RenderDoc 集成示例 -│ └── ui/ # 编辑器 UI 示例 -│ -└── docs/ # 文档 - ├── api/ # API 文档 - └── plan/ # 开发计划与架构设计 -``` - ---- - -## 核心模块详解 - -### 1. Core(核心基础) - -位置: `engine/include/XCEngine/Core/` - -| 子模块 | 说明 | -|--------|------| -| Types.h | 基础类型别名(int8, uint32 等) | -| RefCounted.h | 引用计数基类 | -| SmartPtr.h | 智能指针(Ref, UniqueRef) | -| Event.h | 事件系统,支持订阅/发布模式 | -| FileWriter.h | 文件写入工具 | -| Layer.h/LayerStack.h | 层级与层级栈管理 | - -**Core/Math 数学库**: -- Vector2/3/4 - 向量运算 -- Matrix3/4 - 矩阵运算 -- Quaternion - 四元数 -- Transform - 变换 -- Color - 颜色 -- Rect - 矩形 -- Sphere/Box/Plane/Ray - 几何体 -- AABB/Bounds/Frustum - 包围体 - -**Core/Containers 容器**: -- Array.h - 动态数组 -- String.h - 字符串类 -- HashMap.h - 哈希表 - -**Core/Asset 资源系统核心**: -- IResource.h - 资源接口基类 -- ResourceTypes.h - 资源类型定义 -- ResourceHandle.h - 资源句柄 -- ResourceManager.h - 全局资源管理器 -- ResourceCache.h - 资源缓存 -- AsyncLoader.h - 异步资源加载器 - -**Core/IO 资源 IO 系统**: -- IResourceLoader.h - 资源加载器接口 -- ResourceFileSystem.h - 资源文件系统 -- FileArchive.h - 文件归档 - -### 2. RHI(渲染硬件接口) - -位置: `engine/include/XCEngine/RHI/` - -这是引擎的核心抽象层,借鉴 Unity SRP 架构设计。 - -**设计原则**: -- 求同存异:提取各 API 共同特性 -- 分层抽象:核心抽象层 → 后端实现层 → 平台适配层 -- 特性降级:后端不支持的特性优雅降级 - -**抽象接口**: -| 接口 | 说明 | -|------|------| -| RHIDevice | 渲染设备抽象 | -| RHICommandQueue | 命令队列抽象 | -| RHICommandList | 命令列表抽象 | -| RHISwapChain | 交换链抽象 | -| RHIPipelineState | 渲染管线状态抽象 | -| RHIBuffer/RHITexture | 资源抽象 | -| RHIShader | 着色器抽象 | -| RHISampler | 采样器抽象 | -| RHIFence | 同步栅栏抽象 | -| RHIDescriptorPool | 描述符池抽象 | -| RHIRenderPass | 渲染通道抽象 | -| RHIFramebuffer | 帧缓冲抽象 | - -**后端实现**: -- `RHI/D3D12/` - DirectX 12 后端 -- `RHI/OpenGL/` - OpenGL 4.6+ 后端 - -### 3. Components(组件系统) - -位置: `engine/include/XCEngine/Components/` - -采用类似 Unity 的组件架构: - -| 组件 | 说明 | -|------|------| -| Component.h | 组件基类,提供生命周期管理 | -| GameObject.h | 游戏对象,支持层级结构 | -| TransformComponent.h | 变换组件 | -| AudioSourceComponent.h | 音频源组件 | -| AudioListenerComponent.h | 音频监听器组件 | - -### 4. Scene(场景管理) - -位置: `engine/include/XCEngine/Scene/` - -- **Scene.h** - 场景类,管理场景内的所有游戏对象 -- **SceneManager.h** - 场景管理器,处理场景切换 - -### 5. Audio(音频系统) - -位置: `engine/include/XCEngine/Audio/` - -| 模块 | 说明 | -|------|------| -| AudioSystem.h | 音频系统主类 | -| AudioMixer.h | 音频混音器 | -| HRTF.h | 头部相关传输函数,空间音频 | -| FFTFilter.h | 快速傅里叶变换滤波器 | -| Reverbation.h | 混响效果 | -| Equalizer.h | 音频均衡器 | -| IAudioBackend.h | 音频后端接口 | -| WindowsAudioBackend.h | Windows WASAPI 后端 | - -### 6. Memory(内存管理) - -位置: `engine/include/XCEngine/Memory/` - -| 模块 | 说明 | -|------|------| -| Allocator.h | 内存分配器接口 | -| LinearAllocator.h | 线性分配器,适合帧分配 | -| PoolAllocator.h | 内存池分配器,适合固定大小对象 | -| ProxyAllocator.h | 代理分配器,跟踪内存使用统计 | -| MemoryManager.h | 全局内存管理器 | - -### 7. Threading(线程系统) - -位置: `engine/include/XCEngine/Threading/` - -| 模块 | 说明 | -|------|------| -| Thread.h | 线程封装类 | -| Mutex.h | 互斥锁 | -| SpinLock.h | 自旋锁 | -| ReadWriteLock.h | 读写锁 | -| TaskSystem.h | 多线程任务系统 | -| Task.h/TaskGroup.h | 任务和任务组管理 | - -### 8. Debug(调试与日志) - -位置: `engine/include/XCEngine/Debug/` - -| 模块 | 说明 | -|------|------| -| Logger.h | 分级日志系统 | -| ConsoleLogSink.h | 控制台日志输出 | -| FileLogSink.h | 文件日志输出 | -| Profiler.h | 性能分析工具 | -| RenderDocCapture.h | RenderDoc 帧捕获集成 | - -### 9. Resources(资源管理) - -位置: `engine/include/XCEngine/Resources/` - -按类型分目录管理: -- **Texture/** - 纹理资源 -- **Mesh/** - 网格资源 -- **Shader/** - 着色器资源 -- **Material/** - 材质资源 -- **AudioClip/** - 音频资源 - -### 10. Platform(平台抽象层) - -位置: `engine/include/XCEngine/Platform/` - -跨平台抽象接口: -- IPlatform - 平台接口 -- IWindow - 窗口接口 -- IFileSystem - 文件系统接口 -- IClock - 时钟接口 -- Windows/ - Windows 平台实现 - -### 11. Input(输入模块) - -位置: `engine/include/XCEngine/Input/` - -- InputManager - 输入管理器 -- InputModule - 输入模块基类 -- InputEvent - 输入事件定义 -- InputAxis - 输入轴配置 - ---- - -## 渲染架构 - -### 渲染流程 - -``` -Scene → CullingSystem → RenderQueue → Renderer → GPU - ↓ ↓ - CullingResults CommandList -``` - -### 关键概念(借鉴 Unity SRP) - -1. **CullingResults** - 剔除结果 -2. **RenderPipeline** - 渲染管线 -3. **RenderQueue** - 渲染队列 -4. **ScriptableRenderContext** - 渲染上下文 -5. **LightManager** - 光照管理 -6. **ShadowAtlas** - 阴影图集 - ---- - -## 构建与测试 - -### 构建项目 - -```bash -mkdir build && cd build -cmake .. -A x64 -cmake --build . --config Debug -``` - -### 运行测试 - -```bash -cd build/tests -ctest -C Debug --output-on-failure -``` - ---- - -## 学习路径建议 - -### 第一阶段:核心基础 -1. 阅读 `README.md` 了解项目概述 -2. 学习 Core 模块(Types, Event, SmartPtr) -3. 学习 Math 数学库 -4. 学习 Containers 容器 - -### 第二阶段:系统模块 -1. 学习 Memory 内存管理 -2. 学习 Threading 线程系统 -3. 学习 Debug 日志系统 -4. 学习 Platform 平台抽象 - -### 第三阶段:渲染系统 -1. 学习 RHI 抽象层设计 -2. 学习 D3D12 后端实现 -3. 学习 OpenGL 后端实现 -4. 学习渲染管线架构 - -### 第四阶段:高级功能 -1. 学习 Scene 场景管理 -2. 学习 Components 组件系统 -3. 学习 Resources 资源管理 -4. 学习 Audio 音频系统 - -### 第五阶段:实践 -1. 运行 mvs 中的示例程序 -2. 阅读测试用例理解 API 用法 -3. 尝试修改或扩展现有功能 - ---- - -## 关键文件索引 - -| 文件 | 说明 | -|------|------| -| README.md | 项目说明文档 | -| CMakeLists.txt | 根构建配置 | -| engine/CMakeLists.txt | 引擎库构建配置 | -| docs/plan/XCEngine渲染引擎架构设计.md | 渲染架构详细设计 | -| docs/api/main.md | API 文档入口 | - ---- - -## 注意事项 - -1. 项目目前仅支持 Windows 平台 -2. 需要 Visual Studio 2019 或更高版本 -3. D3D12 后端需要 Windows 10/11 -4. OpenGL 后端需要 OpenGL 4.6+ 支持 diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..70e34ecb --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "C_Cpp.errorSquiggles": "disabled" +} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 3a305405..ba9e3ce8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,8 +14,7 @@ set( "Path to the bundled Mono distribution used by the scripting runtime") add_subdirectory(engine) -add_subdirectory(editor) +add_subdirectory(Editor) add_subdirectory(managed) add_subdirectory(mvs/RenderDoc) add_subdirectory(tests) -add_subdirectory(tests/opengl) diff --git a/MVS/3DGS-Unity/Editor.meta b/MVS/3DGS-Unity/Editor.meta new file mode 100644 index 00000000..e3afa17d --- /dev/null +++ b/MVS/3DGS-Unity/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 07d8a5410ba18f64e9efe04f3a023cfa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Editor/GaussianMoveTool.cs b/MVS/3DGS-Unity/Editor/GaussianMoveTool.cs new file mode 100644 index 00000000..4903dffe --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianMoveTool.cs @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT + +using GaussianSplatting.Runtime; +using UnityEditor; +using UnityEditor.EditorTools; +using UnityEngine; + +namespace GaussianSplatting.Editor +{ + [EditorTool("Gaussian Move Tool", typeof(GaussianSplatRenderer), typeof(GaussianToolContext))] + class GaussianMoveTool : GaussianTool + { + public override void OnToolGUI(EditorWindow window) + { + var gs = GetRenderer(); + if (!gs || !CanBeEdited() || !HasSelection()) + return; + var tr = gs.transform; + + EditorGUI.BeginChangeCheck(); + var selCenterLocal = GetSelectionCenterLocal(); + var selCenterWorld = tr.TransformPoint(selCenterLocal); + var newPosWorld = Handles.DoPositionHandle(selCenterWorld, Tools.handleRotation); + if (EditorGUI.EndChangeCheck()) + { + var newPosLocal = tr.InverseTransformPoint(newPosWorld); + var wasModified = gs.editModified; + gs.EditTranslateSelection(newPosLocal - selCenterLocal); + if (!wasModified) + GaussianSplatRendererEditor.RepaintAll(); + Event.current.Use(); + } + } + } +} diff --git a/MVS/3DGS-Unity/Editor/GaussianMoveTool.cs.meta b/MVS/3DGS-Unity/Editor/GaussianMoveTool.cs.meta new file mode 100644 index 00000000..095b59e0 --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianMoveTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c9f40b54eb504648b2a0beadabbcc8d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Editor/GaussianRotateTool.cs b/MVS/3DGS-Unity/Editor/GaussianRotateTool.cs new file mode 100644 index 00000000..fc8b7fac --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianRotateTool.cs @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: MIT + +using GaussianSplatting.Runtime; +using UnityEditor; +using UnityEditor.EditorTools; +using UnityEngine; + +namespace GaussianSplatting.Editor +{ + /* not working correctly yet + [EditorTool("Gaussian Rotate Tool", typeof(GaussianSplatRenderer), typeof(GaussianToolContext))] + class GaussianRotateTool : GaussianTool + { + Quaternion m_CurrentRotation = Quaternion.identity; + Vector3 m_FrozenSelCenterLocal = Vector3.zero; + bool m_FreezePivot = false; + + public override void OnActivated() + { + m_FreezePivot = false; + } + + public override void OnToolGUI(EditorWindow window) + { + var gs = GetRenderer(); + if (!gs || !CanBeEdited() || !HasSelection()) + return; + var tr = gs.transform; + var evt = Event.current; + + var selCenterLocal = GetSelectionCenterLocal(); + if (evt.type == EventType.MouseDown) + { + gs.EditStorePosMouseDown(); + gs.EditStoreOtherMouseDown(); + m_FrozenSelCenterLocal = selCenterLocal; + m_FreezePivot = true; + } + if (evt.type == EventType.MouseUp) + { + m_CurrentRotation = Quaternion.identity; + m_FreezePivot = false; + } + + if (m_FreezePivot) + selCenterLocal = m_FrozenSelCenterLocal; + + EditorGUI.BeginChangeCheck(); + var selCenterWorld = tr.TransformPoint(selCenterLocal); + var newRotation = Handles.DoRotationHandle(m_CurrentRotation, selCenterWorld); + if (EditorGUI.EndChangeCheck()) + { + Matrix4x4 localToWorld = gs.transform.localToWorldMatrix; + Matrix4x4 worldToLocal = gs.transform.worldToLocalMatrix; + var wasModified = gs.editModified; + var rotToApply = newRotation; + gs.EditRotateSelection(selCenterLocal, localToWorld, worldToLocal, rotToApply); + m_CurrentRotation = newRotation; + if (!wasModified) + GaussianSplatRendererEditor.RepaintAll(); + + if(GUIUtility.hotControl == 0) + { + m_CurrentRotation = Tools.handleRotation; + } + } + } + } + */ +} \ No newline at end of file diff --git a/MVS/3DGS-Unity/Editor/GaussianRotateTool.cs.meta b/MVS/3DGS-Unity/Editor/GaussianRotateTool.cs.meta new file mode 100644 index 00000000..5944009f --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianRotateTool.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5128238188a44c86914a22a862195242 +timeCreated: 1697805149 \ No newline at end of file diff --git a/MVS/3DGS-Unity/Editor/GaussianScaleTool.cs b/MVS/3DGS-Unity/Editor/GaussianScaleTool.cs new file mode 100644 index 00000000..8c3d452d --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianScaleTool.cs @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: MIT + +using GaussianSplatting.Runtime; +using UnityEditor; +using UnityEditor.EditorTools; +using UnityEngine; + +namespace GaussianSplatting.Editor +{ + /* // not working correctly yet when the GS itself has scale + [EditorTool("Gaussian Scale Tool", typeof(GaussianSplatRenderer), typeof(GaussianToolContext))] + class GaussianScaleTool : GaussianTool + { + Vector3 m_CurrentScale = Vector3.one; + Vector3 m_FrozenSelCenterLocal = Vector3.zero; + bool m_FreezePivot = false; + + public override void OnActivated() + { + m_FreezePivot = false; + } + + public override void OnToolGUI(EditorWindow window) + { + var gs = GetRenderer(); + if (!gs || !CanBeEdited() || !HasSelection()) + return; + var tr = gs.transform; + var evt = Event.current; + + var selCenterLocal = GetSelectionCenterLocal(); + if (evt.type == EventType.MouseDown) + { + gs.EditStorePosMouseDown(); + m_FrozenSelCenterLocal = selCenterLocal; + m_FreezePivot = true; + } + if (evt.type == EventType.MouseUp) + { + m_CurrentScale = Vector3.one; + m_FreezePivot = false; + } + + if (m_FreezePivot) + selCenterLocal = m_FrozenSelCenterLocal; + + EditorGUI.BeginChangeCheck(); + var selCenterWorld = tr.TransformPoint(selCenterLocal); + m_CurrentScale = Handles.DoScaleHandle(m_CurrentScale, selCenterWorld, Tools.handleRotation, HandleUtility.GetHandleSize(selCenterWorld)); + if (EditorGUI.EndChangeCheck()) + { + Matrix4x4 localToWorld = Matrix4x4.identity; + Matrix4x4 worldToLocal = Matrix4x4.identity; + if (Tools.pivotRotation == PivotRotation.Global) + { + localToWorld = gs.transform.localToWorldMatrix; + worldToLocal = gs.transform.worldToLocalMatrix; + } + var wasModified = gs.editModified; + gs.EditScaleSelection(selCenterLocal, localToWorld, worldToLocal, m_CurrentScale); + if (!wasModified) + GaussianSplatRendererEditor.RepaintAll(); + evt.Use(); + } + } + } + */ +} \ No newline at end of file diff --git a/MVS/3DGS-Unity/Editor/GaussianScaleTool.cs.meta b/MVS/3DGS-Unity/Editor/GaussianScaleTool.cs.meta new file mode 100644 index 00000000..3cadf2f5 --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianScaleTool.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dbf3d17a31b942b28f5d8c187adb8fdf +timeCreated: 1697732813 \ No newline at end of file diff --git a/MVS/3DGS-Unity/Editor/GaussianSplatAssetCreator.cs b/MVS/3DGS-Unity/Editor/GaussianSplatAssetCreator.cs new file mode 100644 index 00000000..4117a6cb --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianSplatAssetCreator.cs @@ -0,0 +1,1208 @@ +// SPDX-License-Identifier: MIT + +using System; +using System.Collections.Generic; +using System.IO; +using GaussianSplatting.Editor.Utils; +using GaussianSplatting.Runtime; +using Unity.Burst; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Jobs; +using Unity.Mathematics; +using UnityEditor; +using UnityEngine; +using UnityEngine.Experimental.Rendering; + +namespace GaussianSplatting.Editor +{ + [BurstCompile] + public class GaussianSplatAssetCreator : EditorWindow + { + const string kProgressTitle = "Creating Gaussian Splat Asset"; + const string kCamerasJson = "cameras.json"; + const string kPrefQuality = "nesnausk.GaussianSplatting.CreatorQuality"; + const string kPrefOutputFolder = "nesnausk.GaussianSplatting.CreatorOutputFolder"; + + enum DataQuality + { + VeryHigh, + High, + Medium, + Low, + VeryLow, + Custom, + } + + readonly FilePickerControl m_FilePicker = new(); + + [SerializeField] string m_InputFile; + [SerializeField] bool m_ImportCameras = true; + + [SerializeField] string m_OutputFolder = "Assets/GaussianAssets"; + [SerializeField] DataQuality m_Quality = DataQuality.Medium; + [SerializeField] GaussianSplatAsset.VectorFormat m_FormatPos; + [SerializeField] GaussianSplatAsset.VectorFormat m_FormatScale; + [SerializeField] GaussianSplatAsset.ColorFormat m_FormatColor; + [SerializeField] GaussianSplatAsset.SHFormat m_FormatSH; + + string m_ErrorMessage; + string m_PrevPlyPath; + int m_PrevVertexCount; + long m_PrevFileSize; + + bool isUsingChunks => + m_FormatPos != GaussianSplatAsset.VectorFormat.Float32 || + m_FormatScale != GaussianSplatAsset.VectorFormat.Float32 || + m_FormatColor != GaussianSplatAsset.ColorFormat.Float32x4 || + m_FormatSH != GaussianSplatAsset.SHFormat.Float32; + + [MenuItem("Tools/Gaussian Splats/Create GaussianSplatAsset")] + public static void Init() + { + var window = GetWindowWithRect(new Rect(50, 50, 360, 340), false, "Gaussian Splat Creator", true); + window.minSize = new Vector2(320, 320); + window.maxSize = new Vector2(1500, 1500); + window.Show(); + } + + void Awake() + { + m_Quality = (DataQuality)EditorPrefs.GetInt(kPrefQuality, (int)DataQuality.Medium); + m_OutputFolder = EditorPrefs.GetString(kPrefOutputFolder, "Assets/GaussianAssets"); + } + + void OnEnable() + { + ApplyQualityLevel(); + } + + void OnGUI() + { + EditorGUILayout.Space(); + GUILayout.Label("Input data", EditorStyles.boldLabel); + var rect = EditorGUILayout.GetControlRect(true); + m_InputFile = m_FilePicker.PathFieldGUI(rect, new GUIContent("Input PLY File"), m_InputFile, "ply", "PointCloudFile"); + m_ImportCameras = EditorGUILayout.Toggle("Import Cameras", m_ImportCameras); + + if (m_InputFile != m_PrevPlyPath && !string.IsNullOrWhiteSpace(m_InputFile)) + { + PLYFileReader.ReadFileHeader(m_InputFile, out m_PrevVertexCount, out var _, out var _); + m_PrevFileSize = File.Exists(m_InputFile) ? new FileInfo(m_InputFile).Length : 0; + m_PrevPlyPath = m_InputFile; + } + + if (m_PrevVertexCount > 0) + EditorGUILayout.LabelField("File Size", $"{EditorUtility.FormatBytes(m_PrevFileSize)} - {m_PrevVertexCount:N0} splats"); + else + GUILayout.Space(EditorGUIUtility.singleLineHeight); + + EditorGUILayout.Space(); + GUILayout.Label("Output", EditorStyles.boldLabel); + rect = EditorGUILayout.GetControlRect(true); + string newOutputFolder = m_FilePicker.PathFieldGUI(rect, new GUIContent("Output Folder"), m_OutputFolder, null, "GaussianAssetOutputFolder"); + if (newOutputFolder != m_OutputFolder) + { + m_OutputFolder = newOutputFolder; + EditorPrefs.SetString(kPrefOutputFolder, m_OutputFolder); + } + + var newQuality = (DataQuality) EditorGUILayout.EnumPopup("Quality", m_Quality); + if (newQuality != m_Quality) + { + m_Quality = newQuality; + EditorPrefs.SetInt(kPrefQuality, (int)m_Quality); + ApplyQualityLevel(); + } + + long sizePos = 0, sizeOther = 0, sizeCol = 0, sizeSHs = 0, totalSize = 0; + if (m_PrevVertexCount > 0) + { + sizePos = GaussianSplatAsset.CalcPosDataSize(m_PrevVertexCount, m_FormatPos); + sizeOther = GaussianSplatAsset.CalcOtherDataSize(m_PrevVertexCount, m_FormatScale); + sizeCol = GaussianSplatAsset.CalcColorDataSize(m_PrevVertexCount, m_FormatColor); + sizeSHs = GaussianSplatAsset.CalcSHDataSize(m_PrevVertexCount, m_FormatSH); + long sizeChunk = isUsingChunks ? GaussianSplatAsset.CalcChunkDataSize(m_PrevVertexCount) : 0; + totalSize = sizePos + sizeOther + sizeCol + sizeSHs + sizeChunk; + } + + const float kSizeColWidth = 70; + EditorGUI.BeginDisabledGroup(m_Quality != DataQuality.Custom); + EditorGUI.indentLevel++; + GUILayout.BeginHorizontal(); + m_FormatPos = (GaussianSplatAsset.VectorFormat)EditorGUILayout.EnumPopup("Position", m_FormatPos); + GUILayout.Label(sizePos > 0 ? EditorUtility.FormatBytes(sizePos) : string.Empty, GUILayout.Width(kSizeColWidth)); + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + m_FormatScale = (GaussianSplatAsset.VectorFormat)EditorGUILayout.EnumPopup("Scale", m_FormatScale); + GUILayout.Label(sizeOther > 0 ? EditorUtility.FormatBytes(sizeOther) : string.Empty, GUILayout.Width(kSizeColWidth)); + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + m_FormatColor = (GaussianSplatAsset.ColorFormat)EditorGUILayout.EnumPopup("Color", m_FormatColor); + GUILayout.Label(sizeCol > 0 ? EditorUtility.FormatBytes(sizeCol) : string.Empty, GUILayout.Width(kSizeColWidth)); + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + m_FormatSH = (GaussianSplatAsset.SHFormat) EditorGUILayout.EnumPopup("SH", m_FormatSH); + GUIContent shGC = new GUIContent(); + shGC.text = sizeSHs > 0 ? EditorUtility.FormatBytes(sizeSHs) : string.Empty; + if (m_FormatSH >= GaussianSplatAsset.SHFormat.Cluster64k) + { + shGC.tooltip = "Note that SH clustering is not fast! (3-10 minutes for 6M splats)"; + shGC.image = EditorGUIUtility.IconContent("console.warnicon.sml").image; + } + GUILayout.Label(shGC, GUILayout.Width(kSizeColWidth)); + GUILayout.EndHorizontal(); + EditorGUI.indentLevel--; + EditorGUI.EndDisabledGroup(); + if (totalSize > 0) + EditorGUILayout.LabelField("Asset Size", $"{EditorUtility.FormatBytes(totalSize)} - {(double) m_PrevFileSize / totalSize:F2}x smaller"); + else + GUILayout.Space(EditorGUIUtility.singleLineHeight); + + + EditorGUILayout.Space(); + GUILayout.BeginHorizontal(); + GUILayout.Space(30); + if (GUILayout.Button("Create Asset")) + { + CreateAsset(); + } + GUILayout.Space(30); + GUILayout.EndHorizontal(); + + if (!string.IsNullOrWhiteSpace(m_ErrorMessage)) + { + EditorGUILayout.HelpBox(m_ErrorMessage, MessageType.Error); + } + } + + void ApplyQualityLevel() + { + switch (m_Quality) + { + case DataQuality.Custom: + break; + case DataQuality.VeryLow: // 18.62x smaller, 32.27 PSNR + m_FormatPos = GaussianSplatAsset.VectorFormat.Norm11; + m_FormatScale = GaussianSplatAsset.VectorFormat.Norm6; + m_FormatColor = GaussianSplatAsset.ColorFormat.BC7; + m_FormatSH = GaussianSplatAsset.SHFormat.Cluster4k; + break; + case DataQuality.Low: // 14.01x smaller, 35.17 PSNR + m_FormatPos = GaussianSplatAsset.VectorFormat.Norm11; + m_FormatScale = GaussianSplatAsset.VectorFormat.Norm6; + m_FormatColor = GaussianSplatAsset.ColorFormat.Norm8x4; + m_FormatSH = GaussianSplatAsset.SHFormat.Cluster16k; + break; + case DataQuality.Medium: // 5.14x smaller, 47.46 PSNR + m_FormatPos = GaussianSplatAsset.VectorFormat.Norm11; + m_FormatScale = GaussianSplatAsset.VectorFormat.Norm11; + m_FormatColor = GaussianSplatAsset.ColorFormat.Norm8x4; + m_FormatSH = GaussianSplatAsset.SHFormat.Norm6; + break; + case DataQuality.High: // 2.94x smaller, 57.77 PSNR + m_FormatPos = GaussianSplatAsset.VectorFormat.Norm16; + m_FormatScale = GaussianSplatAsset.VectorFormat.Norm16; + m_FormatColor = GaussianSplatAsset.ColorFormat.Float16x4; + m_FormatSH = GaussianSplatAsset.SHFormat.Norm11; + break; + case DataQuality.VeryHigh: // 1.05x smaller + m_FormatPos = GaussianSplatAsset.VectorFormat.Float32; + m_FormatScale = GaussianSplatAsset.VectorFormat.Float32; + m_FormatColor = GaussianSplatAsset.ColorFormat.Float32x4; + m_FormatSH = GaussianSplatAsset.SHFormat.Float32; + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + // input file splat data is expected to be in this format + public struct InputSplatData + { + public Vector3 pos; + public Vector3 nor; + public Vector3 dc0; + public Vector3 sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8, sh9, shA, shB, shC, shD, shE, shF; + public float opacity; + public Vector3 scale; + public Quaternion rot; + } + + static T CreateOrReplaceAsset(T asset, string path) where T : UnityEngine.Object + { + T result = AssetDatabase.LoadAssetAtPath(path); + if (result == null) + { + AssetDatabase.CreateAsset(asset, path); + result = asset; + } + else + { + if (typeof(Mesh).IsAssignableFrom(typeof(T))) { (result as Mesh)?.Clear(); } + EditorUtility.CopySerialized(asset, result); + } + return result; + } + + unsafe void CreateAsset() + { + m_ErrorMessage = null; + if (string.IsNullOrWhiteSpace(m_InputFile)) + { + m_ErrorMessage = $"Select input PLY file"; + return; + } + + if (string.IsNullOrWhiteSpace(m_OutputFolder) || !m_OutputFolder.StartsWith("Assets/")) + { + m_ErrorMessage = $"Output folder must be within project, was '{m_OutputFolder}'"; + return; + } + Directory.CreateDirectory(m_OutputFolder); + + EditorUtility.DisplayProgressBar(kProgressTitle, "Reading data files", 0.0f); + GaussianSplatAsset.CameraInfo[] cameras = LoadJsonCamerasFile(m_InputFile, m_ImportCameras); + using NativeArray inputSplats = LoadPLYSplatFile(m_InputFile); + if (inputSplats.Length == 0) + { + EditorUtility.ClearProgressBar(); + return; + } + + float3 boundsMin, boundsMax; + var boundsJob = new CalcBoundsJob + { + m_BoundsMin = &boundsMin, + m_BoundsMax = &boundsMax, + m_SplatData = inputSplats + }; + boundsJob.Schedule().Complete(); + + EditorUtility.DisplayProgressBar(kProgressTitle, "Morton reordering", 0.05f); + ReorderMorton(inputSplats, boundsMin, boundsMax); + + // cluster SHs + NativeArray splatSHIndices = default; + NativeArray clusteredSHs = default; + if (m_FormatSH >= GaussianSplatAsset.SHFormat.Cluster64k) + { + EditorUtility.DisplayProgressBar(kProgressTitle, "Cluster SHs", 0.2f); + ClusterSHs(inputSplats, m_FormatSH, out clusteredSHs, out splatSHIndices); + } + + string baseName = Path.GetFileNameWithoutExtension(FilePickerControl.PathToDisplayString(m_InputFile)); + + EditorUtility.DisplayProgressBar(kProgressTitle, "Creating data objects", 0.7f); + GaussianSplatAsset asset = ScriptableObject.CreateInstance(); + asset.Initialize(inputSplats.Length, m_FormatPos, m_FormatScale, m_FormatColor, m_FormatSH, boundsMin, boundsMax, cameras); + asset.name = baseName; + + var dataHash = new Hash128((uint)asset.splatCount, (uint)asset.formatVersion, 0, 0); + string pathChunk = $"{m_OutputFolder}/{baseName}_chk.bytes"; + string pathPos = $"{m_OutputFolder}/{baseName}_pos.bytes"; + string pathOther = $"{m_OutputFolder}/{baseName}_oth.bytes"; + string pathCol = $"{m_OutputFolder}/{baseName}_col.bytes"; + string pathSh = $"{m_OutputFolder}/{baseName}_shs.bytes"; + LinearizeData(inputSplats); + + // if we are using full lossless (FP32) data, then do not use any chunking, and keep data as-is + bool useChunks = isUsingChunks; + if (useChunks) + CreateChunkData(inputSplats, pathChunk, ref dataHash); + CreatePositionsData(inputSplats, pathPos, ref dataHash); + CreateOtherData(inputSplats, pathOther, ref dataHash, splatSHIndices); + CreateColorData(inputSplats, pathCol, ref dataHash); + CreateSHData(inputSplats, pathSh, ref dataHash, clusteredSHs); + asset.SetDataHash(dataHash); + + splatSHIndices.Dispose(); + clusteredSHs.Dispose(); + + // files are created, import them so we can get to the imported objects, ugh + EditorUtility.DisplayProgressBar(kProgressTitle, "Initial texture import", 0.85f); + AssetDatabase.Refresh(ImportAssetOptions.ForceUncompressedImport); + + EditorUtility.DisplayProgressBar(kProgressTitle, "Setup data onto asset", 0.95f); + asset.SetAssetFiles( + useChunks ? AssetDatabase.LoadAssetAtPath(pathChunk) : null, + AssetDatabase.LoadAssetAtPath(pathPos), + AssetDatabase.LoadAssetAtPath(pathOther), + AssetDatabase.LoadAssetAtPath(pathCol), + AssetDatabase.LoadAssetAtPath(pathSh)); + + var assetPath = $"{m_OutputFolder}/{baseName}.asset"; + var savedAsset = CreateOrReplaceAsset(asset, assetPath); + + EditorUtility.DisplayProgressBar(kProgressTitle, "Saving assets", 0.99f); + AssetDatabase.SaveAssets(); + EditorUtility.ClearProgressBar(); + + Selection.activeObject = savedAsset; + } + + unsafe NativeArray LoadPLYSplatFile(string plyPath) + { + NativeArray data = default; + if (!File.Exists(plyPath)) + { + m_ErrorMessage = $"Did not find {plyPath} file"; + return data; + } + + int splatCount; + int vertexStride; + NativeArray verticesRawData; + try + { + PLYFileReader.ReadFile(plyPath, out splatCount, out vertexStride, out _, out verticesRawData); + } + catch (Exception ex) + { + m_ErrorMessage = ex.Message; + return data; + } + + if (UnsafeUtility.SizeOf() != vertexStride) + { + m_ErrorMessage = $"PLY vertex size mismatch, expected {UnsafeUtility.SizeOf()} but file has {vertexStride}"; + return data; + } + + // reorder SHs + NativeArray floatData = verticesRawData.Reinterpret(1); + ReorderSHs(splatCount, (float*)floatData.GetUnsafePtr()); + + return verticesRawData.Reinterpret(1); + } + + [BurstCompile] + static unsafe void ReorderSHs(int splatCount, float* data) + { + int splatStride = UnsafeUtility.SizeOf() / 4; + int shStartOffset = 9, shCount = 15; + float* tmp = stackalloc float[shCount * 3]; + int idx = shStartOffset; + for (int i = 0; i < splatCount; ++i) + { + for (int j = 0; j < shCount; ++j) + { + tmp[j * 3 + 0] = data[idx + j]; + tmp[j * 3 + 1] = data[idx + j + shCount]; + tmp[j * 3 + 2] = data[idx + j + shCount * 2]; + } + + for (int j = 0; j < shCount * 3; ++j) + { + data[idx + j] = tmp[j]; + } + + idx += splatStride; + } + } + + [BurstCompile] + struct CalcBoundsJob : IJob + { + [NativeDisableUnsafePtrRestriction] public unsafe float3* m_BoundsMin; + [NativeDisableUnsafePtrRestriction] public unsafe float3* m_BoundsMax; + [ReadOnly] public NativeArray m_SplatData; + + public unsafe void Execute() + { + float3 boundsMin = float.PositiveInfinity; + float3 boundsMax = float.NegativeInfinity; + + for (int i = 0; i < m_SplatData.Length; ++i) + { + float3 pos = m_SplatData[i].pos; + boundsMin = math.min(boundsMin, pos); + boundsMax = math.max(boundsMax, pos); + } + *m_BoundsMin = boundsMin; + *m_BoundsMax = boundsMax; + } + } + + [BurstCompile] + struct ReorderMortonJob : IJobParallelFor + { + const float kScaler = (float) ((1 << 21) - 1); + public float3 m_BoundsMin; + public float3 m_InvBoundsSize; + [ReadOnly] public NativeArray m_SplatData; + public NativeArray<(ulong,int)> m_Order; + + public void Execute(int index) + { + float3 pos = ((float3)m_SplatData[index].pos - m_BoundsMin) * m_InvBoundsSize * kScaler; + uint3 ipos = (uint3) pos; + ulong code = GaussianUtils.MortonEncode3(ipos); + m_Order[index] = (code, index); + } + } + + struct OrderComparer : IComparer<(ulong, int)> { + public int Compare((ulong, int) a, (ulong, int) b) + { + if (a.Item1 < b.Item1) return -1; + if (a.Item1 > b.Item1) return +1; + return a.Item2 - b.Item2; + } + } + + static void ReorderMorton(NativeArray splatData, float3 boundsMin, float3 boundsMax) + { + ReorderMortonJob order = new ReorderMortonJob + { + m_SplatData = splatData, + m_BoundsMin = boundsMin, + m_InvBoundsSize = 1.0f / (boundsMax - boundsMin), + m_Order = new NativeArray<(ulong, int)>(splatData.Length, Allocator.TempJob) + }; + order.Schedule(splatData.Length, 4096).Complete(); + order.m_Order.Sort(new OrderComparer()); + + NativeArray copy = new(order.m_SplatData, Allocator.TempJob); + for (int i = 0; i < copy.Length; ++i) + order.m_SplatData[i] = copy[order.m_Order[i].Item2]; + copy.Dispose(); + + order.m_Order.Dispose(); + } + + [BurstCompile] + static unsafe void GatherSHs(int splatCount, InputSplatData* splatData, float* shData) + { + for (int i = 0; i < splatCount; ++i) + { + UnsafeUtility.MemCpy(shData, ((float*)splatData) + 9, 15 * 3 * sizeof(float)); + splatData++; + shData += 15 * 3; + } + } + + [BurstCompile] + struct ConvertSHClustersJob : IJobParallelFor + { + [ReadOnly] public NativeArray m_Input; + public NativeArray m_Output; + public void Execute(int index) + { + var addr = index * 15; + GaussianSplatAsset.SHTableItemFloat16 res; + res.sh1 = new half3(m_Input[addr+0]); + res.sh2 = new half3(m_Input[addr+1]); + res.sh3 = new half3(m_Input[addr+2]); + res.sh4 = new half3(m_Input[addr+3]); + res.sh5 = new half3(m_Input[addr+4]); + res.sh6 = new half3(m_Input[addr+5]); + res.sh7 = new half3(m_Input[addr+6]); + res.sh8 = new half3(m_Input[addr+7]); + res.sh9 = new half3(m_Input[addr+8]); + res.shA = new half3(m_Input[addr+9]); + res.shB = new half3(m_Input[addr+10]); + res.shC = new half3(m_Input[addr+11]); + res.shD = new half3(m_Input[addr+12]); + res.shE = new half3(m_Input[addr+13]); + res.shF = new half3(m_Input[addr+14]); + res.shPadding = default; + m_Output[index] = res; + } + } + static bool ClusterSHProgress(float val) + { + EditorUtility.DisplayProgressBar(kProgressTitle, $"Cluster SHs ({val:P0})", 0.2f + val * 0.5f); + return true; + } + + static unsafe void ClusterSHs(NativeArray splatData, GaussianSplatAsset.SHFormat format, out NativeArray shs, out NativeArray shIndices) + { + shs = default; + shIndices = default; + + int shCount = GaussianSplatAsset.GetSHCount(format, splatData.Length); + if (shCount >= splatData.Length) // no need to cluster, just use raw data + return; + + const int kShDim = 15 * 3; + const int kBatchSize = 2048; + float passesOverData = format switch + { + GaussianSplatAsset.SHFormat.Cluster64k => 0.3f, + GaussianSplatAsset.SHFormat.Cluster32k => 0.4f, + GaussianSplatAsset.SHFormat.Cluster16k => 0.5f, + GaussianSplatAsset.SHFormat.Cluster8k => 0.8f, + GaussianSplatAsset.SHFormat.Cluster4k => 1.2f, + _ => throw new ArgumentOutOfRangeException(nameof(format), format, null) + }; + + float t0 = Time.realtimeSinceStartup; + NativeArray shData = new(splatData.Length * kShDim, Allocator.Persistent); + GatherSHs(splatData.Length, (InputSplatData*) splatData.GetUnsafeReadOnlyPtr(), (float*) shData.GetUnsafePtr()); + + NativeArray shMeans = new(shCount * kShDim, Allocator.Persistent); + shIndices = new(splatData.Length, Allocator.Persistent); + + KMeansClustering.Calculate(kShDim, shData, kBatchSize, passesOverData, ClusterSHProgress, shMeans, shIndices); + shData.Dispose(); + + shs = new NativeArray(shCount, Allocator.Persistent); + + ConvertSHClustersJob job = new ConvertSHClustersJob + { + m_Input = shMeans.Reinterpret(4), + m_Output = shs + }; + job.Schedule(shCount, 256).Complete(); + shMeans.Dispose(); + float t1 = Time.realtimeSinceStartup; + Debug.Log($"GS: clustered {splatData.Length/1000000.0:F2}M SHs into {shCount/1024}K ({passesOverData:F1}pass/{kBatchSize}batch) in {t1-t0:F0}s"); + } + + [BurstCompile] + struct LinearizeDataJob : IJobParallelFor + { + public NativeArray splatData; + public void Execute(int index) + { + var splat = splatData[index]; + + // rot + var q = splat.rot; + var qq = GaussianUtils.NormalizeSwizzleRotation(new float4(q.x, q.y, q.z, q.w)); + qq = GaussianUtils.PackSmallest3Rotation(qq); + splat.rot = new Quaternion(qq.x, qq.y, qq.z, qq.w); + + // scale + splat.scale = GaussianUtils.LinearScale(splat.scale); + + // color + splat.dc0 = GaussianUtils.SH0ToColor(splat.dc0); + splat.opacity = GaussianUtils.Sigmoid(splat.opacity); + + splatData[index] = splat; + } + } + + static void LinearizeData(NativeArray splatData) + { + LinearizeDataJob job = new LinearizeDataJob(); + job.splatData = splatData; + job.Schedule(splatData.Length, 4096).Complete(); + } + + [BurstCompile] + struct CalcChunkDataJob : IJobParallelFor + { + [NativeDisableParallelForRestriction] public NativeArray splatData; + public NativeArray chunks; + + public void Execute(int chunkIdx) + { + float3 chunkMinpos = float.PositiveInfinity; + float3 chunkMinscl = float.PositiveInfinity; + float4 chunkMincol = float.PositiveInfinity; + float3 chunkMinshs = float.PositiveInfinity; + float3 chunkMaxpos = float.NegativeInfinity; + float3 chunkMaxscl = float.NegativeInfinity; + float4 chunkMaxcol = float.NegativeInfinity; + float3 chunkMaxshs = float.NegativeInfinity; + + int splatBegin = math.min(chunkIdx * GaussianSplatAsset.kChunkSize, splatData.Length); + int splatEnd = math.min((chunkIdx + 1) * GaussianSplatAsset.kChunkSize, splatData.Length); + + // calculate data bounds inside the chunk + for (int i = splatBegin; i < splatEnd; ++i) + { + InputSplatData s = splatData[i]; + + // transform scale to be more uniformly distributed + s.scale = math.pow(s.scale, 1.0f / 8.0f); + // transform opacity to be more unformly distributed + s.opacity = GaussianUtils.SquareCentered01(s.opacity); + splatData[i] = s; + + chunkMinpos = math.min(chunkMinpos, s.pos); + chunkMinscl = math.min(chunkMinscl, s.scale); + chunkMincol = math.min(chunkMincol, new float4(s.dc0, s.opacity)); + chunkMinshs = math.min(chunkMinshs, s.sh1); + chunkMinshs = math.min(chunkMinshs, s.sh2); + chunkMinshs = math.min(chunkMinshs, s.sh3); + chunkMinshs = math.min(chunkMinshs, s.sh4); + chunkMinshs = math.min(chunkMinshs, s.sh5); + chunkMinshs = math.min(chunkMinshs, s.sh6); + chunkMinshs = math.min(chunkMinshs, s.sh7); + chunkMinshs = math.min(chunkMinshs, s.sh8); + chunkMinshs = math.min(chunkMinshs, s.sh9); + chunkMinshs = math.min(chunkMinshs, s.shA); + chunkMinshs = math.min(chunkMinshs, s.shB); + chunkMinshs = math.min(chunkMinshs, s.shC); + chunkMinshs = math.min(chunkMinshs, s.shD); + chunkMinshs = math.min(chunkMinshs, s.shE); + chunkMinshs = math.min(chunkMinshs, s.shF); + + chunkMaxpos = math.max(chunkMaxpos, s.pos); + chunkMaxscl = math.max(chunkMaxscl, s.scale); + chunkMaxcol = math.max(chunkMaxcol, new float4(s.dc0, s.opacity)); + chunkMaxshs = math.max(chunkMaxshs, s.sh1); + chunkMaxshs = math.max(chunkMaxshs, s.sh2); + chunkMaxshs = math.max(chunkMaxshs, s.sh3); + chunkMaxshs = math.max(chunkMaxshs, s.sh4); + chunkMaxshs = math.max(chunkMaxshs, s.sh5); + chunkMaxshs = math.max(chunkMaxshs, s.sh6); + chunkMaxshs = math.max(chunkMaxshs, s.sh7); + chunkMaxshs = math.max(chunkMaxshs, s.sh8); + chunkMaxshs = math.max(chunkMaxshs, s.sh9); + chunkMaxshs = math.max(chunkMaxshs, s.shA); + chunkMaxshs = math.max(chunkMaxshs, s.shB); + chunkMaxshs = math.max(chunkMaxshs, s.shC); + chunkMaxshs = math.max(chunkMaxshs, s.shD); + chunkMaxshs = math.max(chunkMaxshs, s.shE); + chunkMaxshs = math.max(chunkMaxshs, s.shF); + } + + // make sure bounds are not zero + chunkMaxpos = math.max(chunkMaxpos, chunkMinpos + 1.0e-5f); + chunkMaxscl = math.max(chunkMaxscl, chunkMinscl + 1.0e-5f); + chunkMaxcol = math.max(chunkMaxcol, chunkMincol + 1.0e-5f); + chunkMaxshs = math.max(chunkMaxshs, chunkMinshs + 1.0e-5f); + + // store chunk info + GaussianSplatAsset.ChunkInfo info = default; + info.posX = new float2(chunkMinpos.x, chunkMaxpos.x); + info.posY = new float2(chunkMinpos.y, chunkMaxpos.y); + info.posZ = new float2(chunkMinpos.z, chunkMaxpos.z); + info.sclX = math.f32tof16(chunkMinscl.x) | (math.f32tof16(chunkMaxscl.x) << 16); + info.sclY = math.f32tof16(chunkMinscl.y) | (math.f32tof16(chunkMaxscl.y) << 16); + info.sclZ = math.f32tof16(chunkMinscl.z) | (math.f32tof16(chunkMaxscl.z) << 16); + info.colR = math.f32tof16(chunkMincol.x) | (math.f32tof16(chunkMaxcol.x) << 16); + info.colG = math.f32tof16(chunkMincol.y) | (math.f32tof16(chunkMaxcol.y) << 16); + info.colB = math.f32tof16(chunkMincol.z) | (math.f32tof16(chunkMaxcol.z) << 16); + info.colA = math.f32tof16(chunkMincol.w) | (math.f32tof16(chunkMaxcol.w) << 16); + info.shR = math.f32tof16(chunkMinshs.x) | (math.f32tof16(chunkMaxshs.x) << 16); + info.shG = math.f32tof16(chunkMinshs.y) | (math.f32tof16(chunkMaxshs.y) << 16); + info.shB = math.f32tof16(chunkMinshs.z) | (math.f32tof16(chunkMaxshs.z) << 16); + chunks[chunkIdx] = info; + + // adjust data to be 0..1 within chunk bounds + for (int i = splatBegin; i < splatEnd; ++i) + { + InputSplatData s = splatData[i]; + s.pos = ((float3)s.pos - chunkMinpos) / (chunkMaxpos - chunkMinpos); + s.scale = ((float3)s.scale - chunkMinscl) / (chunkMaxscl - chunkMinscl); + s.dc0 = ((float3)s.dc0 - chunkMincol.xyz) / (chunkMaxcol.xyz - chunkMincol.xyz); + s.opacity = (s.opacity - chunkMincol.w) / (chunkMaxcol.w - chunkMincol.w); + s.sh1 = ((float3) s.sh1 - chunkMinshs) / (chunkMaxshs - chunkMinshs); + s.sh2 = ((float3) s.sh2 - chunkMinshs) / (chunkMaxshs - chunkMinshs); + s.sh3 = ((float3) s.sh3 - chunkMinshs) / (chunkMaxshs - chunkMinshs); + s.sh4 = ((float3) s.sh4 - chunkMinshs) / (chunkMaxshs - chunkMinshs); + s.sh5 = ((float3) s.sh5 - chunkMinshs) / (chunkMaxshs - chunkMinshs); + s.sh6 = ((float3) s.sh6 - chunkMinshs) / (chunkMaxshs - chunkMinshs); + s.sh7 = ((float3) s.sh7 - chunkMinshs) / (chunkMaxshs - chunkMinshs); + s.sh8 = ((float3) s.sh8 - chunkMinshs) / (chunkMaxshs - chunkMinshs); + s.sh9 = ((float3) s.sh9 - chunkMinshs) / (chunkMaxshs - chunkMinshs); + s.shA = ((float3) s.shA - chunkMinshs) / (chunkMaxshs - chunkMinshs); + s.shB = ((float3) s.shB - chunkMinshs) / (chunkMaxshs - chunkMinshs); + s.shC = ((float3) s.shC - chunkMinshs) / (chunkMaxshs - chunkMinshs); + s.shD = ((float3) s.shD - chunkMinshs) / (chunkMaxshs - chunkMinshs); + s.shE = ((float3) s.shE - chunkMinshs) / (chunkMaxshs - chunkMinshs); + s.shF = ((float3) s.shF - chunkMinshs) / (chunkMaxshs - chunkMinshs); + splatData[i] = s; + } + } + } + + static void CreateChunkData(NativeArray splatData, string filePath, ref Hash128 dataHash) + { + int chunkCount = (splatData.Length + GaussianSplatAsset.kChunkSize - 1) / GaussianSplatAsset.kChunkSize; + CalcChunkDataJob job = new CalcChunkDataJob + { + splatData = splatData, + chunks = new(chunkCount, Allocator.TempJob), + }; + + job.Schedule(chunkCount, 8).Complete(); + + dataHash.Append(ref job.chunks); + + using var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); + fs.Write(job.chunks.Reinterpret(UnsafeUtility.SizeOf())); + + job.chunks.Dispose(); + } + + [BurstCompile] + struct ConvertColorJob : IJobParallelFor + { + public int width, height; + [ReadOnly] public NativeArray inputData; + [NativeDisableParallelForRestriction] public NativeArray outputData; + public GaussianSplatAsset.ColorFormat format; + public int formatBytesPerPixel; + + public unsafe void Execute(int y) + { + int srcIdx = y * width; + byte* dstPtr = (byte*) outputData.GetUnsafePtr() + y * width * formatBytesPerPixel; + for (int x = 0; x < width; ++x) + { + float4 pix = inputData[srcIdx]; + + switch (format) + { + case GaussianSplatAsset.ColorFormat.Float32x4: + { + *(float4*) dstPtr = pix; + } + break; + case GaussianSplatAsset.ColorFormat.Float16x4: + { + half4 enc = new half4(pix); + *(half4*) dstPtr = enc; + } + break; + case GaussianSplatAsset.ColorFormat.Norm8x4: + { + pix = math.saturate(pix); + uint enc = (uint)(pix.x * 255.5f) | ((uint)(pix.y * 255.5f) << 8) | ((uint)(pix.z * 255.5f) << 16) | ((uint)(pix.w * 255.5f) << 24); + *(uint*) dstPtr = enc; + } + break; + } + + srcIdx++; + dstPtr += formatBytesPerPixel; + } + } + } + + static ulong EncodeFloat3ToNorm16(float3 v) // 48 bits: 16.16.16 + { + return (ulong) (v.x * 65535.5f) | ((ulong) (v.y * 65535.5f) << 16) | ((ulong) (v.z * 65535.5f) << 32); + } + static uint EncodeFloat3ToNorm11(float3 v) // 32 bits: 11.10.11 + { + return (uint) (v.x * 2047.5f) | ((uint) (v.y * 1023.5f) << 11) | ((uint) (v.z * 2047.5f) << 21); + } + static ushort EncodeFloat3ToNorm655(float3 v) // 16 bits: 6.5.5 + { + return (ushort) ((uint) (v.x * 63.5f) | ((uint) (v.y * 31.5f) << 6) | ((uint) (v.z * 31.5f) << 11)); + } + static ushort EncodeFloat3ToNorm565(float3 v) // 16 bits: 5.6.5 + { + return (ushort) ((uint) (v.x * 31.5f) | ((uint) (v.y * 63.5f) << 5) | ((uint) (v.z * 31.5f) << 11)); + } + + static uint EncodeQuatToNorm10(float4 v) // 32 bits: 10.10.10.2 + { + return (uint) (v.x * 1023.5f) | ((uint) (v.y * 1023.5f) << 10) | ((uint) (v.z * 1023.5f) << 20) | ((uint) (v.w * 3.5f) << 30); + } + + static unsafe void EmitEncodedVector(float3 v, byte* outputPtr, GaussianSplatAsset.VectorFormat format) + { + switch (format) + { + case GaussianSplatAsset.VectorFormat.Float32: + { + *(float*) outputPtr = v.x; + *(float*) (outputPtr + 4) = v.y; + *(float*) (outputPtr + 8) = v.z; + } + break; + case GaussianSplatAsset.VectorFormat.Norm16: + { + ulong enc = EncodeFloat3ToNorm16(math.saturate(v)); + *(uint*) outputPtr = (uint) enc; + *(ushort*) (outputPtr + 4) = (ushort) (enc >> 32); + } + break; + case GaussianSplatAsset.VectorFormat.Norm11: + { + uint enc = EncodeFloat3ToNorm11(math.saturate(v)); + *(uint*) outputPtr = enc; + } + break; + case GaussianSplatAsset.VectorFormat.Norm6: + { + ushort enc = EncodeFloat3ToNorm655(math.saturate(v)); + *(ushort*) outputPtr = enc; + } + break; + } + } + + [BurstCompile] + struct CreatePositionsDataJob : IJobParallelFor + { + [ReadOnly] public NativeArray m_Input; + public GaussianSplatAsset.VectorFormat m_Format; + public int m_FormatSize; + [NativeDisableParallelForRestriction] public NativeArray m_Output; + + public unsafe void Execute(int index) + { + byte* outputPtr = (byte*) m_Output.GetUnsafePtr() + index * m_FormatSize; + EmitEncodedVector(m_Input[index].pos, outputPtr, m_Format); + } + } + + [BurstCompile] + struct CreateOtherDataJob : IJobParallelFor + { + [ReadOnly] public NativeArray m_Input; + [NativeDisableContainerSafetyRestriction] [ReadOnly] public NativeArray m_SplatSHIndices; + public GaussianSplatAsset.VectorFormat m_ScaleFormat; + public int m_FormatSize; + [NativeDisableParallelForRestriction] public NativeArray m_Output; + + public unsafe void Execute(int index) + { + byte* outputPtr = (byte*) m_Output.GetUnsafePtr() + index * m_FormatSize; + + // rotation: 4 bytes + { + Quaternion rotQ = m_Input[index].rot; + float4 rot = new float4(rotQ.x, rotQ.y, rotQ.z, rotQ.w); + uint enc = EncodeQuatToNorm10(rot); + *(uint*) outputPtr = enc; + outputPtr += 4; + } + + // scale: 6, 4 or 2 bytes + EmitEncodedVector(m_Input[index].scale, outputPtr, m_ScaleFormat); + outputPtr += GaussianSplatAsset.GetVectorSize(m_ScaleFormat); + + // SH index + if (m_SplatSHIndices.IsCreated) + *(ushort*) outputPtr = (ushort)m_SplatSHIndices[index]; + } + } + + static int NextMultipleOf(int size, int multipleOf) + { + return (size + multipleOf - 1) / multipleOf * multipleOf; + } + + void CreatePositionsData(NativeArray inputSplats, string filePath, ref Hash128 dataHash) + { + int dataLen = inputSplats.Length * GaussianSplatAsset.GetVectorSize(m_FormatPos); + dataLen = NextMultipleOf(dataLen, 8); // serialized as ulong + NativeArray data = new(dataLen, Allocator.TempJob); + + CreatePositionsDataJob job = new CreatePositionsDataJob + { + m_Input = inputSplats, + m_Format = m_FormatPos, + m_FormatSize = GaussianSplatAsset.GetVectorSize(m_FormatPos), + m_Output = data + }; + job.Schedule(inputSplats.Length, 8192).Complete(); + + dataHash.Append(data); + + using var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); + fs.Write(data); + + data.Dispose(); + } + + void CreateOtherData(NativeArray inputSplats, string filePath, ref Hash128 dataHash, NativeArray splatSHIndices) + { + int formatSize = GaussianSplatAsset.GetOtherSizeNoSHIndex(m_FormatScale); + if (splatSHIndices.IsCreated) + formatSize += 2; + int dataLen = inputSplats.Length * formatSize; + + dataLen = NextMultipleOf(dataLen, 8); // serialized as ulong + NativeArray data = new(dataLen, Allocator.TempJob); + + CreateOtherDataJob job = new CreateOtherDataJob + { + m_Input = inputSplats, + m_SplatSHIndices = splatSHIndices, + m_ScaleFormat = m_FormatScale, + m_FormatSize = formatSize, + m_Output = data + }; + job.Schedule(inputSplats.Length, 8192).Complete(); + + dataHash.Append(data); + + using var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); + fs.Write(data); + + data.Dispose(); + } + + static int SplatIndexToTextureIndex(uint idx) + { + uint2 xy = GaussianUtils.DecodeMorton2D_16x16(idx); + uint width = GaussianSplatAsset.kTextureWidth / 16; + idx >>= 8; + uint x = (idx % width) * 16 + xy.x; + uint y = (idx / width) * 16 + xy.y; + return (int)(y * GaussianSplatAsset.kTextureWidth + x); + } + + [BurstCompile] + struct CreateColorDataJob : IJobParallelFor + { + [ReadOnly] public NativeArray m_Input; + [NativeDisableParallelForRestriction] public NativeArray m_Output; + + public void Execute(int index) + { + var splat = m_Input[index]; + int i = SplatIndexToTextureIndex((uint)index); + m_Output[i] = new float4(splat.dc0.x, splat.dc0.y, splat.dc0.z, splat.opacity); + } + } + + void CreateColorData(NativeArray inputSplats, string filePath, ref Hash128 dataHash) + { + var (width, height) = GaussianSplatAsset.CalcTextureSize(inputSplats.Length); + NativeArray data = new(width * height, Allocator.TempJob); + + CreateColorDataJob job = new CreateColorDataJob(); + job.m_Input = inputSplats; + job.m_Output = data; + job.Schedule(inputSplats.Length, 8192).Complete(); + + dataHash.Append(data); + dataHash.Append((int)m_FormatColor); + + GraphicsFormat gfxFormat = GaussianSplatAsset.ColorFormatToGraphics(m_FormatColor); + int dstSize = (int)GraphicsFormatUtility.ComputeMipmapSize(width, height, gfxFormat); + + if (GraphicsFormatUtility.IsCompressedFormat(gfxFormat)) + { + Texture2D tex = new Texture2D(width, height, GraphicsFormat.R32G32B32A32_SFloat, TextureCreationFlags.DontInitializePixels | TextureCreationFlags.DontUploadUponCreate); + tex.SetPixelData(data, 0); + EditorUtility.CompressTexture(tex, GraphicsFormatUtility.GetTextureFormat(gfxFormat), 100); + NativeArray cmpData = tex.GetPixelData(0); + using var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); + fs.Write(cmpData); + + DestroyImmediate(tex); + } + else + { + ConvertColorJob jobConvert = new ConvertColorJob + { + width = width, + height = height, + inputData = data, + format = m_FormatColor, + outputData = new NativeArray(dstSize, Allocator.TempJob), + formatBytesPerPixel = dstSize / width / height + }; + jobConvert.Schedule(height, 1).Complete(); + using var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); + fs.Write(jobConvert.outputData); + jobConvert.outputData.Dispose(); + } + + data.Dispose(); + } + + [BurstCompile] + struct CreateSHDataJob : IJobParallelFor + { + [ReadOnly] public NativeArray m_Input; + public GaussianSplatAsset.SHFormat m_Format; + public NativeArray m_Output; + public unsafe void Execute(int index) + { + var splat = m_Input[index]; + + switch (m_Format) + { + case GaussianSplatAsset.SHFormat.Float32: + { + GaussianSplatAsset.SHTableItemFloat32 res; + res.sh1 = splat.sh1; + res.sh2 = splat.sh2; + res.sh3 = splat.sh3; + res.sh4 = splat.sh4; + res.sh5 = splat.sh5; + res.sh6 = splat.sh6; + res.sh7 = splat.sh7; + res.sh8 = splat.sh8; + res.sh9 = splat.sh9; + res.shA = splat.shA; + res.shB = splat.shB; + res.shC = splat.shC; + res.shD = splat.shD; + res.shE = splat.shE; + res.shF = splat.shF; + res.shPadding = default; + ((GaussianSplatAsset.SHTableItemFloat32*) m_Output.GetUnsafePtr())[index] = res; + } + break; + case GaussianSplatAsset.SHFormat.Float16: + { + GaussianSplatAsset.SHTableItemFloat16 res; + res.sh1 = new half3(splat.sh1); + res.sh2 = new half3(splat.sh2); + res.sh3 = new half3(splat.sh3); + res.sh4 = new half3(splat.sh4); + res.sh5 = new half3(splat.sh5); + res.sh6 = new half3(splat.sh6); + res.sh7 = new half3(splat.sh7); + res.sh8 = new half3(splat.sh8); + res.sh9 = new half3(splat.sh9); + res.shA = new half3(splat.shA); + res.shB = new half3(splat.shB); + res.shC = new half3(splat.shC); + res.shD = new half3(splat.shD); + res.shE = new half3(splat.shE); + res.shF = new half3(splat.shF); + res.shPadding = default; + ((GaussianSplatAsset.SHTableItemFloat16*) m_Output.GetUnsafePtr())[index] = res; + } + break; + case GaussianSplatAsset.SHFormat.Norm11: + { + GaussianSplatAsset.SHTableItemNorm11 res; + res.sh1 = EncodeFloat3ToNorm11(splat.sh1); + res.sh2 = EncodeFloat3ToNorm11(splat.sh2); + res.sh3 = EncodeFloat3ToNorm11(splat.sh3); + res.sh4 = EncodeFloat3ToNorm11(splat.sh4); + res.sh5 = EncodeFloat3ToNorm11(splat.sh5); + res.sh6 = EncodeFloat3ToNorm11(splat.sh6); + res.sh7 = EncodeFloat3ToNorm11(splat.sh7); + res.sh8 = EncodeFloat3ToNorm11(splat.sh8); + res.sh9 = EncodeFloat3ToNorm11(splat.sh9); + res.shA = EncodeFloat3ToNorm11(splat.shA); + res.shB = EncodeFloat3ToNorm11(splat.shB); + res.shC = EncodeFloat3ToNorm11(splat.shC); + res.shD = EncodeFloat3ToNorm11(splat.shD); + res.shE = EncodeFloat3ToNorm11(splat.shE); + res.shF = EncodeFloat3ToNorm11(splat.shF); + ((GaussianSplatAsset.SHTableItemNorm11*) m_Output.GetUnsafePtr())[index] = res; + } + break; + case GaussianSplatAsset.SHFormat.Norm6: + { + GaussianSplatAsset.SHTableItemNorm6 res; + res.sh1 = EncodeFloat3ToNorm565(splat.sh1); + res.sh2 = EncodeFloat3ToNorm565(splat.sh2); + res.sh3 = EncodeFloat3ToNorm565(splat.sh3); + res.sh4 = EncodeFloat3ToNorm565(splat.sh4); + res.sh5 = EncodeFloat3ToNorm565(splat.sh5); + res.sh6 = EncodeFloat3ToNorm565(splat.sh6); + res.sh7 = EncodeFloat3ToNorm565(splat.sh7); + res.sh8 = EncodeFloat3ToNorm565(splat.sh8); + res.sh9 = EncodeFloat3ToNorm565(splat.sh9); + res.shA = EncodeFloat3ToNorm565(splat.shA); + res.shB = EncodeFloat3ToNorm565(splat.shB); + res.shC = EncodeFloat3ToNorm565(splat.shC); + res.shD = EncodeFloat3ToNorm565(splat.shD); + res.shE = EncodeFloat3ToNorm565(splat.shE); + res.shF = EncodeFloat3ToNorm565(splat.shF); + res.shPadding = default; + ((GaussianSplatAsset.SHTableItemNorm6*) m_Output.GetUnsafePtr())[index] = res; + } + break; + default: + break; + } + } + } + + static void EmitSimpleDataFile(NativeArray data, string filePath, ref Hash128 dataHash) where T : unmanaged + { + dataHash.Append(data); + using var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); + fs.Write(data.Reinterpret(UnsafeUtility.SizeOf())); + } + + void CreateSHData(NativeArray inputSplats, string filePath, ref Hash128 dataHash, NativeArray clusteredSHs) + { + if (clusteredSHs.IsCreated) + { + EmitSimpleDataFile(clusteredSHs, filePath, ref dataHash); + } + else + { + int dataLen = (int)GaussianSplatAsset.CalcSHDataSize(inputSplats.Length, m_FormatSH); + NativeArray data = new(dataLen, Allocator.TempJob); + CreateSHDataJob job = new CreateSHDataJob + { + m_Input = inputSplats, + m_Format = m_FormatSH, + m_Output = data + }; + job.Schedule(inputSplats.Length, 8192).Complete(); + EmitSimpleDataFile(data, filePath, ref dataHash); + data.Dispose(); + } + } + + static GaussianSplatAsset.CameraInfo[] LoadJsonCamerasFile(string curPath, bool doImport) + { + if (!doImport) + return null; + + string camerasPath; + while (true) + { + var dir = Path.GetDirectoryName(curPath); + if (!Directory.Exists(dir)) + return null; + camerasPath = $"{dir}/{kCamerasJson}"; + if (File.Exists(camerasPath)) + break; + curPath = dir; + } + + if (!File.Exists(camerasPath)) + return null; + + string json = File.ReadAllText(camerasPath); + var jsonCameras = JSONParser.FromJson>(json); + if (jsonCameras == null || jsonCameras.Count == 0) + return null; + + var result = new GaussianSplatAsset.CameraInfo[jsonCameras.Count]; + for (var camIndex = 0; camIndex < jsonCameras.Count; camIndex++) + { + var jsonCam = jsonCameras[camIndex]; + var pos = new Vector3(jsonCam.position[0], jsonCam.position[1], jsonCam.position[2]); + // the matrix is a "view matrix", not "camera matrix" lol + var axisx = new Vector3(jsonCam.rotation[0][0], jsonCam.rotation[1][0], jsonCam.rotation[2][0]); + var axisy = new Vector3(jsonCam.rotation[0][1], jsonCam.rotation[1][1], jsonCam.rotation[2][1]); + var axisz = new Vector3(jsonCam.rotation[0][2], jsonCam.rotation[1][2], jsonCam.rotation[2][2]); + + axisy *= -1; + axisz *= -1; + + var cam = new GaussianSplatAsset.CameraInfo + { + pos = pos, + axisX = axisx, + axisY = axisy, + axisZ = axisz, + fov = 25 //@TODO + }; + result[camIndex] = cam; + } + + return result; + } + + [Serializable] + public class JsonCamera + { + public int id; + public string img_name; + public int width; + public int height; + public float[] position; + public float[][] rotation; + public float fx; + public float fy; + } + } +} diff --git a/MVS/3DGS-Unity/Editor/GaussianSplatAssetCreator.cs.meta b/MVS/3DGS-Unity/Editor/GaussianSplatAssetCreator.cs.meta new file mode 100644 index 00000000..15540d2f --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianSplatAssetCreator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 635bd950b8a74c84f870d5c8f02c3974 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Editor/GaussianSplatAssetEditor.cs b/MVS/3DGS-Unity/Editor/GaussianSplatAssetEditor.cs new file mode 100644 index 00000000..6dd0e147 --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianSplatAssetEditor.cs @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: MIT + +using GaussianSplatting.Runtime; +using Unity.Collections.LowLevel.Unsafe; +using UnityEditor; +using UnityEngine; + +namespace GaussianSplatting.Editor +{ + [CustomEditor(typeof(GaussianSplatAsset))] + [CanEditMultipleObjects] + public class GaussianSplatAssetEditor : UnityEditor.Editor + { + public override void OnInspectorGUI() + { + var gs = target as GaussianSplatAsset; + if (!gs) + return; + + using var _ = new EditorGUI.DisabledScope(true); + + if (targets.Length == 1) + SingleAssetGUI(gs); + else + { + int totalCount = 0; + foreach (var tgt in targets) + { + var gss = tgt as GaussianSplatAsset; + if (gss) + { + totalCount += gss.splatCount; + } + } + EditorGUILayout.TextField("Total Splats", $"{totalCount:N0}"); + } + } + + static void SingleAssetGUI(GaussianSplatAsset gs) + { + var splatCount = gs.splatCount; + EditorGUILayout.TextField("Splats", $"{splatCount:N0}"); + var prevBackColor = GUI.backgroundColor; + if (gs.formatVersion != GaussianSplatAsset.kCurrentVersion) + GUI.backgroundColor *= Color.red; + EditorGUILayout.IntField("Version", gs.formatVersion); + GUI.backgroundColor = prevBackColor; + + long sizePos = gs.posData != null ? gs.posData.dataSize : 0; + long sizeOther = gs.otherData != null ? gs.otherData.dataSize : 0; + long sizeCol = gs.colorData != null ? gs.colorData.dataSize : 0; + long sizeSH = GaussianSplatAsset.CalcSHDataSize(gs.splatCount, gs.shFormat); + long sizeChunk = gs.chunkData != null ? gs.chunkData.dataSize : 0; + + EditorGUILayout.TextField("Memory", EditorUtility.FormatBytes(sizePos + sizeOther + sizeSH + sizeCol + sizeChunk)); + EditorGUI.indentLevel++; + EditorGUILayout.TextField("Positions", $"{EditorUtility.FormatBytes(sizePos)} ({gs.posFormat})"); + EditorGUILayout.TextField("Other", $"{EditorUtility.FormatBytes(sizeOther)} ({gs.scaleFormat})"); + EditorGUILayout.TextField("Base color", $"{EditorUtility.FormatBytes(sizeCol)} ({gs.colorFormat})"); + EditorGUILayout.TextField("SHs", $"{EditorUtility.FormatBytes(sizeSH)} ({gs.shFormat})"); + EditorGUILayout.TextField("Chunks", + $"{EditorUtility.FormatBytes(sizeChunk)} ({UnsafeUtility.SizeOf()} B/chunk)"); + EditorGUI.indentLevel--; + + EditorGUILayout.Vector3Field("Bounds Min", gs.boundsMin); + EditorGUILayout.Vector3Field("Bounds Max", gs.boundsMax); + + EditorGUILayout.TextField("Data Hash", gs.dataHash.ToString()); + } + } +} diff --git a/MVS/3DGS-Unity/Editor/GaussianSplatAssetEditor.cs.meta b/MVS/3DGS-Unity/Editor/GaussianSplatAssetEditor.cs.meta new file mode 100644 index 00000000..fded438f --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianSplatAssetEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 75971a29a6deda14c9b1ff5f4ab2f2a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Editor/GaussianSplatRendererEditor.cs b/MVS/3DGS-Unity/Editor/GaussianSplatRendererEditor.cs new file mode 100644 index 00000000..06f8511d --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianSplatRendererEditor.cs @@ -0,0 +1,444 @@ +// SPDX-License-Identifier: MIT + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using GaussianSplatting.Runtime; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Mathematics; +using UnityEditor; +using UnityEditor.EditorTools; +using UnityEngine; +using GaussianSplatRenderer = GaussianSplatting.Runtime.GaussianSplatRenderer; + +namespace GaussianSplatting.Editor +{ + [CustomEditor(typeof(GaussianSplatRenderer))] + [CanEditMultipleObjects] + public class GaussianSplatRendererEditor : UnityEditor.Editor + { + const string kPrefExportBake = "nesnausk.GaussianSplatting.ExportBakeTransform"; + + SerializedProperty m_PropAsset; + SerializedProperty m_PropSplatScale; + SerializedProperty m_PropOpacityScale; + SerializedProperty m_PropSHOrder; + SerializedProperty m_PropSHOnly; + SerializedProperty m_PropSortNthFrame; + SerializedProperty m_PropRenderMode; + SerializedProperty m_PropPointDisplaySize; + SerializedProperty m_PropCutouts; + SerializedProperty m_PropShaderSplats; + SerializedProperty m_PropShaderComposite; + SerializedProperty m_PropShaderDebugPoints; + SerializedProperty m_PropShaderDebugBoxes; + SerializedProperty m_PropCSSplatUtilities; + + bool m_ResourcesExpanded = false; + int m_CameraIndex = 0; + + bool m_ExportBakeTransform; + + static int s_EditStatsUpdateCounter = 0; + + static HashSet s_AllEditors = new(); + + public static void BumpGUICounter() + { + ++s_EditStatsUpdateCounter; + } + + public static void RepaintAll() + { + foreach (var e in s_AllEditors) + e.Repaint(); + } + + public void OnEnable() + { + m_ExportBakeTransform = EditorPrefs.GetBool(kPrefExportBake, false); + + m_PropAsset = serializedObject.FindProperty("m_Asset"); + m_PropSplatScale = serializedObject.FindProperty("m_SplatScale"); + m_PropOpacityScale = serializedObject.FindProperty("m_OpacityScale"); + m_PropSHOrder = serializedObject.FindProperty("m_SHOrder"); + m_PropSHOnly = serializedObject.FindProperty("m_SHOnly"); + m_PropSortNthFrame = serializedObject.FindProperty("m_SortNthFrame"); + m_PropRenderMode = serializedObject.FindProperty("m_RenderMode"); + m_PropPointDisplaySize = serializedObject.FindProperty("m_PointDisplaySize"); + m_PropCutouts = serializedObject.FindProperty("m_Cutouts"); + m_PropShaderSplats = serializedObject.FindProperty("m_ShaderSplats"); + m_PropShaderComposite = serializedObject.FindProperty("m_ShaderComposite"); + m_PropShaderDebugPoints = serializedObject.FindProperty("m_ShaderDebugPoints"); + m_PropShaderDebugBoxes = serializedObject.FindProperty("m_ShaderDebugBoxes"); + m_PropCSSplatUtilities = serializedObject.FindProperty("m_CSSplatUtilities"); + + s_AllEditors.Add(this); + } + + public void OnDisable() + { + s_AllEditors.Remove(this); + } + + public override void OnInspectorGUI() + { + var gs = target as GaussianSplatRenderer; + if (!gs) + return; + + serializedObject.Update(); + + GUILayout.Label("Data Asset", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(m_PropAsset); + + if (!gs.HasValidAsset) + { + var msg = gs.asset != null && gs.asset.formatVersion != GaussianSplatAsset.kCurrentVersion + ? "Gaussian Splat asset version is not compatible, please recreate the asset" + : "Gaussian Splat asset is not assigned or is empty"; + EditorGUILayout.HelpBox(msg, MessageType.Error); + } + + EditorGUILayout.Space(); + GUILayout.Label("Render Options", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(m_PropSplatScale); + EditorGUILayout.PropertyField(m_PropOpacityScale); + EditorGUILayout.PropertyField(m_PropSHOrder); + EditorGUILayout.PropertyField(m_PropSHOnly); + EditorGUILayout.PropertyField(m_PropSortNthFrame); + + EditorGUILayout.Space(); + GUILayout.Label("Debugging Tweaks", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(m_PropRenderMode); + if (m_PropRenderMode.intValue is (int)GaussianSplatRenderer.RenderMode.DebugPoints or (int)GaussianSplatRenderer.RenderMode.DebugPointIndices) + EditorGUILayout.PropertyField(m_PropPointDisplaySize); + + EditorGUILayout.Space(); + m_ResourcesExpanded = EditorGUILayout.Foldout(m_ResourcesExpanded, "Resources", true, EditorStyles.foldoutHeader); + if (m_ResourcesExpanded) + { + EditorGUILayout.PropertyField(m_PropShaderSplats); + EditorGUILayout.PropertyField(m_PropShaderComposite); + EditorGUILayout.PropertyField(m_PropShaderDebugPoints); + EditorGUILayout.PropertyField(m_PropShaderDebugBoxes); + EditorGUILayout.PropertyField(m_PropCSSplatUtilities); + } + bool validAndEnabled = gs && gs.enabled && gs.gameObject.activeInHierarchy && gs.HasValidAsset; + if (validAndEnabled && !gs.HasValidRenderSetup) + { + EditorGUILayout.HelpBox("Shader resources are not set up", MessageType.Error); + validAndEnabled = false; + } + + if (validAndEnabled && targets.Length == 1) + { + EditCameras(gs); + EditGUI(gs); + } + if (validAndEnabled && targets.Length > 1) + { + MultiEditGUI(); + } + + serializedObject.ApplyModifiedProperties(); + } + + void EditCameras(GaussianSplatRenderer gs) + { + var asset = gs.asset; + var cameras = asset.cameras; + if (cameras != null && cameras.Length != 0) + { + EditorGUILayout.Space(); + GUILayout.Label("Cameras", EditorStyles.boldLabel); + var camIndex = EditorGUILayout.IntSlider("Camera", m_CameraIndex, 0, cameras.Length - 1); + camIndex = math.clamp(camIndex, 0, cameras.Length - 1); + if (camIndex != m_CameraIndex) + { + m_CameraIndex = camIndex; + gs.ActivateCamera(camIndex); + } + } + } + + void MultiEditGUI() + { + DrawSeparator(); + CountTargetSplats(out var totalSplats, out var totalObjects); + EditorGUILayout.LabelField("Total Objects", $"{totalObjects}"); + EditorGUILayout.LabelField("Total Splats", $"{totalSplats:N0}"); + if (totalSplats > GaussianSplatAsset.kMaxSplats) + { + EditorGUILayout.HelpBox($"Can't merge, too many splats (max. supported {GaussianSplatAsset.kMaxSplats:N0})", MessageType.Warning); + return; + } + + var targetGs = (GaussianSplatRenderer) target; + if (!targetGs || !targetGs.HasValidAsset || !targetGs.isActiveAndEnabled) + { + EditorGUILayout.HelpBox($"Can't merge into {target.name} (no asset or disable)", MessageType.Warning); + return; + } + + if (targetGs.asset.chunkData != null) + { + EditorGUILayout.HelpBox($"Can't merge into {target.name} (needs to use Very High quality preset)", MessageType.Warning); + return; + } + if (GUILayout.Button($"Merge into {target.name}")) + { + MergeSplatObjects(); + } + } + + void CountTargetSplats(out int totalSplats, out int totalObjects) + { + totalObjects = 0; + totalSplats = 0; + foreach (var obj in targets) + { + var gs = obj as GaussianSplatRenderer; + if (!gs || !gs.HasValidAsset || !gs.isActiveAndEnabled) + continue; + ++totalObjects; + totalSplats += gs.splatCount; + } + } + + void MergeSplatObjects() + { + CountTargetSplats(out var totalSplats, out _); + if (totalSplats > GaussianSplatAsset.kMaxSplats) + return; + var targetGs = (GaussianSplatRenderer) target; + + int copyDstOffset = targetGs.splatCount; + targetGs.EditSetSplatCount(totalSplats); + foreach (var obj in targets) + { + var gs = obj as GaussianSplatRenderer; + if (!gs || !gs.HasValidAsset || !gs.isActiveAndEnabled) + continue; + if (gs == targetGs) + continue; + gs.EditCopySplatsInto(targetGs, 0, copyDstOffset, gs.splatCount); + copyDstOffset += gs.splatCount; + gs.gameObject.SetActive(false); + } + Debug.Assert(copyDstOffset == totalSplats, $"Merge count mismatch, {copyDstOffset} vs {totalSplats}"); + Selection.activeObject = targetGs; + } + + void EditGUI(GaussianSplatRenderer gs) + { + ++s_EditStatsUpdateCounter; + + DrawSeparator(); + bool wasToolActive = ToolManager.activeContextType == typeof(GaussianToolContext); + GUILayout.BeginHorizontal(); + bool isToolActive = GUILayout.Toggle(wasToolActive, "Edit", EditorStyles.miniButton); + using (new EditorGUI.DisabledScope(!gs.editModified)) + { + if (GUILayout.Button("Reset", GUILayout.ExpandWidth(false))) + { + if (EditorUtility.DisplayDialog("Reset Splat Modifications?", + $"This will reset edits of {gs.name} to match the {gs.asset.name} asset. Continue?", + "Yes, reset", "Cancel")) + { + gs.enabled = false; + gs.enabled = true; + } + } + } + + GUILayout.EndHorizontal(); + if (!wasToolActive && isToolActive) + { + ToolManager.SetActiveContext(); + if (Tools.current == Tool.View) + Tools.current = Tool.Move; + } + + if (wasToolActive && !isToolActive) + { + ToolManager.SetActiveContext(); + } + + if (isToolActive && gs.asset.chunkData != null) + { + EditorGUILayout.HelpBox("Splat move/rotate/scale tools need Very High splat quality preset", MessageType.Warning); + } + + EditorGUILayout.Space(); + GUILayout.BeginHorizontal(); + if (GUILayout.Button("Add Cutout")) + { + GaussianCutout cutout = ObjectFactory.CreateGameObject("GSCutout", typeof(GaussianCutout)).GetComponent(); + Transform cutoutTr = cutout.transform; + cutoutTr.SetParent(gs.transform, false); + cutoutTr.localScale = (gs.asset.boundsMax - gs.asset.boundsMin) * 0.25f; + gs.m_Cutouts ??= Array.Empty(); + ArrayUtility.Add(ref gs.m_Cutouts, cutout); + gs.UpdateEditCountsAndBounds(); + EditorUtility.SetDirty(gs); + Selection.activeGameObject = cutout.gameObject; + } + if (GUILayout.Button("Use All Cutouts")) + { + gs.m_Cutouts = FindObjectsByType(FindObjectsSortMode.InstanceID); + gs.UpdateEditCountsAndBounds(); + EditorUtility.SetDirty(gs); + } + + if (GUILayout.Button("No Cutouts")) + { + gs.m_Cutouts = Array.Empty(); + gs.UpdateEditCountsAndBounds(); + EditorUtility.SetDirty(gs); + } + GUILayout.EndHorizontal(); + EditorGUILayout.PropertyField(m_PropCutouts); + + bool hasCutouts = gs.m_Cutouts != null && gs.m_Cutouts.Length != 0; + bool modifiedOrHasCutouts = gs.editModified || hasCutouts; + + var asset = gs.asset; + EditorGUILayout.Space(); + EditorGUI.BeginChangeCheck(); + m_ExportBakeTransform = EditorGUILayout.Toggle("Export in world space", m_ExportBakeTransform); + if (EditorGUI.EndChangeCheck()) + { + EditorPrefs.SetBool(kPrefExportBake, m_ExportBakeTransform); + } + + if (GUILayout.Button("Export PLY")) + ExportPlyFile(gs, m_ExportBakeTransform); + if (asset.posFormat > GaussianSplatAsset.VectorFormat.Norm16 || + asset.scaleFormat > GaussianSplatAsset.VectorFormat.Norm16 || + asset.colorFormat > GaussianSplatAsset.ColorFormat.Float16x4 || + asset.shFormat > GaussianSplatAsset.SHFormat.Float16) + { + EditorGUILayout.HelpBox( + "It is recommended to use High or VeryHigh quality preset for editing splats, lower levels are lossy", + MessageType.Warning); + } + + bool displayEditStats = isToolActive || modifiedOrHasCutouts; + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Splats", $"{gs.splatCount:N0}"); + if (displayEditStats) + { + EditorGUILayout.LabelField("Cut", $"{gs.editCutSplats:N0}"); + EditorGUILayout.LabelField("Deleted", $"{gs.editDeletedSplats:N0}"); + EditorGUILayout.LabelField("Selected", $"{gs.editSelectedSplats:N0}"); + if (hasCutouts) + { + if (s_EditStatsUpdateCounter > 10) + { + gs.UpdateEditCountsAndBounds(); + s_EditStatsUpdateCounter = 0; + } + } + } + } + + static void DrawSeparator() + { + EditorGUILayout.Space(12f, true); + GUILayout.Box(GUIContent.none, "sv_iconselector_sep", GUILayout.Height(2), GUILayout.ExpandWidth(true)); + EditorGUILayout.Space(); + } + + bool HasFrameBounds() + { + return true; + } + + Bounds OnGetFrameBounds() + { + var gs = target as GaussianSplatRenderer; + if (!gs || !gs.HasValidRenderSetup) + return new Bounds(Vector3.zero, Vector3.one); + Bounds bounds = default; + bounds.SetMinMax(gs.asset.boundsMin, gs.asset.boundsMax); + if (gs.editSelectedSplats > 0) + { + bounds = gs.editSelectedBounds; + } + bounds.extents *= 0.7f; + return TransformBounds(gs.transform, bounds); + } + + public static Bounds TransformBounds(Transform tr, Bounds bounds ) + { + var center = tr.TransformPoint(bounds.center); + + var ext = bounds.extents; + var axisX = tr.TransformVector(ext.x, 0, 0); + var axisY = tr.TransformVector(0, ext.y, 0); + var axisZ = tr.TransformVector(0, 0, ext.z); + + // sum their absolute value to get the world extents + ext.x = Mathf.Abs(axisX.x) + Mathf.Abs(axisY.x) + Mathf.Abs(axisZ.x); + ext.y = Mathf.Abs(axisX.y) + Mathf.Abs(axisY.y) + Mathf.Abs(axisZ.y); + ext.z = Mathf.Abs(axisX.z) + Mathf.Abs(axisY.z) + Mathf.Abs(axisZ.z); + + return new Bounds { center = center, extents = ext }; + } + + static unsafe void ExportPlyFile(GaussianSplatRenderer gs, bool bakeTransform) + { + var path = EditorUtility.SaveFilePanel( + "Export Gaussian Splat PLY file", "", $"{gs.asset.name}-edit.ply", "ply"); + if (string.IsNullOrWhiteSpace(path)) + return; + + int kSplatSize = UnsafeUtility.SizeOf(); + using var gpuData = new GraphicsBuffer(GraphicsBuffer.Target.Structured, gs.splatCount, kSplatSize); + + if (!gs.EditExportData(gpuData, bakeTransform)) + return; + + GaussianSplatAssetCreator.InputSplatData[] data = new GaussianSplatAssetCreator.InputSplatData[gpuData.count]; + gpuData.GetData(data); + + var gpuDeleted = gs.GpuEditDeleted; + uint[] deleted = new uint[gpuDeleted.count]; + gpuDeleted.GetData(deleted); + + // count non-deleted splats + int aliveCount = 0; + for (int i = 0; i < data.Length; ++i) + { + int wordIdx = i >> 5; + int bitIdx = i & 31; + bool isDeleted = (deleted[wordIdx] & (1u << bitIdx)) != 0; + bool isCutout = data[i].nor.sqrMagnitude > 0; + if (!isDeleted && !isCutout) + ++aliveCount; + } + + using FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write); + // note: this is a long string! but we don't use multiline literal because we want guaranteed LF line ending + var header = $"ply\nformat binary_little_endian 1.0\nelement vertex {aliveCount}\nproperty float x\nproperty float y\nproperty float z\nproperty float nx\nproperty float ny\nproperty float nz\nproperty float f_dc_0\nproperty float f_dc_1\nproperty float f_dc_2\nproperty float f_rest_0\nproperty float f_rest_1\nproperty float f_rest_2\nproperty float f_rest_3\nproperty float f_rest_4\nproperty float f_rest_5\nproperty float f_rest_6\nproperty float f_rest_7\nproperty float f_rest_8\nproperty float f_rest_9\nproperty float f_rest_10\nproperty float f_rest_11\nproperty float f_rest_12\nproperty float f_rest_13\nproperty float f_rest_14\nproperty float f_rest_15\nproperty float f_rest_16\nproperty float f_rest_17\nproperty float f_rest_18\nproperty float f_rest_19\nproperty float f_rest_20\nproperty float f_rest_21\nproperty float f_rest_22\nproperty float f_rest_23\nproperty float f_rest_24\nproperty float f_rest_25\nproperty float f_rest_26\nproperty float f_rest_27\nproperty float f_rest_28\nproperty float f_rest_29\nproperty float f_rest_30\nproperty float f_rest_31\nproperty float f_rest_32\nproperty float f_rest_33\nproperty float f_rest_34\nproperty float f_rest_35\nproperty float f_rest_36\nproperty float f_rest_37\nproperty float f_rest_38\nproperty float f_rest_39\nproperty float f_rest_40\nproperty float f_rest_41\nproperty float f_rest_42\nproperty float f_rest_43\nproperty float f_rest_44\nproperty float opacity\nproperty float scale_0\nproperty float scale_1\nproperty float scale_2\nproperty float rot_0\nproperty float rot_1\nproperty float rot_2\nproperty float rot_3\nend_header\n"; + fs.Write(Encoding.UTF8.GetBytes(header)); + for (int i = 0; i < data.Length; ++i) + { + int wordIdx = i >> 5; + int bitIdx = i & 31; + bool isDeleted = (deleted[wordIdx] & (1u << bitIdx)) != 0; + bool isCutout = data[i].nor.sqrMagnitude > 0; + if (!isDeleted && !isCutout) + { + var splat = data[i]; + byte* ptr = (byte*)&splat; + fs.Write(new ReadOnlySpan(ptr, kSplatSize)); + } + } + + Debug.Log($"Exported PLY {path} with {aliveCount:N0} splats"); + } + } +} \ No newline at end of file diff --git a/MVS/3DGS-Unity/Editor/GaussianSplatRendererEditor.cs.meta b/MVS/3DGS-Unity/Editor/GaussianSplatRendererEditor.cs.meta new file mode 100644 index 00000000..2813e1fd --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianSplatRendererEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0ce434aee9ae4ee6b1f5cd10ae7c8cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Editor/GaussianSplatValidator.cs b/MVS/3DGS-Unity/Editor/GaussianSplatValidator.cs new file mode 100644 index 00000000..a1a1c4ea --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianSplatValidator.cs @@ -0,0 +1,210 @@ +// SPDX-License-Identifier: MIT + +using System.IO; +using GaussianSplatting.Runtime; +using Unity.Burst; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Jobs; +using Unity.Mathematics; +using UnityEditor; +using UnityEngine; +using UnityEngine.Experimental.Rendering; + +namespace GaussianSplatting.Editor +{ + [BurstCompile] + public static class GaussianSplatValidator + { + struct RefItem + { + public string assetPath; + public int cameraIndex; + public float fov; + } + + // currently on RTX 3080Ti: 43.76, 39.36, 43.50 PSNR + [MenuItem("Tools/Gaussian Splats/Debug/Validate Render against SBIR")] + public static void ValidateSBIR() + { + ValidateImpl("SBIR"); + } + // currently on RTX 3080Ti: matches + [MenuItem("Tools/Gaussian Splats/Debug/Validate Render against D3D12")] + public static void ValidateD3D12() + { + ValidateImpl("D3D12"); + } + + static unsafe void ValidateImpl(string refPrefix) + { + var gaussians = Object.FindObjectOfType(typeof(GaussianSplatRenderer)) as GaussianSplatRenderer; + { + if (gaussians == null) + { + Debug.LogError("No GaussianSplatRenderer object found"); + return; + } + } + var items = new RefItem[] + { + new() {assetPath = "bicycle", cameraIndex = 0, fov = 39.09651f}, + new() {assetPath = "truck", cameraIndex = 30, fov = 50}, + new() {assetPath = "garden", cameraIndex = 30, fov = 47}, + }; + + var cam = Camera.main; + var oldAsset = gaussians.asset; + var oldCamPos = cam.transform.localPosition; + var oldCamRot = cam.transform.localRotation; + var oldCamFov = cam.fieldOfView; + + for (var index = 0; index < items.Length; index++) + { + var item = items[index]; + EditorUtility.DisplayProgressBar("Validating Gaussian splat rendering", item.assetPath, (float)index / items.Length); + var path = $"Assets/GaussianAssets/{item.assetPath}-point_cloud-iteration_30000-point_cloud.asset"; + var gs = AssetDatabase.LoadAssetAtPath(path); + if (gs == null) + { + Debug.LogError($"Did not find asset for validation item {item.assetPath} at {path}"); + continue; + } + var refImageFile = $"../../docs/RefImages/{refPrefix}_{item.assetPath}{item.cameraIndex}.png"; // use our snapshot by default + if (!File.Exists(refImageFile)) + { + Debug.LogError($"Did not find reference image for validation item {item.assetPath} at {refImageFile}"); + continue; + } + + var compareTexture = new Texture2D(4, 4, GraphicsFormat.R8G8B8A8_SRGB, TextureCreationFlags.None); + byte[] refImageBytes = File.ReadAllBytes(refImageFile); + ImageConversion.LoadImage(compareTexture, refImageBytes, false); + + int width = compareTexture.width; + int height = compareTexture.height; + + var renderTarget = RenderTexture.GetTemporary(width, height, 24, GraphicsFormat.R8G8B8A8_SRGB); + cam.targetTexture = renderTarget; + cam.fieldOfView = item.fov; + + var captureTexture = new Texture2D(width, height, GraphicsFormat.R8G8B8A8_SRGB, TextureCreationFlags.None); + NativeArray diffPixels = new(width * height, Allocator.Persistent); + + gaussians.m_Asset = gs; + gaussians.Update(); + gaussians.ActivateCamera(item.cameraIndex); + cam.Render(); + Graphics.SetRenderTarget(renderTarget); + captureTexture.ReadPixels(new Rect(0, 0, width, height), 0, 0); + + NativeArray refPixels = compareTexture.GetPixelData(0); + NativeArray gotPixels = captureTexture.GetPixelData(0); + float psnr = 0, rmse = 0; + int errorsCount = 0; + DiffImagesJob difJob = new DiffImagesJob(); + difJob.difPixels = diffPixels; + difJob.refPixels = refPixels; + difJob.gotPixels = gotPixels; + difJob.psnrPtr = &psnr; + difJob.rmsePtr = &rmse; + difJob.difPixCount = &errorsCount; + difJob.Schedule().Complete(); + + string pathDif = $"../../Shot-{refPrefix}-{item.assetPath}{item.cameraIndex}-diff.png"; + string pathRef = $"../../Shot-{refPrefix}-{item.assetPath}{item.cameraIndex}-ref.png"; + string pathGot = $"../../Shot-{refPrefix}-{item.assetPath}{item.cameraIndex}-got.png"; + + if (errorsCount > 50 || psnr < 90.0f) + { + Debug.LogWarning( + $"{refPrefix} {item.assetPath} cam {item.cameraIndex}: RMSE {rmse:F2} PSNR {psnr:F2} diff pixels {errorsCount:N0}"); + + NativeArray pngBytes = ImageConversion.EncodeNativeArrayToPNG(diffPixels, + GraphicsFormat.R8G8B8A8_SRGB, (uint) width, (uint) height); + File.WriteAllBytes(pathDif, pngBytes.ToArray()); + pngBytes.Dispose(); + pngBytes = ImageConversion.EncodeNativeArrayToPNG(refPixels, GraphicsFormat.R8G8B8A8_SRGB, + (uint) width, (uint) height); + File.WriteAllBytes(pathRef, pngBytes.ToArray()); + pngBytes.Dispose(); + pngBytes = ImageConversion.EncodeNativeArrayToPNG(gotPixels, GraphicsFormat.R8G8B8A8_SRGB, + (uint) width, (uint) height); + File.WriteAllBytes(pathGot, pngBytes.ToArray()); + pngBytes.Dispose(); + } + else + { + File.Delete(pathDif); + File.Delete(pathRef); + File.Delete(pathGot); + } + + diffPixels.Dispose(); + RenderTexture.ReleaseTemporary(renderTarget); + Object.DestroyImmediate(captureTexture); + Object.DestroyImmediate(compareTexture); + } + + cam.targetTexture = null; + gaussians.m_Asset = oldAsset; + gaussians.Update(); + cam.transform.localPosition = oldCamPos; + cam.transform.localRotation = oldCamRot; + cam.fieldOfView = oldCamFov; + + EditorUtility.ClearProgressBar(); + } + + [BurstCompile] + struct DiffImagesJob : IJob + { + public NativeArray refPixels; + public NativeArray gotPixels; + public NativeArray difPixels; + [NativeDisableUnsafePtrRestriction] public unsafe float* rmsePtr; + [NativeDisableUnsafePtrRestriction] public unsafe float* psnrPtr; + [NativeDisableUnsafePtrRestriction] public unsafe int* difPixCount; + + public unsafe void Execute() + { + const int kDiffScale = 5; + const int kDiffThreshold = 3 * kDiffScale; + *difPixCount = 0; + double sumSqDif = 0; + for (int i = 0; i < refPixels.Length; ++i) + { + Color32 cref = refPixels[i]; + // note: LoadImage always loads PNGs into ARGB order, so swizzle to normal RGBA + cref = new Color32(cref.g, cref.b, cref.a, 255); + refPixels[i] = cref; + + Color32 cgot = gotPixels[i]; + cgot.a = 255; + gotPixels[i] = cgot; + + Color32 cdif = new Color32(0, 0, 0, 255); + cdif.r = (byte)math.abs(cref.r - cgot.r); + cdif.g = (byte)math.abs(cref.g - cgot.g); + cdif.b = (byte)math.abs(cref.b - cgot.b); + sumSqDif += cdif.r * cdif.r + cdif.g * cdif.g + cdif.b * cdif.b; + + cdif.r = (byte)math.min(255, cdif.r * kDiffScale); + cdif.g = (byte)math.min(255, cdif.g * kDiffScale); + cdif.b = (byte)math.min(255, cdif.b * kDiffScale); + difPixels[i] = cdif; + if (cdif.r >= kDiffThreshold || cdif.g >= kDiffThreshold || cdif.b >= kDiffThreshold) + { + (*difPixCount)++; + } + } + + double meanSqDif = sumSqDif / (refPixels.Length * 3); + double rmse = math.sqrt(meanSqDif); + double psnr = 20.0 * math.log10(255.0) - 10.0 * math.log10(rmse * rmse); + *rmsePtr = (float) rmse; + *psnrPtr = (float) psnr; + } + } + } +} diff --git a/MVS/3DGS-Unity/Editor/GaussianSplatValidator.cs.meta b/MVS/3DGS-Unity/Editor/GaussianSplatValidator.cs.meta new file mode 100644 index 00000000..aee48a8a --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianSplatValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f8e75b80eb181a4698f733ba59b694b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Editor/GaussianSplattingEditor.asmdef b/MVS/3DGS-Unity/Editor/GaussianSplattingEditor.asmdef new file mode 100644 index 00000000..f61f8578 --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianSplattingEditor.asmdef @@ -0,0 +1,21 @@ +{ + "name": "GaussianSplattingEditor", + "rootNamespace": "GaussianSplatting.Editor", + "references": [ + "GUID:4b653174f8fcdcd49b4c9a6f1ca8c7c3", + "GUID:2665a8d13d1b3f18800f46e256720795", + "GUID:d8b63aba1907145bea998dd612889d6b", + "GUID:e0cd26848372d4e5c891c569017e11f1" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/MVS/3DGS-Unity/Editor/GaussianSplattingEditor.asmdef.meta b/MVS/3DGS-Unity/Editor/GaussianSplattingEditor.asmdef.meta new file mode 100644 index 00000000..6cffb5d9 --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianSplattingEditor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 14414175af4b366469db63f2efee475f +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Editor/GaussianTool.cs b/MVS/3DGS-Unity/Editor/GaussianTool.cs new file mode 100644 index 00000000..c841ab6f --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianTool.cs @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT + +using GaussianSplatting.Runtime; +using UnityEditor.EditorTools; +using UnityEngine; + +namespace GaussianSplatting.Editor +{ + abstract class GaussianTool : EditorTool + { + protected GaussianSplatRenderer GetRenderer() + { + var gs = target as GaussianSplatRenderer; + if (!gs || !gs.HasValidAsset || !gs.HasValidRenderSetup) + return null; + return gs; + } + + protected bool CanBeEdited() + { + var gs = GetRenderer(); + if (!gs) + return false; + return gs.asset.chunkData == null; // need to be lossless / non-chunked for editing + } + + protected bool HasSelection() + { + var gs = GetRenderer(); + if (!gs) + return false; + return gs.editSelectedSplats > 0; + } + + protected Vector3 GetSelectionCenterLocal() + { + var gs = GetRenderer(); + if (!gs || gs.editSelectedSplats == 0) + return Vector3.zero; + return gs.editSelectedBounds.center; + } + } +} diff --git a/MVS/3DGS-Unity/Editor/GaussianTool.cs.meta b/MVS/3DGS-Unity/Editor/GaussianTool.cs.meta new file mode 100644 index 00000000..0993d11f --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6203c808ab9e64a4a8ff0277c5aa7669 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Editor/GaussianToolContext.cs b/MVS/3DGS-Unity/Editor/GaussianToolContext.cs new file mode 100644 index 00000000..fe0bbde1 --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianToolContext.cs @@ -0,0 +1,192 @@ +// SPDX-License-Identifier: MIT + +using System; +using GaussianSplatting.Runtime; +using UnityEditor; +using UnityEditor.EditorTools; +using UnityEngine; + +namespace GaussianSplatting.Editor +{ + [EditorToolContext("GaussianSplats", typeof(GaussianSplatRenderer)), Icon(k_IconPath)] + class GaussianToolContext : EditorToolContext + { + const string k_IconPath = "Packages/org.nesnausk.gaussian-splatting/Editor/Icons/GaussianContext.png"; + + Vector2 m_MouseStartDragPos; + + protected override Type GetEditorToolType(Tool tool) + { + if (tool == Tool.Move) + return typeof(GaussianMoveTool); + //if (tool == Tool.Rotate) + // return typeof(GaussianRotateTool); // not correctly working yet + //if (tool == Tool.Scale) + // return typeof(GaussianScaleTool); // not working correctly yet when the GS itself has scale + return null; + } + + public override void OnWillBeDeactivated() + { + var gs = target as GaussianSplatRenderer; + if (!gs) + return; + gs.EditDeselectAll(); + } + + static void HandleKeyboardCommands(Event evt, GaussianSplatRenderer gs) + { + if (evt.type != EventType.ValidateCommand && evt.type != EventType.ExecuteCommand) + return; + bool execute = evt.type == EventType.ExecuteCommand; + switch (evt.commandName) + { + // ugh, EventCommandNames string constants is internal :( + case "SoftDelete": + case "Delete": + if (execute) + { + gs.EditDeleteSelected(); + GaussianSplatRendererEditor.RepaintAll(); + } + evt.Use(); + break; + case "SelectAll": + if (execute) + { + gs.EditSelectAll(); + GaussianSplatRendererEditor.RepaintAll(); + } + evt.Use(); + break; + case "DeselectAll": + if (execute) + { + gs.EditDeselectAll(); + GaussianSplatRendererEditor.RepaintAll(); + } + evt.Use(); + break; + case "InvertSelection": + if (execute) + { + gs.EditInvertSelection(); + GaussianSplatRendererEditor.RepaintAll(); + } + evt.Use(); + break; + } + } + + static bool IsViewToolActive() + { + return Tools.viewToolActive || Tools.current == Tool.View || (Event.current != null && Event.current.alt); + } + + public override void OnToolGUI(EditorWindow window) + { + if (!(window is SceneView sceneView)) + return; + var gs = target as GaussianSplatRenderer; + if (!gs) + return; + + GaussianSplatRendererEditor.BumpGUICounter(); + + int id = GUIUtility.GetControlID(FocusType.Passive); + Event evt = Event.current; + HandleKeyboardCommands(evt, gs); + var evtType = evt.GetTypeForControl(id); + switch (evtType) + { + case EventType.Layout: + // make this be the default tool, so that we get focus when user clicks on nothing else + HandleUtility.AddDefaultControl(id); + break; + case EventType.MouseDown: + if (IsViewToolActive()) + break; + if (HandleUtility.nearestControl == id && evt.button == 0) + { + // shift/command adds to selection, ctrl removes from selection: if none of these + // are present, start a new selection + if (!evt.shift && !EditorGUI.actionKey && !evt.control) + gs.EditDeselectAll(); + + // record selection state at start + gs.EditStoreSelectionMouseDown(); + GaussianSplatRendererEditor.RepaintAll(); + + GUIUtility.hotControl = id; + m_MouseStartDragPos = evt.mousePosition; + evt.Use(); + } + break; + case EventType.MouseDrag: + if (GUIUtility.hotControl == id && evt.button == 0) + { + Rect rect = FromToRect(m_MouseStartDragPos, evt.mousePosition); + Vector2 rectMin = HandleUtility.GUIPointToScreenPixelCoordinate(rect.min); + Vector2 rectMax = HandleUtility.GUIPointToScreenPixelCoordinate(rect.max); + gs.EditUpdateSelection(rectMin, rectMax, sceneView.camera, evt.control); + GaussianSplatRendererEditor.RepaintAll(); + evt.Use(); + } + break; + case EventType.MouseUp: + if (GUIUtility.hotControl == id && evt.button == 0) + { + m_MouseStartDragPos = Vector2.zero; + GUIUtility.hotControl = 0; + evt.Use(); + } + break; + case EventType.Repaint: + // draw cutout gizmos + Handles.color = new Color(1,0,1,0.7f); + var prevMatrix = Handles.matrix; + foreach (var cutout in gs.m_Cutouts) + { + if (!cutout) + continue; + Handles.matrix = cutout.transform.localToWorldMatrix; + if (cutout.m_Type == GaussianCutout.Type.Ellipsoid) + { + Handles.DrawWireDisc(Vector3.zero, Vector3.up, 1.0f); + Handles.DrawWireDisc(Vector3.zero, Vector3.right, 1.0f); + Handles.DrawWireDisc(Vector3.zero, Vector3.forward, 1.0f); + } + if (cutout.m_Type == GaussianCutout.Type.Box) + Handles.DrawWireCube(Vector3.zero, Vector3.one * 2); + } + + Handles.matrix = prevMatrix; + // draw selection bounding box + if (gs.editSelectedSplats > 0) + { + var selBounds = GaussianSplatRendererEditor.TransformBounds(gs.transform, gs.editSelectedBounds); + Handles.DrawWireCube(selBounds.center, selBounds.size); + } + // draw drag rectangle + if (GUIUtility.hotControl == id && evt.mousePosition != m_MouseStartDragPos) + { + GUIStyle style = "SelectionRect"; + Handles.BeginGUI(); + style.Draw(FromToRect(m_MouseStartDragPos, evt.mousePosition), false, false, false, false); + Handles.EndGUI(); + } + break; + } + } + + // build a rect that always has a positive size + static Rect FromToRect(Vector2 from, Vector2 to) + { + if (from.x > to.x) + (from.x, to.x) = (to.x, from.x); + if (from.y > to.y) + (from.y, to.y) = (to.y, from.y); + return new Rect(from.x, from.y, to.x - from.x, to.y - from.y); + } + } +} \ No newline at end of file diff --git a/MVS/3DGS-Unity/Editor/GaussianToolContext.cs.meta b/MVS/3DGS-Unity/Editor/GaussianToolContext.cs.meta new file mode 100644 index 00000000..7823b09b --- /dev/null +++ b/MVS/3DGS-Unity/Editor/GaussianToolContext.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 80d7ecbaa1b24e6399ee95f6fc0b9c90 +timeCreated: 1697718362 \ No newline at end of file diff --git a/MVS/3DGS-Unity/Editor/Icons.meta b/MVS/3DGS-Unity/Editor/Icons.meta new file mode 100644 index 00000000..0c7b1d59 --- /dev/null +++ b/MVS/3DGS-Unity/Editor/Icons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 770e497b696b99641aa1bf295d0b3552 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Editor/Icons/GaussianContext.png b/MVS/3DGS-Unity/Editor/Icons/GaussianContext.png new file mode 100644 index 0000000000000000000000000000000000000000..817b6f2cc67f6a2627da472116c01277f4935a64 GIT binary patch literal 4460 zcmeHKdsGu=77tPof(Wj)g0MISTwP_7$(u|GG>`z1jm8iaTwI*YOv2P86Egz|ve1gi z7TtBLeR!%A*>#I+ZC#eS_@GEZS@o!=fUgDA6>&vdyVl3LwN~A4!uxE`*~2;8|47bc zX6|?I@4NSRA17a>adCPme-@v|o5+_aUl zlMq|vA|cXCS$RBfx5KEJdJLM<_+XQIPK#eFbE{kbq@}uE;e;)x)ryGm;3R_@%(hIHUq_C z@0U-5@6Z0-k{1nkV$ABGwX^Q{Ig&QJFSuW8Eo|q%KaWj`>{@Y>hT9qr&RZk+tN#>9 zATjmz((v{p;zQlKv=}sU-XE7(LLML7Grc#YXLnB2zYZOQcs##yDmB%pPfZ;P2Lw@7 zvQ?dN?3L)YysQsQKacL#9G{a~P``N-`tE|4T2iQm2fkSCzCBY$WteiK11^byLYuxrx9GdPto&(xEo+mnUMarZ)mXRkGHicx+#W8QU(uzA6^ zzvxX5(oC@|x71djiMRHmNB`N|`{k;)ZHIR~VP1Hr>=f^}8PWI=Y#JT@xqT(tUveE; zn90AVx>v558CQDa$epjF`b|3nsv{Nkw~MYLf6o2_JN&DhE@S1M%GgaGEa&x16bJkmnP0-Yb&3}7zBH~(4z{=2`XGslTT@1cf61e}s{^pA>+)UEb z>|ah!Lk@)I=6d8sVTUgJRqSFPlD*7a$gjaw5!u?Q} zE9lqT=NDi3#})skrl-ZV=l&jc@~QjOqJYnCfU+y3KzU^weum<-Lx>Tyg%o-nE>L$o zUShJ>h2d*R7P62w%BdFIZEO}m6rmQZkQ)$#E0xTrGS<1ttaXdc__{T?iV!3x@e{o$ z0C12j26-KJCxd#`0v|34o;k5d0QpqdHEKb&!3d?&ZW59SWkLkjd8tB)Ac+qpx(O?4 z(xweUfH$=upJiRBNaXQ&gdVAocH2Z^l}aT-BqE6f1{yF^||m&hye^O$>46v z#Zt5r;xI7_UBIdZ0z~7IWex2L-@|6u^;N5K?JTs9=>G z7sE0ug2O6{*b0kr8IB~#j)GX?ra)C<_R(H(Py~RoU<9sGVHQ}f#8t3Nu2jL8 zRf5AZoWQII@Cj4Nd{6|ArqON(2GU76FdHdyIc>fLj&M|C)T;#&Au=K{+A-D&3_uT1 zPJ;F@BTHt=L1wWS$ER4KQYs~4sXRfdl1at#5vAp%n*p`Rp^6cqbifHNF(?QJP>XSu z3IKc-AR08)O=2wVHq*3SE#RDjILqN>1867$V=*npk^mHuNKr9@idAN@0u{?qdBQ?O ziXx-*X@asA{V#2p4enu{7%p{LD#q#7?<)ybxqJUE(XS> zJW*Z$H@f&Ehbhtt{sDQwQOU3KjcRbr3bbUVYkAMPZ%xylw}2$rm65~ncp=ld%a6CC zDgp>6vwDMWazB51Xc$`2rX;{wIzq42m=jKae9n-WvNSyKT6$A$%3QsEUv7D0UCs07 zv1QA3>l=b(f=^7R_c?C1YS@kwpY^(|SKlk@?|a+6{eE}x;b3!j&Ayt7!1{I=X^Vc` zz?*CCI6h}f-OPsIG;eD}UiOSGewQX>)kD{MY1Q?J#;ruf=VkhL+ns^m{HXudN8*H* z(odPhSka{OWrfPB;{4q)k8W)M#>RL?d8Gc|+yQ6JY zSpTb?yT6_FlOEZZvoq0t{dq;@j{ab0%#jyAnLjBW*Qeb|Ke#jatKU~1tNXYA%Wd`B zKDxc&X6}}k!`ee))^1ps+vi7Tlc#b|9Lh|Szflp~U2-|lnj7D_YsKTd@$|aI+Wjf3%l-qLR$yBI literal 0 HcmV?d00001 diff --git a/MVS/3DGS-Unity/Editor/Icons/GaussianContext.png.meta b/MVS/3DGS-Unity/Editor/Icons/GaussianContext.png.meta new file mode 100644 index 00000000..7b6a521c --- /dev/null +++ b/MVS/3DGS-Unity/Editor/Icons/GaussianContext.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: c61202bc8cc557546afa505174da220e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Nintendo Switch + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: LinuxHeadlessSimulation + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Editor/Icons/GaussianContext@2x.png b/MVS/3DGS-Unity/Editor/Icons/GaussianContext@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..db945ea1e1b9fc3e4cc9b6d927e5cfb9a5c97d08 GIT binary patch literal 4877 zcmeHKcT^MU77rkTC`}O*QO1CZN|H&1jD#XB!3|S)zw^-J->wE2i4GDQ6B(v<`W0 zb-Lz^A1JHs^Dt1NrH-6;h7a2(CZ_Q- z9FO0$_+~3rx#mXR`rR?Umd})}(hP{||GI9|ZRDMQCaw5dO^dxwXZ!7XpZT{Q+_EYu zX`jFQ>K(`P?fS|n>+<_x@KQ-IVDZwg5KOCPqPSL0Fw@mKFnKguKv234#gYjMk`qc& zBceY$RYr$MTtxqxFNLMLP+|@#HtLC3V{{y5OvZ#bJt)vFARPe!YJx(cbhS!jK+;8Y zGcE$2O=1=uGMiAzB6_?u1`5^c35dt!F=0k{I+@C$2iidadR&3X!XmmLz?+CZhoW={ ziW-;WdUX762ctbX3P;Ghvom&Fbl4pu$rDNLNCC>S2fj>y#xU4B8Yu zMuevl8p^9D1det4>r(V8b2&K1B2NJ-_Gcj@CDNE~4-*ASQmr$40kS`{q)5dl zvOderq%oJ%GZEn4jr*DP$J))tz)C7b!n9b5DLqM;h;E9H;988t5%VJtL;X=q&SeN; zu8_g=wV0@4bk0)mcaUPd};uxkt z{row&oG?S-7!sk?t5MKSQjIDJmQJHID@=qVAu$pWox_AbNn%ter2r0K4UigKn`Zc= ziX+uTEQOl*WDA6TejGNJ!{u{ff0*;hXd0n6fLS!5vSB8dXV#b+gMe}XwWw)Q0f1Q! zszE~a1WIZ3aayfPL^mY`nLNAIQm~+KltRN$iU6Q6hl{Xbge{C?3lKIR;c&;pTmR;&5H?w%*z5nvCa|(*1EGvn?soT04QUyVMY(i=&Y_{S*9K1W3>US|KcOS zY|vwi0e+n_uyui*kk!2vcJT#b|COJvKKzv-AgDLU7xCLmS1(;(#K0FB_fA(YU0=k& z7a8|X*Z++!yHAHHLIeH*rGcZ;(3~}=!7;0^d{Sf>?StvNtz=I=ko41u6AUz(>nPJ@ zA(44M2SOW4A`Q1`vKwUY=vLvL>`bFs9+QNH#Kl+CtbZI`AMBJ9v~gwV#4DE8*>Nx1 zlfIqhbNH~6-U547z2Q;Op|$ko+j1ikl2U)!@XmeKo38^5llRRyRafegZRwLee8zQa2&qme%$Kms2R&tUPWF-BVo(bQK7jK<3ZO3yZ9*AlLx||OZxn) zc_iGoEo(3C%kjz$Zs=d>aXj~Cv$3XW<+V_#d{6m=*`BXy9?eGId6tGs{_{bvE#4Qy z`%ebs8gGthSel15xcFN-+|Qljx+urDbYSJoDz~@d?;YyKB)p1l7*if8arzFw;PpmP zK40W{K0khhDo)%yuYJqS1-=cFBcPUT7YZAqt4Fs)XZaajTYSdGD%yiL?pgk3Z^A;l ztg)le3jfYIxxjPE;7KLN+9qDu=joH`{J|?fGl!TQJob;^UF{3B+lvyd%BBuAwpi)2OSSs3`;cGUc`h!sMw{BX!*%Cw?^6E$Y_~(^YO3I1 z<_MpQDeS1^jfx{R>YX2I-6eH5?(Cn?D!S4rycB=yY)k?!{XQ>mhgX}!qxp$-C5%G>Rg$rrX7Lm)d*e=t-RMRBk(P0NB&R+CyZzM9Q literal 0 HcmV?d00001 diff --git a/MVS/3DGS-Unity/Editor/Icons/GaussianContext@2x.png.meta b/MVS/3DGS-Unity/Editor/Icons/GaussianContext@2x.png.meta new file mode 100644 index 00000000..3bce49de --- /dev/null +++ b/MVS/3DGS-Unity/Editor/Icons/GaussianContext@2x.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 15d0de03329e14440b034e884fe10379 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Nintendo Switch + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: LinuxHeadlessSimulation + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Editor/Icons/d_GaussianContext.png b/MVS/3DGS-Unity/Editor/Icons/d_GaussianContext.png new file mode 100644 index 0000000000000000000000000000000000000000..bf13024ca9da484e53732d6bf4e385b870a75a99 GIT binary patch literal 4464 zcmeHKdr(tX8jnz(1%X-xRw~!vj26Ag&70gMLQK#^3`W2%s1$DQBixdgxfc>(SYH%Z z=yWMvi-J|Q7P~s5^;J=+MF*I|YR9!z3n~JlGCo@C%DQXuvFC<|Fzw6^Gu!{j4iX~WG{xh&uUL&MrZz+V&-!2gy_eU@xc9Rf2}Q@l&E{<1{;$_{;A zroVY_x$)_ru2!_QhN)+$mo@9cj9+JLGn_3cebzD^ohrTY?UBzbyH}OlA9Q@#uAMt~ zv6+et=_!afF5i9RNo&iAduN#R?6xMA;dJWaE$wkH2@MLGIW?2I#u==n$Q<~Z+!OKDx|nkb*|H*SiqSm_sT z&U#~wkNPL?mP@Vr3rS0#W~b$b^_^LpaJ{Se+9~f+YU^GqJIE+ItDAenBxs8L`R(2% z{^}spTc$lb&n=*O(XW2&?Y)=v7xRf-gUl;iH@5Tstc$`=Vqx~s^OjX;f5{DGesbVL z<-<~S_?$o9JbC}8nf@;rqY)ee}z7=0pG8w&Jwr1|X zoY}wg>AM>?9;@m_zgaQoVCkIH(Am4+58QV!w0>nwtG4EGpWyii#}bkR+t*A-oD1rF zr>9;GdG6QLD62^OFeMe5I?&Yd`0I$Ct3IoOuRdRR?1#$%Jte*ejvi>b{L1ZxdOQ0? zTNrXQc+DD@tT5#GwJBx0*!IdRRn>cp3%nkf2MmP}`|5wb-*Fusj4R?Lo}h{|3PLz3=R#MOY4f9WLi;5I$o5AD+zwW!oYYp3J9zu zi$QLy#m1m+72m^)f@f}6$cH=-Hc!RRFc=|?-AO`HfmDFNNp8A8%wHG?#XAWKP1PZrH}ea1=uvT9Uz?w1cJX zHi+ZIO!j0Xv9CO!(bStw=u&i06m0m%pnvB5TVs79BaX_NdvpJBrwxfhsO$t zJr2pz)Jw6(`Nqw7!WrubFdyX|haQRD0|qFA0oB^^e9k?+R>kMmM+rMl6R77=i7TX- zlu*DXxrv0OVz~mw5Ty*pFa<^6CXq=jla8U%+ZYzJ;Uq@|$OSaukpl{eiB!T01%<#; zIfB6^nL-9D5s6YM!ewzXlXwipawiS460?l;ilZU`m5GwdF%e>dm10~5O9?^=$H|ox zEGH<5Tt-O{DJk<%5jeWo?zCcHJ83IsCWQ{0*)zcjj;f7%6<;hsUXBIPy@7$ zu)CO-Q|YvoOk*)lPmx@yP>4kmg-k3}ATrTQ&|9RF0lCPriV%ThND^*iP!JA~7UMD% z5O^#=G^oZ&VyxYnZns-he9kF|vmBi^fPx}07Sm!Z2}lvK1Qj8uNSQ8@quf_EACaKQ z7`&aJslxw-=E?_(AKG*s&4Bd_Jwrn^l}4@|dK-GR(4Jy~AWvDK7(NsNgB6g3$4|gD zG==A4HZuwO$8f@qjMKl83_v`SSS%%AN{$n-G|nUkd#RMd1V}RpDW`Bsj*Vw$>=f(5 zoTSd8eWr0=9$lX6W+feC>pvujeW2`Mlk@ML!V z-{cB>d6*(?;2)3+9F+>@pQ{JQEMHUd60PUJ#e1S@TnC;49J)+~$9r`ecTM5d?1%t^ zeyrY*)cr!^ zp7HKLN70>sSD&8l5afH`Umy6l4IvVy%D>GWaE+H&R~dBBZ)s1MyXxulTZu=R z$Zl_!vr>HAcScpQtGhNcI`W*h817r0<3oHK{W`BFDd_DD4R!CF-^%>8(MxbMqVBuZ zyqP_b9VZ88i~T=oyja`ruDLjGuq=Q#EhV1bHS^ZxdHsSj`9CL%maNaAHZ?ZfW%j<) zAMis)%l?7-gZsA!&)#C(d%oh+9C~JQk9u3IIH=~)^{%{Nz2(yFYW2Q8-LCk*zi3#t bE~|g}kssa7A5ZHG;k4B!rDzW<%Gvl|FKT9A literal 0 HcmV?d00001 diff --git a/MVS/3DGS-Unity/Editor/Icons/d_GaussianContext.png.meta b/MVS/3DGS-Unity/Editor/Icons/d_GaussianContext.png.meta new file mode 100644 index 00000000..f8152a4b --- /dev/null +++ b/MVS/3DGS-Unity/Editor/Icons/d_GaussianContext.png.meta @@ -0,0 +1,231 @@ +fileFormatVersion: 2 +guid: 81df9c0903abfa345a9022d090982f5d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: tvOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Lumin + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: CloudRendering + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Nintendo Switch + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: LinuxHeadlessSimulation + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Editor/Icons/d_GaussianContext@2x.png b/MVS/3DGS-Unity/Editor/Icons/d_GaussianContext@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..df10fe81ab5a7babe1689c3b266634a7f6ff6159 GIT binary patch literal 4892 zcmeHKc~lc=5^pX+5Cv~UB?fR%Nzyrhq$MCENTSA#0TC3Grqh88xkwt4plDP^S8-H4 zKpg~cSI2P`5lQtxAPx)uhZRMRsE{!S5@EZ zZ<%;%q^t8VX9$8^g#x|=+)0+psTcUyWoEtxx2nwOSVDs8NgAzMCRgAj!l=PXxIr$1 zAVZx}T<=;5JGH$XIKswmlwo-Dv^}0gTM}tn|5l%(g@-OrxKUB0H@YU?KYeZA&wR7_ zd(RA)fwm3DY{!p>eJ`k6wazKN#Xpdz*Sw7^E9{k)p0g__cmEiF{noViPb&RFw_UyZ zFlqAkyouSPeqlYN4;EZ|hnz0195HNnpEZN#t={zfNlf8Ps|3Tb#tlj8mATcesde{H`tYx z{XTcswZ?wue%IDaaxmWmeU~8z{S_;kf?#ST6_u)!aH>J60gVSi!J!5XilyQNDG5)O ztGMJBCo0G!xs*$u5g>v^8Xle^7i4PjsLZL+SY|55k&;70oP!Mr08rutN-`)FDjj0r zlC8K1c(yFl$Rw)@k;)~S~5404DwDOf9&Ark(?P6+VEC8rRC z2BFdPdOcOoq^h;aG&+aFp}`CqgFyir6rE8;pazOc=WT)Lz~JLLOe@zAa(Td26ED;_>>xvs0&`D>tq4&K{KEl8l4K$luBB63mp-W0YEwf`cn&CG#FEw1lOt4 zwHO|efvX7b?hsO}%U+YNRan!JVl-TVD}kyGc%^^gGEyiKcUf2{NR}%#Rx3dE7n+1z z_L;0NVzWrB>2wbSn0MiRq5Ua$t1{3Mi4eXTOSgn4;0$FpveIQVNU(p%fOz zW>Zj%15+@}Qs@8%182*+LHtcC2VIFOx<_S!k^(4PMz#stxD0yq>D#Xv}O zl+9sai~tslTA`#EGEuEnqM)2|C7O)WG^%8)z(P0@CKhtZ3@ZG2MXW#x8884dAXiD% zdfjJHv|Nct5vYYvdLSn#h(Tw7m^o~i&G@VogKKr57cHoCn95{XC6>YJC2nRAYD#JRm>O$A4 zWrQBp;$g{vN5B+E=Z&vCtt;H4_!TUeH8;=rQFk9J#>8) z17D@w(_Q~Jx|}~Brf?Pb0@8z{5~KP2MR3gOl{7h$Z#{59?|3H`fT!LXL7WbP2K!nr z8==If1uQxeLQ#Zcv-1GgzJ0{fwI?CS_N^!9ez zkI`dT;@M}a-n3ruAGT8GluMTE7&P=lhO9C5_IWS;qlIpZCKvQu8d~5|6mBwmnEGD9 z-4`xt3@|+?^OQ@2>B4l6PRF$;K42Gm=rbD#qU5=Bb~< zKgTu4XSv%PJnoq2lxUwA?y=^g$!9{#qGE>w+Z2X`Qe)*2H)cz3lP7cpDz`g&w{`V4 z`_gs3rXkP*$lqs*FRwMw=6Hkog zZf)-7e#_m5MxLjRjc2T(b6=~Jp#4B^L%(G_C zTg*MIfg#1^7b*vwX%p^S;4?`xF+s6&f^EFlMTR{s%Lh24I7ZxC;Nx?4jXNR2d3%{*2Nbc?&IsVd0IlkDUNBAt;^#4 zaxc4#dvPUgwaHoGjkznI)_s^TdjFwmGiz8s?ofHocih;%r}4dF{lD}(c)BgQ#}99n z@I^km`{)0?%=WRz_13ZMZ-gm3qt9=3ePSScvnNaEyCrff@|GEfUO66SoV7jNDdxoZ zjo<1XJxg1fC{VII(_}-Oi zP7fV&+L!s!9ly1bh}Qp-|QeV>!PzIyzbm%-$gDG8qSD`vj6 z$=tflcf>JuQ{15=MY9C5lD3V{j|~6Eox@M1-rCF8M`cSs?)Bm1d&Sn|5eqiXoLZj| z?(*H4BU@U%W>0D_I^1^Q EditorGUIUtility.FindTexture(EditorResources.emptyFolderIconName); + static Texture2D s_FileIcon => EditorGUIUtility.FindTexture(EditorResources.folderIconName); + static GUIStyle s_StyleTextFieldText; + static GUIStyle s_StyleTextFieldDropdown; + static readonly int kPathFieldControlID = "FilePickerPathField".GetHashCode(); + const int kIconSize = 15; + const int kRecentPathsCount = 20; + + public static string PathToDisplayString(string path) + { + if (string.IsNullOrWhiteSpace(path)) + return ""; + path = path.Replace('\\', '/'); + string[] parts = path.Split('/'); + + // check if filename is not some super generic one + var baseName = Path.GetFileNameWithoutExtension(parts[^1]).ToLowerInvariant(); + if (baseName != "point_cloud" && baseName != "splat" && baseName != "input") + return parts[^1]; + + // otherwise if filename is just some generic "point cloud" type, then take some folder names above it into account + if (parts.Length >= 4) + path = string.Join('/', parts.TakeLast(4)); + + path = path.Replace('/', '-'); + return path; + } + + class PreviousPaths + { + public PreviousPaths(List paths) + { + this.paths = paths; + UpdateContent(); + } + public void UpdateContent() + { + this.content = paths.Select(p => new GUIContent(PathToDisplayString(p))).ToArray(); + } + public List paths; + public GUIContent[] content; + } + Dictionary m_PreviousPaths = new(); + + void PopulatePreviousPaths(string nameKey) + { + if (m_PreviousPaths.ContainsKey(nameKey)) + return; + + List prevPaths = new(); + for (int i = 0; i < kRecentPathsCount; ++i) + { + string path = EditorPrefs.GetString($"{kLastPathPref}-{nameKey}-{i}"); + if (!string.IsNullOrWhiteSpace(path)) + prevPaths.Add(path); + } + m_PreviousPaths.Add(nameKey, new PreviousPaths(prevPaths)); + } + + void UpdatePreviousPaths(string nameKey, string path) + { + if (!m_PreviousPaths.ContainsKey(nameKey)) + { + m_PreviousPaths.Add(nameKey, new PreviousPaths(new List())); + } + var prevPaths = m_PreviousPaths[nameKey]; + prevPaths.paths.Remove(path); + prevPaths.paths.Insert(0, path); + while (prevPaths.paths.Count > kRecentPathsCount) + prevPaths.paths.RemoveAt(prevPaths.paths.Count - 1); + prevPaths.UpdateContent(); + + for (int i = 0; i < prevPaths.paths.Count; ++i) + { + EditorPrefs.SetString($"{kLastPathPref}-{nameKey}-{i}", prevPaths.paths[i]); + } + } + + static bool CheckPath(string path, bool isFolder) + { + if (string.IsNullOrWhiteSpace(path)) + return false; + if (isFolder) + { + if (!Directory.Exists(path)) + return false; + } + else + { + if (!File.Exists(path)) + return false; + } + return true; + } + + static string PathAbsToStorage(string path) + { + path = path.Replace('\\', '/'); + var dataPath = Application.dataPath; + if (path.StartsWith(dataPath, StringComparison.Ordinal)) + { + path = Path.GetRelativePath($"{dataPath}/..", path); + path = path.Replace('\\', '/'); + } + return path; + } + + bool CheckAndSetNewPath(ref string path, string nameKey, bool isFolder) + { + path = PathAbsToStorage(path); + if (CheckPath(path, isFolder)) + { + EditorPrefs.SetString($"{kLastPathPref}-{nameKey}", path); + UpdatePreviousPaths(nameKey, path); + GUI.changed = true; + Event.current.Use(); + return true; + } + return false; + } + + string PreviousPathsDropdown(Rect position, string value, string nameKey, bool isFolder) + { + PopulatePreviousPaths(nameKey); + + if (string.IsNullOrWhiteSpace(value)) + value = EditorPrefs.GetString($"{kLastPathPref}-{nameKey}"); + + m_PreviousPaths.TryGetValue(nameKey, out var prevPaths); + + EditorGUI.BeginDisabledGroup(prevPaths == null || prevPaths.paths.Count == 0); + EditorGUI.BeginChangeCheck(); + int oldIndent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + int parameterIndex = EditorGUI.Popup(position, GUIContent.none, -1, prevPaths.content, s_StyleTextFieldDropdown); + if (EditorGUI.EndChangeCheck() && parameterIndex < prevPaths.paths.Count) + { + string newValue = prevPaths.paths[parameterIndex]; + if (CheckAndSetNewPath(ref newValue, nameKey, isFolder)) + value = newValue; + } + EditorGUI.indentLevel = oldIndent; + EditorGUI.EndDisabledGroup(); + return value; + } + + // null extension picks folders + public string PathFieldGUI(Rect position, GUIContent label, string value, string extension, string nameKey) + { + s_StyleTextFieldText ??= new GUIStyle("TextFieldDropDownText"); + s_StyleTextFieldDropdown ??= new GUIStyle("TextFieldDropdown"); + bool isFolder = extension == null; + + int controlId = GUIUtility.GetControlID(kPathFieldControlID, FocusType.Keyboard, position); + Rect fullRect = EditorGUI.PrefixLabel(position, controlId, label); + Rect textRect = new Rect(fullRect.x, fullRect.y, fullRect.width - s_StyleTextFieldDropdown.fixedWidth, fullRect.height); + Rect dropdownRect = new Rect(textRect.xMax, fullRect.y, s_StyleTextFieldDropdown.fixedWidth, fullRect.height); + Rect iconRect = new Rect(textRect.xMax - kIconSize, textRect.y, kIconSize, textRect.height); + + value = PreviousPathsDropdown(dropdownRect, value, nameKey, isFolder); + + string displayText = PathToDisplayString(value); + + Event evt = Event.current; + switch (evt.type) + { + case EventType.KeyDown: + if (GUIUtility.keyboardControl == controlId) + { + if (evt.keyCode is KeyCode.Backspace or KeyCode.Delete) + { + value = null; + EditorPrefs.SetString($"{kLastPathPref}-{nameKey}", ""); + GUI.changed = true; + evt.Use(); + } + } + break; + case EventType.Repaint: + s_StyleTextFieldText.Draw(textRect, new GUIContent(displayText), controlId, DragAndDrop.activeControlID == controlId); + GUI.DrawTexture(iconRect, isFolder ? s_FolderIcon : s_FileIcon, ScaleMode.ScaleToFit); + break; + case EventType.MouseDown: + if (evt.button != 0 || !GUI.enabled) + break; + + if (textRect.Contains(evt.mousePosition)) + { + if (iconRect.Contains(evt.mousePosition)) + { + if (string.IsNullOrWhiteSpace(value)) + value = EditorPrefs.GetString($"{kLastPathPref}-{nameKey}"); + string newPath; + string openToPath = string.Empty; + if (isFolder) + { + if (Directory.Exists(value)) + openToPath = value; + newPath = EditorUtility.OpenFolderPanel("Select folder", openToPath, ""); + } + else + { + if (File.Exists(value)) + openToPath = Path.GetDirectoryName(value); + newPath = EditorUtility.OpenFilePanel("Select file", openToPath, extension); + } + if (CheckAndSetNewPath(ref newPath, nameKey, isFolder)) + { + value = newPath; + GUI.changed = true; + evt.Use(); + } + } + else if (File.Exists(value) || Directory.Exists(value)) + { + EditorUtility.RevealInFinder(value); + } + GUIUtility.keyboardControl = controlId; + } + break; + case EventType.DragUpdated: + case EventType.DragPerform: + if (textRect.Contains(evt.mousePosition) && GUI.enabled) + { + if (DragAndDrop.paths.Length > 0) + { + DragAndDrop.visualMode = DragAndDropVisualMode.Generic; + string path = DragAndDrop.paths[0]; + path = PathAbsToStorage(path); + if (CheckPath(path, isFolder)) + { + if (evt.type == EventType.DragPerform) + { + UpdatePreviousPaths(nameKey, path); + value = path; + GUI.changed = true; + DragAndDrop.AcceptDrag(); + DragAndDrop.activeControlID = 0; + } + else + DragAndDrop.activeControlID = controlId; + } + else + DragAndDrop.visualMode = DragAndDropVisualMode.Rejected; + evt.Use(); + } + } + break; + case EventType.DragExited: + if (GUI.enabled) + { + HandleUtility.Repaint(); + } + break; + } + return value; + } + } +} diff --git a/MVS/3DGS-Unity/Editor/Utils/FilePickerControl.cs.meta b/MVS/3DGS-Unity/Editor/Utils/FilePickerControl.cs.meta new file mode 100644 index 00000000..0e005960 --- /dev/null +++ b/MVS/3DGS-Unity/Editor/Utils/FilePickerControl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 69e6c946494a9b2479ce96542339029c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Editor/Utils/KMeansClustering.cs b/MVS/3DGS-Unity/Editor/Utils/KMeansClustering.cs new file mode 100644 index 00000000..1b528879 --- /dev/null +++ b/MVS/3DGS-Unity/Editor/Utils/KMeansClustering.cs @@ -0,0 +1,595 @@ +// SPDX-License-Identifier: MIT + +using System; +using Unity.Burst; +using Unity.Burst.Intrinsics; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Jobs; +using Unity.Mathematics; +using Unity.Profiling; +using Unity.Profiling.LowLevel; + +namespace GaussianSplatting.Editor.Utils +{ + // Implementation of "Mini Batch" k-means clustering ("Web-Scale K-Means Clustering", Sculley 2010) + // using k-means++ for cluster initialization. + [BurstCompile] + public struct KMeansClustering + { + static ProfilerMarker s_ProfCalculate = new(ProfilerCategory.Render, "KMeans.Calculate", MarkerFlags.SampleGPU); + static ProfilerMarker s_ProfPlusPlus = new(ProfilerCategory.Render, "KMeans.InitialPlusPlus", MarkerFlags.SampleGPU); + static ProfilerMarker s_ProfInitialDistanceSum = new(ProfilerCategory.Render, "KMeans.Initialize.DistanceSum", MarkerFlags.SampleGPU); + static ProfilerMarker s_ProfInitialPickPoint = new(ProfilerCategory.Render, "KMeans.Initialize.PickPoint", MarkerFlags.SampleGPU); + static ProfilerMarker s_ProfInitialDistanceUpdate = new(ProfilerCategory.Render, "KMeans.Initialize.DistanceUpdate", MarkerFlags.SampleGPU); + static ProfilerMarker s_ProfAssignClusters = new(ProfilerCategory.Render, "KMeans.AssignClusters", MarkerFlags.SampleGPU); + static ProfilerMarker s_ProfUpdateMeans = new(ProfilerCategory.Render, "KMeans.UpdateMeans", MarkerFlags.SampleGPU); + + public static bool Calculate(int dim, NativeArray inputData, int batchSize, float passesOverData, Func progress, NativeArray outClusterMeans, NativeArray outDataLabels) + { + // Parameter checks + if (dim < 1) + throw new InvalidOperationException($"KMeans: dimensionality has to be >= 1, was {dim}"); + if (batchSize < 1) + throw new InvalidOperationException($"KMeans: batch size has to be >= 1, was {batchSize}"); + if (passesOverData < 0.0001f) + throw new InvalidOperationException($"KMeans: passes over data must be positive, was {passesOverData}"); + if (inputData.Length % dim != 0) + throw new InvalidOperationException($"KMeans: input length must be multiple of dim={dim}, was {inputData.Length}"); + if (outClusterMeans.Length % dim != 0) + throw new InvalidOperationException($"KMeans: output means length must be multiple of dim={dim}, was {outClusterMeans.Length}"); + int dataSize = inputData.Length / dim; + int k = outClusterMeans.Length / dim; + if (k < 1) + throw new InvalidOperationException($"KMeans: cluster count length must be at least 1, was {k}"); + if (dataSize < k) + throw new InvalidOperationException($"KMeans: input length ({inputData.Length}) must at least as long as clusters ({outClusterMeans.Length})"); + if (dataSize != outDataLabels.Length) + throw new InvalidOperationException($"KMeans: output labels length must be {dataSize}, was {outDataLabels.Length}"); + + using var prof = s_ProfCalculate.Auto(); + batchSize = math.min(dataSize, batchSize); + uint rngState = 1; + + // Do initial cluster placement + int initBatchSize = 10 * k; + const int kInitAttempts = 3; + if (!InitializeCentroids(dim, inputData, initBatchSize, ref rngState, kInitAttempts, outClusterMeans, progress)) + return false; + + NativeArray counts = new(k, Allocator.TempJob); + + NativeArray batchPoints = new(batchSize * dim, Allocator.TempJob); + NativeArray batchClusters = new(batchSize, Allocator.TempJob); + + bool cancelled = false; + for (float calcDone = 0.0f, calcLimit = dataSize * passesOverData; calcDone < calcLimit; calcDone += batchSize) + { + if (progress != null && !progress(0.3f + calcDone / calcLimit * 0.4f)) + { + cancelled = true; + break; + } + + // generate a batch of random input points + MakeRandomBatch(dim, inputData, ref rngState, batchPoints); + + // find which of the current centroids each batch point is closest to + { + using var profPart = s_ProfAssignClusters.Auto(); + AssignClustersJob job = new AssignClustersJob + { + dim = dim, + data = batchPoints, + means = outClusterMeans, + indexOffset = 0, + clusters = batchClusters, + }; + job.Schedule(batchSize, 1).Complete(); + } + + // update the centroids + { + using var profPart = s_ProfUpdateMeans.Auto(); + UpdateCentroidsJob job = new UpdateCentroidsJob + { + m_Clusters = outClusterMeans, + m_Dim = dim, + m_Counts = counts, + m_BatchSize = batchSize, + m_BatchClusters = batchClusters, + m_BatchPoints = batchPoints + }; + job.Schedule().Complete(); + } + } + + // finally find out closest clusters for all input points + { + using var profPart = s_ProfAssignClusters.Auto(); + const int kAssignBatchCount = 256 * 1024; + AssignClustersJob job = new AssignClustersJob + { + dim = dim, + data = inputData, + means = outClusterMeans, + indexOffset = 0, + clusters = outDataLabels, + }; + for (int i = 0; i < dataSize; i += kAssignBatchCount) + { + if (progress != null && !progress(0.7f + (float) i / dataSize * 0.3f)) + { + cancelled = true; + break; + } + job.indexOffset = i; + job.Schedule(math.min(kAssignBatchCount, dataSize - i), 512).Complete(); + } + } + + counts.Dispose(); + batchPoints.Dispose(); + batchClusters.Dispose(); + return !cancelled; + } + + static unsafe float DistanceSquared(int dim, NativeArray a, int aIndex, NativeArray b, int bIndex) + { + aIndex *= dim; + bIndex *= dim; + float d = 0; + if (X86.Avx.IsAvxSupported) + { + // 8x wide with AVX + int i = 0; + float* aptr = (float*) a.GetUnsafeReadOnlyPtr() + aIndex; + float* bptr = (float*) b.GetUnsafeReadOnlyPtr() + bIndex; + for (; i + 7 < dim; i += 8) + { + v256 va = X86.Avx.mm256_loadu_ps(aptr); + v256 vb = X86.Avx.mm256_loadu_ps(bptr); + v256 vd = X86.Avx.mm256_sub_ps(va, vb); + vd = X86.Avx.mm256_mul_ps(vd, vd); + + vd = X86.Avx.mm256_hadd_ps(vd, vd); + d += vd.Float0 + vd.Float1 + vd.Float4 + vd.Float5; + + aptr += 8; + bptr += 8; + } + // remainder + for (; i < dim; ++i) + { + float delta = *aptr - *bptr; + d += delta * delta; + aptr++; + bptr++; + } + } + else if (Arm.Neon.IsNeonSupported) + { + // 4x wide with NEON + int i = 0; + float* aptr = (float*) a.GetUnsafeReadOnlyPtr() + aIndex; + float* bptr = (float*) b.GetUnsafeReadOnlyPtr() + bIndex; + for (; i + 3 < dim; i += 4) + { + v128 va = Arm.Neon.vld1q_f32(aptr); + v128 vb = Arm.Neon.vld1q_f32(bptr); + v128 vd = Arm.Neon.vsubq_f32(va, vb); + vd = Arm.Neon.vmulq_f32(vd, vd); + + d += Arm.Neon.vaddvq_f32(vd); + + aptr += 4; + bptr += 4; + } + // remainder + for (; i < dim; ++i) + { + float delta = *aptr - *bptr; + d += delta * delta; + aptr++; + bptr++; + } + + } + else + { + for (var i = 0; i < dim; ++i) + { + float delta = a[aIndex + i] - b[bIndex + i]; + d += delta * delta; + } + } + + return d; + } + + static unsafe void CopyElem(int dim, NativeArray src, int srcIndex, NativeArray dst, int dstIndex) + { + UnsafeUtility.MemCpy((float*) dst.GetUnsafePtr() + dstIndex * dim, + (float*) src.GetUnsafeReadOnlyPtr() + srcIndex * dim, dim * 4); + } + + [BurstCompile] + struct ClosestDistanceInitialJob : IJobParallelFor + { + public int dim; + [ReadOnly] public NativeArray data; + [ReadOnly] public NativeArray means; + public NativeArray minDistSq; + public int pointIndex; + public void Execute(int index) + { + if (index == pointIndex) + return; + minDistSq[index] = DistanceSquared(dim, data, index, means, 0); + } + } + + [BurstCompile] + struct ClosestDistanceUpdateJob : IJobParallelFor + { + public int dim; + [ReadOnly] public NativeArray data; + [ReadOnly] public NativeArray means; + [ReadOnly] public NativeBitArray taken; + public NativeArray minDistSq; + public int meanIndex; + public void Execute(int index) + { + if (taken.IsSet(index)) + return; + float distSq = DistanceSquared(dim, data, index, means, meanIndex); + minDistSq[index] = math.min(minDistSq[index], distSq); + } + } + + [BurstCompile] + struct CalcDistSqJob : IJobParallelFor + { + public const int kBatchSize = 1024; + public int dataSize; + [ReadOnly] public NativeBitArray taken; + [ReadOnly] public NativeArray minDistSq; + public NativeArray partialSums; + + public void Execute(int batchIndex) + { + int iStart = math.min(batchIndex * kBatchSize, dataSize); + int iEnd = math.min((batchIndex + 1) * kBatchSize, dataSize); + float sum = 0; + for (int i = iStart; i < iEnd; ++i) + { + if (taken.IsSet(i)) + continue; + sum += minDistSq[i]; + } + + partialSums[batchIndex] = sum; + } + } + + [BurstCompile] + static int PickPointIndex(int dataSize, ref NativeArray partialSums, ref NativeBitArray taken, ref NativeArray minDistSq, float rval) + { + // Skip batches until we hit the ones that might have value to pick from: binary search for the batch + int indexL = 0; + int indexR = partialSums.Length; + while (indexL < indexR) + { + int indexM = (indexL + indexR) / 2; + if (partialSums[indexM] < rval) + indexL = indexM + 1; + else + indexR = indexM; + } + float acc = 0.0f; + if (indexL > 0) + { + acc = partialSums[indexL-1]; + } + + // Now search for the needed point + int pointIndex = -1; + for (int i = indexL * CalcDistSqJob.kBatchSize; i < dataSize; ++i) + { + if (taken.IsSet(i)) + continue; + acc += minDistSq[i]; + if (acc >= rval) + { + pointIndex = i; + break; + } + } + + // If we have not found a point, pick the last available one + if (pointIndex < 0) + { + for (int i = dataSize - 1; i >= 0; --i) + { + if (taken.IsSet(i)) + continue; + pointIndex = i; + break; + } + } + + if (pointIndex < 0) + pointIndex = 0; + + return pointIndex; + } + + static void KMeansPlusPlus(int dim, int k, NativeArray data, NativeArray means, NativeArray minDistSq, ref uint rngState) + { + using var prof = s_ProfPlusPlus.Auto(); + + int dataSize = data.Length / dim; + + NativeBitArray taken = new NativeBitArray(dataSize, Allocator.TempJob); + + // Select first mean randomly + int pointIndex = (int)(pcg_random(ref rngState) % dataSize); + taken.Set(pointIndex, true); + CopyElem(dim, data, pointIndex, means, 0); + + // For each point: closest squared distance to the picked point + { + ClosestDistanceInitialJob job = new ClosestDistanceInitialJob + { + dim = dim, + data = data, + means = means, + minDistSq = minDistSq, + pointIndex = pointIndex + }; + job.Schedule(dataSize, 1024).Complete(); + } + + int sumBatches = (dataSize + CalcDistSqJob.kBatchSize - 1) / CalcDistSqJob.kBatchSize; + NativeArray partialSums = new(sumBatches, Allocator.TempJob); + int resultCount = 1; + while (resultCount < k) + { + // Find total sum of distances of not yet taken points + float distSqTotal = 0; + { + using var profPart = s_ProfInitialDistanceSum.Auto(); + CalcDistSqJob job = new CalcDistSqJob + { + dataSize = dataSize, + taken = taken, + minDistSq = minDistSq, + partialSums = partialSums + }; + job.Schedule(sumBatches, 1).Complete(); + for (int i = 0; i < sumBatches; ++i) + { + distSqTotal += partialSums[i]; + partialSums[i] = distSqTotal; + } + } + + // Pick a non-taken point, with a probability proportional + // to distance: points furthest from any cluster are picked more. + { + using var profPart = s_ProfInitialPickPoint.Auto(); + float rval = pcg_hash_float(rngState + (uint)resultCount, distSqTotal); + pointIndex = PickPointIndex(dataSize, ref partialSums, ref taken, ref minDistSq, rval); + } + + // Take this point as a new cluster mean + taken.Set(pointIndex, true); + CopyElem(dim, data, pointIndex, means, resultCount); + ++resultCount; + + if (resultCount < k) + { + // Update distances of the points: since it tracks closest one, + // calculate distance to the new cluster and update if smaller. + using var profPart = s_ProfInitialDistanceUpdate.Auto(); + ClosestDistanceUpdateJob job = new ClosestDistanceUpdateJob + { + dim = dim, + data = data, + means = means, + minDistSq = minDistSq, + taken = taken, + meanIndex = resultCount - 1 + }; + job.Schedule(dataSize, 256).Complete(); + } + } + + taken.Dispose(); + partialSums.Dispose(); + } + + // For each data point, find cluster index that is closest to it + [BurstCompile] + struct AssignClustersJob : IJobParallelFor + { + public int indexOffset; + public int dim; + [ReadOnly] public NativeArray data; + [ReadOnly] public NativeArray means; + [NativeDisableParallelForRestriction] public NativeArray clusters; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray distances; + + public void Execute(int index) + { + index += indexOffset; + int meansCount = means.Length / dim; + float minDist = float.MaxValue; + int minIndex = 0; + for (int i = 0; i < meansCount; ++i) + { + float dist = DistanceSquared(dim, data, index, means, i); + if (dist < minDist) + { + minIndex = i; + minDist = dist; + } + } + clusters[index] = minIndex; + if (distances.IsCreated) + distances[index] = minDist; + } + } + + static void MakeRandomBatch(int dim, NativeArray inputData, ref uint rngState, NativeArray outBatch) + { + var job = new MakeBatchJob + { + m_Dim = dim, + m_InputData = inputData, + m_Seed = pcg_random(ref rngState), + m_OutBatch = outBatch + }; + job.Schedule().Complete(); + } + + [BurstCompile] + struct MakeBatchJob : IJob + { + public int m_Dim; + public NativeArray m_InputData; + public NativeArray m_OutBatch; + public uint m_Seed; + public void Execute() + { + uint dataSize = (uint)(m_InputData.Length / m_Dim); + int batchSize = m_OutBatch.Length / m_Dim; + NativeHashSet picked = new(batchSize, Allocator.Temp); + while (picked.Count < batchSize) + { + int index = (int)(pcg_hash(m_Seed++) % dataSize); + if (!picked.Contains(index)) + { + CopyElem(m_Dim, m_InputData, index, m_OutBatch, picked.Count); + picked.Add(index); + } + } + picked.Dispose(); + } + } + + [BurstCompile] + struct UpdateCentroidsJob : IJob + { + public int m_Dim; + public int m_BatchSize; + [ReadOnly] public NativeArray m_BatchClusters; + public NativeArray m_Counts; + [ReadOnly] public NativeArray m_BatchPoints; + public NativeArray m_Clusters; + + public void Execute() + { + for (int i = 0; i < m_BatchSize; ++i) + { + int clusterIndex = m_BatchClusters[i]; + m_Counts[clusterIndex]++; + float alpha = 1.0f / m_Counts[clusterIndex]; + + for (int j = 0; j < m_Dim; ++j) + { + m_Clusters[clusterIndex * m_Dim + j] = math.lerp(m_Clusters[clusterIndex * m_Dim + j], + m_BatchPoints[i * m_Dim + j], alpha); + } + } + } + } + + static bool InitializeCentroids(int dim, NativeArray inputData, int initBatchSize, ref uint rngState, int initAttempts, NativeArray outClusters, Func progress) + { + using var prof = s_ProfPlusPlus.Auto(); + + int k = outClusters.Length / dim; + int dataSize = inputData.Length / dim; + initBatchSize = math.min(initBatchSize, dataSize); + + NativeArray centroidBatch = new(initBatchSize * dim, Allocator.TempJob); + NativeArray validationBatch = new(initBatchSize * dim, Allocator.TempJob); + MakeRandomBatch(dim, inputData, ref rngState, centroidBatch); + MakeRandomBatch(dim, inputData, ref rngState, validationBatch); + + NativeArray tmpIndices = new(initBatchSize, Allocator.TempJob); + NativeArray tmpDistances = new(initBatchSize, Allocator.TempJob); + NativeArray curCentroids = new(k * dim, Allocator.TempJob); + + float minDistSum = float.MaxValue; + + bool cancelled = false; + for (int ia = 0; ia < initAttempts; ++ia) + { + if (progress != null && !progress((float) ia / initAttempts * 0.3f)) + { + cancelled = true; + break; + } + + KMeansPlusPlus(dim, k, centroidBatch, curCentroids, tmpDistances, ref rngState); + + { + using var profPart = s_ProfAssignClusters.Auto(); + AssignClustersJob job = new AssignClustersJob + { + dim = dim, + data = validationBatch, + means = curCentroids, + indexOffset = 0, + clusters = tmpIndices, + distances = tmpDistances + }; + job.Schedule(initBatchSize, 1).Complete(); + } + + float distSum = 0; + foreach (var d in tmpDistances) + distSum += d; + + // is this centroid better? + if (distSum < minDistSum) + { + minDistSum = distSum; + outClusters.CopyFrom(curCentroids); + } + } + + centroidBatch.Dispose(); + validationBatch.Dispose(); + tmpDistances.Dispose(); + tmpIndices.Dispose(); + curCentroids.Dispose(); + return !cancelled; + } + + // https://www.reedbeta.com/blog/hash-functions-for-gpu-rendering/ + static uint pcg_hash(uint input) + { + uint state = input * 747796405u + 2891336453u; + uint word = ((state >> (int)((state >> 28) + 4u)) ^ state) * 277803737u; + return (word >> 22) ^ word; + } + + static float pcg_hash_float(uint input, float upTo) + { + uint val = pcg_hash(input); + float f = math.asfloat(0x3f800000 | (val >> 9)) - 1.0f; + return f * upTo; + } + + static uint pcg_random(ref uint rng_state) + { + uint state = rng_state; + rng_state = rng_state * 747796405u + 2891336453u; + uint word = ((state >> (int)((state >> 28) + 4u)) ^ state) * 277803737u; + return (word >> 22) ^ word; + } + } +} diff --git a/MVS/3DGS-Unity/Editor/Utils/KMeansClustering.cs.meta b/MVS/3DGS-Unity/Editor/Utils/KMeansClustering.cs.meta new file mode 100644 index 00000000..edbf7385 --- /dev/null +++ b/MVS/3DGS-Unity/Editor/Utils/KMeansClustering.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9cecadf9c980a4ad9a30d0e1ae09d16a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Editor/Utils/PLYFileReader.cs b/MVS/3DGS-Unity/Editor/Utils/PLYFileReader.cs new file mode 100644 index 00000000..0bd4b1a9 --- /dev/null +++ b/MVS/3DGS-Unity/Editor/Utils/PLYFileReader.cs @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: MIT + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using Unity.Collections; + +namespace GaussianSplatting.Editor.Utils +{ + public static class PLYFileReader + { + public static void ReadFileHeader(string filePath, out int vertexCount, out int vertexStride, out List attrNames) + { + vertexCount = 0; + vertexStride = 0; + attrNames = new List(); + if (!File.Exists(filePath)) + return; + using var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); + ReadHeaderImpl(filePath, out vertexCount, out vertexStride, out attrNames, fs); + } + + static void ReadHeaderImpl(string filePath, out int vertexCount, out int vertexStride, out List attrNames, FileStream fs) + { + // C# arrays and NativeArrays make it hard to have a "byte" array larger than 2GB :/ + if (fs.Length >= 2 * 1024 * 1024 * 1024L) + throw new IOException($"PLY {filePath} read error: currently files larger than 2GB are not supported"); + + // read header + vertexCount = 0; + vertexStride = 0; + attrNames = new List(); + const int kMaxHeaderLines = 9000; + for (int lineIdx = 0; lineIdx < kMaxHeaderLines; ++lineIdx) + { + var line = ReadLine(fs); + if (line == "end_header" || line.Length == 0) + break; + var tokens = line.Split(' '); + if (tokens.Length == 3 && tokens[0] == "element" && tokens[1] == "vertex") + vertexCount = int.Parse(tokens[2]); + if (tokens.Length == 3 && tokens[0] == "property") + { + ElementType type = tokens[1] switch + { + "float" => ElementType.Float, + "double" => ElementType.Double, + "uchar" => ElementType.UChar, + _ => ElementType.None + }; + vertexStride += TypeToSize(type); + attrNames.Add(tokens[2]); + } + } + //Debug.Log($"PLY {filePath} vtx {vertexCount} stride {vertexStride} attrs #{attrNames.Count} {string.Join(',', attrNames)}"); + } + + public static void ReadFile(string filePath, out int vertexCount, out int vertexStride, out List attrNames, out NativeArray vertices) + { + using var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); + ReadHeaderImpl(filePath, out vertexCount, out vertexStride, out attrNames, fs); + + vertices = new NativeArray(vertexCount * vertexStride, Allocator.Persistent); + var readBytes = fs.Read(vertices); + if (readBytes != vertices.Length) + throw new IOException($"PLY {filePath} read error, expected {vertices.Length} data bytes got {readBytes}"); + } + + enum ElementType + { + None, + Float, + Double, + UChar + } + + static int TypeToSize(ElementType t) + { + return t switch + { + ElementType.None => 0, + ElementType.Float => 4, + ElementType.Double => 8, + ElementType.UChar => 1, + _ => throw new ArgumentOutOfRangeException(nameof(t), t, null) + }; + } + + static string ReadLine(FileStream fs) + { + var byteBuffer = new List(); + while (true) + { + int b = fs.ReadByte(); + if (b == -1 || b == '\n') + break; + byteBuffer.Add((byte)b); + } + // if line had CRLF line endings, remove the CR part + if (byteBuffer.Count > 0 && byteBuffer.Last() == '\r') + byteBuffer.RemoveAt(byteBuffer.Count-1); + return Encoding.UTF8.GetString(byteBuffer.ToArray()); + } + } +} diff --git a/MVS/3DGS-Unity/Editor/Utils/PLYFileReader.cs.meta b/MVS/3DGS-Unity/Editor/Utils/PLYFileReader.cs.meta new file mode 100644 index 00000000..22fd8654 --- /dev/null +++ b/MVS/3DGS-Unity/Editor/Utils/PLYFileReader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 27964c85711004ddca73909489af2e2e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Editor/Utils/TinyJsonParser.cs b/MVS/3DGS-Unity/Editor/Utils/TinyJsonParser.cs new file mode 100644 index 00000000..b81c4835 --- /dev/null +++ b/MVS/3DGS-Unity/Editor/Utils/TinyJsonParser.cs @@ -0,0 +1,403 @@ +/* +Embedded TinyJSON from https://github.com/pbhogan/TinyJSON (version 71fed96, 2019 May 10) directly here, with +custom namespace wrapped around it so it does not clash with any other embedded TinyJSON. Original license: + +The MIT License (MIT) + +Copyright (c) 2018 Alex Parker + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.Serialization; +using System.Text; + +namespace GaussianSplatting.Editor.Utils +{ + // Really simple JSON parser in ~300 lines + // - Attempts to parse JSON files with minimal GC allocation + // - Nice and simple "[1,2,3]".FromJson>() API + // - Classes and structs can be parsed too! + // class Foo { public int Value; } + // "{\"Value\":10}".FromJson() + // - Can parse JSON without type information into Dictionary and List e.g. + // "[1,2,3]".FromJson().GetType() == typeof(List) + // "{\"Value\":10}".FromJson().GetType() == typeof(Dictionary) + // - No JIT Emit support to support AOT compilation on iOS + // - Attempts are made to NOT throw an exception if the JSON is corrupted or invalid: returns null instead. + // - Only public fields and property setters on classes/structs will be written to + // + // Limitations: + // - No JIT Emit support to parse structures quickly + // - Limited to parsing <2GB JSON files (due to int.MaxValue) + // - Parsing of abstract classes or interfaces is NOT supported and will throw an exception. + public static class JSONParser + { + [ThreadStatic] static Stack> splitArrayPool; + [ThreadStatic] static StringBuilder stringBuilder; + [ThreadStatic] static Dictionary> fieldInfoCache; + [ThreadStatic] static Dictionary> propertyInfoCache; + + public static T FromJson(this string json) + { + // Initialize, if needed, the ThreadStatic variables + if (propertyInfoCache == null) propertyInfoCache = new Dictionary>(); + if (fieldInfoCache == null) fieldInfoCache = new Dictionary>(); + if (stringBuilder == null) stringBuilder = new StringBuilder(); + if (splitArrayPool == null) splitArrayPool = new Stack>(); + + //Remove all whitespace not within strings to make parsing simpler + stringBuilder.Length = 0; + for (int i = 0; i < json.Length; i++) + { + char c = json[i]; + if (c == '"') + { + i = AppendUntilStringEnd(true, i, json); + continue; + } + if (char.IsWhiteSpace(c)) + continue; + + stringBuilder.Append(c); + } + + //Parse the thing! + return (T)ParseValue(typeof(T), stringBuilder.ToString()); + } + + static int AppendUntilStringEnd(bool appendEscapeCharacter, int startIdx, string json) + { + stringBuilder.Append(json[startIdx]); + for (int i = startIdx + 1; i < json.Length; i++) + { + if (json[i] == '\\') + { + if (appendEscapeCharacter) + stringBuilder.Append(json[i]); + stringBuilder.Append(json[i + 1]); + i++;//Skip next character as it is escaped + } + else if (json[i] == '"') + { + stringBuilder.Append(json[i]); + return i; + } + else + stringBuilder.Append(json[i]); + } + return json.Length - 1; + } + + //Splits { :, : } and [ , ] into a list of strings + static List Split(string json) + { + List splitArray = splitArrayPool.Count > 0 ? splitArrayPool.Pop() : new List(); + splitArray.Clear(); + if (json.Length == 2) + return splitArray; + int parseDepth = 0; + stringBuilder.Length = 0; + for (int i = 1; i < json.Length - 1; i++) + { + switch (json[i]) + { + case '[': + case '{': + parseDepth++; + break; + case ']': + case '}': + parseDepth--; + break; + case '"': + i = AppendUntilStringEnd(true, i, json); + continue; + case ',': + case ':': + if (parseDepth == 0) + { + splitArray.Add(stringBuilder.ToString()); + stringBuilder.Length = 0; + continue; + } + break; + } + + stringBuilder.Append(json[i]); + } + + splitArray.Add(stringBuilder.ToString()); + + return splitArray; + } + + internal static object ParseValue(Type type, string json) + { + if (type == typeof(string)) + { + if (json.Length <= 2) + return string.Empty; + StringBuilder parseStringBuilder = new StringBuilder(json.Length); + for (int i = 1; i < json.Length - 1; ++i) + { + if (json[i] == '\\' && i + 1 < json.Length - 1) + { + int j = "\"\\nrtbf/".IndexOf(json[i + 1]); + if (j >= 0) + { + parseStringBuilder.Append("\"\\\n\r\t\b\f/"[j]); + ++i; + continue; + } + if (json[i + 1] == 'u' && i + 5 < json.Length - 1) + { + UInt32 c = 0; + if (UInt32.TryParse(json.Substring(i + 2, 4), System.Globalization.NumberStyles.AllowHexSpecifier, null, out c)) + { + parseStringBuilder.Append((char)c); + i += 5; + continue; + } + } + } + parseStringBuilder.Append(json[i]); + } + return parseStringBuilder.ToString(); + } + if (type.IsPrimitive) + { + var result = Convert.ChangeType(json, type, System.Globalization.CultureInfo.InvariantCulture); + return result; + } + if (type == typeof(decimal)) + { + decimal result; + decimal.TryParse(json, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out result); + return result; + } + if (type == typeof(DateTime)) + { + DateTime result; + DateTime.TryParse(json.Replace("\"",""), System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out result); + return result; + } + if (json == "null") + { + return null; + } + if (type.IsEnum) + { + if (json[0] == '"') + json = json.Substring(1, json.Length - 2); + try + { + return Enum.Parse(type, json, false); + } + catch + { + return 0; + } + } + if (type.IsArray) + { + Type arrayType = type.GetElementType(); + if (json[0] != '[' || json[json.Length - 1] != ']') + return null; + + List elems = Split(json); + Array newArray = Array.CreateInstance(arrayType, elems.Count); + for (int i = 0; i < elems.Count; i++) + newArray.SetValue(ParseValue(arrayType, elems[i]), i); + splitArrayPool.Push(elems); + return newArray; + } + if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) + { + Type listType = type.GetGenericArguments()[0]; + if (json[0] != '[' || json[json.Length - 1] != ']') + return null; + + List elems = Split(json); + var list = (IList)type.GetConstructor(new Type[] { typeof(int) }).Invoke(new object[] { elems.Count }); + for (int i = 0; i < elems.Count; i++) + list.Add(ParseValue(listType, elems[i])); + splitArrayPool.Push(elems); + return list; + } + if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Dictionary<,>)) + { + Type keyType, valueType; + { + Type[] args = type.GetGenericArguments(); + keyType = args[0]; + valueType = args[1]; + } + + //Refuse to parse dictionary keys that aren't of type string + if (keyType != typeof(string)) + return null; + //Must be a valid dictionary element + if (json[0] != '{' || json[json.Length - 1] != '}') + return null; + //The list is split into key/value pairs only, this means the split must be divisible by 2 to be valid JSON + List elems = Split(json); + if (elems.Count % 2 != 0) + return null; + + var dictionary = (IDictionary)type.GetConstructor(new Type[] { typeof(int) }).Invoke(new object[] { elems.Count / 2 }); + for (int i = 0; i < elems.Count; i += 2) + { + if (elems[i].Length <= 2) + continue; + string keyValue = elems[i].Substring(1, elems[i].Length - 2); + object val = ParseValue(valueType, elems[i + 1]); + dictionary[keyValue] = val; + } + return dictionary; + } + if (type == typeof(object)) + { + return ParseAnonymousValue(json); + } + if (json[0] == '{' && json[json.Length - 1] == '}') + { + return ParseObject(type, json); + } + + return null; + } + + static object ParseAnonymousValue(string json) + { + if (json.Length == 0) + return null; + if (json[0] == '{' && json[json.Length - 1] == '}') + { + List elems = Split(json); + if (elems.Count % 2 != 0) + return null; + var dict = new Dictionary(elems.Count / 2); + for (int i = 0; i < elems.Count; i += 2) + dict[elems[i].Substring(1, elems[i].Length - 2)] = ParseAnonymousValue(elems[i + 1]); + return dict; + } + if (json[0] == '[' && json[json.Length - 1] == ']') + { + List items = Split(json); + var finalList = new List(items.Count); + for (int i = 0; i < items.Count; i++) + finalList.Add(ParseAnonymousValue(items[i])); + return finalList; + } + if (json[0] == '"' && json[json.Length - 1] == '"') + { + string str = json.Substring(1, json.Length - 2); + return str.Replace("\\", string.Empty); + } + if (char.IsDigit(json[0]) || json[0] == '-') + { + if (json.Contains(".")) + { + double result; + double.TryParse(json, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out result); + return result; + } + else + { + int result; + int.TryParse(json, out result); + return result; + } + } + if (json == "true") + return true; + if (json == "false") + return false; + // handles json == "null" as well as invalid JSON + return null; + } + + static Dictionary CreateMemberNameDictionary(T[] members) where T : MemberInfo + { + Dictionary nameToMember = new Dictionary(StringComparer.OrdinalIgnoreCase); + for (int i = 0; i < members.Length; i++) + { + T member = members[i]; + if (member.IsDefined(typeof(IgnoreDataMemberAttribute), true)) + continue; + + string name = member.Name; + if (member.IsDefined(typeof(DataMemberAttribute), true)) + { + DataMemberAttribute dataMemberAttribute = (DataMemberAttribute)Attribute.GetCustomAttribute(member, typeof(DataMemberAttribute), true); + if (!string.IsNullOrEmpty(dataMemberAttribute.Name)) + name = dataMemberAttribute.Name; + } + + nameToMember.Add(name, member); + } + + return nameToMember; + } + + static object ParseObject(Type type, string json) + { + object instance = FormatterServices.GetUninitializedObject(type); + + //The list is split into key/value pairs only, this means the split must be divisible by 2 to be valid JSON + List elems = Split(json); + if (elems.Count % 2 != 0) + return instance; + + Dictionary nameToField; + Dictionary nameToProperty; + if (!fieldInfoCache.TryGetValue(type, out nameToField)) + { + nameToField = CreateMemberNameDictionary(type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy)); + fieldInfoCache.Add(type, nameToField); + } + if (!propertyInfoCache.TryGetValue(type, out nameToProperty)) + { + nameToProperty = CreateMemberNameDictionary(type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy)); + propertyInfoCache.Add(type, nameToProperty); + } + + for (int i = 0; i < elems.Count; i += 2) + { + if (elems[i].Length <= 2) + continue; + string key = elems[i].Substring(1, elems[i].Length - 2); + string value = elems[i + 1]; + + FieldInfo fieldInfo; + PropertyInfo propertyInfo; + if (nameToField.TryGetValue(key, out fieldInfo)) + fieldInfo.SetValue(instance, ParseValue(fieldInfo.FieldType, value)); + else if (nameToProperty.TryGetValue(key, out propertyInfo)) + propertyInfo.SetValue(instance, ParseValue(propertyInfo.PropertyType, value), null); + } + + return instance; + } + } +} diff --git a/MVS/3DGS-Unity/Editor/Utils/TinyJsonParser.cs.meta b/MVS/3DGS-Unity/Editor/Utils/TinyJsonParser.cs.meta new file mode 100644 index 00000000..f35e3930 --- /dev/null +++ b/MVS/3DGS-Unity/Editor/Utils/TinyJsonParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e9ea5041388393f459c378c31e4d7b1f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/LICENSE.md b/MVS/3DGS-Unity/LICENSE.md new file mode 100644 index 00000000..f39d6892 --- /dev/null +++ b/MVS/3DGS-Unity/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Aras Pranckevičius + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/MVS/3DGS-Unity/LICENSE.md.meta b/MVS/3DGS-Unity/LICENSE.md.meta new file mode 100644 index 00000000..5045372f --- /dev/null +++ b/MVS/3DGS-Unity/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: da286c32b8dba1744aecca8cb1ab4ad6 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Materials.meta b/MVS/3DGS-Unity/Materials.meta new file mode 100644 index 00000000..9e35b8d0 --- /dev/null +++ b/MVS/3DGS-Unity/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 78bfe028c2744c741bd4f94574de884a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Materials/BlackSkybox.mat b/MVS/3DGS-Unity/Materials/BlackSkybox.mat new file mode 100644 index 00000000..e0e13007 --- /dev/null +++ b/MVS/3DGS-Unity/Materials/BlackSkybox.mat @@ -0,0 +1,30 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: BlackSkybox + m_Shader: {fileID: 4800000, guid: a4867e5be68354ccda78062a92c74391, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: [] + m_Ints: [] + m_Floats: [] + m_Colors: + - _Color: {r: 0, g: 0, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/MVS/3DGS-Unity/Materials/BlackSkybox.mat.meta b/MVS/3DGS-Unity/Materials/BlackSkybox.mat.meta new file mode 100644 index 00000000..b2a40699 --- /dev/null +++ b/MVS/3DGS-Unity/Materials/BlackSkybox.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e9c9951d4a35e4a54812fa0280fa548c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Runtime.meta b/MVS/3DGS-Unity/Runtime.meta new file mode 100644 index 00000000..1c5ac9b8 --- /dev/null +++ b/MVS/3DGS-Unity/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 71627bcf67390da439d82a2a05a57bb4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Runtime/GaussianCutout.cs b/MVS/3DGS-Unity/Runtime/GaussianCutout.cs new file mode 100644 index 00000000..31bb4eef --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GaussianCutout.cs @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: MIT + +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace GaussianSplatting.Runtime +{ + public class GaussianCutout : MonoBehaviour + { + public enum Type + { + Ellipsoid, + Box + } + + public Type m_Type = Type.Ellipsoid; + public bool m_Invert = false; + + public struct ShaderData // match GaussianCutoutShaderData in CS + { + public Matrix4x4 matrix; + public uint typeAndFlags; + } + + public static ShaderData GetShaderData(GaussianCutout self, Matrix4x4 rendererMatrix) + { + ShaderData sd = default; + if (self && self.isActiveAndEnabled) + { + var tr = self.transform; + sd.matrix = tr.worldToLocalMatrix * rendererMatrix; + sd.typeAndFlags = ((uint)self.m_Type) | (self.m_Invert ? 0x100u : 0u); + } + else + { + sd.typeAndFlags = ~0u; + } + return sd; + } + +#if UNITY_EDITOR + public void OnDrawGizmos() + { + Gizmos.matrix = transform.localToWorldMatrix; + var color = Color.magenta; + color.a = 0.2f; + if (Selection.Contains(gameObject)) + color.a = 0.9f; + else + { + // mid amount of alpha if a GS object that contains us as a cutout is selected + var activeGo = Selection.activeGameObject; + if (activeGo != null) + { + var activeSplat = activeGo.GetComponent(); + if (activeSplat != null) + { + if (activeSplat.m_Cutouts != null && activeSplat.m_Cutouts.Contains(this)) + color.a = 0.5f; + } + } + } + + Gizmos.color = color; + if (m_Type == Type.Ellipsoid) + { + Gizmos.DrawWireSphere(Vector3.zero, 1.0f); + } + if (m_Type == Type.Box) + { + Gizmos.DrawWireCube(Vector3.zero, Vector3.one * 2); + } + } +#endif // #if UNITY_EDITOR + } +} diff --git a/MVS/3DGS-Unity/Runtime/GaussianCutout.cs.meta b/MVS/3DGS-Unity/Runtime/GaussianCutout.cs.meta new file mode 100644 index 00000000..15ddef22 --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GaussianCutout.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c57a1c501bd05549ae157cc474bd4c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Runtime/GaussianSplatAsset.cs b/MVS/3DGS-Unity/Runtime/GaussianSplatAsset.cs new file mode 100644 index 00000000..7523222e --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GaussianSplatAsset.cs @@ -0,0 +1,247 @@ +// SPDX-License-Identifier: MIT + +using System; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Mathematics; +using UnityEngine; +using UnityEngine.Experimental.Rendering; + +namespace GaussianSplatting.Runtime +{ + public class GaussianSplatAsset : ScriptableObject + { + public const int kCurrentVersion = 2023_10_20; + public const int kChunkSize = 256; + public const int kTextureWidth = 2048; // allows up to 32M splats on desktop GPU (2k width x 16k height) + public const int kMaxSplats = 8_600_000; // mostly due to 2GB GPU buffer size limit when exporting a splat (2GB / 248B is just over 8.6M) + + [SerializeField] int m_FormatVersion; + [SerializeField] int m_SplatCount; + [SerializeField] Vector3 m_BoundsMin; + [SerializeField] Vector3 m_BoundsMax; + [SerializeField] Hash128 m_DataHash; + + public int formatVersion => m_FormatVersion; + public int splatCount => m_SplatCount; + public Vector3 boundsMin => m_BoundsMin; + public Vector3 boundsMax => m_BoundsMax; + public Hash128 dataHash => m_DataHash; + + // Match VECTOR_FMT_* in HLSL + public enum VectorFormat + { + Float32, // 12 bytes: 32F.32F.32F + Norm16, // 6 bytes: 16.16.16 + Norm11, // 4 bytes: 11.10.11 + Norm6 // 2 bytes: 6.5.5 + } + + public static int GetVectorSize(VectorFormat fmt) + { + return fmt switch + { + VectorFormat.Float32 => 12, + VectorFormat.Norm16 => 6, + VectorFormat.Norm11 => 4, + VectorFormat.Norm6 => 2, + _ => throw new ArgumentOutOfRangeException(nameof(fmt), fmt, null) + }; + } + + public enum ColorFormat + { + Float32x4, + Float16x4, + Norm8x4, + BC7, + } + public static int GetColorSize(ColorFormat fmt) + { + return fmt switch + { + ColorFormat.Float32x4 => 16, + ColorFormat.Float16x4 => 8, + ColorFormat.Norm8x4 => 4, + ColorFormat.BC7 => 1, + _ => throw new ArgumentOutOfRangeException(nameof(fmt), fmt, null) + }; + } + + public enum SHFormat + { + Float32, + Float16, + Norm11, + Norm6, + Cluster64k, + Cluster32k, + Cluster16k, + Cluster8k, + Cluster4k, + } + + public struct SHTableItemFloat32 + { + public float3 sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8, sh9, shA, shB, shC, shD, shE, shF; + public float3 shPadding; // pad to multiple of 16 bytes + } + public struct SHTableItemFloat16 + { + public half3 sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8, sh9, shA, shB, shC, shD, shE, shF; + public half3 shPadding; // pad to multiple of 16 bytes + } + public struct SHTableItemNorm11 + { + public uint sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8, sh9, shA, shB, shC, shD, shE, shF; + } + public struct SHTableItemNorm6 + { + public ushort sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8, sh9, shA, shB, shC, shD, shE, shF; + public ushort shPadding; // pad to multiple of 4 bytes + } + + public void Initialize(int splats, VectorFormat formatPos, VectorFormat formatScale, ColorFormat formatColor, SHFormat formatSh, Vector3 bMin, Vector3 bMax, CameraInfo[] cameraInfos) + { + m_SplatCount = splats; + m_FormatVersion = kCurrentVersion; + m_PosFormat = formatPos; + m_ScaleFormat = formatScale; + m_ColorFormat = formatColor; + m_SHFormat = formatSh; + m_Cameras = cameraInfos; + m_BoundsMin = bMin; + m_BoundsMax = bMax; + } + + public void SetDataHash(Hash128 hash) + { + m_DataHash = hash; + } + + public void SetAssetFiles(TextAsset dataChunk, TextAsset dataPos, TextAsset dataOther, TextAsset dataColor, TextAsset dataSh) + { + m_ChunkData = dataChunk; + m_PosData = dataPos; + m_OtherData = dataOther; + m_ColorData = dataColor; + m_SHData = dataSh; + } + + public static int GetOtherSizeNoSHIndex(VectorFormat scaleFormat) + { + return 4 + GetVectorSize(scaleFormat); + } + + public static int GetSHCount(SHFormat fmt, int splatCount) + { + return fmt switch + { + SHFormat.Float32 => splatCount, + SHFormat.Float16 => splatCount, + SHFormat.Norm11 => splatCount, + SHFormat.Norm6 => splatCount, + SHFormat.Cluster64k => 64 * 1024, + SHFormat.Cluster32k => 32 * 1024, + SHFormat.Cluster16k => 16 * 1024, + SHFormat.Cluster8k => 8 * 1024, + SHFormat.Cluster4k => 4 * 1024, + _ => throw new ArgumentOutOfRangeException(nameof(fmt), fmt, null) + }; + } + + public static (int,int) CalcTextureSize(int splatCount) + { + int width = kTextureWidth; + int height = math.max(1, (splatCount + width - 1) / width); + // our swizzle tiles are 16x16, so make texture multiple of that height + int blockHeight = 16; + height = (height + blockHeight - 1) / blockHeight * blockHeight; + return (width, height); + } + + public static GraphicsFormat ColorFormatToGraphics(ColorFormat format) + { + return format switch + { + ColorFormat.Float32x4 => GraphicsFormat.R32G32B32A32_SFloat, + ColorFormat.Float16x4 => GraphicsFormat.R16G16B16A16_SFloat, + ColorFormat.Norm8x4 => GraphicsFormat.R8G8B8A8_UNorm, + ColorFormat.BC7 => GraphicsFormat.RGBA_BC7_UNorm, + _ => throw new ArgumentOutOfRangeException(nameof(format), format, null) + }; + } + + public static long CalcPosDataSize(int splatCount, VectorFormat formatPos) + { + return splatCount * GetVectorSize(formatPos); + } + public static long CalcOtherDataSize(int splatCount, VectorFormat formatScale) + { + return splatCount * GetOtherSizeNoSHIndex(formatScale); + } + public static long CalcColorDataSize(int splatCount, ColorFormat formatColor) + { + var (width, height) = CalcTextureSize(splatCount); + return width * height * GetColorSize(formatColor); + } + public static long CalcSHDataSize(int splatCount, SHFormat formatSh) + { + int shCount = GetSHCount(formatSh, splatCount); + return formatSh switch + { + SHFormat.Float32 => shCount * UnsafeUtility.SizeOf(), + SHFormat.Float16 => shCount * UnsafeUtility.SizeOf(), + SHFormat.Norm11 => shCount * UnsafeUtility.SizeOf(), + SHFormat.Norm6 => shCount * UnsafeUtility.SizeOf(), + _ => shCount * UnsafeUtility.SizeOf() + splatCount * 2 + }; + } + public static long CalcChunkDataSize(int splatCount) + { + int chunkCount = (splatCount + kChunkSize - 1) / kChunkSize; + return chunkCount * UnsafeUtility.SizeOf(); + } + + [SerializeField] VectorFormat m_PosFormat = VectorFormat.Norm11; + [SerializeField] VectorFormat m_ScaleFormat = VectorFormat.Norm11; + [SerializeField] SHFormat m_SHFormat = SHFormat.Norm11; + [SerializeField] ColorFormat m_ColorFormat; + + [SerializeField] TextAsset m_PosData; + [SerializeField] TextAsset m_ColorData; + [SerializeField] TextAsset m_OtherData; + [SerializeField] TextAsset m_SHData; + // Chunk data is optional (if data formats are fully lossless then there's no chunking) + [SerializeField] TextAsset m_ChunkData; + + [SerializeField] CameraInfo[] m_Cameras; + + public VectorFormat posFormat => m_PosFormat; + public VectorFormat scaleFormat => m_ScaleFormat; + public SHFormat shFormat => m_SHFormat; + public ColorFormat colorFormat => m_ColorFormat; + + public TextAsset posData => m_PosData; + public TextAsset colorData => m_ColorData; + public TextAsset otherData => m_OtherData; + public TextAsset shData => m_SHData; + public TextAsset chunkData => m_ChunkData; + public CameraInfo[] cameras => m_Cameras; + + public struct ChunkInfo + { + public uint colR, colG, colB, colA; + public float2 posX, posY, posZ; + public uint sclX, sclY, sclZ; + public uint shR, shG, shB; + } + + [Serializable] + public struct CameraInfo + { + public Vector3 pos; + public Vector3 axisX, axisY, axisZ; + public float fov; + } + } +} diff --git a/MVS/3DGS-Unity/Runtime/GaussianSplatAsset.cs.meta b/MVS/3DGS-Unity/Runtime/GaussianSplatAsset.cs.meta new file mode 100644 index 00000000..fe225df1 --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GaussianSplatAsset.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 33b71fae31e6c7d438e8566dc713e666 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Runtime/GaussianSplatHDRPPass.cs b/MVS/3DGS-Unity/Runtime/GaussianSplatHDRPPass.cs new file mode 100644 index 00000000..c0d7d0f5 --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GaussianSplatHDRPPass.cs @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: MIT +#if GS_ENABLE_HDRP + +using UnityEngine; +using UnityEngine.Rendering.HighDefinition; +using UnityEngine.Rendering; +using UnityEngine.Experimental.Rendering; + +namespace GaussianSplatting.Runtime +{ + // Note: I have no idea what is the proper usage of CustomPass. + // Code below "seems to work" but I'm just fumbling along, without understanding any of it. + class GaussianSplatHDRPPass : CustomPass + { + RTHandle m_RenderTarget; + + // It can be used to configure render targets and their clear state. Also to create temporary render target textures. + // When empty this render pass will render to the active camera render target. + // You should never call CommandBuffer.SetRenderTarget. Instead call ConfigureTarget and ConfigureClear. + // The render pipeline will ensure target setup and clearing happens in an performance manner. + protected override void Setup(ScriptableRenderContext renderContext, CommandBuffer cmd) + { + m_RenderTarget = RTHandles.Alloc(Vector2.one, + colorFormat: GraphicsFormat.R16G16B16A16_SFloat, useDynamicScale: true, + depthBufferBits: DepthBits.None, msaaSamples: MSAASamples.None, + filterMode: FilterMode.Point, wrapMode: TextureWrapMode.Clamp, name: "_GaussianSplatRT"); + } + + protected override void Execute(CustomPassContext ctx) + { + var cam = ctx.hdCamera.camera; + + var system = GaussianSplatRenderSystem.instance; + if (!system.GatherSplatsForCamera(cam)) + return; + + ctx.cmd.SetGlobalTexture(m_RenderTarget.name, m_RenderTarget.nameID); + CoreUtils.SetRenderTarget(ctx.cmd, m_RenderTarget, ctx.cameraDepthBuffer, ClearFlag.Color, + new Color(0, 0, 0, 0)); + + // add sorting, view calc and drawing commands for each splat object + Material matComposite = + GaussianSplatRenderSystem.instance.SortAndRenderSplats(ctx.hdCamera.camera, ctx.cmd); + + // compose + ctx.cmd.BeginSample(GaussianSplatRenderSystem.s_ProfCompose); + CoreUtils.SetRenderTarget(ctx.cmd, ctx.cameraColorBuffer, ClearFlag.None); + CoreUtils.DrawFullScreen(ctx.cmd, matComposite, ctx.propertyBlock, shaderPassId: 0); + ctx.cmd.EndSample(GaussianSplatRenderSystem.s_ProfCompose); + } + + protected override void Cleanup() + { + m_RenderTarget.Release(); + } + } +} + +#endif diff --git a/MVS/3DGS-Unity/Runtime/GaussianSplatHDRPPass.cs.meta b/MVS/3DGS-Unity/Runtime/GaussianSplatHDRPPass.cs.meta new file mode 100644 index 00000000..3c749288 --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GaussianSplatHDRPPass.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f40f16e78da87c646826cc5335ccb1f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Runtime/GaussianSplatRenderer.cs b/MVS/3DGS-Unity/Runtime/GaussianSplatRenderer.cs new file mode 100644 index 00000000..f6f44a8f --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GaussianSplatRenderer.cs @@ -0,0 +1,1070 @@ +// SPDX-License-Identifier: MIT + +using System; +using System.Collections.Generic; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Mathematics; +using Unity.Profiling; +using Unity.Profiling.LowLevel; +using UnityEngine; +using UnityEngine.Experimental.Rendering; +using UnityEngine.Rendering; +using UnityEngine.XR; + +namespace GaussianSplatting.Runtime +{ + class GaussianSplatRenderSystem + { + // ReSharper disable MemberCanBePrivate.Global - used by HDRP/URP features that are not always compiled + internal static readonly ProfilerMarker s_ProfDraw = new(ProfilerCategory.Render, "GaussianSplat.Draw", MarkerFlags.SampleGPU); + internal static readonly ProfilerMarker s_ProfCompose = new(ProfilerCategory.Render, "GaussianSplat.Compose", MarkerFlags.SampleGPU); + internal static readonly ProfilerMarker s_ProfCalcView = new(ProfilerCategory.Render, "GaussianSplat.CalcView", MarkerFlags.SampleGPU); + // ReSharper restore MemberCanBePrivate.Global + + public static GaussianSplatRenderSystem instance => ms_Instance ??= new GaussianSplatRenderSystem(); + static GaussianSplatRenderSystem ms_Instance; + + readonly Dictionary m_Splats = new(); + readonly HashSet m_CameraCommandBuffersDone = new(); + readonly List<(GaussianSplatRenderer, MaterialPropertyBlock)> m_ActiveSplats = new(); + + CommandBuffer m_CommandBuffer; + + public void RegisterSplat(GaussianSplatRenderer r) + { + if (m_Splats.Count == 0) + { + if (GraphicsSettings.currentRenderPipeline == null) + Camera.onPreCull += OnPreCullCamera; + } + + m_Splats.Add(r, new MaterialPropertyBlock()); + } + + public void UnregisterSplat(GaussianSplatRenderer r) + { + if (!m_Splats.ContainsKey(r)) + return; + m_Splats.Remove(r); + if (m_Splats.Count == 0) + { + if (m_CameraCommandBuffersDone != null) + { + if (m_CommandBuffer != null) + { + foreach (var cam in m_CameraCommandBuffersDone) + { + if (cam) + cam.RemoveCommandBuffer(CameraEvent.BeforeForwardAlpha, m_CommandBuffer); + } + } + m_CameraCommandBuffersDone.Clear(); + } + + m_ActiveSplats.Clear(); + m_CommandBuffer?.Dispose(); + m_CommandBuffer = null; + Camera.onPreCull -= OnPreCullCamera; + } + } + + // ReSharper disable once MemberCanBePrivate.Global - used by HDRP/URP features that are not always compiled + public bool GatherSplatsForCamera(Camera cam) + { + if (cam.cameraType == CameraType.Preview) + return false; + // gather all active & valid splat objects + m_ActiveSplats.Clear(); + foreach (var kvp in m_Splats) + { + var gs = kvp.Key; + if (gs == null || !gs.isActiveAndEnabled || !gs.HasValidAsset || !gs.HasValidRenderSetup) + continue; + m_ActiveSplats.Add((kvp.Key, kvp.Value)); + } + if (m_ActiveSplats.Count == 0) + return false; + + // sort them by depth from camera + var camTr = cam.transform; + m_ActiveSplats.Sort((a, b) => + { + var trA = a.Item1.transform; + var trB = b.Item1.transform; + var posA = camTr.InverseTransformPoint(trA.position); + var posB = camTr.InverseTransformPoint(trB.position); + return posA.z.CompareTo(posB.z); + }); + + return true; + } + + // ReSharper disable once MemberCanBePrivate.Global - used by HDRP/URP features that are not always compiled + public Material SortAndRenderSplats(Camera cam, CommandBuffer cmb) + { + Material matComposite = null; + foreach (var kvp in m_ActiveSplats) + { + var gs = kvp.Item1; + gs.EnsureMaterials(); + matComposite = gs.m_MatComposite; + var mpb = kvp.Item2; + + // sort + var matrix = gs.transform.localToWorldMatrix; + if (gs.m_FrameCounter % gs.m_SortNthFrame == 0) + gs.SortPoints(cmb, cam, matrix); + ++gs.m_FrameCounter; + + // cache view + kvp.Item2.Clear(); + Material displayMat = gs.m_RenderMode switch + { + GaussianSplatRenderer.RenderMode.DebugPoints => gs.m_MatDebugPoints, + GaussianSplatRenderer.RenderMode.DebugPointIndices => gs.m_MatDebugPoints, + GaussianSplatRenderer.RenderMode.DebugBoxes => gs.m_MatDebugBoxes, + GaussianSplatRenderer.RenderMode.DebugChunkBounds => gs.m_MatDebugBoxes, + _ => gs.m_MatSplats + }; + if (displayMat == null) + continue; + + gs.SetAssetDataOnMaterial(mpb); + mpb.SetBuffer(GaussianSplatRenderer.Props.SplatChunks, gs.m_GpuChunks); + + mpb.SetBuffer(GaussianSplatRenderer.Props.SplatViewData, gs.m_GpuView); + + mpb.SetBuffer(GaussianSplatRenderer.Props.OrderBuffer, gs.m_GpuSortKeys); + mpb.SetFloat(GaussianSplatRenderer.Props.SplatScale, gs.m_SplatScale); + mpb.SetFloat(GaussianSplatRenderer.Props.SplatOpacityScale, gs.m_OpacityScale); + mpb.SetFloat(GaussianSplatRenderer.Props.SplatSize, gs.m_PointDisplaySize); + mpb.SetInteger(GaussianSplatRenderer.Props.SHOrder, gs.m_SHOrder); + mpb.SetInteger(GaussianSplatRenderer.Props.SHOnly, gs.m_SHOnly ? 1 : 0); + mpb.SetInteger(GaussianSplatRenderer.Props.DisplayIndex, gs.m_RenderMode == GaussianSplatRenderer.RenderMode.DebugPointIndices ? 1 : 0); + mpb.SetInteger(GaussianSplatRenderer.Props.DisplayChunks, gs.m_RenderMode == GaussianSplatRenderer.RenderMode.DebugChunkBounds ? 1 : 0); + + cmb.BeginSample(s_ProfCalcView); + gs.CalcViewData(cmb, cam, matrix); + cmb.EndSample(s_ProfCalcView); + + // draw + int indexCount = 6; + int instanceCount = gs.splatCount; + MeshTopology topology = MeshTopology.Triangles; + if (gs.m_RenderMode is GaussianSplatRenderer.RenderMode.DebugBoxes or GaussianSplatRenderer.RenderMode.DebugChunkBounds) + indexCount = 36; + if (gs.m_RenderMode == GaussianSplatRenderer.RenderMode.DebugChunkBounds) + instanceCount = gs.m_GpuChunksValid ? gs.m_GpuChunks.count : 0; + + cmb.BeginSample(s_ProfDraw); + cmb.DrawProcedural(gs.m_GpuIndexBuffer, matrix, displayMat, 0, topology, indexCount, instanceCount, mpb); + cmb.EndSample(s_ProfDraw); + } + return matComposite; + } + + // ReSharper disable once MemberCanBePrivate.Global - used by HDRP/URP features that are not always compiled + // ReSharper disable once UnusedMethodReturnValue.Global - used by HDRP/URP features that are not always compiled + public CommandBuffer InitialClearCmdBuffer(Camera cam) + { + m_CommandBuffer ??= new CommandBuffer {name = "RenderGaussianSplats"}; + if (GraphicsSettings.currentRenderPipeline == null && cam != null && !m_CameraCommandBuffersDone.Contains(cam)) + { + cam.AddCommandBuffer(CameraEvent.BeforeForwardAlpha, m_CommandBuffer); + m_CameraCommandBuffersDone.Add(cam); + } + + // get render target for all splats + m_CommandBuffer.Clear(); + return m_CommandBuffer; + } + + void OnPreCullCamera(Camera cam) + { + if (!GatherSplatsForCamera(cam)) + return; + + InitialClearCmdBuffer(cam); + + m_CommandBuffer.GetTemporaryRT(GaussianSplatRenderer.Props.GaussianSplatRT, -1, -1, 0, FilterMode.Point, GraphicsFormat.R16G16B16A16_SFloat); + m_CommandBuffer.SetRenderTarget(GaussianSplatRenderer.Props.GaussianSplatRT, BuiltinRenderTextureType.CurrentActive); + m_CommandBuffer.ClearRenderTarget(RTClearFlags.Color, new Color(0, 0, 0, 0), 0, 0); + + // add sorting, view calc and drawing commands for each splat object + Material matComposite = SortAndRenderSplats(cam, m_CommandBuffer); + + // compose + m_CommandBuffer.BeginSample(s_ProfCompose); + m_CommandBuffer.SetRenderTarget(BuiltinRenderTextureType.CameraTarget); + m_CommandBuffer.DrawProcedural(Matrix4x4.identity, matComposite, 0, MeshTopology.Triangles, 3, 1); + m_CommandBuffer.EndSample(s_ProfCompose); + m_CommandBuffer.ReleaseTemporaryRT(GaussianSplatRenderer.Props.GaussianSplatRT); + } + } + + //[ExecuteInEditMode] + public class GaussianSplatRenderer : MonoBehaviour + { + public enum RenderMode + { + Splats, + DebugPoints, + DebugPointIndices, + DebugBoxes, + DebugChunkBounds, + } + public GaussianSplatAsset m_Asset; + + [Range(0.1f, 2.0f)] [Tooltip("Additional scaling factor for the splats")] + public float m_SplatScale = 1.0f; + [Range(0.05f, 20.0f)] + [Tooltip("Additional scaling factor for opacity")] + public float m_OpacityScale = 1.0f; + [Range(0, 3)] [Tooltip("Spherical Harmonics order to use")] + public int m_SHOrder = 3; + [Tooltip("Show only Spherical Harmonics contribution, using gray color")] + public bool m_SHOnly; + [Range(1,30)] [Tooltip("Sort splats only every N frames")] + public int m_SortNthFrame = 1; + + public RenderMode m_RenderMode = RenderMode.Splats; + [Range(1.0f,15.0f)] public float m_PointDisplaySize = 3.0f; + + public GaussianCutout[] m_Cutouts; + + public Shader m_ShaderSplats; + public Shader m_ShaderComposite; + public Shader m_ShaderDebugPoints; + public Shader m_ShaderDebugBoxes; + [Tooltip("Gaussian splatting compute shader")] + public ComputeShader m_CSSplatUtilities; + + int m_SplatCount; // initially same as asset splat count, but editing can change this + GraphicsBuffer m_GpuSortDistances; + internal GraphicsBuffer m_GpuSortKeys; + GraphicsBuffer m_GpuPosData; + GraphicsBuffer m_GpuOtherData; + GraphicsBuffer m_GpuSHData; + Texture m_GpuColorData; + internal GraphicsBuffer m_GpuChunks; + internal bool m_GpuChunksValid; + internal GraphicsBuffer m_GpuView; + internal GraphicsBuffer m_GpuIndexBuffer; + + // these buffers are only for splat editing, and are lazily created + GraphicsBuffer m_GpuEditCutouts; + GraphicsBuffer m_GpuEditCountsBounds; + GraphicsBuffer m_GpuEditSelected; + GraphicsBuffer m_GpuEditDeleted; + GraphicsBuffer m_GpuEditSelectedMouseDown; // selection state at start of operation + GraphicsBuffer m_GpuEditPosMouseDown; // position state at start of operation + GraphicsBuffer m_GpuEditOtherMouseDown; // rotation/scale state at start of operation + + GpuSorting m_Sorter; + GpuSorting.Args m_SorterArgs; + + internal Material m_MatSplats; + internal Material m_MatComposite; + internal Material m_MatDebugPoints; + internal Material m_MatDebugBoxes; + + internal int m_FrameCounter; + GaussianSplatAsset m_PrevAsset; + Hash128 m_PrevHash; + + static readonly ProfilerMarker s_ProfSort = new(ProfilerCategory.Render, "GaussianSplat.Sort", MarkerFlags.SampleGPU); + + internal static class Props + { + public static readonly int SplatPos = Shader.PropertyToID("_SplatPos"); + public static readonly int SplatOther = Shader.PropertyToID("_SplatOther"); + public static readonly int SplatSH = Shader.PropertyToID("_SplatSH"); + public static readonly int SplatColor = Shader.PropertyToID("_SplatColor"); + public static readonly int SplatSelectedBits = Shader.PropertyToID("_SplatSelectedBits"); + public static readonly int SplatDeletedBits = Shader.PropertyToID("_SplatDeletedBits"); + public static readonly int SplatBitsValid = Shader.PropertyToID("_SplatBitsValid"); + public static readonly int SplatFormat = Shader.PropertyToID("_SplatFormat"); + public static readonly int SplatChunks = Shader.PropertyToID("_SplatChunks"); + public static readonly int SplatChunkCount = Shader.PropertyToID("_SplatChunkCount"); + public static readonly int SplatViewData = Shader.PropertyToID("_SplatViewData"); + public static readonly int OrderBuffer = Shader.PropertyToID("_OrderBuffer"); + public static readonly int SplatScale = Shader.PropertyToID("_SplatScale"); + public static readonly int SplatOpacityScale = Shader.PropertyToID("_SplatOpacityScale"); + public static readonly int SplatSize = Shader.PropertyToID("_SplatSize"); + public static readonly int SplatCount = Shader.PropertyToID("_SplatCount"); + public static readonly int SHOrder = Shader.PropertyToID("_SHOrder"); + public static readonly int SHOnly = Shader.PropertyToID("_SHOnly"); + public static readonly int DisplayIndex = Shader.PropertyToID("_DisplayIndex"); + public static readonly int DisplayChunks = Shader.PropertyToID("_DisplayChunks"); + public static readonly int GaussianSplatRT = Shader.PropertyToID("_GaussianSplatRT"); + public static readonly int SplatSortKeys = Shader.PropertyToID("_SplatSortKeys"); + public static readonly int SplatSortDistances = Shader.PropertyToID("_SplatSortDistances"); + public static readonly int SrcBuffer = Shader.PropertyToID("_SrcBuffer"); + public static readonly int DstBuffer = Shader.PropertyToID("_DstBuffer"); + public static readonly int BufferSize = Shader.PropertyToID("_BufferSize"); + public static readonly int MatrixMV = Shader.PropertyToID("_MatrixMV"); + public static readonly int MatrixObjectToWorld = Shader.PropertyToID("_MatrixObjectToWorld"); + public static readonly int MatrixWorldToObject = Shader.PropertyToID("_MatrixWorldToObject"); + public static readonly int VecScreenParams = Shader.PropertyToID("_VecScreenParams"); + public static readonly int VecWorldSpaceCameraPos = Shader.PropertyToID("_VecWorldSpaceCameraPos"); + public static readonly int SelectionCenter = Shader.PropertyToID("_SelectionCenter"); + public static readonly int SelectionDelta = Shader.PropertyToID("_SelectionDelta"); + public static readonly int SelectionDeltaRot = Shader.PropertyToID("_SelectionDeltaRot"); + public static readonly int SplatCutoutsCount = Shader.PropertyToID("_SplatCutoutsCount"); + public static readonly int SplatCutouts = Shader.PropertyToID("_SplatCutouts"); + public static readonly int SelectionMode = Shader.PropertyToID("_SelectionMode"); + public static readonly int SplatPosMouseDown = Shader.PropertyToID("_SplatPosMouseDown"); + public static readonly int SplatOtherMouseDown = Shader.PropertyToID("_SplatOtherMouseDown"); + } + + [field: NonSerialized] public bool editModified { get; private set; } + [field: NonSerialized] public uint editSelectedSplats { get; private set; } + [field: NonSerialized] public uint editDeletedSplats { get; private set; } + [field: NonSerialized] public uint editCutSplats { get; private set; } + [field: NonSerialized] public Bounds editSelectedBounds { get; private set; } + + public GaussianSplatAsset asset => m_Asset; + public int splatCount => m_SplatCount; + + enum KernelIndices + { + SetIndices, + CalcDistances, + CalcViewData, + UpdateEditData, + InitEditData, + ClearBuffer, + InvertSelection, + SelectAll, + OrBuffers, + SelectionUpdate, + TranslateSelection, + RotateSelection, + ScaleSelection, + ExportData, + CopySplats, + } + + public bool HasValidAsset => + m_Asset != null && + m_Asset.splatCount > 0 && + m_Asset.formatVersion == GaussianSplatAsset.kCurrentVersion && + m_Asset.posData != null && + m_Asset.otherData != null && + m_Asset.shData != null && + m_Asset.colorData != null; + public bool HasValidRenderSetup => m_GpuPosData != null && m_GpuOtherData != null && m_GpuChunks != null; + + const int kGpuViewDataSize = 40; + + void CreateResourcesForAsset() + { + if (!HasValidAsset) + return; + + m_SplatCount = asset.splatCount; + m_GpuPosData = new GraphicsBuffer(GraphicsBuffer.Target.Raw | GraphicsBuffer.Target.CopySource, (int) (asset.posData.dataSize / 4), 4) { name = "GaussianPosData" }; + m_GpuPosData.SetData(asset.posData.GetData()); + m_GpuOtherData = new GraphicsBuffer(GraphicsBuffer.Target.Raw | GraphicsBuffer.Target.CopySource, (int) (asset.otherData.dataSize / 4), 4) { name = "GaussianOtherData" }; + m_GpuOtherData.SetData(asset.otherData.GetData()); + m_GpuSHData = new GraphicsBuffer(GraphicsBuffer.Target.Raw, (int) (asset.shData.dataSize / 4), 4) { name = "GaussianSHData" }; + m_GpuSHData.SetData(asset.shData.GetData()); + var (texWidth, texHeight) = GaussianSplatAsset.CalcTextureSize(asset.splatCount); + var texFormat = GaussianSplatAsset.ColorFormatToGraphics(asset.colorFormat); + var tex = new Texture2D(texWidth, texHeight, texFormat, TextureCreationFlags.DontInitializePixels | TextureCreationFlags.IgnoreMipmapLimit | TextureCreationFlags.DontUploadUponCreate) { name = "GaussianColorData" }; + tex.SetPixelData(asset.colorData.GetData(), 0); + tex.Apply(false, true); + m_GpuColorData = tex; + if (asset.chunkData != null && asset.chunkData.dataSize != 0) + { + m_GpuChunks = new GraphicsBuffer(GraphicsBuffer.Target.Structured, + (int) (asset.chunkData.dataSize / UnsafeUtility.SizeOf()), + UnsafeUtility.SizeOf()) {name = "GaussianChunkData"}; + m_GpuChunks.SetData(asset.chunkData.GetData()); + m_GpuChunksValid = true; + } + else + { + // just a dummy chunk buffer + m_GpuChunks = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 1, + UnsafeUtility.SizeOf()) {name = "GaussianChunkData"}; + m_GpuChunksValid = false; + } + + m_GpuView = new GraphicsBuffer(GraphicsBuffer.Target.Structured, m_Asset.splatCount, kGpuViewDataSize); + m_GpuIndexBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Index, 36, 2); + // cube indices, most often we use only the first quad + m_GpuIndexBuffer.SetData(new ushort[] + { + 0, 1, 2, 1, 3, 2, + 4, 6, 5, 5, 6, 7, + 0, 2, 4, 4, 2, 6, + 1, 5, 3, 5, 7, 3, + 0, 4, 1, 4, 5, 1, + 2, 3, 6, 3, 7, 6 + }); + + InitSortBuffers(splatCount); + } + + void InitSortBuffers(int count) + { + m_GpuSortDistances?.Dispose(); + m_GpuSortKeys?.Dispose(); + m_SorterArgs.resources.Dispose(); + + EnsureSorterAndRegister(); + + m_GpuSortDistances = new GraphicsBuffer(GraphicsBuffer.Target.Structured, count, 4) { name = "GaussianSplatSortDistances" }; + m_GpuSortKeys = new GraphicsBuffer(GraphicsBuffer.Target.Structured, count, 4) { name = "GaussianSplatSortIndices" }; + + // init keys buffer to splat indices + m_CSSplatUtilities.SetBuffer((int)KernelIndices.SetIndices, Props.SplatSortKeys, m_GpuSortKeys); + m_CSSplatUtilities.SetInt(Props.SplatCount, m_GpuSortDistances.count); + m_CSSplatUtilities.GetKernelThreadGroupSizes((int)KernelIndices.SetIndices, out uint gsX, out _, out _); + m_CSSplatUtilities.Dispatch((int)KernelIndices.SetIndices, (m_GpuSortDistances.count + (int)gsX - 1)/(int)gsX, 1, 1); + + m_SorterArgs.inputKeys = m_GpuSortDistances; + m_SorterArgs.inputValues = m_GpuSortKeys; + m_SorterArgs.count = (uint)count; + if (m_Sorter.Valid) + m_SorterArgs.resources = GpuSorting.SupportResources.Load((uint)count); + } + + bool resourcesAreSetUp => m_ShaderSplats != null && m_ShaderComposite != null && m_ShaderDebugPoints != null && + m_ShaderDebugBoxes != null && m_CSSplatUtilities != null && SystemInfo.supportsComputeShaders; + + public void EnsureMaterials() + { + if (m_MatSplats == null && resourcesAreSetUp) + { + m_MatSplats = new Material(m_ShaderSplats) {name = "GaussianSplats"}; + m_MatComposite = new Material(m_ShaderComposite) {name = "GaussianClearDstAlpha"}; + m_MatDebugPoints = new Material(m_ShaderDebugPoints) {name = "GaussianDebugPoints"}; + m_MatDebugBoxes = new Material(m_ShaderDebugBoxes) {name = "GaussianDebugBoxes"}; + } + } + + public void EnsureSorterAndRegister() + { + if (m_Sorter == null && resourcesAreSetUp) + { + m_Sorter = new GpuSorting(m_CSSplatUtilities); + GaussianSplatRenderSystem.instance.RegisterSplat(this); + } + } + + public void OnEnable() + { + m_FrameCounter = 0; + if (!resourcesAreSetUp) + return; + + EnsureMaterials(); + EnsureSorterAndRegister(); + + CreateResourcesForAsset(); + } + + void SetAssetDataOnCS(CommandBuffer cmb, KernelIndices kernel) + { + ComputeShader cs = m_CSSplatUtilities; + int kernelIndex = (int) kernel; + cmb.SetComputeBufferParam(cs, kernelIndex, Props.SplatPos, m_GpuPosData); + cmb.SetComputeBufferParam(cs, kernelIndex, Props.SplatChunks, m_GpuChunks); + cmb.SetComputeBufferParam(cs, kernelIndex, Props.SplatOther, m_GpuOtherData); + cmb.SetComputeBufferParam(cs, kernelIndex, Props.SplatSH, m_GpuSHData); + cmb.SetComputeTextureParam(cs, kernelIndex, Props.SplatColor, m_GpuColorData); + cmb.SetComputeBufferParam(cs, kernelIndex, Props.SplatSelectedBits, m_GpuEditSelected ?? m_GpuPosData); + cmb.SetComputeBufferParam(cs, kernelIndex, Props.SplatDeletedBits, m_GpuEditDeleted ?? m_GpuPosData); + cmb.SetComputeBufferParam(cs, kernelIndex, Props.SplatViewData, m_GpuView); + cmb.SetComputeBufferParam(cs, kernelIndex, Props.OrderBuffer, m_GpuSortKeys); + + cmb.SetComputeIntParam(cs, Props.SplatBitsValid, m_GpuEditSelected != null && m_GpuEditDeleted != null ? 1 : 0); + uint format = (uint)m_Asset.posFormat | ((uint)m_Asset.scaleFormat << 8) | ((uint)m_Asset.shFormat << 16); + cmb.SetComputeIntParam(cs, Props.SplatFormat, (int)format); + cmb.SetComputeIntParam(cs, Props.SplatCount, m_SplatCount); + cmb.SetComputeIntParam(cs, Props.SplatChunkCount, m_GpuChunksValid ? m_GpuChunks.count : 0); + + UpdateCutoutsBuffer(); + cmb.SetComputeIntParam(cs, Props.SplatCutoutsCount, m_Cutouts?.Length ?? 0); + cmb.SetComputeBufferParam(cs, kernelIndex, Props.SplatCutouts, m_GpuEditCutouts); + } + + internal void SetAssetDataOnMaterial(MaterialPropertyBlock mat) + { + mat.SetBuffer(Props.SplatPos, m_GpuPosData); + mat.SetBuffer(Props.SplatOther, m_GpuOtherData); + mat.SetBuffer(Props.SplatSH, m_GpuSHData); + mat.SetTexture(Props.SplatColor, m_GpuColorData); + mat.SetBuffer(Props.SplatSelectedBits, m_GpuEditSelected ?? m_GpuPosData); + mat.SetBuffer(Props.SplatDeletedBits, m_GpuEditDeleted ?? m_GpuPosData); + mat.SetInt(Props.SplatBitsValid, m_GpuEditSelected != null && m_GpuEditDeleted != null ? 1 : 0); + uint format = (uint)m_Asset.posFormat | ((uint)m_Asset.scaleFormat << 8) | ((uint)m_Asset.shFormat << 16); + mat.SetInteger(Props.SplatFormat, (int)format); + mat.SetInteger(Props.SplatCount, m_SplatCount); + mat.SetInteger(Props.SplatChunkCount, m_GpuChunksValid ? m_GpuChunks.count : 0); + } + + static void DisposeBuffer(ref GraphicsBuffer buf) + { + buf?.Dispose(); + buf = null; + } + + void DisposeResourcesForAsset() + { + DestroyImmediate(m_GpuColorData); + + DisposeBuffer(ref m_GpuPosData); + DisposeBuffer(ref m_GpuOtherData); + DisposeBuffer(ref m_GpuSHData); + DisposeBuffer(ref m_GpuChunks); + + DisposeBuffer(ref m_GpuView); + DisposeBuffer(ref m_GpuIndexBuffer); + DisposeBuffer(ref m_GpuSortDistances); + DisposeBuffer(ref m_GpuSortKeys); + + DisposeBuffer(ref m_GpuEditSelectedMouseDown); + DisposeBuffer(ref m_GpuEditPosMouseDown); + DisposeBuffer(ref m_GpuEditOtherMouseDown); + DisposeBuffer(ref m_GpuEditSelected); + DisposeBuffer(ref m_GpuEditDeleted); + DisposeBuffer(ref m_GpuEditCountsBounds); + DisposeBuffer(ref m_GpuEditCutouts); + + m_SorterArgs.resources.Dispose(); + + m_SplatCount = 0; + m_GpuChunksValid = false; + + editSelectedSplats = 0; + editDeletedSplats = 0; + editCutSplats = 0; + editModified = false; + editSelectedBounds = default; + } + + public void OnDisable() + { + DisposeResourcesForAsset(); + GaussianSplatRenderSystem.instance.UnregisterSplat(this); + + DestroyImmediate(m_MatSplats); + DestroyImmediate(m_MatComposite); + DestroyImmediate(m_MatDebugPoints); + DestroyImmediate(m_MatDebugBoxes); + } + + internal void CalcViewData(CommandBuffer cmb, Camera cam, Matrix4x4 matrix) + { + if (cam.cameraType == CameraType.Preview) + return; + + var tr = transform; + + Matrix4x4 matView = cam.worldToCameraMatrix; + Matrix4x4 matProj = GL.GetGPUProjectionMatrix(cam.projectionMatrix, true); + Matrix4x4 matO2W = tr.localToWorldMatrix; + Matrix4x4 matW2O = tr.worldToLocalMatrix; + int screenW = cam.pixelWidth, screenH = cam.pixelHeight; + int eyeW = XRSettings.eyeTextureWidth, eyeH = XRSettings.eyeTextureHeight; + Vector4 screenPar = new Vector4(eyeW != 0 ? eyeW : screenW, eyeH != 0 ? eyeH : screenH, 0, 0); + Vector4 camPos = cam.transform.position; + + // calculate view dependent data for each splat + SetAssetDataOnCS(cmb, KernelIndices.CalcViewData); + + cmb.SetComputeMatrixParam(m_CSSplatUtilities, Props.MatrixMV, matView * matO2W); + cmb.SetComputeMatrixParam(m_CSSplatUtilities, Props.MatrixObjectToWorld, matO2W); + cmb.SetComputeMatrixParam(m_CSSplatUtilities, Props.MatrixWorldToObject, matW2O); + + cmb.SetComputeVectorParam(m_CSSplatUtilities, Props.VecScreenParams, screenPar); + cmb.SetComputeVectorParam(m_CSSplatUtilities, Props.VecWorldSpaceCameraPos, camPos); + cmb.SetComputeFloatParam(m_CSSplatUtilities, Props.SplatScale, m_SplatScale); + cmb.SetComputeFloatParam(m_CSSplatUtilities, Props.SplatOpacityScale, m_OpacityScale); + cmb.SetComputeIntParam(m_CSSplatUtilities, Props.SHOrder, m_SHOrder); + cmb.SetComputeIntParam(m_CSSplatUtilities, Props.SHOnly, m_SHOnly ? 1 : 0); + + m_CSSplatUtilities.GetKernelThreadGroupSizes((int)KernelIndices.CalcViewData, out uint gsX, out _, out _); + cmb.DispatchCompute(m_CSSplatUtilities, (int)KernelIndices.CalcViewData, (m_GpuView.count + (int)gsX - 1)/(int)gsX, 1, 1); + } + + internal void SortPoints(CommandBuffer cmd, Camera cam, Matrix4x4 matrix) + { + if (cam.cameraType == CameraType.Preview) + return; + + Matrix4x4 worldToCamMatrix = cam.worldToCameraMatrix; + worldToCamMatrix.m20 *= -1; + worldToCamMatrix.m21 *= -1; + worldToCamMatrix.m22 *= -1; + + // calculate distance to the camera for each splat + cmd.BeginSample(s_ProfSort); + cmd.SetComputeBufferParam(m_CSSplatUtilities, (int)KernelIndices.CalcDistances, Props.SplatSortDistances, m_GpuSortDistances); + cmd.SetComputeBufferParam(m_CSSplatUtilities, (int)KernelIndices.CalcDistances, Props.SplatSortKeys, m_GpuSortKeys); + cmd.SetComputeBufferParam(m_CSSplatUtilities, (int)KernelIndices.CalcDistances, Props.SplatChunks, m_GpuChunks); + cmd.SetComputeBufferParam(m_CSSplatUtilities, (int)KernelIndices.CalcDistances, Props.SplatPos, m_GpuPosData); + cmd.SetComputeIntParam(m_CSSplatUtilities, Props.SplatFormat, (int)m_Asset.posFormat); + cmd.SetComputeMatrixParam(m_CSSplatUtilities, Props.MatrixMV, worldToCamMatrix * matrix); + cmd.SetComputeIntParam(m_CSSplatUtilities, Props.SplatCount, m_SplatCount); + cmd.SetComputeIntParam(m_CSSplatUtilities, Props.SplatChunkCount, m_GpuChunksValid ? m_GpuChunks.count : 0); + m_CSSplatUtilities.GetKernelThreadGroupSizes((int)KernelIndices.CalcDistances, out uint gsX, out _, out _); + cmd.DispatchCompute(m_CSSplatUtilities, (int)KernelIndices.CalcDistances, (m_GpuSortDistances.count + (int)gsX - 1)/(int)gsX, 1, 1); + + // sort the splats + EnsureSorterAndRegister(); + m_Sorter.Dispatch(cmd, m_SorterArgs); + cmd.EndSample(s_ProfSort); + } + + public void Update() + { + var curHash = m_Asset ? m_Asset.dataHash : new Hash128(); + if (m_PrevAsset != m_Asset || m_PrevHash != curHash) + { + m_PrevAsset = m_Asset; + m_PrevHash = curHash; + if (resourcesAreSetUp) + { + DisposeResourcesForAsset(); + CreateResourcesForAsset(); + } + else + { + Debug.LogError($"{nameof(GaussianSplatRenderer)} component is not set up correctly (Resource references are missing), or platform does not support compute shaders"); + } + } + } + + public void ActivateCamera(int index) + { + Camera mainCam = Camera.main; + if (!mainCam) + return; + if (!m_Asset || m_Asset.cameras == null) + return; + + var selfTr = transform; + var camTr = mainCam.transform; + var prevParent = camTr.parent; + var cam = m_Asset.cameras[index]; + camTr.parent = selfTr; + camTr.localPosition = cam.pos; + camTr.localRotation = Quaternion.LookRotation(cam.axisZ, cam.axisY); + camTr.parent = prevParent; + camTr.localScale = Vector3.one; +#if UNITY_EDITOR + UnityEditor.EditorUtility.SetDirty(camTr); +#endif + } + + void ClearGraphicsBuffer(GraphicsBuffer buf) + { + m_CSSplatUtilities.SetBuffer((int)KernelIndices.ClearBuffer, Props.DstBuffer, buf); + m_CSSplatUtilities.SetInt(Props.BufferSize, buf.count); + m_CSSplatUtilities.GetKernelThreadGroupSizes((int)KernelIndices.ClearBuffer, out uint gsX, out _, out _); + m_CSSplatUtilities.Dispatch((int)KernelIndices.ClearBuffer, (int)((buf.count+gsX-1)/gsX), 1, 1); + } + + void UnionGraphicsBuffers(GraphicsBuffer dst, GraphicsBuffer src) + { + m_CSSplatUtilities.SetBuffer((int)KernelIndices.OrBuffers, Props.SrcBuffer, src); + m_CSSplatUtilities.SetBuffer((int)KernelIndices.OrBuffers, Props.DstBuffer, dst); + m_CSSplatUtilities.SetInt(Props.BufferSize, dst.count); + m_CSSplatUtilities.GetKernelThreadGroupSizes((int)KernelIndices.OrBuffers, out uint gsX, out _, out _); + m_CSSplatUtilities.Dispatch((int)KernelIndices.OrBuffers, (int)((dst.count+gsX-1)/gsX), 1, 1); + } + + static float SortableUintToFloat(uint v) + { + uint mask = ((v >> 31) - 1) | 0x80000000u; + return math.asfloat(v ^ mask); + } + + public void UpdateEditCountsAndBounds() + { + if (m_GpuEditSelected == null) + { + editSelectedSplats = 0; + editDeletedSplats = 0; + editCutSplats = 0; + editModified = false; + editSelectedBounds = default; + return; + } + + m_CSSplatUtilities.SetBuffer((int)KernelIndices.InitEditData, Props.DstBuffer, m_GpuEditCountsBounds); + m_CSSplatUtilities.Dispatch((int)KernelIndices.InitEditData, 1, 1, 1); + + using CommandBuffer cmb = new CommandBuffer(); + SetAssetDataOnCS(cmb, KernelIndices.UpdateEditData); + cmb.SetComputeBufferParam(m_CSSplatUtilities, (int)KernelIndices.UpdateEditData, Props.DstBuffer, m_GpuEditCountsBounds); + cmb.SetComputeIntParam(m_CSSplatUtilities, Props.BufferSize, m_GpuEditSelected.count); + m_CSSplatUtilities.GetKernelThreadGroupSizes((int)KernelIndices.UpdateEditData, out uint gsX, out _, out _); + cmb.DispatchCompute(m_CSSplatUtilities, (int)KernelIndices.UpdateEditData, (int)((m_GpuEditSelected.count+gsX-1)/gsX), 1, 1); + Graphics.ExecuteCommandBuffer(cmb); + + uint[] res = new uint[m_GpuEditCountsBounds.count]; + m_GpuEditCountsBounds.GetData(res); + editSelectedSplats = res[0]; + editDeletedSplats = res[1]; + editCutSplats = res[2]; + Vector3 min = new Vector3(SortableUintToFloat(res[3]), SortableUintToFloat(res[4]), SortableUintToFloat(res[5])); + Vector3 max = new Vector3(SortableUintToFloat(res[6]), SortableUintToFloat(res[7]), SortableUintToFloat(res[8])); + Bounds bounds = default; + bounds.SetMinMax(min, max); + if (bounds.extents.sqrMagnitude < 0.01) + bounds.extents = new Vector3(0.1f,0.1f,0.1f); + editSelectedBounds = bounds; + } + + void UpdateCutoutsBuffer() + { + int bufferSize = m_Cutouts?.Length ?? 0; + if (bufferSize == 0) + bufferSize = 1; + if (m_GpuEditCutouts == null || m_GpuEditCutouts.count != bufferSize) + { + m_GpuEditCutouts?.Dispose(); + m_GpuEditCutouts = new GraphicsBuffer(GraphicsBuffer.Target.Structured, bufferSize, UnsafeUtility.SizeOf()) { name = "GaussianCutouts" }; + } + + NativeArray data = new(bufferSize, Allocator.Temp); + if (m_Cutouts != null) + { + var matrix = transform.localToWorldMatrix; + for (var i = 0; i < m_Cutouts.Length; ++i) + { + data[i] = GaussianCutout.GetShaderData(m_Cutouts[i], matrix); + } + } + + m_GpuEditCutouts.SetData(data); + data.Dispose(); + } + + bool EnsureEditingBuffers() + { + if (!HasValidAsset || !HasValidRenderSetup) + return false; + + if (m_GpuEditSelected == null) + { + var target = GraphicsBuffer.Target.Raw | GraphicsBuffer.Target.CopySource | + GraphicsBuffer.Target.CopyDestination; + var size = (m_SplatCount + 31) / 32; + m_GpuEditSelected = new GraphicsBuffer(target, size, 4) {name = "GaussianSplatSelected"}; + m_GpuEditSelectedMouseDown = new GraphicsBuffer(target, size, 4) {name = "GaussianSplatSelectedInit"}; + m_GpuEditDeleted = new GraphicsBuffer(target, size, 4) {name = "GaussianSplatDeleted"}; + m_GpuEditCountsBounds = new GraphicsBuffer(target, 3 + 6, 4) {name = "GaussianSplatEditData"}; // selected count, deleted bound, cut count, float3 min, float3 max + ClearGraphicsBuffer(m_GpuEditSelected); + ClearGraphicsBuffer(m_GpuEditSelectedMouseDown); + ClearGraphicsBuffer(m_GpuEditDeleted); + } + return m_GpuEditSelected != null; + } + + public void EditStoreSelectionMouseDown() + { + if (!EnsureEditingBuffers()) return; + Graphics.CopyBuffer(m_GpuEditSelected, m_GpuEditSelectedMouseDown); + } + + public void EditStorePosMouseDown() + { + if (m_GpuEditPosMouseDown == null) + { + m_GpuEditPosMouseDown = new GraphicsBuffer(m_GpuPosData.target | GraphicsBuffer.Target.CopyDestination, m_GpuPosData.count, m_GpuPosData.stride) {name = "GaussianSplatEditPosMouseDown"}; + } + Graphics.CopyBuffer(m_GpuPosData, m_GpuEditPosMouseDown); + } + public void EditStoreOtherMouseDown() + { + if (m_GpuEditOtherMouseDown == null) + { + m_GpuEditOtherMouseDown = new GraphicsBuffer(m_GpuOtherData.target | GraphicsBuffer.Target.CopyDestination, m_GpuOtherData.count, m_GpuOtherData.stride) {name = "GaussianSplatEditOtherMouseDown"}; + } + Graphics.CopyBuffer(m_GpuOtherData, m_GpuEditOtherMouseDown); + } + + public void EditUpdateSelection(Vector2 rectMin, Vector2 rectMax, Camera cam, bool subtract) + { + if (!EnsureEditingBuffers()) return; + + Graphics.CopyBuffer(m_GpuEditSelectedMouseDown, m_GpuEditSelected); + + var tr = transform; + Matrix4x4 matView = cam.worldToCameraMatrix; + Matrix4x4 matProj = GL.GetGPUProjectionMatrix(cam.projectionMatrix, true); + Matrix4x4 matO2W = tr.localToWorldMatrix; + Matrix4x4 matW2O = tr.worldToLocalMatrix; + int screenW = cam.pixelWidth, screenH = cam.pixelHeight; + Vector4 screenPar = new Vector4(screenW, screenH, 0, 0); + Vector4 camPos = cam.transform.position; + + using var cmb = new CommandBuffer { name = "SplatSelectionUpdate" }; + SetAssetDataOnCS(cmb, KernelIndices.SelectionUpdate); + + cmb.SetComputeMatrixParam(m_CSSplatUtilities, Props.MatrixMV, matView * matO2W); + cmb.SetComputeMatrixParam(m_CSSplatUtilities, Props.MatrixObjectToWorld, matO2W); + cmb.SetComputeMatrixParam(m_CSSplatUtilities, Props.MatrixWorldToObject, matW2O); + + cmb.SetComputeVectorParam(m_CSSplatUtilities, Props.VecScreenParams, screenPar); + cmb.SetComputeVectorParam(m_CSSplatUtilities, Props.VecWorldSpaceCameraPos, camPos); + + cmb.SetComputeVectorParam(m_CSSplatUtilities, "_SelectionRect", new Vector4(rectMin.x, rectMax.y, rectMax.x, rectMin.y)); + cmb.SetComputeIntParam(m_CSSplatUtilities, Props.SelectionMode, subtract ? 0 : 1); + + DispatchUtilsAndExecute(cmb, KernelIndices.SelectionUpdate, m_SplatCount); + UpdateEditCountsAndBounds(); + } + + public void EditTranslateSelection(Vector3 localSpacePosDelta) + { + if (!EnsureEditingBuffers()) return; + + using var cmb = new CommandBuffer { name = "SplatTranslateSelection" }; + SetAssetDataOnCS(cmb, KernelIndices.TranslateSelection); + + cmb.SetComputeVectorParam(m_CSSplatUtilities, Props.SelectionDelta, localSpacePosDelta); + + DispatchUtilsAndExecute(cmb, KernelIndices.TranslateSelection, m_SplatCount); + UpdateEditCountsAndBounds(); + editModified = true; + } + + public void EditRotateSelection(Vector3 localSpaceCenter, Matrix4x4 localToWorld, Matrix4x4 worldToLocal, Quaternion rotation) + { + if (!EnsureEditingBuffers()) return; + if (m_GpuEditPosMouseDown == null || m_GpuEditOtherMouseDown == null) return; // should have captured initial state + + using var cmb = new CommandBuffer { name = "SplatRotateSelection" }; + SetAssetDataOnCS(cmb, KernelIndices.RotateSelection); + + cmb.SetComputeBufferParam(m_CSSplatUtilities, (int)KernelIndices.RotateSelection, Props.SplatPosMouseDown, m_GpuEditPosMouseDown); + cmb.SetComputeBufferParam(m_CSSplatUtilities, (int)KernelIndices.RotateSelection, Props.SplatOtherMouseDown, m_GpuEditOtherMouseDown); + cmb.SetComputeVectorParam(m_CSSplatUtilities, Props.SelectionCenter, localSpaceCenter); + cmb.SetComputeMatrixParam(m_CSSplatUtilities, Props.MatrixObjectToWorld, localToWorld); + cmb.SetComputeMatrixParam(m_CSSplatUtilities, Props.MatrixWorldToObject, worldToLocal); + cmb.SetComputeVectorParam(m_CSSplatUtilities, Props.SelectionDeltaRot, new Vector4(rotation.x, rotation.y, rotation.z, rotation.w)); + + DispatchUtilsAndExecute(cmb, KernelIndices.RotateSelection, m_SplatCount); + UpdateEditCountsAndBounds(); + editModified = true; + } + + + public void EditScaleSelection(Vector3 localSpaceCenter, Matrix4x4 localToWorld, Matrix4x4 worldToLocal, Vector3 scale) + { + if (!EnsureEditingBuffers()) return; + if (m_GpuEditPosMouseDown == null) return; // should have captured initial state + + using var cmb = new CommandBuffer { name = "SplatScaleSelection" }; + SetAssetDataOnCS(cmb, KernelIndices.ScaleSelection); + + cmb.SetComputeBufferParam(m_CSSplatUtilities, (int)KernelIndices.ScaleSelection, Props.SplatPosMouseDown, m_GpuEditPosMouseDown); + cmb.SetComputeVectorParam(m_CSSplatUtilities, Props.SelectionCenter, localSpaceCenter); + cmb.SetComputeMatrixParam(m_CSSplatUtilities, Props.MatrixObjectToWorld, localToWorld); + cmb.SetComputeMatrixParam(m_CSSplatUtilities, Props.MatrixWorldToObject, worldToLocal); + cmb.SetComputeVectorParam(m_CSSplatUtilities, Props.SelectionDelta, scale); + + DispatchUtilsAndExecute(cmb, KernelIndices.ScaleSelection, m_SplatCount); + UpdateEditCountsAndBounds(); + editModified = true; + } + + public void EditDeleteSelected() + { + if (!EnsureEditingBuffers()) return; + UnionGraphicsBuffers(m_GpuEditDeleted, m_GpuEditSelected); + EditDeselectAll(); + UpdateEditCountsAndBounds(); + if (editDeletedSplats != 0) + editModified = true; + } + + public void EditSelectAll() + { + if (!EnsureEditingBuffers()) return; + using var cmb = new CommandBuffer { name = "SplatSelectAll" }; + SetAssetDataOnCS(cmb, KernelIndices.SelectAll); + cmb.SetComputeBufferParam(m_CSSplatUtilities, (int)KernelIndices.SelectAll, Props.DstBuffer, m_GpuEditSelected); + cmb.SetComputeIntParam(m_CSSplatUtilities, Props.BufferSize, m_GpuEditSelected.count); + DispatchUtilsAndExecute(cmb, KernelIndices.SelectAll, m_GpuEditSelected.count); + UpdateEditCountsAndBounds(); + } + + public void EditDeselectAll() + { + if (!EnsureEditingBuffers()) return; + ClearGraphicsBuffer(m_GpuEditSelected); + UpdateEditCountsAndBounds(); + } + + public void EditInvertSelection() + { + if (!EnsureEditingBuffers()) return; + + using var cmb = new CommandBuffer { name = "SplatInvertSelection" }; + SetAssetDataOnCS(cmb, KernelIndices.InvertSelection); + cmb.SetComputeBufferParam(m_CSSplatUtilities, (int)KernelIndices.InvertSelection, Props.DstBuffer, m_GpuEditSelected); + cmb.SetComputeIntParam(m_CSSplatUtilities, Props.BufferSize, m_GpuEditSelected.count); + DispatchUtilsAndExecute(cmb, KernelIndices.InvertSelection, m_GpuEditSelected.count); + UpdateEditCountsAndBounds(); + } + + public bool EditExportData(GraphicsBuffer dstData, bool bakeTransform) + { + if (!EnsureEditingBuffers()) return false; + + int flags = 0; + var tr = transform; + Quaternion bakeRot = tr.localRotation; + Vector3 bakeScale = tr.localScale; + + if (bakeTransform) + flags = 1; + + using var cmb = new CommandBuffer { name = "SplatExportData" }; + SetAssetDataOnCS(cmb, KernelIndices.ExportData); + cmb.SetComputeIntParam(m_CSSplatUtilities, "_ExportTransformFlags", flags); + cmb.SetComputeVectorParam(m_CSSplatUtilities, "_ExportTransformRotation", new Vector4(bakeRot.x, bakeRot.y, bakeRot.z, bakeRot.w)); + cmb.SetComputeVectorParam(m_CSSplatUtilities, "_ExportTransformScale", bakeScale); + cmb.SetComputeMatrixParam(m_CSSplatUtilities, Props.MatrixObjectToWorld, tr.localToWorldMatrix); + cmb.SetComputeBufferParam(m_CSSplatUtilities, (int)KernelIndices.ExportData, "_ExportBuffer", dstData); + + DispatchUtilsAndExecute(cmb, KernelIndices.ExportData, m_SplatCount); + return true; + } + + public void EditSetSplatCount(int newSplatCount) + { + if (newSplatCount <= 0 || newSplatCount > GaussianSplatAsset.kMaxSplats) + { + Debug.LogError($"Invalid new splat count: {newSplatCount}"); + return; + } + if (asset.chunkData != null) + { + Debug.LogError("Only splats with VeryHigh quality can be resized"); + return; + } + if (newSplatCount == splatCount) + return; + + int posStride = (int)(asset.posData.dataSize / asset.splatCount); + int otherStride = (int)(asset.otherData.dataSize / asset.splatCount); + int shStride = (int) (asset.shData.dataSize / asset.splatCount); + + // create new GPU buffers + var newPosData = new GraphicsBuffer(GraphicsBuffer.Target.Raw | GraphicsBuffer.Target.CopySource, newSplatCount * posStride / 4, 4) { name = "GaussianPosData" }; + var newOtherData = new GraphicsBuffer(GraphicsBuffer.Target.Raw | GraphicsBuffer.Target.CopySource, newSplatCount * otherStride / 4, 4) { name = "GaussianOtherData" }; + var newSHData = new GraphicsBuffer(GraphicsBuffer.Target.Raw, newSplatCount * shStride / 4, 4) { name = "GaussianSHData" }; + + // new texture is a RenderTexture so we can write to it from a compute shader + var (texWidth, texHeight) = GaussianSplatAsset.CalcTextureSize(newSplatCount); + var texFormat = GaussianSplatAsset.ColorFormatToGraphics(asset.colorFormat); + var newColorData = new RenderTexture(texWidth, texHeight, texFormat, GraphicsFormat.None) { name = "GaussianColorData", enableRandomWrite = true }; + newColorData.Create(); + + // selected/deleted buffers + var selTarget = GraphicsBuffer.Target.Raw | GraphicsBuffer.Target.CopySource | GraphicsBuffer.Target.CopyDestination; + var selSize = (newSplatCount + 31) / 32; + var newEditSelected = new GraphicsBuffer(selTarget, selSize, 4) {name = "GaussianSplatSelected"}; + var newEditSelectedMouseDown = new GraphicsBuffer(selTarget, selSize, 4) {name = "GaussianSplatSelectedInit"}; + var newEditDeleted = new GraphicsBuffer(selTarget, selSize, 4) {name = "GaussianSplatDeleted"}; + ClearGraphicsBuffer(newEditSelected); + ClearGraphicsBuffer(newEditSelectedMouseDown); + ClearGraphicsBuffer(newEditDeleted); + + var newGpuView = new GraphicsBuffer(GraphicsBuffer.Target.Structured, newSplatCount, kGpuViewDataSize); + InitSortBuffers(newSplatCount); + + // copy existing data over into new buffers + EditCopySplats(transform, newPosData, newOtherData, newSHData, newColorData, newEditDeleted, newSplatCount, 0, 0, m_SplatCount); + + // use the new buffers and the new splat count + m_GpuPosData.Dispose(); + m_GpuOtherData.Dispose(); + m_GpuSHData.Dispose(); + DestroyImmediate(m_GpuColorData); + m_GpuView.Dispose(); + + m_GpuEditSelected?.Dispose(); + m_GpuEditSelectedMouseDown?.Dispose(); + m_GpuEditDeleted?.Dispose(); + + m_GpuPosData = newPosData; + m_GpuOtherData = newOtherData; + m_GpuSHData = newSHData; + m_GpuColorData = newColorData; + m_GpuView = newGpuView; + m_GpuEditSelected = newEditSelected; + m_GpuEditSelectedMouseDown = newEditSelectedMouseDown; + m_GpuEditDeleted = newEditDeleted; + + DisposeBuffer(ref m_GpuEditPosMouseDown); + DisposeBuffer(ref m_GpuEditOtherMouseDown); + + m_SplatCount = newSplatCount; + editModified = true; + } + + public void EditCopySplatsInto(GaussianSplatRenderer dst, int copySrcStartIndex, int copyDstStartIndex, int copyCount) + { + EditCopySplats( + dst.transform, + dst.m_GpuPosData, dst.m_GpuOtherData, dst.m_GpuSHData, dst.m_GpuColorData, dst.m_GpuEditDeleted, + dst.splatCount, + copySrcStartIndex, copyDstStartIndex, copyCount); + dst.editModified = true; + } + + public void EditCopySplats( + Transform dstTransform, + GraphicsBuffer dstPos, GraphicsBuffer dstOther, GraphicsBuffer dstSH, Texture dstColor, + GraphicsBuffer dstEditDeleted, + int dstSize, + int copySrcStartIndex, int copyDstStartIndex, int copyCount) + { + if (!EnsureEditingBuffers()) return; + + Matrix4x4 copyMatrix = dstTransform.worldToLocalMatrix * transform.localToWorldMatrix; + Quaternion copyRot = copyMatrix.rotation; + Vector3 copyScale = copyMatrix.lossyScale; + + using var cmb = new CommandBuffer { name = "SplatCopy" }; + SetAssetDataOnCS(cmb, KernelIndices.CopySplats); + + cmb.SetComputeBufferParam(m_CSSplatUtilities, (int)KernelIndices.CopySplats, "_CopyDstPos", dstPos); + cmb.SetComputeBufferParam(m_CSSplatUtilities, (int)KernelIndices.CopySplats, "_CopyDstOther", dstOther); + cmb.SetComputeBufferParam(m_CSSplatUtilities, (int)KernelIndices.CopySplats, "_CopyDstSH", dstSH); + cmb.SetComputeTextureParam(m_CSSplatUtilities, (int)KernelIndices.CopySplats, "_CopyDstColor", dstColor); + cmb.SetComputeBufferParam(m_CSSplatUtilities, (int)KernelIndices.CopySplats, "_CopyDstEditDeleted", dstEditDeleted); + + cmb.SetComputeIntParam(m_CSSplatUtilities, "_CopyDstSize", dstSize); + cmb.SetComputeIntParam(m_CSSplatUtilities, "_CopySrcStartIndex", copySrcStartIndex); + cmb.SetComputeIntParam(m_CSSplatUtilities, "_CopyDstStartIndex", copyDstStartIndex); + cmb.SetComputeIntParam(m_CSSplatUtilities, "_CopyCount", copyCount); + + cmb.SetComputeVectorParam(m_CSSplatUtilities, "_CopyTransformRotation", new Vector4(copyRot.x, copyRot.y, copyRot.z, copyRot.w)); + cmb.SetComputeVectorParam(m_CSSplatUtilities, "_CopyTransformScale", copyScale); + cmb.SetComputeMatrixParam(m_CSSplatUtilities, "_CopyTransformMatrix", copyMatrix); + + DispatchUtilsAndExecute(cmb, KernelIndices.CopySplats, copyCount); + } + + void DispatchUtilsAndExecute(CommandBuffer cmb, KernelIndices kernel, int count) + { + m_CSSplatUtilities.GetKernelThreadGroupSizes((int)kernel, out uint gsX, out _, out _); + cmb.DispatchCompute(m_CSSplatUtilities, (int)kernel, (int)((count + gsX - 1)/gsX), 1, 1); + Graphics.ExecuteCommandBuffer(cmb); + } + + public GraphicsBuffer GpuEditDeleted => m_GpuEditDeleted; + } +} \ No newline at end of file diff --git a/MVS/3DGS-Unity/Runtime/GaussianSplatRenderer.cs.meta b/MVS/3DGS-Unity/Runtime/GaussianSplatRenderer.cs.meta new file mode 100644 index 00000000..5c089e16 --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GaussianSplatRenderer.cs.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: c12d929a7f62c48adbe9ff45c9a33ff0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - m_ShaderSplats: {fileID: 4800000, guid: ed800126ae8844a67aad1974ddddd59c, type: 3} + - m_ShaderComposite: {fileID: 4800000, guid: 7e184af7d01193a408eb916d8acafff9, type: 3} + - m_ShaderDebugPoints: {fileID: 4800000, guid: b44409fc67214394f8f47e4e2648425e, type: 3} + - m_ShaderDebugBoxes: {fileID: 4800000, guid: 4006f2680fd7c8b4cbcb881454c782be, type: 3} + - m_CSSplatUtilities: {fileID: 7200000, guid: ec84f78b836bd4f96a105d6b804f08bd, type: 3} + - m_CSFfxSort: {fileID: 7200000, guid: dec36776b6c843544a1f6f9b436a4474, type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Runtime/GaussianSplatURPFeature.cs b/MVS/3DGS-Unity/Runtime/GaussianSplatURPFeature.cs new file mode 100644 index 00000000..bc1bb966 --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GaussianSplatURPFeature.cs @@ -0,0 +1,158 @@ +// SPDX-License-Identifier: MIT +#if GS_ENABLE_URP + +using UnityEngine; +using UnityEngine.Experimental.Rendering; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; +#if UNITY_6000_0_OR_NEWER +using UnityEngine.Rendering.RenderGraphModule; +#endif + +namespace GaussianSplatting.Runtime +{ + // Note: I have no idea what is the purpose of ScriptableRendererFeature vs ScriptableRenderPass, which one of those + // is supposed to do resource management vs logic, etc. etc. Code below "seems to work" but I'm just fumbling along, + // without understanding any of it. + // + // ReSharper disable once InconsistentNaming + class GaussianSplatURPFeature : ScriptableRendererFeature + { + class GSRenderPass : ScriptableRenderPass + { + const string GaussianSplatRTName = "_GaussianSplatRT"; +#if !UNITY_6000_0_OR_NEWER + RTHandle m_RenderTarget; + internal ScriptableRenderer m_Renderer; + internal CommandBuffer m_Cmb; +#endif + + public void Dispose() + { +#if !UNITY_6000_0_OR_NEWER + m_RenderTarget?.Release(); +#endif + } + +#if UNITY_6000_0_OR_NEWER + const string ProfilerTag = "GaussianSplatRenderGraph"; + static readonly ProfilingSampler s_profilingSampler = new(ProfilerTag); + static readonly int s_gaussianSplatRT = Shader.PropertyToID(GaussianSplatRTName); + + class PassData + { + internal UniversalCameraData CameraData; + internal TextureHandle SourceTexture; + internal TextureHandle SourceDepth; + internal TextureHandle GaussianSplatRT; + } + + public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData) + { + using var builder = renderGraph.AddUnsafePass(ProfilerTag, out PassData passData); + + var cameraData = frameData.Get(); + var resourceData = frameData.Get(); + + RenderTextureDescriptor rtDesc = cameraData.cameraTargetDescriptor; + rtDesc.depthBufferBits = 0; + rtDesc.msaaSamples = 1; + rtDesc.graphicsFormat = GraphicsFormat.R16G16B16A16_SFloat; + var textureHandle = UniversalRenderer.CreateRenderGraphTexture(renderGraph, rtDesc, GaussianSplatRTName, true); + + passData.CameraData = cameraData; + passData.SourceTexture = resourceData.activeColorTexture; + passData.SourceDepth = resourceData.activeDepthTexture; + passData.GaussianSplatRT = textureHandle; + + builder.UseTexture(resourceData.activeColorTexture, AccessFlags.ReadWrite); + builder.UseTexture(resourceData.activeDepthTexture); + builder.UseTexture(textureHandle, AccessFlags.Write); + builder.AllowPassCulling(false); + builder.SetRenderFunc(static (PassData data, UnsafeGraphContext context) => + { + var commandBuffer = CommandBufferHelpers.GetNativeCommandBuffer(context.cmd); + using var _ = new ProfilingScope(commandBuffer, s_profilingSampler); + commandBuffer.SetGlobalTexture(s_gaussianSplatRT, data.GaussianSplatRT); + CoreUtils.SetRenderTarget(commandBuffer, data.GaussianSplatRT, data.SourceDepth, ClearFlag.Color, Color.clear); + Material matComposite = GaussianSplatRenderSystem.instance.SortAndRenderSplats(data.CameraData.camera, commandBuffer); + commandBuffer.BeginSample(GaussianSplatRenderSystem.s_ProfCompose); + Blitter.BlitCameraTexture(commandBuffer, data.GaussianSplatRT, data.SourceTexture, matComposite, 0); + commandBuffer.EndSample(GaussianSplatRenderSystem.s_ProfCompose); + }); + } +#else + public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) + { + RenderTextureDescriptor rtDesc = renderingData.cameraData.cameraTargetDescriptor; + rtDesc.depthBufferBits = 0; + rtDesc.msaaSamples = 1; + rtDesc.graphicsFormat = GraphicsFormat.R16G16B16A16_SFloat; + RenderingUtils.ReAllocateIfNeeded(ref m_RenderTarget, rtDesc, FilterMode.Point, TextureWrapMode.Clamp, name: GaussianSplatRTName); + cmd.SetGlobalTexture(m_RenderTarget.name, m_RenderTarget.nameID); + + ConfigureTarget(m_RenderTarget, m_Renderer.cameraDepthTargetHandle); + ConfigureClear(ClearFlag.Color, new Color(0,0,0,0)); + } + + public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) + { + if (m_Cmb == null) + return; + + // add sorting, view calc and drawing commands for each splat object + Material matComposite = GaussianSplatRenderSystem.instance.SortAndRenderSplats(renderingData.cameraData.camera, m_Cmb); + + // compose + m_Cmb.BeginSample(GaussianSplatRenderSystem.s_ProfCompose); + Blitter.BlitCameraTexture(m_Cmb, m_RenderTarget, m_Renderer.cameraColorTargetHandle, RenderBufferLoadAction.Load, RenderBufferStoreAction.Store, matComposite, 0); + m_Cmb.EndSample(GaussianSplatRenderSystem.s_ProfCompose); + context.ExecuteCommandBuffer(m_Cmb); + } +#endif + } + + GSRenderPass m_Pass; + bool m_HasCamera; + + public override void Create() + { + m_Pass = new GSRenderPass + { + renderPassEvent = RenderPassEvent.BeforeRenderingTransparents + }; + } + + public override void OnCameraPreCull(ScriptableRenderer renderer, in CameraData cameraData) + { + m_HasCamera = false; + var system = GaussianSplatRenderSystem.instance; + if (!system.GatherSplatsForCamera(cameraData.camera)) + return; + +#if !UNITY_6000_0_OR_NEWER + CommandBuffer cmb = system.InitialClearCmdBuffer(cameraData.camera); + m_Pass.m_Cmb = cmb; +#endif + m_HasCamera = true; + } + + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + if (!m_HasCamera) + return; +#if !UNITY_6000_0_OR_NEWER + m_Pass.m_Renderer = renderer; +#endif + renderer.EnqueuePass(m_Pass); + } + + protected override void Dispose(bool disposing) + { + m_Pass?.Dispose(); + m_Pass = null; + } + } +} + +#endif // #if GS_ENABLE_URP diff --git a/MVS/3DGS-Unity/Runtime/GaussianSplatURPFeature.cs.meta b/MVS/3DGS-Unity/Runtime/GaussianSplatURPFeature.cs.meta new file mode 100644 index 00000000..11d13da9 --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GaussianSplatURPFeature.cs.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: 01052c1a4da12064d8681d7c1800f94a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - m_ShaderSplats: {fileID: 4800000, guid: ed800126ae8844a67aad1974ddddd59c, type: 3} + - m_ShaderComposite: {fileID: 4800000, guid: 7e184af7d01193a408eb916d8acafff9, type: 3} + - m_ShaderDebugPoints: {fileID: 4800000, guid: b44409fc67214394f8f47e4e2648425e, type: 3} + - m_ShaderDebugBoxes: {fileID: 4800000, guid: 4006f2680fd7c8b4cbcb881454c782be, type: 3} + - m_CSSplatUtilities: {fileID: 7200000, guid: ec84f78b836bd4f96a105d6b804f08bd, type: 3} + - m_CSFfxSort: {fileID: 7200000, guid: dec36776b6c843544a1f6f9b436a4474, type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Runtime/GaussianSplatting.asmdef b/MVS/3DGS-Unity/Runtime/GaussianSplatting.asmdef new file mode 100644 index 00000000..55c03bc7 --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GaussianSplatting.asmdef @@ -0,0 +1,31 @@ +{ + "name": "GaussianSplatting", + "rootNamespace": "GaussianSplatting.Runtime", + "references": [ + "GUID:d8b63aba1907145bea998dd612889d6b", + "GUID:8992d429105beaf428dfc91fb5b9f531", + "GUID:15fc0a57446b3144c949da3e2b9737a9", + "GUID:df380645f10b7bc4b97d4f5eb6303d95", + "GUID:457756d89b35d2941b3e7b37b4ece6f1" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.render-pipelines.universal", + "expression": "", + "define": "GS_ENABLE_URP" + }, + { + "name": "com.unity.render-pipelines.high-definition", + "expression": "", + "define": "GS_ENABLE_HDRP" + } + ], + "noEngineReferences": false +} \ No newline at end of file diff --git a/MVS/3DGS-Unity/Runtime/GaussianSplatting.asmdef.meta b/MVS/3DGS-Unity/Runtime/GaussianSplatting.asmdef.meta new file mode 100644 index 00000000..3647535f --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GaussianSplatting.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4b653174f8fcdcd49b4c9a6f1ca8c7c3 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Runtime/GaussianUtils.cs b/MVS/3DGS-Unity/Runtime/GaussianUtils.cs new file mode 100644 index 00000000..32d18610 --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GaussianUtils.cs @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: MIT + +using Unity.Mathematics; + +namespace GaussianSplatting.Runtime +{ + public static class GaussianUtils + { + public static float Sigmoid(float v) + { + return math.rcp(1.0f + math.exp(-v)); + } + + public static float3 SH0ToColor(float3 dc0) + { + const float kSH_C0 = 0.2820948f; + return dc0 * kSH_C0 + 0.5f; + } + + public static float3 LinearScale(float3 logScale) + { + return math.abs(math.exp(logScale)); + } + + public static float SquareCentered01(float x) + { + x -= 0.5f; + x *= x * math.sign(x); + return x * 2.0f + 0.5f; + } + + public static float InvSquareCentered01(float x) + { + x -= 0.5f; + x *= 0.5f; + x = math.sqrt(math.abs(x)) * math.sign(x); + return x + 0.5f; + } + + public static float4 NormalizeSwizzleRotation(float4 wxyz) + { + return math.normalize(wxyz).yzwx; + } + + // Returns three smallest quaternion components in xyz (normalized to 0..1 range), and index/3 of the largest one in w + public static float4 PackSmallest3Rotation(float4 q) + { + // find biggest component + float4 absQ = math.abs(q); + int index = 0; + float maxV = absQ.x; + if (absQ.y > maxV) + { + index = 1; + maxV = absQ.y; + } + if (absQ.z > maxV) + { + index = 2; + maxV = absQ.z; + } + if (absQ.w > maxV) + { + index = 3; + maxV = absQ.w; + } + + if (index == 0) q = q.yzwx; + if (index == 1) q = q.xzwy; + if (index == 2) q = q.xywz; + + float3 three = q.xyz * (q.w >= 0 ? 1 : -1); // -1/sqrt2..+1/sqrt2 range + three = (three * math.SQRT2) * 0.5f + 0.5f; // 0..1 range + + return new float4(three, index / 3.0f); + } + + + // Based on https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/ + // Insert two 0 bits after each of the 21 low bits of x + static ulong MortonPart1By2(ulong x) + { + x &= 0x1fffff; + x = (x ^ (x << 32)) & 0x1f00000000ffffUL; + x = (x ^ (x << 16)) & 0x1f0000ff0000ffUL; + x = (x ^ (x << 8)) & 0x100f00f00f00f00fUL; + x = (x ^ (x << 4)) & 0x10c30c30c30c30c3UL; + x = (x ^ (x << 2)) & 0x1249249249249249UL; + return x; + } + // Encode three 21-bit integers into 3D Morton order + public static ulong MortonEncode3(uint3 v) + { + return (MortonPart1By2(v.z) << 2) | (MortonPart1By2(v.y) << 1) | MortonPart1By2(v.x); + } + + // See GaussianSplatting.hlsl + public static uint2 DecodeMorton2D_16x16(uint t) + { + t = (t & 0xFF) | ((t & 0xFE) << 7); // -EAFBGCHEAFBGCHD + t &= 0x5555; // -E-F-G-H-A-B-C-D + t = (t ^ (t >> 1)) & 0x3333; // --EF--GH--AB--CD + t = (t ^ (t >> 2)) & 0x0f0f; // ----EFGH----ABCD + return new uint2(t & 0xF, t >> 8); // --------EFGHABCD + } + } +} diff --git a/MVS/3DGS-Unity/Runtime/GaussianUtils.cs.meta b/MVS/3DGS-Unity/Runtime/GaussianUtils.cs.meta new file mode 100644 index 00000000..cd29fa7a --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GaussianUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff862528cafe3e243aa42978a6d284d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Runtime/GpuSorting.cs b/MVS/3DGS-Unity/Runtime/GpuSorting.cs new file mode 100644 index 00000000..2d868326 --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GpuSorting.cs @@ -0,0 +1,200 @@ +using UnityEngine; +using UnityEngine.Assertions; +using UnityEngine.Rendering; + +namespace GaussianSplatting.Runtime +{ + // GPU (uint key, uint payload) 8 bit-LSD radix sort, using reduce-then-scan + // Copyright Thomas Smith 2024, MIT license + // https://github.com/b0nes164/GPUSorting + + public class GpuSorting + { + //The size of a threadblock partition in the sort + const uint DEVICE_RADIX_SORT_PARTITION_SIZE = 3840; + + //The size of our radix in bits + const uint DEVICE_RADIX_SORT_BITS = 8; + + //Number of digits in our radix, 1 << DEVICE_RADIX_SORT_BITS + const uint DEVICE_RADIX_SORT_RADIX = 256; + + //Number of sorting passes required to sort a 32bit key, KEY_BITS / DEVICE_RADIX_SORT_BITS + const uint DEVICE_RADIX_SORT_PASSES = 4; + + //Keywords to enable for the shader + private LocalKeyword m_keyUintKeyword; + private LocalKeyword m_payloadUintKeyword; + private LocalKeyword m_ascendKeyword; + private LocalKeyword m_sortPairKeyword; + private LocalKeyword m_vulkanKeyword; + + public struct Args + { + public uint count; + public GraphicsBuffer inputKeys; + public GraphicsBuffer inputValues; + public SupportResources resources; + internal int workGroupCount; + } + + public struct SupportResources + { + public GraphicsBuffer altBuffer; + public GraphicsBuffer altPayloadBuffer; + public GraphicsBuffer passHistBuffer; + public GraphicsBuffer globalHistBuffer; + + public static SupportResources Load(uint count) + { + //This is threadBlocks * DEVICE_RADIX_SORT_RADIX + uint scratchBufferSize = DivRoundUp(count, DEVICE_RADIX_SORT_PARTITION_SIZE) * DEVICE_RADIX_SORT_RADIX; + uint reducedScratchBufferSize = DEVICE_RADIX_SORT_RADIX * DEVICE_RADIX_SORT_PASSES; + + var target = GraphicsBuffer.Target.Structured; + var resources = new SupportResources + { + altBuffer = new GraphicsBuffer(target, (int)count, 4) { name = "DeviceRadixAlt" }, + altPayloadBuffer = new GraphicsBuffer(target, (int)count, 4) { name = "DeviceRadixAltPayload" }, + passHistBuffer = new GraphicsBuffer(target, (int)scratchBufferSize, 4) { name = "DeviceRadixPassHistogram" }, + globalHistBuffer = new GraphicsBuffer(target, (int)reducedScratchBufferSize, 4) { name = "DeviceRadixGlobalHistogram" }, + }; + return resources; + } + + public void Dispose() + { + altBuffer?.Dispose(); + altPayloadBuffer?.Dispose(); + passHistBuffer?.Dispose(); + globalHistBuffer?.Dispose(); + + altBuffer = null; + altPayloadBuffer = null; + passHistBuffer = null; + globalHistBuffer = null; + } + } + + readonly ComputeShader m_CS; + readonly int m_kernelInitDeviceRadixSort = -1; + readonly int m_kernelUpsweep = -1; + readonly int m_kernelScan = -1; + readonly int m_kernelDownsweep = -1; + + readonly bool m_Valid; + + public bool Valid => m_Valid; + + public GpuSorting(ComputeShader cs) + { + m_CS = cs; + if (cs) + { + m_kernelInitDeviceRadixSort = cs.FindKernel("InitDeviceRadixSort"); + m_kernelUpsweep = cs.FindKernel("Upsweep"); + m_kernelScan = cs.FindKernel("Scan"); + m_kernelDownsweep = cs.FindKernel("Downsweep"); + } + + m_Valid = m_kernelInitDeviceRadixSort >= 0 && + m_kernelUpsweep >= 0 && + m_kernelScan >= 0 && + m_kernelDownsweep >= 0; + if (m_Valid) + { + if (!cs.IsSupported(m_kernelInitDeviceRadixSort) || + !cs.IsSupported(m_kernelUpsweep) || + !cs.IsSupported(m_kernelScan) || + !cs.IsSupported(m_kernelDownsweep)) + { + m_Valid = false; + } + } + + m_keyUintKeyword = new LocalKeyword(cs, "KEY_UINT"); + m_payloadUintKeyword = new LocalKeyword(cs, "PAYLOAD_UINT"); + m_ascendKeyword = new LocalKeyword(cs, "SHOULD_ASCEND"); + m_sortPairKeyword = new LocalKeyword(cs, "SORT_PAIRS"); + m_vulkanKeyword = new LocalKeyword(cs, "VULKAN"); + + cs.EnableKeyword(m_keyUintKeyword); + cs.EnableKeyword(m_payloadUintKeyword); + cs.EnableKeyword(m_ascendKeyword); + cs.EnableKeyword(m_sortPairKeyword); + if (SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Vulkan) + cs.EnableKeyword(m_vulkanKeyword); + else + cs.DisableKeyword(m_vulkanKeyword); + } + + static uint DivRoundUp(uint x, uint y) => (x + y - 1) / y; + + //Can we remove the last 4 padding without breaking? + struct SortConstants + { + public uint numKeys; // The number of keys to sort + public uint radixShift; // The radix shift value for the current pass + public uint threadBlocks; // threadBlocks + public uint padding0; // Padding - unused + } + + public void Dispatch(CommandBuffer cmd, Args args) + { + Assert.IsTrue(Valid); + + GraphicsBuffer srcKeyBuffer = args.inputKeys; + GraphicsBuffer srcPayloadBuffer = args.inputValues; + GraphicsBuffer dstKeyBuffer = args.resources.altBuffer; + GraphicsBuffer dstPayloadBuffer = args.resources.altPayloadBuffer; + + SortConstants constants = default; + constants.numKeys = args.count; + constants.threadBlocks = DivRoundUp(args.count, DEVICE_RADIX_SORT_PARTITION_SIZE); + + // Setup overall constants + cmd.SetComputeIntParam(m_CS, "e_numKeys", (int)constants.numKeys); + cmd.SetComputeIntParam(m_CS, "e_threadBlocks", (int)constants.threadBlocks); + + //Set statically located buffers + //Upsweep + cmd.SetComputeBufferParam(m_CS, m_kernelUpsweep, "b_passHist", args.resources.passHistBuffer); + cmd.SetComputeBufferParam(m_CS, m_kernelUpsweep, "b_globalHist", args.resources.globalHistBuffer); + + //Scan + cmd.SetComputeBufferParam(m_CS, m_kernelScan, "b_passHist", args.resources.passHistBuffer); + + //Downsweep + cmd.SetComputeBufferParam(m_CS, m_kernelDownsweep, "b_passHist", args.resources.passHistBuffer); + cmd.SetComputeBufferParam(m_CS, m_kernelDownsweep, "b_globalHist", args.resources.globalHistBuffer); + + //Clear the global histogram + cmd.SetComputeBufferParam(m_CS, m_kernelInitDeviceRadixSort, "b_globalHist", args.resources.globalHistBuffer); + cmd.DispatchCompute(m_CS, m_kernelInitDeviceRadixSort, 1, 1, 1); + + // Execute the sort algorithm in 8-bit increments + for (constants.radixShift = 0; constants.radixShift < 32; constants.radixShift += DEVICE_RADIX_SORT_BITS) + { + cmd.SetComputeIntParam(m_CS, "e_radixShift", (int)constants.radixShift); + + //Upsweep + cmd.SetComputeBufferParam(m_CS, m_kernelUpsweep, "b_sort", srcKeyBuffer); + cmd.DispatchCompute(m_CS, m_kernelUpsweep, (int)constants.threadBlocks, 1, 1); + + // Scan + cmd.DispatchCompute(m_CS, m_kernelScan, (int)DEVICE_RADIX_SORT_RADIX, 1, 1); + + // Downsweep + cmd.SetComputeBufferParam(m_CS, m_kernelDownsweep, "b_sort", srcKeyBuffer); + cmd.SetComputeBufferParam(m_CS, m_kernelDownsweep, "b_sortPayload", srcPayloadBuffer); + cmd.SetComputeBufferParam(m_CS, m_kernelDownsweep, "b_alt", dstKeyBuffer); + cmd.SetComputeBufferParam(m_CS, m_kernelDownsweep, "b_altPayload", dstPayloadBuffer); + cmd.DispatchCompute(m_CS, m_kernelDownsweep, (int)constants.threadBlocks, 1, 1); + + // Swap + (srcKeyBuffer, dstKeyBuffer) = (dstKeyBuffer, srcKeyBuffer); + (srcPayloadBuffer, dstPayloadBuffer) = (dstPayloadBuffer, srcPayloadBuffer); + } + } + } +} diff --git a/MVS/3DGS-Unity/Runtime/GpuSorting.cs.meta b/MVS/3DGS-Unity/Runtime/GpuSorting.cs.meta new file mode 100644 index 00000000..d35c62e1 --- /dev/null +++ b/MVS/3DGS-Unity/Runtime/GpuSorting.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65a55f12dc9f42e4196260841dd87c15 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Shaders.meta b/MVS/3DGS-Unity/Shaders.meta new file mode 100644 index 00000000..06328354 --- /dev/null +++ b/MVS/3DGS-Unity/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2cbb533de67b91d45afad2ab53f7f03c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Shaders/BlackSkybox.shader b/MVS/3DGS-Unity/Shaders/BlackSkybox.shader new file mode 100644 index 00000000..4c1cec69 --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/BlackSkybox.shader @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT +Shader "Unlit/BlackSkybox" +{ + Properties + { + _Color ("Color", Color) = (0,0,0,0) + } + SubShader + { + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + }; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + return o; + } + + half4 _Color; + + half4 frag (v2f i) : SV_Target + { + return _Color; + } + ENDCG + } + } +} diff --git a/MVS/3DGS-Unity/Shaders/BlackSkybox.shader.meta b/MVS/3DGS-Unity/Shaders/BlackSkybox.shader.meta new file mode 100644 index 00000000..6b712dbf --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/BlackSkybox.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a4867e5be68354ccda78062a92c74391 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Shaders/DeviceRadixSort.hlsl b/MVS/3DGS-Unity/Shaders/DeviceRadixSort.hlsl new file mode 100644 index 00000000..b055fb69 --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/DeviceRadixSort.hlsl @@ -0,0 +1,531 @@ +/****************************************************************************** + * DeviceRadixSort + * Device Level 8-bit LSD Radix Sort using reduce then scan + * + * SPDX-License-Identifier: MIT + * Copyright Thomas Smith 5/17/2024 + * https://github.com/b0nes164/GPUSorting + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ +#include "SortCommon.hlsl" + +#define US_DIM 128U //The number of threads in a Upsweep threadblock +#define SCAN_DIM 128U //The number of threads in a Scan threadblock + +RWStructuredBuffer b_globalHist; //buffer holding device level offsets for each binning pass +RWStructuredBuffer b_passHist; //buffer used to store reduced sums of partition tiles + +groupshared uint g_us[RADIX * 2]; //Shared memory for upsweep +groupshared uint g_scan[SCAN_DIM]; //Shared memory for the scan + +//***************************************************************************** +//INIT KERNEL +//***************************************************************************** +//Clear the global histogram, as we will be adding to it atomically +[numthreads(1024, 1, 1)] +void InitDeviceRadixSort(int3 id : SV_DispatchThreadID) +{ + b_globalHist[id.x] = 0; +} + +//***************************************************************************** +//UPSWEEP KERNEL +//***************************************************************************** +//histogram, 64 threads to a histogram +inline void HistogramDigitCounts(uint gtid, uint gid) +{ + const uint histOffset = gtid / 64 * RADIX; + const uint partitionEnd = gid == e_threadBlocks - 1 ? + e_numKeys : (gid + 1) * PART_SIZE; + for (uint i = gtid + gid * PART_SIZE; i < partitionEnd; i += US_DIM) + { +#if defined(KEY_UINT) + InterlockedAdd(g_us[ExtractDigit(b_sort[i]) + histOffset], 1); +#elif defined(KEY_INT) + InterlockedAdd(g_us[ExtractDigit(IntToUint(b_sort[i])) + histOffset], 1); +#elif defined(KEY_FLOAT) + InterlockedAdd(g_us[ExtractDigit(FloatToUint(b_sort[i])) + histOffset], 1); +#endif + } +} + +//reduce and pass to tile histogram +inline void ReduceWriteDigitCounts(uint gtid, uint gid) +{ + for (uint i = gtid; i < RADIX; i += US_DIM) + { + g_us[i] += g_us[i + RADIX]; + b_passHist[i * e_threadBlocks + gid] = g_us[i]; + g_us[i] += WavePrefixSum(g_us[i]); + } +} + +//Exclusive scan over digit counts, then atomically add to global hist +inline void GlobalHistExclusiveScanWGE16(uint gtid, uint waveSize) +{ + GroupMemoryBarrierWithGroupSync(); + + if (gtid < (RADIX / waveSize)) + { + g_us[(gtid + 1) * waveSize - 1] += + WavePrefixSum(g_us[(gtid + 1) * waveSize - 1]); + } + GroupMemoryBarrierWithGroupSync(); + + //atomically add to global histogram + const uint globalHistOffset = GlobalHistOffset(); + const uint laneMask = waveSize - 1; + const uint circularLaneShift = WaveGetLaneIndex() + 1 & laneMask; + for (uint i = gtid; i < RADIX; i += US_DIM) + { + const uint index = circularLaneShift + (i & ~laneMask); + uint t = WaveGetLaneIndex() != laneMask ? g_us[i] : 0; + if (i >= waveSize) + t += WaveReadLaneAt(g_us[i - 1], 0); + InterlockedAdd(b_globalHist[index + globalHistOffset], t); + } +} + +inline void GlobalHistExclusiveScanWLT16(uint gtid, uint waveSize) +{ + const uint globalHistOffset = GlobalHistOffset(); + if (gtid < waveSize) + { + const uint circularLaneShift = WaveGetLaneIndex() + 1 & + waveSize - 1; + InterlockedAdd(b_globalHist[circularLaneShift + globalHistOffset], + circularLaneShift ? g_us[gtid] : 0); + } + GroupMemoryBarrierWithGroupSync(); + + const uint laneLog = countbits(waveSize - 1); + uint offset = laneLog; + uint j = waveSize; + for (; j < (RADIX >> 1); j <<= laneLog) + { + if (gtid < (RADIX >> offset)) + { + g_us[((gtid + 1) << offset) - 1] += + WavePrefixSum(g_us[((gtid + 1) << offset) - 1]); + } + GroupMemoryBarrierWithGroupSync(); + + for (uint i = gtid + j; i < RADIX; i += US_DIM) + { + if ((i & ((j << laneLog) - 1)) >= j) + { + if (i < (j << laneLog)) + { + InterlockedAdd(b_globalHist[i + globalHistOffset], + WaveReadLaneAt(g_us[((i >> offset) << offset) - 1], 0) + + ((i & (j - 1)) ? g_us[i - 1] : 0)); + } + else + { + if ((i + 1) & (j - 1)) + { + g_us[i] += + WaveReadLaneAt(g_us[((i >> offset) << offset) - 1], 0); + } + } + } + } + offset += laneLog; + } + GroupMemoryBarrierWithGroupSync(); + + //If RADIX is not a power of lanecount + for (uint i = gtid + j; i < RADIX; i += US_DIM) + { + InterlockedAdd(b_globalHist[i + globalHistOffset], + WaveReadLaneAt(g_us[((i >> offset) << offset) - 1], 0) + + ((i & (j - 1)) ? g_us[i - 1] : 0)); + } +} + +[numthreads(US_DIM, 1, 1)] +void Upsweep(uint3 gtid : SV_GroupThreadID, uint3 gid : SV_GroupID) +{ + //get the wave size + const uint waveSize = getWaveSize(); + + //clear shared memory + const uint histsEnd = RADIX * 2; + for (uint i = gtid.x; i < histsEnd; i += US_DIM) + g_us[i] = 0; + GroupMemoryBarrierWithGroupSync(); + + HistogramDigitCounts(gtid.x, gid.x); + GroupMemoryBarrierWithGroupSync(); + + ReduceWriteDigitCounts(gtid.x, gid.x); + + if (waveSize >= 16) + GlobalHistExclusiveScanWGE16(gtid.x, waveSize); + + if (waveSize < 16) + GlobalHistExclusiveScanWLT16(gtid.x, waveSize); +} + +//***************************************************************************** +//SCAN KERNEL +//***************************************************************************** +inline void ExclusiveThreadBlockScanFullWGE16( + uint gtid, + uint laneMask, + uint circularLaneShift, + uint partEnd, + uint deviceOffset, + uint waveSize, + inout uint reduction) +{ + for (uint i = gtid; i < partEnd; i += SCAN_DIM) + { + g_scan[gtid] = b_passHist[i + deviceOffset]; + g_scan[gtid] += WavePrefixSum(g_scan[gtid]); + GroupMemoryBarrierWithGroupSync(); + + if (gtid < SCAN_DIM / waveSize) + { + g_scan[(gtid + 1) * waveSize - 1] += + WavePrefixSum(g_scan[(gtid + 1) * waveSize - 1]); + } + GroupMemoryBarrierWithGroupSync(); + + uint t = (WaveGetLaneIndex() != laneMask ? g_scan[gtid] : 0) + reduction; + if (gtid >= waveSize) + t += WaveReadLaneAt(g_scan[gtid - 1], 0); + b_passHist[circularLaneShift + (i & ~laneMask) + deviceOffset] = t; + + reduction += g_scan[SCAN_DIM - 1]; + GroupMemoryBarrierWithGroupSync(); + } +} + +inline void ExclusiveThreadBlockScanPartialWGE16( + uint gtid, + uint laneMask, + uint circularLaneShift, + uint partEnd, + uint deviceOffset, + uint waveSize, + uint reduction) +{ + uint i = gtid + partEnd; + if (i < e_threadBlocks) + g_scan[gtid] = b_passHist[deviceOffset + i]; + g_scan[gtid] += WavePrefixSum(g_scan[gtid]); + GroupMemoryBarrierWithGroupSync(); + + if (gtid < SCAN_DIM / waveSize) + { + g_scan[(gtid + 1) * waveSize - 1] += + WavePrefixSum(g_scan[(gtid + 1) * waveSize - 1]); + } + GroupMemoryBarrierWithGroupSync(); + + const uint index = circularLaneShift + (i & ~laneMask); + if (index < e_threadBlocks) + { + uint t = (WaveGetLaneIndex() != laneMask ? g_scan[gtid] : 0) + reduction; + if (gtid >= waveSize) + t += g_scan[(gtid & ~laneMask) - 1]; + b_passHist[index + deviceOffset] = t; + } +} + +inline void ExclusiveThreadBlockScanWGE16(uint gtid, uint gid, uint waveSize) +{ + uint reduction = 0; + const uint laneMask = waveSize - 1; + const uint circularLaneShift = WaveGetLaneIndex() + 1 & laneMask; + const uint partionsEnd = e_threadBlocks / SCAN_DIM * SCAN_DIM; + const uint deviceOffset = gid * e_threadBlocks; + + ExclusiveThreadBlockScanFullWGE16( + gtid, + laneMask, + circularLaneShift, + partionsEnd, + deviceOffset, + waveSize, + reduction); + + ExclusiveThreadBlockScanPartialWGE16( + gtid, + laneMask, + circularLaneShift, + partionsEnd, + deviceOffset, + waveSize, + reduction); +} + +inline void ExclusiveThreadBlockScanFullWLT16( + uint gtid, + uint partitions, + uint deviceOffset, + uint laneLog, + uint circularLaneShift, + uint waveSize, + inout uint reduction) +{ + for (uint k = 0; k < partitions; ++k) + { + g_scan[gtid] = b_passHist[gtid + k * SCAN_DIM + deviceOffset]; + g_scan[gtid] += WavePrefixSum(g_scan[gtid]); + GroupMemoryBarrierWithGroupSync(); + if (gtid < waveSize) + { + b_passHist[circularLaneShift + k * SCAN_DIM + deviceOffset] = + (circularLaneShift ? g_scan[gtid] : 0) + reduction; + } + + uint offset = laneLog; + uint j = waveSize; + for (; j < (SCAN_DIM >> 1); j <<= laneLog) + { + if (gtid < (SCAN_DIM >> offset)) + { + g_scan[((gtid + 1) << offset) - 1] += + WavePrefixSum(g_scan[((gtid + 1) << offset) - 1]); + } + GroupMemoryBarrierWithGroupSync(); + + if ((gtid & ((j << laneLog) - 1)) >= j) + { + if (gtid < (j << laneLog)) + { + b_passHist[gtid + k * SCAN_DIM + deviceOffset] = + WaveReadLaneAt(g_scan[((gtid >> offset) << offset) - 1], 0) + + ((gtid & (j - 1)) ? g_scan[gtid - 1] : 0) + reduction; + } + else + { + if ((gtid + 1) & (j - 1)) + { + g_scan[gtid] += + WaveReadLaneAt(g_scan[((gtid >> offset) << offset) - 1], 0); + } + } + } + offset += laneLog; + } + GroupMemoryBarrierWithGroupSync(); + + //If SCAN_DIM is not a power of lanecount + for (uint i = gtid + j; i < SCAN_DIM; i += SCAN_DIM) + { + b_passHist[i + k * SCAN_DIM + deviceOffset] = + WaveReadLaneAt(g_scan[((i >> offset) << offset) - 1], 0) + + ((i & (j - 1)) ? g_scan[i - 1] : 0) + reduction; + } + + reduction += WaveReadLaneAt(g_scan[SCAN_DIM - 1], 0) + + WaveReadLaneAt(g_scan[(((SCAN_DIM - 1) >> offset) << offset) - 1], 0); + GroupMemoryBarrierWithGroupSync(); + } +} + +inline void ExclusiveThreadBlockScanParitalWLT16( + uint gtid, + uint partitions, + uint deviceOffset, + uint laneLog, + uint circularLaneShift, + uint waveSize, + uint reduction) +{ + const uint finalPartSize = e_threadBlocks - partitions * SCAN_DIM; + if (gtid < finalPartSize) + { + g_scan[gtid] = b_passHist[gtid + partitions * SCAN_DIM + deviceOffset]; + g_scan[gtid] += WavePrefixSum(g_scan[gtid]); + } + GroupMemoryBarrierWithGroupSync(); + if (gtid < waveSize && circularLaneShift < finalPartSize) + { + b_passHist[circularLaneShift + partitions * SCAN_DIM + deviceOffset] = + (circularLaneShift ? g_scan[gtid] : 0) + reduction; + } + + uint offset = laneLog; + for (uint j = waveSize; j < finalPartSize; j <<= laneLog) + { + if (gtid < (finalPartSize >> offset)) + { + g_scan[((gtid + 1) << offset) - 1] += + WavePrefixSum(g_scan[((gtid + 1) << offset) - 1]); + } + GroupMemoryBarrierWithGroupSync(); + + if ((gtid & ((j << laneLog) - 1)) >= j && gtid < finalPartSize) + { + if (gtid < (j << laneLog)) + { + b_passHist[gtid + partitions * SCAN_DIM + deviceOffset] = + WaveReadLaneAt(g_scan[((gtid >> offset) << offset) - 1], 0) + + ((gtid & (j - 1)) ? g_scan[gtid - 1] : 0) + reduction; + } + else + { + if ((gtid + 1) & (j - 1)) + { + g_scan[gtid] += + WaveReadLaneAt(g_scan[((gtid >> offset) << offset) - 1], 0); + } + } + } + offset += laneLog; + } +} + +inline void ExclusiveThreadBlockScanWLT16(uint gtid, uint gid, uint waveSize) +{ + uint reduction = 0; + const uint partitions = e_threadBlocks / SCAN_DIM; + const uint deviceOffset = gid * e_threadBlocks; + const uint laneLog = countbits(waveSize - 1); + const uint circularLaneShift = WaveGetLaneIndex() + 1 & waveSize - 1; + + ExclusiveThreadBlockScanFullWLT16( + gtid, + partitions, + deviceOffset, + laneLog, + circularLaneShift, + waveSize, + reduction); + + ExclusiveThreadBlockScanParitalWLT16( + gtid, + partitions, + deviceOffset, + laneLog, + circularLaneShift, + waveSize, + reduction); +} + +//Scan does not need flattening of gids +[numthreads(SCAN_DIM, 1, 1)] +void Scan(uint3 gtid : SV_GroupThreadID, uint3 gid : SV_GroupID) +{ + const uint waveSize = getWaveSize(); + if (waveSize >= 16) + ExclusiveThreadBlockScanWGE16(gtid.x, gid.x, waveSize); + + if (waveSize < 16) + ExclusiveThreadBlockScanWLT16(gtid.x, gid.x, waveSize); +} + +//***************************************************************************** +//DOWNSWEEP KERNEL +//***************************************************************************** +inline void LoadThreadBlockReductions(uint gtid, uint gid, uint exclusiveHistReduction) +{ + if (gtid < RADIX) + { + g_d[gtid + PART_SIZE] = b_globalHist[gtid + GlobalHistOffset()] + + b_passHist[gtid * e_threadBlocks + gid] - exclusiveHistReduction; + } +} + +[numthreads(D_DIM, 1, 1)] +void Downsweep(uint3 gtid : SV_GroupThreadID, uint3 gid : SV_GroupID) +{ + KeyStruct keys; + OffsetStruct offsets; + const uint waveSize = getWaveSize(); + + ClearWaveHists(gtid.x, waveSize); + GroupMemoryBarrierWithGroupSync(); + + if (gid.x < e_threadBlocks - 1) + { + if (waveSize >= 16) + keys = LoadKeysWGE16(gtid.x, waveSize, gid.x); + + if (waveSize < 16) + keys = LoadKeysWLT16(gtid.x, waveSize, gid.x, SerialIterations(waveSize)); + } + + if (gid.x == e_threadBlocks - 1) + { + if (waveSize >= 16) + keys = LoadKeysPartialWGE16(gtid.x, waveSize, gid.x); + + if (waveSize < 16) + keys = LoadKeysPartialWLT16(gtid.x, waveSize, gid.x, SerialIterations(waveSize)); + } + + uint exclusiveHistReduction; + + if (waveSize >= 16) + { + offsets = RankKeysWGE16(waveSize, getWaveIndex(gtid.x, waveSize) * RADIX, keys); + GroupMemoryBarrierWithGroupSync(); + + uint histReduction; + if (gtid.x < RADIX) + { + histReduction = WaveHistInclusiveScanCircularShiftWGE16(gtid.x, waveSize); + histReduction += WavePrefixSum(histReduction); //take advantage of barrier to begin scan + } + GroupMemoryBarrierWithGroupSync(); + + WaveHistReductionExclusiveScanWGE16(gtid.x, waveSize, histReduction); + GroupMemoryBarrierWithGroupSync(); + + UpdateOffsetsWGE16(gtid.x, waveSize, offsets, keys); + if (gtid.x < RADIX) + exclusiveHistReduction = g_d[gtid.x]; //take advantage of barrier to grab value + GroupMemoryBarrierWithGroupSync(); + } + + if (waveSize < 16) + { + offsets = RankKeysWLT16(waveSize, getWaveIndex(gtid.x, waveSize), keys, SerialIterations(waveSize)); + + if (gtid.x < HALF_RADIX) + { + uint histReduction = WaveHistInclusiveScanCircularShiftWLT16(gtid.x); + g_d[gtid.x] = histReduction + (histReduction << 16); //take advantage of barrier to begin scan + } + + WaveHistReductionExclusiveScanWLT16(gtid.x); + GroupMemoryBarrierWithGroupSync(); + + UpdateOffsetsWLT16(gtid.x, waveSize, SerialIterations(waveSize), offsets, keys); + if (gtid.x < RADIX) //take advantage of barrier to grab value + exclusiveHistReduction = g_d[gtid.x >> 1] >> ((gtid.x & 1) ? 16 : 0) & 0xffff; + GroupMemoryBarrierWithGroupSync(); + } + + ScatterKeysShared(offsets, keys); + LoadThreadBlockReductions(gtid.x, gid.x, exclusiveHistReduction); + GroupMemoryBarrierWithGroupSync(); + + if (gid.x < e_threadBlocks - 1) + ScatterDevice(gtid.x, waveSize, gid.x, offsets); + + if (gid.x == e_threadBlocks - 1) + ScatterDevicePartial(gtid.x, waveSize, gid.x, offsets); +} \ No newline at end of file diff --git a/MVS/3DGS-Unity/Shaders/DeviceRadixSort.hlsl.meta b/MVS/3DGS-Unity/Shaders/DeviceRadixSort.hlsl.meta new file mode 100644 index 00000000..26854231 --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/DeviceRadixSort.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 02209b8d952e7fc418492b88139826fd +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Shaders/GaussianComposite.shader b/MVS/3DGS-Unity/Shaders/GaussianComposite.shader new file mode 100644 index 00000000..be1702c7 --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/GaussianComposite.shader @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +Shader "Hidden/Gaussian Splatting/Composite" +{ + SubShader + { + Pass + { + ZWrite Off + ZTest Always + Cull Off + Blend SrcAlpha OneMinusSrcAlpha + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma require compute +#pragma use_dxc +#include "UnityCG.cginc" + +struct v2f +{ + float4 vertex : SV_POSITION; +}; + +v2f vert (uint vtxID : SV_VertexID) +{ + v2f o; + float2 quadPos = float2(vtxID&1, (vtxID>>1)&1) * 4.0 - 1.0; + o.vertex = float4(quadPos, 1, 1); + return o; +} + +Texture2D _GaussianSplatRT; + +half4 frag (v2f i) : SV_Target +{ + half4 col = _GaussianSplatRT.Load(int3(i.vertex.xy, 0)); + col.rgb = GammaToLinearSpace(col.rgb); + col.a = saturate(col.a * 1.5); + return col; +} +ENDCG + } + } +} diff --git a/MVS/3DGS-Unity/Shaders/GaussianComposite.shader.meta b/MVS/3DGS-Unity/Shaders/GaussianComposite.shader.meta new file mode 100644 index 00000000..b8c67e1e --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/GaussianComposite.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7e184af7d01193a408eb916d8acafff9 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Shaders/GaussianDebugRenderBoxes.shader b/MVS/3DGS-Unity/Shaders/GaussianDebugRenderBoxes.shader new file mode 100644 index 00000000..a8fa604f --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/GaussianDebugRenderBoxes.shader @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: MIT +Shader "Gaussian Splatting/Debug/Render Boxes" +{ + SubShader + { + Tags { "RenderType"="Transparent" "Queue"="Transparent" } + + Pass + { + ZWrite Off + Blend OneMinusDstAlpha One + Cull Front + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma require compute +#pragma use_dxc + +#include "UnityCG.cginc" +#include "GaussianSplatting.hlsl" + +StructuredBuffer _OrderBuffer; + +bool _DisplayChunks; + +struct v2f +{ + half4 col : COLOR0; + float4 vertex : SV_POSITION; +}; + +float _SplatScale; +float _SplatOpacityScale; + +// based on https://iquilezles.org/articles/palettes/ +// cosine based palette, 4 vec3 params +half3 palette(float t, half3 a, half3 b, half3 c, half3 d) +{ + return a + b*cos(6.28318*(c*t+d)); +} + +v2f vert (uint vtxID : SV_VertexID, uint instID : SV_InstanceID) +{ + v2f o; + bool chunks = _DisplayChunks; + uint idx = vtxID; + float3 localPos = float3(idx&1, (idx>>1)&1, (idx>>2)&1) * 2.0 - 1.0; + + float3 centerWorldPos = 0; + + if (!chunks) + { + // display splat boxes + instID = _OrderBuffer[instID]; + SplatData splat = LoadSplatData(instID); + + float4 boxRot = splat.rot; + float3 boxSize = splat.scale; + boxSize *= _SplatScale; + + float3x3 splatRotScaleMat = CalcMatrixFromRotationScale(boxRot, boxSize); + splatRotScaleMat = mul((float3x3)unity_ObjectToWorld, splatRotScaleMat); + + centerWorldPos = splat.pos; + centerWorldPos = mul(unity_ObjectToWorld, float4(centerWorldPos,1)).xyz; + + o.col.rgb = saturate(splat.sh.col); + o.col.a = saturate(splat.opacity * _SplatOpacityScale); + + localPos = mul(splatRotScaleMat, localPos) * 2; + } + else + { + // display chunk boxes + localPos = localPos * 0.5 + 0.5; + SplatChunkInfo chunk = _SplatChunks[instID]; + float3 posMin = float3(chunk.posX.x, chunk.posY.x, chunk.posZ.x); + float3 posMax = float3(chunk.posX.y, chunk.posY.y, chunk.posZ.y); + + localPos = lerp(posMin, posMax, localPos); + localPos = mul(unity_ObjectToWorld, float4(localPos,1)).xyz; + + o.col.rgb = palette((float)instID / (float)_SplatChunkCount, half3(0.5,0.5,0.5), half3(0.5,0.5,0.5), half3(1,1,1), half3(0.0, 0.33, 0.67)); + o.col.a = 0.1; + } + + float3 worldPos = centerWorldPos + localPos; + o.vertex = UnityWorldToClipPos(worldPos); + + return o; +} + +half4 frag (v2f i) : SV_Target +{ + half4 res = half4(i.col.rgb * i.col.a, i.col.a); + return res; +} +ENDCG + } + } +} diff --git a/MVS/3DGS-Unity/Shaders/GaussianDebugRenderBoxes.shader.meta b/MVS/3DGS-Unity/Shaders/GaussianDebugRenderBoxes.shader.meta new file mode 100644 index 00000000..fda5775d --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/GaussianDebugRenderBoxes.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4006f2680fd7c8b4cbcb881454c782be +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Shaders/GaussianDebugRenderPoints.shader b/MVS/3DGS-Unity/Shaders/GaussianDebugRenderPoints.shader new file mode 100644 index 00000000..2121ae1d --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/GaussianDebugRenderPoints.shader @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: MIT +Shader "Gaussian Splatting/Debug/Render Points" +{ + SubShader + { + Tags { "RenderType"="Transparent" "Queue"="Transparent" } + + Pass + { + ZWrite On + Cull Off + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma require compute +#pragma use_dxc + +#include "GaussianSplatting.hlsl" + +struct v2f +{ + half3 color : TEXCOORD0; + float4 vertex : SV_POSITION; +}; + +float _SplatSize; +bool _DisplayIndex; +int _SplatCount; + +v2f vert (uint vtxID : SV_VertexID, uint instID : SV_InstanceID) +{ + v2f o; + uint splatIndex = instID; + + SplatData splat = LoadSplatData(splatIndex); + + float3 centerWorldPos = splat.pos; + centerWorldPos = mul(unity_ObjectToWorld, float4(centerWorldPos,1)).xyz; + + float4 centerClipPos = mul(UNITY_MATRIX_VP, float4(centerWorldPos, 1)); + + o.vertex = centerClipPos; + uint idx = vtxID; + float2 quadPos = float2(idx&1, (idx>>1)&1) * 2.0 - 1.0; + o.vertex.xy += (quadPos * _SplatSize / _ScreenParams.xy) * o.vertex.w; + + o.color.rgb = saturate(splat.sh.col); + if (_DisplayIndex) + { + o.color.r = frac((float)splatIndex / (float)_SplatCount * 100); + o.color.g = frac((float)splatIndex / (float)_SplatCount * 10); + o.color.b = (float)splatIndex / (float)_SplatCount; + } + return o; +} + +half4 frag (v2f i) : SV_Target +{ + return half4(i.color.rgb, 1); +} +ENDCG + } + } +} diff --git a/MVS/3DGS-Unity/Shaders/GaussianDebugRenderPoints.shader.meta b/MVS/3DGS-Unity/Shaders/GaussianDebugRenderPoints.shader.meta new file mode 100644 index 00000000..14d0e209 --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/GaussianDebugRenderPoints.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b44409fc67214394f8f47e4e2648425e +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Shaders/GaussianSplatting.hlsl b/MVS/3DGS-Unity/Shaders/GaussianSplatting.hlsl new file mode 100644 index 00000000..aed68855 --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/GaussianSplatting.hlsl @@ -0,0 +1,617 @@ +// SPDX-License-Identifier: MIT +#ifndef GAUSSIAN_SPLATTING_HLSL +#define GAUSSIAN_SPLATTING_HLSL + +float InvSquareCentered01(float x) +{ + x -= 0.5; + x *= 0.5; + x = sqrt(abs(x)) * sign(x); + return x + 0.5; +} + +float3 QuatRotateVector(float3 v, float4 r) +{ + float3 t = 2 * cross(r.xyz, v); + return v + r.w * t + cross(r.xyz, t); +} + +float4 QuatMul(float4 a, float4 b) +{ + return float4(a.wwww * b + (a.xyzx * b.wwwx + a.yzxy * b.zxyy) * float4(1,1,1,-1) - a.zxyz * b.yzxz); +} + +float4 QuatInverse(float4 q) +{ + return rcp(dot(q, q)) * q * float4(-1,-1,-1,1); +} + +float3x3 CalcMatrixFromRotationScale(float4 rot, float3 scale) +{ + float3x3 ms = float3x3( + scale.x, 0, 0, + 0, scale.y, 0, + 0, 0, scale.z + ); + float x = rot.x; + float y = rot.y; + float z = rot.z; + float w = rot.w; + float3x3 mr = float3x3( + 1-2*(y*y + z*z), 2*(x*y - w*z), 2*(x*z + w*y), + 2*(x*y + w*z), 1-2*(x*x + z*z), 2*(y*z - w*x), + 2*(x*z - w*y), 2*(y*z + w*x), 1-2*(x*x + y*y) + ); + return mul(mr, ms); +} + +void CalcCovariance3D(float3x3 rotMat, out float3 sigma0, out float3 sigma1) +{ + float3x3 sig = mul(rotMat, transpose(rotMat)); + sigma0 = float3(sig._m00, sig._m01, sig._m02); + sigma1 = float3(sig._m11, sig._m12, sig._m22); +} + +// from "EWA Splatting" (Zwicker et al 2002) eq. 31 +float3 CalcCovariance2D(float3 worldPos, float3 cov3d0, float3 cov3d1, float4x4 matrixV, float4x4 matrixP, float4 screenParams) +{ + float4x4 viewMatrix = matrixV; + float3 viewPos = mul(viewMatrix, float4(worldPos, 1)).xyz; + + // this is needed in order for splats that are visible in view but clipped "quite a lot" to work + float aspect = matrixP._m00 / matrixP._m11; + float tanFovX = rcp(matrixP._m00); + float tanFovY = rcp(matrixP._m11 * aspect); + float limX = 1.3 * tanFovX; + float limY = 1.3 * tanFovY; + viewPos.x = clamp(viewPos.x / viewPos.z, -limX, limX) * viewPos.z; + viewPos.y = clamp(viewPos.y / viewPos.z, -limY, limY) * viewPos.z; + + float focal = screenParams.x * matrixP._m00 / 2; + + float3x3 J = float3x3( + focal / viewPos.z, 0, -(focal * viewPos.x) / (viewPos.z * viewPos.z), + 0, focal / viewPos.z, -(focal * viewPos.y) / (viewPos.z * viewPos.z), + 0, 0, 0 + ); + float3x3 W = (float3x3)viewMatrix; + float3x3 T = mul(J, W); + float3x3 V = float3x3( + cov3d0.x, cov3d0.y, cov3d0.z, + cov3d0.y, cov3d1.x, cov3d1.y, + cov3d0.z, cov3d1.y, cov3d1.z + ); + float3x3 cov = mul(T, mul(V, transpose(T))); + + // Low pass filter to make each splat at least 1px size. + cov._m00 += 0.3; + cov._m11 += 0.3; + return float3(cov._m00, cov._m01, cov._m11); +} + +float3 CalcConic(float3 cov2d) +{ + float det = cov2d.x * cov2d.z - cov2d.y * cov2d.y; + return float3(cov2d.z, -cov2d.y, cov2d.x) * rcp(det); +} + +float2 CalcScreenSpaceDelta(float2 svPositionXY, float2 centerXY, float4 projectionParams) +{ + float2 d = svPositionXY - centerXY; + d.y *= projectionParams.x; + return d; +} + +float CalcPowerFromConic(float3 conic, float2 d) +{ + return -0.5 * (conic.x * d.x*d.x + conic.z * d.y*d.y) + conic.y * d.x*d.y; +} + +// Morton interleaving 16x16 group i.e. by 4 bits of coordinates, based on this thread: +// https://twitter.com/rygorous/status/986715358852608000 +// which is simplified version of https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/ +uint EncodeMorton2D_16x16(uint2 c) +{ + uint t = ((c.y & 0xF) << 8) | (c.x & 0xF); // ----EFGH----ABCD + t = (t ^ (t << 2)) & 0x3333; // --EF--GH--AB--CD + t = (t ^ (t << 1)) & 0x5555; // -E-F-G-H-A-B-C-D + return (t | (t >> 7)) & 0xFF; // --------EAFBGCHD +} +uint2 DecodeMorton2D_16x16(uint t) // --------EAFBGCHD +{ + t = (t & 0xFF) | ((t & 0xFE) << 7); // -EAFBGCHEAFBGCHD + t &= 0x5555; // -E-F-G-H-A-B-C-D + t = (t ^ (t >> 1)) & 0x3333; // --EF--GH--AB--CD + t = (t ^ (t >> 2)) & 0x0f0f; // ----EFGH----ABCD + return uint2(t & 0xF, t >> 8); // --------EFGHABCD +} + + +static const float SH_C1 = 0.4886025; +static const float SH_C2[] = { 1.0925484, -1.0925484, 0.3153916, -1.0925484, 0.5462742 }; +static const float SH_C3[] = { -0.5900436, 2.8906114, -0.4570458, 0.3731763, -0.4570458, 1.4453057, -0.5900436 }; + +struct SplatSHData +{ + half3 col, sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8, sh9, sh10, sh11, sh12, sh13, sh14, sh15; +}; + +half3 ShadeSH(SplatSHData splat, half3 dir, int shOrder, bool onlySH) +{ + dir *= -1; + + half x = dir.x, y = dir.y, z = dir.z; + + // ambient band + half3 res = splat.col; // col = sh0 * SH_C0 + 0.5 is already precomputed + if (onlySH) + res = 0.5; + // 1st degree + if (shOrder >= 1) + { + res += SH_C1 * (-splat.sh1 * y + splat.sh2 * z - splat.sh3 * x); + // 2nd degree + if (shOrder >= 2) + { + half xx = x * x, yy = y * y, zz = z * z; + half xy = x * y, yz = y * z, xz = x * z; + res += + (SH_C2[0] * xy) * splat.sh4 + + (SH_C2[1] * yz) * splat.sh5 + + (SH_C2[2] * (2 * zz - xx - yy)) * splat.sh6 + + (SH_C2[3] * xz) * splat.sh7 + + (SH_C2[4] * (xx - yy)) * splat.sh8; + // 3rd degree + if (shOrder >= 3) + { + res += + (SH_C3[0] * y * (3 * xx - yy)) * splat.sh9 + + (SH_C3[1] * xy * z) * splat.sh10 + + (SH_C3[2] * y * (4 * zz - xx - yy)) * splat.sh11 + + (SH_C3[3] * z * (2 * zz - 3 * xx - 3 * yy)) * splat.sh12 + + (SH_C3[4] * x * (4 * zz - xx - yy)) * splat.sh13 + + (SH_C3[5] * z * (xx - yy)) * splat.sh14 + + (SH_C3[6] * x * (xx - 3 * yy)) * splat.sh15; + } + } + } + return max(res, 0); +} + +static const uint kTexWidth = 2048; + +uint3 SplatIndexToPixelIndex(uint idx) +{ + uint3 res; + + uint2 xy = DecodeMorton2D_16x16(idx); + uint width = kTexWidth / 16; + idx >>= 8; + res.x = (idx % width) * 16 + xy.x; + res.y = (idx / width) * 16 + xy.y; + res.z = 0; + return res; +} + +struct SplatChunkInfo +{ + uint colR, colG, colB, colA; + float2 posX, posY, posZ; + uint sclX, sclY, sclZ; + uint shR, shG, shB; +}; + +StructuredBuffer _SplatChunks; +uint _SplatChunkCount; + +static const uint kChunkSize = 256; + +struct SplatData +{ + float3 pos; + float4 rot; + float3 scale; + half opacity; + SplatSHData sh; +}; + +// Decode quaternion from a "smallest 3" e.g. 10.10.10.2 format +float4 DecodeRotation(float4 pq) +{ + uint idx = (uint)round(pq.w * 3.0); // note: need to round or index might come out wrong in some formats (e.g. fp16.fp16.fp16.fp16) + float4 q; + q.xyz = pq.xyz * sqrt(2.0) - (1.0 / sqrt(2.0)); + q.w = sqrt(1.0 - saturate(dot(q.xyz, q.xyz))); + if (idx == 0) q = q.wxyz; + if (idx == 1) q = q.xwyz; + if (idx == 2) q = q.xywz; + return q; +} +float4 PackSmallest3Rotation(float4 q) +{ + // find biggest component + float4 absQ = abs(q); + int index = 0; + float maxV = absQ.x; + if (absQ.y > maxV) + { + index = 1; + maxV = absQ.y; + } + if (absQ.z > maxV) + { + index = 2; + maxV = absQ.z; + } + if (absQ.w > maxV) + { + index = 3; + maxV = absQ.w; + } + + if (index == 0) q = q.yzwx; + if (index == 1) q = q.xzwy; + if (index == 2) q = q.xywz; + + float3 three = q.xyz * (q.w >= 0 ? 1 : -1); // -1/sqrt2..+1/sqrt2 range + three = (three * sqrt(2.0)) * 0.5 + 0.5; // 0..1 range + return float4(three, index / 3.0); +} + +half3 DecodePacked_6_5_5(uint enc) +{ + return half3( + (enc & 63) / 63.0, + ((enc >> 6) & 31) / 31.0, + ((enc >> 11) & 31) / 31.0); +} + +half3 DecodePacked_5_6_5(uint enc) +{ + return half3( + (enc & 31) / 31.0, + ((enc >> 5) & 63) / 63.0, + ((enc >> 11) & 31) / 31.0); +} + +half3 DecodePacked_11_10_11(uint enc) +{ + return half3( + (enc & 2047) / 2047.0, + ((enc >> 11) & 1023) / 1023.0, + ((enc >> 21) & 2047) / 2047.0); +} + +float3 DecodePacked_16_16_16(uint2 enc) +{ + return float3( + (enc.x & 65535) / 65535.0, + ((enc.x >> 16) & 65535) / 65535.0, + (enc.y & 65535) / 65535.0); +} + +float4 DecodePacked_10_10_10_2(uint enc) +{ + return float4( + (enc & 1023) / 1023.0, + ((enc >> 10) & 1023) / 1023.0, + ((enc >> 20) & 1023) / 1023.0, + ((enc >> 30) & 3) / 3.0); +} +uint EncodeQuatToNorm10(float4 v) // 32 bits: 10.10.10.2 +{ + return (uint) (v.x * 1023.5f) | ((uint) (v.y * 1023.5f) << 10) | ((uint) (v.z * 1023.5f) << 20) | ((uint) (v.w * 3.5f) << 30); +} + + +#ifdef SHADER_STAGE_COMPUTE +#define SplatBufferDataType RWByteAddressBuffer +#else +#define SplatBufferDataType ByteAddressBuffer +#endif + +SplatBufferDataType _SplatPos; +SplatBufferDataType _SplatOther; +SplatBufferDataType _SplatSH; +Texture2D _SplatColor; +uint _SplatFormat; + +// Match GaussianSplatAsset.VectorFormat +#define VECTOR_FMT_32F 0 +#define VECTOR_FMT_16 1 +#define VECTOR_FMT_11 2 +#define VECTOR_FMT_6 3 + +uint LoadUShort(SplatBufferDataType dataBuffer, uint addrU) +{ + uint addrA = addrU & ~0x3; + uint val = dataBuffer.Load(addrA); + if (addrU != addrA) + val >>= 16; + return val & 0xFFFF; +} + +uint LoadUInt(SplatBufferDataType dataBuffer, uint addrU) +{ + uint addrA = addrU & ~0x3; + uint val = dataBuffer.Load(addrA); + if (addrU != addrA) + { + uint val1 = dataBuffer.Load(addrA + 4); + val = (val >> 16) | ((val1 & 0xFFFF) << 16); + } + return val; +} + +float3 LoadAndDecodeVector(SplatBufferDataType dataBuffer, uint addrU, uint fmt) +{ + uint addrA = addrU & ~0x3; + + uint val0 = dataBuffer.Load(addrA); + + float3 res = 0; + if (fmt == VECTOR_FMT_32F) + { + uint val1 = dataBuffer.Load(addrA + 4); + uint val2 = dataBuffer.Load(addrA + 8); + if (addrU != addrA) + { + uint val3 = dataBuffer.Load(addrA + 12); + val0 = (val0 >> 16) | ((val1 & 0xFFFF) << 16); + val1 = (val1 >> 16) | ((val2 & 0xFFFF) << 16); + val2 = (val2 >> 16) | ((val3 & 0xFFFF) << 16); + } + res = float3(asfloat(val0), asfloat(val1), asfloat(val2)); + } + else if (fmt == VECTOR_FMT_16) + { + uint val1 = dataBuffer.Load(addrA + 4); + if (addrU != addrA) + { + val0 = (val0 >> 16) | ((val1 & 0xFFFF) << 16); + val1 >>= 16; + } + res = DecodePacked_16_16_16(uint2(val0, val1)); + } + else if (fmt == VECTOR_FMT_11) + { + uint val1 = dataBuffer.Load(addrA + 4); + if (addrU != addrA) + { + val0 = (val0 >> 16) | ((val1 & 0xFFFF) << 16); + } + res = DecodePacked_11_10_11(val0); + } + else if (fmt == VECTOR_FMT_6) + { + if (addrU != addrA) + val0 >>= 16; + res = DecodePacked_6_5_5(val0); + } + return res; +} + +float3 LoadSplatPosValue(uint index) +{ + uint fmt = _SplatFormat & 0xFF; + uint stride = 0; + if (fmt == VECTOR_FMT_32F) + stride = 12; + else if (fmt == VECTOR_FMT_16) + stride = 6; + else if (fmt == VECTOR_FMT_11) + stride = 4; + else if (fmt == VECTOR_FMT_6) + stride = 2; + return LoadAndDecodeVector(_SplatPos, index * stride, fmt); +} + +float3 LoadSplatPos(uint idx) +{ + float3 pos = LoadSplatPosValue(idx); + uint chunkIdx = idx / kChunkSize; + if (chunkIdx < _SplatChunkCount) + { + SplatChunkInfo chunk = _SplatChunks[chunkIdx]; + float3 posMin = float3(chunk.posX.x, chunk.posY.x, chunk.posZ.x); + float3 posMax = float3(chunk.posX.y, chunk.posY.y, chunk.posZ.y); + pos = lerp(posMin, posMax, pos); + } + return pos; +} + +half4 LoadSplatColTex(uint3 coord) +{ + return _SplatColor.Load(coord); +} + +SplatData LoadSplatData(uint idx) +{ + SplatData s = (SplatData)0; + + // figure out raw data offsets / locations + uint3 coord = SplatIndexToPixelIndex(idx); + + uint scaleFmt = (_SplatFormat >> 8) & 0xFF; + uint shFormat = (_SplatFormat >> 16) & 0xFF; + + uint otherStride = 4; // rotation is 10.10.10.2 + if (scaleFmt == VECTOR_FMT_32F) + otherStride += 12; + else if (scaleFmt == VECTOR_FMT_16) + otherStride += 6; + else if (scaleFmt == VECTOR_FMT_11) + otherStride += 4; + else if (scaleFmt == VECTOR_FMT_6) + otherStride += 2; + if (shFormat > VECTOR_FMT_6) + otherStride += 2; + uint otherAddr = idx * otherStride; + + uint shStride = 0; + if (shFormat == VECTOR_FMT_32F) + shStride = 192; // 15*3 fp32, rounded up to multiple of 16 + else if (shFormat == VECTOR_FMT_16 || shFormat > VECTOR_FMT_6) + shStride = 96; // 15*3 fp16, rounded up to multiple of 16 + else if (shFormat == VECTOR_FMT_11) + shStride = 60; // 15x uint + else if (shFormat == VECTOR_FMT_6) + shStride = 32; // 15x ushort, rounded up to multiple of 4 + + + // load raw splat data, which might be chunk-relative + s.pos = LoadSplatPosValue(idx); + s.rot = DecodeRotation(DecodePacked_10_10_10_2(LoadUInt(_SplatOther, otherAddr))); + s.scale = LoadAndDecodeVector(_SplatOther, otherAddr + 4, scaleFmt); + half4 col = LoadSplatColTex(coord); + + uint shIndex = idx; + if (shFormat > VECTOR_FMT_6) + shIndex = LoadUShort(_SplatOther, otherAddr + otherStride - 2); + + uint shOffset = shIndex * shStride; + uint4 shRaw0 = _SplatSH.Load4(shOffset); + uint4 shRaw1 = _SplatSH.Load4(shOffset + 16); + if (shFormat == VECTOR_FMT_32F) + { + uint4 shRaw2 = _SplatSH.Load4(shOffset + 32); + uint4 shRaw3 = _SplatSH.Load4(shOffset + 48); + uint4 shRaw4 = _SplatSH.Load4(shOffset + 64); + uint4 shRaw5 = _SplatSH.Load4(shOffset + 80); + uint4 shRaw6 = _SplatSH.Load4(shOffset + 96); + uint4 shRaw7 = _SplatSH.Load4(shOffset + 112); + uint4 shRaw8 = _SplatSH.Load4(shOffset + 128); + uint4 shRaw9 = _SplatSH.Load4(shOffset + 144); + uint4 shRawA = _SplatSH.Load4(shOffset + 160); + uint shRawB = _SplatSH.Load(shOffset + 176); + s.sh.sh1.r = asfloat(shRaw0.x); s.sh.sh1.g = asfloat(shRaw0.y); s.sh.sh1.b = asfloat(shRaw0.z); + s.sh.sh2.r = asfloat(shRaw0.w); s.sh.sh2.g = asfloat(shRaw1.x); s.sh.sh2.b = asfloat(shRaw1.y); + s.sh.sh3.r = asfloat(shRaw1.z); s.sh.sh3.g = asfloat(shRaw1.w); s.sh.sh3.b = asfloat(shRaw2.x); + s.sh.sh4.r = asfloat(shRaw2.y); s.sh.sh4.g = asfloat(shRaw2.z); s.sh.sh4.b = asfloat(shRaw2.w); + s.sh.sh5.r = asfloat(shRaw3.x); s.sh.sh5.g = asfloat(shRaw3.y); s.sh.sh5.b = asfloat(shRaw3.z); + s.sh.sh6.r = asfloat(shRaw3.w); s.sh.sh6.g = asfloat(shRaw4.x); s.sh.sh6.b = asfloat(shRaw4.y); + s.sh.sh7.r = asfloat(shRaw4.z); s.sh.sh7.g = asfloat(shRaw4.w); s.sh.sh7.b = asfloat(shRaw5.x); + s.sh.sh8.r = asfloat(shRaw5.y); s.sh.sh8.g = asfloat(shRaw5.z); s.sh.sh8.b = asfloat(shRaw5.w); + s.sh.sh9.r = asfloat(shRaw6.x); s.sh.sh9.g = asfloat(shRaw6.y); s.sh.sh9.b = asfloat(shRaw6.z); + s.sh.sh10.r = asfloat(shRaw6.w); s.sh.sh10.g = asfloat(shRaw7.x); s.sh.sh10.b = asfloat(shRaw7.y); + s.sh.sh11.r = asfloat(shRaw7.z); s.sh.sh11.g = asfloat(shRaw7.w); s.sh.sh11.b = asfloat(shRaw8.x); + s.sh.sh12.r = asfloat(shRaw8.y); s.sh.sh12.g = asfloat(shRaw8.z); s.sh.sh12.b = asfloat(shRaw8.w); + s.sh.sh13.r = asfloat(shRaw9.x); s.sh.sh13.g = asfloat(shRaw9.y); s.sh.sh13.b = asfloat(shRaw9.z); + s.sh.sh14.r = asfloat(shRaw9.w); s.sh.sh14.g = asfloat(shRawA.x); s.sh.sh14.b = asfloat(shRawA.y); + s.sh.sh15.r = asfloat(shRawA.z); s.sh.sh15.g = asfloat(shRawA.w); s.sh.sh15.b = asfloat(shRawB); + } + else if (shFormat == VECTOR_FMT_16 || shFormat > VECTOR_FMT_6) + { + uint4 shRaw2 = _SplatSH.Load4(shOffset + 32); + uint4 shRaw3 = _SplatSH.Load4(shOffset + 48); + uint4 shRaw4 = _SplatSH.Load4(shOffset + 64); + uint3 shRaw5 = _SplatSH.Load3(shOffset + 80); + s.sh.sh1.r = f16tof32(shRaw0.x ); s.sh.sh1.g = f16tof32(shRaw0.x >> 16); s.sh.sh1.b = f16tof32(shRaw0.y ); + s.sh.sh2.r = f16tof32(shRaw0.y >> 16); s.sh.sh2.g = f16tof32(shRaw0.z ); s.sh.sh2.b = f16tof32(shRaw0.z >> 16); + s.sh.sh3.r = f16tof32(shRaw0.w ); s.sh.sh3.g = f16tof32(shRaw0.w >> 16); s.sh.sh3.b = f16tof32(shRaw1.x ); + s.sh.sh4.r = f16tof32(shRaw1.x >> 16); s.sh.sh4.g = f16tof32(shRaw1.y ); s.sh.sh4.b = f16tof32(shRaw1.y >> 16); + s.sh.sh5.r = f16tof32(shRaw1.z ); s.sh.sh5.g = f16tof32(shRaw1.z >> 16); s.sh.sh5.b = f16tof32(shRaw1.w ); + s.sh.sh6.r = f16tof32(shRaw1.w >> 16); s.sh.sh6.g = f16tof32(shRaw2.x ); s.sh.sh6.b = f16tof32(shRaw2.x >> 16); + s.sh.sh7.r = f16tof32(shRaw2.y ); s.sh.sh7.g = f16tof32(shRaw2.y >> 16); s.sh.sh7.b = f16tof32(shRaw2.z ); + s.sh.sh8.r = f16tof32(shRaw2.z >> 16); s.sh.sh8.g = f16tof32(shRaw2.w ); s.sh.sh8.b = f16tof32(shRaw2.w >> 16); + s.sh.sh9.r = f16tof32(shRaw3.x ); s.sh.sh9.g = f16tof32(shRaw3.x >> 16); s.sh.sh9.b = f16tof32(shRaw3.y ); + s.sh.sh10.r = f16tof32(shRaw3.y >> 16); s.sh.sh10.g = f16tof32(shRaw3.z ); s.sh.sh10.b = f16tof32(shRaw3.z >> 16); + s.sh.sh11.r = f16tof32(shRaw3.w ); s.sh.sh11.g = f16tof32(shRaw3.w >> 16); s.sh.sh11.b = f16tof32(shRaw4.x ); + s.sh.sh12.r = f16tof32(shRaw4.x >> 16); s.sh.sh12.g = f16tof32(shRaw4.y ); s.sh.sh12.b = f16tof32(shRaw4.y >> 16); + s.sh.sh13.r = f16tof32(shRaw4.z ); s.sh.sh13.g = f16tof32(shRaw4.z >> 16); s.sh.sh13.b = f16tof32(shRaw4.w ); + s.sh.sh14.r = f16tof32(shRaw4.w >> 16); s.sh.sh14.g = f16tof32(shRaw5.x ); s.sh.sh14.b = f16tof32(shRaw5.x >> 16); + s.sh.sh15.r = f16tof32(shRaw5.y ); s.sh.sh15.g = f16tof32(shRaw5.y >> 16); s.sh.sh15.b = f16tof32(shRaw5.z ); + } + else if (shFormat == VECTOR_FMT_11) + { + uint4 shRaw2 = _SplatSH.Load4(shOffset + 32); + uint3 shRaw3 = _SplatSH.Load3(shOffset + 48); + s.sh.sh1 = DecodePacked_11_10_11(shRaw0.x); + s.sh.sh2 = DecodePacked_11_10_11(shRaw0.y); + s.sh.sh3 = DecodePacked_11_10_11(shRaw0.z); + s.sh.sh4 = DecodePacked_11_10_11(shRaw0.w); + s.sh.sh5 = DecodePacked_11_10_11(shRaw1.x); + s.sh.sh6 = DecodePacked_11_10_11(shRaw1.y); + s.sh.sh7 = DecodePacked_11_10_11(shRaw1.z); + s.sh.sh8 = DecodePacked_11_10_11(shRaw1.w); + s.sh.sh9 = DecodePacked_11_10_11(shRaw2.x); + s.sh.sh10 = DecodePacked_11_10_11(shRaw2.y); + s.sh.sh11 = DecodePacked_11_10_11(shRaw2.z); + s.sh.sh12 = DecodePacked_11_10_11(shRaw2.w); + s.sh.sh13 = DecodePacked_11_10_11(shRaw3.x); + s.sh.sh14 = DecodePacked_11_10_11(shRaw3.y); + s.sh.sh15 = DecodePacked_11_10_11(shRaw3.z); + } + else if (shFormat == VECTOR_FMT_6) + { + s.sh.sh1 = DecodePacked_5_6_5(shRaw0.x); + s.sh.sh2 = DecodePacked_5_6_5(shRaw0.x >> 16); + s.sh.sh3 = DecodePacked_5_6_5(shRaw0.y); + s.sh.sh4 = DecodePacked_5_6_5(shRaw0.y >> 16); + s.sh.sh5 = DecodePacked_5_6_5(shRaw0.z); + s.sh.sh6 = DecodePacked_5_6_5(shRaw0.z >> 16); + s.sh.sh7 = DecodePacked_5_6_5(shRaw0.w); + s.sh.sh8 = DecodePacked_5_6_5(shRaw0.w >> 16); + s.sh.sh9 = DecodePacked_5_6_5(shRaw1.x); + s.sh.sh10 = DecodePacked_5_6_5(shRaw1.x >> 16); + s.sh.sh11 = DecodePacked_5_6_5(shRaw1.y); + s.sh.sh12 = DecodePacked_5_6_5(shRaw1.y >> 16); + s.sh.sh13 = DecodePacked_5_6_5(shRaw1.z); + s.sh.sh14 = DecodePacked_5_6_5(shRaw1.z >> 16); + s.sh.sh15 = DecodePacked_5_6_5(shRaw1.w); + } + + // if raw data is chunk-relative, convert to final values by interpolating between chunk min/max + uint chunkIdx = idx / kChunkSize; + if (chunkIdx < _SplatChunkCount) + { + SplatChunkInfo chunk = _SplatChunks[chunkIdx]; + float3 posMin = float3(chunk.posX.x, chunk.posY.x, chunk.posZ.x); + float3 posMax = float3(chunk.posX.y, chunk.posY.y, chunk.posZ.y); + half3 sclMin = half3(f16tof32(chunk.sclX ), f16tof32(chunk.sclY ), f16tof32(chunk.sclZ )); + half3 sclMax = half3(f16tof32(chunk.sclX>>16), f16tof32(chunk.sclY>>16), f16tof32(chunk.sclZ>>16)); + half4 colMin = half4(f16tof32(chunk.colR ), f16tof32(chunk.colG ), f16tof32(chunk.colB ), f16tof32(chunk.colA )); + half4 colMax = half4(f16tof32(chunk.colR>>16), f16tof32(chunk.colG>>16), f16tof32(chunk.colB>>16), f16tof32(chunk.colA>>16)); + half3 shMin = half3(f16tof32(chunk.shR ), f16tof32(chunk.shG ), f16tof32(chunk.shB )); + half3 shMax = half3(f16tof32(chunk.shR>>16), f16tof32(chunk.shG>>16), f16tof32(chunk.shB>>16)); + s.pos = lerp(posMin, posMax, s.pos); + s.scale = lerp(sclMin, sclMax, s.scale); + s.scale *= s.scale; + s.scale *= s.scale; + s.scale *= s.scale; + col = lerp(colMin, colMax, col); + col.a = InvSquareCentered01(col.a); + + if (shFormat > VECTOR_FMT_32F && shFormat <= VECTOR_FMT_6) + { + s.sh.sh1 = lerp(shMin, shMax, s.sh.sh1 ); + s.sh.sh2 = lerp(shMin, shMax, s.sh.sh2 ); + s.sh.sh3 = lerp(shMin, shMax, s.sh.sh3 ); + s.sh.sh4 = lerp(shMin, shMax, s.sh.sh4 ); + s.sh.sh5 = lerp(shMin, shMax, s.sh.sh5 ); + s.sh.sh6 = lerp(shMin, shMax, s.sh.sh6 ); + s.sh.sh7 = lerp(shMin, shMax, s.sh.sh7 ); + s.sh.sh8 = lerp(shMin, shMax, s.sh.sh8 ); + s.sh.sh9 = lerp(shMin, shMax, s.sh.sh9 ); + s.sh.sh10 = lerp(shMin, shMax, s.sh.sh10); + s.sh.sh11 = lerp(shMin, shMax, s.sh.sh11); + s.sh.sh12 = lerp(shMin, shMax, s.sh.sh12); + s.sh.sh13 = lerp(shMin, shMax, s.sh.sh13); + s.sh.sh14 = lerp(shMin, shMax, s.sh.sh14); + s.sh.sh15 = lerp(shMin, shMax, s.sh.sh15); + } + } + s.opacity = col.a; + s.sh.col = col.rgb; + + return s; +} + +struct SplatViewData +{ + float4 pos; + float2 axis1, axis2; + uint2 color; // 4xFP16 +}; + +#endif // GAUSSIAN_SPLATTING_HLSL diff --git a/MVS/3DGS-Unity/Shaders/GaussianSplatting.hlsl.meta b/MVS/3DGS-Unity/Shaders/GaussianSplatting.hlsl.meta new file mode 100644 index 00000000..74dba65d --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/GaussianSplatting.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d4087e54957693c48a7be32de91c99e2 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Shaders/RenderGaussianSplats.shader b/MVS/3DGS-Unity/Shaders/RenderGaussianSplats.shader new file mode 100644 index 00000000..42dd5229 --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/RenderGaussianSplats.shader @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: MIT +Shader "Gaussian Splatting/Render Splats" +{ + SubShader + { + Tags { "RenderType"="Transparent" "Queue"="Transparent" } + + Pass + { + ZWrite Off + Blend OneMinusDstAlpha One + Cull Off + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma require compute +#pragma use_dxc + +#include "GaussianSplatting.hlsl" + +StructuredBuffer _OrderBuffer; + +struct v2f +{ + half4 col : COLOR0; + float2 pos : TEXCOORD0; + float4 vertex : SV_POSITION; +}; + +StructuredBuffer _SplatViewData; +ByteAddressBuffer _SplatSelectedBits; +uint _SplatBitsValid; + +v2f vert (uint vtxID : SV_VertexID, uint instID : SV_InstanceID) +{ + v2f o = (v2f)0; + instID = _OrderBuffer[instID]; + SplatViewData view = _SplatViewData[instID]; + float4 centerClipPos = view.pos; + bool behindCam = centerClipPos.w <= 0; + if (behindCam) + { + o.vertex = asfloat(0x7fc00000); // NaN discards the primitive + } + else + { + o.col.r = f16tof32(view.color.x >> 16); + o.col.g = f16tof32(view.color.x); + o.col.b = f16tof32(view.color.y >> 16); + o.col.a = f16tof32(view.color.y); + + uint idx = vtxID; + float2 quadPos = float2(idx&1, (idx>>1)&1) * 2.0 - 1.0; + quadPos *= 2; + + o.pos = quadPos; + + float2 deltaScreenPos = (quadPos.x * view.axis1 + quadPos.y * view.axis2) * 2 / _ScreenParams.xy; + o.vertex = centerClipPos; + o.vertex.xy += deltaScreenPos * centerClipPos.w; + + // is this splat selected? + if (_SplatBitsValid) + { + uint wordIdx = instID / 32; + uint bitIdx = instID & 31; + uint selVal = _SplatSelectedBits.Load(wordIdx * 4); + if (selVal & (1 << bitIdx)) + { + o.col.a = -1; + } + } + } + return o; +} + +half4 frag (v2f i) : SV_Target +{ + float power = -dot(i.pos, i.pos); + half alpha = exp(power); + if (i.col.a >= 0) + { + alpha = saturate(alpha * i.col.a); + } + else + { + // "selected" splat: magenta outline, increase opacity, magenta tint + half3 selectedColor = half3(1,0,1); + if (alpha > 7.0/255.0) + { + if (alpha < 10.0/255.0) + { + alpha = 1; + i.col.rgb = selectedColor; + } + alpha = saturate(alpha + 0.3); + } + i.col.rgb = lerp(i.col.rgb, selectedColor, 0.5); + } + + if (alpha < 1.0/255.0) + discard; + + half4 res = half4(i.col.rgb * alpha, alpha); + return res; +} +ENDCG + } + } +} diff --git a/MVS/3DGS-Unity/Shaders/RenderGaussianSplats.shader.meta b/MVS/3DGS-Unity/Shaders/RenderGaussianSplats.shader.meta new file mode 100644 index 00000000..044aa0f2 --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/RenderGaussianSplats.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ed800126ae8844a67aad1974ddddd59c +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Shaders/SortCommon.hlsl b/MVS/3DGS-Unity/Shaders/SortCommon.hlsl new file mode 100644 index 00000000..bdc18b9c --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/SortCommon.hlsl @@ -0,0 +1,959 @@ +/****************************************************************************** + * SortCommon + * Common functions for GPUSorting + * + * SPDX-License-Identifier: MIT + * Copyright Thomas Smith 5/17/2024 + * https://github.com/b0nes164/GPUSorting + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ +#define KEYS_PER_THREAD 15U +#define D_DIM 256U +#define PART_SIZE 3840U +#define D_TOTAL_SMEM 4096U + +#define RADIX 256U //Number of digit bins +#define RADIX_MASK 255U //Mask of digit bins +#define HALF_RADIX 128U //For smaller waves where bit packing is necessary +#define HALF_MASK 127U // '' +#define RADIX_LOG 8U //log2(RADIX) +#define RADIX_PASSES 4U //(Key width) / RADIX_LOG + +cbuffer cbGpuSorting : register(b0) +{ + uint e_numKeys; + uint e_radixShift; + uint e_threadBlocks; + uint padding; +}; + +#if defined(KEY_UINT) +RWStructuredBuffer b_sort; +RWStructuredBuffer b_alt; +#elif defined(KEY_INT) +RWStructuredBuffer b_sort; +RWStructuredBuffer b_alt; +#elif defined(KEY_FLOAT) +RWStructuredBuffer b_sort; +RWStructuredBuffer b_alt; +#endif + +#if defined(PAYLOAD_UINT) +RWStructuredBuffer b_sortPayload; +RWStructuredBuffer b_altPayload; +#elif defined(PAYLOAD_INT) +RWStructuredBuffer b_sortPayload; +RWStructuredBuffer b_altPayload; +#elif defined(PAYLOAD_FLOAT) +RWStructuredBuffer b_sortPayload; +RWStructuredBuffer b_altPayload; +#endif + +groupshared uint g_d[D_TOTAL_SMEM]; //Shared memory for DigitBinningPass and DownSweep kernels + +struct KeyStruct +{ + uint k[KEYS_PER_THREAD]; +}; + +struct OffsetStruct +{ +#if defined(ENABLE_16_BIT) + uint16_t o[KEYS_PER_THREAD]; +#else + uint o[KEYS_PER_THREAD]; +#endif +}; + +struct DigitStruct +{ +#if defined(ENABLE_16_BIT) + uint16_t d[KEYS_PER_THREAD]; +#else + uint d[KEYS_PER_THREAD]; +#endif +}; + +//***************************************************************************** +//HELPER FUNCTIONS +//***************************************************************************** +//Due to a bug with SPIRV pre 1.6, we cannot use WaveGetLaneCount() to get the currently active wavesize +inline uint getWaveSize() +{ +#if defined(VULKAN) + GroupMemoryBarrierWithGroupSync(); //Make absolutely sure the wave is not diverged here + return dot(countbits(WaveActiveBallot(true)), uint4(1, 1, 1, 1)); +#else + return WaveGetLaneCount(); +#endif +} + +inline uint getWaveIndex(uint gtid, uint waveSize) +{ + return gtid / waveSize; +} + +//Radix Tricks by Michael Herf +//http://stereopsis.com/radix.html +inline uint FloatToUint(float f) +{ + uint mask = -((int) (asuint(f) >> 31)) | 0x80000000; + return asuint(f) ^ mask; +} + +inline float UintToFloat(uint u) +{ + uint mask = ((u >> 31) - 1) | 0x80000000; + return asfloat(u ^ mask); +} + +inline uint IntToUint(int i) +{ + return asuint(i ^ 0x80000000); +} + +inline int UintToInt(uint u) +{ + return asint(u ^ 0x80000000); +} + +inline uint getWaveCountPass(uint waveSize) +{ + return D_DIM / waveSize; +} + +inline uint ExtractDigit(uint key) +{ + return key >> e_radixShift & RADIX_MASK; +} + +inline uint ExtractDigit(uint key, uint shift) +{ + return key >> shift & RADIX_MASK; +} + +inline uint ExtractPackedIndex(uint key) +{ + return key >> (e_radixShift + 1) & HALF_MASK; +} + +inline uint ExtractPackedShift(uint key) +{ + return (key >> e_radixShift & 1) ? 16 : 0; +} + +inline uint ExtractPackedValue(uint packed, uint key) +{ + return packed >> ExtractPackedShift(key) & 0xffff; +} + +inline uint SubPartSizeWGE16(uint waveSize) +{ + return KEYS_PER_THREAD * waveSize; +} + +inline uint SharedOffsetWGE16(uint gtid, uint waveSize) +{ + return WaveGetLaneIndex() + getWaveIndex(gtid, waveSize) * SubPartSizeWGE16(waveSize); +} + +inline uint SubPartSizeWLT16(uint waveSize, uint _serialIterations) +{ + return KEYS_PER_THREAD * waveSize * _serialIterations; +} + +inline uint SharedOffsetWLT16(uint gtid, uint waveSize, uint _serialIterations) +{ + return WaveGetLaneIndex() + + (getWaveIndex(gtid, waveSize) / _serialIterations * SubPartSizeWLT16(waveSize, _serialIterations)) + + (getWaveIndex(gtid, waveSize) % _serialIterations * waveSize); +} + +inline uint DeviceOffsetWGE16(uint gtid, uint waveSize, uint partIndex) +{ + return SharedOffsetWGE16(gtid, waveSize) + partIndex * PART_SIZE; +} + +inline uint DeviceOffsetWLT16(uint gtid, uint waveSize, uint partIndex, uint serialIterations) +{ + return SharedOffsetWLT16(gtid, waveSize, serialIterations) + partIndex * PART_SIZE; +} + +inline uint GlobalHistOffset() +{ + return e_radixShift << 5; +} + +inline uint WaveHistsSizeWGE16(uint waveSize) +{ + return D_DIM / waveSize * RADIX; +} + +inline uint WaveHistsSizeWLT16() +{ + return D_TOTAL_SMEM; +} + +//***************************************************************************** +//FUNCTIONS COMMON TO THE DOWNSWEEP / DIGIT BINNING PASS +//***************************************************************************** +//If the size of a wave is too small, we do not have enough space in +//shared memory to assign a histogram to each wave, so instead, +//some operations are peformed serially. +inline uint SerialIterations(uint waveSize) +{ + return (D_DIM / waveSize + 31) >> 5; +} + +inline void ClearWaveHists(uint gtid, uint waveSize) +{ + const uint histsEnd = waveSize >= 16 ? + WaveHistsSizeWGE16(waveSize) : WaveHistsSizeWLT16(); + for (uint i = gtid; i < histsEnd; i += D_DIM) + g_d[i] = 0; +} + +inline void LoadKey(inout uint key, uint index) +{ +#if defined(KEY_UINT) + key = b_sort[index]; +#elif defined(KEY_INT) + key = UintToInt(b_sort[index]); +#elif defined(KEY_FLOAT) + key = FloatToUint(b_sort[index]); +#endif +} + +inline void LoadDummyKey(inout uint key) +{ + key = 0xffffffff; +} + +inline KeyStruct LoadKeysWGE16(uint gtid, uint waveSize, uint partIndex) +{ + KeyStruct keys; + [unroll] + for (uint i = 0, t = DeviceOffsetWGE16(gtid, waveSize, partIndex); + i < KEYS_PER_THREAD; + ++i, t += waveSize) + { + LoadKey(keys.k[i], t); + } + return keys; +} + +inline KeyStruct LoadKeysWLT16(uint gtid, uint waveSize, uint partIndex, uint serialIterations) +{ + KeyStruct keys; + [unroll] + for (uint i = 0, t = DeviceOffsetWLT16(gtid, waveSize, partIndex, serialIterations); + i < KEYS_PER_THREAD; + ++i, t += waveSize * serialIterations) + { + LoadKey(keys.k[i], t); + } + return keys; +} + +inline KeyStruct LoadKeysPartialWGE16(uint gtid, uint waveSize, uint partIndex) +{ + KeyStruct keys; + [unroll] + for (uint i = 0, t = DeviceOffsetWGE16(gtid, waveSize, partIndex); + i < KEYS_PER_THREAD; + ++i, t += waveSize) + { + if (t < e_numKeys) + LoadKey(keys.k[i], t); + else + LoadDummyKey(keys.k[i]); + } + return keys; +} + +inline KeyStruct LoadKeysPartialWLT16(uint gtid, uint waveSize, uint partIndex, uint serialIterations) +{ + KeyStruct keys; + [unroll] + for (uint i = 0, t = DeviceOffsetWLT16(gtid, waveSize, partIndex, serialIterations); + i < KEYS_PER_THREAD; + ++i, t += waveSize * serialIterations) + { + if (t < e_numKeys) + LoadKey(keys.k[i], t); + else + LoadDummyKey(keys.k[i]); + } + return keys; +} + +inline uint WaveFlagsWGE16(uint waveSize) +{ + return (waveSize & 31) ? (1U << waveSize) - 1 : 0xffffffff; +} + +inline uint WaveFlagsWLT16(uint waveSize) +{ + return (1U << waveSize) - 1;; +} + +inline void WarpLevelMultiSplitWGE16(uint key, inout uint4 waveFlags) +{ + [unroll] + for (uint k = 0; k < RADIX_LOG; ++k) + { + const uint currentBit = 1 << k + e_radixShift; + const bool t = (key & currentBit) != 0; + GroupMemoryBarrierWithGroupSync(); //Play on the safe side, throw in a barrier for convergence + const uint4 ballot = WaveActiveBallot(t); + if(t) + waveFlags &= ballot; + else + waveFlags &= (~ballot); + } +} + +inline uint2 CountBitsWGE16(uint waveSize, uint ltMask, uint4 waveFlags) +{ + uint2 count = uint2(0, 0); + + for(uint wavePart = 0; wavePart < waveSize; wavePart += 32) + { + uint t = countbits(waveFlags[wavePart >> 5]); + if (WaveGetLaneIndex() >= wavePart) + { + if (WaveGetLaneIndex() >= wavePart + 32) + count.x += t; + else + count.x += countbits(waveFlags[wavePart >> 5] & ltMask); + } + count.y += t; + } + + return count; +} + +inline void WarpLevelMultiSplitWLT16(uint key, inout uint waveFlags) +{ + [unroll] + for (uint k = 0; k < RADIX_LOG; ++k) + { + const bool t = key >> (k + e_radixShift) & 1; + waveFlags &= (t ? 0 : 0xffffffff) ^ (uint) WaveActiveBallot(t); + } +} + +inline OffsetStruct RankKeysWGE16( + uint waveSize, + uint waveOffset, + KeyStruct keys) +{ + OffsetStruct offsets; + const uint initialFlags = WaveFlagsWGE16(waveSize); + const uint ltMask = (1U << (WaveGetLaneIndex() & 31)) - 1; + + [unroll] + for (uint i = 0; i < KEYS_PER_THREAD; ++i) + { + uint4 waveFlags = initialFlags; + WarpLevelMultiSplitWGE16(keys.k[i], waveFlags); + + const uint index = ExtractDigit(keys.k[i]) + waveOffset; + const uint2 bitCount = CountBitsWGE16(waveSize, ltMask, waveFlags); + + offsets.o[i] = g_d[index] + bitCount.x; + GroupMemoryBarrierWithGroupSync(); + if (bitCount.x == 0) + g_d[index] += bitCount.y; + GroupMemoryBarrierWithGroupSync(); + } + + return offsets; +} + +inline OffsetStruct RankKeysWLT16(uint waveSize, uint waveIndex, KeyStruct keys, uint serialIterations) +{ + OffsetStruct offsets; + const uint ltMask = (1U << WaveGetLaneIndex()) - 1; + const uint initialFlags = WaveFlagsWLT16(waveSize); + + [unroll] + for (uint i = 0; i < KEYS_PER_THREAD; ++i) + { + uint waveFlags = initialFlags; + WarpLevelMultiSplitWLT16(keys.k[i], waveFlags); + + const uint index = ExtractPackedIndex(keys.k[i]) + + (waveIndex / serialIterations * HALF_RADIX); + + const uint peerBits = countbits(waveFlags & ltMask); + for (uint k = 0; k < serialIterations; ++k) + { + if (waveIndex % serialIterations == k) + offsets.o[i] = ExtractPackedValue(g_d[index], keys.k[i]) + peerBits; + + GroupMemoryBarrierWithGroupSync(); + if (waveIndex % serialIterations == k && peerBits == 0) + { + InterlockedAdd(g_d[index], + countbits(waveFlags) << ExtractPackedShift(keys.k[i])); + } + GroupMemoryBarrierWithGroupSync(); + } + } + + return offsets; +} + +inline uint WaveHistInclusiveScanCircularShiftWGE16(uint gtid, uint waveSize) +{ + uint histReduction = g_d[gtid]; + for (uint i = gtid + RADIX; i < WaveHistsSizeWGE16(waveSize); i += RADIX) + { + histReduction += g_d[i]; + g_d[i] = histReduction - g_d[i]; + } + return histReduction; +} + +inline uint WaveHistInclusiveScanCircularShiftWLT16(uint gtid) +{ + uint histReduction = g_d[gtid]; + for (uint i = gtid + HALF_RADIX; i < WaveHistsSizeWLT16(); i += HALF_RADIX) + { + histReduction += g_d[i]; + g_d[i] = histReduction - g_d[i]; + } + return histReduction; +} + +inline void WaveHistReductionExclusiveScanWGE16(uint gtid, uint waveSize, uint histReduction) +{ + if (gtid < RADIX) + { + const uint laneMask = waveSize - 1; + g_d[((WaveGetLaneIndex() + 1) & laneMask) + (gtid & ~laneMask)] = histReduction; + } + GroupMemoryBarrierWithGroupSync(); + + if (gtid < RADIX / waveSize) + { + g_d[gtid * waveSize] = + WavePrefixSum(g_d[gtid * waveSize]); + } + GroupMemoryBarrierWithGroupSync(); + + uint t = WaveReadLaneAt(g_d[gtid], 0); + if (gtid < RADIX && WaveGetLaneIndex()) + g_d[gtid] += t; +} + +//inclusive/exclusive prefix sum up the histograms, +//use a blelloch scan for in place packed exclusive +inline void WaveHistReductionExclusiveScanWLT16(uint gtid) +{ + uint shift = 1; + for (uint j = RADIX >> 2; j > 0; j >>= 1) + { + GroupMemoryBarrierWithGroupSync(); + if (gtid < j) + { + g_d[((((gtid << 1) + 2) << shift) - 1) >> 1] += + g_d[((((gtid << 1) + 1) << shift) - 1) >> 1] & 0xffff0000; + } + shift++; + } + GroupMemoryBarrierWithGroupSync(); + + if (gtid == 0) + g_d[HALF_RADIX - 1] &= 0xffff; + + for (uint j = 1; j < RADIX >> 1; j <<= 1) + { + --shift; + GroupMemoryBarrierWithGroupSync(); + if (gtid < j) + { + const uint t = ((((gtid << 1) + 1) << shift) - 1) >> 1; + const uint t2 = ((((gtid << 1) + 2) << shift) - 1) >> 1; + const uint t3 = g_d[t]; + g_d[t] = (g_d[t] & 0xffff) | (g_d[t2] & 0xffff0000); + g_d[t2] += t3 & 0xffff0000; + } + } + + GroupMemoryBarrierWithGroupSync(); + if (gtid < HALF_RADIX) + { + const uint t = g_d[gtid]; + g_d[gtid] = (t >> 16) + (t << 16) + (t & 0xffff0000); + } +} + +inline void UpdateOffsetsWGE16( + uint gtid, + uint waveSize, + inout OffsetStruct offsets, + KeyStruct keys) +{ + if (gtid >= waveSize) + { + const uint t = getWaveIndex(gtid, waveSize) * RADIX; + [unroll] + for (uint i = 0; i < KEYS_PER_THREAD; ++i) + { + const uint t2 = ExtractDigit(keys.k[i]); + offsets.o[i] += g_d[t2 + t] + g_d[t2]; + } + } + else + { + [unroll] + for (uint i = 0; i < KEYS_PER_THREAD; ++i) + offsets.o[i] += g_d[ExtractDigit(keys.k[i])]; + } +} + +inline void UpdateOffsetsWLT16( + uint gtid, + uint waveSize, + uint serialIterations, + inout OffsetStruct offsets, + KeyStruct keys) +{ + if (gtid >= waveSize * serialIterations) + { + const uint t = getWaveIndex(gtid, waveSize) / serialIterations * HALF_RADIX; + [unroll] + for (uint i = 0; i < KEYS_PER_THREAD; ++i) + { + const uint t2 = ExtractPackedIndex(keys.k[i]); + offsets.o[i] += ExtractPackedValue(g_d[t2 + t] + g_d[t2], keys.k[i]); + } + } + else + { + [unroll] + for (uint i = 0; i < KEYS_PER_THREAD; ++i) + offsets.o[i] += ExtractPackedValue(g_d[ExtractPackedIndex(keys.k[i])], keys.k[i]); + } +} + +inline void ScatterKeysShared(OffsetStruct offsets, KeyStruct keys) +{ + [unroll] + for (uint i = 0; i < KEYS_PER_THREAD; ++i) + g_d[offsets.o[i]] = keys.k[i]; +} + +inline uint DescendingIndex(uint deviceIndex) +{ + return e_numKeys - deviceIndex - 1; +} + +inline void WriteKey(uint deviceIndex, uint groupSharedIndex) +{ +#if defined(KEY_UINT) + b_alt[deviceIndex] = g_d[groupSharedIndex]; +#elif defined(KEY_INT) + b_alt[deviceIndex] = UintToInt(g_d[groupSharedIndex]); +#elif defined(KEY_FLOAT) + b_alt[deviceIndex] = UintToFloat(g_d[groupSharedIndex]); +#endif +} + +inline void LoadPayload(inout uint payload, uint deviceIndex) +{ +#if defined(PAYLOAD_UINT) + payload = b_sortPayload[deviceIndex]; +#elif defined(PAYLOAD_INT) || defined(PAYLOAD_FLOAT) + payload = asuint(b_sortPayload[deviceIndex]); +#endif +} + +inline void ScatterPayloadsShared(OffsetStruct offsets, KeyStruct payloads) +{ + ScatterKeysShared(offsets, payloads); +} + +inline void WritePayload(uint deviceIndex, uint groupSharedIndex) +{ +#if defined(PAYLOAD_UINT) + b_altPayload[deviceIndex] = g_d[groupSharedIndex]; +#elif defined(PAYLOAD_INT) + b_altPayload[deviceIndex] = asint(g_d[groupSharedIndex]); +#elif defined(PAYLOAD_FLOAT) + b_altPayload[deviceIndex] = asfloat(g_d[groupSharedIndex]); +#endif +} + +//***************************************************************************** +//SCATTERING: FULL PARTITIONS +//***************************************************************************** +//KEYS ONLY +inline void ScatterKeysOnlyDeviceAscending(uint gtid) +{ + for (uint i = gtid; i < PART_SIZE; i += D_DIM) + WriteKey(g_d[ExtractDigit(g_d[i]) + PART_SIZE] + i, i); +} + +inline void ScatterKeysOnlyDeviceDescending(uint gtid) +{ + if (e_radixShift == 24) + { + for (uint i = gtid; i < PART_SIZE; i += D_DIM) + WriteKey(DescendingIndex(g_d[ExtractDigit(g_d[i]) + PART_SIZE] + i), i); + } + else + { + ScatterKeysOnlyDeviceAscending(gtid); + } +} + +inline void ScatterKeysOnlyDevice(uint gtid) +{ +#if defined(SHOULD_ASCEND) + ScatterKeysOnlyDeviceAscending(gtid); +#else + ScatterKeysOnlyDeviceDescending(gtid); +#endif +} + +//KEY VALUE PAIRS +inline void ScatterPairsKeyPhaseAscending( + uint gtid, + inout DigitStruct digits) +{ + [unroll] + for (uint i = 0, t = gtid; i < KEYS_PER_THREAD; ++i, t += D_DIM) + { + digits.d[i] = ExtractDigit(g_d[t]); + WriteKey(g_d[digits.d[i] + PART_SIZE] + t, t); + } +} + +inline void ScatterPairsKeyPhaseDescending( + uint gtid, + inout DigitStruct digits) +{ + if (e_radixShift == 24) + { + [unroll] + for (uint i = 0, t = gtid; i < KEYS_PER_THREAD; ++i, t += D_DIM) + { + digits.d[i] = ExtractDigit(g_d[t]); + WriteKey(DescendingIndex(g_d[digits.d[i] + PART_SIZE] + t), t); + } + } + else + { + ScatterPairsKeyPhaseAscending(gtid, digits); + } +} + +inline void LoadPayloadsWGE16( + uint gtid, + uint waveSize, + uint partIndex, + inout KeyStruct payloads) +{ + [unroll] + for (uint i = 0, t = DeviceOffsetWGE16(gtid, waveSize, partIndex); + i < KEYS_PER_THREAD; + ++i, t += waveSize) + { + LoadPayload(payloads.k[i], t); + } +} + +inline void LoadPayloadsWLT16( + uint gtid, + uint waveSize, + uint partIndex, + uint serialIterations, + inout KeyStruct payloads) +{ + [unroll] + for (uint i = 0, t = DeviceOffsetWLT16(gtid, waveSize, partIndex, serialIterations); + i < KEYS_PER_THREAD; + ++i, t += waveSize * serialIterations) + { + LoadPayload(payloads.k[i], t); + } +} + +inline void ScatterPayloadsAscending(uint gtid, DigitStruct digits) +{ + [unroll] + for (uint i = 0, t = gtid; i < KEYS_PER_THREAD; ++i, t += D_DIM) + WritePayload(g_d[digits.d[i] + PART_SIZE] + t, t); +} + +inline void ScatterPayloadsDescending(uint gtid, DigitStruct digits) +{ + if (e_radixShift == 24) + { + [unroll] + for (uint i = 0, t = gtid; i < KEYS_PER_THREAD; ++i, t += D_DIM) + WritePayload(DescendingIndex(g_d[digits.d[i] + PART_SIZE] + t), t); + } + else + { + ScatterPayloadsAscending(gtid, digits); + } +} + +inline void ScatterPairsDevice( + uint gtid, + uint waveSize, + uint partIndex, + OffsetStruct offsets) +{ + DigitStruct digits; +#if defined(SHOULD_ASCEND) + ScatterPairsKeyPhaseAscending(gtid, digits); +#else + ScatterPairsKeyPhaseDescending(gtid, digits); +#endif + GroupMemoryBarrierWithGroupSync(); + + KeyStruct payloads; + if (waveSize >= 16) + LoadPayloadsWGE16(gtid, waveSize, partIndex, payloads); + else + LoadPayloadsWLT16(gtid, waveSize, partIndex, SerialIterations(waveSize), payloads); + ScatterPayloadsShared(offsets, payloads); + GroupMemoryBarrierWithGroupSync(); + +#if defined(SHOULD_ASCEND) + ScatterPayloadsAscending(gtid, digits); +#else + ScatterPayloadsDescending(gtid, digits); +#endif +} + +inline void ScatterDevice( + uint gtid, + uint waveSize, + uint partIndex, + OffsetStruct offsets) +{ +#if defined(SORT_PAIRS) + ScatterPairsDevice( + gtid, + waveSize, + partIndex, + offsets); +#else + ScatterKeysOnlyDevice(gtid); +#endif +} + +//***************************************************************************** +//SCATTERING: PARTIAL PARTITIONS +//***************************************************************************** +//KEYS ONLY +inline void ScatterKeysOnlyDevicePartialAscending(uint gtid, uint finalPartSize) +{ + for (uint i = gtid; i < PART_SIZE; i += D_DIM) + { + if (i < finalPartSize) + WriteKey(g_d[ExtractDigit(g_d[i]) + PART_SIZE] + i, i); + } +} + +inline void ScatterKeysOnlyDevicePartialDescending(uint gtid, uint finalPartSize) +{ + if (e_radixShift == 24) + { + for (uint i = gtid; i < PART_SIZE; i += D_DIM) + { + if (i < finalPartSize) + WriteKey(DescendingIndex(g_d[ExtractDigit(g_d[i]) + PART_SIZE] + i), i); + } + } + else + { + ScatterKeysOnlyDevicePartialAscending(gtid, finalPartSize); + } +} + +inline void ScatterKeysOnlyDevicePartial(uint gtid, uint partIndex) +{ + const uint finalPartSize = e_numKeys - partIndex * PART_SIZE; +#if defined(SHOULD_ASCEND) + ScatterKeysOnlyDevicePartialAscending(gtid, finalPartSize); +#else + ScatterKeysOnlyDevicePartialDescending(gtid, finalPartSize); +#endif +} + +//KEY VALUE PAIRS +inline void ScatterPairsKeyPhaseAscendingPartial( + uint gtid, + uint finalPartSize, + inout DigitStruct digits) +{ + [unroll] + for (uint i = 0, t = gtid; i < KEYS_PER_THREAD; ++i, t += D_DIM) + { + if (t < finalPartSize) + { + digits.d[i] = ExtractDigit(g_d[t]); + WriteKey(g_d[digits.d[i] + PART_SIZE] + t, t); + } + } +} + +inline void ScatterPairsKeyPhaseDescendingPartial( + uint gtid, + uint finalPartSize, + inout DigitStruct digits) +{ + if (e_radixShift == 24) + { + [unroll] + for (uint i = 0, t = gtid; i < KEYS_PER_THREAD; ++i, t += D_DIM) + { + if (t < finalPartSize) + { + digits.d[i] = ExtractDigit(g_d[t]); + WriteKey(DescendingIndex(g_d[digits.d[i] + PART_SIZE] + t), t); + } + } + } + else + { + ScatterPairsKeyPhaseAscendingPartial(gtid, finalPartSize, digits); + } +} + +inline void LoadPayloadsPartialWGE16( + uint gtid, + uint waveSize, + uint partIndex, + inout KeyStruct payloads) +{ + [unroll] + for (uint i = 0, t = DeviceOffsetWGE16(gtid, waveSize, partIndex); + i < KEYS_PER_THREAD; + ++i, t += waveSize) + { + if (t < e_numKeys) + LoadPayload(payloads.k[i], t); + } +} + +inline void LoadPayloadsPartialWLT16( + uint gtid, + uint waveSize, + uint partIndex, + uint serialIterations, + inout KeyStruct payloads) +{ + [unroll] + for (uint i = 0, t = DeviceOffsetWLT16(gtid, waveSize, partIndex, serialIterations); + i < KEYS_PER_THREAD; + ++i, t += waveSize * serialIterations) + { + if (t < e_numKeys) + LoadPayload(payloads.k[i], t); + } +} + +inline void ScatterPayloadsAscendingPartial( + uint gtid, + uint finalPartSize, + DigitStruct digits) +{ + [unroll] + for (uint i = 0, t = gtid; i < KEYS_PER_THREAD; ++i, t += D_DIM) + { + if (t < finalPartSize) + WritePayload(g_d[digits.d[i] + PART_SIZE] + t, t); + } +} + +inline void ScatterPayloadsDescendingPartial( + uint gtid, + uint finalPartSize, + DigitStruct digits) +{ + if (e_radixShift == 24) + { + [unroll] + for (uint i = 0, t = gtid; i < KEYS_PER_THREAD; ++i, t += D_DIM) + { + if (t < finalPartSize) + WritePayload(DescendingIndex(g_d[digits.d[i] + PART_SIZE] + t), t); + } + } + else + { + ScatterPayloadsAscendingPartial(gtid, finalPartSize, digits); + } +} + +inline void ScatterPairsDevicePartial( + uint gtid, + uint waveSize, + uint partIndex, + OffsetStruct offsets) +{ + DigitStruct digits; + const uint finalPartSize = e_numKeys - partIndex * PART_SIZE; +#if defined(SHOULD_ASCEND) + ScatterPairsKeyPhaseAscendingPartial(gtid, finalPartSize, digits); +#else + ScatterPairsKeyPhaseDescendingPartial(gtid, finalPartSize, digits); +#endif + GroupMemoryBarrierWithGroupSync(); + + KeyStruct payloads; + if (waveSize >= 16) + LoadPayloadsPartialWGE16(gtid, waveSize, partIndex, payloads); + else + LoadPayloadsPartialWLT16(gtid, waveSize, partIndex, SerialIterations(waveSize), payloads); + ScatterPayloadsShared(offsets, payloads); + GroupMemoryBarrierWithGroupSync(); + +#if defined(SHOULD_ASCEND) + ScatterPayloadsAscendingPartial(gtid, finalPartSize, digits); +#else + ScatterPayloadsDescendingPartial(gtid, finalPartSize, digits); +#endif +} + +inline void ScatterDevicePartial( + uint gtid, + uint waveSize, + uint partIndex, + OffsetStruct offsets) +{ +#if defined(SORT_PAIRS) + ScatterPairsDevicePartial( + gtid, + waveSize, + partIndex, + offsets); +#else + ScatterKeysOnlyDevicePartial(gtid, partIndex); +#endif +} \ No newline at end of file diff --git a/MVS/3DGS-Unity/Shaders/SortCommon.hlsl.meta b/MVS/3DGS-Unity/Shaders/SortCommon.hlsl.meta new file mode 100644 index 00000000..572930fc --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/SortCommon.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 268e5936ab6d79f4b8aeef8f5d14e7ee +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Shaders/SphericalHarmonics.hlsl b/MVS/3DGS-Unity/Shaders/SphericalHarmonics.hlsl new file mode 100644 index 00000000..83d64632 --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/SphericalHarmonics.hlsl @@ -0,0 +1,212 @@ +// SPDX-License-Identifier: MIT + +#ifndef SPHERICAL_HARMONICS_HLSL +#define SPHERICAL_HARMONICS_HLSL + +// SH rotation based on https://github.com/andrewwillmott/sh-lib (Unlicense / public domain) + +#define SH_MAX_ORDER 4 +#define SH_MAX_COEFFS_COUNT (SH_MAX_ORDER*SH_MAX_ORDER) + +float3 Dot3(int vidx, float3 v[SH_MAX_COEFFS_COUNT], float f[3]) +{ + return v[vidx+0] * f[0] + v[vidx+1] * f[1] + v[vidx+2] * f[2]; +} +float3 Dot5(int vidx, float3 v[SH_MAX_COEFFS_COUNT], float f[5]) +{ + return v[vidx+0] * f[0] + v[vidx+1] * f[1] + v[vidx+2] * f[2] + v[vidx+3] * f[3] + v[vidx+4] * f[4]; +} +float3 Dot7(int vidx, float3 v[SH_MAX_COEFFS_COUNT], float f[7]) +{ + return v[vidx+0] * f[0] + v[vidx+1] * f[1] + v[vidx+2] * f[2] + v[vidx+3] * f[3] + v[vidx+4] * f[4] + v[vidx+5] * f[5] + v[vidx+6] * f[6]; +} + +void RotateSH(float3x3 orient, int n, float3 coeffsIn[SH_MAX_COEFFS_COUNT], out float3 coeffs[SH_MAX_COEFFS_COUNT]) +{ + const float kSqrt03_02 = sqrt( 3.0 / 2.0); + const float kSqrt01_03 = sqrt( 1.0 / 3.0); + const float kSqrt02_03 = sqrt( 2.0 / 3.0); + const float kSqrt04_03 = sqrt( 4.0 / 3.0); + const float kSqrt01_04 = sqrt( 1.0 / 4.0); + const float kSqrt03_04 = sqrt( 3.0 / 4.0); + const float kSqrt01_05 = sqrt( 1.0 / 5.0); + const float kSqrt03_05 = sqrt( 3.0 / 5.0); + const float kSqrt06_05 = sqrt( 6.0 / 5.0); + const float kSqrt08_05 = sqrt( 8.0 / 5.0); + const float kSqrt09_05 = sqrt( 9.0 / 5.0); + const float kSqrt05_06 = sqrt( 5.0 / 6.0); + const float kSqrt01_06 = sqrt( 1.0 / 6.0); + const float kSqrt03_08 = sqrt( 3.0 / 8.0); + const float kSqrt05_08 = sqrt( 5.0 / 8.0); + const float kSqrt07_08 = sqrt( 7.0 / 8.0); + const float kSqrt09_08 = sqrt( 9.0 / 8.0); + const float kSqrt05_09 = sqrt( 5.0 / 9.0); + const float kSqrt08_09 = sqrt( 8.0 / 9.0); + + const float kSqrt01_10 = sqrt( 1.0 / 10.0); + const float kSqrt03_10 = sqrt( 3.0 / 10.0); + const float kSqrt01_12 = sqrt( 1.0 / 12.0); + const float kSqrt04_15 = sqrt( 4.0 / 15.0); + const float kSqrt01_16 = sqrt( 1.0 / 16.0); + const float kSqrt07_16 = sqrt( 7.0 / 16.0); + const float kSqrt15_16 = sqrt(15.0 / 16.0); + const float kSqrt01_18 = sqrt( 1.0 / 18.0); + const float kSqrt03_25 = sqrt( 3.0 / 25.0); + const float kSqrt14_25 = sqrt(14.0 / 25.0); + const float kSqrt15_25 = sqrt(15.0 / 25.0); + const float kSqrt18_25 = sqrt(18.0 / 25.0); + const float kSqrt01_32 = sqrt( 1.0 / 32.0); + const float kSqrt03_32 = sqrt( 3.0 / 32.0); + const float kSqrt15_32 = sqrt(15.0 / 32.0); + const float kSqrt21_32 = sqrt(21.0 / 32.0); + const float kSqrt01_50 = sqrt( 1.0 / 50.0); + const float kSqrt03_50 = sqrt( 3.0 / 50.0); + const float kSqrt21_50 = sqrt(21.0 / 50.0); + + int srcIdx = 0; + int dstIdx = 0; + + // band 0 + coeffs[dstIdx++] = coeffsIn[0]; + if (n < 2) + return; + + // band 1 + srcIdx += 1; + float sh1[3][3] = + { + // NOTE: change from upstream code at https://github.com/andrewwillmott/sh-lib, some of the + // values need to have "-" in front of them. + orient._22, -orient._23, orient._21, + -orient._32, orient._33, -orient._31, + orient._12, -orient._13, orient._11 + }; + coeffs[dstIdx++] = Dot3(srcIdx, coeffsIn, sh1[0]); + coeffs[dstIdx++] = Dot3(srcIdx, coeffsIn, sh1[1]); + coeffs[dstIdx++] = Dot3(srcIdx, coeffsIn, sh1[2]); + if (n < 3) + return; + + // band 2 + srcIdx += 3; + float sh2[5][5]; + + sh2[0][0] = kSqrt01_04 * ((sh1[2][2] * sh1[0][0] + sh1[2][0] * sh1[0][2]) + (sh1[0][2] * sh1[2][0] + sh1[0][0] * sh1[2][2])); + sh2[0][1] = (sh1[2][1] * sh1[0][0] + sh1[0][1] * sh1[2][0]); + sh2[0][2] = kSqrt03_04 * (sh1[2][1] * sh1[0][1] + sh1[0][1] * sh1[2][1]); + sh2[0][3] = (sh1[2][1] * sh1[0][2] + sh1[0][1] * sh1[2][2]); + sh2[0][4] = kSqrt01_04 * ((sh1[2][2] * sh1[0][2] - sh1[2][0] * sh1[0][0]) + (sh1[0][2] * sh1[2][2] - sh1[0][0] * sh1[2][0])); + + coeffs[dstIdx++] = Dot5(srcIdx, coeffsIn, sh2[0]); + + sh2[1][0] = kSqrt01_04 * ((sh1[1][2] * sh1[0][0] + sh1[1][0] * sh1[0][2]) + (sh1[0][2] * sh1[1][0] + sh1[0][0] * sh1[1][2])); + sh2[1][1] = sh1[1][1] * sh1[0][0] + sh1[0][1] * sh1[1][0]; + sh2[1][2] = kSqrt03_04 * (sh1[1][1] * sh1[0][1] + sh1[0][1] * sh1[1][1]); + sh2[1][3] = sh1[1][1] * sh1[0][2] + sh1[0][1] * sh1[1][2]; + sh2[1][4] = kSqrt01_04 * ((sh1[1][2] * sh1[0][2] - sh1[1][0] * sh1[0][0]) + (sh1[0][2] * sh1[1][2] - sh1[0][0] * sh1[1][0])); + + coeffs[dstIdx++] = Dot5(srcIdx, coeffsIn, sh2[1]); + + sh2[2][0] = kSqrt01_03 * (sh1[1][2] * sh1[1][0] + sh1[1][0] * sh1[1][2]) + -kSqrt01_12 * ((sh1[2][2] * sh1[2][0] + sh1[2][0] * sh1[2][2]) + (sh1[0][2] * sh1[0][0] + sh1[0][0] * sh1[0][2])); + sh2[2][1] = kSqrt04_03 * sh1[1][1] * sh1[1][0] + -kSqrt01_03 * (sh1[2][1] * sh1[2][0] + sh1[0][1] * sh1[0][0]); + sh2[2][2] = sh1[1][1] * sh1[1][1] + -kSqrt01_04 * (sh1[2][1] * sh1[2][1] + sh1[0][1] * sh1[0][1]); + sh2[2][3] = kSqrt04_03 * sh1[1][1] * sh1[1][2] + -kSqrt01_03 * (sh1[2][1] * sh1[2][2] + sh1[0][1] * sh1[0][2]); + sh2[2][4] = kSqrt01_03 * (sh1[1][2] * sh1[1][2] - sh1[1][0] * sh1[1][0]) + -kSqrt01_12 * ((sh1[2][2] * sh1[2][2] - sh1[2][0] * sh1[2][0]) + (sh1[0][2] * sh1[0][2] - sh1[0][0] * sh1[0][0])); + + coeffs[dstIdx++] = Dot5(srcIdx, coeffsIn, sh2[2]); + + sh2[3][0] = kSqrt01_04 * ((sh1[1][2] * sh1[2][0] + sh1[1][0] * sh1[2][2]) + (sh1[2][2] * sh1[1][0] + sh1[2][0] * sh1[1][2])); + sh2[3][1] = sh1[1][1] * sh1[2][0] + sh1[2][1] * sh1[1][0]; + sh2[3][2] = kSqrt03_04 * (sh1[1][1] * sh1[2][1] + sh1[2][1] * sh1[1][1]); + sh2[3][3] = sh1[1][1] * sh1[2][2] + sh1[2][1] * sh1[1][2]; + sh2[3][4] = kSqrt01_04 * ((sh1[1][2] * sh1[2][2] - sh1[1][0] * sh1[2][0]) + (sh1[2][2] * sh1[1][2] - sh1[2][0] * sh1[1][0])); + + coeffs[dstIdx++] = Dot5(srcIdx, coeffsIn, sh2[3]); + + sh2[4][0] = kSqrt01_04 * ((sh1[2][2] * sh1[2][0] + sh1[2][0] * sh1[2][2]) - (sh1[0][2] * sh1[0][0] + sh1[0][0] * sh1[0][2])); + sh2[4][1] = (sh1[2][1] * sh1[2][0] - sh1[0][1] * sh1[0][0]); + sh2[4][2] = kSqrt03_04 * (sh1[2][1] * sh1[2][1] - sh1[0][1] * sh1[0][1]); + sh2[4][3] = (sh1[2][1] * sh1[2][2] - sh1[0][1] * sh1[0][2]); + sh2[4][4] = kSqrt01_04 * ((sh1[2][2] * sh1[2][2] - sh1[2][0] * sh1[2][0]) - (sh1[0][2] * sh1[0][2] - sh1[0][0] * sh1[0][0])); + + coeffs[dstIdx++] = Dot5(srcIdx, coeffsIn, sh2[4]); + + if (n < 4) + return; + + // band 3 + srcIdx += 5; + float sh3[7][7]; + + sh3[0][0] = kSqrt01_04 * ((sh1[2][2] * sh2[0][0] + sh1[2][0] * sh2[0][4]) + (sh1[0][2] * sh2[4][0] + sh1[0][0] * sh2[4][4])); + sh3[0][1] = kSqrt03_02 * (sh1[2][1] * sh2[0][0] + sh1[0][1] * sh2[4][0]); + sh3[0][2] = kSqrt15_16 * (sh1[2][1] * sh2[0][1] + sh1[0][1] * sh2[4][1]); + sh3[0][3] = kSqrt05_06 * (sh1[2][1] * sh2[0][2] + sh1[0][1] * sh2[4][2]); + sh3[0][4] = kSqrt15_16 * (sh1[2][1] * sh2[0][3] + sh1[0][1] * sh2[4][3]); + sh3[0][5] = kSqrt03_02 * (sh1[2][1] * sh2[0][4] + sh1[0][1] * sh2[4][4]); + sh3[0][6] = kSqrt01_04 * ((sh1[2][2] * sh2[0][4] - sh1[2][0] * sh2[0][0]) + (sh1[0][2] * sh2[4][4] - sh1[0][0] * sh2[4][0])); + + coeffs[dstIdx++] = Dot7(srcIdx, coeffsIn, sh3[0]); + + sh3[1][0] = kSqrt01_06 * (sh1[1][2] * sh2[0][0] + sh1[1][0] * sh2[0][4]) + kSqrt01_06 * ((sh1[2][2] * sh2[1][0] + sh1[2][0] * sh2[1][4]) + (sh1[0][2] * sh2[3][0] + sh1[0][0] * sh2[3][4])); + sh3[1][1] = sh1[1][1] * sh2[0][0] + (sh1[2][1] * sh2[1][0] + sh1[0][1] * sh2[3][0]); + sh3[1][2] = kSqrt05_08 * sh1[1][1] * sh2[0][1] + kSqrt05_08 * (sh1[2][1] * sh2[1][1] + sh1[0][1] * sh2[3][1]); + sh3[1][3] = kSqrt05_09 * sh1[1][1] * sh2[0][2] + kSqrt05_09 * (sh1[2][1] * sh2[1][2] + sh1[0][1] * sh2[3][2]); + sh3[1][4] = kSqrt05_08 * sh1[1][1] * sh2[0][3] + kSqrt05_08 * (sh1[2][1] * sh2[1][3] + sh1[0][1] * sh2[3][3]); + sh3[1][5] = sh1[1][1] * sh2[0][4] + (sh1[2][1] * sh2[1][4] + sh1[0][1] * sh2[3][4]); + sh3[1][6] = kSqrt01_06 * (sh1[1][2] * sh2[0][4] - sh1[1][0] * sh2[0][0]) + kSqrt01_06 * ((sh1[2][2] * sh2[1][4] - sh1[2][0] * sh2[1][0]) + (sh1[0][2] * sh2[3][4] - sh1[0][0] * sh2[3][0])); + + coeffs[dstIdx++] = Dot7(srcIdx, coeffsIn, sh3[1]); + + sh3[2][0] = kSqrt04_15 * (sh1[1][2] * sh2[1][0] + sh1[1][0] * sh2[1][4]) + kSqrt01_05 * (sh1[0][2] * sh2[2][0] + sh1[0][0] * sh2[2][4]) + -sqrt(1.0 / 60.0) * ((sh1[2][2] * sh2[0][0] + sh1[2][0] * sh2[0][4]) - (sh1[0][2] * sh2[4][0] + sh1[0][0] * sh2[4][4])); + sh3[2][1] = kSqrt08_05 * sh1[1][1] * sh2[1][0] + kSqrt06_05 * sh1[0][1] * sh2[2][0] + -kSqrt01_10 * (sh1[2][1] * sh2[0][0] - sh1[0][1] * sh2[4][0]); + sh3[2][2] = sh1[1][1] * sh2[1][1] + kSqrt03_04 * sh1[0][1] * sh2[2][1] + -kSqrt01_16 * (sh1[2][1] * sh2[0][1] - sh1[0][1] * sh2[4][1]); + sh3[2][3] = kSqrt08_09 * sh1[1][1] * sh2[1][2] + kSqrt02_03 * sh1[0][1] * sh2[2][2] + -kSqrt01_18 * (sh1[2][1] * sh2[0][2] - sh1[0][1] * sh2[4][2]); + sh3[2][4] = sh1[1][1] * sh2[1][3] + kSqrt03_04 * sh1[0][1] * sh2[2][3] + -kSqrt01_16 * (sh1[2][1] * sh2[0][3] - sh1[0][1] * sh2[4][3]); + sh3[2][5] = kSqrt08_05 * sh1[1][1] * sh2[1][4] + kSqrt06_05 * sh1[0][1] * sh2[2][4] + -kSqrt01_10 * (sh1[2][1] * sh2[0][4] - sh1[0][1] * sh2[4][4]); + sh3[2][6] = kSqrt04_15 * (sh1[1][2] * sh2[1][4] - sh1[1][0] * sh2[1][0]) + kSqrt01_05 * (sh1[0][2] * sh2[2][4] - sh1[0][0] * sh2[2][0]) + -sqrt(1.0 / 60.0) * ((sh1[2][2] * sh2[0][4] - sh1[2][0] * sh2[0][0]) - (sh1[0][2] * sh2[4][4] - sh1[0][0] * sh2[4][0])); + + coeffs[dstIdx++] = Dot7(srcIdx, coeffsIn, sh3[2]); + + sh3[3][0] = kSqrt03_10 * (sh1[1][2] * sh2[2][0] + sh1[1][0] * sh2[2][4]) + -kSqrt01_10 * ((sh1[2][2] * sh2[3][0] + sh1[2][0] * sh2[3][4]) + (sh1[0][2] * sh2[1][0] + sh1[0][0] * sh2[1][4])); + sh3[3][1] = kSqrt09_05 * sh1[1][1] * sh2[2][0] + -kSqrt03_05 * (sh1[2][1] * sh2[3][0] + sh1[0][1] * sh2[1][0]); + sh3[3][2] = kSqrt09_08 * sh1[1][1] * sh2[2][1] + -kSqrt03_08 * (sh1[2][1] * sh2[3][1] + sh1[0][1] * sh2[1][1]); + sh3[3][3] = sh1[1][1] * sh2[2][2] + -kSqrt01_03 * (sh1[2][1] * sh2[3][2] + sh1[0][1] * sh2[1][2]); + sh3[3][4] = kSqrt09_08 * sh1[1][1] * sh2[2][3] + -kSqrt03_08 * (sh1[2][1] * sh2[3][3] + sh1[0][1] * sh2[1][3]); + sh3[3][5] = kSqrt09_05 * sh1[1][1] * sh2[2][4] + -kSqrt03_05 * (sh1[2][1] * sh2[3][4] + sh1[0][1] * sh2[1][4]); + sh3[3][6] = kSqrt03_10 * (sh1[1][2] * sh2[2][4] - sh1[1][0] * sh2[2][0]) + -kSqrt01_10 * ((sh1[2][2] * sh2[3][4] - sh1[2][0] * sh2[3][0]) + (sh1[0][2] * sh2[1][4] - sh1[0][0] * sh2[1][0])); + + coeffs[dstIdx++] = Dot7(srcIdx, coeffsIn, sh3[3]); + + sh3[4][0] = kSqrt04_15 * (sh1[1][2] * sh2[3][0] + sh1[1][0] * sh2[3][4]) + kSqrt01_05 * (sh1[2][2] * sh2[2][0] + sh1[2][0] * sh2[2][4]) + -sqrt(1.0 / 60.0) * ((sh1[2][2] * sh2[4][0] + sh1[2][0] * sh2[4][4]) + (sh1[0][2] * sh2[0][0] + sh1[0][0] * sh2[0][4])); + sh3[4][1] = kSqrt08_05 * sh1[1][1] * sh2[3][0] + kSqrt06_05 * sh1[2][1] * sh2[2][0] + -kSqrt01_10 * (sh1[2][1] * sh2[4][0] + sh1[0][1] * sh2[0][0]); + sh3[4][2] = sh1[1][1] * sh2[3][1] + kSqrt03_04 * sh1[2][1] * sh2[2][1] + -kSqrt01_16 * (sh1[2][1] * sh2[4][1] + sh1[0][1] * sh2[0][1]); + sh3[4][3] = kSqrt08_09 * sh1[1][1] * sh2[3][2] + kSqrt02_03 * sh1[2][1] * sh2[2][2] + -kSqrt01_18 * (sh1[2][1] * sh2[4][2] + sh1[0][1] * sh2[0][2]); + sh3[4][4] = sh1[1][1] * sh2[3][3] + kSqrt03_04 * sh1[2][1] * sh2[2][3] + -kSqrt01_16 * (sh1[2][1] * sh2[4][3] + sh1[0][1] * sh2[0][3]); + sh3[4][5] = kSqrt08_05 * sh1[1][1] * sh2[3][4] + kSqrt06_05 * sh1[2][1] * sh2[2][4] + -kSqrt01_10 * (sh1[2][1] * sh2[4][4] + sh1[0][1] * sh2[0][4]); + sh3[4][6] = kSqrt04_15 * (sh1[1][2] * sh2[3][4] - sh1[1][0] * sh2[3][0]) + kSqrt01_05 * (sh1[2][2] * sh2[2][4] - sh1[2][0] * sh2[2][0]) + -sqrt(1.0 / 60.0) * ((sh1[2][2] * sh2[4][4] - sh1[2][0] * sh2[4][0]) + (sh1[0][2] * sh2[0][4] - sh1[0][0] * sh2[0][0])); + + coeffs[dstIdx++] = Dot7(srcIdx, coeffsIn, sh3[4]); + + sh3[5][0] = kSqrt01_06 * (sh1[1][2] * sh2[4][0] + sh1[1][0] * sh2[4][4]) + kSqrt01_06 * ((sh1[2][2] * sh2[3][0] + sh1[2][0] * sh2[3][4]) - (sh1[0][2] * sh2[1][0] + sh1[0][0] * sh2[1][4])); + sh3[5][1] = sh1[1][1] * sh2[4][0] + (sh1[2][1] * sh2[3][0] - sh1[0][1] * sh2[1][0]); + sh3[5][2] = kSqrt05_08 * sh1[1][1] * sh2[4][1] + kSqrt05_08 * (sh1[2][1] * sh2[3][1] - sh1[0][1] * sh2[1][1]); + sh3[5][3] = kSqrt05_09 * sh1[1][1] * sh2[4][2] + kSqrt05_09 * (sh1[2][1] * sh2[3][2] - sh1[0][1] * sh2[1][2]); + sh3[5][4] = kSqrt05_08 * sh1[1][1] * sh2[4][3] + kSqrt05_08 * (sh1[2][1] * sh2[3][3] - sh1[0][1] * sh2[1][3]); + sh3[5][5] = sh1[1][1] * sh2[4][4] + (sh1[2][1] * sh2[3][4] - sh1[0][1] * sh2[1][4]); + sh3[5][6] = kSqrt01_06 * (sh1[1][2] * sh2[4][4] - sh1[1][0] * sh2[4][0]) + kSqrt01_06 * ((sh1[2][2] * sh2[3][4] - sh1[2][0] * sh2[3][0]) - (sh1[0][2] * sh2[1][4] - sh1[0][0] * sh2[1][0])); + + coeffs[dstIdx++] = Dot7(srcIdx, coeffsIn, sh3[5]); + + sh3[6][0] = kSqrt01_04 * ((sh1[2][2] * sh2[4][0] + sh1[2][0] * sh2[4][4]) - (sh1[0][2] * sh2[0][0] + sh1[0][0] * sh2[0][4])); + sh3[6][1] = kSqrt03_02 * (sh1[2][1] * sh2[4][0] - sh1[0][1] * sh2[0][0]); + sh3[6][2] = kSqrt15_16 * (sh1[2][1] * sh2[4][1] - sh1[0][1] * sh2[0][1]); + sh3[6][3] = kSqrt05_06 * (sh1[2][1] * sh2[4][2] - sh1[0][1] * sh2[0][2]); + sh3[6][4] = kSqrt15_16 * (sh1[2][1] * sh2[4][3] - sh1[0][1] * sh2[0][3]); + sh3[6][5] = kSqrt03_02 * (sh1[2][1] * sh2[4][4] - sh1[0][1] * sh2[0][4]); + sh3[6][6] = kSqrt01_04 * ((sh1[2][2] * sh2[4][4] - sh1[2][0] * sh2[4][0]) - (sh1[0][2] * sh2[0][4] - sh1[0][0] * sh2[0][0])); + + coeffs[dstIdx++] = Dot7(srcIdx, coeffsIn, sh3[6]); +} + +#endif // SPHERICAL_HARMONICS_HLSL diff --git a/MVS/3DGS-Unity/Shaders/SphericalHarmonics.hlsl.meta b/MVS/3DGS-Unity/Shaders/SphericalHarmonics.hlsl.meta new file mode 100644 index 00000000..3a109d8d --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/SphericalHarmonics.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0e45617a7c5ba4b4eb55e897761dcb31 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/Shaders/SplatUtilities.compute b/MVS/3DGS-Unity/Shaders/SplatUtilities.compute new file mode 100644 index 00000000..9aa0a9bf --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/SplatUtilities.compute @@ -0,0 +1,757 @@ +// SPDX-License-Identifier: MIT +#define GROUP_SIZE 1024 + +#pragma kernel CSSetIndices +#pragma kernel CSCalcDistances +#pragma kernel CSCalcViewData +#pragma kernel CSUpdateEditData +#pragma kernel CSInitEditData +#pragma kernel CSClearBuffer +#pragma kernel CSInvertSelection +#pragma kernel CSSelectAll +#pragma kernel CSOrBuffers +#pragma kernel CSSelectionUpdate +#pragma kernel CSTranslateSelection +#pragma kernel CSRotateSelection +#pragma kernel CSScaleSelection +#pragma kernel CSExportData +#pragma kernel CSCopySplats + +// DeviceRadixSort +#pragma multi_compile __ KEY_UINT KEY_INT KEY_FLOAT +#pragma multi_compile __ PAYLOAD_UINT PAYLOAD_INT PAYLOAD_FLOAT +#pragma multi_compile __ SHOULD_ASCEND +#pragma multi_compile __ SORT_PAIRS +#pragma multi_compile __ VULKAN +#pragma kernel InitDeviceRadixSort +#pragma kernel Upsweep +#pragma kernel Scan +#pragma kernel Downsweep + +// GPU sorting needs wave ops +#pragma require wavebasic +#pragma require waveballot +#pragma use_dxc + +#include "DeviceRadixSort.hlsl" +#include "GaussianSplatting.hlsl" +#include "UnityCG.cginc" + +float4x4 _MatrixObjectToWorld; +float4x4 _MatrixWorldToObject; +float4x4 _MatrixMV; +float4 _VecScreenParams; +float4 _VecWorldSpaceCameraPos; +int _SelectionMode; + +RWStructuredBuffer _SplatSortDistances; +RWStructuredBuffer _SplatSortKeys; +uint _SplatCount; + +// radix sort etc. friendly, see http://stereopsis.com/radix.html +uint FloatToSortableUint(float f) +{ + uint fu = asuint(f); + uint mask = -((int)(fu >> 31)) | 0x80000000; + return fu ^ mask; +} + +[numthreads(GROUP_SIZE,1,1)] +void CSSetIndices (uint3 id : SV_DispatchThreadID) +{ + uint idx = id.x; + if (idx >= _SplatCount) + return; + + _SplatSortKeys[idx] = idx; +} + +[numthreads(GROUP_SIZE,1,1)] +void CSCalcDistances (uint3 id : SV_DispatchThreadID) +{ + uint idx = id.x; + if (idx >= _SplatCount) + return; + + uint origIdx = _SplatSortKeys[idx]; + + float3 pos = LoadSplatPos(origIdx); + pos = mul(_MatrixMV, float4(pos.xyz, 1)).xyz; + + _SplatSortDistances[idx] = FloatToSortableUint(pos.z); +} + +RWStructuredBuffer _SplatViewData; + +float _SplatScale; +float _SplatOpacityScale; +uint _SHOrder; +uint _SHOnly; + +uint _SplatCutoutsCount; + +#define SPLAT_CUTOUT_TYPE_ELLIPSOID 0 +#define SPLAT_CUTOUT_TYPE_BOX 1 + +struct GaussianCutoutShaderData // match GaussianCutout.ShaderData in C# +{ + float4x4 mat; + uint typeAndFlags; +}; +StructuredBuffer _SplatCutouts; + +RWByteAddressBuffer _SplatSelectedBits; +ByteAddressBuffer _SplatDeletedBits; +uint _SplatBitsValid; + +void DecomposeCovariance(float3 cov2d, out float2 v1, out float2 v2) +{ + #if 0 // does not quite give the correct results? + + // https://jsfiddle.net/mattrossman/ehxmtgw6/ + // References: + // - https://www.youtube.com/watch?v=e50Bj7jn9IQ + // - https://en.wikipedia.org/wiki/Eigenvalue_algorithm#2%C3%972_matrices + // - https://people.math.harvard.edu/~knill/teaching/math21b2004/exhibits/2dmatrices/index.html + float a = cov2d.x; + float b = cov2d.y; + float d = cov2d.z; + float det = a * d - b * b; // matrix is symmetric, so "c" is same as "b" + float trace = a + d; + + float mean = 0.5 * trace; + float dist = sqrt(mean * mean - det); + + float lambda1 = mean + dist; // 1st eigenvalue + float lambda2 = mean - dist; // 2nd eigenvalue + + if (b == 0) { + // https://twitter.com/the_ross_man/status/1706342719776551360 + if (a > d) v1 = float2(1, 0); + else v1 = float2(0, 1); + } else + v1 = normalize(float2(b, d - lambda2)); + + v1.y = -v1.y; + // The 2nd eigenvector is just a 90 degree rotation of the first since Gaussian axes are orthogonal + v2 = float2(v1.y, -v1.x); + + // scaling components + v1 *= sqrt(lambda1); + v2 *= sqrt(lambda2); + + float radius = 1.5; + v1 *= radius; + v2 *= radius; + + #else + + // same as in antimatter15/splat + float diag1 = cov2d.x, diag2 = cov2d.z, offDiag = cov2d.y; + float mid = 0.5f * (diag1 + diag2); + float radius = length(float2((diag1 - diag2) / 2.0, offDiag)); + float lambda1 = mid + radius; + float lambda2 = max(mid - radius, 0.1); + float2 diagVec = normalize(float2(offDiag, lambda1 - diag1)); + diagVec.y = -diagVec.y; + float maxSize = 4096.0; + v1 = min(sqrt(2.0 * lambda1), maxSize) * diagVec; + v2 = min(sqrt(2.0 * lambda2), maxSize) * float2(diagVec.y, -diagVec.x); + + #endif +} + +bool IsSplatCut(float3 pos) +{ + bool finalCut = false; + for (uint i = 0; i < _SplatCutoutsCount; ++i) + { + GaussianCutoutShaderData cutData = _SplatCutouts[i]; + uint type = cutData.typeAndFlags & 0xFF; + if (type == 0xFF) // invalid/null cutout, ignore + continue; + bool invert = (cutData.typeAndFlags & 0xFF00) != 0; + + float3 cutoutPos = mul(cutData.mat, float4(pos, 1)).xyz; + if (type == SPLAT_CUTOUT_TYPE_ELLIPSOID) + { + if (dot(cutoutPos, cutoutPos) <= 1) return invert; + } + if (type == SPLAT_CUTOUT_TYPE_BOX) + { + if (all(abs(cutoutPos) <= 1)) return invert; + } + finalCut |= !invert; + } + return finalCut; +} + +[numthreads(GROUP_SIZE,1,1)] +void CSCalcViewData (uint3 id : SV_DispatchThreadID) +{ + uint idx = id.x; + if (idx >= _SplatCount) + return; + + SplatData splat = LoadSplatData(idx); + SplatViewData view = (SplatViewData)0; + + float3 centerWorldPos = mul(_MatrixObjectToWorld, float4(splat.pos,1)).xyz; + float4 centerClipPos = mul(UNITY_MATRIX_VP, float4(centerWorldPos, 1)); + half opacityScale = _SplatOpacityScale; + float splatScale = _SplatScale; + + // deleted? + if (_SplatBitsValid) + { + uint wordIdx = idx / 32; + uint bitIdx = idx & 31; + uint wordVal = _SplatDeletedBits.Load(wordIdx * 4); + if (wordVal & (1 << bitIdx)) + { + centerClipPos.w = 0; + } + } + + // cutouts + if (IsSplatCut(splat.pos)) + { + centerClipPos.w = 0; + } + + view.pos = centerClipPos; + bool behindCam = centerClipPos.w <= 0; + if (!behindCam) + { + float4 boxRot = splat.rot; + float3 boxSize = splat.scale; + + float3x3 splatRotScaleMat = CalcMatrixFromRotationScale(boxRot, boxSize); + + float3 cov3d0, cov3d1; + CalcCovariance3D(splatRotScaleMat, cov3d0, cov3d1); + float splatScale2 = splatScale * splatScale; + cov3d0 *= splatScale2; + cov3d1 *= splatScale2; + float3 cov2d = CalcCovariance2D(splat.pos, cov3d0, cov3d1, _MatrixMV, UNITY_MATRIX_P, _VecScreenParams); + + DecomposeCovariance(cov2d, view.axis1, view.axis2); + + float3 worldViewDir = _VecWorldSpaceCameraPos.xyz - centerWorldPos; + float3 objViewDir = mul((float3x3)_MatrixWorldToObject, worldViewDir); + objViewDir = normalize(objViewDir); + + half4 col; + col.rgb = ShadeSH(splat.sh, objViewDir, _SHOrder, _SHOnly != 0); + col.a = min(splat.opacity * opacityScale, 65000); + view.color.x = (f32tof16(col.r) << 16) | f32tof16(col.g); + view.color.y = (f32tof16(col.b) << 16) | f32tof16(col.a); + } + + _SplatViewData[idx] = view; +} + + +RWByteAddressBuffer _DstBuffer; +ByteAddressBuffer _SrcBuffer; +uint _BufferSize; + +uint2 GetSplatIndicesFromWord(uint idx) +{ + uint idxStart = idx * 32; + uint idxEnd = min(idxStart + 32, _SplatCount); + return uint2(idxStart, idxEnd); +} + +[numthreads(GROUP_SIZE,1,1)] +void CSUpdateEditData (uint3 id : SV_DispatchThreadID) +{ + uint idx = id.x; + if (idx >= _BufferSize) + return; + + uint valSel = _SplatSelectedBits.Load(idx * 4); + uint valDel = _SplatDeletedBits.Load(idx * 4); + valSel &= ~valDel; // don't count deleted splats as selected + uint2 splatIndices = GetSplatIndicesFromWord(idx); + + // update selection bounds + float3 bmin = 1.0e38; + float3 bmax = -1.0e38; + uint mask = 1; + uint valCut = 0; + for (uint sidx = splatIndices.x; sidx < splatIndices.y; ++sidx, mask <<= 1) + { + float3 spos = LoadSplatPos(sidx); + // don't count cut splats as selected + if (IsSplatCut(spos)) + { + valSel &= ~mask; + valCut |= mask; + } + if (valSel & mask) + { + bmin = min(bmin, spos); + bmax = max(bmax, spos); + } + } + valCut &= ~valDel; // don't count deleted splats as cut + + if (valSel != 0) + { + _DstBuffer.InterlockedMin(12, FloatToSortableUint(bmin.x)); + _DstBuffer.InterlockedMin(16, FloatToSortableUint(bmin.y)); + _DstBuffer.InterlockedMin(20, FloatToSortableUint(bmin.z)); + _DstBuffer.InterlockedMax(24, FloatToSortableUint(bmax.x)); + _DstBuffer.InterlockedMax(28, FloatToSortableUint(bmax.y)); + _DstBuffer.InterlockedMax(32, FloatToSortableUint(bmax.z)); + } + uint sumSel = countbits(valSel); + uint sumDel = countbits(valDel); + uint sumCut = countbits(valCut); + _DstBuffer.InterlockedAdd(0, sumSel); + _DstBuffer.InterlockedAdd(4, sumDel); + _DstBuffer.InterlockedAdd(8, sumCut); +} + +[numthreads(1,1,1)] +void CSInitEditData (uint3 id : SV_DispatchThreadID) +{ + _DstBuffer.Store3(0, uint3(0,0,0)); // selected, deleted, cut counts + uint initMin = FloatToSortableUint(1.0e38); + uint initMax = FloatToSortableUint(-1.0e38); + _DstBuffer.Store3(12, uint3(initMin, initMin, initMin)); + _DstBuffer.Store3(24, uint3(initMax, initMax, initMax)); +} + +[numthreads(GROUP_SIZE,1,1)] +void CSClearBuffer (uint3 id : SV_DispatchThreadID) +{ + uint idx = id.x; + if (idx >= _BufferSize) + return; + _DstBuffer.Store(idx * 4, 0); +} + +[numthreads(GROUP_SIZE,1,1)] +void CSInvertSelection (uint3 id : SV_DispatchThreadID) +{ + uint idx = id.x; + if (idx >= _BufferSize) + return; + uint v = _DstBuffer.Load(idx * 4); + v = ~v; + + // do not select splats that are cut + uint2 splatIndices = GetSplatIndicesFromWord(idx); + uint mask = 1; + for (uint sidx = splatIndices.x; sidx < splatIndices.y; ++sidx, mask <<= 1) + { + float3 spos = LoadSplatPos(sidx); + if (IsSplatCut(spos)) + v &= ~mask; + } + + _DstBuffer.Store(idx * 4, v); +} + +[numthreads(GROUP_SIZE,1,1)] +void CSSelectAll (uint3 id : SV_DispatchThreadID) +{ + uint idx = id.x; + if (idx >= _BufferSize) + return; + uint v = ~0; + + // do not select splats that are cut + uint2 splatIndices = GetSplatIndicesFromWord(idx); + uint mask = 1; + for (uint sidx = splatIndices.x; sidx < splatIndices.y; ++sidx, mask <<= 1) + { + float3 spos = LoadSplatPos(sidx); + if (IsSplatCut(spos)) + v &= ~mask; + } + + _DstBuffer.Store(idx * 4, v); +} + + +[numthreads(GROUP_SIZE,1,1)] +void CSOrBuffers (uint3 id : SV_DispatchThreadID) +{ + uint idx = id.x; + if (idx >= _BufferSize) + return; + uint a = _SrcBuffer.Load(idx * 4); + uint b = _DstBuffer.Load(idx * 4); + _DstBuffer.Store(idx * 4, a | b); +} + +float4 _SelectionRect; + +[numthreads(GROUP_SIZE,1,1)] +void CSSelectionUpdate (uint3 id : SV_DispatchThreadID) +{ + uint idx = id.x; + if (idx >= _SplatCount) + return; + + float3 pos = LoadSplatPos(idx); + if (IsSplatCut(pos)) + return; + + float3 centerWorldPos = mul(_MatrixObjectToWorld, float4(pos,1)).xyz; + float4 centerClipPos = mul(UNITY_MATRIX_VP, float4(centerWorldPos, 1)); + bool behindCam = centerClipPos.w <= 0; + if (behindCam) + return; + + float2 pixelPos = (centerClipPos.xy / centerClipPos.w * float2(0.5, -0.5) + 0.5) * _VecScreenParams.xy; + if (pixelPos.x < _SelectionRect.x || pixelPos.x > _SelectionRect.z || + pixelPos.y < _SelectionRect.y || pixelPos.y > _SelectionRect.w) + { + return; + } + uint wordIdx = idx / 32; + uint bitIdx = idx & 31; + if (_SelectionMode) + _SplatSelectedBits.InterlockedOr(wordIdx * 4, 1u << bitIdx); // + + else + _SplatSelectedBits.InterlockedAnd(wordIdx * 4, ~(1u << bitIdx)); // - +} + +float3 _SelectionDelta; + +bool IsSplatSelected(uint idx) +{ + uint wordIdx = idx / 32; + uint bitIdx = idx & 31; + uint selVal = _SplatSelectedBits.Load(wordIdx * 4); + return (selVal & (1 << bitIdx)) != 0; +} + +[numthreads(GROUP_SIZE,1,1)] +void CSTranslateSelection (uint3 id : SV_DispatchThreadID) +{ + uint idx = id.x; + if (idx >= _SplatCount) + return; + if (!IsSplatSelected(idx)) + return; + + uint fmt = _SplatFormat & 0xFF; + if (_SplatChunkCount == 0 && fmt == VECTOR_FMT_32F) + { + uint stride = 12; + float3 pos = asfloat(_SplatPos.Load3(idx * stride)); + pos += _SelectionDelta; + _SplatPos.Store3(idx * stride, asuint(pos)); + } +} + +float3 _SelectionCenter; +float4 _SelectionDeltaRot; +ByteAddressBuffer _SplatPosMouseDown; +ByteAddressBuffer _SplatOtherMouseDown; + +[numthreads(GROUP_SIZE,1,1)] +void CSRotateSelection (uint3 id : SV_DispatchThreadID) +{ + uint idx = id.x; + if (idx >= _SplatCount) + return; + if (!IsSplatSelected(idx)) + return; + + uint posFmt = _SplatFormat & 0xFF; + if (_SplatChunkCount == 0 && posFmt == VECTOR_FMT_32F) + { + uint posStride = 12; + float3 pos = asfloat(_SplatPosMouseDown.Load3(idx * posStride)); + pos -= _SelectionCenter; + pos = mul(_MatrixObjectToWorld, float4(pos,1)).xyz; + pos = QuatRotateVector(pos, _SelectionDeltaRot); + pos = mul(_MatrixWorldToObject, float4(pos,1)).xyz; + pos += _SelectionCenter; + _SplatPos.Store3(idx * posStride, asuint(pos)); + } + + uint scaleFmt = (_SplatFormat >> 8) & 0xFF; + uint shFormat = (_SplatFormat >> 16) & 0xFF; + if (_SplatChunkCount == 0 && scaleFmt == VECTOR_FMT_32F && shFormat == VECTOR_FMT_32F) + { + uint otherStride = 4 + 12; + uint rotVal = _SplatOtherMouseDown.Load(idx * otherStride); + float4 rot = DecodeRotation(DecodePacked_10_10_10_2(rotVal)); + + //@TODO: correct rotation + rot = QuatMul(rot, _SelectionDeltaRot); + + rotVal = EncodeQuatToNorm10(PackSmallest3Rotation(rot)); + _SplatOther.Store(idx * otherStride, rotVal); + } + + //@TODO: rotate SHs +} + +//@TODO: maybe scale the splat scale itself too? +[numthreads(GROUP_SIZE,1,1)] +void CSScaleSelection (uint3 id : SV_DispatchThreadID) +{ + uint idx = id.x; + if (idx >= _SplatCount) + return; + if (!IsSplatSelected(idx)) + return; + + uint fmt = _SplatFormat & 0xFF; + if (_SplatChunkCount == 0 && fmt == VECTOR_FMT_32F) + { + uint stride = 12; + float3 pos = asfloat(_SplatPosMouseDown.Load3(idx * stride)); + pos -= _SelectionCenter; + pos = mul(_MatrixObjectToWorld, float4(pos,1)).xyz; + pos *= _SelectionDelta; + pos = mul(_MatrixWorldToObject, float4(pos,1)).xyz; + pos += _SelectionCenter; + _SplatPos.Store3(idx * stride, asuint(pos)); + } +} + +struct ExportSplatData +{ + float3 pos; + float3 nor; + float3 dc0; + float4 shR14; float4 shR58; float4 shR9C; float3 shRDF; + float4 shG14; float4 shG58; float4 shG9C; float3 shGDF; + float4 shB14; float4 shB58; float4 shB9C; float3 shBDF; + float opacity; + float3 scale; + float4 rot; +}; +RWStructuredBuffer _ExportBuffer; + +float3 ColorToSH0(float3 col) +{ + return (col - 0.5) / 0.2820948; +} +float InvSigmoid(float v) +{ + return log(v / max(1 - v, 1.0e-6)); +} + +// SH rotation +#include "SphericalHarmonics.hlsl" + +void RotateSH(inout SplatSHData sh, float3x3 rot) +{ + float3 shin[16]; + float3 shout[16]; + shin[0] = sh.col; + shin[1] = sh.sh1; + shin[2] = sh.sh2; + shin[3] = sh.sh3; + shin[4] = sh.sh4; + shin[5] = sh.sh5; + shin[6] = sh.sh6; + shin[7] = sh.sh7; + shin[8] = sh.sh8; + shin[9] = sh.sh9; + shin[10] = sh.sh10; + shin[11] = sh.sh11; + shin[12] = sh.sh12; + shin[13] = sh.sh13; + shin[14] = sh.sh14; + shin[15] = sh.sh15; + RotateSH(rot, 4, shin, shout); + sh.col = shout[0]; + sh.sh1 = shout[1]; + sh.sh2 = shout[2]; + sh.sh3 = shout[3]; + sh.sh4 = shout[4]; + sh.sh5 = shout[5]; + sh.sh6 = shout[6]; + sh.sh7 = shout[7]; + sh.sh8 = shout[8]; + sh.sh9 = shout[9]; + sh.sh10 = shout[10]; + sh.sh11 = shout[11]; + sh.sh12 = shout[12]; + sh.sh13 = shout[13]; + sh.sh14 = shout[14]; + sh.sh15 = shout[15]; +} + +float3x3 CalcSHRotMatrix(float4x4 objToWorld) +{ + float3x3 m = (float3x3)objToWorld; + float sx = length(float3(m[0][0], m[0][1], m[0][2])); + float sy = length(float3(m[1][0], m[1][1], m[1][2])); + float sz = length(float3(m[2][0], m[2][1], m[2][2])); + + float invSX = 1.0 / sx; + float invSY = 1.0 / sy; + float invSZ = 1.0 / sz; + + m[0][0] *= invSX; + m[0][1] *= invSX; + m[0][2] *= invSX; + m[1][0] *= invSY; + m[1][1] *= invSY; + m[1][2] *= invSY; + m[2][0] *= invSZ; + m[2][1] *= invSZ; + m[2][2] *= invSZ; + return m; +} + + +float4 _ExportTransformRotation; +float3 _ExportTransformScale; +uint _ExportTransformFlags; + +[numthreads(GROUP_SIZE,1,1)] +void CSExportData (uint3 id : SV_DispatchThreadID) +{ + uint idx = id.x; + if (idx >= _SplatCount) + return; + SplatData src = LoadSplatData(idx); + + bool isCut = IsSplatCut(src.pos); + + // transform splat by matrix, if needed + if (_ExportTransformFlags != 0) + { + src.pos = mul(_MatrixObjectToWorld, float4(src.pos,1)).xyz; + + // note: this only handles axis flips from scale, not any arbitrary scaling + if (_ExportTransformScale.x < 0) + src.rot.yz = -src.rot.yz; + if (_ExportTransformScale.y < 0) + src.rot.xz = -src.rot.xz; + if (_ExportTransformScale.z < 0) + src.rot.xy = -src.rot.xy; + src.rot = QuatMul(_ExportTransformRotation, src.rot); + src.scale *= abs(_ExportTransformScale); + + float3x3 shRot = CalcSHRotMatrix(_MatrixObjectToWorld); + RotateSH(src.sh, shRot); + } + + ExportSplatData dst; + dst.pos = src.pos; + dst.nor = 0; + dst.dc0 = ColorToSH0(src.sh.col); + + dst.shR14 = float4(src.sh.sh1.r, src.sh.sh2.r, src.sh.sh3.r, src.sh.sh4.r); + dst.shR58 = float4(src.sh.sh5.r, src.sh.sh6.r, src.sh.sh7.r, src.sh.sh8.r); + dst.shR9C = float4(src.sh.sh9.r, src.sh.sh10.r, src.sh.sh11.r, src.sh.sh12.r); + dst.shRDF = float3(src.sh.sh13.r, src.sh.sh14.r, src.sh.sh15.r); + + dst.shG14 = float4(src.sh.sh1.g, src.sh.sh2.g, src.sh.sh3.g, src.sh.sh4.g); + dst.shG58 = float4(src.sh.sh5.g, src.sh.sh6.g, src.sh.sh7.g, src.sh.sh8.g); + dst.shG9C = float4(src.sh.sh9.g, src.sh.sh10.g, src.sh.sh11.g, src.sh.sh12.g); + dst.shGDF = float3(src.sh.sh13.g, src.sh.sh14.g, src.sh.sh15.g); + + dst.shB14 = float4(src.sh.sh1.b, src.sh.sh2.b, src.sh.sh3.b, src.sh.sh4.b); + dst.shB58 = float4(src.sh.sh5.b, src.sh.sh6.b, src.sh.sh7.b, src.sh.sh8.b); + dst.shB9C = float4(src.sh.sh9.b, src.sh.sh10.b, src.sh.sh11.b, src.sh.sh12.b); + dst.shBDF = float3(src.sh.sh13.b, src.sh.sh14.b, src.sh.sh15.b); + + dst.opacity = InvSigmoid(src.opacity); + dst.scale = log(src.scale); + dst.rot = src.rot.wxyz; + + if (isCut) + dst.nor = 1; // mark as skipped for export + + _ExportBuffer[idx] = dst; +} + +RWByteAddressBuffer _CopyDstPos; +RWByteAddressBuffer _CopyDstOther; +RWByteAddressBuffer _CopyDstSH; +RWByteAddressBuffer _CopyDstEditDeleted; +RWTexture2D _CopyDstColor; +uint _CopyDstSize, _CopySrcStartIndex, _CopyDstStartIndex, _CopyCount; + +float4x4 _CopyTransformMatrix; +float4 _CopyTransformRotation; +float3 _CopyTransformScale; + +[numthreads(GROUP_SIZE,1,1)] +void CSCopySplats (uint3 id : SV_DispatchThreadID) +{ + uint idx = id.x; + if (idx >= _CopyCount) + return; + uint srcIdx = _CopySrcStartIndex + idx; + uint dstIdx = _CopyDstStartIndex + idx; + if (srcIdx >= _SplatCount || dstIdx >= _CopyDstSize) + return; + + SplatData src = LoadSplatData(idx); + + // transform the splat + src.pos = mul(_CopyTransformMatrix, float4(src.pos,1)).xyz; + // note: this only handles axis flips from scale, not any arbitrary scaling + if (_CopyTransformScale.x < 0) + src.rot.yz = -src.rot.yz; + if (_CopyTransformScale.y < 0) + src.rot.xz = -src.rot.xz; + if (_CopyTransformScale.z < 0) + src.rot.xy = -src.rot.xy; + src.rot = QuatMul(_CopyTransformRotation, src.rot); + src.scale *= abs(_CopyTransformScale); + + float3x3 shRot = CalcSHRotMatrix(_CopyTransformMatrix); + RotateSH(src.sh, shRot); + + // output data into destination: + // pos + uint posStride = 12; + _CopyDstPos.Store3(dstIdx * posStride, asuint(src.pos)); + // rot + scale + uint otherStride = 4 + 12; + uint rotVal = EncodeQuatToNorm10(PackSmallest3Rotation(src.rot)); + _CopyDstOther.Store4(dstIdx * otherStride, uint4( + rotVal, + asuint(src.scale.x), + asuint(src.scale.y), + asuint(src.scale.z))); + // color + uint3 pixelIndex = SplatIndexToPixelIndex(dstIdx); + _CopyDstColor[pixelIndex.xy] = float4(src.sh.col, src.opacity); + + // SH + uint shStride = 192; // 15*3 fp32, rounded up to multiple of 16 + uint shOffset = dstIdx * shStride; + _CopyDstSH.Store3(shOffset + 12 * 0, asuint(src.sh.sh1)); + _CopyDstSH.Store3(shOffset + 12 * 1, asuint(src.sh.sh2)); + _CopyDstSH.Store3(shOffset + 12 * 2, asuint(src.sh.sh3)); + _CopyDstSH.Store3(shOffset + 12 * 3, asuint(src.sh.sh4)); + _CopyDstSH.Store3(shOffset + 12 * 4, asuint(src.sh.sh5)); + _CopyDstSH.Store3(shOffset + 12 * 5, asuint(src.sh.sh6)); + _CopyDstSH.Store3(shOffset + 12 * 6, asuint(src.sh.sh7)); + _CopyDstSH.Store3(shOffset + 12 * 7, asuint(src.sh.sh8)); + _CopyDstSH.Store3(shOffset + 12 * 8, asuint(src.sh.sh9)); + _CopyDstSH.Store3(shOffset + 12 * 9, asuint(src.sh.sh10)); + _CopyDstSH.Store3(shOffset + 12 * 10, asuint(src.sh.sh11)); + _CopyDstSH.Store3(shOffset + 12 * 11, asuint(src.sh.sh12)); + _CopyDstSH.Store3(shOffset + 12 * 12, asuint(src.sh.sh13)); + _CopyDstSH.Store3(shOffset + 12 * 13, asuint(src.sh.sh14)); + _CopyDstSH.Store3(shOffset + 12 * 14, asuint(src.sh.sh15)); + + // deleted bits + uint srcWordIdx = srcIdx / 32; + uint srcBitIdx = srcIdx & 31; + if (_SplatDeletedBits.Load(srcWordIdx * 4) & (1u << srcBitIdx)) + { + uint dstWordIdx = dstIdx / 32; + uint dstBitIdx = dstIdx & 31; + _CopyDstEditDeleted.InterlockedOr(dstWordIdx * 4, 1u << dstBitIdx); + } +} diff --git a/MVS/3DGS-Unity/Shaders/SplatUtilities.compute.meta b/MVS/3DGS-Unity/Shaders/SplatUtilities.compute.meta new file mode 100644 index 00000000..038eddbd --- /dev/null +++ b/MVS/3DGS-Unity/Shaders/SplatUtilities.compute.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ec84f78b836bd4f96a105d6b804f08bd +ComputeShaderImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/package.json b/MVS/3DGS-Unity/package.json new file mode 100644 index 00000000..1f91eddc --- /dev/null +++ b/MVS/3DGS-Unity/package.json @@ -0,0 +1,13 @@ +{ + "author": "Aras Pranckevicius", + "dependencies": { "com.unity.burst": "1.8.8", "com.unity.collections": "2.1.4", "com.unity.mathematics": "1.2.6" }, + "description": "3D Gaussian Splatting rendering and tools", + "displayName": "Gaussian Splatting", + "keywords": [ "unity" ], + "license": "MIT", + "name": "org.nesnausk.gaussian-splatting", + "repository": "github:aras-p/UnityGaussianSplatting", + "unity": "2022.3", + "unityRelease": "7f1", + "version": "1.0.0" +} diff --git a/MVS/3DGS-Unity/package.json.meta b/MVS/3DGS-Unity/package.json.meta new file mode 100644 index 00000000..84bd996a --- /dev/null +++ b/MVS/3DGS-Unity/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 110db01d54641354399a53474743e47b +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MVS/3DGS-Unity/room.ply b/MVS/3DGS-Unity/room.ply new file mode 100644 index 00000000..e9c819dc --- /dev/null +++ b/MVS/3DGS-Unity/room.ply @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9fb37dd1f3f93a6c429f0ecc56d3b52540c4a5b0a286a65f458b020b50da870a +size 363144460 diff --git a/tests/OpenGL/res/models/backpack/ao.jpg b/MVS/OpenGL/res/models/backpack/ao.jpg similarity index 100% rename from tests/OpenGL/res/models/backpack/ao.jpg rename to MVS/OpenGL/res/models/backpack/ao.jpg diff --git a/tests/OpenGL/res/models/backpack/backpack.mtl b/MVS/OpenGL/res/models/backpack/backpack.mtl similarity index 100% rename from tests/OpenGL/res/models/backpack/backpack.mtl rename to MVS/OpenGL/res/models/backpack/backpack.mtl diff --git a/tests/OpenGL/res/models/backpack/diffuse.jpg b/MVS/OpenGL/res/models/backpack/diffuse.jpg similarity index 100% rename from tests/OpenGL/res/models/backpack/diffuse.jpg rename to MVS/OpenGL/res/models/backpack/diffuse.jpg diff --git a/tests/OpenGL/res/models/backpack/normal.png b/MVS/OpenGL/res/models/backpack/normal.png similarity index 100% rename from tests/OpenGL/res/models/backpack/normal.png rename to MVS/OpenGL/res/models/backpack/normal.png diff --git a/tests/OpenGL/res/models/backpack/roughness.jpg b/MVS/OpenGL/res/models/backpack/roughness.jpg similarity index 100% rename from tests/OpenGL/res/models/backpack/roughness.jpg rename to MVS/OpenGL/res/models/backpack/roughness.jpg diff --git a/tests/OpenGL/res/models/backpack/source_attribution.txt b/MVS/OpenGL/res/models/backpack/source_attribution.txt similarity index 100% rename from tests/OpenGL/res/models/backpack/source_attribution.txt rename to MVS/OpenGL/res/models/backpack/source_attribution.txt diff --git a/tests/OpenGL/res/models/backpack/specular.jpg b/MVS/OpenGL/res/models/backpack/specular.jpg similarity index 100% rename from tests/OpenGL/res/models/backpack/specular.jpg rename to MVS/OpenGL/res/models/backpack/specular.jpg diff --git a/docs/api/XCEngine/Editor/Editor.md b/docs/api/XCEngine/Editor/Editor.md index bbfcfedd..b163c079 100644 --- a/docs/api/XCEngine/Editor/Editor.md +++ b/docs/api/XCEngine/Editor/Editor.md @@ -4,51 +4,86 @@ **类型**: `app-module` -**描述**: 编辑器应用层 API 文档入口,镜像 `editor/src` 的目录结构,覆盖编辑器启动、上下文、面板工作区、项目浏览、场景编辑与 UI 基础设施。 +**描述**: XCEngine 独立编辑器应用层 API 文档入口,对应 `editor/src/**` 的模块结构,覆盖应用启动、上下文、面板、布局、命令、动作路由与 UI 基础设施。 ## 概述 -这一组文档对应的不是 `engine/include/XCEngine` 的 public engine headers,而是独立编辑器应用 `editor/src/**`。 +这一组文档对应的不是 `engine/include/XCEngine/**` 那类“引擎公共运行时头文件”,而是编辑器应用本身的源码模块。换句话说,这里的 API 更接近“工具层架构说明”和“编辑器内部可复用接口”,而不是给游戏运行时代码直接依赖的稳定 SDK。 -因此这里需要先建立一个正确心智模型: +当前 Editor 的主链路可以概括为: -- `XCEngine` 引擎模块负责运行时系统。 -- `Editor` 模块负责围绕这些运行时系统搭建编辑器应用。 -- 它更接近“应用层/工具层 API”,而不是给游戏代码直接依赖的稳定引擎 ABI。 +1. [Application](Application/Application.md) + 启动 Win32 窗口、D3D12 窗口渲染器、ImGui 会话与编辑器上下文。 +2. [Core](Core/Core.md) + 组织事件总线、选择系统、撤销系统、场景与项目管理接口。 +3. [Layers](Layers/Layers.md) + 让 `EditorLayer` 承担编辑器工作区生命周期。 +4. [Layout](Layout/Layout.md) + 构建 dockspace、默认布局与工作区停靠关系。 +5. [panels](panels/panels.md) + 承载 Scene / Game / Hierarchy / Inspector / Console / Project 等主要工作面板。 +6. [UI](UI/UI.md) + 承载 Dear ImGui 上层的主题 token、chrome、树视图、属性布局和通用 widget。 -当前编辑器的主链路大致是: +## 架构定位 -1. [Application](Application/Application.md) 启动 Win32 窗口、D3D12 窗口渲染器和 ImGui 会话。 -2. [Core::EditorContext](Core/EditorContext/EditorContext.md) 组装事件总线、场景管理、项目管理、选择管理和撤销系统。 -3. [Layers::EditorLayer](Layers/EditorLayer/EditorLayer.md) 承载编辑器工作区生命周期。 -4. [Core::EditorWorkspace](Core/EditorWorkspace/EditorWorkspace.md) 组织菜单、层级、场景视图、GameView、Inspector、Console 和 Project 等面板。 +从架构视角看,`Editor` 模块解决的是“如何把引擎运行时能力组织成一个可编辑、可观察、可操作的工具应用”。 + +这和商业游戏引擎的常见分层非常一致: + +- 引擎运行时负责场景、组件、渲染、资源和脚本能力。 +- 编辑器应用负责把这些能力包装成面板、命令、菜单、工作区与交互流。 + +因此阅读这套文档时,最重要的前置认知是:Editor 层的很多接口是为工具体验服务的,它们允许比运行时 API 更强的耦合、更明确的 UI 约束和更直接的产品导向。 + +## 当前重构重点 + +结合当前 `editor/src` 的实现,Editor 文档当前有几个结构上非常重要的重构点: + +- `UI.h` 现在明确作为 umbrella header 处理,其职责是聚合常用 UI helper,而不是声明新的运行时类型。 +- `TreeView`、`PropertyLayout`、`BuiltInIcons`、`DockTabBarChrome` 等新基础设施已经成为多个面板共享的 UI 基建。 +- `HierarchyPanel` 和 `ProjectPanel` 的实现已经明显转向“面板只负责呈现与路由,动作层 / 命令层负责执行业务”的分层。 + +这意味着 Editor 文档不能只做目录映射,还必须解释这些共享基础设施为什么存在、它们如何把编辑器代码从面板私有技巧提升为稳定的产品层模式。 + +## 聚合与辅助文件 + +并不是 `editor/src/**` 下每个文件都值得成为单独 API 页。当前有几类文件更适合在模块页说明: + +- `editor/src/UI/UI.h` + 这是 UI 子模块的 umbrella header,文档并入 [UI](UI/UI.md)。 +- `editor/src/EditorResources.h` + 当前只定义了 `IDI_APP_ICON 101`,用于 `EditorApp.rc` 的资源 id 绑定,更适合作为 Editor 应用资源入口说明,而不是独立类型页。 +- `editor/src/EditorApp.rc`、`editor/src/main.cpp` + 属于应用启动与资源清单支撑文件,不是面向上层复用的编辑器 API。 + +这种处理方式符合当前文档规范:只有真正承担模块职责或可复用契约的文件才进入 canonical API 树;纯资源声明和应用入口支撑文件优先并入模块说明。 ## 当前实现边界 -- 当前编辑器主要是 Windows + D3D12 + ImGui 路径。 -- 这组代码整体是应用层源码,不像 engine public headers 那样已经完全按稳定 SDK 方式整理。 -- 当前文档页会优先标注 `源文件`,而不是 `头文件`,以反映它们来自 `editor/src/**`。 -- 当前自动审计脚本仍以 `engine/include/XCEngine` 为主,因此 `Editor` 这组页主要靠链接完整性和人工结构约束维护。 +- 当前编辑器主路径仍然以 Windows + D3D12 + Dear ImGui 为核心。 +- 这套代码整体属于应用层源码,不应误解为已经整理成稳定插件 SDK。 +- 自动审计脚本目前主要覆盖 `engine/include/XCEngine/**` 的 public headers;Editor 这组文档更依赖目录并行约束、链接校验和人工核对源码行为。 ## 目录 - [Application](Application/Application.md) - 顶层编辑器应用入口。 -- [Theme](Theme/Theme.md) - 顶层主题入口。 -- [Core](Core/Core.md) - 上下文、事件、撤销、选择与基础数据结构。 -- [Managers](Managers/Managers.md) - 项目与场景管理实现。 -- [panels](panels/panels.md) - 编辑器面板基础设施。 +- [Actions](Actions/Actions.md) - 菜单、快捷键、按钮动作绑定与路由。 +- [Commands](Commands/Commands.md) - 面向场景与项目操作的命令封装。 +- [ComponentEditors](ComponentEditors/ComponentEditors.md) - 组件编辑器注册与实现。 +- [Core](Core/Core.md) - 上下文、事件、撤销、选择与基础接口。 - [Layers](Layers/Layers.md) - 编辑器 layer 封装。 -- [Platform](Platform/Platform.md) - Win32 窗口宿主与 D3D12 窗口渲染器。 -- [UI](UI/UI.md) - ImGui 会话与编辑器 UI 基础设施。 -- [Actions](Actions/Actions.md) - 菜单/按钮/快捷键动作绑定与路由层。 -- [Commands](Commands/Commands.md) - 面向场景与项目操作的高层命令封装。 -- [ComponentEditors](ComponentEditors/ComponentEditors.md) - 组件属性编辑器注册与实现层。 - [Layout](Layout/Layout.md) - Dock 布局控制。 +- [Managers](Managers/Managers.md) - 项目和场景管理实现。 +- [panels](panels/panels.md) - 主要工作面板。 +- [Platform](Platform/Platform.md) - Win32 宿主与 D3D12 窗口渲染路径。 +- [Theme](Theme/Theme.md) - 顶层主题入口。 +- [UI](UI/UI.md) - Editor UI 基础设施。 - [Utils](Utils/Utils.md) - 场景编辑与撤销相关辅助函数。 ## 相关文档 -- [XCEngine 根目录](../XCEngine.md) +- [XCEngine](../XCEngine.md) - [Scene](../Scene/Scene.md) - [Components](../Components/Components.md) - [Rendering](../Rendering/Rendering.md) diff --git a/docs/api/XCEngine/Editor/UI/BuiltInIcons/BuiltInIcons.md b/docs/api/XCEngine/Editor/UI/BuiltInIcons/BuiltInIcons.md new file mode 100644 index 00000000..f760d29b --- /dev/null +++ b/docs/api/XCEngine/Editor/UI/BuiltInIcons/BuiltInIcons.md @@ -0,0 +1,107 @@ +# BuiltInIcons + +**命名空间**: `XCEngine::Editor::UI` + +**类型**: `header-helper + enum class` + +**源文件**: `editor/src/UI/BuiltInIcons.h` + +**描述**: 为编辑器的资源树、资源网格和层级树提供内置图标枚举、初始化入口与统一绘制函数。 + +## 概述 + +`BuiltInIcons.h` 解决的不是“如何显示一张纹理”这个底层问题,而是“编辑器里哪些地方应该用统一图标语言表达文件夹、文件和场景对象”这个产品层问题。 + +当前源码里,这一层主要服务于三个界面: + +- `HierarchyPanel` 通过 `GameObject` 图标给场景树节点补前缀。 +- `ProjectPanel` 通过 `Folder` / `File` 图标绘制左侧目录树和右侧资源卡片。 +- `ProjectActionRouter` 在拖拽预览等交互里复用同一套图标语义。 + +这和商业级编辑器常见的做法一致:业务面板不直接持有纹理资源,不自己决定某一类对象该显示什么图标,而是把“对象类别 -> 图标表现”的决定集中到一层共享 helper 中。这样做的好处是统一、可替换,而且不会让每个面板都自己重复写上传纹理、绘制 fallback 图形、适配尺寸的逻辑。 + +## 公开 API + +| 成员 | 说明 | +|------|------| +| `enum class AssetIconKind { Folder, File, GameObject }` | 定义当前编辑器可识别的内置图标类别。 | +| `InitializeBuiltInIcons(ImGuiBackendBridge&, ID3D12Device*, ID3D12CommandQueue*)` | 初始化图标系统,上传贴图并分配 ImGui 可见的 SRV 描述符。 | +| `ShutdownBuiltInIcons()` | 释放内置图标占用的 GPU 资源与描述符。 | +| `DrawAssetIcon(ImDrawList*, const ImVec2& min, const ImVec2& max, AssetIconKind)` | 在给定矩形内绘制指定类别的图标。 | + +## 生命周期 + +- 这一层本质上是一个进程级的全局状态,当前实现通过匿名命名空间里的 `g_icons` 保存后端指针和已上传纹理。 +- 正确顺序是先初始化 `ImGuiBackendBridge`,再调用 `InitializeBuiltInIcons(...)`。 +- 关闭时应先停止使用这些图标,再调用 `ShutdownBuiltInIcons()`,最后销毁 ImGui 后端。 +- 当前 `Application::InitializeImGui()` 和 `Application::Shutdown()` 已经按照这个顺序接线。 + +## 当前实现行为 + +按 `editor/src/UI/BuiltInIcons.cpp` 的实现,当前版本有几个值得明确写进文档的事实: + +- 只有 `Folder` 和 `GameObject` 两类图标会尝试从磁盘加载 PNG。 +- 图标路径不是从项目目录查找,而是从可执行文件目录推导到 `../../resources/Icons/folder_icon.png` 与 `../../resources/Icons/gameobject_icon.png`。 +- 贴图上传路径目前只支持 D3D12,上传时会创建默认堆纹理、上传堆 buffer、一次性命令列表,并在结束后主动等待命令队列空闲。 +- `File` 图标当前不是贴图资源,而是运行时用 `ImDrawList` 直接画出的简化文件形状。 +- 如果 `Folder` / `GameObject` 的 PNG 加载失败,系统不会抛出错误或写日志;它会静默退回到程序化绘制的 fallback 图标。 + +这意味着它更接近“编辑器内部视觉资源辅助层”,而不是一个对外稳定暴露的通用图标资源系统。 + +## 设计说明 + +如果把它和 Unity 的使用体验类比,可以把这层理解成“轻量版的内建编辑器图标入口”。它的目标不是提供一个完整的图标数据库,而是确保最核心的编辑器对象类型在不同面板里看起来一致。 + +这样设计的收益是: + +- 面板代码只关心“我要画文件夹图标”,而不关心纹理从哪里来。 +- 资源加载失败时仍然有 fallback,不会导致整个面板失去可用性。 +- 以后如果要统一替换图标风格,只需要改这一层,而不是同时改 `HierarchyPanel`、`ProjectPanel` 和拖拽预览逻辑。 + +代价也很明确: + +- 当前实现和 D3D12 / ImGui 后端强绑定,还不是渲染后端无关的接口。 +- 图标集合很小,只覆盖当前编辑器刚需。 +- 路径解析和加载失败处理还比较工程化,不是面向内容制作流程的资源系统。 + +## 线程语义 + +- 这套 API 应被视为仅限编辑器 UI / 渲染线程使用。 +- 初始化和销毁会触发 GPU 资源分配、命令提交与队列等待,不适合在任意后台线程上调用。 +- `DrawAssetIcon(...)` 依赖当前帧的 `ImDrawList` 和 ImGui 绘制上下文,也只能在 ImGui 绘制阶段调用。 + +## 典型用法 + +```cpp +// 初始化阶段 +m_imguiBackend.Initialize(...); +UI::InitializeBuiltInIcons( + m_imguiBackend, + m_windowRenderer.GetDevice(), + m_windowRenderer.GetCommandQueue()); + +// 面板绘制阶段 +UI::DrawAssetIcon( + ImGui::GetWindowDrawList(), + iconMin, + iconMax, + UI::AssetIconKind::Folder); + +// 关闭阶段 +UI::ShutdownBuiltInIcons(); +``` + +## 当前限制 + +- 当前只支持 D3D12 上传路径,没有 OpenGL / Vulkan / 软件后备实现。 +- 图标种类固定为 `Folder`、`File`、`GameObject` 三类。 +- 没有热重载、主题切换或 DPI 变体资源管理。 +- 加载失败时以静默 fallback 为主,没有诊断级错误反馈。 + +## 相关文档 + +- [UI](../UI.md) +- [StyleTokens](../StyleTokens/StyleTokens.md) +- [Application](../../Application/Application.md) +- [HierarchyPanel](../../panels/HierarchyPanel/HierarchyPanel.md) +- [ProjectPanel](../../panels/ProjectPanel/ProjectPanel.md) diff --git a/docs/api/XCEngine/Editor/UI/DividerChrome/DividerChrome.md b/docs/api/XCEngine/Editor/UI/DividerChrome/DividerChrome.md new file mode 100644 index 00000000..c729df56 --- /dev/null +++ b/docs/api/XCEngine/Editor/UI/DividerChrome/DividerChrome.md @@ -0,0 +1,73 @@ +# DividerChrome + +**命名空间**: `XCEngine::Editor::UI` + +**类型**: `header-helper` + +**源文件**: `editor/src/UI/DividerChrome.h` + +**描述**: 提供编辑器面板分隔线的轻量绘制函数,用统一的 `StyleTokens` 控制颜色与线宽。 + +## 概述 + +`DividerChrome.h` 很小,但它承担的是“视觉一致性”而不是“复杂交互”。它把横向分隔线、纵向分隔线和当前窗口底边线抽成统一 helper,避免各个面板自己散落写 `AddLine(...)` 与硬编码颜色。 + +在商业编辑器里,这类 helper 很常见,因为它们能把“只是画一条线”这件小事也纳入统一设计系统:线宽、颜色、出现位置都不再是面板作者自己临时决定,而是由共享 token 决定。 + +## 公开 API + +| 成员 | 说明 | +|------|------| +| `DrawHorizontalDivider(...)` | 在任意 `ImDrawList` 上绘制一条横向分隔线。 | +| `DrawVerticalDivider(...)` | 在任意 `ImDrawList` 上绘制一条纵向分隔线。 | +| `DrawCurrentWindowBottomDivider(...)` | 读取当前 ImGui 窗口的矩形并在底边绘制横线。 | + +## 当前实现行为 + +按 `editor/src/UI/DividerChrome.h` 的实现: + +- 默认颜色来自 `PanelDividerColor()`。 +- 默认厚度来自 `PanelDividerThickness()`。 +- 如果传入的 `drawList` 为空,或绘制范围是退化区间,函数会直接返回。 +- `DrawCurrentWindowBottomDivider(...)` 不会创建额外布局空间;它只是读取当前窗口的 `Pos` 与 `Size` 后直接在底边绘线。 + +这意味着它是纯绘制 helper,不管理布局、不创建交互区域,也不记录任何状态。 + +## 设计说明 + +把 divider 单独抽出来有两个直接好处: + +- `ProjectPanel`、`PanelChrome`、自定义标签栏都可以复用同一套边界视觉语言。 +- 当设计风格变化时,只要改 token,而不是到处找 `AddLine(...)` 的裸调用。 + +可以把它理解成商业引擎编辑器里“panel chrome”的最小组成部分。它不像 splitter 那样负责拖拽,也不像 toolbar scope 那样负责结构;它只负责把层次边界画正确。 + +## 使用建议 + +- 如果你已经有明确的屏幕坐标,就直接调用 `DrawHorizontalDivider(...)` 或 `DrawVerticalDivider(...)`。 +- 如果你只是想给当前 child/window 补一条底边线,优先用 `DrawCurrentWindowBottomDivider(...)`。 +- 这类 helper 适合放在面板收尾阶段调用,而不是提前调用后再继续写会改变窗口高度的控件。 + +## 典型用法 + +```cpp +ImDrawList* drawList = ImGui::GetWindowDrawList(); +const ImVec2 min = ImGui::GetWindowPos(); +const ImVec2 max(min.x + ImGui::GetWindowSize().x, min.y + ImGui::GetWindowSize().y); + +UI::DrawHorizontalDivider(drawList, min.x, max.x, max.y - 0.5f); +``` + +## 当前限制 + +- 不负责布局留白,调用者必须自己决定线的位置。 +- 没有 hover / active 等交互状态,它不是 splitter。 +- 只是一层对 `ImDrawList::AddLine(...)` 的统一封装,不提供更复杂的边框系统。 + +## 相关文档 + +- [UI](../UI.md) +- [StyleTokens](../StyleTokens/StyleTokens.md) +- [Core](../Core/Core.md) +- [PanelChrome](../PanelChrome/PanelChrome.md) +- [ProjectPanel](../../panels/ProjectPanel/ProjectPanel.md) diff --git a/docs/api/XCEngine/Editor/UI/DockTabBarChrome/DockTabBarChrome.md b/docs/api/XCEngine/Editor/UI/DockTabBarChrome/DockTabBarChrome.md new file mode 100644 index 00000000..54e4a2c5 --- /dev/null +++ b/docs/api/XCEngine/Editor/UI/DockTabBarChrome/DockTabBarChrome.md @@ -0,0 +1,103 @@ +# DockTabBarChrome + +**命名空间**: `XCEngine::Editor::UI` + +**类型**: `header-helper` + +**源文件**: `editor/src/UI/DockTabBarChrome.h` + +**描述**: 基于 ImGui Docking 内部节点实现自定义停靠标签栏外观、选中逻辑、拖拽排序与拖出浮动行为。 + +## 概述 + +`DockTabBarChrome.h` 是当前 Editor UI 里技术耦合度最高的一层 helper 之一。它的职责不是创建 dockspace,而是在 ImGui 已经提供 docking 能力的前提下,把默认标签栏替换成一套更像商业编辑器的自定义标签栏。 + +当前这套方案由两部分组成: + +- `ConfigureDockTabBarChrome(...)` 递归配置 dock node,关闭原生 tab bar,并确保叶子节点处于可绘制的稳定状态。 +- `DrawDockedWindowTabStrip()` 在具体面板窗口内部补画自定义标签条。 + +从调用关系上看: + +- `DockLayoutController::RenderDockspace()` 负责每帧配置 dockspace 节点。 +- `PanelChrome::PanelWindowScope` 在 `ImGui::Begin(...)` 成功后调用 `DrawDockedWindowTabStrip()`。 + +也就是说,这一层本质上是“布局层 + 面板 chrome 层”的协作产物,而不是某一个面板自己的私有实现。 + +## 建议视为公开入口的函数 + +虽然头文件里存在很多 inline helper,但从设计意图上,真正应该被其他模块直接依赖的入口主要只有下面三个: + +| 成员 | 说明 | +|------|------| +| `ConfigureDockTabBarChrome(ImGuiDockNode* node)` | 对指定 dock node 递归应用自定义 tab bar 策略。 | +| `ConfigureDockTabBarChrome(ImGuiID dockspaceId)` | 通过 dockspace id 找到 root node 并应用同样策略。 | +| `DrawDockedWindowTabStrip()` | 在当前面板窗口顶部绘制自定义标签条。 | + +其他诸如 `DockTabOrderCache()`、`ReorderDockTab(...)`、`BeginCustomDockTabUndock(...)` 之类的函数,虽然在头文件可见,但更适合作为当前实现细节理解,而不是稳定的上层调用契约。 + +## 当前实现行为 + +按 `editor/src/UI/DockTabBarChrome.h` 的实现,当前版本具备以下行为: + +- 对叶子 `ImGuiDockNode` 会强制设置 `ImGuiDockNodeFlags_NoTabBar`、`NoWindowMenuButton`、`NoCloseButton`,隐藏 ImGui 原生标签栏。 +- 通过静态 `std::unordered_map>` 维护每个 dock node 的 tab 顺序缓存。 +- 如果当前叶子节点没有显式选中页签,系统会把第一个窗口设为选中页签。 +- 自定义标签条支持: + - 单击切换选中页签。 + - 左键拖拽改变页签顺序。 + - 满足阈值时将页签从当前 dock 节点拖出,进入 ImGui 原生的 undock 流程。 +- 标签颜色、背景色与分隔线使用 `StyleTokens` 和 ImGui dock style 的组合结果。 +- 标签宽度当前按文本宽度加固定水平 padding 计算,没有做更复杂的压缩或滚动策略。 + +这套实现明显不是简单换皮,而是接管了 tab strip 的一部分交互语义。 + +## 设计说明 + +为什么要做这一层,而不是直接接受 ImGui 默认标签栏? + +- 商业编辑器通常会把工作区标签视觉做得更克制、更稳定,以便和工具栏、面板边框形成统一外观。 +- 一旦需要控制页签排序、激活行为、拖出阈值、底部分隔线这些细节,直接用默认样式往往不够。 +- 把这部分逻辑集中在 `DockTabBarChrome.h` 中,能避免 `Hierarchy`、`Scene`、`Console` 这类面板各自处理 dock 标签外观。 + +如果和 Unity 的使用体验类比,这层更像“编辑器工作区标签栏的定制实现”,而不是某个单独窗口组件。 + +## 前置条件与线程语义 + +- 只能在启用了 ImGui Docking 的编辑器 UI 帧里使用。 +- `ConfigureDockTabBarChrome(...)` 应在 dockspace 建立后、面板开始绘制前调用;当前由 `DockLayoutController` 统一负责。 +- `DrawDockedWindowTabStrip()` 需要当前窗口已经 `Begin(...)` 成功且窗口处于 docked 状态;当前由 `PanelWindowScope` 自动调用。 +- 这一层依赖 `imgui_internal.h` 暴露的内部结构,应视为 UI 主线程专用逻辑,不具备线程安全保证。 + +## 典型用法 + +```cpp +const ImGuiID dockspaceId = ImGui::GetID("MainDockspace.Root"); +UI::ConfigureDockTabBarChrome(dockspaceId); + +{ + UI::DockHostStyleScope dockHostStyle; + ImGui::DockSpace(dockspaceId, ImVec2(0.0f, 0.0f), dockFlags); +} +``` + +面板窗口不需要自己手写标签条调用,使用 `PanelWindowScope` 时会自动进入: + +```cpp +UI::PanelWindowScope panel("Hierarchy"); +``` + +## 当前限制 + +- 强依赖 `imgui_internal.h`、`ImGuiWindow`、`ImGuiDockNode` 等内部实现细节,升级 ImGui 时需要重点回归。 +- 当前没有 close button、window menu button,也没有更复杂的 tab overflow 处理。 +- tab 顺序缓存是进程内静态状态,不是跨会话布局资产。 +- 这是 Editor 专用 UI 基建,不适合直接当作通用运行时 UI API 使用。 + +## 相关文档 + +- [UI](../UI.md) +- [StyleTokens](../StyleTokens/StyleTokens.md) +- [PanelChrome](../PanelChrome/PanelChrome.md) +- [DockHostStyle](../DockHostStyle/DockHostStyle.md) +- [DockLayoutController](../../Layout/DockLayoutController/DockLayoutController.md) diff --git a/docs/api/XCEngine/Editor/UI/PropertyLayout/PropertyLayout.md b/docs/api/XCEngine/Editor/UI/PropertyLayout/PropertyLayout.md new file mode 100644 index 00000000..e8b7bf8d --- /dev/null +++ b/docs/api/XCEngine/Editor/UI/PropertyLayout/PropertyLayout.md @@ -0,0 +1,105 @@ +# PropertyLayout + +**命名空间**: `XCEngine::Editor::UI` + +**类型**: `header-helper + struct` + +**源文件**: `editor/src/UI/PropertyLayout.h` + +**描述**: 为 Inspector 属性行提供统一的标签列 / 控件列几何计算,并把具体控件绘制委托给回调。 + +## 概述 + +`PropertyLayout.h` 是当前 Inspector 体验能否“像一个成熟编辑器”而不是“像一堆临时摆放的 ImGui 控件”的关键基础设施。 + +它不直接定义浮点框、复选框或向量输入框,而是先回答一个更底层的问题: + +- 标签列从哪里开始? +- 控件列从哪里开始? +- 当前行有多高? +- 控件应该拿到多宽的可用空间? + +把这层几何计算独立出来以后,`ScalarControls`、`VectorControls`、`PropertyGrid` 这些上层 helper 就可以共享同一套 Inspector 排版规则,而不需要每种控件都重复手算列宽和光标位置。 + +## 公开 API + +| 成员 | 说明 | +|------|------| +| `PropertyLayoutSpec` | 描述标签缩进、控件列起点、标签和控件间距、控件右侧留白。 | +| `PropertyLayoutMetrics` | 保存一行属性被计算出的实际几何结果。 | +| `MakePropertyLayout()` | 生成使用默认 token 的 `PropertyLayoutSpec`。 | +| `PushPropertyLayoutStyles()` | 推入当前属性行需要的样式变量。 | +| `GetPropertyControlWidth(...)` | 根据布局结果返回控件区域宽度。 | +| `SetNextPropertyControlWidth(...)` | 用布局结果直接设置下一个控件的宽度。 | +| `AlignPropertyControlToRight(...)` | 让较窄控件在属性列中右对齐。 | +| `DrawPropertyRow(...)` | 绘制一整行属性,并把具体控件绘制委托给回调。 | + +## 当前实现行为 + +按 `editor/src/UI/PropertyLayout.h` 的实现: + +- `PropertyLayoutSpec` 的默认值直接来自 `StyleTokens.h`,例如 `InspectorPropertyControlColumnStart()` 与 `InspectorPropertyLabelInset()`。 +- `PushPropertyLayoutStyles()` 当前只推入 `ImGuiStyleVar_FramePadding`,并不负责整套 Inspector 样式。 +- `DrawPropertyRow(...)` 会: + - 以 `label` 为 `PushID` 的依据。 + - 读取当前内容区宽度并计算一整行的 label / control 几何。 + - 直接用 `ImDrawList::AddText(...)` 绘制标签文本,而不是创建一个独立的 ImGui label item。 + - 把光标移动到控件列起点,再调用外部回调绘制真正的控件。 + - 最后用 `Dummy(...)` 吃掉这一行占用的高度,确保后续布局连续。 + +这说明它是一层“布局执行器”,不是单纯的常量集合。 + +## 设计说明 + +商业引擎编辑器通常会把 Inspector 的“字段布局规则”和“字段编辑控件”拆开,这一点和 Unity Inspector 的使用体验很像: + +- 左边是稳定的属性标签列。 +- 右边是不同类型字段共享的一列编辑区域。 +- 上层组件编辑器只描述“这里是一条 Position / Rotation / Scale”,而不是自己计算每个字段的横向坐标。 + +这样拆分的收益非常直接: + +- 所有组件编辑器天然保持一致的列对齐。 +- 以后如果想统一调整 Inspector 视觉密度,只需要修改 token 或布局层。 +- `PropertyGrid` 可以专注在“属性语义 + 撤销接线”,而不必再重复几何计算。 + +## 使用模式 + +更推荐的使用方式不是直接手算坐标,而是把控件包进 `DrawPropertyRow(...)` 的回调: + +```cpp +const UI::PropertyLayoutSpec layout = UI::MakePropertyLayout(); + +UI::DrawPropertyRow("Mass", layout, [&](const UI::PropertyLayoutMetrics& metrics) { + UI::SetNextPropertyControlWidth(metrics); + return ImGui::DragFloat("##value", &mass, 0.1f, 0.0f, 1000.0f, "%.2f"); +}); +``` + +如果只是常见属性类型,实际工程里更常见的入口是: + +- `ScalarControls.h` +- `VectorControls.h` +- `PropertyGrid.h` + +它们已经把 `PropertyLayout` 作为底层依赖封装好了。 + +## 线程语义 + +- 这一层完全依赖当前帧的 ImGui 上下文和当前窗口布局状态,只能在 UI 线程、ImGui 绘制阶段调用。 +- 它不维护后台状态,也不适合离线计算布局。 + +## 当前限制 + +- `PushID(label)` 意味着同一作用域里若有重复标签,调用方应额外 `PushID` 以避免冲突。 +- 标签是直接画到 draw list 上的,因此不是可交互的独立 ImGui item。 +- 当前布局仍然是固定列起点模型,不是响应式表单系统。 +- `PushPropertyLayoutStyles()` 目前只做最小样式压栈,离完整的属性主题系统还有距离。 + +## 相关文档 + +- [UI](../UI.md) +- [StyleTokens](../StyleTokens/StyleTokens.md) +- [ScalarControls](../ScalarControls/ScalarControls.md) +- [VectorControls](../VectorControls/VectorControls.md) +- [PropertyGrid](../PropertyGrid/PropertyGrid.md) diff --git a/docs/api/XCEngine/Editor/UI/SplitterChrome/SplitterChrome.md b/docs/api/XCEngine/Editor/UI/SplitterChrome/SplitterChrome.md new file mode 100644 index 00000000..daf69f47 --- /dev/null +++ b/docs/api/XCEngine/Editor/UI/SplitterChrome/SplitterChrome.md @@ -0,0 +1,88 @@ +# SplitterChrome + +**命名空间**: `XCEngine::Editor::UI` + +**类型**: `header-helper + enum class + struct` + +**源文件**: `editor/src/UI/SplitterChrome.h` + +**描述**: 为编辑器面板提供统一的 splitter 主题颜色与拖拽分隔条绘制 / 交互结果。 + +## 概述 + +`SplitterChrome.h` 处理的是“两个区域之间如何被拖拽改变尺寸”这个问题。和 `DividerChrome` 不同,它不只是画一条视觉边界线,而是同时承担: + +- 交互命中区域创建。 +- hover / active 状态计算。 +- 鼠标光标切换。 +- 拖拽位移返回。 + +当前源码中,最直接的使用者是 `ProjectPanel`:左侧目录树和右侧资源浏览区之间的宽度调节完全依赖这层 helper。 + +## 公开 API + +| 成员 | 说明 | +|------|------| +| `enum class SplitterAxis { Vertical, Horizontal }` | 定义 splitter 的主轴方向。 | +| `struct SplitterResult` | 返回当前 splitter 的 hover、active 与拖拽增量。 | +| `ApplySplitterThemeColors(ImVec4* colors)` | 用当前 token 覆盖 ImGui separator / resize grip 相关颜色。 | +| `DrawSplitter(...)` | 绘制 splitter 并返回本帧交互结果。 | + +## 当前实现行为 + +按 `editor/src/UI/SplitterChrome.h` 的实现: + +- `DrawSplitter(...)` 使用 `ImGui::InvisibleButton(...)` 创建命中区域。 +- 命中区域厚度默认来自 `PanelSplitterHitThickness()`,而真正画出来的线宽来自 `PanelSplitterVisibleThickness()`。 +- 当 splitter 处于 active 状态时: + - 纵向 splitter 返回 `MouseDelta.x` + - 横向 splitter 返回 `MouseDelta.y` +- hover 或 active 时会把鼠标指针切到 `ResizeEW` 或 `ResizeNS`。 +- 它只返回“这一帧用户拖了多少”,并不直接修改任何布局变量;调用者必须自己把 `delta` 累加到宽度 / 高度并做 clamp。 + +因此,这层是“交互采样 + 视觉呈现”,不是完整的布局管理器。 + +## 设计说明 + +把 splitter 从具体面板里抽出来是非常典型的商业编辑器实践: + +- 面板只关心自己的布局状态,例如 `m_navigationWidth`。 +- splitter helper 只关心拖拽命中、光标和线条绘制。 +- 主题层通过 `StyleTokens` 统一控制 splitter 粗细、颜色和命中区宽度。 + +这样 `ProjectPanel`、后续的多列 Inspector 或资源导入面板都能使用相同的分隔条行为,而不会出现每个面板“拖动手感都不一样”的问题。 + +## 典型用法 + +```cpp +const UI::SplitterResult splitter = + UI::DrawSplitter("##ProjectPaneSplitter", UI::SplitterAxis::Vertical, totalHeight); + +if (splitter.active) { + m_navigationWidth += splitter.delta; +} +``` + +调用者通常还应该把结果夹紧到合理区间,例如: + +- 最小导航宽度 +- 最小内容区宽度 + +## 线程语义 + +- 只能在 ImGui UI 线程使用。 +- 每帧结果是即时的,不会自动跨帧缓存。 +- `ApplySplitterThemeColors(...)` 修改的是调用方传入的颜色数组,通常应在同一帧、同一上下文中使用。 + +## 当前限制 + +- 当前只提供基础 hover / active 与位移返回,不提供吸附、双击重置、动画过渡等高级行为。 +- 颜色仍然是静态 token,不支持运行时主题切换动画。 +- 由调用者自己负责宽度约束和布局重算,没有更高层的布局容器抽象。 + +## 相关文档 + +- [UI](../UI.md) +- [StyleTokens](../StyleTokens/StyleTokens.md) +- [DividerChrome](../DividerChrome/DividerChrome.md) +- [ProjectPanel](../../panels/ProjectPanel/ProjectPanel.md) diff --git a/docs/api/XCEngine/Editor/UI/StyleTokens/StyleTokens.md b/docs/api/XCEngine/Editor/UI/StyleTokens/StyleTokens.md index dca8ae36..32e6247d 100644 --- a/docs/api/XCEngine/Editor/UI/StyleTokens/StyleTokens.md +++ b/docs/api/XCEngine/Editor/UI/StyleTokens/StyleTokens.md @@ -2,45 +2,90 @@ **命名空间**: `XCEngine::Editor::UI` -**类型**: `header-helper` +**类型**: `header-helper + struct` **源文件**: `editor/src/UI/StyleTokens.h` -**描述**: 统一定义编辑器 UI 使用的颜色、尺寸、间距和布局 token。 +**描述**: 集中定义 Editor UI 的颜色、尺寸、间距与树视图样式,是当前编辑器设计系统的单一 token 源。 ## 概述 -`StyleTokens.h` 是当前 UI 层的设计 token 中心。 -它集中提供了大量 inline token helper,例如: +`StyleTokens.h` 是当前 Editor UI 的设计语言中心。它把原本最容易散落在各个面板、各类 helper 和临时控件中的“魔法数字”集中成一组具名 token,让代码能够表达设计意图,而不是只暴露数值本身。 -- Dock 标签颜色 -- 工具栏高度与 padding -- 资产网格尺寸 -- Inspector 标签列宽 -- 弹窗按钮尺寸 -- 向量控件按钮颜色 -- Console 状态颜色 +例如: + +- `ProjectNavigationDefaultWidth()` 表达的是“项目导航栏默认宽度”。 +- `InspectorPropertyControlColumnStart()` 表达的是“Inspector 控件列起点”。 +- `PanelSplitterHitThickness()` 表达的是“splitter 命中区宽度”。 + +这比直接写 `248.0f`、`236.0f`、`4.0f` 更接近商业编辑器的工程实践,因为当 UI 逐步复杂起来后,真正难维护的从来不是控件本身,而是这些散落的视觉约束。 + +## 当前 token 分组 + +按 `editor/src/UI/StyleTokens.h` 的实现,当前 token 大致可以分成下面几类: + +| 类别 | 代表 token | 主要消费者 | +|------|-------------|------------| +| Dock host / tab | `DockHostFramePadding()`、`DockTabSelectedColor()` | `DockHostStyle`、`DockTabBarChrome` | +| 面板与工具栏 | `PanelWindowPadding()`、`ToolbarPadding()` | `PanelChrome`、各类 panel toolbar | +| Project 浏览器 | `ProjectNavigationDefaultWidth()`、`AssetGridSpacing()` | `ProjectPanel`、`Widgets` | +| TreeView 导航树 | `NavigationTreeIconSize()`、`NavigationTreePrefixWidth()` | `TreeView`、`HierarchyPanel`、`ProjectPanel` | +| Inspector / 属性布局 | `InspectorPropertyControlColumnStart()`、`ControlFramePadding()` | `PropertyLayout`、`ScalarControls`、`VectorControls`、`PropertyGrid` | +| Popup / Combo | `PopupWindowPadding()`、`ComboPopupBackgroundColor()` | `Core`、`Widgets` | +| 资产卡片与图标 | `AssetTileSize()`、`BuiltInFolderIconBodyColor()` | `Widgets`、`BuiltInIcons` | +| Console / 状态栏 | `ConsoleRowHoverFillColor()`、`MenuBarStatusIdleColor()` | `Widgets`、菜单栏与 Console UI | + +此外,`StyleTokens.h` 里还定义了: + +- `struct TreeViewStyle` +- `NavigationTreeStyle()` +- `HierarchyTreeStyle()` +- `ProjectFolderTreeStyle()` + +它们是树视图层的“组合 token”,不是单个数值,而是一组可复用的树节点视觉约束。 + +## 当前实现行为 + +按当前源码,这一层有几个很重要的特点: + +- token 目前全部是 header-only inline 函数,不是配置资产,也不是运行时可热更新的数据表。 +- 很多 helper 会把这里的 token 当默认值,而不是自己再声明一套局部常量。 +- `PropertyLayout`、`SplitterChrome`、`DockTabBarChrome`、`BuiltInIcons`、`Widgets` 都直接依赖这里的 token。 +- 某些 token 之间存在设计上的复用关系,例如 `PanelDividerColor()` 当前直接复用 splitter 的 idle 颜色。 + +这意味着 `StyleTokens.h` 不是“装饰性文件”,而是整个 Editor UI 复用层的上游依赖。 ## 设计说明 -这是商业编辑器 UI 非常推荐的做法。 -不要在控件代码里到处写 `6.0f`、`0.24f`、`104.0f` 这种魔法数字,而应先抽象成 token。 +为什么这层很重要? -收益包括: +- 当你在重构 `ProjectPanel` 时,不应该顺手发明一套新的资产卡片尺寸。 +- 当你在做 `HierarchyPanel` 的树前缀图标时,不应该自己再决定一套图标槽宽。 +- 当你在优化 Inspector 的密度时,真正应该改的是 token,而不是 5 个不同 helper 里的重复常量。 -- 调整风格时能集中修改 -- 命名本身就表达设计意图 -- 高层 widget 与具体数值解耦 +这就是商业级编辑器常说的“设计系统落地到代码层”的意义。对于 XCEngine 来说,这一层还没有演化成完整的主题资产系统,但它已经承担了相同的架构角色。 + +## 与其他 UI helper 的关系 + +- `PropertyLayout` 使用它定义属性行的列宽、label inset 和 frame padding。 +- `TreeView` 使用它定义缩进、前缀插槽宽度和图标尺寸。 +- `SplitterChrome` 与 `DividerChrome` 使用它定义边界线和分隔条视觉。 +- `Widgets` 使用它定义资产卡片、面包屑、组件 section 和各种通用控件的视觉细节。 +- `BuiltInIcons` 使用它定义文件 / 文件夹 fallback 图标颜色。 + +从依赖方向上说,这一层应该尽量保持在 UI 栈的较底部,避免反向依赖更高层的业务 widget。 ## 当前限制 -- 仍然是 header inline 常量函数,而不是数据驱动主题系统 -- token 数量已经较多,后续可能需要再分层 -- 当前主要围绕唯一默认主题设计 +- 当前仍然是“写死在代码里的默认主题”,不是运行时可切换的主题资源系统。 +- token 命名已经带有明显的面板语义,例如 `ProjectNavigationPanePadding()`,说明它还是偏应用内设计系统,而不是完全抽象的通用 design token。 +- 还没有颜色模式切换、用户主题文件或样式编辑器一类更高阶能力。 ## 相关文档 - [UI](../UI.md) - [BaseTheme](../BaseTheme/BaseTheme.md) -- [PanelChrome](../PanelChrome/PanelChrome.md) -- [Widgets](../Widgets/Widgets.md) +- [DockHostStyle](../DockHostStyle/DockHostStyle.md) +- [PropertyLayout](../PropertyLayout/PropertyLayout.md) +- [TreeView](../TreeView/TreeView.md) +- [SplitterChrome](../SplitterChrome/SplitterChrome.md) diff --git a/docs/api/XCEngine/Editor/UI/TreeView/TreeView.md b/docs/api/XCEngine/Editor/UI/TreeView/TreeView.md new file mode 100644 index 00000000..c8173497 --- /dev/null +++ b/docs/api/XCEngine/Editor/UI/TreeView/TreeView.md @@ -0,0 +1,122 @@ +# TreeView + +**命名空间**: `XCEngine::Editor::UI` + +**类型**: `header-helper + class + struct` + +**源文件**: `editor/src/UI/TreeView.h` + +**描述**: 提供编辑器树形视图的统一节点状态、前缀绘制槽、交互回调和展开状态持久化机制。 + +## 概述 + +`TreeView.h` 是当前 Editor UI 重构里最重要的公共基础设施之一。它把原本很容易散落在 `HierarchyPanel`、`ProjectPanel` 中的树节点绘制逻辑抽成一层统一接口,让不同面板能够共享: + +- 相同的树节点视觉风格。 +- 相同的展开 / 收起行为。 +- 相同的前缀图标插槽模型。 +- 相同的点击、双击、右键、拖拽扩展接入点。 + +如果从使用体验上理解,它很接近商业编辑器中“导航树控件”的内建基础层。`HierarchyPanel` 和 `ProjectPanel` 的左侧目录树并没有各写一套独立的 tree widget,而是都基于这层构建。 + +## 公开类型与函数 + +| 成员 | 说明 | +|------|------| +| `class TreeViewState` | 保存节点展开状态的内存态容器。 | +| `TreeNodeOptions` | 控制选中、叶子节点、默认展开、点击展开策略等基础选项。 | +| `TreeNodeResult` | 返回节点本帧是否打开、是否点击、是否双击、是否右键等交互结果。 | +| `TreeNodePrefixContext` | 给前缀绘制回调提供绘制区域、选中状态和 hover 状态。 | +| `TreeNodePrefixSlot` | 定义一个可选的前缀绘制槽。 | +| `TreeNodeCallbacks` | 定义交互回调和额外渲染回调。 | +| `TreeNodeDefinition` | 组合节点选项、持久化 key、样式、前缀槽与回调。 | +| `ResetTreeLayout()` | 清空当前树布局的缩进栈,开始一棵新的树。 | +| `DrawTreeNode(...)` | 绘制节点并返回本帧结果。 | +| `EndTreeNode()` | 与打开状态的节点配对,弹出一层树缩进。 | + +## TreeViewState 的角色 + +`TreeViewState` 当前只做一件事:根据 `std::string_view key` 保存节点展开状态。 + +它不是场景数据,也不是项目数据,只是某个 UI 实例自己的展开状态缓存。因此: + +- `HierarchyPanel` 用它记住实体树哪些节点已经展开。 +- `ProjectPanel` 用它记住目录树哪些文件夹已经展开。 + +当前实现采用 `std::unordered_map`,所以最好的 `persistenceKey` 是稳定且能跨帧复现的标识,例如: + +- 场景对象的 UUID +- 资源目录的完整路径 + +## 当前实现行为 + +按 `editor/src/UI/TreeView.h` 的实现,当前版本有几个关键事实: + +- 树缩进不是保存在某个对象里,而是保存在一个静态 `TreeIndentStack()` 中。 +- 因此每次绘制一棵新的根树之前都应该先调用 `ResetTreeLayout()`。 +- `DrawTreeNode(...)` 若返回 `open = true`,调用方在绘制完所有子节点后必须调用 `EndTreeNode()` 与之配对。 +- 节点背景当前直接使用 `ImGuiCol_Header` / `HeaderHovered` / `HeaderActive` 这一组颜色绘制选中与 hover 态。 +- 展开箭头由 `Core.h` 里的 `DrawDisclosureArrow(...)` 手工绘制。 +- prefix slot 允许调用方在标签前插入小图标、状态灯或其他自定义绘制内容。 +- `callbacks.onInteraction` 适合接选择、右键菜单、双击重命名等语义。 +- `callbacks.onRenderExtras` 适合接拖拽源 / 拖拽目标之类必须紧跟节点绘制的额外逻辑。 + +这说明它不是对 `ImGui::TreeNodeEx(...)` 的轻封装,而是自己接管了树节点的大部分视觉和交互行为。 + +## 设计说明 + +为什么要单独造这一层,而不是每个面板直接用 ImGui 原生 tree API? + +- `Hierarchy` 和 `Project` 都需要统一的左侧导航树风格,这种复用非常适合抽成共享 helper。 +- 商业编辑器中的树视图往往不仅是“文本 + 箭头”,还需要图标前缀、整行高亮、拖放热点、重命名切换等语义。 +- 一旦把节点定义、展开状态和回调插槽标准化,上层面板代码就能更聚焦于业务对象,而不是 UI 细节。 + +如果和 Unity 对照,可以把它理解成“Hierarchy / Project 导航树的共用控件层”,而不是某个特定面板的局部技巧。 + +## 典型用法 + +```cpp +UI::ResetTreeLayout(); + +UI::TreeNodeDefinition node; +node.options.selected = isSelected; +node.options.leaf = !hasChildren; +node.persistenceKey = stablePath; +node.style = UI::ProjectFolderTreeStyle(); +node.prefix.width = UI::NavigationTreePrefixWidth(); +node.prefix.draw = DrawFolderPrefix; +node.callbacks.onInteraction = [&](const UI::TreeNodeResult& result) { + if (result.clicked) { + NavigateToFolder(); + } +}; + +const UI::TreeNodeResult result = + UI::DrawTreeNode(&m_treeState, folder.get(), folder->name.c_str(), node); + +if (result.open) { + DrawChildren(); + UI::EndTreeNode(); +} +``` + +## 生命周期与线程语义 + +- `TreeViewState` 由具体面板持有,通常作为成员变量存在于面板实例生命周期内。 +- 整套 API 都依赖当前 ImGui 帧状态,只能在 UI 线程使用。 +- 它不负责把展开状态写入磁盘或布局文件;当前只是内存级持久化。 + +## 当前限制 + +- 静态 `TreeIndentStack()` 让它更像“约定式 helper”,而不是完全可重入的小部件对象。 +- 没有键盘导航、滚动到可见、虚拟化大树等更高级的树控件能力。 +- 展开状态目前只保存在面板实例中,重启编辑器后不会自动恢复。 +- 当前回调模型偏即时模式,适合编辑器内部使用,但不是声明式 UI 框架。 + +## 相关文档 + +- [UI](../UI.md) +- [StyleTokens](../StyleTokens/StyleTokens.md) +- [BuiltInIcons](../BuiltInIcons/BuiltInIcons.md) +- [HierarchyPanel](../../panels/HierarchyPanel/HierarchyPanel.md) +- [ProjectPanel](../../panels/ProjectPanel/ProjectPanel.md) diff --git a/docs/api/XCEngine/Editor/UI/UI.md b/docs/api/XCEngine/Editor/UI/UI.md index e2f2a778..f9cef513 100644 --- a/docs/api/XCEngine/Editor/UI/UI.md +++ b/docs/api/XCEngine/Editor/UI/UI.md @@ -4,47 +4,106 @@ **类型**: `submodule` -**描述**: 编辑器 ImGui 基础设施、主题、控件与面板绘制辅助层。 +**描述**: 编辑器基于 Dear ImGui 的 UI 基础设施层,负责会话、主题 token、面板 chrome、树视图、属性布局和通用控件封装。 ## 概述 -`UI` 子模块当前内容很多,但核心方向很清楚: +`XCEngine::Editor::UI` 不是单个 widget 库,而是一组逐层叠加的编辑器 UI 基建。它的目标是把 Dear ImGui 这种非常自由、非常底层的即时模式 API 收束成一套可维护的“编辑器内建控件层”。 -- 维护 ImGui 会话与布局文件 -- 封装统一视觉主题 -- 提供属性面板、工具栏、菜单、场景状态等 UI 辅助 +当前源码里,这一层大致可以分成四层: -已文档化的核心页面: +1. **会话与后端层** + 负责 ImGui 上下文、ini 持久化、后端桥接和纹理描述符分配。 +2. **主题与设计 token 层** + 负责颜色、尺寸、间距、dock host 风格与常用视觉常量。 +3. **chrome 与布局层** + 负责面板窗口、工具栏、树视图、splitter、divider、属性行布局和自定义 dock 标签栏。 +4. **语义化控件层** + 负责属性网格、资产卡片、面包屑、弹窗、组件折叠段和各种编辑器专用小部件。 -- [ImGuiSession](ImGuiSession/ImGuiSession.md) -- [ImGuiBackendBridge](ImGuiBackendBridge/ImGuiBackendBridge.md) -- [BaseTheme](BaseTheme/BaseTheme.md) -- [StyleTokens](StyleTokens/StyleTokens.md) -- [Core](Core/Core.md) -- [PanelChrome](PanelChrome/PanelChrome.md) -- [Widgets](Widgets/Widgets.md) -- [PopupState](PopupState/PopupState.md) -- [ScalarControls](ScalarControls/ScalarControls.md) -- [VectorControls](VectorControls/VectorControls.md) -- [PropertyGrid](PropertyGrid/PropertyGrid.md) -- [DockHostStyle](DockHostStyle/DockHostStyle.md) -- [ConsoleFilterState](ConsoleFilterState/ConsoleFilterState.md) -- [ConsoleLogFormatter](ConsoleLogFormatter/ConsoleLogFormatter.md) -- [SceneStatusWidget](SceneStatusWidget/SceneStatusWidget.md) -- [AboutEditorDialog](AboutEditorDialog/AboutEditorDialog.md) +这类分层方式非常接近商业级游戏引擎编辑器的组织方式。原因很简单:如果每个面板都直接拼原始 ImGui 调用,代码很快就会变成不可维护的样式杂糅体;而先建设统一 UI 层,后续任何面板重构、主题调整和交互升级都会容易很多。 -`UI/UI.h` 本身只是聚合入口,真正值得阅读的是这些分层 helper: +## 聚合头文件 -- `ImGuiSession + ImGuiBackendBridge` 负责上下文与后端绑定 -- `BaseTheme + StyleTokens` 负责视觉规范 -- `Core + PanelChrome + Widgets` 负责通用交互壳层 -- `ScalarControls + VectorControls + PropertyGrid` 负责 Inspector 表单体验 +**源文件**: `editor/src/UI/UI.h` -这样拆分的好处,是把 Dear ImGui 容易失控的即时模式代码收束成一套可复用部件库。 +`UI.h` 当前是一个标准的 umbrella header。它的职责是把 Editor UI 常用 helper 聚合到同一个入口,而不是声明新的运行时类型。 + +因此这页文档直接承担 `UI.h` 的说明职责,不再额外创建一个重复的类型页。 + +## 当前架构重点 + +结合当前 `editor/src/UI/**` 与最近一次 Editor UI 重构,以下几层是现在最值得读的核心: + +- `ImGuiSession + ImGuiBackendBridge` + 管理 ImGui 上下文、DPI、SRV 描述符与窗口后端对接。 +- `BaseTheme + StyleTokens + DockHostStyle` + 管理设计 token 和 dock host 外观,是全局视觉风格的起点。 +- `Core + DividerChrome + SplitterChrome + DockTabBarChrome + PanelChrome` + 管理窗口 chrome、底边线、拖拽分隔条与自定义 dock 标签栏。 +- `TreeView + BuiltInIcons` + 管理层级树 / 目录树的共享节点表现与图标前缀。 +- `PropertyLayout + ScalarControls + VectorControls + PropertyGrid` + 管理 Inspector 的属性布局、标量控件、向量控件和高层属性编辑入口。 +- `Widgets + PopupState + SceneStatusWidget + AboutEditorDialog` + 提供更接近编辑器业务语义的通用 widget。 + +这次重构里,`TreeView`、`PropertyLayout`、`BuiltInIcons` 和 `DockTabBarChrome` 是最明显的新基础设施,它们共同把原先分散在具体面板中的 UI 技巧沉淀成了复用层。 + +## 设计说明 + +如果把它和 Unity 一类成熟编辑器对照,可以把 `Editor::UI` 理解成“编辑器内部控件系统”,而不是游戏运行时 UI 框架: + +- 它面向工具开发,不面向游戏内 HUD。 +- 它可以为编辑器体验服务而使用较强约束的 helper。 +- 它允许把某些风格、布局和交互策略写死在共享层,以换取整个工具界面的统一性。 + +这种设计的好处是: + +- 面板作者写的代码更接近业务语义,而不是样式拼装。 +- 主题、间距、树视图和 Inspector 布局能在全局范围内保持一致。 +- 面板之间可以共享拖拽、上下文菜单、资产卡片、树节点前缀等成熟模式。 + +代价也很明确: + +- 当前 UI 层明显偏 Editor 私有实现,不是面向外部插件的稳定 ABI。 +- 很多 helper 仍然是 header-only inline 形式,接口演化速度会比较快。 +- 当前实现强依赖 Windows + D3D12 + Dear ImGui 的编辑器运行路径。 + +## 头文件 + +- [AboutEditorDialog](AboutEditorDialog/AboutEditorDialog.md) - `AboutEditorDialog.h`,关于对话框相关 UI。 +- [BaseTheme](BaseTheme/BaseTheme.md) - `BaseTheme.h`,编辑器基础主题安装。 +- [BuiltInIcons](BuiltInIcons/BuiltInIcons.md) - `BuiltInIcons.h`,内置资源/对象图标系统。 +- [ConsoleFilterState](ConsoleFilterState/ConsoleFilterState.md) - `ConsoleFilterState.h`,Console 过滤状态。 +- [ConsoleLogFormatter](ConsoleLogFormatter/ConsoleLogFormatter.md) - `ConsoleLogFormatter.h`,Console 日志格式化。 +- [Core](Core/Core.md) - `Core.h`,底层 ImGui helper 与 popup chrome 包装。 +- [DividerChrome](DividerChrome/DividerChrome.md) - `DividerChrome.h`,统一分隔线绘制。 +- [DockHostStyle](DockHostStyle/DockHostStyle.md) - `DockHostStyle.h`,dock host 风格压栈。 +- [DockTabBarChrome](DockTabBarChrome/DockTabBarChrome.md) - `DockTabBarChrome.h`,自定义 dock 标签栏。 +- [ImGuiBackendBridge](ImGuiBackendBridge/ImGuiBackendBridge.md) - `ImGuiBackendBridge.h`,ImGui 与 D3D12 之间的桥接层。 +- [ImGuiSession](ImGuiSession/ImGuiSession.md) - `ImGuiSession.h`,ImGui 会话生命周期。 +- [PanelChrome](PanelChrome/PanelChrome.md) - `PanelChrome.h`,面板窗口 / 工具栏 / 内容区 RAII 外壳。 +- [PopupState](PopupState/PopupState.md) - `PopupState.h`,延迟弹窗与目标型弹窗状态。 +- [PropertyGrid](PropertyGrid/PropertyGrid.md) - `PropertyGrid.h`,Inspector 级属性编辑入口。 +- [PropertyLayout](PropertyLayout/PropertyLayout.md) - `PropertyLayout.h`,属性行几何布局层。 +- [ScalarControls](ScalarControls/ScalarControls.md) - `ScalarControls.h`,标量属性控件。 +- [SceneStatusWidget](SceneStatusWidget/SceneStatusWidget.md) - `SceneStatusWidget.h`,场景状态部件。 +- [SplitterChrome](SplitterChrome/SplitterChrome.md) - `SplitterChrome.h`,分隔条交互与绘制。 +- [StyleTokens](StyleTokens/StyleTokens.md) - `StyleTokens.h`,Editor UI 设计 token 中心。 +- [TreeView](TreeView/TreeView.md) - `TreeView.h`,树视图共享基础设施。 +- [VectorControls](VectorControls/VectorControls.md) - `VectorControls.h`,向量属性控件。 +- [Widgets](Widgets/Widgets.md) - `Widgets.h`,资产卡片、面包屑、组件折叠段等通用 widget。 + +## 当前实现边界 + +- 这是 Editor 应用层 UI,不是运行时 `engine/include/XCEngine` 风格的公共引擎 API。 +- 当前很多接口仍然直接暴露 ImGui 类型,如 `ImDrawList`、`ImVec2`、`ImGuiID`。 +- 自定义 dock 标签栏、树视图和图标系统都明显面向当前编辑器产品形态,而不是通用 GUI 框架。 ## 相关文档 -- [Editor 模块](../Editor.md) -- [Application](../Application/Application.md) -- [Platform](../Platform/Platform.md) +- [Editor](../Editor.md) +- [Layout](../Layout/Layout.md) +- [ComponentEditors](../ComponentEditors/ComponentEditors.md) - [Editor Architecture And Workflow](../../../_guides/Editor/Editor-Architecture-And-Workflow.md) diff --git a/docs/api/XCEngine/Editor/panels/HierarchyPanel/HierarchyPanel.md b/docs/api/XCEngine/Editor/panels/HierarchyPanel/HierarchyPanel.md index 3fda87e2..59da4945 100644 --- a/docs/api/XCEngine/Editor/panels/HierarchyPanel/HierarchyPanel.md +++ b/docs/api/XCEngine/Editor/panels/HierarchyPanel/HierarchyPanel.md @@ -2,49 +2,110 @@ **命名空间**: `XCEngine::Editor` -**类型**: `class + enum class` +**类型**: `class` **源文件**: `editor/src/panels/HierarchyPanel.h` -**描述**: 层级面板,负责显示场景对象树、搜索、排序、拖放层级调整以及内联重命名。 +**描述**: 编辑器场景层级面板,负责绘制根实体树、处理选择与重命名事件,并把上下文菜单与拖放操作路由给 Action 层。 ## 概述 -`HierarchyPanel` 是当前编辑器里交互最丰富的面板之一。 +`HierarchyPanel` 是当前编辑器里最典型的“视图层面板”:它自己拥有 UI 状态,但不直接承担场景编辑命令实现。它的主要任务是把当前场景对象以树形方式呈现出来,并把用户交互转换成选择、重命名、右键菜单和拖放请求。 -它当前承载的功能包括: +按当前实现,这个面板主要负责: -- 订阅选择变化和重命名请求事件 -- 层级树渲染 -- 搜索过滤 -- 排序选项 -- 拖拽层级调整 -- 右键上下文菜单 -- 内联重命名 +- 订阅选择变化与外部重命名请求事件。 +- 读取 `ISceneManager` 提供的根实体列表。 +- 基于 `UI::TreeView` 递归绘制场景对象树。 +- 维护内联重命名状态。 +- 将选择、右键菜单、拖放等行为委托给 `Actions::HierarchyActionRouter` 一侧的 helper。 -头文件里还定义了: +这和商业引擎编辑器的分层很一致:Hierarchy 面板负责“看见和触发”,而不是直接“改数据和执行业务命令”。 -- `enum class SortMode { Name, ComponentCount, TransformFirst }` +## 当前实现行为 -## 当前实现说明 +按 `editor/src/panels/HierarchyPanel.cpp` 的实现: -- `OnAttach()` 会订阅 `SelectionChangedEvent` 和 `EntityRenameRequestedEvent`。 -- 搜索过滤当前按名字子串匹配,并递归检查子节点。 -- 排序支持: - - `Name` - - `ComponentCount` - - `TransformFirst` -- 双击节点会进入重命名状态。 -- 背景点击、右键菜单和拖放逻辑主要委托给 `Actions` 层。 +- `OnAttach()` 会订阅: + - `SelectionChangedEvent` + - `EntityRenameRequestedEvent` +- `OnDetach()` 会正确取消订阅并清零 handler id。 +- `Render()` 会: + - 应用 `HierarchyInspectorPanelBackgroundColor()`。 + - 通过 `PanelWindowScope` / `PanelContentScope` 建立标准面板外壳。 + - 调用 `Actions::ObserveFocusedActionRoute(...)` 将当前焦点路由标记为 `Hierarchy`。 + - 向 `ISceneManager` 读取根实体并逐个递归渲染。 + - 在树绘制完成后处理背景点击、背景右键菜单、实体右键菜单和根级 drop target。 -## 当前实现边界 +## 节点绘制模型 -- 当前排序和过滤都在 UI 渲染阶段直接对实体列表做处理。 -- `TransformFirst` 排序实际上是“有 Transform 的对象优先”,而不是更复杂的 transform-aware hierarchy order。 +当前的节点绘制已经不再是旧版本那种局部自定义树,而是完全建立在 `UI::TreeView` 之上: + +- 每个实体节点都会构造一个 `UI::TreeNodeDefinition`。 +- `selected` 状态来自 `ISelectionManager::IsSelected(...)`。 +- `leaf` 状态来自 `gameObject->GetChildCount() == 0`。 +- `persistenceKey` 使用 `gameObject->GetUUID()` 转成字符串,保证展开状态在同一面板实例中稳定。 +- `style` 使用 `UI::HierarchyTreeStyle()`。 +- `prefix` 使用 `UI::NavigationTreePrefixWidth()` 和 `UI::DrawAssetIcon(..., AssetIconKind::GameObject)` 绘制对象图标。 + +这意味着当前 Hierarchy 的视觉和交互行为已经被统一纳入 Editor UI 基础设施,而不是面板自己手工维护整套树渲染细节。 + +## 交互行为 + +当前节点交互通过 `TreeNodeCallbacks` 接入: + +- 单击左键:调用 `Actions::HandleHierarchySelectionClick(...)`,支持结合 `Ctrl` 执行多选。 +- 右键:调用 `Actions::HandleHierarchyItemContextRequest(...)` 打开目标实体上下文菜单。 +- 双击:调用 `BeginRename(...)` 进入内联重命名。 +- 节点额外渲染阶段:调用 `Actions::BeginHierarchyEntityDrag(...)` 和 `Actions::AcceptHierarchyEntityDrop(...)` 接入拖放。 + +因此 `HierarchyPanel` 自己不直接执行“重排父子关系”之类操作,它只负责在正确的节点生命周期里提供 drop source / target 入口。 + +## 重命名模型 + +`HierarchyPanel` 当前用 `UI::InlineTextEditState` 保存重命名状态。 + +当前行为是: + +- 外部若派发 `EntityRenameRequestedEvent`,面板会在 `OnRenameRequested(...)` 中找到实体并进入重命名。 +- 若用户双击树节点,也会进入重命名。 +- 编辑过程中: + - `Enter` 提交。 + - `Escape` 取消。 + - 输入框失焦且用户左键点击其他位置时提交。 +- `CommitRename()` 最终通过 `Actions::CommitEntityRename(...)` 把改名请求发往动作层。 + +这类实现很像商业编辑器中的“inline rename controller”:面板持有输入框状态,但真正的实体改名仍然走统一命令路径。 + +## 生命周期与线程语义 + +- 该面板依赖有效的 `IEditorContext` 才能 attach、订阅事件并绘制。 +- 事件订阅和 UI 绘制都应视为编辑器主线程行为。 +- `m_treeState` 和 `m_renameState` 都属于面板实例私有状态,不会自动跨会话持久化。 + +## 设计说明 + +当前实现的一个正确方向是:Hierarchy 面板只负责“把场景对象转成 Editor UI 语义”,而不是把所有业务都塞进面板里。 + +这样做的收益是: + +- 树视图风格、图标前缀、展开行为可以和 `ProjectPanel` 共享。 +- 选择、重命名、上下文菜单、拖放都能被 `Actions` 层集中治理。 +- 面板本身更容易继续重构,比如后续加入搜索、过滤、批量操作时,不必推翻底层树控件。 + +## 当前限制 + +- 当前没有搜索、过滤、排序或大场景虚拟化能力。 +- 展开状态只保存在 `UI::TreeViewState` 的内存态中,不会自动写入布局文件。 +- 重命名输入框是替换式绘制,不是“树节点原位嵌入子控件”的更复杂实现。 +- 目前只为每个节点提供统一的 `GameObject` 图标前缀,没有按组件类型做更细粒度图标区分。 ## 相关文档 - [panels](../panels.md) -- [SelectionManager](../../Core/SelectionManager/SelectionManager.md) -- [SceneManager](../../Managers/SceneManager/SceneManager.md) +- [TreeView](../../UI/TreeView/TreeView.md) +- [BuiltInIcons](../../UI/BuiltInIcons/BuiltInIcons.md) +- [HierarchyActionRouter](../../Actions/HierarchyActionRouter/HierarchyActionRouter.md) - [EditorEvents](../../Core/EditorEvents/EditorEvents.md) +- [ISceneManager](../../Core/ISceneManager/ISceneManager.md) +- [ISelectionManager](../../Core/ISelectionManager/ISelectionManager.md) diff --git a/docs/api/XCEngine/Editor/panels/ProjectPanel/ProjectPanel.md b/docs/api/XCEngine/Editor/panels/ProjectPanel/ProjectPanel.md index f2b7b689..e4846b87 100644 --- a/docs/api/XCEngine/Editor/panels/ProjectPanel/ProjectPanel.md +++ b/docs/api/XCEngine/Editor/panels/ProjectPanel/ProjectPanel.md @@ -6,36 +6,121 @@ **源文件**: `editor/src/panels/ProjectPanel.h` -**描述**: 项目面板,负责展示当前资产目录、面包屑导航、搜索、资产瓦片交互以及文件夹创建与上下文菜单。 +**描述**: 编辑器项目资源浏览面板,负责目录树、面包屑、搜索框、资源卡片和拖放交互的前端呈现。 ## 概述 -`ProjectPanel` 当前是 [ProjectManager](../../Managers/ProjectManager/ProjectManager.md) 的主要 UI 前端。 +`ProjectPanel` 是当前 Editor 中最接近“资源浏览器”的面板。它本身不维护项目资源数据库,而是把 `IProjectManager` 暴露的数据模型转成一个典型的双栏浏览界面: -它负责: +- 左侧是目录树导航。 +- 右侧是当前目录的资源浏览区。 +- 顶部是搜索框与面包屑。 -- 初始化项目浏览器 -- 绘制工具栏与面包屑 -- 绘制资产网格 -- 搜索过滤 -- 资产点击、打开、拖放和右键菜单 -- 空白区域上下文菜单 -- 新建文件夹弹窗 +如果和 Unity 对照,可以把它理解成一个更轻量、当前聚焦于基础浏览和拖放的 Project Browser。 -## 当前实现说明 +## 当前实现行为 -- `Initialize(projectPath)` 直接调用 `m_context->GetProjectManager().Initialize(projectPath)`。 -- `Render()` 中资产会按自适应列数排成网格。 -- 搜索当前按名字子串过滤。 -- 资产图标当前按 `isFolder` 区分 folder/file,再配合 action/router 决定交互。 +按 `editor/src/panels/ProjectPanel.cpp` 的实现: -## 当前实现边界 +- `Initialize(projectPath)` 直接委托给 `m_context->GetProjectManager().Initialize(projectPath)`。 +- `Render()` 会: + - 建立标准 `PanelWindowScope`。 + - 把焦点动作路由标记为 `EditorActionRoute::Project`。 + - 先渲染 toolbar。 + - 再创建左右分栏内容区。 + - 使用 `UI::DrawSplitter(...)` 支持调整左侧导航栏宽度。 + - 收尾时绘制“新建文件夹”对话框。 -- 当前搜索是前端过滤,不是索引搜索。 -- 资产预览目前还是轻量瓦片,不是完整导入数据库浏览器。 +当前导航栏宽度会被显式夹紧在一个合理范围内: + +- 最小值来自 `ProjectNavigationMinWidth()` +- 右侧浏览区最小宽度来自 `ProjectBrowserMinWidth()` + +这说明当前实现已经从一开始就按“可调整工作区”的编辑器思路组织,而不是固定死尺寸。 + +## 左侧目录树 + +左侧目录树是当前 `ProjectPanel` 最典型的共享 UI 基建使用者之一: + +- 根节点来自 `IProjectManager::GetRootFolder()`。 +- 当前目录来自 `IProjectManager::GetCurrentFolder()`。 +- 每个目录节点都通过 `UI::DrawTreeNode(...)` 绘制。 +- 节点样式使用 `UI::ProjectFolderTreeStyle()`。 +- 节点前缀使用 `UI::DrawAssetIcon(..., AssetIconKind::Folder)`。 +- `defaultOpen` 会根据 `IsCurrentTreeBranch(...)` 判断当前目录是否位于该目录分支下。 +- 展开状态保存在 `m_folderTreeState` 中。 + +用户单击树节点时,会立即调用 `manager.NavigateToFolder(folder)` 完成导航;右键则通过 `Actions::HandleProjectItemContextRequest(...)` 打开对应上下文菜单。 + +## 右侧浏览区 + +右侧浏览区分成两层: + +- Header:显示面包屑导航,并在底部画一条 divider。 +- Body:以资源网格形式显示当前目录下通过搜索过滤后的条目。 + +资源卡片当前通过 `UI::DrawAssetTile(...)` 绘制,并根据 `item->isFolder` 区分: + +- `Folder` 图标 +- `File` 图标 + +交互结果统一收集到 `AssetItemInteraction` 中,再在循环结束后统一处理。这种写法有一个很实用的好处:可以避免在绘制过程中直接修改当前迭代容器或导航状态,让即时模式 UI 代码更稳定。 + +## 搜索与导航 + +当前搜索实现比较明确,也需要在文档里写清楚: + +- 搜索框位于 toolbar 右侧。 +- 搜索只对 `manager.GetCurrentItems()` 返回的当前目录条目生效。 +- 匹配逻辑是大小写不敏感的子串匹配。 +- 当前没有全文索引、标签过滤或类型过滤。 + +面包屑则通过 `UI::DrawToolbarBreadcrumbs(...)` 实现,点击非当前段会调用 `manager.NavigateToIndex(index)`。 + +## 拖放与上下文菜单 + +当前 `ProjectPanel` 并不自己实现拖放协议和命令执行,而是按职责分层调用其他模块: + +- `Actions::BeginProjectAssetDrag(item, iconKind)` 负责发起拖拽源。 +- `Actions::AcceptProjectAssetDropPayload(item)` 负责检测是否有资源被拖到当前目标上。 +- 若确实发生移动,则调用 `Commands::MoveAssetToFolder(...)`。 +- 右键菜单与空白区域菜单由 `Actions::*ContextPopup(...)` 系列 helper 负责绘制。 + +这种组织方式和 `HierarchyPanel` 一样,遵循的是“面板负责展示与采样,动作层 / 命令层负责实际编辑行为”的编辑器架构。 + +## 生命周期与线程语义 + +- 面板本身持有的是 UI 状态:搜索文本、导航栏宽度、目录树展开状态、弹窗状态。 +- 真实项目数据由 `IProjectManager` 持有。 +- 整套逻辑应视为编辑器 UI 主线程代码。 + +## 设计说明 + +当前 `ProjectPanel` 的设计方向是合理的,因为它先把“资源浏览器”拆成几个稳定的基础体验单元: + +- 分栏布局 +- 目录树 +- 面包屑 +- 资源网格 +- 拖放与上下文菜单 + +这样做的好处是,后续无论是加缩略图、资源导入器状态、筛选器还是收藏夹,都可以在现有骨架上演进,而不是推倒重来。 + +## 当前限制 + +- 搜索只在当前目录里做前端子串过滤,不是全项目索引搜索。 +- 当前没有资源缩略图生成或异步预览系统,图标仍以 `BuiltInIcons` 和简单卡片为主。 +- 文件树展开状态只保存在内存中,不会自动跨重启恢复。 +- 拖放移动是直接命令式处理,没有更复杂的批处理或事务预览。 ## 相关文档 - [panels](../panels.md) +- [IProjectManager](../../Core/IProjectManager/IProjectManager.md) - [ProjectManager](../../Managers/ProjectManager/ProjectManager.md) - [AssetItem](../../Core/AssetItem/AssetItem.md) +- [ProjectActionRouter](../../Actions/ProjectActionRouter/ProjectActionRouter.md) +- [ProjectCommands](../../Commands/ProjectCommands/ProjectCommands.md) +- [TreeView](../../UI/TreeView/TreeView.md) +- [BuiltInIcons](../../UI/BuiltInIcons/BuiltInIcons.md) +- [SplitterChrome](../../UI/SplitterChrome/SplitterChrome.md) diff --git a/docs/api/XCEngine/RHI/RHI.md b/docs/api/XCEngine/RHI/RHI.md index a43c6f1d..2c4e9365 100644 --- a/docs/api/XCEngine/RHI/RHI.md +++ b/docs/api/XCEngine/RHI/RHI.md @@ -4,43 +4,125 @@ **类型**: `module` -**描述**: 渲染硬件抽象层及其后端。 +**描述**: 提供渲染硬件抽象层、后端选择入口、资源与命令提交接口,以及跨后端共享的描述符和枚举定义。 ## 概览 -该目录与 `XCEngine/RHI` 对应的 public headers 保持平行,用于承载唯一的 canonical API 文档入口。 +`XCEngine::RHI` 是当前引擎渲染栈里最靠近图形 API 的一层。它的职责不是提供高层渲染功能,而是把 D3D12、OpenGL 等后端收敛到一组共同接口之下: -## 子目录 +- [RHIFactory](RHIFactory/RHIFactory.md) 负责选择并创建具体后端设备。 +- [RHIDevice](RHIDevice/RHIDevice.md) 是核心抽象入口,承担“设备对象 + 资源工厂”的双重职责。 +- [RHICommandQueue](RHICommandQueue/RHICommandQueue.md) 和 [RHICommandList](RHICommandList/RHICommandList.md) 负责提交与记录 GPU 工作。 +- [RHITypes](RHITypes/RHITypes.md) 和 [RHIEnums](RHIEnums/RHIEnums.md) 定义跨后端共享的描述符语言。 -- [D3D12](D3D12/D3D12.md) -- [OpenGL](OpenGL/OpenGL.md) +如果拿商用引擎做类比,这层更接近 Unreal 风格的低层 RHI / render backend,而不是 Unity 面向 gameplay 的公共渲染 API。Unity 普通业务层一般不会直接碰设备、命令队列、资源视图;而 XCEngine 当前把这些对象直接暴露给引擎上层、测试和后端验证代码,用来支撑渲染系统构建、后端 bring-up 和图形测试。 -## 头文件 +## 当前架构理解 -- [RHIBuffer](RHIBuffer/RHIBuffer.md) - `RHIBuffer.h` -- [RHICapabilities](RHICapabilities/RHICapabilities.md) - `RHICapabilities.h` -- [RHICommandList](RHICommandList/RHICommandList.md) - `RHICommandList.h` -- [RHICommandQueue](RHICommandQueue/RHICommandQueue.md) - `RHICommandQueue.h` -- [RHIDescriptorPool](RHIDescriptorPool/RHIDescriptorPool.md) - `RHIDescriptorPool.h` -- [RHIDescriptorSet](RHIDescriptorSet/RHIDescriptorSet.md) - `RHIDescriptorSet.h` -- [RHIDevice](RHIDevice/RHIDevice.md) - `RHIDevice.h` -- [RHIEnums](RHIEnums/RHIEnums.md) - `RHIEnums.h` -- [RHIFactory](RHIFactory/RHIFactory.md) - `RHIFactory.h` -- [RHIFence](RHIFence/RHIFence.md) - `RHIFence.h` -- [RHIFramebuffer](RHIFramebuffer/RHIFramebuffer.md) - `RHIFramebuffer.h` -- [RHIPipelineLayout](RHIPipelineLayout/RHIPipelineLayout.md) - `RHIPipelineLayout.h` -- [RHIPipelineState](RHIPipelineState/RHIPipelineState.md) - `RHIPipelineState.h` -- [RHIRenderPass](RHIRenderPass/RHIRenderPass.md) - `RHIRenderPass.h` -- [RHIResource](RHIResource/RHIResource.md) - `RHIResource.h` -- [RHIResourceView](RHIResourceView/RHIResourceView.md) - `RHIResourceView.h` -- [RHISampler](RHISampler/RHISampler.md) - `RHISampler.h` -- [RHIScreenshot](RHIScreenshot/RHIScreenshot.md) - `RHIScreenshot.h` -- [RHIShader](RHIShader/RHIShader.md) - `RHIShader.h` -- [RHISwapChain](RHISwapChain/RHISwapChain.md) - `RHISwapChain.h` -- [RHITexture](RHITexture/RHITexture.md) - `RHITexture.h` -- [RHITypes](RHITypes/RHITypes.md) - `RHITypes.h` +当前源码呈现出的主链路大致是: + +1. 通过 [RHIFactory](RHIFactory/RHIFactory.md) 选择后端。 +2. 通过 [RHIDevice](RHIDevice/RHIDevice.md) 初始化设备并查询 [RHICapabilities](RHICapabilities/RHICapabilities.md)。 +3. 用 `RHIDevice` 创建队列、命令列表、buffer、texture、render pass、pipeline state、descriptor pool / set 等对象。 +4. 在 [RHICommandList](RHICommandList/RHICommandList.md) 上录制状态设置、clear、copy、draw、dispatch。 +5. 通过 [RHICommandQueue](RHICommandQueue/RHICommandQueue.md) 提交并用 [RHIFence](RHIFence/RHIFence.md) 同步。 + +这套设计的好处是: + +- 对接新后端时,上层接口面比较稳定。 +- 单元测试和集成测试可以直接验证抽象层行为。 +- 渲染模块可以在这一层之上继续搭更高层的 renderer、frame graph 或材质系统。 + +代价也很明确: + +- 接口比较显式,样板代码多。 +- 抽象层并不完全“纯净”,仍能看到 D3D12 / OpenGL 风格痕迹。 +- 当前版本大量对象仍采用裸指针所有权,文档必须把生命周期约束写清楚。 + +## 后端可用性 + +按当前源码而不是设计愿景来看,`RHIFactory` 的真实后端可用性是: + +- `D3D12`: 当前工厂始终可创建,是默认最完整的桌面后端之一。 +- `OpenGL`: 仅在编译时定义 `XCENGINE_SUPPORT_OPENGL` 时可创建。 +- `Vulkan`: 仅在编译时定义 `XCENGINE_SUPPORT_VULKAN` 时可创建。 +- `Metal`: `RHIType` 中已有枚举项,但当前工厂直接返回 `nullptr`。 + +这说明 `RHIType` 代表的是“抽象层计划支持的后端集合”,不等于“当前构建一定可用的后端集合”。 + +## 所有权与生命周期 + +这是 `RHI` 模块里最重要的使用约定之一。 + +当前抽象层大量 API 都返回裸指针,包括: + +- `RHIFactory::CreateRHIDevice()` +- `RHIDevice::CreateBuffer()` / `CreateTexture()` / `CreateCommandList()` / `CreateCommandQueue()` 等 +- descriptor pool、descriptor set、render pass、framebuffer、sampler、fence、resource view 等 + +按当前测试和调用模式,推荐把它们理解为: + +1. 由创建者拥有返回对象。 +2. 使用结束前先调用对象自己的 `Shutdown()`。 +3. 然后再 `delete`。 + +也就是说,这一层目前不是 `Core::Ref` / RAII 优先的风格,而是更接近底层图形资源包装常见的“显式关闭 + 显式释放”模式。 + +## 设计现实与实现边界 + +当前 `RHI` 抽象层已经能表达核心 GPU 对象,但它还不是一个完全收敛的、无后端泄漏的终态接口: + +- [RHITypes](RHITypes/RHITypes.md) 里既有通用描述符,也有明显偏 D3D12 的结构名,例如 `RootSignatureDesc`、`DescriptorHeapDesc`、`CommandAllocatorDesc`。 +- [RHICommandList](RHICommandList/RHICommandList.md) 同时暴露了 render pass、render target、descriptor set、copy、draw、dispatch 等多种路径,混合了不同代际的抽象思路。 +- [RHICommandQueue](RHICommandQueue/RHICommandQueue.md) 的 `ExecuteCommandLists()` 采用 `void**`,说明抽象层仍带有一定后端适配痕迹。 +- `Metal` 仍是占位,`Vulkan` 目录也还在逐步补全文档。 + +这并不意味着设计错误。对一个正在演进的商业级引擎来说,更现实的路径通常就是先把“能支撑后端实现和测试”的抽象做出来,再逐步收敛接口一致性。 + +## 后端目录 + +- [D3D12](D3D12/D3D12.md) - Direct3D 12 后端实现。 +- [OpenGL](OpenGL/OpenGL.md) - OpenGL 后端实现。 +- `Vulkan` - 头文件目录已存在,当前 canonical 文档仍在补建中。 + +## 顶层头文件 + +- [RHIBuffer](RHIBuffer/RHIBuffer.md) - `RHIBuffer.h`,buffer 抽象资源接口。 +- [RHICapabilities](RHICapabilities/RHICapabilities.md) - `RHICapabilities.h`,设备能力与限制信息。 +- [RHICommandList](RHICommandList/RHICommandList.md) - `RHICommandList.h`,命令录制接口。 +- [RHICommandQueue](RHICommandQueue/RHICommandQueue.md) - `RHICommandQueue.h`,命令提交与同步接口。 +- [RHIDescriptorPool](RHIDescriptorPool/RHIDescriptorPool.md) - `RHIDescriptorPool.h`,descriptor set 分配池。 +- [RHIDescriptorSet](RHIDescriptorSet/RHIDescriptorSet.md) - `RHIDescriptorSet.h`,资源绑定集合。 +- [RHIDevice](RHIDevice/RHIDevice.md) - `RHIDevice.h`,抽象设备与对象工厂。 +- [RHIEnums](RHIEnums/RHIEnums.md) - `RHIEnums.h`,跨后端共享枚举。 +- [RHIFactory](RHIFactory/RHIFactory.md) - `RHIFactory.h`,后端选择入口。 +- [RHIFence](RHIFence/RHIFence.md) - `RHIFence.h`,GPU 同步原语。 +- [RHIFramebuffer](RHIFramebuffer/RHIFramebuffer.md) - `RHIFramebuffer.h`,帧缓冲对象。 +- [RHIPipelineLayout](RHIPipelineLayout/RHIPipelineLayout.md) - `RHIPipelineLayout.h`,资源绑定布局。 +- [RHIPipelineState](RHIPipelineState/RHIPipelineState.md) - `RHIPipelineState.h`,图形/计算管线状态。 +- [RHIRenderPass](RHIRenderPass/RHIRenderPass.md) - `RHIRenderPass.h`,render pass 描述与句柄。 +- [RHIResource](RHIResource/RHIResource.md) - `RHIResource.h`,资源基类接口。 +- [RHIResourceView](RHIResourceView/RHIResourceView.md) - `RHIResourceView.h`,资源视图接口。 +- [RHISampler](RHISampler/RHISampler.md) - `RHISampler.h`,采样器对象。 +- [RHIScreenshot](RHIScreenshot/RHIScreenshot.md) - `RHIScreenshot.h`,截图接口。 +- [RHIShader](RHIShader/RHIShader.md) - `RHIShader.h`,shader 抽象。 +- [RHISwapChain](RHISwapChain/RHISwapChain.md) - `RHISwapChain.h`,窗口展示交换链。 +- [RHITexture](RHITexture/RHITexture.md) - `RHITexture.h`,texture 抽象资源接口。 +- [RHITypes](RHITypes/RHITypes.md) - `RHITypes.h`,共享描述符与辅助结构。 + +## 推荐阅读顺序 + +1. 先读 [Devices, Queues, Command Lists, And Resource Creation](../../_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md),建立正确心智模型。 +2. 再读 [RHIFactory](RHIFactory/RHIFactory.md) 和 [RHIDevice](RHIDevice/RHIDevice.md),理解后端选择和对象创建。 +3. 然后读 [RHICommandQueue](RHICommandQueue/RHICommandQueue.md) 与 [RHICommandList](RHICommandList/RHICommandList.md),理解录制与提交。 +4. 最后再查 [RHITypes](RHITypes/RHITypes.md)、[RHIEnums](RHIEnums/RHIEnums.md)、[RHICapabilities](RHICapabilities/RHICapabilities.md) 这些通用支持页。 + +## 相关指南 + +- [Devices, Queues, Command Lists, And Resource Creation](../../_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md) - 解释当前 RHI 的真实使用路径、生命周期约束以及和 Unity / 商用引擎常见设计的对应关系。 ## 相关文档 - [上级目录](../XCEngine.md) +- [Rendering](../Rendering/Rendering.md) - [API 总索引](../../main.md) diff --git a/docs/api/XCEngine/RHI/RHIBuffer/RHIBuffer.md b/docs/api/XCEngine/RHI/RHIBuffer/RHIBuffer.md index 8dc2c141..edc3d16b 100644 --- a/docs/api/XCEngine/RHI/RHIBuffer/RHIBuffer.md +++ b/docs/api/XCEngine/RHI/RHIBuffer/RHIBuffer.md @@ -6,39 +6,132 @@ **头文件**: `XCEngine/RHI/RHIBuffer.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHIBuffer` public API。 +**描述**: 抽象 buffer 资源接口,负责 CPU 写入、尺寸与 stride 查询、资源状态记录以及调试命名。 -## 概述 +## 角色概述 -`RHIBuffer.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHIBuffer` 是 [RHIResource](../RHIResource/RHIResource.md) 的具体资源类型之一,用来承载: -## 声明概览 +- vertex buffer +- index buffer +- constant buffer +- readback buffer +- 间接参数或其他 buffer 形态 -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHIBuffer` | `class` | 继承自 `RHIResource` 的公开声明。 | +当前 buffer 的“用途种类”主要由 `BufferType` 表达,而不是靠不同类名再拆成一堆具体 buffer 类型。 -## 公共方法 +## 创建方式 -| 方法 | 描述 | -|------|------| -| [~RHIBuffer()](Destructor.md) | 销毁对象并释放相关资源。 | -| [Map](Map.md) | 公开方法,详见头文件声明。 | -| [Unmap](Unmap.md) | 公开方法,详见头文件声明。 | -| [SetData](SetData.md) | 设置相关状态或配置。 | -| [GetSize](GetSize.md) | 获取相关状态或对象。 | -| [GetBufferType](GetBufferType.md) | 获取相关状态或对象。 | -| [SetBufferType](SetBufferType.md) | 设置相关状态或配置。 | -| [GetStride](GetStride.md) | 获取相关状态或对象。 | -| [SetStride](SetStride.md) | 设置相关状态或配置。 | -| [GetNativeHandle](GetNativeHandle.md) | 获取相关状态或对象。 | -| [GetState](GetState.md) | 获取相关状态或对象。 | -| [SetState](SetState.md) | 设置相关状态或配置。 | -| [GetName](GetName.md) | 获取相关状态或对象。 | -| [SetName](SetName.md) | 设置相关状态或配置。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | +`RHIBuffer` 本身不是直接构造的,通常由 [RHIDevice](../RHIDevice/RHIDevice.md) 通过 [CreateBuffer](../RHIDevice/CreateBuffer.md) 创建,输入参数来自 [RHITypes](../RHITypes/RHITypes.md) 中的 `BufferDesc`: + +- `size` +- `stride` +- `bufferType` +- `flags` + +## 当前接口分组 + +### CPU 访问 + +- [Map](Map.md) +- [Unmap](Unmap.md) +- [SetData](SetData.md) + +这是当前 buffer 抽象里最值得注意的一组接口。它说明当前 `RHI` 不是把 buffer 完全当成“只能由 copy/transfer 写入的纯 GPU 资源”,而是允许上层直接进行 CPU 写入。 + +### 元数据 + +- [GetSize](GetSize.md) +- [GetBufferType](GetBufferType.md) +- [SetBufferType](SetBufferType.md) +- [GetStride](GetStride.md) +- [SetStride](SetStride.md) +- [GetName](GetName.md) +- [SetName](SetName.md) + +### 资源基类能力 + +- [GetNativeHandle](GetNativeHandle.md) +- [GetState](GetState.md) +- [SetState](SetState.md) +- [Shutdown](Shutdown.md) + +## `Map()` / `SetData()` 应该怎么理解 + +从当前 D3D12 / OpenGL / Vulkan 实现来看,`Map()` 都是直接返回后端可写入的 CPU 指针: + +- D3D12 映射底层 `ID3D12Resource` +- OpenGL 使用 `glMapBuffer` +- Vulkan 映射底层 `VkDeviceMemory` + +这意味着 `Map()` 在当前代码库里是真实可用能力,而不是占位接口。 + +但仍然要注意两点: + +### 1. 抽象接口没有显式暴露内存访问策略 + +`RHIBuffer` 自己没有告诉你它位于 upload heap、device local 还是别的内存类型。具体策略由后端在 `CreateBuffer()` 时根据 `BufferType` 决定。 + +例如当前源码里: + +- D3D12 对 `Constant` / `Vertex` / `Index` 倾向于使用 `UPLOAD` heap +- Vulkan 当前 `CreateBuffer()` 走的是 host-visible / host-coherent 内存 + +所以文档不能把它说成“所有 buffer 都适合任意频率 CPU 映射”,只能说当前常见路径支持映射和写入。 + +### 2. `Map()` 返回的指针应视为临时访问窗口 + +最安全的做法仍然是: + +1. `Map()` +2. 写入数据 +3. `Unmap()` + +而不是长期持有裸指针跨帧使用。 + +## 测试体现出的真实语义 + +`tests/RHI/unit/test_buffer.cpp` 已经覆盖了这些行为: + +- `Map()` / `Unmap()` 可用 +- `SetData()` 可写入整块数据 +- `GetSize()`、`GetStride()` 返回创建时的元数据 +- `GetBufferType()` / `SetBufferType()` 可读写类型标记 +- `GetState()` / `SetState()` 支持资源状态跟踪 +- `SetName()` / `GetName()` 支持调试命名 +- `GetNativeHandle()` 创建成功后通常非空 + +同时,command list 与集成测试也在真实使用 buffer: + +- 创建 vertex / index buffer +- 调用 `SetData()` +- 再通过 [RHIResourceView](../RHIResourceView/RHIResourceView.md) 绑定到 draw path + +## 当前设计理解 + +把 buffer 统一放进同一个接口,有几个工程上的好处: + +- 渲染系统可以用一套创建入口处理大多数线性 GPU 数据 +- 后端可以自行决定底层内存策略 +- 测试更容易覆盖共同行为 + +代价是抽象层不会自动告诉你“这个 buffer 最适合做什么”,调用方仍然需要结合 `BufferType` 和使用场景自己判断。 + +## 生命周期 + +`RHIBuffer` 由 [RHIDevice](../RHIDevice/RHIDevice.md) 创建,并以裸指针返回。当前推荐流程是: + +1. 创建 buffer +2. 可选地 `Map()` / `SetData()` +3. 通过 view 或其他路径参与渲染 +4. 调用 [Shutdown](Shutdown.md) +5. `delete` ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIResource](../RHIResource/RHIResource.md) +- [RHIResourceView](../RHIResourceView/RHIResourceView.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHICommandList](../RHICommandList/RHICommandList.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHICapabilities/RHICapabilities.md b/docs/api/XCEngine/RHI/RHICapabilities/RHICapabilities.md index 9ccad72e..79ff1780 100644 --- a/docs/api/XCEngine/RHI/RHICapabilities/RHICapabilities.md +++ b/docs/api/XCEngine/RHI/RHICapabilities/RHICapabilities.md @@ -6,56 +6,117 @@ **头文件**: `XCEngine/RHI/RHICapabilities.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHICapabilities` public API。 +**描述**: 描述当前设备支持的功能开关、资源上限、光栅限制和版本信息,是 renderer 初始化阶段的主要特性查询入口。 -## 概述 +## 角色概述 -`RHICapabilities.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHICapabilities` 是 [RHIDevice](../RHIDevice/RHIDevice.md) 暴露给上层的能力快照。它的定位很明确: -## 声明概览 +- 在 renderer 启动时决定某条渲染路径是否可用 +- 给资源系统提供尺寸和数量上限 +- 为调试与日志输出提供设备能力摘要 -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHICapabilities` | `struct` | 头文件中的公开声明。 | +这类结构在商业引擎里很常见,因为高层 renderer 往往需要先读一遍“当前设备能不能做某件事”,再决定启用哪些 feature set。 -## 结构体成员 +## 字段分组 -| 成员 | 类型 | 描述 | 默认值 | -|------|------|------|--------| -| `bSupportsRayTracing` | `bool` | 结构体公开字段。 | `false` | -| `bSupportsMeshShaders` | `bool` | 结构体公开字段。 | `false` | -| `bSupportsExplicitMultiThreading` | `bool` | 结构体公开字段。 | `false` | -| `bSupportsGeometryShaders` | `bool` | 结构体公开字段。 | `false` | -| `bSupportsTessellation` | `bool` | 结构体公开字段。 | `false` | -| `bSupportsComputeShaders` | `bool` | 结构体公开字段。 | `false` | -| `bSupportsDepthBoundsTest` | `bool` | 结构体公开字段。 | `false` | -| `bSupportsAlphaToCoverage` | `bool` | 结构体公开字段。 | `false` | -| `bSupportsIndependentBlend` | `bool` | 结构体公开字段。 | `false` | -| `bSupportsLogicOps` | `bool` | 结构体公开字段。 | `false` | -| `bSupportsMultiViewport` | `bool` | 结构体公开字段。 | `false` | -| `bSupportsConservativeRasterization` | `bool` | 结构体公开字段。 | `false` | -| `bSupportsProgrammableSamplePositions` | `bool` | 结构体公开字段。 | `false` | -| `maxTexture2DSize` | `uint32_t` | 结构体公开字段。 | `0` | -| `maxTexture3DSize` | `uint32_t` | 结构体公开字段。 | `0` | -| `maxTextureCubeSize` | `uint32_t` | 结构体公开字段。 | `0` | -| `maxRenderTargets` | `uint32_t` | 结构体公开字段。 | `0` | -| `maxViewports` | `uint32_t` | 结构体公开字段。 | `0` | -| `maxVertexAttribs` | `uint32_t` | 结构体公开字段。 | `0` | -| `maxConstantBufferSize` | `uint32_t` | 结构体公开字段。 | `0` | -| `maxAnisotropy` | `uint32_t` | 结构体公开字段。 | `0` | -| `maxColorAttachments` | `uint32_t` | 结构体公开字段。 | `0` | -| `minSmoothedLineWidth` | `float` | 结构体公开字段。 | `1.0f` | -| `maxSmoothedLineWidth` | `float` | 结构体公开字段。 | `1.0f` | -| `minPointSize` | `float` | 结构体公开字段。 | `1.0f` | -| `maxPointSize` | `float` | 结构体公开字段。 | `1.0f` | -| `maxPointSizeAA` | `float` | 结构体公开字段。 | `1.0f` | -| `maxLineWidth` | `float` | 结构体公开字段。 | `1.0f` | -| `maxLineWidthAA` | `float` | 结构体公开字段。 | `1.0f` | -| `majorVersion` | `int` | 结构体公开字段。 | `0` | -| `minorVersion` | `int` | 结构体公开字段。 | `0` | -| `shaderModel` | `std::string` | 结构体公开字段。 | - | +### 功能开关 + +- `bSupportsRayTracing` +- `bSupportsMeshShaders` +- `bSupportsExplicitMultiThreading` +- `bSupportsGeometryShaders` +- `bSupportsTessellation` +- `bSupportsComputeShaders` +- `bSupportsDepthBoundsTest` +- `bSupportsAlphaToCoverage` +- `bSupportsIndependentBlend` +- `bSupportsLogicOps` +- `bSupportsMultiViewport` +- `bSupportsConservativeRasterization` +- `bSupportsProgrammableSamplePositions` + +### 资源与渲染上限 + +- `maxTexture2DSize` +- `maxTexture3DSize` +- `maxTextureCubeSize` +- `maxRenderTargets` +- `maxViewports` +- `maxVertexAttribs` +- `maxConstantBufferSize` +- `maxAnisotropy` +- `maxColorAttachments` + +### 线宽、点大小相关限制 + +- `minSmoothedLineWidth` +- `maxSmoothedLineWidth` +- `minPointSize` +- `maxPointSize` +- `maxPointSizeAA` +- `maxLineWidth` +- `maxLineWidthAA` + +### 版本与 shader 模型 + +- `majorVersion` +- `minorVersion` +- `shaderModel` + +## 当前实现语义 + +这是一个纯 public struct,带默认值,没有 getter / setter,也没有更复杂的 feature query 层级。也就是说: + +- 默认构造时,布尔项基本都是 `false` +- 数值项基本是 `0` 或 `1.0f` +- 真正的能力数据由具体后端设备在初始化时填充 + +这种设计非常直接,适合当前阶段的引擎实现,但也意味着它不是那种高度抽象、可按扩展名逐项查询的 capability database。 + +## 测试揭示出的保证边界 + +`tests/RHI/unit/test_capabilities.cpp` 很适合拿来理解“这份结构当前到底保证到什么程度”。 + +现有测试主要验证的是: + +- 常见纹理尺寸、render target 数量、viewport 数量等至少大于某些下限 +- `majorVersion` / `minorVersion` 非负 +- D3D12 下 `shaderModel` 非空 +- 各项 line width / point size 数据不小于基础值 +- `maxConstantBufferSize` 在一个合理范围内 + +这说明当前 `RHICapabilities` 更像“运行时可用的设备特征摘要”,而不是一份经过严格标准化校验的完整硬件契约。 + +## 怎么正确使用 + +推荐把它用于: + +- 启动时 feature gating +- 选择 render path +- 做日志输出和诊断 +- 对资源尺寸做防御性检查 + +不建议把它当成: + +- 跨平台精确一致的能力数据库 +- 替代后端专用 feature query 的唯一信息源 +- 细粒度扩展发现系统 + +## 和商用引擎能力系统的关系 + +很多成熟引擎会把能力系统做得更分层,例如把 adapter info、feature support、format support、optional extensions 分开表示。当前 `RHICapabilities` 还没有走到那一步,它更像一个实用的第一层设备能力快照。 + +这对当前阶段反而是合理的: + +- renderer 能快速消费 +- 文档和测试更容易保持一致 +- 后续如果要拆分也有基础数据模型可演进 ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHITypes](../RHITypes/RHITypes.md) +- [Devices, Queues, Command Lists, And Resource Creation](../../../_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHICommandList/RHICommandList.md b/docs/api/XCEngine/RHI/RHICommandList/RHICommandList.md index c7e22b20..11f60a45 100644 --- a/docs/api/XCEngine/RHI/RHICommandList/RHICommandList.md +++ b/docs/api/XCEngine/RHI/RHICommandList/RHICommandList.md @@ -6,55 +6,167 @@ **头文件**: `XCEngine/RHI/RHICommandList.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHICommandList` public API。 +**描述**: 抽象命令录制接口,负责记录资源状态切换、render pass、绑定状态、draw、dispatch、clear 和 copy 等 GPU 工作。 -## 概述 +## 角色概述 -`RHICommandList.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHICommandList` 是当前抽象层里最直接面向 GPU 录制语义的接口。按原生图形 API 的习惯来理解,它代表一段待提交的命令流,通常由 [RHIDevice](../RHIDevice/RHIDevice.md) 创建、由 [RHICommandQueue](../RHICommandQueue/RHICommandQueue.md) 执行。 -## 声明概览 +和很多理想化的“最小 command buffer 抽象”不同,当前这份接口比较宽: -| 声明 | 类型 | 说明 | -|------|------|------| -| `DepthStencilState` | `struct` | 头文件中的公开声明。 | -| `BlendState` | `struct` | 头文件中的公开声明。 | -| `RHICommandList` | `class` | 头文件中的公开声明。 | +- 既有 draw 也有 dispatch +- 既有 render pass 路径也有直接 `SetRenderTargets()` 路径 +- 既有 `SetPipelineState()`,也保留了 `SetShader()` +- 既覆盖 barrier / clear / copy,也覆盖 descriptor set 绑定 + +这反映出当前抽象层更偏“支撑后端实现和测试的统一录制入口”,而不是已经极致收敛后的最终形态。 + +## 录制生命周期 + +按现有测试的真实使用顺序,最常见流程是: + +1. 创建 `RHICommandList` +2. [Reset](Reset.md) +3. 录制状态、资源绑定和 draw / dispatch +4. [Close](Close.md) +5. 交给 [RHICommandQueue](../RHICommandQueue/RHICommandQueue.md) 提交 +6. 使用结束后 [Shutdown](Shutdown.md) 并 `delete` + +这和 D3D12 / Vulkan 一类显式 API 的工作流是一致的。 + +## 接口分组 + +### 同步与状态切换 + +- [TransitionBarrier](TransitionBarrier.md) + +当前 barrier 接口接收的是 `RHIResourceView*`,而不是 `RHIResource*` 或更细粒度的 barrier 描述结构。这是一种相对简化、也带有当前实现痕迹的抽象选择。 + +### render pass 与附件绑定 + +- [BeginRenderPass](BeginRenderPass.md) +- [EndRenderPass](EndRenderPass.md) +- [SetRenderTargets](SetRenderTargets.md) + +这说明当前接口同时保留了更现代的 render pass 语义和更传统的显式 render target 绑定语义。工程上应尽量在同一条渲染路径里保持一致,不要随意混用。 + +### 管线与 descriptor 绑定 + +- [SetShader](SetShader.md) +- [SetPipelineState](SetPipelineState.md) +- [SetGraphicsDescriptorSets](SetGraphicsDescriptorSets.md) +- [SetComputeDescriptorSets](SetComputeDescriptorSets.md) +- [SetPrimitiveTopology](SetPrimitiveTopology.md) + +这里最值得注意的是 `SetShader()` 和 `SetPipelineState()` 并存,说明当前抽象并不是完全 PSO-only 的模型。 + +### 固定功能状态 + +- [SetViewport](SetViewport.md) +- [SetViewports](SetViewports.md) +- [SetScissorRect](SetScissorRect.md) +- [SetScissorRects](SetScissorRects.md) +- [SetStencilRef](SetStencilRef.md) +- [SetBlendFactor](SetBlendFactor.md) + +### 资源绑定 + +- [SetVertexBuffers](SetVertexBuffers.md) +- [SetIndexBuffer](SetIndexBuffer.md) + +现有测试里,这部分通常会先由 `RHIDevice` 创建 buffer,再创建对应的 resource view,最后绑定到 command list。 + +### 执行命令 + +- [Draw](Draw.md) +- [DrawIndexed](DrawIndexed.md) +- [Dispatch](Dispatch.md) + +### clear、copy 与 native handle + +- [Clear](Clear.md) +- [ClearRenderTarget](ClearRenderTarget.md) +- [ClearDepthStencil](ClearDepthStencil.md) +- [CopyResource](CopyResource.md) +- [GetNativeHandle](GetNativeHandle.md) + +## 头文件中的辅助结构 + +`RHICommandList.h` 里还定义了两个结构: + +- `DepthStencilState` +- `BlendState` + +需要特别说明的是,这两个结构并不是当前主 pipeline 描述路径里最核心的状态结构。当前 `RHIPipelineState` / `GraphicsPipelineDesc` 更主要使用的是 [RHITypes](../RHITypes/RHITypes.md) 中的: + +- `DepthStencilStateDesc` +- `BlendDesc` + +所以这里更合理的理解是:`RHICommandList.h` 里的这两个结构代表了历史遗留或辅助性状态表达,而不是整个抽象层的唯一标准状态类型。 + +## 测试体现出的真实能力 + +`tests/RHI/unit/test_command_list.cpp` 对理解这份接口很重要。当前测试已经覆盖了: + +- `Reset()` / `Close()` +- 拓扑、viewport、scissor 等基础状态设置 +- 真实的 vertex / index buffer view 绑定 +- `ClearRenderTarget()`、`ClearDepthStencil()` +- `TransitionBarrier()`、`CopyResource()` +- `BeginRenderPass()` / `EndRenderPass()` +- OpenGL 后端下的 descriptor set、framebuffer attachment 和 compute 路径验证 + +这说明 `RHICommandList` 不是纸面抽象,而是当前图形测试已经在直接依赖的一层。 + +## 当前设计边界 + +- 没有显式二级命令列表 / bundle / secondary command buffer 抽象。 +- barrier 模型比较简化。 +- shader 绑定模型和 pipeline 绑定模型并存,接口风格还在收敛中。 +- render pass 路径和直接 render target 绑定路径并存。 + +这些边界在演进中的引擎里很常见。文档的职责不是替它美化,而是把这些事实讲清楚,帮助使用者减少误用。 ## 公共方法 -| 方法 | 描述 | -|------|------| -| [~RHICommandList()](Destructor.md) | 销毁对象并释放相关资源。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | -| [Reset](Reset.md) | 公开方法,详见头文件声明。 | -| [Close](Close.md) | 公开方法,详见头文件声明。 | -| [TransitionBarrier](TransitionBarrier.md) | 公开方法,详见头文件声明。 | -| [BeginRenderPass](BeginRenderPass.md) | 公开方法,详见头文件声明。 | -| [EndRenderPass](EndRenderPass.md) | 公开方法,详见头文件声明。 | -| [SetShader](SetShader.md) | 设置相关状态或配置。 | -| [SetPipelineState](SetPipelineState.md) | 设置相关状态或配置。 | -| [SetGraphicsDescriptorSets](SetGraphicsDescriptorSets.md) | 设置相关状态或配置。 | -| [SetComputeDescriptorSets](SetComputeDescriptorSets.md) | 设置相关状态或配置。 | -| [SetPrimitiveTopology](SetPrimitiveTopology.md) | 设置相关状态或配置。 | -| [SetViewport](SetViewport.md) | 设置相关状态或配置。 | -| [SetViewports](SetViewports.md) | 设置相关状态或配置。 | -| [SetScissorRect](SetScissorRect.md) | 设置相关状态或配置。 | -| [SetScissorRects](SetScissorRects.md) | 设置相关状态或配置。 | -| [SetRenderTargets](SetRenderTargets.md) | 设置相关状态或配置。 | -| [SetStencilRef](SetStencilRef.md) | 设置相关状态或配置。 | -| [SetBlendFactor](SetBlendFactor.md) | 设置相关状态或配置。 | -| [SetVertexBuffers](SetVertexBuffers.md) | 设置相关状态或配置。 | -| [SetIndexBuffer](SetIndexBuffer.md) | 设置相关状态或配置。 | -| [Draw](Draw.md) | 公开方法,详见头文件声明。 | -| [DrawIndexed](DrawIndexed.md) | 公开方法,详见头文件声明。 | -| [Clear](Clear.md) | 清空内部数据。 | -| [ClearRenderTarget](ClearRenderTarget.md) | 清空内部数据。 | -| [ClearDepthStencil](ClearDepthStencil.md) | 清空内部数据。 | -| [CopyResource](CopyResource.md) | 公开方法,详见头文件声明。 | -| [Dispatch](Dispatch.md) | 公开方法,详见头文件声明。 | -| [GetNativeHandle](GetNativeHandle.md) | 获取相关状态或对象。 | +- [Reset](Reset.md) +- [Close](Close.md) +- [TransitionBarrier](TransitionBarrier.md) +- [BeginRenderPass](BeginRenderPass.md) +- [EndRenderPass](EndRenderPass.md) +- [SetShader](SetShader.md) +- [SetPipelineState](SetPipelineState.md) +- [SetGraphicsDescriptorSets](SetGraphicsDescriptorSets.md) +- [SetComputeDescriptorSets](SetComputeDescriptorSets.md) +- [SetPrimitiveTopology](SetPrimitiveTopology.md) +- [SetViewport](SetViewport.md) +- [SetViewports](SetViewports.md) +- [SetScissorRect](SetScissorRect.md) +- [SetScissorRects](SetScissorRects.md) +- [SetRenderTargets](SetRenderTargets.md) +- [SetStencilRef](SetStencilRef.md) +- [SetBlendFactor](SetBlendFactor.md) +- [SetVertexBuffers](SetVertexBuffers.md) +- [SetIndexBuffer](SetIndexBuffer.md) +- [Draw](Draw.md) +- [DrawIndexed](DrawIndexed.md) +- [Clear](Clear.md) +- [ClearRenderTarget](ClearRenderTarget.md) +- [ClearDepthStencil](ClearDepthStencil.md) +- [CopyResource](CopyResource.md) +- [Dispatch](Dispatch.md) +- [GetNativeHandle](GetNativeHandle.md) + +## 相关指南 + +- [Devices, Queues, Command Lists, And Resource Creation](../../../_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md) ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHICommandQueue](../RHICommandQueue/RHICommandQueue.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHIPipelineState](../RHIPipelineState/RHIPipelineState.md) +- [RHIRenderPass](../RHIRenderPass/RHIRenderPass.md) +- [RHITypes](../RHITypes/RHITypes.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHICommandQueue/RHICommandQueue.md b/docs/api/XCEngine/RHI/RHICommandQueue/RHICommandQueue.md index e3182c92..2bcf7cbf 100644 --- a/docs/api/XCEngine/RHI/RHICommandQueue/RHICommandQueue.md +++ b/docs/api/XCEngine/RHI/RHICommandQueue/RHICommandQueue.md @@ -6,36 +6,99 @@ **头文件**: `XCEngine/RHI/RHICommandQueue.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHICommandQueue` public API。 +**描述**: 抽象命令提交队列,负责执行命令列表、管理 GPU 同步以及暴露基础队列信息。 -## 概述 +## 角色概述 -`RHICommandQueue.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHICommandQueue` 对应的是原生图形 API 里的提交队列概念。当前接口主要承担三类职责: -## 声明概览 +- 提交命令列表 +- 和 [RHIFence](../RHIFence/RHIFence.md) 协作完成 GPU 同步 +- 暴露队列类型、帧索引和时间戳频率等队列级信息 -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHICommandQueue` | `class` | 头文件中的公开声明。 | +在抽象层里,它位于 [RHIDevice](../RHIDevice/RHIDevice.md) 和 [RHICommandList](../RHICommandList/RHICommandList.md) 之间,是“录制好的 GPU 工作真正被执行”的入口。 + +## 当前接口语义 + +### 提交 + +- [ExecuteCommandLists](ExecuteCommandLists.md) + +这是队列最核心的方法。但要注意,当前签名是 `ExecuteCommandLists(uint32_t count, void** lists)`,而不是 `RHICommandList**`。这说明抽象层在提交阶段仍保留了一定后端适配痕迹,接口类型安全性不算强。 + +### 同步 + +- [Signal](Signal.md) +- [Wait](Wait.md) +- [GetCompletedValue](GetCompletedValue.md) +- [WaitForIdle](WaitForIdle.md) + +这组接口提供了最基础的 GPU timeline / fence 同步语义。 + +### 队列与帧信息 + +- [GetType](GetType.md) +- [GetTimestampFrequency](GetTimestampFrequency.md) +- [GetNativeHandle](GetNativeHandle.md) +- [WaitForPreviousFrame](WaitForPreviousFrame.md) +- [GetCurrentFrame](GetCurrentFrame.md) + +其中 `WaitForPreviousFrame()` 和 `GetCurrentFrame()` 暗示当前抽象层除了通用队列语义,还兼顾了交换链驱动的 frame-loop 使用场景。 + +## 队列类型 + +队列类型由 [CommandQueueType](../RHIEnums/RHIEnums.md) 表达,当前枚举包括: + +- `Direct` +- `Compute` +- `Copy` + +但从当前测试覆盖和接口成熟度看,最常见、最稳定的仍是 `Direct` 路径。 + +## 生命周期与所有权 + +`RHICommandQueue` 通常由 [RHIDevice](../RHIDevice/RHIDevice.md) 创建,并以裸指针形式返回。和本模块其他对象一样,推荐使用模式是: + +1. `RHIDevice::CreateCommandQueue()` +2. 使用队列提交命令或等待同步 +3. `queue->Shutdown()` +4. `delete queue` + +## 设计理解 + +从商业引擎实践看,把 queue 抽象单独暴露出来是合理的: + +- 它让 renderer 可以明确区分“录制命令”和“提交命令”。 +- 它为多队列或异步计算扩展保留了接口形状。 +- 它便于测试在设备层之上直接验证提交和同步行为。 + +但当前实现仍然比较早期: + +- 提交接口还不够类型安全。 +- 队列抽象还没有扩展到更复杂的 submission batch、timeline semaphore 或跨队列调度模型。 +- `WaitForPreviousFrame()` 这类接口说明它同时背负了一些具体 frame-loop 约定,而不是完全最小化的 queue 抽象。 ## 公共方法 -| 方法 | 描述 | -|------|------| -| [~RHICommandQueue()](Destructor.md) | 销毁对象并释放相关资源。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | -| [ExecuteCommandLists](ExecuteCommandLists.md) | 公开方法,详见头文件声明。 | -| [Signal](Signal.md) | 公开方法,详见头文件声明。 | -| [Wait](Wait.md) | 公开方法,详见头文件声明。 | -| [GetCompletedValue](GetCompletedValue.md) | 获取相关状态或对象。 | -| [WaitForIdle](WaitForIdle.md) | 公开方法,详见头文件声明。 | -| [GetType](GetType.md) | 获取相关状态或对象。 | -| [GetTimestampFrequency](GetTimestampFrequency.md) | 获取相关状态或对象。 | -| [GetNativeHandle](GetNativeHandle.md) | 获取相关状态或对象。 | -| [WaitForPreviousFrame](WaitForPreviousFrame.md) | 公开方法,详见头文件声明。 | -| [GetCurrentFrame](GetCurrentFrame.md) | 获取相关状态或对象。 | +- [ExecuteCommandLists](ExecuteCommandLists.md) +- [Signal](Signal.md) +- [Wait](Wait.md) +- [GetCompletedValue](GetCompletedValue.md) +- [WaitForIdle](WaitForIdle.md) +- [GetType](GetType.md) +- [GetTimestampFrequency](GetTimestampFrequency.md) +- [GetNativeHandle](GetNativeHandle.md) +- [WaitForPreviousFrame](WaitForPreviousFrame.md) +- [GetCurrentFrame](GetCurrentFrame.md) + +## 相关指南 + +- [Devices, Queues, Command Lists, And Resource Creation](../../../_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md) ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHICommandList](../RHICommandList/RHICommandList.md) +- [RHIFence](../RHIFence/RHIFence.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHIDescriptorPool/RHIDescriptorPool.md b/docs/api/XCEngine/RHI/RHIDescriptorPool/RHIDescriptorPool.md index 690c5f9b..32d6ad7d 100644 --- a/docs/api/XCEngine/RHI/RHIDescriptorPool/RHIDescriptorPool.md +++ b/docs/api/XCEngine/RHI/RHIDescriptorPool/RHIDescriptorPool.md @@ -6,32 +6,107 @@ **头文件**: `XCEngine/RHI/RHIDescriptorPool.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHIDescriptorPool` public API。 +**描述**: descriptor set 分配池,负责按指定 heap 类型和容量创建、回收 `RHIDescriptorSet`。 -## 概述 +## 角色概述 -`RHIDescriptorPool.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHIDescriptorPool` 是当前资源绑定系统里的分配器入口。它的抽象目标比较清晰: -## 声明概览 +- 上层先定义 descriptor pool 的类型和容量 +- 再从 pool 中分配一个或多个 [RHIDescriptorSet](../RHIDescriptorSet/RHIDescriptorSet.md) -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHIDescriptorPool` | `class` | 头文件中的公开声明。 | +从设计上看,它相当于在不同后端之间收敛: + +- D3D12 风格的 descriptor heap / descriptor range 分配 +- Vulkan 风格的 descriptor pool / descriptor set 分配 +- OpenGL 当前实现中的绑定点管理 + +## `DescriptorPoolDesc` 的核心字段 + +当前 pool 描述来自 [RHITypes](../RHITypes/RHITypes.md) 中的 `DescriptorPoolDesc`,最重要的字段是: + +- `type` +- `descriptorCount` +- `shaderVisible` + +其中 `type` 对应 [DescriptorHeapType](../RHIEnums/RHIEnums.md)。 + +## 当前支持的池类型 + +现有测试已经覆盖了以下几种 pool 类型: + +- `CBV_SRV_UAV` +- `Sampler` +- `RTV` +- `DSV` + +这说明当前抽象层已经把常见资源视图和采样器池分开表达,而不是只做单一 descriptor arena。 + +## 当前使用路径 + +典型流程是: + +1. 通过 [RHIDevice](../RHIDevice/RHIDevice.md) 创建 `RHIDescriptorPool` +2. 调用 [AllocateSet](AllocateSet.md) 传入 `DescriptorSetLayoutDesc` +3. 获得 [RHIDescriptorSet](../RHIDescriptorSet/RHIDescriptorSet.md) +4. 使用结束后销毁 set,再关闭 pool + +当前接口还提供 [FreeSet](FreeSet.md),说明 pool 设计时就考虑了 set 生命周期管理,而不是单纯一次性线性分配。 + +## 设计理解 + +这层抽象在商业引擎里很常见,因为 descriptor / binding 资源通常不是孤立对象,而是需要一个分配域: + +- pool 负责容量和类型边界 +- set 负责单次绑定内容 + +当前实现比较薄,但这是合理的第一步。它已经足够表达“这个 pass / material 需要从哪个类型的绑定池里拿一组 descriptor set”。 + +## 当前边界 + +当前 `RHIDescriptorPool` 没有直接暴露: + +- 碎片率或剩余容量查询 +- reset-all / frame allocator 语义 +- 多线程分配保证 +- 复杂回收策略 + +所以更准确的理解是:它是一个够用的基础分配接口,而不是完整的 descriptor allocator 子系统。 + +## 测试体现出的真实语义 + +`tests/RHI/unit/test_descriptor.cpp` 和 `test_descriptor_set.cpp` 表明: + +- `GetType()` 和 `GetDescriptorCount()` 会反映创建时的 pool 配置 +- `Shutdown()` 可以重复调用 +- pool 创建成功后可连续 `AllocateSet()` +- 部分测试直接通过 `pool->FreeSet(set)` 回收 set + +这说明它已经是 descriptor 相关测试的主要对象,而不是占位接口。 + +## 生命周期 + +`RHIDescriptorPool` 由 [RHIDevice](../RHIDevice/RHIDevice.md) 创建,使用完成后应: + +1. 先释放或关闭从该 pool 分配出的 set +2. 调用 [Shutdown](Shutdown.md) +3. `delete` ## 公共方法 -| 方法 | 描述 | -|------|------| -| [~RHIDescriptorPool()](Destructor.md) | 销毁对象并释放相关资源。 | -| [Initialize](Initialize.md) | 初始化内部状态。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | -| [GetNativeHandle](GetNativeHandle.md) | 获取相关状态或对象。 | -| [GetDescriptorCount](GetDescriptorCount.md) | 获取相关状态或对象。 | -| [GetType](GetType.md) | 获取相关状态或对象。 | -| [AllocateSet](AllocateSet.md) | 公开方法,详见头文件声明。 | -| [FreeSet](FreeSet.md) | 公开方法,详见头文件声明。 | +- [Initialize](Initialize.md) +- [Shutdown](Shutdown.md) +- [GetNativeHandle](GetNativeHandle.md) +- [GetDescriptorCount](GetDescriptorCount.md) +- [GetType](GetType.md) +- [AllocateSet](AllocateSet.md) +- [FreeSet](FreeSet.md) ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHIDescriptorSet](../RHIDescriptorSet/RHIDescriptorSet.md) +- [RHITypes](../RHITypes/RHITypes.md) +- [RHIEnums](../RHIEnums/RHIEnums.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHIDescriptorSet/RHIDescriptorSet.md b/docs/api/XCEngine/RHI/RHIDescriptorSet/RHIDescriptorSet.md index 3991da4e..b604dea7 100644 --- a/docs/api/XCEngine/RHI/RHIDescriptorSet/RHIDescriptorSet.md +++ b/docs/api/XCEngine/RHI/RHIDescriptorSet/RHIDescriptorSet.md @@ -6,37 +6,124 @@ **头文件**: `XCEngine/RHI/RHIDescriptorSet.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHIDescriptorSet` public API。 +**描述**: 资源绑定集合对象,负责把 resource view、sampler 和常量数据组织成一组可绑定描述。 -## 概述 +## 角色概述 -`RHIDescriptorSet.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHIDescriptorSet` 是当前抽象层里对“一组资源绑定”的统一表达。它通常不直接独立创建,而是从 [RHIDescriptorPool](../RHIDescriptorPool/RHIDescriptorPool.md) 中分配出来。 -## 声明概览 +它承担三类职责: -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHIDescriptorSet` | `class` | 头文件中的公开声明。 | +- 管理布局绑定信息 +- 持有或引用 view / sampler 绑定 +- 维护常量缓冲区的 CPU 侧写入状态 + +## 当前接口语义 + +### 生命周期与绑定 + +- [Bind](Bind.md) +- [Unbind](Unbind.md) +- [Shutdown](Shutdown.md) + +这说明 descriptor set 在当前抽象里不是单纯静态数据对象,而是允许直接参与绑定/解绑流程。 + +### 资源更新 + +- [Update](Update.md) +- [UpdateSampler](UpdateSampler.md) + +这两个接口分别用于写入资源视图和 sampler。 + +需要特别注意的是,`Update(uint32_t offset, ...)` 参数名虽然叫 `offset`,但从当前测试特别是 OpenGL 路径来看,它的现实语义更接近“binding number”,而不是“布局数组中的第几个元素”。 + +例如测试会定义 binding `3` 和 `7`,然后显式调用: + +- `set->Update(7, srv)` + +并验证只有 binding `7` 被更新。 + +### 常量数据 + +- [WriteConstant](WriteConstant.md) +- [GetConstantBufferData](GetConstantBufferData.md) +- [GetConstantBufferSize](GetConstantBufferSize.md) +- [IsConstantDirty](IsConstantDirty.md) +- [MarkConstantClean](MarkConstantClean.md) + +这组接口说明当前 `RHIDescriptorSet` 不只是一个“引用外部 GPU 资源的句柄集合”,它还承担了一层常量数据 staging / dirty tracking 的职责。 + +## 布局信息 + +`RHIDescriptorSet` 通过以下接口暴露自身布局: + +- [GetBindingCount](GetBindingCount.md) +- [GetBindings](GetBindings.md) + +布局描述本身来自 [RHITypes](../RHITypes/RHITypes.md) 中的: + +- `DescriptorSetLayoutBinding` +- `DescriptorSetLayoutDesc` + +这意味着 set 的资源组织方式在创建时就已由布局确定,而不是运行时自由追加字段。 + +## 测试体现出的真实语义 + +`tests/RHI/unit/test_descriptor_set.cpp` 很能说明当前实现已经具备哪些行为: + +- 可以分配空布局 set,也可以分配带 SRV / Sampler / CBV 的布局 +- `Update()` 可以写入 `RHIResourceView` +- `UpdateSampler()` 可以写入 `RHISampler` +- `WriteConstant()` 会分配或更新常量数据,并能通过 `GetConstantBufferData()` / `GetConstantBufferSize()` 读取状态 +- `WriteConstant()` 会把 dirty 标记设为 true,`MarkConstantClean()` 会清掉该标记 +- OpenGL 路径会按 binding number 执行纹理和 UBO 绑定 +- D3D12 路径还存在更底层的 descriptor offset、descriptor index 和常量缓冲上传行为 + +这说明 `RHIDescriptorSet` 当前已经不是纸面抽象,而是后端资源绑定机制的真实统一入口。 + +## 设计理解 + +如果参考商业引擎常见做法,这样的 descriptor set 抽象有几个明显好处: + +- renderer 可以用统一布局描述去组织材质和 pass 资源 +- 后端可以各自把这组绑定映射到 descriptor heap、binding point 或 native layout +- 常量缓冲和资源视图能在同一对象里统一管理修改状态 + +代价是当前接口也背了一些实现细节: + +- `offset` / `binding` 语义不够直观 +- 既有资源绑定,也有常量缓冲 staging +- 后端差异仍然会在具体行为上暴露出来 + +## 生命周期 + +通常流程是: + +1. 从 [RHIDescriptorPool](../RHIDescriptorPool/RHIDescriptorPool.md) 分配 +2. 调用 `Update()` / `UpdateSampler()` / `WriteConstant()` 填充数据 +3. 交给 [RHICommandList](../RHICommandList/RHICommandList.md) 或后端绑定路径使用 +4. 使用结束后 [Shutdown](Shutdown.md) 并 `delete` ## 公共方法 -| 方法 | 描述 | -|------|------| -| [~RHIDescriptorSet()](Destructor.md) | 销毁对象并释放相关资源。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | -| [Bind](Bind.md) | 公开方法,详见头文件声明。 | -| [Unbind](Unbind.md) | 公开方法,详见头文件声明。 | -| [Update](Update.md) | 更新运行时状态。 | -| [UpdateSampler](UpdateSampler.md) | 更新运行时状态。 | -| [WriteConstant](WriteConstant.md) | 公开方法,详见头文件声明。 | -| [GetBindingCount](GetBindingCount.md) | 获取相关状态或对象。 | -| [GetBindings](GetBindings.md) | 获取相关状态或对象。 | -| [GetConstantBufferData](GetConstantBufferData.md) | 获取相关状态或对象。 | -| [GetConstantBufferSize](GetConstantBufferSize.md) | 获取相关状态或对象。 | -| [IsConstantDirty](IsConstantDirty.md) | 查询当前状态。 | -| [MarkConstantClean](MarkConstantClean.md) | 公开方法,详见头文件声明。 | +- [Shutdown](Shutdown.md) +- [Bind](Bind.md) +- [Unbind](Unbind.md) +- [Update](Update.md) +- [UpdateSampler](UpdateSampler.md) +- [WriteConstant](WriteConstant.md) +- [GetBindingCount](GetBindingCount.md) +- [GetBindings](GetBindings.md) +- [GetConstantBufferData](GetConstantBufferData.md) +- [GetConstantBufferSize](GetConstantBufferSize.md) +- [IsConstantDirty](IsConstantDirty.md) +- [MarkConstantClean](MarkConstantClean.md) ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIDescriptorPool](../RHIDescriptorPool/RHIDescriptorPool.md) +- [RHICommandList](../RHICommandList/RHICommandList.md) +- [RHITypes](../RHITypes/RHITypes.md) +- [RHIEnums](../RHIEnums/RHIEnums.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHIDevice/RHIDevice.md b/docs/api/XCEngine/RHI/RHIDevice/RHIDevice.md index a14a3d4c..c0f96df3 100644 --- a/docs/api/XCEngine/RHI/RHIDevice/RHIDevice.md +++ b/docs/api/XCEngine/RHI/RHIDevice/RHIDevice.md @@ -6,50 +6,168 @@ **头文件**: `XCEngine/RHI/RHIDevice.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHIDevice` public API。 +**描述**: 抽象图形设备接口,负责设备初始化、能力查询,并作为大多数 RHI 对象的统一创建中心。 -## 概述 +## 角色概述 -`RHIDevice.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHIDevice` 是当前 `RHI` 抽象层的中心对象。它不像某些引擎那样把资源工厂、提交器、能力查询器分拆成多套接口,而是采用一种更集中的“设备即工厂”设计: -## 声明概览 +- 初始化后端上下文或 native device +- 持有能力信息和设备信息 +- 创建资源对象、命令对象、pipeline 对象和 descriptor 对象 +- 提供必要的 native handle 泄露口 -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHIDevice` | `class` | 头文件中的公开声明。 | +这和原生图形 API 的心智模型比较接近,也符合很多商业引擎底层渲染后端的设计习惯。好处是统一、直接,代价是接口面比较大。 + +## 生命周期 + +### 初始化 + +`Initialize(const RHIDeviceDesc&)` 是创建后的第一步。当前 `RHIDeviceDesc` 只暴露了三个设备级开关: + +- `enableDebugLayer` +- `enableGPUValidation` +- `adapterIndex` + +这说明当前设备初始化配置还比较克制,没有把所有平台差异都堆进入口参数里。 + +### 关闭 + +`Shutdown()` 负责销毁设备级状态。按当前测试习惯,调用方应在删除设备之前显式调用它,而不是只依赖析构函数。 + +### 查询 + +初始化成功后,调用方通常会继续读取: + +- [GetCapabilities](GetCapabilities.md) +- [GetDeviceInfo](GetDeviceInfo.md) +- [GetNativeDevice](GetNativeDevice.md) + +其中 `GetNativeDevice()` 明确是一个“打破抽象边界”的出口,供后端专用逻辑或调试逻辑使用。 + +## 它负责创建什么 + +当前接口覆盖了 RHI 里绝大多数对象类别。 + +### 资源与展示 + +- [CreateBuffer](CreateBuffer.md) +- [CreateTexture](CreateTexture.md) +- [CreateSwapChain](CreateSwapChain.md) + +`CreateTexture()` 还有一个带 `initialData` 和 `rowPitch` 的重载,允许直接创建并上传初始数据。 + +### 执行与同步 + +- [CreateCommandList](CreateCommandList.md) +- [CreateCommandQueue](CreateCommandQueue.md) +- [CreateFence](CreateFence.md) + +### shader 与管线 + +- [CreateShader](CreateShader.md) +- [CreatePipelineState](CreatePipelineState.md) +- [CreatePipelineLayout](CreatePipelineLayout.md) +- [CreateSampler](CreateSampler.md) + +### render pass 与 framebuffer + +- [CreateRenderPass](CreateRenderPass.md) +- [CreateFramebuffer](CreateFramebuffer.md) + +### descriptor 与资源视图 + +- [CreateDescriptorPool](CreateDescriptorPool.md) +- [CreateDescriptorSet](CreateDescriptorSet.md) +- [CreateVertexBufferView](CreateVertexBufferView.md) +- [CreateIndexBufferView](CreateIndexBufferView.md) +- [CreateRenderTargetView](CreateRenderTargetView.md) +- [CreateDepthStencilView](CreateDepthStencilView.md) +- [CreateShaderResourceView](CreateShaderResourceView.md) +- [CreateUnorderedAccessView](CreateUnorderedAccessView.md) + +从接口形状就能看出,当前 `RHIDevice` 同时承担了资源创建器、视图工厂、descriptor 工厂和 pipeline 工厂的职责。 + +## 所有权约定 + +这是这页最关键的现实语义。 + +当前 `RHIDevice` 的所有创建接口都返回裸指针。按 `tests/RHI/unit/test_device.cpp`、`test_command_list.cpp` 等现有测试来看,推荐使用方式是: + +1. 通过 `RHIDevice` 创建对象。 +2. 使用对象执行初始化、录制或资源操作。 +3. 结束前调用对象自己的 `Shutdown()`。 +4. 最后 `delete`。 + +这同样适用于 `buffer`、`texture`、`queue`、`command list`、`fence`、`sampler`、`render pass`、`framebuffer`、`descriptor pool`、`descriptor set`、`resource view` 等对象。 + +如果带着现代 RAII 预期来使用这层接口,很容易误判释放责任。当前文档必须把这一点写死。 + +## 当前设计理解 + +从架构方向看,`RHIDevice` 的定位是合理的: + +- 抽象层统一把后端对象创建集中到设备上,方便 renderer 只依赖一套入口。 +- 设备负责暴露能力信息,便于上层在初始化阶段建立 feature branch。 +- 资源视图和 descriptor 也由设备创建,符合 D3D12 / Vulkan 风格资源管理直觉。 + +但从当前实现成熟度看,也要认识到几个边界: + +- 还没有单独的内存分配器 / residency / heap 管理抽象。 +- 资源创建描述符虽然统一,但很多字段仍是 `uint32_t` 承载枚举值,而不是更强类型的 API。 +- `GetNativeDevice()` 表明上层仍可能在必要时下钻到后端实现。 + +这说明当前阶段的目标更偏“稳定支撑后端实现和测试”,而不是已经完成最终抽象收敛。 + +## 测试中体现出的真实用法 + +现有测试提供了比模板文档更可靠的使用线索: + +- 创建设备后先 `Initialize()`。 +- 查询 `GetCapabilities()` 和 `GetDeviceInfo()`。 +- 创建 `Buffer`、`Texture`、`Fence`、`CommandQueue`、`CommandList`、`Sampler` 等对象。 +- 对每个对象做基本验证后 `Shutdown()` 并 `delete`。 + +这说明 `RHIDevice` 当前不仅是概念入口,而且已经是单元测试和集成测试里的真实生产入口。 ## 公共方法 -| 方法 | 描述 | -|------|------| -| [~RHIDevice()](Destructor.md) | 销毁对象并释放相关资源。 | -| [Initialize](Initialize.md) | 初始化内部状态。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | -| [CreateBuffer](CreateBuffer.md) | 创建新对象或资源。 | -| [CreateTexture](CreateTexture.md) | 创建新对象或资源。 | -| [CreateSwapChain](CreateSwapChain.md) | 创建新对象或资源。 | -| [CreateCommandList](CreateCommandList.md) | 创建新对象或资源。 | -| [CreateCommandQueue](CreateCommandQueue.md) | 创建新对象或资源。 | -| [CreateShader](CreateShader.md) | 创建新对象或资源。 | -| [CreatePipelineState](CreatePipelineState.md) | 创建新对象或资源。 | -| [CreatePipelineLayout](CreatePipelineLayout.md) | 创建新对象或资源。 | -| [CreateFence](CreateFence.md) | 创建新对象或资源。 | -| [CreateSampler](CreateSampler.md) | 创建新对象或资源。 | -| [CreateRenderPass](CreateRenderPass.md) | 创建新对象或资源。 | -| [CreateFramebuffer](CreateFramebuffer.md) | 创建新对象或资源。 | -| [CreateDescriptorPool](CreateDescriptorPool.md) | 创建新对象或资源。 | -| [CreateDescriptorSet](CreateDescriptorSet.md) | 创建新对象或资源。 | -| [CreateVertexBufferView](CreateVertexBufferView.md) | 创建新对象或资源。 | -| [CreateIndexBufferView](CreateIndexBufferView.md) | 创建新对象或资源。 | -| [CreateRenderTargetView](CreateRenderTargetView.md) | 创建新对象或资源。 | -| [CreateDepthStencilView](CreateDepthStencilView.md) | 创建新对象或资源。 | -| [CreateShaderResourceView](CreateShaderResourceView.md) | 创建新对象或资源。 | -| [CreateUnorderedAccessView](CreateUnorderedAccessView.md) | 创建新对象或资源。 | -| [GetCapabilities](GetCapabilities.md) | 获取相关状态或对象。 | -| [GetDeviceInfo](GetDeviceInfo.md) | 获取相关状态或对象。 | -| [GetNativeDevice](GetNativeDevice.md) | 获取相关状态或对象。 | +- [Initialize](Initialize.md) - 初始化设备。 +- [Shutdown](Shutdown.md) - 关闭设备并释放设备级状态。 +- [CreateBuffer](CreateBuffer.md) +- [CreateTexture](CreateTexture.md) +- [CreateSwapChain](CreateSwapChain.md) +- [CreateCommandList](CreateCommandList.md) +- [CreateCommandQueue](CreateCommandQueue.md) +- [CreateShader](CreateShader.md) +- [CreatePipelineState](CreatePipelineState.md) +- [CreatePipelineLayout](CreatePipelineLayout.md) +- [CreateFence](CreateFence.md) +- [CreateSampler](CreateSampler.md) +- [CreateRenderPass](CreateRenderPass.md) +- [CreateFramebuffer](CreateFramebuffer.md) +- [CreateDescriptorPool](CreateDescriptorPool.md) +- [CreateDescriptorSet](CreateDescriptorSet.md) +- [CreateVertexBufferView](CreateVertexBufferView.md) +- [CreateIndexBufferView](CreateIndexBufferView.md) +- [CreateRenderTargetView](CreateRenderTargetView.md) +- [CreateDepthStencilView](CreateDepthStencilView.md) +- [CreateShaderResourceView](CreateShaderResourceView.md) +- [CreateUnorderedAccessView](CreateUnorderedAccessView.md) +- [GetCapabilities](GetCapabilities.md) +- [GetDeviceInfo](GetDeviceInfo.md) +- [GetNativeDevice](GetNativeDevice.md) + +## 相关指南 + +- [Devices, Queues, Command Lists, And Resource Creation](../../../_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md) ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIFactory](../RHIFactory/RHIFactory.md) +- [RHICommandQueue](../RHICommandQueue/RHICommandQueue.md) +- [RHICommandList](../RHICommandList/RHICommandList.md) +- [RHICapabilities](../RHICapabilities/RHICapabilities.md) +- [RHITypes](../RHITypes/RHITypes.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHIEnums/RHIEnums.md b/docs/api/XCEngine/RHI/RHIEnums/RHIEnums.md index 06e74f3a..1f73181c 100644 --- a/docs/api/XCEngine/RHI/RHIEnums/RHIEnums.md +++ b/docs/api/XCEngine/RHI/RHIEnums/RHIEnums.md @@ -2,72 +2,139 @@ **命名空间**: `XCEngine::RHI` -**类型**: `enum class` +**类型**: `header collection` **头文件**: `XCEngine/RHI/RHIEnums.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHIEnums` public API。 +**描述**: 提供 RHI 抽象层使用的公共枚举,用来描述 shader、资源、格式、队列、状态切换和后端类型等核心概念。 -## 概述 +## 角色概述 -`RHIEnums.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHIEnums.h` 是整个 `RHI` 抽象层的词汇表。它本身不做任何运行时工作,但几乎所有描述符和接口都会引用这里的枚举: -## 声明概览 +- [RHITypes](../RHITypes/RHITypes.md) 里大量 `uint32_t` 字段本质上都承载这些枚举值。 +- [RHIDevice](../RHIDevice/RHIDevice.md) 的创建描述、[RHICommandList](../RHICommandList/RHICommandList.md) 的状态设置、[RHIPipelineState](../RHIPipelineState/RHIPipelineState.md) 的管线描述都依赖这套词汇。 -| 声明 | 类型 | 说明 | -|------|------|------| -| `ShaderType` | `enum class` | 头文件中的公开声明。 | -| `ShaderLanguage` | `enum class` | 头文件中的公开声明。 | -| `CullMode` | `enum class` | 头文件中的公开声明。 | -| `FillMode` | `enum class` | 头文件中的公开声明。 | -| `FrontFace` | `enum class` | 头文件中的公开声明。 | -| `BlendOp` | `enum class` | 头文件中的公开声明。 | -| `BlendFactor` | `enum class` | 头文件中的公开声明。 | -| `ComparisonFunc` | `enum class` | 头文件中的公开声明。 | -| `StencilOp` | `enum class` | 头文件中的公开声明。 | -| `TextureType` | `enum class` | 头文件中的公开声明。 | -| `BufferType` | `enum class` | 头文件中的公开声明。 | -| `DescriptorType` | `enum class` | 头文件中的公开声明。 | -| `PipelineType` | `enum class` | 头文件中的公开声明。 | -| `CommandQueueType` | `enum class` | 头文件中的公开声明。 | -| `LoadAction` | `enum class` | 头文件中的公开声明。 | -| `StoreAction` | `enum class` | 头文件中的公开声明。 | -| `PresentFlags` | `enum class` | 头文件中的公开声明。 | -| `PrimitiveTopology` | `enum class` | 头文件中的公开声明。 | -| `PrimitiveTopologyType` | `enum class` | 头文件中的公开声明。 | -| `FilterMode` | `enum class` | 头文件中的公开声明。 | -| `TextureAddressMode` | `enum class` | 头文件中的公开声明。 | -| `BorderColor` | `enum class` | 头文件中的公开声明。 | -| `LogicOp` | `enum class` | 头文件中的公开声明。 | -| `ColorWriteMask` | `enum class` | 头文件中的公开声明。 | -| `ShaderVisibility` | `enum class` | 头文件中的公开声明。 | -| `RootParameterType` | `enum class` | 头文件中的公开声明。 | -| `DescriptorHeapType` | `enum class` | 头文件中的公开声明。 | -| `ResourceViewDimension` | `enum class` | 头文件中的公开声明。 | -| `ResourceViewType` | `enum class` | 头文件中的公开声明。 | -| `QueryType` | `enum class` | 头文件中的公开声明。 | -| `Format` | `enum class` | 头文件中的公开声明。 | -| `ResourceStates` | `enum class` | 头文件中的公开声明。 | -| `HeapType` | `enum class` | 头文件中的公开声明。 | -| `RHIType` | `enum class` | 头文件中的公开声明。 | +所以这页最重要的价值不是罗列每个值,而是说明这些枚举被分成了哪些语义组,以及使用时要注意什么。 -## 枚举值 +## 主要枚举分组 -| 枚举值 | 数值 | 描述 | -|--------|------|------| -| `Vertex` | - | 枚举项。 | -| `Fragment` | - | 枚举项。 | -| `Geometry` | - | 枚举项。 | -| `Compute` | - | 枚举项。 | -| `TessControl` | - | 枚举项。 | -| `TessEvaluation` | - | 枚举项。 | -| `Hull` | - | 枚举项。 | -| `Domain` | - | 枚举项。 | -| `Amplification` | - | 枚举项。 | -| `Mesh` | - | 枚举项。 | -| `Library` | - | 枚举项。 | +### shader 与编译 + +- `ShaderType` +- `ShaderLanguage` +- `ShaderVisibility` + +这些枚举定义 shader 阶段、源码语言和资源可见性。 + +### 光栅化与混合状态 + +- `CullMode` +- `FillMode` +- `FrontFace` +- `BlendOp` +- `BlendFactor` +- `ComparisonFunc` +- `StencilOp` +- `LogicOp` +- `ColorWriteMask` + +这组枚举主要被 [RHITypes](../RHITypes/RHITypes.md) 里的 `RasterizerDesc`、`BlendDesc`、`DepthStencilStateDesc` 使用。 + +### 资源与视图 + +- `TextureType` +- `BufferType` +- `DescriptorType` +- `DescriptorHeapType` +- `ResourceViewDimension` +- `ResourceViewType` +- `Format` +- `HeapType` + +这组是资源系统最常用的枚举集合。 + +### 命令提交与渲染流程 + +- `PipelineType` +- `CommandQueueType` +- `LoadAction` +- `StoreAction` +- `PresentFlags` +- `PrimitiveTopology` +- `PrimitiveTopologyType` +- `ResourceStates` +- `QueryType` + +这组更多服务于 command list、queue、render pass 和 swapchain。 + +### 采样与地址模式 + +- `FilterMode` +- `TextureAddressMode` +- `BorderColor` + +### pipeline layout / root parameter + +- `RootParameterType` + +### 后端选择 + +- `RHIType` + +这是 [RHIFactory](../RHIFactory/RHIFactory.md) 用来选择后端设备的枚举。 + +## 使用时最值得注意的几点 + +### 1. 很多地方需要手动 `static_cast` + +因为 [RHITypes](../RHITypes/RHITypes.md) 里很多字段是 `uint32_t`,常见写法会是: + +```cpp +desc.queueType = static_cast(CommandQueueType::Direct); +desc.format = static_cast(Format::R8G8B8A8_UNorm); +``` + +这意味着这些枚举虽然是强类型 `enum class`,但在描述符层最终经常会退化为整数存储。 + +### 2. `ColorWriteMask` 是当前少数带位运算帮助函数的枚举 + +头文件里只为 `ColorWriteMask` 提供了 `operator|`。这说明它被明确按 bitmask 使用,而其他很多“Flags”字样的枚举目前并没有同样的位运算封装。 + +### 3. `RHIType` 不等于“当前构建一定可用的后端集合” + +`RHIType` 里虽然定义了: + +- `D3D12` +- `OpenGL` +- `Vulkan` +- `Metal` + +但按当前 [RHIFactory](../RHIFactory/RHIFactory.md) 实现: + +- `OpenGL` 和 `Vulkan` 受编译宏控制 +- `Metal` 当前直接返回 `nullptr` + +所以它更像“抽象层目标后端集合”,而不是运行时保证。 + +### 4. 名称中性,不代表抽象完全无偏 + +这些枚举尽量使用跨 API 共通词汇,但它们仍然是在真实后端压力下收敛出来的公共子集,不代表已经完整覆盖所有底层 API 的全部特性语义。 + +## 推荐怎么使用这页 + +实际工程里,最合理的阅读方式是: + +1. 先知道某个接口或描述符需要哪类枚举。 +2. 再回到这页查具体可选值。 + +不要把这页当成孤立知识点记忆;它必须结合 [RHITypes](../RHITypes/RHITypes.md) 和具体创建接口一起看,才有意义。 ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHITypes](../RHITypes/RHITypes.md) +- [RHIFactory](../RHIFactory/RHIFactory.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHICommandList](../RHICommandList/RHICommandList.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHIFactory/RHIFactory.md b/docs/api/XCEngine/RHI/RHIFactory/RHIFactory.md index b5be6135..10784864 100644 --- a/docs/api/XCEngine/RHI/RHIFactory/RHIFactory.md +++ b/docs/api/XCEngine/RHI/RHIFactory/RHIFactory.md @@ -6,25 +6,81 @@ **头文件**: `XCEngine/RHI/RHIFactory.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHIFactory` public API。 +**描述**: 提供统一的 RHI 后端选择入口,根据枚举或字符串创建具体 `RHIDevice` 实现。 -## 概述 +## 角色概述 -`RHIFactory.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHIFactory` 是当前抽象层的引导入口。它的价值不在于复杂逻辑,而在于把“上层代码如何选中某个图形后端”这件事收敛到一个稳定入口里: -## 声明概览 +- 测试代码可以按参数切换 D3D12 / OpenGL / Vulkan。 +- 引擎启动流程不需要直接 `#include` 某个具体后端设备头。 +- 以后如果要接配置文件、命令行或编辑器选项,也可以继续沿用这个入口。 -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHIFactory` | `class` | 头文件中的公开声明。 | +这类工厂在商用引擎里很常见,因为“后端选择”通常是启动层问题,而不是渲染业务层问题。 + +## 当前创建语义 + +`RHIFactory` 只暴露两个静态重载: + +- `CreateRHIDevice(RHIType type)` +- `CreateRHIDevice(const std::string& typeName)` + +它们都会直接 `new` 出具体后端设备,并返回 `RHIDevice*`。当前没有智能指针包装,也没有注册表或插件发现机制。 + +## 后端可用性 + +按当前 `engine/src/RHI/RHIFactory.cpp` 的实现,真实行为是: + +- `RHIType::D3D12` 始终返回 `new D3D12Device()`。 +- `RHIType::OpenGL` 只有在定义 `XCENGINE_SUPPORT_OPENGL` 时才会返回 `new OpenGLDevice()`。 +- `RHIType::Vulkan` 只有在定义 `XCENGINE_SUPPORT_VULKAN` 时才会返回 `new VulkanDevice()`。 +- `RHIType::Metal` 当前直接返回 `nullptr`。 + +这和很多商业引擎的“平台编译开关决定后端可用集合”是一致的,但当前实现还没有提供更友好的 fallback 策略。 + +## 字符串重载支持的名称 + +字符串重载当前支持的别名是源码硬编码的: + +- `D3D12`, `d3d12` +- `OpenGL`, `opengl`, `GL` +- `Vulkan`, `vulkan`, `VK`, `vk` + +如果名字不匹配,或者对应后端没有编译进当前构建,工厂会返回 `nullptr`。 + +## 所有权约定 + +`CreateRHIDevice()` 返回的是裸指针。按当前测试和调用习惯,调用方负责: + +1. 判断返回值是否为空。 +2. 调用 `Initialize()` 完成设备初始化。 +3. 使用完毕后先 `Shutdown()`。 +4. 最后 `delete`。 + +这一点必须显式记住,因为它和 `Core` 模块里常见的 `Ref` / `UniqueRef` 使用习惯不同。 + +## 当前设计边界 + +`RHIFactory` 当前是一个非常薄的入口,因此它没有提供下面这些商业引擎常见增强能力: + +- 没有“选择首选后端,否则回退到次选后端”的策略接口。 +- 没有适配器探测或按能力自动挑选设备。 +- 没有插件式后端注册。 +- 没有返回错误原因,只有 `nullptr`。 + +这不是缺陷掩盖,而是当前实现范围确实比较收敛。它的职责只是“根据已知后端名创建一个设备对象”。 ## 公共方法 -| 方法 | 描述 | -|------|------| -| [CreateRHIDevice](CreateRHIDevice.md) | 创建新对象或资源。 | +- [CreateRHIDevice](CreateRHIDevice.md) - 根据 `RHIType` 或后端名称创建抽象设备实例。 + +## 相关指南 + +- [Devices, Queues, Command Lists, And Resource Creation](../../../_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md) ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHIEnums](../RHIEnums/RHIEnums.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHIFence/RHIFence.md b/docs/api/XCEngine/RHI/RHIFence/RHIFence.md index 5c3e1411..f1dca38c 100644 --- a/docs/api/XCEngine/RHI/RHIFence/RHIFence.md +++ b/docs/api/XCEngine/RHI/RHIFence/RHIFence.md @@ -6,30 +6,111 @@ **头文件**: `XCEngine/RHI/RHIFence.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHIFence` public API。 +**描述**: GPU 同步原语接口,用于 signal、wait 和 completed value 查询,是命令队列同步和 frame pacing 的基础构件。 -## 概述 +## 角色概述 -`RHIFence.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHIFence` 是当前 `RHI` 抽象层里最基础的同步对象。它通常和 [RHICommandQueue](../RHICommandQueue/RHICommandQueue.md) 配合使用,用来表达: -## 声明概览 +- 某个 GPU 提交点是否已经完成 +- CPU 是否需要等待某个值 +- 当前完成值推进到了哪里 -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHIFence` | `class` | 头文件中的公开声明。 | +如果拿商用引擎常见心智模型来理解,它更接近 timeline-style fence / completion fence,而不是图形 API 中所有同步原语的统一抽象。 -## 公共方法 +## 当前接口 -| 方法 | 描述 | -|------|------| -| [~RHIFence()](Destructor.md) | 销毁对象并释放相关资源。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | -| [Signal](Signal.md) | 公开方法,详见头文件声明。 | -| [Wait](Wait.md) | 公开方法,详见头文件声明。 | -| [GetCompletedValue](GetCompletedValue.md) | 获取相关状态或对象。 | -| [GetNativeHandle](GetNativeHandle.md) | 获取相关状态或对象。 | +- [Signal](Signal.md) +- [Wait](Wait.md) +- [GetCompletedValue](GetCompletedValue.md) +- [GetNativeHandle](GetNativeHandle.md) +- [Shutdown](Shutdown.md) + +## 一个必须写清楚的细节:无参 `Signal()` 并不完全统一 + +`RHIFence` 同时提供: + +- `Signal()` +- `Signal(uint64_t value)` + +但当前无参重载在不同后端上的实现并不完全一致: + +- D3D12 当前实现等价于 `Signal(1)` +- OpenGL 当前实现也等价于 `Signal(1)` +- Vulkan 当前头文件实现是 `++m_value` + +这意味着: + +- 无参 `Signal()` 不是跨后端严格统一的 timeline 递增语义 +- 如果你需要可移植、可推断的同步值行为,应该优先使用显式值重载 `Signal(value)` + +这是一个非常值得文档明确指出的实现事实。 + +## `Wait()` 和 completed value 语义 + +当前测试已经覆盖: + +- signal 到某个值后 wait +- completed value 递增到更大值 +- wait 一个小于已完成值的目标 +- 多次 signal / wait 组合 + +从这些测试和当前实现看,更合理的理解是: + +- `Wait(value)` 表示“至少等到这个值” +- `GetCompletedValue()` 返回当前后端已完成的最大同步值 + +## 和 `RHICommandQueue` 的关系 + +有两条常见用法: + +### fence 自己 signal / wait + +测试里直接调用: + +- `fence->Signal(value)` +- `fence->Wait(value)` + +### 由 queue 推进 fence + +队列也有: + +- `queue->Signal(fence, value)` +- `queue->Wait(fence, value)` + +这更接近真实 GPU 提交流程中的使用方式。 + +## 当前设计边界 + +`RHIFence` 当前没有提供: + +- 多对象 join / fan-in 抽象 +- semaphore 风格资源依赖表达 +- timeline semaphore / binary semaphore 的统一细分类型 + +它的定位就是一层简单、可验证的 completion fence。 + +## native handle 语义 + +`GetNativeHandle()` 也是明显的后端逃逸口: + +- D3D12 下是原生 fence 对象 +- OpenGL 下是 `GLsync` +- Vulkan 当前 public 实现甚至可能返回 `nullptr` + +因此调用方不能把它当成稳定跨后端能力。 + +## 生命周期 + +`RHIFence` 由 [RHIDevice](../RHIDevice/RHIDevice.md) 创建,并以裸指针返回。使用完成后推荐: + +1. [Shutdown](Shutdown.md) +2. `delete` ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHICommandQueue](../RHICommandQueue/RHICommandQueue.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [Devices, Queues, Command Lists, And Resource Creation](../../../_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHIFramebuffer/RHIFramebuffer.md b/docs/api/XCEngine/RHI/RHIFramebuffer/RHIFramebuffer.md index 1dedde19..547e6d1e 100644 --- a/docs/api/XCEngine/RHI/RHIFramebuffer/RHIFramebuffer.md +++ b/docs/api/XCEngine/RHI/RHIFramebuffer/RHIFramebuffer.md @@ -6,31 +6,169 @@ **头文件**: `XCEngine/RHI/RHIFramebuffer.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHIFramebuffer` public API。 +**描述**: 抽象 framebuffer 对象,负责把 render pass 描述与一组具体 attachment view 绑定起来,形成一次可用于渲染输出的目标集合。 -## 概述 +## 角色概述 -`RHIFramebuffer.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHIFramebuffer` 不是纹理资源本体,也不是 render pass 本体。它更像是两者之间的一层“装配结果”: -## 声明概览 +- [RHIRenderPass](../RHIRenderPass/RHIRenderPass.md) 负责描述这次 pass 需要怎样的颜色/深度附件语义 +- [RHIResourceView](../RHIResourceView/RHIResourceView.md) 负责把具体纹理解释为 render target / depth stencil 视图 +- `RHIFramebuffer` 则把它们组合成一份真正可绑定到 GPU 的输出目标配置 -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHIFramebuffer` | `class` | 头文件中的公开声明。 | +这种拆分与商业引擎、现代图形 API 的思路一致。它的价值在于: + +- 同一个 render pass 可以反复搭配不同纹理视图 +- swap chain resize 或离屏目标切换时,只需要重建 framebuffer,而不必重写整套 pass 语义 +- 后端可以各自用最合适的 native 方式存储这组 attachment 绑定关系 + +## 输入语义 + +当前抽象接口上的 `Initialize()` 需要这些核心输入: + +- `renderPass` +- `width` +- `height` +- `colorAttachmentCount` +- `colorAttachments` +- `depthStencilAttachment` + +这几个参数共同表达的是: + +- 这份 framebuffer 应当匹配哪种 pass 附件布局 +- 它的目标尺寸是多少 +- 它绑定了哪些颜色视图 +- 是否还绑定了深度/模板视图 + +## 当前后端差异 + +### D3D12 + +当前 D3D12 实现并不会创建真正的 native framebuffer 对象。 + +它做的事情非常轻量: + +- 保存 `D3D12RenderPass*` +- 保存宽高 +- 从每个 `RHIResourceView` 中提取 CPU descriptor handle +- 把颜色 RTV handle 和深度 DSV handle 缓存起来 + +有几个后果非常重要: + +- [GetNativeHandle](GetNativeHandle.md) 当前返回 `nullptr` +- [IsValid](IsValid.md) 的判断条件只是 `m_renderPass != nullptr` +- 当前实现不会主动校验 attachment 数量、尺寸、格式是否与 render pass 严格匹配 +- 即使宽高是 `0`,对象也可能创建成功 + +换句话说,D3D12 路径里的 `RHIFramebuffer` 更像“供 command list 使用的一组 RTV/DSV 句柄快照”,而不是一个强校验、强约束的独立 native 对象。 + +### OpenGL + +OpenGL 路径会创建真正的 FBO,并把 resource view 中记录的附件信息挂到 FBO 上,然后调用 `glCheckFramebufferStatus()` 做完整性检查。 + +这条路径的特点是: + +- [GetNativeHandle](GetNativeHandle.md) 返回的是 OpenGL framebuffer 对象名 +- [IsValid](IsValid.md) 反映的是 FBO 是否已成功创建 +- 会根据 resource view 的附件目标、mip、layer 去做实际挂接 +- 当前实现最多处理前 16 个颜色附件 + +还需要特别注意一个实现事实: + +当前 `OpenGLFramebuffer::Initialize(RHIRenderPass*, ...)` 里,`renderPass` 参数实际上没有被用来做匹配校验。也就是说,OpenGL 的“有效性”更多来自 FBO 自身的 GL 完整性检查,而不是来自 render pass 与 framebuffer 的抽象层一致性校验。 + +### Vulkan + +Vulkan 是当前校验最严格的一条路径。 + +在真正创建 `VkFramebuffer` 前,当前实现会检查: + +- `VkDevice` 是否有效 +- `renderPass` 是否非空且 `VkRenderPass` 有效 +- `width` / `height` 是否大于 0 +- `colorAttachmentCount > 0` 时 `colorAttachments` 不能为 `nullptr` +- `colorAttachmentCount` 必须与 render pass 的颜色附件数量一致 +- 深度附件的有无必须与 render pass 是否声明 depth/stencil 一致 +- 每个传入的 `VulkanResourceView` 都必须持有有效 `VkImageView` + +只有全部满足时才会创建 `VkFramebuffer`。 + +因此当前最保守、最可移植的工程习惯是:按 Vulkan 的严格要求去构造 framebuffer,而不要依赖 D3D12 / OpenGL 某些较宽松的容忍行为。 + +## 测试体现出的真实语义 + +`tests/RHI/unit/test_framebuffer.cpp` 目前覆盖了这些场景: + +- 单颜色附件创建 +- 宽高查询 +- `IsValid()` 基本语义 +- 显式 `Shutdown()` +- 颜色 + 深度模板附件 +- 多颜色附件 +- 非法尺寸 +- 颜色附件指针为 `nullptr` + +测试里一个很关键的信号是:对于非法尺寸和空颜色视图,测试并没有要求“一定创建失败”,而是采用“如果创建成功则检查其返回状态”的写法。 + +这恰恰说明当前抽象层对非法输入没有统一拒绝语义,后端差异必须在文档里写明,而不能假装它已经完全抹平。 + +## 生命周期与所有权 + +`RHIFramebuffer` 通常通过 [RHIDevice::CreateFramebuffer](../RHIDevice/CreateFramebuffer.md) 创建,并以裸指针返回。 + +它只拥有自己内部的 native / backend 状态,不拥有: + +- `RHIRenderPass` +- `RHIResourceView` +- 底层 `RHITexture` + +销毁 framebuffer 不等于销毁附件纹理或其视图。当前最稳妥的释放方式仍然是: + +1. [Shutdown](Shutdown.md) +2. `delete` + +## 线程语义 + +当前接口没有声明线程安全保证。从源码和图形 API 约束出发,更安全的理解是: + +- 创建、销毁和绑定相关操作应放在渲染线程或 RHI 线程 +- 不要跨线程同时修改同一个 framebuffer +- 不要假设 resize、swap chain 重建、attachment 替换与旧 framebuffer 并发安全 + +## 设计理解 + +把 framebuffer 作为独立对象,而不是把 attachment 直接塞进 command list 调用里,是现代渲染架构里很常见的一种收敛方式。 + +它的好处在于: + +- 附件绑定关系可以被缓存和复用 +- render pass 语义与具体图像资源可以分离 +- resize、离屏渲染、GBuffer、多目标输出这类场景更容易组织 + +如果从 Unity 风格去理解,它更接近“引擎内部组织 render target set 的对象”,而不是用户层直接面对的某个高层渲染资产。 + +## 当前实现限制 + +- 抽象接口没有提供“创建后反查 attachment 列表”的通用 API,调用方需要自己记住输入 +- D3D12 路径没有真正的 native framebuffer,对 [GetNativeHandle](GetNativeHandle.md) 不能做可移植假设 +- OpenGL 路径的 `renderPass` 当前主要起抽象层占位作用,不承担严格匹配校验 +- Vulkan 路径最严格,意味着上层若想写出稳定的跨后端代码,最好按 Vulkan 约束准备 attachment ## 公共方法 -| 方法 | 描述 | -|------|------| -| [~RHIFramebuffer()](Destructor.md) | 销毁对象并释放相关资源。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | -| [Initialize](Initialize.md) | 初始化内部状态。 | -| [GetNativeHandle](GetNativeHandle.md) | 获取相关状态或对象。 | -| [GetWidth](GetWidth.md) | 获取相关状态或对象。 | -| [GetHeight](GetHeight.md) | 获取相关状态或对象。 | -| [IsValid](IsValid.md) | 查询当前状态。 | +- [Initialize](Initialize.md) +- [Shutdown](Shutdown.md) +- [GetNativeHandle](GetNativeHandle.md) +- [GetWidth](GetWidth.md) +- [GetHeight](GetHeight.md) +- [IsValid](IsValid.md) ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIRenderPass](../RHIRenderPass/RHIRenderPass.md) +- [RHIResourceView](../RHIResourceView/RHIResourceView.md) +- [RHITexture](../RHITexture/RHITexture.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHICommandList](../RHICommandList/RHICommandList.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHIPipelineLayout/RHIPipelineLayout.md b/docs/api/XCEngine/RHI/RHIPipelineLayout/RHIPipelineLayout.md index cdcf5634..bfacb063 100644 --- a/docs/api/XCEngine/RHI/RHIPipelineLayout/RHIPipelineLayout.md +++ b/docs/api/XCEngine/RHI/RHIPipelineLayout/RHIPipelineLayout.md @@ -6,28 +6,193 @@ **头文件**: `XCEngine/RHI/RHIPipelineLayout.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHIPipelineLayout` public API。 +**描述**: 资源绑定布局抽象,负责描述一个 pipeline 预期会使用多少常量缓冲、纹理、采样器和 UAV,以及这些绑定在后端中应如何组织。 -## 概述 +## 角色概述 -`RHIPipelineLayout.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHIPipelineLayout` 对应的是“渲染或计算管线在资源绑定层面长什么样”。 -## 声明概览 +这类对象在现代图形 API 里都很关键,只是名字不同: -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHIPipelineLayout` | `class` | 头文件中的公开声明。 | +- 在 D3D12 里更接近 root signature 及其参数布局 +- 在 Vulkan 里更接近一组 descriptor set layout 加 pipeline layout +- 在 OpenGL 里则更像一份绑定点分配方案 + +如果从商业级游戏引擎的角度理解,它更像 Unity SRP / Unreal RHI 内部会维护的“资源绑定契约”,而不是面向 gameplay 层的材质接口。把这层单独抽出来的好处是: + +- pipeline state 可以明确声明自己依赖哪些资源类别 +- descriptor set / resource view 的更新路径有稳定的布局依据 +- 后端可以把同一份高层描述翻译成各自的 native 绑定模型 + +## 两种建模方式 + +当前 `RHIPipelineLayoutDesc` 支持两种输入方式: + +### 1. 扁平计数 + +直接填写: + +- `constantBufferCount` +- `textureCount` +- `samplerCount` +- `uavCount` + +这种方式简单直接,适合早期 bring-up、轻量测试和不关心 set slot 的场景。 + +### 2. 显式 set layout + +通过: + +- `setLayouts` +- `setLayoutCount` +- `DescriptorSetLayoutBinding` + +显式声明每个 set 里有哪些 binding、类型是什么、数量多少、可见阶段是什么。 + +这条路径更接近现代引擎里“先设计绑定布局,再做资源写入”的工作方式,也更适合多 set、多资源类别并存的真实渲染管线。 + +## 当前实现里的重要事实 + +这是这一页最需要写清楚的部分。 + +当你传入 `setLayouts` 时,当前三套后端实现都会: + +- 深拷贝 `DescriptorSetLayoutDesc` +- 深拷贝其中的 `DescriptorSetLayoutBinding` +- 重新统计 `constantBufferCount` / `textureCount` / `samplerCount` / `uavCount` + +也就是说,`setLayouts` 一旦被成功创建,后端不会继续依赖调用方原始数组的生命周期。`tests/RHI/unit/test_pipeline_layout.cpp` 也专门验证了这一点:创建之后再修改原始 binding 数组,不会反向污染 layout 内部保存的数据。 + +这很符合商业引擎常见的设计取向:布局对象一旦建立,就应该成为稳定的、可复用的绑定契约,而不是继续悬挂在外部临时数组上。 + +## 后端差异 + +### D3D12 + +当前 D3D12 路径并不是通过抽象类上的 `Initialize()` 完成初始化,而是由 [RHIDevice](../RHIDevice/RHIDevice.md) 内部走 `D3D12PipelineLayout::InitializeWithDevice()` 创建。`D3D12PipelineLayout::Initialize(const RHIPipelineLayoutDesc&)` 当前直接返回 `false`。 + +创建成功后,D3D12 会把布局翻译为 root signature: + +- 常量缓冲通常拆成独立 root parameter +- SRV / UAV / Sampler 更偏向 descriptor table +- 如果使用显式 set layout,还会为每个 set 单独维护 root parameter 映射 + +当前实现还提供了大量 D3D12 专属查询能力,例如: + +- 是否存在某个常量缓冲 binding +- 某个 SRV table / UAV table / sampler table 对应哪个 root parameter index +- 在显式 set layout 模式下,某个 set slot 是否拥有指定资源类别 + +这些能力对于 D3D12 command list 的资源绑定翻译很重要,但它们不是 `RHIPipelineLayout` 抽象层的可移植契约,不能拿来当跨后端通用规则。 + +`GetNativeHandle()` 在 D3D12 下返回的是 `ID3D12RootSignature*`。 + +### OpenGL + +OpenGL 并不会创建一个独立的 native pipeline layout 对象。当前实现更像是在内存里建立一张“binding -> OpenGL binding point”的映射表。 + +有几个关键信息: + +- 如果使用显式 set layout,OpenGL 会按资源类别分别分配 binding point +- 同一类资源的 binding point 会跨 set 递增 +- 不同 set 中即使都用了 `binding = 0`,也会被分配到不同的最终 binding point + +例如测试已经验证过: + +- set0 的 CBV binding 0 会落到 binding point 0 +- set1 的 CBV binding 0 会落到 binding point 1 +- SRV / UAV / Sampler 也分别有自己独立的递增序列 + +这说明当前 OpenGL 路径并不是“简单照抄 binding 编号”,而是在用一层布局映射来解决跨 set 的重号问题。 + +如果没有显式 set layout,当前 OpenGL 查询函数会把 set 0 下的 binding 本身当作最终 binding point 使用。 + +`GetNativeHandle()` 在 OpenGL 下并不是 GL 原生对象句柄,而是在 layout 已初始化时返回 `this`,本质上只是“这个抽象对象当前有效”的后端信号。 + +### Vulkan + +Vulkan 路径的行为最接近现代显式图形 API 的常规理解: + +- 显式 set layout 会被翻译成多个 `VkDescriptorSetLayout` +- 然后再组合成一个 `VkPipelineLayout` + +如果调用方没有传 `setLayouts`,而是只给了四类扁平计数,当前 Vulkan 会主动合成“伪 set layout”: + +- 一组只包含 CBV 的 set +- 一组只包含 SRV 的 set +- 一组只包含 UAV 的 set +- 一组只包含 Sampler 的 set + +这是一种很务实的过渡设计。它允许上层先用较简单的计数模型驱动 Vulkan backend,而不必一上来就强制所有调用点显式构造 descriptor set layout 数组。 + +和 D3D12 一样,`VulkanPipelineLayout::Initialize(const RHIPipelineLayoutDesc&)` 当前并不是主创建入口;真实创建路径是设备内部调用带 `VkDevice` 参数的重载。 + +`GetNativeHandle()` 在 Vulkan 下返回的是 `VkPipelineLayout`。 + +## 测试体现出的真实语义 + +`tests/RHI/unit/test_pipeline_layout.cpp` 目前已经覆盖了这些要点: + +- 只给 CBV 计数也能创建 +- 只给 Texture / Sampler / UAV 计数也能创建 +- 零计数布局也允许创建 +- `Shutdown()` 可以重复调用 +- 显式 set layout 会被深拷贝 +- 显式 set layout 会反推四类资源总数 +- D3D12 能区分不同资源类别对应的 root parameter / descriptor table +- D3D12 和 OpenGL 都能正确分离不同 set slot 中的重叠 binding + +这意味着当前 `RHIPipelineLayout` 已经不是空壳概念,而是 command list 资源绑定逻辑真正依赖的布局对象。 + +## 设计理解 + +把 pipeline layout 单独抽出来,而不是把一切都塞进 pipeline state,本质上是在做“资源绑定契约”与“渲染状态契约”的解耦。 + +这样设计的收益很直接: + +- shader / pipeline state 只关心资源布局结果,不需要重新解释每个 descriptor set +- descriptor set 可以围绕 layout 独立分配和更新 +- 多后端翻译时,root signature、descriptor set layout、OpenGL binding point 分配都能共享同一个上层输入模型 + +这也是商业引擎里常见的方向。对熟悉 Unity 的读者,可以把它理解成比 `Material.SetTexture()` 这类 API 更底层、更加接近 SRP backend 资源绑定约束的那一层。 + +## 生命周期 + +当前主路径是通过 [RHIDevice::CreatePipelineLayout](../RHIDevice/CreatePipelineLayout.md) 创建,并以裸指针返回。按照现有测试和实现,最稳妥的释放顺序仍然是: + +1. [Shutdown](Shutdown.md) +2. `delete` + +`RHIPipelineLayout` 自己不负责销毁 descriptor set、descriptor pool 或 shader 资源;它只是资源绑定布局契约。 + +## 线程语义 + +public header 没有给出任何线程安全保证,当前实现里也看不到同步设施。从现有源码与测试使用方式看,更安全的工程规则是: + +- 在渲染线程或 RHI 线程上创建和销毁 +- 不要在多线程下同时读写同一个 layout 实例 +- 不要假设 backend 查询辅助函数是线程安全的 + +## 当前实现限制 + +- 抽象层只暴露了极简接口;很多真正有用的查询能力仍然停留在后端专属类里 +- `D3D12PipelineLayout` 和 `VulkanPipelineLayout` 的抽象 `Initialize()` 当前都不是实际创建入口 +- 当前布局模型只覆盖 CBV / SRV / UAV / Sampler 这类描述符资源,没有统一抽象 push constant、root constant、immutable sampler 等更高级能力 +- OpenGL 的 native handle 不是真正的 GL 对象;D3D12 / Vulkan 的 native handle 含义也完全不同,不能混用 ## 公共方法 -| 方法 | 描述 | -|------|------| -| [~RHIPipelineLayout()](Destructor.md) | 销毁对象并释放相关资源。 | -| [Initialize](Initialize.md) | 初始化内部状态。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | -| [GetNativeHandle](GetNativeHandle.md) | 获取相关状态或对象。 | +- [Initialize](Initialize.md) +- [Shutdown](Shutdown.md) +- [GetNativeHandle](GetNativeHandle.md) ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHIDescriptorPool](../RHIDescriptorPool/RHIDescriptorPool.md) +- [RHIDescriptorSet](../RHIDescriptorSet/RHIDescriptorSet.md) +- [RHIPipelineState](../RHIPipelineState/RHIPipelineState.md) +- [RHITypes](../RHITypes/RHITypes.md) +- [Devices, Queues, Command Lists, And Resource Creation](../../../_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHIPipelineState/RHIPipelineState.md b/docs/api/XCEngine/RHI/RHIPipelineState/RHIPipelineState.md index 1368ee54..bf334525 100644 --- a/docs/api/XCEngine/RHI/RHIPipelineState/RHIPipelineState.md +++ b/docs/api/XCEngine/RHI/RHIPipelineState/RHIPipelineState.md @@ -6,47 +6,131 @@ **头文件**: `XCEngine/RHI/RHIPipelineState.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHIPipelineState` public API。 +**描述**: 抽象图形/计算管线状态对象,负责聚合输入布局、光栅化、混合、深度模板、render target 格式以及可选计算 shader。 -## 概述 +## 角色概述 -`RHIPipelineState.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHIPipelineState` 对应的是当前抽象层里的“可绑定管线状态包”。它的接口明显带有“统一图形状态描述”的设计意图,而不是简单把某个后端的 native PSO 结构原样暴露出去。 -## 声明概览 +头文件注释里直接写了: -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHIPipelineState` | `class` | 头文件中的公开声明。 | +- `Unity SRP style` +- `Shader independent of PSO` + +这说明当前设计方向是希望用一套更统一的 pipeline 状态模型去支撑不同后端,而不是要求所有状态都只通过 shader 或 native API 自己的配置路径表达。 + +## 当前状态模型 + +`RHIPipelineState` 当前主要包含两类信息: + +### 图形状态 + +- [SetInputLayout](SetInputLayout.md) +- [SetRasterizerState](SetRasterizerState.md) +- [SetBlendState](SetBlendState.md) +- [SetDepthStencilState](SetDepthStencilState.md) +- [SetTopology](SetTopology.md) +- [SetRenderTargetFormats](SetRenderTargetFormats.md) +- [SetSampleCount](SetSampleCount.md) + +### 计算路径 + +- [SetComputeShader](SetComputeShader.md) + +也就是说,当前同一个抽象接口既能表达 graphics pipeline,也能表达 compute pipeline。 + +## 类型与有效性 + +这是这页最值得说明的地方。 + +### `GetType()` + +从现有测试看: + +- 默认创建出来的 pipeline state 类型是 `PipelineType::Graphics` +- 当设置了 compute shader 后,类型可以变成 `PipelineType::Compute` + +### `IsValid()` / `EnsureValid()` + +现有测试明确揭示了一个很重要的后端差异: + +- 在 D3D12 下,默认或信息不足的 pipeline state 往往不是立即有效的。 +- 在 OpenGL 路径下,默认 pipeline state 更容易被视为有效。 + +头文件注释甚至直接写出了当前统一语义: + +- `D3D12` 需要编译 +- `OpenGL` 总是有效 + +这意味着 `RHIPipelineState` 的“有效”不是完全抽象无差异的概念,而是和后端实现成熟度、native API 要求直接相关。 + +## 设计理解 + +从商用引擎经验看,这样的 pipeline state 抽象是合理的: + +- renderer 可以先在统一描述层拼好状态,再交给后端去编译或绑定 +- 输入布局、混合、深度模板和 render target 格式等关键状态有明确归属 +- 计算路径可以与图形路径复用一部分生命周期和绑定逻辑 + +但当前实现也有现实边界: + +- 还保留了 `RHICommandList::SetShader()` 这种并行路径,所以整个系统并不是“只有 PSO”这一种绑定范式 +- `GraphicsPipelineDesc` 与 `RHIPipelineState` 的关系更偏工程实现上的状态收敛,而不是已经完全封装成单一材质系统 +- 有效性判定明显依赖后端 + +## 测试体现出的真实使用方式 + +`tests/RHI/unit/test_pipeline_state.cpp` 和 `test_compute.cpp` 给出了当前比较可信的使用路径: + +- 可以先创建默认 `GraphicsPipelineDesc` 再逐步设置状态 +- 可以读回 `RasterizerDesc`、`BlendDesc`、`DepthStencilStateDesc`、`InputLayoutDesc` +- 可以为 graphics pipeline 直接在 `GraphicsPipelineDesc` 里提供 vertex / fragment shader +- 可以用 `SetComputeShader()` 走 compute 路径 +- 在部分后端下 `EnsureValid()` 会触发或推进有效性检查,但并不保证无条件成功 + +这说明当前 pipeline state 的职责更像“后端可消费的统一状态对象”,而不是文档层面随便说说的概念壳子。 + +## 生命周期 + +当前接口提供: + +- [Bind](Bind.md) +- [Unbind](Unbind.md) +- [Shutdown](Shutdown.md) +- [GetNativeHandle](GetNativeHandle.md) + +通常它由 [RHIDevice](../RHIDevice/RHIDevice.md) 创建,并以裸指针形式返回。使用完成后应显式 `Shutdown()` 再 `delete`。 ## 公共方法 -| 方法 | 描述 | -|------|------| -| [~RHIPipelineState()](Destructor.md) | 销毁对象并释放相关资源。 | -| [SetInputLayout](SetInputLayout.md) | 设置相关状态或配置。 | -| [SetRasterizerState](SetRasterizerState.md) | 设置相关状态或配置。 | -| [SetBlendState](SetBlendState.md) | 设置相关状态或配置。 | -| [SetDepthStencilState](SetDepthStencilState.md) | 设置相关状态或配置。 | -| [SetTopology](SetTopology.md) | 设置相关状态或配置。 | -| [SetRenderTargetFormats](SetRenderTargetFormats.md) | 设置相关状态或配置。 | -| [SetSampleCount](SetSampleCount.md) | 设置相关状态或配置。 | -| [SetComputeShader](SetComputeShader.md) | 设置相关状态或配置。 | -| [GetRasterizerState](GetRasterizerState.md) | 获取相关状态或对象。 | -| [GetBlendState](GetBlendState.md) | 获取相关状态或对象。 | -| [GetDepthStencilState](GetDepthStencilState.md) | 获取相关状态或对象。 | -| [GetInputLayout](GetInputLayout.md) | 获取相关状态或对象。 | -| [GetHash](GetHash.md) | 获取相关状态或对象。 | -| [GetComputeShader](GetComputeShader.md) | 获取相关状态或对象。 | -| [HasComputeShader](HasComputeShader.md) | 判断是否具备指定状态或能力。 | -| [IsValid](IsValid.md) | 查询当前状态。 | -| [EnsureValid](EnsureValid.md) | 公开方法,详见头文件声明。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | -| [Bind](Bind.md) | 公开方法,详见头文件声明。 | -| [Unbind](Unbind.md) | 公开方法,详见头文件声明。 | -| [GetNativeHandle](GetNativeHandle.md) | 获取相关状态或对象。 | -| [GetType](GetType.md) | 获取相关状态或对象。 | +- [SetInputLayout](SetInputLayout.md) +- [SetRasterizerState](SetRasterizerState.md) +- [SetBlendState](SetBlendState.md) +- [SetDepthStencilState](SetDepthStencilState.md) +- [SetTopology](SetTopology.md) +- [SetRenderTargetFormats](SetRenderTargetFormats.md) +- [SetSampleCount](SetSampleCount.md) +- [SetComputeShader](SetComputeShader.md) +- [GetRasterizerState](GetRasterizerState.md) +- [GetBlendState](GetBlendState.md) +- [GetDepthStencilState](GetDepthStencilState.md) +- [GetInputLayout](GetInputLayout.md) +- [GetHash](GetHash.md) +- [GetComputeShader](GetComputeShader.md) +- [HasComputeShader](HasComputeShader.md) +- [IsValid](IsValid.md) +- [EnsureValid](EnsureValid.md) +- [Shutdown](Shutdown.md) +- [Bind](Bind.md) +- [Unbind](Unbind.md) +- [GetNativeHandle](GetNativeHandle.md) +- [GetType](GetType.md) ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHITypes](../RHITypes/RHITypes.md) +- [RHICommandList](../RHICommandList/RHICommandList.md) +- [RHIPipelineLayout](../RHIPipelineLayout/RHIPipelineLayout.md) +- [RHIShader](../RHIShader/RHIShader.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHIRenderPass/RHIRenderPass.md b/docs/api/XCEngine/RHI/RHIRenderPass/RHIRenderPass.md index 262725bb..faa0415e 100644 --- a/docs/api/XCEngine/RHI/RHIRenderPass/RHIRenderPass.md +++ b/docs/api/XCEngine/RHI/RHIRenderPass/RHIRenderPass.md @@ -6,32 +6,102 @@ **头文件**: `XCEngine/RHI/RHIRenderPass.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHIRenderPass` public API。 +**描述**: 抽象 render pass 对象,负责描述颜色附件和深度模板附件的 load/store 行为与 clear 值。 -## 概述 +## 角色概述 -`RHIRenderPass.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHIRenderPass` 是当前 `RHI` 抽象层里对“本次渲染通道要操作哪些附件、以什么方式进入和离开”的统一表达。 -## 声明概览 +它由两个部分组成: -| 声明 | 类型 | 说明 | -|------|------|------| -| `AttachmentDesc` | `struct` | 头文件中的公开声明。 | -| `RHIRenderPass` | `class` | 头文件中的公开声明。 | +- `AttachmentDesc` +- `RHIRenderPass` + +其中 `AttachmentDesc` 是最关键的输入描述。 + +## `AttachmentDesc` 表达什么 + +`AttachmentDesc` 当前包含: + +- `format` +- `loadOp` +- `storeOp` +- `stencilLoadOp` +- `stencilStoreOp` +- `clearValue` + +这说明当前 render pass 抽象主要关注的是附件格式、load/store 语义和 clear 参数,而不是更复杂的 subpass、dependency 或 transient attachment 模型。 + +对当前引擎阶段来说,这是一种合理且务实的收敛方式: + +- 足够支撑基本颜色/深度通道 +- 能和 command list 的 `BeginRenderPass()` 对接 +- 不需要立刻把 Vulkan / D3D12 的全部 render pass 复杂度暴露出来 + +## 当前创建与使用路径 + +虽然 `RHIRenderPass` 自己暴露了 [Initialize](Initialize.md),但在真实使用里,上层更常见的入口是: + +- [RHIDevice::CreateRenderPass](../RHIDevice/CreateRenderPass.md) + +现有测试和 command list 用例基本都遵循这个路径: + +1. 构造一个或多个 `AttachmentDesc` +2. 通过 `RHIDevice` 创建 `RHIRenderPass` +3. 创建配套 `RHIFramebuffer` +4. 在 [RHICommandList](../RHICommandList/RHICommandList.md) 上 `BeginRenderPass()` / `EndRenderPass()` + +## 当前能力边界 + +按头文件和测试来看,当前 `RHIRenderPass` 能稳定表达的是: + +- 纯颜色附件 pass +- 颜色 + 深度模板 pass +- 多个颜色附件 +- 可选深度模板附件 + +但它没有直接表达: + +- subpass +- attachment dependency +- transient attachment / input attachment +- 更复杂的 render graph 级资源声明 + +这说明它更像当前阶段的“基础渲染通道描述”,而不是最终的现代 render graph 节点模型。 + +## 测试体现出的现实语义 + +`tests/RHI/unit/test_render_pass.cpp` 给出了几个重要信号: + +- `GetColorAttachmentCount()` 会反映创建时的颜色附件数量 +- `GetColorAttachments()` 可以拿回附件描述 +- 深度模板附件可以为 `nullptr` +- `Shutdown()` 可以安全调用两次 +- `GetNativeHandle()` 当前测试接受 `nullptr` + +最后一点很重要:不要假设 `RHIRenderPass` 一定会提供可直接操作的 native handle。至少在当前抽象层里,这个返回值并不是用户级主路径依赖点。 + +## 生命周期 + +`RHIRenderPass` 通常由 [RHIDevice](../RHIDevice/RHIDevice.md) 创建,并和 [RHIFramebuffer](../RHIFramebuffer/RHIFramebuffer.md) 配套使用。使用完成后应显式: + +1. [Shutdown](Shutdown.md) +2. `delete` ## 公共方法 -| 方法 | 描述 | -|------|------| -| [~RHIRenderPass()](Destructor.md) | 销毁对象并释放相关资源。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | -| [Initialize](Initialize.md) | 初始化内部状态。 | -| [GetColorAttachmentCount](GetColorAttachmentCount.md) | 获取相关状态或对象。 | -| [GetColorAttachments](GetColorAttachments.md) | 获取相关状态或对象。 | -| [GetDepthStencilAttachment](GetDepthStencilAttachment.md) | 获取相关状态或对象。 | -| [GetNativeHandle](GetNativeHandle.md) | 获取相关状态或对象。 | +- [Initialize](Initialize.md) +- [Shutdown](Shutdown.md) +- [GetColorAttachmentCount](GetColorAttachmentCount.md) +- [GetColorAttachments](GetColorAttachments.md) +- [GetDepthStencilAttachment](GetDepthStencilAttachment.md) +- [GetNativeHandle](GetNativeHandle.md) ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHICommandList](../RHICommandList/RHICommandList.md) +- [RHIFramebuffer](../RHIFramebuffer/RHIFramebuffer.md) +- [RHITypes](../RHITypes/RHITypes.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHIResource/RHIResource.md b/docs/api/XCEngine/RHI/RHIResource/RHIResource.md index 22dff5f6..c1a72fc8 100644 --- a/docs/api/XCEngine/RHI/RHIResource/RHIResource.md +++ b/docs/api/XCEngine/RHI/RHIResource/RHIResource.md @@ -6,28 +6,78 @@ **头文件**: `XCEngine/RHI/RHIResource.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHIResource` public API。 +**描述**: 资源基类抽象,提供 native handle 暴露口和统一的资源状态读写接口。 -## 概述 +## 角色概述 -`RHIResource.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHIResource` 是当前抽象层里最小的一层资源基类。它只关心两件事: -## 声明概览 +- 这个资源背后的 native object 是什么 +- 当前抽象层认为它处于什么 `ResourceStates` -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHIResource` | `class` | 头文件中的公开声明。 | +这意味着它不是一个可直接独立使用的“完整资源对象”,而是为更具体的资源类型打底: -## 公共方法 +- [RHIBuffer](../RHIBuffer/RHIBuffer.md) +- [RHITexture](../RHITexture/RHITexture.md) -| 方法 | 描述 | -|------|------| -| [~RHIResource()](Destructor.md) | 销毁对象并释放相关资源。 | -| [GetNativeHandle](GetNativeHandle.md) | 获取相关状态或对象。 | -| [GetState](GetState.md) | 获取相关状态或对象。 | -| [SetState](SetState.md) | 设置相关状态或配置。 | +## 为什么只有这三个接口 + +当前 `RHIResource` 只暴露: + +- [GetNativeHandle](GetNativeHandle.md) +- [GetState](GetState.md) +- [SetState](SetState.md) + +这种最小化接口设计是合理的,因为不同资源类型真正关心的元数据差异很大: + +- buffer 关心大小、stride、buffer type +- texture 关心宽高深、mip、format、texture type + +把这些都塞进基类反而会让抽象变脆。 + +## `ResourceStates` 的意义 + +`GetState()` / `SetState()` 使用的是 [RHIEnums](../RHIEnums/RHIEnums.md) 中的 `ResourceStates`。 + +这套状态值的意义不是“完全等同某个后端原生状态枚举”,而是当前引擎抽象层用于追踪资源读写阶段和 barrier 目标的统一语义。比如: + +- `Common` +- `VertexAndConstantBuffer` +- `RenderTarget` +- `PixelShaderResource` +- `CopyDst` + +在实际使用里,这些状态通常会和 [RHICommandList](../RHICommandList/RHICommandList.md) 的 barrier、copy、render target 绑定路径一起使用。 + +## 需要注意的现实边界 + +### 1. 资源状态是抽象层跟踪值,不等于所有后端都原生保存同样的状态对象 + +例如 Vulkan 路径会把它用于 layout / access / stage 的转换推导;OpenGL 路径则更多把它作为引擎侧状态记录。 + +### 2. 很多上层调用并不直接拿 `RHIResource*` + +虽然 `RHIResource` 是 buffer / texture 的基类,但当前很多绑定和 barrier 路径其实更常拿的是 [RHIResourceView](../RHIResourceView/RHIResourceView.md)。这说明当前抽象层在“资源本体”和“资源视图”之间更偏视图驱动。 + +### 3. 基类没有 `Shutdown()` + +`RHIResource` 没有定义统一的生命周期接口;关闭和释放由具体资源类型自己负责。这也是为什么不能把基类当成完整资源对象来用。 + +## 怎么理解 `GetNativeHandle()` + +`GetNativeHandle()` 明确是一个后端逃逸口: + +- D3D12 下可能是 `ID3D12Resource*` +- OpenGL 下可能是纹理 / buffer 的 GL object 相关句柄 +- Vulkan 下可能是 `VkImage` / `VkBuffer` 一类 native handle + +调用方不能把它当成跨后端稳定接口,只能在明确知道当前后端类型时使用。 ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIBuffer](../RHIBuffer/RHIBuffer.md) +- [RHITexture](../RHITexture/RHITexture.md) +- [RHIResourceView](../RHIResourceView/RHIResourceView.md) +- [RHICommandList](../RHICommandList/RHICommandList.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHIResourceView/RHIResourceView.md b/docs/api/XCEngine/RHI/RHIResourceView/RHIResourceView.md index fdd169d8..b9dca2ab 100644 --- a/docs/api/XCEngine/RHI/RHIResourceView/RHIResourceView.md +++ b/docs/api/XCEngine/RHI/RHIResourceView/RHIResourceView.md @@ -2,42 +2,137 @@ **命名空间**: `XCEngine::RHI` -**类型**: `class (abstract)` +**类型**: `class hierarchy` **头文件**: `XCEngine/RHI/RHIResourceView.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHIResourceView` public API。 +**描述**: 资源视图抽象层,用统一接口表达 render target、depth stencil、shader resource、unordered access 以及 buffer 视图等绑定对象。 -## 概述 +## 角色概述 -`RHIResourceView.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHIResourceView` 代表“如何把一个资源解释成某种可绑定视图”。这和 [RHIResource](../RHIResource/RHIResource.md) / [RHITexture](../RHITexture/RHITexture.md) / [RHIBuffer](../RHIBuffer/RHIBuffer.md) 的资源本体是两回事。 -## 声明概览 +这种拆分是商业引擎和现代图形 API 都非常常见的设计: -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHIResourceView` | `class` | 头文件中的公开声明。 | -| `RHIVertexBufferView` | `class` | 继承自 `RHIResourceView` 的公开声明。 | -| `RHIIndexBufferView` | `class` | 继承自 `RHIResourceView` 的公开声明。 | -| `RHIRenderTargetView` | `class` | 继承自 `RHIResourceView` 的公开声明。 | -| `RHIDepthStencilView` | `class` | 继承自 `RHIResourceView` 的公开声明。 | -| `RHIShaderResourceView` | `class` | 继承自 `RHIResourceView` 的公开声明。 | -| `RHIUnorderedAccessView` | `class` | 继承自 `RHIResourceView` 的公开声明。 | -| `RHIConstantBufferView` | `class` | 继承自 `RHIResourceView` 的公开声明。 | +- 资源本体负责存储 +- 资源视图负责绑定语义 -## 公共方法 +例如同一张 texture 可能被解释为: -| 方法 | 描述 | -|------|------| -| [~RHIResourceView()](Destructor.md) | 销毁对象并释放相关资源。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | -| [GetNativeHandle](GetNativeHandle.md) | 获取相关状态或对象。 | -| [IsValid](IsValid.md) | 查询当前状态。 | -| [GetViewType](GetViewType.md) | 获取相关状态或对象。 | -| [GetDimension](GetDimension.md) | 获取相关状态或对象。 | -| [GetFormat](GetFormat.md) | 获取相关状态或对象。 | +- render target +- shader resource +- depth stencil +- unordered access + +## 当前层级 + +头文件里定义了以下层级: + +- `RHIResourceView` +- `RHIVertexBufferView` +- `RHIIndexBufferView` +- `RHIRenderTargetView` +- `RHIDepthStencilView` +- `RHIShaderResourceView` +- `RHIUnorderedAccessView` +- `RHIConstantBufferView` + +其中基础公共接口主要集中在 `RHIResourceView` 本体: + +- [Shutdown](Shutdown.md) +- [GetNativeHandle](GetNativeHandle.md) +- [IsValid](IsValid.md) +- [GetViewType](GetViewType.md) +- [GetDimension](GetDimension.md) +- [GetFormat](GetFormat.md) + +## 一个需要特别说明的现实差异 + +虽然头文件定义了更细分的子类,但当前 [RHIDevice](../RHIDevice/RHIDevice.md) 的公共工厂接口大多返回的是 `RHIResourceView*`,例如: + +- `CreateVertexBufferView()` +- `CreateIndexBufferView()` +- `CreateRenderTargetView()` +- `CreateDepthStencilView()` +- `CreateShaderResourceView()` +- `CreateUnorderedAccessView()` + +这说明当前抽象层在“类型系统上有细分层级”和“日常工厂接口以基类返回”为两套并存设计。对调用方来说,最稳妥的主路径仍然是通过: + +- `GetViewType()` +- `GetDimension()` +- `GetFormat()` + +来判断视图语义,而不是假定自己总能拿到某个强类型子类指针。 + +## 当前已经真实覆盖的视图类型 + +`tests/RHI/unit/test_views.cpp` 已经覆盖了这些创建路径: + +- render target view +- depth stencil view +- shader resource view +- unordered access view +- vertex buffer view +- index buffer view + +还覆盖了: + +- array texture 的 SRV +- cube texture 的 SRV +- 多 mip 的 DSV + +这说明当前视图系统已经在真实处理二维、数组、立方体和 buffer 视图,不是单一的纹理壳子。 + +## `RHIConstantBufferView` 的当前状态 + +这是一个很值得写清楚的点。 + +虽然 `RHIResourceView.h` 里定义了 `RHIConstantBufferView`,但当前公开的 [RHIDevice](../RHIDevice/RHIDevice.md) 接口并没有 `CreateConstantBufferView()` 工厂函数。 + +也就是说,在当前 public RHI 主路径里: + +- `CBV` 类型概念存在 +- 但常量数据绑定更多是通过 [RHIDescriptorSet](../RHIDescriptorSet/RHIDescriptorSet.md) 的 `WriteConstant()` 路径完成 + +这类“类型已经存在,但公共创建入口尚未统一开放”的情况,正是演进中抽象层常见的过渡状态。 + +## 视图与命令列表的关系 + +当前 [RHICommandList](../RHICommandList/RHICommandList.md) 和 descriptor 路径都高度依赖 view: + +- vertex/index buffer 绑定使用 buffer view +- render target / depth clear 使用相应 view +- `TransitionBarrier()` 当前接收的也是 `RHIResourceView*` + +这说明在当前抽象层里,view 不只是绑定对象,也是部分资源状态与渲染操作的实际工作单位。 + +## native handle 的语义 + +`GetNativeHandle()` 是强后端相关的: + +- D3D12 可能对应 descriptor handle / view backing data +- OpenGL 可能对应 framebuffer、texture 或 buffer 相关对象 +- Vulkan / 其他后端也会有各自实现 + +因此不能把它当成跨后端稳定格式来使用。 + +## 生命周期 + +resource view 通常由 [RHIDevice](../RHIDevice/RHIDevice.md) 创建,并以裸指针返回。使用完成后推荐: + +1. [Shutdown](Shutdown.md) +2. `delete` + +它们和资源本体的所有权是分开的;关闭 view 不等于关闭 texture / buffer 本体。 ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIResource](../RHIResource/RHIResource.md) +- [RHIBuffer](../RHIBuffer/RHIBuffer.md) +- [RHITexture](../RHITexture/RHITexture.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHIDescriptorSet](../RHIDescriptorSet/RHIDescriptorSet.md) +- [RHICommandList](../RHICommandList/RHICommandList.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHISampler/RHISampler.md b/docs/api/XCEngine/RHI/RHISampler/RHISampler.md index 65651287..29279654 100644 --- a/docs/api/XCEngine/RHI/RHISampler/RHISampler.md +++ b/docs/api/XCEngine/RHI/RHISampler/RHISampler.md @@ -6,30 +6,161 @@ **头文件**: `XCEngine/RHI/RHISampler.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHISampler` public API。 +**描述**: 采样状态抽象,负责描述纹理采样时的过滤、寻址、LOD、比较采样和边框颜色等行为。 -## 概述 +## 角色概述 -`RHISampler.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHISampler` 的职责不是存储纹理数据,而是定义“如何读取纹理”。 -## 声明概览 +把 sampler 从 texture 中拆出来,是现代图形 API 和商业引擎里非常常见的设计: -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHISampler` | `class` | 头文件中的公开声明。 | +- 同一张纹理可以搭配不同 sampler 反复复用 +- 过滤模式、寻址模式、比较采样等状态不必重复绑定在每张纹理上 +- descriptor set / material 系统更容易缓存和共享采样状态 + +如果从 Unity 风格理解,它更接近底层图形后端中的 sampler state,而不是高层材质检查器里随手改一个纹理导入设置那么简单。 + +## `SamplerDesc` 表达什么 + +`RHITypes.h` 里的 `SamplerDesc` 当前包含这些核心字段: + +- `filter` +- `addressU` / `addressV` / `addressW` +- `mipLodBias` +- `maxAnisotropy` +- `comparisonFunc` +- `borderColorR/G/B/A` +- `minLod` / `maxLod` + +它本质上是在用一份统一描述去覆盖: + +- 过滤策略 +- UVW 方向寻址模式 +- LOD 控制 +- 阴影图等场景下的 comparison sampling +- 边框颜色 + +## 当前推荐使用路径 + +对上层来说,当前更可靠的主路径通常是: + +1. 通过 [RHIDevice::CreateSampler](../RHIDevice/CreateSampler.md) 创建 `RHISampler` +2. 通过 [RHIDescriptorSet](../RHIDescriptorSet/RHIDescriptorSet.md) 的 `UpdateSampler()` 写入描述符集合 +3. 在绘制或 dispatch 时由 descriptor set / pipeline 绑定链路消费 + +这也是更贴近商业引擎的方式。sampler 应该被看成“资源绑定系统的一部分”,而不是总是手工即时 bind 的状态对象。 + +## 后端差异 + +### D3D12 + +当前 D3D12 路径里的 `RHISampler` 更像 `D3D12_SAMPLER_DESC` 的一个轻量包装。 + +它的几个关键事实是: + +- 创建时只缓存 `D3D12_SAMPLER_DESC` +- 当前不会单独创建一个 native GPU sampler 对象 +- [GetNativeHandle](GetNativeHandle.md) 返回的是内部 `D3D12_SAMPLER_DESC` 地址 +- [GetID](GetID.md) 当前恒为 `0` +- [Bind](Bind.md) / [Unbind](Unbind.md) 当前是 no-op + +真正把这个 sampler 变成 GPU 可见描述符的步骤,当前发生在 `D3D12DescriptorSet::UpdateSampler()` 里:那里会把 `D3D12Sampler` 里缓存的 `D3D12_SAMPLER_DESC` 写入 sampler heap。 + +所以对 D3D12 来说,`RHISampler` 当前更像“用于后续描述符写入的配置对象”,而不是可直接 bind 的 runtime object。 + +### OpenGL + +OpenGL 路径会创建真实的 GL sampler 对象: + +- `glGenSamplers` +- `glSamplerParameteri` +- `glSamplerParameterf` +- `glBindSampler` + +因此: + +- [GetID](GetID.md) 返回的是真正的 OpenGL sampler name +- [Bind](Bind.md) / [Unbind](Unbind.md) 在 OpenGL 下有实际效果 +- [GetNativeHandle](GetNativeHandle.md) 本质上是 GL sampler id 的指针化表示 + +`tests/RHI/unit/test_sampler.cpp` 还专门验证了 OpenGL 对这些状态的映射: + +- Wrap / Mirror / Border +- 线性与各向异性过滤 +- 比较采样模式 +- `minLod` / `maxLod` + +也要注意一个现实细节:当前 `OpenGLDevice::CreateSampler()` 本身没有像 `CreateShader()` 那样主动调用 `MakeContextCurrent()`。这意味着创建 sampler 时更稳妥的前提仍然是调用方已经处在有效的 OpenGL 上下文中。 + +### Vulkan + +Vulkan 路径会创建真实的 `VkSampler`: + +- [GetNativeHandle](GetNativeHandle.md) 返回 `VkSampler` 的地址 +- [Bind](Bind.md) / [Unbind](Unbind.md) 当前是 no-op +- [GetID](GetID.md) 当前恒为 `0` + +这很符合 Vulkan 的实际工作方式:sampler 不是靠即时状态绑定消费,而是通过 descriptor set 写入并由 pipeline 使用。 + +## 可移植使用建议 + +对跨后端代码来说,下面这些规则最稳妥: + +- 不要把 [GetID](GetID.md) 当作通用标识符;它只有在 OpenGL 下才有明确可用意义 +- 不要假设 [Bind](Bind.md) / [Unbind](Unbind.md) 在所有后端都有效 +- 尽量通过 descriptor set 的 `UpdateSampler()` 路径去消费 sampler +- 把 [GetNativeHandle](GetNativeHandle.md) 视为后端逃逸口,而不是统一格式的句柄 + +## 测试体现出的真实语义 + +当前单测已经覆盖: + +- 基本创建 +- `Bind()` / `Unbind()` +- `GetID()` +- `GetNativeHandle()` +- OpenGL 下 sampler 参数是否按 `SamplerDesc` 正确落地 + +但这些测试没有宣称“所有后端都必须支持即时 bind 风格”,所以文档不能把 OpenGL 的表现误写成抽象层通用保证。 + +## 生命周期 + +`RHISampler` 通常由设备创建并以裸指针返回。当前最稳妥的释放方式仍然是: + +1. [Shutdown](Shutdown.md) +2. `delete` + +关闭 sampler 不会销毁纹理本体,也不会自动更新 descriptor set 里已经写入的资源绑定关系。 + +## 线程语义 + +当前 public API 没有提供线程安全保证。从实现和图形 API 约束来看,更安全的工程规则是: + +- 在渲染线程或 RHI 线程创建和销毁 sampler +- 不要并发调用同一个 sampler 的 bind / unbind / shutdown +- 对 OpenGL 路径,创建和即时绑定都应假设存在正确的当前上下文 + +## 当前实现限制 + +- D3D12 / Vulkan 下的 [Bind](Bind.md) 与 [Unbind](Unbind.md) 当前不构成可移植工作流 +- [GetID](GetID.md) 不是跨后端稳定语义 +- OpenGL 对部分更高级 filter 族并没有一一精确映射;当前主要覆盖普通、比较和各向异性路径 +- 抽象层还没有覆盖 immutable sampler、sampler reduction mode 等更高级能力 ## 公共方法 -| 方法 | 描述 | -|------|------| -| [~RHISampler()](Destructor.md) | 销毁对象并释放相关资源。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | -| [Bind](Bind.md) | 公开方法,详见头文件声明。 | -| [Unbind](Unbind.md) | 公开方法,详见头文件声明。 | -| [GetNativeHandle](GetNativeHandle.md) | 获取相关状态或对象。 | -| [GetID](GetID.md) | 获取相关状态或对象。 | +- [Shutdown](Shutdown.md) +- [Bind](Bind.md) +- [Unbind](Unbind.md) +- [GetNativeHandle](GetNativeHandle.md) +- [GetID](GetID.md) ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHIDescriptorSet](../RHIDescriptorSet/RHIDescriptorSet.md) +- [RHITexture](../RHITexture/RHITexture.md) +- [RHITypes](../RHITypes/RHITypes.md) +- [RHIEnums](../RHIEnums/RHIEnums.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHIScreenshot/RHIScreenshot.md b/docs/api/XCEngine/RHI/RHIScreenshot/RHIScreenshot.md index 88c4aabe..7a30676d 100644 --- a/docs/api/XCEngine/RHI/RHIScreenshot/RHIScreenshot.md +++ b/docs/api/XCEngine/RHI/RHIScreenshot/RHIScreenshot.md @@ -6,28 +6,175 @@ **头文件**: `XCEngine/RHI/RHIScreenshot.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHIScreenshot` public API。 +**描述**: 截图辅助对象,用于把当前 swap chain back buffer 读回到 CPU 并保存为文件,主要面向调试、测试和工具场景。 -## 概述 +## 角色概述 -`RHIScreenshot.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHIScreenshot` 不是核心渲染管线对象,而是一条诊断与工具链路径。 -## 声明概览 +它解决的问题很直接: -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHIScreenshot` | `class` | 头文件中的公开声明。 | +- 当前画面到底渲染出了什么 +- swap chain 在 present 前后是否正确 +- 集成测试能否把输出结果落盘 + +从定位上看,它更接近“引擎内置的轻量截图抓取辅助”,而不是面向最终玩家的完整截图系统。当前实现明显偏 debug / test 风格,而不是面向高性能运行时捕获。 + +## 创建方式 + +当前统一入口是: + +- [Create](Create.md) + +`RHIScreenshot::Create(RHIType)` 会按后端返回不同实现: + +- `D3D12` 当前始终可创建 +- `OpenGL` 取决于 `XCENGINE_SUPPORT_OPENGL` +- `Vulkan` 取决于 `XCENGINE_SUPPORT_VULKAN` +- 其他未实现后端返回 `nullptr` + +这意味着截图能力和 RHI 工厂一样,也受编译开关与后端建设状态影响。 + +## 当前主工作流 + +对上层来说,最典型的使用顺序是: + +1. 拿到有效的 [RHIDevice](../RHIDevice/RHIDevice.md) +2. 拿到有效的 [RHISwapChain](../RHISwapChain/RHISwapChain.md) +3. 调用 [Capture](Capture.md) +4. 用完后 [Shutdown](Shutdown.md) 并 `delete` + +`tests/RHI/unit/test_screenshot.cpp` 也主要围绕这条路径进行验证: + +- 可以创建截图对象 +- 可以对当前 swap chain 进行基本截图 +- `Present(0, 0)` 之后依然可以截图 + +## 当前输出行为 + +这是最需要提前告诉使用者的实现事实。 + +当前三套后端的截图实现都会把数据写成二进制 PPM,也就是 `P6` 格式: + +- 文件头写入 `P6` +- 紧接着写宽高与 `255` +- 再写 RGB 像素数据 + +这意味着: + +- 即使你把文件名写成 `.png`、`.jpg` 或其他扩展名,当前写出的内容依然是 PPM 数据 +- 当前抽象层没有提供输出格式选择、压缩、alpha 保留或 HDR 导出能力 + +## 这是同步、阻塞的调试路径 + +当前各后端实现都会显式等待 GPU / 驱动完成读回: + +- OpenGL 调用 `glFinish()` +- D3D12 提交临时命令列表并等待 fence +- Vulkan 提交复制命令并 `vkQueueWaitIdle()` + +所以 `RHIScreenshot` 现在应当被视为: + +- 调试工具路径 +- 自动化测试辅助路径 +- Editor / 开发期排障路径 + +而不是适合每帧调用的实时功能。 + +## 后端差异 + +### D3D12 + +当前 D3D12 会: + +- 创建 readback buffer +- 临时创建 command allocator / command list +- 把 back buffer 从 render target 转成 copy source +- 执行 `CopyTextureRegion` +- 再切回 render target +- 用 fence 等待 GPU 完成 +- Map readback buffer 并写出 PPM + +这条路径的关键现实约束是: + +- 当前实现假定被捕获资源能从 `D3D12_RESOURCE_STATE_RENDER_TARGET` 转到 copy source 再切回去 +- 它更偏向当前 swap chain back buffer 这种调试用途 +- 它是一次完整的同步读回流程,代价较高 + +### OpenGL + +OpenGL 路径会: + +- 显式 `MakeContextCurrent()` +- `glFinish()` +- 根据 swap chain 当前 back buffer 状态,选择直接从 `GL_BACK` 读,或者临时创建 read FBO 从 back buffer texture 读 +- 调用 `glReadPixels()` +- 逐行倒序写出文件 + +“逐行倒序写出”这一点很重要,它说明 OpenGL 路径当前会主动做一次垂直翻转,以适配 OpenGL 常见的左下角原点读取习惯。 + +### Vulkan + +Vulkan 路径会: + +- 创建 staging buffer 与 host visible 内存 +- 创建临时 command pool / command buffer +- 把 swap chain image 从 `VK_IMAGE_LAYOUT_PRESENT_SRC_KHR` 转成 `VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL` +- 执行 `vkCmdCopyImageToBuffer` +- 再切回 present layout +- 提交命令并等待 graphics queue idle +- Map staging 内存并写出 PPM + +当前 Vulkan 写文件时是按内存中的行顺序直接写出,没有像 OpenGL 那样做显式垂直翻转。 + +因此当前跨后端截图结果在“图像朝向”上不应被假定完全一致。OpenGL 路径显式翻转,而 D3D12 / Vulkan 路径当前没有这一层统一处理。 + +## 与商业引擎工作流的关系 + +商业级引擎里通常会有多层截图路径: + +- 轻量级 back buffer dump +- 离屏 render target 抓取 +- 异步 readback +- 带格式转换、压缩、UI 叠加或平台分享的最终用户截图 + +当前 `RHIScreenshot` 只覆盖了其中最基础的一层,也就是“把当前 swap chain back buffer 读回并存盘”。这对于底层 bring-up 和图形测试已经很有价值,但还远不是完整截图系统。 + +## 生命周期 + +当前三套后端的 [Shutdown](Shutdown.md) 基本都是 no-op,但仍然建议统一按接口风格调用: + +1. [Shutdown](Shutdown.md) +2. `delete` + +这样后续即使截图对象持有更多缓存资源,也不需要改调用习惯。 + +## 线程语义 + +当前接口没有声明线程安全保证。从源码行为看,更稳妥的工程规则是: + +- 在渲染线程或 RHI 线程使用 +- 调用时确保 device / swap chain 处于有效状态 +- 不要并发对同一个 swap chain 做截图和重建 + +## 当前实现限制 + +- 当前抽象接口只能抓 swap chain,不支持直接抓任意 `RHITexture` +- 只有同步读回,没有异步 capture 队列 +- 只有 PPM 输出,没有 PNG/JPG/HDR 等格式支持 +- 没有颜色空间、gamma、alpha、UI 合成等高级控制 +- 输出目录若不存在,后端会直接失败,不会自动创建目录 ## 公共方法 -| 方法 | 描述 | -|------|------| -| [~RHIScreenshot()](Destructor.md) | 销毁对象并释放相关资源。 | -| [Capture](Capture.md) | 公开方法,详见头文件声明。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | -| [Create](Create.md) | 创建新对象或资源。 | +- [Capture](Capture.md) +- [Shutdown](Shutdown.md) +- [Create](Create.md) ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHISwapChain](../RHISwapChain/RHISwapChain.md) +- [RHITexture](../RHITexture/RHITexture.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHIShader/RHIShader.md b/docs/api/XCEngine/RHI/RHIShader/RHIShader.md index 524d818f..8c48e8f2 100644 --- a/docs/api/XCEngine/RHI/RHIShader/RHIShader.md +++ b/docs/api/XCEngine/RHI/RHIShader/RHIShader.md @@ -6,33 +6,224 @@ **头文件**: `XCEngine/RHI/RHIShader.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHIShader` public API。 +**描述**: 单阶段 shader 抽象,负责承载编译后的 shader 代码、shader 类型信息以及可选的反射结果。 -## 概述 +## 角色概述 -`RHIShader.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHIShader` 当前表达的是“单个 shader stage 的编译产物”,而不是完整的材质系统,也不是完整的 graphics program。 -## 声明概览 +从接口形状就能看出这一点: -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHIShader` | `class` | 头文件中的公开声明。 | +- 它只有一个 [GetType](GetType.md) +- [RHIPipelineState](../RHIPipelineState/RHIPipelineState.md) 的 `GraphicsPipelineDesc` 也分别持有 `vertexShader`、`fragmentShader`、`geometryShader` + +这与现代商业引擎和底层图形 API 的常见组织方式一致:shader module / bytecode 是 stage 级资源,真正的 graphics pipeline 则由多个 stage 组合而成。 + +如果从 Unity 去类比,更准确的理解不是“这等同于 Unity 的 Shader 资源”,而是“它更接近 Unity / SRP / 底层后端内部管理的单阶段编译产物”。 + +## 当前更可靠的创建路径 + +虽然 `RHIShader` 自身暴露了 [CompileFromFile](CompileFromFile.md) 和 [Compile](Compile.md),但对上层代码来说,当前更可靠的主路径通常仍然是: + +- 先构造 `ShaderCompileDesc` +- 再通过 [RHIDevice::CreateShader](../RHIDevice/CreateShader.md) 创建 + +这么做的好处是: + +- D3D12 / OpenGL / Vulkan 可以各自走最合适的预处理和编译路径 +- Vulkan 这种需要先把 GLSL 编译成 SPIR-V 的后端,逻辑会被设备层代管 +- 上层代码不必直接碰后端专属类 + +## `ShaderCompileDesc` 表达什么 + +`ShaderCompileDesc` 当前包含这些核心输入: + +- `fileName` +- `source` +- `sourceLanguage` +- `entryPoint` +- `profile` +- `macros` + +它试图提供一份统一的编译描述,但当前后端对这些字段的支持程度并不完全一致,这一点必须写清楚。 + +## 后端差异 + +### D3D12 + +D3D12 路径当前直接调用: + +- `D3DCompileFromFile` +- `D3DCompile` + +并使用: + +- `D3DCOMPILE_DEBUG` +- `D3DCOMPILE_SKIP_OPTIMIZATION` + +来生成调试友好的 bytecode。 + +这条路径的关键语义是: + +- `profile` 决定 shader stage,例如 `vs_5_0`、`ps_5_0` +- [GetNativeHandle](GetNativeHandle.md) 返回的是编译后的 `ID3DBlob*` +- `IsValid()` 本质上检查 bytecode blob 是否存在 +- [GetUniformInfos](GetUniformInfos.md) / [GetUniformInfo](GetUniformInfo.md) 通过 `D3DReflect` 反射已绑定资源 + +但也有需要明确写出的限制: + +- 当前 D3D12 代码没有把 `ShaderCompileDesc::macros` 传给 `D3DCompile*` +- 反射结果更接近“绑定资源信息”,不等于跨后端统一的高层 uniform 语义 + +### OpenGL + +OpenGL 路径支持从文件或源码编译 GLSL,但它的内部模型与 D3D12、Vulkan 都不一样。 + +当前实现会: + +- 根据 `profile`、文件后缀或源码特征推断 shader 类型 +- 忽略 `entryPoint`,因为 GLSL 当前仍默认使用 `main` +- 把单阶段源码编译并链接到一个 program object 中 + +因此: + +- [GetNativeHandle](GetNativeHandle.md) 返回的是 OpenGL program id 的指针化表示 +- 它不是独立的 GL shader object 句柄 +- [GetUniformInfos](GetUniformInfos.md) 返回的是 program active uniform 反射结果 + +这一点很重要:当前 `RHIShader` 在 OpenGL 下承载的是“单阶段 program 包装”,不是与 D3D12 bytecode 或 Vulkan shader module 完全等价的数据结构。 + +### Vulkan + +Vulkan 路径需要特别说明,因为它分成两层: + +1. `VulkanDevice::CreateShader()` 先调用 `CompileVulkanShader()` +2. `VulkanShader` 再用得到的 SPIR-V 字节创建 `VkShaderModule` + +当前 Vulkan 编译链的真实行为是: + +- 支持 GLSL 或 SPIR-V 输入 +- 当前不支持 HLSL source 直接走 Vulkan backend +- 如果是 GLSL,会先编译成 SPIR-V +- `macros` 会被注入 GLSL 源码编译路径 +- `entryPoint` 默认为 `main` + +而 `VulkanShader` 对象本身的 `Compile()` 实际上要求输入已经是 SPIR-V 字节流。 + +当前 Vulkan 还有一个很关键的现实边界: + +- `GetUniformInfos()` 目前返回空列表 +- `GetUniformInfo()` 只会在内部 `m_uniformInfos` 被填充时才有结果 +- 但当前实现并没有做统一反射填充 + +所以 Vulkan 下的 shader 反射能力目前还远不如 D3D12 / OpenGL 成熟,不能把“接口上有反射方法”误写成“所有后端都已有完整反射数据”。 + +## `GetType()` 与单阶段语义 + +`GetType()` 当前返回的是单阶段类型,例如: + +- `Vertex` +- `Fragment` +- `Geometry` +- `Compute` + +测试已经覆盖了 vertex 和 fragment 的主路径。这说明当前 `RHIShader` 的单位就是“一个 stage”,而不是“一个完整 graphics shader program”。 + +## 反射信息应该如何理解 + +`RHIShader::UniformInfo` 当前包含: + +- `name` +- `bindPoint` +- `size` +- `type` +- `arraySize` +- `offset` + +但这些字段的语义并不是跨后端完全一致的稳定 ABI。 + +当前更安全的理解是: + +- D3D12:更偏向绑定资源反射 +- OpenGL:更偏向 active uniform / program 反射 +- Vulkan:当前基本没有统一反射数据 + +因此这套接口更适合: + +- 调试 +- 文档核验 +- 工具辅助 + +而不适合被当成跨后端材质系统的唯一真相来源。 + +## 测试体现出的真实语义 + +`tests/RHI/unit/test_shader.cpp` 当前已经验证: + +- 空描述符创建失败 +- 从文件或源码创建 vertex / fragment shader +- 创建成功后 `IsValid()` 为真 +- `GetType()` 与预期 stage 一致 +- `GetNativeHandle()` 非空 +- `Shutdown()` 会让对象失效 +- 缺失文件会导致创建失败 + +也就是说,当前 shader 抽象至少已经覆盖了真实可用的编译与有效性判断路径,而不是模板化占位页。 + +## 生命周期 + +`RHIShader` 通常通过 [RHIDevice](../RHIDevice/RHIDevice.md) 创建,并以裸指针返回。当前最稳妥的释放方式仍然是: + +1. [Shutdown](Shutdown.md) +2. `delete` + +`Shutdown()` 后: + +- D3D12 会释放 bytecode blob +- OpenGL 会删除 program +- Vulkan 会销毁 shader module + +## 线程语义 + +当前 public API 没有提供线程安全保证。从源码可以得到更保守的工程结论: + +- shader 创建、编译、销毁应视为显式的 RHI 线程 / 渲染线程操作 +- OpenGL 编译依赖有效当前上下文 +- 不要并发读写同一个 shader 实例 + +## 设计理解 + +把 `RHIShader` 保持为单阶段对象,是一种很务实的底层渲染架构选择: + +- shader 资产可以独立编译和缓存 +- graphics / compute pipeline 可以各自组合需要的 stage +- 反射、调试、编译错误处理不会全部绑死在 pipeline state 上 + +这种设计比“一个大而全的万能 shader 资源”更接近底层渲染后端的真实结构,也更便于后续引入 pipeline cache、shader variant、离线编译等能力。 + +## 当前实现限制 + +- `ShaderCompileDesc` 的跨后端支持并不对齐,尤其是 `macros`、`entryPoint`、`sourceLanguage` +- 当前没有统一的错误对象;失败通常体现在返回 `nullptr` 或 `false` +- OpenGL / D3D12 / Vulkan 的 native handle 完全不是同一类对象 +- Vulkan 反射当前很弱,不能依赖 [GetUniformInfos](GetUniformInfos.md) 做统一工具链 ## 公共方法 -| 方法 | 描述 | -|------|------| -| [~RHIShader()](Destructor.md) | 销毁对象并释放相关资源。 | -| [CompileFromFile](CompileFromFile.md) | 公开方法,详见头文件声明。 | -| [Compile](Compile.md) | 公开方法,详见头文件声明。 | -| [GetType](GetType.md) | 获取相关状态或对象。 | -| [IsValid](IsValid.md) | 查询当前状态。 | -| [GetNativeHandle](GetNativeHandle.md) | 获取相关状态或对象。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | -| [GetUniformInfos](GetUniformInfos.md) | 获取相关状态或对象。 | -| [GetUniformInfo](GetUniformInfo.md) | 获取相关状态或对象。 | +- [CompileFromFile](CompileFromFile.md) +- [Compile](Compile.md) +- [GetType](GetType.md) +- [IsValid](IsValid.md) +- [GetNativeHandle](GetNativeHandle.md) +- [Shutdown](Shutdown.md) +- [GetUniformInfos](GetUniformInfos.md) +- [GetUniformInfo](GetUniformInfo.md) ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHIPipelineState](../RHIPipelineState/RHIPipelineState.md) +- [RHITypes](../RHITypes/RHITypes.md) +- [RHIEnums](../RHIEnums/RHIEnums.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHISwapChain/RHISwapChain.md b/docs/api/XCEngine/RHI/RHISwapChain/RHISwapChain.md index 2e6102f7..147e01ac 100644 --- a/docs/api/XCEngine/RHI/RHISwapChain/RHISwapChain.md +++ b/docs/api/XCEngine/RHI/RHISwapChain/RHISwapChain.md @@ -6,31 +6,119 @@ **头文件**: `XCEngine/RHI/RHISwapChain.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHISwapChain` public API。 +**描述**: 窗口展示交换链接口,负责管理 back buffer、present 和 resize,是渲染输出到窗口的最终桥接层。 -## 概述 +## 角色概述 -`RHISwapChain.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHISwapChain` 是 `RHI` 抽象层里最接近“屏幕展示”的对象。它把: -## 声明概览 +- 窗口句柄 +- 呈现队列 +- back buffer 纹理 +- present / resize 行为 -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHISwapChain` | `class` | 头文件中的公开声明。 | +收敛成一套统一接口。 -## 公共方法 +如果从商用引擎视角理解,它就是 renderer 最后把颜色输出送到窗口的那道门。 -| 方法 | 描述 | -|------|------| -| [~RHISwapChain()](Destructor.md) | 销毁对象并释放相关资源。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | -| [GetCurrentBackBufferIndex](GetCurrentBackBufferIndex.md) | 获取相关状态或对象。 | -| [GetCurrentBackBuffer](GetCurrentBackBuffer.md) | 获取相关状态或对象。 | -| [Present](Present.md) | 公开方法,详见头文件声明。 | -| [Resize](Resize.md) | 公开方法,详见头文件声明。 | -| [GetNativeHandle](GetNativeHandle.md) | 获取相关状态或对象。 | +## 创建方式 + +swapchain 通常由 [RHIDevice](../RHIDevice/RHIDevice.md) 通过 [CreateSwapChain](../RHIDevice/CreateSwapChain.md) 创建,输入参数来自 [RHITypes](../RHITypes/RHITypes.md) 中的 `SwapChainDesc`,同时还需要一个 present queue。 + +## 当前接口语义 + +- [GetCurrentBackBufferIndex](GetCurrentBackBufferIndex.md) +- [GetCurrentBackBuffer](GetCurrentBackBuffer.md) +- [Present](Present.md) +- [Resize](Resize.md) +- [GetNativeHandle](GetNativeHandle.md) +- [Shutdown](Shutdown.md) + +## 最关键的所有权规则 + +`GetCurrentBackBuffer()` 返回的是 `RHITexture*`,但这个纹理不是调用方拥有的独立对象。 + +按当前后端实现: + +- D3D12 返回内部 `m_backBuffers` 向量中元素的地址 +- OpenGL 返回 `m_backBufferTexture` +- Vulkan 返回内部 `unique_ptr` 持有对象的裸指针 + +因此这里有一个必须写死的规则: + +- 通过 swapchain 取得的 back buffer 由 swapchain 自己持有 +- 调用方不应该对这个返回值执行 `Shutdown()` 或 `delete` + +## `GetCurrentBackBufferIndex()` 的可移植语义 + +这个索引在不同后端上的行为并不完全一致: + +- D3D12 / Vulkan 会跟随当前交换链图像轮换 +- OpenGL 当前实现始终返回 `0` + +所以最安全的理解是: + +- 它是“当前展示图像的后端信息” +- 不是跨所有后端都等价的 frame slot 语义 + +## `Present()` / `Resize()` 的现实边界 + +### `Present()` + +测试已经覆盖: + +- `Present(0, 0)` +- 带 `syncInterval` 的 present +- 连续多次 present + +但是否真正使用 `syncInterval` / `flags` 取决于后端。比如当前 OpenGL 实现会忽略这两个参数。 + +### `Resize()` + +`Resize()` 可能导致内部 back buffer 资源被重建或重新解释。对调用方来说,最安全的工程规则是: + +- 不要在 `Resize()` 后继续长期持有旧的 back buffer 指针 +- 需要时重新调用 `GetCurrentBackBuffer()` + +## 测试体现出的真实语义 + +`tests/RHI/unit/test_swap_chain.cpp` 已经验证了: + +- 创建成功 +- 当前 back buffer index 落在有效范围内 +- `GetCurrentBackBuffer()` 非空 +- 可以 resize +- 可以反复 present +- 支持 2-buffer 与 3-buffer 路径 +- `Shutdown()` 可重复调用 + +这说明 swapchain 在当前抽象层中已经是稳定主路径对象,而不是仅供单一后端调试。 + +## `GetNativeHandle()` 的后端差异 + +这个接口是非常典型的后端逃逸口: + +- D3D12 返回 DXGI swapchain 对象 +- OpenGL 当前返回窗口句柄 +- Vulkan 返回 `VkSwapchainKHR` + +因此不能把它当成统一结构使用。 + +## 生命周期 + +普通使用方式是: + +1. 通过 [RHIDevice](../RHIDevice/RHIDevice.md) 创建 swapchain +2. 读取当前 back buffer,并围绕它创建 view / framebuffer 等 +3. 录制并提交命令 +4. 调用 [Present](Present.md) +5. 结束时 [Shutdown](Shutdown.md) 并 `delete` ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHITexture](../RHITexture/RHITexture.md) +- [RHICommandQueue](../RHICommandQueue/RHICommandQueue.md) +- [RHIFramebuffer](../RHIFramebuffer/RHIFramebuffer.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHITexture/RHITexture.md b/docs/api/XCEngine/RHI/RHITexture/RHITexture.md index 01d2dce9..8035d05e 100644 --- a/docs/api/XCEngine/RHI/RHITexture/RHITexture.md +++ b/docs/api/XCEngine/RHI/RHITexture/RHITexture.md @@ -6,37 +6,117 @@ **头文件**: `XCEngine/RHI/RHITexture.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHITexture` public API。 +**描述**: 抽象纹理资源接口,负责暴露尺寸、格式、纹理类型、资源状态、调试命名和 native handle。 -## 概述 +## 角色概述 -`RHITexture.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHITexture` 是 [RHIResource](../RHIResource/RHIResource.md) 的另一类核心具体资源。它既用于普通纹理资源,也用于 render target、depth texture、swapchain back buffer 这类图形输出资源。 -## 声明概览 +和很多成熟引擎类似,当前抽象层把“纹理是什么”与“纹理怎么被绑定/解释”分开处理: -| 声明 | 类型 | 说明 | -|------|------|------| -| `RHITexture` | `class` | 继承自 `RHIResource` 的公开声明。 | +- `RHITexture` 代表资源本体 +- [RHIResourceView](../RHIResourceView/RHIResourceView.md) 代表对纹理的不同视图解释 -## 公共方法 +## 创建方式 -| 方法 | 描述 | -|------|------| -| [~RHITexture()](Destructor.md) | 销毁对象并释放相关资源。 | -| [GetWidth](GetWidth.md) | 获取相关状态或对象。 | -| [GetHeight](GetHeight.md) | 获取相关状态或对象。 | -| [GetDepth](GetDepth.md) | 获取相关状态或对象。 | -| [GetMipLevels](GetMipLevels.md) | 获取相关状态或对象。 | -| [GetFormat](GetFormat.md) | 获取相关状态或对象。 | -| [GetTextureType](GetTextureType.md) | 获取相关状态或对象。 | -| [GetState](GetState.md) | 获取相关状态或对象。 | -| [SetState](SetState.md) | 设置相关状态或配置。 | -| [GetNativeHandle](GetNativeHandle.md) | 获取相关状态或对象。 | -| [GetName](GetName.md) | 获取相关状态或对象。 | -| [SetName](SetName.md) | 设置相关状态或配置。 | -| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 | +`RHITexture` 通常由 [RHIDevice](../RHIDevice/RHIDevice.md) 通过以下重载创建: + +- [CreateTexture](../RHIDevice/CreateTexture.md) +- [CreateTexture](../RHIDevice/CreateTexture.md) 的带初始数据重载 + +创建描述来自 [RHITypes](../RHITypes/RHITypes.md) 中的 `TextureDesc`。 + +## 当前接口能直接告诉你什么 + +- [GetWidth](GetWidth.md) +- [GetHeight](GetHeight.md) +- [GetDepth](GetDepth.md) +- [GetMipLevels](GetMipLevels.md) +- [GetFormat](GetFormat.md) +- [GetTextureType](GetTextureType.md) +- [GetState](GetState.md) +- [SetState](SetState.md) +- [GetNativeHandle](GetNativeHandle.md) +- [GetName](GetName.md) +- [SetName](SetName.md) +- [Shutdown](Shutdown.md) + +## 当前已经覆盖到的纹理类型 + +`tests/RHI/unit/test_texture.cpp` 已经验证了多个纹理形态: + +- `Texture1D` +- `Texture2D` +- `Texture3D` +- `Texture2DArray` +- `TextureCube` +- `TextureCubeArray` + +同时也覆盖了: + +- 多 mip 级 +- 多种格式 +- 多采样创建路径 + +这说明当前 `RHITexture` 已经不是“只有 2D RGBA8”那种早期占位资源抽象。 + +## 状态语义 + +和 buffer 一样,texture 也维护 [ResourceStates](../RHIEnums/RHIEnums.md): + +- `Common` +- `RenderTarget` +- `PixelShaderResource` +- `CopyDst` +- `DepthWrite` + +测试明确覆盖了多次状态切换,因此这里的状态不是死字段,而是当前引擎真实依赖的资源跟踪信息。它会和 [RHICommandList](../RHICommandList/RHICommandList.md) 的 barrier、clear、copy 路径发生关系。 + +## 需要注意的接口边界 + +### 1. 不是所有创建信息都能从对象接口直接读回 + +虽然 `TextureDesc` 里有: + +- `arraySize` +- `sampleCount` +- `sampleQuality` +- `flags` + +但 `RHITexture` 公共接口并没有提供这些字段的直接查询方法。当前文档不能假设对象页能完整还原所有创建描述。 + +### 2. 初始数据上传发生在设备创建阶段 + +带 `initialData` 的上传路径属于 `RHIDevice::CreateTexture()` 重载,不属于 `RHITexture` 对象自身的后续方法。 + +### 3. swapchain back buffer 也是 `RHITexture*` + +但通过 [RHISwapChain](../RHISwapChain/RHISwapChain.md) 取回的 back buffer 不是由调用方拥有的独立纹理对象,不能按普通 `CreateTexture()` 的产物去 `delete`。 + +## 测试体现出的真实语义 + +当前测试已经证明: + +- 创建成功后可以查询宽高深、mip、格式、纹理类型 +- `GetState()` / `SetState()` 可多次切换 +- `SetName()` / `GetName()` 可用于调试命名 +- `GetNativeHandle()` 创建成功后通常非空 +- `Shutdown()` 可重复调用 + +## 生命周期 + +普通 `RHITexture` 由 [RHIDevice](../RHIDevice/RHIDevice.md) 创建并返回裸指针。使用完成后推荐: + +1. [Shutdown](Shutdown.md) +2. `delete` + +唯一需要特别区分的是 swapchain back buffer,它由 swapchain 持有,不应由调用方释放。 ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIResource](../RHIResource/RHIResource.md) +- [RHIResourceView](../RHIResourceView/RHIResourceView.md) +- [RHISwapChain](../RHISwapChain/RHISwapChain.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/RHITypes/RHITypes.md b/docs/api/XCEngine/RHI/RHITypes/RHITypes.md index 055c05e9..e48f34aa 100644 --- a/docs/api/XCEngine/RHI/RHITypes/RHITypes.md +++ b/docs/api/XCEngine/RHI/RHITypes/RHITypes.md @@ -2,79 +2,154 @@ **命名空间**: `XCEngine::RHI` -**类型**: `struct` +**类型**: `header collection` **头文件**: `XCEngine/RHI/RHITypes.h` -**描述**: 定义 `XCEngine/RHI` 子目录中的 `RHITypes` public API。 +**描述**: 提供跨后端共享的描述符、辅助结构和设备信息结构,是 `RHI` 抽象层的公共数据语言。 -## 概述 +## 这不是一个单独的“类型” -`RHITypes.h` 是 `XCEngine/RHI` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。 +`RHITypes.h` 并不声明一个叫 `RHITypes` 的运行时对象。它更准确的定位是:`RHI` 模块的公共描述符头文件集合。 -## 声明概览 +几乎所有核心接口都会依赖它: -| 声明 | 类型 | 说明 | -|------|------|------| -| `Viewport` | `struct` | 头文件中的公开声明。 | -| `Rect` | `struct` | 头文件中的公开声明。 | -| `Color` | `struct` | 头文件中的公开声明。 | -| `ClearValue` | `struct` | 头文件中的公开声明。 | -| `ShaderCompileMacro` | `struct` | 头文件中的公开声明。 | -| `ShaderCompileDesc` | `struct` | 头文件中的公开声明。 | -| `InputElementDesc` | `struct` | 头文件中的公开声明。 | -| `InputLayoutDesc` | `struct` | 头文件中的公开声明。 | -| `VertexBufferBinding` | `struct` | 头文件中的公开声明。 | -| `TextureCopyLocation` | `struct` | 头文件中的公开声明。 | -| `DescriptorHandle` | `struct` | 头文件中的公开声明。 | -| `GPUDescriptorHandle` | `struct` | 头文件中的公开声明。 | -| `CPUDescriptorHandle` | `struct` | 头文件中的公开声明。 | -| `SubresourceRange` | `struct` | 头文件中的公开声明。 | -| `TextureDesc` | `struct` | 头文件中的公开声明。 | -| `BufferDesc` | `struct` | 头文件中的公开声明。 | -| `RenderTargetDesc` | `struct` | 头文件中的公开声明。 | -| `DepthStencilDesc` | `struct` | 头文件中的公开声明。 | -| `DescriptorHeapDesc` | `struct` | 头文件中的公开声明。 | -| `CommandQueueDesc` | `struct` | 头文件中的公开声明。 | -| `CommandListDesc` | `struct` | 头文件中的公开声明。 | -| `CommandAllocatorDesc` | `struct` | 头文件中的公开声明。 | -| `FenceDesc` | `struct` | 头文件中的公开声明。 | -| `QueryHeapDesc` | `struct` | 头文件中的公开声明。 | -| `SamplerDesc` | `struct` | 头文件中的公开声明。 | -| `SwapChainDesc` | `struct` | 头文件中的公开声明。 | -| `RenderTargetViewDesc` | `struct` | 头文件中的公开声明。 | -| `DepthStencilViewDesc` | `struct` | 头文件中的公开声明。 | -| `ShaderResourceViewDesc` | `struct` | 头文件中的公开声明。 | -| `ConstantBufferViewDesc` | `struct` | 头文件中的公开声明。 | -| `UnorderedAccessViewDesc` | `struct` | 头文件中的公开声明。 | -| `RootSignatureDesc` | `struct` | 头文件中的公开声明。 | -| `StencilOpDesc` | `struct` | 头文件中的公开声明。 | -| `DepthStencilStateDesc` | `struct` | 头文件中的公开声明。 | -| `BlendDesc` | `struct` | 头文件中的公开声明。 | -| `RasterizerDesc` | `struct` | 头文件中的公开声明。 | -| `PipelineStateHash` | `struct` | 头文件中的公开声明。 | -| `GraphicsPipelineDesc` | `struct` | 头文件中的公开声明。 | -| `RHIDeviceDesc` | `struct` | 头文件中的公开声明。 | -| `RHIDeviceInfo` | `struct` | 头文件中的公开声明。 | -| `RHIRenderPassDesc` | `struct` | 头文件中的公开声明。 | -| `DescriptorSetLayoutBinding` | `struct` | 头文件中的公开声明。 | -| `DescriptorSetLayoutDesc` | `struct` | 头文件中的公开声明。 | -| `RHIPipelineLayoutDesc` | `struct` | 头文件中的公开声明。 | -| `ResourceViewDesc` | `struct` | 头文件中的公开声明。 | -| `DescriptorPoolDesc` | `struct` | 头文件中的公开声明。 | +- [RHIDevice](../RHIDevice/RHIDevice.md) 的创建参数来自这里 +- [RHICommandList](../RHICommandList/RHICommandList.md) 的 viewport / rect / clear value 来自这里 +- [RHIPipelineState](../RHIPipelineState/RHIPipelineState.md) 的状态描述来自这里 +- descriptor set / pipeline layout / resource view 的布局语言也来自这里 -## 结构体成员 +理解这页的关键不是死记字段,而是先理解这些结构被分成了哪些“语义家族”。 -| 成员 | 类型 | 描述 | 默认值 | -|------|------|------|--------| -| `topLeftX` | `float` | 结构体公开字段。 | - | -| `topLeftY` | `float` | 结构体公开字段。 | - | -| `width` | `float` | 结构体公开字段。 | - | -| `height` | `float` | 结构体公开字段。 | - | -| `minDepth` | `float` | 结构体公开字段。 | - | -| `maxDepth` | `float` | 结构体公开字段。 | - | +## 类型家族 + +### 视口、区域与 clear 值 + +- `Viewport` +- `Rect` +- `Color` +- `ClearValue` + +这些是 command list 和 render pass 最基础的辅助数据结构。 + +### shader 编译描述 + +- `ShaderCompileMacro` +- `ShaderCompileDesc` + +这里可以看到当前 shader 输入既支持文件路径,也支持内存中的 `source` 字节序列,并且使用 `std::wstring` 表达文件名、入口点和 profile。 + +### 顶点输入与基础资源描述 + +- `InputElementDesc` +- `InputLayoutDesc` +- `TextureDesc` +- `BufferDesc` +- `SamplerDesc` +- `SwapChainDesc` + +这些结构基本决定了资源和图形状态的创建方式。当前很多字段并不是强类型枚举,而是 `uint32_t` / `uint64_t`,调用方需要显式使用 [RHIEnums](../RHIEnums/RHIEnums.md) 里的枚举值进行 `static_cast`。 + +### 资源视图与 descriptor 相关结构 + +- `RenderTargetViewDesc` +- `DepthStencilViewDesc` +- `ShaderResourceViewDesc` +- `ConstantBufferViewDesc` +- `UnorderedAccessViewDesc` +- `ResourceViewDesc` +- `DescriptorHandle` +- `GPUDescriptorHandle` +- `CPUDescriptorHandle` +- `DescriptorSetLayoutBinding` +- `DescriptorSetLayoutDesc` +- `DescriptorPoolDesc` +- `RHIPipelineLayoutDesc` + +这部分是资源绑定系统的公共语言。它既要服务 D3D12 风格 descriptor heap / root signature 心智模型,也要兼容 OpenGL 当前的绑定实现,因此接口形状不是完全中性的。 + +### 设备、队列与同步描述 + +- `RHIDeviceDesc` +- `RHIDeviceInfo` +- `CommandQueueDesc` +- `CommandListDesc` +- `FenceDesc` +- `QueryHeapDesc` + +这些类型支撑设备初始化、命令系统创建和设备信息查询。 + +### pipeline state 描述 + +- `StencilOpDesc` +- `DepthStencilStateDesc` +- `BlendDesc` +- `RasterizerDesc` +- `PipelineStateHash` +- `GraphicsPipelineDesc` + +`RHIPipelineState.h` 头文件注释里明确提到这是 “Unity SRP style” 的状态配置方向。可以把它理解为:引擎希望用一套更统一的图形状态描述去收敛后端 PSO / program pipeline 差异,而不是把所有 native API 结构直接暴露给上层。 + +### 兼容层与后端痕迹明显的结构 + +- `DescriptorHeapDesc` +- `CommandAllocatorDesc` +- `RootSignatureDesc` +- `RHIRenderPassDesc` + +这些名字和字段明显带有 D3D12 / 显式图形 API 背景。它们的存在并不奇怪,反而说明当前抽象层是在真实后端实现基础上生长出来的,而不是纯理论设计。 + +## 最重要的使用约定 + +### 1. 很多字段是“枚举值容器”,不是强类型枚举字段 + +例如: + +- `TextureDesc::format` +- `TextureDesc::textureType` +- `BufferDesc::bufferType` +- `CommandQueueDesc::queueType` +- `SamplerDesc::filter` + +这些字段往往使用 `uint32_t`,调用方通常写成: + +```cpp +desc.bufferType = static_cast(BufferType::Vertex); +desc.format = static_cast(Format::R8G8B8A8_UNorm); +``` + +这种写法对跨后端兼容很直接,但类型约束较弱。 + +### 2. 这不是 C ABI 风格的 POD 头文件 + +`RHITypes.h` 里大量使用了: + +- `std::vector` +- `std::wstring` +- 原始指针 +- 指向其他 RHI 对象的裸指针 + +所以它更适合被理解为“引擎内部 C++ 描述符语言”,而不是稳定二进制 ABI 或数据驱动序列化格式。 + +### 3. 当前抽象层不是完全后端无痕的 + +如果你看到 `RootSignatureDesc`、`DescriptorHeapDesc`、`CommandAllocatorDesc` 这些结构,正确理解不是“抽象失败”,而是“当前抽象优先服务真实后端实现与演进,而不是先追求绝对纯净”。 + +## 建议怎么读 + +如果你第一次接触这页,不建议从上到下把所有结构都读完。更高效的方式是: + +1. 先读 [RHIEnums](../RHIEnums/RHIEnums.md),理解可选枚举集合。 +2. 再读 [RHIDevice](../RHIDevice/RHIDevice.md),看这些描述符分别喂给哪些创建接口。 +3. 真正用到某个对象时,再回来查对应那一组结构。 + +这比把 `RHITypes.h` 当词典通读更符合工程实践。 ## 相关文档 -- [当前目录](../RHI.md) - 返回 `RHI` 平行目录 -- [API 总索引](../../../main.md) - 返回顶层索引 +- [当前模块](../RHI.md) +- [RHIEnums](../RHIEnums/RHIEnums.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHICommandList](../RHICommandList/RHICommandList.md) +- [RHIPipelineState](../RHIPipelineState/RHIPipelineState.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/Vulkan.md b/docs/api/XCEngine/RHI/Vulkan/Vulkan.md new file mode 100644 index 00000000..ae9f63bc --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/Vulkan.md @@ -0,0 +1,81 @@ +# Vulkan + +**命名空间**: `XCEngine::RHI` + +**类型**: `submodule` + +**描述**: `RHI` 的 Vulkan 后端实现目录,负责把抽象设备、队列、命令列表、资源、描述符和管线状态翻译为 Vulkan 原生对象。 + +## 概览 + +`XCEngine/RHI/Vulkan` 是当前引擎 Vulkan backend 的 public API 入口树。它和上层抽象 [RHI](../RHI.md) 的关系可以这样理解: + +- `RHI` 说明“跨后端统一契约” +- `Vulkan` 说明“这些契约在 Vulkan 上当前是怎么落地的” + +当前这一层已经覆盖了: + +- 设备、队列、命令列表与交换链 +- buffer、texture、resource view +- render pass、framebuffer、pipeline layout、pipeline state +- descriptor pool、descriptor set、sampler、shader +- 截图与共享工具头 + +## 设计要点 + +- 目录结构严格与 `engine/include/XCEngine/RHI/Vulkan` 保持平行 +- 文档区分抽象契约与当前 Vulkan 实现,避免把未来意图写成现状 +- 优先写清楚当前真实行为、平台边界、所有权和限制 +- 在能准确类比时补充商业引擎 / Unity 风格的解释性内容 + +## 头文件与类型页 + +- [VulkanBuffer](VulkanBuffer/VulkanBuffer.md) - `VulkanBuffer.h` +- [VulkanCommandList](VulkanCommandList/VulkanCommandList.md) - `VulkanCommandList.h` +- [VulkanCommandQueue](VulkanCommandQueue/VulkanCommandQueue.md) - `VulkanCommandQueue.h` +- [VulkanCommon](VulkanCommon/VulkanCommon.md) - `VulkanCommon.h` +- [VulkanDescriptorPool](VulkanDescriptorPool/VulkanDescriptorPool.md) - `VulkanDescriptorPool.h` +- [VulkanDescriptorSet](VulkanDescriptorSet/VulkanDescriptorSet.md) - `VulkanDescriptorSet.h` +- [VulkanDevice](VulkanDevice/VulkanDevice.md) - `VulkanDevice.h` +- [VulkanFence](VulkanFence/VulkanFence.md) - `VulkanFence.h` +- [VulkanFramebuffer](VulkanFramebuffer/VulkanFramebuffer.md) - `VulkanFramebuffer.h` +- [VulkanPipelineLayout](VulkanPipelineLayout/VulkanPipelineLayout.md) - `VulkanPipelineLayout.h` +- [VulkanPipelineState](VulkanPipelineState/VulkanPipelineState.md) - `VulkanPipelineState.h` +- [VulkanRenderPass](VulkanRenderPass/VulkanRenderPass.md) - `VulkanRenderPass.h` +- [VulkanResourceView](VulkanResourceView/VulkanResourceView.md) - `VulkanResourceView.h` +- [VulkanSampler](VulkanSampler/VulkanSampler.md) - `VulkanSampler.h` +- [VulkanScreenshot](VulkanScreenshot/VulkanScreenshot.md) - `VulkanScreenshot.h` +- [VulkanShader](VulkanShader/VulkanShader.md) - `VulkanShader.h` +- [VulkanShaderCompiler](VulkanShaderCompiler/VulkanShaderCompiler.md) - `VulkanShaderCompiler.h` +- [VulkanSwapChain](VulkanSwapChain/VulkanSwapChain.md) - `VulkanSwapChain.h` +- [VulkanTexture](VulkanTexture/VulkanTexture.md) - `VulkanTexture.h` + +## 建议阅读顺序 + +如果你是第一次进入 Vulkan 后端,建议按下面顺序建立整体心智模型: + +1. [VulkanDevice](VulkanDevice/VulkanDevice.md) +2. [VulkanCommandQueue](VulkanCommandQueue/VulkanCommandQueue.md) +3. [VulkanCommandList](VulkanCommandList/VulkanCommandList.md) +4. [VulkanSwapChain](VulkanSwapChain/VulkanSwapChain.md) +5. [VulkanPipelineLayout](VulkanPipelineLayout/VulkanPipelineLayout.md) +6. [VulkanPipelineState](VulkanPipelineState/VulkanPipelineState.md) +7. [VulkanDescriptorPool](VulkanDescriptorPool/VulkanDescriptorPool.md) +8. [VulkanDescriptorSet](VulkanDescriptorSet/VulkanDescriptorSet.md) +9. [VulkanBuffer](VulkanBuffer/VulkanBuffer.md) / [VulkanTexture](VulkanTexture/VulkanTexture.md) / [VulkanResourceView](VulkanResourceView/VulkanResourceView.md) + +## 相关指南 + +- [Devices, Queues, Command Lists, And Resource Creation](../../../_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md) + +## 相关文档 + +- [RHI](../RHI.md) +- [RHIDevice](../RHIDevice/RHIDevice.md) +- [RHICommandQueue](../RHICommandQueue/RHICommandQueue.md) +- [RHICommandList](../RHICommandList/RHICommandList.md) +- [RHIPipelineState](../RHIPipelineState/RHIPipelineState.md) +- [RHIPipelineLayout](../RHIPipelineLayout/RHIPipelineLayout.md) +- [RHISwapChain](../RHISwapChain/RHISwapChain.md) +- [RHIShader](../RHIShader/RHIShader.md) +- [API 总索引](../../../main.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanBuffer/VulkanBuffer.md b/docs/api/XCEngine/RHI/Vulkan/VulkanBuffer/VulkanBuffer.md new file mode 100644 index 00000000..e9642c0c --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanBuffer/VulkanBuffer.md @@ -0,0 +1,94 @@ +# VulkanBuffer + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanBuffer.h` + +**描述**: Vulkan 后端里的 `RHIBuffer` 实现,负责创建 `VkBuffer`、分配绑定 `VkDeviceMemory`,并提供映射写入能力。 + +## 概览 + +`VulkanBuffer` 是当前 Vulkan 后端最基础的资源对象之一。它封装了: + +- `VkBuffer` +- 绑定到该 buffer 的 `VkDeviceMemory` +- RHI 层的软件状态、步长、名称与 buffer 类型 + +## 生命周期 + +典型顺序: + +1. 由 [VulkanDevice](../VulkanDevice/VulkanDevice.md) 创建 +2. `Initialize(device, desc, usageFlags, memoryProperties)` +3. 需要时 `Map()` / `SetData()` / `Unmap()` +4. 不再使用时 `Shutdown()` + +析构函数会调用 `Shutdown()`。 + +## 当前实现的真实行为 + +- 初始化时会先创建 `VkBuffer` +- 查询内存需求 +- 通过 `VulkanDevice::FindMemoryType()` 选内存类型 +- 分配并绑定 `VkDeviceMemory` + +`Map()` / `Unmap()` 都直接作用于 `VkDeviceMemory`。`SetData()` 的行为是: + +- 如果当前没映射,就临时 `Map()` +- `memcpy` 到目标偏移 +- 如果是它自己临时映射的,再自动 `Unmap()` + +因此它是标准的“主机映射写入”路径。 + +需要特别说明的是:虽然 `VulkanBuffer` 支持任意 `usageFlags` 和 `memoryProperties` 组合,但当前 [VulkanDevice](../VulkanDevice/VulkanDevice.md) 的 `CreateBuffer()` 默认传入的是 host-visible / host-coherent 内存属性,而不是更激进的 device-local 策略。 + +## 状态与所有权 + +- `GetState()` / `SetState()` 维护的是软件侧 `ResourceStates` +- `GetNativeHandle()` 返回 `VkBuffer` +- `VulkanBuffer` 拥有 `VkBuffer` 和 `VkDeviceMemory` + +## 线程语义 + +没有内部锁。更稳妥的用法是: + +- 同一时刻只在一个线程上修改同一个 buffer 的映射数据 +- 不要把 `Map()` 出来的指针视为跨线程共享写入缓冲区 + +## 设计取向 + +当前实现明显偏向“先把 buffer 可创建、可写、可被命令列表使用”: + +- 优点是简单直观,适合测试和基础渲染路径 +- 代价是显存分层与上传优化还比较初级 + +## 当前限制 + +- 默认设备创建路径偏 host-visible +- 没有单独的上传堆 / 默认堆抽象 +- 状态跟踪是软件侧记录,不是驱动可查询状态 + +## 主要公开方法 + +- `bool Initialize(VulkanDevice* device, const BufferDesc& desc, VkBufferUsageFlags usageFlags, VkMemoryPropertyFlags memoryProperties)` +- `void Shutdown()` +- `void* Map()` +- `void Unmap()` +- `void SetData(const void* data, size_t size, size_t offset = 0)` +- `uint64_t GetSize() const` +- `BufferType GetBufferType() const` +- `void SetBufferType(BufferType type)` +- `uint32_t GetStride() const` +- `void SetStride(uint32_t stride)` +- `void* GetNativeHandle()` +- `ResourceStates GetState() const` +- `void SetState(ResourceStates state)` + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanDevice](../VulkanDevice/VulkanDevice.md) +- [VulkanResourceView](../VulkanResourceView/VulkanResourceView.md) +- [RHIBuffer](../../RHIBuffer/RHIBuffer.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/BeginRenderPass.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/BeginRenderPass.md new file mode 100644 index 00000000..fa7ad753 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/BeginRenderPass.md @@ -0,0 +1,31 @@ +# VulkanCommandList::BeginRenderPass + +```cpp +void BeginRenderPass(RHIRenderPass* renderPass, RHIFramebuffer* framebuffer, + const Rect& renderArea, uint32_t clearValueCount, const ClearValue* clearValues) override; +``` + +## 作用 + +显式开始一个 Vulkan render pass。 + +## 前置条件 + +- `renderPass` 与 `framebuffer` 都必须是 Vulkan 后端对象 +- framebuffer 必须与 render pass 兼容 +- command buffer 已经开始录制 + +## 当前实现行为 + +- 会检查 `VulkanRenderPass`、`VulkanFramebuffer` 和它们的 native handle 是否有效 +- 若已有活跃 render pass,会先结束旧的 +- 会把当前颜色目标和深度目标更新为 framebuffer 的 attachment +- 会根据 `renderArea` 自动设置 viewport 和 scissor +- viewport 会用负高度保持 RHI 左上角原点语义 + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [SetRenderTargets](SetRenderTargets.md) +- [VulkanRenderPass](../VulkanRenderPass/VulkanRenderPass.md) +- [VulkanFramebuffer](../VulkanFramebuffer/VulkanFramebuffer.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Clear.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Clear.md new file mode 100644 index 00000000..fc04d849 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Clear.md @@ -0,0 +1,26 @@ +# VulkanCommandList::Clear + +```cpp +void Clear(float r, float g, float b, float a, uint32_t buffers) override; +``` + +## 作用 + +按抽象 RHI 的统一接口清理当前颜色和/或深度模板目标。 + +## 当前实现行为 + +- 如果需要清颜色,会结束活跃 render pass +- 把颜色目标切到 `CopyDst` +- 用 `vkCmdClearColorImage(...)` 清理 +- 如果需要清深度/模板,也会走 image clear 路径而不是 render pass loadOp 路径 + +## 注意事项 + +当前实现是显式 image clear,不等价于“依赖 render pass clear attachment”。 + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [ClearRenderTarget](ClearRenderTarget.md) +- [ClearDepthStencil](ClearDepthStencil.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/ClearDepthStencil.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/ClearDepthStencil.md new file mode 100644 index 00000000..a85672cc --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/ClearDepthStencil.md @@ -0,0 +1,20 @@ +# VulkanCommandList::ClearDepthStencil + +```cpp +void ClearDepthStencil(RHIResourceView* depthStencil, float depth, uint8_t stencil) override; +``` + +## 作用 + +清理指定深度模板目标。 + +## 当前实现行为 + +- 会结束活跃 render pass +- 把纹理切到 `CopyDst` +- 再调用 `vkCmdClearDepthStencilImage(...)` + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [Clear](Clear.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/ClearRenderTarget.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/ClearRenderTarget.md new file mode 100644 index 00000000..bfe48a9c --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/ClearRenderTarget.md @@ -0,0 +1,20 @@ +# VulkanCommandList::ClearRenderTarget + +```cpp +void ClearRenderTarget(RHIResourceView* renderTarget, const float color[4]) override; +``` + +## 作用 + +清理指定颜色目标。 + +## 当前实现行为 + +- 本质上走和 `Clear()` 类似的 image clear 路径 +- 需要目标 view 对应有效 `VkImageView` +- 会处理必要的状态切换后调用 `vkCmdClearColorImage(...)` + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [Clear](Clear.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Close.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Close.md new file mode 100644 index 00000000..744ec419 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Close.md @@ -0,0 +1,25 @@ +# VulkanCommandList::Close + +```cpp +void Close() override; +``` + +## 作用 + +结束当前命令录制,把 command buffer 置为可提交状态。 + +## 当前实现行为 + +- 会先结束活跃 render pass +- 如果当前颜色目标是交换链图像,会在结束前把它转到 `ResourceStates::Present` +- 最后调用 `vkEndCommandBuffer(...)` + +## 注意事项 + +如果打算把命令列表提交给 [VulkanCommandQueue](../VulkanCommandQueue/VulkanCommandQueue.md),通常应先调用 `Close()`。 + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [Reset](Reset.md) +- [TransitionBarrier](TransitionBarrier.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/CopyResource.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/CopyResource.md new file mode 100644 index 00000000..35dd5bc4 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/CopyResource.md @@ -0,0 +1,24 @@ +# VulkanCommandList::CopyResource + +```cpp +void CopyResource(RHIResourceView* dst, RHIResourceView* src) override; +``` + +## 作用 + +执行资源拷贝。 + +## 当前实现行为 + +- 先验证源/目标 view 都有效 +- 会先结束活跃 render pass +- 当前覆盖两类主要路径: + - texture 到 texture + - buffer 到 buffer +- texture 拷贝会处理必要的 layout / state 切换 + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [TransitionBarrier](TransitionBarrier.md) +- [Dispatch](Dispatch.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Dispatch.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Dispatch.md new file mode 100644 index 00000000..e797f8b1 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Dispatch.md @@ -0,0 +1,29 @@ +# VulkanCommandList::Dispatch + +```cpp +void Dispatch(uint32_t x, uint32_t y, uint32_t z) override; +``` + +## 作用 + +发起一次 compute dispatch。 + +## 前置条件 + +- 当前 pipeline state 已设置 +- pipeline state 持有有效 compute shader +- 需要的 descriptor set 已绑定 + +## 当前实现行为 + +- 会先结束活跃 render pass +- 如果当前 pipeline 没有 compute shader,直接返回 +- 会调用 `m_currentPipelineState->EnsureValid()` +- 如果 compute pipeline 尚未创建,可能在这里延迟创建 +- 最终绑定 compute pipeline 并调用 `vkCmdDispatch(...)` + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [SetComputeDescriptorSets](SetComputeDescriptorSets.md) +- [VulkanPipelineState](../VulkanPipelineState/VulkanPipelineState.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Draw.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Draw.md new file mode 100644 index 00000000..b44dbbb8 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Draw.md @@ -0,0 +1,27 @@ +# VulkanCommandList::Draw + +```cpp +void Draw(uint32_t vertexCount, uint32_t instanceCount = 1, uint32_t startVertex = 0, uint32_t startInstance = 0) override; +``` + +## 作用 + +发起一次非索引绘制。 + +## 前置条件 + +- 当前 pipeline state 有效 +- 已设置 render target 或显式开始 render pass + +## 当前实现行为 + +- 会先调用内部 `EnsureGraphicsRenderPass()` +- 该步骤可能隐式创建 transient framebuffer 并开始 render pass +- 之后绑定当前 graphics pipeline +- 最终调用 `vkCmdDraw(...)` + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [DrawIndexed](DrawIndexed.md) +- [SetRenderTargets](SetRenderTargets.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/DrawIndexed.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/DrawIndexed.md new file mode 100644 index 00000000..8936f184 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/DrawIndexed.md @@ -0,0 +1,26 @@ +# VulkanCommandList::DrawIndexed + +```cpp +void DrawIndexed(uint32_t indexCount, uint32_t instanceCount = 1, uint32_t startIndex = 0, int32_t baseVertex = 0, uint32_t startInstance = 0) override; +``` + +## 作用 + +发起一次索引绘制。 + +## 当前实现行为 + +- 和 `Draw()` 一样,会先确保 graphics render pass 可用 +- 绑定当前 graphics pipeline +- 最终调用 `vkCmdDrawIndexed(...)` + +## 前置条件 + +- 索引缓冲已经通过 `SetIndexBuffer()` 绑定 +- 当前 pipeline state 与 render target 兼容 + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [Draw](Draw.md) +- [SetIndexBuffer](SetIndexBuffer.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Initialize.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Initialize.md new file mode 100644 index 00000000..105bf63c --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Initialize.md @@ -0,0 +1,27 @@ +# VulkanCommandList::Initialize + +```cpp +bool Initialize(VulkanDevice* device); +``` + +## 作用 + +初始化命令列表,创建 command pool 和一个 primary command buffer。 + +## 当前实现行为 + +- 要求 `device` 和 `device->GetDevice()` 有效 +- 使用 graphics queue family 创建 command pool +- command pool 带 `VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT` +- 只分配一个 `VK_COMMAND_BUFFER_LEVEL_PRIMARY` command buffer + +## 返回值 + +- `true` - 初始化成功 +- `false` - command pool 或 command buffer 分配失败 + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [Reset](Reset.md) +- [Close](Close.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Reset.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Reset.md new file mode 100644 index 00000000..04952f78 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/Reset.md @@ -0,0 +1,26 @@ +# VulkanCommandList::Reset + +```cpp +void Reset() override; +``` + +## 作用 + +重置命令列表并开始新一轮录制。 + +## 当前实现行为 + +- 若存在活跃 render pass,会先结束它 +- 调用 `vkResetCommandPool(...)` +- 销毁由自动 render pass 路径创建的 transient framebuffer +- 清空当前 render target、depth target、pipeline state、viewport/scissor 标记 +- 重新以 `VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT` 开始录制 + +## 使用建议 + +每次正式录制前都应先 `Reset()`,不要假设新创建的命令列表天然处于已开始录制状态。 + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [Close](Close.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetComputeDescriptorSets.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetComputeDescriptorSets.md new file mode 100644 index 00000000..6f80cb6f --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetComputeDescriptorSets.md @@ -0,0 +1,25 @@ +# VulkanCommandList::SetComputeDescriptorSets + +```cpp +void SetComputeDescriptorSets(uint32_t firstSet, uint32_t count, RHIDescriptorSet** descriptorSets, RHIPipelineLayout* pipelineLayout) override; +``` + +## 作用 + +把一组 descriptor set 绑定到 compute bind point。 + +## 当前实现行为 + +- 要求 `pipelineLayout` 显式非空 +- 会收集每个 `VulkanDescriptorSet` 的 native `VkDescriptorSet` +- 最终调用 `vkCmdBindDescriptorSets(..., VK_PIPELINE_BIND_POINT_COMPUTE, ...)` + +## 与 graphics 版本的差异 + +graphics 版本可以从当前 pipeline state 推导 layout;compute 版本当前要求调用方明确传入 pipeline layout。 + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [SetGraphicsDescriptorSets](SetGraphicsDescriptorSets.md) +- [VulkanPipelineLayout](../VulkanPipelineLayout/VulkanPipelineLayout.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetGraphicsDescriptorSets.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetGraphicsDescriptorSets.md new file mode 100644 index 00000000..4824a9dd --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetGraphicsDescriptorSets.md @@ -0,0 +1,27 @@ +# VulkanCommandList::SetGraphicsDescriptorSets + +```cpp +void SetGraphicsDescriptorSets(uint32_t firstSet, uint32_t count, RHIDescriptorSet** descriptorSets, RHIPipelineLayout* pipelineLayout) override; +``` + +## 作用 + +把一组 descriptor set 绑定到 graphics bind point。 + +## 当前实现行为 + +- 要求 command buffer 有效,`descriptorSets` 非空且 `count > 0` +- 如果显式传入 `pipelineLayout`,优先使用它 +- 否则会尝试从当前 `m_currentPipelineState` 推导 native pipeline layout +- 最终调用 `vkCmdBindDescriptorSets(..., VK_PIPELINE_BIND_POINT_GRAPHICS, ...)` + +## 失败条件 + +- pipeline layout 解析失败时会直接返回,不会报错 +- 任意 descriptor set 无效时也会中止绑定 + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [SetComputeDescriptorSets](SetComputeDescriptorSets.md) +- [VulkanDescriptorSet](../VulkanDescriptorSet/VulkanDescriptorSet.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetIndexBuffer.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetIndexBuffer.md new file mode 100644 index 00000000..de5242be --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetIndexBuffer.md @@ -0,0 +1,21 @@ +# VulkanCommandList::SetIndexBuffer + +```cpp +void SetIndexBuffer(RHIResourceView* buffer, uint64_t offset) override; +``` + +## 作用 + +绑定索引缓冲。 + +## 当前实现行为 + +- 要求传入有效的 index buffer 视图 +- 索引格式来自 view 的 `Format` +- 最终调用 `vkCmdBindIndexBuffer(...)` + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [DrawIndexed](DrawIndexed.md) +- [VulkanResourceView](../VulkanResourceView/VulkanResourceView.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetPipelineState.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetPipelineState.md new file mode 100644 index 00000000..435fbf22 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetPipelineState.md @@ -0,0 +1,22 @@ +# VulkanCommandList::SetPipelineState + +```cpp +void SetPipelineState(RHIPipelineState* pso) override; +``` + +## 作用 + +设置当前 draw / dispatch 要使用的 pipeline state。 + +## 当前实现行为 + +- 当前只是把参数向下转为 `VulkanPipelineState*` 后保存到 `m_currentPipelineState` +- 不会立刻绑定到 command buffer +- 真正绑定发生在 `Draw()`、`DrawIndexed()` 或 `Dispatch()` 内部 + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [Draw](Draw.md) +- [Dispatch](Dispatch.md) +- [VulkanPipelineState](../VulkanPipelineState/VulkanPipelineState.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetRenderTargets.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetRenderTargets.md new file mode 100644 index 00000000..2856d7b6 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetRenderTargets.md @@ -0,0 +1,22 @@ +# VulkanCommandList::SetRenderTargets + +```cpp +void SetRenderTargets(uint32_t count, RHIResourceView** renderTargets, RHIResourceView* depthStencil = nullptr) override; +``` + +## 作用 + +设置当前颜色目标和可选深度目标,供后续自动 render pass 路径使用。 + +## 当前实现行为 + +- 只保存当前颜色目标和深度目标指针 +- 当前只真正记录第一个颜色目标 +- 不会立刻创建 framebuffer,也不会立刻开始 render pass +- 真正的 render pass 开始可能延迟到 `Draw()` / `DrawIndexed()` 时由内部 `EnsureGraphicsRenderPass()` 完成 + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [BeginRenderPass](BeginRenderPass.md) +- [Draw](Draw.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetScissorRect.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetScissorRect.md new file mode 100644 index 00000000..5cca3687 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetScissorRect.md @@ -0,0 +1,19 @@ +# VulkanCommandList::SetScissorRect + +```cpp +void SetScissorRect(const Rect& rect) override; +``` + +## 作用 + +设置当前剪裁矩形。 + +## 当前实现行为 + +- 会更新内部 `VkRect2D` +- 同时把 scissor 直接写入当前 command buffer + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [SetViewport](SetViewport.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetVertexBuffers.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetVertexBuffers.md new file mode 100644 index 00000000..741afa52 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetVertexBuffers.md @@ -0,0 +1,26 @@ +# VulkanCommandList::SetVertexBuffers + +```cpp +void SetVertexBuffers(uint32_t startSlot, uint32_t count, RHIResourceView** buffers, const uint64_t* offsets, const uint32_t* strides) override; +``` + +## 作用 + +绑定一组顶点缓冲。 + +## 当前实现行为 + +- 要求传入的是有效的 buffer 类型 `VulkanResourceView` +- 会从每个 view 中取出底层 `VkBuffer` +- 偏移优先取外部 `offsets`,并叠加 view 自身记录的 `bufferOffset` +- 最终调用 `vkCmdBindVertexBuffers(...)` + +## 注意事项 + +- `strides` 参数不会直接传给 Vulkan;实际 stride 主要用于 view / input layout 语义配合 + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [SetIndexBuffer](SetIndexBuffer.md) +- [VulkanResourceView](../VulkanResourceView/VulkanResourceView.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetViewport.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetViewport.md new file mode 100644 index 00000000..1fa52e67 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/SetViewport.md @@ -0,0 +1,21 @@ +# VulkanCommandList::SetViewport + +```cpp +void SetViewport(const Viewport& viewport) override; +``` + +## 作用 + +设置当前 Vulkan viewport。 + +## 当前实现行为 + +- 会把 `y` 设为 `topLeftY + height` +- 会把 `height` 设为负值 +- 这样可以在 Vulkan 中维持与其他后端一致的左上角原点语义 +- 同时把 viewport 直接写入当前 command buffer + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [SetScissorRect](SetScissorRect.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/TransitionBarrier.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/TransitionBarrier.md new file mode 100644 index 00000000..d32313ca --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/TransitionBarrier.md @@ -0,0 +1,26 @@ +# VulkanCommandList::TransitionBarrier + +```cpp +void TransitionBarrier(RHIResourceView* resource, ResourceStates stateBefore, ResourceStates stateAfter) override; +``` + +## 作用 + +请求把资源状态切换到目标状态。 + +## 当前实现行为 + +- 当前主要处理 texture 视图 +- `stateBefore` 在实现里被忽略 +- 真正使用的是 `VulkanTexture` 当前记录的状态和 `stateAfter` +- buffer 状态切换主要走内部专用路径,不通过这个公开接口完成 + +## 影响 + +这意味着当前 barrier 模型是“软件状态跟踪优先”的简化实现,而不是严格校验调用方给出的 before/after。 + +## 相关文档 + +- [VulkanCommandList](VulkanCommandList.md) +- [CopyResource](CopyResource.md) +- [VulkanTexture](../VulkanTexture/VulkanTexture.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/VulkanCommandList.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/VulkanCommandList.md new file mode 100644 index 00000000..61b718bb --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandList/VulkanCommandList.md @@ -0,0 +1,187 @@ +# VulkanCommandList + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanCommandList.h` + +**描述**: Vulkan 后端里的 `RHICommandList` 实现,封装一个 primary `VkCommandBuffer`,负责录制 draw、dispatch、clear、copy、barrier 与 descriptor 绑定。 + +## 概览 + +`VulkanCommandList` 是 Vulkan 后端最直接面向 GPU 录制语义的类。它和抽象层的 [RHICommandList](../../RHICommandList/RHICommandList.md) 一一对应,但实现上保留了当前引擎自己的工程取舍。 + +当前版本有两个很重要的特点: + +- 它既支持显式 `BeginRenderPass()` / `EndRenderPass()` 路径,也支持 `SetRenderTargets()` 后在绘制时懒创建 transient framebuffer 的路径。 +- 它维持的是“对上层更友好”的 RHI 约定,而不是完全照搬 Vulkan 原生用法,例如 viewport 会通过负高度翻转来维持左上角原点语义。 + +这和很多商业引擎的 backend 包装思路一致:不把 Vulkan 原始复杂度直接暴露给上层,而是在 backend 内部吃掉坐标系、render pass 和状态转换的差异。 + +## 生命周期 + +推荐使用顺序: + +1. 由 [VulkanDevice](../VulkanDevice/VulkanDevice.md) 创建命令列表 +2. `Initialize(VulkanDevice*)` +3. 每帧或每次录制前 `Reset()` +4. 录制资源状态、绑定与 draw / dispatch / clear / copy +5. `Close()` +6. 交给 [VulkanCommandQueue](../VulkanCommandQueue/VulkanCommandQueue.md) 提交 +7. 不再使用时 `Shutdown()` + +当前实现里: + +- `Initialize()` 创建一个 command pool 和一个 primary command buffer +- `Reset()` 会 `vkResetCommandPool()`,清空暂存 framebuffer,并重新 `vkBeginCommandBuffer()` +- `Close()` 会结束活跃 render pass,并在当前颜色目标是交换链图像时把它转到 `Present` +- `Shutdown()` 会销毁 command pool,并释放 command buffer + +## 当前实现的真实行为 + +### 命令缓冲模型 + +- 每个 `VulkanCommandList` 只拥有一个 primary `VkCommandBuffer` +- 没有 secondary command buffer 或 bundle 抽象 +- command pool 使用 `VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT` +- `Reset()` 使用 `VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT` 开始录制 + +因此它更接近“短生命周期、一次性录制”的命令列表模型。 + +### render pass 两条路径并存 + +当前图形录制有两条路径: + +1. 显式路径:`BeginRenderPass(renderPass, framebuffer, ...)` +2. 便捷路径:`SetRenderTargets()` 后,在 `Draw()` / `DrawIndexed()` 前由 `EnsureGraphicsRenderPass()` 自动创建临时 framebuffer 并开始 render pass + +这对上层调用很方便,但也意味着两套语义并存。工程上最好在同一条渲染路径里保持一致,不要一会儿显式 render pass,一会儿依赖懒创建路径。 + +### 资源状态转换 + +- `TransitionBarrier()` 当前只真正处理 texture 视图 +- `stateBefore` 参数在实现里被显式忽略 +- 实际转换更依赖 `VulkanTexture` 内部记录的当前状态 + +这说明当前 barrier 模型是“软件跟踪状态 + backend 内部翻译”的简化实现,不是完全按照调用方给出的 before/after 做严格校验。 + +### shader 与 pipeline + +- `SetShader()` 当前是 no-op +- 真正影响 draw / dispatch 的是 `SetPipelineState()` +- `Draw()` / `DrawIndexed()` 会在确认 render pass 有效后直接绑定 `m_currentPipelineState->GetPipeline()` +- `Dispatch()` 会要求当前 pipeline state 拥有 compute shader,并先 `EnsureValid()` + +因此对 Vulkan 后端来说,`SetShader()` 只是保留抽象层接口兼容性,实际录制应以 pipeline state 为中心。 + +### descriptor 绑定 + +- `SetGraphicsDescriptorSets()` 可以从显式传入的 `pipelineLayout`,或当前 `m_currentPipelineState` 推导 native pipeline layout +- `SetComputeDescriptorSets()` 要求调用方显式传入 `pipelineLayout` +- 两者最终都用 `vkCmdBindDescriptorSets()` + +这和 Vulkan 原生模型一致:descriptor set 绑定必须匹配 pipeline layout。 + +### 固定功能状态 + +- `SetViewport()` 会把 `y` 设为 `topLeftY + height`,并把 `height` 设为负值 +- 这样可以让上层继续使用和 D3D12/OpenGL 接近的左上角原点语义 +- `SetViewports()` / `SetScissorRects()` 当前只取第一个元素 +- `SetStencilRef()` 与 `SetBlendFactor()` 当前都是 no-op + +这体现了当前 RHI 的设计取向:优先维持跨后端的一致调用体验,其次再补完 Vulkan 的细粒度状态控制。 + +### clear / copy / dispatch + +- `Clear()`、`ClearRenderTarget()`、`ClearDepthStencil()` 会结束当前 render pass,并通过 `vkCmdClearColorImage()` / `vkCmdClearDepthStencilImage()` 直接清图 +- `CopyResource()` 当前覆盖了 texture-to-texture 与 buffer-to-buffer 路径 +- `Dispatch()` 会先结束活跃 render pass,再切到 compute pipeline bind point + +这说明当前实现已经支持基础 graphics + compute 混合录制,但不是更高级的 render graph 调度模型。 + +## 线程语义 + +从实现看,`VulkanCommandList` 没有内部同步原语。更可靠的使用方式是: + +- 同一个命令列表对象一次只在一个线程录制 +- `Reset()`、录制、`Close()` 由调用方串行完成 +- 提交后不要在 GPU 仍可能使用该命令缓冲时立刻跨线程复用它 + +## 所有权与临时资源 + +- 命令列表拥有自己的 command pool 和 command buffer +- 通过 `EnsureGraphicsRenderPass()` 创建的 transient framebuffer 由命令列表暂存,并在 `Reset()` / `Shutdown()` 时销毁 +- 当前颜色/深度目标只是借用指针,不拥有对应 texture / view + +这很像商业引擎里常见的“命令列表拥有短命 backend 辅助对象,但不拥有上层资源”的模式。 + +## 设计取向 + +`VulkanCommandList` 的实现不是“把 Vulkan API 原样套壳”,而是有明显的工程化折中: + +- 保留 RHI 统一接口,减少上层为后端分支代码 +- 在 backend 内部处理 viewport 翻转与 render pass 拼装 +- 用软件状态跟踪简化 barrier 使用 + +好处是上层更容易写出跨后端测试和样例;代价是 Vulkan 高级能力目前没有全部暴露,某些接口行为也比名字看起来更受限。 + +如果拿 Unity 对照,可以把它理解成更靠近 SRP backend 内部 command recording 层,而不是把 Vulkan command buffer 语义原封不动扔给业务层。 + +## 当前限制 + +- 只封装一个 primary command buffer +- `SetShader()` 当前无效果 +- `TransitionBarrier()` 忽略 `stateBefore` +- `SetViewports()` / `SetScissorRects()` 只使用第一个元素 +- `SetStencilRef()` / `SetBlendFactor()` 当前无效果 +- 自动 render pass 路径只围绕当前颜色目标和可选深度目标工作 + +## 主要公开方法 + +- `bool Initialize(VulkanDevice* device)` +- `void Shutdown()` +- `void Reset()` +- `void Close()` +- `void TransitionBarrier(RHIResourceView* resource, ResourceStates stateBefore, ResourceStates stateAfter)` +- `void BeginRenderPass(RHIRenderPass* renderPass, RHIFramebuffer* framebuffer, const Rect& renderArea, uint32_t clearValueCount, const ClearValue* clearValues)` +- `void EndRenderPass()` +- `void SetShader(RHIShader* shader)` +- `void SetPipelineState(RHIPipelineState* pso)` +- `void SetGraphicsDescriptorSets(...)` +- `void SetComputeDescriptorSets(...)` +- `void SetPrimitiveTopology(PrimitiveTopology topology)` +- `void SetViewport(const Viewport& viewport)` +- `void SetViewports(uint32_t count, const Viewport* viewports)` +- `void SetScissorRect(const Rect& rect)` +- `void SetScissorRects(uint32_t count, const Rect* rects)` +- `void SetRenderTargets(uint32_t count, RHIResourceView** renderTargets, RHIResourceView* depthStencil = nullptr)` +- `void SetVertexBuffers(...)` +- `void SetIndexBuffer(RHIResourceView* buffer, uint64_t offset)` +- `void Draw(...)` +- `void DrawIndexed(...)` +- `void Clear(...)` +- `void ClearRenderTarget(...)` +- `void ClearDepthStencil(...)` +- `void CopyResource(RHIResourceView* dst, RHIResourceView* src)` +- `void Dispatch(uint32_t x, uint32_t y, uint32_t z)` + +## 相关测试与使用线索 + +- `tests/RHI/unit/test_command_list.cpp` 覆盖了抽象命令列表的大部分基础行为 +- `tests/RHI/unit/test_vulkan_graphics.cpp` 直接验证了 Vulkan render pass、framebuffer、copy、graphics pipeline 与 compute dispatch 路径 +- `tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp` 展示了交换链回读、render target 设置和提交流程 + +## 相关指南 + +- [Devices, Queues, Command Lists, And Resource Creation](../../../../_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md) + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanDevice](../VulkanDevice/VulkanDevice.md) +- [VulkanCommandQueue](../VulkanCommandQueue/VulkanCommandQueue.md) +- [VulkanPipelineState](../VulkanPipelineState/VulkanPipelineState.md) +- [VulkanRenderPass](../VulkanRenderPass/VulkanRenderPass.md) +- [VulkanFramebuffer](../VulkanFramebuffer/VulkanFramebuffer.md) +- [RHICommandList](../../RHICommandList/RHICommandList.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/ExecuteCommandLists.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/ExecuteCommandLists.md new file mode 100644 index 00000000..49e8864a --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/ExecuteCommandLists.md @@ -0,0 +1,36 @@ +# VulkanCommandQueue::ExecuteCommandLists + +```cpp +void ExecuteCommandLists(uint32_t count, void** lists) override; +``` + +## 作用 + +提交一组 `VulkanCommandList` 到当前 `VkQueue` 执行。 + +## 前置条件 + +- 队列已经初始化 +- `lists` 中的命令列表已经完成录制并 `Close()` + +## 当前实现行为 + +- 会遍历输入数组,筛出有效的 `VkCommandBuffer` +- 用一个 `VkSubmitInfo` 提交全部命令缓冲 +- 提交后立即调用 `vkQueueWaitIdle()` +- 成功提交流程后 `m_currentFrame` 自增 + +## 注意事项 + +当前实现是同步提交模型,不是多帧并发的异步提交模型。 + +## 参数 + +- `count` - 输入命令列表数量 +- `lists` - 命令列表数组,元素应能向下转为 `VulkanCommandList` + +## 相关文档 + +- [VulkanCommandQueue](VulkanCommandQueue.md) +- [WaitForIdle](WaitForIdle.md) +- [VulkanCommandList](../VulkanCommandList/VulkanCommandList.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/GetCompletedValue.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/GetCompletedValue.md new file mode 100644 index 00000000..8f8b7740 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/GetCompletedValue.md @@ -0,0 +1,23 @@ +# VulkanCommandQueue::GetCompletedValue + +```cpp +uint64_t GetCompletedValue() override; +``` + +## 作用 + +返回当前队列记录的完成值。 + +## 当前实现行为 + +- 当前直接返回 `m_currentFrame` +- 这个值在 `ExecuteCommandLists()` 提交并 `WaitIdle()` 之后自增 + +## 解释 + +它表示的是“本地已完成的提交计数”,不是 Vulkan 驱动侧某个原生同步对象的完成值。 + +## 相关文档 + +- [VulkanCommandQueue](VulkanCommandQueue.md) +- [ExecuteCommandLists](ExecuteCommandLists.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/Initialize.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/Initialize.md new file mode 100644 index 00000000..791a1ff5 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/Initialize.md @@ -0,0 +1,30 @@ +# VulkanCommandQueue::Initialize + +```cpp +bool Initialize(VulkanDevice* device, CommandQueueType type); +``` + +## 作用 + +把命令队列对象绑定到 Vulkan 设备和一个抽象队列类型。 + +## 当前实现行为 + +- 要求 `device` 非空且 `device->GetGraphicsQueue()` 有效 +- 保存 `m_device` +- 把 `m_queue` 直接设为 `device->GetGraphicsQueue()` +- 保存 `m_type` + +## 重要限制 + +虽然方法接收 `CommandQueueType`,但当前底层总是使用 graphics queue,不会区分独立的 compute / copy queue。 + +## 返回值 + +- `true` - 初始化成功 +- `false` - 设备或原生队列无效 + +## 相关文档 + +- [VulkanCommandQueue](VulkanCommandQueue.md) +- [ExecuteCommandLists](ExecuteCommandLists.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/Signal.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/Signal.md new file mode 100644 index 00000000..1fd8f429 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/Signal.md @@ -0,0 +1,20 @@ +# VulkanCommandQueue::Signal + +```cpp +void Signal(RHIFence* fence, uint64_t value) override; +``` + +## 作用 + +向抽象 fence 写入一个完成值。 + +## 当前实现行为 + +- 当前不会向 Vulkan native fence 或 semaphore 发信号 +- 如果 `fence != nullptr`,只是转发调用 `fence->Signal(value)` + +## 相关文档 + +- [VulkanCommandQueue](VulkanCommandQueue.md) +- [Wait](Wait.md) +- [VulkanFence](../VulkanFence/VulkanFence.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/VulkanCommandQueue.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/VulkanCommandQueue.md new file mode 100644 index 00000000..f77d50c7 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/VulkanCommandQueue.md @@ -0,0 +1,120 @@ +# VulkanCommandQueue + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanCommandQueue.h` + +**描述**: Vulkan 后端里的 `RHICommandQueue` 实现,负责把 `VulkanCommandList` 提交到 `VkQueue` 执行。 + +## 概览 + +在抽象层里,[RHICommandQueue](../../RHICommandQueue/RHICommandQueue.md) 代表“命令提交入口”。在 Vulkan 后端中,`VulkanCommandQueue` 把这个概念落到一个 `VkQueue` 上,并承担提交、等待空闲和轻量 fence 协调。 + +它的职责边界比较清晰: + +- 不负责录制命令,只负责提交已关闭的 [VulkanCommandList](../VulkanCommandList/VulkanCommandList.md) +- 不负责交换链图像获取,那属于 [VulkanSwapChain](../VulkanSwapChain/VulkanSwapChain.md) +- 不实现复杂调度、并发提交或跨队列同步 + +## 生命周期 + +推荐顺序是: + +1. 由 [VulkanDevice](../VulkanDevice/VulkanDevice.md) 创建队列 +2. 调用 `Initialize(VulkanDevice*, CommandQueueType)` +3. 多次 `ExecuteCommandLists()` +4. 退出前调用 `WaitForIdle()` +5. 最后 `Shutdown()` + +按当前实现,`Shutdown()` 只是清空内部句柄与帧计数,不会销毁 Vulkan device 本身。 + +## 当前实现的真实行为 + +### 队列类型与 native queue 的对应关系 + +- `Initialize(device, type)` 会保存 `type` +- 但实际拿到的 native queue 始终是 `device->GetGraphicsQueue()` + +这意味着当前 `CommandQueueType` 更像“抽象层标签”,不是严格映射到不同的 Vulkan queue family。即使创建的是 compute 或 copy 队列,底层当前仍然走 graphics queue。 + +### 提交行为 + +`ExecuteCommandLists()` 的实现流程是: + +1. 从传入列表里筛出有效的 `VkCommandBuffer` +2. 组装一个 `VkSubmitInfo` +3. 调用 `vkQueueSubmit()` +4. 立刻调用 `vkQueueWaitIdle()` +5. `m_currentFrame` 自增 + +这说明当前实现是同步提交模型,而不是高吞吐的异步帧管线模型。它更适合测试、原型和早期后端打通,不适合把它误解成“已经完成商业级多帧并发提交”。 + +### Fence 语义 + +- `Signal()` 只是转发到 `RHIFence::Signal(value)` +- `Wait()` 只是转发到 `RHIFence::Wait(value)` +- `GetCompletedValue()` 返回的是 `m_currentFrame` +- `WaitForPreviousFrame()` 当前是空实现 + +结合 [VulkanFence](../VulkanFence/VulkanFence.md) 的实现看,当前 fence 不是 Vulkan 原生 `VkFence` 时间线同步封装,而是一个轻量软件计数器模型。 + +## 线程语义 + +从当前源码看,`VulkanCommandQueue` 本身没有内部加锁。更安全的使用假设是: + +- 同一个队列对象由调用方串行使用 +- 命令列表关闭后再提交 +- 不要在多个线程上同时对同一个队列做提交与等待 + +商业引擎里真正复杂的多线程提交通常会放在 render scheduler 或 frame graph 层,而不是直接压在 queue 包装类本身。 + +## 设计取向 + +这个类的设计明显偏向“让抽象层测试先跑通”: + +- 好处是行为直接、调试容易、后端差异小 +- 代价是每次提交都会 `WaitIdle()`,吞吐量和 CPU/GPU 并行度都比较弱 + +如果把 Unity 作类比,它更像引擎内部一条被严格串行化的 backend submit lane,而不是已经具备 frame overlap、parallel submit 和 timeline semaphore 协调的成熟提交系统。 + +## 当前限制 + +- 当前所有队列类型都落到同一个 graphics queue +- `ExecuteCommandLists()` 提交后立即阻塞到空闲 +- `WaitForPreviousFrame()` 为空实现 +- `GetCompletedValue()` 代表的是本地提交计数,不是 Vulkan 驱动侧完成值 + +## 主要公开方法 + +- `bool Initialize(VulkanDevice* device, CommandQueueType type)` +- `void Shutdown()` +- `void ExecuteCommandLists(uint32_t count, void** lists)` +- `void Signal(RHIFence* fence, uint64_t value)` +- `void Wait(RHIFence* fence, uint64_t value)` +- `uint64_t GetCompletedValue()` +- `void WaitForIdle()` +- `CommandQueueType GetType() const` +- `uint64_t GetTimestampFrequency() const` +- `void* GetNativeHandle()` +- `void WaitForPreviousFrame()` +- `uint64_t GetCurrentFrame() const` + +## 相关测试与使用线索 + +- `tests/RHI/unit/test_command_queue.cpp` 覆盖了抽象命令队列的创建、提交、完成值与等待接口 +- `tests/RHI/unit/test_device.cpp` 会通过设备创建队列并验证返回值 +- `tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp` 展示了队列与交换链、命令列表的组合使用 + +## 相关指南 + +- [Devices, Queues, Command Lists, And Resource Creation](../../../../_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md) + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanDevice](../VulkanDevice/VulkanDevice.md) +- [VulkanCommandList](../VulkanCommandList/VulkanCommandList.md) +- [VulkanFence](../VulkanFence/VulkanFence.md) +- [RHICommandQueue](../../RHICommandQueue/RHICommandQueue.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/Wait.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/Wait.md new file mode 100644 index 00000000..244e97f2 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/Wait.md @@ -0,0 +1,24 @@ +# VulkanCommandQueue::Wait + +```cpp +void Wait(RHIFence* fence, uint64_t value) override; +``` + +## 作用 + +等待抽象 fence 至少达到目标值。 + +## 当前实现行为 + +- 当前不会做 Vulkan queue 级别的原生等待 +- 如果 `fence != nullptr`,只是转发 `fence->Wait(value)` + +## 注意事项 + +结合当前 `VulkanFence` 的实现,这更接近软件计数器同步,而不是 GPU 真正阻塞等待。 + +## 相关文档 + +- [VulkanCommandQueue](VulkanCommandQueue.md) +- [Signal](Signal.md) +- [VulkanFence](../VulkanFence/VulkanFence.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/WaitForIdle.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/WaitForIdle.md new file mode 100644 index 00000000..4ccf4296 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommandQueue/WaitForIdle.md @@ -0,0 +1,24 @@ +# VulkanCommandQueue::WaitForIdle + +```cpp +void WaitForIdle() override; +``` + +## 作用 + +阻塞直到当前 `VkQueue` 空闲。 + +## 当前实现行为 + +- 如果 `m_queue` 有效,直接调用 `vkQueueWaitIdle(m_queue)` + +## 使用场景 + +- 交换链重建前 +- 截图或调试路径需要强制同步时 +- 关停设备或销毁依赖资源前 + +## 相关文档 + +- [VulkanCommandQueue](VulkanCommandQueue.md) +- [ExecuteCommandLists](ExecuteCommandLists.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanCommon/VulkanCommon.md b/docs/api/XCEngine/RHI/Vulkan/VulkanCommon/VulkanCommon.md new file mode 100644 index 00000000..054dc638 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanCommon/VulkanCommon.md @@ -0,0 +1,83 @@ +# VulkanCommon + +**命名空间**: `XCEngine::RHI` + +**类型**: `utility header` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanCommon.h` + +**描述**: Vulkan 后端共享的公共内联工具头,集中定义平台开关、字符串转换以及 RHI 枚举到 Vulkan 枚举的翻译函数。 + +## 概览 + +`VulkanCommon.h` 不是资源对象或系统类,而是整个 Vulkan backend 的基础工具层。它承担的职责包括: + +- 启用 `VK_USE_PLATFORM_WIN32_KHR` +- 引入 `` +- 提供窄字节 / 宽字节辅助转换 +- 提供 shader stage、格式、拓扑、采样、比较、混合、descriptor、load/store 等转换函数 + +几乎所有 Vulkan backend 类型都会直接或间接依赖这个头。 + +## 当前实现中包含的核心能力 + +### 字符串与 shader stage 辅助 + +- `NarrowAscii(const std::wstring&)` +- `WidenAscii(const char*)` +- `TryResolveShaderTypeFromTarget(const char* target, ShaderType& type)` + +这部分主要服务 shader 编译与 shader module 初始化路径。 + +### 格式与图像相关转换 + +- `ToVulkanFormat(Format)` +- `ToRHIFormat(VkFormat)` +- `GetFormatSize(Format)` +- `GetImageAspectMask(Format)` + +这部分直接影响 texture、resource view、render pass 和截图逻辑。 + +### 图形状态转换 + +文件中还包含大量 RHI 到 Vulkan 的枚举映射,例如: + +- primitive topology +- polygon mode +- cull mode +- front face +- compare op +- blend factor / blend op +- sampler filter / address mode +- descriptor type / shader stage flags +- attachment load / store op +- index type + +这些函数本质上是 Vulkan backend 的“词典层”。 + +## 设计取向 + +把 backend 共享的转换逻辑集中放在一个公共头里,是很常见的商业引擎做法: + +- 好处是翻译规则集中、复用高、后续修订不容易遗漏 +- 代价是这个头会变成很多 Vulkan 类型的基础依赖 + +## 当前限制 + +- 当前平台宏默认走 Win32 +- 这里只提供转换与辅助,不负责资源生命周期或错误恢复 +- 如果 RHI 枚举继续扩展,这里的映射函数也要同步补齐 + +## 典型使用位置 + +- [VulkanDevice](../VulkanDevice/VulkanDevice.md) +- [VulkanCommandList](../VulkanCommandList/VulkanCommandList.md) +- [VulkanPipelineState](../VulkanPipelineState/VulkanPipelineState.md) +- [VulkanResourceView](../VulkanResourceView/VulkanResourceView.md) +- [VulkanShaderCompiler](../VulkanShaderCompiler/VulkanShaderCompiler.md) + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [RHIEnums](../../RHIEnums/RHIEnums.md) +- [RHITypes](../../RHITypes/RHITypes.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDescriptorPool/VulkanDescriptorPool.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDescriptorPool/VulkanDescriptorPool.md new file mode 100644 index 00000000..3bb2ade1 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDescriptorPool/VulkanDescriptorPool.md @@ -0,0 +1,81 @@ +# VulkanDescriptorPool + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanDescriptorPool.h` + +**描述**: Vulkan 后端里的 `RHIDescriptorPool` 实现,负责创建 `VkDescriptorPool`,并从中分配 `VulkanDescriptorSet`。 + +## 概览 + +`VulkanDescriptorPool` 是 descriptor set 的分配器。当前实现里,它主要解决两件事: + +- 按 heap 类型创建一个 `VkDescriptorPool` +- 根据传入 layout 即时创建 descriptor set layout,并分配一个 `VulkanDescriptorSet` + +## 当前实现的真实行为 + +### 支持的 pool 类型 + +`Initialize()` 当前只覆盖两类 `DescriptorHeapType`: + +- `CBV_SRV_UAV` +- `Sampler` + +其中: + +- `CBV_SRV_UAV` 会同时为 `UNIFORM_BUFFER`、`SAMPLED_IMAGE`、`STORAGE_IMAGE` 预留描述符容量 +- `Sampler` 只为 `VK_DESCRIPTOR_TYPE_SAMPLER` 预留容量 + +### 分配策略 + +`AllocateSet(layout)` 的当前流程是: + +1. 先根据 `DescriptorSetLayoutDesc` 临时构建一个 `VkDescriptorSetLayout` +2. 再从 pool 分配一个 `VkDescriptorSet` +3. 最后创建 `VulkanDescriptorSet` + +也就是说,当前 descriptor set layout 不是被统一缓存复用的,而是“分配一个 set,就顺手创建一份 layout”。 + +### 销毁策略 + +- `Shutdown()` 会清空已分配 set 列表,并销毁 `VkDescriptorPool` +- `FreeSet()` 会把目标 set 从列表中移除并 `delete` +- 真正的 descriptor set 与 descriptor set layout 释放,由 `VulkanDescriptorSet::Shutdown()` 完成 + +## 线程语义 + +没有内部锁。分配与释放应由调用方串行协调。 + +## 设计取向 + +当前实现优先的是“descriptor set 能快速用起来”,而不是“descriptor layout / pool 有完善的缓存和复用体系”: + +- 优点是实现简单,便于抽象层先跑通 +- 代价是 layout 创建频率高,资源复用策略比较初级 + +## 当前限制 + +- 当前只覆盖 `CBV_SRV_UAV` 与 `Sampler` 两类 pool +- 每次 `AllocateSet()` 都会新建一个 `VkDescriptorSetLayout` +- 没有更高级的池分段、碎片管理或 layout 缓存 + +## 主要公开方法 + +- `bool Initialize(VkDevice device, const DescriptorPoolDesc& desc)` +- `bool Initialize(const DescriptorPoolDesc& desc)` +- `void Shutdown()` +- `void* GetNativeHandle()` +- `uint32_t GetDescriptorCount() const` +- `DescriptorHeapType GetType() const` +- `RHIDescriptorSet* AllocateSet(const DescriptorSetLayoutDesc& layout)` +- `void FreeSet(RHIDescriptorSet* set)` + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanDescriptorSet](../VulkanDescriptorSet/VulkanDescriptorSet.md) +- [VulkanPipelineLayout](../VulkanPipelineLayout/VulkanPipelineLayout.md) +- [RHIDescriptorPool](../../RHIDescriptorPool/RHIDescriptorPool.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDescriptorSet/VulkanDescriptorSet.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDescriptorSet/VulkanDescriptorSet.md new file mode 100644 index 00000000..f09b5e5e --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDescriptorSet/VulkanDescriptorSet.md @@ -0,0 +1,109 @@ +# VulkanDescriptorSet + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanDescriptorSet.h` + +**描述**: Vulkan 后端里的 `RHIDescriptorSet` 实现,封装 `VkDescriptorSet`,并提供 image、sampler 与常量缓冲更新逻辑。 + +## 概览 + +`VulkanDescriptorSet` 是当前 Vulkan 后端里真正承载资源绑定内容的对象。它既保存布局绑定信息,也负责把资源写入 `VkDescriptorSet`。 + +## 当前实现的真实行为 + +### 初始化 + +初始化时会保存: + +- 所属 `VulkanDescriptorPool` +- `VkDescriptorSetLayout` +- `VkDescriptorSet` +- 深拷贝后的 layout bindings +- binding 到索引的映射表 + +### `Bind()` / `Unbind()` + +这两个接口当前都是 no-op。真正把 descriptor set 送进命令缓冲的动作,发生在 [VulkanCommandList](../VulkanCommandList/VulkanCommandList.md) 的 `SetGraphicsDescriptorSets()` / `SetComputeDescriptorSets()` 中。 + +### 资源更新能力边界 + +`Update(offset, view)` 当前只处理 image 类描述符: + +- 需要 `VulkanResourceView` 持有有效 `VkImageView` +- 会按 binding 类型写入 sampled image 或 storage image + +它不负责一般 buffer SRV/UAV 的完整 typed/structured buffer 描述符体系。 + +`UpdateSampler(offset, sampler)` 当前处理 sampler 描述符: + +- 要求 binding 类型是 `DescriptorType::Sampler` +- 要求传入有效 `VulkanSampler` + +### 常量写入 + +`WriteConstant(binding, data, size, offset)` 是当前实现里最值得注意的部分: + +- 只对 `DescriptorType::CBV` 生效 +- 每个常量 binding 会维护一个 `ConstantBindingRecord` +- 当需要时,会动态创建一块 `VulkanBuffer` +- 这块 buffer 用 `VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT` 和 host-visible / host-coherent 内存创建 +- 然后把常量数据写进去,并更新 descriptor + +因此当前 CBV 路径并不是绑定一块外部统一管理的大常量缓冲,而是“descriptor set 自己为每个 binding 管一块小 buffer”。 + +### Dirty 标记 + +- `WriteConstant()` 会把 `m_constantDirty` 置为 `true` +- `MarkConstantClean()` 由外部显式调用清理标记 + +## 线程语义 + +没有内部锁。descriptor 更新应由调用方在安全时机串行完成,避免与命令录制并发修改同一个 set。 + +## 所有权与资源管理 + +- `VulkanDescriptorSet` 拥有自己的 `VkDescriptorSetLayout` +- 拥有 `VkDescriptorSet` +- 还可能拥有为常量 binding 动态分配的 `VulkanBuffer` +- `Shutdown()` 会释放 descriptor set、销毁 layout,并清空常量缓冲记录 + +## 设计取向 + +当前实现明显偏向“先把常见图像、采样器和 CBV 路径跑通”: + +- 优点是 descriptor set 能快速服务当前 graphics / compute 测试 +- 代价是 buffer 描述符体系、资源复用和常量缓冲管理都还比较朴素 + +## 当前限制 + +- `Bind()` / `Unbind()` 无实际行为 +- `Update()` 主要处理 image 描述符 +- `WriteConstant()` 为每个 CBV binding 动态维护小 buffer,不是成熟的统一常量分配器 + +## 主要公开方法 + +- `bool Initialize(VkDevice device, VulkanDescriptorPool* pool, VkDescriptorSetLayout layout, VkDescriptorSet descriptorSet, const DescriptorSetLayoutDesc& desc)` +- `void Shutdown()` +- `void Bind()` +- `void Unbind()` +- `void Update(uint32_t offset, RHIResourceView* view)` +- `void UpdateSampler(uint32_t offset, RHISampler* sampler)` +- `void WriteConstant(uint32_t binding, const void* data, size_t size, size_t offset = 0)` +- `uint32_t GetBindingCount() const` +- `const DescriptorSetLayoutBinding* GetBindings() const` +- `void* GetConstantBufferData()` +- `size_t GetConstantBufferSize() const` +- `bool IsConstantDirty() const` +- `void MarkConstantClean()` + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanDescriptorPool](../VulkanDescriptorPool/VulkanDescriptorPool.md) +- [VulkanSampler](../VulkanSampler/VulkanSampler.md) +- [VulkanResourceView](../VulkanResourceView/VulkanResourceView.md) +- [VulkanCommandList](../VulkanCommandList/VulkanCommandList.md) +- [RHIDescriptorSet](../../RHIDescriptorSet/RHIDescriptorSet.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateBuffer.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateBuffer.md new file mode 100644 index 00000000..e64b73cd --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateBuffer.md @@ -0,0 +1,36 @@ +# VulkanDevice::CreateBuffer + +```cpp +RHIBuffer* CreateBuffer(const BufferDesc& desc) override; +``` + +## 作用 + +创建一个 `VulkanBuffer`,并根据 `BufferDesc` 推导基础 `VkBufferUsageFlags`。 + +## 当前实现行为 + +- 一定会附加 `TRANSFER_DST` 和 `TRANSFER_SRC` +- 根据 `desc.bufferType` 决定附加 `INDEX_BUFFER`、`UNIFORM_BUFFER` 或 `VERTEX_BUFFER` +- 当前默认使用 `HOST_VISIBLE | HOST_COHERENT` 内存属性创建 buffer +- 创建失败时返回 `nullptr` + +## 参数 + +- `desc` - buffer 大小、步长和类型描述 + +## 返回值 + +- `RHIBuffer*` - 实际对象是 `VulkanBuffer` +- `nullptr` - 创建失败 + +## 设计说明 + +当前策略更偏“先易用、先可写”,而不是默认走 device-local 显存分层。 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [VulkanBuffer](../VulkanBuffer/VulkanBuffer.md) +- [CreateVertexBufferView](CreateVertexBufferView.md) +- [CreateIndexBufferView](CreateIndexBufferView.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateCommandList.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateCommandList.md new file mode 100644 index 00000000..d01945ec --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateCommandList.md @@ -0,0 +1,30 @@ +# VulkanDevice::CreateCommandList + +```cpp +RHICommandList* CreateCommandList(const CommandListDesc& desc) override; +``` + +## 作用 + +创建一个 `VulkanCommandList`,用于录制图形或计算命令。 + +## 当前实现行为 + +- 当前实现并不使用 `desc` 里的细分字段 +- 总是创建一个 `VulkanCommandList` +- 内部会调用 `VulkanCommandList::Initialize(this)` +- 失败时返回 `nullptr` + +## 返回值 + +- `RHICommandList*` - 实际对象是 `VulkanCommandList` +- `nullptr` - 创建失败 + +## 注意事项 + +当前每个 `VulkanCommandList` 只持有一个 primary command buffer。 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [VulkanCommandList](../VulkanCommandList/VulkanCommandList.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateCommandQueue.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateCommandQueue.md new file mode 100644 index 00000000..6a85821e --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateCommandQueue.md @@ -0,0 +1,25 @@ +# VulkanDevice::CreateCommandQueue + +```cpp +RHICommandQueue* CreateCommandQueue(const CommandQueueDesc& desc) override; +``` + +## 作用 + +创建一个 `VulkanCommandQueue`,作为命令提交入口。 + +## 当前实现行为 + +- 会把 `desc.queueType` 传给 `VulkanCommandQueue::Initialize(...)` +- 但当前 Vulkan 后端无论队列类型是什么,底层都仍然绑定到 graphics queue +- 创建失败返回 `nullptr` + +## 返回值 + +- `RHICommandQueue*` - 实际对象是 `VulkanCommandQueue` +- `nullptr` - 创建失败 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [VulkanCommandQueue](../VulkanCommandQueue/VulkanCommandQueue.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateDepthStencilView.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateDepthStencilView.md new file mode 100644 index 00000000..d60649f1 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateDepthStencilView.md @@ -0,0 +1,21 @@ +# VulkanDevice::CreateDepthStencilView + +```cpp +RHIResourceView* CreateDepthStencilView(RHITexture* texture, const ResourceViewDesc& desc) override; +``` + +## 作用 + +为纹理创建 depth stencil view。 + +## 当前实现行为 + +- 实际对象是 `VulkanResourceView` +- 会调用 `InitializeAsDepthStencil(...)` +- 成功后持有深度/模板用途的 `VkImageView` + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [CreateTexture](CreateTexture.md) +- [VulkanResourceView](../VulkanResourceView/VulkanResourceView.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateDescriptorPool.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateDescriptorPool.md new file mode 100644 index 00000000..7f413b1b --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateDescriptorPool.md @@ -0,0 +1,22 @@ +# VulkanDevice::CreateDescriptorPool + +```cpp +RHIDescriptorPool* CreateDescriptorPool(const DescriptorPoolDesc& desc) override; +``` + +## 作用 + +创建 Vulkan descriptor pool。 + +## 当前实现行为 + +- 实际对象是 `VulkanDescriptorPool` +- 在初始化前会先设置 `SetDeviceOwner(this)` +- 再调用 `Initialize(m_device, desc)` +- 失败时返回 `nullptr` + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [VulkanDescriptorPool](../VulkanDescriptorPool/VulkanDescriptorPool.md) +- [CreateDescriptorSet](CreateDescriptorSet.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateDescriptorSet.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateDescriptorSet.md new file mode 100644 index 00000000..47f5db51 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateDescriptorSet.md @@ -0,0 +1,26 @@ +# VulkanDevice::CreateDescriptorSet + +```cpp +RHIDescriptorSet* CreateDescriptorSet(RHIDescriptorPool* pool, const DescriptorSetLayoutDesc& layout) override; +``` + +## 作用 + +从指定 descriptor pool 分配一个 descriptor set。 + +## 当前实现行为 + +- 当前只是做一层转发 +- 如果 `pool != nullptr`,直接调用 `pool->AllocateSet(layout)` +- 如果 `pool == nullptr`,返回 `nullptr` + +## 返回值 + +- `RHIDescriptorSet*` - 实际对象通常是 `VulkanDescriptorSet` +- `nullptr` - pool 为空或分配失败 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [VulkanDescriptorPool](../VulkanDescriptorPool/VulkanDescriptorPool.md) +- [VulkanDescriptorSet](../VulkanDescriptorSet/VulkanDescriptorSet.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateFence.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateFence.md new file mode 100644 index 00000000..04d2f8fd --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateFence.md @@ -0,0 +1,19 @@ +# VulkanDevice::CreateFence + +```cpp +RHIFence* CreateFence(const FenceDesc& desc) override; +``` + +## 作用 + +创建 Vulkan 后端的抽象 fence 对象。 + +## 当前实现行为 + +- 当前直接返回 `new VulkanFence(desc.initialValue)` +- 不会创建原生 `VkFence` + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [VulkanFence](../VulkanFence/VulkanFence.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateFramebuffer.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateFramebuffer.md new file mode 100644 index 00000000..08e4d3ff --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateFramebuffer.md @@ -0,0 +1,21 @@ +# VulkanDevice::CreateFramebuffer + +```cpp +RHIFramebuffer* CreateFramebuffer(RHIRenderPass* renderPass, uint32_t width, uint32_t height, uint32_t colorAttachmentCount, RHIResourceView** colorAttachments, RHIResourceView* depthStencilAttachment) override; +``` + +## 作用 + +创建 Vulkan framebuffer。 + +## 当前实现行为 + +- 实际对象是 `VulkanFramebuffer` +- 调用 `Initialize(m_device, renderPass, width, height, colorAttachmentCount, colorAttachments, depthStencilAttachment)` +- 失败时返回 `nullptr` + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [VulkanFramebuffer](../VulkanFramebuffer/VulkanFramebuffer.md) +- [CreateRenderPass](CreateRenderPass.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateIndexBufferView.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateIndexBufferView.md new file mode 100644 index 00000000..0bc89747 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateIndexBufferView.md @@ -0,0 +1,21 @@ +# VulkanDevice::CreateIndexBufferView + +```cpp +RHIResourceView* CreateIndexBufferView(RHIBuffer* buffer, const ResourceViewDesc& desc) override; +``` + +## 作用 + +为指定 buffer 创建索引缓冲视图。 + +## 当前实现行为 + +- 实际对象是 `VulkanResourceView` +- 会调用 `InitializeAsIndexBuffer(...)` +- 视图里会保存索引格式和 buffer 偏移等元数据 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [CreateBuffer](CreateBuffer.md) +- [VulkanResourceView](../VulkanResourceView/VulkanResourceView.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreatePipelineLayout.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreatePipelineLayout.md new file mode 100644 index 00000000..e91ae395 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreatePipelineLayout.md @@ -0,0 +1,25 @@ +# VulkanDevice::CreatePipelineLayout + +```cpp +RHIPipelineLayout* CreatePipelineLayout(const RHIPipelineLayoutDesc& desc) override; +``` + +## 作用 + +创建 Vulkan pipeline layout,把抽象 descriptor 布局翻译为原生 `VkPipelineLayout`。 + +## 当前实现行为 + +- 实际对象类型是 `VulkanPipelineLayout` +- 当前调用的是 `Initialize(m_device, desc)` 这条真实可用路径 +- 初始化失败返回 `nullptr` + +## 返回值 + +- `RHIPipelineLayout*` - 实际对象是 `VulkanPipelineLayout` +- `nullptr` - 创建失败 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [VulkanPipelineLayout](../VulkanPipelineLayout/VulkanPipelineLayout.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreatePipelineState.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreatePipelineState.md new file mode 100644 index 00000000..c05c47fd --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreatePipelineState.md @@ -0,0 +1,26 @@ +# VulkanDevice::CreatePipelineState + +```cpp +RHIPipelineState* CreatePipelineState(const GraphicsPipelineDesc& desc) override; +``` + +## 作用 + +创建 Vulkan pipeline state 对象。 + +## 当前实现行为 + +- 实际对象类型是 `VulkanPipelineState` +- 内部立即调用 `VulkanPipelineState::Initialize(this, desc)` +- graphics 路径会在初始化阶段尝试建立图形管线 +- 失败时返回 `nullptr` + +## 返回值 + +- `RHIPipelineState*` - 实际对象是 `VulkanPipelineState` +- `nullptr` - 创建失败 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [VulkanPipelineState](../VulkanPipelineState/VulkanPipelineState.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateRenderPass.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateRenderPass.md new file mode 100644 index 00000000..b21e57cf --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateRenderPass.md @@ -0,0 +1,21 @@ +# VulkanDevice::CreateRenderPass + +```cpp +RHIRenderPass* CreateRenderPass(uint32_t colorAttachmentCount, const AttachmentDesc* colorAttachments, const AttachmentDesc* depthStencilAttachment) override; +``` + +## 作用 + +创建 Vulkan render pass。 + +## 当前实现行为 + +- 实际对象是 `VulkanRenderPass` +- 调用 `Initialize(m_device, colorAttachmentCount, colorAttachments, depthStencilAttachment)` +- 失败时返回 `nullptr` + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [VulkanRenderPass](../VulkanRenderPass/VulkanRenderPass.md) +- [CreateFramebuffer](CreateFramebuffer.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateRenderTargetView.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateRenderTargetView.md new file mode 100644 index 00000000..e8c6bde6 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateRenderTargetView.md @@ -0,0 +1,21 @@ +# VulkanDevice::CreateRenderTargetView + +```cpp +RHIResourceView* CreateRenderTargetView(RHITexture* texture, const ResourceViewDesc& desc) override; +``` + +## 作用 + +为纹理创建 render target view。 + +## 当前实现行为 + +- 实际对象是 `VulkanResourceView` +- 会调用 `InitializeAsRenderTarget(...)` +- 成功后持有一个 `VkImageView` + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [CreateTexture](CreateTexture.md) +- [VulkanResourceView](../VulkanResourceView/VulkanResourceView.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateSampler.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateSampler.md new file mode 100644 index 00000000..c4946f0c --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateSampler.md @@ -0,0 +1,20 @@ +# VulkanDevice::CreateSampler + +```cpp +RHISampler* CreateSampler(const SamplerDesc& desc) override; +``` + +## 作用 + +创建 Vulkan sampler。 + +## 当前实现行为 + +- 实际对象是 `VulkanSampler` +- 调用 `Initialize(m_device, desc)` +- 失败时返回 `nullptr` + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [VulkanSampler](../VulkanSampler/VulkanSampler.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateShader.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateShader.md new file mode 100644 index 00000000..e49ce69b --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateShader.md @@ -0,0 +1,32 @@ +# VulkanDevice::CreateShader + +```cpp +RHIShader* CreateShader(const ShaderCompileDesc& desc) override; +``` + +## 作用 + +创建 Vulkan shader;如果输入不是原始 SPIR-V,会先经过 Vulkan shader 编译辅助流程。 + +## 当前实现行为 + +- 先构造 `VulkanShader` +- 调用 `CompileVulkanShader(desc, compiledShader, nullptr)` +- 再把编译产物中的 SPIR-V 交给 `VulkanShader::Compile(...)` +- 任一步失败都会删除对象并返回 `nullptr` + +## 返回值 + +- `RHIShader*` - 实际对象是 `VulkanShader` +- `nullptr` - 编译或 module 创建失败 + +## 注意事项 + +- 当前 Vulkan 后端支持 `GLSL` 和 `SPIR-V` +- 当前不支持直接用 HLSL 源码走 Vulkan 路径 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [VulkanShader](../VulkanShader/VulkanShader.md) +- [VulkanShaderCompiler](../VulkanShaderCompiler/VulkanShaderCompiler.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateShaderResourceView.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateShaderResourceView.md new file mode 100644 index 00000000..5a2f2a0c --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateShaderResourceView.md @@ -0,0 +1,21 @@ +# VulkanDevice::CreateShaderResourceView + +```cpp +RHIResourceView* CreateShaderResourceView(RHITexture* texture, const ResourceViewDesc& desc) override; +``` + +## 作用 + +为纹理创建 shader resource view。 + +## 当前实现行为 + +- 实际对象是 `VulkanResourceView` +- 会调用 `InitializeAsShaderResource(...)` +- 当前 image view 路径主要覆盖单 mip、单 layer 的基础使用方式 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [CreateTexture](CreateTexture.md) +- [VulkanResourceView](../VulkanResourceView/VulkanResourceView.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateSwapChain.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateSwapChain.md new file mode 100644 index 00000000..e629a654 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateSwapChain.md @@ -0,0 +1,32 @@ +# VulkanDevice::CreateSwapChain + +```cpp +RHISwapChain* CreateSwapChain(const SwapChainDesc& desc, RHICommandQueue* presentQueue) override; +``` + +## 作用 + +创建 `VulkanSwapChain`,把窗口句柄和呈现队列接入 Vulkan 呈现链路。 + +## 当前实现行为 + +- 会把 `presentQueue` 向下转型为 `VulkanCommandQueue` +- 会把 `desc.windowHandle` 解释为 `HWND__*` +- 内部调用 `VulkanSwapChain::Initialize(...)` +- 失败时返回 `nullptr` + +## 参数 + +- `desc` - 交换链描述,当前主要使用窗口句柄、宽高和 buffer count 语义 +- `presentQueue` - 呈现用命令队列;当前 Vulkan 后端仍然基于 graphics queue + +## 返回值 + +- `RHISwapChain*` - 实际对象是 `VulkanSwapChain` +- `nullptr` - 创建失败 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [VulkanSwapChain](../VulkanSwapChain/VulkanSwapChain.md) +- [CreateCommandQueue](CreateCommandQueue.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateTexture.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateTexture.md new file mode 100644 index 00000000..06c482c3 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateTexture.md @@ -0,0 +1,46 @@ +# VulkanDevice::CreateTexture + +```cpp +RHITexture* CreateTexture(const TextureDesc& desc) override; +RHITexture* CreateTexture(const TextureDesc& desc, const void* initialData, size_t initialDataSize, uint32_t rowPitch = 0) override; +``` + +## 作用 + +创建 Vulkan 纹理;重载版本还会在创建后通过 staging buffer 上传初始数据。 + +## 前置条件 + +- `desc.width` 和 `desc.height` 必须非零 +- `desc.format` 必须能映射到有效 `VkFormat` + +## 当前实现行为 + +### 纯创建版本 + +- 创建自有 `VkImage` +- 会为图像附加当前后端需要的 usage 标志,例如 sampled、transfer、color/depth 或 storage +- 成功后返回 `VulkanTexture` + +### 带初始数据版本 + +- 先调用无初始数据版本创建纹理 +- 若 `initialData` 非空且 `initialDataSize > 0`,会创建 staging buffer 并执行上传 +- 上传成功后会把软件侧状态设置为 `ResourceStates::PixelShaderResource` + +## 返回值 + +- `RHITexture*` - 实际对象是 `VulkanTexture` +- `nullptr` - 创建或上传失败 + +## 注意事项 + +- 当前上传路径是同步录制并提交单次使用命令,不是异步资源导入系统 +- 纹理 view 需要后续再通过 `CreateRenderTargetView()`、`CreateShaderResourceView()` 等接口创建 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [VulkanTexture](../VulkanTexture/VulkanTexture.md) +- [CreateRenderTargetView](CreateRenderTargetView.md) +- [CreateShaderResourceView](CreateShaderResourceView.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateUnorderedAccessView.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateUnorderedAccessView.md new file mode 100644 index 00000000..6e81bacb --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateUnorderedAccessView.md @@ -0,0 +1,21 @@ +# VulkanDevice::CreateUnorderedAccessView + +```cpp +RHIResourceView* CreateUnorderedAccessView(RHITexture* texture, const ResourceViewDesc& desc) override; +``` + +## 作用 + +为纹理创建 unordered access view。 + +## 当前实现行为 + +- 实际对象是 `VulkanResourceView` +- 会调用 `InitializeAsUnorderedAccess(...)` +- 当前主要服务 compute shader 对 storage image 的访问 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [CreateTexture](CreateTexture.md) +- [VulkanResourceView](../VulkanResourceView/VulkanResourceView.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateVertexBufferView.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateVertexBufferView.md new file mode 100644 index 00000000..9e753d2b --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/CreateVertexBufferView.md @@ -0,0 +1,21 @@ +# VulkanDevice::CreateVertexBufferView + +```cpp +RHIResourceView* CreateVertexBufferView(RHIBuffer* buffer, const ResourceViewDesc& desc) override; +``` + +## 作用 + +为指定 buffer 创建顶点缓冲视图。 + +## 当前实现行为 + +- 实际对象是 `VulkanResourceView` +- 会调用 `InitializeAsVertexBuffer(...)` +- 当前不会创建 `VkBufferView`,而是保存 buffer 指针、偏移、大小和步长信息 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [CreateBuffer](CreateBuffer.md) +- [VulkanResourceView](../VulkanResourceView/VulkanResourceView.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/FindMemoryType.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/FindMemoryType.md new file mode 100644 index 00000000..a34edf6b --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/FindMemoryType.md @@ -0,0 +1,33 @@ +# VulkanDevice::FindMemoryType + +```cpp +uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties) const; +``` + +## 作用 + +在当前物理设备的内存类型表里查找满足条件的内存类型索引。 + +## 当前实现行为 + +- 会遍历物理设备暴露的 memory types +- 要求索引命中 `typeFilter` +- 同时要求该类型包含调用方请求的 `properties` +- 找不到时返回 `UINT32_MAX` + +## 使用场景 + +- `VulkanBuffer` 分配内存 +- 纹理与 staging 资源分配内存 +- 截图 readback staging buffer 分配 + +## 返回值 + +- 有效索引 - 可直接写入 `VkMemoryAllocateInfo::memoryTypeIndex` +- `UINT32_MAX` - 没找到匹配项 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [CreateBuffer](CreateBuffer.md) +- [CreateTexture](CreateTexture.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/Initialize.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/Initialize.md new file mode 100644 index 00000000..69c058f5 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/Initialize.md @@ -0,0 +1,41 @@ +# VulkanDevice::Initialize + +```cpp +bool Initialize(const RHIDeviceDesc& desc) override; +``` + +## 作用 + +初始化 Vulkan 后端设备根对象,建立 `VkInstance`、选择物理设备、创建逻辑设备和图形队列,并填充设备信息缓存。 + +## 前置条件 + +- 进程环境里能加载 Vulkan runtime +- 当前平台路径需要支持 Win32 surface 扩展 +- 如果对象已经初始化过,当前实现会直接返回 `true` + +## 当前实现行为 + +- 会先保存 `desc` +- 按顺序调用 `CreateInstance()`、`PickPhysicalDevice()`、`CreateLogicalDevice()`、`QueryDeviceInfo()` +- 任一步失败都会调用 `Shutdown()` 回滚,并返回 `false` +- `desc.enableDebugLayer` 和 `desc.enableGPUValidation` 当前不会真正启用 Vulkan validation layers + +## 参数 + +- `desc` - 设备初始化描述;当前会被保存,但其中调试层相关开关尚未真正接线 + +## 返回值 + +- `true` - 初始化完成,后续可以创建队列、命令列表、交换链与资源 +- `false` - 初始化失败,设备对象会尽量回滚到未初始化状态 + +## 线程语义 + +应在渲染初始化阶段由单线程调用,不要并发初始化同一个设备对象。 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [Shutdown](Shutdown.md) +- [FindMemoryType](FindMemoryType.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/Shutdown.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/Shutdown.md new file mode 100644 index 00000000..67b6e640 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/Shutdown.md @@ -0,0 +1,29 @@ +# VulkanDevice::Shutdown + +```cpp +void Shutdown() override; +``` + +## 作用 + +释放 `VulkanDevice` 持有的 Vulkan 根对象,并把内部状态重置为未初始化。 + +## 当前实现行为 + +- 会销毁逻辑设备、实例以及相关缓存状态 +- 会清空图形队列句柄、队列族索引、设备信息和 capability 缓存 +- 析构函数也会调用 `Shutdown()` + +## 使用建议 + +- 在调用它之前,先销毁由该设备创建出来的队列、交换链、命令列表、资源和状态对象 +- 不要把它当成“热重载设备”的轻量操作,它属于完整关停路径 + +## 线程语义 + +应由调用方保证没有其他线程仍在使用该设备创建的对象。 + +## 相关文档 + +- [VulkanDevice](VulkanDevice.md) +- [Initialize](Initialize.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/VulkanDevice.md b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/VulkanDevice.md new file mode 100644 index 00000000..4aa35f6c --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanDevice/VulkanDevice.md @@ -0,0 +1,153 @@ +# VulkanDevice + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanDevice.h` + +**描述**: Vulkan 后端里的 `RHIDevice` 实现,负责创建 `VkInstance`、选择物理设备、创建逻辑设备,并作为 Vulkan 资源工厂的根入口。 + +## 概览 + +如果把抽象层里的 [RHIDevice](../../RHIDevice/RHIDevice.md) 理解成“跨后端的设备契约”,那么 `VulkanDevice` 就是这份契约在 Vulkan 上的具体落地。 + +它承担三类职责: + +- 建立 Vulkan 运行时根对象:`VkInstance`、`VkPhysicalDevice`、`VkDevice`、图形队列与队列族索引。 +- 把 RHI 抽象描述翻译为 Vulkan 对象:buffer、texture、swap chain、pipeline、descriptor、render pass、framebuffer 等都从这里创建。 +- 提供 Vulkan 专属查询能力:例如 `GetInstance()`、`GetPhysicalDevice()`、`GetDevice()`、`GetGraphicsQueue()`、`FindMemoryType()`。 + +这类设计和商业引擎里的 backend device 很接近。上层系统不应直接依赖 Vulkan 原生对象做资源管理,而应把 `VulkanDevice` 当成 Vulkan 后端的“实现根”。 + +## 生命周期 + +推荐顺序是: + +1. 默认构造 `VulkanDevice` +2. 调用 `Initialize(const RHIDeviceDesc&)` +3. 通过设备创建队列、命令列表、交换链、资源与状态对象 +4. 先释放由设备创建出来的对象 +5. 最后调用 `Shutdown()` + +按 `engine/src/RHI/Vulkan/VulkanDevice.cpp` 的当前实现,`Initialize()` 的内部顺序固定为: + +1. `CreateInstance()` +2. `PickPhysicalDevice()` +3. `CreateLogicalDevice()` +4. `QueryDeviceInfo()` + +如果中途失败,会调用 `Shutdown()` 做回滚。析构函数也会调用 `Shutdown()`,因此“忘记显式关停”通常不会泄漏根对象,但工程上仍应把显式 `Shutdown()` 视为标准用法。 + +## 当前实现的真实行为 + +### 设备初始化与平台边界 + +- `CreateInstance()` 当前固定请求 `VK_KHR_SURFACE_EXTENSION_NAME` 和 `VK_KHR_WIN32_SURFACE_EXTENSION_NAME`。 +- 这说明当前公开实现是 Win32 路径,不是跨平台 surface 创建实现。 +- `RHIDeviceDesc` 里的 `enableDebugLayer` 和 `enableGPUValidation` 会被保存,但当前 `CreateInstance()` / `CreateLogicalDevice()` 并没有据此启用 Vulkan validation layers。 + +这点文档上必须讲清楚,因为接口形状看起来像“支持调试层开关”,但当前 Vulkan 实现并没有真正接线。 + +### 物理设备与队列选择 + +- `PickPhysicalDevice()` 会遍历物理设备,选择第一个拥有 `VK_QUEUE_GRAPHICS_BIT` 的设备。 +- 当前只记录一个 `m_graphicsQueueFamilyIndex`。 +- `CreateLogicalDevice()` 只创建一个队列,并从这个队列族取出一个图形队列。 + +因此当前实现更接近“单图形队列 backend”,而不是已经完整建好的多队列模型。即使 RHI 抽象里存在 `Direct / Compute / Copy` 等概念,Vulkan 后端目前也没有拆成独立 native queue。 + +### 资源工厂行为 + +- `CreateBuffer()` 默认使用 `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT`。 +- 这意味着当前 buffer 创建策略偏向“先易用、先可写”,而不是默认走更激进的 device-local 显存路径。 +- `CreateTexture(const TextureDesc&)` 创建的是自有 `VkImage`,默认带 `TRANSFER_SRC`、`TRANSFER_DST`、`SAMPLED` 等 usage,并根据格式决定是否附加 color/depth/storage 用途。 +- `CreateTexture(..., initialData, ...)` 会先建纹理,再通过 staging buffer 上传,成功后把软件侧状态设为 `ResourceStates::PixelShaderResource`。 +- `CreateShader()` 不是直接从文本生成 `VkShaderModule`,而是先调用 [VulkanShaderCompiler](../VulkanShaderCompiler/VulkanShaderCompiler.md) 的编译流程得到 SPIR-V,再交给 [VulkanShader](../VulkanShader/VulkanShader.md) 创建 module。 + +## 设备信息与能力 + +- `GetCapabilities()` 返回 `RHICapabilities` +- `GetDeviceInfo()` 返回 `RHIDeviceInfo` +- `GetNativeDevice()` 返回 `VkDevice` +- `GetInstance()` / `GetPhysicalDevice()` / `GetGraphicsQueue()` 暴露 Vulkan 原生根对象 + +从 `QueryDeviceInfo()` 的实现看,设备名称、厂商和适配器信息会在初始化阶段写入 `m_deviceInfo`,供上层调试、日志和测试使用。 + +## 线程语义 + +从当前实现看,`VulkanDevice` 内部没有显式锁,也没有跨线程资源所有权协调逻辑。更稳妥的工程约束是: + +- 初始化与关停由单线程串行完成 +- 资源创建与销毁由调用方自行保证时序 +- 不要假设 `Create*()` 系列天然线程安全 + +这和商业引擎常见做法一致:设备对象通常是渲染基础设施的中心,但线程模型往往由更高层的 render graph、render thread 或 job system 决定,而不是由 backend device 自己兜底。 + +## 所有权与资源管理 + +- `Create*()` 系列大多返回裸指针,调用方负责后续 `Shutdown()` 与 `delete` +- `VulkanDevice` 不负责统一托管所有已创建对象 +- 交换链 back buffer、render pass、descriptor pool 等对象也遵循同样模式 + +这属于“轻量工厂 + 调用方负责生命周期”的设计,而不是 Unity 那种高度托管的资源对象模型。好处是 backend 更直白,代价是使用者必须严格控制销毁顺序。 + +## 设计取向 + +`VulkanDevice` 的设计明显偏向“先把抽象层打通,再逐步补强后端特性”: + +- 好处是 RHI 测试和跨后端样例可以较早跑起来 +- 代价是 Vulkan 专属能力目前只覆盖了最核心路径 +- 一些接口已经预留了成熟引擎会有的扩展点,例如调试层、GPU validation、多队列,但当前实现还没有全部兑现 + +如果你熟悉 Unity,可以把它类比成更靠近引擎内部 `GfxDevice` 的那层,而不是脚本层直接操作的 `Graphics` API。 + +## 当前限制 + +- 当前 surface 创建路径是 Win32 专属 +- 调试层与 GPU validation 开关尚未真正启用 +- 只选择第一个可用 graphics queue family +- 没有单独的 present / compute / copy native queue +- buffer 默认分配策略更偏 host-visible,而不是按资源用途做精细化显存分类 + +这些限制不会影响当前测试覆盖的基本图形与计算路径,但会影响后续性能调优和平台扩展。 + +## 主要公开方法 + +- `bool Initialize(const RHIDeviceDesc& desc)` +- `void Shutdown()` +- `RHIBuffer* CreateBuffer(const BufferDesc& desc)` +- `RHITexture* CreateTexture(const TextureDesc& desc)` +- `RHITexture* CreateTexture(const TextureDesc& desc, const void* initialData, size_t initialDataSize, uint32_t rowPitch = 0)` +- `RHISwapChain* CreateSwapChain(const SwapChainDesc& desc, RHICommandQueue* presentQueue)` +- `RHICommandList* CreateCommandList(const CommandListDesc& desc)` +- `RHICommandQueue* CreateCommandQueue(const CommandQueueDesc& desc)` +- `RHIShader* CreateShader(const ShaderCompileDesc& desc)` +- `RHIPipelineState* CreatePipelineState(const GraphicsPipelineDesc& desc)` +- `RHIPipelineLayout* CreatePipelineLayout(const RHIPipelineLayoutDesc& desc)` +- `RHIFence* CreateFence(const FenceDesc& desc)` +- `RHISampler* CreateSampler(const SamplerDesc& desc)` +- `RHIRenderPass* CreateRenderPass(...)` +- `RHIFramebuffer* CreateFramebuffer(...)` +- `RHIDescriptorPool* CreateDescriptorPool(const DescriptorPoolDesc& desc)` +- `RHIDescriptorSet* CreateDescriptorSet(RHIDescriptorPool* pool, const DescriptorSetLayoutDesc& layout)` + +## 相关测试与使用线索 + +- `tests/RHI/unit/test_factory.cpp` 覆盖了 Vulkan 设备创建入口 +- `tests/RHI/unit/test_device.cpp` 会通过抽象设备接口验证 `CreateCommandQueue()`、`CreateCommandList()`、资源与视图创建 +- `tests/RHI/unit/test_vulkan_graphics.cpp` 直接走 Vulkan 后端验证 shader、pipeline、texture copy 与 compute 路径 +- `tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp` 展示了真实的设备、队列、交换链、命令列表初始化流程 + +## 相关指南 + +- [Devices, Queues, Command Lists, And Resource Creation](../../../../_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md) + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [RHIDevice](../../RHIDevice/RHIDevice.md) +- [VulkanCommandQueue](../VulkanCommandQueue/VulkanCommandQueue.md) +- [VulkanCommandList](../VulkanCommandList/VulkanCommandList.md) +- [VulkanSwapChain](../VulkanSwapChain/VulkanSwapChain.md) +- [VulkanShader](../VulkanShader/VulkanShader.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanFence/VulkanFence.md b/docs/api/XCEngine/RHI/Vulkan/VulkanFence/VulkanFence.md new file mode 100644 index 00000000..be488b0a --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanFence/VulkanFence.md @@ -0,0 +1,65 @@ +# VulkanFence + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanFence.h` + +**描述**: Vulkan 后端里的 `RHIFence` 轻量实现,当前本质上是一个软件计数器,而不是原生 `VkFence` 封装。 + +## 概览 + +`VulkanFence` 的接口形状继承自抽象层 fence 契约,但当前实现非常轻: + +- 内部只保存 `uint64_t m_value` +- 不创建 `VkFence` +- 不等待 GPU 真正完成某条提交 + +## 当前实现的真实行为 + +- 构造时可以指定初始值 +- `Signal()` 会把值加一 +- `Signal(uint64_t value)` 会直接把值改成传入值 +- `Wait(uint64_t value)` 如果当前值更小,就把它提升到目标值 +- `GetCompletedValue()` 返回当前计数 +- `GetNativeHandle()` 返回 `&m_value` +- `Shutdown()` 是空实现 + +因此这里的 `Wait()` 不是阻塞等待 GPU 信号,而只是一个软件层面的“把值推进到至少等于目标值”。 + +## 与命令队列的关系 + +[VulkanCommandQueue](../VulkanCommandQueue/VulkanCommandQueue.md) 的 `Signal()` / `Wait()` 当前只是把调用转发到 `RHIFence`,并没有接入 Vulkan 的 native queue synchronization。 + +这意味着当前 fence 语义更接近“测试友好的抽象完成值”,而不是商业级引擎里用于 CPU/GPU 精确同步的 timeline fence。 + +## 线程语义 + +源码里没有原子操作和锁。不要把它当成高并发同步原语使用。 + +## 设计取向 + +这个实现显然是为了先把抽象层 fence 接口接通,方便测试与统一 API,而不是为了提供完整 Vulkan 同步系统。 + +## 当前限制 + +- 不是 `VkFence` +- 不代表 GPU 真正完成状态 +- `Wait()` 不阻塞 +- `GetNativeHandle()` 只是 `uint64_t` 地址 + +## 主要公开方法 + +- `void Shutdown()` +- `void Signal()` +- `void Signal(uint64_t value)` +- `void Wait(uint64_t value)` +- `uint64_t GetCompletedValue() const` +- `void* GetNativeHandle()` + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanCommandQueue](../VulkanCommandQueue/VulkanCommandQueue.md) +- [RHIFence](../../RHIFence/RHIFence.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetColorAttachmentCount.md b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetColorAttachmentCount.md new file mode 100644 index 00000000..9b1a0059 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetColorAttachmentCount.md @@ -0,0 +1,14 @@ +# VulkanFramebuffer::GetColorAttachmentCount + +```cpp +uint32_t GetColorAttachmentCount() const; +``` + +## 作用 + +返回当前缓存的颜色附件 view 数量。 + +## 相关文档 + +- [VulkanFramebuffer](VulkanFramebuffer.md) +- [GetColorAttachmentView](GetColorAttachmentView.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetColorAttachmentTexture.md b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetColorAttachmentTexture.md new file mode 100644 index 00000000..167eac77 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetColorAttachmentTexture.md @@ -0,0 +1,19 @@ +# VulkanFramebuffer::GetColorAttachmentTexture + +```cpp +VulkanTexture* GetColorAttachmentTexture(uint32_t index) const; +``` + +## 作用 + +按索引返回颜色附件 view 对应的纹理对象。 + +## 当前实现行为 + +- 会先通过 `GetColorAttachmentView(index)` 取 view +- 若 view 无效则返回 `nullptr` + +## 相关文档 + +- [VulkanFramebuffer](VulkanFramebuffer.md) +- [GetColorAttachmentView](GetColorAttachmentView.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetColorAttachmentView.md b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetColorAttachmentView.md new file mode 100644 index 00000000..b1156012 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetColorAttachmentView.md @@ -0,0 +1,18 @@ +# VulkanFramebuffer::GetColorAttachmentView + +```cpp +VulkanResourceView* GetColorAttachmentView(uint32_t index) const; +``` + +## 作用 + +按索引返回颜色附件 view。 + +## 当前实现行为 + +- 索引越界时返回 `nullptr` + +## 相关文档 + +- [VulkanFramebuffer](VulkanFramebuffer.md) +- [GetColorAttachmentTexture](GetColorAttachmentTexture.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetDepthStencilTexture.md b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetDepthStencilTexture.md new file mode 100644 index 00000000..41f6c3a8 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetDepthStencilTexture.md @@ -0,0 +1,18 @@ +# VulkanFramebuffer::GetDepthStencilTexture + +```cpp +VulkanTexture* GetDepthStencilTexture() const; +``` + +## 作用 + +返回深度模板 view 对应的纹理对象。 + +## 当前实现行为 + +- 若没有深度模板 view,返回 `nullptr` + +## 相关文档 + +- [VulkanFramebuffer](VulkanFramebuffer.md) +- [GetDepthStencilView](GetDepthStencilView.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetDepthStencilView.md b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetDepthStencilView.md new file mode 100644 index 00000000..4a39d060 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetDepthStencilView.md @@ -0,0 +1,14 @@ +# VulkanFramebuffer::GetDepthStencilView + +```cpp +VulkanResourceView* GetDepthStencilView() const; +``` + +## 作用 + +返回当前缓存的深度模板 view。 + +## 相关文档 + +- [VulkanFramebuffer](VulkanFramebuffer.md) +- [GetDepthStencilTexture](GetDepthStencilTexture.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetFramebuffer.md b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetFramebuffer.md new file mode 100644 index 00000000..3fc74f21 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetFramebuffer.md @@ -0,0 +1,14 @@ +# VulkanFramebuffer::GetFramebuffer + +```cpp +VkFramebuffer GetFramebuffer() const; +``` + +## 作用 + +返回真实的 native `VkFramebuffer`。 + +## 相关文档 + +- [VulkanFramebuffer](VulkanFramebuffer.md) +- [GetNativeHandle](GetNativeHandle.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetHeight.md b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetHeight.md new file mode 100644 index 00000000..b15a54c7 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetHeight.md @@ -0,0 +1,14 @@ +# VulkanFramebuffer::GetHeight + +```cpp +uint32_t GetHeight() const override; +``` + +## 作用 + +返回 framebuffer 高度。 + +## 相关文档 + +- [VulkanFramebuffer](VulkanFramebuffer.md) +- [GetWidth](GetWidth.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetNativeHandle.md b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetNativeHandle.md new file mode 100644 index 00000000..f8125dbf --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetNativeHandle.md @@ -0,0 +1,19 @@ +# VulkanFramebuffer::GetNativeHandle + +```cpp +void* GetNativeHandle() override; +``` + +## 作用 + +返回 native framebuffer 句柄。 + +## 当前实现行为 + +- 直接返回 `m_framebuffer` +- 实际类型是 `VkFramebuffer` + +## 相关文档 + +- [VulkanFramebuffer](VulkanFramebuffer.md) +- [GetFramebuffer](GetFramebuffer.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetRenderPass.md b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetRenderPass.md new file mode 100644 index 00000000..eaf91857 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetRenderPass.md @@ -0,0 +1,14 @@ +# VulkanFramebuffer::GetRenderPass + +```cpp +VulkanRenderPass* GetRenderPass() const; +``` + +## 作用 + +返回与当前 framebuffer 关联的 `VulkanRenderPass`。 + +## 相关文档 + +- [VulkanFramebuffer](VulkanFramebuffer.md) +- [VulkanRenderPass](../VulkanRenderPass/VulkanRenderPass.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetWidth.md b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetWidth.md new file mode 100644 index 00000000..3c36a620 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/GetWidth.md @@ -0,0 +1,14 @@ +# VulkanFramebuffer::GetWidth + +```cpp +uint32_t GetWidth() const override; +``` + +## 作用 + +返回 framebuffer 宽度。 + +## 相关文档 + +- [VulkanFramebuffer](VulkanFramebuffer.md) +- [GetHeight](GetHeight.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/Initialize.md b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/Initialize.md new file mode 100644 index 00000000..4f956571 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/Initialize.md @@ -0,0 +1,34 @@ +# VulkanFramebuffer::Initialize + +```cpp +bool Initialize(VkDevice device, RHIRenderPass* renderPass, uint32_t width, uint32_t height, + uint32_t colorAttachmentCount, RHIResourceView** colorAttachments, + RHIResourceView* depthStencilAttachment); +bool Initialize(RHIRenderPass* renderPass, uint32_t width, uint32_t height, + uint32_t colorAttachmentCount, RHIResourceView** colorAttachments, + RHIResourceView* depthStencilAttachment) override; +``` + +## 作用 + +初始化 Vulkan framebuffer,把 render pass 与一组 attachment views 绑定成 `VkFramebuffer`。 + +## 当前实现行为 + +### `Initialize(VkDevice, ...)` + +- 这是当前真正有效的初始化入口 +- 会严格校验 render pass、宽高、颜色附件数量和深度附件匹配关系 +- 要求所有 image views 都有效 +- 创建成功后缓存 render pass、附件 view 和尺寸信息 + +### `Initialize(...)` + +- 当前只是转发到 `Initialize(m_device, ...)` +- 如果对象尚未持有有效设备,这条路径本身没有独立初始化能力 + +## 相关文档 + +- [VulkanFramebuffer](VulkanFramebuffer.md) +- [Shutdown](Shutdown.md) +- [IsValid](IsValid.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/IsValid.md b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/IsValid.md new file mode 100644 index 00000000..0b172bfc --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/IsValid.md @@ -0,0 +1,18 @@ +# VulkanFramebuffer::IsValid + +```cpp +bool IsValid() const override; +``` + +## 作用 + +判断 framebuffer 是否已经拥有有效 native 对象。 + +## 当前实现行为 + +- 只通过 `m_framebuffer != VK_NULL_HANDLE` 判断 + +## 相关文档 + +- [VulkanFramebuffer](VulkanFramebuffer.md) +- [GetFramebuffer](GetFramebuffer.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/Shutdown.md b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/Shutdown.md new file mode 100644 index 00000000..31406405 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/Shutdown.md @@ -0,0 +1,19 @@ +# VulkanFramebuffer::Shutdown + +```cpp +void Shutdown() override; +``` + +## 作用 + +销毁当前 native framebuffer,并清空 attachment 缓存。 + +## 当前实现行为 + +- 会销毁 `VkFramebuffer` +- 清空 render pass 指针、尺寸、颜色附件数组和深度附件指针 + +## 相关文档 + +- [VulkanFramebuffer](VulkanFramebuffer.md) +- [Initialize](Initialize.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/VulkanFramebuffer.md b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/VulkanFramebuffer.md new file mode 100644 index 00000000..72f856b7 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanFramebuffer/VulkanFramebuffer.md @@ -0,0 +1,113 @@ +# VulkanFramebuffer + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanFramebuffer.h` + +**描述**: Vulkan 后端里的 `RHIFramebuffer` 实现,负责把 render pass 与一组 image view 组合成 `VkFramebuffer`。 + +## 概览 + +`VulkanFramebuffer` 是 attachment 实例化后的绑定结果。它把: + +- 一个 [VulkanRenderPass](../VulkanRenderPass/VulkanRenderPass.md) +- 若干颜色附件 view +- 可选的深度模板附件 view + +组合成一个可被 `vkCmdBeginRenderPass()` 直接使用的原生 framebuffer。 + +## 生命周期 + +通常由 [VulkanDevice](../VulkanDevice/VulkanDevice.md) 创建: + +1. 准备 render pass +2. 准备对应的 `VulkanResourceView` +3. 调用 `CreateFramebuffer(...)` +4. 在命令列表里传给 `BeginRenderPass(...)` +5. 用完后 `Shutdown()` + +## 当前实现的真实行为 + +### 初始化校验很严格 + +`Initialize(...)` 会显式检查: + +- `VkDevice`、`renderPass`、`width`、`height` 是否有效 +- 如果 `colorAttachmentCount > 0`,`colorAttachments` 不能为 `nullptr` +- `colorAttachmentCount` 必须等于 render pass 的颜色附件数量 +- render pass 需要深度附件时,`depthStencilAttachment` 不能缺失 +- render pass 不需要深度附件时,也不能额外传深度附件 +- 每个附件 view 都必须存在有效 `VkImageView` + +这让 framebuffer 构造失败路径比较明确,也能减少“render pass 和 attachment 数量不匹配”的隐性错误。 + +### 所有权边界 + +- `VulkanFramebuffer` 自己拥有 `VkFramebuffer` +- 但颜色附件 view 和深度附件 view 只是借用指针 +- 它不拥有这些 view 对应的 texture + +这点很重要,因为 framebuffer 只是 attachment 组合,不是 attachment 资源的所有者。 + +### 便捷访问 + +除了基础的 `GetFramebuffer()` 之外,当前还提供: + +- `GetColorAttachmentView(index)` +- `GetDepthStencilView()` +- `GetColorAttachmentTexture(index)` +- `GetDepthStencilTexture()` + +这些 helper 对 backend 内部和测试代码都很方便,能快速从 framebuffer 反查 attachment 包装对象。 + +## 线程语义 + +当前没有内部同步。更稳妥的用法是: + +- 初始化后只读使用 +- 不要在命令列表仍持有它时并发销毁 framebuffer + +## 设计取向 + +这个类的设计很符合商业引擎 backend 的习惯: + +- framebuffer 是短到中等生命周期的原生绑定对象 +- 真正长期存在的是 texture / resource view +- framebuffer 负责验证 attachment 兼容性,但不接管资源所有权 + +## 当前限制 + +- 只处理单层 `layers = 1` 的 framebuffer 创建 +- attachment 兼容性主要依赖当前实现内的直接检查,不包含更复杂的 runtime 兼容缓存系统 + +## 主要公开方法 + +- `bool Initialize(VkDevice device, RHIRenderPass* renderPass, uint32_t width, uint32_t height, uint32_t colorAttachmentCount, RHIResourceView** colorAttachments, RHIResourceView* depthStencilAttachment)` +- `bool Initialize(RHIRenderPass* renderPass, uint32_t width, uint32_t height, uint32_t colorAttachmentCount, RHIResourceView** colorAttachments, RHIResourceView* depthStencilAttachment)` +- `void Shutdown()` +- `void* GetNativeHandle()` +- `uint32_t GetWidth() const` +- `uint32_t GetHeight() const` +- `bool IsValid() const` +- `VkFramebuffer GetFramebuffer() const` +- `VulkanRenderPass* GetRenderPass() const` +- `uint32_t GetColorAttachmentCount() const` +- `VulkanResourceView* GetColorAttachmentView(uint32_t index) const` +- `VulkanResourceView* GetDepthStencilView() const` +- `VulkanTexture* GetColorAttachmentTexture(uint32_t index) const` +- `VulkanTexture* GetDepthStencilTexture() const` + +## 相关测试与使用线索 + +- `tests/RHI/unit/test_vulkan_graphics.cpp` 直接验证了 framebuffer 与 render pass 组合后开始 render pass、清屏并写颜色的行为 +- `tests/RHI/unit/test_command_list.cpp` 也覆盖了抽象 framebuffer 路径 + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanRenderPass](../VulkanRenderPass/VulkanRenderPass.md) +- [VulkanResourceView](../VulkanResourceView/VulkanResourceView.md) +- [VulkanTexture](../VulkanTexture/VulkanTexture.md) +- [RHIFramebuffer](../../RHIFramebuffer/RHIFramebuffer.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/GetDesc.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/GetDesc.md new file mode 100644 index 00000000..73d4c32e --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/GetDesc.md @@ -0,0 +1,19 @@ +# VulkanPipelineLayout::GetDesc + +```cpp +const RHIPipelineLayoutDesc& GetDesc() const; +``` + +## 作用 + +返回当前缓存的抽象 pipeline layout 描述。 + +## 当前实现行为 + +- 返回的是初始化时保存或补全后的 `m_desc` +- 在扁平计数路径下,返回值可能已经被改写为合成后的 set layout 形式 + +## 相关文档 + +- [VulkanPipelineLayout](VulkanPipelineLayout.md) +- [UsesSetLayouts](UsesSetLayouts.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/GetNativeHandle.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/GetNativeHandle.md new file mode 100644 index 00000000..d5b38fe3 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/GetNativeHandle.md @@ -0,0 +1,19 @@ +# VulkanPipelineLayout::GetNativeHandle + +```cpp +void* GetNativeHandle() override; +``` + +## 作用 + +返回当前 native pipeline layout 句柄。 + +## 当前实现行为 + +- 直接返回 `m_pipelineLayout` +- 实际类型是 `VkPipelineLayout` + +## 相关文档 + +- [VulkanPipelineLayout](VulkanPipelineLayout.md) +- [GetPipelineLayout](GetPipelineLayout.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/GetPipelineLayout.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/GetPipelineLayout.md new file mode 100644 index 00000000..9bb4660e --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/GetPipelineLayout.md @@ -0,0 +1,19 @@ +# VulkanPipelineLayout::GetPipelineLayout + +```cpp +VkPipelineLayout GetPipelineLayout() const; +``` + +## 作用 + +返回当前 `VkPipelineLayout`。 + +## 使用场景 + +- graphics / compute pipeline 创建 +- command list 绑定 descriptor set 时需要 native pipeline layout + +## 相关文档 + +- [VulkanPipelineLayout](VulkanPipelineLayout.md) +- [GetNativeHandle](GetNativeHandle.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/Initialize.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/Initialize.md new file mode 100644 index 00000000..d3c2a82f --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/Initialize.md @@ -0,0 +1,37 @@ +# VulkanPipelineLayout::Initialize + +```cpp +bool Initialize(VkDevice device, const RHIPipelineLayoutDesc& desc); +bool Initialize(const RHIPipelineLayoutDesc& desc) override; +``` + +## 作用 + +初始化 Vulkan pipeline layout,把抽象 descriptor 布局转成 `VkDescriptorSetLayout` 和 `VkPipelineLayout`。 + +## 当前实现行为 + +### `Initialize(VkDevice, desc)` + +- 这是当前真正可用的初始化入口 +- 会先保存 `desc` +- 如果 `desc` 自带显式 set layouts,就走显式路径 +- 否则按 `constantBufferCount / textureCount / uavCount / samplerCount` 合成扁平 set layouts +- 随后创建所有 native `VkDescriptorSetLayout` +- 最后创建 `VkPipelineLayout` + +### `Initialize(desc)` + +- 当前实现直接返回 `false` +- 不会自动从别处推导 `VkDevice` + +## 返回值 + +- `true` - 初始化成功 +- `false` - 输入无效、native layout 创建失败,或调用了当前未接线的重载 + +## 相关文档 + +- [VulkanPipelineLayout](VulkanPipelineLayout.md) +- [Shutdown](Shutdown.md) +- [UsesSetLayouts](UsesSetLayouts.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/Shutdown.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/Shutdown.md new file mode 100644 index 00000000..4e2b7947 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/Shutdown.md @@ -0,0 +1,21 @@ +# VulkanPipelineLayout::Shutdown + +```cpp +void Shutdown() override; +``` + +## 作用 + +销毁当前 pipeline layout 及其内部创建的 set layouts。 + +## 当前实现行为 + +- 会先销毁 `VkPipelineLayout` +- 再逐个销毁 `m_nativeSetLayouts` +- 清空描述缓存和绑定缓存 +- 把设备句柄与内部状态重置为空 + +## 相关文档 + +- [VulkanPipelineLayout](VulkanPipelineLayout.md) +- [Initialize](Initialize.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/UsesSetLayouts.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/UsesSetLayouts.md new file mode 100644 index 00000000..53a47fe1 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/UsesSetLayouts.md @@ -0,0 +1,19 @@ +# VulkanPipelineLayout::UsesSetLayouts + +```cpp +bool UsesSetLayouts() const; +``` + +## 作用 + +判断当前 layout 描述是否以显式 set layout 形式存在。 + +## 当前实现行为 + +- 当 `m_desc.setLayoutCount > 0 && m_desc.setLayouts != nullptr` 时返回 `true` +- 这既可能来自调用方原始输入,也可能来自扁平计数路径合成后的结果 + +## 相关文档 + +- [VulkanPipelineLayout](VulkanPipelineLayout.md) +- [GetDesc](GetDesc.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/VulkanPipelineLayout.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/VulkanPipelineLayout.md new file mode 100644 index 00000000..3bb980e1 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineLayout/VulkanPipelineLayout.md @@ -0,0 +1,132 @@ +# VulkanPipelineLayout + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanPipelineLayout.h` + +**描述**: Vulkan 后端里的 `RHIPipelineLayout` 实现,负责把抽象描述的 descriptor set layout 组织成原生 `VkDescriptorSetLayout` 与 `VkPipelineLayout`。 + +## 概览 + +`VulkanPipelineLayout` 是 descriptor 绑定模型和 pipeline 之间的桥梁。它决定了: + +- 一共有多少个 descriptor set +- 每个 set 里有哪些 binding +- 每个 binding 的类型、数量和 shader 可见性 + +如果说 [VulkanDescriptorSet](../VulkanDescriptorSet/VulkanDescriptorSet.md) 是“具体塞进去的数据”,那么 `VulkanPipelineLayout` 就是“这些数据应当按什么版式摆放”的版式定义。 + +## 生命周期 + +推荐方式是由 [VulkanDevice](../VulkanDevice/VulkanDevice.md) 调用 `CreatePipelineLayout()` 来创建,因为真正可用的初始化入口是: + +- `bool Initialize(VkDevice device, const RHIPipelineLayoutDesc& desc)` + +需要特别说明的是: + +- 抽象覆盖函数 `Initialize(const RHIPipelineLayoutDesc& desc)` 当前直接返回 `false` +- 也就是说,当前 Vulkan 后端要求调用方在初始化时显式提供 `VkDevice` + +这不是文档推测,而是当前实现的真实行为。 + +## 当前实现的真实行为 + +### 两种布局输入模式 + +当前实现支持两种构建路径: + +1. 显式 set layout 路径:`desc.setLayoutCount > 0 && desc.setLayouts != nullptr` +2. 扁平计数路径:根据 `constantBufferCount`、`textureCount`、`uavCount`、`samplerCount` 合成 set layout + +这对应两种工程风格: + +- 前者更接近 Vulkan 原生思路,调用方明确描述每个 set 的 binding +- 后者更像早期抽象 RHI 的简化模式,调用方只给出总数,backend 帮你合成布局 + +### 显式 set layout 路径 + +`PrepareExplicitLayouts()` 会: + +- 深拷贝每个 `DescriptorSetLayoutDesc` +- 深拷贝其中的 `DescriptorSetLayoutBinding` +- 顺便根据 binding 类型回填 `m_desc.constantBufferCount / textureCount / samplerCount / uavCount` + +这意味着 layout 描述在初始化后不会继续依赖外部传入的原始数组内存。 + +### 扁平计数路径 + +`PrepareFlatLayouts()` 会按下面顺序合成 synthetic set layout: + +1. CBV +2. SRV +3. UAV +4. Sampler + +每一种类型会生成一个独立 set。这个策略不是 Vulkan 唯一正确答案,但它让抽象层里基于“资源数量”描述布局的代码可以先跑起来。 + +### 原生对象创建 + +`CreateNativeSetLayouts()` 会: + +- 遍历每个 set layout +- 把抽象 binding 翻译成 `VkDescriptorSetLayoutBinding` +- 创建 `VkDescriptorSetLayout` +- 最终用这些 native set layout 创建 `VkPipelineLayout` + +成功后: + +- `GetNativeHandle()` 返回 `VkPipelineLayout` +- `GetPipelineLayout()` 返回同一个原生对象 + +## 线程语义 + +当前实现没有内部同步,也没有增量修改能力。更合适的用法是: + +- 构建期一次性初始化 +- 初始化后只读使用 +- 销毁前不再并发访问 + +## 所有权与资源管理 + +- `VulkanPipelineLayout` 拥有 `VkPipelineLayout` +- 同时拥有它内部创建出来的 `VkDescriptorSetLayout` +- `Shutdown()` 会先销毁 pipeline layout,再销毁 native set layouts,并清空复制出来的描述缓存 + +## 设计取向 + +这个类体现了当前 RHI 的一个重要设计目标:既兼容 Vulkan 风格的显式 set layout,也兼容更传统的“按资源数量声明布局”的抽象接口。 + +好处是抽象层迁移成本低;代价是 layout 组织方式还不是完全统一、完全收敛的最终形态。 + +如果用商业引擎视角理解,它更像“正在从泛化 RHI 向显式 descriptor set 模型过渡”的中间层。 + +## 当前限制 + +- `Initialize(const RHIPipelineLayoutDesc&)` 当前无效,真正可用的是带 `VkDevice` 的重载 +- 扁平计数模式会按固定顺序合成 set,灵活度有限 +- 不包含 push constant、descriptor indexing 等更高级 Vulkan layout 特性 + +## 主要公开方法 + +- `bool Initialize(VkDevice device, const RHIPipelineLayoutDesc& desc)` +- `bool Initialize(const RHIPipelineLayoutDesc& desc)` +- `void Shutdown()` +- `void* GetNativeHandle()` +- `VkPipelineLayout GetPipelineLayout() const` +- `const RHIPipelineLayoutDesc& GetDesc() const` +- `bool UsesSetLayouts() const` + +## 相关测试与使用线索 + +- `tests/RHI/unit/test_pipeline_layout.cpp` 会检查 pipeline layout 描述在各后端里的保留与可访问性 +- `tests/RHI/unit/test_compute.cpp`、`tests/RHI/unit/test_command_list.cpp` 会把 descriptor set 与 pipeline layout 组合到 compute / graphics 路径中 + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanPipelineState](../VulkanPipelineState/VulkanPipelineState.md) +- [VulkanDescriptorSet](../VulkanDescriptorSet/VulkanDescriptorSet.md) +- [VulkanDescriptorPool](../VulkanDescriptorPool/VulkanDescriptorPool.md) +- [RHIPipelineLayout](../../RHIPipelineLayout/RHIPipelineLayout.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Bind.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Bind.md new file mode 100644 index 00000000..f4de68d4 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Bind.md @@ -0,0 +1,19 @@ +# VulkanPipelineState::Bind + +```cpp +void Bind() override; +``` + +## 作用 + +抽象接口上的绑定入口。 + +## 当前实现行为 + +- 当前是 no-op +- 真正的 pipeline 绑定发生在 `VulkanCommandList::Draw()`、`DrawIndexed()` 或 `Dispatch()` 内部 + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [Unbind](Unbind.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/EnsureValid.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/EnsureValid.md new file mode 100644 index 00000000..bdc40cce --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/EnsureValid.md @@ -0,0 +1,25 @@ +# VulkanPipelineState::EnsureValid + +```cpp +void EnsureValid() override; +``` + +## 作用 + +确保当前 pipeline state 已拥有需要的 native pipeline。 + +## 当前实现行为 + +- 如果 `m_pipeline` 已存在,直接返回 +- 如果当前没有 compute shader,也直接返回 +- 否则调用内部 `CreateComputePipeline()` + +## 解释 + +这是当前 compute 路径延迟创建 native pipeline 的关键入口。 + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [SetComputeShader](SetComputeShader.md) +- [IsValid](IsValid.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetComputeShader.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetComputeShader.md new file mode 100644 index 00000000..17446b42 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetComputeShader.md @@ -0,0 +1,14 @@ +# VulkanPipelineState::GetComputeShader + +```cpp +RHIShader* GetComputeShader() const override; +``` + +## 作用 + +返回当前绑定的 compute shader 指针。 + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [SetComputeShader](SetComputeShader.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetHash.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetHash.md new file mode 100644 index 00000000..9564c623 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetHash.md @@ -0,0 +1,20 @@ +# VulkanPipelineState::GetHash + +```cpp +PipelineStateHash GetHash() const override; +``` + +## 作用 + +返回当前 pipeline state 的轻量 hash。 + +## 当前实现行为 + +- 当前只使用 `m_topologyType` +- 以及 `m_renderTargetCount` 和第一个 render target format +- 它不是完整的 pipeline cache key + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [SetTopology](SetTopology.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetNativeHandle.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetNativeHandle.md new file mode 100644 index 00000000..6e907e30 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetNativeHandle.md @@ -0,0 +1,19 @@ +# VulkanPipelineState::GetNativeHandle + +```cpp +void* GetNativeHandle() override; +``` + +## 作用 + +返回当前 native pipeline 句柄。 + +## 当前实现行为 + +- 直接返回 `m_pipeline` +- 实际类型是 `VkPipeline` + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [IsValid](IsValid.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetType.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetType.md new file mode 100644 index 00000000..ec2fd24e --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/GetType.md @@ -0,0 +1,19 @@ +# VulkanPipelineState::GetType + +```cpp +PipelineType GetType() const override; +``` + +## 作用 + +返回当前 pipeline state 的逻辑类型。 + +## 当前实现行为 + +- 只要 `HasComputeShader()` 为真,就返回 `PipelineType::Compute` +- 否则返回 `PipelineType::Graphics` + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [HasComputeShader](HasComputeShader.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/HasComputeShader.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/HasComputeShader.md new file mode 100644 index 00000000..757283df --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/HasComputeShader.md @@ -0,0 +1,18 @@ +# VulkanPipelineState::HasComputeShader + +```cpp +bool HasComputeShader() const override; +``` + +## 作用 + +判断当前 pipeline state 是否持有 compute shader。 + +## 当前实现行为 + +- 当前仅通过 `m_computeShader != nullptr` 判断 + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [SetComputeShader](SetComputeShader.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Initialize.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Initialize.md new file mode 100644 index 00000000..692ee045 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Initialize.md @@ -0,0 +1,33 @@ +# VulkanPipelineState::Initialize + +```cpp +bool Initialize(VulkanDevice* device, const GraphicsPipelineDesc& desc); +``` + +## 作用 + +初始化 Vulkan pipeline state,并在 graphics 路径下尽量创建原生 graphics pipeline。 + +## 当前实现行为 + +- 要求 `device` 和 native `VkDevice` 有效 +- 先清空旧状态 +- 缓存输入布局、光栅化、混合、深度模板、拓扑、render target 格式和 sample count +- 调用内部 `EnsurePipelineLayout(desc)` +- 如果 `desc.vertexShader` 和 `desc.fragmentShader` 都没有有效 payload,会把对象标记为“已配置”,但不创建 graphics pipeline +- 若存在 shader payload,则当前必须满足: + - 仅有 1 个 render target + - render target format 有效 + - vertex 和 fragment shader 都有效 +- 满足条件后调用 `CreateGraphicsPipeline(desc)` + +## 返回值 + +- `true` - 初始化成功 +- `false` - 设备无效、layout 创建失败或 graphics pipeline 创建失败 + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [EnsureValid](EnsureValid.md) +- [SetComputeShader](SetComputeShader.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/IsValid.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/IsValid.md new file mode 100644 index 00000000..c1bfbeb4 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/IsValid.md @@ -0,0 +1,20 @@ +# VulkanPipelineState::IsValid + +```cpp +bool IsValid() const override; +``` + +## 作用 + +判断当前 pipeline state 是否处于“已配置可用”状态。 + +## 当前实现行为 + +- 直接返回 `m_isConfigured` +- 它不严格等价于 native `VkPipeline` 已经创建 +- 尤其在 compute 路径里,native pipeline 可能要等 `EnsureValid()` 后才出现 + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [EnsureValid](EnsureValid.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetBlendState.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetBlendState.md new file mode 100644 index 00000000..1c85bb53 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetBlendState.md @@ -0,0 +1,18 @@ +# VulkanPipelineState::SetBlendState + +```cpp +void SetBlendState(const BlendDesc& state) override; +``` + +## 作用 + +更新缓存的混合状态描述。 + +## 当前实现行为 + +- 仅更新 `m_blendDesc` +- 不会自动重建已有 native pipeline + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetComputeShader.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetComputeShader.md new file mode 100644 index 00000000..f69bf485 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetComputeShader.md @@ -0,0 +1,22 @@ +# VulkanPipelineState::SetComputeShader + +```cpp +void SetComputeShader(RHIShader* shader) override; +``` + +## 作用 + +为当前 pipeline state 指定 compute shader。 + +## 当前实现行为 + +- 如果当前已有 `m_pipeline`,会先销毁它 +- 保存新的 `m_computeShader` +- 当 `m_computeShader` 和 `m_pipelineLayout` 都有效时,把 `m_isConfigured` 置为 `true` +- 不会在这里直接创建 compute pipeline + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [EnsureValid](EnsureValid.md) +- [HasComputeShader](HasComputeShader.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetDepthStencilState.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetDepthStencilState.md new file mode 100644 index 00000000..79b38363 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetDepthStencilState.md @@ -0,0 +1,18 @@ +# VulkanPipelineState::SetDepthStencilState + +```cpp +void SetDepthStencilState(const DepthStencilStateDesc& state) override; +``` + +## 作用 + +更新缓存的深度模板状态。 + +## 当前实现行为 + +- 仅更新 `m_depthStencilDesc` +- 不会立刻重建 native pipeline + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetInputLayout.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetInputLayout.md new file mode 100644 index 00000000..1a1157ed --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetInputLayout.md @@ -0,0 +1,19 @@ +# VulkanPipelineState::SetInputLayout + +```cpp +void SetInputLayout(const InputLayoutDesc& layout) override; +``` + +## 作用 + +更新缓存的输入布局描述。 + +## 当前实现行为 + +- 当前只是赋值给 `m_inputLayoutDesc` +- 不会立刻重建原生 pipeline + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [Initialize](Initialize.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetRasterizerState.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetRasterizerState.md new file mode 100644 index 00000000..29a340f7 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetRasterizerState.md @@ -0,0 +1,19 @@ +# VulkanPipelineState::SetRasterizerState + +```cpp +void SetRasterizerState(const RasterizerDesc& state) override; +``` + +## 作用 + +更新缓存的光栅化状态描述。 + +## 当前实现行为 + +- 仅更新 `m_rasterizerDesc` +- 不会立即重建 graphics pipeline + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [Initialize](Initialize.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetRenderTargetFormats.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetRenderTargetFormats.md new file mode 100644 index 00000000..f02154d2 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetRenderTargetFormats.md @@ -0,0 +1,25 @@ +# VulkanPipelineState::SetRenderTargetFormats + +```cpp +void SetRenderTargetFormats(uint32_t count, const uint32_t* formats, uint32_t depthFormat) override; +``` + +## 作用 + +更新缓存的颜色和深度附件格式。 + +## 当前实现行为 + +- 保存 `count` +- 保存 `depthFormat` +- 最多拷贝前 8 个颜色格式 +- 不会自动创建或重建 pipeline + +## 注意事项 + +当前 graphics pipeline 创建路径只支持 1 个 render target。 + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [Initialize](Initialize.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetSampleCount.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetSampleCount.md new file mode 100644 index 00000000..6d501ee4 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetSampleCount.md @@ -0,0 +1,18 @@ +# VulkanPipelineState::SetSampleCount + +```cpp +void SetSampleCount(uint32_t count) override; +``` + +## 作用 + +更新缓存的采样数。 + +## 当前实现行为 + +- `count > 0` 时保存原值 +- 否则回退为 `1` + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetTopology.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetTopology.md new file mode 100644 index 00000000..518ca972 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/SetTopology.md @@ -0,0 +1,19 @@ +# VulkanPipelineState::SetTopology + +```cpp +void SetTopology(uint32_t topologyType) override; +``` + +## 作用 + +更新缓存的 primitive topology 类型。 + +## 当前实现行为 + +- 仅更新 `m_topologyType` +- `GetHash()` 会使用这个值参与轻量 hash + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [GetHash](GetHash.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Shutdown.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Shutdown.md new file mode 100644 index 00000000..79292c9d --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Shutdown.md @@ -0,0 +1,21 @@ +# VulkanPipelineState::Shutdown + +```cpp +void Shutdown() override; +``` + +## 作用 + +销毁当前 pipeline state 持有的 native 资源并重置内部状态。 + +## 当前实现行为 + +- 销毁 `VkPipeline` +- 如果存在内部创建的 `VkRenderPass`,也会销毁 +- 如果当前拥有 `VkPipelineLayout` 的所有权,会销毁它 +- 清空设备指针、compute shader 指针和配置标记 + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [Initialize](Initialize.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Unbind.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Unbind.md new file mode 100644 index 00000000..1ee71cee --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/Unbind.md @@ -0,0 +1,18 @@ +# VulkanPipelineState::Unbind + +```cpp +void Unbind() override; +``` + +## 作用 + +抽象接口上的解绑入口。 + +## 当前实现行为 + +- 当前是 no-op + +## 相关文档 + +- [VulkanPipelineState](VulkanPipelineState.md) +- [Bind](Bind.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/VulkanPipelineState.md b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/VulkanPipelineState.md new file mode 100644 index 00000000..5c32f360 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanPipelineState/VulkanPipelineState.md @@ -0,0 +1,168 @@ +# VulkanPipelineState + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanPipelineState.h` + +**描述**: Vulkan 后端里的 `RHIPipelineState` 实现,负责创建 graphics / compute pipeline,并保存与之相关的 layout、render target 格式和固定功能状态。 + +## 概览 + +`VulkanPipelineState` 是当前 Vulkan 后端里 draw / dispatch 能否真正执行的关键对象。 + +它承担两类职责: + +- 保存抽象层的 pipeline 描述,例如输入布局、光栅化、混合、深度模板、拓扑和 render target 格式 +- 在合适时机创建原生 `VkPipeline` + +但它不是一个完全成熟、完全统一的 PSO 系统。当前 graphics 和 compute 路径的成熟度并不一致,这一点文档必须明确写出来。 + +## 生命周期 + +常见用法有两种: + +### 图形管线 + +1. 构造 `VulkanPipelineState` +2. `Initialize(VulkanDevice*, const GraphicsPipelineDesc&)` +3. 录制阶段把它传给 [VulkanCommandList](../VulkanCommandList/VulkanCommandList.md) 的 `SetPipelineState()` +4. 不再使用时 `Shutdown()` + +### 计算管线 + +1. 初始化 pipeline state,让它至少拥有 pipeline layout +2. `SetComputeShader(RHIShader*)` +3. 在录制 `Dispatch()` 前由 `EnsureValid()` 延迟创建 compute pipeline + +## 当前实现的真实行为 + +### graphics 与 compute 的差异 + +按当前实现: + +- `Initialize()` 面向的是 `GraphicsPipelineDesc` +- 如果 `vertexShader` 和 `fragmentShader` 都没有有效 payload,`Initialize()` 仍可能把对象标记为 `m_isConfigured = true` +- graphics 路径要求: + - `renderTargetCount == 1` + - 第一项 render target format 有效 + - vertex shader 和 fragment shader 都存在 +- compute 路径不是在 `Initialize()` 里直接创建,而是走 `SetComputeShader()` + `EnsureValid()` + `CreateComputePipeline()` + +因此当前类名虽然叫 `PipelineState`,但本质上是“图形优先、计算补充”的实现。 + +### Pipeline Layout + +`EnsurePipelineLayout(desc)` 有两种行为: + +- 如果 `desc.pipelineLayout` 非空,直接借用外部 `VulkanPipelineLayout` +- 否则创建一个空的 `VkPipelineLayout` + +这解释了为什么 compute 路径能先有 pipeline layout,再延迟绑定 compute shader。 + +### Graphics Pipeline 创建 + +`CreateGraphicsPipeline()` 当前会: + +- 用 `CompileVulkanShader(...)` 把 `desc.vertexShader` / `desc.fragmentShader` 编译成 SPIR-V +- 临时创建两个 `VkShaderModule` +- 根据 render target / depth format 构造一个内部 `VkRenderPass` +- 再据此创建 graphics pipeline + +需要注意的是,当前这个 graphics pipeline 会自己生成一个内部 `VkRenderPass`。这和一些成熟引擎里把 render pass / framebuffer compatibility 单独抽出来统一管理的做法相比,还处于更简单直接的阶段。 + +### Compute Pipeline 创建 + +`CreateComputePipeline()` 当前要求: + +- `m_device` 有效 +- `m_pipelineLayout` 有效 +- `m_computeShader` 非空 +- `m_computeShader` 实际上是有效的 `VulkanShader` + +创建时会从 `VulkanShader` 里拿 `VkShaderModule` 与 entry point,然后调用 `vkCreateComputePipelines()`。 + +### `IsValid()` 与真实 native pipeline + +这是当前实现里最容易误解的一点: + +- `IsValid()` 返回的是 `m_isConfigured` +- 它不等价于“`m_pipeline != VK_NULL_HANDLE` 一定成立” + +尤其在 compute 路径里,pipeline 可能要等 `EnsureValid()` 之后才真正创建。因此把 `IsValid()` 理解成“配置状态可用”更准确,而不是“原生对象已经存在”。 + +### 其他行为 + +- `Bind()` / `Unbind()` 当前都是 no-op +- `GetHash()` 目前只用了拓扑和第一个 render target format 做轻量 hash +- `HasDepthStencilAttachment()` 只按 `m_depthStencilFormat` 是否为 `Unknown` 判断 + +## 线程语义 + +当前实现没有内部锁。更安全的工程约束是: + +- pipeline state 构建与修改在单线程完成 +- 构建完成后再交给录制线程使用 +- 不要在录制过程中并发修改同一个 pipeline state + +## 所有权与资源管理 + +- `VulkanPipelineState` 持有 `VkPipeline` +- 可能持有自建的 `VkPipelineLayout` +- graphics 路径还会持有内部创建的 `VkRenderPass` +- 如果借用了外部 `VulkanPipelineLayout`,则不会在自身 `Shutdown()` 中销毁它 + +## 设计取向 + +当前实现非常典型地体现了“先让 pipeline 概念在跨后端 RHI 里工作起来,再逐步收敛成更严谨的 Vulkan 语义”: + +- 优点是 graphics / compute 基本链路已经能跑 +- 代价是状态有效性、render pass 归属和 hash 策略仍较简化 + +这类设计在商业引擎重构早期很常见。真正成熟后,通常会继续把 pipeline cache、render pass 兼容性、shader reflection 和 descriptor layout 规则再往前推一层。 + +## 当前限制 + +- graphics 路径当前只支持一个 render target +- compute pipeline 为延迟创建模型 +- `IsValid()` 不严格等价于 native pipeline 已创建 +- `Bind()` / `Unbind()` 无实际行为 +- `GetHash()` 很简化,不能视为完整 pipeline cache key + +## 主要公开方法 + +- `bool Initialize(VulkanDevice* device, const GraphicsPipelineDesc& desc)` +- `void SetInputLayout(const InputLayoutDesc& layout)` +- `void SetRasterizerState(const RasterizerDesc& state)` +- `void SetBlendState(const BlendDesc& state)` +- `void SetDepthStencilState(const DepthStencilStateDesc& state)` +- `void SetTopology(uint32_t topologyType)` +- `void SetRenderTargetFormats(uint32_t count, const uint32_t* formats, uint32_t depthFormat)` +- `void SetSampleCount(uint32_t count)` +- `void SetComputeShader(RHIShader* shader)` +- `PipelineStateHash GetHash() const` +- `RHIShader* GetComputeShader() const` +- `bool HasComputeShader() const` +- `bool IsValid() const` +- `void EnsureValid()` +- `void Shutdown()` +- `void Bind()` +- `void Unbind()` +- `void* GetNativeHandle()` +- `PipelineType GetType() const` + +## 相关测试与使用线索 + +- `tests/RHI/unit/test_vulkan_graphics.cpp` 覆盖了 Vulkan graphics pipeline 与 compute dispatch 的真实创建路径 +- `tests/RHI/unit/test_compute.cpp` 会把 compute shader、pipeline layout 和 descriptor set 接起来验证计算路径 +- `tests/RHI/unit/test_command_list.cpp` 会通过抽象命令列表接口驱动 pipeline 绑定与 dispatch + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanShader](../VulkanShader/VulkanShader.md) +- [VulkanPipelineLayout](../VulkanPipelineLayout/VulkanPipelineLayout.md) +- [VulkanCommandList](../VulkanCommandList/VulkanCommandList.md) +- [VulkanRenderPass](../VulkanRenderPass/VulkanRenderPass.md) +- [RHIPipelineState](../../RHIPipelineState/RHIPipelineState.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetAttachmentCount.md b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetAttachmentCount.md new file mode 100644 index 00000000..48e19617 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetAttachmentCount.md @@ -0,0 +1,18 @@ +# VulkanRenderPass::GetAttachmentCount + +```cpp +uint32_t GetAttachmentCount() const; +``` + +## 作用 + +返回总附件数量。 + +## 当前实现行为 + +- 结果等于颜色附件数量加上可选的一个深度模板附件 + +## 相关文档 + +- [VulkanRenderPass](VulkanRenderPass.md) +- [HasDepthStencil](HasDepthStencil.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetColorAttachmentCount.md b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetColorAttachmentCount.md new file mode 100644 index 00000000..6876a75e --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetColorAttachmentCount.md @@ -0,0 +1,14 @@ +# VulkanRenderPass::GetColorAttachmentCount + +```cpp +uint32_t GetColorAttachmentCount() const override; +``` + +## 作用 + +返回 render pass 当前缓存的颜色附件数量。 + +## 相关文档 + +- [VulkanRenderPass](VulkanRenderPass.md) +- [GetColorAttachments](GetColorAttachments.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetColorAttachments.md b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetColorAttachments.md new file mode 100644 index 00000000..c51c209c --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetColorAttachments.md @@ -0,0 +1,19 @@ +# VulkanRenderPass::GetColorAttachments + +```cpp +const AttachmentDesc* GetColorAttachments() const override; +``` + +## 作用 + +返回颜色附件描述数组首地址。 + +## 当前实现行为 + +- 若内部数组为空,返回 `nullptr` +- 否则返回 `m_colorAttachments.data()` + +## 相关文档 + +- [VulkanRenderPass](VulkanRenderPass.md) +- [GetColorAttachmentCount](GetColorAttachmentCount.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetDepthStencilAttachment.md b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetDepthStencilAttachment.md new file mode 100644 index 00000000..8f745d1e --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetDepthStencilAttachment.md @@ -0,0 +1,19 @@ +# VulkanRenderPass::GetDepthStencilAttachment + +```cpp +const AttachmentDesc* GetDepthStencilAttachment() const override; +``` + +## 作用 + +返回深度模板附件描述。 + +## 当前实现行为 + +- 仅当 `m_hasDepthStencil` 为真时返回有效指针 +- 否则返回 `nullptr` + +## 相关文档 + +- [VulkanRenderPass](VulkanRenderPass.md) +- [HasDepthStencil](HasDepthStencil.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetNativeHandle.md b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetNativeHandle.md new file mode 100644 index 00000000..c4f16fa4 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetNativeHandle.md @@ -0,0 +1,19 @@ +# VulkanRenderPass::GetNativeHandle + +```cpp +void* GetNativeHandle() override; +``` + +## 作用 + +抽象接口上的 native handle 获取入口。 + +## 当前实现行为 + +- 当前固定返回 `nullptr` +- 如果需要真实 Vulkan render pass,应使用 [GetRenderPass](GetRenderPass.md) + +## 相关文档 + +- [VulkanRenderPass](VulkanRenderPass.md) +- [GetRenderPass](GetRenderPass.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetRenderPass.md b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetRenderPass.md new file mode 100644 index 00000000..11b33c66 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/GetRenderPass.md @@ -0,0 +1,14 @@ +# VulkanRenderPass::GetRenderPass + +```cpp +VkRenderPass GetRenderPass() const; +``` + +## 作用 + +返回真实的 native `VkRenderPass`。 + +## 相关文档 + +- [VulkanRenderPass](VulkanRenderPass.md) +- [GetNativeHandle](GetNativeHandle.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/HasDepthStencil.md b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/HasDepthStencil.md new file mode 100644 index 00000000..db685016 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/HasDepthStencil.md @@ -0,0 +1,18 @@ +# VulkanRenderPass::HasDepthStencil + +```cpp +bool HasDepthStencil() const; +``` + +## 作用 + +判断 render pass 是否带深度模板附件。 + +## 当前实现行为 + +- 直接返回 `m_hasDepthStencil` + +## 相关文档 + +- [VulkanRenderPass](VulkanRenderPass.md) +- [GetDepthStencilAttachment](GetDepthStencilAttachment.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/Initialize.md b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/Initialize.md new file mode 100644 index 00000000..262a3558 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/Initialize.md @@ -0,0 +1,31 @@ +# VulkanRenderPass::Initialize + +```cpp +bool Initialize(VkDevice device, uint32_t colorAttachmentCount, const AttachmentDesc* colorAttachments, + const AttachmentDesc* depthStencilAttachment); +bool Initialize(uint32_t colorAttachmentCount, const AttachmentDesc* colorAttachments, + const AttachmentDesc* depthStencilAttachment) override; +``` + +## 作用 + +初始化 Vulkan render pass。 + +## 当前实现行为 + +### `Initialize(VkDevice, ...)` + +- 这是当前真正可用的初始化入口 +- 会深拷贝颜色附件和可选深度模板附件描述 +- 构建一个单 subpass 的 `VkRenderPass` +- 任意格式无效或 native 创建失败时返回 `false` + +### `Initialize(...)` + +- 当前只是转发到 `Initialize(m_device, ...)` +- 如果对象尚未持有有效 `m_device`,这条路径没有独立补全能力 + +## 相关文档 + +- [VulkanRenderPass](VulkanRenderPass.md) +- [Shutdown](Shutdown.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/Shutdown.md b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/Shutdown.md new file mode 100644 index 00000000..6cfcab28 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/Shutdown.md @@ -0,0 +1,20 @@ +# VulkanRenderPass::Shutdown + +```cpp +void Shutdown() override; +``` + +## 作用 + +销毁 `VkRenderPass` 并清空附件描述缓存。 + +## 当前实现行为 + +- 若 `m_renderPass` 和 `m_device` 有效,会销毁 native render pass +- 清空颜色附件数组和深度模板附件缓存 +- 重置设备和状态字段 + +## 相关文档 + +- [VulkanRenderPass](VulkanRenderPass.md) +- [Initialize](Initialize.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/VulkanRenderPass.md b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/VulkanRenderPass.md new file mode 100644 index 00000000..2262cb10 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanRenderPass/VulkanRenderPass.md @@ -0,0 +1,121 @@ +# VulkanRenderPass + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanRenderPass.h` + +**描述**: Vulkan 后端里的 `RHIRenderPass` 实现,负责把抽象 attachment 描述翻译为原生 `VkRenderPass`。 + +## 概览 + +`VulkanRenderPass` 对应 Vulkan 图形管线里的一个核心概念:attachment 如何被读取、清除、写入,以及 subpass 如何引用这些 attachment。 + +在当前引擎里,它主要承担: + +- 保存颜色附件和深度模板附件描述 +- 创建一个对应的 `VkRenderPass` +- 为 [VulkanFramebuffer](../VulkanFramebuffer/VulkanFramebuffer.md) 与 [VulkanCommandList](../VulkanCommandList/VulkanCommandList.md) 提供兼容性基础 + +## 生命周期 + +推荐用法是由 [VulkanDevice](../VulkanDevice/VulkanDevice.md) 创建: + +1. `CreateRenderPass(...)` +2. `Initialize(VkDevice, colorAttachmentCount, colorAttachments, depthStencilAttachment)` +3. 配合 framebuffer 使用 +4. `Shutdown()` + +析构函数会调用 `Shutdown()`。 + +## 当前实现的真实行为 + +### 附件描述会被深拷贝 + +初始化时: + +- `m_colorAttachments` 会复制传入的颜色附件数组 +- 如果存在深度模板附件,也会复制到 `m_depthStencilAttachment` + +这意味着 render pass 初始化完成后,不再依赖外部传入的附件描述内存。 + +### 当前只有一个 subpass + +`VulkanRenderPass` 当前实现只构建: + +- 一个 graphics subpass +- 颜色附件引用数组 +- 可选的一个深度模板附件引用 + +没有多 subpass、input attachment、subpass dependency 图等更复杂能力。 + +### layout 与 load/store 行为 + +- 颜色附件当前使用 `VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL` +- 深度模板附件当前使用 `VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL` +- `loadOp` / `storeOp`、`stencilLoadOp` / `stencilStoreOp` 会从抽象 `AttachmentDesc` 翻译而来 + +因此它确实在承担“把跨后端 attachment 契约翻译成 Vulkan render pass 语义”的工作。 + +### `GetNativeHandle()` 的特殊点 + +需要特别注意: + +- `GetNativeHandle()` 当前返回 `nullptr` +- 但类本身同时提供了 `GetRenderPass()`,可以取到真实的 `VkRenderPass` + +这说明抽象层统一的 `GetNativeHandle()` 约定在这里还没有完全接上。使用 Vulkan 特定能力时,应通过 `GetRenderPass()` 拿原生对象,而不是依赖 `GetNativeHandle()`。 + +## 线程语义 + +没有内部同步。更稳妥的约束是: + +- 初始化后只读使用 +- 不要在命令录制期间并发销毁 render pass + +## 所有权与资源管理 + +- `VulkanRenderPass` 拥有 `VkRenderPass` +- 拥有复制后的 attachment 描述 +- 不拥有真正的纹理或 image view,那属于 framebuffer 和 texture 体系 + +## 设计取向 + +当前实现明显是“先覆盖最常用的单 subpass 渲染场景”: + +- 优点是结构简单,足以支撑当前测试与基础图形路径 +- 代价是还没有进入 Vulkan render graph / subpass 优化那一层 + +对商业引擎来说,这是很正常的第一阶段。很多引擎也是先建立 attachment 契约和 framebuffer 兼容性,再考虑更复杂的 subpass 编排。 + +## 当前限制 + +- 只支持单 subpass +- 不支持更复杂的 subpass dependency / input attachment 场景 +- `GetNativeHandle()` 当前返回 `nullptr` + +## 主要公开方法 + +- `bool Initialize(VkDevice device, uint32_t colorAttachmentCount, const AttachmentDesc* colorAttachments, const AttachmentDesc* depthStencilAttachment)` +- `bool Initialize(uint32_t colorAttachmentCount, const AttachmentDesc* colorAttachments, const AttachmentDesc* depthStencilAttachment)` +- `void Shutdown()` +- `uint32_t GetColorAttachmentCount() const` +- `const AttachmentDesc* GetColorAttachments() const` +- `const AttachmentDesc* GetDepthStencilAttachment() const` +- `void* GetNativeHandle()` +- `VkRenderPass GetRenderPass() const` +- `uint32_t GetAttachmentCount() const` +- `bool HasDepthStencil() const` + +## 相关测试与使用线索 + +- `tests/RHI/unit/test_vulkan_graphics.cpp` 的 render pass / framebuffer / begin render pass 用例会直接验证这一套组合行为 +- `tests/RHI/unit/test_command_list.cpp` 会通过抽象接口驱动 render pass 相关录制流程 + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanFramebuffer](../VulkanFramebuffer/VulkanFramebuffer.md) +- [VulkanCommandList](../VulkanCommandList/VulkanCommandList.md) +- [RHIRenderPass](../../RHIRenderPass/RHIRenderPass.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanResourceView/VulkanResourceView.md b/docs/api/XCEngine/RHI/Vulkan/VulkanResourceView/VulkanResourceView.md new file mode 100644 index 00000000..033d2448 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanResourceView/VulkanResourceView.md @@ -0,0 +1,123 @@ +# VulkanResourceView + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanResourceView.h` + +**描述**: Vulkan 后端里的 `RHIResourceView` 实现,用于把 texture 或 buffer 资源包装成 render target、depth stencil、SRV、UAV、vertex buffer、index buffer 等视图。 + +## 概览 + +`VulkanResourceView` 是 RHI 资源绑定模型与 Vulkan 资源访问模型之间的翻译层。 + +它覆盖两类完全不同的对象: + +- 图像视图:对应 `VkImageView` +- buffer 视图元数据:当前并不创建 `VkBufferView`,而是保存 buffer 指针、偏移、大小和步长 + +这点非常关键,因为名字里虽然都叫 “view”,但当前实现对 image 和 buffer 的处理深度并不相同。 + +## 当前实现的真实行为 + +### 图像类视图 + +以下初始化函数都会创建 `VkImageView`: + +- `InitializeAsRenderTarget(...)` +- `InitializeAsDepthStencil(...)` +- `InitializeAsShaderResource(...)` +- `InitializeAsUnorderedAccess(...)` + +共同特征是: + +- 视图类型由 `desc.dimension` 和纹理类型共同决定 +- 格式优先取 `desc.format`,否则回退到 texture 自身格式 +- `baseMipLevel = desc.mipLevel` +- `levelCount = 1` +- `layerCount = 1` + +也就是说,当前 image view 路径主要覆盖“单 mip、单 layer”的基础用法。 + +### buffer 类视图 + +以下初始化函数当前不会创建 `VkBufferView`: + +- `InitializeAsVertexBuffer(...)` +- `InitializeAsIndexBuffer(...)` + +它们只是记录: + +- `VulkanBuffer*` +- buffer 偏移 +- buffer 大小 +- stride +- 索引格式或缓冲区语义 + +真正录制时,命令列表会直接从这些元数据里取出 `VkBuffer` 做 `vkCmdBindVertexBuffers()` 或 `vkCmdBindIndexBuffer()`。 + +### `GetNativeHandle()` 的行为 + +- 如果存在 `VkImageView`,返回 image view +- 否则如果是 buffer 视图,则返回底层 `VkBuffer` + +所以这个接口返回的“native handle”并不是统一类型;具体解释依赖 view 类型。 + +## 有效性判断 + +`IsValid()` 的判断规则是: + +- vertex / index buffer 视图:要求 `m_buffer` 有效且底层 `VkBuffer` 有效 +- image 类视图:要求 `m_imageView` 有效 + +## 线程语义 + +当前没有内部同步。调用方应自己保证: + +- 视图生命周期不早于底层资源 +- 不要并发销毁仍在命令录制中使用的 view + +## 所有权与资源管理 + +- `VulkanResourceView` 拥有它自己创建的 `VkImageView` +- 不拥有底层 `VulkanTexture` 或 `VulkanBuffer` +- `Shutdown()` 会销毁 `VkImageView`,并清空借用的资源指针 + +## 设计取向 + +这个类体现了当前后端一个很务实的折中: + +- image 路径按 Vulkan 原生要求创建 `VkImageView` +- buffer 路径则先只保存绑定所需元数据,不额外引入 `VkBufferView` + +对当前测试和基础渲染路径来说,这足够工作;对更完整的 typed buffer / texel buffer 场景来说,还不算终态实现。 + +## 当前限制 + +- buffer 视图当前不创建 `VkBufferView` +- image view 当前只覆盖 `levelCount = 1`、`layerCount = 1` +- `GetNativeHandle()` 的返回语义依赖 view 类型 + +## 主要公开方法 + +- `bool InitializeAsRenderTarget(VkDevice device, VulkanTexture* texture, const ResourceViewDesc& desc)` +- `bool InitializeAsDepthStencil(VkDevice device, VulkanTexture* texture, const ResourceViewDesc& desc)` +- `bool InitializeAsShaderResource(VkDevice device, VulkanTexture* texture, const ResourceViewDesc& desc)` +- `bool InitializeAsUnorderedAccess(VkDevice device, VulkanTexture* texture, const ResourceViewDesc& desc)` +- `bool InitializeAsVertexBuffer(VulkanBuffer* buffer, const ResourceViewDesc& desc)` +- `bool InitializeAsIndexBuffer(VulkanBuffer* buffer, const ResourceViewDesc& desc)` +- `void Shutdown()` +- `void* GetNativeHandle()` +- `bool IsValid() const` +- `ResourceViewType GetViewType() const` +- `ResourceViewDimension GetDimension() const` +- `Format GetFormat() const` + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanTexture](../VulkanTexture/VulkanTexture.md) +- [VulkanBuffer](../VulkanBuffer/VulkanBuffer.md) +- [VulkanFramebuffer](../VulkanFramebuffer/VulkanFramebuffer.md) +- [RHIResourceView](../../RHIResourceView/RHIResourceView.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanSampler/VulkanSampler.md b/docs/api/XCEngine/RHI/Vulkan/VulkanSampler/VulkanSampler.md new file mode 100644 index 00000000..ce7c6fb0 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanSampler/VulkanSampler.md @@ -0,0 +1,65 @@ +# VulkanSampler + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanSampler.h` + +**描述**: Vulkan 后端里的 `RHISampler` 实现,负责根据 `SamplerDesc` 创建 `VkSampler`。 + +## 概览 + +`VulkanSampler` 的职责很纯粹:把抽象采样状态翻译成一个原生 `VkSampler`,供 descriptor set 绑定使用。 + +## 当前实现的真实行为 + +- `Initialize(VkDevice, const SamplerDesc&)` 会把过滤模式、地址模式、LOD 偏移、各向异性和比较采样参数翻译成 `VkSamplerCreateInfo` +- 成功后创建并持有 `VkSampler` +- `Shutdown()` 负责销毁原生 sampler + +需要特别说明的几点: + +- `Bind(unit)` / `Unbind(unit)` 当前都是 no-op +- `GetID()` 当前恒返回 `0` +- `GetNativeHandle()` 返回的是 `&m_sampler`,也就是内部成员地址,而不是直接返回 `VkSampler` 值本身 + +因此在 Vulkan 后端里,真正有效的原生对象访问方式是 `GetSampler()`。 + +## 线程语义 + +没有内部同步。采样器通常应在初始化阶段创建完毕,运行时只读使用。 + +## 所有权与资源管理 + +- `VulkanSampler` 拥有 `VkSampler` +- 不拥有设备对象 + +## 设计取向 + +这个类属于非常典型的 backend thin wrapper: + +- 好处是采样状态和原生 sampler 生命周期被收口到一个地方 +- 代价是抽象层遗留的 `Bind()` / `Unbind()` / `GetID()` 在 Vulkan 路径里没有实际意义 + +## 当前限制 + +- `Bind()` / `Unbind()` 无效果 +- `GetID()` 无语义价值 +- `GetNativeHandle()` 返回的不是直接可用的 `VkSampler` 值 + +## 主要公开方法 + +- `bool Initialize(VkDevice device, const SamplerDesc& desc)` +- `void Shutdown()` +- `void Bind(unsigned int unit)` +- `void Unbind(unsigned int unit)` +- `void* GetNativeHandle()` +- `unsigned int GetID()` +- `VkSampler GetSampler() const` + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanDescriptorSet](../VulkanDescriptorSet/VulkanDescriptorSet.md) +- [RHISampler](../../RHISampler/RHISampler.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanScreenshot/VulkanScreenshot.md b/docs/api/XCEngine/RHI/Vulkan/VulkanScreenshot/VulkanScreenshot.md new file mode 100644 index 00000000..215e20e3 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanScreenshot/VulkanScreenshot.md @@ -0,0 +1,72 @@ +# VulkanScreenshot + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanScreenshot.h` + +**描述**: Vulkan 后端里的 `RHIScreenshot` 实现,负责把当前交换链 back buffer 同步读回到 CPU,并写出 PPM 图像。 + +## 概览 + +`VulkanScreenshot` 是一个典型的工具型 backend 功能。它不是常规渲染管线的核心对象,而是为了测试、调试和结果验证,把当前 back buffer 读回磁盘。 + +## 当前实现的真实行为 + +`Capture(device, swapChain, filename)` 的当前流程是: + +1. 把 `RHIDevice` 向下转成 `VulkanDevice` +2. 从 `swapChain->GetCurrentBackBuffer()` 取得当前 `VulkanTexture` +3. 创建一块 host-visible / host-coherent staging buffer +4. 临时创建 command pool 和 command buffer +5. 把当前 back buffer 从 `PRESENT_SRC_KHR` 转到 `TRANSFER_SRC_OPTIMAL` +6. `vkCmdCopyImageToBuffer(...)` +7. 再把图像转回 `PRESENT_SRC_KHR` +8. 提交到 graphics queue,并立刻 `vkQueueWaitIdle()` +9. `vkMapMemory(...)` 读取 staging buffer +10. 以 `P6` PPM 格式把 RGB 写到文件 + +如果交换链格式是 `VK_FORMAT_B8G8R8A8_UNORM`,写文件前还会做 BGR 到 RGB 的通道调整。 + +## 输出格式 + +- 当前输出是二进制 PPM:`P6` +- 只写 RGB,不写 alpha + +这对自动化测试和简单截图验证很方便,但不属于面向最终用户的完整截图系统。 + +## 生命周期 + +- `Capture(...)` 是一次性调用 +- `Shutdown()` 当前为空实现 + +## 线程语义 + +这个功能会创建临时命令对象、提交命令并等待队列空闲,因此应视为同步、重操作,不适合在高频实时路径里滥用。 + +## 设计取向 + +当前实现明显偏向“测试可用、调试可用”: + +- 好处是逻辑直接,结果可靠,便于集成测试落盘比对 +- 代价是完全同步,会阻塞 graphics queue + +## 当前限制 + +- 只抓当前交换链 back buffer +- 读回过程同步并阻塞队列 +- 输出格式只有 PPM +- `Shutdown()` 无额外资源管理逻辑 + +## 主要公开方法 + +- `bool Capture(RHIDevice* device, RHISwapChain* swapChain, const char* filename)` +- `void Shutdown()` + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanDevice](../VulkanDevice/VulkanDevice.md) +- [VulkanSwapChain](../VulkanSwapChain/VulkanSwapChain.md) +- [RHIScreenshot](../../RHIScreenshot/RHIScreenshot.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanShader/Compile.md b/docs/api/XCEngine/RHI/Vulkan/VulkanShader/Compile.md new file mode 100644 index 00000000..63fd4bb0 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanShader/Compile.md @@ -0,0 +1,32 @@ +# VulkanShader::Compile + +```cpp +bool Compile(const void* sourceData, size_t sourceSize, const char* entryPoint, const char* target) override; +``` + +## 作用 + +从内存中的 SPIR-V 数据创建 `VkShaderModule`。 + +## 前置条件 + +- `sourceData` 非空 +- `sourceSize` 非零且能被 `sizeof(uint32_t)` 整除 +- 当前对象已经绑定有效 `VkDevice` + +## 当前实现行为 + +- 不会编译 GLSL/HLSL 文本 +- 只是把输入视为 SPIR-V word 流 +- 最终调用内部 `InitializeFromSpirvWords(...)` + +## 返回值 + +- `true` - shader module 创建成功 +- `false` - 输入非法或 module 创建失败 + +## 相关文档 + +- [VulkanShader](VulkanShader.md) +- [CompileFromFile](CompileFromFile.md) +- [VulkanShaderCompiler](../VulkanShaderCompiler/VulkanShaderCompiler.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanShader/CompileFromFile.md b/docs/api/XCEngine/RHI/Vulkan/VulkanShader/CompileFromFile.md new file mode 100644 index 00000000..12e007c7 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanShader/CompileFromFile.md @@ -0,0 +1,29 @@ +# VulkanShader::CompileFromFile + +```cpp +bool CompileFromFile(const wchar_t* filePath, const char* entryPoint, const char* target) override; +``` + +## 作用 + +从磁盘读取 SPIR-V 二进制文件,并据此创建 `VkShaderModule`。 + +## 当前实现行为 + +- 直接按二进制方式读取文件 +- 文件大小必须大于零,且必须按 4 字节对齐 +- 读入后会转发到 `Compile(...)` + +## 注意事项 + +这个接口当前针对的是 `.spv` 文件;如果你手上是 GLSL 文本文件,应先走 [CompileVulkanShader](../VulkanShaderCompiler/CompileVulkanShader.md) 路径。 + +## 返回值 + +- `true` - 读取并创建成功 +- `false` - 文件缺失、格式不对或 module 创建失败 + +## 相关文档 + +- [VulkanShader](VulkanShader.md) +- [Compile](Compile.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanShader/GetUniformInfo.md b/docs/api/XCEngine/RHI/Vulkan/VulkanShader/GetUniformInfo.md new file mode 100644 index 00000000..b273d739 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanShader/GetUniformInfo.md @@ -0,0 +1,24 @@ +# VulkanShader::GetUniformInfo + +```cpp +const UniformInfo* GetUniformInfo(const char* name) const override; +``` + +## 作用 + +按名称查找 shader 的 uniform 元信息。 + +## 当前实现行为 + +- 如果 `name == nullptr`,直接返回 `nullptr` +- 否则在线性遍历 `m_uniformInfos` 后返回匹配项 +- 但当前 Vulkan shader 实现并没有完整构建 uniform 反射数据,因此这个接口通常只能提供很有限的信息 + +## 返回值 + +- `const UniformInfo*` - 找到时返回对应记录 +- `nullptr` - 没找到或当前没有可用反射数据 + +## 相关文档 + +- [VulkanShader](VulkanShader.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanShader/Shutdown.md b/docs/api/XCEngine/RHI/Vulkan/VulkanShader/Shutdown.md new file mode 100644 index 00000000..f17924b4 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanShader/Shutdown.md @@ -0,0 +1,19 @@ +# VulkanShader::Shutdown + +```cpp +void Shutdown() override; +``` + +## 作用 + +销毁当前 `VkShaderModule`,并清空 shader 类型、入口点与反射缓存。 + +## 当前实现行为 + +- 如果 `m_shaderModule` 与 `m_device` 都有效,会调用 `vkDestroyShaderModule(...)` +- 随后把 module、type、entry point 和 `m_uniformInfos` 全部重置 + +## 相关文档 + +- [VulkanShader](VulkanShader.md) +- [Compile](Compile.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanShader/VulkanShader.md b/docs/api/XCEngine/RHI/Vulkan/VulkanShader/VulkanShader.md new file mode 100644 index 00000000..492cf3b4 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanShader/VulkanShader.md @@ -0,0 +1,121 @@ +# VulkanShader + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanShader.h` + +**描述**: Vulkan 后端里的 `RHIShader` 实现,负责把 SPIR-V 数据包装成 `VkShaderModule`,并解析 shader stage 与入口点。 + +## 概览 + +`VulkanShader` 的职责很聚焦:它不是完整的“着色器编译系统”,而是 Vulkan shader module 的持有者。 + +它主要处理三件事: + +- 接收 SPIR-V 字节流或 `.spv` 文件 +- 从 SPIR-V 元数据或 target hint 推断 `ShaderType` +- 创建并持有 `VkShaderModule` + +真正负责把 GLSL 文本编译成 SPIR-V 的,是 [VulkanShaderCompiler](../VulkanShaderCompiler/VulkanShaderCompiler.md)。也就是说,这个类更接近“已编译 shader 对象”,而不是“编译器前端”。 + +## 生命周期 + +典型顺序是: + +1. 由 [VulkanDevice](../VulkanDevice/VulkanDevice.md) 创建 `VulkanShader` +2. 设备先把输入编译或整理为 SPIR-V +3. `Compile()` 或 `CompileFromFile()` 创建 `VkShaderModule` +4. pipeline state 在创建阶段引用该 shader +5. 不再使用时 `Shutdown()` + +析构函数会调用 `Shutdown()`。如果当前对象仍持有 `VkShaderModule`,`Shutdown()` 会调用 `vkDestroyShaderModule()` 释放原生资源。 + +## 当前实现的真实行为 + +### 输入格式 + +- `Compile(const void* sourceData, size_t sourceSize, ...)` 只接受 SPIR-V word 流 +- `CompileFromFile(...)` 也只接受二进制 `.spv` 文件 +- 如果输入不是 4 字节对齐的 SPIR-V payload,会直接失败 + +这点很重要:`VulkanShader` 本身不编译 GLSL/HLSL 文本。文本输入必须先经过 `VulkanShaderCompiler`。 + +### stage 与入口点解析 + +`InitializeFromSpirvWords()` 的行为是: + +- 先验证 SPIR-V magic number `0x07230203` +- 优先从 SPIR-V `OpEntryPoint` 指令里解析执行模型和入口点 +- 如果解析不到 stage,再退回 `targetHint` +- 入口点优先级为:`entryPointHint` > SPIR-V 模块里解析出的入口点 > `"main"` + +这意味着当前实现对标准 SPIR-V 模块相当友好,也允许调用方在必要时通过 hint 补足信息。 + +### Uniform 反射 + +- `GetUniformInfos()` 返回 `m_uniformInfos` +- `GetUniformInfo(name)` 只是在这个数组里线性查找 +- 但当前实现并没有完整的 Vulkan/SPIR-V 反射流程去填充这些 uniform 信息 + +因此从真实行为看,uniform 反射能力目前仍比较初级。不要把这个接口误解成已经等价于成熟商业引擎里的 shader reflection system。 + +## 线程语义 + +从源码看,`VulkanShader` 没有内部同步。更稳妥的约束是: + +- 创建、销毁和编译由调用方串行控制 +- 不要在多个线程上同时对同一个 `VulkanShader` 实例重复 `Compile()` + +## 所有权与资源管理 + +- `VulkanShader` 持有 `VkShaderModule` +- `SetDevice()` 只是写入设备句柄,不转移设备所有权 +- `GetNativeHandle()` 返回 `VkShaderModule` + +## 设计取向 + +把“文本编译”与“native module 持有”拆开,是比较合理的商业引擎设计: + +- 编译步骤通常依赖外部工具链、缓存或导入流程 +- runtime 持有对象则只需要稳定地包装 native handle + +这样做的好处是职责清晰,后续更容易插入 shader cache、离线编译或 asset import 管线;代价是使用者必须理解 `VulkanShader` 和 `VulkanShaderCompiler` 不是同一个层次的东西。 + +如果对照 Unity,可以把 `VulkanShader` 理解成更接近 backend 内部的编译后着色器句柄,而不是 Unity ShaderLab 那种同时承载 authoring、编译和运行时绑定的统一概念。 + +## 当前限制 + +- 只直接接受 SPIR-V 输入 +- 当前 uniform 反射信息基本没有真正建起来 +- 不包含 GLSL/HLSL 文本编译逻辑 +- 不负责 shader cache、变体管理或 asset 导入 + +## 主要公开方法 + +- `bool CompileFromFile(const wchar_t* filePath, const char* entryPoint, const char* target)` +- `bool Compile(const void* sourceData, size_t sourceSize, const char* entryPoint, const char* target)` +- `void Shutdown()` +- `ShaderType GetType() const` +- `bool IsValid() const` +- `void* GetNativeHandle()` +- `const std::vector& GetUniformInfos() const` +- `const UniformInfo* GetUniformInfo(const char* name) const` +- `void SetDevice(VkDevice device)` +- `VkShaderModule GetShaderModule() const` +- `const char* GetEntryPoint() const` + +## 相关测试与使用线索 + +- `tests/RHI/unit/test_shader.cpp` 覆盖了抽象 shader 创建、类型获取、native handle 与 shutdown 行为 +- `tests/RHI/unit/test_vulkan_graphics.cpp` 明确验证了从 SPIR-V、GLSL 源码和 GLSL 文件创建 Vulkan shader 的路径 +- `tests/RHI/unit/test_compute.cpp` 和 `tests/RHI/unit/test_command_list.cpp` 会把 compute shader 接入 pipeline 与 dispatch 流程 + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanDevice](../VulkanDevice/VulkanDevice.md) +- [VulkanShaderCompiler](../VulkanShaderCompiler/VulkanShaderCompiler.md) +- [VulkanPipelineState](../VulkanPipelineState/VulkanPipelineState.md) +- [RHIShader](../../RHIShader/RHIShader.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanShaderCompiler/CompileVulkanShader.md b/docs/api/XCEngine/RHI/Vulkan/VulkanShaderCompiler/CompileVulkanShader.md new file mode 100644 index 00000000..9ebe3334 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanShaderCompiler/CompileVulkanShader.md @@ -0,0 +1,44 @@ +# CompileVulkanShader + +```cpp +bool CompileVulkanShader(const ShaderCompileDesc& desc, + VulkanCompiledShader& outShader, + std::string* errorMessage = nullptr); +``` + +## 作用 + +把 `ShaderCompileDesc` 转换成 Vulkan 可消费的 `VulkanCompiledShader`。 + +## 当前实现行为 + +- 如果输入是 SPIR-V,会直接读取或拷贝 payload,并校验 magic header +- 如果输入被识别为 HLSL,会直接失败 +- 否则按 GLSL 处理: + - 解析 shader stage + - 注入宏 + - 写临时文件 + - 调用 `glslangValidator.exe` + - 读取生成的 `.spv` + +## 参数 + +- `desc` - shader 编译描述 +- `outShader` - 成功时写入 SPIR-V、stage 和入口点 +- `errorMessage` - 可选错误输出 + +## 返回值 + +- `true` - 编译或整理成功 +- `false` - 输入无效、工具链缺失或编译失败 + +## 重要限制 + +- 当前不支持 HLSL 输入 +- GLSL 路径依赖外部 `glslangValidator.exe` + +## 相关文档 + +- [VulkanShaderCompiler](VulkanShaderCompiler.md) +- [VulkanShader](../VulkanShader/VulkanShader.md) +- [VulkanDevice::CreateShader](../VulkanDevice/CreateShader.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanShaderCompiler/VulkanShaderCompiler.md b/docs/api/XCEngine/RHI/Vulkan/VulkanShaderCompiler/VulkanShaderCompiler.md new file mode 100644 index 00000000..862b19e0 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanShaderCompiler/VulkanShaderCompiler.md @@ -0,0 +1,167 @@ +# VulkanShaderCompiler + +**命名空间**: `XCEngine::RHI` + +**类型**: `utility functions` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanShaderCompiler.h` + +**描述**: Vulkan shader 编译辅助入口,负责把 GLSL 或 SPIR-V 输入整理为 `VulkanCompiledShader`,供 `VulkanDevice` / `VulkanShader` 后续创建原生 `VkShaderModule`。 + +## 概览 + +`VulkanShaderCompiler` 不是类,而是一组围绕 `CompileVulkanShader(...)` 组织起来的辅助逻辑。它的定位很明确: + +- 接受 `ShaderCompileDesc` +- 区分输入到底是 SPIR-V、GLSL 还是 HLSL +- 对 GLSL 走外部 `glslangValidator.exe` +- 产出 `VulkanCompiledShader` + +输出结构 `VulkanCompiledShader` 里包含: + +- `spirvWords` +- `type` +- `entryPoint` + +这让上层可以把“文本编译”与“native module 创建”拆开,符合商业引擎里常见的 shader toolchain 分层方式。 + +## 当前实现的真实行为 + +### 输入源判断 + +`CompileVulkanShader(...)` 会按下面顺序处理输入: + +1. 如果没有 `source` 也没有 `fileName`,直接失败 +2. 如果判断为 SPIR-V 输入,直接读取或拷贝 payload +3. 如果判断为 HLSL 输入,直接失败 +4. 否则按 GLSL 文本处理 + +其中: + +- `sourceLanguage == ShaderLanguage::SPIRV` 或文件扩展名为 `.spv`,会被视为 SPIR-V +- `sourceLanguage == ShaderLanguage::HLSL` 或文件扩展名为 `.hlsl`,会被视为 HLSL + +当前错误信息写得很明确:Vulkan 后端目前支持 `GLSL` 或 `SPIR-V`,不支持 `HLSL source`。 + +### SPIR-V 路径 + +- 可以直接接收内存中的 SPIR-V bytes +- 也可以从 `.spv` 文件读取 +- 会检查 payload 是否是 4 字节对齐 +- 会检查 magic header 是否有效 +- 会尝试从 SPIR-V 元数据里解析 shader stage 和入口点 + +这条路径最接近商业引擎里的离线编译产物接入方式,也是当前最稳定、最可控的 Vulkan shader 输入方式。 + +### GLSL 路径 + +如果输入是 GLSL,当前流程是: + +1. 从内存或文件读入 GLSL 文本 +2. 根据 `profile`、文件扩展名或源码内容推断 shader stage +3. 把 `ShaderCompileMacro` 变成 `#define` 注入源码 +4. 在系统临时目录写出临时 GLSL 文件与临时 `.spv` 输出路径 +5. 定位 `glslangValidator.exe` +6. 通过 `CreateProcessW` 启动外部编译进程 +7. 读取生成的 `.spv` +8. 删除临时文件 + +这说明当前实现是“运行时壳调用外部编译器”,不是内嵌 glslang 库,也不是引擎资产管线的离线缓存编译器。 + +### shader stage 推断 + +当前 GLSL stage 解析优先级是: + +1. `desc.profile` +2. 文件扩展名 +3. 源码特征 + +源码特征推断里,当前会用一些启发式规则,例如: + +- 出现 `local_size_x`、`gl_GlobalInvocationID`、`imageStore`、`imageLoad`,倾向判定为 compute +- 出现 `gl_Position`,倾向判定为 vertex +- 出现 `gl_FragCoord`、`gl_FragDepth`、`fragColor`,倾向判定为 fragment + +这很实用,但本质上仍是启发式判断。最稳妥的工程用法依旧是显式给出正确 `profile` 或使用语义明确的文件扩展名。 + +### `glslangValidator.exe` 查找顺序 + +当前查找顺序是: + +1. `VULKAN_SDK/Bin/glslangValidator.exe` +2. `D:/VulkanSDK/*/Bin/glslangValidator.exe` +3. `PATH` 里的 `glslangValidator.exe` + +如果找不到,会返回错误信息,提示安装 Vulkan SDK 或把工具加到 `PATH`。 + +### 宏注入 + +`ShaderCompileMacro` 会被转成 `#define NAME VALUE` 形式插入源码: + +- 如果源码以 `#version` 开头,会把宏块插到 `#version` 之后 +- 否则直接插到文件最前面 + +这符合 GLSL 的常见使用习惯,也便于未来和材质关键字、shader variant 系统对接。 + +## 生命周期与适用场景 + +`CompileVulkanShader(...)` 本身是一次性函数式调用,没有持久对象状态。更适合以下场景: + +- 运行时测试直接从内存字符串生成 shader +- 工具链尚未完整搭好之前的临时编译方案 +- 把已有 `.spv` 产物接入 Vulkan backend + +如果未来要做商业级内容管线,通常会把更多工作前移到导入阶段或构建阶段,而不是每次运行时都启动外部编译器。 + +## 线程语义 + +函数内部不维护全局共享状态,但会创建临时文件并启动外部进程。工程上仍建议: + +- 把同一批 shader 编译任务放到明确的工具线程或资源导入线程管理 +- 不要假设它是零成本调用 + +## 设计取向 + +当前实现的优点是非常务实: + +- 不依赖复杂的内部编译器接入 +- 可直接复用 Vulkan SDK 现成工具链 +- 易于被单元测试和集成测试驱动 + +代价也很明确: + +- 依赖外部 `glslangValidator.exe` +- 运行时编译会产生进程启动与临时文件开销 +- HLSL 路径尚未打通 + +如果对照 Unity,这一层更像引擎内部 shader import / translation 工具链的雏形,而不是成熟的、跨平台统一的 shader authoring system。 + +## 当前限制 + +- 只支持 GLSL 与 SPIR-V 输入 +- 当前不支持 HLSL 输入 +- GLSL 编译依赖外部 `glslangValidator.exe` +- shader stage 推断部分依赖启发式规则 +- 不负责 shader cache、变体数据库、平台批量离线编译 + +## 公开入口 + +- `struct VulkanCompiledShader` +- `bool CompileVulkanShader(const ShaderCompileDesc& desc, VulkanCompiledShader& outShader, std::string* errorMessage = nullptr)` + +## 相关测试与使用线索 + +- `tests/RHI/unit/test_shader.cpp` 覆盖了抽象 shader 编译入口 +- `tests/RHI/unit/test_vulkan_graphics.cpp` 明确验证了: + - 从 SPIR-V 创建有效 compute shader + - 从 GLSL 源码创建有效 vertex shader + - 从 GLSL 文件创建有效 vertex shader + - 从 GLSL 源码自动推断 compute shader +- `tests/RHI/integration/triangle`、`quad`、`sphere`、`backpack` 的构建脚本都会查找 `glslangValidator` + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanDevice](../VulkanDevice/VulkanDevice.md) +- [VulkanShader](../VulkanShader/VulkanShader.md) +- [RHIShader](../../RHIShader/RHIShader.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/AcquireNextImage.md b/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/AcquireNextImage.md new file mode 100644 index 00000000..cb14cba2 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/AcquireNextImage.md @@ -0,0 +1,31 @@ +# VulkanSwapChain::AcquireNextImage + +```cpp +bool AcquireNextImage(); +``` + +## 作用 + +获取下一张可用的交换链图像,并更新当前 back buffer 索引。 + +## 当前实现行为 + +- 每次调用都会临时创建一个 `VkFence` +- 调用 `vkAcquireNextImageKHR(...)` +- 若结果为 `VK_SUCCESS` 或 `VK_SUBOPTIMAL_KHR`,会等待 fence 完成 +- 等待结束后销毁该 fence,并返回 `true` + +## 影响 + +这是一条同步 acquire 路径,适合当前测试和基础渲染链路,但不是更成熟的常驻同步对象方案。 + +## 返回值 + +- `true` - 成功拿到图像 +- `false` - acquire 失败 + +## 相关文档 + +- [VulkanSwapChain](VulkanSwapChain.md) +- [GetCurrentBackBuffer](GetCurrentBackBuffer.md) +- [Present](Present.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/GetCurrentBackBuffer.md b/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/GetCurrentBackBuffer.md new file mode 100644 index 00000000..185a649a --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/GetCurrentBackBuffer.md @@ -0,0 +1,24 @@ +# VulkanSwapChain::GetCurrentBackBuffer + +```cpp +RHITexture* GetCurrentBackBuffer() override; +``` + +## 作用 + +返回当前交换链图像对应的 `VulkanTexture` 包装对象。 + +## 当前实现行为 + +- 根据 `m_currentImageIndex` 从 `m_backBuffers` 里取对象 +- 索引越界时返回 `nullptr` + +## 注意事项 + +返回的是借用指针,生命周期受交换链及其重建过程影响。 + +## 相关文档 + +- [VulkanSwapChain](VulkanSwapChain.md) +- [AcquireNextImage](AcquireNextImage.md) +- [Resize](Resize.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/Initialize.md b/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/Initialize.md new file mode 100644 index 00000000..a1a9280c --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/Initialize.md @@ -0,0 +1,30 @@ +# VulkanSwapChain::Initialize + +```cpp +bool Initialize(VulkanDevice* device, VulkanCommandQueue* presentQueue, HWND__* window, uint32_t width, uint32_t height); +``` + +## 作用 + +初始化 Vulkan 交换链对象,创建 surface 并建立 swap chain 资源。 + +## 前置条件 + +- `device`、`presentQueue`、`window` 都必须有效 + +## 当前实现行为 + +- 保存设备、呈现队列、窗口句柄和目标宽高 +- 先调用 `CreateSurface(window)` +- 再调用 `CreateSwapChainResources()` +- 任一步失败返回 `false` + +## 注意事项 + +当前实现是 Win32 surface 路径,窗口句柄按 `HWND__*` 解释。 + +## 相关文档 + +- [VulkanSwapChain](VulkanSwapChain.md) +- [AcquireNextImage](AcquireNextImage.md) +- [Present](Present.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/Present.md b/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/Present.md new file mode 100644 index 00000000..4251aa41 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/Present.md @@ -0,0 +1,25 @@ +# VulkanSwapChain::Present + +```cpp +void Present(uint32_t syncInterval = 1, uint32_t flags = 0) override; +``` + +## 作用 + +把当前 back buffer 提交给窗口系统显示。 + +## 当前实现行为 + +- 如果呈现队列或 swap chain 无效,直接返回 +- 组装 `VkPresentInfoKHR` +- 调用 `vkQueuePresentKHR(...)` +- `syncInterval` 和 `flags` 当前被显式忽略 + +## 注意事项 + +不要把 `syncInterval` 视为当前 Vulkan 后端已经实现的垂直同步控制接口。 + +## 相关文档 + +- [VulkanSwapChain](VulkanSwapChain.md) +- [AcquireNextImage](AcquireNextImage.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/Resize.md b/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/Resize.md new file mode 100644 index 00000000..c4a6288b --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/Resize.md @@ -0,0 +1,24 @@ +# VulkanSwapChain::Resize + +```cpp +void Resize(uint32_t width, uint32_t height) override; +``` + +## 作用 + +按新尺寸重建交换链资源。 + +## 当前实现行为 + +- 先更新 `m_width` 和 `m_height` +- 调用 `DestroySwapChainResources()` +- 再调用 `CreateSwapChainResources()` + +## 注意事项 + +这是完整销毁再重建路径。调用前应由外部保证 GPU 不再使用旧 back buffer 资源。 + +## 相关文档 + +- [VulkanSwapChain](VulkanSwapChain.md) +- [GetCurrentBackBuffer](GetCurrentBackBuffer.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/VulkanSwapChain.md b/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/VulkanSwapChain.md new file mode 100644 index 00000000..9f8e865d --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanSwapChain/VulkanSwapChain.md @@ -0,0 +1,153 @@ +# VulkanSwapChain + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanSwapChain.h` + +**描述**: Vulkan 后端里的 `RHISwapChain` 实现,负责创建 Win32 surface、`VkSwapchainKHR` 以及与之对应的 back buffer 包装对象。 + +## 概览 + +`VulkanSwapChain` 把窗口系统的呈现链路接入 RHI。它的定位不是“普通纹理容器”,而是 backend 和平台窗口之间的桥梁: + +- 把 `HWND` 变成 `VkSurfaceKHR` +- 按 surface 能力创建 `VkSwapchainKHR` +- 把每个交换链图像包装成 `VulkanTexture` +- 管理当前 back buffer 索引,并负责 `AcquireNextImage()` 与 `Present()` + +这和商业引擎里的 game view / player window backbuffer 管线很像。用户通常不会手写 Vulkan 的 surface 和 swapchain 管理代码,而是通过引擎封装拿到“当前 back buffer”。 + +## 生命周期 + +典型顺序是: + +1. 由 [VulkanDevice](../VulkanDevice/VulkanDevice.md) 创建交换链 +2. `Initialize(device, presentQueue, window, width, height)` +3. 每帧开始时先 `AcquireNextImage()` +4. 通过 `GetCurrentBackBuffer()` 取得当前 back buffer +5. 渲染完成后调用 `Present()` +6. 窗口尺寸变化时调用 `Resize()` +7. 退出时调用 `Shutdown()` + +按当前集成测试的真实用法,Vulkan 路径会在每帧 `BeginRender()` 阶段显式调用 `AcquireNextImage()`,然后再根据 `GetCurrentBackBufferIndex()` 设置 render target。 + +## 当前实现的真实行为 + +### 平台与 surface + +- `CreateSurface()` 当前固定走 `VkWin32SurfaceCreateInfoKHR` +- 输入窗口类型是 `HWND__*` +- 这说明当前公开实现是 Win32 专属窗口路径 + +如果未来要支持 Linux、Android 或 macOS,需要从这里扩展不同平台的 surface 创建分支。 + +### 格式与 present mode 选择 + +`CreateSwapChainResources()` 的当前策略是: + +- 优先 `VK_FORMAT_R8G8B8A8_UNORM` +- 如果没有,再尝试 `VK_FORMAT_B8G8R8A8_UNORM` +- present mode 默认 `VK_PRESENT_MODE_FIFO_KHR` +- 如果支持 `VK_PRESENT_MODE_MAILBOX_KHR`,则优先切到 mailbox + +这属于比较务实的商业引擎默认策略:先保证兼容性,再尽量选更合适的格式与呈现模式。 + +### 使用标志与图像数量 + +- 当前明确要求 surface 支持 `VK_IMAGE_USAGE_TRANSFER_DST_BIT` 和 `VK_IMAGE_USAGE_TRANSFER_SRC_BIT` +- 交换链图像 usage 被设置为 `COLOR_ATTACHMENT | TRANSFER_DST | TRANSFER_SRC` +- 图像数量至少取 `max(2, minImageCount)` + +之所以要求 `TRANSFER_SRC` / `TRANSFER_DST`,是因为当前后端和测试路径会对 back buffer 做截图、拷贝和清图相关操作。 + +### back buffer 包装 + +- `vkGetSwapchainImagesKHR()` 拿到原生 `VkImage` +- 每个图像都会被包装成一个 `std::unique_ptr` +- 这些 `VulkanTexture` 是交换链图像视图下的包装对象,不拥有交换链本身 + +也就是说,`m_backBuffers` 拥有的是“引擎侧纹理包装对象”,不是底层 swapchain image 的独立所有权。真正的原生图像生命周期仍跟着 `VkSwapchainKHR` 走。 + +### 图像获取与呈现 + +- `AcquireNextImage()` 当前每次都会临时创建一个 `VkFence` +- 调用 `vkAcquireNextImageKHR(...)` +- 成功或 `VK_SUBOPTIMAL_KHR` 时,会立刻 `vkWaitForFences(...)`,然后销毁该 fence +- `Present()` 直接调用 `vkQueuePresentKHR(...)` +- `Present(syncInterval, flags)` 中的 `syncInterval` 和 `flags` 当前被忽略 + +因此当前实现不是“高性能、低开销的常驻同步对象模型”,而是偏同步、偏直接的早期 backend 实现。 + +### Resize 行为 + +- `Resize(width, height)` 会先更新宽高 +- 然后销毁旧 swap chain 资源 +- 再重新 `CreateSwapChainResources()` + +这是一条标准的重建路径,但当前没有更细粒度的旧资源迁移或帧内重建协调逻辑,调用方应自己保证 Resize 时机安全。 + +## 线程语义 + +从实现看,`VulkanSwapChain` 没有内部锁。更可靠的工程约束是: + +- 图像获取、呈现和 resize 由渲染主线程或 render thread 串行完成 +- 不要并发调用 `AcquireNextImage()` 与 `Present()` +- 不要在重建交换链的同时继续持有旧 back buffer 做录制 + +## 所有权与资源管理 + +- `VulkanSwapChain` 拥有 `VkSurfaceKHR` +- `VulkanSwapChain` 拥有 `VkSwapchainKHR` +- `VulkanSwapChain` 拥有 `m_backBuffers` 这些 `VulkanTexture` 包装对象 +- `GetCurrentBackBuffer()` 返回借用指针,不转移所有权 + +## 设计取向 + +这个类的设计优先级很明确: + +- 先把 RHI 的窗口呈现路径打通 +- 先满足截图、拷贝、集成测试所需的 back buffer 使用方式 +- 先用最直白的 acquire / present 流程保证正确性 + +它更像“商业引擎里已经能支撑编辑器窗口与测试样例的第一版 swapchain backend”,而不是已经把多帧同步、最小化重建抖动和 frame pacing 全部打磨完成的终态实现。 + +如果拿 Unity 做类比,可以把它理解成支撑 Game View / Player Backbuffer 的底层后端对象,而不是一个面向业务脚本开放的独立图像 API。 + +## 当前限制 + +- 当前只支持 Win32 surface +- `AcquireNextImage()` 每次临时创建并等待 fence +- `Present()` 忽略 `syncInterval` 和 `flags` +- 没有显式暴露更复杂的 per-frame semaphore/fence 复用模型 +- Resize 是销毁并整体重建,不包含更高级的平滑切换策略 + +## 主要公开方法 + +- `bool Initialize(VulkanDevice* device, VulkanCommandQueue* presentQueue, HWND__* window, uint32_t width, uint32_t height)` +- `bool AcquireNextImage()` +- `void Shutdown()` +- `uint32_t GetCurrentBackBufferIndex() const` +- `RHITexture* GetCurrentBackBuffer()` +- `void Present(uint32_t syncInterval = 1, uint32_t flags = 0)` +- `void Resize(uint32_t width, uint32_t height)` +- `void* GetNativeHandle()` + +## 相关测试与使用线索 + +- `tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp` 在 Vulkan 分支里每帧显式调用 `AcquireNextImage()` +- `tests/RHI/integration/quad`、`triangle`、`sphere`、`backpack` 等集成用例都会经过交换链呈现路径 +- `tests/RHI/unit/test_vulkan_graphics.cpp` 也间接依赖 Vulkan 纹理与图形输出链路 + +## 相关指南 + +- [Devices, Queues, Command Lists, And Resource Creation](../../../../_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md) + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanDevice](../VulkanDevice/VulkanDevice.md) +- [VulkanCommandQueue](../VulkanCommandQueue/VulkanCommandQueue.md) +- [VulkanTexture](../VulkanTexture/VulkanTexture.md) +- [RHISwapChain](../../RHISwapChain/RHISwapChain.md) diff --git a/docs/api/XCEngine/RHI/Vulkan/VulkanTexture/VulkanTexture.md b/docs/api/XCEngine/RHI/Vulkan/VulkanTexture/VulkanTexture.md new file mode 100644 index 00000000..9435a3a9 --- /dev/null +++ b/docs/api/XCEngine/RHI/Vulkan/VulkanTexture/VulkanTexture.md @@ -0,0 +1,112 @@ +# VulkanTexture + +**命名空间**: `XCEngine::RHI` + +**类型**: `class` + +**头文件**: `XCEngine/RHI/Vulkan/VulkanTexture.h` + +**描述**: Vulkan 后端里的 `RHITexture` 实现,封装 `VkImage`、可选的 `VkDeviceMemory` 以及软件侧资源状态。 + +## 概览 + +`VulkanTexture` 的核心职责是持有一张 Vulkan 图像,并把它暴露成统一的 RHI 纹理对象。 + +当前实现明确分成两种来源: + +- 交换链图像包装:`InitializeSwapChainImage(...)` +- 自有图像包装:`InitializeOwnedImage(...)` + +## 生命周期 + +### 交换链图像 + +- 由 [VulkanSwapChain](../VulkanSwapChain/VulkanSwapChain.md) 创建包装对象 +- 不拥有底层 `VkImage` +- 交换链重建时一起销毁包装对象 + +### 自有图像 + +- 通常由 [VulkanDevice](../VulkanDevice/VulkanDevice.md) 创建 +- 持有 `VkImage` 和 `VkDeviceMemory` +- `Shutdown()` 时释放原生资源 + +## 当前实现的真实行为 + +### 两条初始化路径 + +`InitializeSwapChainImage(...)` 会: + +- 记录 `VkImage` +- 宽高固定为 2D 图像语义 +- `m_ownsImage = false` +- 初始状态设为 `ResourceStates::Common` + +`InitializeOwnedImage(...)` 会: + +- 要求 `device`、`image`、`memory` 都有效 +- 记录宽高深度、mip 数、格式和纹理类型 +- `m_ownsImage = true` + +### 资源销毁行为 + +`Shutdown()` 当前逻辑是: + +- 如果 `m_ownsImage` 为真,则销毁 `VkImage` +- 只要 `m_memory` 有效,就释放 `VkDeviceMemory` +- 最后把尺寸、格式、状态和句柄全部清零 + +因此交换链图像包装对象不会错误销毁 swapchain image,本地创建的 owned image 才会真正释放原生图像。 + +### 状态跟踪 + +- `GetState()` / `SetState()` 维护的是软件侧 `ResourceStates` +- Vulkan 驱动本身并不会替你保存这个高层状态语义 +- 命令列表和设备会基于这份状态去决定 barrier / layout 转换 + +## 线程语义 + +没有内部同步。调用方应自己保证: + +- 状态修改与命令录制时序一致 +- 不要并发销毁正在被 view 或 command list 使用的 texture + +## 设计取向 + +把“交换链图像包装”和“自有图像”统一进一个类型,是比较实用的 backend 设计: + +- 上层大部分代码可以统一按 `RHITexture` 使用 +- backend 仍然保留了是否拥有原生图像的真实差异 + +## 当前限制 + +- 当前类型本身不管理 `VkImageView` +- barrier 状态是软件侧记录 +- 交换链图像与自有图像的能力边界需要调用方通过 `OwnsImage()` / `IsSwapChainImage()` 理解清楚 + +## 主要公开方法 + +- `bool InitializeSwapChainImage(...)` +- `bool InitializeOwnedImage(...)` +- `void Shutdown()` +- `uint32_t GetWidth() const` +- `uint32_t GetHeight() const` +- `uint32_t GetDepth() const` +- `uint32_t GetMipLevels() const` +- `Format GetFormat() const` +- `TextureType GetTextureType() const` +- `ResourceStates GetState() const` +- `void SetState(ResourceStates state)` +- `void* GetNativeHandle()` +- `VkImage GetImage() const` +- `VkDeviceMemory GetMemory() const` +- `VkFormat GetVkFormat() const` +- `bool OwnsImage() const` +- `bool IsSwapChainImage() const` + +## 相关文档 + +- [Vulkan](../Vulkan.md) +- [VulkanSwapChain](../VulkanSwapChain/VulkanSwapChain.md) +- [VulkanResourceView](../VulkanResourceView/VulkanResourceView.md) +- [RHITexture](../../RHITexture/RHITexture.md) diff --git a/docs/api/XCEngine/Rendering/CameraRenderRequest/CameraRenderRequest.md b/docs/api/XCEngine/Rendering/CameraRenderRequest/CameraRenderRequest.md new file mode 100644 index 00000000..8bccbe93 --- /dev/null +++ b/docs/api/XCEngine/Rendering/CameraRenderRequest/CameraRenderRequest.md @@ -0,0 +1,52 @@ +# CameraRenderRequest + +**命名空间**: `XCEngine::Rendering` + +**类型**: `struct` + +**头文件**: `XCEngine/Rendering/CameraRenderRequest.h` + +**描述**: 把一次“用哪台相机、在什么上下文、向哪个目标表面渲染”的请求打包成显式数据对象。 + +## 概览 + +`CameraRenderRequest` 是 `CameraRenderer` 和 `SceneRenderer` 之间的请求载体。它不负责自己执行渲染,而是把这一帧需要的最小输入集中起来: + +- `scene` 指向要提取可见物体的场景。 +- `camera` 指向本次渲染使用的相机组件。 +- `context` 持有当前帧要用的 RHI 设备、命令队列和命令列表。 +- `surface` 描述渲染目标尺寸、附件和状态切换要求。 +- `cameraDepth` 保存请求排序时要用的深度值。 +- `clearFlags` 指定这台相机希望如何清理目标表面。 + +这种“显式请求对象”设计和商业引擎里常见的 render request / render view 思路一致。好处是相机选择、排序、目标表面分配和真正 draw call 执行可以解耦,而不是把所有逻辑都塞进一个大函数里。 + +## 数据契约 + +| 字段 | 说明 | +|------|------| +| `scene` | 不能为 `nullptr`,否则当前请求无效。 | +| `camera` | 不能为 `nullptr`,通常由 `SceneRenderer` 自动挑选,或由调用方显式覆盖。 | +| `context` | 必须通过 [RenderContext::IsValid](../RenderContext/IsValid.md) 校验。 | +| `surface` | 保存目标尺寸与附件描述;当前 `IsValid()` 不检查它是否完整。 | +| `cameraDepth` | 主要用于多相机请求排序,`SceneRenderer` 会按它从小到大排序。 | +| `clearFlags` | 当前会在提交前直接写入 `RenderSceneData::cameraData.clearFlags`。 | + +## 当前实现边界 + +- `IsValid()` 只检查 `scene`、`camera` 和 `context`,不会验证 `surface` 是否真正挂了颜色或深度附件。 +- `cameraDepth` 只是排序辅助值,当前 `CameraRenderer` 自身并不会拿它做额外逻辑。 +- `clearFlags` 会覆盖提取阶段得到的 `cameraData.clearFlags`,因此请求对象是当前这条链路里更高优先级的输入。 + +## 公开成员 + +| 成员 | 说明 | +|------|------| +| [IsValid](IsValid.md) | 检查这份请求是否满足最基本的提交流程前提。 | + +## 相关文档 + +- [CameraRenderer](../CameraRenderer/CameraRenderer.md) +- [SceneRenderer](../SceneRenderer/SceneRenderer.md) +- [RenderContext](../RenderContext/RenderContext.md) +- [RenderSurface](../RenderSurface/RenderSurface.md) diff --git a/docs/api/XCEngine/Rendering/CameraRenderRequest/IsValid.md b/docs/api/XCEngine/Rendering/CameraRenderRequest/IsValid.md new file mode 100644 index 00000000..95294524 --- /dev/null +++ b/docs/api/XCEngine/Rendering/CameraRenderRequest/IsValid.md @@ -0,0 +1,48 @@ +# CameraRenderRequest::IsValid + +**命名空间**: `XCEngine::Rendering` + +**类型**: `method` + +**头文件**: `XCEngine/Rendering/CameraRenderRequest.h` + +## 签名 + +```cpp +bool IsValid() const +``` + +## 作用 + +检查当前请求是否至少具备“可以进入相机渲染流程”的基本条件。 + +## 当前实现行为 + +按头文件内联实现,当前只检查三件事: + +```cpp +return scene != nullptr && + camera != nullptr && + context.IsValid(); +``` + +这意味着: + +- `surface` 不参与校验。 +- `cameraDepth` 和 `clearFlags` 也不参与校验。 +- 只要 `RenderContext` 无效,整个请求就会被 `CameraRenderer::Render()` 直接拒绝。 + +## 返回值 + +- 返回 `true`:`scene`、`camera` 非空,且 `context` 通过校验。 +- 返回 `false`:至少有一个基础条件不满足。 + +## 使用建议 + +- 这只是“最小可提交”校验,不等价于“渲染一定成功”。 +- 如果调用方自己构造请求,仍然应该保证 `surface` 尺寸、附件和状态切换配置合理。 + +## 相关文档 + +- [CameraRenderRequest](CameraRenderRequest.md) +- [CameraRenderer::Render](../CameraRenderer/Render.md) diff --git a/docs/api/XCEngine/Rendering/CameraRenderer/CameraRenderer.md b/docs/api/XCEngine/Rendering/CameraRenderer/CameraRenderer.md new file mode 100644 index 00000000..e4d665a5 --- /dev/null +++ b/docs/api/XCEngine/Rendering/CameraRenderer/CameraRenderer.md @@ -0,0 +1,65 @@ +# CameraRenderer + +**命名空间**: `XCEngine::Rendering` + +**类型**: `class` + +**头文件**: `XCEngine/Rendering/CameraRenderer.h` + +**描述**: 面向单个相机请求的轻量渲染执行器,负责提取该相机视角下的场景数据并交给当前管线。 + +## 概览 + +`CameraRenderer` 可以理解成当前渲染层里的“单相机提交器”。它不负责决定要渲染哪些相机,也不负责管理 swap chain,而是聚焦在一件事上: + +1. 校验 [CameraRenderRequest](../CameraRenderRequest/CameraRenderRequest.md)。 +2. 用 `RenderSceneExtractor` 从场景中抽取该相机看到的数据。 +3. 把结果交给当前 `RenderPipeline`。 + +这和很多商业引擎里“scene renderer 负责组织 camera list,camera renderer 负责执行单 camera pass”的分层很接近。这样做的好处是未来要扩展多相机、离屏目标、编辑器预览窗口时,不必把所有逻辑堆在同一个类里。 + +## 生命周期 + +- 默认构造会自动创建 `Pipelines::BuiltinForwardPipeline`。 +- 传入自定义管线构造时,如果传的是空 `unique_ptr`,当前实现也会回退到默认前向管线。 +- 析构时如果当前管线存在,会显式调用 `Shutdown()`。 +- [SetPipeline](SetPipeline.md) 在替换管线前也会先对旧管线执行 `Shutdown()`。 + +## 所有权 + +- `CameraRenderer` 通过 `std::unique_ptr` 独占持有当前管线。 +- 调用方一旦把管线传给构造函数或 [SetPipeline](SetPipeline.md),所有权就转移给 `CameraRenderer`。 + +## 线程语义 + +- 当前实现没有内部锁。 +- `Render()`、`SetPipeline()` 和析构都假定由渲染主线程或拥有明确时序保证的调用点执行。 +- 不应在一个线程渲染的同时,另一个线程替换或销毁管线。 + +## 当前实现边界 + +- `Render()` 内部使用 `ExtractForCamera()`,因此它只处理单相机场景提取。 +- 如果提取后 `sceneData.HasCamera()` 为假,即使请求对象本身有效,也会返回 `false`。 +- 当前不会在 `Render()` 里调用 `Initialize()`;默认前向管线如何初始化,取决于具体管线自身实现。 + +## 公开方法 + +| 方法 | 说明 | +|------|------| +| [Constructor](Constructor.md) | 创建相机渲染器,并建立默认或注入的管线。 | +| [Destructor](Destructor.md) | 关闭当前管线。 | +| [SetPipeline](SetPipeline.md) | 替换当前渲染管线。 | +| [GetPipeline](GetPipeline.md) | 读取当前持有的管线裸指针。 | +| [Render](Render.md) | 执行一次单相机渲染请求。 | + +## 真实使用位置 + +- `SceneRenderer` 当前把多相机流程拆成多个 `CameraRenderRequest` 后,逐个交给 `CameraRenderer`。 +- `tests/Rendering/unit/test_camera_scene_renderer.cpp` 验证了相机覆盖、清屏标志传递、管线替换和析构关停行为。 + +## 相关文档 + +- [CameraRenderRequest](../CameraRenderRequest/CameraRenderRequest.md) +- [SceneRenderer](../SceneRenderer/SceneRenderer.md) +- [RenderPipeline](../RenderPipeline/RenderPipeline.md) +- [Scene Extraction And Builtin Forward Pipeline](../../../_guides/Rendering/Scene-Extraction-And-Builtin-Forward-Pipeline.md) diff --git a/docs/api/XCEngine/Rendering/CameraRenderer/Constructor.md b/docs/api/XCEngine/Rendering/CameraRenderer/Constructor.md new file mode 100644 index 00000000..7e6ffebe --- /dev/null +++ b/docs/api/XCEngine/Rendering/CameraRenderer/Constructor.md @@ -0,0 +1,39 @@ +# CameraRenderer::Constructor + +**命名空间**: `XCEngine::Rendering` + +**类型**: `constructor` + +**头文件**: `XCEngine/Rendering/CameraRenderer.h` + +## 签名 + +```cpp +CameraRenderer(); +explicit CameraRenderer(std::unique_ptr pipeline); +``` + +## 作用 + +创建一个可执行单相机渲染的 `CameraRenderer`,并为它准备当前要使用的渲染管线。 + +## 当前实现行为 + +- 默认构造:直接创建 `Pipelines::BuiltinForwardPipeline`。 +- 注入构造:优先接管调用方传入的管线。 +- 如果注入构造拿到的是空 `unique_ptr`,当前实现会回退成默认的 `BuiltinForwardPipeline`,而不是让对象进入“无管线”状态。 + +## 所有权 + +- 第二个重载会接管 `pipeline` 的所有权。 +- 调用结束后,原来的 `unique_ptr` 会被移动为空。 + +## 使用建议 + +- 如果你只是想沿用引擎当前默认渲染路径,直接用默认构造。 +- 如果你要插入测试管线、调试管线或自定义前向/延迟管线,用注入构造更合适。 + +## 相关文档 + +- [CameraRenderer](CameraRenderer.md) +- [CameraRenderer::SetPipeline](SetPipeline.md) diff --git a/docs/api/XCEngine/Rendering/CameraRenderer/Destructor.md b/docs/api/XCEngine/Rendering/CameraRenderer/Destructor.md new file mode 100644 index 00000000..0822a7e0 --- /dev/null +++ b/docs/api/XCEngine/Rendering/CameraRenderer/Destructor.md @@ -0,0 +1,36 @@ +# CameraRenderer::~CameraRenderer + +**命名空间**: `XCEngine::Rendering` + +**类型**: `destructor` + +**头文件**: `XCEngine/Rendering/CameraRenderer.h` + +## 签名 + +```cpp +~CameraRenderer(); +``` + +## 作用 + +在对象销毁前关闭当前持有的渲染管线。 + +## 当前实现行为 + +- 如果 `m_pipeline` 非空,析构函数会调用一次 `m_pipeline->Shutdown()`。 +- 之后由 `std::unique_ptr` 自身负责释放管线对象内存。 + +## 设计含义 + +这说明当前渲染层把“释放 GPU 侧状态”视为管线对象自己的职责,而不是单纯依赖 C++ 析构。这样能让 `RenderPipeline` 把资源回收逻辑集中在 `Shutdown()` 中,也便于替换管线时复用同一条关停路径。 + +## 注意事项 + +- 由于没有加锁,不应在别的线程仍然使用当前管线时销毁 `CameraRenderer`。 +- 如果你在生命周期中途就要切换管线,优先调用 [SetPipeline](SetPipeline.md),不要等到析构时再被动释放。 + +## 相关文档 + +- [CameraRenderer](CameraRenderer.md) +- [CameraRenderer::SetPipeline](SetPipeline.md) diff --git a/docs/api/XCEngine/Rendering/CameraRenderer/GetPipeline.md b/docs/api/XCEngine/Rendering/CameraRenderer/GetPipeline.md new file mode 100644 index 00000000..54d2afb5 --- /dev/null +++ b/docs/api/XCEngine/Rendering/CameraRenderer/GetPipeline.md @@ -0,0 +1,37 @@ +# CameraRenderer::GetPipeline + +**命名空间**: `XCEngine::Rendering` + +**类型**: `method` + +**头文件**: `XCEngine/Rendering/CameraRenderer.h` + +## 签名 + +```cpp +RenderPipeline* GetPipeline() const; +``` + +## 作用 + +返回当前持有的渲染管线裸指针,便于外部查询当前绑定的是哪条管线。 + +## 当前实现行为 + +- 这是头文件内联访问器,直接返回 `m_pipeline.get()`。 +- 不转移所有权,也不增加生命周期保证。 + +## 返回值 + +- 返回当前管线的裸指针。 +- 理论上可能为 `nullptr`,但按当前构造和 `SetPipeline()` 的策略,正常路径下通常总会有一条默认管线。 + +## 注意事项 + +- 不要在外部缓存这个指针并假设它长期有效;`SetPipeline()` 后它可能立刻失效。 +- 如果只是要替换管线,应使用 [SetPipeline](SetPipeline.md),不要手动管理这个裸指针。 + +## 相关文档 + +- [CameraRenderer](CameraRenderer.md) +- [CameraRenderer::SetPipeline](SetPipeline.md) diff --git a/docs/api/XCEngine/Rendering/CameraRenderer/Render.md b/docs/api/XCEngine/Rendering/CameraRenderer/Render.md new file mode 100644 index 00000000..391d898c --- /dev/null +++ b/docs/api/XCEngine/Rendering/CameraRenderer/Render.md @@ -0,0 +1,65 @@ +# CameraRenderer::Render + +**命名空间**: `XCEngine::Rendering` + +**类型**: `method` + +**头文件**: `XCEngine/Rendering/CameraRenderer.h` + +## 签名 + +```cpp +bool Render(const CameraRenderRequest& request); +``` + +## 作用 + +执行一次单相机渲染请求。 + +## 当前实现流程 + +按 `engine/src/Rendering/CameraRenderer.cpp`,当前流程固定为: + +1. 如果 `request.IsValid()` 为假,返回 `false`。 +2. 如果当前没有管线,返回 `false`。 +3. 调用 `m_sceneExtractor.ExtractForCamera(*request.scene, *request.camera, request.surface.GetWidth(), request.surface.GetHeight())` 提取场景数据。 +4. 如果提取结果 `sceneData.HasCamera()` 为假,返回 `false`。 +5. 用 `request.clearFlags` 覆盖 `sceneData.cameraData.clearFlags`。 +6. 调用 `m_pipeline->Render(request.context, request.surface, sceneData)`,并把结果直接返回。 + +## 参数 + +| 参数 | 说明 | +|------|------| +| `request` | 本次相机渲染的完整输入。 | + +## 返回值 + +- 返回 `true`:请求通过校验,提取到有效相机数据,且当前管线 `Render()` 返回成功。 +- 返回 `false`:请求无效、管线为空、提取失败,或管线执行失败。 + +## 关键语义 + +- 当前实现会信任请求里的 `camera`,不再重新挑选最高深度主相机。 +- `surface` 的宽高会直接传给场景提取器,用来生成相机视口数据。 +- `clearFlags` 以请求对象为准,因此外部调度器可以统一覆盖某次渲染的清理策略。 + +## 最小可置信示例 + +```cpp +CameraRenderRequest request; +request.scene = &scene; +request.camera = camera; +request.context = context; +request.surface = RenderSurface(1280, 720); +request.clearFlags = RenderClearFlags::All; + +CameraRenderer renderer; +const bool ok = renderer.Render(request); +``` + +## 相关文档 + +- [CameraRenderRequest](../CameraRenderRequest/CameraRenderRequest.md) +- [RenderSceneExtractor](../RenderSceneExtractor/RenderSceneExtractor.md) +- [RenderPipeline::Render](../RenderPipeline/Render.md) diff --git a/docs/api/XCEngine/Rendering/CameraRenderer/SetPipeline.md b/docs/api/XCEngine/Rendering/CameraRenderer/SetPipeline.md new file mode 100644 index 00000000..a3426294 --- /dev/null +++ b/docs/api/XCEngine/Rendering/CameraRenderer/SetPipeline.md @@ -0,0 +1,46 @@ +# CameraRenderer::SetPipeline + +**命名空间**: `XCEngine::Rendering` + +**类型**: `method` + +**头文件**: `XCEngine/Rendering/CameraRenderer.h` + +## 签名 + +```cpp +void SetPipeline(std::unique_ptr pipeline); +``` + +## 作用 + +替换 `CameraRenderer` 当前持有的渲染管线。 + +## 当前实现行为 + +按 `engine/src/Rendering/CameraRenderer.cpp` 的实现,替换流程是: + +1. 如果旧管线存在,先调用旧管线的 `Shutdown()`。 +2. 用传入的 `unique_ptr` 覆盖当前管线。 +3. 如果新指针为空,再自动回退成 `Pipelines::BuiltinForwardPipeline`。 + +## 参数 + +| 参数 | 说明 | +|------|------| +| `pipeline` | 新的渲染管线所有权。可以为空;为空时会自动回退到默认前向管线。 | + +## 副作用 + +- 会主动关闭旧管线,而不是简单替换指针。 +- 传入空指针并不会让渲染器失效;当前实现选择“总有一条默认管线可用”。 + +## 使用建议 + +- 如果你在测试里注入 mock pipeline,这个接口是最合适的切换点。 +- 如果新旧管线有共享的 GPU 资源管理需求,当前实现没有做迁移与热切换,只是单纯关旧建新。 + +## 相关文档 + +- [CameraRenderer](CameraRenderer.md) +- [CameraRenderer::GetPipeline](GetPipeline.md) diff --git a/docs/api/XCEngine/Rendering/RenderMaterialUtility/ApplyMaterialRenderState.md b/docs/api/XCEngine/Rendering/RenderMaterialUtility/ApplyMaterialRenderState.md new file mode 100644 index 00000000..77fc0867 --- /dev/null +++ b/docs/api/XCEngine/Rendering/RenderMaterialUtility/ApplyMaterialRenderState.md @@ -0,0 +1,50 @@ +# ApplyMaterialRenderState + +**命名空间**: `XCEngine::Rendering` + +**类型**: `function` + +**头文件**: `XCEngine/Rendering/RenderMaterialUtility.h` + +## 签名 + +```cpp +void ApplyMaterialRenderState( + const Resources::Material* material, + RHI::GraphicsPipelineDesc& pipelineDesc); +``` + +## 作用 + +把材质对应的栅格化、混合和深度状态一次性写入 `GraphicsPipelineDesc`。 + +## 当前实现行为 + +当前实现非常直接: + +```cpp +pipelineDesc.rasterizerState = BuildRasterizerState(material); +pipelineDesc.blendState = BuildBlendState(material); +pipelineDesc.depthStencilState = BuildDepthStencilState(material); +``` + +也就是说,这个函数本身不加任何额外策略,只是统一调用三组状态构建函数。 + +## 参数 + +| 参数 | 说明 | +|------|------| +| `material` | 材质,可为空。 | +| `pipelineDesc` | 待写入的图形管线描述。 | + +## 适用场景 + +- 在 builtin forward pipeline 组装 draw call 或 PSO 描述时,把材质 render state 映射成后端无关结构。 +- 在未来要做状态缓存时,也适合作为统一的预处理入口。 + +## 相关文档 + +- [RenderMaterialUtility](RenderMaterialUtility.md) +- [BuildRasterizerState](BuildRasterizerState.md) +- [BuildBlendState](BuildBlendState.md) +- [BuildDepthStencilState](BuildDepthStencilState.md) diff --git a/docs/api/XCEngine/Rendering/RenderMaterialUtility/BuildBlendState.md b/docs/api/XCEngine/Rendering/RenderMaterialUtility/BuildBlendState.md new file mode 100644 index 00000000..ab80031f --- /dev/null +++ b/docs/api/XCEngine/Rendering/RenderMaterialUtility/BuildBlendState.md @@ -0,0 +1,32 @@ +# BuildBlendState + +**命名空间**: `XCEngine::Rendering` + +**类型**: `function` + +**头文件**: `XCEngine/Rendering/RenderMaterialUtility.h` + +## 签名 + +```cpp +RHI::BlendDesc BuildBlendState(const Resources::Material* material); +``` + +## 作用 + +从材质的混合配置构建 RHI 侧 `BlendDesc`。 + +## 当前实现行为 + +- `material == nullptr` 时返回零初始化的 `BlendDesc`。 +- 有材质时,会把 `blendEnable`、颜色/Alpha 的源因子、目标因子、混合操作以及 `colorWriteMask` 全部映射到 RHI 描述。 + +## 注意事项 + +- 当前映射完全依赖 `MaterialRenderState`,不会做额外策略补丁。 +- 如果调用方传空材质,得到的是“无显式混合配置”的默认描述,而不是一套行业标准透明配置。 + +## 相关文档 + +- [BuildDepthStencilState](BuildDepthStencilState.md) +- [ApplyMaterialRenderState](ApplyMaterialRenderState.md) diff --git a/docs/api/XCEngine/Rendering/RenderMaterialUtility/BuildDepthStencilState.md b/docs/api/XCEngine/Rendering/RenderMaterialUtility/BuildDepthStencilState.md new file mode 100644 index 00000000..fdbf231a --- /dev/null +++ b/docs/api/XCEngine/Rendering/RenderMaterialUtility/BuildDepthStencilState.md @@ -0,0 +1,37 @@ +# BuildDepthStencilState + +**命名空间**: `XCEngine::Rendering` + +**类型**: `function` + +**头文件**: `XCEngine/Rendering/RenderMaterialUtility.h` + +## 签名 + +```cpp +RHI::DepthStencilStateDesc BuildDepthStencilState(const Resources::Material* material); +``` + +## 作用 + +从材质构建深度/模板状态描述。 + +## 当前实现行为 + +默认值为: + +- `depthTestEnable = true` +- `depthWriteEnable = true` +- `depthFunc = Less` +- `stencilEnable = false` + +如果 `material != nullptr`,会用材质的 `depthTestEnable`、`depthWriteEnable` 和 `depthFunc` 覆盖对应字段。当前没有从材质暴露模板状态细节。 + +## 设计含义 + +当前实现强调“默认可用的基础深度语义”,还不是完整的 render state authoring 系统。对一个仍在演进中的引擎来说,这样的默认值足以支撑基础前向渲染,但文档里必须明确它还没覆盖完整模板工作流。 + +## 相关文档 + +- [BuildBlendState](BuildBlendState.md) +- [ApplyMaterialRenderState](ApplyMaterialRenderState.md) diff --git a/docs/api/XCEngine/Rendering/RenderMaterialUtility/BuildRasterizerState.md b/docs/api/XCEngine/Rendering/RenderMaterialUtility/BuildRasterizerState.md new file mode 100644 index 00000000..514c0203 --- /dev/null +++ b/docs/api/XCEngine/Rendering/RenderMaterialUtility/BuildRasterizerState.md @@ -0,0 +1,37 @@ +# BuildRasterizerState + +**命名空间**: `XCEngine::Rendering` + +**类型**: `function` + +**头文件**: `XCEngine/Rendering/RenderMaterialUtility.h` + +## 签名 + +```cpp +RHI::RasterizerDesc BuildRasterizerState(const Resources::Material* material); +``` + +## 作用 + +把材质的栅格化相关设置翻译成 RHI 侧的 `RasterizerDesc`。 + +## 当前实现行为 + +默认值为: + +- `fillMode = Solid` +- `cullMode = None` +- `frontFace = CounterClockwise` +- `depthClipEnable = true` + +如果 `material != nullptr`,当前只会用材质里的 `renderState.cullMode` 覆盖 `cullMode`;其他字段仍保持默认值。 + +## 设计含义 + +这说明当前材质系统对栅格化状态的暴露还比较克制,主要先解决剔除模式映射,尚未扩展到 fill mode 或 front face 的材质级可配置。 + +## 相关文档 + +- [ApplyMaterialRenderState](ApplyMaterialRenderState.md) +- [BuildBlendState](BuildBlendState.md) diff --git a/docs/api/XCEngine/Rendering/RenderMaterialUtility/IsTransparentRenderQueue.md b/docs/api/XCEngine/Rendering/RenderMaterialUtility/IsTransparentRenderQueue.md new file mode 100644 index 00000000..0de84b84 --- /dev/null +++ b/docs/api/XCEngine/Rendering/RenderMaterialUtility/IsTransparentRenderQueue.md @@ -0,0 +1,37 @@ +# IsTransparentRenderQueue + +**命名空间**: `XCEngine::Rendering` + +**类型**: `function` + +**头文件**: `XCEngine/Rendering/RenderMaterialUtility.h` + +## 签名 + +```cpp +bool IsTransparentRenderQueue(Core::int32 renderQueue); +``` + +## 作用 + +判断一个 queue 是否属于透明物体区间。 + +## 当前实现行为 + +当前规则非常直接: + +```cpp +return renderQueue >= + static_cast(Resources::MaterialRenderQueue::Transparent); +``` + +也就是说,`Transparent` 及其之后的 queue 都会被视为透明队列。 + +## 用途 + +`RenderSceneExtractor` 当前就依赖这条规则,把不透明物体做前到后排序,把透明物体做后到前排序。 + +## 相关文档 + +- [ResolveMaterialRenderQueue](ResolveMaterialRenderQueue.md) +- [RenderSceneExtractor](../RenderSceneExtractor/Extract.md) diff --git a/docs/api/XCEngine/Rendering/RenderMaterialUtility/MatchesBuiltinPass.md b/docs/api/XCEngine/Rendering/RenderMaterialUtility/MatchesBuiltinPass.md new file mode 100644 index 00000000..064740f4 --- /dev/null +++ b/docs/api/XCEngine/Rendering/RenderMaterialUtility/MatchesBuiltinPass.md @@ -0,0 +1,41 @@ +# MatchesBuiltinPass + +**命名空间**: `XCEngine::Rendering` + +**类型**: `function` + +**头文件**: `XCEngine/Rendering/RenderMaterialUtility.h` + +## 签名 + +```cpp +bool MatchesBuiltinPass(const Resources::Material* material, BuiltinMaterialPass pass); +``` + +## 作用 + +判断材质是否匹配当前内建渲染通道。 + +## 当前实现行为 + +当前只对 `BuiltinMaterialPass::Forward` 做了明确逻辑: + +- 如果 `material == nullptr`,直接返回 `true`。 +- 先检查 `material->GetShaderPass()`。 +- 再检查 `material->GetTag("LightMode")`。 +- 这两个字段只要非空且不属于 `forward / forwardbase / forwardlit / forwardonly`,就返回 `false`。 +- 两边都通过时返回 `true`。 + +## 设计含义 + +这是一套偏宽松的前向通道匹配策略。它允许: + +- 完全没写 pass 元数据的简单材质先跑起来。 +- 使用不同命名习惯但语义接近的前向 pass 被统一接纳。 + +代价是当前还谈不上完整的多 pass 调度系统,更接近“builtin forward pipeline 的白名单过滤器”。 + +## 相关文档 + +- [RenderMaterialUtility](RenderMaterialUtility.md) +- [ResolveMaterial](ResolveMaterial.md) diff --git a/docs/api/XCEngine/Rendering/RenderMaterialUtility/RenderMaterialUtility.md b/docs/api/XCEngine/Rendering/RenderMaterialUtility/RenderMaterialUtility.md new file mode 100644 index 00000000..4c64c57d --- /dev/null +++ b/docs/api/XCEngine/Rendering/RenderMaterialUtility/RenderMaterialUtility.md @@ -0,0 +1,76 @@ +# RenderMaterialUtility + +**命名空间**: `XCEngine::Rendering` + +**类型**: `utility header` + +**头文件**: `XCEngine/Rendering/RenderMaterialUtility.h` + +**描述**: 把 `Material` 的渲染语义翻译成当前渲染层和 RHI 能直接消费的选择规则与状态描述。 + +## 概览 + +`RenderMaterialUtility.h` 不是一个运行时对象,而是一组内联工具函数与辅助枚举。它解决的是“材质资源层”和“实际绘制层”之间的翻译问题: + +- 先决定这次绘制到底用哪份 `Material`。 +- 再判断这份材质是否属于当前内建 pass。 +- 然后把材质里的 render state 翻译成 RHI 描述结构。 + +这类 utility header 在商业引擎里很常见,因为材质解析、render queue 判定、RHI 状态映射本质上都是无状态规则,不值得再包成有生命周期的服务对象。 + +## 公开概念 + +### BuiltinMaterialPass + +当前只定义了一个内建 pass: + +| 枚举值 | 说明 | +|------|------| +| `BuiltinMaterialPass::Forward` | 表示默认前向绘制通道。 | + +### 当前前向 pass 识别规则 + +按 `MatchesBuiltinPass()` 当前实现,以下值会被视为前向 pass: + +- 空字符串 +- `forward` +- `forwardbase` +- `forwardlit` +- `forwardonly` + +比较前会先做 `Trim().ToLower()` 归一化,并同时检查 `GetShaderPass()` 与 `GetTag("LightMode")`。 + +## 设计要点 + +- 材质选择逻辑单独抽出来,可以让 `RenderSceneExtractor` 和具体管线共用同一套规则。 +- render queue 和透明度判定放在这里,可以保证排序语义不散落在多个调用点。 +- RHI 状态构建函数把资源层枚举翻译成后端无关描述,这比直接在管线里读 `Material` 细节更干净。 + +## 当前实现边界 + +- 只覆盖当前引擎已有的 `MaterialRenderState` 字段,不负责 shader variant、keyword 或多 pass 编排。 +- 默认值是“可用但保守”的最小实现,例如栅格化默认 `CullMode::None`、深度默认开启且比较函数为 `Less`。 +- `MatchesBuiltinPass(nullptr, ...)` 当前返回 `true`,这意味着“没有材质”在 pass 过滤阶段不会被拦掉。 + +## 公开函数 + +| 函数 | 说明 | +|------|------| +| [ResolveMaterial](ResolveMaterial.md) | 按当前约定解析可见物体实际使用的材质。 | +| [ResolveMaterialRenderQueue](ResolveMaterialRenderQueue.md) | 读取材质 render queue,空材质时回退到 `Geometry`。 | +| [IsTransparentRenderQueue](IsTransparentRenderQueue.md) | 判断一个 queue 是否属于透明区间。 | +| [MatchesBuiltinPass](MatchesBuiltinPass.md) | 判断材质是否匹配当前内建 pass。 | +| [BuildRasterizerState](BuildRasterizerState.md) | 从材质构建栅格化状态。 | +| [BuildBlendState](BuildBlendState.md) | 从材质构建混合状态。 | +| [BuildDepthStencilState](BuildDepthStencilState.md) | 从材质构建深度模板状态。 | +| [ApplyMaterialRenderState](ApplyMaterialRenderState.md) | 一次性把材质状态写入 `GraphicsPipelineDesc`。 | + +## 其他辅助函数 + +头文件里还提供了 `ToRHICullMode`、`ToRHIComparisonFunc`、`ToRHIBlendFactor`、`ToRHIBlendOp`、`MaterialRenderStateHash` 等内联辅助工具。它们主要服务于状态映射与缓存键构建,当前更适合被视为实现支撑件,而不是高层调用入口。 + +## 相关文档 + +- [RenderSceneExtractor](../RenderSceneExtractor/RenderSceneExtractor.md) +- [VisibleRenderObject](../VisibleRenderObject/VisibleRenderObject.md) +- [BuiltinForwardPipeline](../Pipelines/BuiltinForwardPipeline/BuiltinForwardPipeline.md) diff --git a/docs/api/XCEngine/Rendering/RenderMaterialUtility/ResolveMaterial.md b/docs/api/XCEngine/Rendering/RenderMaterialUtility/ResolveMaterial.md new file mode 100644 index 00000000..00f1f772 --- /dev/null +++ b/docs/api/XCEngine/Rendering/RenderMaterialUtility/ResolveMaterial.md @@ -0,0 +1,57 @@ +# ResolveMaterial + +**命名空间**: `XCEngine::Rendering` + +**类型**: `function` + +**头文件**: `XCEngine/Rendering/RenderMaterialUtility.h` + +## 签名 + +```cpp +const Resources::Material* ResolveMaterial( + const Components::MeshRendererComponent* meshRenderer, + const Resources::Mesh* mesh, + Core::uint32 materialIndex); + +const Resources::Material* ResolveMaterial(const VisibleRenderItem& visibleItem); +``` + +## 作用 + +根据 `MeshRendererComponent`、`Mesh` 和 section/material 索引,解析本次绘制真正应当使用的材质。 + +## 当前实现行为 + +三参数重载当前按以下顺序回退: + +1. `meshRenderer` 的 `materialIndex` 槽位。 +2. `mesh` 自带材质数组的 `materialIndex` 槽位。 +3. `meshRenderer` 的第 0 个材质。 +4. `mesh` 的第 0 个材质。 +5. 全部都没有则返回 `nullptr`。 + +`VisibleRenderItem` 重载会先看 `visibleItem.material`;只有它为空时,才走上面的回退链。 + +## 设计含义 + +这是一种偏商业引擎的“组件覆盖优先,资源默认值兜底”策略: + +- `MeshRendererComponent` 代表场景实例级覆盖。 +- `Mesh` 自带材质更像资源默认值。 +- `VisibleRenderItem.material` 则是提取阶段已经确认好的最终覆盖结果。 + +## 返回值 + +- 返回解析到的 `Material*`。 +- 如果所有来源都没有材质,返回 `nullptr`。 + +## 注意事项 + +- 返回空材质不一定会导致后续流程中断;当前很多工具函数会对空材质提供默认行为。 +- 这套规则是当前实现契约,未来如果引擎引入 submesh override stack,解析优先级可能扩展。 + +## 相关文档 + +- [RenderMaterialUtility](RenderMaterialUtility.md) +- [MatchesBuiltinPass](MatchesBuiltinPass.md) diff --git a/docs/api/XCEngine/Rendering/RenderMaterialUtility/ResolveMaterialRenderQueue.md b/docs/api/XCEngine/Rendering/RenderMaterialUtility/ResolveMaterialRenderQueue.md new file mode 100644 index 00000000..2faf5e47 --- /dev/null +++ b/docs/api/XCEngine/Rendering/RenderMaterialUtility/ResolveMaterialRenderQueue.md @@ -0,0 +1,31 @@ +# ResolveMaterialRenderQueue + +**命名空间**: `XCEngine::Rendering` + +**类型**: `function` + +**头文件**: `XCEngine/Rendering/RenderMaterialUtility.h` + +## 签名 + +```cpp +Core::int32 ResolveMaterialRenderQueue(const Resources::Material* material); +``` + +## 作用 + +读取材质的 render queue;如果没有材质,则回退到默认的几何队列。 + +## 当前实现行为 + +- `material != nullptr` 时返回 `material->GetRenderQueue()`。 +- `material == nullptr` 时返回 `MaterialRenderQueue::Geometry`。 + +## 设计意义 + +这让“无材质物体”仍然可以参与当前排序流程,而不是在 queue 判定阶段立刻失去语义。 + +## 相关文档 + +- [IsTransparentRenderQueue](IsTransparentRenderQueue.md) +- [ResolveMaterial](ResolveMaterial.md) diff --git a/docs/api/XCEngine/Rendering/Rendering.md b/docs/api/XCEngine/Rendering/Rendering.md index e4fd5230..12164186 100644 --- a/docs/api/XCEngine/Rendering/Rendering.md +++ b/docs/api/XCEngine/Rendering/Rendering.md @@ -4,66 +4,43 @@ **类型**: `module` -**描述**: 提供场景提取、渲染表面描述、渲染管线抽象、GPU 资源缓存和内建前向渲染实现。 +**描述**: 提供场景提取、相机渲染请求、渲染目标表面、渲染管线抽象和内建前向渲染实现。 -## 概述 +## 概览 -当前 `XCEngine::Rendering` 的公开接口可以按一条很清晰的链路来理解: +当前 `XCEngine::Rendering` 可以按一条比较清楚的链路理解: -1. [SceneRenderer](SceneRenderer/SceneRenderer.md) 接收场景、相机覆盖、RHI 上下文和目标表面。 -2. [RenderSceneExtractor](RenderSceneExtractor/RenderSceneExtractor.md) 把 `Scene` 里的相机和可渲染物体整理成 `RenderSceneData`。 -3. [RenderSurface](RenderSurface/RenderSurface.md) 描述当前帧要往哪里渲染,以及渲染前后资源状态怎么切换。 -4. [RenderPipeline](RenderPipeline/RenderPipeline.md) 负责真正把 `RenderSceneData` 变成 draw call。 -5. [Pipelines::BuiltinForwardPipeline](Pipelines/BuiltinForwardPipeline/BuiltinForwardPipeline.md) 是当前默认的具体管线实现。 -6. [RenderResourceCache](RenderResourceCache/RenderResourceCache.md) 在渲染时把 `Mesh` / `Texture` 上传成 RHI 资源并缓存。 +1. [SceneRenderer](SceneRenderer/SceneRenderer.md) 负责多相机请求组织与排序。 +2. [CameraRenderRequest](CameraRenderRequest/CameraRenderRequest.md) 把单次相机渲染的输入打包成显式请求。 +3. [CameraRenderer](CameraRenderer/CameraRenderer.md) 负责执行单相机渲染。 +4. [RenderSceneExtractor](RenderSceneExtractor/RenderSceneExtractor.md) 从场景中抽取当前相机可见的数据。 +5. [RenderSurface](RenderSurface/RenderSurface.md) 描述渲染目标、附件与状态切换。 +6. [RenderPipeline](RenderPipeline/RenderPipeline.md) 定义真正执行绘制的后端无关接口。 +7. [Pipelines::BuiltinForwardPipeline](Pipelines/BuiltinForwardPipeline/BuiltinForwardPipeline.md) 是当前默认管线实现。 -这个分层思路和很多商业引擎的渲染架构是同一路数: - -- 场景系统负责维护对象和组件。 -- 渲染系统先做“提取”与“整理”。 -- 管线层再决定真正的绘制策略。 - -它和 Unity SRP、Unreal 渲染前的数据提取阶段相比还很轻量,但方向是对的。 - -## 当前实现成熟度 - -当前模块已经可以支撑基础前向渲染链路,但还明显不是完整渲染框架: - -- `SceneRenderer + BuiltinForwardPipeline` 已经有集成测试覆盖,能渲染纹理四边形和 backpack 场景。 -- `RenderSceneExtractor` 已经能选择相机并收集激活的 mesh 对象。 -- `RenderSurface` 已经能描述颜色/深度附件、清屏色覆盖和自动状态切换。 -- `RenderResourceCache` 已经能上传基础网格和 `RGBA8` 纹理。 - -但当前也有一组必须诚实写清楚的限制: - -- `RenderSceneExtractor` 当前不做视锥裁剪、遮挡裁剪或排序。 -- `MeshRendererComponent` 的 `renderLayer`、`castShadows`、`receiveShadows` 当前不会影响提取结果和绘制行为。 -- `RenderResourceCache` 以资源裸指针为 key,不跟踪资源内容变更,也不是线程安全的。 -- `RenderPipelineAsset` 只是抽象工厂入口,当前没有公开的具体 asset 类型。 -- `BuiltinForwardPipeline` 当前只覆盖非常基础的单通道前向贴图绘制。 +这类“请求组织层 -> 提取层 -> 管线执行层”的拆分,与商业引擎里常见的 camera rendering architecture 很接近。它的优势是未来要扩展更多相机类型、离屏渲染目标或替换整个管线时,不必把所有逻辑塞进一个大类里。 ## 设计要点 -- 把“场景提取”和“渲染执行”分开,是为了给未来的排序、裁剪、批处理和多管线扩展留空间。 -- `RenderSurface` 把 framebuffer 目标和状态切换要求抽象出来,避免管线直接依赖 swap chain 细节。 -- `RenderPipeline` / `RenderPipelineAsset` 的存在,说明这套接口是按“未来可以替换渲染管线”的方向设计的,而不是把 draw 逻辑硬编码在场景类里。 -- `RenderResourceCache` 把运行时 GPU 上传集中到渲染层处理,避免场景对象直接持有 RHI 对象。 +- 把多相机调度和单相机执行拆开,便于排序和后续扩展。 +- 场景提取与真正绘制分层,给可见性、排序和批处理预留演进空间。 +- `RenderMaterialUtility` 统一承担材质解析、render queue 判定和 RHI 状态翻译,避免这些规则散落在多个调用点。 +- `RenderSurface` 把目标尺寸、附件和状态切换要求显式化,减少管线对具体平台窗口细节的直接依赖。 -## 测试覆盖 +## 当前实现边界 -当前能看到的直接覆盖包括: - -- `tests/Rendering/unit/test_render_scene_extractor.cpp` -- `tests/Rendering/integration/textured_quad_scene/main.cpp` -- `tests/Rendering/integration/backpack_scene/main.cpp` -- `tests/Components/test_mesh_render_components.cpp` - -这说明“场景提取 + 默认前向渲染 + mesh 组件序列化”已经有基本验证,但资源缓存和管线细节仍缺少更细的单元测试。 +- 当前默认路径仍然是轻量级内建前向渲染,而不是完整 SRP 或延迟渲染框架。 +- `CameraRenderer` 当前只负责单相机;多相机排序仍由 `SceneRenderer` 组织。 +- `RenderSceneExtractor` 已支持基本的相机选择、可见项收集和 render queue 排序,但还没有完整视锥裁剪、遮挡裁剪和高级批处理。 +- 材质状态映射目前足够支撑基础前向绘制,但还谈不上完整商业引擎材质系统。 ## 头文件 +- [CameraRenderRequest](CameraRenderRequest/CameraRenderRequest.md) - `CameraRenderRequest.h` +- [CameraRenderer](CameraRenderer/CameraRenderer.md) - `CameraRenderer.h` - [RenderCameraData](RenderCameraData/RenderCameraData.md) - `RenderCameraData.h` - [RenderContext](RenderContext/RenderContext.md) - `RenderContext.h` +- [RenderMaterialUtility](RenderMaterialUtility/RenderMaterialUtility.md) - `RenderMaterialUtility.h` - [RenderPipeline](RenderPipeline/RenderPipeline.md) - `RenderPipeline.h` - [RenderPipelineAsset](RenderPipelineAsset/RenderPipelineAsset.md) - `RenderPipelineAsset.h` - [RenderResourceCache](RenderResourceCache/RenderResourceCache.md) - `RenderResourceCache.h` @@ -75,14 +52,12 @@ ## 相关指南 -- [Scene Extraction And Builtin Forward Pipeline](../../_guides/Rendering/Scene-Extraction-And-Builtin-Forward-Pipeline.md) - 解释为什么渲染要先做 scene extraction,再交给 builtin forward pipeline 执行,以及当前实现和商业引擎常见设计相比还差什么。 +- [Scene Extraction And Builtin Forward Pipeline](../../_guides/Rendering/Scene-Extraction-And-Builtin-Forward-Pipeline.md) - 解释场景提取、相机请求和内建前向管线之间的当前协作关系。 ## 相关文档 - [Scene](../Scene/Scene.md) - [Components](../Components/Components.md) -- [MeshFilterComponent](../Components/MeshFilterComponent/MeshFilterComponent.md) -- [MeshRendererComponent](../Components/MeshRendererComponent/MeshRendererComponent.md) - [RHI](../RHI/RHI.md) - [上级目录](../XCEngine.md) - [API 总索引](../../main.md) diff --git a/docs/api/_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md b/docs/api/_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md new file mode 100644 index 00000000..fbc4244a --- /dev/null +++ b/docs/api/_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md @@ -0,0 +1,236 @@ +# Devices, Queues, Command Lists, And Resource Creation + +## 这篇指南解决什么问题 + +如果只看 `RHI` 目录下的类型名,很容易知道“有设备、有队列、有命令列表”,但不容易知道: + +- 当前真实初始化顺序是什么 +- 哪些对象负责创建,哪些对象负责提交 +- 生命周期应该怎么收尾 +- 这层抽象和 Unity、Unreal、原生图形 API 分别是什么关系 + +这篇指南专门把这些问题讲清楚。 + +## 先建立正确心智模型 + +`XCEngine::RHI` 不是最终给游戏逻辑直接使用的渲染 API,它是更靠近后端实现的一层基础渲染抽象。 + +更准确地说: + +- 它比 Unity 常见 gameplay 层接触到的渲染接口更底层。 +- 它比原生 D3D12 / OpenGL / Vulkan API 更统一。 +- 它更像商业引擎内部的 render backend layer。 + +如果拿成熟引擎做类比: + +- 和 Unity 的关系:更接近 SRP / 图形后端内部会接触的那一层,而不是 MonoBehaviour 侧的普通渲染入口。 +- 和 Unreal 的关系:更接近低层 RHI 的思路。 + +这么设计的好处是: + +- 后端 bring-up 更直接 +- 图形测试可以绕开更高层 renderer,直接验证抽象层 +- 上层 renderer 有明确的后端适配边界 + +代价是: + +- 使用显式、样板多 +- 生命周期管理要求更严格 +- 当前还会看到一部分后端痕迹和未完全收敛的接口 + +## 当前最真实的使用路径 + +按源码和测试总结,当前推荐按下面顺序理解: + +1. 用 [RHIFactory](../../XCEngine/RHI/RHIFactory/RHIFactory.md) 选择后端并创建 [RHIDevice](../../XCEngine/RHI/RHIDevice/RHIDevice.md)。 +2. 调用 `device->Initialize()` 初始化设备。 +3. 读取 `GetCapabilities()` / `GetDeviceInfo()` 决定可用路径。 +4. 通过 `device` 创建 [RHICommandQueue](../../XCEngine/RHI/RHICommandQueue/RHICommandQueue.md)。 +5. 通过 `device` 创建 [RHICommandList](../../XCEngine/RHI/RHICommandList/RHICommandList.md)。 +6. 通过 `device` 创建 buffer、texture、resource view、render pass、framebuffer、descriptor pool / set、pipeline state 等对象。 +7. 在 command list 上 `Reset()` 后录制命令,再 `Close()`。 +8. 通过 queue 提交命令并用 fence 同步。 +9. 对所有对象执行 `Shutdown()`,最后 `delete`。 + +## 一个最小化示意流程 + +下面这段更接近“当前抽象层的使用骨架”,不是完整 renderer: + +```cpp +using namespace XCEngine::RHI; + +RHIDevice* device = RHIFactory::CreateRHIDevice(RHIType::D3D12); +if (device == nullptr) { + return; +} + +RHIDeviceDesc deviceDesc = {}; +deviceDesc.enableDebugLayer = true; + +if (!device->Initialize(deviceDesc)) { + delete device; + return; +} + +CommandQueueDesc queueDesc = {}; +queueDesc.queueType = static_cast(CommandQueueType::Direct); +RHICommandQueue* queue = device->CreateCommandQueue(queueDesc); + +CommandListDesc cmdDesc = {}; +cmdDesc.commandListType = static_cast(CommandQueueType::Direct); +RHICommandList* cmd = device->CreateCommandList(cmdDesc); + +BufferDesc vbDesc = {}; +vbDesc.size = 1024; +vbDesc.stride = sizeof(float) * 8; +vbDesc.bufferType = static_cast(BufferType::Vertex); +RHIBuffer* vertexBuffer = device->CreateBuffer(vbDesc); + +cmd->Reset(); +cmd->SetPrimitiveTopology(PrimitiveTopology::TriangleList); +cmd->Close(); + +vertexBuffer->Shutdown(); +delete vertexBuffer; +cmd->Shutdown(); +delete cmd; +queue->Shutdown(); +delete queue; +device->Shutdown(); +delete device; +``` + +这里最值得注意的是最后那段清理代码。当前 `RHI` 层不是自动 RAII 托管风格,而是显式关闭、显式释放。 + +## 为什么 `RHIDevice` 会这么“大” + +初看 `RHIDevice` 很容易觉得它过于庞大,因为它几乎包揽了所有对象创建: + +- 资源 +- 队列和命令列表 +- shader / pipeline +- descriptor pool / set +- render pass / framebuffer +- resource view + +但这其实很符合低层图形后端的发展路径。因为这些对象本来就都依赖同一套 native device / context / backend state,把创建权集中到设备上有几个直接好处: + +- 上层只依赖一个统一入口 +- 设备能力与对象创建天然放在一起 +- 后端实现更容易把 native handle、allocator、capabilities 串起来 + +以后如果引擎演进到更成熟阶段,可以再考虑拆分 allocator、descriptor manager、pipeline cache 等子系统;但在当前阶段,这种集中式设备接口是务实的。 + +## `RHICommandQueue` 和 `RHICommandList` 应该怎么分工理解 + +### `RHICommandList` + +负责“录制要做什么”。 + +它当前可以记录: + +- barrier +- render pass +- resource binding +- draw / draw indexed +- dispatch +- clear +- copy + +### `RHICommandQueue` + +负责“把录制好的东西交给 GPU 执行,并管理同步”。 + +它当前还暴露了: + +- fence signal / wait +- idle 等待 +- frame index +- timestamp frequency + +这和显式图形 API 的常规心智模型一致。 + +## 需要提前知道的几个实现事实 + +### 1. 所有权是裸指针 + +当前工厂和设备的大部分创建接口都返回裸指针。测试中普遍采用: + +1. 创建 +2. 使用 +3. `Shutdown()` +4. `delete` + +不要把这层接口自动代入 `shared_ptr` / `unique_ptr` 语义。 + +### 2. 很多描述符字段不是强类型枚举字段 + +例如 `BufferDesc::bufferType`、`TextureDesc::format`、`CommandQueueDesc::queueType` 都是整数类型。正确写法通常需要: + +```cpp +desc.queueType = static_cast(CommandQueueType::Direct); +``` + +### 3. `RHIFactory` 的后端选择受编译开关影响 + +当前真实情况是: + +- `D3D12` 总能创建 +- `OpenGL` 受 `XCENGINE_SUPPORT_OPENGL` 控制 +- `Vulkan` 受 `XCENGINE_SUPPORT_VULKAN` 控制 +- `Metal` 当前返回 `nullptr` + +### 4. 抽象层并没有完全抹平后端差异 + +例如: + +- `RHITypes.h` 里仍能看到 `RootSignatureDesc`、`DescriptorHeapDesc` 这类 D3D12 命名 +- `RHICommandList` 同时保留 render pass 路径和 `SetRenderTargets()` 路径 +- `RHICommandQueue::ExecuteCommandLists()` 仍是 `void**` + +正确的工程心态不是要求它现在就绝对纯净,而是接受它正处在“可用、可扩展、逐步收敛”的阶段。 + +## 和 Unity 风格设计该怎么对应 + +如果你更熟悉 Unity,需要避免一个常见误区:不要把这层直接理解成“Unity 的 public rendering API”。 + +更准确的对应关系是: + +- Unity gameplay / Component 层 + 对应 XCEngine 更高层的 `Rendering`、组件系统和未来的 renderer 封装 +- Unity 底层图形设备 / SRP 内部命令缓冲 + 才更接近当前 `RHI` + +这种设计的工程收益是: + +- renderer 能做更细粒度控制 +- 后端替换成本更低 +- 图形测试不需要依赖完整场景系统 + +## 常见误用 + +### 忘记 `Shutdown()` + +当前很多对象不能只靠析构做资源回收,至少从测试约定看不应该这么用。 + +### 把所有 `RHIType` 都当成可用后端 + +`Metal` 目前不是可创建后端,`OpenGL` / `Vulkan` 也不是所有构建都可用。 + +### 把 `RHITypes` 当成纯中立 ABI + +它是 C++ 内部描述符集合,不是稳定二进制协议。 + +### 以为 `RHICommandList` 已经完全采用单一抽象范式 + +当前它混合了多种录制路径和状态绑定思路,阅读具体页面时要按“实现事实”理解。 + +## 从这里继续读什么 + +- [RHI](../../XCEngine/RHI/RHI.md) +- [RHIFactory](../../XCEngine/RHI/RHIFactory/RHIFactory.md) +- [RHIDevice](../../XCEngine/RHI/RHIDevice/RHIDevice.md) +- [RHICommandQueue](../../XCEngine/RHI/RHICommandQueue/RHICommandQueue.md) +- [RHICommandList](../../XCEngine/RHI/RHICommandList/RHICommandList.md) +- [RHITypes](../../XCEngine/RHI/RHITypes/RHITypes.md) +- [RHIEnums](../../XCEngine/RHI/RHIEnums/RHIEnums.md) diff --git a/docs/api/_meta/rebuild-status.md b/docs/api/_meta/rebuild-status.md index b6119aa6..fc654a38 100644 --- a/docs/api/_meta/rebuild-status.md +++ b/docs/api/_meta/rebuild-status.md @@ -1,16 +1,16 @@ # API 文档重构状态 -**生成时间**: `2026-03-28 02:28:02` +**生成时间**: `2026-03-28 15:13:19` **来源**: `docs/api/_tools/audit_api_docs.py` ## 摘要 -- Markdown 页面数(全部): `2756` -- Markdown 页面数(canonical): `2736` +- Markdown 页面数(全部): `2881` +- Markdown 页面数(canonical): `2860` - Public headers 数: `227` -- 有效头文件引用数(全部): `216` -- 有效头文件引用数(canonical): `216` +- 有效头文件引用数(全部): `227` +- 有效头文件引用数(canonical): `227` - 无效头文件引用数: `0` - 失效 `.md` 链接数: `0` - 非 `.md` 相对链接数: `0` @@ -21,8 +21,8 @@ - Canonical 根目录: `XCEngine` - 源码目录节点数: `29` -- 已生成目录总览页节点数: `27` -- 缺失目录总览页节点数: `2` +- 已生成目录总览页节点数: `29` +- 缺失目录总览页节点数: `0` - 支撑目录: `_meta, _tools` ## 模块覆盖 @@ -37,36 +37,17 @@ | `Memory` | `5` | `5` | `0` | | `Platform` | `11` | `11` | `0` | | `RHI` | `87` | `87` | `0` | -| `Rendering` | `13` | `10` | `3` | +| `Rendering` | `13` | `13` | `0` | | `Resources` | `13` | `13` | `0` | -| `Scene` | `3` | `2` | `1` | -| `Scripting` | `7` | `0` | `7` | +| `Scene` | `3` | `3` | `0` | +| `Scripting` | `7` | `7` | `0` | | `Threading` | `10` | `10` | `0` | ## 元信息覆盖 | 字段 | 页面数 | |------|--------| -| `命名空间` | `325` | -| `类型` | `325` | -| `描述` | `325` | -| `头文件` | `216` | - -## 缺失的平行目录总览页 - -- `XCEngine/Scripting` -- `XCEngine/Scripting/Mono` - -## 未覆盖的 public headers - -- `XCEngine/Rendering/CameraRenderRequest.h` -- `XCEngine/Rendering/CameraRenderer.h` -- `XCEngine/Rendering/RenderMaterialUtility.h` -- `XCEngine/Scene/SceneRuntime.h` -- `XCEngine/Scripting/IScriptRuntime.h` -- `XCEngine/Scripting/Mono/MonoScriptRuntime.h` -- `XCEngine/Scripting/NullScriptRuntime.h` -- `XCEngine/Scripting/ScriptComponent.h` -- `XCEngine/Scripting/ScriptEngine.h` -- `XCEngine/Scripting/ScriptField.h` -- `XCEngine/Scripting/ScriptFieldStorage.h` +| `命名空间` | `449` | +| `类型` | `449` | +| `描述` | `344` | +| `头文件` | `332` | diff --git a/docs/plan/Renderer模块设计与实现.md b/docs/plan/Renderer模块设计与实现.md new file mode 100644 index 00000000..a7adea43 --- /dev/null +++ b/docs/plan/Renderer模块设计与实现.md @@ -0,0 +1,556 @@ +# Renderer模块设计与实现 + +## 1. 背景 + +XCEngine 当前已经完成了较为可用的 RHI 抽象层,且已经具备: + +- `Scene + GameObject + Component` 基础场景模型 +- `CameraComponent` / `LightComponent` 等基础组件 +- `Mesh` / `Material` / `Texture` / `Shader` 等资源类型 +- D3D12 / OpenGL 双后端 RHI 抽象与测试体系 + +下一阶段不应该继续封闭式打磨 RHI,而应该在 RHI 之上正式建立 **Renderer 模块**。 + +这里的 Renderer 模块不是“最终形态的 SRP”,而是: + +- 先建立一层 **原生渲染运行时** +- 先让场景对象能够以正式渲染链路被绘制 +- 同时在设计上预留未来 **C# Scriptable Render Pipeline(SRP)** 的接入点 + +也就是说,当前阶段的正确目标不是直接实现 Unity 的 URP/HDRP,而是先建立一套 **与 Unity 渲染架构方向一致的原生基础层**,后续让 C# SRP 驱动它。 + +--- + +## 2. 设计目标 + +Renderer 模块的目标分为两层: + +### 2.1 当前阶段目标 + +先完成一套最小但完整的原生渲染链路: + +- 从 `Scene` 中提取可渲染对象 +- 通过 `Camera` 构建视图与投影数据 +- 通过 `Material` / `Mesh` / `Texture` 构建 GPU 绘制数据 +- 在 RHI 之上完成正式的 frame 渲染 +- 支持 swapchain 输出与离屏输出 +- 建立独立于 editor 的渲染宿主模型 + +### 2.2 面向未来 C# SRP 的目标 + +当前阶段的实现必须为后续演进预留稳定边界: + +- 未来允许用 C# 定义 `RenderPipelineAsset` / `RenderPipeline` +- 未来允许用 C# 组织 render pass +- 未来允许 editor `SceneView` / `GameView` 通过同一套 renderer 输出 +- 未来允许 C# 脚本控制 camera 渲染、pass 排序、目标输出与 command buffer + +因此,当前阶段的原生 Renderer 不能做成一个写死的“大一统内建渲染函数”,而应该一开始就具备“可被上层 pipeline 驱动”的结构。 + +--- + +## 3. 与 Unity 渲染架构的对应关系 + +当前建议的路线与 Unity 的总体方向是对齐的,但要注意分层位置。 + +### 3.1 推荐分层 + +```text +Scene / Components / Resources + ↓ +Renderer 模块(原生渲染运行时) + ↓ +未来 C# SRP 层(脚本化渲染管线) + ↓ +RHI 抽象层 + ↓ +D3D12 / OpenGL / Vulkan 后端 +``` + +### 3.2 各层职责 + +#### Scene / Components / Resources + +负责描述“要渲染什么”,例如: + +- 场景对象 +- 相机 +- 灯光 +- 网格 +- 材质 +- 贴图 + +这一层不应该直接持有后端 API 对象。 + +#### Renderer 模块(本阶段核心) + +负责描述“如何从场景变成 draw call”,例如: + +- 渲染对象抽取 +- 可见性裁剪 +- GPU 资源缓存 +- camera frame 数据组织 +- render target / depth target 管理 +- render pass 调度 +- 内建前向管线 + +这一层是未来 C# SRP 的原生支撑层。 + +#### 未来 C# SRP 层 + +负责描述“以脚本方式控制渲染流程”,例如: + +- `RenderPipelineAsset` +- `RenderPipeline` +- `ScriptableRenderContext` +- `CommandBuffer` +- `RenderPassEvent` +- pass 注入与重排 + +这一层不应该直接绕过 Renderer 模块去操作后端 API。 + +#### RHI 抽象层 + +负责统一 GPU 接口与资源对象,是渲染系统的执行后端,而不是场景渲染逻辑本身。 + +### 3.3 与 Unity 的概念映射 + +| Unity 概念 | XCEngine 当前/规划对应 | +|---|---| +| `Camera` | `CameraComponent` | +| `Light` | `LightComponent` | +| `MeshFilter` | 计划新增 `MeshFilterComponent` | +| `MeshRenderer` | 计划新增 `MeshRendererComponent` | +| `RenderPipelineAsset` | 未来 Renderer 模块上的 pipeline asset 抽象 | +| `RenderPipeline` | 未来 Renderer 模块上的 pipeline 实例抽象 | +| `ScriptableRenderContext` | 未来 Renderer 模块对脚本暴露的原生 render context | +| `CommandBuffer` | 未来 Renderer 模块对脚本暴露的命令缓冲抽象 | +| `GraphicsDevice` / native render backend | 当前 RHI + 后端实现 | + +结论是: + +- **方向上符合 Unity 渲染架构** +- **当前阶段实现的应是 Unity 渲染体系中的原生底座** +- **而不是直接跳到最终的脚本化 SRP** + +--- + +## 4. 核心设计原则 + +### 4.1 先建立原生渲染运行时,再开放脚本化管线 + +如果现在直接做 C# SRP,而原生 Renderer 边界还不存在,后续会出现: + +- C# API 直接耦合 RHI +- editor viewport 与 runtime camera 逻辑混杂 +- 资源对象与 GPU 对象生命周期混乱 + +因此必须先收敛原生 Renderer 模块。 + +### 4.2 Scene 层只描述逻辑对象,不持有后端对象 + +`GameObject`、`Component`、`Mesh`、`Material` 等对象只能描述逻辑与资源,不应该直接持有 D3D12/OpenGL 私有对象。 + +GPU 对象应由 Renderer 内部缓存层负责创建和复用。 + +### 4.3 editor 只是渲染宿主,不是渲染逻辑本体 + +`GameView` / `SceneView` 最终只是 Renderer 的输出宿主。 + +Renderer 本身必须先支持: + +- 输出到 swapchain +- 输出到离屏纹理 + +然后 editor 再把离屏纹理接进 ImGui 面板。 + +### 4.4 为未来 SRP 预留 pipeline 抽象 + +即使第一阶段先做内建前向渲染,也不应该把逻辑写死成单一 `SceneRenderer::DrawEverything()`。 + +应该从一开始就保留: + +- `RenderPipeline` +- `RenderPipelineAsset` +- `RenderContext` +- camera 列表驱动 +- pass 分阶段执行 + +这样未来 C# 只是在这个原生结构上做绑定,而不是重做一遍架构。 + +### 4.5 测试体系与渲染层分离 + +`tests/RHI/` 继续只验证 RHI。 + +Renderer 模块应建立自己的测试体系: + +- `tests/Rendering/unit/` +- `tests/Rendering/integration/` + +这样职责边界才清晰。 + +--- + +## 5. 模块划分建议 + +建议新增 `Rendering` 模块,作为场景与 RHI 之间的正式中间层。 + +### 5.1 推荐目录结构 + +```text +engine/ +├── include/XCEngine/Rendering/ +│ ├── RenderSurface.h +│ ├── RenderContext.h +│ ├── RenderPipeline.h +│ ├── RenderPipelineAsset.h +│ ├── SceneRenderer.h +│ ├── RenderSceneExtractor.h +│ ├── RenderCameraData.h +│ ├── VisibleRenderObject.h +│ ├── RenderResourceCache.h +│ └── Pipelines/ +│ └── BuiltinForwardPipeline.h +└── src/Rendering/ + ├── RenderSurface.cpp + ├── SceneRenderer.cpp + ├── RenderSceneExtractor.cpp + ├── RenderResourceCache.cpp + └── Pipelines/ + └── BuiltinForwardPipeline.cpp +``` + +### 5.2 组件层建议 + +为了尽可能对齐 Unity,而不是做一个临时过渡方案,建议直接采用: + +- `MeshFilterComponent` +- `MeshRendererComponent` + +其中: + +#### `MeshFilterComponent` + +负责“这个对象使用哪一个 mesh”: + +- `ResourceHandle` + +#### `MeshRendererComponent` + +负责“这个对象如何被渲染”: + +- 材质数组 +- cast shadow / receive shadow +- render queue / layer / enable 状态 +- 未来可扩展 light probe / motion vector / static batching 标记 + +这样做的好处是: + +- 更贴近 Unity 的对象模型 +- 更容易映射未来 C# API +- 更容易在 editor Inspector 中呈现 +- 更容易为 `SkinnedMeshRenderer`、`SpriteRenderer` 等后续组件扩展留位置 + +### 5.3 Renderer 内部运行时对象 + +#### `RenderSurface` + +统一表示渲染输出目标: + +- 交换链输出 +- 离屏 color/depth 输出 +- editor viewport 输出 + +#### `RenderSceneExtractor` + +负责从 `Scene` 中提取本帧可渲染对象: + +- mesh +- material +- transform +- bounds +- render state + +#### `RenderResourceCache` + +负责把资源模块对象转成 GPU 可用对象: + +- mesh -> vertex/index buffer +- texture -> RHI texture / resource view +- material -> descriptor set / uniform buffer / pipeline key +- shader pass -> pipeline state + +#### `RenderContext` + +作为原生渲染执行上下文,未来用于承接脚本化 pipeline 的调度。 + +它应封装: + +- 当前 frame 的 command list +- render target 设置 +- clear / draw / submit +- camera 相关渲染上下文 + +#### `RenderPipeline` + +用于抽象具体渲染流程。 + +第一阶段只有一个原生内建实现: + +- `BuiltinForwardPipeline` + +未来再开放: + +- native 可切换 pipeline +- C# 绑定的 scriptable pipeline + +--- + +## 6. 第一阶段实现边界 + +第一阶段只做最小可用链路,不做“大而全”。 + +### 6.1 第一阶段要做 + +- `Rendering` 模块骨架 +- `MeshFilterComponent` / `MeshRendererComponent` +- `RenderSurface` +- `RenderSceneExtractor` +- `RenderResourceCache` +- `SceneRenderer` +- `BuiltinForwardPipeline` +- 单 camera +- 单方向的 opaque forward 渲染 +- 深度测试与深度写入 +- 交换链输出 +- 离屏输出 + +### 6.2 第一阶段先不做 + +- 阴影 +- 后处理 +- 延迟渲染 +- 完整 PBR +- render graph +- C# SRP 真正落地 +- editor viewport 完整交互 +- 多 camera 叠加 + +### 6.3 第一阶段材质能力建议 + +建议先支持两档: + +1. `UnlitTexture` +2. `SimpleLit` + +其中: + +- `UnlitTexture` 用于先打通最小链路 +- `SimpleLit` 用于验证灯光、法线与材质基础通路 + +--- + +## 7. 面向未来 C# SRP 的预留设计 + +虽然第一阶段先做原生内建渲染,但必须提前约束下面这些方向。 + +### 7.1 先定义 pipeline 边界,再定义内建实现 + +正确顺序应当是: + +1. 先定义 `RenderPipeline` 抽象 +2. 再实现 `BuiltinForwardPipeline` +3. 后续 C# SRP 只是在这个边界上做脚本绑定 + +而不是: + +1. 先写死一个 `SceneRenderer` +2. 以后再强行拆成 pipeline + +第二种方式后续返工会很大。 + +### 7.2 Renderer 模块应向未来脚本层暴露的概念 + +当前阶段不一定全部实现,但结构上要留位置: + +- `RenderPipelineAsset` +- `RenderPipeline` +- `RenderContext` +- `CullingResults` +- `DrawingSettings` +- `FilteringSettings` +- `ShaderTag` +- `CommandBuffer` +- `RendererList` + +这些概念不一定要立刻与 Unity 一字不差,但应该在职责上能对应上。 + +### 7.3 材质与 Shader 资产模型不能停留在“单 shader 文件 + 属性包” + +未来做 SRP 时,shader pass 选择、render queue、tag、render state 都是必要能力。 + +因此当前阶段即使先不全量实现,也不能把资产模型彻底锁死在过于简单的结构上。 + +这一点单独列为 issue。 + +--- + +## 8. 分阶段推进建议 + +### 阶段 A:Renderer v0 骨架 + +目标: + +- 建立 `Rendering` 模块 +- 建立 `MeshFilterComponent` / `MeshRendererComponent` +- 建立 `RenderSurface` +- 建立 `BuiltinForwardPipeline` + +验收: + +- 可以通过 Renderer 正式绘制一个 textured quad 场景 +- 输出到 swapchain +- 输出到离屏 RT + +### 阶段 B:真实资源场景接入 + +目标: + +- 接入 mesh / texture / material 资源模块 +- 跑通 `backpack` 这样的真实模型场景 + +验收: + +- 真实 obj 资源经资源模块导入后可通过 Renderer 正式绘制 +- D3D12 / OpenGL 双后端结果一致 + +### 阶段 C:基础光照 + +目标: + +- 接入 `LightComponent` +- 跑通最基础的单方向光前向渲染 + +验收: + +- `sphere` / `backpack` 存在正确基础明暗 +- 材质参数与法线链路可验证 + +### 阶段 D:pipeline 抽象显式化 + +目标: + +- 把内建前向渲染切到 `RenderPipeline` 抽象之下 +- 支持 camera 列表驱动 +- 为未来 C# SRP 绑定准备原生接口 + +验收: + +- 原生内建 pipeline 通过统一接口驱动 +- renderer 不再依赖单一路径写死执行 + +### 阶段 E:editor viewport 接入 + +目标: + +- `SceneView` / `GameView` 使用 Renderer 的离屏输出 + +验收: + +- editor 面板只是渲染宿主 +- 不额外复制一套渲染逻辑 + +### 阶段 F:C# SRP 桥接 + +目标: + +- 在既有 Renderer 模块基础上绑定脚本化 pipeline + +验收: + +- C# 可以控制 camera 渲染流程 +- 原生 Renderer 继续负责底层资源、上下文与执行 + +--- + +## 9. 测试体系建议 + +Renderer 模块需要独立测试体系。 + +### 9.1 单元测试 + +建议放在: + +- `tests/Rendering/unit/` + +测试内容: + +- render object 抽取 +- material 参数打包 +- pipeline key 构建 +- GPU cache 命中与失效 +- render surface 创建与 resize + +### 9.2 集成测试 + +建议放在: + +- `tests/Rendering/integration/` + +建议场景: + +1. `textured_quad_scene` +2. `backpack_scene` +3. `lit_sphere_scene` + +仍然维持当前 RHI 抽象测试的好习惯: + +- 一场景一张 `GT.ppm` +- D3D12 / OpenGL 都与同一张 GT 比对 + +### 9.3 与 RHI 测试的关系 + +`tests/RHI/` 继续用于验证: + +- API 抽象正确性 +- 后端行为一致性 +- 资源 / 命令 /格式映射等底层问题 + +`tests/Rendering/` 则验证: + +- 场景渲染链路 +- 组件与资源到渲染结果的闭环 + +--- + +## 10. 当前已识别的不适配问题 + +以下问题不适合直接塞进本设计文档正文实现里,而应该独立跟踪: + +1. `Scene / Components` 层还没有 `MeshFilter / MeshRenderer` 抽象 +2. `Editor` 还没有 viewport 的离屏渲染宿主接入层 +3. `Material / Shader` 资产模型还不足以支撑未来 SRP 的 pass/tag 语义 + +对应 issue: + +- `docs/issues/Renderer模块_Scene层缺少MeshFilter与MeshRenderer抽象.md` +- `docs/issues/Renderer模块_EditorViewport缺少RenderSurface接入层.md` +- `docs/issues/Renderer模块_Material与Shader资产模型暂不满足SRP演进需求.md` + +--- + +## 11. 结论 + +当前 Renderer 阶段的正确方向是: + +- 在 RHI 之上建立 **原生渲染运行时** +- 用它先承接基础前向渲染 +- 同时提前为未来 **C# SRP** 留出清晰接口 + +因此,下一阶段的 Renderer 规划如果按本文执行,是与 Unity 渲染架构方向相容的,而且比“先做一个临时内建 renderer,后面再拆”更稳。 + +一句话概括: + +- **现在做的是 Unity 式渲染体系的原生底座** +- **以后在这个底座之上接 C# SRP** + diff --git a/docs/plan/Unity绝区零开发文档还原版.md b/docs/plan/Unity绝区零开发文档还原版.md new file mode 100644 index 00000000..0f1ce005 --- /dev/null +++ b/docs/plan/Unity绝区零开发文档还原版.md @@ -0,0 +1,1377 @@ +# Unity《绝区零》开发文档还原版 + +更新时间:2026-03-26 +分析对象:`D:\Program Files\ZenlessZoneZero Game` +文档性质:基于安装目录、版本清单、日志、元数据字符串和原生插件信息的“开发细节还原”。 +方法边界:本文不是源码审计,也不是反编译报告;凡是直接由文件、日志、版本信息证明的内容,标为“可确认”;凡是由多个证据合成出来的工程判断,标为“高概率推断”。 + +## 0. 为什么这份文档值得写 + +只看安装目录,很多人最多能得出“这是个 Unity 游戏”。但《绝区零》这个客户端的目录信息量其实非常大,已经足够暴露出: + +1. 它的引擎基底是哪一代 Unity LTS。 +2. 它是不是 IL2CPP、是不是重度原生插件化。 +3. 它的渲染层是不是 SRP 风格、有没有现代 PC 图形能力栈。 +4. 它是不是靠 Addressables/AssetBundle 直出,还是有独立的内容块分发系统。 +5. 它的资源是不是按业务模块分包,尤其是主线、教程、活动、卡池、视频表现。 +6. 它有没有成熟的内部工具链,例如世界图、镜头序列、预加载配置、棋盘玩法插件、体素相关工具等。 +7. 它的平台层是不是已经和 WebView、SDK、ABTest、翻译热更、遥测、Crash、保护驱动深度耦合。 + +换句话说,这个目录足够说明它不是“Unity 默认工作流做出来的大包”,而是一套建立在 Unity 之上的产品化工程栈。 + +## 1. 执行摘要 + +先把最重要的结论放前面: + +### 1.1 可确认结论 + +1. PC 客户端使用 **Unity 2019.4.40 LTS**。 +2. 脚本后端是 **IL2CPP**,不是 Mono。 +3. 客户端重度依赖原生插件,接入了 Wwise、CRI Mana、KCP、WebView/CEF、遥测、Crash、反作弊/保护等多个子系统。 +4. 资源分发不是简单的 Unity Bundle 直发,而是 **`.blk` 块资源 + `.usm` 视频资源 + `.pck` 音频资源 + 独立版本清单** 的多通道体系。 +5. `file_category_launcher` 证明客户端把大量视频媒体资源明确映射到业务分类号,说明启动器/内容系统在“剧情页、教程、活动、卡池、登录页、章节视频”等层面做了分包设计。 +6. 元数据中可直接看到 `NapResources`、`ScriptConfig`、`JsonBytes`、`WorldGraph`、`NapCameraSequence`、`ChessboardPlugin`、`VoxelArray`、`MeshStreamingBuildStates` 等命名,说明工具链深度很高。 + +### 1.2 高概率推断 + +1. Windows 版本的主渲染后端大概率是 **D3D12 优先**,但 Vulkan 代码路径被完整编入并维护。 +2. 项目在 Unity 之上实现了 **自定义 SRP 风格渲染管线**,而不是纯 Built-in Render Pipeline。 +3. 项目内部存在 **ECS 风格运行时框架** 或至少采用 ECS 命名和句柄系统,但未必等于 Unity 官方 DOTS。 +4. `data_version` 很像独立于大资源通道之外的 **小型高频热更通道**。 +5. 当前启动器显式面向用户或内容侧暴露的“分包单元”主要集中在视频媒体层,而大体量内容层走块资源系统。 + +## 2. 调查方法与证据来源 + +本次还原主要依赖以下几个证据面: + +### 2.1 二进制与根目录结构 + +根目录存在的关键文件包括: + +- `ZenlessZoneZero.exe` +- `UnityPlayer.dll` +- `GameAssembly.dll` +- `nvngx_dlss.dll` +- `nvngx_dlssg.dll` +- `sl.dlss.dll` +- `sl.reflex.dll` +- `amd_fidelityfx_upscaler_dx12.dll` +- `amd_fidelityfx_framegeneration_dx12.dll` +- `telemetry.dll` +- `Astrolabe.dll` +- `HoYoKProtect.sys` +- `mhypbase.dll` +- `config.ini` +- `version_info` +- `file_category_launcher` + +只看这一层已经可以初步判断: + +1. 这是标准 Unity Windows 原生壳 + IL2CPP 业务层。 +2. 这是面向现代 PC 图形能力的版本,而不是纯移动移植壳。 +3. 平台层明显带有米哈游的完整发行/SDK/安全/运维组件。 + +### 2.2 StreamingAssets 与 Persistent 目录 + +关键目录: + +- `ZenlessZoneZero_Data\StreamingAssets` +- `ZenlessZoneZero_Data\Persistent` +- `ZenlessZoneZero_Data\Persistent\LogDir` + +这些目录提供了最重要的资源与热更证据。 + +### 2.3 IL2CPP 元数据 + +关键文件: + +- `ZenlessZoneZero_Data\il2cpp_data\Metadata\global-metadata.dat` + +虽然没有源码,但 metadata 中残留了大量: + +- 场景名 +- 资源路径 +- 类型名 +- 配置资产名 +- 内部工具类名 +- 某些运行时系统的符号 + +这是还原内部工程结构的核心来源之一。 + +### 2.4 运行日志 + +关键目录: + +- `ZenlessZoneZero_Data\Persistent\LogDir` + +日志直接暴露了: + +- 场景切换链路 +- SDK 初始化链路 +- WebView 初始化方式 +- ABTest 地址 +- 多语言翻译热更 URL +- 部分渲染和运行时开关 +- 资源系统的异常与配置信息 + +## 3. 引擎与运行时层 + +### 3.1 引擎版本与脚本后端 + +可确认事实: + +- `ZenlessZoneZero.exe` 文件版本:`2019.4.40.14369230` +- `UnityPlayer.dll` 文件版本:`2019.4.40.14369230` +- 存在 `GameAssembly.dll` +- 存在 `ZenlessZoneZero_Data\il2cpp_data\Metadata\global-metadata.dat` + +这说明: + +1. 引擎版本是 **Unity 2019.4.40 LTS**。 +2. 脚本后端是 **IL2CPP**。 +3. 项目不是 HotReload/C# Mono 为主的轻量工程,而是完整 AOT 化的大型正式版客户端。 + +### 3.2 启动配置 + +`boot.config` 中至少可以确认: + +- `wait-for-native-debugger=0` +- `vr-enabled=0` +- `hdr-display-enabled=0` +- `single-instance=` + +这些信息本身不惊人,但结合整个项目体量,它反映的是: + +1. 客户端使用标准 Unity 启动流程,但做了平台化的参数控制。 +2. HDR 至少在当前这份启动配置中没有默认开启。 +3. VR 不是目标运行模式。 + +### 3.3 当前版本与渠道 + +直接来自 `config.ini` 与 `version_info`: + +- `game_version=2.7.0` +- `channel=1` +- `sub_channel=1` +- `cps=mihoyo` +- `version_info = CNPRODWin2.7.0` + +最稳妥的结论是: + +- 当前安装目录对应 **国服 Windows 正式环境 2.7.0**。 + +之前日志痕迹还显示过 2026-03-24 左右从 `CNPRODWin2.6.0` 升级到 `CNPRODWin2.7.0` 的过程,因此这份安装目录并不是“首包静态镜像”,而是经历过真实更新链路的客户端。 + +### 3.4 基础框架命名 + +元数据与日志中反复出现: + +- `MoleMole.*` +- `Foundation.*` +- `MiHoYo.SDK.*` + +这说明 Unity 只是底座,业务层上面还有一层相当厚的内部基础框架。 + +### 3.5 场景结构 + +从 metadata 中可直接提取出的场景: + +- `Assets/Scenes/Logic/FrontendGame.unity` +- `Assets/Scenes/Logic/Launcher.unity` +- `Assets/Scenes/Logic/Real_ECS.unity` +- `Assets/Scenes/Login/Login_MainCityWorkshop.unity` +- `Assets/Scenes/Scene_Dev/DevLevel.unity` + +可推断的工程含义: + +1. `Launcher` 与 `FrontendGame` 分开,说明启动入口和主要业务逻辑不是单场景一把梭。 +2. `Real_ECS` 是非常强的内部命名证据,说明存在面向实体系统或 ECS 风格的逻辑分层。 +3. `DevLevel` 说明正式构建中仍残留研发/验证用场景引用。 +4. `Login_MainCityWorkshop` 暗示登录链路、主城演出和专门的场景工作流紧密相关。 + +### 3.6 是否存在 ECS 风格运行时 + +当前可确认的证据: + +- 场景名包含 `Real_ECS` +- metadata 中出现 `EntityHandle` +- metadata 中出现 `ListEntityHandle` + +高概率判断: + +- 项目内存在一套 **ECS 风格或实体句柄驱动的运行时框架**。 + +需要谨慎的点: + +- 这不能直接等同为 Unity DOTS/Entities Package。 +- 更可能是米哈游内部的“实体句柄 + 数据驱动系统 + 运行时图”式框架。 + +## 4. 渲染与图形后端 + +### 4.1 为什么可以判断不是纯 Built-in RP + +日志和元数据中能看到以下关键证据: + +- `UnityEngine.Rendering.RenderPipelineManager:DoRenderLoop_Internal` +- `disableSRPHelper:0` +- `disableSRPInstancing:0` +- `disableAsyncSRPSubmit:0` +- `ShaderCustomData 无效配置路径 ...` + +如果只是普通 Built-in 渲染项目,这几个特征同时出现的概率很低。它们组合起来,更像: + +1. 项目基于 Unity 的 RenderPipeline 管理链运行。 +2. 团队实现了自己的 SRP 风格辅助层。 +3. Shader 数据和配置路径不是全靠 Unity 默认材质面板,而是有单独配置系统。 + +### 4.2 现代图形特性开关 + +日志中可见: + +- `disableRayTracing:0` +- `disableMeshLet:0` +- `disableAsyncUploadJob:0` +- `disableFlatbufferNativeArrayOpt:0` +- `disableVKPSOJob:0` +- `enablePhyManagerJob:0` + +这些开关说明的不是“这些功能一定默认打开”,而是: + +1. 这些能力在工程层面被明确纳入了可控项。 +2. 团队在渲染/资源/原生数据层做过较多开关治理。 +3. PC 版至少在架构层已经考虑过 Ray Tracing、MeshLet、异步上传、Vulkan PSO 作业化等问题。 + +### 4.3 PC 原生图形能力栈 + +根目录的原生 DLL 明确显示接入了: + +- NVIDIA DLSS +- DLSS Frame Generation +- NVIDIA Reflex +- NIS +- AMD FSR / FidelityFX Upscaler +- AMD Frame Generation +- AMD AGS + +这组 DLL 几乎可以直接说明: + +- 这是一个认真做 PC 高端显示链路适配的版本,而不是随便把移动端资源抬到 PC。 + +### 4.4 Vulkan 证据 + +在 `GameAssembly.dll` 中可检索到大量 Vulkan 相关字符串,包括 `vkCreate*` 系列与 PSO/交换链相关内容。再结合日志中出现的 `disableVKPSOJob`,可得出比较稳的推断: + +- Vulkan 路径被完整编入并维护。 + +更进一步的工程判断: + +- Windows 正式服的大概率主力图形后端仍是 D3D12,Vulkan 更像兼容、实验或特定平台路径,但不是“没写完的残留代码”。 + +### 4.5 对渲染架构的整体推断 + +高概率架构如下: + +1. Unity 2019 LTS 提供平台与底层渲染承载。 +2. 项目在其上实现自定义 SRP 风格框架。 +3. Shader 管线、预热、配置、特效和材质属性存在独立数据层。 +4. PC 版本在原生层桥接 DLSS/FG/Reflex/FSR 等现代能力。 +5. Vulkan 与 D3D12 两条路径至少在代码层被同时维护。 + +## 5. 资源组织、版本清单与热更体系 + +这是这份安装目录里信息量最大的一层,也是最能体现“工程成熟度”的部分。 + +### 5.1 StreamingAssets 顶层结构 + +`ZenlessZoneZero_Data\StreamingAssets` 下可见: + +- `Blocks` +- `Video` +- `Audio` +- `MiHoYoSDKRes` +- `APMConfig.json` +- `res_version` +- `data_version` +- `audio_version` +- `res_revision` +- `data_revision` +- `audio_revision` +- `silence_version` +- `silence_revision` + +这套命名非常像独立于 Unity 默认资源系统之外的发行系统。尤其是 `*_version` 与 `*_revision` 双文件模式,典型用于: + +1. 比较本地与远端版本。 +2. 决定差量下载。 +3. 区分资源通道。 +4. 支持启动器或游戏内更新器。 + +### 5.2 StreamingAssets 实体资源体量 + +从实际目录统计得到: + +| 类别 | 数量 | 体积 | +| --- | --- | --- | +| `Blocks` | 8276 | 45.182 GB | +| `Video` | 1991 | 13.343 GB | +| `Audio` | 94 | 6.705 GB | + +这一层已经能看出几个非常重要的结论: + +1. 真正的大头不是音频,而是 **块资源 + 视频资源**。 +2. 视频资源占比极大,这说明项目对视频表现依赖远高于普通 Unity 游戏。 +3. 音频在安装目录内不是全部内容,完整音频清单还要看 `audio_version`。 + +### 5.3 `res_version`:主资源通道 + +对 `ZenlessZoneZero_Data\StreamingAssets\res_version` 的结构化解析结果: + +- 文件数:`10246` +- 总体积:`58.352 GB` +- 顶层前缀分布: + - `Blocks`:`8255` + - `Video`:`1991` +- 带 `packages` 字段的条目数:`1991` +- 不带 `packages` 字段的条目数:`8255` + +这说明: + +1. 主资源清单只维护两类核心资源:`Blocks` 与 `Video`。 +2. 当前版本中,**所有显式带业务包号的条目正好等于视频条目数**。 +3. 块资源没有在这个清单层直接暴露业务包号,而是以内容块形式存在。 + +这其实非常关键,因为它说明资源系统分成了两层: + +- 一层是“面向分发和业务管理”的视频媒体包。 +- 另一层是“面向运行时加载”的哈希块/内容块系统。 + +### 5.4 `res_version` 的 tag 组合 + +`res_version` 中的 tag 组合分布如下: + +| tag 组合 | 数量 | +| --- | --- | +| `3` | 7731 | +| `3,5` | 1905 | +| `2` | 504 | +| `2,5` | 58 | +| `1,5` | 28 | +| `1` | 18 | +| `` | 2 | + +目前还不能精确破译 `1/2/3/5` 的语义,但可以做比较稳的工程推断: + +1. tag 不是简单的布尔开关,而是资源层级/安装阶段/下载策略的编码。 +2. 视频经常与 `5` 联动,说明 `5` 高概率和“视频媒体分发层”或某类可选分包策略有关。 +3. 大多数主资源是 `3`,说明 `3` 很可能是当前正式主内容层。 +4. 少量 `1` 和 `2` 更像首包/基础包/过渡层,或者历史分层残留。 + +### 5.5 `data_version`:小型数据通道 + +对 `data_version` 的解析结果: + +- 文件数:`21` +- 总体积:`0.173 GB` +- 路径全部位于:`Blocks/Data/*.blk` + +抽样可见条目示例: + +- `Blocks/Data/3749079225.blk` +- `Blocks/Data/632827999.blk` +- `Blocks/Data/2397209110.blk` +- `Blocks/Data/297117219.blk` +- `Blocks/Data/133733816.blk` + +以及 tag 组合里同时出现了 `1`、`2`、`3` 和空值。 + +这层非常像: + +- **独立于大资源通道之外的小体量配置/逻辑/表格数据热更层。** + +这种拆法的工程意义非常大: + +1. 可以高频更新小量关键数据。 +2. 不需要动 58GB 的主资源清单。 +3. 可以缩短更新链路与校验时间。 +4. 对长线运营版本非常友好。 + +### 5.6 `audio_version`:音频完整包与最小安装包分离 + +对 `audio_version` 的解析结果: + +- 文件数:`271` +- 总体积:`17.426 GB` +- 前缀分布: + - `Audio/Windows/Full`:`270` + - `Audio/Windows/Min`:`1` +- tag 组合分布: + - `3,4`:`270` + - `1,4`:`1` + +这几乎可以直接翻译成工程现实: + +1. 音频资源被拆成 **完整音频包** 与 **最小启动音频包**。 +2. `Minimum.pck` 是最小安装音频集。 +3. 大量的正式语音、环境、SFX、流式音频都位于 `Full` 层。 + +从目录结构还能看到 `Full` 下存在语言目录: + +- `Cn` +- `En` +- `Jp` +- `Kr` + +这意味着: + +- 国际化语音不是单独打补丁凑出来的,而是版本体系天然支持的一级资源维度。 + +### 5.7 `silence_version`:存在但当前为空 + +对 `silence_version` 解析结果: + +- 文件数:`0` +- 总体积:`0` + +这说明“silence”这一通道在当前版本中是预留态或暂未启用态。它可能意味着: + +1. 曾经设计过静默下载/静默资源层。 +2. 该版本没有启用。 +3. 或者仅保留了协议/版本结构,但无实际内容。 + +### 5.8 `.blk` 的工程含义 + +虽然目前没有真正解开 `.blk` 内部格式,但从目录结构和清单行为已经能判断: + +1. `.blk` 不是随意命名的一堆松散文件,而是项目主内容承载格式。 +2. 它大概率用于封装游戏运行时真正的大宗资源。 +3. 它和 Unity 默认 AssetBundle 的“直接暴露路径”风格不同,更像内容块或资源块系统。 +4. 这类设计通常对应更好的: + - 断点续传 + - 差量校验 + - 合并更新 + - CDN 分发 + - 运行时缓存与淘汰 + +### 5.9 Persistent 目录揭示客户端下载后的二次落地 + +`ZenlessZoneZero_Data\Persistent` 中可以看到: + +- `Blocks` +- `Audio` +- `Video` +- `Bundles` +- `LogDir` +- `SDKCaches` + +已知统计结果: + +| 类别 | 数量 | 体积 | +| --- | --- | --- | +| `Persistent\Blocks` | 49 | 0.241 GB | +| `Persistent\Audio` | 2 | 0.053 GB | +| `Persistent\Video` | 8 | 0.268 GB | +| `Persistent\Bundles` | 0 | 空 | + +这个现象说明: + +1. 客户端确实支持安装后继续获取和缓存资源。 +2. 缓存形态延续了 `Blocks/Audio/Video` 三通道设计。 +3. `Bundles` 在当前版本里不是核心载体,至少不是主要的实际补丁落地点。 + +### 5.10 为什么说这不是普通 Addressables 项目 + +能看到 `AssetBundle` 相关词不代表它就一定以 Unity Addressables 作为主分发层。相反,从当前目录结构看,更强的证据是: + +1. 主清单完全自定义:`res_version` / `data_version` / `audio_version`。 +2. 主格式是 `.blk` / `.usm` / `.pck`,不是直接暴露的 bundle 目录。 +3. Persistent 落地也延续这一结构。 +4. 业务分类文件单独维护:`file_category_launcher`。 + +更稳妥的判断是: + +- 项目就算内部某处仍可能使用 AssetBundle,也已经被一层更上位的 **自研发行/热更/分包系统** 包住了。 + +## 6. `file_category_launcher` 暴露出的业务分包体系 + +这是本次调查里最有价值的文件之一。它的每一行都把一个具体资源文件映射到一个业务分类号,例如: + +- `Launch/CutScene_StandbyVideo.usm -> 30400` +- `LoginBangumi/Ad_01_mux.usm -> 30500` +- `Battle/TutorialAvatarVideo1011_1.usm -> 31002` +- `Gacha/Gacha_Anbi.usm -> 40100` + +这意味着客户端不是把所有视频混成一个大仓,而是显式把它们挂到业务包上。 + +### 6.1 高频分类号统计 + +当前提取到的高频分类号如下: + +| 分类号 | 数量 | +| --- | --- | +| `20101` | 487 | +| `20103` | 156 | +| `31002` | 131 | +| `31008` | 105 | +| `30600` | 89 | +| `30800` | 66 | +| `31006` | 62 | +| `20207` | 53 | +| `31003` | 47 | +| `31001` | 45 | +| `72001` | 38 | +| `30200` | 36 | +| `31004` | 32 | +| `10115` | 28 | +| `31007` | 26 | +| `30500` | 25 | +| `40100` | 24 | +| `20102` | 23 | +| `10100` | 20 | +| `30700` | 20 | + +高频号本身就能说明: + +1. Hollow / Transfer / Tutorial / Activity / Gacha / DailyChallenge 这些系统在视频资源层都有显式分包。 +2. 客户端大量内容是“带业务标签的媒体资源”,而不是统一的大资源堆。 +3. 教学内容资源规模远超一般游戏,说明项目在“系统教学可视化”上投入很大。 + +### 6.2 明确可识别的分类号 + +#### `30400`:启动与 Logo + +示例: + +- `Video/HD/Launch/CutScene_StandbyVideo.usm` +- `Video/HD/Launch/LogoPerform_CHS.usm` + +这层就是首启或启动页表现资源。 + +#### `30500`:登录电视/广告素材 + +示例: + +- `Video/HD/LoginBangumi/Ad_01_mux.usm` +- `Video/HD/LoginBangumi/TV_TurnOff.usm` + +说明登录页的电视播放内容完全走独立资源包。 + +#### `20101`:Hollow 主体资源 + +示例: + +- `Video/HD/Hollow/Event/General/HollowToBattleBangboo.usm` +- `Video/HD/Hollow/AnimFlow/Black_Switch.usm` +- `Video/HD/Hollow/Avatar/Chat/EventVideoAnbi_Chat.usm` + +它不是单一功能点,而是一个很大的 Hollow 相关表现集合。 + +#### `20102`:Hollow 背景包 + +示例: + +- `Video/HD/Hollow/Background/Boss/ChallengeDeadEndButcherBackground.usm` +- `Video/HD/Hollow/Background/Metro/MetroBackground.usm` + +说明 Hollow 的背景表现还被单独拆层。 + +#### `20103`:Transfer / 切换层 / 假加载 + +示例: + +- `Video/HD/Transfer/General/TransferBattleFakeLoading.usm` +- `Video/HD/Transfer/General/BattleToHollowLoading.usm` +- `Video/HD/Transfer/General/TransferNoiseLoading.usm` + +这体现出项目把“切换体验”和“加载包装”当成独立表现系统处理。 + +#### `30200`:Inter-Knot / 站内帖子视频 + +示例: + +- `Video/HD/InterKnotPost/InterKnotPostVid_1020.usm` +- `Video/HD/InterKnotPost/InterKnotPostVid_11004.usm` + +这说明“站内内容流/帖子视频”不是脚本临时拼接,而是有独立媒体层。 + +#### `30600`:武器或装备展示视频 + +示例: + +- `Video/HD/Weapon/WeaponSpecialVideo_ZhenZhen.usm` +- `Video/HD/Weapon/Weapon_A_1011.usm` + +这说明装备/武器系统有专门的视频包装资源,不是仅靠模型转台或 UI 动画。 + +#### `30700`:日常挑战/训练房 + +示例: + +- `Video/HD/DailyChallenge/DailyChallengePageBg.usm` +- `Video/HD/DailyChallenge/TrainningRoomLayerLoop.usm` + +说明日常挑战体系具备独立的背景/流程媒体资源。 + +#### `31001`:基础战斗教学 + +示例: + +- `TutorialAidAttack_*` +- `TutorialBattleBase.usm` +- `TutorialBeHit.usm` +- `TutorialCounter.usm` +- `TutorialEnemyInformation.usm` + +说明基础战斗教学不靠文字说明,而是媒体资源驱动。 + +#### `31002`:角色专属教学 + +示例: + +- `TutorialAvatarVideo1011_1.usm` +- `TutorialAvatarVideo1031_2.usm` +- `TutorialAvatarVideo1521_3.usm` + +这里数量高达 131,说明很多角色都有自己的动作/机制演示视频。 + +#### `31003`:邦布/特殊玩法教学 + +示例: + +- `Tutorial_BangbooInLevel_1_1.usm` +- `ActivityBattle_StylishMode_Banyue_001.usm` + +#### `31004`:棋盘/空洞/特殊规则教学 + +示例: + +- `ChessboardChapter25_Tutorial_1.usm` +- `ChessboardGame_Tutorial_1.usm` +- `Hollow/TutorialHollowRechallenge.usm` + +#### `31006`:主城/线索/系统教学 + +示例: + +- `TutorialMaincityVideo02.usm` +- `LimboClueSystem_Clue.usm` +- `LimboClueSystem_SpecialArea.usm` + +#### `31007`:额外教学/修复性内容集合 + +示例: + +- `FishMasterColorBlock_1.usm` +- `Hollow/ClassicMovement.usm` +- `TutorialDataFix1.usm` + +#### `31008`:活动机制/特殊战斗教学 + +示例: + +- `Activity/MazingerGoldenBomb_Ability_01.usm` +- `TutorialEtherBarrier_01.usm` +- `Tutorial_ActivityBattle_1.usm` + +这一组说明活动玩法经常伴随独立教学视频包。 + +#### `40100`:角色卡池展示 + +示例: + +- `Video/HD/Gacha/Gacha_Anbi.usm` +- `Video/HD/Gacha/Gacha_Anton.usm` +- `Video/HD/Gacha/Gacha_Ben.usm` + +#### `40300`:卡池通用 OP/通用基底 + +示例: + +- `Video/HD/Gacha/Gacha_Bangboo_Default.usm` +- `Video/HD/Gacha/Gacha_OP_1.usm` +- `Video/HD/Gacha/Gacha_OP_1_Base.usm` + +说明卡池展示分成“角色个体资源”和“通用演出基底”。 + +#### `50300`:街机/小游戏体系 + +示例: + +- `Video/HD/Arcade/ArcadeScreen/ArcadeCompanionIntro_1.usm` +- `Video/HD/Arcade/ArcadeScreen/ArcadeHoundStart.usm` +- `Video/HD/Arcade/ArcadeScreen/ArcadeMach25Intro_1.usm` + +#### `72001`:影院活动 + +示例: + +- `Video/HD/ActivityCinema/CinemaFilm_10_Openning.usm` +- `Video/HD/ActivityCinema/CinemaFilm_11_Playing.usm` + +#### `72104`:机甲活动 + +示例: + +- `ActivityNewMecha_MoveTutorial1.usm` +- `ActivityNewMecha_MoveTutorial8.usm` + +#### `72106`:联机合作活动 + +示例: + +- `Activity/Coop/CoopMatchingBackground_1.usm` +- `Activity/Coop/CoopMatchingBackground_10.usm` + +### 6.3 主线章节媒体包的强证据 + +以下分类号和路径对应关系非常明确: + +| 分类号 | 典型路径 | 还原结论 | +| --- | --- | --- | +| `30101002` | `MainStory/PageVideo/Chapter02/*` | 主线第 2 章页面视频包 | +| `30101004` | `MainStory/PageVideo/Chapter03/*` | 主线第 3 章页面视频包 | +| `30101005` | `MainStory/PageVideo/Chapter04/*` | 主线第 4 章页面视频包 | +| `30101008` | `MainStory/PageVideo/Chapter06/*` | 主线第 6 章页面视频包 | +| `30101009` | `MainStory/PageVideo/Chapter07/*` | 主线第 7 章页面视频包 | + +这说明媒体资源至少在主线页面层已经按章节分包。它的工程价值包括: + +1. 控制首包体积。 +2. 便于预下载未上线章节媒体。 +3. 允许某章节内容独立更新。 +4. 运营与版本管理更清晰。 + +### 6.4 `101xx` 看起来像“流程章节/过场编号包” + +提取到的样本如下: + +- `10100 -> Procedure/C000_*` +- `10105 -> Procedure/C040_*` +- `10106 -> Procedure/C050_*` +- `10110 -> Procedure/C210_*` +- `10111 -> Procedure/C220_*` +- `10112 -> Procedure/C230_*` +- `10113 -> Procedure/C240_*` +- `10114 -> Procedure/C250_*` +- `10115 -> Procedure/C260_*` +- `10117 -> Procedure/C280_*` + +这说明项目的流程过场视频很可能按内部章节/节点编号系统单独打包。 + +### 6.5 这一层最关键的工程判断 + +`file_category_launcher` 最重要的意义不在于“知道几个包号”,而在于它证明了: + +1. 启动器或资源系统不是只认文件哈希,它同时认业务语义。 +2. 客户端内容至少在媒体层已经高度产品化,能按玩法、章节、活动、卡池拆分。 +3. 视频表现资源不是附属物,而是主流程中的一等资源。 + +## 7. 音频、视频与表现系统 + +### 7.1 音频:Wwise 已深入到时间轴/表现层 + +音频侧有几个强证据: + +- `AkSoundEngine.dll` +- `AkMotion.dll` +- `AkWaapiClient.dll` +- metadata 中出现 `MoleMole.Timeline.WwiseAudioTrack` +- 日志中出现 Wwise 生命周期记录 + +这比“项目用了 Wwise”更进一步。它说明: + +1. 音频被集成到了表现/Timeline 系统里。 +2. 团队可能使用 Wwise 管理大量复杂 BGM、事件、流式音频和演出同步。 +3. Unity Timeline 或其自定义扩展在音频上有专门轨道。 + +### 7.2 视频:CRI Mana 不是点缀,而是核心表现依赖 + +视频侧证据: + +- `cri_mana_vpx.dll` +- `cri_ware_unity.dll` +- 资源中存在 1991 个 `.usm` + +从文件类别看,视频被用于: + +1. 启动 Logo +2. 登录页电视/广告 +3. 场景切换和假加载 +4. Hollow 与主城表现 +5. 卡池角色展示 +6. 主线章节页面视频 +7. 街机活动 +8. 联机活动 +9. 角色/机制教学 + +这说明项目的视频依赖不是边角料,而是 UI 包装、流程演出和玩法教学的重要构成部分。 + +### 7.3 表现工具链命名 + +metadata 中可以看到: + +- `NapCameraSequence` +- `NapCameraSequenceHandle` +- `Assets/NapResources/Data/ScriptConfig/Perform/LevelPerformConfig.asset` +- `Assets/NapResources/Data/ScriptConfig/Camera/ConfigFocusCamera.asset` +- `Assets/NapResources/Data/ScriptConfig/AnimatorStateLength/ConfigAnimatorStateLength.asset` +- `Assets/NapResources/Data/ScriptConfig/Comic/BubbleResources` +- `Assets/NapResources/Data/ScriptConfig/Photo/FrameOuter` +- `Assets/NapResources/Data/ScriptConfig/Photo/FramePhoto` + +这说明表现系统至少包含: + +1. 自定义镜头序列。 +2. 关卡表现配置。 +3. 相机聚焦配置。 +4. 动画状态长度或状态时序配置。 +5. 漫画泡泡、摄影框架等特殊 UI/叙事表现资源。 + +## 8. SDK、WebView、ABTest、运维与安全层 + +### 8.1 WebView/CEF 证据非常扎实 + +定位到的相关文件: + +- `ZenlessZoneZero_Data\Plugins\x86_64\zf_cef.dll` +- `ZenlessZoneZero_Data\Plugins\x86_64\ZFGameBrowser.exe` +- `ZenlessZoneZero_Data\Plugins\x86_64\ZFEmbedWeb.dll` +- `ZenlessZoneZero_Data\Plugins\x86_64\ZFProxyWeb.dll` + +其中 `zf_cef.dll` 版本是: + +- `100.0.24+g0783cf8+chromium-100.0.4896.127` + +这说明客户端带的是一套比较完整的桌面嵌入浏览器栈,而不是随手塞个系统 WebView。 + +### 8.2 日志中的 WebView 初始化链 + +最新日志中可以直接看到: + +- `PreLoadSWURL: https://sdk.mihoyo.com/sw.html?...` +- `Init with offScreen: False` +- `InitUI with offScreen: False` +- `mihoyosdk webview created: ...` +- `web view render method: box config use optimization! request ab` +- `read ab test config from combo config` +- `read webview render method scene: MiHoYo.SDK.WebViewRenderMethodScene` +- `Get ABTest: plat - https://data-abtest-api.mihoyo.com/...` + +这几行直接暴露出: + +1. SDK WebView 不是固定策略,而是可走 ABTest 分流。 +2. WebView 的渲染方式可以由服务端配置决定。 +3. WebView 和 Native UI 栈之间存在完整事件交互。 + +### 8.3 多语言翻译热更 + +日志中还能看到: + +- `Request to set language:zh-cn` +- `Update region translation resources:zh-cn` +- `regionTranslationVersionCheck URL:https://webstatic.mihoyo.com/admin/mi18n/...-version.json` + +这说明: + +1. 本地语言资源之外,还有在线翻译资源更新链。 +2. 多语言文本并非完全固化在客户端包内。 +3. 运营层可以对区域文本进行版本化更新。 + +### 8.4 遥测与 Crash 体系 + +日志与文件显示存在: + +- `telemetry.dll` +- `APMCrashReporter` +- `MiHoYoSDKUploader.dll` +- `TelemetryInterface path:...\SDKCaches` +- `InitCrashSDKConfig` + +这基本可以判断: + +1. 客户端具备成熟的异常与性能/行为上报链路。 +2. `SDKCaches` 不只是 SDK 静态文件目录,还是部分运行时缓存和上报链路落地点。 +3. 客户端是围绕长线在线运营构建的,不是离线单机式打包。 + +### 8.5 安全与保护层 + +根目录存在: + +- `HoYoKProtect.sys` +- `mhypbase.dll` +- `Astrolabe.dll` + +这说明正式版客户端带有较明确的保护/反作弊/底层守护组件。对工程层的意义是: + +1. 引擎层与平台层不是纯用户态逻辑。 +2. 正式发行链路包含安全侧部署。 +3. 构建和安装流程考虑过驱动/保护组件的分发。 + +## 9. 内部工具链与数据驱动架构 + +这是最能说明“这不是普通 Unity 项目”的部分。 + +### 9.1 `NapResources`:统一资源命名空间 + +metadata 中反复出现 `Assets/NapResources/...`。这说明: + +1. 团队维护了一套统一的资源命名空间,而不是让资源散落在各个场景和 prefab 里。 +2. 很多系统都围绕 `NapResources` 组织,说明它更像项目级资源根,而不是临时目录。 +3. 命名上 `nap` 与 `nap_cn`、日志中的 `bundle_id=nap_cn` 彼此呼应,说明这不是无关命名。 + +### 9.2 ScriptConfig 根目录样本 + +从 metadata 中提取到的 `ScriptConfig` 根包括: + +- `Activity/ActivityLiveHouse` +- `Activity/ConfigHotPotFoodAssets.asset` +- `Activity/ConfigHotPotForceFields.asset` +- `AnimatorStateLength/ConfigAnimatorStateLength.asset` +- `AttackPropertys/AttackPropertyLibrary.asset` +- `Audio/BasePaths` +- `Camera/ConfigFocusCamera.asset` +- `Camera/Library` +- `Camera/Photo` +- `Camera/PhotoWall` +- `Comic/BubbleResources` +- `Comic/ImgStyle` +- `EtherEyes/ConfigEtherEyes.asset` +- `Level/LevelAddonConfig.asset` +- `LevelNpcGroupData/BladeIllusionNPCDisplayConfig.asset` +- `MaterialPropertyModifier/AutoGen` +- `Perform/LevelPerformConfig.asset` +- `Preload/PreloadLevelConfig.asset` +- `Preload/PreloadUIAssetsConfig.asset` +- `PreloadConfig/PreloadStreamingGameConfig.asset` +- `Preload/ShaderVariantCollection-` +- `ScreenEffects/AutoGen` +- `ShaderCustom/` +- `UI/ConfigUIActivityRhythmClick.asset` +- `UI/ConfigUIUrbanMap.asset` + +这几乎把项目的工程气质说透了: + +1. 活动不是脚本散件,而是有独立配置资产。 +2. 相机、摄影、漫画泡泡、音频路径、材质属性修改、屏幕特效都经过工具化配置。 +3. `AutoGen` 目录表明不少配置是自动生成的,而不是纯手工维护。 +4. `Preload*` 与 `ShaderVariantCollection` 显示预加载和 Shader 变体治理已经进入正式管线。 + +### 9.3 JsonBytes 根目录样本 + +从 metadata 中提取到的 `JsonBytes` 根包括: + +- `ArcadeGame/Cp` +- `AreaData` +- `ChessboardPlugin` +- `HollowEntity` +- `LevelWorld` +- `NewAbility` + +这说明项目存在明确的“编辑器数据 -> 字节化运行时数据”路径。其工程含义: + +1. 运行时不会只依赖 Unity 原生反射式序列化。 +2. 很多系统用的是更轻、更可控的数据载入路径。 +3. Hollow、能力系统、关卡世界、棋盘玩法等核心模块都被放进了这一层。 + +### 9.4 MessagePack 的直接证据 + +metadata 中直接出现: + +- `MessagePack.Resolvers.DynamicUnionResolver` +- `MessagePack.Resolvers.DynamicContractlessObjectResolver` +- `MessagePack.Resolvers.DynamicEnumResolver` +- `MessagePack.Resolvers.DynamicObjectResolver` + +这几乎可以确认: + +- 项目在运行时或工具链的某一层明确使用了 **MessagePack**。 + +这和 `JsonBytes`、`EntityHandle`、`WorldGraph` 放在一起,很像典型的大项目数据链: + +1. 编辑器阶段维护结构化对象。 +2. 构建阶段导出字节化数据。 +3. 运行时以句柄、图结构、表结构快速加载。 + +### 9.5 世界/流程/玩法工具链痕迹 + +metadata 中能够看到的一些极有信息量的名字: + +- `WorldGraph` +- `Assets/NapResources/Data/WorldGraph/Bytes` +- `node_config.bytes` +- `ChessboardPlugin` +- `ChessboardPluginInnerWorldConverter` +- `VoxelArray` +- `Assets/Code/Logic/Data/ScriptObject/Stage/MonoZone3D/Terrain/VoxelArray/UpdateVoxelArrayForOverlay.compute` +- `Assets/Code/Logic/Data/ScriptObject/Stage/MonoZone3D/Terrain/VoxelArray/VoxelArrayForOverlayDebugDisplay.mat` + +这几条证据背后的工程信息非常多: + +1. `WorldGraph` 表明世界/流程/节点关系很可能不是硬编码,而是图配置驱动。 +2. `node_config.bytes` 说明图配置会烘焙成运行时字节数据。 +3. `ChessboardPlugin` 说明棋盘/网格玩法不是零散逻辑,而是插件化模块。 +4. `ChessboardPluginInnerWorldConverter` 暗示棋盘玩法与关卡真实世界之间有转换层。 +5. `VoxelArray` 与相关 compute/material 名称说明至少存在某类基于体素或覆盖层的空间数据处理与可视化手段。 + +### 9.6 预加载、Shader 变体与 Mesh Streaming + +metadata 中还可以直接看到: + +- `PreloadStreamingGameConfig` +- `PreloadUIAssetsConfig` +- `PreloadLevelConfig.asset` +- `ShaderVariantCollection` +- `MeshStreamingBuildStates` +- `Assets/Editor Default Resources/MeshStreamingBuildStates` +- `MeshStreamingRoot` + +这说明项目已经把以下问题工具化处理: + +1. 游戏流式预加载。 +2. UI 资源预加载。 +3. Shader 变体收集和预热。 +4. Mesh Streaming 的构建状态管理。 + +这一点非常重要,因为很多 Unity 项目到后期才会被这些问题反噬,而《绝区零》从安装目录上看已经把它们纳入正式流程。 + +### 9.7 镜头、表现与关卡表现配置 + +直接证据包括: + +- `NapCameraSequence` +- `NapCameraSequenceHandle` +- `LevelPerformConfig.asset` +- `ConfigFocusCamera.asset` + +这说明: + +1. 镜头系统不是零碎 Timeline 片段堆出来的,而是存在独立序列抽象。 +2. 关卡表现可能通过配置驱动,而不是仅靠场景对象硬连。 +3. 镜头和关卡表现有机会在构建阶段被烘焙、索引和统一管理。 + +### 9.8 `Redmoon` 痕迹 + +metadata 中能看到: + +- `Redmoon_Android_Source` +- `Redmoon_IOS_Source` +- `Redmoon_Android_NetRes` +- `Redmoon_IOS_NetRes` +- `Redmoon_Android_Preload` +- `Redmoon_IOS_Preload` +- `__RedmoonCoroutines__` +- `__RedmoonGlobals__` + +当前不能精确确认 `Redmoon` 是什么,但比较稳的判断是: + +1. 它与跨平台资源构建、预加载或网络资源体系相关。 +2. 它不是 PC 独占的临时名,而是面向 Android/iOS 的通用构建概念。 +3. 这再次说明整个项目是多平台共享大部分工具链的工程,而不是 PC 版临时分支。 + +## 10. 从这些痕迹反推研发组织方式 + +虽然目录不会直接写“团队怎么分工”,但它会留下很明显的工程组织痕迹。 + +### 10.1 图形/引擎侧 + +能推断至少有人持续负责: + +- 渲染管线维护 +- SRP 相关系统 +- 原生图形能力接入 +- D3D12/Vulkan 路径维护 +- PSO/Shader/Mesh Streaming/预加载等性能议题 + +### 10.2 资源与构建侧 + +能推断至少有人持续负责: + +- 块资源打包与校验 +- 视频资源与业务分包映射 +- 音频语言包与最小包策略 +- 版本清单生成 +- Revision/version 体系 +- Persistent 落地与更新器行为 + +### 10.3 工具链侧 + +能推断至少有人持续负责: + +- ScriptConfig 资产规范 +- JsonBytes/MessagePack 导出 +- 世界图/棋盘插件/能力系统配置导出 +- 预加载配置和 Mesh Streaming 构建状态 +- 相机与表现系统工具 + +### 10.4 平台与运营侧 + +能推断至少有人持续负责: + +- SDK 接入 +- WebView 与 Native UI 栈 +- ABTest 平台对接 +- 文本翻译热更 +- Telemetry/Crash 链路 +- 安全/保护组件集成 + +换句话说,这个客户端从目录侧看,是一支分工比较清晰的大型团队产物,而不是少量程序维护的 Unity 项目。 + +## 11. 结合日志还原一次运行链路 + +最新日志片段可以串出一条很像正式版真实运行流程的链: + +1. `Startup RegisterInputSystem.` +2. `HTTP interceptors initialized` +3. `CreateMainCityClientServerManager.OnCreate` +4. 语言与地域翻译资源初始化。 +5. `LoadSceneGame` +6. `loaded addtiveScene` +7. `Load scene finish` +8. `OnAllLoadingFadeOut` +9. `EnterScene` +10. `SceneSwitch ... 完成切换` +11. `SDKInit` +12. `Set Game Version: CNPRODWin2.7.0` +13. `InitSDK Success` +14. `PreLoadSWURL: https://sdk.mihoyo.com/sw.html?...` +15. `mihoyosdk webview created` +16. 读取 WebView ABTest 配置。 + +这说明客户端启动顺序大概是: + +1. 引擎和输入系统起起来。 +2. 网络拦截器与客户端管理器先初始化。 +3. 场景切换到主流程。 +4. 之后再完成 SDK 与 WebView 链路。 + +这里特别值得注意的是: + +- `CreateMainCityClientServerManager.OnCreate` + +这条日志说明“主城客户端-服务端管理器”这种概念在架构上是显式存在的。换句话说,主城逻辑并不是简单本地场景,而是带有明确联机/协议/状态管理边界的系统。 + +## 12. 目前最值得相信的总体开发画像 + +综合全部证据,我对《绝区零》开发形态的还原如下: + +### 12.1 引擎画像 + +- Unity 2019 LTS 作为底座。 +- IL2CPP 作为正式版运行时。 +- 上层存在重度自研基础框架。 + +### 12.2 渲染画像 + +- 自定义 SRP 风格渲染框架。 +- PC 原生高端特性接入完整。 +- D3D12 很可能是主后端,Vulkan 被完整保留。 + +### 12.3 资源画像 + +- 主资源走块化分发。 +- 视频是业务分包核心资源。 +- 音频有最小包和完整包。 +- 存在小体量独立数据热更通道。 + +### 12.4 工具链画像 + +- 强配置驱动。 +- 强字节化数据导出。 +- 世界图、棋盘玩法、镜头序列、体素/覆盖层、预加载、Mesh Streaming 等都有工具化痕迹。 + +### 12.5 运营画像 + +- SDK、WebView、ABTest、翻译热更、遥测、Crash、保护都深度集成。 +- 明显是长线在线运营产品,而不是一次性交付的客户端。 + +## 13. 还不能下死结论的部分 + +下面这些点我认为目前还不能写成铁事实: + +1. `Real_ECS` 是否对应完整 ECS Runtime,还是内部一套混合架构场景名。 +2. `.blk` 内部是否封装 Unity AssetBundle、定制归档、压缩块索引,还是多种资源混合容器。 +3. `res_version`/`audio_version` 中 tag `1/2/3/4/5` 的精确定义。 +4. `Redmoon` 的确切职责边界。 +5. Vulkan 在 Windows 正式服中的启用策略。 + +## 14. 下一步继续深挖应该怎么做 + +如果继续往下做,我建议按以下顺序: + +### 14.1 最高优先级:解 `.blk` + +这是整个资源系统最关键的黑箱。只要把 `.blk` 文件头、索引、压缩方式、内容类型摸清,就能把: + +- 资源粒度 +- 依赖组织 +- 是否有 bundle 内嵌 +- 更新策略 +- 缓存策略 + +大幅说透。 + +### 14.2 第二优先级:把分类号表彻底补完 + +当前已经识别出大量分类号,但还可以继续做成完整索引,尤其是: + +- 主线章节包全表 +- 各活动包全表 +- 各系统教学包全表 +- 各卡池通用与角色专属媒体表 + +### 14.3 第三优先级:继续抽日志和 metadata + +重点继续找: + +- SRP 初始化链 +- ShaderCustomData 的实际配置路径 +- Vulkan/D3D12 选择逻辑 +- KCP/网络管理器更多细节 +- Hollow / WorldGraph / LevelWorld / NewAbility 的更多类型名 + +### 14.4 第四优先级:针对 Persistent 做版本前后对比 + +如果能抓到一次完整更新前后 Persistent 的变化,就能更准确地反推: + +- 哪些资源是首包内置 +- 哪些资源是首次进入某系统才下载 +- 哪些资源是活动时再拉取 +- 哪些资源会被清理或覆盖 + +## 15. 最终结论 + +如果只从安装目录出发,我对《绝区零》开发形态的最终判断是: + +- 它是一个建立在 Unity 2019 LTS 之上的、重度工程化的大型在线游戏客户端。 +- Unity 在这里主要提供平台底座和基础生产力,而不是全部开发方式。 +- 真正决定它产品形态的,是叠在 Unity 上面的那一层: + - 自定义渲染与图形接入 + - 自定义资源分发与版本系统 + - 强配置、强字节化的数据管线 + - 丰富的视频表现资源体系 + - SDK/WebView/ABTest/遥测/安全等长线运营基础设施 + +如果让我用一句话概括这次调查结果: + +**《绝区零》不是“用 Unity 做出来的一个游戏”,而是“用 Unity 作为底座承载的一整套产品化引擎栈”。** + +## 16. 附录:本轮调查中最关键的直接证据索引 + +为方便后续继续深挖,先把最关键的直接证据列在这里: + +### 16.1 版本与引擎 + +- `ZenlessZoneZero.exe -> 2019.4.40.14369230` +- `UnityPlayer.dll -> 2019.4.40.14369230` +- `config.ini -> game_version=2.7.0` +- `version_info -> CNPRODWin2.7.0` + +### 16.2 WebView/中间件 + +- `zf_cef.dll -> 100.0.24+g0783cf8+chromium-100.0.4896.127` +- `ZFGameBrowser.exe` +- `ZFEmbedWeb.dll` +- `ZFProxyWeb.dll` +- `AkSoundEngine.dll` +- `cri_ware_unity.dll` +- `kcp.dll` + +### 16.3 场景与工具链 + +- `Assets/Scenes/Logic/FrontendGame.unity` +- `Assets/Scenes/Logic/Launcher.unity` +- `Assets/Scenes/Logic/Real_ECS.unity` +- `Assets/Scenes/Login/Login_MainCityWorkshop.unity` +- `Assets/Scenes/Scene_Dev/DevLevel.unity` +- `Assets/NapResources/Data/ScriptConfig/...` +- `Assets/NapResources/Data/JsonBytes/...` +- `WorldGraph` +- `NapCameraSequence` +- `ChessboardPlugin` +- `VoxelArray` +- `MeshStreamingBuildStates` +- `PreloadStreamingGameConfig` +- `PreloadUIAssetsConfig` + +### 16.4 资源与版本系统 + +- `ZenlessZoneZero_Data\StreamingAssets\res_version` +- `ZenlessZoneZero_Data\StreamingAssets\data_version` +- `ZenlessZoneZero_Data\StreamingAssets\audio_version` +- `file_category_launcher` +- `ZenlessZoneZero_Data\Persistent\Blocks` +- `ZenlessZoneZero_Data\Persistent\Audio` +- `ZenlessZoneZero_Data\Persistent\Video` + +### 16.5 关键日志线索 + +- `CreateMainCityClientServerManager.OnCreate` +- `LoadSceneGame` +- `SceneSwitch 完成切换` +- `SDKInit` +- `InitSDK Success` +- `PreLoadSWURL: https://sdk.mihoyo.com/sw.html?...` +- `Get ABTest: plat - https://data-abtest-api.mihoyo.com/...` +- `regionTranslationVersionCheck URL:https://webstatic.mihoyo.com/admin/mi18n/...` + +## 17. 继续深挖:`.blk` 文件头的新增发现 + +这是在文档主体写完之后继续向下钻出来的新证据,价值很高。 + +### 17.1 `.blk` 不是裸 `UnityFS` + +我直接读取了两个 `.blk` 的前 96 个字节: + +- `ZenlessZoneZero_Data\StreamingAssets\Blocks\1000337454.blk` +- `ZenlessZoneZero_Data\StreamingAssets\Blocks\Data\3749079225.blk` + +两者的共同特征都是: + +- 文件头前 4 字节为 `6D 68 79 31` +- 对应 ASCII 即:`mhy1` + +这说明: + +- `.blk` 至少在容器头层不是裸露的 Unity 资源格式,而是 **米哈游自定义的 `mhy1` 容器头**。 + +这条证据非常关键,因为它把判断从“像自定义块格式”推进到了“文件头层面已经确认是自定义容器”。 + +### 17.2 主内容块里能看到 Unity 资源痕迹,但被包在 `mhy1` 容器里 + +对主内容块快速做可打印字符串扫描时,可以看到: + +- `archive:/CAB-85ea42baeef21686dd408a87d00e9877.res` +- `archive:/CAB-b6525d3ab1c368cdf59db6b227027457.res` +- `archive:/CAB-48c29ccf0721f09a645bfcc0401e0446.res` +- `1437729915099733045.bund` + +这里的 `CAB-...` 形式非常像 Unity 资源系统内部常见的 archive / CAB 命名痕迹。这带来一个更精细的判断: + +1. `.blk` 外层不是 UnityFS。 +2. 但 `.blk` 内部很可能封装了 Unity 资源对象、Unity archive,或者与 Unity bundle 体系相邻的资源块。 +3. 换句话说,**`.blk` 更像“米哈游自定义外层容器 + Unity 资源载荷”**,而不是完全脱离 Unity 资源生态的全新格式。 + +### 17.3 `data_version` 对应的数据块表现不同 + +对 `Blocks\Data\3749079225.blk` 做同类扫描时: + +- 同样有 `mhy1` 文件头。 +- 但没有快速扫到明显的 `UnityFS` 或 `CAB-` 字样。 + +这意味着两种可能: + +1. `Blocks/Data` 通道里的负载和主内容块不同,可能更偏配置/表数据/序列化数据。 +2. `Blocks/Data` 使用了不同的压缩、加密或布局方式,导致字符串特征更少。 + +这和前面基于 `data_version` 得出的判断是相互印证的: + +- `Blocks/Data` 很可能确实不是普通美术资源大块,而是更偏轻量逻辑数据通道。 + +### 17.4 现阶段关于 `.blk` 最稳妥的结论 + +截至目前,我认为最稳妥的描述是: + +- `.blk` 是 **带 `mhy1` 文件头的自定义内容块容器**。 +- 主内容块内部至少包含与 Unity archive / CAB 命名体系相关的资源载荷。 +- `Blocks` 与 `Blocks/Data` 很可能共用同一外层容器协议,但内部负载类型不完全相同。 + +这比“可能是自定义块格式”更进一步,已经接近可以围绕文件头和偏移去继续逆向解析了。 diff --git a/docs/issues/C#脚本系统_Editor前置缺口.md b/docs/used/C#脚本系统_Editor前置缺口.md similarity index 100% rename from docs/issues/C#脚本系统_Editor前置缺口.md rename to docs/used/C#脚本系统_Editor前置缺口.md diff --git a/docs/plan/D3D12后端测试设计.md b/docs/used/D3D12后端测试设计.md similarity index 100% rename from docs/plan/D3D12后端测试设计.md rename to docs/used/D3D12后端测试设计.md diff --git a/docs/plan/Editor设计与实现.md b/docs/used/Editor设计与实现.md similarity index 100% rename from docs/plan/Editor设计与实现.md rename to docs/used/Editor设计与实现.md diff --git a/docs/plan/OpenGL后端测试设计.md b/docs/used/OpenGL后端测试设计.md similarity index 100% rename from docs/plan/OpenGL后端测试设计.md rename to docs/used/OpenGL后端测试设计.md diff --git a/docs/plan/OpenGL测试实施计划.md b/docs/used/OpenGL测试实施计划.md similarity index 100% rename from docs/plan/OpenGL测试实施计划.md rename to docs/used/OpenGL测试实施计划.md diff --git a/docs/issues/RHI_OpenGL_State_Not_Applied.md b/docs/used/RHI_OpenGL_State_Not_Applied.md similarity index 100% rename from docs/issues/RHI_OpenGL_State_Not_Applied.md rename to docs/used/RHI_OpenGL_State_Not_Applied.md diff --git a/docs/plan/RHI抽象层设计与实现.md b/docs/used/RHI抽象层设计与实现.md similarity index 100% rename from docs/plan/RHI抽象层设计与实现.md rename to docs/used/RHI抽象层设计与实现.md diff --git a/docs/used/Renderer模块_EditorViewport缺少RenderSurface接入层3.27.md b/docs/used/Renderer模块_EditorViewport缺少RenderSurface接入层3.27.md new file mode 100644 index 00000000..d365743e --- /dev/null +++ b/docs/used/Renderer模块_EditorViewport缺少RenderSurface接入层3.27.md @@ -0,0 +1,120 @@ +# Renderer模块 EditorViewport缺少RenderSurface接入层 + +## 1. 问题定义 + +当前 editor 已经有: + +- `GameViewPanel` +- `SceneViewPanel` + +但二者目前仍然是空面板,尚未形成真正的 viewport 渲染宿主。 + +这意味着 Renderer 即使在 runtime 侧建立起来,editor 侧也还没有标准方式去承接: + +- 离屏 color/depth 输出 +- viewport resize +- 渲染结果贴到 ImGui 面板 + +--- + +## 2. 当前现状 + +当前 `GameViewPanel::Render()` 与 `SceneViewPanel::Render()` 仅创建面板窗口,本身没有: + +- 离屏渲染目标 +- 渲染尺寸管理 +- RHI / Renderer 级渲染输出对象 +- 纹理到 ImGui 的桥接 + +也就是说,editor 当前只有“面板外壳”,还没有“渲染宿主层”。 + +--- + +## 3. 为什么这不应该反向污染 Renderer 设计 + +这个问题很容易走偏成下面这种错误路线: + +- 先把 renderer 直接写进 editor 面板逻辑 +- `SceneView` 一套渲染逻辑 +- `GameView` 一套渲染逻辑 +- runtime 又一套渲染逻辑 + +这会导致: + +- 渲染逻辑重复 +- editor 与 runtime 耦合 +- 后续 C# SRP 难以统一接管 + +因此正确思路不是“先让面板自己画”,而是: + +1. Renderer 模块先支持统一的 `RenderSurface` +2. editor viewport 只作为 `RenderSurface` 的宿主与展示层 + +--- + +## 4. 建议方案 + +### 4.1 先在 Renderer 模块建立 `RenderSurface` + +`RenderSurface` 应统一描述: + +- swapchain 输出 +- 离屏 color / depth 目标 +- viewport 尺寸 +- resize 行为 + +### 4.2 editor 侧建立 viewport host 层 + +editor 侧后续应新增一层专门承接: + +- 面板尺寸变化 +- 请求 Renderer 重建或 resize `RenderSurface` +- 把结果纹理显示到 ImGui + +而不是把渲染实现直接塞进面板类。 + +### 4.3 `SceneView` 与 `GameView` 应共享同一套 Renderer 输出机制 + +区别只在于: + +- `GameView` 使用 runtime camera +- `SceneView` 使用 editor 自有 camera / gizmo / overlay + +但底层渲染输出机制应一致。 + +--- + +## 5. 与未来 Unity 风格演进的关系 + +未来如果要做接近 Unity 的 editor 与 SRP 体系,这一层非常关键。 + +因为 Unity 的: + +- Game 视图 +- Scene 视图 +- Camera 预览 + +本质上都不是复制多套渲染器,而是在同一渲染体系上挂不同宿主与附加绘制。 + +XCEngine 也应遵循同样思路。 + +--- + +## 6. 验收标准 + +完成后至少应满足: + +1. Renderer 能输出到离屏 `RenderSurface` +2. `GameView` 能显示 renderer 的离屏结果 +3. `SceneView` 能显示 renderer 的离屏结果 +4. viewport resize 不需要复制新的渲染逻辑 +5. runtime 与 editor 共用同一套渲染宿主接口 + +--- + +## 7. 优先级 + +中到高。 + +它不是 Renderer v0 的第一步实现内容,但必须在 renderer 基础链路稳定后尽快接上,否则 editor 渲染体系会被迫走临时方案。 + diff --git a/docs/used/Renderer模块_Material与Shader资产模型暂不满足SRP演进需求.md b/docs/used/Renderer模块_Material与Shader资产模型暂不满足SRP演进需求.md new file mode 100644 index 00000000..d4d40812 --- /dev/null +++ b/docs/used/Renderer模块_Material与Shader资产模型暂不满足SRP演进需求.md @@ -0,0 +1,146 @@ +# Renderer模块 Material与Shader资产模型暂不满足SRP演进需求 + +## 1. 问题定义 + +当前资源层已经具备: + +- `Material` +- `Shader` +- `Texture` + +但现有模型仍然偏“最小资源容器”,尚不足以直接承接未来 Unity 风格 Renderer / SRP 的完整需求。 + +当前最典型的问题是: + +- `Shader` 更像“单个 stage shader 资源” +- `Material` 更像“shader 引用 + 属性包” +- 资产层缺少 pass / tag / render state / render queue 语义 + +--- + +## 2. 当前现状 + +从现有实现看: + +### `Shader` + +当前 `Shader` 资源主要描述: + +- shader type +- shader language +- source / compiled binary +- uniforms / attributes + +这更接近“单个 shader stage 对象”,而不是面向渲染管线选择的 shader asset。 + +### `Material` + +当前 `Material` 资源主要描述: + +- 一个 `Shader` 引用 +- 属性表 +- 纹理绑定表 + +当前 `MaterialLoader` 也只解析最基础的 `"shader"` 字段。 + +--- + +## 3. 为什么这会影响未来 Renderer / SRP + +在未来的 Unity 风格渲染体系中,Renderer / SRP 至少需要下列能力: + +- 根据 shader pass/tag 选择绘制路径 +- 区分 opaque / transparent / shadow caster / depth only 等 pass +- 用 render queue 控制排序层级 +- 用 render state 描述 cull / blend / ztest / zwrite +- 为后续 keyword / variant 留空间 + +如果材质 / shader 资产模型长期停留在当前结构,会导致: + +- 内建 forward 渲染可以临时跑起来 +- 但未来一旦上 SRP,就必须大规模重构资源资产模型 + +这会影响: + +- Renderer +- Material 资源格式 +- Shader 导入格式 +- editor 材质面板 +- 未来 C# SRP 的 pass 选择逻辑 + +--- + +## 4. 建议方向 + +### 4.1 不要让 `Shader` 永远停留在“单 stage 资源” + +后续建议演进到更面向渲染管线的概念,例如: + +- `ShaderAsset` +- `ShaderPass` +- 每个 pass 包含 vertex / fragment 等 stage 组合 +- 每个 pass 具备 tag 与 render state 描述 + +### 4.2 `Material` 应逐步获得 renderer 需要的元数据 + +后续建议补充: + +- render queue +- pass 相关 tag / override +- render state override +- shader keyword / variant 预留位 + +### 4.3 第一阶段可以先不一次性做全 + +但即使第一阶段只做 `UnlitTexture` / `SimpleLit`,也建议: + +- 不把格式彻底写死成只有 `"shader"` 这一个入口 +- 为 future pass/tag 结构预留升级路径 + +换句话说: + +- 当前阶段可以简化实现 +- 但不能封死演进路线 + +--- + +## 5. 与 Unity 风格的关系 + +未来如果要在 C# 层做接近 Unity 的 SRP,shader pass 选择是核心能力之一。 + +例如: + +- `ShaderTagId` +- `DrawingSettings` +- `FilteringSettings` +- renderer list / pass filtering + +这些能力都要求材质与 shader 资产层至少能表达“pass/tag/state”。 + +因此,这个问题虽然不一定是 Renderer v0 第一周就要全量解决,但必须在设计阶段明确记录。 + +--- + +## 6. 建议验收标准 + +进入下一阶段时,至少应达到以下其中一档: + +### 档位 A:最小可演进 + +- 明确存在“shader pass”概念 +- 材质资产格式有升级空间 +- 内建 pipeline 能按 pass 选择绘制 + +### 档位 B:更接近 SRP + +- 具备 `pass + tag + render state + queue` +- 为 future keyword / variant 留接口 + +--- + +## 7. 优先级 + +中到高。 + +它不一定阻塞 Renderer v0 的第一步落地,但如果完全忽略,未来做 C# SRP 时会出现明显返工。 + diff --git a/docs/used/Renderer模块_Scene层缺少MeshFilter与MeshRenderer抽象3.27.md b/docs/used/Renderer模块_Scene层缺少MeshFilter与MeshRenderer抽象3.27.md new file mode 100644 index 00000000..8e15d817 --- /dev/null +++ b/docs/used/Renderer模块_Scene层缺少MeshFilter与MeshRenderer抽象3.27.md @@ -0,0 +1,129 @@ +# Renderer模块 Scene层缺少MeshFilter与MeshRenderer抽象 + +## 1. 问题定义 + +当前工程已经具备: + +- `GameObject` +- `Component` +- `Scene` +- `CameraComponent` +- `LightComponent` + +但仍然缺少最关键的可渲染组件抽象: + +- `MeshFilterComponent` +- `MeshRendererComponent` + +这会导致 Renderer 模块无法以“正式场景组件”的方式承接渲染对象。 + +--- + +## 2. 当前现状 + +从当前代码看: + +- `GameObject` 已经支持通用组件挂载 +- `Scene` 的序列化 / 反序列化已经依赖 `ComponentFactoryRegistry` +- `ComponentFactoryRegistry` 当前只注册了 `Camera`、`Light`、`AudioSource`、`AudioListener` + +也就是说,场景层已经具备“扩展组件”的框架,但还没有真正承接渲染对象的组件类型。 + +--- + +## 3. 为什么这是 Renderer 阶段必须先补的缺口 + +如果没有正式的可渲染组件,Renderer 会被迫依赖以下临时做法: + +- 在测试里手工拼 mesh/material/transform +- 在 Renderer 内部写死资源路径或对象查找逻辑 +- 把“场景对象”和“渲染对象”分裂成两套平行系统 + +这会直接破坏后续目标: + +- 不利于 editor Inspector 展示 +- 不利于场景序列化 +- 不利于未来 C# API 对齐 Unity +- 不利于未来引入 `SkinnedMeshRenderer`、`SpriteRenderer` 等扩展 + +--- + +## 4. 与 Unity 风格的关系 + +如果未来要模仿 Unity 做 C# SRP,那么场景组件模型最好一开始就尽量贴近 Unity。 + +因此建议不是只加一个大而全的 `MeshRendererComponent`,而是直接采用: + +- `MeshFilterComponent`:持有 mesh +- `MeshRendererComponent`:持有材质和渲染状态 + +这样更容易在未来映射到: + +- C# `MeshFilter` +- C# `MeshRenderer` +- Inspector 上的分离展示 +- 脚本对 mesh / material 的分别访问 + +--- + +## 5. 建议方案 + +### 5.1 新增组件 + +#### `MeshFilterComponent` + +最小建议字段: + +- `ResourceHandle m_mesh` + +#### `MeshRendererComponent` + +最小建议字段: + +- 材质数组 +- `enabled` +- `castShadows` +- `receiveShadows` +- `renderLayer` + +### 5.2 注册到 `ComponentFactoryRegistry` + +这样场景文件才能: + +- 正确反序列化 +- 在 editor 中按组件类型恢复 +- 为未来脚本与 Inspector 留入口 + +### 5.3 Renderer 只从组件层抽取渲染对象 + +Renderer 不应自行维护另一套“逻辑对象 -> 渲染对象”的临时注册表作为长期方案。 + +正确方式应是: + +- `Scene` +- `GameObject` +- `MeshFilterComponent` +- `MeshRendererComponent` + +共同构成 Renderer 的输入源。 + +--- + +## 6. 验收标准 + +完成后至少应满足: + +1. 场景可正式挂载 mesh 渲染对象 +2. `Scene` 序列化 / 反序列化可恢复对应组件 +3. Renderer 可以直接从场景中提取可渲染对象 +4. editor 后续可以直接复用同一套组件数据 +5. 后续 C# API 可以平滑映射到 Unity 风格组件模型 + +--- + +## 7. 优先级 + +高。 + +这是 Renderer 模块正式落地前必须解决的前置缺口。 + diff --git a/docs/plan/XCEngine渲染引擎架构设计.md b/docs/used/XCEngine渲染引擎架构设计.md similarity index 100% rename from docs/plan/XCEngine渲染引擎架构设计.md rename to docs/used/XCEngine渲染引擎架构设计.md diff --git a/docs/plan/XCGameEngine架构设计.md b/docs/used/XCGameEngine架构设计.md similarity index 100% rename from docs/plan/XCGameEngine架构设计.md rename to docs/used/XCGameEngine架构设计.md diff --git a/docs/plan/仿Unity RHI架构设计.md b/docs/used/仿Unity RHI架构设计.md similarity index 100% rename from docs/plan/仿Unity RHI架构设计.md rename to docs/used/仿Unity RHI架构设计.md diff --git a/docs/plan/第三阶段计划.md b/docs/used/第三阶段计划.md similarity index 100% rename from docs/plan/第三阶段计划.md rename to docs/used/第三阶段计划.md diff --git a/docs/plan/第二阶段计划.md b/docs/used/第二阶段计划.md similarity index 100% rename from docs/plan/第二阶段计划.md rename to docs/used/第二阶段计划.md diff --git a/editor/caidan.png b/editor/caidan.png new file mode 100644 index 0000000000000000000000000000000000000000..f0aa5ba940518042fb135ebdbd4709272fbbf0c6 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^+CZ$v!3HE_4=2e1DaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5he4R}c>anMprEIxi(^QH``dF1c@G!}95|rzTmR3BhfmeF rPU4rUJbz|$-J?B+r<<-eAqZnKuCSOn%{sRnXefiHtDnm{r-UW|sw_N7 literal 0 HcmV?d00001 diff --git a/editor/color.png b/editor/color.png new file mode 100644 index 0000000000000000000000000000000000000000..b466e5db2ab3e3b04b68c68750948380fe697850 GIT binary patch literal 51420 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 Awg3PC literal 9575 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 == draggedPath; } -inline std::string AcceptProjectAssetDropPayload(const AssetItemPtr& targetFolder) { - if (!targetFolder || !targetFolder->isFolder || !ImGui::BeginDragDropTarget()) { - return {}; - } - - std::string draggedPath; - if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload(ProjectAssetPayloadType())) { - const char* payloadPath = static_cast(payload->Data); - if (payloadPath) { - draggedPath = payloadPath; - } - } - ImGui::EndDragDropTarget(); - return draggedPath; -} - inline bool BeginProjectAssetDrag(const AssetItemPtr& item, UI::AssetIconKind iconKind) { - if (!item || item->fullPath.empty() || !ImGui::BeginDragDropSource(ImGuiDragDropFlags_None)) { + if (!item || item->fullPath.empty() || !ImGui::BeginDragDropSource(ImGuiDragDropFlags_SourceNoPreviewTooltip)) { return false; } + (void)iconKind; ImGui::SetDragDropPayload(ProjectAssetPayloadType(), item->fullPath.c_str(), item->fullPath.length() + 1); - ImVec2 previewMin = ImGui::GetMousePos(); - const ImVec2 previewSize = UI::AssetDragPreviewSize(); - ImVec2 previewMax = ImVec2(previewMin.x + previewSize.x, previewMin.y + previewSize.y); - UI::DrawAssetIcon(ImGui::GetForegroundDrawList(), previewMin, previewMax, iconKind); - ImGui::EndDragDropSource(); return true; } @@ -82,8 +62,11 @@ inline bool DrawProjectNavigateBackAction(IProjectManager& projectManager) { return true; } -inline void HandleProjectBackgroundPrimaryClick(IProjectManager& projectManager) { - if (ImGui::IsWindowHovered() && ImGui::IsMouseClicked(0) && !ImGui::IsAnyItemHovered()) { +template +inline void HandleProjectBackgroundPrimaryClick( + IProjectManager& projectManager, + const UI::InlineTextEditState& renameState) { + if (ImGui::IsWindowHovered() && ImGui::IsMouseClicked(0) && !ImGui::IsAnyItemHovered() && !renameState.IsActive()) { projectManager.ClearSelection(); } } @@ -133,52 +116,19 @@ inline void DrawProjectAssetContextActions(IEditorContext& context, const AssetI }); } -template -inline void DrawProjectEmptyContextActions(UI::TextInputPopupState& createFolderDialog) { - DrawMenuAction(MakeCreateFolderAction(), [&]() { - createFolderDialog.RequestOpen("NewFolder"); - }); -} - -template +template inline void DrawProjectEmptyContextPopup( UI::DeferredPopupState& emptyContextMenu, - UI::TextInputPopupState& createFolderDialog) { + CreateFolderFn&& createFolder) { emptyContextMenu.ConsumeOpenRequest("EmptyContextMenu"); if (!UI::BeginPopup("EmptyContextMenu")) { return; } - DrawProjectEmptyContextActions(createFolderDialog); - UI::EndPopup(); -} - -template -inline void DrawProjectCreateFolderDialog(IEditorContext& context, UI::TextInputPopupState& createFolderDialog) { - createFolderDialog.ConsumeOpenRequest("Create Folder"); - - if (!UI::BeginModalPopup("Create Folder")) { - return; - } - - ImGui::InputText("Name", createFolderDialog.Buffer(), createFolderDialog.BufferSize()); - ImGui::Separator(); - - switch (UI::DrawDialogActionRow("Create", "Cancel", !createFolderDialog.Empty())) { - case UI::DialogActionResult::Primary: - if (Commands::CreateFolder(context.GetProjectManager(), createFolderDialog.Buffer())) { - createFolderDialog.Clear(); - ImGui::CloseCurrentPopup(); - } - break; - case UI::DialogActionResult::Secondary: - createFolderDialog.Clear(); - ImGui::CloseCurrentPopup(); - break; - case UI::DialogActionResult::None: - break; - } + DrawMenuAction(MakeCreateFolderAction(), [&]() { + createFolder(); + }); UI::EndPopup(); } diff --git a/editor/src/Commands/ProjectCommands.h b/editor/src/Commands/ProjectCommands.h index 13e0dfa0..979f0b32 100644 --- a/editor/src/Commands/ProjectCommands.h +++ b/editor/src/Commands/ProjectCommands.h @@ -11,6 +11,8 @@ #include "Utils/FileDialogUtils.h" #include "Utils/ProjectFileUtils.h" +#include +#include #include #include @@ -18,6 +20,36 @@ namespace XCEngine { namespace Editor { namespace Commands { +namespace detail { + +inline std::wstring MakeProjectPathKey(const std::filesystem::path& path) { + std::wstring key = path.lexically_normal().native(); + std::replace(key.begin(), key.end(), L'/', L'\\'); + std::transform(key.begin(), key.end(), key.begin(), [](wchar_t ch) { + return static_cast(std::towlower(ch)); + }); + + while (key.size() > 1 && (key.back() == L'\\' || key.back() == L'/')) { + key.pop_back(); + } + return key; +} + +inline bool IsSameOrDescendantProjectPath(const std::filesystem::path& path, const std::filesystem::path& root) { + const std::wstring pathKey = MakeProjectPathKey(path); + std::wstring rootKey = MakeProjectPathKey(root); + if (pathKey == rootKey) { + return true; + } + + if (!rootKey.empty() && rootKey.back() != L'\\') { + rootKey.push_back(L'\\'); + } + return pathKey.rfind(rootKey, 0) == 0; +} + +} // namespace detail + inline bool CanOpenAsset(const AssetItemPtr& item) { return item != nullptr && (item->isFolder || item->type == "Scene"); } @@ -35,13 +67,12 @@ inline bool OpenAsset(IEditorContext& context, const AssetItemPtr& item) { return LoadScene(context, item->fullPath); } -inline bool CreateFolder(IProjectManager& projectManager, const std::string& name) { +inline AssetItemPtr CreateFolder(IProjectManager& projectManager, const std::string& name) { if (name.empty()) { - return false; + return nullptr; } - projectManager.CreateFolder(name); - return true; + return projectManager.CreateFolder(name); } inline bool DeleteAsset(IProjectManager& projectManager, const std::string& fullPath) { @@ -60,7 +91,7 @@ inline bool DeleteAsset(IProjectManager& projectManager, const AssetItemPtr& ite return DeleteAsset(projectManager, item->fullPath); } -inline bool MoveAssetToFolder( +inline bool CanMoveAssetToFolder( IProjectManager& projectManager, const std::string& sourceFullPath, const AssetItemPtr& targetFolder) { @@ -68,13 +99,68 @@ inline bool MoveAssetToFolder( return false; } - if (sourceFullPath == targetFolder->fullPath) { + const AssetItemPtr rootFolder = projectManager.GetRootFolder(); + if (!rootFolder) { + return false; + } + + namespace fs = std::filesystem; + try { + const fs::path sourcePath = fs::path(sourceFullPath); + const fs::path destFolderPath = fs::path(targetFolder->fullPath); + const fs::path rootPath = fs::path(rootFolder->fullPath); + + if (!fs::exists(sourcePath) || !fs::exists(destFolderPath) || !fs::is_directory(destFolderPath)) { + return false; + } + if (!detail::IsSameOrDescendantProjectPath(sourcePath, rootPath) || + !detail::IsSameOrDescendantProjectPath(destFolderPath, rootPath)) { + return false; + } + if (detail::MakeProjectPathKey(sourcePath) == detail::MakeProjectPathKey(rootPath)) { + return false; + } + if (fs::is_directory(sourcePath) && detail::IsSameOrDescendantProjectPath(destFolderPath, sourcePath)) { + return false; + } + + const fs::path destPath = destFolderPath / sourcePath.filename(); + if (detail::MakeProjectPathKey(destPath) == detail::MakeProjectPathKey(sourcePath) || fs::exists(destPath)) { + return false; + } + return true; + } catch (...) { + return false; + } +} + +inline bool MoveAssetToFolder( + IProjectManager& projectManager, + const std::string& sourceFullPath, + const AssetItemPtr& targetFolder) { + if (!CanMoveAssetToFolder(projectManager, sourceFullPath, targetFolder)) { return false; } return projectManager.MoveItem(sourceFullPath, targetFolder->fullPath); } +inline bool RenameAsset(IProjectManager& projectManager, const std::string& sourceFullPath, const std::string& newName) { + if (sourceFullPath.empty() || newName.empty()) { + return false; + } + + return projectManager.RenameItem(sourceFullPath, newName); +} + +inline bool RenameAsset(IProjectManager& projectManager, const AssetItemPtr& item, const std::string& newName) { + if (!item) { + return false; + } + + return RenameAsset(projectManager, item->fullPath, newName); +} + inline std::string BuildProjectFallbackScenePath(const std::string& projectPath) { return (std::filesystem::path(projectPath) / "Assets" / "Scenes" / "Main.xc").string(); } diff --git a/editor/src/Core/IProjectManager.h b/editor/src/Core/IProjectManager.h index d967e85b..7e192541 100644 --- a/editor/src/Core/IProjectManager.h +++ b/editor/src/Core/IProjectManager.h @@ -35,9 +35,10 @@ public: virtual void Initialize(const std::string& projectPath) = 0; virtual void RefreshCurrentFolder() = 0; - virtual void CreateFolder(const std::string& name) = 0; + virtual AssetItemPtr CreateFolder(const std::string& name) = 0; virtual bool DeleteItem(const std::string& fullPath) = 0; virtual bool MoveItem(const std::string& sourceFullPath, const std::string& destFolderFullPath) = 0; + virtual bool RenameItem(const std::string& sourceFullPath, const std::string& newName) = 0; virtual const std::string& GetProjectPath() const = 0; }; diff --git a/editor/src/Managers/ProjectManager.h b/editor/src/Managers/ProjectManager.h index 39e4dc84..1602cd08 100644 --- a/editor/src/Managers/ProjectManager.h +++ b/editor/src/Managers/ProjectManager.h @@ -34,9 +34,10 @@ public: void Initialize(const std::string& projectPath) override; void RefreshCurrentFolder() override; - void CreateFolder(const std::string& name) override; + AssetItemPtr CreateFolder(const std::string& name) override; bool DeleteItem(const std::string& fullPath) override; bool MoveItem(const std::string& sourceFullPath, const std::string& destFolderFullPath) override; + bool RenameItem(const std::string& sourceFullPath, const std::string& newName) override; const std::string& GetProjectPath() const override { return m_projectPath; } diff --git a/editor/src/UI/BuiltInIcons.cpp b/editor/src/UI/BuiltInIcons.cpp index b40056f0..f17d5cd1 100644 --- a/editor/src/UI/BuiltInIcons.cpp +++ b/editor/src/UI/BuiltInIcons.cpp @@ -6,9 +6,13 @@ #include #include +#include #include #include +#include #include +#include +#include #include #include @@ -36,12 +40,26 @@ struct BuiltInTexture { struct BuiltInIconState { ImGuiBackendBridge* backend = nullptr; + ID3D12Device* device = nullptr; + ID3D12CommandQueue* commandQueue = nullptr; BuiltInTexture folder; BuiltInTexture gameObject; + BuiltInTexture scene; + struct CachedAssetPreview { + BuiltInTexture texture; + bool loadAttempted = false; + int lastUsedFrame = -1; + }; + std::unordered_map assetPreviews; + int lastPreviewBudgetFrame = -1; + int previewLoadsThisFrame = 0; }; BuiltInIconState g_icons; +constexpr size_t kMaxCachedAssetPreviews = 40; +constexpr int kMaxPreviewLoadsPerFrame = 2; + std::filesystem::path ResolveFolderIconPath() { const std::filesystem::path exeDir(Platform::GetExecutableDirectoryUtf8()); return (exeDir / ".." / ".." / "resources" / "Icons" / "folder_icon.png").lexically_normal(); @@ -52,6 +70,33 @@ std::filesystem::path ResolveGameObjectIconPath() { return (exeDir / ".." / ".." / "resources" / "Icons" / "gameobject_icon.png").lexically_normal(); } +std::filesystem::path ResolveSceneIconPath() { + const std::filesystem::path exeDir(Platform::GetExecutableDirectoryUtf8()); + return (exeDir / ".." / ".." / "resources" / "Icons" / "scene_icon.png").lexically_normal(); +} + +std::string MakeAssetPreviewKey(const std::string& filePath) { + std::wstring key = std::filesystem::path(Platform::Utf8ToWide(filePath)).lexically_normal().generic_wstring(); + std::transform(key.begin(), key.end(), key.begin(), ::towlower); + return Platform::WideToUtf8(key); +} + +bool ReadFileBytes(const std::filesystem::path& filePath, std::vector& bytes) { + std::ifstream stream(filePath, std::ios::binary | std::ios::ate); + if (!stream.is_open()) { + return false; + } + + const std::streamsize size = stream.tellg(); + if (size <= 0) { + return false; + } + + bytes.resize(static_cast(size)); + stream.seekg(0, std::ios::beg); + return stream.read(reinterpret_cast(bytes.data()), size).good(); +} + void ResetTexture(BuiltInTexture& texture) { if (g_icons.backend && texture.cpuHandle.ptr != 0) { g_icons.backend->FreeTextureDescriptor(texture.cpuHandle, texture.gpuHandle); @@ -65,6 +110,13 @@ void ResetTexture(BuiltInTexture& texture) { texture.height = 0; } +void ResetAssetPreviewCache() { + for (auto& entry : g_icons.assetPreviews) { + ResetTexture(entry.second.texture); + } + g_icons.assetPreviews.clear(); +} + bool WaitForQueueIdle(ID3D12Device* device, ID3D12CommandQueue* commandQueue) { if (!device || !commandQueue) { return false; @@ -109,10 +161,21 @@ bool LoadTextureFromFile( return false; } + std::vector fileData; + if (!ReadFileBytes(filePath, fileData)) { + return false; + } + int width = 0; int height = 0; int channels = 0; - stbi_uc* pixels = stbi_load(filePath.string().c_str(), &width, &height, &channels, STBI_rgb_alpha); + stbi_uc* pixels = stbi_load_from_memory( + fileData.data(), + static_cast(fileData.size()), + &width, + &height, + &channels, + STBI_rgb_alpha); if (!pixels || width <= 0 || height <= 0) { if (pixels) { stbi_image_free(pixels); @@ -328,6 +391,76 @@ void DrawBuiltInFileIcon(ImDrawList* drawList, const ImVec2& min, const ImVec2& drawList->AddLine(foldA, foldB, lineColor); } +BuiltInIconState::CachedAssetPreview* GetOrCreateAssetPreview(const std::string& filePath) { + if (!g_icons.backend || !g_icons.device || !g_icons.commandQueue || filePath.empty()) { + return nullptr; + } + + const std::string key = MakeAssetPreviewKey(filePath); + auto [it, inserted] = g_icons.assetPreviews.try_emplace(key); + BuiltInIconState::CachedAssetPreview& preview = it->second; + preview.lastUsedFrame = ImGui::GetFrameCount(); + + if (!inserted && !std::filesystem::exists(std::filesystem::path(Platform::Utf8ToWide(filePath)))) { + ResetTexture(preview.texture); + preview.loadAttempted = true; + return &preview; + } + + if (preview.texture.IsValid() || preview.loadAttempted) { + return &preview; + } + + const int frame = ImGui::GetFrameCount(); + if (g_icons.lastPreviewBudgetFrame != frame) { + g_icons.lastPreviewBudgetFrame = frame; + g_icons.previewLoadsThisFrame = 0; + } + if (g_icons.previewLoadsThisFrame >= kMaxPreviewLoadsPerFrame) { + return &preview; + } + + preview.loadAttempted = true; + ++g_icons.previewLoadsThisFrame; + LoadTextureFromFile( + *g_icons.backend, + g_icons.device, + g_icons.commandQueue, + std::filesystem::path(Platform::Utf8ToWide(filePath)), + preview.texture); + return &preview; +} + +void PruneAssetPreviewCache() { + if (g_icons.assetPreviews.size() <= kMaxCachedAssetPreviews) { + return; + } + + std::vector> candidates; + candidates.reserve(g_icons.assetPreviews.size()); + for (const auto& entry : g_icons.assetPreviews) { + candidates.emplace_back(entry.first, entry.second.lastUsedFrame); + } + + std::sort( + candidates.begin(), + candidates.end(), + [](const auto& lhs, const auto& rhs) { + return lhs.second < rhs.second; + }); + + size_t removeCount = g_icons.assetPreviews.size() - kMaxCachedAssetPreviews; + for (size_t i = 0; i < removeCount && i < candidates.size(); ++i) { + auto it = g_icons.assetPreviews.find(candidates[i].first); + if (it == g_icons.assetPreviews.end()) { + continue; + } + + ResetTexture(it->second.texture); + g_icons.assetPreviews.erase(it); + } +} + } // namespace void InitializeBuiltInIcons( @@ -336,14 +469,23 @@ void InitializeBuiltInIcons( ID3D12CommandQueue* commandQueue) { ShutdownBuiltInIcons(); g_icons.backend = &backend; + g_icons.device = device; + g_icons.commandQueue = commandQueue; LoadTextureFromFile(backend, device, commandQueue, ResolveFolderIconPath(), g_icons.folder); LoadTextureFromFile(backend, device, commandQueue, ResolveGameObjectIconPath(), g_icons.gameObject); + LoadTextureFromFile(backend, device, commandQueue, ResolveSceneIconPath(), g_icons.scene); } void ShutdownBuiltInIcons() { + ResetAssetPreviewCache(); ResetTexture(g_icons.folder); ResetTexture(g_icons.gameObject); + ResetTexture(g_icons.scene); g_icons.backend = nullptr; + g_icons.device = nullptr; + g_icons.commandQueue = nullptr; + g_icons.lastPreviewBudgetFrame = -1; + g_icons.previewLoadsThisFrame = 0; } void DrawAssetIcon(ImDrawList* drawList, const ImVec2& min, const ImVec2& max, AssetIconKind kind) { @@ -367,9 +509,34 @@ void DrawAssetIcon(ImDrawList* drawList, const ImVec2& min, const ImVec2& max, A return; } + if (kind == AssetIconKind::Scene) { + if (g_icons.scene.IsValid()) { + DrawTextureIcon(drawList, g_icons.scene, min, max); + return; + } + + DrawBuiltInFileIcon(drawList, min, max); + return; + } + DrawBuiltInFileIcon(drawList, min, max); } +bool DrawTextureAssetPreview( + ImDrawList* drawList, + const ImVec2& min, + const ImVec2& max, + const std::string& filePath) { + BuiltInIconState::CachedAssetPreview* preview = GetOrCreateAssetPreview(filePath); + if (!preview || !preview->texture.IsValid()) { + return false; + } + + DrawTextureIcon(drawList, preview->texture, min, max); + PruneAssetPreviewCache(); + return true; +} + } // namespace UI } // namespace Editor } // namespace XCEngine diff --git a/editor/src/UI/BuiltInIcons.h b/editor/src/UI/BuiltInIcons.h index c6f515de..e99e58f4 100644 --- a/editor/src/UI/BuiltInIcons.h +++ b/editor/src/UI/BuiltInIcons.h @@ -1,6 +1,7 @@ #pragma once #include +#include struct ID3D12Device; struct ID3D12CommandQueue; @@ -14,7 +15,8 @@ class ImGuiBackendBridge; enum class AssetIconKind { Folder, File, - GameObject + GameObject, + Scene }; void InitializeBuiltInIcons( @@ -25,6 +27,11 @@ void InitializeBuiltInIcons( void ShutdownBuiltInIcons(); void DrawAssetIcon(ImDrawList* drawList, const ImVec2& min, const ImVec2& max, AssetIconKind kind); +bool DrawTextureAssetPreview( + ImDrawList* drawList, + const ImVec2& min, + const ImVec2& max, + const std::string& filePath); } // namespace UI } // namespace Editor diff --git a/editor/src/UI/ColorPicker.h b/editor/src/UI/ColorPicker.h index 5ba2b2a5..2567c908 100644 --- a/editor/src/UI/ColorPicker.h +++ b/editor/src/UI/ColorPicker.h @@ -89,6 +89,18 @@ inline float ColorPickerInputWidth() { return 62.0f; } +inline float ColorPickerChannelLabelWidth() { + return 12.0f; +} + +inline float ColorPickerHexLabelWidth() { + return 84.0f; +} + +inline float ColorPickerFieldSpacing() { + return 8.0f; +} + inline float ColorPickerCloseButtonSize() { return 18.0f; } @@ -137,6 +149,10 @@ inline ImVec4 ColorPickerBorderColor() { return ImVec4(0.15f, 0.15f, 0.15f, 1.0f); } +inline float ColorPickerPopupRounding() { + return 3.0f; +} + inline ImVec4 ColorPickerPreviewBorderColor() { return ImVec4(0.12f, 0.12f, 0.12f, 1.0f); } @@ -550,14 +566,15 @@ inline bool DrawChannelGradientSlider( } inline bool DrawChannelRow(const char* label, int componentIndex, ColorPickerState& state, float rowWidth) { - constexpr float labelWidth = 14.0f; - constexpr float spacing = 8.0f; + const float labelWidth = ColorPickerChannelLabelWidth(); + const float spacing = ColorPickerFieldSpacing(); const float inputWidth = ColorPickerInputWidth(); const float sliderWidth = ImMax(rowWidth - labelWidth - spacing - inputWidth - spacing, 60.0f); + const float rowStartX = ImGui::GetCursorPosX(); ImGui::AlignTextToFramePadding(); ImGui::TextUnformatted(label); - ImGui::SameLine(0.0f, spacing); + ImGui::SameLine(rowStartX + labelWidth + spacing, 0.0f); ImGui::PushID(label); float& value = state.color[componentIndex]; @@ -577,14 +594,15 @@ inline bool DrawChannelRow(const char* label, int componentIndex, ColorPickerSta } inline bool DrawAlphaRow(ColorPickerState& state, float rowWidth) { - constexpr float labelWidth = 14.0f; - constexpr float spacing = 8.0f; + const float labelWidth = ColorPickerChannelLabelWidth(); + const float spacing = ColorPickerFieldSpacing(); const float inputWidth = ColorPickerInputWidth(); const float sliderWidth = ImMax(rowWidth - labelWidth - spacing - inputWidth - spacing, 60.0f); + const float rowStartX = ImGui::GetCursorPosX(); ImGui::AlignTextToFramePadding(); ImGui::TextUnformatted("A"); - ImGui::SameLine(0.0f, spacing); + ImGui::SameLine(rowStartX + labelWidth + spacing, 0.0f); ImGui::PushID("Alpha"); const ImVec4 startColor(state.color[0], state.color[1], state.color[2], 0.0f); @@ -607,15 +625,19 @@ inline bool DrawAlphaRow(ColorPickerState& state, float rowWidth) { } inline bool DrawHexRow(ColorPickerState& state, float rowWidth) { + const float labelWidth = ColorPickerHexLabelWidth(); + const float spacing = ColorPickerFieldSpacing(); + const float rowStartX = ImGui::GetCursorPosX(); + ImGui::AlignTextToFramePadding(); ImGui::TextUnformatted("Hexadecimal"); - ImGui::SameLine(0.0f, 8.0f); + ImGui::SameLine(rowStartX + labelWidth + spacing, 0.0f); if (!state.hexEditing) { FormatHexBuffer(state); } - ImGui::SetNextItemWidth(ImMax(rowWidth - ImGui::CalcTextSize("Hexadecimal").x - 8.0f, 40.0f)); + ImGui::SetNextItemWidth(ImMax(rowWidth - labelWidth - spacing, 40.0f)); const bool edited = ImGui::InputText( "##hex", state.hexBuffer, @@ -660,10 +682,11 @@ inline bool DrawCloseButton(const char* id, const ImVec2& size) { inline bool DrawUnityColorPickerPopup(const char* popupId, ColorPickerState& state, bool includeAlpha) { const float headerHeight = ColorPickerHeaderHeight(); const float bodyPadding = ColorPickerBodyPadding(); + const float popupRounding = ColorPickerPopupRounding(); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); - ImGui::PushStyleVar(ImGuiStyleVar_PopupRounding, 3.0f); - ImGui::PushStyleVar(ImGuiStyleVar_PopupBorderSize, 1.0f); + ImGui::PushStyleVar(ImGuiStyleVar_PopupRounding, popupRounding); + ImGui::PushStyleVar(ImGuiStyleVar_PopupBorderSize, PopupWindowBorderSize()); ImGui::PushStyleColor(ImGuiCol_PopupBg, ColorPickerBodyColor()); ImGui::PushStyleColor(ImGuiCol_Border, ColorPickerBorderColor()); @@ -685,15 +708,16 @@ inline bool DrawUnityColorPickerPopup(const char* popupId, ColorPickerState& sta const ImVec2 windowPos = ImGui::GetWindowPos(); const ImVec2 windowSize = ImGui::GetWindowSize(); const ImVec2 windowMax(windowPos.x + windowSize.x, windowPos.y + windowSize.y); - drawList->AddRectFilled(windowPos, windowMax, ImGui::GetColorU32(ColorPickerBodyColor()), 3.0f); + drawList->AddRectFilled(windowPos, windowMax, ImGui::GetColorU32(ColorPickerBodyColor()), popupRounding); drawList->AddRectFilled( windowPos, ImVec2(windowMax.x, windowPos.y + headerHeight), ImGui::GetColorU32(ColorPickerHeaderColor()), - 3.0f, + popupRounding, ImDrawFlags_RoundCornersTop); - drawList->AddRect(windowPos, windowMax, ImGui::GetColorU32(ColorPickerBorderColor()), 3.0f); - drawList->AddText(ImVec2(windowPos.x + 10.0f, windowPos.y + 8.0f), IM_COL32(255, 255, 255, 255), "Color"); + drawList->AddRect(windowPos, windowMax, ImGui::GetColorU32(ColorPickerBorderColor()), popupRounding); + const float titleY = windowPos.y + (headerHeight - ImGui::GetTextLineHeight()) * 0.5f - 1.0f; + drawList->AddText(ImVec2(windowPos.x + 10.0f, titleY), IM_COL32(255, 255, 255, 255), "Color"); const float closeButtonSize = ColorPickerCloseButtonSize(); ImGui::SetCursorPos(ImVec2(windowSize.x - closeButtonSize - 4.0f, 5.0f)); diff --git a/editor/src/UI/Core.h b/editor/src/UI/Core.h index 82dab6f3..2f24bfb7 100644 --- a/editor/src/UI/Core.h +++ b/editor/src/UI/Core.h @@ -108,12 +108,11 @@ inline void PopPopupWindowChrome() { } inline void PushComboPopupWindowChrome() { - const ImVec4 borderColor = ImGui::GetStyleColorVec4(ImGuiCol_Border); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ComboPopupWindowPadding()); ImGui::PushStyleVar(ImGuiStyleVar_PopupRounding, ComboPopupRounding()); ImGui::PushStyleVar(ImGuiStyleVar_PopupBorderSize, ComboPopupBorderSize()); ImGui::PushStyleColor(ImGuiCol_PopupBg, ComboPopupBackgroundColor()); - ImGui::PushStyleColor(ImGuiCol_Border, borderColor); + ImGui::PushStyleColor(ImGuiCol_Border, PopupBorderColor()); } inline void PopComboPopupWindowChrome() { diff --git a/editor/src/UI/PropertyLayout.h b/editor/src/UI/PropertyLayout.h index bae55e4f..cb266c10 100644 --- a/editor/src/UI/PropertyLayout.h +++ b/editor/src/UI/PropertyLayout.h @@ -15,6 +15,7 @@ struct PropertyLayoutSpec { float controlColumnStart = InspectorPropertyControlColumnStart(); float labelControlGap = InspectorPropertyLabelControlGap(); float controlTrailingInset = InspectorPropertyControlTrailingInset(); + float minimumRowHeight = 0.0f; }; struct PropertyLayoutMetrics { @@ -32,6 +33,15 @@ inline PropertyLayoutSpec MakePropertyLayout() { return PropertyLayoutSpec{}; } +inline float CalcPropertyRowHeightForFramePadding(const ImVec2& framePadding) { + return ImGui::GetFontSize() + framePadding.y * 2.0f + ControlRowHeightOffset(); +} + +inline PropertyLayoutSpec WithMinimumRowHeight(PropertyLayoutSpec spec, float minimumRowHeight) { + spec.minimumRowHeight = std::max(spec.minimumRowHeight, minimumRowHeight); + return spec; +} + inline void PushPropertyLayoutStyles() { ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ControlFramePadding()); } @@ -58,6 +68,15 @@ inline void AlignPropertyControlToRight( } } +inline void AlignPropertyControlVertically( + const PropertyLayoutMetrics& layout, + float height) { + const float offset = std::max((layout.rowHeight - height) * 0.5f, 0.0f); + if (offset > 0.0f) { + ImGui::SetCursorPosY(layout.cursorPos.y + offset); + } +} + template inline auto DrawPropertyRow( const char* label, @@ -72,7 +91,9 @@ inline auto DrawPropertyRow( const ImVec2 rowCursorPos = ImGui::GetCursorPos(); const ImVec2 rowScreenPos = ImGui::GetCursorScreenPos(); const float rowWidth = std::max(ImGui::GetContentRegionAvail().x, 1.0f); - const float rowHeight = ImGui::GetFrameHeight() + ControlRowHeightOffset(); + const float rowHeight = std::max( + ImGui::GetFrameHeight() + ControlRowHeightOffset(), + spec.minimumRowHeight); const float labelInset = std::max(spec.labelInset, 0.0f); const float controlColumnStart = std::clamp( std::max(spec.controlColumnStart, 0.0f), diff --git a/editor/src/UI/StyleTokens.h b/editor/src/UI/StyleTokens.h index ccb56fba..5bce5594 100644 --- a/editor/src/UI/StyleTokens.h +++ b/editor/src/UI/StyleTokens.h @@ -118,6 +118,14 @@ inline ImVec2 ControlFramePadding() { return ImVec2(3.0f, 0.0f); } +inline ImVec2 ScalarControlFramePadding() { + return ImVec2(3.0f, 2.0f); +} + +inline float CompactIndicatorSize() { + return 18.0f; +} + inline float ControlRowHeightOffset() { return 1.0f; } @@ -138,12 +146,16 @@ inline float SliderValueFieldWidth() { return 64.0f; } +inline float ComboPreviewHeightOffset() { + return -2.0f; +} + inline float LinearSliderTrackThickness() { - return 2.0f; + return 3.0f; } inline float LinearSliderGrabRadius() { - return 5.0f; + return 6.0f; } inline float LinearSliderHorizontalPadding() { @@ -381,19 +393,43 @@ inline ImVec2 InspectorActionButtonPadding() { } inline ImVec2 PopupWindowPadding() { - return ImVec2(12.0f, 10.0f); + return ImVec2(10.0f, 0.0f); } inline ImVec2 ComboPopupWindowPadding() { - return ImVec2(6.0f, 1.0f); + return ImVec2(5.0f, 0.0f); } inline ImVec2 ComboPopupItemSpacing() { return ImVec2(0.0f, 0.0f); } +inline ImVec4 MenuSurfaceColor() { + return ImVec4(0.98f, 0.98f, 0.98f, 1.0f); +} + +inline ImVec4 MenuSurfaceHoverColor() { + return ImVec4(0.97f, 0.97f, 0.97f, 1.0f); +} + +inline ImVec4 MenuSurfaceActiveColor() { + return ImVec4(0.955f, 0.955f, 0.955f, 1.0f); +} + +inline ImVec4 MenuBorderColor() { + return ImVec4(0.84f, 0.84f, 0.84f, 1.0f); +} + +inline ImVec4 MenuTextColor() { + return ImVec4(0.16f, 0.16f, 0.16f, 1.0f); +} + +inline ImVec4 MenuTextDisabledColor() { + return ImVec4(0.47f, 0.47f, 0.47f, 1.0f); +} + inline float ComboPopupRounding() { - return 1.0f; + return 3.0f; } inline float ComboPopupBorderSize() { @@ -401,15 +437,15 @@ inline float ComboPopupBorderSize() { } inline ImVec4 ComboPopupBackgroundColor() { - return ImVec4(1.0f, 1.0f, 1.0f, 1.0f); + return MenuSurfaceColor(); } inline ImVec4 ComboPopupTextColor() { - return ImVec4(0.14f, 0.14f, 0.14f, 1.0f); + return MenuTextColor(); } inline ImVec4 ComboPopupTextDisabledColor() { - return ImVec4(0.55f, 0.55f, 0.55f, 1.0f); + return MenuTextDisabledColor(); } inline ImVec4 ComboPopupItemColor() { @@ -417,27 +453,39 @@ inline ImVec4 ComboPopupItemColor() { } inline ImVec4 ComboPopupItemHoveredColor() { - return ImVec4(0.0f, 0.0f, 0.0f, 0.045f); + return MenuSurfaceHoverColor(); } inline ImVec4 ComboPopupItemActiveColor() { - return ImVec4(0.0f, 0.0f, 0.0f, 0.08f); + return MenuSurfaceActiveColor(); } inline ImVec4 ComboPopupCheckMarkColor() { - return ImVec4(0.20f, 0.20f, 0.20f, 1.0f); + return MenuTextColor(); } inline float PopupWindowRounding() { - return 5.0f; + return 3.0f; } inline float PopupWindowBorderSize() { - return 0.0f; + return 1.0f; } inline float PopupFrameRounding() { - return 4.0f; + return 3.0f; +} + +inline float PopupSubmenuArrowExtent() { + return 8.0f; +} + +inline float PopupSubmenuArrowTrailingInset() { + return 8.0f; +} + +inline float PopupSubmenuOpenOffsetX() { + return 0.0f; } inline float PopupFrameBorderSize() { @@ -445,19 +493,19 @@ inline float PopupFrameBorderSize() { } inline ImVec4 PopupBackgroundColor() { - return ImVec4(1.0f, 1.0f, 1.0f, 1.0f); + return MenuSurfaceColor(); } inline ImVec4 PopupBorderColor() { - return ImVec4(0.0f, 0.0f, 0.0f, 0.10f); + return MenuBorderColor(); } inline ImVec4 PopupTextColor() { - return ImVec4(0.14f, 0.14f, 0.14f, 1.0f); + return MenuTextColor(); } inline ImVec4 PopupTextDisabledColor() { - return ImVec4(0.55f, 0.55f, 0.55f, 1.0f); + return MenuTextDisabledColor(); } inline ImVec4 PopupItemColor() { @@ -465,39 +513,39 @@ inline ImVec4 PopupItemColor() { } inline ImVec4 PopupItemHoveredColor() { - return ImVec4(0.0f, 0.0f, 0.0f, 0.06f); + return MenuSurfaceHoverColor(); } inline ImVec4 PopupItemActiveColor() { - return ImVec4(0.0f, 0.0f, 0.0f, 0.10f); + return MenuSurfaceActiveColor(); } inline ImVec4 PopupFrameColor() { - return ImVec4(1.0f, 1.0f, 1.0f, 1.0f); + return MenuSurfaceColor(); } inline ImVec4 PopupFrameHoveredColor() { - return ImVec4(0.965f, 0.965f, 0.965f, 1.0f); + return MenuSurfaceHoverColor(); } inline ImVec4 PopupFrameActiveColor() { - return ImVec4(0.94f, 0.94f, 0.94f, 1.0f); + return MenuSurfaceActiveColor(); } inline ImVec4 PopupButtonColor() { - return ImVec4(0.95f, 0.95f, 0.95f, 1.0f); + return MenuSurfaceColor(); } inline ImVec4 PopupButtonHoveredColor() { - return ImVec4(0.90f, 0.90f, 0.90f, 1.0f); + return MenuSurfaceHoverColor(); } inline ImVec4 PopupButtonActiveColor() { - return ImVec4(0.86f, 0.86f, 0.86f, 1.0f); + return MenuSurfaceActiveColor(); } inline ImVec4 PopupCheckMarkColor() { - return ImVec4(0.20f, 0.20f, 0.20f, 1.0f); + return MenuTextColor(); } inline ImVec2 AssetTileSize() { @@ -556,14 +604,22 @@ inline ImVec2 AssetTileIconSize() { return ImVec2(32.0f, 24.0f); } -inline ImVec2 FolderAssetTileIconSize() { +inline ImVec2 ProjectAssetTileIconSize() { return ImVec2(72.0f, 72.0f); } -inline ImVec2 FolderAssetTileIconOffset() { +inline ImVec2 ProjectAssetTileIconOffset() { return ImVec2(0.0f, 2.0f); } +inline ImVec2 FolderAssetTileIconSize() { + return ProjectAssetTileIconSize(); +} + +inline ImVec2 FolderAssetTileIconOffset() { + return ProjectAssetTileIconOffset(); +} + inline float AssetTileIconTextGap() { return 4.0f; } diff --git a/editor/src/UI/Widgets.h b/editor/src/UI/Widgets.h index 7e25126f..58d440d3 100644 --- a/editor/src/UI/Widgets.h +++ b/editor/src/UI/Widgets.h @@ -22,6 +22,8 @@ struct AssetTileResult { bool hovered = false; ImVec2 min = ImVec2(0.0f, 0.0f); ImVec2 max = ImVec2(0.0f, 0.0f); + ImVec2 labelMin = ImVec2(0.0f, 0.0f); + ImVec2 labelMax = ImVec2(0.0f, 0.0f); }; struct AssetTileOptions { @@ -30,6 +32,7 @@ struct AssetTileOptions { ImVec2 iconSize = AssetTileIconSize(); bool drawIdleFrame = true; bool drawSelectionBorder = true; + bool drawLabel = true; }; enum class DialogActionResult { @@ -79,6 +82,77 @@ inline bool DrawMenuScope(const char* label, DrawContentFn&& drawContent) { return true; } +template +inline bool DrawPopupSubmenuScope(const char* label, DrawContentFn&& drawContent) { + if (!label || label[0] == '\0') { + return false; + } + + ImGui::PushID(label); + const char* popupId = "##PopupSubmenu"; + const ImVec2 labelSize = ImGui::CalcTextSize(label); + const ImVec2 rowPos = ImGui::GetCursorScreenPos(); + const float rowHeight = labelSize.y; + const float rowWidth = ImMax(ImGui::GetContentRegionAvail().x, 1.0f); + const bool popupOpen = ImGui::IsPopupOpen(popupId); + + if (ImGui::Selectable( + "##PopupSubmenuRow", + popupOpen, + ImGuiSelectableFlags_NoAutoClosePopups, + ImVec2(rowWidth, rowHeight))) { + ImGui::OpenPopup(popupId); + } + + const bool hovered = ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup); + if (hovered && !popupOpen) { + ImGui::OpenPopup(popupId); + } + + const ImVec2 itemMin = ImGui::GetItemRectMin(); + const ImVec2 itemMax = ImGui::GetItemRectMax(); + const ImVec2 parentWindowPos = ImGui::GetWindowPos(); + const ImVec2 parentWindowSize = ImGui::GetWindowSize(); + const float parentWindowRight = parentWindowPos.x + parentWindowSize.x; + const float itemHeight = itemMax.y - itemMin.y; + ImDrawList* drawList = ImGui::GetWindowDrawList(); + drawList->AddText( + ImVec2(itemMin.x + ImGui::GetStyle().FramePadding.x, itemMin.y + (itemHeight - labelSize.y) * 0.5f), + ImGui::GetColorU32(ImGuiCol_Text), + label); + + const float arrowExtent = PopupSubmenuArrowExtent(); + const float arrowCenterX = itemMax.x - PopupSubmenuArrowTrailingInset() - arrowExtent * 0.5f; + const float arrowCenterY = (itemMin.y + itemMax.y) * 0.5f; + drawList->AddTriangleFilled( + ImVec2(arrowCenterX - arrowExtent * 0.30f, arrowCenterY - arrowExtent * 0.50f), + ImVec2(arrowCenterX - arrowExtent * 0.30f, arrowCenterY + arrowExtent * 0.50f), + ImVec2(arrowCenterX + arrowExtent * 0.50f, arrowCenterY), + ImGui::GetColorU32(ImGuiCol_Text)); + + ImGui::SetNextWindowPos( + ImVec2(parentWindowRight + PopupSubmenuOpenOffsetX(), rowPos.y - PopupWindowPadding().y), + ImGuiCond_Always); + const bool open = BeginPopup( + popupId, + ImGuiWindowFlags_NoMove | + ImGuiWindowFlags_NoResize | + ImGuiWindowFlags_NoSavedSettings); + if (!open) { + ImGui::PopID(); + return false; + } + + drawContent(); + const bool popupHovered = ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup); + if (!hovered && !popupHovered && !ImGui::IsWindowAppearing()) { + ImGui::CloseCurrentPopup(); + } + EndPopup(); + ImGui::PopID(); + return true; +} + template inline bool DrawMenuCommand(const MenuCommand& command, ExecuteFn&& execute) { if (command.kind == MenuCommandKind::Separator) { @@ -285,8 +359,8 @@ inline AssetTileResult DrawAssetTile( drawList->AddRect(min, max, ImGui::GetColorU32(AssetTileIdleBorderColor()), AssetTileRounding()); } - if (hovered || selected) { - drawList->AddRectFilled(min, max, ImGui::GetColorU32(selected ? AssetTileSelectedFillColor() : AssetTileHoverFillColor()), AssetTileRounding()); + if (selected) { + drawList->AddRectFilled(min, max, ImGui::GetColorU32(AssetTileSelectedFillColor()), AssetTileRounding()); } if (selected && options.drawSelectionBorder) { drawList->AddRect(min, max, ImGui::GetColorU32(AssetTileSelectedBorderColor()), AssetTileRounding()); @@ -302,14 +376,19 @@ inline AssetTileResult DrawAssetTile( drawIcon(drawList, iconMin, iconMax); const ImVec2 textPadding = AssetTileTextPadding(); - const float textAreaWidth = tileSize.x - textPadding.x * 2.0f; - const float centeredTextX = min.x + textPadding.x + std::max(0.0f, (textAreaWidth - textSize.x) * 0.5f); - const float textY = max.y - textSize.y - AssetTileTextPadding().y; - ImGui::PushClipRect(ImVec2(min.x + textPadding.x, min.y), ImVec2(max.x - textPadding.x, max.y), true); - drawList->AddText(ImVec2(centeredTextX, textY), ImGui::GetColorU32(AssetTileTextColor(selected)), label); - ImGui::PopClipRect(); + const float labelHeight = ImGui::GetFrameHeight(); + const ImVec2 labelMin(min.x + textPadding.x, max.y - labelHeight - textPadding.y * 0.5f); + const ImVec2 labelMax(max.x - textPadding.x, labelMin.y + labelHeight); + if (options.drawLabel) { + const float textAreaWidth = labelMax.x - labelMin.x; + const float centeredTextX = labelMin.x + std::max(0.0f, (textAreaWidth - textSize.x) * 0.5f); + const float textY = labelMin.y + (labelHeight - textSize.y) * 0.5f; + ImGui::PushClipRect(labelMin, labelMax, true); + drawList->AddText(ImVec2(centeredTextX, textY), ImGui::GetColorU32(AssetTileTextColor(selected)), label); + ImGui::PopClipRect(); + } - return AssetTileResult{ clicked, contextRequested, openRequested, hovered, min, max }; + return AssetTileResult{ clicked, contextRequested, openRequested, hovered, min, max, labelMin, labelMax }; } template diff --git a/editor/src/panels/ProjectPanel.cpp b/editor/src/panels/ProjectPanel.cpp index f7b86791..50e58cf2 100644 --- a/editor/src/panels/ProjectPanel.cpp +++ b/editor/src/panels/ProjectPanel.cpp @@ -33,6 +33,49 @@ void DrawProjectFolderTreePrefix(const UI::TreeNodePrefixContext& context) { UI::AssetIconKind::Folder); } +UI::AssetIconKind ResolveProjectAssetIconKind(const AssetItemPtr& item) { + if (!item) { + return UI::AssetIconKind::File; + } + + if (item->isFolder) { + return UI::AssetIconKind::Folder; + } + + if (item->type == "Scene") { + return UI::AssetIconKind::Scene; + } + + return UI::AssetIconKind::File; +} + +std::string GetProjectAssetDisplayName(const AssetItemPtr& item) { + if (!item) { + return {}; + } + + if (item->isFolder) { + return item->name; + } + + const size_t extensionPos = item->name.find_last_of('.'); + if (extensionPos == std::string::npos || extensionPos == 0) { + return item->name; + } + + return item->name.substr(0, extensionPos); +} + +UI::AssetTileOptions MakeProjectAssetTileOptions() { + UI::AssetTileOptions options; + options.drawIdleFrame = false; + options.drawSelectionBorder = false; + options.iconOffset = UI::ProjectAssetTileIconOffset(); + options.iconSize = UI::ProjectAssetTileIconSize(); + + return options; +} + } // namespace ProjectPanel::ProjectPanel() : Panel("Project") { @@ -42,6 +85,97 @@ void ProjectPanel::Initialize(const std::string& projectPath) { m_context->GetProjectManager().Initialize(projectPath); } +void ProjectPanel::BeginAssetDragDropFrame() { + m_assetDragDropState.Reset(); + if (const char* draggedPath = Actions::GetDraggedProjectAssetPath()) { + m_assetDragDropState.dragging = true; + m_assetDragDropState.sourcePath = draggedPath; + } +} + +void ProjectPanel::RegisterFolderDropTarget(IProjectManager& manager, const AssetItemPtr& folder) { + if (!m_assetDragDropState.dragging || !folder || !folder->isFolder || !ImGui::BeginDragDropTarget()) { + return; + } + + const ImGuiPayload* payload = ImGui::GetDragDropPayload(); + if (!payload || !payload->IsDataType(Actions::ProjectAssetPayloadType())) { + ImGui::EndDragDropTarget(); + return; + } + + m_assetDragDropState.hoveredTarget = true; + const bool canDrop = Commands::CanMoveAssetToFolder(manager, m_assetDragDropState.sourcePath, folder); + if (canDrop) { + m_assetDragDropState.hoveredValidTarget = true; + if (const ImGuiPayload* accepted = ImGui::AcceptDragDropPayload( + Actions::ProjectAssetPayloadType(), + ImGuiDragDropFlags_AcceptNoDrawDefaultRect)) + { + if (accepted->Delivery) { + m_assetDragDropState.deliveredSourcePath = m_assetDragDropState.sourcePath; + m_assetDragDropState.deliveredTarget = folder; + } + } + } + + ImGui::EndDragDropTarget(); +} + +void ProjectPanel::FinalizeAssetDragDrop(IProjectManager& manager) { + if (m_assetDragDropState.dragging) { + ImGui::SetMouseCursor( + m_assetDragDropState.hoveredValidTarget ? ImGuiMouseCursor_Arrow : ImGuiMouseCursor_NotAllowed); + } + + if (!m_assetDragDropState.deliveredSourcePath.empty() && m_assetDragDropState.deliveredTarget) { + Commands::MoveAssetToFolder( + manager, + m_assetDragDropState.deliveredSourcePath, + m_assetDragDropState.deliveredTarget); + } +} + +void ProjectPanel::BeginRename(const AssetItemPtr& item) { + if (!item) { + CancelRename(); + return; + } + + m_renameState.Begin(item->fullPath, GetProjectAssetDisplayName(item).c_str()); +} + +bool ProjectPanel::CommitRename(IProjectManager& manager) { + if (!m_renameState.IsActive()) { + return false; + } + + const std::string sourcePath = m_renameState.Item(); + std::string currentDisplayName; + for (const auto& item : manager.GetCurrentItems()) { + if (item && item->fullPath == sourcePath) { + currentDisplayName = GetProjectAssetDisplayName(item); + break; + } + } + + if (!currentDisplayName.empty() && currentDisplayName == m_renameState.Buffer()) { + CancelRename(); + return true; + } + + if (!Commands::RenameAsset(manager, sourcePath, m_renameState.Buffer())) { + return false; + } + + CancelRename(); + return true; +} + +void ProjectPanel::CancelRename() { + m_renameState.Cancel(); +} + void ProjectPanel::Render() { UI::PanelWindowScope panel(m_name.c_str()); if (!panel.IsOpen()) { @@ -51,6 +185,7 @@ void ProjectPanel::Render() { Actions::ObserveFocusedActionRoute(*m_context, EditorActionRoute::Project); auto& manager = m_context->GetProjectManager(); + BeginAssetDragDropFrame(); RenderToolbar(); ImGui::PushStyleColor(ImGuiCol_ChildBg, UI::ProjectBrowserSurfaceColor()); @@ -78,7 +213,7 @@ void ProjectPanel::Render() { ImGui::SameLine(0.0f, 0.0f); RenderBrowserPane(manager); - Actions::DrawProjectCreateFolderDialog(*m_context, m_createFolderDialog); + FinalizeAssetDragDrop(manager); ImGui::PopStyleColor(); } @@ -174,6 +309,8 @@ void ProjectPanel::RenderFolderTreeNode( folder->name.c_str(), nodeDefinition); + RegisterFolderDropTarget(manager, folder); + if (node.open) { for (const auto& child : folder->children) { if (!child || !child->isFolder) { @@ -199,9 +336,12 @@ void ProjectPanel::RenderBrowserPane(IProjectManager& manager) { std::vector visibleItems; const auto& items = manager.GetCurrentItems(); const std::string search = m_searchBuffer; + if (m_renameState.IsActive() && manager.FindCurrentItemIndex(m_renameState.Item()) < 0) { + CancelRename(); + } visibleItems.reserve(items.size()); for (const auto& item : items) { - if (MatchesSearch(item, search)) { + if ((m_renameState.IsActive() && item && item->fullPath == m_renameState.Item()) || MatchesSearch(item, search)) { visibleItems.push_back(item); } } @@ -231,9 +371,6 @@ void ProjectPanel::RenderBrowserPane(IProjectManager& manager) { AssetItemPtr pendingSelection; AssetItemPtr pendingContextTarget; AssetItemPtr pendingOpenTarget; - AssetItemPtr pendingMoveTarget; - std::string pendingMoveSourcePath; - const std::string selectedItemPath = manager.GetSelectedItemPath(); for (int visibleIndex = 0; visibleIndex < static_cast(visibleItems.size()); ++visibleIndex) { if (visibleIndex > 0 && visibleIndex % columns != 0) { @@ -248,11 +385,6 @@ void ProjectPanel::RenderBrowserPane(IProjectManager& manager) { if (interaction.contextRequested) { pendingContextTarget = item; } - if (!interaction.droppedSourcePath.empty()) { - pendingMoveSourcePath = interaction.droppedSourcePath; - pendingMoveTarget = item; - break; - } if (interaction.openRequested) { pendingOpenTarget = item; break; @@ -265,22 +397,23 @@ void ProjectPanel::RenderBrowserPane(IProjectManager& manager) { "No assets match the current search"); } - Actions::HandleProjectBackgroundPrimaryClick(manager); + Actions::HandleProjectBackgroundPrimaryClick(manager, m_renameState); if (pendingSelection) { manager.SetSelectedItem(pendingSelection); } if (pendingContextTarget) { Actions::HandleProjectItemContextRequest(manager, pendingContextTarget, m_itemContextMenu); } - if (!pendingMoveSourcePath.empty() && pendingMoveTarget) { - Commands::MoveAssetToFolder(manager, pendingMoveSourcePath, pendingMoveTarget); - } if (pendingOpenTarget) { Actions::OpenProjectAsset(*m_context, pendingOpenTarget); } Actions::DrawProjectItemContextPopup(*m_context, m_itemContextMenu); Actions::RequestProjectEmptyContextPopup(m_emptyContextMenu); - Actions::DrawProjectEmptyContextPopup(m_emptyContextMenu, m_createFolderDialog); + Actions::DrawProjectEmptyContextPopup(m_emptyContextMenu, [&]() { + if (AssetItemPtr createdFolder = Commands::CreateFolder(manager, "New Folder")) { + BeginRename(createdFolder); + } + }); ImGui::EndChild(); ImGui::EndChild(); @@ -305,7 +438,7 @@ void ProjectPanel::RenderBrowserHeader(IProjectManager& manager) { const float startY = ImGui::GetCursorPosY(); const float availableHeight = ImGui::GetContentRegionAvail().y; if (availableHeight > rowHeight) { - ImGui::SetCursorPosY(startY + (availableHeight - rowHeight) * 0.5f); + ImGui::SetCursorPosY(startY + (availableHeight - rowHeight) * 0.5f - 1.0f); } UI::DrawToolbarBreadcrumbs( @@ -326,40 +459,65 @@ ProjectPanel::AssetItemInteraction ProjectPanel::RenderAssetItem(const AssetItem AssetItemInteraction interaction; ImGui::PushID(item ? item->fullPath.c_str() : "ProjectItem"); - const bool isDraggingThisItem = Actions::IsProjectAssetBeingDragged(item); - const UI::AssetIconKind iconKind = item->isFolder ? UI::AssetIconKind::Folder : UI::AssetIconKind::File; - UI::AssetTileOptions tileOptions; - tileOptions.drawIdleFrame = false; - tileOptions.drawSelectionBorder = false; - if (item->isFolder) { - tileOptions.iconOffset = UI::FolderAssetTileIconOffset(); - tileOptions.iconSize = UI::FolderAssetTileIconSize(); - } + const bool isRenaming = item && m_renameState.IsEditing(item->fullPath); + const bool isDraggingThisItem = !isRenaming && Actions::IsProjectAssetBeingDragged(item); + const UI::AssetIconKind iconKind = ResolveProjectAssetIconKind(item); + const std::string displayName = GetProjectAssetDisplayName(item); + UI::AssetTileOptions tileOptions = MakeProjectAssetTileOptions(); + tileOptions.drawLabel = !isRenaming; const UI::AssetTileResult tile = UI::DrawAssetTile( - item->name.c_str(), + displayName.c_str(), isSelected, isDraggingThisItem, [&](ImDrawList* drawList, const ImVec2& iconMin, const ImVec2& iconMax) { + if (item && item->type == "Texture" && + UI::DrawTextureAssetPreview(drawList, iconMin, iconMax, item->fullPath)) { + return; + } UI::DrawAssetIcon(drawList, iconMin, iconMax, iconKind); }, tileOptions); - if (tile.clicked) { - interaction.clicked = true; + if (isRenaming) { + const ImVec2 restoreCursor = ImGui::GetCursorPos(); + ImGui::SetCursorScreenPos(tile.labelMin); + ImGui::SetNextItemWidth(tile.labelMax.x - tile.labelMin.x); + if (m_renameState.ConsumeFocusRequest()) { + ImGui::SetKeyboardFocusHere(); + } + + const bool submitted = ImGui::InputText( + "##Rename", + m_renameState.Buffer(), + m_renameState.BufferSize(), + ImGuiInputTextFlags_EnterReturnsTrue | ImGuiInputTextFlags_AutoSelectAll); + const bool cancelRequested = ImGui::IsItemActive() && ImGui::IsKeyPressed(ImGuiKey_Escape); + const bool deactivated = ImGui::IsItemDeactivated(); + ImGui::SetCursorPos(restoreCursor); + + if (cancelRequested) { + CancelRename(); + } else if (submitted || deactivated) { + CommitRename(m_context->GetProjectManager()); + } + } else { + if (tile.clicked) { + interaction.clicked = true; + } + + if (tile.contextRequested) { + interaction.contextRequested = true; + } + + RegisterFolderDropTarget(m_context->GetProjectManager(), item); + Actions::BeginProjectAssetDrag(item, iconKind); + + if (tile.openRequested) { + interaction.openRequested = true; + } } - if (tile.contextRequested) { - interaction.contextRequested = true; - } - - interaction.droppedSourcePath = Actions::AcceptProjectAssetDropPayload(item); - Actions::BeginProjectAssetDrag(item, iconKind); - - if (tile.openRequested) { - interaction.openRequested = true; - } - ImGui::PopID(); return interaction; } diff --git a/editor/src/panels/ProjectPanel.h b/editor/src/panels/ProjectPanel.h index 3410801f..65e3067c 100644 --- a/editor/src/panels/ProjectPanel.h +++ b/editor/src/panels/ProjectPanel.h @@ -15,13 +15,36 @@ public: void Initialize(const std::string& projectPath); private: + struct AssetDragDropState { + bool dragging = false; + bool hoveredTarget = false; + bool hoveredValidTarget = false; + std::string sourcePath; + std::string deliveredSourcePath; + AssetItemPtr deliveredTarget; + + void Reset() { + dragging = false; + hoveredTarget = false; + hoveredValidTarget = false; + sourcePath.clear(); + deliveredSourcePath.clear(); + deliveredTarget.reset(); + } + }; + struct AssetItemInteraction { bool clicked = false; bool contextRequested = false; bool openRequested = false; - std::string droppedSourcePath; }; + void BeginAssetDragDropFrame(); + void RegisterFolderDropTarget(IProjectManager& manager, const AssetItemPtr& folder); + void FinalizeAssetDragDrop(IProjectManager& manager); + void BeginRename(const AssetItemPtr& item); + bool CommitRename(IProjectManager& manager); + void CancelRename(); void RenderToolbar(); void RenderFolderTreePane(IProjectManager& manager); void RenderFolderTreeNode(IProjectManager& manager, const AssetItemPtr& folder, const std::string& currentFolderPath); @@ -34,9 +57,10 @@ private: char m_searchBuffer[256] = ""; float m_navigationWidth = UI::ProjectNavigationDefaultWidth(); UI::TreeViewState m_folderTreeState; - UI::TextInputPopupState<256> m_createFolderDialog; + UI::InlineTextEditState m_renameState; UI::DeferredPopupState m_emptyContextMenu; UI::TargetedPopupState m_itemContextMenu; + AssetDragDropState m_assetDragDropState; }; } diff --git a/editor/unity_grid.png b/editor/unity_grid.png new file mode 100644 index 0000000000000000000000000000000000000000..65b5742f8b4f7143574871476cd0edb82ad98818 GIT binary patch literal 119665 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 Wb0{3WVoU-4=x7?;!K*)h_kRH*!2#C* literal 0 HcmV?d00001 diff --git a/engine/include/XCEngine/RHI/D3D12/D3D12Texture.h b/engine/include/XCEngine/RHI/D3D12/D3D12Texture.h index 01579de2..2a08bff1 100644 --- a/engine/include/XCEngine/RHI/D3D12/D3D12Texture.h +++ b/engine/include/XCEngine/RHI/D3D12/D3D12Texture.h @@ -28,10 +28,10 @@ public: ID3D12Resource* GetResource() const { return m_resource.Get(); } D3D12_RESOURCE_DESC GetDesc() const { return m_resource->GetDesc(); } - uint32_t GetWidth() const override { return static_cast(GetDesc().Width); } - uint32_t GetHeight() const override { return GetDesc().Height; } - uint32_t GetDepth() const override { return GetDesc().DepthOrArraySize; } - uint32_t GetMipLevels() const override { return GetDesc().MipLevels; } + uint32_t GetWidth() const override { return m_resource ? static_cast(GetDesc().Width) : 0; } + uint32_t GetHeight() const override { return m_resource ? GetDesc().Height : 0; } + uint32_t GetDepth() const override { return m_resource ? GetDesc().DepthOrArraySize : 0; } + uint32_t GetMipLevels() const override { return m_resource ? GetDesc().MipLevels : 0; } void* GetNativeHandle() override { return m_resource.Get(); } ResourceStates GetState() const override { return m_state; } @@ -43,22 +43,19 @@ public: const std::string& GetName() const override { return m_name; } void SetName(const std::string& name) override { m_name = name; } - uint32_t GetArraySize() const { return GetDesc().DepthOrArraySize; } - Format GetFormat() const override { return FromD3D12(GetDesc().Format); } - TextureType GetTextureType() const override { - switch (GetDesc().Dimension) { - case D3D12_RESOURCE_DIMENSION_TEXTURE1D: return TextureType::Texture1D; - case D3D12_RESOURCE_DIMENSION_TEXTURE2D: return TextureType::Texture2D; - case D3D12_RESOURCE_DIMENSION_TEXTURE3D: return TextureType::Texture3D; - default: return TextureType::Texture2D; - } - } + uint32_t GetArraySize() const { return m_resource ? GetDesc().DepthOrArraySize : 0; } + Format GetFormat() const override { return m_format != Format::Unknown ? m_format : (m_resource ? FromD3D12(GetDesc().Format) : Format::Unknown); } + TextureType GetTextureType() const override { return m_textureType; } + void SetFormat(Format format) { m_format = format; } + void SetTextureType(TextureType type) { m_textureType = type; } bool OwnsResource() const { return m_ownsResource; } private: ComPtr m_resource; ResourceStates m_state = ResourceStates::Common; + Format m_format = Format::Unknown; + TextureType m_textureType = TextureType::Texture2D; std::string m_name; bool m_ownsResource = false; }; diff --git a/engine/include/XCEngine/RHI/OpenGL/OpenGLCommandQueue.h b/engine/include/XCEngine/RHI/OpenGL/OpenGLCommandQueue.h index c8a2227b..0179d84c 100644 --- a/engine/include/XCEngine/RHI/OpenGL/OpenGLCommandQueue.h +++ b/engine/include/XCEngine/RHI/OpenGL/OpenGLCommandQueue.h @@ -21,7 +21,7 @@ public: CommandQueueType GetType() const override { return CommandQueueType::Direct; } uint64_t GetTimestampFrequency() const override; - void* GetNativeHandle() override { return nullptr; } + void* GetNativeHandle() override { return this; } void WaitForPreviousFrame() override {} uint64_t GetCurrentFrame() const override { return 0; } }; diff --git a/engine/src/Core/Math/Quaternion.cpp b/engine/src/Core/Math/Quaternion.cpp index 435ebd2d..3b0189d0 100644 --- a/engine/src/Core/Math/Quaternion.cpp +++ b/engine/src/Core/Math/Quaternion.cpp @@ -161,7 +161,7 @@ Vector3 Quaternion::ToEulerAngles() const { float cosyCosp = 1.0f - 2.0f * (y * y + z * z); float yaw = std::atan2(sinyCosp, cosyCosp); - return Vector3(pitch, yaw, roll); + return Vector3(roll, pitch, yaw); } Matrix4 Quaternion::ToMatrix4x4() const { diff --git a/engine/src/RHI/D3D12/D3D12Device.cpp b/engine/src/RHI/D3D12/D3D12Device.cpp index 4f6507e6..46ab47d3 100644 --- a/engine/src/RHI/D3D12/D3D12Device.cpp +++ b/engine/src/RHI/D3D12/D3D12Device.cpp @@ -17,6 +17,7 @@ #include "XCEngine/RHI/D3D12/D3D12ResourceView.h" #include "XCEngine/RHI/D3D12/D3D12RenderPass.h" #include "XCEngine/RHI/D3D12/D3D12Framebuffer.h" +#include #include #include #include @@ -83,6 +84,75 @@ uint32_t GetFormatBytesPerPixel(Format format) { } } +TextureType ResolveTextureType(uint32_t rawType) { + return static_cast(rawType); +} + +uint16_t ResolveDepthOrArraySize(const TextureDesc& desc, TextureType textureType) { + switch (textureType) { + case TextureType::Texture3D: + return static_cast(std::max(desc.depth, 1)); + case TextureType::Texture2DArray: + return static_cast(std::max(desc.arraySize, 1)); + case TextureType::TextureCube: + case TextureType::TextureCubeArray: + return static_cast(std::max(desc.arraySize, 6)); + default: + return 1; + } +} + +std::string ShaderModelToString(D3D_SHADER_MODEL shaderModel) { + switch (shaderModel) { + case D3D_SHADER_MODEL_6_7: return "6.7"; + case D3D_SHADER_MODEL_6_6: return "6.6"; + case D3D_SHADER_MODEL_6_5: return "6.5"; + case D3D_SHADER_MODEL_6_4: return "6.4"; + case D3D_SHADER_MODEL_6_3: return "6.3"; + case D3D_SHADER_MODEL_6_2: return "6.2"; + case D3D_SHADER_MODEL_6_1: return "6.1"; + case D3D_SHADER_MODEL_6_0: return "6.0"; + case D3D_SHADER_MODEL_5_1: return "5.1"; + default: return {}; + } +} + +D3D12_RTV_DIMENSION ResolveRTVDimension(const ResourceViewDesc& desc, TextureType textureType) { + switch (desc.dimension) { + case ResourceViewDimension::Texture1D: + return D3D12_RTV_DIMENSION_TEXTURE1D; + case ResourceViewDimension::Texture1DArray: + return D3D12_RTV_DIMENSION_TEXTURE1DARRAY; + case ResourceViewDimension::Texture2DArray: + case ResourceViewDimension::TextureCube: + case ResourceViewDimension::TextureCubeArray: + return D3D12_RTV_DIMENSION_TEXTURE2DARRAY; + case ResourceViewDimension::Texture3D: + return D3D12_RTV_DIMENSION_TEXTURE3D; + case ResourceViewDimension::Texture2DMS: + return D3D12_RTV_DIMENSION_TEXTURE2DMS; + case ResourceViewDimension::Texture2DMSArray: + return D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY; + case ResourceViewDimension::Unknown: + break; + default: + return D3D12_RTV_DIMENSION_TEXTURE2D; + } + + switch (textureType) { + case TextureType::Texture1D: + return D3D12_RTV_DIMENSION_TEXTURE1D; + case TextureType::Texture2DArray: + case TextureType::TextureCube: + case TextureType::TextureCubeArray: + return D3D12_RTV_DIMENSION_TEXTURE2DARRAY; + case TextureType::Texture3D: + return D3D12_RTV_DIMENSION_TEXTURE3D; + default: + return D3D12_RTV_DIMENSION_TEXTURE2D; + } +} + } // namespace D3D12Device::D3D12Device() @@ -226,6 +296,28 @@ void D3D12Device::QueryAdapterInfo() { m_capabilities.bSupportsConservativeRasterization = options.ConservativeRasterizationTier != D3D12_CONSERVATIVE_RASTERIZATION_TIER_NOT_SUPPORTED; } + m_capabilities.bSupportsComputeShaders = true; + + D3D12_FEATURE_DATA_SHADER_MODEL shaderModel = {}; + const D3D_SHADER_MODEL shaderModelCandidates[] = { + D3D_SHADER_MODEL_6_7, + D3D_SHADER_MODEL_6_6, + D3D_SHADER_MODEL_6_5, + D3D_SHADER_MODEL_6_4, + D3D_SHADER_MODEL_6_3, + D3D_SHADER_MODEL_6_2, + D3D_SHADER_MODEL_6_1, + D3D_SHADER_MODEL_6_0, + D3D_SHADER_MODEL_5_1 + }; + for (D3D_SHADER_MODEL candidate : shaderModelCandidates) { + shaderModel.HighestShaderModel = candidate; + if (SUCCEEDED(m_device->CheckFeatureSupport(D3D12_FEATURE_SHADER_MODEL, &shaderModel, sizeof(shaderModel)))) { + m_capabilities.shaderModel = ShaderModelToString(shaderModel.HighestShaderModel); + break; + } + } + D3D12_FEATURE_DATA_D3D12_OPTIONS3 options3 = {}; if (SUCCEEDED(m_device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS3, &options3, sizeof(options3)))) { } @@ -321,33 +413,35 @@ RHIBuffer* D3D12Device::CreateBuffer(const BufferDesc& desc) { RHITexture* D3D12Device::CreateTexture(const TextureDesc& desc) { auto* texture = new D3D12Texture(); D3D12_RESOURCE_DESC d3d12Desc = {}; - - d3d12Desc.Dimension = ToD3D12(static_cast(desc.textureType)); - + + const TextureType textureType = ResolveTextureType(desc.textureType); + const Format format = static_cast(desc.format); + const bool isDepthFormat = format == Format::D24_UNorm_S8_UInt || + format == Format::D32_Float || + format == Format::D16_UNorm; + + d3d12Desc.Dimension = ToD3D12(textureType); d3d12Desc.Width = desc.width; d3d12Desc.Height = desc.height; - d3d12Desc.DepthOrArraySize = desc.depth > 0 ? desc.depth : 1; + d3d12Desc.DepthOrArraySize = ResolveDepthOrArraySize(desc, textureType); d3d12Desc.MipLevels = desc.mipLevels > 0 ? desc.mipLevels : 1; - d3d12Desc.Format = ToD3D12(static_cast(desc.format)); + d3d12Desc.Format = ToD3D12(format); d3d12Desc.SampleDesc.Count = desc.sampleCount > 0 ? desc.sampleCount : 1; d3d12Desc.SampleDesc.Quality = desc.sampleQuality; d3d12Desc.Flags = static_cast(desc.flags); - - Format format = static_cast(desc.format); - if (format == Format::D24_UNorm_S8_UInt || format == Format::D32_Float || - format == Format::D16_UNorm) { + + if (isDepthFormat) { d3d12Desc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL; } else if (d3d12Desc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE2D && desc.width > 0 && desc.height > 0) { d3d12Desc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET; } d3d12Desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; - const bool isDepthFormat = format == Format::D24_UNorm_S8_UInt || - format == Format::D32_Float || - format == Format::D16_UNorm; const D3D12_RESOURCE_STATES initialState = isDepthFormat ? D3D12_RESOURCE_STATE_DEPTH_WRITE : D3D12_RESOURCE_STATE_COMMON; if (texture->Initialize(m_device.Get(), d3d12Desc, initialState)) { + texture->SetFormat(format); + texture->SetTextureType(textureType); if (isDepthFormat) { texture->SetState(ResourceStates::DepthWrite); } @@ -700,8 +794,23 @@ RHIResourceView* D3D12Device::CreateRenderTargetView(RHITexture* texture, const } D3D12_RENDER_TARGET_VIEW_DESC rtvDesc = {}; - rtvDesc.Format = ToD3D12(static_cast(desc.format)); - rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; + const Format format = desc.format != 0 ? static_cast(desc.format) : texture->GetFormat(); + const TextureType textureType = texture->GetTextureType(); + rtvDesc.Format = ToD3D12(format); + rtvDesc.ViewDimension = ResolveRTVDimension(desc, textureType); + if (rtvDesc.ViewDimension == D3D12_RTV_DIMENSION_TEXTURE2DARRAY) { + rtvDesc.Texture2DArray.MipSlice = desc.mipLevel; + rtvDesc.Texture2DArray.FirstArraySlice = desc.firstArraySlice; + rtvDesc.Texture2DArray.ArraySize = desc.arraySize > 0 ? desc.arraySize : 1; + rtvDesc.Texture2DArray.PlaneSlice = desc.planeSlice; + } else if (rtvDesc.ViewDimension == D3D12_RTV_DIMENSION_TEXTURE3D) { + rtvDesc.Texture3D.MipSlice = desc.mipLevel; + rtvDesc.Texture3D.FirstWSlice = desc.firstArraySlice; + rtvDesc.Texture3D.WSize = desc.arraySize > 0 ? desc.arraySize : 1; + } else { + rtvDesc.Texture2D.MipSlice = desc.mipLevel; + rtvDesc.Texture2D.PlaneSlice = desc.planeSlice; + } auto heap = std::make_unique(); if (!heap->Initialize(m_device.Get(), DescriptorHeapType::RTV, 1, false)) { diff --git a/engine/src/RHI/D3D12/D3D12ResourceView.cpp b/engine/src/RHI/D3D12/D3D12ResourceView.cpp index 6c61590f..67937ba2 100644 --- a/engine/src/RHI/D3D12/D3D12ResourceView.cpp +++ b/engine/src/RHI/D3D12/D3D12ResourceView.cpp @@ -5,6 +5,63 @@ namespace XCEngine { namespace RHI { +namespace { + +ResourceViewDimension ToResourceViewDimension(D3D12_RTV_DIMENSION dimension) { + switch (dimension) { + case D3D12_RTV_DIMENSION_TEXTURE1D: return ResourceViewDimension::Texture1D; + case D3D12_RTV_DIMENSION_TEXTURE1DARRAY: return ResourceViewDimension::Texture1DArray; + case D3D12_RTV_DIMENSION_TEXTURE2D: return ResourceViewDimension::Texture2D; + case D3D12_RTV_DIMENSION_TEXTURE2DARRAY: return ResourceViewDimension::Texture2DArray; + case D3D12_RTV_DIMENSION_TEXTURE2DMS: return ResourceViewDimension::Texture2DMS; + case D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY: return ResourceViewDimension::Texture2DMSArray; + case D3D12_RTV_DIMENSION_TEXTURE3D: return ResourceViewDimension::Texture3D; + default: return ResourceViewDimension::Unknown; + } +} + +ResourceViewDimension ToResourceViewDimension(D3D12_DSV_DIMENSION dimension) { + switch (dimension) { + case D3D12_DSV_DIMENSION_TEXTURE1D: return ResourceViewDimension::Texture1D; + case D3D12_DSV_DIMENSION_TEXTURE1DARRAY: return ResourceViewDimension::Texture1DArray; + case D3D12_DSV_DIMENSION_TEXTURE2D: return ResourceViewDimension::Texture2D; + case D3D12_DSV_DIMENSION_TEXTURE2DARRAY: return ResourceViewDimension::Texture2DArray; + case D3D12_DSV_DIMENSION_TEXTURE2DMS: return ResourceViewDimension::Texture2DMS; + case D3D12_DSV_DIMENSION_TEXTURE2DMSARRAY: return ResourceViewDimension::Texture2DMSArray; + default: return ResourceViewDimension::Unknown; + } +} + +ResourceViewDimension ToResourceViewDimension(D3D12_SRV_DIMENSION dimension) { + switch (dimension) { + case D3D12_SRV_DIMENSION_TEXTURE1D: return ResourceViewDimension::Texture1D; + case D3D12_SRV_DIMENSION_TEXTURE1DARRAY: return ResourceViewDimension::Texture1DArray; + case D3D12_SRV_DIMENSION_TEXTURE2D: return ResourceViewDimension::Texture2D; + case D3D12_SRV_DIMENSION_TEXTURE2DARRAY: return ResourceViewDimension::Texture2DArray; + case D3D12_SRV_DIMENSION_TEXTURE2DMS: return ResourceViewDimension::Texture2DMS; + case D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY: return ResourceViewDimension::Texture2DMSArray; + case D3D12_SRV_DIMENSION_TEXTURE3D: return ResourceViewDimension::Texture3D; + case D3D12_SRV_DIMENSION_TEXTURECUBE: return ResourceViewDimension::TextureCube; + case D3D12_SRV_DIMENSION_TEXTURECUBEARRAY: return ResourceViewDimension::TextureCubeArray; + case D3D12_SRV_DIMENSION_BUFFER: return ResourceViewDimension::Buffer; + default: return ResourceViewDimension::Unknown; + } +} + +ResourceViewDimension ToResourceViewDimension(D3D12_UAV_DIMENSION dimension) { + switch (dimension) { + case D3D12_UAV_DIMENSION_TEXTURE1D: return ResourceViewDimension::Texture1D; + case D3D12_UAV_DIMENSION_TEXTURE1DARRAY: return ResourceViewDimension::Texture1DArray; + case D3D12_UAV_DIMENSION_TEXTURE2D: return ResourceViewDimension::Texture2D; + case D3D12_UAV_DIMENSION_TEXTURE2DARRAY: return ResourceViewDimension::Texture2DArray; + case D3D12_UAV_DIMENSION_TEXTURE3D: return ResourceViewDimension::Texture3D; + case D3D12_UAV_DIMENSION_BUFFER: return ResourceViewDimension::Buffer; + default: return ResourceViewDimension::Unknown; + } +} + +} // namespace + D3D12ResourceView::D3D12ResourceView() : m_viewType(ResourceViewType::ShaderResource) , m_format(Format::Unknown) @@ -63,8 +120,8 @@ void D3D12ResourceView::InitializeAsRenderTarget(ID3D12Device* device, ID3D12Res const D3D12_RENDER_TARGET_VIEW_DESC* desc, D3D12DescriptorHeap* heap, uint32_t slotIndex) { m_viewType = ResourceViewType::RenderTarget; - m_format = desc ? static_cast(desc->Format) : Format::Unknown; - m_dimension = ResourceViewDimension::Texture2D; + m_format = desc ? FromD3D12(desc->Format) : Format::Unknown; + m_dimension = desc ? ToResourceViewDimension(desc->ViewDimension) : ResourceViewDimension::Unknown; m_resource = resource; m_heap = heap; m_slotIndex = slotIndex; @@ -78,8 +135,8 @@ void D3D12ResourceView::InitializeAsDepthStencil(ID3D12Device* device, ID3D12Res const D3D12_DEPTH_STENCIL_VIEW_DESC* desc, D3D12DescriptorHeap* heap, uint32_t slotIndex) { m_viewType = ResourceViewType::DepthStencil; - m_format = desc ? static_cast(desc->Format) : Format::Unknown; - m_dimension = ResourceViewDimension::Texture2D; + m_format = desc ? FromD3D12(desc->Format) : Format::Unknown; + m_dimension = desc ? ToResourceViewDimension(desc->ViewDimension) : ResourceViewDimension::Unknown; m_resource = resource; m_heap = heap; m_slotIndex = slotIndex; @@ -93,8 +150,8 @@ void D3D12ResourceView::InitializeAsShaderResource(ID3D12Device* device, ID3D12R const D3D12_SHADER_RESOURCE_VIEW_DESC* desc, D3D12DescriptorHeap* heap, uint32_t slotIndex) { m_viewType = ResourceViewType::ShaderResource; - m_format = desc ? static_cast(desc->Format) : Format::Unknown; - m_dimension = desc ? static_cast(desc->ViewDimension) : ResourceViewDimension::Unknown; + m_format = desc ? FromD3D12(desc->Format) : Format::Unknown; + m_dimension = desc ? ToResourceViewDimension(desc->ViewDimension) : ResourceViewDimension::Unknown; m_resource = resource; m_heap = heap; m_slotIndex = slotIndex; @@ -108,8 +165,8 @@ void D3D12ResourceView::InitializeAsUnorderedAccess(ID3D12Device* device, ID3D12 const D3D12_UNORDERED_ACCESS_VIEW_DESC* desc, D3D12DescriptorHeap* heap, uint32_t slotIndex) { m_viewType = ResourceViewType::UnorderedAccess; - m_format = desc ? static_cast(desc->Format) : Format::Unknown; - m_dimension = desc ? static_cast(desc->ViewDimension) : ResourceViewDimension::Unknown; + m_format = desc ? FromD3D12(desc->Format) : Format::Unknown; + m_dimension = desc ? ToResourceViewDimension(desc->ViewDimension) : ResourceViewDimension::Unknown; m_resource = resource; m_heap = heap; m_slotIndex = slotIndex; diff --git a/engine/src/RHI/D3D12/D3D12Texture.cpp b/engine/src/RHI/D3D12/D3D12Texture.cpp index c085da52..374d800e 100644 --- a/engine/src/RHI/D3D12/D3D12Texture.cpp +++ b/engine/src/RHI/D3D12/D3D12Texture.cpp @@ -33,12 +33,41 @@ bool D3D12Texture::Initialize(ID3D12Device* device, const D3D12_RESOURCE_DESC& d return false; } + m_format = FromD3D12(desc.Format); + switch (desc.Dimension) { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + m_textureType = TextureType::Texture1D; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + m_textureType = TextureType::Texture3D; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + default: + m_textureType = TextureType::Texture2D; + break; + } m_ownsResource = true; return true; } bool D3D12Texture::InitializeFromExisting(ID3D12Resource* resource, bool ownsResource) { m_resource = resource; + if (m_resource) { + const D3D12_RESOURCE_DESC desc = m_resource->GetDesc(); + m_format = FromD3D12(desc.Format); + switch (desc.Dimension) { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + m_textureType = TextureType::Texture1D; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + m_textureType = TextureType::Texture3D; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + default: + m_textureType = TextureType::Texture2D; + break; + } + } m_ownsResource = ownsResource; return true; } @@ -76,6 +105,8 @@ bool D3D12Texture::InitializeFromData(ID3D12Device* device, ID3D12GraphicsComman return false; } m_ownsResource = true; + m_format = FromD3D12(format); + m_textureType = TextureType::Texture2D; textureDesc = m_resource->GetDesc(); UINT64 memorySizeUsed = 0; @@ -184,13 +215,22 @@ bool D3D12Texture::InitializeDepthStencil(ID3D12Device* device, uint32_t width, IID_PPV_ARGS(&m_resource) ); - return SUCCEEDED(hResult); + if (SUCCEEDED(hResult)) { + m_format = FromD3D12(format); + m_textureType = TextureType::Texture2D; + m_ownsResource = true; + return true; + } + + return false; } void D3D12Texture::Shutdown() { - if (m_ownsResource) { - m_resource.Reset(); - } + m_resource.Reset(); + m_state = ResourceStates::Common; + m_format = Format::Unknown; + m_textureType = TextureType::Texture2D; + m_ownsResource = false; } } // namespace RHI diff --git a/engine/src/RHI/OpenGL/OpenGLDevice.cpp b/engine/src/RHI/OpenGL/OpenGLDevice.cpp index a16fc9f4..324ee82f 100644 --- a/engine/src/RHI/OpenGL/OpenGLDevice.cpp +++ b/engine/src/RHI/OpenGL/OpenGLDevice.cpp @@ -24,6 +24,8 @@ #include "XCEngine/RHI/OpenGL/OpenGLDescriptorSet.h" #include "XCEngine/RHI/OpenGL/OpenGLPipelineLayout.h" #include "XCEngine/Debug/Logger.h" +#include +#include typedef const char* (WINAPI* PFNWGLGETEXTENSIONSSTRINGARBPROC)(HDC hdc); typedef BOOL (WINAPI* PFNWGLCHOOSEPIXELFORMATARBPROC)(HDC hdc, const int* piAttribIList, const FLOAT* pfAttribFList, UINT nMaxFormats, int* piFormats, UINT* nNumFormats); @@ -55,6 +57,76 @@ std::string NarrowAscii(const std::wstring& value) { return result; } +TextureType ResolveTextureType(uint32_t rawType) { + return static_cast(rawType); +} + +int ResolveTextureDepth(const TextureDesc& desc, TextureType textureType) { + switch (textureType) { + case TextureType::Texture3D: + return static_cast(desc.depth > 0 ? desc.depth : 1); + case TextureType::Texture2DArray: + return static_cast(desc.arraySize > 0 ? desc.arraySize : 1); + case TextureType::TextureCube: + case TextureType::TextureCubeArray: + return static_cast(desc.arraySize > 0 ? desc.arraySize : 6); + default: + return static_cast(desc.depth > 0 ? desc.depth : 1); + } +} + +std::string ToLowerAscii(std::string value) { + std::transform(value.begin(), value.end(), value.begin(), [](unsigned char ch) { + return static_cast(std::tolower(ch)); + }); + return value; +} + +uint32_t DetectVendorId(const char* vendor) { + const std::string lowerVendor = ToLowerAscii(vendor != nullptr ? vendor : ""); + if (lowerVendor.find("nvidia") != std::string::npos) { + return 0x10DE; + } + if (lowerVendor.find("amd") != std::string::npos || lowerVendor.find("ati") != std::string::npos) { + return 0x1002; + } + if (lowerVendor.find("intel") != std::string::npos) { + return 0x8086; + } + if (lowerVendor.find("microsoft") != std::string::npos) { + return 0x1414; + } + return 1; +} + +uint32_t HashRendererId(const char* renderer) { + const char* value = renderer != nullptr ? renderer : ""; + uint32_t hash = 2166136261u; + while (*value != '\0') { + hash ^= static_cast(*value++); + hash *= 16777619u; + } + return hash == 0 ? 1u : hash; +} + +bool IsSoftwareRenderer(const char* vendor, const char* renderer) { + const std::string lowerVendor = ToLowerAscii(vendor != nullptr ? vendor : ""); + const std::string lowerRenderer = ToLowerAscii(renderer != nullptr ? renderer : ""); + return lowerVendor.find("microsoft") != std::string::npos || + lowerRenderer.find("gdi generic") != std::string::npos || + lowerRenderer.find("software") != std::string::npos || + lowerRenderer.find("llvmpipe") != std::string::npos; +} + +uint64_t QuerySharedSystemMemoryBytes() { + MEMORYSTATUSEX status = {}; + status.dwLength = sizeof(status); + if (GlobalMemoryStatusEx(&status)) { + return status.ullTotalPhys; + } + return 0; +} + bool HasShaderPayload(const ShaderCompileDesc& desc) { return !desc.source.empty() || !desc.fileName.empty(); } @@ -423,6 +495,11 @@ bool OpenGLDevice::CreateContextForCurrentWindow() { m_deviceInfo.vendor = std::wstring(vendor ? vendor : "", vendor ? vendor + strlen(vendor) : nullptr); m_deviceInfo.renderer = std::wstring(renderer ? renderer : "", renderer ? renderer + strlen(renderer) : nullptr); m_deviceInfo.version = std::wstring(version ? version : "", version ? version + strlen(version) : nullptr); + m_deviceInfo.vendorId = DetectVendorId(vendor); + m_deviceInfo.deviceId = HashRendererId(renderer); + m_deviceInfo.isSoftware = IsSoftwareRenderer(vendor, renderer); + m_deviceInfo.sharedSystemMemory = QuerySharedSystemMemoryBytes(); + m_deviceInfo.dedicatedVideoMemory = m_deviceInfo.isSoftware ? 0ull : 1ull; GLint majorVersion = 0, minorVersion = 0; glGetIntegerv(GL_MAJOR_VERSION, &majorVersion); @@ -432,14 +509,19 @@ bool OpenGLDevice::CreateContextForCurrentWindow() { m_capabilities.majorVersion = majorVersion; m_capabilities.minorVersion = minorVersion; + m_capabilities.shaderModel = "GLSL " + std::to_string(majorVersion) + "." + std::to_string(minorVersion); m_capabilities.bSupportsGeometryShaders = true; - m_capabilities.bSupportsComputeShaders = GLVersion.major >= 4 && GLVersion.minor >= 3; - m_capabilities.bSupportsTessellation = GLVersion.major >= 4 && GLVersion.minor >= 1; + m_capabilities.bSupportsComputeShaders = (majorVersion > 4) || (majorVersion == 4 && minorVersion >= 3); + m_capabilities.bSupportsTessellation = (majorVersion > 4) || (majorVersion == 4 && minorVersion >= 1); m_capabilities.bSupportsExplicitMultiThreading = false; GLint maxTexSize = 0; glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize); m_capabilities.maxTexture2DSize = static_cast(maxTexSize); + + GLint maxTexture3DSize = 0; + glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, &maxTexture3DSize); + m_capabilities.maxTexture3DSize = static_cast(maxTexture3DSize); GLint maxCubeSize = 0; glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &maxCubeSize); @@ -462,6 +544,10 @@ bool OpenGLDevice::CreateContextForCurrentWindow() { glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxAttribs); m_capabilities.maxVertexAttribs = static_cast(maxAttribs); + GLint maxConstantBufferSize = 0; + glGetIntegerv(GL_MAX_UNIFORM_BLOCK_SIZE, &maxConstantBufferSize); + m_capabilities.maxConstantBufferSize = static_cast(maxConstantBufferSize); + GLint maxTextureUnits = 0; glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &maxTextureUnits); m_textureUnitAllocator->Initialize(static_cast(maxTextureUnits)); @@ -544,26 +630,31 @@ RHITexture* OpenGLDevice::CreateTexture(const TextureDesc& desc) { auto* texture = new OpenGLTexture(); OpenGLTextureType type = OpenGLTextureType::Texture2D; - switch (desc.textureType) { - case 0: + switch (ResolveTextureType(desc.textureType)) { + case TextureType::Texture1D: type = OpenGLTextureType::Texture1D; break; - case 2: + case TextureType::Texture2DArray: type = OpenGLTextureType::Texture2DArray; break; - case 3: + case TextureType::Texture3D: type = OpenGLTextureType::Texture3D; break; - case 4: + case TextureType::TextureCube: type = OpenGLTextureType::TextureCube; break; + case TextureType::TextureCubeArray: + type = OpenGLTextureType::TextureCubeArray; + break; + case TextureType::Texture2D: default: type = OpenGLTextureType::Texture2D; break; } OpenGLFormat format = ToOpenGLTextureFormat(static_cast(desc.format)); - texture->Initialize(type, desc.width, desc.height, desc.depth, desc.mipLevels, format, nullptr); + const int depth = ResolveTextureDepth(desc, ResolveTextureType(desc.textureType)); + texture->Initialize(type, desc.width, desc.height, depth, desc.mipLevels, format, nullptr); texture->SetFormat(static_cast(desc.format)); return texture; } @@ -579,27 +670,32 @@ RHITexture* OpenGLDevice::CreateTexture(const TextureDesc& desc, const void* ini auto* texture = new OpenGLTexture(); OpenGLTextureType type = OpenGLTextureType::Texture2D; - switch (desc.textureType) { - case 0: + switch (ResolveTextureType(desc.textureType)) { + case TextureType::Texture1D: type = OpenGLTextureType::Texture1D; break; - case 2: + case TextureType::Texture2DArray: type = OpenGLTextureType::Texture2DArray; break; - case 3: + case TextureType::Texture3D: type = OpenGLTextureType::Texture3D; break; - case 4: + case TextureType::TextureCube: type = OpenGLTextureType::TextureCube; break; + case TextureType::TextureCubeArray: + type = OpenGLTextureType::TextureCubeArray; + break; + case TextureType::Texture2D: default: type = OpenGLTextureType::Texture2D; break; } OpenGLFormat format = ToOpenGLTextureFormat(static_cast(desc.format)); + const int depth = ResolveTextureDepth(desc, ResolveTextureType(desc.textureType)); - if (!texture->Initialize(type, desc.width, desc.height, desc.depth, desc.mipLevels, format, initialData)) { + if (!texture->Initialize(type, desc.width, desc.height, depth, desc.mipLevels, format, initialData)) { delete texture; return nullptr; } @@ -941,7 +1037,7 @@ void* OpenGLDevice::GetNativeDevice() { } void* OpenGLDevice::GetNativeHandle() const { - return nullptr; + return m_hglrc; } } // namespace RHI diff --git a/engine/src/RHI/OpenGL/OpenGLTexture.cpp b/engine/src/RHI/OpenGL/OpenGLTexture.cpp index a6cfa8e9..ffd08a95 100644 --- a/engine/src/RHI/OpenGL/OpenGLTexture.cpp +++ b/engine/src/RHI/OpenGL/OpenGLTexture.cpp @@ -42,8 +42,10 @@ bool OpenGLTexture::Initialize(OpenGLTextureType type, int width, int height, in } } else if (type == OpenGLTextureType::Texture1D) { glTexImage1D(GL_TEXTURE_1D, 0, internalFormat, width, 0, glFormat, glType, data); - } else if (type == OpenGLTextureType::Texture3D) { - glTexImage3D(GL_TEXTURE_3D, 0, internalFormat, width, height, depth, 0, glFormat, glType, data); + } else if (type == OpenGLTextureType::Texture3D || + type == OpenGLTextureType::Texture2DArray || + type == OpenGLTextureType::TextureCubeArray) { + glTexImage3D(target, 0, internalFormat, width, height, depth, 0, glFormat, glType, data); } else { glTexImage2D(target, 0, internalFormat, width, height, 0, glFormat, glType, data); } @@ -54,8 +56,17 @@ bool OpenGLTexture::Initialize(OpenGLTextureType type, int width, int height, in glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); } glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_REPEAT); + const GLint wrapMode = (type == OpenGLTextureType::TextureCube || type == OpenGLTextureType::TextureCubeArray) + ? GL_CLAMP_TO_EDGE + : GL_REPEAT; + glTexParameteri(target, GL_TEXTURE_WRAP_S, wrapMode); + glTexParameteri(target, GL_TEXTURE_WRAP_T, wrapMode); + if (type == OpenGLTextureType::Texture3D || + type == OpenGLTextureType::Texture2DArray || + type == OpenGLTextureType::TextureCube || + type == OpenGLTextureType::TextureCubeArray) { + glTexParameteri(target, GL_TEXTURE_WRAP_R, wrapMode); + } glBindTexture(target, 0); return true; @@ -177,7 +188,11 @@ void OpenGLTexture::SetWrapping(int wrapS, int wrapT, int wrapR) { glBindTexture(target, m_texture); glTexParameteri(target, GL_TEXTURE_WRAP_S, wrapS); glTexParameteri(target, GL_TEXTURE_WRAP_T, wrapT); - if (wrapR >= 0 && (m_type == OpenGLTextureType::Texture3D || m_type == OpenGLTextureType::TextureCube)) { + if (wrapR >= 0 && + (m_type == OpenGLTextureType::Texture3D || + m_type == OpenGLTextureType::Texture2DArray || + m_type == OpenGLTextureType::TextureCube || + m_type == OpenGLTextureType::TextureCubeArray)) { glTexParameteri(target, GL_TEXTURE_WRAP_R, wrapR); } glBindTexture(target, 0); diff --git a/engine/third_party/stb/stb_image.cpp b/engine/third_party/stb/stb_image.cpp index 065b33ab..7a560c5d 100644 --- a/engine/third_party/stb/stb_image.cpp +++ b/engine/third_party/stb/stb_image.cpp @@ -1,5 +1,4 @@ -#include "fmpch.hpp" #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" #define STB_IMAGE_WRITE_IMPLEMENTATION -#include "stb_image_write.h" \ No newline at end of file +#include "stb_image_write.h" diff --git a/imgui.ini b/imgui.ini deleted file mode 100644 index 60dcd21a..00000000 --- a/imgui.ini +++ /dev/null @@ -1,55 +0,0 @@ -[Window][Hierarchy] -Pos=0,24 -Size=189,485 -Collapsed=0 -DockId=0x00000003,0 - -[Window][Scene] -Pos=191,24 -Size=803,485 -Collapsed=0 -DockId=0x00000005,0 - -[Window][Game] -Pos=191,24 -Size=803,485 -Collapsed=0 -DockId=0x00000005,1 - -[Window][Inspector] -Pos=996,24 -Size=268,485 -Collapsed=0 -DockId=0x00000006,0 - -[Window][Console] -Pos=0,511 -Size=1264,170 -Collapsed=0 -DockId=0x00000002,0 - -[Window][Project] -Pos=0,511 -Size=1264,170 -Collapsed=0 -DockId=0x00000002,1 - -[Window][MainDockspace] -Pos=0,0 -Size=1264,681 -Collapsed=0 - -[Window][Debug##Default] -Pos=60,60 -Size=400,400 -Collapsed=0 - -[Docking][Data] -DockSpace ID=0x8D32E0A4 Window=0x1C358F53 Pos=0,24 Size=1264,657 Split=Y - DockNode ID=0x00000001 Parent=0x8D32E0A4 SizeRef=1264,509 Split=X - DockNode ID=0x00000003 Parent=0x00000001 SizeRef=189,509 Selected=0xBABDAE5E - DockNode ID=0x00000004 Parent=0x00000001 SizeRef=1073,509 Split=X - DockNode ID=0x00000005 Parent=0x00000004 SizeRef=803,509 CentralNode=1 Selected=0xE601B12F - DockNode ID=0x00000006 Parent=0x00000004 SizeRef=268,509 Selected=0x36DC96AB - DockNode ID=0x00000002 Parent=0x8D32E0A4 SizeRef=1264,170 Selected=0x9C21DE82 - diff --git a/project/.xceditor/imgui_layout.ini b/project/.xceditor/imgui_layout.ini new file mode 100644 index 00000000..d5facc0b --- /dev/null +++ b/project/.xceditor/imgui_layout.ini @@ -0,0 +1,64 @@ +[Window][Hierarchy] +Pos=0,33 +Size=189,758 +Collapsed=0 +DockId=0x00000003 + +[Window][Scene] +Pos=191,33 +Size=1702,758 +Collapsed=0 +DockId=0x00000005 + +[Window][Game] +Pos=191,33 +Size=1702,758 +Collapsed=0 +DockId=0x00000005 + +[Window][Inspector] +Pos=1895,33 +Size=665,758 +Collapsed=0 +DockId=0x00000006 + +[Window][Console] +Pos=0,793 +Size=2560,558 +Collapsed=0 +DockId=0x00000002 + +[Window][Project] +Pos=0,793 +Size=2560,558 +Collapsed=0 +DockId=0x00000002 + +[Window][MainDockspace] +Pos=0,0 +Size=2560,1351 +Collapsed=0 + +[Window][Debug##Default] +Pos=48,48 +Size=320,320 +Collapsed=0 + +[Window][##MainMenuBar] +Size=1262,33 +Collapsed=0 + +[Window][Create Folder] +Pos=1060,620 +Size=440,110 +Collapsed=0 + +[Docking][Data] +DockSpace ID=0xA11B73D6 Window=0x1C358F53 Pos=0,33 Size=2560,1318 Split=Y + DockNode ID=0x00000001 Parent=0xA11B73D6 SizeRef=1262,758 Split=X + DockNode ID=0x00000003 Parent=0x00000001 SizeRef=189,503 NoTabBar=1 NoWindowMenuButton=1 NoCloseButton=1 Selected=0xBABDAE5E + DockNode ID=0x00000004 Parent=0x00000001 SizeRef=1071,503 Split=X + DockNode ID=0x00000005 Parent=0x00000004 SizeRef=1702,503 CentralNode=1 NoTabBar=1 NoWindowMenuButton=1 NoCloseButton=1 Selected=0xE601B12F + DockNode ID=0x00000006 Parent=0x00000004 SizeRef=665,503 NoTabBar=1 NoWindowMenuButton=1 NoCloseButton=1 Selected=0x36DC96AB + DockNode ID=0x00000002 Parent=0xA11B73D6 SizeRef=1262,558 NoTabBar=1 NoWindowMenuButton=1 NoCloseButton=1 Selected=0x9C21DE82 + diff --git a/tests/OpenGL/package/glm/glm/detail/func_trigonometric_simd.inl b/project/Assets/NewFolder4/Models/Character.fbx similarity index 100% rename from tests/OpenGL/package/glm/glm/detail/func_trigonometric_simd.inl rename to project/Assets/NewFolder4/Models/Character.fbx diff --git a/project/Assets/NewFolder4/Scenes/Main.unity b/project/Assets/NewFolder4/Scenes/Main.unity new file mode 100644 index 00000000..c0baca18 --- /dev/null +++ b/project/Assets/NewFolder4/Scenes/Main.unity @@ -0,0 +1,30 @@ +# XCEngine Scene File +scene=Main Scene +active=1 + +gameobject_begin +id=1 +name=Main Camera +active=1 +parent=0 +transform=position=0,0,0;rotation=0,0,0,1;scale=1,1,1; +component=Camera;projection=0;fov=60;orthoSize=5;near=0.1;far=1000;depth=0;primary=1;clearColor=0.192,0.302,0.475,1; +gameobject_end + +gameobject_begin +id=2 +name=Directional Light +active=1 +parent=0 +transform=position=0,0,0;rotation=0,0,0,1;scale=1,1,1; +component=Light;type=0;color=0.612565,0.327129,0.327129,1;intensity=4;range=0.001;spotAngle=30;shadows=0; +gameobject_end + +gameobject_begin +id=3 +name=GameObject +active=1 +parent=0 +transform=position=0,0,0;rotation=0,0,0,1;scale=1,1,1; +gameobject_end + diff --git a/project/Assets/NewFolder4/Scenes/Main.xc b/project/Assets/NewFolder4/Scenes/Main.xc new file mode 100644 index 00000000..045693a3 --- /dev/null +++ b/project/Assets/NewFolder4/Scenes/Main.xc @@ -0,0 +1,54 @@ +# XCEngine Scene File +scene=Main Scene +active=1 + +gameobject_begin +id=2 +uuid=10036986138272728490 +name=4 +active=1 +parent=0 +transform=position=0,0,0;rotation=0,0,0,1;scale=1,1,1; +component=Light;type=0;color=0.612565,0.327129,0.327129,1;intensity=15.4;range=0.001;spotAngle=30;shadows=0; +component=Camera;projection=0;fov=123.4;orthoSize=12.1;near=1.86;far=1030.1;depth=9.5;primary=1;clearColor=0.192,0.302,0.475,1; +gameobject_end + +gameobject_begin +id=3 +uuid=14971148148602552176 +name=GameObject +active=1 +parent=0 +transform=position=0,0,0;rotation=-0.257926,-0.0205041,0.160241,0.952563;scale=2.4,3.6,1; +component=Light;type=0;color=1,1,1,1;intensity=13.6;range=10;spotAngle=30;shadows=1; +component=Camera;projection=0;fov=69.3;orthoSize=5;near=0.001;far=1001.9;depth=5.4;primary=1;clearColor=0.38882,0.493362,0.657778,1; +gameobject_end + +gameobject_begin +id=10 +uuid=198935724730254930 +name=Light +active=1 +parent=0 +transform=position=0,-1.9,0;rotation=0.0670541,0.137716,0.0909146,0.984008;scale=1,1,1; +gameobject_end +gameobject_begin +id=1 +uuid=8308231963777163730 +name=Main Camera +active=1 +parent=10 +transform=position=-4.7,0,0;rotation=-0.257815,-0.140875,-0.220134,0.930176;scale=4.7,2.8,1; +gameobject_end + +gameobject_begin +id=11 +uuid=15155914862689195892 +name=GameObject +active=1 +parent=0 +transform=position=0,0,0;rotation=0,0,0,1;scale=1,1,1; +component=Camera;projection=0;fov=47.7;orthoSize=5;near=0.67;far=991.2;depth=0;primary=1;clearColor=0.192,0.302,0.475,1; +component=Light;type=1;color=0.662222,0.170706,0.170706,1;intensity=1;range=10;spotAngle=30;shadows=0; +gameobject_end + diff --git a/project/Assets/NewFolder4/Scenes/Untitled Scene.xc b/project/Assets/NewFolder4/Scenes/Untitled Scene.xc new file mode 100644 index 00000000..5c7f90b8 --- /dev/null +++ b/project/Assets/NewFolder4/Scenes/Untitled Scene.xc @@ -0,0 +1,13 @@ +# XCEngine Scene File +scene=Untitled Scene +active=1 + +gameobject_begin +id=4 +name=GameObject +active=1 +parent=0 +transform=position=0,0,0;rotation=0.0087262,0.0087262,-7.61524e-05,0.999924;scale=1,1,1; +component=Camera;projection=1;fov=60;orthoSize=0.001;near=0.001;far=0.002;depth=-2;primary=1;clearColor=0.192,0.302,0.475,1; +gameobject_end + diff --git a/project/Assets/Scenes/Main.xc b/project/Assets/Scenes/Main.xc index e2a9f9c0..2bd98b4c 100644 --- a/project/Assets/Scenes/Main.xc +++ b/project/Assets/Scenes/Main.xc @@ -9,7 +9,7 @@ name=Main Camera active=1 parent=0 transform=position=0,0,0;rotation=0,0,0,1;scale=1,1,1; -component=Camera;projection=0;fov=45;orthoSize=5;near=0.1;far=100;depth=0;primary=1;clearColor=0.05,0.05,0.08,1; +component=Camera;projection=0;fov=45;orthoSize=5;near=0.1;far=100;depth=0;primary=1;clearColor=1,1,1,1; gameobject_end gameobject_begin @@ -20,41 +20,37 @@ active=1 parent=0 transform=position=0,0.08,3;rotation=0,0,0,1;scale=1,1,1; gameobject_end - gameobject_begin id=3 uuid=9855370671540411784 name=BackpackRotateY active=1 parent=2 -transform=position=0,0,0;rotation=0,-0.174108138,0,0.984726539;scale=1,1,1; +transform=position=0,0,0;rotation=0,-0.174108,0,0.984727;scale=1,1,1; gameobject_end - gameobject_begin id=4 uuid=14568936532392398358 name=BackpackRotateX active=1 parent=3 -transform=position=0,0,0;rotation=-0.0898785492,0,0,0.995952733;scale=1,1,1; +transform=position=0,0,0;rotation=-0.0898786,0,0,0.995953;scale=1,1,1; gameobject_end - gameobject_begin id=5 uuid=7319598685716776031 name=BackpackScale active=1 parent=4 -transform=position=0,0,0;rotation=0,0,0,1;scale=0.389120452,0.389120452,0.389120452; +transform=position=0,0,0;rotation=0,0,0,1;scale=0.38912,0.38912,0.38912; gameobject_end - gameobject_begin id=6 uuid=14495577888798577643 name=BackpackMesh active=1 parent=5 -transform=position=0.048938,-0.5718905,-0.943127;rotation=0,0,0,1;scale=1,1,1; +transform=position=0.048938,-0.57189,-0.943127;rotation=0,0,0,1;scale=1,1,1; component=MeshFilter;mesh=Assets/Models/backpack/backpack.obj; component=MeshRenderer;materials=;castShadows=1;receiveShadows=1;renderLayer=0; gameobject_end diff --git a/tests/OpenGL/package/glm/glm/ext/scalar_packing.inl b/project/Assets/Scripts/Textures/Grass.png similarity index 100% rename from tests/OpenGL/package/glm/glm/ext/scalar_packing.inl rename to project/Assets/Scripts/Textures/Grass.png diff --git a/tests/OpenGL/package/glm/glm/ext/vector_packing.inl b/project/Assets/Scripts/Textures/PlayerController.cs similarity index 100% rename from tests/OpenGL/package/glm/glm/ext/vector_packing.inl rename to project/Assets/Scripts/Textures/PlayerController.cs diff --git a/tests/OpenGL/package/glm/glm/gtc/quaternion_simd.inl b/project/Assets/Scripts/Textures/Stone.png similarity index 100% rename from tests/OpenGL/package/glm/glm/gtc/quaternion_simd.inl rename to project/Assets/Scripts/Textures/Stone.png diff --git a/project/Project.xcproject b/project/Project.xcproject new file mode 100644 index 00000000..5aeb8a79 --- /dev/null +++ b/project/Project.xcproject @@ -0,0 +1,3 @@ +version=1 +name=project +startup_scene=Assets/Scenes/Main.xc diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9828313d..4e92dd31 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -31,20 +31,18 @@ enable_testing() # Test Subdirectories # ============================================================ -add_subdirectory(math) -add_subdirectory(core) -add_subdirectory(containers) -add_subdirectory(memory) -add_subdirectory(threading) -add_subdirectory(debug) -add_subdirectory(components) -add_subdirectory(scene) -add_subdirectory(scripting) +add_subdirectory(Core) +add_subdirectory(Memory) +add_subdirectory(Threading) +add_subdirectory(Debug) +add_subdirectory(Components) +add_subdirectory(Scene) +add_subdirectory(Scripting) add_subdirectory(Rendering) -add_subdirectory(rhi) -add_subdirectory(resources) -add_subdirectory(input) -add_subdirectory(editor) +add_subdirectory(RHI) +add_subdirectory(Resources) +add_subdirectory(Input) +add_subdirectory(Editor) # ============================================================ # Test Summary diff --git a/tests/Core/Asset/CMakeLists.txt b/tests/Core/Asset/CMakeLists.txt index b0c6eab8..209308ef 100644 --- a/tests/Core/Asset/CMakeLists.txt +++ b/tests/Core/Asset/CMakeLists.txt @@ -28,7 +28,7 @@ target_link_libraries(asset_tests target_include_directories(asset_tests PRIVATE ${CMAKE_SOURCE_DIR}/engine/include - ${CMAKE_SOURCE_DIR}/tests/fixtures + ${CMAKE_SOURCE_DIR}/tests/Fixtures ) include(GoogleTest) diff --git a/tests/Core/IO/CMakeLists.txt b/tests/Core/IO/CMakeLists.txt index 82ca3b8d..22ef4c03 100644 --- a/tests/Core/IO/CMakeLists.txt +++ b/tests/Core/IO/CMakeLists.txt @@ -27,7 +27,7 @@ target_link_libraries(io_tests target_include_directories(io_tests PRIVATE ${CMAKE_SOURCE_DIR}/engine/include - ${CMAKE_SOURCE_DIR}/tests/fixtures + ${CMAKE_SOURCE_DIR}/tests/Fixtures ) include(GoogleTest) diff --git a/tests/Input/CMakeLists.txt b/tests/Input/CMakeLists.txt index aa1763b3..1f65986c 100644 --- a/tests/Input/CMakeLists.txt +++ b/tests/Input/CMakeLists.txt @@ -24,7 +24,7 @@ target_link_libraries(input_tests target_include_directories(input_tests PRIVATE ${CMAKE_SOURCE_DIR}/engine/include - ${CMAKE_SOURCE_DIR}/tests/fixtures + ${CMAKE_SOURCE_DIR}/tests/Fixtures ) include(GoogleTest) diff --git a/tests/OpenGL/AGENT.md b/tests/OpenGL/AGENT.md deleted file mode 100644 index 85152b16..00000000 --- a/tests/OpenGL/AGENT.md +++ /dev/null @@ -1,54 +0,0 @@ -# OpenGL Test Agent Instructions - -## Quick Start - -```bash -# Build -cmake --build build --config Debug --target XCRender - -# Run test -./build/tests/OpenGL/Debug/run.bat - -# Or manually: -cd build/tests/OpenGL/Debug -XCRender.exe -python compare_ppm.py screenshot.ppm GT.ppm 5 -``` - -## Test Details - -- **Resolution**: 1280x720 -- **Screenshot Frame**: 30 -- **Reference Image**: GT.ppm -- **Comparison Threshold**: 5 pixels - -## Build Target - -- Target name: `XCRender` -- Output: `build/tests/OpenGL/Debug/XCRender.exe` - -## Test Output - -- Log file: `OpenGL_engine_log.txt` -- Screenshot: `screenshot.ppm` - -## Dependencies - -- GLFW 3.3 -- GLAD -- Assimp -- GLM -- stb_image - -## Resources - -- Model: `res/models/backpack/backpack.obj` -- Shaders: `Shaders/vertexshader.glsl`, `Shaders/fragmentshader.glsl` - -## Troubleshooting - -| Issue | Solution | -|-------|----------| -| Black screen | Check shader compilation errors in log | -| No textures | Verify res/models/ directory exists | -| Model not loading | Check model file path | diff --git a/tests/OpenGL/CMakeLists.txt b/tests/OpenGL/CMakeLists.txt deleted file mode 100644 index 7102fa69..00000000 --- a/tests/OpenGL/CMakeLists.txt +++ /dev/null @@ -1,47 +0,0 @@ -cmake_minimum_required(VERSION 3.15) - -project(XCRender) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) -endif() - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/package/include/) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/package/glm/) -include_directories(${CMAKE_SOURCE_DIR}/engine/include) - -link_directories(${CMAKE_CURRENT_SOURCE_DIR}/package/lib/) - -file(GLOB copyResources "${CMAKE_CURRENT_SOURCE_DIR}/Shaders" "${CMAKE_CURRENT_SOURCE_DIR}/res") -file(COPY ${copyResources} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debug) - -file(GLOB assimpDll "${CMAKE_CURRENT_SOURCE_DIR}/package/dll/assimp-vc143-mt.dll") -file(COPY ${assimpDll} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debug) - -add_executable( - XCRender - main.cpp - ./package/src/glad.c -) - -target_link_libraries(XCRender - PRIVATE - glfw3.lib - assimp-vc143-mt.lib - XCEngine -) - -add_custom_command(TARGET XCRender POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_CURRENT_SOURCE_DIR}/compare_ppm.py - $/compare_ppm.py -) - -add_custom_command(TARGET XCRender POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_CURRENT_SOURCE_DIR}/GT.ppm - $/GT.ppm -) \ No newline at end of file diff --git a/tests/OpenGL/GT.ppm b/tests/OpenGL/GT.ppm deleted file mode 100644 index 85a8cf8d..00000000 --- a/tests/OpenGL/GT.ppm +++ /dev/null @@ -1,44212 +0,0 @@ -P6 -1280 720 -255 - - -  -        -      -  $   %  - -                    - -   - -   -   -   - -   - - -     -  - - - -          -  -            -  -        -         -   -  - -  -   -  -    - -   -       - -   -  -  - - -  -    -     -   - - -   - -       -         -   - -       - -          - -  - -  - - - -     - -    -   - - - - - - - - -          - -   -                            -                                                  -        -      -  -    - - - - -     - - - - - - - - - -   -    -      -   - -  -                     - -   -   -  - -    - -   -   -                      - - -        - -  - - - - - - - - - - -  - - - - - - -  -      - -  -      - -   ## !##$&$%&#$%!!"#""$!"$   -  - - - -    - -     -   $  "  - -         - - - - - - -    -     -  - - -  - -    - -   -   -  - -   -        -  -  - - -      -  -     -                -    -        -          -  - - -    - -  - -  - -    -    -     -  -     -   -      - - -  -     -  - -     -   - - - -  - - - -  - -   - - -   - - - -    - - - - -          -        -     -   -                                                                                         -  -  -  -         - - - - - - - - - -   -         -  -  - - -         -           - -  - -   - -  -  -  - "!                         -          -       - - - - -    - - -  -     -    - - -  -  -  - -    ##&')##%$%'%%'!!#    - -   - -    -      -   $      -    -   - -  - -  - - - - - - -   - -  -  - - -    -   - -        -  - -  -       -  -  - - -       -  -  -   -             -     - -   -   -    -     -         - -  - - - - - -     - - -  - -   -        -     -   -   - -   - - -   -   - - - - -  -  - -    - - - - - - - - -    - - -    - -    - -      -         -            -   -   -                                                                       -  -  -           - -  - - - - - - - - - - -           -  - - - -          -     -       - -        - -  - - -   !     -                          - -   - -       -     -    - -    -      -  - - -   - - ##'')""$##%$%'"#$  - -  - -             #    - -    - - - - - - - - -       -    -       -      - - - - - - -     - - -  - -    -   -  - - - - -   -     - -   -     -           -  -  - -      -   -       -     - -   - - - -     -  -   - - - - - - - -  - -   -          -     - - - - -    - - -   -  -     - - - - -   - - - - - - - - - - -   - - -   - -   -                 -  -   -    -                                                                                    - - - -  -  - -   -      -  - -  - - - -  - - - -   -    -        - -  - -                           - - -    -!                           - -      -  - -    -       -    -  - -  ##$%'$$&$%'%%'$%'"#%  - -  -    -  - -     !  -     - - -   - -  - -  - - -   -  -    -         -   - - - -   -     - - -  - -  -  -  - -   - -          - - - - -   - -  - -     -  -  -  - -   -  - - - -         -   - -   -  - -  -  -   -      - - - - - -   - - -  - -  -   -    -   -    - -   -    -   -  -  -     - -      - -  - - - - - - - -     -      - -  -    -              -                                                                                  -    - -       - -     - - - - - - -   - -  -   -   -         -  - -                            - -      - -                      -          -  - -  -        - - - -    - - # !"&')'')$%'#$&"#$ "  - -  -    - -   -       -  - - - - -       -    - -  - - -    -   -   -            -      - - -      -  -   - -   -        -  - -  - -   -  -   - - -        - - -     -     -  - - - -        -    - - -  - -    - - -  - -   -    - - -    -  -   -  - -  - -   - -  -    - -     -  -  -   - - -      -     - - - - -  - - - - - - - - -    -   -                                                                                                  -  -      - -   -  -     - -   - - - -   - -  -     -   -         - -                          - - -    - -  -  -                -    - - - -   - -                   -   - - - - - - !&&($$&$$&##%!"# "  - - - -   - - - -    !  -  - - - -    - -   - - - -   - - - - -   -  -    -     - -  - - -        - -      - - -  - - - -               -  - -   - -         - -    -        -  - -   - -        -        - -   - -   -   -   -  - - -  - -  -  - -  - - -      - -  - -  -     - -  -   -   -  -   -   -     - - - - -  - - - -  - - - -    -                                                                                                          - - - - - -    - -  -   - - -  - - - -    -  - - - -  -   -  -            -                            - -       -              -  -      - - -  -       - - -          -        - -   - - - -  - !$$&#$&'')"#%! !# - -   -    -      !   -     - - - - - -       - - - -   -   -        -    -    -    - - -   -  -  -  -  -  - - -        -         -  -     - - - -    -         -  -  - -                    - -  - -   -   - - -  - - -   -   -   - - -      - -  - -          -   -     -  -   - - - - - - - -  - - - - - - - -  - -   -  - -       -         -                                                                                         -   - - - -  - -  - - - - -     - - -  - -   -  - -  -   -   - -            -                               -      -  -   -            - -  - -  -     - -  - -   -   -   -          -           - -   -  - -      "!#$&#$%  - -    -  -   -  #    - -   - - - - - - -  -  -  - -   - - -  - - -    -     -   -   -      -  -  -  -   -  - -  -  -  - - -  -    -   -  -  - - -    - -  -   -        -  - -     -   - - -    -    -            - -   - -  - -   -  -  - -   -   -    - - - - -     -   -          - - -     - -  -   - - - - - -  -  - - - - - - -    -   -   -   -                  -                  -                                                                       -   - -    - - - - -  -    -  -  -        -     - - - -             -                   -          - -  -  -  -   - -           - - - -  -   -   -   - -  - -  - -  -     -   - -     -  -  -     -    -  -   - - -   - -   #))+"#$    -   - -   -     "   - -  - -  - - - -   - -    -  -   -   - -    -   -  -    -     -  -  - -  - - -   -  -  -  -   -   -       -   - - - -   -  -   -   -  -      -  -             -                  - - -      -   -  -   - -  -  - - - - - - -  -         -  -    - - - -   -  -   - - - - -   -   - - - - - - - - -   - - -     - - -   - -       -                             -                                                                   -  - - -   -   -   - - -   - -   - - -  -     - - - -     - -     -      - -                         -  -         - - -   -      -         - -    -     -  -  - - -  -  - - - -    - -  -  - -    -  - - - -   - - - - - - - -  - -     - -  - # !#   -   -     - - !  -    - -  - - - - - -   - - -  - - - - - - - -  - -   - - -         -      -  -  -   - -   - -  - -  -  - -        - - -   - - - - - - - -   -  -        -  - -    -   - -    -            - - -   -        -    - -     - - - -   - -       - - - - -  - - - -    - -    - - -   - - - -     -  - -  -     - - - -  -     - -        -             -                                                                                  -      -  -  -   -     - - - -  -   - - -   - -     -  - - - - -     -    -                                  - -  - -   -  - -        -     -    -     - - - - -        -   - -    - - - - -  - -  - - - - - - - - -        - - -   # '()!    -  -    -  -   -   -    - -    - - -  -     -     -  - -   -  -  -  -   - -  - -   -  -      -  -    -  -   - -   -  - -   - - -      -   -  -  -    -  -  -   - -                     -                  - - -   -  -       - -      -    - -   - -   - -  - - - -  - - -  - -  -  - - - -  -  -   -     -  -  - -  -    - -    - - -  -          - - -     - -        - -                                                                                 -     - -   -  -  - - -  - -  -  -  - - - -  - -  -    -  - - - -  -   - - - - -     -    -                                 -   -    -  -       -   -   -  -     -   - - -  -          -  - - - - - -    -  - - - - -   -           $!#!  !   -   -              - -  -  -  -   - - - - - - -  - - -  -  -  -   - -  -    -    -  - -  -  - - - - - - -   - - -        - -   - -       -       - - -  - -  -  -              -  - - -         -      -            - -  - -  -  - -    -   - -   - -  - - - - - - - -   - - - -   - - - - - -     -  - - - - - -           - - - - - - -   - - -    - -  -     -  - - - - - - -    -   -      -     -                                                -                   -       -  -         - -   -  -   -  - -   - - - -  - -  -  - - -  - - - -      -      -    -                                  -         -       -  -  -  -  -       -  -   -        -   - - -  - - -    - - - - - - -  -    -     -  -  &"  $!   - -   -   -   -    -   -  -   -  -  - - - - -   - -  - -  -  -   - -    -   -     - - -    - - - - - - -  -  - - -    -   -  -   -       -    -    -  - - -    -            - -          - - -  -    -         - -    -  -      -  - -    - -   - -   - - -   -   - - - - - -  - -     -  - - - -  -  -     -   - - - - -  -  - - -  - - -     -  -   -  -     -    -  - -  - -      -     -               -                                                    -        - -       -   - -   -  - -  -  -   -   - - -    -  - -  - - -  - -    - -      -                          -           - - !            - - -  -  - - -           - -   -    - -     -   - - -   -   -              -  - -  "!  "$ - - -        - "   - -  -    -  - -  -  -  -   -   - - -  - - -   -    -   -  -    - -  - -  - - -  - - -  -  - - -  -  -  -  - -  -          -   - " -   - - - - - -               - -  -        - -   -             - -       - - -   -   -     -  - - -   - - - - -     -  -  -   -    - -  -  -  -   -      - -  -    - - -  - - -  -   - - - - -   -  -    -    -    -   -      -   -                   -              -              -                      - -    -    -   -      - - -  -  - - -  - -   -  - -  - -    -   -  - -  - -       - -    - -     - -                               - -  !                - - - -   - -  -       - -    -  - - -  - - - - - -   - -     -                - - - -  "!"# !"  - -         -"   -   -  -  -  - - -  -   - -      - - - -  -  -    -   - -  - - - - - - - - -  - - -  -  - - -  -  - - -   -  -             !  -  -  - -  - - - -                          -   - -    -     - -  -  - -  - - - - - - -        -     -  -  -   - - - -   - -  -   -  -  -   -   -  -  -   - - -   -    - -  - - - -   - -  - -  - - - - - - - - -  -   - -   -   -      -             -                           - -          - -                     - - -    -            - - - -  - - - - - - - - - -   -  - - -    -  - -      - - - -         -  -                                    -        - -          - - - -      - -    - -  - -  - - - -  - -   - - -       - -   -   -    -  -     - -   -   -   !!$#$   -  -   -   - - -!    -   - - -  -  -   -       - - -  -  - -    -    -  - - - - - - - - -   - - -  -   -  -   - - -   -  -  - -          - "  - -     - - - -                          - -    -          -  -   -           -      -  -    - -  -   - -  - -    -       -  -     - - - -  -  - -  -   - - - - - - -  - - -   - -  - - -       - - -   -  -  -   -      -       -          -                  - -        -  - -      - -            -  - -                 - - - - - -  - - -    - -   - - - - - - - -   -  -  -   -   -  -       -                                        -         -         - -  - - -       -  -  -  -  - -  - -   -  -   -  -  -    - -   -       -   -   - - - - -   - -  !!#%$' - - -   -     !    - -  - - - - -  -   -          - -     -      -   - -   -     - -  - - -   - -    -  - -   - - - - -         -  -  -  - -  - - - - - -                          -     -     - - -  -   -       -        -    - - - - -   - -      - - -      -     - -       -  - -  - - -  -   -  -  - - - - -  -  -  - -   -  - -  -    -    -   -  - -  -    -                 -    -               -   -    -   -       -             -  - -       -    -   -   -  - - -  - - -     - -   - - - - -  - -  -   -   - - -  - - - -       -                                         -   -    -       - -    -  -       -  -   -  -  -   -  -   - - -       -  - - -  -  -  - - -    -    - -     -   #$$&$)%  -  - -  -   -      - -   -  -  - - -  - -  -  -           -   -   -   -   - - - - -     - -  -          -  - -   -  - - -        - -  -  - - - - - - - -    - -                         -   -          - - -   -       -       -  - -  - - - - -   - -  -  -  - - - -  -   - - - -         -    -  -   -  - -  -  - - - - -   -   -  -  - -   -  -     -  -  - -  - - - -    -  - -                - -   -               - -      -    -                 -          -          - - -  - - - - -    - -  - - -    -  -  -  -  -    -  -  - - - - - - -        -                                     - -  -    -          - -  -  - - -  -  -  - - - -   -  - - -    -    - - -     -       -      -         - -  $#$&%)%  - - -  -          -    - - -  -  -   - -  -                     -  - -  -  -  - - - -   - - -       - -  - -    -         -  -  - -   -  - - - - -     -                        - -              -  -       -         -   - -  - - - - -  -  -  -  - -  -    -  -   -  - -   -  -  -  -          -  - - - - - - -   - - - -  - - - - -    -   - -    -  -  -     - - -    - - -   -   -       - -      - - -  - -  -       -            -   -       -      -          - -  -  -   -        - - -  -  - -        - -   -   - -  -   -  -     -  -    -           -                                             - -   - -      - -    - - - - -    -  -  -     - -  -   - -      - -     -        - - -   -        -  ,&$&%)%  - - -   - -       -    - - -  -  -  - -  -  -  -  - -   -             -  -  - -  -  - - - -    - - - - -  -      - -  -   - -       -    -   -  - - -  -  - -  - -    -                       - -  -              -  - -    - - - - -   - -   - - -  - -   - -  - - -   -  -  -  - -  - -   -  -  - - - -  -  -   -  -     -     - - - - -     - - - - - - - -  - -    -   -  - -   -  - -     - - -     -  - - - - - -              - - -  -          - -    -   -    -          - -            -      -    -          - -   - -   - -  -   -    -  -  - - -  -  -   -    -  - -            - - - -                                         -  - -   - -       - -    - - - - -   - -     -   - - -  -  -  -  - -  - -      -    - -  -     -  - - - -      ."(%&&)& -  -  -         -   -  - -  -   -  -   -     -         - -  - - -     - - - - - -   -    -  -   - -  - - -  -  - - -      -     - - -   -  - -  -   - -    -                         -          -   -      -    - -      - - - -  - - - -   -    -  -      - - -  -  -  -  -  -  -  -  -  - -          -  - - - -    - - - - - - -   -   -  -  - -   -      -   -  -   - -   - - -   - -     -             - - - -  -           -    -        -      -    -  - -     -      -               - -    -     -  - -    -  - -  - - -   -  -   - -    - -    -                                               -  -    -           -   -  - - -      -  - - - -  - - -   - - - -       - -      - -        - - - -     %#%$%(&  -   -  -       -   -   -  -   -  -             -  - - -  -     -   - - -   -   -  -  - -     - - - -  -  -      - -   - - - -   - -    -   - -   - -                        -        -    -   -    -  -  -  - - -   -    - - -  -    -  -    -  - -     - -  -   -   -   -  -  - -         - -  - -       - -  -  -  - -   -  -  - -  -     - - -    - -  - - -   - -   - - -        -        - -   -   -       - -   -  -  -                 -   -  -        -  -  -     -        - - -  -  -  -  -    -   -  - -  -    -    - -  -           ! -                                        - - - -  - -            - -  - -    -   - - - - - - - - - -     - - - -   - -   -  -  - - -    -     - - - - -     #"&%%(&  -  - - - -             -  -  -  - - -  -    -        -  - -   - -  -  -    - -    -     - - - -  - - - -  -  - -      -     -   - - -       -   - - -                 -           - -   - -  - - -     - - - - - - - - -  -    - -  - - - -      -  -  - - - -   -   - - - - -   - - -  -       -   - - -    -  -   - - - -  -  -  -    - - - - -  - -   -  -    - - -      -    - -    -    -  -    -   -       -   -          -  - -      -   -      - - -  - -    -   -  -    -            - - - -   - -   -      - - -  - - - - -  -   -  -   -  -  - -  -  -        #!    -                                  - -            -       -  -  - - -  -   - -  - -  - - -  - - -     - -  - -  - -                    !##%$%)& -   - -  -         -   -  -  -   -   - -      -    -  - -   -   - - - -  - - -  - - - -   - -   - - - -  -   - - -  -  -   -        -    -         -        -                       !      -     - -   -    -  - -  -   -    - - - -       -   -  -    - -   -  -  - - - -  -  - -   - - -    - - - - - -   -     -   - - - - -   - - - -   - -   - -  -  - -  - -    - -   - - -  - - - - - - -     -                - -  - -    - -      -  -        -  -      -   -  - - -    - -  -       - -            - - -     -   -    - - - -   -  - -  - - -  - - - - - - -           -# !! - -                           -    - -    - - - - -  -   -  - - - - -  -    - -  -  - - -    -    -   - -        -                 #%%''+'   -  -              -  -  -        - - - -  -   -    -    -  - -     -     -       - -  -  -  - - -  - - -    -           - - -      - - - -  - -                                 -  -  -  -  - - -  - - -  -     - - -       -  - -  - -   - -  -       -  - - - - -  - -  -  - -  - - - - -  - -    -       -     -  - - -  -  - - -     - -     -   -  - - - - - - - -  -                   - - - - - -  - - -     -  -  -   - -     -      -       - -    -  -   -             - - - - - -  - -   -         - -   -  - -  - - - - -    - - -    -       -& "# -  - - -                      !        -     -  -     -  - - - - - -   -       -       -  - -     - - - -        -                 !%&%&&*( -  -  -      - -  -  -  -  -   -   - -    - - - - -   - -    -   -  - - - - - -  -       -  - -     -  - - -  - - - - -   - -          -             -  - -                                  -  - -  - -   - -  - - -  -   - -    -  - - - - -  - - - - - -  - - - -   - -  - -     - - - - - -  -  -  - -  -  - -           - - -   -  - -  - - -       - -        -  -   - - -  -   -   - -          -   -  -  - -   -  - - -    - - -  - - -   - - -  -       - -  -   - - -    - -  -                  -     - -  - - -  - - -     -  - -      - -    - - -   - - - -        -&$$%!    -     - -  -  -        ! -          -   - - - -  - - - - -  -    -  -  -   -  - -   -      - - -   -   -     - - -        -       !.!#&$'*(  -   -      -   - -  - -  - - - - - -     - -  -   -  -  -     - -  -  - - - -   -   -  -  -  -   -  -  -    -  -   -  - -  -    -                  -     -  -  -                -           - -    - -  -  - -    -   - -     -   -        -  -  -  - - - - - - -    -   - - -  - - -    - -    - - -             - -   - -  - - - -          -  -  -  - - - -             -   -   -         -   - -   -  -  -    - - -         - -  -   - - -    - -  - - - - - - - -  - -                 -     - -    -  -     -  - -     -   - -   -    -  -   -         -#&&&#   * ' -     -   -   -  -   - -        -           -  - - -  -   -  -  -     - -      - -  - -       -  -   -         - -        -      - #1$ )(&&+' - -          - - - - - - - - - - - -   -       - -  - -  - -  -   -   -  -  -  -   -   -   - -  -   - -  - - - - - -  -  -  -  -    -   -           -    -     -                      - - -         - -  - -    - -  - -  - -     -   - - -  -      - - - - - - - - - - - - -    - -  -  -  -    -     -  -             -       - - -  -  - -   -   -  - -  - -             -   -        -    -  - - -   -   -  -  - -     - -   -     -      -     - -    - - - -  -  - - -                     - -   - - -      -  -  -  - -   - - -     -   -    -       %))($   ,!(  -  - - - -   - -   -  -           - - -          - -  - -    - -          -  - -   - -   - - - - - - -  - -     -       - -               !+*(&&.( - -         - - - - -  - - - - - - -    -       - -  -   -   - - -  - - -  -   - -  -  -  -  -   -  - -  -    - - - -  - -  -  -    - - -         - -      - -     -       -             - -  -     - -  - -  - -  -   - -   - -   -    - - - -        -  - - - - -   - - -         -  -  - -       -                            -    -  - - - - - - - -                               -   -      -   - -    - -       - -    -         - -  - -   - -  -  - - -        - -          -    - - -  - - - - - -       -     -          -  -       &++)$  0$",   - -  -  -   - - -  -  -   -   - -          -         -     -  -      - - -        - - - -        -  - - - - -   -   -                         !&''((.)   -   -     -  - -  -   - - -            -   -  - -  -  -  -    -  - -  - -     - -  - - -  -     - -  -  -  - - -    - - -  -                   -       -  -   - -  - -   -      -   -   -         -  -  - -   -   -  - - -     -   -   -      -   - - -    - - - - -  -         - -          -                              - - -   - -                                          -    -   - -  -         -  -    - -    - -   -    - -  - -          - -          -    -      - -     - -   -    -     -   -  - -   -       '+,*% -0%"."       -   - -   -   - - -   -  -  -                -    -   -        -    -           - - -          -   - - - -                             !&'(((.* "!  - -  -        - - -  -     - -        - - -   - -     -  -    -  - -   -   - -    -  -   -  -  -  -   -   -  - - -   - -  -   -                    -  -   - -  - -   - -    - - - -    -  -      -   -        -   -    -                 -   - - -   - - - -   - -  -     -   -         -               -               - -  -              -                           -                      -   -     - -  - - -  - - -    -          - -   -                       -  -   -  -     - - - - - -   - - - - -       ''**)#  # - -   - -    - - - - - - -   -  -            -      -               -      -       - - - -           - - - - - -                           "((*))/ )  -  -    - - -    - - -     -    -       - -   -  -  -   -   -  - -  -   -    - -  -  -    - - -  - -  -   - -  -  -  - -   - -  -       -     -              -  - -  -       -   - - - - - -  -   -#  - !  -   -  - -       - -       -   - -                  - - -        - - -                                             -   -                          -                  -              - -   -    -       -  - - -  -  - -         -     - -       -     -          -  - -  - -   -  - -   -       - -   - - - -     )(**'!   -     - - -    -  - -   -  -   -  - - -      -  - - -  -  - - -   - - - - -            -      - -     -   -             - - -                             #)*,+*.) - - -        - - - - - -   - -  - - -    -       - -    -  -    - - -  -   -  -   -   -  -  -  -   -   -   -  -   -     - - -       -                 - -  - - - - -  - - -  - -  -  - - - -   - - *  - "! -      - - -          -       -   -   - -  -      - - - - - -        - - - -    -                                      -  -                          -                  -           - -  -    - -           -        - -  -     - -    - -   - -      - -    -          - -   -  -        -   -        - -  -  -   -(,- + &   -    - - - - -          -  -     - - - - - - - - - - - -   - -       -  -       - -             - -  -                -                       "$/!..-+-' - - -      - -   - - - - - - - - -          - - -  -         -  -  - - -  - -    -  -  -   -  -  -  - -    -  -              -   -             - - - -  - - -  -   -  - -    -  - - - -     "*   !"   -   -   - -                                -   - - -       -  - -     -                                                                -              - -            - -     -   - -             - -  -   -     - -    - - - - - -      - -       -        -   - -  -    - -  -     -      -      -+.. ,&     - -   - - - - - - -      -  - - - - -  - -      -  -  - -           -     -    -             -   -                                     !(:,&3#,+*,& -      - -  - -  - -      -          - -  -  -   - -      - -   - -  -     -    -   - -    -  -       -          - -         -   - - - - -   -    -    - -   -   - -    - $+!  !!    -     - - -                                   -  - -      - - -     -                                                         -                         -          -   - - -  - -   - -            - - -     -    - -     - - - - - -         -  -                -  -  - - - - -  - -    - -    -       -..0!0!-%         - - - -    -  - -  -  -       -         -       %*  - !"  -  -   - - - -             -                                !)7*$/ +,*+$      -   -   - - - - - - - - -       -   - - -   -       - - - -  -   -  - - -  -  - -  -  - - - -  -         - -          -    -  - - -  - -  - -       -    - - -      -  -   "  -#"!    - - -   - -                                     - -      - -      -                                                   -                        -  -   -        -  -    - -  -             -      -    - - -    - -  - -         - -  - - -               -   - - - -  -  - - - -       - -   - -012!1,'('   -              -  -  - - -   - - - -    - - -  -  - -      )0#   #$" -  -  - - - -      -                                    $*(*+)+            - - - -  -  - - - - - - -     -      - -             - - - -  -    -  -     -   -  -  -       - -            - -   -  - -    -    -   -  -        -       #"     - - -                                         - -      - -                                                      -                                      - - -    - -                      -      - -   - -  - -        -    - -     -                  - - - - -    -    -      - -4!3"1 ,)4'"3&"  -  -  -          - -  -        - - -         -       (0$!! -%%# -   - - - - -                                    !&**+))*          - - - - - - - - - - - - - - - -  - -   - -  -  -  -       - -       - -  - - -   - - -    -  - - -  -      - -     $ - -         -     -    -  - -  -        -      - #"    -  -                           -                     -             -                                                     -                - - - -  - -    - -                               - - - - - - - -      -        - -                -      - - - -   -       - ./3"2!1 *&;-(7)%  -   - - -             -       -        - - -  -      (0%"# "&%! - -  - -  -                                 #&+*+()*       -   -   - - - - - - - - - - -   - - -      - -  - -  -    -  -  -      -  - -    - -     - -        -      $     -  -   -   -   - -   - -  - -   - -     -  -   -  -  - "$#   -                                                                                                                              -  - -   -  -                                  - - - - - - - -    - - -     - -    -              - -     - -       -  - -  - 03"4#4#1!(&=/*7)%    -                        -        -    -   & $''     - -                                 %%****()      - - -   - - - - - - - - - - - -   - - -        - -  - - -     -  - -  -  -  - - - -    -         -     -   !& -  -  -  -  - - - - -  -         - -   - - -       - - -  - -  #$#   -                                                                                                                              -   -   -                                 - - - -  - -       - - - - -  -     -  -            -      -   -  -  -     - 15"5$5$1!(%1$ -    - -                                   -  -     - - #)'!    - - -                          #2$-**)((      -  - -   - -  - - - - - - -  -  -   -     -    -  -            - - -  -  -   -   -  -    -      -     -        -   -    -         -  -     -  - -    -     - -   """   -  -                                                                                                                           - - -                    -         -     - - - - -  -  -     -     - -      -    - -    - - -  -  -      - - -  -   -   - 1"4#6$5$.%     - -                     -        -     -  &)&" -   -  -   -                   %3%!. +))*)        -    -   - - - - - -   -  - - -  -    - -    - -          - -   -    - -  - - -    - -      -      - ! -    -     - - -        - -    -         -   - -       $#"         - -                                                                                                        -                        -  - -          -   - -    - -    -       - -  -    - - - -   -            -   -   -      - 4!1"5%7% 4#,%!      -                     -   -   )*(!      -  - -              "&*&)*),'       - -    - -  -  -  -   - -   -  -   -  -     -  -  - - -   -   -  -  - -     - -  - -      -   -      -"                  -  - -   - -   -              +!&  "$#"   -  -                                                                                                                     -  -             - -  - - -         -   -   - - -   -    - -  - - - - - -    -   -   -            - -             -4"2"6% 6% 1!+%#                            %+*)!  -     - -  - -               ! #&)*)*()#        -  -    - - - - -        - -      - - -   -  -  -  -  -         -   -     - -        - - -  -       -!          - -   -  -   -      -  -  -         - - - - -  0%"' #%#!    - -                                                                                                      -  - -            -   -              -  - - - - -   - -  - -       -      -  - -   -            - - - - -  -      -1"4%6&!5% 0 *%#                   -  (3&") &)-+(!   -  -               !        !"$'+**((&        - -  -   - - - - -       -  -  - - - - -   -  - -   -   -         -   - -             - -  -       - !  - -       - - -  -  -   -  -   -   -    -       - - -   "/# % $&%     - -                                                                                                           -              - - - - - -   - - - -    -     - - - - -  -   -  -            -     - -     2"7"5& 5'!4$.*,)"               - - +>/,0!$(-.+&!     -              !   !                !!   !"#&),+*()# pps==@99/*7)$#      !!    '7'$1 (.2"/*%                  !  !!!   !  !! !"      !"!!    !!!"!    !"%*5&"1",+)*$%&(--077::;>      - -  -  -   -   -   -    - -  -  - -  -     -  -   -  - - -   -  -      - - -   - -  -  - -  -  - -      -$#" %) -  - -         -        -     -       - - -   - - -  %''%     -                                                                                - -                           -    -  -  -   -           - - -  -   -     - -  - -     - -     -   -   6 ;$6(3&.+,=.)4&!"     !!!"!"    "('*/2#.($  -   -         !  !!!!"! !  !!!"   !!!!""!!!!!!!"""!! !!"$&,=.*2",**+  #$%++.568224 -      -    -   -    - -   - - -     - - -  -  -  - - -  -    -  -    -   -      -  - -   -   -  -   - - -     -$%%").!     - -  -   -       -   - - - -  -    -        - - -    %('%      - -                                                                                 -                              -  -  - - -  -   - -  - -     -  -   -      -   - -     -   -  - -    - 4#5#8%6&2$,)*1")#   !"""!!""#"! "!    $,1"0",&" -                  !  "! !!  !!!! !"! ! !!!!""!"#"""""""#""!"#%&+2"+-,(' ""$ACF -     - -   -  -  -    -     - -     - -  -  -   - - - -           -  -   -   -  -  - -  -  - - - -   -   -  -  -     -$&$!*/#     - -  -  - -           - -              -       $&'#" -       -                                                                                          -                   -     -     -  -  - - - -    - - - -    -     - - - - -   - -  -  -   -    -  -  -    4"6$7'6%1"*&$%!     ##!!""#%%$$"$$"!  ! !#"#'+2!3#0!,'  -       !    !  !!""!!"###" !"!""!!""!"!"#""##$#####$#"""##""#$&),,.+*)% ,-0 -       - - - -        -  -   -   -    -  - -  -  -  -           - -     -  -   - - - -   -  -   -  -  -  -  -   &&#"*+  -  - - - - -  -     -         -     -     -   -      $%%!!  -    - -                  - -                                                          -                       -                     -   - - -  -   -  -   - -   -  - -   - - - - - - - - - -   - -   -   -     - - -    3 5&4)!3# 1*%""       !!  ##$&&$$$$%$#"""#$&*-)*.3!6%2"-#   -   !      !"! !"#"""""""""""#"!##"##!!#""##$%%%$$%%%$$$%%$$$$%$$%%(,./,*)+=>A -       - -         -  -    -   -   - - - - - - -  - -        - -   - - -  - - -  -   -  -  -   - - - -         -    $&"$$        -   -        -   -   -       -  - - -     !&'%   -  -                                                                                                                       -   -       -     -    -   -  - -  - -  - -        - -   -   -  - - -     - 2"4"5&3( 1#.)$#"    !! !#$%&&&%%%&%#""#$&+9)$@1,4#.3 4#5$0 )! -  "!" !!  ""!"##""#"#"##$#"##"##"!"##"##"##$##$%&&%%&&'%$%&&$%&&&%&(+-/0!/ .*' ##%HHL -      -  -       -     -  - -   - -  -  - - -      - -   -   -  -  -  - -  -   - - - -  - - - - -   -     -    -   "!&$!  -   - -     -                 -              (,! #'(%                                                                                                                        -   -    -  - -  -       -   -   -   - - -     -     -  - - - -   -      - 3"6$6&2' 0#,'&$!       !!!"$%%%%&&&'&$#"##$&<-(F611 /3!4#2".(  -    "!!!"#""#######"""#$$$$$$%$$$#"""""!""$&$&&$$%&'&&'(''%&'&$%%&'*+5%!;+'5$ 1!0 0 ,'#/03        -  -  -         -    -  -   -   -  -  -  - - - -   - -  -    -  -  -  - - - -   - -   - - -   -   -   -    $%$                -  -      - -   -    -    - - - - - - /"! #'(%  -                                                                                                                -   - - -    - - -        -  -   -    -  - -  - - -         - - - -     - 1 6%6&2&.!))3#-"!       !"#%$$%%%&&&%$$$$$&:+%C3-/.1 3"/*& -   !"#####$$$%%$$$$$#"#$%%%$####"""##"$%$%#$$$&'&&&&'''))''(''&%#&'))1!>-):)$/2#.-'%  :;>        -           - -    - -   -  - -  -  -  -  -  -  - - -  - - -     -  - -   - -    - -  -   - - - -          -  "%&$   - -    -      -  - - -   -    - - - -       - - - - - - ."." #'(# - -                                                                                                                     - - -      - -   - -  -   - -         -  -    - - -  - - -   -  -      / 2!6%4%1%*(+?/(5& $#! !    !!"##"$$$&%%&&&%%%&.4%0 02!2".(  !"$$&%$#$%&&&&%%%%%$%%%%&&$#%$!!!###%'&%$%%$&'''%&'&%((&&(*(&&&&&'(-5% 4#2!.-'#   !@AE       -   - -  -   -    - -     -  - -  -    - - - -   - -    -  - - -  - -  - -    - - - -           - - - - -  "%&$     -   -  -      -         -   - - - - -     - -  /#!*$&&# -     %%!                                                                                                                                       - -    -     - - -    -   -  -  - - - - - -  - - -    -  - -    -2!3!6&4%0#'(+A1+7' ###" !          !!!!""""""$$&'&$%&&&'+,02"0 +'!"###$$&%%$'(('&%&%&&%#%#&&&%#$('#"""#$&'%#&'%%%&%''(('&((''('&%%%&&(+/3"2!1 /**     -      - - - -   - -    - - - - - -    -    -   - - -  -  -     -  -   - - -  - -     - - - -  -       - - -    -   "&'%    -  - -  -        -       - -   -  - -   - -      %! %&%"    !()%  &*$                                             -                                                                               -             - -   - - - - -      -   - - - - - -    -  -     -   - - - - -   -     - 1 4"6%4%.!'&,?/)0!$" !!"      !        !"  !"&'&$%(('&(*-1!2"/ *%"#%%%%&'&''&(((('&%'('%%$$%&''%&((&%$#$$%'&&'&%(('(((+*'&&&&&&('*(%(+*.3!6$2!/&+       -    -   -  - -              -  - - -  - - - - -    - - - -  -  -  - -   - -   -   - -       - - - -     -  #''# $$  -   -        -         - -   -    -  -     - -  -   $%$! &(#  !""!                                                                                                                                                 - -    -        -  -     - -  - - - -       - -   - - -        04!5%3$-'$)4%*#"!!"!               !!  "$%'&%()&&%(+.3$0!,( !$$&&&&%%())')*(('&&(('&%%$%&'((((*)&%$$%%&%&(())((&()(*'''%%&'(()(-9,(4'#0"4#4"3"/*'    - - - - -         -                  - -  - -   - - - -   - - -  -  -    -   - -  -        -     - - - - - - -    -  "&'$!/#-!             - -    -      -  -     - - - - - - - - - -   %$" $!  !! !                           -              - -                                                                                   -          -   - -          -       - -       -             - -      - /4 5$2#+&!##"           !  !  !!! !#$&&%''(.+(+/1!/ )&  "$''&'''((((')+*(()*(''(&'%%((**)), )(&$#&))''(**(')'$%%+*'&()'%'(*/ =.*F72=-)4#5#5$2!+'#   - - - - - - - - -        -   -   -       - - - -   - - -   -  - -   - -    - - -   -   -   - -   - - -  -  - -  - - - - -   #')%!1% -!   - - -        - - -      - -     -  -   -       - -   !%$"                              -                                                                                                                     -     - -        -   -  -        - -   - -   - - -  - -   -    - .1 6!4"/ )&"! !       ! !  !      !!!!!!#%%%&%,9(#4%+-/ .-(!#%''''()))***+*)**++)'))**'''*,*()+, *'%%%)+, )(&'%%%'%$$&(''()(('*,5#?-(@.);*$6% 4$1!,(     - - - - - - - - - -      - - -      - -          - -  - -   - - -     -     -  -   - -  - - - -    - - - -        -  -   - -  #$((##1% ,  - -   -        -    -   - -     -     - -       - - -  "&$"                    ##                                                                                                                                      - - - - -   - - - -  - -   -  -  -  - - -    -  -    -  - - -        - 0 1 7!3!.($"!    ! !!!!!!!"! !!!!"""$%&'(0>-(8(#,-.-*& "&&%&()()***))*,++**++)***++*+-!-!*()+, )%$'%')*('&$#%('&&&()'&((*%**,13!9& 8& 6%2!++     - - - -                     - - -   -  -  -  -  -   - -  - - - - -  -   -  - - - - - - - -    -            - - -  - #$((#!+&                    - -     -      -  - -    -  - #&$!                                                                     - - -                                                                                             - - - - - - -   - - - -     -  -  -     -   - -   -  -  -  -      - - - (/6 3!,&$"   !! !!!!         !!"%$&&&-;+&7'"+--+'# !#%%%&))**)*++*+,,,,,- ,,,, +++, , , .")+.!-!0$+)))')))''&%%%''%%'()&*)+*+,.04!8& 8&7&1 )$     - - - - - - - - -        -             - -  - -    - -  - - -    - -  -  -      - -       - -           -  -  - -$&('!   -                      - -      -     - - -(!  $'%"#                     -                                                  - -                                                                   - - -                      - - -  - -   - - - - -  - - - - - -  -  - -   - - -  -   - - - - -     - - - )/ 5 2 *%'(! !  !!     !!!##"!!""%%$%2#0 +.-)% $&&&()*)+,*+++*+-,- . .!0#1$/"1$1% 0$/#2&!3'"- - 0#+*+- ,))**+,*($%'&&%')('())***-17% <*%8% 5"9' ;)"6%/*   -  - - -  - -   - - - -       - -          - -  -     -  -  - -  - - - -   - - -   - -  -        - -     - -   -     - - -#%'&    - -  - -     -        - -   - - - -   -          1&!$ $&%!!          -   -                                                    - -                                                                          -                     - -     - -  - -  - -  - - - -  - -   - - - - - -     -  -   -      - ++1 61&&29' ,         !!!!!"""""!!!#$#%%'',-+(" #%'((***)*+**,*. ,,*+,/!2$4&!2$0#2% 1$2&!0$.".!0#3&!/"+0#2% -+)*)+))((((''')+*+,,+,--09&!I71O=7@-'<)!8&5$-, - - -   - -               -    -    - -      -  - - - -    -       - - -       -      - - - - - -    - - "%&$     - - - -     - -    -  - - -       - - -     - - -   -#1% # $%#!    -        - -  -                                               -  - - - -          -                                                                                        -    -   - - -   -     -   -  -     -     - - -      -,-272%&3 :(!/!   !   !!   "!!!!! #"!!$%$(+,)'  - %')*+++,++,,+,,.!.!/!- - 0"2$3% 2$1#1$2% 0$/".!/"3&!2$3% 3% -/!2$1"-,. 2$5'"/!-++,--0 3"0/.///026#3 7$F2,N:4E2,=+%9' 4$-(   -  """-*$""! - - -  - "             -  - -  - -     -   - - - -  -    - -       - -                 - - - -     #&%#       - -         - -   - -   - -   -  - - - - - -  - - &0%!  $$#!     -   - -    - -         -   - - - -                                        - - - - - - - -                                                                                     - -    - - - -  - - - - - -   -       -  -  -   - - - -   -  -   - -      ---2!5, %6% 9)")  !   !  !!  ! "!""#$$&,,)%" #(), ,,,,,. - ,,.!- .!- .!. . /!0"1#2$4&!3% 2$0#.!/!/!1#6($3% 5'"2$2$3% 1#1#1#0!0!1!1!0/000 0 1 2!2!1 0011 2!4#8%;' 7#6";' =*"=*#6%1!*   - $$$""",)%"## - - -  - - -   -    -  -   - -     - - -   - -  - - -   - - - - - -    -   -    -                   - - - -   $'%$     - - - - -         - - - - - -   - -  -           - - %)  %%$! -      - -   -  -  -      - - - - - -   -                 -  -                   -  - - -   -                                                                                   - -      - - -   - -  - -   -     - - - - - - - - - - - -     - - - - -  -    - +-0 1,"&4%3%$!         !  !! !%%,,'!$')**++,,+,,- .!.!- - -,-- 0#1#/!2$2$2#1!0 / 1#0"3% 1#2$0"1"2#1"2"4$3"0 3"5$4#1 1 1 1 2!5$7&7&5$4#3!2 3 3!:' C0(F2+E2*?+$8%:' :(!3#*$    - =4' """ ,)&$#! - - - -   - - -       - - -   -      -    -  -   - -  -  - - - - - -  - -       -                         - - - -  #&&#  -           - -  - - - - - - - -  - -  -  - -  - -       - - #$$! -     -   -    -         - -  - -             - -                            - - -                                                         -                     - -     - -   - - - - - - - - - - - - - - - - -     -   - -     - - - -  - - -  -     - (-!0!0) )(    !" #(*)% #%')*****+++,,,,-/!/ 0!/ ..0 0 2"3#1!1!0 / 1"3$5% 7&!5$3"3"3"4"6$6#;("B0)E2,A.(8& 5$6$7%8&>,$G5-L92G4-?,%<)!;)!;( :' =*"A.&@-&=*"<)"8&6%0!%     -  ?6+!!! """*'&#""  - - -    -          -       -   - -  -    -       -            -        - -    -            -  - - - "%%" + $ -  -  - -    - -   - -   -    - - -     - - -    - - -     ###               -          -  - - -    -   -   -  -                            - - -                         -                                -                      -  - - -        - - - - -   -   - - - -    - -  -    - - -  -  -  - - -  -  -((-!/ -(    '1$!'#%('$ #%&'(&)),,*,+.../0!2#0 1!1!1!2"2"4#3#3"3#5%7& 9("@.(E3-F4.A/)<*$9'!8%8& 8& 9' 9' 7%6$7&:(!9(!8' 7& 5%5%5&3#2#2"3#3$3$1#/ -*&!      -    8/$?6*###%%&"""  - -   - -       - -  -  -    -  -   - - - - - -  - - - -   -     - -     -  -        -              -  - - - -"#%%" -.$ $   - - - - - - - -    - -   - -   - -      - - -    -  -   -  ##"      -      - - -       -     - -    - - -     -          - -            - - -                                                                       -    - -               -   -  -      - -   -   - -    -      -  - - -  -    -   - - - -   -   (%,.,&           *2%"'$%&&!"#$&())*)+--./0 1!2"4$5%5%4$6%6%5$3#6%<+$<*$5$4#3#2#1!1!1"1"0!0 / / 0 0!.,**)(('&&%%#!             6.#6.">5)""#$$$""" - -       - -        -           - -  -    -  - -  -    - -     - -  -                     - -   -#$%"  .$ "  - - - - - - -       - - -  - -   -   - -  - - -  - -     -  - "" -         -  -      - - - -     -   - - - - -             - -    - -        - - -                                                                  -    - -   -      -     - -     - -    - - -   - - -           - - - - -    -     - -    - - -     )'-.*&       )1%!&#&%$!%%')*-/1 3"3"3!5"5"3"2"2"4$6&5%3#3#4#3#2".,,+*)'%%%%$###!       -   :1'=5*8/$8/#<3' ""!##"!!"  -   -       - -   -    - - -   - -     - -  - -  -    - -          -        - -               - -!#$! +!  - - - - - -             - - -  -   -   - -   - -        $"     - -     - - -    -   - - - - - -     - - - - -      - -      -   - - - - -    -   - - - -         -                                                       - -        -  - - -     -      -     - - - -    - -   - -   - -   - - - - - -  -       - -  -   -    - -     *(-.'% !               (."%"%$!$)-/ 0 0 1 2 04#8'"3"../ / .. / .,*(&%$#!          - 3,";3)<3(8/$7.#<2'$#""""!!! -  - -       -  - -  -              -    -                     - -          - - -  -   #$"  - - - -      - - - - -    - - - -   -         - - - - -  -   "!        -       -      -   -     - -  - - - - - - - -  - - - - - - -             - - -   -  - -  - - -  -    -                                                                          - -  - -  -              - - - -     -  - - -     - - - - - - -         -  -       - - -     - +&-/%+,"                      #'!!$#  4$ 8($4$!0 .-+*(''('&%$#"#!         - - - -          *$3,";4*<5)70%6." !!#"#""#""" - - - -                     -         - - - -      - -     -                    -         #%"     -   - -  - - - - -   - -   - - - - - - -     - -  - -  -  )+   ""     -              -    -     - - - - - - - -  -    - -           -      -   -  -  - -  -  - -                                                                              - -           -     - - - - - - -   - - -    -    - - -      -         -    -   -  - -     -*'-/$0#4&$!                               !$"(*(&%#""!!       -                -         )"+#,%3,"=6+;4)81%70$!!!"!#$#%"###$# - -  -            -     - -  -     - -     - -           -                       - "$      -   - -   - - - -  -  -   - - - - - -     - - -      - - -   !!  - -    -  -  -         -    - - - - - - - -     - - -      - - -  - - -  -    - - - -   - - -                                                                                      -            -   -   - - - - - -       - -  -  - - - - -   -    -      - - - - - - -     -     -(%,.$, 1"!                                            !#  "      -    - - -  - -          - - -    - -   -  -  -  -      #)",%+$6/$<4*:3'7/$6."###  !!!"""#"$#$$$%%$$$ - - -  - -            -   -   - -   - -      - -   -                  '-!&  -!#       -    - - - -  -  -   -   - - - - - -  - - - - -     -   -1!,  ""  !     - - -       - - - -   -   - - - -     -        - - -   - - -   -                                                                                                    -    - - - -  - -  - -     - - - -  - -  - -  -  -   - -     - - -   -  - -  -     -'$+.#(1"$                                                  -  -     -    -     -  -  - -    - -    -   - -       %  "( +$*#70%;3(<4(80$6.""""((('''&&&''',,,...##$#$%#$$$$$ - -  -              - -    - -        -        -            ! &&  "#    -  - -    - -   - -     -   - - - - - - - - - -      -  -   0!+ !"  ""  #!  - -   --     - - - - -  - - -   - - -    -       -  - -      - -   - -                                                                                                       -  -  - - - - - - -  - -  - -   - - - - -         - - -       - -   -    -       -'"),#$+#                                                       - - -  - - - - - - - -    - -   - -  -       % '#'"!!&+#.&70%=4)>5)90$ %%%---+++***222777777///##$"## -     - -            -   -   -   - -    -        -      - -  "+,!#  #  ""        - - -    - - - - -    - - - - - - - - - -     - - - -   -(  !!    !"  $$!!& #   -   3#1,"2.#       - - -  - - - -      - - - - - -  - - - -        -  - - -                                                                                                            -  -  -   - -  - - -     -  - - - -    -   - - - -      - -   -  -    - - -      #)"'*#                                                     -      -  - -          -      $#!""$ "#%" !#% $ "' *#/(7/$>5*>5)90#"""'''...---000:::>>>AAA@>;$#$$#$     -        -     - -        -     -                 $'$  ! ###$%""   #    -  - -    - -   -   - -      - - -       - -     !   -  -!"! -  - "$"%! & )"'"#  - -    -5&1-"3-!8.#  -    - - -     - - - - - -   -  -  - - -     - - - - - -         -                               -                                                                         -      -           -  -  - -   - -     -     -      - - -  -     $*#&)"                         -                -    -     -    - - -   -     -  - -     ! "!  ""! &!&!""& #!""#! ##!#% #" ' ,$0(7/$=5)>6*8/####))),,,---666@@@GGGTTTXQH++*$$$  - -       -  -  ! -    -         - -         '/#!*  ! !$%'&&"   !!  !)     -   -    -    - - - -     - -  -         -      !!    "!"    -%& ' '('*!)"'& -  - !$" 8*"50$6/#90$:2'        - - - -   -     - - - - - - - - - - - - - - - - - - -  - - -  - - - -               -                               -           -      -                                -       - -   -   -     -       -    -         - -     -      -  -       $+$&(!                              - - -   - -     -         -    - -        ! !  ! ##"!!!!###"'"$#$%$"""#$  ! "%*#0(80&=4)>6*8/#$$$)))***111===DDDOOOSSSTPJ210%%%          "&  -                !!  !! "%%$%"!  "!!  -!*  -       -  - -      - -   - -    - - -    -       - - -  ! -!! !&*(!  -"    ) %+   #*")'  -  -#'*:.%93'92&:2%  -   -  - - -         -  - - - - - - -    -  - - - - - - - -     -               -                                                 -                                    -    - - -  -   -       - - - -    -   -   -    - - -  -  -    -     -    -"+#%'!                     - - -       - - - -   - -  - - -  -           ! !!!"!$%% $!!"!$#"&!$&!$%%&"""###  %*#-%7/%=4)?6*90$$$$)))...666===DDDVVVJJJMJG0//%%% - - - -                 - -        ",!,!"    "#%%$#!  !""  '  - - - -      - -    - - - -      - - - -             -  ! - -#"!'"(! !))%%,#,"%   + , )  -&)*%) -1 =2'<6);4':2&       - -   - - -  -  -     - - - - - - - - -   - - - - - -     -                                                  -                - - -                             -     -  -  - - -  -   -     - -  -       - -  - -   - - - - -  -  -    $*#%&                  - - - - - - -  - - -  - - - - - -   - -  - -   #       !  "$ "$$%'!("'!$"!!#% &!&!& $#%#$$$ #$# - ~nnm]][\\[\\Z #( ,%80&=5+?6+"""%%%***---555<<3(>7):2%;3&  -    - - - -    - -  - -    - - - - - -   -    - - - -    - - - - -                                            - -  -   - -            - -                             -  - -     - -        -        -        - - - -  -  -     -   - - -   -   - - $)#$& "                - - -  - - -     -   - -  - - -    -   - -#     !#"!  "#$&!###$$& '"'"% "$$$& & $'!& %%#"#""#$"  - >>>qqq  MMMOOO!(!,%5.$<3*=5*###'''***---777===EEE___iaU<;;*** - "      " *3($*   !!"#$%%$$#!    !       - - - -       -  -       -    - -  - -      -    - -      !"' *%''&%(%(")!-'+$) * +%,&,$,#+ -"1&,#,$-"#" ' -+& + :,"?5)?7*;2% - -      - - -  - - - -    -      - -     -    -  - - - - - -   - - -                  -                         - -               - - - -                                         -  -                -   - - -         - -   -   - - - -   -    $($$% *$                - - -   - - -   -  -  - -       -  -  - "    !! "#"$##$& & '!$%%& #& '"& % #$%&!#%$)#)#& %#"%###$! - 222@@@KKK   FFF#("0) ;3*;3)$$$(((***///:::>>>FFF[[[_YP556((( !    !* !   "#$%%#"             - - - -        -  - -     -   -    -  - -  -  - -  -    -      #&#'$($' *!-&'! + *$+%-$)"%0',')%0"%$'*,*#.>>!:::>>>EEENNNPPPQQQRRRPPPKKKOOOQQQQQQPPPQQQRRRRRRSSSNNNOOOUUUWWWUUUUUUTTTRRRVVVUUUTTTUUUUUUWWWSSSSSSRRRRRRPPPOOO      !   "$%$#     -  - - -        - -         - - -      -       -   - - -   - - -  % -        & )"' -! !  $ #)*')1&2) -))&2!% )  -$,$2>>:::===BBBBBBAAAAAA???AAA@@@@@@@@@???@@@AAA======>>>CCCAAA???!!?6)      "!   "#"!   -   - - - - -  -     -  - - - - - -     - -   -  -       - -  - - - - - -    - -  '     !!$#$& ( (    %/ 3&4'5'.)+)/#  - -(%*-&46(<3% -         -     -     - -  -    - - - - - - -   -  - - - - - -     -                       -             -                                                    -   #&##"!        - - - - - - -      -    - -        - -      -     - -    "% '"# %%% '!(!'!#$& ' ' +%+$)")#*$("("+$*#*$+%)")#*$)#*$*$(")#,&-'+%*"*#' %#$#  -$$$###!!!###$$$$$$%%%&&&&&&&&&%%%%%%%%%$$$$$$######$$$%%%$$$&&&((((((&&&&&&%%%######$$$'''###%%%###$$$###$$$"""###%%%%%%##>5(90$5-"0)    ""     -       - -     - -   - - - - - -   - -    - - - - -  -  -      - - - - -  -   - $ -     -!  &&#&$'$+%.%.$.%,"'0#,$/%- %-1'0*+*-+2   *  +) $8%>2'=6(<2%   -          - -      -  - - -  - - - -      - - - - - - - - -    -   - -    -               -       - -                 -                                                                            - -  - -  !$$%"     -       - - - - - - - - -    -             - - -    -    - -       !"'!(##& ("& &!)"*$("!%%(!("+$*$)#)#*$*$)#*$)#*$+%)")#*$)#+$+%)#-&/( ,&-&+$*#' &%% "  $#$$$$"""!!!"""$$$$$$%%%&&&%%%&&&%%%%%%&&&&&&%%%$$$$$$$$$$$$%%%$$$$$$&&&%%%&&&$$$""""""$$$%%%$$$$$$%%%%%%$$$######$$$$$$%%% >5(:2%80%6/$1+!   !!     -        -       -   - - -  -     -  -  - -  - -   -   -  -  - -   - - -  -  -    -   -#""%$#$%%%%&*&)%-) 0,"/+ *&*&-(/(* %0&0)-+/*2   10,/ ' -#<*">3'>6):1%  -         -     - - - -    - - -    - - -  -  - - - - - - - - - - - - - -     -               - - - - - -  - -     - -   - - - - - - - -  -              -      -            -     - - - -                      "%%#    -         - - - - - - -    - -  - - - - - - - -           -   - - - -    "#!!"'!*$'!(#*$)#("*#+$)"&& )"'!*$+%+%+%+$+%,&*$+%,&,&,&*$+%,%("+$,&+%+%-'-',%+$+$)!& %'!#  %%%### """! !  !!!###$$$&&&$$$%%%%%%###%%%$$$$$$%%%%%%###"""""""""""""""###$$$$$$%%%%%%$$$$$$######$$$$$$$$$$$$######"""######$$$ =4'=4';3';3(6/%/("          - -      -          -! - -         - -     -    -     - - - - - -  -  - - -   -    !#%! -$*%,&*#%%/(0) /)-)*',(1*!1) !2(4* 0, 1*0% )" -(1!) -%?.%=2'>6):1%  - -          - - - - - -     - -  -   -  - -   - - - - - - - - -   - -   - - -       - - - - -   -   - - - - - - - - - - -   -  - - -   -  -       - - - - -     - - - - -  - - - - -    -     - -             -   #$#           - - -   - -     -   -           - -    -    -   -  !$$""$(")"&!%("(")#+$+%*#& (!(!)"*#,%-'-&,%-&-')#,%,&,&*$)",%,&)#,&-&-'/) /( *$,%-%+$(!& & (#'"  $#$$$$""""!"  """###$$$%%%###$$$%%%######""""""$$$$$$"""!!!""""""###"""######%%%&&&'''$$$%%%###"""$$$$$$###$$$$$$###"""!!!"""$$$!!>4'=4'>5);3(4-#,&$         -      - -             -" - -         -     - - -   -    - -  - -   -  -  - -         "#%$%)!'(! "0"0#2&0%.$1&3(!6*"-"4(4* 2-!2).' ) ! 1!' -$>.%=3'<5':1%  -      - - -   - -    -    -    -     -  - - - - - - -     - - - - - -        - - - - -    - - - - -     - - - -        -  -   -    - -   - -    -   - -                     - - -   - - - - - - -  "$"          - - - - -        - - -  -  - - - - - - - - - - -    -        -  " !  !$&!% % %%& )"*#'!'!*$' )",&-&+%(!' ' *#+$,%.'-&-&.'-&+$-&-&-&,%(!+$+$.'/(.'-&,&-'-&/(/'-%*"'!("(#'"##""%%%$$$###"#"!"!!!!!!!###+#0'3*90$$$$&&&(((***444>>>CCCOOOUUUBCA0//&&&lll__^MML888...""#$$$#########%%%%%%%%%%%%%%%%%%%%%"=3%<2%>5(>5*7/%1+!(""   -      -       -                -#  -              - - -   -   -     - - - - -   -     -  -"$''  - - ! #*1&-#1&0$+,0"5*!1, 2(- (5 5!0 0 ( -& =-$;1%:3%:1%  -         -  -  -  - - - -    -  -        - - - - - - - - - - - - - - -   - -       - - - -  - -               - - -    -      - - - - -   - -                       - - - - - - -        - - -                  - "#"     - -   -   - - - -  -     - -  - -    - - -  - -  -       - - -    -  ## !""#%& '!'!& (!+%+$("(!*#)"+$-&.'-&+$*#)"+$,%-&.',%,%)"' +$.'.'0),%*$+$+$.'0) /(.'-&.'.'/(/(,%+#)#)#)#'!%   ##"%%$###"""!"!#$$#########&2)5-!6-!8/#$$$&&&(((+++666>>>EEEVVVUUU>>=.--&&&bbbZZZIIH333 !###$$$#####"$$$%%%%%%%%%&&&&&&&&&"=2$<2%>5(@7+92&5.$,&)#& "           - -       -                  -   -              - -    - - -     - - - - - - - -    - -  #' & $!%"     -! .%/(+  -"3+ 0+ 3(- -&# -  --&( =.$<2&:3%:1%  -          -  -   -       - -       - -   - - -     - -  -     - - -       - - -    - -               - -  - - -  - - -           -  -  -                                   - -         "#"   - -      -   -        -  - -  - -    - -         - -   "  ! #"!"#$% & $& '!'!'!*$-&,%)")"-&' ,%-&.'.',%*#+$-&-&.'/(,%,%' %*#/(/(/(+$&*#*#(!/(/(-&-&0).(/'/(-&+$)#("("'!& "  !!!"!"! !!!"!""""!!! $.&80%8/#7.";1%###&&&)))...888@@@III^^^SSS;;:eee\\[PPOBBA---!!!!!!##$$$$##"$$$%%%%%%%%%%%%&&&!=3%;1#>4'A8+<4(7/$2,!,&)#'"$       -     -          -       -      - -           - - -  - -       - -  -   -     -   %'% )$*%("& #-",".$0)/(2( 2$2",-$1, /- 3'+ $(" -$ *&) -=.$;2%92$:1%  -         -   - - -     -     - -     -     -   - - - -    - -    - -   !  -      -      - - -    -   -           -  -  -      - - - -    -   - - - - - -                  -    !""   -## -   - - -          -  -   -  - - -    -        - - - -  #  !##$##%$& '!& ("("& & +$.'-'*#*#+$+$+$/'0(0(-&+#,%.'.'.'0).'-&+$,%-&/(1*1)-%+$+$,$,%/(1* /(.'0) /(.&/'.&+#)"*#*$+%*$%! !  %'7.#=4(90$7.";2&###'''+++000<<4%;2#>4&A9+?6*:2&5-"0)-'+%*$&!#"                  !! !$%#"#! $#    - -     - - -    -       - - -    - -      - - - -   - -      -!    !!#&*%-()#) *.$1( 0)/*.)/(.'3+"2+!/%1&1+/- 2'+ $23 5&+&, =/%<2&92$:1%  - -       - -       -      - -   -    -  - - -       - -  - -  - - - -   -  - - -     - - - -     -   - -            -      - -      976431091%:1%6-!1%"    -      !!  %& -    - -              -  -   -    -   -     -     -#  "#$$##& & & )#& '!'!& & +%/(.'*#*#,$,$,$/'/'0(.',$+$+$-&.&2+!0(.&/'/(/(0)1*0)-&-&-&,$/(0*1* /(.'1* 1* 1* 0'.'+#+$,%-&-'-&(""#)#)"*##"&(!*"',%8/$=4(90$7/" %%%(((---333@@@EEEMMMccc```RRR>>>,,,$$$%%%$$$""#############$$$$$$$$$>5&;2$=4&A8*@8+>6*70$2+ 1* .(-'+%'"'"&!!!     !#" ' *#& $&(!& %&%$' '!  "    -     - - - -         - - -  - - -   - -   - - - -   -   "  -  !#+#-'-',$,$/&,(-).&/'.(.'/'/'%) 2'2, 0- 2)+ &* $+%/@1(<3':3%:1%  - -       -    - - - - -    -     -      -    - - - - - -  -  -  -    - -     - - - - - - - - -  - - - -    - -     - - -        - - -     -        -          RTTUUTRONKHGFEDBA@?=<;975421091%8/#5- 3'!      -    !!  -$&     - -          - -     - - -   - - -        -     -    "#%$$%$%'!'!(")#(!'!' )"*#,%-'+$&(!+#.&-&/(0(0).',%,$+#-&/'3+!0)/'0)0)/'-&/(1*0(-&/'0)2* 1* 1) /(/'2+!2+!3+"/'.',$+$+%.(.(.(*#%(!-&,%,%+#*#,%,%,$+#1)90$<4(90$8/"###'''***...777@@@FFFfff]]]LLL888$$$%%%%%%&%&$$%$$$$$$$$$$$$$$$$$$%%%<3%=4%@7)A8+@8+:2%4-!3,!0)/) .(,&+%+%("'!% % #!!!!!! #!!!$""'!&&&$#,%+#)#$%)")"' )!' %)!' "#%"    -      - -          -         -    - -  - - - -  $   !! $ %*!+$+%*$+#-$-%*'# !/%.(-&/$,*- 5*4."2."7( ,)+# (.' -0?2(=4':4&  - -        -    -    - - - -  -   - -  -  -   - - - - - - - -   -     -     - - - -   - - - - - - - -                   -   - - -  - -            -        STUUTSQNLIHFFEDBA@>=;:865321/91&8."3+4'"        !!  -#%  - - -     -      -  -   - - - -  -     - - - - -   -   - -    $& '!(!' ' ' &("'!&'!'!(")#)#*$(!,&-&&(!,%-&-&/(.&-&/(/'-$-%/'1)2+!/(.'0(1)0)0)1*1*/(-&-&0)0)3,"4-#2* 1* 5.$2+!2* 1) 0(+#+#-&0) 0* /)+$(!,%-%.'.',%-&0(1).&.%1):1%<3'8/#8/"%%%(((,,,000888@@@```WWWGGG111%%%%%%&&&&&&&&&%%%%%%%%%%%%%%%$$$>4&>5'@7)@8*@8*;4'5."4-!3,!4.$1+"/)!*$-&,&+$+%*$("& & '!& (!%$%(!& &$&*#$$+$+$*"*#)"(!.&.&,$*"*#,%+#)!*"' ( *"*"$$#""  -                 -    -   -  -      -   -   - #  -     $%( '"'"'!). 3$) -0/!,!*$,4'5*5/#3.":'!/*0-1#2) 1?3(=4';4&  - -          - -  -    - - - - - - - -       - - - - -       - - -   - - - - - -  - - -   -  - - -               - - -       - - -  - - -          -    QSTUTTRPMKHGGFEDCA@>=;:754310/91&7-!2)3'#               - -     -         - - -      - -  - - - -              $&(!*#(!("&' (")"("*#)#*$,%,&,&-&1*!0) *#*#.'.'.'/(0)1*0)/'-%-%.&0(1)1)0)1*0).'1*1*1*.'-&/'0)1* 3+!4-#3,"0)6/%2* 2* 1) 1( +#+#-&0)2+"/'/(*#-%0(0)/(.'-&0)0(0'/&3*:1%<3'80#80#&&&(((---111999YYYOOO???)))%%%%%%&&&'''&&&%%%%%%%%%%%%%%%%%%>5'>5'A9+A9+A9+=5(6/"4- 4,!5.$3,"2+",&/(/(-&-&-&-&,%,%+%,%+$*#)"*#,%,%*")"+#*#(!( *#,%,$/',$+#0)/'-&,%-&.&,$*#*"'(!)!+$&%&""   -     - - - -       - -     -     -       -  - #  ! ! - -  ( +$$   -  #,!1'4*5* 4,!3-"6)!0  *) %0' -1>1'=5';5'   -           -  - - -   -    - -     - -       - -  -   - - - - - -   - - -                         -    (((((())))))%%%!!! - - -  - - -        -  QTTTTSQOLJHHGFEDBA@>=;975431/.70&6, 1(2'&               -  -   - -  - - - -   -   - - - -      -  - - - -  - -  -  -  - -   -  %%)!+#*#*#*#'!+%*#)"+$+%*$,&+$*#,%2+"/(+$,%0) 0)0)0)1*2+ 1)-%.%/'2)1)1)0(1)3,!2+ 0)2+ 1)0).&/'1)1)1*4,"5-#3,"*#5.$3+!2+ 2* 0(-%,$.'2,"1* 3,"/(+#.'2+ 2+ 0)0(1)2+ 5,!0'/&4+;2&<4(90$80#&&&)))---///UWTFFF666%%%%%%&&&&&&&&&&&&&&&&&&%%%%%%%%%=4&=4'B:,C:,C:,>7)81$4, 3,!6.$6/%0* )#0(0(.'.'/'0)0(/'/'0)0(.&,$.&/'0'/&,$-%.&+#+#-&,$/&/'/'0(4, 2*/'.&/'0(-%,#,#*")"*#,%' ' ("& $   - -   - - - -        -    -   -     -        -  - - -   !  #'+!-$)%" # $ - ,)$(,!3(6) 4(2*2+!3) / ).)-/$ 1C.&<6(;6'   -        -     -      -          - - - - - -    - - - -         -                 -    """###%%%'''((((((((((((%%%!!! - - -         - -RTSTRRPNKJHHFFECA@@><;876421//?5)6,1(3')        -    -   - -     - - -  - - - -  -   -      - -       -  - - -     - (!(!*#,%+$-&)"*#+%*$' )"*$-&.(,%*#0)3,"/).'-&.'0(1*!1+!2* 3,"3+ .&0'1)3*3+4, 0)/'3+ 3+ /'1)2*0(/&0(2)2)2*4,"4-#4-"0)5.$3,"2+ 3,!1*-&-&1)3+!3+ 1)/',$/'4,!5-#4+!2* 0(3,!5-"3+0'5-!<3'=4(90$"""&&&***---```BCB---$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&=4&=4&A9+B:,B9+=6(;4'81$4,!6/$6/%1*!/(6.#5,!4,!2*2*1)1)1)2* 3+!4-"/'/'0'3* 2)1(/&0'1(+",#0(.&0'/&0'2*4+ 2*/'/&0(1(.%-$,$,%,$/(1) *#(!(!%$       - - -       -  -      - -    -    -   -  - - - -       $( )#)$-( +%/$3$6%.$ 5!2%0&.'$1"7'9) 1+ ,(/(- ( +&,3% ,G1*:6'96'   -         -  - -     -  -        - -  - -  -   - -         - -              -  -  28 = B$!!!"""$$$&&&''''''((('''%%%""" - - -  - - -       PSSSSRQPMKIIHFFDBA@?><:766421//:2&7.!2*3(*   -           -  -   - - -  -  - -     -   - - -            -     - - - *#*$,%.'-%-&)"(",&+%(!)"+$-'/(-&)".'3-#1* -&.'0(1) 1* 2+"3,!4-#2+ 1)0'0(3*3+5-!0).&2*2*0(3+ 6-"4+ 2)1)2)1)2)5-#5-#5.$5.$5.$4-#2+ 3,!0),%-&0(2* 3+ 2*/',#/&5-"6-#4+ 2*2)6."8/$6-!2)6-!<4'<4'80$"""&&&pjjhdgKKL&&%###%%%&&&&&&%%%%%%%%%%%%$$$$$$>5'A8*B9,@7*?6*=4(:2&7/$7/%6.%4,#4,#3+ 3*5,!5,!4,!2*3*4+ 4+ 6-"5, 3*/%2)4*3*3)1(2)2)/%.%1)3*/'1)0'3+5-!3*0'.&1(1)0(.&.&-$,$0)2* ,$)"' & %  -  # - - - -   -   -   -       - -  - - - -  -  -  -  - -     ! %(%('+*!)(,(0) 3-#1(0&2(2+!/)/)-$). 6'0*0+ 2) . % " - (2$ .C-&96&95& - - -   -       -  -                       - -            -           -  ( * ,/5: >#!!!"""$$$&&&'''''''''&&&%%%""" - - -        PSSRRRQPMKJJHFEDBB@?=<9766321//G7+91#5- 5+ +         -     -  - -  - - -   - -  -  -       -  -  -      - -   -   - -   - *"+#,%.'.'/()"+$-&,&+$.'-&.'/)0)-&0)3,"1*!/(/(/'/'2+!4-#3,"4,"2+ 1)0'1)2*4, 5-!3+0(4, 2+2*4,!5-"5,!2)1(3*2)2)6.#6.#6.$5.$6/$5.#3,!3,!1*-&.&1)3,!4,!3+ .%*"/&5,!7.#4,!2*2*7.#90$6."2)6-!<4'=5(91%hhhgff]\\SQR###"#"$$$%%%%%%%%%%%%$$$$$$$$$$$$kkkjii<3%@7)D;.C:.@7+=5);3'91&90&90'6.%5.$5,"5,!6."6."5-!4+ 4,!4+ 5,!5, 7-"4+3*4+ 6- 6, 4*1'3)3)0&0'6, 7-!3)4*0'4+7."5, 0'/&1(2*2)/'0'.&-%1)1) ,%)"(!& )#   -  #  - - - -           -    -   -  -  - - - -    -    " &!)%,) *'-&-$.&4+"4+!3+!2+!/*1-!2+ ) , 6*!4-"2* 3(.) /,/ 5 " -+ B.&84%94% - - - - - -            -        -              -           -          -  # #!" -$ -& ) + 189 E&"""%%%'''&&&''''''&&&%%%"""     -   NQSRRSRQOMLJIHFDDCCA>=;8765431//(B7(9/!7- 7* ,               - -       - -  -    - -   -  -  - - - -      -  - - - - - -    -  )"+#-&.'-&.&)",%-&+$,%.'-&/(0(1* 0(1+!4-#2*!/'/(0)1* 3,"5.$4,"2+ 3+!1)2)2*3+5-!7/#4, 1)4, 3+2)3+4+ 3+ 0'0'4* 4+!3+ 5-"6.$6.$4-"6/$4-"3+!3,!3+!/'/'1)4,!5-!4+ /&+#0'6-"8/$6-"3*2*6."91%7."3*7/"<4'>5):2&UUUMMM>>>)))$$$###%%%&&&&&&&&&&&&&&&&&&]]]]]]YYYWWW]]]```bbb>5'A8*D;-A8+@7+@7*?6*;2';3(:2(6.$5-#7.$7.#5-"3*5-!7.#5-"5,!6-"7."8.#6,!5, 7-!8."6,!5+2(3)4*2(2)7- 5+5,3*2)6, 8."6-!1)1(2)4+2)1)1(/&.&0(/(,%)"'!'!*#   -  "  - - -        -       - -    -  - - - - - -     !"& (#*%,&,"%%5( 4'2)0, -*/*5* 7) 7( 5'2+ 5-#4) - )(" $ 7"! -'B-%;6(<6( - - - - - -                                          -  !    $ ' ( -49C%"""$$$%%%&&&'''''''''%%%!!! - - -  - - -   - -      PSTRSSRPONLJIGFDDCCA>=:876642001* ?4%9/"7- 7* *   -     -    -  -       -  -   - - -   - - -  -         -   - -   -    ,$,%/'.&.'/'+#-&/'-&-&.'/(0) 0) 0) 2+!2+!4-#4,"1* 0)1) 2*!0)5.$5.$3,"3+!2*1(3*5, 7/#6."5, 2*5-!4, 2*4+ 5,!5,!2)2(4+ 7.#4+ 4,!7/$7/$6.#6/$4-"3,!2+ 3,!/'/'1)4,!4+ 3*/',#2)8/$7.#6-"2*3+7/#;2&7/"3+8/"<4'>6)999222&&&###%$%%%$''''''''''''''''''EEEBBBAAA???===GGGOOOTTTZZZ^^^?6(A7*B:,A8+A9,A8,>6*91&:1&:2(7/%6.$90%80%7/#7/$7.#6-"6-"7."8/#8/#9/#7-!6, 7-"9/#8.#7-!4*3)5+1(3*6,6-6-3)3)7-"8.#6."2*1(4+3+4+1)2*1)/'.&-&,$)")"'!)#   -  - - - - - -  - - -  - -  -    -      -    - - - -   -  "  #(" )+)$    +)).(,(/+'% '(+%1+ 1* -#)+! -&8$$ ' A-%<6(=6( - - - - - -                               -  !    - - - ! % ( - 28A#"""$$$&&&''''''((('''%%%!!! - - -   - - -   - -  QSUUTTTRQPNLJHGFEDCCA><:976532104-"=2$;1#8-!7)'      -#    -       - - -  -   - -  - - -    -    -    - - - - - - !  +$,$0( 0(.'/'+$,%.&-&.'-&0(.'0(/(2* 2+!5-#6.$3,"1)6.$1)3,"60&6/%5-#3,!3+ 2*4, 5-!6."8/#5, 3+5-!4, 3*5,!5,!6-"4* 3)4* 6-"3* 4,!7.#8/%7/%5.#6/$5.#2+ 2*.&.&2*6."4,!2*.%*!2)90%7.#5,!3*4+ 90$=4(7."3*80#>5(?6*&&&&&&$$$ $$$&%&'''&&&&&&&&&&&&&&&(()'''&&&'''&&&$$$)))555>>>CCCLLLDA?@6(@7)A9+C:,C:-D;.@8,=4);2';2'7/$7/$7/$6.#7.#7.#5,!7.#6-"7."8/$9/$:1%8.#5+ 8-":0$9/#7-!5,4*6,2)4+6-7- 7. 5+4+8.#9/$6-!1)0(4, 5, 4, 2)2*0(.'0)0),%+$-%(!*$    -    - - - - -     -     -     -  -    - -        "$))* -  - 1%1%*#' (*#/(1* 2% -*5"2!1"7#& -( -@,$=6)>6( - - -                   -     -      - ! -& * - 3 7>"###%%%&&&''''''((('''$$$!!! - - -  - - -   -   SUVVVVUSQPMLIGFFEFEC@><;976421107/$<2$<2%9."8) %  -  -    - &   - -     - -   - - -  -   - - - - -      -      - -   !    ,%,$.%.&/'.&,$,%-%-&/(.'/'-&1)0)2* 2+!5.$6.$3+!3+!2* 1).'4-#6.$5-"4,!3+ 2*5-!4+8/#90$7/#4, 5-!4+ 3+6-!7-"6-"5+ 4*4*8.#5,!5,!7/$80%6.#4,"5-#4-"2*2*-%-%1*6.#7/#4+ -$+"4+ :1%8/$5,!3*4+ 90$<4(6-!2)90#?6*@8+&&&'''%%%###$$$&&&&&&&&&%%%&&&&&&'((((()))((('''&&&%%%%%%%%%%%%(((111987?6(A8*C:,D;.B9,<4';3&;2'<4(90%8/$80$80%6-"7.#7.#5,!5, 6-!:0%:0$:0%9/#5+ 7-!:0$9/#5,5+3)6,3*5,6-7. 8/!6- 6, 90$:0%6."2*1(4, 5, 4+1)2*2*/(2+2*-%,%.&+$)")"  -  - -  -  -             !! -     -     - #  !! !!!& &$""$'&   &). 3'2'1$8%6"6!5%2*1+1+ 4"# $ /   /& -* -=)!=4'<4'            -        -  - -     " & + - 2 79 E&$$$%%%&&&''''''&&&###  - - -   - - - -    NRUXX XWUSROMJHGFFFFEB@>=;86532110:2'<2%=3%:.#8*!#  -!    -  %        - - -   - - -    -       -    -        -  -#    +#+#-%/'.&.'+$-%-%/'/(0)0(/(2* 1* 2* 2+ 4-"6.$1)3+ 2* 2+ 3+!4-#3,!2+3+ 4,!3+5-!2*6."91%90$6-!6."3+3*7."7.#6,!0'2)6,!8.#7-"7.#7/$7.#5-"6.#3+ 1)80%5-".&/'3+ 8/$80$5,!.%.%5,!8/#7.#4+ 2*4+ 90$<3'4,1)90#?6*A8+%%%&&&%%%%%%%%%&&&&&&&&&&&&''''''&((())******(((&&&&&&&&&&&&%%%&&&%%%%%$?5'A9+C;,C;-B9+>5(;3&<4'<4'91%91%80$80$80$8/#90%90$4+8/#;2&;1%:0$9/#6- 5+ 9/"9/#7- 8.!5,8.!5,6,7. 8/!9/"6- 7-!:1%;1%6."3+2*4, 4, 3+2)4, 2*0(3+1*-%-%.&)"*#*#   - -  -   -           3!  ( !    -  - -   '!     $"%&#,$-#/"! &.'1+ 6,#4*!2(2(3)0%)1%6-#5-#4-"7&! # 6!),2!) ) 9%<2&=3' - - -               - -  - -    -  !      - -  -  - - - -   ! & ( + 08: D%###%%%&&&&&&&&&%%%###  - - -   - - - -  -FKORTVWW VTQOMJHGFFFEDB@?=:7642211091';1$;1$9-"8)  ""      !& -    -  - - -   -  -  - -  -   - - -      -       - -  - - -  ! -  *"-$/'/'-%.&-%.&.&1* 0)2+!2* 1) 0)0(1)2+ 4-"70%1)3+ 6.#3,!4.#6/$6.#4-!3+5-!6-"6."5, 7."90$7."6."6-!3*3*7."7."7."2(1(4*6-!3*5,!90%7.#5-"80%6.#3,!92&4-!.'/'4+ 80$90$6-!/&0'7."90$8/#7.#6-!7.":1%=4(4+1)91$?6*@8+%%%%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''''''''&&&&&&&&&&&&&&&%%%%%%%%%""!|||kkkvvvvvvlllhhhkkkHGF=5&B9+B:,B9+A9+>6(<4&>6(>6)<4';2'80%6."90$:1%:1%90%;2&;1&;2&;2&;2%:0$8.!7-!8.!9/#9/"9/"7-9/!7. 7. 8.!7. 9/"7-!6, 90$;1%7."4, 3+5-!6-!4+2*4, 2*0(3, 1)-%.&-%*#+$+$     - -  - - -            .:(#3 3 *%     -  - -   &!  !! !{{{yyy$( %#)$,&-%+#-%0* 0* 3*!5-$2) 1'2))+ 6.#7.$5-"5' ! 54#5&2!+' 7#>3'?6) - - -               - - - - - - -                !    - - -       -       -% ( * /5: B####%%%&&&&&&&&&$$$"""  -   -  CHLNQRSSTRQOMJIHFFFDBA@?=:764320//@6*;1#90"8, 5'        -#     -  - - -  - -     -  -  -  -   - - - - -     -  - -    - -     *",$.&.&/'0(/'/'0)1* 2* 4,"3+"2+!1* 0(1*3,!70%6.$3+!3+!4,"5-"5.#6/$70$6/#4, 5-!6."6-!6-!8/#9/$8."7."6-"4+4, 6-!7."6-!4+1(1)5, 5,!7."80$4,!4-"70$7/$5-"91&4-!/'0(4, 90$8/$5,!0'1(7.#90%7.#6-!6-!7.";2&=5(6-!4+;2%?7*!!!%%%(((+++455>=?E@BKGHIJH;:8))(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$%%%"""iii```ZZZQQQKKKKKKMMMPPPTTTTTTSSSTTTXXX^^^uuu=5'A9+B:,B:,@8*=5'<3%<3&=5(<4';2&:1&8/$91%:1%90%8/$90$;1&;1%;1%;1%;1%9/#:0#;1$=3&<2%;1$9/!90"8. 7. 8.!6-8/!6, 3*7.":1%7."4, 3*5, 6."5-!4, 5-!3*1)4, 1*-%-%,$*#+$,%   - -   -           -  -  &$"-'  -       -    &!  !!qqqrrrsssjjjdddrqs "&!(#,%/(-'-'0+!/* &!2,#.*-(-%$*0(6/$6/$4,!6( !1  )-$8$@5*C:-    -  - - - - - - - - - -    = 8 3 - ( & ' & -% -$ # # " !   - - - - -  - - - -         % ) + -5: ?"$$$&&&&&&&&&&&&%%%###  - - -     -  @DHKMNOOONMMLKJIHGFDBA@>=;8643210.H<,<2%:0#7+ 3%  -$      -     -  -   - - -  -     -   - -  - - -   - -  - - -   -        -  -   +$.&/'/'/(2)3+!2* 2)1(3+!3,!2* 3+!3+!0)3+!5.#80&8/%4,!3+ 4+!5."6/#6/$7/$6."4, 4, 5, 5, 7."8/#9/$7."8.#8.#6."6."6-!80$6-!3+1(3*6-"5, 5-!81%6-"5."80$6.#4,!70%3+ /'0(3+90%80$4+ 0'3*90%;1&7."5, 7."7."=4(=4'7/"5- ;2%@7*"""$$$'''+++678?>@D@BJHHEFE765&'&POPHFG777######$$$$$$$$$$$$$$$"#"ZZZIII======888999777777:::;;;>>>???AAACCCHHHNNNPPPYYY?6(@8*C:,C;-C;-A9+>5(<3&>5(=5'8/#90%8/$8/#80$90$90$;1%;1%;2%;1%;1$:0#:0#90#<2%<2%<2$9/"90";1#9/!7-9/!7. 8. 4+3*9/#90$4, 3+5, 7."8/#7."5-!5- 2*1*5-!2+-%,$,%*#*#,%    -  - -            -  - !   - - - -   - -       " qqqvvv{{{LLJ>><---555554TTRddf#$(#,&-$,","-$2$/  -0!-") ( %.#2+ 4/#50$5-"8*"% -" -4./7).$:%A5*C9*     $kA"];_6[4U0L*E&>!95 0 -* ' -' ' & -& % -$ "!         -  -        # ' + + 0 69 D%&&&&&&''''''&&&###  - - -   -  - - 7=ADFIJKJKJJIIJJJIGGECB@>=;9643210.F:+>3'<2%7+ 3%  $#!          - - -    - -       - - - -  -    - -    -    -      - -  -     +#-%/'.&-%0(0(1(1(1(3* 3+!2* 4,"5-$2*!2+!6/%5-#7/%2*3+ 5-"5-"60$6/#6/$6."6-"4+3+5, 7."8."9/$6-!5,!6,!7/#6."6."90$6."3*0(3*6-"5-!5-!81%80$5."80$7/$6.#80%4,!1(2)4, 90$8/$4+1(5+ ;1&;1&8/#6-!7."90$=4(=4'7.!5-;3&@7*"""$$$(((,,,799@>@EACNKMEEE443$%$ONOECD544 ""!"""#""#######""DDD555222000000---///,,,---//////333555777777<<<@@@CCCFFFA8*C:,C;-D;-B:,?6)=4'>5(<4'90%90%7."80$:1%:1%9/#;1%<3&;1%;1%:0#8.!9/#9/"=2&<1%<2$9/!:0"<2$90!8/ 8/ 9/!9/"5+5+90$90$5, 3+5- 7/"80#7/"6.!4, 2*2)5-!3+ -%-%.'-%+$,%  -  -       -    -    -  -   - - -           nnnqqq~~~RSPCCB333)))(()(((''((((AA?VVUZ[^''&*"/&,")   " !& -# &0%6+#5+!6,"7/$5.#5+ +# 45#1!3$-%:%@4)D:+ 'sF(fB4cI\5W1P,I(C%=!9 1 + -( -' -' -' -& -& % -$ #!           -        " ' * + / 5 8C$&&&&&&&&&&&&&&&$$$  - - -      7<@BDDEFFFGGEGGGGIIHFECA?=;965431/6.#C7)>4'<2&7+ 1" "     -    -     -  - -         - - -  - -  -   - -    - -  -   -  - - - - -  -   +$,%0(0(0(3* 0'2)2)1)2* 4,"2+!3,"4-#4,"2*!5-#:2(6.$2*3+ 6.#5.$6/&5.#70%6.#7."3+3*6, 7-!7.":0$7."5+ 7-#6."6."6."6."5-!3*1(4+ 6-"4+ 3+7/#91%5/"81%80%70$80%5-"0(2)4+8/#8/$4+ 2(5+ ;1&<2'90$7-"7-":0$>5)>4(6- 5,<3%?6)"""%%%'''...688@?@FDFURTKEA121"##BBB211 "!!""!"""""""!!432111(((%%%&&&'''))))))&&&&&&'''((())),,,...///222666999;;;BBBA9+B:,B:,C:,A9+?6)>5(>5);3&:1%:1%8/#90$;2&<2';1%;2%<2&;1%;2%=3&:0#9/":0#=3&=3%<2%;0#:0";1#8/ 7.8/ ;1#;1$6,7-!7-!90#5, 5, 6-!6.!8/"8/#6.!5, 3+2)5,!3+ ,$,$/',$+$-&   -               - -        -          - -jjjuuuVVSFFE776((((()))))))(()(()((('''''(EEBKKKLIH  -* -$)! !  # '&-!&.#5+!8.$80%6."6.". " -)  -,5(5 >3(F;, *oF/gG\4X1S/M+E%@#;!6 0 -+ -( -' -& ( ' -& -& $ # !                 " & ) + / 3 7A#&&&'''''''''&&&$$$  - - -   /6;?ABCCCABDCBCCCEFFGGEDB@><:75531/:1&>3%>4(<2%6*. # $!  -     -     -            - - -  - - -  -   -     -     - - - -      -%,%0(0)1)4+!/&/&0'2)4,!5-#2* 4-#5.$5-#4,"5.$80&6.#2*3*7.#5.$5.%6/$80%8/$6-!4+4+6, 8.!8.";1%9/$4+7-"7,"6,!8."7-!6,!3*2)4+6-!3+4, 91%92&4-!7/$7/$7/$81%6."2)2*6-!8/$8/$4+ 2(5+;1&<2&:0%6,!8.":0%@6*=4'5,5,<3%?5("""&&&(((.//8:8?>>GDFTPSHDA/0/!!!@@@0/0!! !!!"!!"""""""! )))$$$!!!"""!!!""""""!!! !!!!!!###$$$%%%'''***,,,---111888A9+C:,C:,C:,B9,@7*@7*@7+=4(91%:1%80$90$:1%;2%<2&<2&;2%;1%>4'<2%:/"8.!7, =3%>4&=3%;1#:0"<2#9/!9/ 90!;1#:1#3*6- 90#8."4+4,6- 6-!7."8/#6- 5-!5, 1)5,!5-"-%-%.&-%,$-%    !  -               - -   -     - -   -ihhmmmXXXIIG::9***(((((((()''((()))))))''((((&&'(()''&>?>HIH !,$,&)". 26 .#+ 2+!2) 3((0%.$5,"7/$6.#7/$/ !+5#4%6(: ( -=1&H=,'qC(d@\3Y2T/O-J)D%>" 8 3 -- ( -( ( ( ' % $ & -$ " !        -        " & ) + , 1 7>"&&&(((((((((&&&$$$    /5;>??BBA@@@>???@CCCDDCCA@><;866420<3(9."=3&:0#4(* -! !#$ !       - -            - -  -    - - -   -   -    - -  -  -      *#+#0(1)1)2* 0'3* 3* 1(4,"4-"1* 6.$6/%5-#4,#4,"4-"7/$2*4,!6."6.%5.$5.#7/$90%6."4+4+5+6, 7-!9/$8.#4+ 6,!5+ 6,!6, 6, 6-!3*1(4+7."3*4+7."7/#7/#70$70$6/#80$6-!2*2*6-!90$7.#2)1(5+ ;1&:1%90$6,!7-";1&@6*=4'4+6- =3&"""&&&)))/0/9;9???FDFOLOFCA/.-!""--- ! !!!!!!"!!" %$$###""""""""""""!!!$$$""" """######!!!""""""!!!"""$$$)))111666B9,C:-C:-C:-C:-A9,A8+B9,?7+=4(<3'90%:1%;2&;2%<2&<2%=3&;1%;1$=3&<1$9.!8-!<1$>4&=3%;1#9/!<3$:1"9/!;1#;2#;2$5+6,:0$8."5,5,6-!5, 6- 8/#6-!5, 5, 1)5,!6-"/&.&0(-&,$,$                     - - - iihiii___OOLBB@..-((())***+***))****((((((''((()((((()(((((((((332DFC((#*')&$"(,#.).(/)0*!0+!0) 2) 5+"4(3* 4-!6.#8/$0",0(&;$# ' @/&J>-$vB"k?#`=[3V0P-K*F&A$==<<<=??@@@@????=<:97421?6*8.!<2%8."3&'  $ - -$#!        -  - -          - -    -    -  -   -  -           -  -  -    -%-%1)3+ 3+ 2+ 1)2*3* 1(4,"5-"3+!5-#6.$5-#5.$70%81&7/$2*2*4, 5-#6/%6/$7/$80%7.#4, 4+5+6, 6,!7."6,!3*5,!6-"4+ 4+ 7."6-!3*2)4, 5-!1)3+6."6."5-!6."6/"6/#80$6-"2)3*5,!8/#8."6, 1'6,!=3(9/$8/"7-!8."<2&@6*=4'4+8/!>5($$$''')))121:<9@@@BDEJLLBA?,,+"""  !! !!!"!!! %$%""" """!!!!!!""""""""""""""""""#########"""!!!(((,,,C:-D;.C:-B9,C:-C:-B9-B:.@7+=5)>5)<3';2&;1%;1%<3&<2&=3&=3&=3&;1$;1$9/"7,;1#>4&>4&;0"9/ <2#:0!5,;2#;2$:1#7- 7- :0$9/#5, 5,6-!4+4,7.!5,4,5, 1)4, 5-!/&-%0(,%-%,$    -       -               - fffmmmdddRRRCCB222**)))'**)))))))(()+++)))(()''((()''(''(''((((''''''&&&432AB@ &!)%'%$ * .%-(/* 0+!1,#1-#.(1) 6+"9+#-6( 9,#8-#6.#2"$ ).%$9!* # ;*!A8)"r?d8]3W0P,K)G'A$>?>==<<;;:;;<==<<<<<<<<;:8631<4)8-!<2%8."2%% " )$!" -%$         - - - - -        -  - -    -   -  -   -    -  -      - -    +$.&2* 4,"3+!2+ 2* 3+ 4+!3* 5-#6.$4-"3+!4,#3,"5-#81&81&6/$4,!3+4, 3+!6.$7/%7/$80%7.#5,!4+5,!5, 4+ 7.#4+!2)4+!4+!1)2*4+ 3*1)2)1)2*/(1*5-"5-"4-!6/#5/#5."6/#4, 0(2)6-"8/#7."4*/%7-">4(9/$8/"7-!9/#;1&@5*=3(6, 90#>6( %%%'''***553=<;@@AEEGHHI>><***"""  ! !!!! &&'""" """!!!!!!######"""""" """###"""""""""!!!$$$###D:-E;.D;.C:-C:-C:.B9-C:.A8,>5)>5)=4(=4(=3':1$;1%<2&=3'=3&=3&=3&<2$9/!8. ;0#>3&?5';0"9/ ;1":0!8/ =3%<2$;1#9/!7- ;1$;1$7.!6- 7."6-!7.!8/"4+6-!7.!3+5-!5-!/&-%/',%.'.&    -        - -          -       - dddfffPPQDDE444)))***)))***,,,))))))**+***++,)))***)))''(&&''''&&&((($$$'''%%%+)*>>>ED?&")&'$'#*!*!+!1'4)!3)!2) 1) 0(3) 5( 1"0"0$4* 80%8' ' $ 3 4%6( 6 .%:'>5("vAk;^3Y0T-O*I'A"< 83 . ) ) -( ' ' ( ( -' -& & -$"           !!! $ ( ) * - 2 7@$&&&'''(((&&&###   & -) /59:;<==<<<;;::::9::9999::999998642B8+8.!<3%9."2%# %% '&&%    -      -       -  - -    -    -   -  - - - - -     -     ,%.'3,!3,!3+!3,!2*3+ 3* 3+ 6.#6.$4-"2+!3,"3,!5.#70%80%6.#1*3+3+2+ 4,"6.$6.#70%4,!2*1(4+3*3* 5-#1(.&1)0)0(1*1)1*1*-'.'.(-&.'0)0)1*5/#4-!2+4-!2*.'0)5-!6-"5,!2)-$5,!;2&7."5, 5, 8."<1&?5*<2'6, 91#>6("""&&&(((+++865?==A?@JGJGFG9:8()(###  !!!!  &%%### !!!""""""###""""""!!! !!!###""""""""" !!!$$$"""E<.D:-C9-C9-C:.C9-D:.C9.?5)>4(=3'>4(=3&=3&=3&>4(>4';1$>4'>4'<2%:0"9/!9/";1$>3&:0"9/ :0!:0!90 ;1";1#;1#9/!8.!=3&=3&8."6, 7.!7."80#90$6- 6-!7."4+5-!5-!/&-%0(.'-%/(      - -     - - -       -   -    - - ddcfffPPPGGH667''(&&&'''))*((*(()))**********))*))*******+++)))(((''''''&&&'''%%%%%%'''#""99:DEC,%+#*$ ).!-!$&0(2(.!  +!6/#8*"%  -4 %$ 42# 4!<3';4+"xB o>a7Z1V/R,M*G'B$A@BMKNOIF454&''###  !! &$$$!  """######"""######F=/D:-D:.C:-C9-B8,C:.B9->4)=3'<3&>4(<3&=3&>4'=3&>4'<2$>4&>4&<2$:0"9/!:0"<2$;1$9/!9. :/!;1"9/ ;1"<2$9/!7- 8/!;2%;1$7-!5+7-!8/#90#8/"6- 6- 6- 4+5-!6."1(/&0)/',%1)      -     - - - - - -   - - - -    dccjhiXWWLLK<<<)))&&'&&')))(()''(&&'&&'(()*****+**+**+(((((('''%%%###'''(((&&&''''''''''''&&&''')))959BBB$"'   - -  - 0(3*!/%')/#3* 5.#7*!# - -5 +.6"1!0=0&K?."s@f9\2W/S-M)F%B$>"9 3 . * ) -( ( ' ' ( ' -&#"" "!          ! !!""$ -& ) + + 0 57 %%%%%%&&&%%%### % - -& - -+ 289:<<<::::9999877665442333334322280$B7'6/!82$9-"3 ! )'%%& -& $          -  - -              -  -  -  -  -  -  - -        ! -  /'1*3+ 4,!3+ /'/'3+3*5-"6.#4,!3+!3,!3,!5.#70$91&6/#3+5, 6.#5-"5-"81&7/%70%1)0(.&.&.'.'.&*"( ' )#& ("("& $$#!!"$& '"*%,&,'.(*$& )#/(2,!3,!0),$2+ 7/$6.#6.!5-!7.#<2'?5*;1%4+80"###&&&***1119:9>>?BBENOQJFD010%%%  !! #!  !!!!!!F=/D:-D:.C9-C9-B9,C9-B8,>4(<3&<3&>4(=3&=3&=3&>4'>4'>4&>4'=3&:0";1#:0";1#=3%=2%;0"9.!;/"<1#:0";1#:0"7- 6- 7.!:1$;1$9/"6,7.!:0$:1$7/!5,5- 4+3*5-!7/#2*0'/(/'-&0(   - - - -     -     - - - -   `_^qpp\[[OOOAAA000'''''''''%%&''()))(()(((&&&&&')))*****+))*(()%%&###!!!!!!###&&&((((((((('''(((''''''&&&(((/,/@@AA>;)!  ! -   */ 0#.%.&2+ 4,"3)3)6,"4-"70%9.%+43!).-$ 2?2(B:+!uAj<]6W0T.O+K)E%?#9 3 . * * * ) ) ) -( ' -% -% -$ #"!      -      !!!!" # $ % ( * * / 3 6B%&&&&&&$$$""" % - -& - - 389:<<:9998888877655432101000100//>5(>4&6/"92$9+!. ,  -("  & %%  - -    "  -  -  -    -          - - - -  - - - - - -     -    - -  0)2+ 3+ 4,!4,!0)1)4+ 3+ 5-"4,"2+ 4-"4-"3+ 5.#7/$80%70#4, 6-!7/#5-"6.#80%7/$80%0).&+#(!' & & "   !$"#'",'/(+%)"0)3+!2+4, 4, 8/#<2'@6*:0#3*:1####''',,,3339:9;=?CFHOQTFCA00.&&&  ! !!!! &&&!!!  D;-B9,A8+A8+C9-C:-C9-B8,?5)=3'=3'>4'=3'=3'=3&<2%<2%;1$>4&>4&=2%;1#;1#<2%=3%=3%;0"9- :/"=2$:0"<2%<2$9/"7.!8/";2%;1$:0"6-6-9/"<2%8/#6-!7."5-!3*5, 7."2*0(/'.&-%.&  - -  -        ^]]iiiQQQAAA222&&&((()))(((''&''''''((()))))*(()'''''')))***(()&&&%%%$$$  - $$$'''))))))'''((('''''''''(((&%&=<>DED%')+.$(0' 0) -',$-&2+!4-"-%-$5+!4,"7/$8.$5%., -# -1) 1A1'?8* o=`5Y0S-O+K)E&A#=!82 , ) ) ) ) * ) ) ( -& %"!"!!        -  -    !""!!" # # -& ) * * . 3 6@#%%%%%%###!!!  - - -% - ( .479;<;:89877776776444310//.-----,-A8*:1#80#:3&;,"* -, -! ! !'"$%"#     "  - -  -   -          - -     - - -    - -   -        /(2+ 3+ 3+ 4,!1)0)4,!4,!5-"4,!2* 5.#4-"1*5.#6.#80%70$5-!6."6."4-!7/$7/$7/$7/%2* -& !"$##*$/(2+!4-"3+ 7/#=3'?5(8/!2)8/!###(((...3439::>@AEFGMOPA@?,-,&&& !! """ D;-E<.D;-C:-C:.D;.D;/B8,?5)>4'>4'>4'=4'=3&<2%=3%=3%=3%>4'>4'=3&<2$;1#<2%=3%<2%:/!7,:/!=2$:0"=2%<2%:0#7.!8/";2%<2$:0"6-4+7.!:1$:0$6-!5, 5, 2)4+ 4+ 1)/'0'/'-&.(          -UTSrsrVVVFFF888)))%%%%%%$$$((())((((&&&&&%&&&''')))***)))(()(((**+))*(((  - &&&((()))((()))'''''''''%%%'''111BBB -!-&,#.#.#/&1*!0).'/'0(5-#0(%+$6-#7-#9.$7.#4($ 324!7 + ) ?.%@8+71(!r?f9Y/U-Q+K(E$@"4'8. 2(3* $$$***///675<=4(?5(>4'>4'=3&<2%>4&<2%<2%=3&>4'>4&;1#:0"<2%>4&=3%;0"8- :/"=2$:0"<2$<2$:0#7- 8/";2%<3%90"6,3*6- 90#:1%7."5-!5, 3*4+4, 1)/'0'/'-&.(  - -    - -PMMwxx^_^III:::+++))))))(((((('''&&&&&&'''&&%$$#%%$'''((((((((((((''('''  -  '''(((((()))''')))&&&&&&(((00/???"($*%,&.'.&/) /) ,$)4$4$8)"/#* 3* 6.#7,#8-#6-"3(#$ -4+% 4* " ?,$?6)JB0#uBk<]4W/R+M)I'D%>! 8 3 / * ) ) ) ) ) ) ) ( ' -& % $ $#""!              ! !                       !  !! " ## % ( * * + 1 48 8*"$$$###  - - -  - - -$ - % ) 036899777765455555533210/.-+**()*))D:-8/"91#<3';)! $ ) &*  &)#&'& #    - -  - - -     - -              -  -  -  -  -       -      -   /(3,!4-!3+ 4-!2+1*4,!5-"5-"4,!1*3,!1*0)5.#80%91&70$5-!7."7/"4- 5."6.#5.#3+!.')"&  6- <3%6-0'!!!%%%***000986>=4'>4'=3&<2%=3&>4&>4&=3&>4'>4';2$9/!<2%>4&>4&<1$9. :/!<1#:0";1#;1$9/"6-7.!:1$:0#8.!6,4+8/!:0$90$6.!5-!4+2*3*6-!1)0'/'/',%-'*%   -  -  - yyycccLLL???///((('''((())))))((())))))'''''''''$$$###$$#&&&''''''&&&&&&   &&&((((((((()))(((&&&'''((('(&;<;DBC($&"*&-%.$/&+"$ )%  /$4+!7.$7,"8.$6/#3)* *# " -40" 8"<2%A9*!n>b7X1T.O+I'C$>!84 0 , -) -) ) ( ( ( ( ( ' ' -& -% $$#" " !!!!! ! !!  ! !!     !!   ! ! !                  !!! ! !!!!!  !! ! " # # $ ' * * * / 3 5C%%%%###""" - - - - - - % - $ - -% -* 035787777665455455532110.-,*)))))((NB16. 80#<3';' )& - -% -  ++!&%&       -    -  -   -      - - -     -   -  -  - -    -       - - - -   /'4-"5-"4-!4-"3+ 3+ 5,!5-"5-"4,!2*4-"3+!1*5.#81%92&70$6."7."8/#5-!4-!5-"4,"1) +$& "  - - - !!!&&&+++221<:8@<=GDFUSTPLI021&&&&&&"""!!!!!!""""""$$$$$$'''+++...333777000D;-D:-B8+A8+C:-D;.C9-=3&>4'?5(>4'>4'=3&<2%<2%>4&@6(?5(@6)?5(<2$8. :0"<1$=3%<1$8-9. ;0":/":0#;1$8/!5,6- 8/"9/"7. 5,5,90#:1$80#6-!5, 5-!1)4, 4, 1)/&/'0(,&,'+&  -  - -  ECCdddCCC===222((((((((((((((()))))))))((()))((('''((('''&&&######%%%'''     ((())))))(((((((((((('''"#!553CCC*%+'&",#(      (%* 4,!5-"6-"4-!3)*)7#9(!;& 6", @3(@6)B;1"r@g:X0S-O,L*F&A$,6- 80#<0%7" **$&" " ++ %$$       -  -  -   - -   - - - -  -       -  - - -  -  -  -            - - -  -    .&4-!3+ 4,!5-"2+3+4+ 5,!6.#5-!3+ 6.#5.#3, 6/$:2':3'81%7/#7/#8/#5-!4, 4,!4,"0( )"!  - - - - - - - - - - - - 221<::@=?GEGSTSJGF.0/&&&$$$######"""!!!$$$&&&,,,+++---222777999D;-D:-B9+B9+C:-B9,B9,=3&?5(?5(=3&=3&=3&=3&>4'?5'?5'@6)A7*@6)<2$9/!:/";1#=2%<1#8,:/!;0#:0";1#<2%8/"5,5-7.!90#8/!5,5+7.!:1$91$5- 4, 5-!3*4, 5-!1)/'/'/(,%+&)$  -  - @="9 3 / * ' ' -' ' ' ' ' -' ' ' & -% #$ $ # "  ! ! " " " " " " " " " ""!! ! " !!!!! ! ! !!!!" "! !   !!      !    -! ! !!! " " " "  ! # -# "!   ! ! "# # # -% ( ) * , 1 5># - - - - - - % -$ - -$ - & +03555677666543334442110/.,)' ' ('' ' ' ' G<*5-9/#<.$1! %  $ -$(#'"#$#$%  -   - -  -  -  -   -  -  -  -        - - - -  -  -  -            -  -  -  .&3+ 3+ 4,!4-!2*2*1)3*7.#6-#5,"5."5-"3,!70$93';4(;3&7/"7."7.#5,!5-!3,!3+!.&$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  212:9<:<>EHHQSQECB0/.&&&###$$$"""!!!%%%%%%)))+++---222777:::...B9+B9+A8*C9,D;-D;-D:,>4'?5(@6(>4&>4&>4&>4&>4'?5'?5(@6(@6)@6(<2%;1$;1$=2%=2%;0#9.!;0";0"9/!:0#=3&9/"5,6- 7.!90#90"7- 5+6- 90#:1%5-!3+3+2)2*6-"0)/'.'.'*#)$)$   - =:9iiiPPP666---###%%%&&&###%%%&&&'''((((((((())))))************((()))))) - !  &&&'''(((((('''%%%%%%''''''***<;;B@A'('!( *. 0!#'/%1(7,#3(/$ -'3-!3, 3*2#$ -& ,  ,;% /' ;* B5)I=-!o>c7V0S-O+L)G&A#,-,&&&""!######!!!%%%$$$)))***...222777;;;<<<C:,B9+C:,D;-D;-A8*B8+?5(@5(?5(>4&>4&>4&=3&?5'?6(?5(?5(?5(?5'<2%;1#;1#<2$<2$<1#:/!:/"<1#:/":0#<2%9/"6-6. 8/!9/"7. 5,4+6.!91$90$5-!2*4, 1)3+5,!1).'/'.&+%*%)$  -rrrZZZ888---""" """%%%'''$$$$$$&&&'''(((((()))))))))((())))))(((((( -   !%#&&&'''((()))***%%%'''&&&&&&!!!866BCE("& ' *".%.%-%* ,",%1*!4*!4( 1'+#0*2,!5.!4+ 4&& 5#<+%9("8#:$ -1A4(A6("r@h:Y2T-O)I&D%@#=! 8 2 , ( ( -( -( -( -' & -& & % $ -# #"" """""!!"!! " "!! "!!!!! " " -# -# -# """ " -# -# " " " " " " " #""""!!! !!    ! !        !    ! !!!!!!!!! -# -# " " " " !  ! " # # # $ ' ) ) ) -48 B% - - - - - - ) -$ - $ - % - ( + /2235566665433444332100/,*(((& & % % & E:,<3%5-9."7'% $ *,(' &+ ) $  #&$   -   -  -  -   - -  -           -    - - - -   - -       -    /'3+ 3, 4,!3, 0(2)4, 5,!6-"6-"5,!6-"6.#6/#92&;4(<5)<3'7."6-"7."6."6-"2* /('! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  2447<;=ABMOQLKK;;:***&&&##"###"""$$$%%%$$$((())),,,000555;;;===D;-D;-E;.C:,B8*A7)B8*@6(?5(?5'=3&=3&>4'>4&?5(@6)@6(?5(?5'?5(=3&<2$<2$<2%<1$<0#;/"<1#<2$9/!9/"90"9/"6- 5-7/!8/!7.!5,3+7.!:1%91%4, 1)6."4, 2*2*0'/'.&-%,&*$*& - 866[[\???222%%%!!!%%%'''%%%###%%%'''((())))))(((***+++((( -   "&#!'''(((((()))'''(((&&&&&&$$$000>?@)"&!(",%,$+$+&-%.&+&.)4,#2'/%3&4&5(7-!4+2'-02  -& -:$ -,=0$>4&<6- k;_5V0S.N,I'C$< 62 - * -( ' ' ( ) -( ' -' & % $ # "!!! " " ! !!"!!"""! ! !! " "!!! ! " " " -# -# -# # " # -# -# -# """" # # " """"""!! "!                  !!!!!!! " -" " " "!! !! " ""# $ & ( ( ) , 27A% - - -  . % $ - & - -' * .112456666522343432100/.+))((' & & & % ;2(91#7.!9-!1! -#   -"' (* )& #'!%$       - -     -  - -        -  - -   - -    - -       -   /(3+ 4,!4,!4,!1)1)6."8/$8/$8/$6-"6.#5."6/$:3';5(<5);2&6-!6-!7.#6."5-"3+!/(&$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  665;9;@=@QPRIHG676((''&&$$$###""""""$$$$$$&&&(((,,,///555:::===D;-D;-E<.B9+A7)A7)C9+A6)?4'?5'>4'>4'>4&>4&?6(@6(@6(?5(?5(@6(>4'<2%=3%=3%<2$;0#:/!<1#<2$:0":0#:0":1#7.!4+7.!8/"90#7.!3*4,90$:2&4, 2)5-!5-!2+1).&,%,$,%)#(#532``aJJJ999---  $$$'''%%%"""$$$''''''&&&&&&&&&     -  (!"&&"''''((())))))'''&&&'''&&&$$$***;;;& %!&$'$("%."-#-$.%/(2*!0''!  +8,!4, 0)4' # 0# +8) + ( 8'>3'TH5c7X0S.P-L+E&?"9 50 * -% -& -' -' '& & ' & $ # # # -" " !!! ! ! !!!!!!!"""!! " ! " " " " " " " " " -# # # # # # $ -# #"""" # # # """"""!!!!!     !!    !    !!!!! !!!! " " " " -" -# -" "!!!!!""" $ & ( ( ( + 06># - - -  H+ $ $ - & - -& -) -/0355666642233332100/.-*)))('' & & % OC080#8/":-!,$ &# -!# -#,"."++)(* *"$#'    !     -     -  -     -  -    - - - -     - - -      - -  /(2+3,!4,!5-"2*2*6.#7/#6-"5-"4+ 4+ 5-"6/#81%:3'<5);2&7."7.#8/$6-"6-"4,".&$  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  =89<9/B8*@6(A7)B8*B8*@6(?4'<2%=3&>4'>4&?5(?5(?6(?5(?5(?5(=3&;0#;1#<1$=2$<1$:/";0";1#:0";1#:0#:1$7. 4+7/!80"90#7."3*4+7/#:1%5-!3*4, 4,!1)1).&*"+#632fghLLM555000&&&$$$$$$   ###%%%$$$"""###'''&&&   -     *'%*,(+((('''))))))(((&&&&&&'''&&&!"!777=>?$'#(#' *) !.$/) +#  " +4)4, 4- 3*7+! " -79%8' :+"-$5#<2&D=,J)D%>"9 4 / ) -% & & -& -& & & & $ " -! " " !!!!! !!    !!! !! ! """" "! ! " " " " -" " " " "" " # -# # # # # # # # # ## # # $ # # # """" " !! " !   !!   !!   !! " " " " "! ! " -# -" " -# -# -#" !!!" # ### -% ' ( ( ) / 48  - - -D) ! $ - -% - -& -( -./355666543333322100/-,***)(''&& % A7(6. 7- 7)( ) (*-$ )*!-#! - "(+"$# #!  -  #   -  - -  -  -       -    -   -   - -       -     !2*3, 4,!6.#4,!3+6."7/#6."5,!4,!6."5-"5."6/#82%;4(:2&7."80$80%5-!5-!4,".'% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   899=>?GJJNSQJGE./.%%%!!###"""###$$$&&&(((,,,000555888<<<999D:,D:,E;-A8)?5'?5'A7)A6)?5'>4&<2$=3%=3&=3&?5'>4'?5(?5(>5'=4&<2$;0#;0#;1#=2%>2%;0":/!:0":0":0":0"90#6-4+8/"8/"7/"6-!3+5, 7."7."3+2*3, 3, 1)1*.'llmYYZEEE777((($$$$$$%%%$$$###!!! !!!!!! ###%%%&&&$$$###        $3%")*3 2 0,&&&'''((((((((('''&&&'''''' ! 00/<=?"%&%  -"/(.&/$6) 7)!8.#5-!4, 4* 7,"-# 1) (2& .@/%?9)G?5 - ) -% -# $$$ % -% % -$ -# -# -" -! -      !!!!   !!! ! ! " " """ "! ! -" -" ! " #"" " " " # # -# # $ # # # $ -$ $ $ # # $ $ $ -$ # # # # # "!! ! !  ! ! !!!!! !  ! "! ! " ! ! !!! ! " # # # # #!  ! " # # # ## $ & ( ) -( . 2 7B$ _##A) " -$ - $ % -( ,-0335766544333332100/-+****)''& % >6*:1#4,5*0 #*  #  -*!(!)"#   -!&!    #  -   - -  -      - - -    - - - - - - -       - -   4-"4-!5.#7/$5-"3+6."80$7.#4+ 3+ 80%3+ 3, 6/#92&:3'80$6-!6/"6/#5-!6.#4,"0((! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   4878;;EKIKPNGEC//-%%%""!#########%%%&&&''',,,000444:::<<<<<<B8*D:,D;-A7)?6(?5'@5(@6(>4&=3%=3%>3&=3%=2%?4'@5(?5(?5'=4&<2%:0"9/!:0#;1$=2%>3%:/"9. :0";0#;1#;1$:1#7.!6. 8/"8/"8/#6.!3*4+5-!5, 2)1)3+ 2+ 0,+YYZFFF777---&&&&&&&&&&&&&&&&&&%%%###!!! !!!$$$%%%&&&  - -      - - ",*1:%=)#:&!4# '''((((((''''''&&&'''&&&%%%-//9:;   - -+++.$0(/'0&4(,0+1. 5, 4*6+ 2""+.)5#:#) ) ->*"<6'`R< !!""""!        !!! !    !!! " " ""!!"" " " "! " #" " " # # # # # -$ ## # -$ -$ # # -$ -$ -$ $ $ -$ -$ -# -# -# -# -$ " "" "!    ! ! ! ! " ! !!! !! ! -" ! ! ! !!!!!" " " # # ""!! ! " # """# # -% & ( ( - 0 6@# \"!A+ % - -$ - # - $ - ( +-023566554434333210//,+*)((('' & % O@.7. 5. 6(($ +$ - " " (!(!)"( '*&+.!' - -      - -       -           - -  - - - -     - -   -    3,!6/"4-"6/#5."3, 6/#90%7.#5+ 4+ 7.#4-!5-"70#:3&;4'7/#6-!6/"6/#5."6."3+!1* *# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   /21376><=KLKMKIBA@,,+%%%##"#########$$$%%%'''***000444888999<<< !!!""!""!""!""!""!?=<%%$%$$%$$%##$$"520520620A8*D:,D;,A8*@7)@6(@6(@6(?5'>4&>4&=3&<2%=2%>4'@5(?4(?4'=3&<2&:0#9/!<1$=2$<1$=2$:/":/";1#:0";1#;2$:1$7.!7.!80"8/"80#7.!3*3*5, 5-!4+ 0*)^]\JJJ@@@111%%%###&&&''''''''''''&&&&&&&&&###!!!!!!"""#########  -      -    -$-9%A,%B-'=)#5% %%%))))))'''&&&''''''%%%%%%%&%667=<< %*%.",")%,'/(.(/'2'#-(1. 5+ 5+ 7,"3#% ) 8$6#3 3* %>#<2%OD3   ! ! !   !! ! ! ! "!!!!!" "!!!" " " " " " # # # # # # # # $ -$ -$ $ -$ -$ -$ # # # -$ -# -# -# -# # # # #!!    !   ! " ! ! !! -" ! ! -" " " -" " ! "" "!! " # "" " "  " # "!" #" $ $ -& -' * / 5?LMKIGE=<;)*)&&&$$$"""""""""###%%%'''...222777:::;;;!!!!!!!!!!!!"""    @?>?>=%%%$$$$$$$###$##$#"%""$ ""$# $# %$!2.,D:,C:,B8*A8*A7)@7)@6(?5'>4&>4&>4&=3%<2$=3%>4'>4'?5(>4(>3';1$9/!<1#<1$<1#=2$:/";0#=2%:0":0#90":1$90#8/":1$8/"7."5- 3+3+6-!ZZ[FFF?>@214''')))'''%%%$$$%%%&&&((('''(((&&&&&&&&&%%%"""!!!$$$$$$###   - -     -     - -  (2>)"B-&B.'<("4# '''(((&&&&&&&&&&&&%%%&&& ! 333<=?(+"-#( !-#+#'%+'/) .)-()!*!0,0+6-!7."5,!6(*# 1' ! *7$2=3&E:,         ! !         ! " !!!!!! "" ""!!"" " # # # # # # # # # $ $ $ -$ -$ -% -$ -$ -# # # -$ -$ # # $ # -# # # # " " !  ! ! ! ! ! ! !    ! " !! "! " -# #"" "" "!! " "" " " "!! " # # " # -$! $ $ & -& -' ,47   e%#]""A( # - -# - -" - % -' ) -/1234445433322310/.-,** **(' ' ' & B9-:3$91#8."4" 0" - $ $ ,!'!)!,#(  -%(!'"$$%#        - -  -   - - -  -  - - -  - -  -       -   -   2+ 4-!4-!6/"4- 3, 6.#8/$7-#6,"6-"90%5."5-"92%;4(;5(7/#5-!70$6/"6."6-!0(1),% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 213:57B@@OROGDA887'''&&&$$$"""""""""###$$$%%%,,,000777::::::999 """! ?>>$#!$#"$$%##$#"###""#!!" !" # ! " " # +'%D;-C:,B9+A7)A7)A8*A7)?5'=3&=3&>4&>4'=3&>4'>4(>5(?5(>4(>4'<2%9/!:/"<0#=1$=2%;0#;0":0"8. 8.!8.!90#8.!6. 7/"7.!7."5, 3+3*)((344&&'%%&%%&'&''''&&&%%%%%%%%%%%%'''(((***(((&&&&&&%%%%%%###$$$   -  - -    -    -   &-5"?+#B.&@-&9%2" %%%&&&%%%&&&&&&%%%%%%&&&&&&/0089:("'%)&($)%(&& "'0&1%.#)+ 1*3- 7."5+ 6-!8+", --.15".) + ?*"C6*@:1 - - - - -      ! ! !    !    ! ! !! " """ " " " " " # #" " # # # # # # # # # -$ # -$ #"" # -# -$ # # -# -# " # $ # -# -# # # # " " ! ! " -" " -" ! -" !    ! " " " " " #" -# "!! " " " ""! " "! "" " " " # #" -$ -% ' ' ' * 17A$ - - - d%$\!!?' $ - -# - -" - -$ -& * -/1233445323333200/.,+*)) ) ((('& PG3:6&:0#<,#(  .)  " $ *-#(#)!.%'$ #("'"##%&        - -   -    - -  - -  -  -  -   -  -   - - -  3,!2+4-!4-!3,4- 6.#8/$7.#7.#7.#8/$5-"6.#92&:3';4(81$5-!81$80$5-!80$5-!3+!,% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  .11846BDBNWPOJG343%%%&&&"#!!!!"""#########&&&------222888:::      "!$#!$#!$$%$#$$"#$"!"#! # # "     D;-C:,A8*@6(?6(@6)@6)?5(=3%<2%=3&>4&=3&>5'?5(?5(?5(>4'=3&<2$8. 8. ;0#=2%=2%;0":/"9/!8. 8/!9/":0#7. 7.!90$7/"5- 2*1)2*%&%$%%#$$$$%%$%&%&'''$$$%%%'''''''''((())))))(((((('''(((  - -   -          %+.3"=+#<)!:(!3!0   ###&&&&&&'''''''''%%%&&&''''((556)!)$($)$*%*&(  !("  -(4&0%4*6-"6-"6-#5,"0%" & -4/(-7' 4@4(ZR=  -        ! ! ! ! ! !  ! ! !!!!!!! " " """ # # # # # # " # # # # # $ # # -$ #" # -$ -# #"" # -# $ # #" # -$ # # # " " "!! " " -" ! -" "!!!! " " "" " # "! "! " " " " " # " " " " " "!!!" -# ""! # $ -& ' ' ) / 4># - - - d%$^!"?) $ - -" - " - $ -& * ,.011234433222210/.-,+) ) ( ( ((('<4(:4%50"<1%=-$ & %# %)" - ,)!(#&!+&' % -"* *"' #& '         -  - - - -  -  #   - -   -           - -  - %2*3, 4-!3- 4-!6.#7/$6,"6-"7.#90%80%70$:3&;4'93&81%5.!92$:2%5- 80#8/$3+!-&" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  .54644AGBLSLIEC/00%%%$$#!!!!!!"""$$$$$$%%%+++///222777 """"!! ! #" $# %$$$#$###"#!!"! " "!D;-C9,A8*@7)?5(?5(?5(?5'=3%;1$<2%=3&=3&>4'?5(>5(?5(?5(?5(<2$8- 7-:/"=2$=2$:/"9.!8. 9/!:0";1$90#6,6-80#7.!5, 3+2*!""#$$$%%$$$%%%%$%&%&%%%###&&&''''''''''''((())))))   -    -       -  -  !$'+-,1 9(!7&5$0. - - %%%'''''''''''''''&&&&&& 212979*$*$)"( &#" ,.!,'2(2)6,!7.#6-#6,"( 1  -:"& 3?.$F@0                  !   ! ! !!!   !!!!!!! " " # -# # # # # # # # $ -$ #" # -$ $ $ $ " # -# -# # # -# -# #" " -# # # " # # "!!! " " !!!! " "" " ""!" ""!! ! -# " " " -" "! " " # #!""" "! "" # # & ' & ) / 2:!  g%%^!"<' # - -" - " - $ - -' * ,-/1012223321110/.-,,+*)( (' & & & ]N983$52$<-#7" -,#   -$ $ 0",$'#'$*&' )&# '--  '     - -  -  - -  - -  -($                   - - 3, 3, 3, 3,4-!5-"8/$8.#7-#7.#90%80%81%;5(<5(;4'92&6."81$:2%7/"80$80$4,".'$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    256=57HJEMOHC@?/.,%%%""""""###$$$$$$%%%***---222777"""'&&&%%!! !! ! """!!!!!! " " !" !!    - % D;.D:-A8*A8*B8*A7)@6)?5'=3%;1$<2$=3&?5(?5)?5(>4'>4'>4'?5(<2%8.!6,9/!<1#<1$:/"8. 7-8. 8.!;1$90#6- 4+90#7."4+4+3+3*$%$$$$#$$$$$%%%&%&&%&%%%&&&'''&&&%%%%%%%   -  - -    - - -  -     %*--//2!2"0 3#5%2"//  %%%'''''''''''''''&&&&&&,*+657)"*$%    48#6& 5*!/#+** 3)8.$5/$40$3 -)-05#6 , , 8(@9+NG< -                       !!! " "" # -# -$ -$ # # -# # " % & -# -# # -# # $ $ # # -# -# #"" " """ -# " " # " " ""!" " " !!" " " "" " # " "" ""!    "! " " "!!" " " " " ""!!!"" # # & & & -& , 25 f%%Z ;# - " - ! - " - -$ ' *,-/100112221000/-,,,,**)((' & & ' TG561#4/"<)!.$ 0-('! +1%-(*%-#,#) !    !)#    -     - - -    - - %1   -                - - 2+ 3, 4-!3, 3, 4,!8/$8.$8.#8.$90%7.#70$;4'<5)>8+:3&6/"92$91$91$91%;2'91&-&# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   847==;FOJHLI><;++*%$%$$$"""###%%%$$$%%%)))+++111 !!"-++(&'   #"#!"! " !" !! ! !! - - -     - -D;.D;-C9,?6(@7)A7*@6)?5'=3&<2$<2%=3&>4'>5(>4'>4'>4(>4'?5(=3%9/"6,8. :0"<1$;0"9/!8. 8. 7- :0#9/"7.!4*8/"8/#6- 4,3*2*$%$"#""""$$$&&%%%%&&&&&&&&&&&&%%%$#  -  -       -    - -   !%(*---,*9)"8)".0!/ -,/   ###&&&''''''''''''&&&'''%%%(()444&)#"!'* ,5-$1,!1-"2+ 4'.",!2&7+"5/$4/#>*$ -! 2/$ ,2' 4B5)eU?                 !      ! " "!" " # # # # # -$ $ $ " "  -$% -$ -$ " -# $ # $ # # # -# " " " " " "" -# # " # """"" " " #!!" " " " " " # -# " ""!!!  !! "" ""!" " " " "" " " " ! " " " " -% -% ' -& * 16?# c%#X7' " -! - # - -% ) + ,-/00//01220///.-,,,+**)(((' ' ?6*@6)60#5/":%" ' & %)+.$-((#+!% "$'%     -$  -     -       - 7%9$ - -  - -  -       "    2+ 3,!4,"3+ 4+ 7/$7.#7.#7-"8/$90%5,!6/#81%<5)=6):2&81$81$91$80#91$:1&80&.'" " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  8974'=3%<2%<3%=3&>4'?5(>4'>4'>4'>4'?5(<2%:0"8. 8. :0"<1#;0#9.!8. 9/"9/!8.!8/!7.!4+9/#:0$4+0'0'1($$$######$$#$$$%%$%%%'''&&&'''####   - - - -     -   -     -  "%&),++*)(+'8)#6("+0!-.,- - !!!$$$%%%'''''''''%%%&&&''' !!222:87'!$& *#+"-$.!5(!1+!.+ 0/"/*4(4'- (1"2+ 4/$8-#( ++*4":#) ( ;.#UJ9 -            ! !!!! !! ! " " " " # # # # # # ### -$ ""$&% -$ -# -# $ # $ # -$ -$ -# "! " " " "" " " " # "!! " " " " "!!! " # " " " " " " " "" " !!  "!"! # # " " " " " " " " " " " "!! " -$ -% & & -( / 5="  d$$X ;( & & - & - & ' * ,-/0/.//0110....,,++**))('(('`P;A7+7/#6+ 3#." - '! ---%-'*#*!&' )",#,!     '&   -         !'.!@.';%3  -    - -        "   2+ 4-"4,"3+4+ 6."7.#7."7."8/$90%5, 80$90%;3'=5)<5(70#70#91%80$81$6/#4-"-'$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  <=;BHEHRPEFB443&&&%%%$$#$$$$$$%%%$$$$$$&&&)))/// !"!#!"! ""  -  - -   -  - - - - - - -  -A8+C;-A9+A8+?6(A8+?6)<3&<3%<3%<2%<3&>4'=4'<2%<2%=3&>4'>4'<2$:0"9/!9/!:0":0":/!8. 9/!9/!9/"8.!8/"8/"5,7.!9/#5,1(2)1("""%%%########"$$#%%$&&%&&&%%%""""!      -      -       #&(*)*+*)(&%&"5'"4&!")*-+)"""$$$(((&&&(((%%%&&&''' ///887' & )%,( -&,$,&1+!4,#2+!2-"1+ -#$ +5,"3-"8.$4#& -4 3!04!+# 9!D5)   -         !! ! !!  ! ! !! " " " -" ##""# &#! " #% $ $ -$ -# # # -$ -$ -$ -$ #! " " " " " " " " " " "!" " " " " "!! " " -# " " " "!! " " " "!" !!!" -# -# " " " " " ""! " " !! ! " -$ & & -' - 3:  - - - e$$Z =+, + * & & ( +-.//./00000...-,,++*))(('''' ^P>@7+9.#5&' # *,-$  ,*,%,%''* *"(")#(#)$(" '% & !(      -     &)0 &#  - -   -          '2+ 2+ 4, 4,!6-"7.#5,!5,!7."90%5, 80$91%;3'=5)<5)81%70$80$80$70#5."3,!-'$  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  A@>FHHOSTKFC/0/%%%%%%$$$$$$%%%$$$%%%'''((( !!!!#"! -   -   C:-D;.A9,A8+A7*A8+>5(<2%<3%<3&:1$;1$<3&<2%:1#;2$=4&>4'=4&:0#9/"8. 9/";0#<1#;0"7- 8- 8. :0"9/#90#8/"6,8."8/#6-!3)3)2) ####""##"""!$$#&&%$$$'''&&&### $#      - - -  -       -  -   !%()))('(('&%$%#"/"/!!))*)(" """&&&''''''%%%&&&'''%%%--+665% &!'#*%)!"-"1&/$/&1+!1*!0'$',6%8-$7/$5.#7*!/$ .) ,4"# -* A0&C=4   -      !    !!!!! ! -!" # " ! -! "## $ $% &&' *!& # -# -$ -# -# # -$ -$ -$ -$ # " " " " " " " " " " " " ! ! " " " " " " " " -" -# " ! " " " "!!!! " "!!!!! "!! " " " " " " " " -# -" -"! "! -# -% % & & , 15 b##Z >53.1,) ( ) +-//.00000//.-,,,,+**)((('& H=/D;-;1&;,#2 "'"  -# ( .+"-%-%   -$(*!' '#)$*$&$( ($(+!      -  -      $!   -  -   -  -         -0)3,!4+ 3+ 6.#7.#7.#5,!7."90$4+ 7/#91%;3'=5)<5)92&80%80$7/#70#70#3,!.($ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  B>=GHHOQREA@,-,%%%!" $$$%%%%%%%%%'''(((  # "$!%$## #"  -B:,C:-B9,A8+B8+B8+?6)<3&;2%;1$:1$;1$<3%;2%:1#;2%>4'>5(=4'<2$:0"8. :0";1#=3%<2$6,8- 9/!:0#9/"8/"7.!6, 9/#:1%8.#4+3*3*3*"!!#""##"$$#$$$%%%&&&'''((($$$ &&%$!       - -           -  - !$''(**)(('&&%$#! !! ## &'(('%  $$$'''(((&&&''''''%%%%%$232'!##'!( (*$ ! -3(3* 3(1$3&5'5* 80%93':.%3)036'4&. & -@& qVF  -               !!!!"" -! """" " "# -$&(*"$/(+5/5=7;B;!/%# -" -# -# -# # # # # # # " # " "! " " " " " " " "!!! " " " " -# " " -" " " ! ! " " !!!! !!! ! "!!!!! " " " ! " " " " " ! ! !!! " -$ -% -% & + //>" - - -TQD=:7840/-*+-./00/00//.-,--,+*))(((''bR=B8+:/%:( +$ -*$  # %,!,%/(.&#   *!)"'")$(#%#' '$$ #! - -  - -             - -          /(4,"4,!4+ 6.#6.#7.#3*5, :1&6-!7/#:2&;4(<5);4'81%:3'91%70#70$81%6/$/(&  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  E??JHJQOQ@=<,+*%$%##"###%%%$$$###%%% """""!""!!!    C:-C:-B9,@7*A8+B9,@7*=4&:0#90";2$<3&=4&<3%:1$<2%=4'=4'=4&=3&;1#8.!:0";0#=3%;1#7-9/!:/"9/"8.!8.!7- 7- :/$:1%7."5+3)2)4+"!""""###$$$$$$''')))((((((%$%!!!,,,        -     - -    $()++)))(('&$###"!    $&'&%, ###)))((((((((())))))!! ///876+!&'  $+4&3)6.#4(4)$(6, 80$83&8/$5%' -( /1",) 4# -/T>2  - -              !# " !!! -  -! " " -#%&( *")2+2:36@:;B>@@B>:741.,-/0000//..,,--+**))('(''[N<>5(=E>>MILKGI;:8(('%$%%%$$$$$$$$$$$$$%%%"" !"!!   - -  C:.D;.B9,@7*@7*B8,@7*=3&90#90"<3%=4'=4'<3%;1$<2%<3&=4'=4&<3%:0#8. 9/":0"=3%;0#8.!;0#9/!9/!:0#:0$8.!7-!9/$9/$6-!5+ 4*2)3*###"""###$$$%%%''')))((('''&%&#"".-.-+,     - -     -   "#&)---,+*('&%$"  !! "%&%$*  $$$)))******((((((((((((554&   -  (2( 1) 1* 1*2+ 4,!1((&7,!7/#72%80%;,#-!-)$16"' ( ?)!VK<  - -       !  - "! !!! !"&')"'0)/605=68A:<@7<6& # -" -# -$ -$ # # # # # # -# -" -" -" " ! " ! ! ! " " " " ! ! ! ! ! -" -" " ! ! ! ! "  !! ! !! !! !  !! "!! ! ! !! !  !! ! !  ! -# % -% -% ( - 39  2426<BGEB@E.#B-"<$>'100/0/./..--,,*)))( ' '''J@1E;.:2&;-#.' + )' /#-&-'.'( +.#,!)- &  %!#&        -   -  - -          -  - - -     -          - - -4,"5,!4,!6-"6-#3* 4+ 7.#8/$7."7."91%;3'<5)92&70%7/$91%5."6/"70$6/#0))# - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  ?<;D==LGKFBD654&&%$$$%%%%%%&&&$$$$$$ !! !    B9,D;.B9,@7+A8+A8+@6)=3':1$:1$<2%>4'>4'<3&<2%<2%<2%=4&>4'>4&<2%9/!9.!9/!<1$;0#9/!;1#:0":0";1$;1$8/"7-!8."8."6,!5+ 3*2)3+4,!"""###$$$%%%'''((('''&&&&&&$#$,,,201      -      -   - #&)+-,,+,+)(%$$#"!  #$$#$!ZHC"""&&&(((((('''''''''$$$&&%232% - &# *4*"0* 0* ,$2*7.#2()-8+!7.#61%70$7/$9$& ' : 9!8 1/$ --I:.   -           !    -"" "$&' &+&,4.0939A;:@<><>?=??=A?>A??AAA@BA>A??B?>B>( -" " -# -$ -# # # -$ # # # -# " " " ! " ! !!! ! " -" " ! ! ! ! ! ! ! ! ! ! ! ! !!  ! ! !! ! !! ! ! !!! " " -" !! !  ! !     ! -" -$ % % ' ,24 2/))/6=C@-#A-"?+!4&6"4!7':(30//..----,+*)((' ' ''& cT>E9.<2'4#& -,0& -& ! $.$/(+%.&( *.%)#(#($*%)   -$           -            -     - - -             -4,!3* 3*5-"5,!2)5,!6-#8/$7.#7/#91%:3'<5)92&6.#6.#70$5.!6/"70#6/#1* *# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   =97B>>PLPEAA00/$$$$$$$$#&&&&&&$$$### ##""#"  - -B9,B9,B9+B9+A7*?5(=3&;1$<1%=2%=3&=3&<2&<2%<2%;2%<2%=3&=3&=3%:/"8. 9/!;1#;1#:0";1#:/":0"9/"9/"9/"8."8.#9/#8."6,!3*2)4+ 5-"######$$$%%%&&&((('''&&&'''%$%())434      - -  - -    !'*++,++,*)*)'&$##"    "#"!$% ###&&&'''''''''(((%%% 000:98)-!,$+#',!3)!.* %!,#6)!9% .-3&5*7-"8/$5."60$=,$( "33%( 0) ( >']I9   - - - -        !!   '( #*$+1+/607=7;>:;?<<@==?=>>>@?>@?>?@>>@>@??AAAAAB@BB@BA@C@@D@"0( # -# -# -# # # # # # # # # "!   " ! !  ! ! " ! !!! ! !!! ! ! !  ! ! ! ! ! ! "!!! ! !!  ! ! !!  -"!!!    " -$ % -% ) 0/+"<*!/' 2%5"3$4#3!8"<$20..--,-,+*)((''''& \N>?4);0&+' -  $&  %(&*&*!0&0% #0'*#)$)%)%.&*       '    -   -  -   -  - - - -   -  - -    -  -        - - 0(1(2)4,!5,"7.#5,!7.$90$6."6."80$:3'>7*:3'5-#80%80$6/"70#81$5."/()" - - - - - - - - - - - - - - - - - -    964DABPNRFB@,-,###%$%%&%%%%%%%$$$###  B9,B9,B:,B9+?6)>4'=3&<2%=2&=2&=2&<2%<2%<2%<2%<2%;2%<3%<3&;1$9/":0#<1$:0":0":0"9/!8. 9/":/"9/":0#9.#8."9/#9/#6-!3*2)3* 4,!1)"""$$$&&&&&&&&&&&&%%%&&&%%%#$$333122      -  -     #&+.--++)*)(('''%##"       !"!! !!!$$$%%%'''&&&%%%&&&%%%###,--888)#+$+$)!,#2) 1'"#)!  &)+!5* 8,"2+ 40$51%-'%')% -5:%0& 0E6+taK   - - -        ! !&)-(/603<6:?:===<=@>>@??@?????@?>@?=@>>>>@?@AAB@AB@BA@B@@C@,70$ -# " # -# # # # -$ # # "!    ! ! !  ! ! !! ! ! ! ! !!!!   ! !    !  ! ! ! ! !! ! !! ! !   !!   !         " -# $ -% ) . 3:! ,! -" (+;+";*!8( .&3&6$2%6$8#5236"51/-,++++*)' '''&& PD5E>0;1&4$% -+-! % ! -$&(%,'.&4)!2% &.$+#)"(#&#+#* &#  - (   - -   -  -   -  -   - - -      -  -        4+!3* 6-#7.#5,"4+ 7.$8/$7/#80$91%:3'>7+;4'6.#80%80$70#92%70#6."/(*#" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 642ECENOPA>>*+*$$$"" ###$$$!!!###  - -C:-C:-C:-B8+?5(>4'>4'<2%<2%<2%=2&<1%<2%<2%=3&=4'=4'<3&<2%;1%9/"9/";0#:0#;1#:0"9/!8. 8.!9/"7. 8/!5+8.!;1$9/#6- 3*1(3*5-"3+ """$$$%%%$$$$$$$$$$$$%%%$$$$$$011354    -  - -  !%)**,-,,))(('('%%%#!"!     "" "###%%%&&&&&&&&&''''''&&&'''&&&**)566%*#+$+#,$.&1',"  %2%2*'*%-!3)5-"52%1*. "' 48!*.) (:) J;:>;=><@?>=><?????>?>=@>>?????@@A?@A@AA?A?@C@6>8% " " # # "" # # # # " " ! !    ! ! ! -" !  ! ! ! !" " " ! !  ! ! !    !   ! ! ! ! ! ! !!    !     !  ! !      ! -# -$ -$ -' , 17   - -$ 8*"8(!6' /&3%7%4&7%;$8!0-0/01 30,)))+*) ( ' '&% % bS>B:-7+;4(70%91'7/$6/"92%80$5."/(+$# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 833GJKKPP?=<++)$$$%%#$$$$$$$$$ -  ! D;.D;.C:-A8+?5(?5(>4';1$;1$;1$=2&<2%<2%=3&>4'>4'>4'<3%;2$;1$:0#:0#;0$;1#<2$:0#:0"8.!9/!9/"8. 8/!6,7, :0#:0#7.!2)0(3+ 5."3,!$$$$$$$$$$$$$$$$$$###$$$"""$$$,-,464    !#&()),*)**()''&%#%$"""         - #!"""(!!!###$$$$$$%%%%%%(((''''''&&&!! 223(("(%*%-%$    ! 5)!3) 2* 5) 4'+ 0&8+"7+!33$1-!3 " & .# - 3 0',G3*ZK:            ,6/;<9=><;><;=;=>=<>=:?=;>==?>=A@<@@>@@>>>??>>?><@>=?>>??=??=??>@@>A??C@=B=( ! " # # # """! ! ! !       ! -! -! ! ! ! ! !!! " # " ! ! ! ! ! ! !  ! !     ! ! !         !       ! # # % -* /3 - - - 7)"8)!6' 1&4%7$4'7&;%8$/*01#--,-30-*( ()) ( ( ( & % % [O==5)5$$+%   -#  %*) -$."(/%& -  &+%'#%& &#"!   $&         -  - -  -   - - - -  -  -    -       -& -  /&1(4+!4+!4+ 4+ 7.#8/$7.#91%92&:3'>7,<5*81':2(7/$7/":2%:2%7/#1* ,%%! - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - =99FKIEID;:9(('%%%&&%%%%###!!!  - -  D;.D;.C:-A8+?5(>4'=3&;1$<1%<2%=2&=2&<2&=3&=3&>4'>5'=3&;1$:0#9/":0#:/"9/!9/"9/!9/!9/!9/!;1#7. 8.!5*7- :0$90#8/"2)0'2+4-"2+ /(%%%%%%###"""""""""###"""##"&&&465 &,)'**(++*))()''%&%%$""#"          - - # !!!$!!!"""###%%%'''(((''''''''' ../889''!+&)! - -'*%$0,"/* 0)3* 6*!8*!8( 2&,&4,!9)!+ +)6$?*$8 - (; C;-vhP - - -       -#/'7;8<><8<;;?>;=<;<<:=<<>=?=>???>@@>??????@?>@>;@=:@=?>?@>@A=#.&" ! " " " " "!! ! ! !       ! ! !   !!!! " " ! -! !  ! !        !                  " " # ) ..;! - - -6)"7)!5' 3'8&9%4&8&:%6"/ (/4(!--0 --041.+)(' ' ( ( ' & QE6F6+<4)91(:3(91%80$:2%:2%8/$2+ -&% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @>=GJGCC@665&&&%%%#$!""" - C:-C:.C:-B8+>4'=3'=3&<2%=3&=3&=2&<2&<2%<2%=3&>5(?6)=3&;2%:1$9/":/"9/"9/!:0":0"8.!8. 9/!;1$7. 8. 4*7- ;1$90#8/#3*/'2*5-"4-"/(%%%&&&###!!!###$$$!!!"""#$#232$)/"2#/--.,++)(&%%%%###"! !              $    $$$&&&''''''''''''&&&%%&555'(*#&!.( 1&0$/$-$/) 0(1(1)3)6(! ! & 0%6+!:/%2 ! ( 67%# ' 3' + :+!J@2            -!) 2:5;>;;>=>=>><=<=<<===<<>==<>>;=<;><=@=>A>:A==?>?@@>>>>==>>D232%%%%%%%%$### - -A8,C:-D;.B9,>4'>4'>4'>4'>3&=2&<2%<2%<2%=3&=3'?5(?6)<3&<3%;1%9/"7- 7- 8.!;1#;1$8. 8. 9/"<2%8.!8/!5+7- :1$;2%90#3*0(4,!4-"2+ 0)&&&&&&$$$###%%%%%%!!! ###$$#---+,!/!/ / .**'((&%$""""!!!                   -  !! ###$$$&&&((('''''''''###112 !*!+%&",'4*"2( 2' 0( 2+"4( 3$2,!2-"8%!.5'8,"6,!80%:,#+/+ 4;"- $3B5)RO9    -         !#.72::9=<<==>>=>?=><==;><===>>>@==>>=======;<;8;9=?<494# -! ""!!!!!      !!!!!!!!!!!!!                     -! -" & , 066)#6)!4'8(;'=&1"5#8#3,* ,6-(+**+,)(*4;851.,)'% % XL8>5)?.&# /7 -  -  # -!-%)" -  )1&-%)$*%+%& %    -#%%!#!!          - - -   - -   - -  -  - - - - -  -   -   -   - '   #$-3* 5,"5,"4+!6-#8/$5,!5-"70$:2'<5):3(91'91':3&:2%;2%:2%80$3+!.'(" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GAEOJSIDC/00%%%%%% - B9,C:.D;-A7*?5'>4'>4&=3&<2%<2%<2%<2%=3&=4'>4'>5(>5(<3&=4'=3&:0#8.!8.!;0#<2$:0#5+8.!8. =3%6,7. 5+8/":1$:1$8/#3*1)4,!4,!2+ 1*+$%%%$$$###$$$%%%######&&&$#"&&&*+ /!./,+,#%$!##!!                    - -    -  -  "   &&&'''((((((&&&&&& .//989!&)"-%-%,&+ 04&0%'&-%3-"9)!9( 9+"5(7) 7.#5/#8/%6&% -& .=("<'!//' , 7(C?/ugM             *4.;:9=;;<<<===<<<;=<;><=>=>>==?=>@>?@>@@>>?<>@>=A>=@==@>>?>>==:<<:>;8:88:7' " !!!!! ! !       ! !!!!                  ! -" -$ ) --2efdggfrrp6)#6)!4'6(8%9$0 4!7!3*'+++++ *++)$" /:%:973/,*'ykRC9,9/$/ 3' **&   %-$.$-!)#!-#.%*$+%.'())!' *'%)& !%# #          -    -   -   - - - - - -    -        - - -     -#%&3*6,"6,"6,!9/%7-#5,!6.#80%;3(=6*<4*:2(91&81%:2%:2%:2%7.#2* .')" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FCGOKRDAA,--%%% - - C:-C:.B9+@7)?5(?5'>4&=3&=2%;1#<2$>4&>5'>4'?5(=4&@7)>5'?5(=3&:0#9/"9/";1#=3%;1#5+6,8.!;1$6,7- 6,8/"90#90"8/#4+1(3+ 3+ 2+ /(+#$$$&&&%%%%%%&&&'''((())))))!! ''-+*(. 2$"###"!               -    -   -   -  -  - % &&&&&&''''''%%%%%%)))878 &*",$,%*%## -% - ! -,6+!6,"4+ +$" .4, 2/"70#:,", *2! % /, )*<3'J@1      - - -      !-%7:7>=<;<<;=<;;;;<;:?<=>@=>A??@>??>>?>=?>>@>>@>=@>=?>===<<<;?=;!-%  !!!!   !    ! ! ! ! ! !                ! " -' ,-;!iighhfhhghhfmml5)#4(!0%2' 6%6#. 3!6!3*&,*****+ )*%" "9%7"489751-*F@1=1&:' " ..$  # " '*!,%1'-!.!, ''-%.%(, 2%+!(+!) *#*"&)" # !" !      -    -    -      - -  -   -          -  - - - -   -$$%0(6-"6-"6,"9/%7.#5,"7/#:2&<5)=6*<4(;2&;2&:2&92&92%91%6.#2* /(*#  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GFFKHH@>>++*%%% - A9,B9,A8*@6(@6(?5(>4'>4&>3&<2$=3&@6(?6(>4'@6(=4&>5'?6(?6)=3&;1$:/"8. :0"<2$;1#6+7,9/!9/"7. 8.!6,6- 8.!8/"7/"2*2*3+ 0)2+ /(,$%%%(((&&&%%%&&&((('''''''''! #&))'%.!5(#!"!!             - -  -   - -  - -    - - -    -  &  - $$$'''''''''&&&&&&&&&%%'545 &')!+!+% $,#3'6+!6-"4+ /'3'8(2, 21#71$6+ 7)$ %3,9(">(#3' # 7$C5*[M;  - - -       %162=<;;<<9;;;<;:;98<9:?<>?=>?>>A??A@?@?>@?>@>=?=<><===<<<;>=6)8) ,& 1-2)# -! /)#+'.%+! (+'+%.%,!  +'  ''$' %(!' #     !     -  - - - -       -   - - - -   -         -    - - -  - - $&&&6,"7.#8-#8.$6-"4+ 6."92&<5)<5);3';3';3';3':2&92&91%70$3, 1)+$# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BGECFC;:9(((%%% -  - -dddccc```\\\C:-C:-A8*@7)@6)?5(>4&=3&>4&>4'?5'?5(>4'=3%?5'>5'@6)?5(@6)?5(<2%:/#7- 8. :0":0#6,6,7- 8.!8/!8/"6, 5+5,8/"6.!3+0(3+ 1)2* 1),%)!&&&'''%%%%%%'''''''''&&&###!#'&%$- 5)$!             -   - -  -  - - -  -  -   - # - -"""$$$'''&&&''''''((('''!"#211<:;$% -/+',(5) 7,"5."3)&*8,"7,!90$5.!6-!9-#2 #) 3"5#*)0$ ( -?.%I>A??B@@A@>?>=?><><<><<>=<6:5$ !!! !   ! !     ! -" -" -" " !  ! !      ! " $mlkiigggeiiikkkhhhddecccdddeee/% )!($"+$!.#(!-!2"0!($-0 ..+,'%#"$&%4!5#8$3 9&4444taKA6)6,"5 " 4'  -' (/"+%*%0&+(-* ,&0%- $  - !))#& $&")$#!!  #  %  -    - -   -          -     -     -    -  - - -   - !&)'6,"6,"8.#9/$5,!4+ 6."80$:3':3':2&<3';2&:2&91%92%91%7/#4, 0)+$" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >KGAB@554%&%%%%  - - ^^^___^^^]]]```]]][[[UUUSSSOOOE<.C:,B9+A7*@7)?5'=3%=3&>4'>4&>4&?5'@6(>4'@6(?5(?6)>5(?6)?5(<2%:0#8- 8. :0"<1$8.!7-6,8/!:0"9/"6,4+5,90#7."4, 0(3+ 4,!2+ 0(-%+#&&&&&&&&&&&&''''''((('''$$$!%%$#)."               -    - - - - -   - -    "   $$$$$$'''&&&'''''''''""" .-.:9: !  -"+ #-$.%3) 5+"5,"0$*3%:.#9.#:/#:3&6/":0%:+!* $ -/'  .6'5&0B2(MA1    - - - -         (3+::8<<;9<;8;99989:99<:;=<>>==?>=@?@A@=>><><;=<;=;;=;;><;=<;;;;<<:><:<:8;7& !! ! !       ! ! " -" ! ! ! ! !     -! -"nhllijhhgggfeeeeefddebbcaacbbb``````#!#%"$'""%!)!-!- &$+,,-,/ . ''&)%(5%4#6$4"//4444D?/;.#;,$& +2/!  ! " -!.&+$,$2&,!&+!-$.&.&+$* *"   $(!("!  $$"!  -  #",!(  -        -            -       - -     - - - -     #'))-5+ 7,"7-"4* 3* 5-"70$:3'<5);2&<3':1%:2&81%:2&92%7/#4+ 0(,%$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DPPB?A01/$$$%%% - - PPPQQQSSSXXXTTTPPPMMMFFFCCC@@@:::666555D<-C:,B9+A7*@6)>4'=3%=3&?4'>4&?5'@6(?5(>4&@6(?5(?5(>5(>4'=3&<2%;0$8.!8. 90";1$8.!6,5+8.!90"8/!6,4+6- 80"6."4- 0(0)3,!2+ 0(-&-%%%%''&&&&((()))''''''&&&### ##! !"            -  - -  - -    -   -    -   - -        ###$$$''''''&&&&&&&&&###""")*,666!#$!+."1'1'2'1'+ $-#,# .-5'8,#:1&81$81%;1&3"# ' .5$;-$/ 9- -& -4!C9*XK9   -   -          +#474;::8:96989:98987;89<:==<=>====<=<<=<:<::<:9<::<;<;<;<<:=<9<:;=: ,$     ! -!        ! -! -! ! ! -! !          milmgkojnkijffe___aaaddfddfaab```^^^\\\___``` "! ## ' ($#)- - . ,--'&&&$#"4$7'5$.02 2!45JE4=:+>.%/& -" # -)  *-$/(,$,$2&,!$,"+#0( *&($*$,!   #  #  #      "$+."    - -       - -   -   - - - - -   -      -   -  - - - !  #()*(5+!5,!7.#5,!4+ 5-!81%<5)=6*:1%:1%8/#80$70$:2&91%8/#4+ /'-&%  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JLPGCA,.,$$$%%% - - - CCC===@@@>>>777666666333000///---+++***B9+B9+C:,A7*@6(>4'=3%=3&>4'=3&?5'A7)?5'=3%?5(>5'>4'>4'?5(>4(<1%:/#8. 8. :0#;1#8. 7- 8. :0#90"8/"6-3+5,7.!4, 3,0(2*3,!2* 0(,$,$,$''')))((('''&&&'''%%%!!!!!            -      - - -    -  -   -  -    - -     -  !     """$$$&&&'''&&&'''&&&%%%#####%333:99$ !++#*&-*+(0'/$ # ! " *1#" * 5, 92%82%:3&9.#-"( 3 & !41( -) 9)J=/oV  - -             %0619987985987988987:88;9<<;=>=;><:=;<=<<==<><:<::<:9<:9;:;;;===:=;9=:;=:)1+  -    ! !   -!        ! !      -      - -  rmqmgkhdghhgjlj^`_ZZZ\\^bbddddddd```___```\\\]]]WWW #""'."."-!.!,,,+,('%$#7'0 ,2!3!3"0 .iVBC7+>1(7%" ,.(  -$ ! #3#-&.&,#-#0%)()+-#0' 0$),#)"&' $!%$  """ Y>1X=/  #%%)."  - - -       - -   -    -   -   - -   -      -   -!% %*-*5,"6-"7.#3* 2*3+70$;4(<5):1%90$7/#7/#7/#91%91%6."2*/'.''" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MHMA?>)*)$$$  - - - 111000---......,,,+++***(((%%%"""!!!A8+A9+B:+@8)?6(>4&=3%=3&>4&?4'=3&?5'?5'>4&?6(?5(>4'=4'?5(?5(<2%9/"8. 8. :0":0#8. 8.!9/":1#9/"90#6- 2)3*6.!4, 3+/(1)3+ 3+!1),$,$-%&&&((((((&&&'''(((&&&"""                  -    -   -  - - - -  -   -   -     "! -  !!!###%%%''''''%%%%%%$$$$$$!!"0009::! "+!*$,(.*-',#'! -3!3) 2+ 2+ :& ,:,!9.#:1%=0%>-%8&# ! -+%6@,&4- % ->1'PG8  - -            -609979:96:87989:98;98;9;<;===;><;=<<<<<=<;=<:<;;=;;><;><=>=>=>:=<;?<;=;484!        !          !        - - - -   pnprmqsnrnkmefddfddfebca]]\^^^___```aaa^^^^^^[[[ZZZYYYUUUUUU  ") -$,"* *')***('%#2!--/1"1!,,/!C7*:.%:,## -$ # " +)$ - -.&,&/(,!'(  (   "+!"! ,!*$'#("( ( '#$%$   - J6+>,!9)!  #&%$+"         - -             -           -   -  -".#  %+,*)7.$7.$2*3+ 4- 70$;4(<5):1%90$80$7/#7/#80$90$5-!2*1*0)*$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @LI=;;**($$$ - - - - - '''&&&###""""""!!!!!!"""!!!!!!!!!!!!###B9-B:,B:+@8)?6'>4&=2%?3&>2%>4'?5'?5'=3&?5(@6)@6)>5'=3&=4'=4'=3&<2%8. 7,9/!9/"7- 8.!9/!7. 6-9/"6- 1(2*7/"6-!3, 0(0(3+ 4-"2* .&-%-%%%%(''(((''''''&&&%%%"""                 - -  - -ggg```PPPOOO      - - - - -  -      -"  ! -  ###$$$&&&''''''&&&%%%$$$%%%&&&687# !' )%*%0(. -  -,4( 3* 5,"5,"9)!=+$<-#4*5+ @/&@+$:,#-!$&.4' # '$ $ 6"I:/XL;  - - -        (2+897;;:7;98;9:;::<:9=:<=<===<><<>=<==<=<:;::<;;=;;=;;><<=<;:;7885969;98:7% -          !                jgjjdhoknpopkmkegfaba^^]^^\bba```^^^^^^]]]\\\XXXXXXXXXXXX\\\XXXUUU#&( ' & '''&)((&%!.-.,,*-3%/!, 9+#+' 3 * & *1#-%)#-&)! &%,. " &/."*#&"&!( *  "$$   Q=3E1&6% #&%!"     - -   -           -   -   -  -   - -      - '4)$! -$)+,*7.#7.$3*2)6/#70$;4';3'91$90$90$6."6/#7.#8/#7/#4, 4,!1* +& - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DJG987&&&$$$ - - - - -  """$$$###"""###""""""$$$E;.A9,B:,A:+?7)>5'>3&=2%>3&=2%=3&?5'?5'>4'?5(?5(?5(=4'=4'>5'=3&<2%<2%6,6+8.!:/"9/"8.!9/"7- 5,7.!6,1)3*80#7."5-!2*1)3+ 4,!2* /'/&/&( %%%&&&&&&&&&'''%%%       -  - -      -    - XXXjjjmmm___KKKOI?  -  - -      -  -   -" " -  -$$$$$$%%%&&&&&&''''''%%%'''%%&454" -!*!+"/&0&' -*6,-!6,#2(6+"5,"2,!1%," 19.#8/$9/%9-#, & -( % /0$.( ( ;) GA1riO  - -  -       +#585<;;9;:8<:;<;:;:9=:;><<=<<=<;><<>====:<;:<;:<:9;98;9:<;:998887;98;8897 ,%                 !!!!!       nilmhljginonoqoikjddc``^XXVYYX[[[]]]]]]\\\YYY[[[ZZZZZZUUUXXXZZZXXXSSSFFF !!!$% %&')&%%#*,+,,1#2#. ,+*,/*+(! -  /#.$-#),-,- +",#0&.!, -*. +"$!" %( #&#  " 2"U>5?*"=*" "$&#      - -      - -  - -     -  -            -  - - /$ % &*++5,!6-"2*2*70#91%<5);3'91$91$91%5-!70$8/$90$6-!3+1*1* ,% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EFE443$$$$$$ - - - - - !!!"""###%%%$$$###"""######"""$$$$$$C:-A8+@8*@9*?7)?5'?4&>2%>2%=2%=3%>4'>4&>4'?5(@6)?5(>4'<3&=4&<3&=3&<2&7- 5+7- :/#9/"7- 9/"9/"5+7-7-1'4+90#90#6."3+1)2+ 4,"2+!/',$-$*"$$$%%%&&&$$$$$$%%%!!!      - - -  -     - - - mmmtttuuudddMMM72*    - -  - - -  - -     #  % -   ###$$$%%%&&&%%%&&&(((&&&$$$##$2219:9 )!%&/ 1$*!(!.&2) 3(7+"4.#1,"1,!3,"0&%"/<*"7.#82&:0&=1'7) % &/4,";*"/)+', A.%K>0 -   -      %172;;:9;:7;99:99988<9:>;;;:;;;;=<<>====;<;:<;:<:9;99;9;=<;;;===7:97;8353'.(           !!"!!!  -  -      jgjjeimilmklijhlmlmnmhhfddb__^\\[XXXWWW\\\]]]ZZZZZZXXXXXXWWWSSSPPPTTTVVVWWWTTTJJJ;;;!!"#"###$$"-,-0!/!1"1#/!,)())* -! -! - -"0&0&*  # . /%(#)%,(*"%   '& %%'" #$  !  -2!>+%A-' - !$%#        -     -         -   -           -   - - $! #(*,+7.#2*2*6/#92&<5);3&90#80#90$6."70#:1%91%6-!4, 2+0),&  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BCB///###$$$   - - - - - - """""""""#########%%%$$$######"""###$$$$$$A8+B9-@9+?8)?7(?5'?3&=2%=2$=2%=3%=3%<2%=4&>5(@6)?5(>5(;2%=4'=4'<2%;1$7- 6,9/";0$8.!6,7.!8.!7- 6-7- 4*6,:0$:1%7."3+2*3,!6.$3+!,$.&,$,$' ''&'''%%%%%%&&&"""        - - -         - -OOOooosssssscccOOO    - - - -  - -     $  % -  - ###%%%%%%%%%%%%&&&%%%$$$!!"+**798! - )/'/(-'-'0(2'4*!2,"0-!.- 0+ 2%*.#5* 6* ;/%7-";1&;1&;/%2"$ & -1!)" -,/. '2B0%NI6  - - -     ,5/9989997:98:98988:87;88:8::::<;;><<<<;<;;=<;=;9<99;::=;:::;;;:<;8<9796151!       !!   -  -  - -     qmplfjhdgiihijigigggfggfggfbba\\\\\\YYYXXX[[[[[[XXXXXXZZZUUUTTTRRRQQQUUUUUUSSSQQQOOOGGG555 ! !#!#  1#1#3$2#2#1"  - - -     &,0).'.&.$) - "+"& )$-'-%('+")" &+#'&#  !!!      %%#       -    - - - - -   -  -   -  - - -  - -        -     (+-,6-#2*2*6/#92&<5):2&8/"6."80$70$70$;2&:1%7."5-!3+ /(.'! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - D@?*+*"##$$$  - - -"""""""""""""""###%%%$$$%%%$$$%%%%%%%%%&&&@7+@7*?8*@9*?7(?5(>3&=2%<1$=2%=3%=3%<3%<3%<3&>5(=3'>5(;2%>5(>5(<2%9/"8- 6,9/";0#8- 6,8.!7- 6,6-8- 6,5+8/":1%80$4- 2*3+ 5-#2+ /'.&-%*"( &&&((((((''''''$$$    -   - - - - -    - -     [[[rrrpppiii```YRK  - - - -   -      !" # -   """%%%%%%%%%$$$%%%$$$$$$%%%(()555 '*!,'-*,)+(,&+$3(5%*'2&6+!5-#3,!/$#7+!5)7-";1&=2'=/&,". +0;)#1/) '0F9+wgN   -       &1)6869986985866766866:78:9;;;:<;;=<;<<;<<;=;:<;9;98;89<:8:9888:;;9=;9;9796% -        -!           ljmrmqqlojgifgefgfdfeddcffeffddddccc^^^[[[YYYWWWYYYYYYUUUSSSSSSRRRRRRTTTTTTSSSUUUSSSOOONNNLLLDDD666      -        $-#.(-&/&-"*-"$+!-$' )".',%+#,$+"( *!)#)") $ -$$!!  A88    %$&"        - -  -   -  - -  - - -    - - -              &+,--1)2+6/#81%:3':1%8/#7."90$70$7/#:1&90%7."4, 3+ 0(-'!  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ><<')("##  - - - - -$$$$$$######%%%%%%%%%%%%%%%&&&&&&'''''''''?6)@7*@9+A:+?7)?6(>4'>3%=2$>3&=3&>4&>4'<3&;2%=3&<2&>5(;2%>4'?6(=3&;0$9."6,9/";1$7- 4*6,6, 7- 8. 8.!7- 3)5, 8/#7/#4, 2*2*3+!1) 1).&-%*"( (''(((((('''(((%%%    -   - -  - -      - - -$ -iiiuuupppeee\\\B<5(  - - - -   -     -   !"#!%    !!!$$$%%%'''%%%$$$%%%%%%%%%$#%222:98*,-#,'-),)-'&)# - )6'5-"41$31$0#$ 8,":.$:-#<1';4(=5*7,"* '+6$%  -4 0+ -' -4!I?/  -      *!263::96983655656755967:8:;::;;:=;;<;;<;:<;9;:9;9:<::<;8;99887778;99;89:6 +#          !!!!        knmljlpkolkkfgeefededaa```_bba___```___YYYZZZYYYVVVVVVVVVRRROOOSSSQQQOOOPPPRRRTTTRRRQQQMMMIIIIIIHHHGGG>>>          -   - -  - - -  -+!,%,',&/%%"*!+"+"*"$ ),+')(-%.()") #  !# @43(& %!   -   -##%$     -   - -    - - -    -  -   -  -  - -  -         #+,..0(2+6/#82%;4(:1%90$91%:1%5."6."90$80$8/#5-!5-!2+ /($ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;:9(('###  - - -&&&'''&&&%%%%%%&&&%%%$$$%%%%%%((((((((((((?7*@7*@9*A:+?7)@7)?5(>3&<1$>3&=2&=3&=4'<2%<3%=3&=3&>5(<3&=4'?5(=3&;1$9."7, 9/";1$8-!5+6,6,7- 8.!9/!7.!3*4+7."6-!3+2*0(2* 1* /'-%-%,#&( ''''''&&&'''%%%      -  -        )#QQQ|||{{{rrrfffYYY,'! !        -     -   ""$"&     !!!###%%%%%%$$$$$$%%%''''''"!"/..898( ')) -(.+ +'/$. !" +5) 7*!5+!6/$82&3$7* 6+!:-#<2'<6*<6*;4):#) -# ,% -0?,%9&.& ) ='QC3          #.508765654875766766976:7888;;::=;:<:<=<;<;9;98:9:<:9<:8:9799899:::;<:;<9,4- !     !!       -      -oqpmmmljllklghgacbabaaa_]]\^^]```___^^^]]]ZZZ[[[YYYUUUUUUVVVRRRQQQRRRQQQOOOPPPRRRQQQPPPLLLGGGDDDDDDGGGGGGDDD $    -    -      -   -)')(,'/$*%+"*!,$'%  -  $ '( ($*&%!) )" - -"!7"?43(#  !$&'"$+"      - - -  -  - - - -   - -   -  -  -  -     - -      #,-0!.0)1*5."81%:3':2%:1$:2&91%5."7/#90$90$80#5-!5-!2+ 0* &  - - - - - - - - - - - - - - - - - - -  877%%%### - - - -&&&&&&&&&&&&&&&&&&%%%&&&&&&&&&'''&&&%%% A9+A9+A:+A:+?7)A7*@6(=2%;0#=3&<2&<2%<2%;2$=4'>4'=3&>5(>5(>5(?5(<2%;1$8.!7, 8.!:0#9."8.!9/"7- 5+6-7. 8.!5+5, 8/#6."3+2*/'1)3+!/'/&-$,$)!&&%%&&%&&&&&&%%%"""  -          -   -   -'\\\{{{zzztttfffWWW -         -  - "$%"' -   -$$$$$$%%%###$$$&&&(((((('''+*,555%$ -# .&0$&" !# -7' 7+"5* 6+!9/%9/&7$)4'4* 6/#:2&=3(94(74';/%3" $ 07"-!*1++ -E0&sbJ   - -         +4.7767766985765658;98;98:8::::=;9<:;<;;<;:;99;98<97;9788788899:::;<;;<96:5!               !(!#1)&5,# - -  lomnonmlmkijkfjjfidcd^^]__]__^]]]]]]___^^^\\\[[[YYYYYYWWWTTTUUUTTTSSSRRRRRRPPPPPPQQQPPPMMMKKKHHHBBB@@@EEEFFFEEEEEE???      -   -        - - -('&'*%1$-  --!(*%'!&)  - -'&(")%&!'*)% ""! - " -    $()&'0#'  -     - -  - -        - -                   #! "+.1 0 .3+ 5-"80%:2':1%:1%91%90$70$91%:1&;2&80#5- 5-!3,!1+!)$ - - - - - - - - - - - 443$$$$$$   - - - - - - -$$$%%%%%%%%%$$$ - - -   MD3A9+A9+@9*A:,@8*B8*A7)>3&<1$=3&=3&=3&<2%<2%=4'<3&;2%=5'=4'=4'>5(=3&;1$9."8.!9."<1%9."6,8.!7- 5+6,7- 8/!5,4,80#7.#5-!2*.&1)3+ 0(0'/&.&*"' %%%&&%&&&&&&%%%###"""   !     - -    -     aaavvvyyyooocccUPH      -       - -   #%&"' -   -###%%%%%%%%%%%%&&&'''''''''&%&222:75) &&-#! $ .)%2'5+!6*!8+":-%3&(&3&+ 1(6-"<2'94(64&93'7(@9*?7)@6)?4'<1$:0#<2%=3&=4'<3%<2%>5(=3';2%=5'=4'>5(?5(<3&;1$:0#8-!8.!<2%8- 6,6- 4*6,7- 8/"8/"5,4+6.!5,!6."1)-%0(2*0(0'/&,$+#(!(!&&&&&&&&&&&&###!!!   #      -       mmm}}}qqq]]]50*       -    -    %'&!$   $$$$$$&&&%%%&&&''''''&&&'''###///878&$%"*"-!* -&- 3'1&/&4*!6+"! " 2$ (- '(,9-#1&:-#,"( 5 ?(#2& /1&- E4&rV  - -       -( 1518876875877877875974969:89:88:89:8::9:;9;<:7;88=:7887777778988:97:75:5,# -    - - -    !!  $!-&+602=63;64958978975754:63;6$.'prqqqqpnpmilhdgebe`_a[[]XY[]]^^^^]]]\\\[[[[[[ZZZUUUTTTTTTSSSRRRRRRSSSQQQPPPOOOKKKHHHHHHJJJIIIFFFEEEAAA@@@>>>???CCC@@@===<<6(?5(>3';1$:0#;1$<2%=4'<2&<2%>4(=3&;2&=5'=4'=3&>4'>4'<2%:0#8.!8.!;1$9."6,5+6,9/"8/"8/"9/"5,5, 3+3*2*/'-%0'1)/&.%/&,#-&,$)"&%%''&''''''%%%"""    -    - - -          NNNqqqiiiTTT/*$ -       -  - - - -   - %'&"'   ######$$$&&&&&&'''(((''''''(((+,,545&$$!%/"-#,#,&,)0-"2.#6-#9*"1 %' *!1'3(4'2$4':,#3$-;.$?3(=7*6+!* !( .& *<$ 8 .%0F3&kVA  - -      #/508776775874654654865:78978978:8898999::99:87:87;98989887777887987:77:6*4, -   - - -     !!    !)"&1*/932:55;67:78:79:89:8::9::98:86:7475.3/ilkopppoppmoplpjfidbe`ac_`a[\]\\\[[[\\\\\\ZZZWWWWWWVVVUUUUUUUUUSSSPPPTTTPPPLLLLLLKKKIIIGGGGGGHHHGGGEEECCCBBB@@@<<<;;;;;;===888999@@@AAA   -    -     - - -        - ( $+#' '( '  "( !$-*%( &%' $$ #!!      $&)*#"*#   -  - - -               -            "8,'3&!$$*../,6.#80%:2'7/#7."91%90$80$80$80$:2&7."4, 7/#80$7/#6."6."3,!1*3,!2+ 0)1*0(.'-&-&+$+#)"#)!' %""! - -  *+*%%%   - - - - - - - - - - - - - -  - -  - - >6(@7)@8*>7)?8*>5(>4'>4'<1%;1$;1$;1$=4'=3';2&<2&;1%;1%;3%<3&=4'=4'<2%<2%;0$9/"9/":/#8.!6,5+6, 9/"9/"7- 7- 4+5- 4+4+3*2)0(1(2)0'/'/&.%-%+#,%%%%&&%''''''&&&###  -      -     UUUqqqyyy]]]GGG  -      - -        - !&'%#%  -  ###$$$%%%&&&'''(((((((((((($$%212*%)$%.#/ &*"0(/)0+ 2-"7( /" !%40,!3,!5*!5,"6-"8) 2! &81%<3'=4(>1'6#% - -*2@)$6%* 1 &-D3&ZL9  -      *1,644766576354343575596776997:;99:99987877767877:98:99898887887877:89<87<7   - - -     ! -! !(!%0).822;54;66:78979:89:89:89:98988989:98:87:7696586373" ilknnnonomjllhkjfidce`ababcbcd___]]]]]]]]]]]][[[YYYUUUTTTSSSTTTVVVSSSPPPOOOKKKHHHGGGGGGGGGFFFEEEDDDDDDCCCAAA>>>===;;;999::::::<<<;;;;;;>>>:::          - -   -  -     %&)#& '(   !!!('#'!#$& $% #$  -      #&*+&                                  1% 8+&&$'-..+5."80%:2'80$8/#90$8/#6."7."91%90$6."5-!90$90$7/#6."80$6/#4-!5-!6."5-!7/$7/$4-"2* 2+ 2* 0)2* 1)0'0(/(.&.'/(-&)#+$%$"  - - - - *)(%%% - - - - - - - - - - - - - - - - -  - - - - - - ->6(@8*A9+?9+@8+?6)?5(>4'<1%<1%<2%;1$=4(>5(<2&;2%;2%;2%:2$:0#<2%?5(=3'<1%;0$8.!:/#;0$9/"5+4*6,7.!6,4+7.!3+3*4+4+1)2*2*2*3* 2)1(0'/&,$.&*#' '''&&&'''(((&&&     -      - -       -[[[qqqmmmTTTD@9  -      - - - -  -   )*$'(%!%  - """$$$%%%&&&(((((('''''''''"""...866)#'!.%2#-!.&2) 0'0+ 1, -" -,&(5."1, 3-!7,"6) + ( =)!7/#:2&>4(>1';-#4 # ! ) 5! ' >&!2+ $ .H0%TC3  - -     -   "+%331745566454565565485786:98:;99;99::8898878877988988789898997987:85856:6& - -    ! ! %#-&,6/2<63;66:79;8:;9;<:::9:;9:;99:99:99:9798898:;:9:88:86:7586474(! jnloqpqpqnlnlhkmilifiddf`ab^_`_`````]]]YYY]]]^^^ZZZYYYXXXUUURRRPPPPPPPPPMMMKKKJJJJJJJJJHHHDDDFFFEEEBBBAAABBB???AAA===>>>===;;;>>>;;;:::;;;:::<<<===         - - -    - -      - &("$$$  - $ + &$(##%'!'!%)&   -    -!&(*("   - -              $.!$#%+/ / .5-"7/$:2&90$7/#7/#80$7/#6-!90$91%7."8/#91%90$91%7/#91$80$6.!80$92&7/#81%:2&70$5-"6.#7/$4,!6.#7/$6.#6.#5-#3,!4-#6/$3,"2,"4-$/( -&+$+$)"$$'!& #%+$2*4,! - - - - - - - -  '''&%%  - - - - - - - - - - - - - - - - -   - - - ->6(@8*A9+@:,@9+@7)@6)?5(<1%<2%;1$:0#;2&;2&:1%:1%;2%;2%:2$<2%<3%<2%<2%<2%;1$8-!9.";0$:0#6,4*4*5+6, 5+5, 1(0'2*3+1(1)1(1(2)3* 2)/&/&.&.&+$( &&&&&&'''(((&&&  - - -            -  [[[~~~```JJJ,)# -       -    -  - - - . -&(('!% -    !!!$$$"""&&&''''''&&&&&&&&&&&&'''545("'#'#" + 0(/)3* 2)$ '4$8(!9(!7*"4,"1, 3."7* 9) - ':/$9-#4*:/$@4*<2';0%:-$1!$ $ ,.@(#7 ) 3. ( -0 C1$SF5d  -          -$.1.6336665666657654744758767766877998998989987879:99889889997987:88:89<8"+%  !   $#,&*3-0831833846868:79:89:8::9:;9:;:8:88988988:87987987977988988:88:87:8596585'/)nqonnnmkljgiieikfjhfiefgbce_`a^^^]]][[[ZZZYYYYYYZZZXXXTTTTTTPPPMMMMMMMMMLLLGGGCCCCCCBBBFFFEEEAAAFFFDDD@@@>>>@@@======AAA@@@===;;;===>>>888777999888;;;<<<     - - -  - -   -        -   ' & ""$$(*# %$##!%!,"%$( %%(   -    %'(*"                       "#%*0"0"0",6/#80%80$7/#7.#90%80$7."91%:2&7/#7/"7/#91%;2&91%91$90#6- 80#:1%:1$<4'<3'90$80$80$91%6."7/#91%80%7/$6/$6/$81&92'60%92'81'4,"0)1) 3+"2*!*",#0)1+ 0*0)4-":2':1%3*4, D;,   %&%&&& - - - - - - - - - - - - - - - - - -   - - - -   >6(@8*@9*A9+A9+@7*@7)?5(;1$;0$;1$;1$;2%:1%:1$;2%<2&<2&;2%;2$;1$<2%=3&=3&9."6,8- ;1$:0#6,4+3)8."7."2)6- 4+/'1)2)0(1)2)2*3* 3*1(0'0(.&/'-&)"%%%%%%''''''%%%  - - -   - - - -       DDD```UUUAAA.*# -   -     - - - -  -   - .!-'***#' -  - - """###$$$&&&&&&%%%%%%&&&&&&%%&212*!)%*%( &.$0)+&4(3&0(2* 6+!5,"4/$6/$7*";& 52&7-"8/$7.#<1&0$'8.#=2(;0&<2';2':0%8%$.4# +7"1, $* C.$PB4zdM  -   -     */+4214334556558665754756656655874776887988998987877879887878:97:98;8;<:+/+   - " )#'0*/714:55:65855755757977977978988988:89:99:9898787676787798797797798787797797585586475/40knljiimjljfifaefbeeegabc]^`]^^\\\[[[]]]^^^YYYWWWYYYYYYWWWTTTNNNJJJGGGHHHKKKIIIFFFDDDAAA???AAABBB???@@@BBBAAA???<<5*;2&4+ 6,!@7*  110%%%&&& - - - - - - - - - - - - -  - -  - - - - NC1=5'@8*A9+B:,B:,A8*@7*@6)<1%:0#;1$<2%<2%<2%;1%;2&;2%<3&;3&:2%<3&<2%:0#;0$;0$6,6+:/#:0#7- 5,6,8.":1$7.!7."5, 1(3*4, 3+3*2*1)2)2)/&/&/&,#-%-&(!&$$$%%%%%%%%%   -    -  -       - - -NNNeeepppOOO<<<    -       - -    -  -.!- &(**#(   -   !!!###&&&&&&$$$$$$$$$%%%##$...755($,&,&*$(" -3&5* 2."3-"5-"4+!.'5*!6&.# &4-"60$70$>3)4%*4)64';3(<2'9/$:2'?1(1 $ # * ,:#3& -* -#, :,!I:.kXD  - -       &/)3203113444444334544754545545873876996886777875655658779998;:8;:9;9897442 & %-'-5/1833946968:78978976866766768989;98:88988:98:88:88987976765756867987877978:8798686686686586464251! innknkkljhffkgjlhkdadaaccdf_`a]]]\\\YYY[[[]]]\\\WWWQQQTTTXXXTTTQQQMMMIIIGGGHHHHHHFFFCCCBBBAAA>>>???AAA>>>>>>@@@@@@@@@@@@AAA??????;;;888666666777999555444777777555///         - -  - - -  -  - -  - -        '+!)%'"&"$!&",$" ,) "$ %!%  - - -    #&)*%          "  #        "&(. 1#0"-7/$80%6.#5-"7/#8/$91%:1%:1%;2&6."4+80$:1%80$;2&<2%:1#8/!;2$=3&=3&=3'=3';1%<2&:1%8/#90$;2&;2&:1%90$91%:2&;4(;4':3'=6*<5(6/#3+6/"7/#1)/%3)8/$;2':1&7/#;2&?5*:0%3)6, ;2&FFGEA?-..%%%&&& - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - -MC1=5'@8*A9+B:,C:,A9+?6)?5(<2%;1$:0#:0#<2%<3&;1%:1$90#;2%=4(;2&<2&;1$<1%;/#:/"8, 5+9.":/"7- 7- 8.!8/":1$6-!8/#7/#3*4, 6."6."6-"3*0'2)3*0'.%.%+#,$.&(!%%%%######$$$(((    - -   - -     -  UUUnnnZZZHHH40+ - - -      - - -   - -  - -'&#(*+%' -     """%%%'''$$$######$$$!!!***555**#-((  " 4'4+!2."2."3."0(#,) ! -3+ 6.#92&8/$>2)5'(0%82&;1'<2'>4):1&<6*:1&/$ -( 05"& )7 /-"( -:$K:-XH7 - - - -      -)"01/3212432336554432530215554653763665776765656866766556766987:97:9867633+2-.722734746868978978989:8898797787676686898:<:8:97877989;99;98:8898797787797787686787898686576575687586464463& kpnknklljkkhggcfdddce_`b^_``ab\\\\\\]]][[[[[[]]]YYYSSSPPPPPPQQQPPPNNNMMMKKKGGGGGGFFFFFFAAA@@@???>>>???@@@<<<;;;>>>>>>AAABBB>>>>>>===;;;555222444555444333222333555333000+++           -  - - - - -   -   -      * "* (!"'")!"  ! ! #    -    - "&))&! (,          -    -  ""     ! #%(,2"2"2"27/$5-"7.#90%90$90$90%91%;3'80$7/#90$:1%;3':1%<3&90#7.!;2%=3'<3&;2&>4(:0$;1%<2&;1%<2&<2&<2&;2&;2&;2&<3'?7+>6*<5(>7*=6)81$4- 80#91$3+0%4*:0%<3':1%8/#<2'?5*:/#1'6, <2&@@@HGH?<;*++%%% - - - - - - - - - - - - - - - - - - - - - - - - -  - -   G>.>6(?7)A9*B9+C:,A9+?6)?5(<2%;0$;0$:0#;1$<3&<2%:1%:1%<4'<3';2&;1%:0#=2%;0#:/"8- 7,8.!8.!6,7. 9/!8.";2&;1%9/#7.!5,2)5+ 7."7."4+ 1(3*4+ /&.%,#) .&.&*"&%%%#########&&&      -  -   -   -AAA[[[QQQ>>>-)$         - - - - - - -  - -   !(,,('     """%%%$$$###$$$%%%%%%&&'.-.)' *(( %1"8(!7*"1* 3,"6-#4'%& :*"4,!80%90%90%<0'0$+ 3%2#8+"5,!83'70%@2)?3)7+!,# ' --,8%6# -.* )) 6!G;,TM9 - -  -     #+0,210/10/213323433643544544551641544665665544545765655555875876986668555752956867767767868989;99:97876876765655656879:99;9797797:;:8:9787676787798798686676787787575687464565354465575%,' ostospmnlnnkpolllheeb^`^bddefgbbbcccaaa\\\ZZZ[[[WWWVVVUUURRRRRRQQQMMMKKKNNNNNNKKKGGGCCCDDDDDDDDDBBBAAA???@@@???<<<======999??????===>>><<<:::666111444777222333111000111111///---###     - -      - -  -    -  -  -  -  - -  '*'"'"*"+# ##  -   -    #')(# - 9,')            #     !"&+&(*03"3#180%6-"7.#80%8/$8/$90%;2'=5)80$6-!:1%;2&;3';2&=4'90$8."<2&=3'<2&=3'>4)<2&;2&<2&<2&<3'=3(<2'<2'<3';2&<4(?7+>7*<5(>6)>7):3%7/":2$:2$2*1%5*;1%<3':1%9/#<2&>4(9.#2(7-!=3(CBBFEE;98))'%%%  - - - - - - - - - - - - - - - - - - - - - - - - -  -         @8)?6)>6(@8*B9+D;-B:,@7*?5(<1%:/#:0#:0#;1$;1%;2%;2%;2&<3&<3';1%:0$:0#:0#;0$9.!6+7,9."9/"7- 8/!8/!8/";1%;1%7-!6-!6- 3*4+6-!6, 4+0'2)1(.%+$,%+#.&.&+#' &###$$$###&&& !     -  -   - -IIIQQQMMMPPPHHH666/+$     - -  - -  -   - -   #),+((   -!!!%%%%%%%%%%%%&&&%%%##$%$% -('"/%,/#/",3(/(1)4) +" # +9+#8,#:.%8-$9+#2" -(/"%1%1+ 81%@0':-$71%6,"-&(.1! -# <&!4- $ $ 2 H:,PC1|Z   -   - &-)00/.0/-1/0213433530312214434762653554542214534643435654765873666779577653856977865656767987987987876763433433537879:99;:898797797686575565676787686676565576676565565354354353575464-1.nqppqommkmlionkpqmkljcdeceefgggggdddbbb```]]]\\\UUUQQQQQQPPPMMMOOOOOOFFFJJJKKKJJJIIIFFFEEEEEECCCCCCCCC@@@AAAAAA<<<;;;;;;<<<@@@;;;888:::;;;===999888666666444.........,,,///...***)))*** - - - -   -  -     -  -     -         - -  )'%(!'%) &&$%   -  -  -    !!')*&! '8)$4&!    -   %" - - - $   "%+6'!/)*.3"4#2!80%6-"7.#8/$8/$80$;3'<4(>6*80#5, 91%:2&:2&;2&=3':0$9/#<2&=3(<3'=4(=4(<2'<2&;1&:0%;2&=4(<3'<3'=3'<2'>5)?6*>5)=5(@8+@8+91$7/";3%;2%4+1&5*:0$<2&:1%90$<2&?4)9.#3)7-!=3(CBADDC765&&%%$% - - - - - - - - - - - - - - - - -  - - - - - -    ?7)?7)?7)@8*A9+D;-B:,?6)?5(<1$9/":0#;0$;2%;2%<3&<3&;3&;3&=4'<2&:0$8.!:0#;1$9/"4*5+9.";1$9/"8/!7. 6, 8.":0$9/#7-!6, 5,4*4*5, 6-!1(3+1(.%.&,$+#0(.',%)"(!###%%%$$$'''  $+! - - -   -   -  -%%%$%%%%%$$$###('(      - - - -  - - -   - - $*. -)*@=>>999888888777888888666666777555111++++++......+++)))(((&&&### -        - -  - - - -      - -   -  -    ' & (!("$%     -   -    !')*&#&7(">.*"  -   #,& ) )    " "%(9)#<+&-*.3"4#3!06-#7/$90%91&91&=4)<4(=5)90$5-!7/#91%:1%;1&<2&:0%:0%<2&=4(=4(?5*>4)<2'<2':1%8/#;1&>4)=3(>4)=4(=3(>5)?6*<4(<4(@8+?7*80#6/";3&;2%5,1&5+:1%;2&:1$90#<3'>4(8/#4*7-">4)HGFDDD321%%$$$$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - -      ?7)?7)@7*@8*A8*C;-A8*=4'=3&;0$9/";1$;1$<2%;1$<2&<3'<3&<3&=4(=4'8/"8.!9.":0#8.!4*4*8-!:0#8. 8/!9/"6, 8/"9/#6, 6, 7-!4+3)4*8/#7/#2)3*3*0(0(.&-%.&-%-&*#*#' ''''''((( !  '.#  - - - - -      &''%&&%&&&'("""   - -     - -    -  - - #,--**MKJLKJ;87)&$///+++(((''' """$$$''''''%%%&&&'''%%% ###+.',&.(-%))  )'6!7,#4( 6( ;0&9/&7#+ "& -$2+!7.%8/&90%7,"7'(" 3!:-#71%83'<,$4,&$ ,$ (7"., ( ".A*M;-hT?   % -.-//.+/--20.0..0..1.-/-10/010021132/10565342.2//20453575465354343565565454354343575454565454575576565354454565565565676576454565565565565565576465454465354343454354343454343ooorsprroomksomnmiggebbccceffghhhfffdddbbbaaabbb\\\SSSNNNOOORRRUUUQQQPPPPPPOOOKKKHHHHHHEEEDDDGGGEEEEEEEEECCCAAA???<<>><<<:::999777888555444333222111111...---,,,,,,,,,***&&&'''######"""           -  - -    -   - -  - -  !    -(##)#'!%%       -      -!&**'"!, 6*'$     !),()9+&/#-!! "! #$  2"B1,2!(.2!4#4"-6.$7/$80%90%80%<4)<4(<4(:1%7."7."91%:1%;2%;1%9/#:0$:0$<2&<3'>5)>4)<2&<2':1%8/#;2&?5*<2&>4)=4(=3(>4)>6*;3'=4)@7+?6*80$7/"<4';3&5,1'5+;2%=4';3&91$<3&=4(8/#5+8/#=5)IHGBAA//.$$$$$$  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - -       ?7)?7*?7)@8*@7)D;-@8*<3&<2%:0#:/#;1$<1%=3&;1%;1$:1$;2%;2&;2&<2&<2&:0#:0#<1%9."5*5+8.!:0"6,8.!:1#8/"9/"8/"5,4*6- 4*1(5,90$80$0'3*4+ 2)1*1)0(.&,%.&+#(!)"(((''''''!!"  *1&! -         - -$$$###$$$%&&$$"      - - - -   -  - -      "&.!-. ++SQQ=:9)%$888222///***'''$$$###"""###%%%((((((&&&&&&&&&&&&%   % +'.* 0* 0(3) 2'5%,0!6( 5+"5,#6/%9/%7*!/( !$ -/+ 0/#6/%90'90%8+"1% 5>0&80%90%>2(?/'?+$4% (2;(!9&' -* -+ -%+ @!U:/ZF6  -   *+*0//-//,0/*,*)+)-0-02020/210---,.-/00232010242343353686232343343465465454464343353354454687465454454354454454454464565454465576354454353465465465465454464353454343132232oompolutqtqornkqmjihhaac``bbbcgggddd___bbbaaa```YYYVVVOOOKKKFFFJJJQQQTTTSSSSSSSSSHHHEEEIIIEEECCCDDDCCCCCCEEEBBB???<<<999<<<>>>;;;:::::::::777888555333111444333333000------,,,******)))***&&&&&&"""$$$&&& -          - - -      -  - -    - -$#"%) (#%"'"*"* -  #     -      - %*+)$!!#   !"$#"%*0 F.)R72O62M85A.+(- """ !!!!   (=/)7("(+2!4#4#0!7/$8/$7/$8/$7/#=4)<3(<4(:2&8/#8/#91%;2&<3';1%:0$<2&;2%=3'=3(?5)>4(;1%<3'<2'90$<3'>4(:1%=4(=4(<3'=4(>6*<4(=5)?7+>6)80#6.!;3&;2&5, 2)5, ;2%<4':2%91$;3&>4(9/#5+7."=4)RG7FAA+++$$$$$$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -     ?7)@8*@7*A9+@7)E<.@8*;2%<2%:/#:/#;1$<2%=3&<2&;1%90$:1%;2%<3&=3';1$;1$<2%=2%9/"5+5*7- :0#8. 8. 8/"8.";1$:0#7. 6- 7.!5,2(5,90$7/#1(4+4, 3* 2*1)1)/'+$+$*#(!)"%%%((('''###  )1&" - - - -  -  - -  - - !!!"##&'' - -     - - - - - - -  - -  -    !(. -/!,)444333000---(((%%%%%%&&&&&&%%%"""###%%%''''''&&&'''&&&$$$!!" -  -$0+!1+!3+"3*!2)3$ &7,"6,"2-!20$4,!,"% +" 5)!8.$60'8/&=/&;.$6)7&?,$)-$:.$@2)A1(=.%91%0#) &24  -!<& 7+ -, & & -8L7+VC4i !(*)/-....+/-,.,//.-/-,.,1/.321010010121/10/0/121010232353343464242343454464354242343343565676465242454464343465464565465454454465454353242353232454464454354343243343132qpmnnjomjromqmjligigifeibbcaaadddfff```]]]^^^ZZZYYYVVVTTTQQQNNNIIIJJJOOOPPPRRRSSSMMMCCC;;;EEEIIIFFFFFFEEEEEEEEE>>>>>><<<;;;:::===;;;777:::999777666222//////000333222000---++++++***+++***'''$$$%%%%%%%%%"""$$$           -       -        - -  -%'&'"'#("+ "       -      $*,,'#     "####&*)('7$ B*&B+(A/,&*()#$#   ""   #-.$(05#5#0#0!8/$80$80%7/$<3(;3'<4(91%80$90$91%<4(=4'8/"8.!:0#:1#<2%=4'?6)>4(;1%=3'=3'9/#<3'<2':1%<3'=4(<3'=5)>6*=5)>7*A9,?7*91$7/";3&;2&5, 2(5, <3'<4':2%:1%;3&<3'90#5+7.!=4(KB3@==&('$$$  - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - -    RF3=5'?7)?7)A9+A9+C;-@7*<3&<2%:/#:/#;0$;1$;1$;2%:1$:1$<3&;2&90$;1%=3&<2%;1$;1$8."5+3)6- :0#9/"8.!7.!8.!;1$:1$90#9/";2$5,3)6- 91%6."3*4+ 5,!4,!4,!3+ 2*2* /(-&*"' (!'!(((&&& #$# #&      - - - - - - -   - - - -     - - - -   - - - -   -      !'-.0"-)***)))&&&'''&&&&&&&&&&&&$$$$$$######%%%&&&%%%%%%%%%$$$ !" " !*%1* 6-$1* /(.#*.9+"30#1-!40$3)&)7' :2(;5*("( ' 6- ) -&3J0&WC5a&!$,'%)&()(*'(+)**-,+.,-.,-.,,-,././0/020121/0/010021021021132354343454343020121343454343343353686576464454465354232454354354454354343343353343131121343454454565454343243cccghdllhljgmignkiljjghkggjeeheefeeefff]]]^^^___]]]XXXXXXVVVSSSUUUPPPHHHMMMRRRRRROOOMMMIIIDDDDDDBBBEEEEEEHHHFFFEEECCC???>>>???===<<<===;;;999999888666555222000111///111...---+++)))'''))))))(((%%%%%%%%%'''&&&&&&&&&"""                - -         ')(!%!&")!#  -     - -   #),-)#!!   !"##%&'%#%#'*'%#%'%&$!!!"!!$!&-2#3#1". 8/$8/$;2':1&;2'<3(:1%7."80$:2&;2&<4'=4'90#8/"90#;2%<3&>5'?6)>4';1$<3&<3'8."=3'<3&:1$<3&=4'<4'>6)>6)=6)>7*A:,?7*91$80#;3&;2&5, 1'3*<3'>5)<3':2%;2%=3':0$5+7-!>5(D;.;99''%$$$ - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - KA/>5'?7)@7)@8*A9+B:,A8*>5(=3&:0#;0$;1$;1$;1$:0$9/#91$;2&;3&<3'=4'=3&;2%;1$;1$:0#5+1'8.!:0"8/!4+7. :0#;2%<2&;1$7. 9/"7- 5+7.!90$6."1(2)4+ 4,!5-"3+ 1)1* 0(-%)!' (!("(((''' $%$    - - -    -  - - - - -  - -  -       - -     - - -   -  -  -+). / /!-*%%%&&&&&&&&&%%%%%%&&&%%%###%%%$$$###$$$#########!!! -  -$ % )1( 4.$5+"1'3( ',:,#2/"1- 50#8-#2$7-"91&:0'>4*74(6.%:$ -%5+!82&91&=2'/"8+ 90%;4(:4(;4(:4':0%>.%6&'%)& -*$ 56+,( "+ -D0%QG5~pR!$"!%"%(%)*)+))(&'*,++-+,.-,-,,-,,-,-/-.0./10021./.././0/121010121242243132021121242354343465353687243121465465454243565343021021243353121131232132021121132353454464343`bdfhjklinlilhfjgejjkijmhilggiggghhhfffaaa___```[[[XXXVVVWWWTTTQQQWWWUUUJJJLLLSSSPPPMMMJJJGGGHHHHHHFFFAAA@@@@@@CCCCCCAAA@@@>>>;;;:::888999777777666666555444111111111---...,,,++++++((('''(((&&&$$$###%%%&&&%%%$$$''''''$$$ -        -     -          -   -'%)#*#'( -  $  -  -     "(+-,'!! !"$%&%%$%($#$##$%'('%#""! !!%*0 1!/ -90%8/$:1':1&<3(;2(;2'8/#7."91%;2&;2&=4(;2&7."8/#;2&;2&?5*@7+=3'90#<3&<3&:0#>5(=3':1$;2%=5'=5(>7*>6)<5(>7*@9,<5(70"7/":2%:1$6+ 1&2);2&=4(<3':1%;2&>5);1%5*7-!@6)C9-544###$$$  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - F=->6'=5&>5'@7)A9+A9+A9+?6)>3';0$:/#:/";1$<2%:0$:0$:1$91$:1%=4(>5(<3&;2%;2%;2%;2%6,2(7- :0"9/!5,5,7- 9/"<2%<2%7- 7- 7.!4,5,80#7."1)3*3*2*2*2* 1)3+!/',$+#)")"("%%%))) %&%!    - -  - -  -     - -        -         - - - - - - - -  8+'6($'---,+%%%%%%%%%%%%&&&&&&'''&&&$$$%%%$$$###"""   ! '!  -) 0+!8+#7)!2* &#5)7) 3$9* ;.$9-#8/$81%<1(2&2* 1%$$ 0#8/$:3';2':/%" 4)9/$8/#8/$<4(:3'70#:0%;0&6),#-22) /- +&$2O1)\@6mUC"%"$&$%'%%&%(*(*,+*+**+**+*+,+*,+,.-,.,-.-,-,+,+,-,-.-.0./0/././0/121131454243021232343343343132010020243131353121242121121132232343021232132121/0/010131232232121^bd[_`egilmonlkkhgffhghkghkhhieeedddfffdddeeebbbbbbWWWWWWYYYWWWPPPTTTTTTLLLIIILLLOOONNNNNNLLLIIIFFFHHHEEE@@@AAA:::<<5'=3&>4'>4(<3&>5(?6)?6*@9,@8+;3'7/"80#;3&;3&3)1%4+<3'<3';2&91%;1&?5)=2'5*8-!@5)B8,00/###$$$ - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - C:,@8)?6(?7)A8*A9+A9+A9+?6)>3';1$:/#:0#;1%<2%;1%;2%;2&:1%;2&=5(=5(=4';2%:1$;1$90#6- 3*8.!:0"9/"8. 8.!8.!7- <2%;1$8.!8/!8/"6- 6.!6- 4, 3+2*4, 2*2*2+ 1*3+!.'+#)"(!,%+$(!'&& %'%!   - -       -            - - - - - -     - -   - - - -  7*&8*&$,-.,*%%%$$$%%%&&&%%%&&&&&&######%%% !  %%# " 2$8+"7+"3)4* 3(3&&3!;-#8-"80$90%9-$*' % ! 1#;1&90%<3(=1'=/%0%7,!8.#5+ .$3+82%81$71$72%71%6+!( +- 2&,2& ./- ( & ?$N:-YK:"$##$#$%$&('&'&#%$')(')((*))*),-,,-,-.-+,+)+*,-,+-,-/-./../.010121010232353010243121121/10010.0/132343242343132454021232243243343353454242232132343131131efh_bdTWYY[\ddfhhjeefddgccgeehgggeeedddgggccc```aaabbb^^^XXXVVVWWWVVVPPPNNNRRRKKKIIIOOOMMMLLLMMMLLLIIIHHHHHHEEEBBB@@@>>>:::???@@@;;;666777777555444444777666333333000......***)))***'''((((((&&&&&&%%%&&&(((''''''&&&&&&&&&%%%&&&'''((()))        -        -   - -      -'&& )"  -"  -    -   -  &*-1 *"(5'!/!"!#%$###&'!#!!"$$##!! "!%)/0 --90%7.$8/$90%<3(<3(:1&90$:1%90#<3'<4':1%6-!8/#80$90$=5)>5);1%;1%>4(>4(=4'?6(>4'=3'?5(@6)>5)?6*@7*@8+A9,@7+;3'80#80$;3'<3'6- 4*6- <3&<3';2&;1&;1%?4)>3(7+ 8-!?4(A6*,,,###$$$  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - -B:+?7(=5'?7(@8*A8*A9+A8+?5(=3&;0$;0$<1%<2%<2%;1%;2%;2%;3&=5(>5)>5(=4';2%:0#:0#8/"6,4*8.!:0#90"9/!9/":/#7, 9/";1$7- 7. :1#8/"5,5- 4+3+4, 3+3+4, 4,!2*3+!/',$)!'*",%*#'&& &(&!   - - - -   - -    -           - - -      - - -       4'#7)%%./ 0!.-'''%%%%%%%%%'''&&&### "#$  -   -#  " 5) 8,#7+!7* 2#&  '5-"8/$5-!7/$81%8/$3$) ( 03(<1':/%)9) 8,":.#9-"9+!8* :1%71%90$7/#91%92&:1%9' 1& ! -'*& # -5#*14( $ 2P0)`F:i$&$"#"#%#$%$%'&')''(''('(*)*+*)+*)*))+),-,-/.-.--/--/./0/./.-/.020132010.0//10121-/.././0/132242121232/10010010021/10131232121020132232132232121adf`de]abYZ[[[]ccdffgeeefffccddddddd```cccfffccc^^^\\\\\\[[[ZZZXXXXXXQQQQQQQQQNNNIIIIIILLLKKKFFFDDDGGGHHHHHHGGGEEEBBB======:::999<<<777666888777555777666222444111///---///+++(((***)))%%%&&&%%%$$$&&&%%%&&&'''(((&&&&&&''''''''''''''''''''' - -          - -  -     -    -   -$&$ -   -  !  - -    -$+-/ -%)5'!7)#'! !"! !"## !""   !"!!!!!%)02"0!-90%8/%90%90&<3(?6*;2&7."90$91$<4'=4(;2&7."8/#7."90%=4(>5);1&<2&=3'=4'>5(?5(>4'>4'?5(@6)?6)?5)>5(?7*A9,A8,=4(80$80$;3'=4(7.!4*7.!=3';2&;2&;2&;1&>4(>4)8."8."?4)A7+)*)###$$$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - aT@A8*?6(>5'?6(>6(?7)A9+A8+?6)=3&:0#:0#<1%;1$;1$<2&<3&<3&<4'=4(>5(>5(=4';2%:1$:0#90#7.!5,9/!:0"9/"8.!9.!9/":/#=2&:0#4+7. :0#8/"4+5, 4+5, 80$4, 2*4-!4-!2*3+!0(-%*#(!*#-&)#$$#"')'"     -                   - - - -    -   -      /#0"&.0!1"/ -&&&%%%""""""   - ""& $  " .'"(:)"5+!6*!0#'--"4+ 5,!7/#7/$81%60$5."8-#5.#50%91&>/'>&!)  7*!:4(:1&>>AAA>>>===:::999;;;888666666555444222222222444///...+++(((***+++)))&&&###$$$$$$$$$%%%&&&'''((((((&&&'''''''''''''''%%%'''&&& -     -     -   - -   - -      -$$  "  -              %,. /0'&0"?0+/!!      !  "#"     !!!   "!    #.+&*1 2"0".91&80%7/$:1&:2'=4(90%7/#90$:1%<3';3'91%90$91%7."90%=4)>5)<2&<2&<3'=4'?5)@6*>4(>4'?5(?5(>5)=4';2&=5(A9,A9,=5)90$90$<4(=5(8/!3*7.!<3':0%;1&;1&:1%>4(=3'7-"9/#?5)A7+&''### - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - G>/A9+?6(=5&=5'>5(?7)?7*@8+?6)?5(:0#<1%<2%;1%;1$<2&<2&<3&<3'=4'>5)>6)<4&;2%:1$90#:1#9/"6- 9/!9/!8.!7- 7- :0#;0#<2%<2%4+7. :1$7.!3+2*4,5-!7/#7.#2+5."5-!2*3+ 0(-%+#)"-&.'("' "')'" )(       -        -      - - -  - -  -   -       #%&-0 1!0-!!!      ##&!'"& " - **  ,! '0'4+!5+ 5-"3,!$.?/&9'7':.$73&:4(:3(70%4,"+ 6%* "4#:0&85(81&;.$5(-!6)6* 9,!:,";/$8/#93'81&6-"9,#5 ' $! ( 2# /0+70& % -- I-$V<0^G8eL#$##$###"$$#%%%&&%'''()(()()*)+,+*,**+*')(-.-,.--/..0../../../..0/./.121121121/0/121232021/0/./..0./0//10020020020010/0/dfhgkmejjcghbdebbc`_`b`aeeeeeedddbbb```^^^]]]^^^aaa``````\\\VVVNNNPPPMMMNNNLLLNNNNNNLLLLLLGGGGGGFFFBBB@@@AAA???BBBCCCCCC>>>>>>??????;;;;;;999999666555555222000000111000000...---)))'''(((((('''$$$$$$&&&###$$$$$$'''''''''(((&&&$$$&&&$$$%%%(((%%%%%%&&&""" -        -    -   -  - -   - -     -   -  -        $,0!1"2"*%'>0*7($          "##"!!!   !""!  ! " "!(:,&=.(.*02!/ / -90%80%:2&91&=5)80$90$91%91$:1%;2'90%90%90%7.#8/$<3(>5)=3(<2&<2&<2&?5)?5)=3'=3'>4(>4(>5)=4(;3&>5)A9,A9,=4(90$:1%<4(=4(8/!4*9/#=3';2&=3';2&:0$=4(;2&6-!9/#>5)@7*XK9$$# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - E=.A9+?7)=5';3%:2%>6(@8*?7*<4&?5(:0#:0$:0#;1$:0#9/"<2%=3&<3&>4'=4'>5(<3&:1$90#90":1#7.!5,8/!9/!8. 5+7, 8.!7, ;0#:0"6,8.!:1#6- 4,5- 6-!4, 5, 4, 1*4-!4, 1*2*0(-%*")".'/(+%*##')'! !3'#-" -   -   - -         -          -    -      "(-/1 0-      -  !$$& )%+$(! -  -/ " !  -(2&3* 4,!5."6+!:+#7%"' :-#73'95)84(:1&8( ( # .;/&:2'92'80%9+"/#0#  /  , ;2'93(80%8,#:0$9/#3%* &%/+/#,7!25-% %0 K0%R?/SD2h\B""!"""$$$%&%%&&'(()))'('()(+,+*+**,*)+)-.--.-.0.-/-,.-./../../.,-,/0/.0/010/0//0/121243010/0/020/0/.0./1/010/0/./.^ad]abbfggkkacd^^_^]^^]]a`adccbbb]]]\\\\\\\\\\\\___``````[[[XXXRRRQQQOOOOOOLLLJJJPPPMMMKKKEEECCCEEEDDD???CCCCCC>>>AAAAAABBB>>>999:::::::::888;;;999666444333222///......000///---***&&&$$$&&&&&&%%%"""$$$&&&%%%%%%$$$&&&&&&&&&((($$$!!!"""###$$$%%%%%%%%%&&&&&&       -  -      -  -   - - -  - -   $   -    -        +0 3#4$-(".0! !   !"###"""!! #""   !!#!#  "'=-'B1*3!)03!1"0",7.#90%91&80%;3'90%8/#91%91$8/#91%90$8/#7.#;1&90%;2'>5*=4(;2&;2&;1&?5)=3'=3'<2&=4'=4'>5)?6*>5)?7*A9,@8+;3&90$:2&<3';2&6- 3)9/#<3'=3'=3(90$:0%=3(;1&6-!90$?5)@7+NC2$$$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - -WL9B:-@8+@7*>6(<4&;3%<4&@8*@8+=4';2%7.!9/":1$<2%;1$:0#<2%<3&>4'>4'>5'=4&=3%:0#8/":0#90#7.!4+6,7.!6, 4*6,7- 5+8.!;1$8. 6,9/"6- 5,7/"7."3+4, 2+0(2+1*0(1*0(.&+#+$+$.'.(*$%()'! #6+&+     -   - - -  - -         -     - -         !#'./1!0- -   -    '!%' *#,$,$* ' $) )3+!5.#6-#9.%3$ % 1$7,#6-#;1(<2(:.%:+#,"( 5";0&8/$6.#6,"0"& + 5(0&6*6):-#9+!0 0$7-"90$90$;/$>+"0%!% +*4 -! -684' -$+ 4E/#N>.VI5\Q;l#$####$%$&&&#%#!#!(*)%&%&'&)*)*+*+-,.0.,.,*,+-/.-/-./.,.,-/.-.-.0../.,.--.-./.-.--.,+-+-.-./.-/..0/-.-Y]_]bb_cc\^__`abacbab`^_`__```bbb```]]]ZZZUUUYYYXXXWWWZZZ\\\[[[WWWTTTSSSQQQNNNLLLIIIDDDHHHFFFDDDDDDEEEDDDDDDEEECCCAAA???@@@AAA===:::999;;;999555666666555111000000000------------,,,***&&&$$$###%%%%%%$$$%%%&&&%%%%%%###$$$%%%%%%'''%%%!!!!!!"""$$$######%%%%%%$$$&&& -       -      -     - -  - - -    - -#( !  -        +0 3#5%0 *$#$  !!"   !#%%#!"#""! ! "      !  #:+%D4.5$'-3!2#1"+7.#80$:2'90%:2&80$7."80$91$91%:2&6."6-!:2&8/#;2'<3(>5)=4(;2&;2&;2&A7+=4'>4'<3&=3'<3'>5)@7*>6)?7*@8+>6)91$80#:2%;3&:1%5,3)9/#<3'=4(;1%7.";1%=3(;1%6-!:0%@6*@7+F<.$$$ - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - -D<-B:-@8+?7*>6(<4&<3&=5'A9,@8*=4'9/"7- 9/";1$;1$;1$;1%=3&>5(>5'>4'?5(=3&=3&;2$9/"90#8/"7- 3*5+7-!7- 4*8- 8-!7- 7- 9/#8/#8/#8/#8/#5- 8/#7/"3*3+3,2*3+2*1)2+ 1)0(+$+#' ,%-'*$'**'! '8-)*        -   - -    -     -  -    -          !#'0 0 2!// -   -      $$*#-%-&,%,#(  -+-'' /4-#5/$9,$1"' 26) 5) 7,"1(8,#)"/) %:.%7)!).) -" 4#8.$9/$8* 9+!<.$.!- 6.#90$:0%72$60"4- .#+ !#( 1' )6 $ .94&#' 5"H7)RC3PC0[L8_ "#"!"!%'&&('&'&)+)()(+,++-,*,*(*(+-+,-,,-,-.--.-,--+,+---,-,./.,.-*,*+,+)*)*+*,.,-.-_bdX\]W\\Z^^]_`]]_\[\cab_]^[Z[___```bbb```bbb^^^[[[XXXXXXUUUUUUTTTSSSQQQRRRPPPMMMKKKIIIDDD@@@@@@BBBCCCCCCCCCAAABBBCCCAAA===666???@@@===;;;:::999555666333222222......///...---,,,,,,,,,***)))&&&$$$"""%%%%%%$$$$$$"""###!!!"""###$$$%%%''''''!!!"""$$$######%%%$$$$$$$$$%%%$$$           -             - -"   "!      -     +.3"5%2"*'%! "!      "$$$%""#"""!         #3$D4/5%(+2 2!0!,8/$90%:1&91%:1&80$7/#80#91$:2&;2'5-!6.";3':2&<3(>5*>5)<3(:1&;2&;2&A7+=3'<3&<2&<2&<3&>5)>6)=5(?7*@8+<4'80#8/#;2%<3&;1%5, 3):0$=4'>5(;2&:0%;1%=3(;1&6,!:1%A7,@7+?6*%$$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - -C:,B:,@8*?7)=5'<4&<3&=4'A9+?7)=4'9/"8/":0#;1$:0$;1$<3&=3&=3&=4&>5(<3%<3%<3%;2%:0#8/"7.!7.!4+6- 8.!8.!3)7, 6,6,9/"8."5+6-!8/#6."4+5, 7.!5,5, 5-!3+3+ 3+ 1)3+ 4,!2* +#)!+$,%,%*#*+,(! #,!!  -      -   -          -  -            "$)2!3"1 //    -  -   !"$( +"-'*%+%1(%%*! - & & ! +%61&:+$9+#4+!6*!*# 0$%2)/ /<*#6.#90&;0':+#+$&/$4-"91&9/$:,#;*"4#% /8,"6.#81%91%80#92%5/!4)?& 4" $ (0' 13"*2 +% -' / >>AAAFFFDDDDDDAAA@@@@@@AAA===888>>>===;;;999999888333333333111111...,,,***,,,,,,++++++***((('''&&&%%%&&&&&&###""""""###$$$$$$###&&&$$$&&&&&&&&&###!!!%%%$$$&&&'''&&&%%%&&&%%%(((                - - -      - "  -(#!           *-3"5$3"-('" !! !   !#$%$""##"! !       $/!)%)02!0!,+80%91&91&90%80$7/#80#91$:2%;2&5-!5-!91%:1&:2&=4(=4(;2&:1&;2&;3&?6*<2&9/#90#:1$<3'?6)>6)>6)@8+A9,<4'90$90$<3'<4';2&6, 2(9/#=3'=3'<2';2&:1%<3':1%4+:1%A8,?6*;2'YL; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - -QG5@8*A9+?7)?7)=5'<4'=5'>6)@8*?6)=4'90"7.!8.!;2%<2%<2%<2%;2%<3%=3'>4(=3'>4(>4(=4'<2%:0#9/"7- 5+7- 9/"8.!4*6,5+5,9/#90#5, 6-!90$5, 5-!5, 8/#7/"7.!6.!4-!2*3+ 3+ 3+ 3+ 2*,%*"-%.&,%)"*,- )!      -                  -  -         "$)1 5$000  -   -  -   "#%&,#,&)$*%.&-#%   0/(+# 6$6*"9.%7.$4) . %3(( 2)6#/:,$9/%4/#71&81&9' ," $! 5."8/%8.$8-#:,#0 .<*"7,"#60#71$:0$90$5/!3, 6-!6+".!$  " )((2"! (6#53/ '), 9#G1%L8)P>-ZI6{gL#$# !"!"$#$%$%&%$&$$&$'('(*)')(()(,,+++++,+)**()('((&''())'(()*)(*)'*(\ZZaaaabb]_`Z[\QQRNMNYWX_^^___[[[\\\aaadddeeebbbaaaaaaXXXTTTQQQOOONNNMMMLLLMMMHHHFFFFFFEEECCCBBBAAABBBBBBAAAEEECCC???AAA@@@???>>>:::;;;<<<:::777888777555000111000...---***++++++***)))(((&&&%%%&&&&&&%%%&&&&&&""""""$$$$$$%%%%%%###&&&$$$$$$&&&%%%###!!!###%%%%%%%%%'''&&&'''''''''%%% -            -   - -      -       ##     -  -    #,4#6$3#/)&&!       !"$%" !###"!!       !$%'.0 0 -+91&91&:1&80$7/#7."7/"91$90$91%6."5-!90%:1&;2&;2&;2&:1%:1%80#<4'?6):1%:0$:1%;2&<3'@7*=5(>6)@7+?7*;3&90#91$<4'=4'<2&6- 1(8."<3&<3&=4'<3&:1%<3'91%2*7."@7+>5):2&A8+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - E<-@8*C:,@8*?6(=5&>5(>6)@8*?7*?6)<4&:0#9/"9/"<2%=3&=3&<2%:1$:1$<3&;2&>4(>4(>5(=4';1$:0#9/"6,4*7- :0"9/!7- 8. 7- 6, 8/"9/"4+4+91%6-!4, 5-!8/#7.!6-!5- 4-!1)0(0)3+ 5-"3+!.&,$/'/(.&*"*-.+"                  -  - - -  -  -            "$*2!3$5#.1! -   -  -   #$%' +#/'-%+'&#.(."$ # )/ ) *& -#6-$6.$5,"6,#7-#9.%72&4/#5$,5/$50$3/#71&80%*"/:' +"6.#7/%6.$4.#8.#;-#81%84(:-#-7)<0%90#8."7."4, 5-"5,"5)!9!-#!! -()# 1+./0-% -% /7!A, K9+PA0SF2bU>>BBB@@@===AAA======<<<<<<;;;:::777777666666444111------------++++++)))'''''''''&&&(((&&&%%%&&&'''&&&$$$###"""###%%%$$$%%%%%%###&&&'''%%%!!!"""%%%&&&%%%$$$&&&%%%((('''%%%!!! -       -   - -           - -  # "    -   -   ",2"7% 6%1!+&./ $   !!""  "!  ""!!! !        "%%+/!0!.,90%80%91%8/$7/#7.#7/"91$91$91%7/#6-!:1%91%:2&;3';2&:1%=4(90#<3'>5);2&:1%;2&:2&=4(?6*=5(>6)>6)=5(;2%:1$:1%=3'<3&<2&7- 1(8."=3'=3'=3'<2&;2&>5):1%0(7."?6+>5)<3(<4( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - _Q6(>6)?6)?7)>5(:1#9/":0#;1$=3&=3&<2%:1$;1$=4(=3(?6*@6*@6*=4':0#9/"90#6,4*9/!:0#9/!9/!8. 5+5+7.!7-!2)3*6."5-!2*6-!6-!5- 5, 4, 2+/'-%-&0)5-"2+ /(/'2*!0) .&)..,#     -      - - - - -  -   - -            - ##*3"4% 4#-2! -      -  $% $)#,%0) /')%($,'/&0 % #" -  (2*'' 3!5+#5,#6.$7-$8.$72'4.#1!%0.!30$4/$90&:+#( + 63'54'9/%5,"6.$7,#2$3)9/$82&83';-$/# -;-#90#9."9,!4+3."2-"2+!6-#8-$4'(! -$ -)/$ -& - (5 6/ ' #) 9G.$K3'Q;-XE4^L:n"#"!#!$%$%'%$%$$&$&'&&'&')(')(%''%''&'&$%$#$#YVW]]]abb`a`\]\]_^]_^YZY[YZZZZ^^^```[[[YYY\\\aaaZZZXXXWWWTTTRRRRRRUUUTTTPPPPPPNNNMMMHHHFFFIIIHHHGGGEEEBBBBBBBBBBBBCCC???@@@>>>:::===:::999999888:::666555444222111///---,,,+++,,,)))((((((''''''%%%&&&'''%%%$$$$$$&&&'''&&&&&&"""$$$###!!!%%%$$$###&&&'''%%% !!!""""""&&&'''###%%%&&&'''%%%%%%$$$$$$      -      -  - -  -  -   "$   !$    -   -   /3"8'!9("6&*'1 @0*0!   $! "  !!! !!          #$(/"1"1",7/$7/$90%8/#7/#7/#91$:2%91$:1%7/"7/#:2&91%80$;2&;3':1%=4':1$<3&=4';2%;1%<3':1&<3'>5)=5(?7*>6)<4';2%:1$:1$<3&=3'<2&6- 1'7.!=4'=4'<2&:1$91$>5):1%/&7/#>5)=5)<4(:2&OD4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - -E;-@7*A8*B9+@7)@8)>5'>6(>6(?6)?7)?6)>5(<2%:1$;1$:0$:0#<2%;1$;2$;1$<3'<3'=3(>4(<2&;1$7. 8.!;1$9/!4*:0":0"9/!9/!8.!5*4*8/"7-!2)2)5-!6."3*5-!6-!6-!4+4, 4, 0).&.&/'3,!2* 1)-&-&-&.'(..+#             - - - -       -            $/!'*3"5& 5#.2" -      -  $ &!& (#(#0* /'/%-$.(.)0*,! - $ # 3 $  -(& "' 1%4+"3,"7-$7.$8/%5/$1, 2(7( 6-#1-!8/%:-$0 <)#95)74'8-$6,"5.#.!$ --#51$;2'<0&7.$4+!.%7,"4'1$+0%6,"1%/$4,!8/$9.%4&0( ""$ -$ ,$  /!-' 60+ ( -# # 0>)M:,SA2UE4XH5~\! "#" ! !#""$#$%$$&%%&%%%$$$#&&$"#!ZXYZZZ^_^bdcbdc_`__a``b`\][[[[RRRWWW[[[ZZZTTTPPPUUUVVVTTTTTTTTTUUUSSSTTTUUUTTTOOOLLLKKKIIIGGGHHHFFFDDDDDDBBB@@@???@@@AAA======>>>:::;;;666666555222444777555111111000...,,,,,,***&&&(((&&&$$$$$$%%%%%%&&&&&&$$$!!!###$$$%%%'''%%%"""$$$$$$$$$#########%%%&&&%%%$$$###### ###&&&%%%$$$%%%&&&$$$$$$&&&$$$$$$ -               - -  -    #'"%""#"#     -   -   0 4"9'!;)";+$.).D4.:+&"  !" #     !!!!!            #'$$(/ 1"2#+6.#7/#91%7/#7/#7/#:2%91%81$:2%7/"80$:2&91%:1%:1%;2&:1$:1%:1$=4'<4&:0$:0%;3'<3';3'?6*=4(>6)?6*=5(;2&:1$:1$;2%=4';0%6, 0'7.!>4(=4';2%8/"7/"?7*91%0'7/#=4(<4(<3';3'?6) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C9,A8,B9,A8+@8*?7(>6(=5(?7*?7*@7*@8+?6)=4':0#:0#;1$:0#=3&;1$;2$:1$;2'<3'<3'=3'=3'<2&:0#:0#<2$90"5+9/!:0"9/!9.!8- 7-7- :0#8."2)2)80#6."3*3*6-!7."5, 5-!5-!3+ 0(/'1)3,!1*0(/(0(1* /'$(-. +#! "&     -   - - -     -              /">0*-,2!4#3!03#! -      -  $ '!("(#'!.(/(.&0'.(+&,'.#,#&%('/*# -!+ 5$3*!2+!80&8/%5-#1, &/7-#1-!8/%:0&51%61%<0':.%5( 6%5# % 3(91%=0'>><<5(;2&;2%;1$90#<2%;0%6, 0&7.!>4(=4':1$7/"8/"?6*91%2)8/#>5*<4(:2&<3(>6*  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - "PF7@8,@8-@8,B:->6(=4'>6(=5(?7*?7)?7*A8+@7*>5':0#9/";1$9/">4'<2%:1$:0$<3'=4(<3'<2&<3'<2&;1$=3&<2$9/!7-9/!:0"9/ 8. 6,5+6,:0#7-!2)2*6."5-!3*3+7/#6."4, 6-"4+ 3+ 4,!2*3, 3+ 1*0).&.&1* 0()). .)$!"6*%1%!        - - -         -             2%C5.0!-4"6$5#2 4## -     - - - "% $%$*$-'-(-'0(1'1&/%0'3*!+ " -% $ /($ +&%(1&1-"4.#8.%7/$50$7/$;.%2!" 3%8/%31$52&;1'9-$+ !# 0:.#;/$>.%@/'9)!(" 3(5.!5- 6, 9(/ .2*5.!7/#6/#4/#3-!2'2." # -),(-& -+*) 40, ' #& --6<"F/!S<,[D4_J9bM:iOry ^\\\\\YZY[\[TVUZ\[]_]Y[Y[\Z^^^YYYXXXRRRRRRPPPXXXUUUYYYWWWRRRRRRNNNOOONNNOOOKKKKKKMMMLLLLLLGGGBBBCCCAAA===@@@<<<<<<@@@@@@<<<<<>>999666888777666666444444555222000000///...++++++(((%%%%%%&&&%%%%%%$$$%%%%%%&&&&&&&&&&&&###$$$%%%&&&&&&%%%$$$&&&%%%&&&''''''&&&&&&%%%%%%&&&'''%%%!!! """######%%%############### - -          -          &&!#'!     -     #/7$;("<+$8' 0,5$<+&/!&#""#!         ! !    !!0 D405$ '(.1!/ +-91%<3'90$6.!7/":2&:1%90%90%80$80$80$7/#;3';3';2&8/$90%:1%<3'<3':1%;2&;2&;3&=4(?6*=5(?7*@7+=4(90$;2%;2%90#<3&<2&6-!0&7.">4'<3&:1$80#90#=5(91$3+80$?6+<5)91%:2'=5)LB3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - -  71&?9.?8,@9-;4(<5);4'<4&=4'<4'>6(A8+?6)?6(:0#7- :0#8.!=3&;1$8/":0$=4(>5)=3'<2&=3'=4'<2%:0#:0"7-6,9.!;0":/!8-6,6,7-90#6, 2)2*5-!5-!1)2)6-!7."4+6."2*1)5-"3+ 5-"2* 1*1)0(/'0)0)+,0"0",$#)=1,/#     - - -           - -        0#A2-3$/5#7% 4!0-$ -   -  - - &!% *&&!'!,&.'-&,&/&0&2(3)1)3,"1(+#$&% -)'# -$ "' 3'4,#7.$91'60%7.$7*!!  -6&6.#10#32%92':.&4#( -#& 1&70$5."251$ 1!9/$70$70$8.":'" $ 4%/ ."7."8."7-"6,"4*3)3')%  ! **$ %. 5%& .;$6/& -%( 0 -7?#G."N7)O<-SC2eabXWW]]]cdcZ\[Z\[VXWSUTRTRUVUWWWTTTRRRSSSTTTTTTPPPWWWVVVYYYUUUPPPJJJFFFJJJNNNQQQQQQMMMJJJHHHIIIEEEDDDKKKCCC>>>>>>@@@BBB???<<<:::888;;;;;;777555555666555333222333222000///------,,,***((('''%%%$$$$$$$$$$$$$$$%%%$$$%%%$$$###"""#########%%%&&&&&&%%%$$$%%%&&&&&&%%%&&&%%%&&&&&&%%%&&&%%%$$$!!! """##################        - - -      -     '% $%    -    - 6%5#=*#?-&:)"2 ++.' #!!"" !""! ! !        !  !!     ,F62:)&''-1 0 +,91%:2&7."6."7/#;2&90$8/$7/#6."80$:2&90$:2&;2';2':1&8/#90$<3';2':1%;2&;2&;2&;2&=4(>5(?6)@8+;2&8/";2%<2%:1$=4'<2'7-!0'8."=4';2%:1$8/#90$;2&:2%4, 80$>6*<5):2&91&;3'B:- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - (#50%82&93'81%;4(91$:2%;3%<4'?6)?5(@6);1$7- 9/":0#>4';1$:0#<3&>5)?5)>4(=3'=3'<2%:0#=2&=2%7- 5*7-;/":/!8. 7-7-7-90#6- 3*2*5-!4+0'2)5, 7."6."7/#4+ 3+ 4,!2*4+ 2*/'.&-%0(3+!2* *,/!. *$&0#<0+*     - - - -         -         , <-(2"-5#9&!7$3!/ % -   -  -   '"(#&"&!+%.'0).',%.&/(3*3*4+!7.#5+!5)("! & .  - -$ $!# /%5.$91'8.$8,#* )8/%80%3."4/#80&8)!+# ,  +"51$3- 3' '.;*#90%71$71"6/!7/!1&2&4&((6+ 6,!6,"8.#5+ 3-"0+.&/"*$ -  +1- -)1 -(6!,076/ , &'+ 3> a^_UTTZ[[cedbdc[\\]_^VWVNONVVVVVVUUULLLKKKSSSUUUUUUUUUWWWVVVPPPOOOFFFEEEDDDBBBHHHMMMNNNIIIHHHHHHIIIFFFEEEGGGEEE>>>@@@BBB>>><<<<<<:::777888999666444222222333444333111///...---***)))***'''&&&###$$$$$$###$$$$$$ """%%%$$$!!!!!!"""$$$###"""$$$&&&%%%$$$%%%&&&&&&$$$%%%&&&&&&%%%%%%&&&&&&&&&&&&%%% !!!######"""######$$$"""       - - -          -  !%%!     -    -2"5">+$A/(?.'6$.,*'! ##$!"!      !!  "   !  !!!!  -   '=.*:+&(&,1!0 ++80$91%6."5-!6.":2&:1%91%7."5-!90$:2&91%:1&:2&;2&:1&6-"8/$<3';2&90#:1%;2&;2%;2&<3&=4(?6)@7*;2%8."<2&;1%:1$<3&;2%6, 0'8."=3'=3':1%6."7.":2&91%4, 8/$=5)<5)<4(:2&;3'?7+[N; - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - -  - - - - -  - - - - - - - - - '".)0+ 4."6. 91#:2$:2%=4'=4'?5(90#7-!7- :0#=3&;2%;2%=4'=4(=4(>4(>4(=3'<2%:0#:0#:/"7-6+7,:/":/"9.!7-6,7-:0#6- 3*4+8/#2*/&3*5, 6-!4+7.#4, 4, 4, 2*2)2*0(/'.&0)2+ 2* ,0!2$2"-&%1$ 7*&&     -         -  !      #((,4"8% 7$3"-' -    - -  -$'"*%+&)#*#/(1) /(0(1)0)3*3+ 4+ 6-"5+!6,!2(( $#*&  -(-)% & 3#8,$8-$6,"2(&8*"4+!3+ 0)/(6-#0# ' 7)!7-$0* 51$3- 6#$ !% 3%90%71$92%5/!81$80$7-"6).!(2%5* 1*3+ 4-!3&4'2%2$2#1"/( ! - -% ,)" -,) )' *1,.-' -YWWVVVVWWTVUegfegf^`_[]\abaYYYVVVTTTMMMLLLLLLMMMYYYXXXUUUSSSSSSOOOKKKIIIKKKOOOLLLBBBEEEHHHHHHDDDDDDDDDDDDDDDDDD@@@???>>>===>>>===;;;<<<999777555444111///000333111111,,,******+++'''))))))%%%&&&###$$$######%%%### &&&""""""""""""$$$$$$###%%%&&&&&&&&&''''''%%%$$$%%%&&&&&&&&&%%%%%%%%%'''%%%%%%###"""!!!"""###$$$""""""### !!!###    -      - -  - -   -   ( (#"    - -   -,5"=*$B/)A0(;)#1-*'$&%# "" !!!!  "   !!!!  -   +/!&$(/!1".+70#90$6."5,!6.":1%;2&:1&6."5,!80$90%80$:2&;2&90%90$7."90$=4):1&90#:2%;2&:1%;2%<3&>5(@7*?6*<2&8/";1%:0$;1$;1%:0$3*0&7-!=3(;1&90$5-!7.#;2'90%4+ 7.#?6*>5*>5*<3'<3(?6*?5( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - -  - - - - - - - "$*$0)6."91$80#;3&=4'>5'8.!8.!6,:0#;1$:0#:1$<3&=4(>5(>4(=4'=3'<2%;1$:0#<1$:/"8,7,;/";0#9/!7-6,8. 9/"4+2)6-!90$2*/&3*5, 4, 3*5-"4,!4,!4,!3+ 0(1)1).&/(-%/'5-"+0!3#3".'$($              "!      !#&+3!7$7$3". (    -  -   &!'"*%)#'"' *#.'0)1* 2* 1)3+ 5-"5,!4+!5,!4*2(3%(!$ $ -% 4!# # -) % 3$5+#2,!3.#2+!5+"-"  +$0!(' 4%9-$8/&3,"3/"3, ,$ -(/$80$70#9* 5%<,"=/%6/"5+!1$(1$/$/%-$)!7*!3%(*1&3(6* 5'/ $   $ -*.($ . 2 !$ 6#ba_a`a\\]WXX[]\Z\[acbbdcVXWVVVZZZddd]]]YYYMMMLLLJJJTTT\\\TTTPPPNNNTTTQQQOOOMMMOOOSSSMMMEEECCCDDDBBBDDDBBBCCCBBBDDDBBB;;;>>>???>>>===999888888666444444222......000000...,,,+++)))((('''&&&&&&%%%######%%%&&&$$$###$$$%%%""""""%%%$$$######"""###$$$$$$###$$$%%%&&&&&&%%%$$$%%%%%%%%%%%%%%%%%%%%%&&&&&&%%%%%%&&&$$$%%%%%%$$$###"""""""""         - -    - -      $#$! !  - - -   -#4":'!D1*C1*?-&5"/,++(%! ""     !"!! !  !!!!!        #""&,2"2",70#8/#5, 5, 7/#90$:1&91%7."5-!90%80$91%<3(;3'7."7.#8/#90$?6*90%6.!:1$:1%:1%;3&<4'>5(?7*>6);2%8/"9/#:0#;1%;1%:0$3)/&6-!=3':1%90$8/#80$;2&:1%5, 7/#>6*?6+=4);2'=5)@7+:0$ - -  - - - - - - - - - - - - - - -  - - -   - - - - - - %!-(4/%50%92&:2%;3&90"8.!6,9/#;1$:1$;1$:1%<3'>5)>4(=3'=3';1%:0#;1$=3&;0"7+7+<0#;/"9/!8. 8.!9/!9/"3*2*6-!6."2*/'3*5, 4+4+4,!5-"6-"5,!3*/'1(0(0(0(-%.&3+!-2#4$3#,&#  !     - -       "  !     !"$)2!8% 8% 4#1#*   - - -    '"("*%'!)#)"-'/(0)3+!2+ 0(4, 6-"5-"4+!7.#7-#3)5+!3') $ -* +*2&   -" -00(6.$4,"6,#5*!3'4&4$:(!0 1#6-#6-#7-#6+!:-#0 -,7)!2&4+!7.#:0%- 4%8+ 3-!3* 5( ."1%&*'! -3&+ %2(1(4* 6+!3'2$1!,#  $ -' *- " 1$ -WVU\\]]]^]]^Z[[UWVfhgdfe`aaYYYZZZ[[[]]][[[ZZZOOOJJJOOOUUUUUUQQQOOOOOOOOONNNNNNKKKKKKKKKGGGIIIGGGBBBCCCAAA999BBBAAA@@@===:::999===;;;777555444444222000///---,,,,,,---***((('''(((***'''%%%""""""""""""###%%%%%%%%%$$$$$$%%%$$$"""%%%###""""""###"""###$$$###"""$$$'''$$$&&&'''&&&&&&%%%$$$######%%%&&&%%%'''%%%%%%$$$%%%&&&&&&%%%"""######%%%       - - -      -    (!&!!"#       -    -/7#D0*M;4D2+7$/4">,&>,&-#$!!"    """ !"!     !       ""  %.!3$4$,91%8/#2*3+7/#90%8/#80$6."5-!80$8/$90%;3';3'7."7.#8/#90$=4)80$90$;3&:2%:2%<4'=4'?6)=4(=4(:1%8/#8."90#:1%:0$90$4+/%6-!=3(;2&90$8/#91%;3';3'5, 7."?6*>6*<4(<3'>5*@7+6."I<, - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - -  - -  - - - - - - - ",'1+!81%70#6/!80"7-5,8.!:0$:0%;0%=3(>4(@5*<2&>4(<3':0$:0#<2%<2%:/!6+5);/";/#:/"9/!9/":0#;1$6, 4+6.!6."3*/&2*4+5,!6-!5,!6-"5,!5,!4,!2*3+ 1)2*1)0)2*2* /4#5$3"+&#!#             !"!     !#%)3!8% 8%5%2%,   -  -     '!)#+%)#)#)"+$/(0)0)0)0(3+ 4,!5-"5,!5,"5,"5,!2+ 5-#2(& #% ) 2#  $ ! -" *4) 5+"3*!7/%60&1,!2-"5/$*!  6,#4* 5+!6,"6**(8' 6+!4,"3* 8,#3# & 5* 3+ 2+3)7'%+++6)!5'3%$ *.$0'2+2+/(0(1(.%.#/$*! -  % -% % ' ! bbb``aZZ\]]_``baaabcbbccdedaaa]]]YYYVVV\\\ZZZ]]]TTTPPPRRRVVVTTTOOOPPPOOOMMMLLLDDDJJJKKKLLLIIIDDDCCCBBBCCCBBB===???>>>:::555555666777666000000111111//////......++++++***'''&&&'''$$$'''&&&###""""""!!!!!!$$$%%%%%%$$$###%%%%%%######$$$$$$$$$!!!"""#########$$$!!!$$$&&&%%%%%%&&&&&&%%%&&&%%% $$$&&&'''%%%$$$%%%$$$%%%&&&&&&%%%$$$!!! $$$%%%&&&"""          -      '!& %"$%!!     -   *5!@,%G4,H6.;'!13!F4.S@9=+#%%#!   "#    !!   !       -   #,2#3$,&90$3+2*5, 7.#4, 5,!4+ 4, 7/#80$91%;3'<3'8/$7."7."8/$;2'8/$80$90$90$;3'=4(<4'?6*=4(=4(:1%90$90$90$:0$8.#8/#6, 0&7.">4)=3(:1%8/#90$<3'=4(4+6-!>5)=4);3';3'>5)>5)5-!90"  - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - -  - -  - - - - '".(2+ 5-"5-!4,5,7-!9/#:/$:/$<2':0%?4)?5)=3(<2&;1%;1%<2%:1#7. 5+7-9/!:/":0"8.!9/":0#<2%8/"6- 6."7/#4+ 1(5,!5, 7.#5,!5,!6-"4+ 4+ 5-"5-!5,!2*3*3+!2* 3+ 5-#05$6%3",'&#"!!!   -     !!!  ! !$$)2!6$7$4%2%.   -  - -    & *$,&*$)")"-&0)0)1* 1*1)3+ 4, 5,!4,!4+ 5-"4,!5.#/*3-"2'-"$) #  0+'' " -3*!3+!4-#60&3.#1-"0,!1+ *!4)6+!6,"5,!5."6."5,!71&40#2+ !-& " 24)2)0)4(/1 2(1(6.#6,"2!$ ',  *!2)1*-&1(0(-%/%0%.".,*$ - cb`bbcccdaacVVWYYZcccbbbhhhgggggghhh[[[VVVTTTZZZVVVYYYUUUPPPUUUUUUPPPMMMOOOJJJJJJEEECCCDDDIIIJJJFFFCCC===>>>@@@@@@:::<<<:::777333444999333///000...000//////------***(((((((((%%%$$$$$$$$$%%%$$$"""######"""!!!###$$$%%%###%%%$$$!!!######%%%%%%%%%###!!!###!!!$$$%%%%%%$$$%%%&&&&&&&&&%%%%%%'''%%% !!!%%%%%%%%%%%%%%%%%%%%%&&&%%%$$$$$$$$$###"""###'''&&&%%%            -     (!)"%"%"&  !   -   -  '5!?+$J6/J80@-&4 1=+$TA9L91,&$"!!  "#   !!           "! $+0!2".,7/#3+2)4,!5-"5-!4, 2)4+ 6-"7/#;2&<4(<3(8/$8/$7."90%;2&90$8/$8/$80$=4(<3';2'?6*>6*=4(:1%91%:1%90$80$7-"7-"4+0&7-">4(=3(;2&80$80$;2&<3'4+7."?6*=5);3';3'>5*=5)6-!7.! - - - - - -  - - - - - - - - - - - - - - - -  - - - $*#.'1*1)2)5, 8."90#:0$<2%<3%=3&=3&>5(>5(;2%;2%;2%8/!5+4*8.!<1$:0":0#:0#9/":0#;1%8/"6-!90$8/$3*/&1(5,!8/#6."5-!6."4,!3+ 4+ 3*3*3*4+ 3+ 2* 4,"80&06%8&!4#-*)%""#"               !#$'05"7%5&2%.   -  - -    )#+%*$& '!)"-&1+!2+!0)0)1)3+ 3+ 3+ 4+ 4,!7/#5-"5+!2)2+2,!0&$ #% -,-  1+! &.(2+!6,#7,#4,"5.$6-#"'7+"4+!2)4+ 6-"7.#71&40$/)0%)#$ 2!3(3(+/$ $ 5( 0*1+4-"5+!6'4%2#.#'-#3)1+ ,&0&/&,%-%.'.$.#/$.$* '" ffeeefcceaac\\^WWXVVV]]]aaafffcccbbbXXXVVVVVVRRRSSSXXXRRRPPPOOOUUURRRPPPMMMKKKGGGGGGGGGFFFCCCEEEEEEGGGEEEFFFBBB???<<<555444555666222333222111/////////---,,,******)))'''%%%'''&&&%%%###!!!######!!!!!!"""$$$###"""######%%%%%%$$$%%%$$$$$$$$$$$$$$$###$$$""""""###$$$&&&&&&%%%%%%&&&&&&&&&%%%&&&&&&%%%""" $$$%%%&&&&&&%%%$$$&&&&&&&&&%%%%%%%%%#########$$$$$$%%%!!!        -    -     )")#%"!!!  - -   -   -  5"=)"L80L91E2+9%33!J70P=53 &%$""   !  ! "!           &4% 1!" " ,2#4$0 +6."3+1)6.#6-"6-!5,!3+6-!8/$7/#91%;3';3'8/$90%8/$:1&;2'90$6."7."91%<3(:2&:1&>6*>5)=4(:1%91%:1%90$7."6-!5+ 1(/%5+;1%<2&;2&90$91%<4'<3&4,7.">6*?8+;4(;3'>6*?6*5-!5-!J?1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - -  - - - - - #)",%-%2)4, 7."91$;1$<3&=3'?5(>5(;2$;2%<3&;2%8.!4*3)6,:/#:/#7- 9/"8.!;1$=3&8."7-!:1%91%4, 1(2*4+ 5-!6-!6-!6."6."6."5-!1)3+6-!3*3+ 3* 4,!3!8& 8&!3".,-1")##" !    !     !  ##&06$9'7( 1$/     -  -      *$*#("(!)#-&0* 0(0)1*2*4+ 3+ 3+ 5,!5,!6.#6-"4*7.#2+ 2-!0- 0&+$'(#  -4-' )!  '0#6,#5+"4+"5,#5+"1$)4'+#%0#6,"6-"90%6+"4)4##$% '2)2'& /4)0*0+2,!2)4)3* /()"#! 5%3(/%++ -$,$,$,"-!/%+$-)*%eeeedfggiffgbbd[[[XXXXXXVVV[[[]]]___bbb___]]]SSSPPPOOOQQQOOOOOOKKKMMMMMMGGGEEEDDDDDDDDDEEEDDDCCCFFFHHHGGGCCCDDD<<<666777333000///000///...///...---++++++***((())))))(((&&&$$$###$$$$$$!!! !!!"""!!!!!!"""$$$$$$$$$######%%%$$$###$$$%%%%%%%%%$$$###"""######"""$$$$$$%%%%%%%%%&&&&&&%%%%%%%%%&&&%%%%%%%%%###!!!###%%%%%%&&&$$$&&&''''''%%%%%%$$$%%%###$$$%%%#$$%&%"""                $#& ("'!$$"#! "   - -   -    - -9&K80TA;M:4;)"2!.2!6%.$"$!     ! !     !"  -%=-(A0,-%-3#3#1!+6-"2*0(6.#5-"6-!5,!5,!7.#7/#7.#6.";3';3'90%:1%90%;2';2'90$7/#80$91%<4(;3'91%=4(>5)=4(;2&90$:1%:1%91%90$4+2(.$5+ :0$;2&;2&91%90$:2%90$4,7/"=5)>7+:3':3'?6+?6+5,!6."C9- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - -  - - -  - - - - $',%0)3+81$8/":1$;2%:2$;2%<3&90":0#<2%:0#7, 6+8-!:/#9.!6,8.!8/";2$=3&8.!7-!90$8/#4+2)4, 5-!5-!6-!5-!4, 5-!5-!4, 0(5-!4+ 3+4, 3+5,!)5#8& 8&!3!.,8'"A1-/ %$  !!!   """"    !  !#$(1"7(!9*#8'!1 ,    - -    -  (")")#)"*$.'1* 0(0)1)2*5-"5,!3+ 5-"4-!5.#6.#2+3, 5+ 7-"5+ 3+ 1(*! !& *2" +*) -"& /%0) 4+!7-$8.%5*!5*!1$# # 1$5,"5-"7/$5,!2%& % 43#.#3+ 0(/$$ # + 3+ 4* 2%),!1* /)-&&& 2"(! ! $-!&%.!0#/$0'ddcccdgfhaabggieefXXXYYYYYYYYYXXX\\\___aaa```\\\\\\UUUQQQQQQNNNJJJDDDGGGGGGFFFGGGJJJFFFEEEFFFDDDAAABBB@@@CCCAAA>>>@@@888222111222///000...............---++++++)))'''(((''''''%%%######%%%$$$!!! !!!!!!"""###$$$$$$$$$&&&%%%$$$%%%%%%%%%%%%$$$$$$###"""######"""$$$%%%$$$$$$%%%$$$%%%$$$$$$%%%&&&&&&&&&### ###$$$$$$$$$%%%%%%%%%&&&%%%&&&$$$$$$$$$%%%#$#"##"""""""""           '!*#(!%' )#'!%$""!! - - -  - -   -  (6%D2+O=5UB;D1*8'/,('$!!!!           ! ! !   -! 9*$F703#',5!5#2!.7/#0(0(4,!3+ 5,!6-"4, 5-!5-!6-"90%:2&:2&90%:1%90%;2';2'91%90$:2&:2&>5)>5);2&<4(>5)<4(:1&80$;3';2&:1%:0$5, 2(.$6,!9/$:1%:2&90$7."91$91$5,7."=5)=6*:2&:2&?6+>5*6-!8/#?6*`R@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - -  - - -  #*$/(3, 5-!91%:2&:1%8/"7.!7.!7.!:0#;1$8-!6*7+ ;/#:."5+6- 7.!:1#<3%7.!5+:1$91%6-!4+5-!5-!6-"5-!3+5, 7/#5-!3+.&6."5-!3+2*3+6."/ 7$9'!8'"4!..@0+E61*&  "#$#!   !!!#"$$#!   "#((#'2$:,$9*#:'!3!*   - -  - -   -  +%+$)#)#*$.'0)/'0(3+ 3+ 5,!3+ 3+ 5."5."7/$5."3- 4-!5, 8-"6+ 2, /- -$+&$$# ! -.'$ )% " ,4' 6*"8.%5,"4*!)-8*!0(2,!3-!.&3'6* 4-"3-"3-!1$$5-!2(3)2&+)1+!/+!.&/ & # '%**- - .!0$``_ZZ[bbdddf``b^^^aaa^^^^^^ddd^^^]]][[[[[[bbb```XXXYYYVVVSSSSSSTTTOOOKKKEEEBBBEEEGGGEEEEEEDDDEEEBBBAAA===999===???>>>===777555000///---......,,,...---...---,,,***'''&&&''''''&&&$$$$$$$$$###"""!!! !!! !!!###%%%$$$"""$$$$$$$$$%%%%%%%%%%%%%%%$$$######"""!!!###$$$!!!###%%%###%%%&&&%%%%%%&&&&&&$$$"""$$$$$$%%%###"""%%%%%%%%%&&&'''######$$$$%%"""!!!"""$$$###"""           %(!)"(!& '!(")#(!'!& #%    - - -  - -   -  7%=*#Q>6Q=6K60>*$3 0+'%$" !                ! ! ! "  2$E6/6')-7#7$3!.80%1)2*4,"4+!5,!6."5-!7/#6."5-!:2&91%90%8/$90$8/$;2';2'91%80$:2&:1%>5)>5);3';3'<3';2&80$7.";2&:1%90$:0%9/#5+/&7-!9/#:0%:1%90$80#;2&91$4,6-!<4(<5)91%:2&>6*=4)6."7/#?6*G=0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - -  - -   !)#-&1*6.#70$70$80$6."6-!7-"8.#9/"7+ 6*7+;/#:."4+5+6,8.!;1$9/"5+90#91$8/#6-!5-!5-!6."6-"5, 6."80$7."6."0'4, 5-!3+3+4+ 5-!2 7$9'!8&!3!++A2-C50'!  "$$#!!   !!""#$$%$"!     !"/!>0*7' )-6%>-%=,$9& 3!) -  - -   - -  -  )"("'!(!)#-&/'/'1)4+!4,!5-"3*5-"81&6.#81%6/#5."4-!3+ 5."6.#7,!6* 4* 4'/# - " -() -*0*' !*2&4-#3,"2*!2&-2(5-"&/$*"$/' 3#5+!2-"2."2."4!" 2&.+0+ 5)!5"' # -"1+"1,".%-% 3%0"1$1#) %,!$dcdffhcce\\]\\^___aaaeee\\\]]]_________XXXVVVYYY\\\VVVVVVVVVSSSRRRQQQNNNNNNFFFAAAGGGHHHEEEDDD@@@BBB>>>===999777<<<>>>>>>===777333333222///------------,,,---,,,+++***'''$$$###%%%$$$"""""""""!!!    $$$&&&$$$"""!!!"""###%%%%%%%%%%%%###!!!"""$$$######$$$$$$!!!###&&&%%%&&&&&&%%%&&&&&&&&&%%%$$$$$$%%%$$$###$$$$$$%%%$$$###!!!!!!"""#$$#%%""""""######$$$$$$"""         #("& ("("' $&'!)#("& & $$"!   -  - - -   - +8%H4-WC;S>7E0*6"11 7%,&"   !  ! !"        !"  %3& /!&,5":&!7%/7/$3*5-"6.$7/$8/$7/#6-"7.#7."7/#91%:1%80$90$90$7.#:1&:1&80$70$:2&:2&=5)<4(;3'<4(<3';3'7/#7.":1%90$90$:0$:0$5, 1'9/#;1%;2&8/#80$:1%<3'90$4+7.!=4(>6*91%;3'>5*<4(5,!8/#?7+B9- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - -  - -  - #*#/(3,"5.#4-"5-!6."6-!8/#9/#7+ 6+8, /'+/5#?-$=+#:&!3!( -  -    -  - *$*#,&("*$.(/'.&0(4+!3+ 5,!1)4,!80%4-"6/$5."5/"5/"5-!6."7/#6+!7,"0'2* 7,#/&  " & 8"' ,& - $-!1&2) 3( 6)!1* 3-"1!4$4) -#1'-#.%3*!5,"2-"1,!/ -2'0+.'/"),1&0+!.) ,"% -*1(/'.&.#$ *hebdbbaaceegddf``abbb___dddfffaaaaaa```^^^YYY\\\XXX___[[[VVVUUUTTTOOOPPPMMMKKKKKKHHHBBBCCCCCCCCCCCC???BBB@@@???===???<<<:::======777000000///---,,,,,,...---+++,,,+++))))))&&&!!!!!!###""""""""" !!!!!! """$$$######""""""$$$$$$######$$$!!!!!!###&&&%%%$$$$$$###"""###%%%%%%%%%%%%###&&&&&&&&&%%%$$$###$$$"""!!!$$$###!!!!!! !!!!"" !!"""!!!!!!""""""###$$$######   &"#&!& ' ' ("&' ' ("& $$$$       - -  - -   !6%@,%S>6U@8J4.<& 2<' N:2F4,0&#  $""""!            !  #$%-4#9&"9& 1 6.#3+ 5,"7/$8/$:1&80$7.#7/#80$6."91%80$8/$90%:1%6-"90%90%6/"6."91%:2&=4)<3'=4(>5)<3(;2&6-"7.#90%90$8/#:0$9/#4*1';1%<2':1%7."8/#:1%;2&7/"3*7."<4(>5):1&;2'>5);2'4+ 80$@7+>5)MA2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - -   ' -'1*!3,#4-#5.#5-"7.#9/#8-!6+8, <0#:/"6- 8/!8.!90"<3&7.!7.!;2&:2%:2%7/"5- 7/"7/"5,3+80#7."7."8/#4+6."7/#5, 6-!4+ 6-!5#6$9'":'"3 *&'#   "#%$&$#"##"!#&&('&&#"!      !!  !##%:*"Q@8B0(-/:&C/&@,$8% 2 '   -    -  - +%("*$,&+%-'.'.&1(3+ 2)5,!2*3+ 6/#5.#6/#4."50#70$7."7-"6+ /)2, 2*1)4+!5* 1!# " & ' ' 4 % # # /6' 6-$5-$5*!6+"4+!6,#7.$5+!0&%#.$/&/)/*3"-1%1'1**! !!/5&4)!&  -  . 0'+$.'.$)%gdbc`_edbbbc``bccdfffgggaaaddddddbbbdddeeebbb\\\YYY\\\]]]WWWRRRUUUQQQHHHDDDFFFHHHHHHDDDEEEBBBAAACCCBBB<<<>>>>>>@@@AAA???888777:::999666222/////////---,,,---+++***)))(((%%%(((%%%###!!!   !!!!!!######""""""#########$$$%%%###"""$$$$$$!!! ######""" !!!###%%%$$$$$$%%%###$$$%%%&&&&&&######$$$######$$$###!!! ! !!! !!!""""""###"""!!!!!! ((!$!%$("%%)#)"%& &&%$'!"#     - - -  -  -  -+?*#G1*R<4P:2D-'7!9#L6,U@8A.&+# " ###$%%$#!           !$+4$ :($8%4"4, 3*3*6."7/#80$5, 3+4, 5-!5-!6/#6."7.#90%90%6-!90%80$6/#6/"80$91%;3';3'=5)>5*;3'80$5, 5,!7.#7.#8/#:1$90$5+2(:1%<3';2&91%80$91%;2&7."2)4+;2&>5)<3'<4(?7+;3'2*80%@8,>5*?6) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   !)".'1+"4,#5-"5,!8."7, 5+8- ;/"9/!5-8/"6.!7/";2&;3&7/"91$:1%:1%7/"7/":1%91$8/#5- :1%5-!6-!6-!3+5,!6-!7."7.#4+ 4+ 5#6$;(#<)$3 *&$""#$%')'&$$%%#""$$'%&&#"!     $""!""$(<,$M<3A0'.0<(C/&>+#9&!3!$    -   - -   ,%*$+$*$-&0) 0(/'1)2*1(4,!1*1)3,!5."5.#5."7/#5."3, 4-!3*-'/)/'0(0(1)2+ 0#( "&' # -:# " ! ,&$   -(1$5*"7+#4( 3-#4-#5-"3* 3* 4&0/%2*2+ 2* 3(1&0'0(2+!3&) " 0!6("-!  '-'*$+%+"gc`ea`db`dcbbabedfbbcaaaccc^^^^^^bbbbbbaaadddddd```___YYYYYYTTTRRRUUUTTTOOOFFF???@@@CCCCCC@@@AAADDD???AAA999===AAA???AAA@@@???:::999:::999888777111------,,,------,,,***''''''%%%######!!!    !!! !!!$$$$$$$$$"""$$$######%%%%%%###!!!###$$$###"""###"""!!!###&&&%%%%%%(((&&&%%%%%%&&&$$$$$$$$$&&&&&&&&&%%%"""  !!!!!!!!! !!!###"""!!!  $%&# #!'!& & *#(!& (")#%%%%""   - - -  -  -   -!9'@)#Q;4Q:3K4-:#5=&T>5T@75!'&&%&())''&##           "$(2"8'#8% 3!5-!3*4, 7/#6."6."6."6."6."4-!5-!6."5."6."80$8/$6-!;2&90%80$7/#90$:2&;3';3'=5)?7+=5)91%6-"5, 7.#8/#:0$;1%:0$6, 3):0$=3(=4(;3'91%:1&<3(91%3*1(:0%>4)=3(>5*@7,:2'0)70$>6*=5)<3'cT@ - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - -  $+%0)!1* 1)6."4+3*6,8. 6- 4,6.!4+6.!;2&;2%7/":2%:1%91$7/"5- 7/"80#90$7."8/#6-!3*3*4+4, 5- 6-!6-"5, 5,!4!9& <*#<)#2+'%$$%&))+((&'%$%$"$&%#$#"! "!  !##(4#:("6"-1>)!D/'@,%:'"6#"   - -   - - -  -&)#*$+$-%.&/'/'0(1)2*5-"3+ 1*3,!4-"5."5-!7-"4-!1- 0- .+/(0)0).(-'1*3+ 5+!2$( & + *-''! ) 85&3+!0,!2-!2* 2* 3+ 4'&&2(0'%2(0&.'0*1,!1%!  4!( 0)3( 0!!  - -"+$+$+#c^\_ZY^\[\ZZWVW`_addfddeaaa___\\\]]]`````````dddddd```\\\XXXTTTRRRRRRQQQOOOKKKEEEAAAAAAAAA======;;;888<<>>>>>;;;;;;666444222555222...+++++++++)))((('''&&&### !!!   !!!  """%%%$$$###""""""###%%%%%%$$$$$$"""!!!$$$%%%$$$###"""!!!  $$$%%%###'''%%%###&&&&&&$$$$$$%%%&&&&&&&&&%%%$$$### !!!!""""""!!!!!!!!!""""""!!! !!! $%%%&!%!' *#)#(!'!)"(!& )",%("%%# #    - -  -    ->("H2+T>7S<5D1&<(8$C-%O80=)"-*(%#"$%%$$" ! !!!   -  - ! !""%)2"9(#8&!15-!4,!7/#80$90%90%7/#5,!6."6."70$80$6/#5-!7."7.#6-";2'91%7/#7/#90$:2&;2&:2&<5(?6*=5)80#5- 4,7.!9/#90$;1%90#6, 4*:0$<3';2&:1%90%:1&=4);2'4+ 2(:0$=3(:1&<3(>5*91%.&5.";4(;3(80%E:- - - - - - - - - - - - - - - - - - - - - - -  - - - - -  - -  !("*$.&4,!3*1(3)6-3*4+4+2)6.!<3'8/#7.":1%;3':1%7/"4, 7/"7/"8/#7."8/#6."/'0'3*3*5, 6."6-"5, 2)3 :'!=+#=)#5!-)(&&&))***'&'%%%$%%$#"""!!!     "$$&)+,.5!@,&F3,?,&6$2""   -   - - -  .',&+$+$.&0) 0(/'0(0)2* 5-#4-"1)3,!3,"4,"4,!4,!4-!0*2- 0*0*1*/(/'1*4,!4,!5-"2+.&(! -" -% -/&  -%%$ (0'.*0+ 1)1*1)2(1$4%5#' *,!."2'3) ) -'3#0(.'1')" )+",%-#a\ZWSS[YXZYYTSUZZ\``a__a]]^___\\\\\\\\\]]]^^^^^^``````^^^[[[WWWTTTSSSPPPLLLJJJGGGCCC@@@>>>>>>;;;<<<888<<<>>>AAA???;;;999<<<===<<<999:::999333...///111000,,,((()))))))))&&&%%%$$$!!!"""%%%!!! !!! !!!"""%%%%%%"""###""""""%%%$$$"""###"""""""""$$$$$$$$$###$$$!!! ######"""%%%%%%$$$&&&'''%%%$$$%%%&&&%%%&&&&&&$%%##$"""""""""!!! !!!!!!!!!!!!  !!!#$###$ % %)!*#& & )#)#'!)#*$& $& "!!    - -  -     /<%F0)Q:4J5,B.$:&4 7#4 /+)'""!"$$" ! ## !%   !!!        -&)'&')3<'"7% 1!2*4,!6.":1&80$:1%7.#3+5."7/#81%:3'81%5-!5-!6-!6-"<3':1&80$91%91%:1%;2&92&;4(=5)=4(80#6.!6-!9/#9/#:0$:1$8."6,5+90$<3':1%91%91%91%=4(;1&5+ 2(:0%=3':1%<3'>6*:3'0(3+ 91&91&7/$A7+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - -  - - - "'!.(1* 0(2)4+!3+4+3*2)6.":1%7/#7."91%91%7."5, 5-!91%8/#6-!4, 7/#7."3*2)1(2)4+5, 5,!4+ 1(4!:' <*"<)"8$/-.1 1 ++,,-+*'((&%#"!#!  !"!  !!"%%')*,2:'!C0*D1,:(#2"'   - - -  -   ,%)#*$,$.'.'.'-%/'2*1)4,!5-#3+ 3,!3+!3,"4-"4,!3, 2*4-!1*0(1)1*1*3,!2+2+ 4-!3, /)1)1"#  & # -) $+" " 06*!5-#2)2(1)5,!5) ,'/$, 0"+.") .1&.(/'0%% -(, .$ib`b^]^[ZXWV\[\[Z\VVX[[\^^_[[[WWWWWW[[[^^^^^^___```___\\\ZZZXXXWWWSSSSSSRRRLLLIIIGGGFFFBBB===;;;::::::;;;888777>>>@@@<<<::::::999:::999666666555111---,,,...///------+++***(((&&&$$$""" !!!!!!  !!!!!!""""""$$$$$$%%%$$$$$$$$$$$$%%%!!!!!!"""$$$$$$ ###$$$$$$$$$%%%"""!!! """$$$"""$$$%%%$$$$$$$$$'''$$$###%%%'''%%%%%%&&&###""""""""""""!!!!!!   !  ! !% '(+"*$& ' )#("& ' *$' $#$!$   - -   -   "1 9#K3-U>6M80@+"8$1/.,*)&#!! $%'))'# ##"$" # '*'$    ! ,6$>,&A0)8) ,'+3='!<(#0!2*4,!7/#90%91%;2'7/#3+ 5."80$91%:3':2&7/#5-!6-!7.#;2':1%91%:2&:1%:2&;3';3'<4(=4(<3'80#6.!8/#;1%:0$:0$:0$8.!5+5+:0$=3';2&90$6/"70#<4(;1%4*3):1%<3';2&<3'>6*:1%4+70$91&91&90%>5)bTB - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - -  $)"+#-$/&1(3+1(2*4, 7."5, 7."80$91%90$5-!5, 80$91%3+2)7.#7.#4+ 2)0'3*4+ 3*5,!3*0'6#:(!=*#@,%9%00>+%L93@-&2!0 0 0 0 .-,+*)'&%%#"%%! "!!     "#&)*+,.1 6$E2,H60@/)4$1!   - - -     +%*$+$,%-&0(/'/'0)0(.&0(3,!3,!4,"4-#5.$4-"4-"3,!2+2+ 2*-&2+5."2+ 4-!4-!3,!3,!4-!0+3."6,"4%) -' .  -." ! ,$ - -$,$1'2'0*2, 2)% ,," +$)0#(&.$-'/(.#*+-* e`^`]\b`__^^WVXZZ\[[][[][[\\\\XXXVVVYYYZZZ]]]aaa``````]]]XXXTTTVVVVVVQQQPPPNNNKKKIIIIIIFFFBBB===<<<<<<888;;;888666999<<,(;*&1!'" $&%1!=,&C2,I82D3-4#% - # 6$K93O<6I60<,#1 *.7"?(!<'!. 5-"7/$7/#91%91%:2&7/#4, 6/#70$80$92&:3'90%7/#7.#8/$;2'90%90$:1%7/#:1%:2&<5(=5)>5*<3'7/"5- 8/";1%9/#9/#:0$7-!3)4*;1%=3(;2&90$6."80$;2&:0$2(4*:1%;2'<3'=5)>6*6-!4+81%=5)=4(91%:2&G=/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - -  - - -  $',$.&0'2*4+ 5-!6."5-!6-!7/#91%90$4+ 3*6-!:1%4, 2*4, 6-"5-!4, 1(3*5-!1)2*2*/&6$<)">+$@-$:&33B.(R>8B.(5"3 4 5!4"3 10/0/-+.,/"."/#.!% !"#     #(,/ /.1/2!6%;*$L92F4.9("-#   -  -  - -  ,%*$*#+$+$-&/'/(.&2*0(/'2+ 3,!4-#5-#4-#4-"4-!5."4-!2+1)-%2+5."3, 3+ 2+5-"5."5."4,!4,!5-"6,"5( -" ! -()) &,# &# -4"5' 5*!3+!/',$1%.'/"3(0%1%$ +#,(.)-'-$,"e^\fa`a^]_^\]\\YXZWWYYY[ZZ[\\][[[XXXWWWVVVWWWZZZ]]]\\\ZZZYYYUUURRRRRRSSSTTTPPPLLLLLLJJJJJJIIIEEE@@@>>>???<<<888888777888::::::999999<<<999888666333777222......000...+++***,,,***%%%$$$"""!!! !!! !!!"""###$$$$$$$$$%%%$$$###$$$######%%%%%%&&&%%%%%%&&&%%%%%%$$$$$$$$$$$$$$$"""###!!! !!!###%%%$$$$$$%%%###&&&&&&%%%$$%$$$$$$###"""!!!!!!###"""!!! !!!!!!!!!!!! !!!$#$#!###$#(")"' )#)#'!$'!)")"%%$$%    - -      ,7$=)!I3,K4+@)"8"@,'F3.I40G3/A0*4%(%%,9("D2,C1,@/)7& *($$&1!@.&I5-H1)B*"4(   " (,.--.08$9' 3#-5-"7/$7.#91%:2&;2'80$5-"80$80$92&<4(<4(91%8/$6-"7.#:1%80$80$80$7/#:2&91%<5(=5)>6*;3'6.!5- 90#;2%90#;1%;1%7-!2(1(9/#;1&:2&80$5.!91%;3'9/$1'3*9/#;2&<3'>5)>5)8/#4, :2&>6*<4(90%:2&C:-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - -  - - - - - - - - - ' +#-%1(3+4, 7.#6."6."91%:1&90$5,!4+ 6-!6-"5-!4+ 2*3*3*5,!1)0(3+/'1)1)-$6#;'!>*#=*";&6!6 E/)Q;5B-'6!6!8#9%:&!9% 8%7%1!/-*-/ . +!)*.&''&&%$###$')5$A.)H50P=8R>8P<6<'!6!;'>*"J6/L91@/(6& + -   -  -  - -  +$*$)"*#,%0)1)0)1* 4,"1)0)2+ 2+!3,"4-#5.$5.#4-"5.#3,!4-"2* .&2+ 3,!2+ 2+ 1*3+ 5.#6/#4+ 4,!2-"1, 1-!3,"1$# ' -)% -$ ! .,%  -,6*!2* 2+3, 2*0&0%1&4*0'0'+!#'0'-%,".%a[Yc`_b`__^]]]^[[][[]]^_[\]WWW\\\]]]\\\ZZZYYYXXXXXXXXXYYYWWWTTTRRRTTTSSSRRRQQQOOOJJJHHHGGGHHHFFFAAA===<<<<<<:::;;;888777888888444;;;<<<:::999555333111222111------...,,,((()))+++)))'''###"""   $$$%%%############%%%'''$$$%%%###$$$$$$$$$$$$$$$%%%$$$%%%&&&%%%$$$###""" !!!!!!!!!!!!""""""$$$%%%%%%&&&&&&$$$%%%%%$###$$$###"""!!!!!!"""""""""!!!!!!""""""""""""!! """%$$ "!'!##$#("("' *$*$& %("*$)#& &%##!  - -     -*7%A,%N71J2,A)#<% >'#?)$>($<)$9(!.*++,04"2!/+'&#!$&*)*& - - -   %')+06#8%3#0"3+ 6-"7.#80$:1%:1%6."3+5-!6."92&:3'92&7.#6."5,!6.":1&80$80$7/#91%;3':2&<5)<4(:2&91$4,6-!:1$<2&;1%<3&;1%8."3*0&7.";1%;2&8/#5-!80$<3'90$1'5+:0%:1%;3'<4(>6*80$5-!:3&>6+=4(8/#91%?7+RF6 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - -  %-&.'1* 5.#5-"4, 5-"7/$91%4+ /&6-!80$7/#6-"4+ 2)1(6-"4,!1(2* 0'3* 2)/&6#;(!@+$B-&=&668!9"9!<$>'8#7#9&"<*&<*&8'"7&!4"0...+((',*+-./,**+))+7!M73YE?\GAZE>S>7K6/?$<%=(#I4,T@8C0)9(!,     - -  - -  +%*$)#+$,%0)3,"0(.&3+!2* 1)1*1* 2+!4-#5.$4-"4-"4,"1*5.#4-"/(0(0)1*2+ 3,!1*4-"5/$1-!3."2, 2+ 3,!3+!4)!4%(! % & )* ))# # /4%4)2*/(/&/&4+/&1(-###2$'" a\Y_\[ba_aa`^_`Z[]Z[\^_`^^_[[[[[[\\\___]]]ZZZ[[[ZZZXXXXXXWWWTTTRRRQQQPPPRRRRRRPPPMMMHHHFFFEEEDDDCCC???:::999444666777777888;;;888999999===777555333000111222111///,,,+++)))$$$%%%'''%%%%%%$$$"""  """$$$%%%###$$$$$$%%%'''&&&%%%%%%"""############$$$$$$$$$%%%$$$$$$$$$$$$"""!!!!!!"""$$$$$$###$$$%%%&&&&&&&&&$$$###$$$$$$######!!!!!!!!!""""""!!!!!!"""!!!  """###"!"!!%$%$%)#("$(!)#& & ' (")"' (!' #"   -  -   -333(7$?+"G2*L6.G0)<$!31/-+)**++--+*)&#          '/=(!9%:&B.&;)". 5-"5,!7/#90$90%80$5-!3, 5."6."80$92&:2&91%6."4, 5,!90%80$7/#90$;2&<3';3'=5)<4(:1%90$4,7.":1$;2%:1$;2&;1%8."2(0&8.";1%:2&80$6/"91%<3':0$3)5+:1%4+90$:1%;3'91%7/#;4'>6*<3(7/#7.#<4(B8+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - %)#/(3,"1* 1*2+5."6/#4, 1)4+80$6/#5-!4, 2*0'5,!3*1)4,!-%0(3+ 0'6$<("@+$D.'?( 4".3!8%=($=($>($<'#:% 8#8#6"4 3 4"6"6"20''),1:#@)#F/)L5/H1+=&"434 3!3"3!8%<* =+=*<(8#9%7#8(L5+Q;2<)!-       -   - -  -+%+%,%*#+$0* .'/'0(2* 0)0(0(2+ 3-"5.$5/$5-#4,"3,"3,"3,"0)1).'.'.'/(3,!3,!6.$5.#1, 1, 3,!3* 2* 3*!3*!0).&.#! # ' , - 1 #&%  & 0"1+/+-','.*.*/*.',", / ga]a]Y]\X^^[^___`b\_`X[\Y[\]]]^^^]]]\\\]]]aaaVVVRRRWWWZZZXXXUUUTTTRRRRRRQQQPPPPPPPPPMMMJJJGGGCCCBBBAAA@@@;;;;;;::::::888444555999888555999777666666666444222222000///---,,,,,,***&&&$$$!!!###"""###"""   !!! """###$$$$$$######$$$%%%%%%$$$%%%$$$"""#########"""$$$$$$%%%$$$$$$%%%######!!! """###$$$$$$$$$$$$$$$$$$$$$$$$######"""""" """"""!!!!!!!!!  #""###$$$ !$"%% $' ' $'!("&%'!(")")"'!%$#   -  -   ...%/9' B.'H3,C-&($$###"""""!    7&9(!<,&>.);)"7' 9("<,&?-(?-(:'"9&!6$1 ,'6."5,!80$:2&:1&8/#4, 4-!7/#70$91%;4(:2&80$7."6-!6-!7.#80$6."90%:2&<3'<4(<4(>6*>5)7/"7/"7/";2%;1%:1$<2&<2&8.!1'2(:0$90$:2&80$70#:2%<3'9/$4*5+8.#91%:1%<4(;3'80$6/":3'=4);3'80$7/#<3(=4'`Q; - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - -  - - - -  - - - - - - - - - - - - - - - - - - "'!+%-',%0)5."3, 2*0(1)4, 5-!4, 7.#5, /&3)5* 5+!6-"2)5,!6.$2*14%A/)C/)D.'>' <$:!<$>'"H0+I1,?'!;$;$:$:";#@( F.%H1(I2)@* 2)**/;#Q:3[D>R8.O5,G/%=%6"3 3#2"1!3#4$5$6%8&9&:'<( A-'J7-;+#.!   -   - -   - -  *$)")",%)#/(-&/'0(.'/'.&,$/'1* 4-$3,"5.#4-#2+!2+!4,"1* /(/'.',$/'1* 3,"5.$4,"2)3* 5,"4,"3+ 1+ 1+ 0+ 0)2) 3%( ! (# -'-" )%$ - %.!/"0&0(.(,&.'.%0#gb^_[YWVRXYV_`_^_`_bc\_`Y[[ZZZ[[[[[[\\\[[[[[[ZZZTTTPPPUUUWWWUUUTTTSSSRRRRRRRRRPPPPPPMMMGGGEEECCCAAA===??????===<<<::::::555333111444555333444666333444444444333111---***)))---,,,+++(((%%%!!!#########%%%  """#########$$$%%%$$$!!! """%%%$$$###%%%$$$$$$$$$### """$$$%%%$$$%%%$$$###$$$###%%%$$$###!!!"""%%%$$$###!!!!!!"""######"""!!!!!!!!!  """!!!!!!!!!!!! """"##""" %!$%$'!%#'!)#' $(!*#)#'!("%$$  -  -    (('&0"6& ;*#;*$;)#<)$>*%A,&D0*E0)A-&<*"<*">-%>-$<+#9(7&:*!;+"<,$;+#9*"7)"4%3#.2"0",(& 6.#5,!5,!80$90$80$80$6."7/#81%81%:2&;4(:2&91%7/#6-"7.#8/$7/#6."8/#:1%<3';3':3'=5)>5)80#90$8/#;2%:1$:0$<2&<3&7-!1'3)8/#:1%:1%91%70#:2&<2'8.#2(4+:0%90$7.";2&;2&7/#4-!92&=5)<3'7/#7/#=5):2&A7( - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - -  - - - - - - - - - - - - - - - - - - - - - - - - $("%+$2+ 0)1*/'0(2*2*2*80%7.#1(1(6,!5+ 6,"5+ 5,!6-#3+ )7#<& C,&D,%D+#>&:#=$F+#Z?8Z?7D*!=$:"<$?&I1'V>3X@5V?4N7,>'4 00258>%?&<%;#9"5 3!2 3!5"7" 9%"=*&@,'B.(I6-E3+<+$4&.!(    -   -  -  - -  *#*#&(!*#-&0) /(/'0)0)/(0)1* 0* 4.$4-$3,"3-"2+!1* 3,"/(-&0)2+ +$/'0)1* 4-#4+!3)4* 5,"3+!1+ /*0+ /*.*0* 1'3'. ! -'$ ! +   %&% -! &04&2'0'.&,$e`]b`]ZZVVWUZ[[Z[Z[]]^aa^__[[[YYYYYYYYYYYYYYYZZZYYYVVVSSSWWWXXXVVVUUURRRLLLOOOQQQOOOOOOLLLGGGBBBAAA???<<<===<<<;;;888666555666222///111555111222///222444333222...---///,,,+++((()))((('''###!!!$$$ !!!  !!!$$$###$$$%%%%%%$$$###!!!!!!$$$&&&$$$%%%$$$$$$%%%""" """###"""###%%%"""""""""""""""$$$$$$"""###""""""!!! ! """###"""!!!!!!!!!!!!  !!!"""!!!!!!  !$#%$$'!%#& ("& #(!)#'!(")#("%$! -  -  -  "!! "%&(*-. 2!3"1!1".!,)('$$#  7.#4,!5-"80$7/#8/$90%7/#70#91%91%;3'<4(:2':2&8/$7.#8/$90$6."7.#80$:1%;2&:2&;3'=5)=5)80#91$90$;2%:0$:1$<3'=3'8."2(4*9/#<2&:2&80$7/#:2&<2'7-"1'5+:1%7/#6."91%:1%6-!4- ;3'=5);2'8/#91%>5*8/#=3& - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - -  - - - - - - - - - - - - "$,%,&.(-&0(1*2*2*6.#7.#2)1(6-"4* 6,!6,!5,!7.#4+  5!9&>,$C0'F1';&;$?%C) R8/T:1G-$=#>$<$>'D-"G0%D-#@);%7"3!2 1124!5"3!2 3 2 1 1!3#"G3.D0,E/+C-'<(#3!2",#  -   -  -  -   +$*$)"'!,%-&/'.&-&/'.&-&2*!0)2+!0* 0* 4-#4-#2+!0)2+!.'-&-&.'.'/(/(/(2+!3) 4'4) 2* 0,!.)/+0+ .(/(2*!1(0&1%4$0 -'- !% %++" -(+."id_a]Z_^Z_`\[[ZXYXXZYWYX[\[aaa___\\\YYYXXXXXXXXXXXXXXXWWWUUUTTTUUUTTTUUUSSSLLLJJJLLLPPPNNNHHHIIIFFFCCC???:::;;;<<<:::888999888888444444---///222444777222333333111000//////---+++(((&&&%%%######"""!!!!!!!!!!!!   """###$$$$$$$$$###$$$"""$$$%%%$$$%%%&&&$$$$$$!!! !!!!!!###$$$""" """$$$$$$$$$%%%%%%$$$!#" ######"""!!!""""""""" """"""!!! "##$$"'!'!$'!'!$$("'!(")#)"("(!%" -  -  -        8/$6-"4,!5-!7/#7.#91%91%7/#4-!7/#70$:3';3':2&:1&90$7/#7/#7."6."7/#90$:2&:2&91%<4(>6*<3'7/"6.!8/":1%;1%;1%=3'>4(:0$4*4*9/$<3';2&7/#5.":1%>4(6,!0&5, :1%7."7.":2&91%4, 5.!=6*>6*;2'6.":1&>5*80$90$MB2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - -  &!+%,&*$.(1* 2+ 3+!4,!6-#2)2(5+ 3)5+ 6,!5+ 6,!4+ &6&<*"B.&D.&B*#=%<#?&A) >&<%<&9%8%8%;)"=+#?,$?,%;("3"0 / / 0!1!0!H4*H4*E3)A/&;*#6%3#1"0"- '#  -   -  -  -   --&' )"%*#+$/(/'.'1* 0(.'2+!/(2,"2,"1*!2+"2,"0).'0* /(.'.',%.'-&,&/(1* 0(1(1)1* .)-)*'/+ /(/'0'/'-&,(.*/&-"#! % # ) .$# *)  fa^fc`cc_^_\___\]\Z\[\^]YZZ\\\^^^]]][[[YYYXXXWWWWWWWWWWWWUUURRRRRRRRRRRRPPPOOONNNKKKJJJMMMKKKIIIFFFCCCCCC@@@<<<::::::999888777555000222111//////222555555444555333111//////,,,)))'''''''''$$$ !!! $$$$$$###!!!  !!!""""""$$$$$$$$$$$$######""" !!! !!!""""""$$$%%%$$$%%%$$$$$$"""!!!"""!!!$$$$$$"""&&&&&&$$$$$$$$$%%%%%%&&&%%%$$$###!!! ######"""!!!"""!!!  !!!"""!!!" ! !"$%##+%' $(!("$#'!)#("("("(!& %!    -        6.#5-"3+ 7.#6.#5-"5-"8/#7.";2'91%8/$5-!5."2+6/#91%91%91%8/$7."7.#7.#5-!6."91%=4(<4(;3'=5)>6*;2&5- 3+6- 90$:1%:1$<2&=4';1$5+4*9/#<3';2&70#5.!91%>5)5+ 0&6-!;1&7."8/#<3':2&3+3,=5*?6*;2'6."91%>6*:1%8/#B9,qbJ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "&!&!*$.(0)1)2+ 5-"/&1(5+ 4*4*4+4*6-!4*/&1!8' <)"=)":%A*#<)$:'"8&!7& 6& 6' 4%0"4&!<.)?1-<.*L4*G/&B,#>*#;(":'!;)#8'!6&1#-)$      -    - - -     ,%*#*#(")",%/(-&-&1* .&-%0).'-'1+!1+"0)/)/(/(0) /)/(/(-&.'0).'0)2+!.* /,!0* 0* 4,#1) .%1) 0)/(0).'-&-'/*/'.$2$.$  -$  " * -* " f`\d`]`_[ab^^^\[\[^`_]_^\^]YYYXXXYYYYYYZZZ[[[XXXVVVUUUVVVVVVVVVUUUTTTRRRPPPOOOLLLJJJJJJIIIJJJKKKKKKFFFBBBAAAAAA@@@;;;999:::666333444000000222111...---111111222222222000---,,,,,,)))&&&&&&%%%$$$###"""!!!"""!!!###%%%$$$###!!!  ###$$$######$$$$$$$$$############"""""""""""""""!!!"""######%%%%%%$$$"""###$$$%%%'''$$$###$$$$$$"""######"""$$$&&&###"""!!! !!!###""""""!!!!!! !!! !!!"""!!!   "!#$#%)"' $'!*$&#& )#)#' (!%%#    -   -       2+!0)1*3-"5-#4,"5-#5-"4,!6.#7.#7/$7.#7/$;3'90%6."5-!5."3+7/#80$7/#7/#90$7.#8/#8/#4+ 5, 91%>5)>5)<5(=5)=5):2&5- 3+5- :0$;1%90#:1%=3':1$5+4*:0$=4(<3'80$6.":1%>4)5+ 1'8.#<3'8/#91%=5);2&4, 0)<5)>6*:1%6.":1&=5)90$7/#<4'D:+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "+%/(/(4,#5-$/'2)3* 2)2)3)5+9/#4*-# &0 3":' B*F- G0$D.$@+">)!>*"=)"<(!:& 7$3"1!.+($     -   -    - - -     -)#)#(!'!*$+$.'+$+$/(-%,$.'/(.(/)/(/(/(.',%/(0) 0) 0) ,%,%.'-&/(0) -)-+ /* /* 4,#2* 1)2*!/)/)/* .(-&.&1) 0(*#*$,'+$*! " -# "  &  -f`\gdaed``a^Z[Z[\\WXX[\\^_^___[[[WWWUUUUUUWWWZZZWWWTTTUUUVVVVVVUUUWWWTTTPPPNNNKKKIIIGGGFFFFFFFFFGGGGGGCCC>>>@@@@@@>>>;;;<<<666///222555555111000111000+++...///...***111000,,,++++++'''%%%###$$$$$$$$$######### ###$$$$$$""""""!!! !!!###$$$$$$######$$$$$$######""""""$$$"""###%%%###!!!!!! """$$$$$$###!!!###$$$$$$$$$%%%###!!! !!!"""!!!!!!###"""!!!!!! """""""""!!!"""!!!!!!!!! "!"#!#'!& $'!+%& "%)#("& )#%## -  -    -           ("'!,&-&,$/'0)0(/(/(2+!2+!1* 2+ 4-"3,!5.#5-#7/$5-"2*2*6-"6."80%91&8/#6-!7."6."6."70$7/$5."6/#90%7."8/#7.#4+5, 80$<3';3';3'<4(=5):2&5- 3*5,:0$;2%90#:1$<2&:0$5+5+;1&=5)<3'6."5-!;2&>4)6, 3):0$=4(:1%90$=5);2&5-!2+<4(<4(7/#6-!91%<4(8/#7/#<4(?6)ZL8 - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  %*#*#0)2*!0'0(3*3*1(0&5+ 9/#5*.$1(#""        - -      -  - -      - )#("' (!)"*#+$)"-%0(.'-%.&.'/)0* .(/(0) /)+%0) 0)-&/(,%-&.'-'-&.'+&*'/*!1+"1+"1*!0) 1) 0(0(2*!.&-%-%1)0) .(+&-(/* 0'. )"    ! hd`gebaa]cdbaba^_^Z\[XYY_`____]]][[[VVVRRRTTTWWWXXXWWWUUUUUUUUUSSSRRRSSSRRROOOKKKJJJIIIDDDDDDFFFDDDBBBCCC@@@???>>>===>>><<<999555333333444222111222222000---///++++++++++++'''******)))(((&&&###%%%&&&$$$%%%$$$"""""""""$$$%%%$$$###!!!!!!"""!!!###%%%$$$"""###$$$$$$$$$%%%$$$###$$$$$$######%%%######""" """$$$$$$######$$$%%%&&&%%%%%%"""!!!"""!!! !!! !!!!!! !!!!!!!!! !!!!!!!!! """""" """#"$("& #(!+%& #)#*#)#(!("& $# -  -       - - - -     - -      $("*#-%-&0)2* 1* 1*2+!3,"2+ 2+ 3,!3,"3,!5-#3,!4,!4,!2*3+ 3+ 80%7/$91%90$6.!90#80#7/#6/#7/$5."6.#7/$7."8/"7."5, 6."91%:2&;3':1&<4(=5):1%5- 4+5, :0$:1$:0$:1$<2&9/#4*5, <2&>5)<3'3, 4- :1&<3'6,!4*:0%=4(:2&8/#;3':2&5-!3, :2'<3(80$6."91%<4(8/#7."<4(;3'>4& - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  "& -&/(.'-&2* 1(/&0&5+ 8."5+.$1)               -    -  -    - -)#("& & '!*$-&-&.&3+!0(/(/(.&.'1*!1+!/(/(2+".'1*!0) .'1*!.',%-&.'.(0)-&+$.'/(0) 0( /(/'.&0(2*!0).&+#-&-),',&/'0)0(/&,"*% pigjfcfda`a]ccbabbbdcabbYZY[[[^^^[[[WWWXXXUUUSSSUUUZZZYYYVVVUUUTTTSSSQQQOOONNNNNNLLLJJJIIIIIIGGGHHHHHHDDDAAAAAA@@@AAA??????>>><<<:::777222333222333666555333000,,,++++++(((,,,+++'''%%%&&&'''&&&&&&&&&%%%''''''%%%%%%$$$%%%%%%%%%$$$###"""!!!""""""###%%%%%%#####################"""$$$$$$&&&$$$$$$%%%$$$######""""""$$$$$$$$$%%%%%%###$$$$$$"""!!!$$$###""" !!!!!!   !!!!!! ###""$(!& #(!+%& #)"*#("'!)"& ##   -  -     - - -   -      -      %& )#-&0(3+ 3,!2+ 2+ 5.#0)2,!0(3+!4-"4,"6.$5-#5-#4-"3+ 3+ 4,!7/$6.#80$91%6.!90$6.!6."70$4-"3, 80%8/$6-!8/#7/"5-!7/#90$;2';3'91%<4(>5):1&6-!7-!9/";1%:0$:1$<2%=3'90#2*5, <3'>5)<3'5- 5-!:1%;1&6,!5+:0$>5):2&8/#:1%:2&4- 3, :2&=5):2&8/#:2&=5)91%7/#<3':1%6-!J?0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $)#*#+#2* 0(,$.$2)5, 4+/&0(4,                    -    - -  -    - '!'!%% (",&,%,%-&1)0(0(/'-&.'1) 1*!0* 0*!.(.'.'0)/(1* .'.&.'-&-&)",$-%.&.&.&.&.&/'-&,$0)-&.&*#,%.(-'-&-&0(1)2+!-&-&.%($tkmqjljigffcfffcdc]^^\^]]^]TUUZZZ[[[WWWVVVTTTWWWWWWZZZ[[[[[[VVVSSSQQQQQQPPPMMMLLLJJJJJJJJJIIIGGGEEEDDDDDDAAA??????@@@BBB@@@>>>;;;:::777000222444444222222333222///(((,,,+++***)))((((((&&&&&&&&&&&&%%%%%%%%%%%%&&&&&&&&&%%%$$$%%%&&&%%%###!!!!!!######$$$$$$############"""""""""$$$$$$$$$$$$%%%$$$$$$$$$""""""###"""#########$$$%%%$$$#########""" """%%%###"""!!!!!!!!!  ##$"#$#!#' '!$(!-&("#)#*$'!& ("$"#  -  - -        - -    -  - -     ("*$+$.&0(2+ 2+ 0)2+!5.#1*2+ 2+ 4-"5.#6/$6/$5-#7/%4,!0(2*1)7/#6/#8/$7.#4+90#6-!6-!4-!3,!2+ 5.#6."6-!9/#90$6."80$90$;3'<3(:2&;3'<4(:2&6-!7-!8.!<2%:0$9/#;1%<2&8/"3*7.">5)?6*;3'6-!7."<2'<2&6,!6, :1%=4(;2&91%;2&:2&5-!5."<4(=4)90%80$<3'=5);2&80$<4(90$4+A7*vfOaaayyy|||ppp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - !$& )#(!(!*!0(4,!2).%0(3+ 3+ 0)       -        -        -  - -  - %'!& & (",&*$,%-&.&0(0(0(/'/'1* 2,#0*!-'2,#.'/(.&/'0)/'/'.&0(0)-&*#,%+$,%+$,%,%-&+$,%1*!0(.&*#,%.%,#-$,%-&/).(,&+%.&tjkwnqsmooklgffefeegfcdd_``___\\\RRRWWW[[[\\\[[[XXXWWWZZZ\\\[[[XXXUUUSSSRRRPPPNNNMMMKKKIIIIIIIIIGGGDDDBBBEEEBBB???>>><<6*:1%6-!8/#<3'<2'8.#7-!;1&=4(;3':2&<3';2&5-!5.!<4(:2&6-!5-!91%<4(;1&:1%>5)90$4, ;2&I?1DDCkkk}}}fffccc``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %'!+$,#0(3+!1)/&0(1)0)0(0(2* 4,"*"' $        -      -   -     -  -  -  - )$)#'!%'!+$+$,%,%-%/'/(0)0) 1) 3,"3,#0*!/) 0) 0)0)/'.&.&-%-%.'-%0),%(")"+$-',&,&+%,&("+$-&/(,%+$,%,$*#+#-&,%-&/),&*$umoqjlsmoljjllljkjlmkdeeded]]][[[WWWQQQYYY___bbbaaa\\\XXXXXXZZZWWWSSSSSSRRRQQQOOOMMMLLLKKKHHHGGGFFFEEECCCEEECCCAAAAAA@@@BBBAAA@@@>>>:::999555222444333444555444...+++,,,+++***+++***&&&###&&&%%%%%%&&&'''&&&'''&&&&&&(((&&&&&&&&&$$$&&&%%%%%%%%%#########"""###""""""!!!###$$$%%%###!!!###"""$$$$$$%%%###$$$"""!!!!!!###"""!!!$$$$$$$$$%%%$$$###%%%$$$###$$$$$$###!!!!!!  "#"##%' & $'!*#' $%("&&$$#"    -      - !!!!    - -  -      -         ("' ,%-&.&0)0)0(3,!6/$5.#3+!4-"6/$4-"6/$70%7/$80&5-"1*0)2*5-#5.#6."5,!6-!8/#6-!80$81&6/$5.#6/#5-!7."=3';3'6-!7."91%<3(<4(>5)?7+>6*80$5+ 6,8.";1%9/#9/#;1%:1$5- 3+:1%>6)>5)8/#7.":1%=4(=3(:/$8."<2'=5)<3':2&;3';2'4, 5.!<4(:2&91%90$:2&=4(;0%;1&?6*91%4, 91$?8)YN9LKJ[[[dddԍddd^^^[[[XXXVVV - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ")$*$.(0) .'-%/'0(0(.&/(0(2* 0',#*"( $        -     -  !!!!!!   -    -  - - - -  )#(#$%)"+%,%,%,$.&/(/(/(1*!2+!/) 0*!/(/(-&0) /(-%,$*#+$.'*#,%-&)#,&.( .(.(,&,&*$)")"-&,%,%+#,%+%)#)#,&)#'!.(,%qnpspqtpqnlmfffjkkfhgcgdcdcaaa```aaa___ZZZZZZZZZ^^^```]]]XXXUUUVVVTTTRRRPPPNNNLLLKKKJJJJJJJJJHHHFFFDDDEEEEEEAAAAAAAAACCCBBBBBB@@@???===;;;666333333333000222444222...+++++++++***,,,***'''&&&&&&%%%&&&(((&&&&&&''''''(((((('''%%%%%%$$$%%%$$$$$$$$$######""""""""""""""""""$$$%%%$$$"""###$$$"""""""""###""""""######!!!###!!!###$$$###"""""" """"""""""""$$$#$$###!!!   !$##%& & '!'!%& (!(!%' ("%$%%"          -    - - -       - -       %'!+$-%0(1)0)1* 4.#5.#4-"3,!5.#6/$4-"4,"6.$6/$7/$4,"0(0(2* 5.#7/%7/$5,!6-!6-!5-!70#70%70%70%70$5,!6-!9/#;2&6-!6-!91%<4(<4(>6*?6+?6+8/$6-!6, :0$;1%9/#9/":0$:1$5- 4+;2%?6*>5)7/#6.!:1%=3'>4(:0%8.#=3(>6*<3'90$:2&;3'4-!6/#>5);3':2&8/#:1%>4);1%;2&?5*90$5, :2%<5(A9*MLKSSSqqqfffQQQSSSRRRNNNMMMMMMLLLIII - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  #*$-',&*",$/(0(,$-&.&3+"2* -$*"(!$         -      - - ###"""   - -     -  -     &!% !$("*$+$*#)"*#-&+$-&0) 2+"/*!/) .(.(,%/(-&+$*$*$,%-'*#+$+$'!)#+&.(0*!+%)"*#("(!,%*#)!( )"(!(!*$)"& '!onmuruonpoopjiihiijlkehgegfdddaaa]]]]]]]]][[[VVVVVVWWWXXX```ZZZVVVTTTTTTSSSRRRNNNJJJHHHGGGGGGFFFHHHHHHEEEAAADDDCCCAAABBBBBBAAA@@@@@@???>>>;;;777666666444111...000222111...---,,,***)))'''''''''&&&%%%%%%'''''''''(((((((((''''''&&&%%%$$$$$$%%%%%%%%%###"""""""""""""""!!! ###%%%$$$###!!!$$$%%%%%%### !!!###!!!"""!!!!!!"""!!!#########""""""#########"""###"#####"""!!! !!!!!!##!"& %$' ("$&'!' $& ("& %& &         -         - -      - -    -   $(!,%+#/'1)2+!2+!4-#4-"2+ 2+ 4-"5.#3,!3,!6/$92'81&3+ 0(0)1*4-"6.$8/#6-!5- 4, 6-!80$70$5.#81&;3(5,!5, :1%:2&5-!4, 7/#<3(<3(=4)?6+?6+8/#5, 5+9/#;1%:0#9/#:0$;1%6- 4+:1%>5)=4(6."6-!90$<3'>4(:0%7."=4(?6*:2&6."90$;2&4- 5.">5)<3'91%7/#80$<3';1%;1&?5)91%6.!:3&=6)=6(C:*UTS\\\^^^WWWLLLDDDDDDFFFGGGCCCAAADDDEEE@@@ - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  '!*$)!+$0(.&+$-%/'2*!1(.%*")!&         -      -   """!!!!!!!!!"""  - -      - -      '"% "$(")#,%,%,$+$+$,%+%/)1+"0*"/) -'.(-'-&,%*#+$*$+%*$("'!("'!(")#+%,&'!& +$)#& )#' (!(!)#)"' )#("' poowvxkkmfgifgh`baefebed`baaaaZZZ\\\XXXXXXXXXUUUOOORRRWWWYYY[[[XXXWWWTTTQQQRRRQQQMMMHHHEEEEEEGGGGGGFFFFFFEEEDDDDDDAAA???AAABBB===???>>>???===999666777777333///,,,//////...,,,+++)))(((&&&###%%%&&&&&&$$$&&&'''''''''&&&((('''&&&&&&%%%&&&(((%%%$$$$$$&&&&&&###!!!!!!!!!!!! """$$$%%%$$$###!!!###$$$%%%&&&!!!$$$###!!!!!! ###$$$######"""######$$$###!!!!!!"""$$$$$$"""!!!   $%"#%""' )"$%& & #%("& %$#!     -   -  -    -   -      - -  -       '!("+$+#.&1)2+!1* 3,"6.#2+ 1*3, 5.#4-"6/$70%80&81&3,!0(0)1)2+ 4-"7.#4+ 5, 7."7."7/#7/$5."91&:2'4+ 2(6-!80$6-!6-!91%<4(;3'<3(?6+>5)7.#4+6,:0$;2%:0#8/":0$;2&6- 3*90$=4(<4(6.!5-!90$=3(=3'8.#6-!=4(?6*90$5, 80$:2&5.!4-!>6*=5)80$7."91%=3(:0%:1%>5):1%6.":2&=6);4&<4&m]E[ZZmmmTTTQQQHHH@@@===<<<999999999999777777888666 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  %$(!1) +$*#*".&0(0(.&*")"'          -      - -  ###""" %%%"""  -       - - -     '"##%'!*$-&,%,%*#(!+$,%-'/) ,&.( -'-'-&+%+%+$'!*$("*$'!'"$%'!("*$)#*$+%*$*$)")#$&)#'!("& )"oonkkledfllniikghiced[][fhfefebbbYYYXXX\\\XXXVVVYYYZZZVVVSSSWWWVVVTTTSSSUUUSSSQQQPPPPPPMMMHHHFFFFFFHHHHHHIIIGGGBBBCCCCCC@@@===BBBBBB???@@@@@@===;;;999777666444000---,,,,,,,,,,,,+++)))((((((%%%""""""$$$%%%$$$%%%$$$%%%$$$$$$&&&&&&%%%'''&&&&&&%%%&&&&&&###&&&&&&$$$!!!!!!"""""""""$$$%%%%%%$$$###$$$###$$$$$$$$$######""" !!! ######$$$######$$$$$$$$$"""!"!"""#########!!! """$& $#$ "%'!$$& & $$("$%$#!  - -   -   -!!!     - - - -             %(!,$-%-%1) 0)0)2+ 5."2+ 1*3, 5.#5.#6/$6/$5.#81&5.#0)0)3+!4,"3,!8/$5, 4+6-!80$70$80%5.#70&7/$2)2(7-!91%7/#7/#:1%<4(;2'=5)?6+=4)8/#6, 6, ;1$<2%9/"9/#;1%;2%6- 3+90$>5)=4(6."4+:1%=3'=3(7-"6, =4(>6*90$6.!:1%:2&5."6/">6*>5)91%7/#80#<2'9/$90$=4(:2&7/#:2&=6);4'80#F<-jjiONNKKK???888666777333000---,,,,,,+++******++++++(((M~M}Kw{EoyHs{CqwEsxIpwKovHls@jn>mo@opDqqEmoDno - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - !,&)#' )!.&0(0',$( (!&          -       - ###"""### -          - -    -  &!)$#%)#*$+$,&+%)#& *#)"*$.( /)!-'+%,&+%*#)#%$)#'"% %!(#&!&!$& ("*$)#$%)#+%+$& %'!)#)#("nooppqlmollnhhiggiiikddeccbgggeee```]]]\\\\\\XXXYYYYYYVVVTTTRRRSSSTTTSSSSSSUUUTTTQQQPPPOOOMMMJJJGGGGGGGGGHHHCCCAAAAAAAAA@@@AAACCCBBB@@@>>>AAA>>>;;;:::999666444222...,,,,,,++++++---***((('''&&&$$$"""$$$$$$$$$######%%%$$$""" !!!$$$%%%&&&%%%$$$%%%'''###!!!$$$&&&$$$""""""$$$###"""###"""######!!!######""""""###%%%$$$"""!!!!!!!!!###"""###$$$######!!!######"""""""""!!!  $% %#%#!$& "$' '!%%'!#%%%!    - -  -    -   -   - - - -     - - - -      '!*#.'-%,$1* 1* 1* 5.#92&6/$4-"5."70%70%70%5.#6/$70%3+!0)1)5-#6/$4,!7.$5,!4+5-!6."70$92'5.#6/$5-"1(2(6-":2&6."5-!8/#<4(;3'>5*@8,<4(7.#6, 7-!;1%;1%:0$:0$<2&;2%6-!4,:1%?6*=5)7."4, 90$=3(=2'6, 6, >5)>6*90$7/#;3';2&5."7/#<4(=5):2&8/#91%=3'9/#90$=4(;3'7/#92&=6)<5(5.!>5']P<WVVOOOBBB111+++***)))***(((%%%###$$$&&&%%%$$$%%%&&&'''%%%GB>}={?y@wBwCv|CtyBqu>lpAnqBor@nqoq>mq@iqBhr=nt=mq?jl?fhEbgE^c?]`@`cCacCde@dd?gf@hhAfhBhl5*:2&7."5,7-!<2&=3&;1$:0$<2%:1$6- 5,;2%?6*<3'7/"4+90$>4);1%4*6-!?6*>6*90$7/"<3';2&5.!7/#;3'<3';2&91%;2&=3'9/$:0$>4);3'7/#92&=5);4(4- 90$F<-MMM>>>111&&&""""""""""""$$$$$$%%%$$$$$$$$$%%%$$$%%%&&&$$$$$$KB~={~=||jm=il>hj@gi?hi6gg5ef6ce5bd4be2cf4^`7YZ9XX;UV;PS5GK5FI8HLec?ce?bg;`e5*>6*;2'8/#6, 7-!;1%<2&;1%;1$<2&:1$5, 5, ;2&A8,<4(90$6-!:1%?5*;1%3)6-!>5)>5)8/#8/#;3';3&6/"80#<3'<3';2&:2&:2&<2':0%:0%=3(;3'80$;3'>6*;4'3,8/#@6)G;,,,,""""""""""""###%%%%%%&&&######$$$$$$$$$'''"""!!!N}@}<<|=w}[]BQS=A@ - - - - - - - - - - -  - - - - - -  - - - - - - - - - - - - - -  - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    %'!%$% !         -          - -           - - - -            -      -   )$(##$(")#("("+%& %& '"'"'"(#("&!&!"'!!E 9>!""!"$% '"'"% qmqoprltsemmbfhghjcbdaaceefaaa^^^[[[ZZZZZZWWWUUUXXXWWWVVVWWWUUURRRRRRTTTSSSRRRQQQOOONNNNNNKKKIIIJJJIIIFFFCCCEEEDDDBBBBBBFFFDDDBBB??????<<<>>>===;;;999999666444444555333000---+++******)))'''&&&$$$$$$%%%&&&&&&%%%%%%$$$###"""!!!###"""###"""!!!!!!###$$$$$$$$$###"""!!!  $$$%%%$$$$$$$$$""""""###""" !!!!!!"""#########""" """###!!!"""!!!!!!""""""$$$###$$$"""!!!  !!! $$# #%&(!& "#& &!$%$"#     - -   -   -   - - - - -      - -       )#+%-'-&-&0(1)4,"6/$5.#4-"2+ 4-"7/%6/$5.#7/%81&70%4-"3,"1)3,"6/$7/$:1&5, 6."5, 6."92&7/%7/%80&90%5,!6-!:1%:2&8/#7/#:2&;3';2&=4(=5);2&8/#7-!9/#;1%<2%;1$;1%<2&90$4+5- <4'A8,<3'80$7.";2&?5*;1%3*8.">5)>5)80$91%;3';3&6/#80$=4(<4(:2&91%91%:0%9/$:0%;2':1%7/#;4'<5):3&2*6.!<3'?4&dR;### """###$$$###%%%%%%%%%######$$$%%%%%%Kkk=~DzAv~-?+49)/3+57*%& " $+($84"<8$96'13$'"&*567>?=>IFDQJOF>D-"?$8*A8<  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -   - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  !                    - -   -   - - -                          (#'"""& ("*$%*$$$(#% #'")$$'"&   # !  ? = f-"E%=  !"##% nhnqjonehhooWbc_ceedfhfh``accceee___ZZZZZZXXXUUUSSSYYYWWWSSSQQQTTTQQQPPPQQQOOONNNMMMKKKLLLLLLHHHEEEFFFJJJDDDCCCAAAAAA???@@@AAAAAA>>>============;;;999888666555444333111///---+++))))))((('''%%%%%%%%%$$$&&&&&&%%%%%%&&&%%%$$$$$$###""""""!!!!!!!!!!!!"""""""""###$$$######### """%%%%%%$$$"""###$$$###$$$"""!!! !!!######"""!!!!!! ###### !!!!!!"""###$$$"""!!!!!!!!! !!!  $#$!$%& )#(!#%%& !#%#"$#!    - -  - -     -   - - - -      - -       )",&,&-&.'/'2* 4,#6/$5-#4-"3+!4-"6/$80&81&91'81&81&4.#4.#1+ 5.#5,!5-"7.#3*5-"4, 6."91&7/%81&91&80%4+ 7-";2&:2&80$90$=4)<4(:2&<4(=5);3'8/#7- :0$;1%;1$:0$;1%;2%90#3+6-!=5(>6*;2&7/#8/#;2&>4(:0$4*8.#?6*>5):2&:2&<3';3'6/#80$=5)<4(91%80$90$:0%8.#9/$:1%8/#4- :2&=6*<4(4, 6-!<2&:/#A5' """"""############$$$"""######$$$$$$$$$0.-TYV?6?PNWDmn:{w<6?F=GF?B:3H>8@A;?PN=KKEMAJM=F:6  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - :         -                                       - -      & #!"& )#'!("'!%& &!$$&!&!!#     - ;j/ k- l+> ?B&! $$ pnsrlsplorklpcfiab[bd]bebbecccaaadddbbb___^^^XXXVVVUUUWWW]]][[[TTTUUURRRRRRSSSQQQMMMLLLKKKJJJJJJJJJFFFBBBDDDHHHEEEBBB>>>===>>>???===???>>>>>><<<;;;999:::888666444333222000///---,,,+++***(((&&&%%%%%%$$$%%%######&&&%%%$$$$$$%%%%%%$$$###""" !!!""""""""""""""""""######$$$%%%$$$###$$$&&&%%%###"""#########"""""""""!!! !!!"""!!!!!!"""$$$### """$$$###!!! """!!!   $$$!"$%("'!#& ' ' !#%$#$# !   - -  - - -    -   - - -      - -       (!,&,&-'/(/'2*!3+!6.$4-"2+ 2+ 5.#5.#6/$92'81&81&93(5/$5/$3-!5.#7.#8/$6.#1)4,!5-!4, 70$70$:2&:2&80$6-!80$;2%;2%8/#80#;4(<4(;3'=5)>5)<4(7."5+9/#:0$:0$:0$;2%<2&90$6-!90$?6*>5):2&7/#90$<3'>4(:0$4*7.">6*=5);3':2&;3';3'6."7/#=5)<3'91%80$:1%;1&8.#:0%;2'80$4- :3'>6*<4(5.!8/#=3'9/$;0#VH7""""""##################$$$""""""###### ##"100WD:M/Q6,S::L8=FHL=nf7mg4UZ>S]2V\,V[)KP$?B14$*.%&#$!" "!#!!" &"&""!    ! !# "# "" ##"!  12 59%?0+994A9=G4>(E&A"C/*G?5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -          -                                       - - -     - $! "(#*$'!%%""   ""  - ! -!    b$k+n+n,l*8A  \]`rqrpnlklgka`j\\ibcfeihahdcdcccdddccc___WWWXXXYYYWWWXXXXXXUUUUUURRROOOPPPPPPNNNMMMKKKJJJJJJJJJJJJFFF@@@CCCFFFCCCAAAAAA@@@BBB>>>;;;999;;;<<<<<<999333888888444111000///.........+++)))''''''&&&###$$$$$$$$$###!!!$$$$$$"""$$$&&&%%%$$$###!!!!!!""""""###$$$############$$$%%%%%%###$$$$$$$$$######$$$$$$######""" !!!!!!!!!"""!!! !!!###$$$"""""####$$$### """"""!!!   !$##("&#%)")#$#$%%$"   -    - - -    -     - - - -      -       ' )#,&(",%0(/'2*!7/$7/$4-"4-"6/$6.$4-";4)92'81'93(5/$4.#4.#6.#6-"80%90%3+ 4-!5.!4- 5.!6/#80$:2%90$5- 4+;2%:0#7."80#;3';3':3'<5)<4(;3'7."4*:0#<2%:0$90#;1$;1%90$7.":1%?7*>5):1%7."8/#=4(>4(:/$2)8."?6*>6*<3':2&;3';4'4- 7.">5)<3(91%91%<3'<2'8.#:0%;3'8/$3+92&=6);3'6."90$=4(9/#5+A7)###"""######""""""!!!!!!"""  """222BBAR<1I0&G+%A0'H7+N3*V::OHF=]R4`U>LO4+7/4>/@G*=C ) "!!  !!" !"  !   !!"!!! ! ! !!!!!!"!"" "#!"#!##!!! !!!   #/&#/&$20-5752<;0DD9?@9=><@>@?9?5*?)F#J$G+IB0DC/?+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -        -                                     - -  -       !!""'"'!'!#!! " -"    - U%Q$K$i(n-n-n+A 5@ !dedjlf`k]`h\k^^eebhegf_efbedddbbb___YYY[[[YYYVVVVVVVVVPPPPPPQQQMMMKKKNNNMMMKKKGGGFFFIIIHHHGGGHHHEEEBBBCCCEEEBBBAAA@@@???CCC>>>;;;999999<<<:::777666666444111000...---------,,,)))$$$%%%%%%######%%%%%%#########%%%$$$###$$$%%%%%%%%%$$$!!! """"""""""""######"""###%%%%%%&&&$$$###$$$$$$######"""###$$$ !!!!!! !!!"""!!! !!! !!!"""$$%#########!!! """"""!!!   !!!!!!###"""###"""'''  !!!' $%& $#"#      - -    -    -       - - - -             ' ("+%+%*#.&/'0(6.$80%4-"4,"5.#5.#4,"4-"70%80&70&5.#3,!4-"80%80%;2'<4)5.#3, 5-!5-!5."70$70$80$80$6-!4, 90#8/#6.!90$;3'92&81%<5)=6*=4(9/#6, ;0$=3';1%8."9/#:0$:1%7/":1%>5)>5);3'7."8/#=3'>3(:0$2(7."=5)=4(:1%91%;2&;4(3,6.">5);3'91%91%:1%:/$7-"9/$90$6-!2*80$<4(:2&6."90%>4(9/$6+ ;2&MB4###""""""!!!   !!"&&&444BBALLLF3&G1'J1*OA9HJ?@E>=GF29;?..E-/=@=.RG+MD/26*(0(/2"$ $"#!!!!!    !   ! ! !! !! !!!!!!"!""!"""""""""!!$##%$$$""" ")&%)"#0)(," /" /$ 6(=)>"> A#D'C(A/;.@,@,   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -         -  -                           -  -       !"! '""% "#  !      - -^(X&R%Of%h*k-l+j'87? ;?;ioh]h[^g[ce^dgccfcfbegbea_`[[[ZZZ\\\YYYUUURRRSSSTTTOOOPPPNNNJJJIIIJJJLLLHHHFFFEEEEEEFFFCCCDDDBBB>>>@@@@@@@@@@@@===::::::::::::888666888888666666444333111///,,,++++++******'''%%%%%%$$$!!!###&&&&&&%%%###&&&&&&%%%%%%%%%$$$$$$%%%###!!!!!!"""""""""!!! """#########"""$$$$$$$$$######$$$###""" !!!!!!"""######  """$$$###"""!!! !!!!!!!!! !!!###%%%"""$$$$$$$$$$$$"""""""""$$$$$$%%%$$$$$$"""    -   - - -    -     - - - -      -      & (",&-'.',%-%2* 5.#6.#2* 3,!6/$5.#4-"6/$7/%3,!4-"6.$3,!3,!7/$91&<4);3(4,!3+ 5-!5."70$81%81%91%:2&7."6."8/#80#7."8/#91%81%91%<5)=6*<4(9/#7-!;0$=2&:0$6- 8.";1%<2&8/#:1%?6*?6*;3'7/#9/$<3'>3(:0$4+90$?6*<4(90$90$;2&;4'3, 7/#=5);2&80$80$90$:0$9/$9/$7/#4, 2+70#:3&92%5-!8/#=3'9/#7-!90%E;.sbN!!!!!!!!!  $$%''(545AAAIJIVF?TE=N;2H/)J/+E2.?94EJD7LD6NG073')#'//+094*1/& $!%%&&!#$!!!!!!"""!!!     ! ! ! !!!"!"!!!! ! !!!!""""""""""!""""#""#""#"##"""!!"!!"!!" !   & 267 8;$ ;&A(E'E)I/I00)$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -          - -                               - - -     - "! % # !  ! -"     -e)d*_(n*d#UEb'g,i+k*B 09<   @F@dldff`bb\cd_cda``_d`bZWXZXYWWWXXXVVVRRRRRRNNNOOONNNRRRQQQGGGBBBFFFGGGEEEEEEEEEDDDCCCCCCCCC@@@??????>>>>>>===:::888777666666777777111333333111333333111---*********)))'''&&&%%%%%%%%%$$$###''''''&&&&&&$$$%%%%%%%%%#########%%%### !!!!!!!!!  !!!"""$$$%%%$$$######$$$%%%"""###"""""""""!!!!!!###"""!!! ###$$$""""""!!!   !!!######""""""$$$$$$!!!!!!###### """$$$$$$$$$%%%###$$$###$$$$$$###""""""!!!   - -     -       - -     - -  - -    '!'!+%-')"*#1) 1)6.#5.#3,!4-"70%6/$5.#6/$81&4-"4-"3,!2* 3+ 5-"80%<4)91&3+ 4,!5."6."91%91%70$91%91%7/#7."91$:1%7."7/"91%:2&:2&=5)=5):1&8."8-":0$<1%8."7- 9/#;2%:1%7/":1&?6*>5)91%6."8/#<2&;1%7-"4*90$>6*;3'90$91%<3'=5)4- 6/";4':1%8/#7.";2&;2&5,!8/$5."5-!4, 80$;4(:3&6."7."=3'9/$7-"9/$?6+K@2 - - - - - -  '''('(101<;;CCCHII`RLPA;]MFzleUGA>+';)&0%#,'$632*+)2+'-*)$&#!########""""""""""""    !!!!   ! !"""###""""!!#""#"""!!! !"!!"!""!""!!"!!#""$""$! #!  - " ,2$9)#;( ?'E("J.(I2&D-C-" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - -       - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -           - -                                  - - -       '"! $!"  -     -i+i+e*u.!p+g&Z"I[$a(e*h'i&<+9     - - -MVQeidca\a^[__]\][\[Z`]^][[XXXVVVUUUTTTOOOKKKMMMMMMLLLJJJAAA@@@BBBCCCAAABBBFFFDDDCCCBBB???@@@@@@@@@>>>===999555777888777444888444111000444111...//////+++***)))((('''%%%$$$%%%$$$$$$&&&%%%%%%'''''''''%%%%%%###$$$$$$###$$$%%%$$$"""""" !!! !!! !!!!!!$$$%%%"""!!!"""###%%%###!!!$$$"""!!!"""!!!""""""!!! ""#######"""!!! !!!!!!!!!  !!!""" !!!!!!###!!!###!!!   !!!&&&$$$$$$$$$$$$$$$%%%""""""######$$$&&&%%%$$$$$$$$$$$$$$$ !!! -        - - -     - -   -    '!)$*$,&+$.&0) 3+"5.#4-"3+!5.#6/$4-"5.$81&92'6/$5-#2+ 3+ 6.#7/$91&=5*:3(5-"4,!5-"4,!81%92&7/$92&7/#7/#80#:2%:1%7."8/#;3';3&91%<4(<4(:1%7-"7,!9.";1%;1$6- 8.";2&90$5, 90$?6*>5)91%7/#8/#<2&:0%5+ 3)90$>6*;3'90$80$;2&<4(4, 5.!;3':2&8/#7."8.#:0%6-"6."4, 4-!4- 81%;4(81%5-!5, <2'9/$5+ 7-">4)D9-SE4 - - - - - !!!'''))),,,666?>?EEEeVPdQLO84P:6S@;9'#90+2/)+%")#!-(&-0"   #""###$$$###""""""""""""!!!  ! !!!   !  "!"#"""!!! !!!!"!!! !! ! !!!!!!!"""!!!!! ! #""$""$""#!!" ! "3+&6*#9(;'?-$A6/E82F=8;;9=DC - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - -  - - - IA471'     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -          - -  -                       -   - -       - - -     #"   -   -j+l,i*x0!w0!v.!u, j(\#N>Y$a%i$g!?307     X_[bc`b`]a`^``^__^ZYYYXYVWWSSSTTTQQQHHHHHHLLLKKKGGGDDD???@@@AAACCC???@@@BBBAAABBBBBB>>>===>>>===;;;:::777222444777666555444444222222333///)))+++---++++++(((&&&%%%%%%%%%%%%######%%%&&&%%%&&&&&&%%%%%%$$$######$$$#########""""""!!!!!!!!!!!!""""""!!!"""!!!!!!"""""" """######"""!!!"""!!!!!!!!!"""######""""""######!!!  !!!   !!!!!!!!! !!!""""""###$$$###$$$%%%######%%%###$$$%%%%%%$$$%%%""""""$$$"""$$$"""%%%###%%%                 -  -    - -   -    ")#*$*$,%/'0)2*!5-"4-"2* 4,"6/$5/#6/$81&81&70%5.#3,!7.$7/$6.#80%<4);3(6.#6.#80%80%=5*91&7/$80$70$6."7/#;2&:1%7."80$;3':1%80$;3'<3':1%8."6, 8."<2&<2&90#90#;2%8/#4+90$?6*=4(91%8/#90$<2&;1&5+ 2(:1%?6*;2&80$80$;2&:2&4, 5-!:2&;3'91%7/#8.#8.#2)4+ 4-!4, 3+6/#81%6."5, 6-!;1&8.#6,!8.$>5*=4(?4&  ###&&&''')))000:9:A@@DBC`QIPA:U@;Q63[>:D+'1 *!52.+ -#!   -  !!!###$$$$$$###""""""""""""!!! ! !!!   !! "!!"!!!!!!!!! ! !"""""!!! ! !!"!!" !!!!!"""##"%$#$#"#! "&, --9.'G=9N@=D?=@HEAQN@XU - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |lUE>2;5,93*       - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#%$""!           - -          -                    -  - -      # !   -  p-o,l+t-s-u,v, t+l(`%S!D L"Z#ebV$?*25  - -  8<9\_]]][[[X]\[\\[TSRWVVUVTTUSSSSRRRIIIIIINNNIIIGGGFFFEEEBBBCCCBBB@@@@@@AAA???@@@???<<<<<<<<<999666:::888444444444444333444333000000000,,,((()))+++((((((&&&$$$%%%&&&&&&$$$!!!!!!###%%%%%%%%%$$$$$$%%%%%%$$$%%%%%%$$$###!!!"""###"""!!!!!!""""""""" !!!!!!!!!!!!!!!######!!!"""###!!!!!!!!!"""###$$$""""""!!!    !!! !!!######$$$%%%############$$$&&&%%%$$$$$$!!!!!!$$$"""&&&!!!""""""###"""            -    - -     -       !'!+$*$,%0)1) 2*!5-"4,"2*3,!6/$6/$5.#6/$6/$5.#5-#6.#8/%7.$7/$7/$;3(81&4,!70$80%7/$:2':2'80%7/$80%5-"7/$;2&91%7/#90$:2&91%91%:2&:2&:1%8.#7-!9/#<2&<2&<2&<3&;3&8/#4+90$?6*<3':1%7."8/#;1&;1&3*1(;1&?5*:1&80$90%;3':3'4-!5-!:2&;3':1%8/$8/#90$3*5,!7/#3+/'2+7/#6/#4+ 7.#=3(9.#5,!90%>5)<3(9/"G<-!!!$$$'''''')))***333;:;>==HFFW=3K-&F-(K5/B-%>&70**&%0/ !!!"""""""""#########"""""""""!!!  !!!!!!  !! !!!!! !!! !!!!!!!!!!"!!"!!!!   ! !! ! !!!!!"" !" !"!"""#"##""! &1%21.6:;766986>EB@QN7+>7,60&.(     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - -   - - - - - -   #%)#)#(!%"            - -            -                  - -  - -    #!     q-r-p,{1$t- p+n,s+u+r*n*d'Y&L 9 X#\' l%i%@7$ 20 -  -=?>YZYYYV\[X[ZXXVUa]^VVSTURPPOOOONNNLLLNNNLLLGGGHHHCCCAAACCCCCC@@@>>>@@@AAA===::::::999555666666777666222222222222222222000//////---)))((())))))&&&%%%$$$$$$$$$%%%%%%$$$!!! !!!###$$$$$$$$$$$$%%%%%%&&&%%%%%%&&&###!!!""""""""" !!!!!!!!!""""""!!!"""!!! ######"""!!!"""### ###"""######""""""    !!! !!!""""""""""""!!! """###$$$$$$$$$""" !!!######"""###$$$$$$$$$###"""!!! !!!      -   -    - - - -     -       (")#+$*$,%1*!2*!3+!5-"4-"3+!4-"5.#3,!2+ 5.#6/$5-"4-"6-#7.$7/$;3(81&81%6.#3+ 80%7/$6.#:3(:2'5.#5-"6.#4,!7/$:2&80$7/#90$91%:1%90$:2&;2&:0%8.#7-!9/#;1%<2&;1%<3&=5(90$3*7/#@7+<3';2&6-!8/#;2&;1&2(1(;2'>5*:1%80$80$:2&92&4, 7.#=4)<3':1%:1%8/#:1&4+ 2)4, 2*/'3+6/#6/#5, 9/$>4)9/#5,!90%=4)<3(6-!B8+iYC ! ###&&&'''((((((---555999@??S<0F;*?8*E0'=!8!7&0-'#(45  """"""""""""###""""""""""""!!!   ! !  !! !! ! !!!"""!!!!!!       ! ! !"!"""####""#!""!""!##"#"$$""  -"4.&/.-302:;;-) 0 -  - M! JJJ\\[[ZW[[ZXVVVRSVSSMNKLMKKKJLLLMMMJJJIIIGGGFFFBBB@@@BBBAAA777;;;AAA>>>;;;>>>;;;555444444666555333111333111111000/////////---,,,***((()))&&&&&&%%%$$$######$$$%%%$$$""""""!!!"""######$$$$$$$$$$$$&&&%%%$$$%%%###!!!"""######""" !!!"""  """ !!!""""""""""""######""" !!!!!!"""###""" !!!   !!!!!!  $$$###$$$"""!!! !!!!!!!!!"""%%%###  """     -  -     - -   -     -       '!*$*$+$.'0) 1* 4,"6-#5-"3+!3+!3,!2,!2,!5/$4.#3+ 2* 5,"6-#80%91&70$6.#5.#4,!6.#5-"3+ :2';3(6.#2+ 4,"3+ 7/$:2'80$6-"7.#91%91%80$;2&<3';1%8/#7-!9/#:0%:0$90#;3&<3'80#0(7/#?7+;3';2&6-!6."90$9/$3*4+<3'=4(90%80$80$92&:2&5-!7/#=4)<3'90%90%90%:1&4, 3*4+ 2*0(5-!8/$7/#6-!90$=3'9/$6-":1%=4)=4(8/#<3'E;,!!!&&&((((((((('''///444888@@@P7.K8-G>0C=*:45',&)  !!!!!!""""""""""""!!!!!!"""!!!!!!  !!!!!!!!!!!!!!!!!! !! !! ! !     ! !! !!!"!!"!!"!""!""!""""!##"###$"#" !$1"5&!7..<>>7EF4HL7LP=RX?T[?Z_ - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - -  - - - MD6D>><<<<<<===;;;888777888333///111000///000000...+++,,,+++)))***((('''&&&&&&&&&$$$$$$!!!###$$$$$$$$$$$$###"""!!!######$$$%%%$$$%%%&&&%%%######""""""###"""### !!!!!!!!!!!! !!!"""###""""""######"""!!! !!!!""""""!!! !!!  !!!"""######""" !!!"""###"""!!!  !!!""" !!!  -   -          - -  -    -      - -$)#*$,%.'/(2+"4+!6-#4,"2+ 2+ 2+ 2+ 2+ 4."4-"3* 1)4* 5+!8/$92'81%81&5-"3, 6.#3+ 1)91&:2(70%3,!4-"5.#70%90&7.#5-!6."90%91%8/#;2&=4(;2&8.#6,!9/$;1&90#90#;3&;2&7/"/'7/#=4(;2&90$7."5, 7.":0%4*3*:1&>5);2'91%91%:3'<5)7/#7.";3'<4(:1%8/#:1%91%4+4+ 6-"2+.&5-!:1&91%6-"90$<2':0%7.#;2&>5*=4)90%;2'?5)QE5###&&&(((((('''+++000555<<<J:3L51R?:G8*E5"9'0!, *$  !!! !!!"""######"""""""""!!!!!!!!!!!!!!!    !!! !     ! ! " "! ! ! ! !! !!!"!""""""#!"#!##"#"$$"$"  -)-1.(9<=;AE9HM:NR:OT>RX?X\7]^ - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - -  - - - SH8F=0A:-?7*@8+B:.A:.;5)93)82(1-$,'%      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - -  - - - "% '!*$+%+$-&1* .',%.'/(1)-%*#&(!        - - - -            -   -                  -  -     "   -q,x-v-s,o)r,s/!s/q-n-l+i)k*k)j(f'd&^#UPY8+i%i%i$j(@2, + 526WTVYYZUXXNPPNIKPILKHIIJHJKIJJJJJJEEEEEE@@@===>>>>>>;;;<<<======<<<:::;;;888666333222333555222222---000...,,,******)))(((((('''&&&&&&&&&$$$$$$%%%$$$$$$$$$$$$#########"""!!!"""###&&&%%%$$$$$$'''&&&#########!!!!!! !!! !!!!!!!!!!!! !!!!!!"""!!!!!!%%%$$$$$$######""""""""""""!!! !!! !!!"""%%%$$$###!!!!!!$$$""""""!!!  !!!      -       - -    - -     - - -%& ("(",%0) 2+"2* 7.$5-"2+ 2+ 1*0)1+ 5.#70%7/$4+!5+!4+!6.#81%80%6/$4,!2*7/$4,!2+ 80&7/%6/$4-"2+ 2* 6.$7.$5,!4+ 4, 7.#7."8/#<3'>4)<2'7."5+ 9/#;2&90#90#;2%91$6-!2*91%<4(:2&8/#6."6-!90$90%0'2):2&=4(:2&91%91%;3'=5)6."5,!;2'8/$90%7.#:1&:1%1(2*7."5-!0)5,!:1&:1&7."90%<2':0%8/#;3'?6+>5*:1&:1'90&D9-mV$$$&&&''',,,+++///333;;;OJDJC?HA@K@>H61C-#;$:5%!!!!!!!!!!!!!"""###""""""!!!!!!!!!!!!!!!      !! !"! "! " ! !  !!!"!!"!!!!"!""!#"!###$#%$#"!  -.;,%9979HF7II6IL9NP9PS8SU9XZ2?@ - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - -  - - -wgOH?1@9-C;/?7+?7+A:-?8,=6*;5*;5+72(4/%0*"'"!     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -$ ("#"  - - - - -  $&!("+%,%/)1* /'0(3+ 1)/'0)1)1*.&*"( '         - - - -      - -        -                     - -    #  o+u,z/s,q*u-!u.!u/ t/q/n-j+h*f(f'g'f&d#d"],^&d)!e%h&i%j&l7$=>:>>===>>>===;;;;;;<<<:::999777777555333//////000111...)))+++...,,,)))((('''&&&'''&&&&&&'''((('''###""""""$$$$$$%%%%%%$$$######"""!!!######$$$%%%$$$%%%&&&$$$"""######### """"""  !!!!!!###!!! !!!"""""""""$$$%%%%%%######"""!!!        ###$$$$$$$$$###"""""" !!! !!!###"""$$$""" !!!!!! """"""!!! -  -             -    - - - -& '!)")#-'0)1* 2* 6.$5-#2* 1*1*2+ 5.#5/#7/$7/$5,"5,"5+!5-!60#92&81%81&4,!7.#6-"5-"7/$4-"4-"70%5-#2+ 3+!5-#3+ 2)3+6."4+7."<3(>4)<2'7."5+8.":1%90#:1%<3':2%6.!4, :1%=5)91%7/#6-!7."8/#8/$0'1(90$;3':1%91%91%<4(>6*6."3*:1%90$7.#7."90%7."0'2*8/$5-!2*5-!:2&90%6-!8/#<2'8/#6.";3'@7+>6*:1'91'80&=4)MA5###'''---+++---222888666PF@M>9cPTN>AB<:7506712%%)' - -! """ !!!"""""""""!!!!!!!!! !!!    ! " !" !! ! ! ! ! ! " !"!"""""##!#""$##$"$#!" )$ -+!0741882?@2JI3ML:QR?PU=Y] - - -  - - - - - - - - -  - - - - - - - - - - - - - - - - - - - -   - - - - - -MD5B:-@9-B:.>6*@8,B:.>8+>7+<6*<6+93)82(50&/)!,&&      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -$%,%-'("&$ #&$%*#-%+#,%/(0)2* 3,"1)1)3,!2*0(1)2*1*0)+#( (!          - -             - - - -   - - -             -   -    "!b(n+q+x-t*r*t-!t,t,r,q-p.l-j,h+d(b&c%c"e"b&n(l!am;1f%h&i&c$D6 DBCKLLDKKFONKJLKCGGADBCAECCDCCAAAAAA???<<<;;;;;;======999666666555555333111000///222000...***---+++***)))'''&&&%%%$$$%%%$$$$$$%%%$$$###"""#########%%%&&&$$$$$$######$$$$$$%%%%%%&&&%%%%%%%%%###""""""###""" !!!""""""!!!!!!"""!!! !!!$$$$$$#########!!!!!!    !!!!!! !!!"""%%%$$$#########"""!!!!!!!!!"""!!!"""###"""!!!"""  !!!!!! -        - - - - -    -    -   '!(!*#+%/(1* 0)1* 4-#3,"2* 2*3+!2* 4-"70%6/$5.#5-"6,"5+!4+ 5."92'81%4,!2*80%8/%7.$6.$5-#3,!70%5.#2+ 2* 4,"3* 1(4+ 80$5, 5, ;2&=3(;1&7-"5+7-"90$80#;2%=5(;3&7/"3+7.";3'80$7."7."5-!8/#8/#3*0(7/#;3'91%70$91%<4(?6+5-!3*<3';2'9/$9/$:2&7/#2)2)7/#5-!4+7.#;2'8/$4+ 7.";2&7."5, :1%?7+=5*70%90'8/%90&G<0jYE""",,,---++++++111444333E4,='G++M13:((0(%2F?4]S/F>$"!!###!!!  !!!!!!!!!""""""!!!      ! " !"!"!!#!!#"#"""!!"!##"$$"$#%$#&$"#  );&.$21.9;89D@?PL@NN=INDOV;TV - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -^R>E=/<5)?8,A:->6*A:-C8,>8,:4(:4)82'4-$4-$1*!.(&"    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#'!)"0(*#*",$,#/'0(-%+#.&/(/'/'3+!2* 4,!5-"2)2)4, 3*1(0'1)2+ 1) ,$' )!         - - - -  - - - -    -     - - - -   - - -              -   -    $? 6 ]&g)w,t*s*q(s*t+t+r+p+p.o/"k- i- g+d(b'a&g,f(f(k'n#l&]%\ f%f$e$d+? LKKIMMENNAJIDADC@BABAC@ADBB@@@@@@???<<<999===>>>===999333444444555444444222222///,,,---+++,,,+++***)))'''%%%$$$$$$$$$$$$############"""###""""""%%%%%%$$$$$$######$$$%%%%%%%%%'''%%%%%%$$$#########!!! !!!"""!!!  """!!!!!!!!!!!! ###$$$!""   !!! !!!    !!!""""""$$$$$$"""!!!""" !!! $$$###### !!! !!!!!!"""    - - - -    -      -   & & *$(!0)0)0)0)3,!3+!3*!3* 3+!2* 4-"5/#71%6/$4, 4* 4+ 3* 5,"81&70%3-"2+ 60$6/$6.#8/%6.#3+!7/%6/$4-!3,!4,"3* 1(3+90$6.!5,<2&>4(;1&7."6, 7-"80#80#90$<3&:2%7/"3+6.":1%80$7/#8/#4+8/$8/#3+1)90%;3(81%70$92'<3(>6+4,!4, <3(:1&8.#90$;2'<4(1)2)5-!6-"4+ 8/$;2&8/#3*6-!;2&7.#4+8/#=5)<3)6.$7/%6.$90&<3)G<.}}}|||}}}~~~~~~|||%%%///---+++))).........I50<)2*>.$D% ?!240,TJ-KB4:4"!!###"""  !!!!!!    ! ! !! "!!""!#!""!"""""##"$$!$#$%$'&$$!   '$, 2&;/$5/)2974?>AIJELPCNQ3HI - - - - - - - - - - - -  - - - - - - - - - - -  -I@1?7+;4(=5)A:-?7+A:.B;/B;/A:-A:.@9.<5):3(81&70%81'70&4-#1,"-($   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  (".'-%/'0(0'4+!5,"0(-$1(4+ 3*0'5,!5-"6.#7.#3+3+6-!4+ 2)1)2)4-"/(+$(!(!         -  - -   -    - - -   -  -  -    - -              -  - - - - - -C"> 6I W$`'u.u-r*r+t,w. v-u,r,q.o/!k.!i- h, h*g'e(g*j(k)i,g*m'k#a#`5+c"d"b"_!c0 : MMMIHHELKBKJBCD@BA?A@AAACAA@??<<<>>>=========<<<999777444444222222111000///111///---,,,+++,,,***&&&"""%%%$$$$$$###%%%&&&$$$###""""""######!!!"""%%%###"""###"""!!!###$$$&&&&&&%%%$$$$$$$$$%%%%%%%%%%%%"""""""""  !!!"""""" !!!!!! !!!!!!!!!    #########""" """!!! """###!!!""" """!!!!!!  ###$$$""""""   - - - -    - -       $(")#)".'1* 0) 2+!5-#3,"2* 4,"3,!2* 5/$5.#6/$5.#2*3*3)4+ 5-#4-"6/$5.#1+ 2, 3,!4,!90&6.#3+!5-#70%4-"6-"80$7."5, 7.":2&8/#7.!=3'?5)<2&8.#6, 6-!8/#90#7/";2%91$7/"2*5.!70#90$8/#7."6-!7.#90$3*2):1&;3(91&80%91&=5*>5*5,!6-";2':0&8.$8/$:1&>5*3+3+5-!7."3+6-"90%7."4+6-"<3'8/#5, 7/#=4);3(5-"6.#4,!6.#;2'A7+F:+oooqqqrrrssstttxxx{{{{{{{{{xxxvvv(((,,,,,,,,,)))---)))(((P>@`NNre_QE8F6#H2$;$ 0&&552-5-"""###"""!!!      !!!!!!"!!#!"#"#$$$#$$"$#!###$#$#"" -  -%/2$9/,:76>BA>EE?GI=IK - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - -  KA1B:,=5):3';4(>7+>7+@9-A:.B7*;4(:2&80%:2&91&5.#40%3.%.* (# -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#(!.%.%4,!5-!6-"7."2(.%2)6-!3*5, 7.#7-"6-"6-"3*4, 7."5-!4+3+4+ 3, /'+$)"'          -  -   - -      -    -  -  -                 -     - - ->"=!T'5P#c#n(q,o+q,v/!w/ w.u,r+r-p0"m/#j-"i,!k, j*g'g&k'j&k(g)e)f(g"f$R!cC7` ` a!`!C2  IIIEEEFFEAAA>???A@>@@?>>?==<;<:::;;;<<<<<<999777444444444444000///---,,,---///...,,,***(((&&&'''"""!!!$$$&&&"""###%%%%%%$$$"""!!!!!!###!!!###&&&$$$$$$######"""$$$&&&&&&&&&%%%$$$$$$###%%%$$$%%%&&&$$$""""""!!! !!!"""    !!!   """""""""!!!""" """"""!!!!!!"""!!!!!! """###!!!###%%%%%% -  -     -       $("("*#-'.'-&1* 4-"3,"2* 4,"4,!2+ 5/#6/$5.#4-"3+ 3+ 0'3+ 5-"3+!5.#4.#0*1+ 3,!3+!:1'90&6.#6.#71&5."5-"8/$7/#6-!8/#;2&8/#7-!<2&>4(;1&9/$5+ 6,!8/#80$7/#:1%:1%6."1)3+80#7/"8/#6-!6-!90$90%3+ 1(91&<4)91&80%91&<4);3(5-!5,!:1&<2';1&7."8/$:1&5-!5, 7."6-"3*5, 8/$6-"5,!7.#<3(8.#5, 7.#<3(<3(5-#70%5-"4+!<4)=4)B7)^L6pppuuu~~~|||yyyyyy{{{{{{|||xyyrss++++++******'''&&&NHDuu{ęOE47$?%?,#########""" !!!         ! !!!"!!#""$"#$#$##$"## #""$###!"!  - &33"7//?=@?CF@GI>JJ8LL - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - q`LE<.?7+?8,93&:4'?7+?7+?8,B;/C<0@:.A:.A:.?8,=6*;3':2&91%=4(80%73'83(51&2-#+&! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $,#0(3*5-!7."8."3)0&5+8."3)6-!7."6,!5, 6-!3+5, 7."5-!4+3*6-"0(/'*#( &          -              -                           -  ->>>>>=?><>>;=5)<3'C7)OOPOOOUUUddduuusssqqqpppmmmoppssu(((&&&&&&&&&SE=logOrl7OJ/##,%  -############!!!!!!    !!!!! "!!$""$"#######"$$"$#"""#"!#!   137/+:AE;JMQS8+B9.A8-@8,A:.A:/@9.A:.A:/?8,=6)=5)91%=3'>4(90$82&:4)93(71'4/%/)!)$   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  !&-%2*!5,"7-"9/$4*1'4+8/#3*4+7."4+ 5, 6-!3*5, 7/#7."4, 2)5-"2*/',%)"'          - - -   - - - -     -  -  -                   -   - - - - - - S(b-#f-%`+#W' = Sb%m*q.u/t-r,p+p-p/ k,j,j+j)d*h(i%i&k(j(h&b"`!`$^&_'^ [pC7qWJ]_"^![ Y.6AA?>==:::<<<=>>;=<<<<;::322333333000333444000///000000---+++***+++***((('''''''''%%%%%%%%%$$$%%%'''&&&&&&%%%%%%$$$$$$$$$###$$$"""!!!!!!"""$$$$$$###$$$&&&%%%&&&&&&%%%%%%$$$$$$%%%!!!!!!"""!!!    ###!!!  !!! !!! !!! """!!!$$$"""!!! ###!!! !!!$$$'''&&&%%%%%%&&&&&&%%%"""  - -       "$& *$,%,&-&0)2+!2* 1)/(1* 4,"6/$6/$4-"5.#2)/&1(3* 5,"6.#70%4.#3,!4.#4-"4+ 8/%6.$6.#6/$5/$3+ 6."90%6."3+6.":1%80$7.";2&=3';2&9/$4*5+ 80#8/#6-!8/#:1%5, 0'4, :1%7."6."3+5, 91%80$1(1(90$;3(:1&:2'91'91'80%4+!3* 90%<2(;2'90%;2&:2&5,!3+7.#5-!2)7.#;2':1&4+ 6-";2&8.#7-"<3(>5)<3(5-!91&6."5.!<5)>5*:0%<1%F9+BADBBDBBCLKLWWW___rrr̜vvvjjjqqqssurrtlmp%%%LG?L83G/*WQI=JB;IC:9=1!.- -############"""!!!     !!"!!"!!! "!!#!"#!"#"#$$$%%%###! "!!$"!  .6!=1%7+=6)?8,@:-C:/@7,>7+@8-@8-?8,@9.A:/?9,>7+?6*;3'<2'?6)90$92&<5*<5*;4)92&80%4-#1* (! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  !)"/'2* 6-"9/#3*/%3)8.#5+3*7.#5-!5-"6."3*4, 7."7."4, 2*4+ 2*1)+$' $           - - - -  -      - -   -                   -   - -  - - -a.$i.'e-%[*"@N[#i(p,q,p*m*k+k+h)f(i)g'`'h(i%d!g%i'g&d$`"] ]!Z#[%\#]!](dF;hWH] \ YUA CCA?>=;::<;;?>?=>=888888433322222000222000+++---......---,,,((()))))))))((('''&&&&&&%%%%%%%%%'''&&&$$$((($$$$$$$$$$$$"""$$$$$$############$$$###""""""&&&%%%&&&%%%&&&&&&###$$$###!!!""""""!!!!!!!!! !!!      !!!### !!!""""""###$$$    """$$$$$$$$$%%%%%%$$$### !!!!!!!!!       "%'!(!)"*#-&1* 3,"2* 1) 0(1* 2+!5/#5.#4-"5.#5,"4+!4+!2*4,!4-"6/$4-"2,!5.#4,"3+ 6.$5,"3,!6.$5.#2*6-"91%6."2*5-!91%7/#5-!:0%<2&;1%9/$4*4+8/#7/#8/#91%90$6-!/&6.!;3'8/#4, 4+6-!91%8/$1(0'8/$91&91&91&91&:2'91'4+!3*7.#;2':1&6-";2'90%5,!3*90$5, 3*8/$:1&90%5,!7.#:1&7.#7.#=4)>5):2&4, 80$4-!5.!;3';3'8.#5+ >3&eS?98;98;CCFKJMKJLOOPVVVYYYbbbjjjԡzz{qqrppqnnpmmpmnr?NIHYX;BBA4.;&6 /& &$& """######$$$"""!!!!!!     !!!" !!!!!"!!""!#""#"#$$$##$  "  "05%<5'>G@;VW:Z];]b=Y[ - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - -  - }jRL@2?6*=4(>6*<4(>7*?9,@7,>6*>6*@9-?8->7+=7+A:.@:-?8,@8,:2&<2&@6*90$82%<5)<5)<5(:3':3'92'70%2+!-'$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "*$,$2* 7.#2)-$2)5,!5,!5-!7/#5-!4,!6-"2*4+ 8/#7."3+1)2)2)/')!( )!         - - -  -   -        - -                        -  - - - -  a/%f/'g.'^,#P(GP`$p,o,k)i)i)g(g(g(b*c&i%i%f#d"e$g&c$`"_"]!ZZ!Y%Y$Y"X!]3'cPCYYWU\/: A@?>==;::<;<;:<889444766534100111111111,,,,,,...,,,++++++))))))'''(((&&&$$$'''$$$$$$###$$$%%%%%%$$$%%%&&&%%%###$$$###$$$""""""""""""#########"""!!!"""$$$&&&%%%&&&%%%###"""%%%$$$!!!!!!""""""!!! !!!   !!!!!!!!!  !!!!!!""""""###  !!! #########$$$%%%"""###"""###!!!!!!     !%& (!)"*#,%0)3+!2* 1)2+!4,"2+!2,!3-"5.#4-"5-#3* 1(0'3+ 3,!70%3-!0*5.#4-"4+!7.$7/$5.#70&81&3+!5-!80$7/$4+5, 80$6."4, 90$;1&:1%90$5+5, 90$91%90$;2&;2&5-!1(80$<3'8/#4+5-!8/#:1%90$2)1(7/#90%91&80%7/%91&90&4+!4+ 7.#;2'8/$5,!90%:1%5,!5,!8/$5,!0'5, 90%:1&5,!6-#8/%6-"6-!;2&>5)90$5,!6.#5,!5-!;3':1&8/#5+ 9/#F:+/0/000778>=@??AEDGIIJHHIGGHKKKSSR\\[ppnqqqnnoppqttuuvw2C@&:5D94:)#50+4!5) - """#########"""!!!!!!   !!!"!!!!"!""""""#""#####"!!!    $ /4%67/>II=TX;Y^<[b6*>6*=6)?8+?6+?7+@8,A:-?8,<5)<5)?8,A:-@9-B:.<4(;2&@7+91$:3&=6*<5)<5(;4&:3&:3':3&81&5/$-(("  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %)"0)6.$2),#0'2)4+!7.#7.#4,!3+!4,!1)4+ 80$7/#3+0'1(4+!2* +#'%        -  -    -  -   -                             -  -  -   b.$d-$^+!S)BIY#g(i)i)j*h)h(f'd&d#e"h%g$d"g%e%b$`#^"]"]"Z Z!W!W#U U X#`E9gZKVURPC3  ==<98965798:8793442232110/0101000///******,,,*********((('''###!!!$$$###%%%%%%&&&&&&$$$ ###((($$$&&&%%%$$$######$$$###""""""""""""###%%%$$$!!!"""%%%''''''$$$&&&&&&%%%%%%###!!!""""""!!!!!! !!!    !!! !!! !!!!!!     !!!$$$$$$"""!!!"""###$$$$$$%%%&&&%%%$$$!!!   "$' *#*$*$/)3,"0)/'3,!6/$0* 0*3-"3-"5.#7/$4+!1(0'2+ 4,"6/$4-"/)6/$5-#4+!6.#7/%6.$70%60%4,!3,!6.#8/$5, 4, 8/#6."5, :0%;2&:1%9/#5+6,!91%90$90$:1%:1%8/#2):2&;2&7."5, 6."8/#:1%90$1(1(6."91&80%7/$6.#80%90&4+!4, :1&:1'7.#5,!90%;2'6-!6-!:1%4+ 2)6-!8/$5,"2)5,"8/$3*5, ;2&=4)80%5-"8/$7.#6-"<3(:1&;1&7."7-!>3'J=.%%$)*)/0/222888;;;;;<>>?CCDGGHLLLUUT[[Zaa`oon{{{ooouuu{{{yyzstv8B7OT?Xa;W^9\Y9RT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  `R?F<.A8,?7+<4(>6*?6*=5)?7+A9-@8,>7+@9,@9,<5);4(>7+?9,?8,C<0>5)>5)?6):2%;4&>7)=6(>6(=6(;4';4'<4';4(71&5/%1,#+&%    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %/(4,"1),#/&3* 4+ 5,"6.#4,"3,!3+!0)2+8/$7/#3+/'1(3* 1)+#( %        -  -          -                       - - -  - -  - [*`,!e/%Y+ =H Q [#f'i)i(h'm'g$g#f"f#h%f$c"c#b$^!_#]"\![!Z!Y!Y"Y$V"U!SU+ RF8OSRPN@ 554766545757978334113001-,-++,...---+++***$$$(((((('''%%%###!!!!!!$$$%%%%%%%%%%%%$$$"""%%%######$$$$$$$$$""""""###""""""""" """%%%$$$ !!!%%%&&&'''''''''%%%%%%%%%###"""""""""!!!!!!!!!!!!   !!!!!!!!!""" !!!!!!!!!  """""" !!!!!!  """$$$###"""!!!"""#########%%%''''''######$$$   #%("+$+%*$/(3,"1) /'3,"3,"/).(3-"1+ 5.#3+ 1(/&1(4,"3,!4.#3-"1+6/$5-"3* 4+!6.$5-#6/$71&4,"1)6.#7.#4, 5,!80$6."5- :0%;1&:0$8."4+6-!:1%90$8/#:2&;2&7."4+:2&91%6."5, 5-!7."91%8/$0'0(6.":2'80%6.$6.#91&:2(3+ 3*:1&:1'8/$7.#;2';2'90$7.#90%7."2)3*6-"5,!4+!8/%8/%2)4+ ;2&=5):2&8/$90%7/$6.#;2&;2'>4(7-"5,;0%D8+WG4!!!##!&&%**)---///333788:::>>?FFGMMNPPPVVT[[Zaa_kkjuuuvvvyyywwxqqs>;0=(K0F-3%"+'%20*.$   !!!"""""""""!!!!!!!!!  !!!!!"!!"!!!!!!#####"""! !  * 3:)G?6@LP>R\;T\;XY - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - I>/>5(A9,@8,=5)>6*>5)>5)?7+@9->7+;4(?8,B;/>7+;5(>7*>7+>6*@9->6*?6*?6*:3%;4&=6(<5'=6'>6(=5'<5'=5(=5(;4':3&5/#1+ 0)/) % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '!2*"0'/&1(5,"3+ 4+!5.#4,"3+!3,!1*2*5-"6-"3+1)1(2)0(-%*")!          -  - - -                                - - - - -  -   - `-#c.%^+"S'D KU_#g&g'l(j%i%i&g$f$e$d$a"_!^!\ \!\!Z XWVV UTT S R!C(PF9QQPNG: 433434534635313/00./0,,,+*+***))))))(((%%%%%%%%%%%%###$$$$$$%%%!!!$$$&&&'''###$$$%%%###$$$$$$"""!!!!!!###$$$###""""""###$$$""" """$$$$$$ !!!###$$$%%%)))'''&&&%%%#########"""""""""!!!"""###"""!!! !!!"""!!!!!! !!!""" !!!  !!!!!!!!!"""!!!  !!!"""  !!!     !!!#########$$$###$$$###%%%&&&&&&%%%######%%%$$$!"("+%-'+%,&1* .'-&2+!2+!0)2,!4.#1+!4,"1)1(0'2)5.#4-"6/$3,!1*3,!5-"3+ 4+!7/%6.$5/#6/$5-#1)4,!5-"3+ 4, 7/#7."6-!:1%;3'90$9/$6,!7."90$8/#8/#:1%;2&7."4+:1%90$6-!3+4+6."80$8/$/'/&6.":2'80%6.#6.$91'91'2)0(7/$:2':2'90%<3(;2'7."6-!90$6-!3*3*6-!6-"5,!7.$8/%2)4+ <3'?6*:1&6.#90%6.#7.#:1&?5*>4(5, 5,;0%=2&@3%zdK######$$$"#!$$#((&*+*..-000778??@BBCFFGMMMQQPTTSXXYaacnno~~~ssstttqqrklmhikB) G,%S4*X@19-")&!561#! !!!!!!!!!!!!!!!  !!!!!" ! !!!"""!!! !  / <$;.%8=F;NY:T\=\b=\_ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -QF5B9+?6*C:.A9-=4(>5*=4)=5)?7+@9,>6*;4'@9-C=0@9,>7+>7*=6*=6*?8+?7*?7*?7*<4&<5'>7)=6'=5'>7(=5'=5'=6(<5'=5(<5(81%5."5.#60&/) '"! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  !*$+%-&1) 4,"2)4*6-"4,!3+!4,"2* 2*5-"5-!3*0(/'1)0(-%( )!         -  - - -  - -                               -  - - -   -   - _,#`+#b*#X&@A Q\!c'j(h$h$i&i'g%d#b#`#_"]!\!Z YY XUTSST SQQPP$TF9^VHQOMJB "##3221014132/1/.0--.**,+*+******((((((''''''&&&### %%%&&&$$$"""$$$&&&%%%###%%%&&&$$$$$$###!!!!!! """###$$$$$$###$$$&&&$$$###"""###$$$"""######$$$%%%''''''&&&$$$###############"""!!!"""######   !!! !!!  !!!"""!!! !!!"""  """"""!!!!!!"""!!!    ###!!!"""!!!!!! !!!!!! !!!###'''&&&&&&$$$"""$$$%%%$$$%%%%%%%%%$$$""""""!!!!"'!)#*$("*$0)/'-&0)/(/)/)0* 0* 3,!2* 1(1)2* 4-"5.#60$3-"0)1+ 4,"4+!4,"80%6/$4-"4-"0(.&3,!6.#4, 5,!90$8/#4, 90$;3':1%8/#5+ 6,!8.#7/#7/#:1%:1&6-!5, :2&90$6."4, 5, 6."8/#80$0'.&6.#:2'7/$5-"5.#91'6.$1)1)8/$;3(;2'90%=4);2&8/$8/$:2&6-!4+5,!7.#7.#5,"7/$90&3*6-"<4(>5)90%4+ 80%6-"4,!<3(?6*;2&5+ 5+;1&:0$7, E8)######$$$###$$$%%%$$$##"%%%+++333555889@@AEEEIIIKKLNNOSSTXXYaabqqrrrrmmmllllmmklmH+J1"M2*]<6TF>23-420;98  !!!!!!!!!!!!  !!!!!!  """!!"  !!!##"! 4 <" ;/$8JK3VT6WU3QQ:ZY - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ugOJA2>5(?7*C;.A9,>5)A8,?7+>5*@8+A9->6*;3'@9,B6*>6)?7*?6*;3&<5'?8)=6(=6'?7(=5'<4&<4&<4&>6(?7)<3':2%80$93'6/&/(+&)# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - !' ,$0(3* 2(4+7."3+ 2+ 3, 2*3*6.#6-"2)/&0(1)1* ,%''          -  -     -  -       -  -                   - -  -    -   a*"a)#^)%M"9LZ$b%g%i&h&i'i(f&c$`#_#]"\![!Y XVTTRQQSST QQMP2&\SFOOLJFA ---101/-/0-0/-/-,-))*(())((((('''%%%%%%&&&%%%$$$""""""%%%%%%%%%&&&&&&&&&###$$$$$$#########""" !!!$$$$$$#########"""%%%%%%$$$###############"""###&&&'''&&&%%%###"""$$$$$$$$$###""" """###"""!!!!!!""""!!  """ !!!###"""$$$!!!!!! !!!!!! !!!!!!###   !!!!!!!!! !!!$$$###"""!!!   !!!!!!   !!!!!!%%%&&&&&&%%%$$$"""$$$$$$######$$$%%%%%%###!!!!!!!!! ("+$+%("+%/(/(,%-&,%.(.(/)0*1)/'0(1(3* 3+!4-"4.#4."1+1*2)2)3+!7/$6.#3-"4.#2* 1) 6.$7/%4+ 5,!:2&80$3*7.";2&;2&:0$7."7-"8.#8."7.#:1%:1%5,!4, :2&91%6."4, 5-!6."90%8/$/'.%7/$<4)6.$3,!4,"91&70%3+!2*80%:2':1'8/$?6+=4)<3(:1%:1%7."4+6-!8/#8/$5,"4+!6-"4+6.";3'<4(:2&4, 7/#5-!3+=4(<3(:1%5, 4*;1%9/$3)>2%WH5$$$###$$$$$$$$$###"""###$$#$$$(((...555888===???BBBFFGLLMRRSWWY^^_jjkyyyrrsiiijjjkkkiiieeeD+D+$M53YIHNOL:A=&*(556! !!!! !!!  !!!  !!!!!!!!!!!!!!!  !!!!!!  """$$#"! 3 7':728HG7NK6HE8LI5SJ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -ND4B:,=4'?7*D6*A9-@7+>5)@8+@9->7*;3'?8,B;.?8,?8,A:.=5)<4(>6*=5(>6)?6*;3&<5(?8*<5'<5'>6)=5'=5'=5(=4'>5(?6)=4(:2%8/$>7+<5+3-"2+"3-$.( &! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (!/(2*!0'2)6-!2+2+3+ 4+ 2*7.#5,!1(/&0(1)1) ,$'!'!          - -     -   -     -                -      - -   - - -  -  b&"Y$ b&[)NBR]_f%h'h'g(d'b&`$^#\!Z XWUSSRRQPQPONNJF M:-TI>NLHFD :  100.-..,--*,,),))*(()'''%%%&&&%%%%%%%%%###%%%!!! """###'''%%%###$$$%%%%%%$$$$$$###$$$### """%%%%%%"""!!!!!!!!!"""%%%&&&$$$############!!!"""%%%&&&&&&%%%$$$$$$%%%$$$$$$%%%$$$###$$$$$$""""""""""""""" ###  """######!!! """ !!! $$$!!! !!! """""""""$$$""""""""""""$$$ !!!!!!!!!    !!!   """###&&&'''&&&$$$#########"""###$$$###$$$###!!!!!!!!!!!!)#("+%/(,%,$,%.',&.(0*.'-%.%/&/&2)2+ 2+ 3-"3-"0)1*2)0'3* 6.$6/$4-"5.#4,#4,#7/%7/%4,!3+ 7/#7/#2*6-!:1%:1%90$7."8.#9/$8/#7.#90%90%5,!4+ :1&:1&7."6."5-!6-"80$7.#.&.&70$;3(5-#4-"5-#7/$6/$2* 2)90%;2';2';2'=4)=4(:1%80$:1%6-!4+5, 8/$8/$4+ 5,!8/$2*4, <4(>6*;3'2+6/#4, 6.";3';3'91%4+3)9/$:0$5+6, D8*xdJ###$$$$$$###""""""$$$$$$$$$%%%%%$&&&***///444888>>>CCCHHHMMNRRSUUWYYZaabnnnxxyjjkjjj:$>%D+)X8;S@CGF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   -RG5I@0@8*;3&>5)C;.A9,=5)?7+>5)=5)@8+@9,?7+;3'?7+A:.?7+?8,A9.?7+?7+@9,=5(<4'?7*<4'>6)A:->7*>6)?7*=4'<3&>5(=5'=5(?6*?5);2&8/#;4(;4':3'5."5/$3-#/* (" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "+#2* /&/'5, 2*1)4, 4, 3*7.#6-"2*0'/'/'-&*"&'!         -  -                           -          - - -    h(e(f%f"4F S\b#f&e&d'b&a%^#[!Y X VVUSRPPOOOOLLNKFD$TG6+@8,:3'4, 80$5."90%;3'<3(8/$5+4*;2&;2&7-"4*=3&J>/######$$$$$$######"""$$$%%%%%%%%%&&&'''''&'''+++///555<<<@@@EEFJJJMMNQQRVVW\\]ffgwwy0# >%C.*=*'Z@AL361--7ECANG233       """ !  2E*&F97;IK8FL=GMDMMDKE=B? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xfKKA1D;-@8*:2%=5(B:-@8+=5(>7*=6)=5)?8,@9,?8,;4'>6*@9-?7+?8,A9-A9-?7+?7+=4(;3&?6)=5(?7*B:-@8+?8+A9,=5(91$<4'<4'>6)A7+>5)>3(8.#>7*=5);4(70$6/$5/$5.%.()#!  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ",%+#+#2*0(/'3+3*2)6-"6-"3* 0'.&/'.&*"$%         -  -         -                   -  -     -   - - - - -   g'l)j&j%Y8LZ_"c%d&c&_$^#[!Z!Y VVTSSQONNNNNLLLJIDG-"SG>H G E C @C $%%.-.+)+)&('$&$$$###$$$!!!!!!$$$&&&%%%$$$"""!!!###%%%$$$$$$###$$$$$$'''$$$###%%%&&&$$$###""""""  !!!!!!"""###%%%%%%###!!!!!!###"""###%%%&&&%%%$$$%%%$$$%%%$$$$$$%%%######$$$############!!!  """"""!!!!!!!!! !!!!!!!!! """ """ !!!!!! !!!"""""" ###""" !!!"""""" !!!   !!!!!!""""""!!! """!!! """"""$$$$$$######"""""""""!!!!!!!!!!!!!!! !!!###"""!!!!!!)#,%+$0).'/(0)0(0)1*1*/(0(1*3,!4-"3+ 3+ 4,"2).&6-#80%81&60%5.$2*!3+!5-$70%4,!3+6-"8/#5-!6-!91%:1%90$7."7."90$:0%9/$90$8/$5,!3+:2&:2&6."5-"5-!7/#91&7/#/'.&5-"91&6/$6/$3,!6/$91&3,!3+ 80%;3(:1&90%;2&<3'8/$7.#;2&8/#3*6.";3':1%3*6-"8/$3*7/$?6+=5)70$4-!:2&91%91%<3(<3(:0%5+ 3):1%:1%7."5, 90#B7*UH6###$$$$$$%%%$$$"""###$$$$$$%%%%%%%%%%%%&&&&&%&&%(((...333888===BBBHHHKKLRRSWWY\[^a`b,XD?ea[ga\laZPG?,%"$43.+,+  !!!  !!!! !!"!""""!" +41--KH2OS=PUARUAQR=I@8<: - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -NC2F=.C;-@8*;3%>6)B:-@9,=6)>7+>7*<5)?8+@9-?8,;4(>6*@8,@8,?7+@8,@8,<4(=4(;3&;2%>6):2$>6)B:-B:-@9,B;.@8+>6)>6)=4'@7+B9-?5*?5)=3'?8+=6*<5):3'92'70%70&3,".',&*$# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -' ( )"1*1*0(3*2)0'4+5, 1(.%.&/(0(*#$#        - -                       -      -  -       - - - - - -  h(k(h%g&?> Q[ ^"c&a%]#\"["Y!X!TU SQQPNOMLKJJJIIGD@F2*E70E B A @ -8 9  '(((()&%&###$$$!!!""""""###&&&&&&%%%$$$$$$###%%%%%%$$$"""###$$$%%%%%%### """%%%###!!!!!!!!! !!!!!!###%%%%%%$$$!!!!!!!!!"""###$$$&&&&&&%%%$$$%%%%%%&&&%%%#########"##!""###$$$!!!!!!"""!!!!!!%%%###!!!!!! !!!!!!!!! !!! """!!!!!! !!! !!!!!!!!!###$$$$$$$$$$$$###!!!!!!###!!!   !!! !!!!!!!!! !!!### !!! #########$$$""""""!!! !!!!!! !!!""""""""""""############%%%+$/)/(0) 1* 0)1* 2+ 2* /'0)2* 4,!5-"3+ 2)3+ 3*0(3,!81&70%7/%6.$3+!1)3+"6.#5-"5,!7/#91%7."6-!90$:1%8/#6-!8.#90$:0%90$:0%8/#4+0(91%:2&80$5."5."70$:2&6."-&.'4-!6.#4-"5.#4-"81&91'3+ 3+ :1&=4):1&8/$:1&;2'7.#6."=4(;2&3+80$<3';2&4+ 90$:1&3+ 8/$=5*92&70$2+7/#81%80$;2&=4)<3(6-"4+90$:1%8/#5- 8/#:1%E;,xfM!!!"""###$$$######$$$$$$###$$$$$$%%%$$$%%%&&&&&&&&%&&&+++000444999>>>DDDIIJOOP2% E1+\USmi`RUNEF@720%$%    !!!!!! !! !!!"""#$$####"!" #/:4.4MP3U^8V[>V];Z^4XT285 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - `S=E;+@8*@8*?7*<4'?7*B;.A:-=6)=6*>7*<5)>7+A:-?8+<5(=6*?7+@8,>7+@8,@7+>5)?7*<4':2%@8*;3%?7)B:,B:,?8*@9+?8*>6)=5(;3&?6*A7+?5)?5)@7+?8,=6*<5)<5)=6*92'70%5.$1* 1+"2,$/*!$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  !' *#1* 1*0'2)1(/&2)3*1(.%.&/'.')"$"        -  - -                      - - -    - -  -      -  - -  - -   #e&i'i&j&Y1IUZ ^#^#Z X Y"W V U STRQOOOMKJHHGFIFFB<:-&H<5? ? = ;F - - -&&&%%%$$$###$$$""""""!!!$$$$$$$$$######$$$&&&$$$###"""###$$$&&&$$$###!!!!!!$$$"""!!!""""""""" !!!!!!###%%%$$$""" """######%%%&&&''''''&&&&&&'''%%%$$$######"""######!!! """!!!""""""###"""!!! """ !!! !!!!!!"""!!!"""###!!!"""!!! !!!"""""""""$$$"""""""""$$$"""!!!!!!  !!! !!! !!! !!!""""""""""""$$$"""$$$""" """$$$!!!"""###""""""  !!!!!!  """!!!"""###$$$%%%%%%%%%'''### -&.'2+!4,"2* /(.'0)2* 2+ 4,!5-"4,!4+ 6-"3+ 3+!4-"70%7/%5-#5-#4,!1)2* 4,!5-"5-!8/#90%6."8/#:1%<3'7."6-!7-"90$90$:0%;2&90$4+0(:1%;3'91%6.#6/#7/#:2&6."-%-&5."7/$4-"5-#5.#92'92'3+ 2+ :2'<4):1&8/$:1%<3'7.#5-!<3':2&4+90$<3':1%5, :1&;2'3*6-"<4)91%70$4-!81%81%90$:1%<3(>5)8/$5, 90$<3'90$5-!8/#:1%=4'J?/ !!!""""""######"""######$$$$$$$$$$$$%%%%%%%%%%%%$$$%%%***///665:::??@, ODBlil`_]QSMILD864    !!!!!!!!!  """"##""#"####"#"!"   .&9@14OH4XX8XZ5Z\)]\0[\  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  LB1;3%>6(?7*<3&=5(>6*A9-@9,=5)=6)>7*>6*>7*A:-=7*<5(=5)>7*?8,>7+B9-@8,@7+@8+=5(:2$@8+=4&?7)?7)?7)>7(?8*>7)>7)@8+=5(@7*?6*=3'>4(>6)?8,>7,<5)<5(=6*;4(81%81%5-#6/$4-%4-$-'& !  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - !' -'0(.&1(2)1(4+4+ 1(/&.&0)0),%("%        -  -  -                       - - -   - - - -      -  - -  - -   c$h(m(f#@> NVZ!Z YX V U TU RRROMMMKJHGFFDDDBA=?(MB;: ; = < 8 C - - - - - - - - -###%%%$$$$$$$$$""" $$$%%%###"""$$$###"""###"""###$$$%%%$$$$$$"""!!!"""""" !!!"""###""" !!!"""$$$$$$""" """$$$###$$$&&&%%%(((&&&&&&&&&&&&$$%############!!!  !!!""""""""""""!!!!!!!!!!!!!!! """$$$$$$$$$""""""%%%###""""""!!!!!!"""$$$$$$############!!!!!!"""  !!!!!!""" !!!!!!!!!"""!!! """###"""###############""""""   !!!"""""""""!!! !!! !!!!!!!!!###$$$######%%%$$$$$$"""!!!!!!0)3,"0(0(0)1) 2+!3,!4-"5-#5-"5."4,!1)3+!4,!4,"1* 4,"4-"5-"3+ 3+!4,!6."7.#8/$7/#5-!8/#:1%90$6-!6,!6-!80#8/#80$:2&91%4+ 1(91%:2&80$7/#6/#70$:2&90$0(-&4-"81&5.#5.#6/$92'92'4,!3+ <3(>5*;2'7.#90%<3'7."4, :1%7/"3*7/#:2&8/#4+91%90%1)5-"92&81%81$5-!5.!5-!7."7."90%=4(7."3*:2&>5)91%5-!8/#<3':2&B8*NC2!!! !!!###""""""###"""###############"""###$$$###"""!!!&&%+++111"TMNrootnsWSSKA>?72*+'     """$$$""#""####""!#"! ,-#)@66QO>UX?UX8VZ4UY7QS - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - -  TJ8F=.;3%>6(?7)>6)>5)>5)@8,?8+=5)>6)>7*>7)?7+A9-?8,=6*=6*@9-?8,>7+A9-@8,?6*=5):2&91#?7)=5&@8*?6(>6(>7)@9+?8*>7)>7)=5(@7*@7*>5(>5(=5(=7,?8,=6*;4(=6*=5*;3(:2'7/$5.$5.$6/%3,#/(+%%  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  )#-&-&0(1)0(4+ 5,!3*0'/'2* 3+!/()#$        -  - -                        - -  - - - - - -     -     -    `%c'e&_!Q3CPUVX VSSSRPOQNJJMJIHFEECCCA@=9?.&E819 ; ; -9 . -7 - - -%%%$$$###$$$""""""###$$$"""!!!###!!!######$$$%%%$$$###%%%$$$###!!!"""""" ###""" !!!""" """###$$$""" !!!$$$######%%%&&&%%%$$$"""$$$%%%%%&##$#########"""   """###"""###!!!!!!"""""" !!!!!!######$$$$$$#########"""###"""""""""######""" !!! !!!!!! !!! !!!  !!!"""###"""$$$###!!!!!!!!! """$$$###!!!!!!!!!!!!""""""###$$$"""  """$$$"""""""""""" !!!!!! !!!  !!!"""#########""""""  0(0(/(0(2+!5.$70%6.#3,!4,!1*1)2+ 2+ 2* 0)0(2* 3,!3+!5-"6.#6.#6."80$6."3*6-!;2&90$7."5, 6."8/#7."8/#:1&:1&5-!3+:2&92&80$70#6."7/#:2&90$2)1(6-"7/$5-"6/$81&;4):3(3, 3+;3(=4);2'7.#8/$:1%4+ 3*91$7/"4+7.";2&7/#3+90$90&3* 4,!:3'<4(80$4- 4- 4, 7."7/#8/$;2&7.#4+:1%?6*91%6-!91%=5);2&;2&A7)iX@ !!!"""##################"""!!!!!!"""###$$$""" .L;:_\Yz{w]Z\NA?6%#5'%  ##"##$##$""#"##"""!!!#"" .39DC6(@8*?7*>6);3&=4(@8,?7+=5)>7*?8*=6(>6*A:.?8,>6*=6*A9-A9-?8,A:.@9-?7+<4(7/#91%=5)=5(@7*@8+?7*@8+@8+>7)=5(<5'=5(?6)?6)>4'<2%=5)>8-?8-=7+<5)=6*=5);4'80$91%6.#5-#70%70%2+!/)+%$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $,%-&/(/'.'5, 90%4+ 1)1)2* 2+!0()"%        - -   -                          - - - - -   -     - - -     -   ^$`&[!W ?7 -HPRUSQRRONNNMIH IHHGFEDCBA><:8; G;4H<57 -66 5 -K """"""###%%%!!!###!!!###""" """###$$$######%%%###""""""$$$%%%!!!!!!$$$ !!!!!! ###$$$""""""###$$$!!!$$$$$$"""###"""######$$$&&&$$$$$$$$$###$$%###############!!!  """"""###$$$"""!!!!!!"""$$$""" """"""###""""""$$$"""######!!!"""!!!!!! !!!!!!""""""!!!!!!  !!!!!!!!!!!!  """###$$$""""""######"""  """###"""!!! !!!"""!!!"""$$$!!!  !!!"""###"""###### !!! !!!  #########"""!!!!!!!!! !!!!!! .'/(2+!6.$70%5.#3+!3+!3+ 1)1*1* 0)0)0)3+!1)0(4,!6.#6-"5-!80$6."2)6.!:2&:1%8/$5, 5-!7."7."8/$:1&91%5-!4, :2&92&7/#6/#5."6/":1%91%3*1(7.#80%3,!5.#81&<6*:3(3+ 4,!<2'>4*<2'7-#90%;2'5,!3*90$7/"3+6-!91$5, 1(7."7.$3* 4,!:2&<5)91%4-!70$6."6.!7/#:1&=4):1&5, 90$?6*:1%7.";2&=4(:1%;2&;2&F;, !!!###"""###!!!"""!!!!!!!!!""""""###""" )GA:[^W{zubb_FE@5-&3!.   ""!#######"#""####"""#"""""!!!%($4?94OK8SU8QW3OV8NO7LQ3EK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  ND3E<.>6(>6)B:-B:-?7+=4(>6*A9-?8+=5)?8,?8+<5(<5)B:.@8,=5)>7+C;/B:.?7+@8,@8,?7+=5):2&;4(=6)>5(@7*A9,A9,A9,@8+>6)<4'?6*=5)?6*@6*<2&:1%<4(>7+>8+=6+;5)=6*=6*<4)<3'7/$3+ 6.#92':2(4-"1* 0) +$' $  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (!+$/(.&+$1)6.#4+ 2)1)1*1* .')"'!        -   -                    - - -  - - - -      -     - -     -   #!!Z!Y!U!M-; GNPRPQPNLNLKJIHD EEDDDA@>=<876;%F:36 -6 6 -5 1 B !!!"""""" """%%%$$$"""###""""""!!!!!!######!!!"""&&&$$$###!!!$$$""""""""" """###############"""$$$""""""###%%%############&&&$$$##$######"""######"""!!!  !!!!!!$$$###$$$"""### """"""""""""###""""""!!! !!!""""""#########"""!!! !!!!!! """$$$""" !!! """!!! !!!!!!!!! !!!###$$$### !!!"""""""""!!!###!!!"""""" !!!"""""""""$$$""" !!! !!!!!! """!!! !!!""" """"""""""""""" """  2+!4-#5.#4-"4,!3+!3+ 3,!2+ 2+!2+!1* 2*!3+"0(/(4,!6.#5-!6-"80$7/#3*7."90$90$90$5, 5, 6."7/#90%:1&90$4,!4+ 91%81%6/#6."5-!5-!8/#8/#2)1(8/$80%3+ 4-"60%:3'92&3+ 5-"<2'>4)<2'8.$;1'<3(6-"3*7."6-"3*4+ 91%4,!/&5,"6."5,!7/#:2';4(91%5.!70#5."8/#8/#<3'@7+;2'4*8/#?6*8/#7.";2&<2':0%<2';2&@6)NB3 !!!""""""!!! !!!""""""!!!,8-%IE:^XLoaU_PKE515$1%)"   ""!###"""""##"####"""####$#$%$$%$%-+.C@.SP0YZ2X^6Xa7UX7PT2JN - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - -  OB0F=-C:,<4'>6)C;.C;/@7,=5)=5)A9-@8,=5)@8,@9,=5)=5)@9-?7+=5)?8,B;/@9-?8,>7+<5)<5)>6*>7+>6*>6*>5)?6*A9-A9-@7+@8,@7+=4(=5)>5)?6*@6*;1%;1%=5)>7+>7+=6+:4);5*=6+<5*<4)80$6-!7/#;3(<4)6/$2*!2*!.&+#,$*#& - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "("-&/(*#0(2+2*1(0(1)1* .',%'"       - -   -                  - - - - - - - -             - -     -   '$$#! VW!T QA.@JNQSQNMKKJJIGGECB A A@?> < ; 9 7 5 3 -2 >,%?0*4 23 -1 * -5 - - - - - - !!!  ###%%%######""" """ !!!###$$$###""""""######$$$""""""""" """###$$$"""$$$$$$"""!!!"""###$$$%%%%%%$$$###!!"##$"""######""" !!!!!!   !!!!!!""""""######$$$"""%%%###"""!!!$$$###!!!"""  !!!"""######""""""!!!!!!!!!""""""###!!! """  !!!!!! !!!!!!!!! !!!###"""!!!""""""!!!"""###!!!!!!!!!!!! """"""!!!!!!""""""""""""  """!!!"""$$$###!!! !!!!!! !!!!!! !!!!!!!!! !!! !!!###"""!!!5.#4-"3+ 3+!4,"4-"3,!4-#6.%1* 1* 2+!0(0(4,!6.#4-!4, 91%8/#4+ 6-!90$90$7.#5, 6-!6."8/$91%91%80$4,!4,!80%81%5."5-!5.!5-!7/#7.#2)2)8/$80%3,!70%82'93'81%2*5,!<2'=3);1'9/$;1'<3(6-"3*7."5,!3*3*80$3+-$4+!90%6."8/$:2&:3'80$2+70#4-!92%6."91%=4(;2&3*8/#?5*8/#6,!90$:1%9/$8."8.#9/#H=/q^I !!!!!! !!!!!!!!! * B4)UA9cMFX>7I)&@# ;!7%   """######"""#"##"#"""$$$%%%'('())!+++=;2GE2PO2Z]3XY8WT7TO0NJ - - - - - - - - - - - - - - -  -  - - - - - - - - - - - - - -  tbFG<+>5'A9+=5'>6)C;.C;.@7+=4(=5)A9-@9-=5)@8,A:->7*>6*?7+?7+=6*>7+?7+>7+>6*=5)<4(<4(=5)>6*=6*=5)>5)>5)?6*?7+=5)?7+?7+>5)<4(?6*?6*?6);1%9/$;3'>7*=6*<6+:3(<6+>7,=5*<4(;2&7/#8/$<3(<3)70%4*!5+"2(1'3) 1'-$) " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - !'!.(*#2+!4-"/'.'/(1*2+!.'-&("        -                    - - -    - - -   -           -  -    -  !*'&)&%(''&%%$$%U T R N<5 BIMQNKLJHHHFEDEBA ? ? > < ; : 9 7 7 4 2 -3 4/ .12 1 --O - - - - - -  ###$$$!!!!!! !!!""""""$$$###"""############$$$!!! ###$$$ ######!!!###$$$######$$$### ###%%%$$$%%%&&&$$$#########"""!!!  !!! !!!!!! !!!!!!"""#########""""""""""""###%%%###"""###!!!  ###!!!$$$"""!!!"""!!! """ """!!!!!!!!!   !!!###!!!""""""!!!""""""###############$$$%%%!!! !!!!!!!!! ######"""!!!!!! !!!###!!!""""""!!!"""$$$"""""""""""" """""" !!!!!! !!! !!! !!! !!!!!! %%%$$$!!!"""2* 3+!3,!3+!4,"4-#5/%1* 2+!3,"1*1*5-"80%6/#6."91%80$6."6-"90%90$7."5-!6."6."8/#90%90%80$5,!4,!7/$80%5."5."6/"6."8/#90$3*1(7.#80%5-"5.#71&:3(92&2*6,";1'=4);1'8/$90%;2&6-!3*7.#6-!2)1(6."3*.%7.#:2&6."8/$;3(:3'80$1*70#6/#80$5- 91%=5);2&3*7.#=4)90$5,!8/$90%7.#7."7."8/#=4(H=/  !!!!!!)I;8QEAS=9C+)C'%B#A$8 &   """###"#"""""!"#""%$$&'&(*)&&&&))3;;,A7'A8*B:,?7)=5(A9,B:-?7+=4)>6*C<0C;/=6*?7+@8,>7*=6*@9-@9-=6*=6*>7+?7+;3';3'=6*=5)<5)=5)=5)>6*>5*=4(<4(=5)=5)@8,?7+<3'=4(?6*>5)>4(:0$90#<4'=6);4(<5*:3(=7,?8->6+>6*;2&7/#:2&>6*<4)80%6-#8/$6,"4* 5+!4+!2) /')!$" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -!)$("1+ 5-"/(.&.'1*1* .&*#&          -                  - - - -   - - - -      - - -      -  -   - -  -)'*&%*'()&&'%%%%%PSQPH) 8 AGKKJKHGFFECCBA@? >< < : 9 7 6 5 4 3 -3 -/* (000 /2A - - - - - - - - - !!!!!!!!!!!!""""""!!!!!!"""$$$###$$$"""!!! """######$$$!!!!!!""""""!!!!!! #########$$$%%%$$$ """$$$$$$%%%%%%###$$$$$$"""!!!!!! !!!!!!  !!! """%%%"""###""""""""" $$$$$$#########"""!!!!!!###""""""!!! ###""""""!!!!!!!!!!!!###"""!!!"""""" #########"""######!!!"""!!!###%%%"""###%%%&&&&&&"""!!!!!!!!!!!!""""""!!!!!!!!! !!!###""" !!!!!!!!!"""###"""""" """"""!!! !!! """ !!! """$$$!!!!!!""""""!!!!!!### ###"""3+!4,!2+ 0)4-"6/%1*!0) 3,"1* 3+!5.#80%6/#5."91%8/#5, 6-"8/$8/#7."5-!6-!6-"7/#8/$8/$7/$4+ 2*5-"70$5."5."6/"6."90$91%2)/&5,!80%5.#6/$81&;5)82&2*6-";1'=4);2'90%90%;2'7."4*6-"5, 2)1)80%7.#0'6-"80$5-!7/#;3'92&:2&4- 6."81$90$4, 80$=5)<4(4+5,!;2'8/$6-"90$90%7.#8/$8/$90$<3(@6)G<- !!!!!!,8*)L;8PA;@+$=)#275* ###   !!! """##"""""!!#"#&%%'''(*)(((*++0339BA5LI2RV4T_6Q[9SX9VT/JE - - - - - - - - - - - - - - - -   - - - - - - - - - - - - VH3C9*<3%>6(?6)A9,=5(?7+A9-?6+<3'>5*C;/C;/?7+@9-B;.@8,=5)@8,A9->7+>6*?8,>7+:3';3'>7+?7+>7+>6*;3'<4(?5*<3(<4(>5*?6+B9-A8,<3'<4(?6*=4'=4';1%90#>5)?8*;4'<5):3(>7,?8->6+=5):2&90$;2&90%:2'7/$91&:1'8/%6-"6,"5,!5,!2).%+")!%! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "'!/)3,!0)/'.'/(/(-%)"$          -                - - - -   - - - - - -    -  - -      -     - - /*(0*'/+)-)'+'%)&$'&%%%%##$OMPQ= , 8 AFG H G E E FFDBA@? > = < ; 9 8 7 6 5 4 4 3 -1 /.% +0/0 0 -04 - - - - - - - - - - - - !!!!!!!!!!!!""""""!!!""""""###"""###"""  $$$!!!""""""""""""""""""""""""!!!###!!!"""###$$$%%%&&&$$$""""""###%%%&&&%%%%%%$$$"""""""""!!!!!!!!!!!! ###!!! !!!!!!!!!"""!!!""""""!!!###$$$!!!"""$$$###!!!!!!$$$"""!!! !!!######$$$"""!!!###!!! """"""!!!  !!!""""""######!!!"""""" ######"""""""""$$$$$$"""!!!  """"""!!!!!! !!!######!!! !!!!!! """$$$###"""!!! !!! !!!  !!! !!!!!!###$$$!!!!!!!!!!!!"""!!!!!!!!!  """ 2+ .'3,"4-#2+!1* 2* 0)2* 5-"70$5-!5-!80$6."3+6-"8/$8/$6-"5, 5,!4+3*3+ 5-!5,!1(.&3+ 80%6."4- 4- 5-!:1%90%2)0'4,!7/$6/$4."6/$:3(70%3+6-";2(=4);2(90%90%:1&6-"2)3*4+ 4, 4, 91&7/#0(5,!80$4, 4-!91%91%;3'5."6/#91%80$3+7/"<4(<3'4+4+ :1&7.#7."90%:1%6-"8/#8/$7.#<3(:1&?5(gWA *>))H:2JB5D5*;."8( 78'   !!!!"!"""!!!#"#'&&)()***)))---).-8AA:NM4PO9SW6Q[5T\2UU6JI - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - zgLD9*<3%<2%?6)>6)?7*=5(?6*@7,>6*;3'>6*B:.@8,@8,?7+@9-@8,=5)@8,B:.>6*<5)>6*>6*>6*>7+?8,=5)=6*>6*:2&;2'?6+;3(>5*?6+?7+@8,@8,;3'=5)@8+>5)>5);1%9/">6)?8+<5)<5):4)=7,>7,=5*<3(90%90$;2&<3'@9-=5*:2&:1%90$8/$7.#6-"6-"3*/&,%,%-'+%"  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - & .'1*0(0(/(/(/'-&(!# -       -   -            - - - - - -    - - -    -    -     -     - - 3+(0)&3-)1,',($+&$)&$'&$$%$!""LLL I% -0 ; BEF G E DEECA? ? > < ; : 9 7 6 6 5 4 3 2 2 -1/ ., ' ,///. O - - - - - - - - - - - -######"""!!!!!!###"""!!!######$$$$$$!!!"""######"""###%%%$$$$$$###"""$$$"""###"""!!!###"""###%%%'''&&&$$$$$$$$$%%%&&&&&&$$$""""""###"""""" !!!   !!! """!!!!!!!!!!!!"""!!!""""""###""""""""""""###!!!!!! !!!""""""###!!!"""###""""""&&&"""""""""!!!!!!""""""###""""""  """###""""""!!!""""""!!!"""""""""!!!!!!$$$$$$"""!!!!!!######""""""###$$$###!!!!!!!!!!!!  """""""""""" !!!!!!!!!  !!!!!!""" !!!""" !!!!!! """"""!!! !!!"""!!!4-#2+!0)1* 1) /(1)5."6/$4,!4, 7/#6."4, 7.#91%90$8/#3*3*2*2*3*4,!5-"1(/&4,!91&5."2*2*4- 91%91%3*2)5,"80%6.#5.#70%;4)81%3+ 5,!:1&<3);2(90%8/$90%7/#3*4, 4, 2*4, 91&80$2*6.":2&4, 4, 81%:2&:2&5-!6."80$7/#3+6.">5)<3'4+ 5,!:1%6-"6-!90%90%7."90%5,!8/#:1&90%7."D9*0&32*!@0(;*!=(#<#%@*//1.,-+   !!!!!!!"!#""'&'+)*%%%***...,//?>BBNQ3PO5RR5XY3[[5VV;OO)(& - - - - - - - - - - - - - - - - - - - -    - - - - - - - - -  LA1?6(;2&=4'A8+?7*?7*>6)?7+?7+>5*;2'>6+B:/A:.@9-?7+@9,?8,=6*?8,A9-<4(;3'<5)>6*>6*>6*=6*=6*=6*<5);3':2'=4)91&>6*>6*>6*>6*?7+<4(=5(@8+?6)?6*=3&90#>5(?8*>7*=6*;5*>7,?8-=5*<4):2&80$80$<3'>6+91%91%80$8/#90$90$8/#8/#6-!1)/&/'1*.&*#%   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -& .'0)1)0(/'-&0)-%'" -         - -              - - -        - -    -    -     -    - -4+(5,'7.)5.)5.)0*%-($+'$(&#&%###"IHKK< % 4 =CE E E CCB@? > = < : 9 9 7 6 5 4 3 2 1 0 -/ // 0 -0 -+ *//. .0@ - - - - - - - - -  ###!!!"""$$$###!!!"""%%%%%%$$$###!!!"""&&&###%%%&&&%%%%%%!!!###$$$"""!!!"""%%%$$$!!!!!!######$$$&&&%%%###%%%%%%%%%%%%###"""!!!"""""""""!!!!!!  !!!  """###### !!!$$$"""""" !!!###""""""""""""!!! !!! """!!! !!!"""###!!!###!!! """"""""""""!!!"""###!!!"""!!!""""""######""""""!!! ###!!!!!!""" """  """%%%$$$!!!"""!!!"""!!!!!!!!!  !!!!!!"""###"""   """  ###!!!"""!!! ###"""!!!!!!!!!""" !!!###!!!   3,"3,#3,"1) 0)5.#5.#3+ 3+ 7/#6."4, 7/#;2&8/$7/#2)2)4, 6."7/$8/$80%/&/&6.#91%5-!3, 3, 3, 7/#80$4, 3*6.#90%6.#70%82&;4(80%4+ 3* 90%;2(:1'6-#6-"6.#5, 0(3*3+0(4, 91&91%3+6.#:1&4, 4-!91%:3'91%5-!5-!80$80$3*3*=3'=4(7."7.#:1&6-"5, :1%90$8/$8/$7.#7.#;2&90$3*:0"J>.* %7&#Q.2H-.B'-=$02EF*[U+DC """!!!!!!#$#('(+**&&&+++////,,<:?>PP3SQ0PP0TU1Y[7\^=QS011 - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - fWBF<.;2&;2&>5)B9,@8+>6)?6*@8,@7+>5):2'=5*A9.B:.@9-?8,@8,=6*:2&;4(>6*<4(;3'=6*?8,?7+<4(>6*=6*<5)=6*:3';2';3(8/$<4(=6*?8,?8,>6*;4(>6*>6)=5(@7*>5(<2%>5(?8*?7+=6+<5*>7,?8-?7,>5*;3'7/#:1%=4(?8,=5)91%90%90$90$90$:0%90$7."1(/'.&0(.&-&+%("#  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -' .'0)1)0(.&.&.'.')"&        -  -             -   - - -       - - - -        -     - - -  -8-'7+&8-'4,'4+'2*$1*%.($)%!'$!%#!!! FE F G6 *6 ?B C C B @ ? > > < ; : 9 8 7 6 5 4 3 1 0 -/ -. -, - - -. -/ / -) -,/ / -. -.5 - - - - - - - - - !!!###$$$"""###%%%###&&&%%%""""""$$$###%%%&&&%%%&&&&&&%%%!!!"""$$$$$$$$$%%%###!!! """""""""$$$"""%%%&&&$$$###$$$###!!!!!!"""###!!!!!!!!! !!!!!!!!!!!!   !!! !!!!!!!!!!!!""""""!!!###!!!!!!"""!!! !!!   !!!"""$$$"""###""" !!!"""""" !!!!!!"""""""""""" !!!######"""$$$%%%!!!  !!!!!!!!!###!!!"""!!! !!!$$$###!!! !!!""""""!!! !!!"""###"""!!! !!!###!!! !!!""" !!!""" !!!!!!!!!"""###!!! !!! """6.%2+!0)4-"5.#2*2+6."5-!2*6.";2'7.#7/#3+4+ 7.#80$90%80%7/$,#/&7/$91&7/#6."4-!5-!6/"7."4+ 1(6-"90%7/$70%81%;4)91&2*4+ :1&;2(90&7.$7/$7/$4, 1(4, 7/#2)4, 80$7/#3*6-":1&4, 4-!91%:2&91%6."6-!8/#:2&4, 2)<3'>5)8/#7.#:1%6-!3*<3':1%7.#6-!7.#7.#:1&:1%2)7."C8*_O9" "41)KA<<20@JE:YW1bb0\^3KP """"""!!!$$$((("""'''+++0000//69<8HJ4PP0OQ1QT0UW5X[9PW5=A - - - - - - - - - - - - - -  - - - - - - - - - - - -   I?1?7*;2';3'?6*B9,@8+=5)>6*@8,@7,=4);2'=4)@8-A9.@8-?7,>7+<4(81%;3'>6*>6*;3'>6*@8,>6*<5)>6*<4(;4(=6*:2&;3(80$6.#<4(>6*?7+>6*<5)92%;3'?6*=4(>5)>4(>4(=4'?7)>6)?7+<5*=5+?7->6+<3(;2&7.#;3&=5)?8+=6*:1&;2':2&80$91%;2&;1%8.#1'1(/'1(3+ 3, 1)-%(!$"   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  (!/'1)2* 0)0)2* 0(0)*#%        -  -             - -  - - - - - - -   - - - -     -    -    - - -8,';-&;,&6+&4*&5+&3)#2)#0("+$)$ &# #" !!!BB D D=! -7 = @ @ -@ -> > = < : 9 8 7 6 5 5 4 3 2 0 / -. -- -- -- -/ 0 0 0 -- ' -+/ -. --/ M - - - - - - - - - - - - $$$!!!###$$$###'''((($$$###'''%%%%%%'''''''''%%%###"""$$$######$$$$$$###"""!!!!!!$$$$$$###$$$%%%'''&&&$$$######"""!!!"""###"""!!!"""!!!!!!"""###"""   !!!"""%%%!!!!!!!!!"""###""" ###!!!  !!!!!! !!!!!! """###!!!"""!!!###$$$###"""""""""!!!###"""!!!!!!""""""$$$!!!!!!!!!!!! !!!!!!!!!!!!   !!! """###""" !!!######!!! !!!###%%%""""""!!!!!! !!!"""!!!  !!!!!! """""" !!!""" !!! 2+!/(4-"5.#2+ 1)3+3+0(3+:1&7/#7/$4+4, 6.#6.#80%80%7.$/&/'6.#80%7/$6/#5."6."7/#6."5, 1(6-":1&80%7/%81&;4(91&2*1)8/%7/%5-"2*6-"80%5, 3*7."7/#1(3+91%7/$1)5-";3(5,!5-":2':3'81%6."6-"8/$:1&6,!3*<2&?5*8/#6-"90$5, 2)=4(:1&7.#5,!8/#6.";2&:1&5,!:0$<3&B7(' 0/'YNJXNM>[T3nf3bf6ag8Z^$&* """"""###%%%()(###(((,,,0002114475EF3SR1RR4RT1SV6RW6IQ=LU - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - -  ND5C;.=5);3(;3(>6*B9,@7+<4(=5)@8,@7,<4):2'<3(?7,@8->6+=5*<4):2'80$<4(@9-@8,;4(=6*?8,>6*=6*>6*;4(;3'=5);4(>5*<4(80$:3'=6*>6*;4(;4(<4(>6*=4(=5)=4(?6)<2&<3&>6)>7*?8,>6,>6,?7->5+=4)<3'8/#;3&>6*=5);4(81&90&90&8/$90%:1%8/$7-"2)3*2*1(3+5.#5.$2+"-&+$( $   - - - - - - - - - - - - - - - - - - - - - - - -#' ,$1)5-"4,!1)2*4,"3+!1* ,$&          -            - - - - -   - -    - -        -     =.'<-%=-%3)$3($6+&4("1& /%-$,% ($!%#!&$!"" BC@?1 $ -1 -9 < > -> = -= ; : 8 7 6 5 4 3 3 3 1 0 . -- - -. -. -. - -- -- 0 . + -/. . --+A - - - - - - """!!!%%%&&&###$$$%%%%%%!!!%%%%%%&&&'''&&&%%%$$$###$$$%%%$$$$$$$$$###$$$###""""""###%%%%%%&&&&&&&&&&&&%%%###"""""" """$$$"""!!!!!!!!!!!!"""!!!  !!! !!!!!!"""  !!!"""!!!"""###!!!  """"""""""""""""""### !!!!!!$$$%%%%%%%%%!!!!!!"""######"""###"""###"""  !!!!!! !!!!!! !!!"""  !!!!!!!!!""" !!!!!!  !!!!!!""" !!!""""""  !!! !!! !!!!!!"""!!! 5-"5.#2*/'0(4+ 1(3+90%7/#7/#4+4, 7.#6.#80%90&7.$/&.&5-"7/$6/#5."5."5-!5-!5,!3*0&4*6."6.#5.#70$92'81%1)1)80&80&5-#1)6.#90%4, 5-!6."7/#2*3*7."7/#3+6-";3(6.#5."92';3(:3'7/#6-!90%90$7."4*<2'@6+90%6-";2&4+ 3*;1&:1&7."7.#90%6-!;2&<3(7.#;1%;2&<2$I=.$ - ',$CMIUUVNVZ?ag;]n6\g8ZX&*,  """%%%'''"""%%%)))---111333/46.ED7TT&BC8UX3UV4UX7OU2IO)6: - - - - - - - - - -  - - - - - - - - - - - - - l]EH?1?7+>6*<4);3(>6*B9,?7+;3'<4(?7+?6+;3(8/$:1&=5*=6*;3(;3(;4(;3(92&<5)B;/@9-<5)>6*?8,>7+=6*?7+<4(;4(?7+<5)=4(=5)81%:2&<5)?7+>7+=6);4(=4(<3(<3'80$<3';2%<3%>7)?7*?8,?7-@8/A8/>5+<2(;2&90$<3'<3';4':2'7/%7.$7.$7.$90%:1%8/$7-"4*3)3)2)5, 7."4,!2) 2) .%/&,$' $  - - - - - - - - - - - - - - -   $("*$-&4,!80%5-"1)1)3+!4-"2* .')"     -                - - - - - -      -    -   <.'@.&H1&A/%9,%3("2& 2%1$0#/$.% *$!*$"($!&$ #!A@@? 7!) 2 9 < < -; -; : 8 7 6 4 -3 -2 -1 -1 -0 0 . -- - - -. -. . . . - -- -/ -0 6!=.$---+ -5 - - - - - - - - - $$$###$$$%%%###"""###&&&&&&%%%%%%%%%%%%#########%%%%%%$$$%%%######"""$$$$$$%%%###$$$%%%'''&&&&&&&&&%%%###"""###"""!!! """"""!!! !!!  !!!!!!  """"""""" !!!!!! """!!!"""""""""!!! !!!!!! !!!############""""""###!!!!!! """!!!###$$$$$$###"""!!!$$$$$$###"""""""""""" !!!!!!!!!   !!!### !!!!!!!!!  !!!!!! !!!###### !!!!!! !!!"""!!!   !!!6.#1)-%2*5-"2*4+ 80%6.#6-"1(2*6-"6-"8/$8/%6-#0'/'7/$91&80%5."5."5-!5.!5-!3*1'4+ 6.#5.#5-#3+ 92'70%.&2*:1'80&5.#3+!4,!7/$70$6."80$7."2)4, 90%91%3*6-":3'70$6.#:2'<4):3'6."5-!90%:0%7."5+<2'?6+90$5, ;2'5,!4+90%90$6-"90$:1&6-":1%=4)8/#:0$;2%7-!@5']N:& - - +50BKIPXY^knKty5):2&;3'>5*=4):1&6."90%=5*<4):2';3(=5*>6*;3'<4(B:.>7+<4(=6*?7+>6*>7+@8,=5)<5)A:.;3'?7+>6*91&;3';3'<5)?7+?7+<5(<3(>5):1&>5)<3':1%;2$?7)?7*>7+>7,@8/A9/?6+>4*;1&90$=4(;3':3&:2'6.%5-$4,#6-#7.$6-#7.#5,"3*2(3)5,!6-"5, 4+ 3* 3*0'1(.'*")!(!! - - - - - - - - - - -#' )#-&0(1)5,!91%6-"2*1)2* 4,!2* ,%(!        - -             - -  -          - - A/&B.$F0#?, ;+!6*#5' 3%3%2$0#/$-$ *#'"'!%"$!!  BB A > 6 + 3 -8 9 : -: 8 7 6 4 3 -1 -0 / / -/ -. - -- - -- -. -. . . / - . . / 2;(9+ -,,+ N - - - - - - - - - $$$###%%%$$$###%%%%%%%%%&&&&&&&&&%%%%%%$$$$$$&&&%%%"""$$$###$$$%%%######%%%%%%%%%$$$$$$&&&&&&$$$""" !!!"""###!!! """!!!!!!!!!  !!! !!!!!!"""###"""!!!###### !!!!!!!!!"""""""""""""""!!!"""""""""######"""!!!""""""!!! !!!!!!"""######$$$""""""$$$$$$$$$""""""""" !!!  ###!!!  !!! """  !!! !!!###$$$###  ### #########!!!!!!  !!!"""  1)-%4+ 6.#3+ 3+ 5-"6.#5-"3+2*7.#6-"7.#7.#6-"0'1)7/$80%6.#3+4, 6."7/#6."3*1'5+ 8/$5-"3+!2+81%6/#.&4, 80&80'4,"3+!0(70$:3'80$8/$6."2*5-!;3';2&1)1)80%7/$5-":2'=5*;3(4,!6.";1&<2'6,!4*<2'?5*8/$2*;2&6."5, 90%90$6-"90$:1%7."90$<3'9/$7.";1%9/#;1$F;,t`E+#   *##E;5(=5)=4);3'90%7/#:2&=5)<4(:1&:2&=4);3'90%7.#;2'>6*?7+>6*>6*@8,?7+<4(;3'@8,=5)=5)?8,?8,?8,A:.A:.?7+>6*A:.<4(<3(>6*<5)<4)=6*>7+>7*>7+<4(;3'?6+>6*<3(90$:1$<3%@7*@7+>6+=5+>7-?7->5*=3);2&;1%>6);4'92%81&7/%6.$5-$6.$6-$5-"7.$6-#2)0'3*7-#8.#7-"5,!5,!4* 4*4* 2)-%-%-%*#'   - - - - -   %)"-&0)0)1)0'2)91%7."3*1)2)3+ 2)+$)!        - -        -      - - - -    @/'E0%H/!E. B-<*8(:' 8' 6&4%2$0#/$)!( & & % $!# ! B? = =. " -- -3 6 7 7 7 6 4 3 2 -0 -/ . - - -. -- -- -- -- -. -. -. -. / - , , -- . -, +-,++ )@ - - - - - - - - - - - - - - - """%%%$$$!!!###$$$%%%&&&%%%%%%$$$%%%###$$$&&&$$$"""!!!###$$$"""###"""%%%$$$!!!"""$$$###""" !!!"""###%%%""" !!!###"""!!!!!!!!!!!!  """!!!"""""""""###"""###"""!!!!!!!!!"""""""""###"""""" !!! """######!!! !!!!!!!!!"""###!!!!!!"""$$$###$$$!!!""""""###"""""""""!!!!!!"""!!!   !!!  !!!   !!!"""!!!!!!###$$$###!!!!!!!!!  """###!!!!!!"""!!!  !!!"""!!!.%4+ 5-"3+ 3+ 5-"7/%6.#4+!2)8.#7-"7-"7."4, .'0(70&93(5.#3+5, 80#7/#80#4+ 1'5,!90%5-"2+ 5.#7/$6/#/(2*80%;3*7/%3,"5-"5."92&7/$6."5-!2*4, ;2':1&3*.&6.#6.#4,!91&>6+<4)5,!7."<3'=3(7-!5*<2'>5)8/$3*:1&7.#5,!:1&:1&7."90$:0%7."8/$<3'90$7-!90$7.!7-!>4'@4%)   -"7.*=C7?YN@ijAho9]e,hf4RU%%%)))"""###&&&+++///444666788*=5)A9-A9-?6*?6*A9-?6*=4(<3'@7+=4(;3'<4(A9-B9-B:.C;/@8,>6*@8,>6*>5*>6*=5)<4(?7+@9-?8,>6*=6*=5)>6*?6+=5)=4);1%<3%@8*@7+>6+=5+>6,>6,=4)<2';1&;2%;3&91$:3%91&6/%6.$5-#5-#5-"6-#90&80%4+ 0'2)5,!7.":0%7.$7-#4+ 4+ 4+ 4+ 0'1(2)2* ,%*$% - - - "% )",$0)2+!/(0(2*2*7/#6."4+ 2)0(3* 1(+#(!                - - - -   - - - - F1&F0$L3#K2#H2#D1#=(:#;(7(2'3&3&!0$** )!(!'!% ##  =< < <8 %. -2 4 4 -4 -4 3 2 0 -/ -- , , - -- -. -. . -. - -. -. -. . . -, -- - -/ -. -( /,,,,- 5 - - -  $$$###"""'''&&&'''%%%$$$$$$$$$######%%%$$$"""###!!!"""###$$$$$$$$$  #########""""""###$$$$$$$$$"""###$$$###"""!!!!!!   %%%$$$%%%%%%###"""###"""!!! !!!"""""""""#########$$$###"""""""""""""""!!! """""" """%%%###""" ###$$$$$$""""""!!!!!!!!!"""######"""!!! !!!   !!! !!!  !!!#########$$$$$$###!!! !!! !!!  !!!!!! !!!!!!  ###"""3+ 4,!3+ 4,!6/$80&7/$4,!3*7-"7-!7-"7/#4,!.&/'70&92'4-"2*4, 7."7."7/"3*/'4, 8/$4+ 4, 6.#91&5-".&1)92';4*80&6.$3+ 6.#92&7/#6-"5-!4+4+ ;3':1%3*1)7/$6.#3, 91&?7,<4)5-!7."<2'=3(7-"5* <1&=4(8/$4+ 90%7.#6-":1&<3'8/#90%;2'8/#90%=4(8/#6,!:0$7-!6-!;1%;0"UG3%  - <"$Q@C6TO3ha:klBdl3ce6WY  %%% ###$$$'''+++111444666999.66*IF9YY@Z]:Z^8W[9SY:RY=R](69 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - J@1>4(91%<4(<3(:2&8/$80$>5)@7+>6*:2&;3'=5)>6*<4(:2&<4(A8,A9->5)>6*B:.A9-=4(=5)@7+?6*=5)?7+A9-@7+@8,B9-?7+>6*@8,?7+=5)=4(;3'=5)@8,@7,A9-@8,<4(;3'>6*>6)>6)=4(:0#<2$?7)>6*>6+=5+>7-?7-=5*=3(;1%8/#:2%<5(;4';3(80&7/%5.$4-"5-"6-#7.$7.$6-#2)2)4+ 6-!90$9/&8.%4* 3)3)3)0&2(6,!4+ .&0).')"! - - -  & *#+$+#,$1*2+ -%1)2*2*6."4, 2*2)1)4+!0()"'      -            - - - -  - - - C0'H1%D."L2#K3#K5'G2%A)>&?* 8)0'3&2$/!.!/$.#*#*"' %"! =:9 9 2  &, -0 -1 -1 -1 -1 0 -/ -- , ,, - -- -- -. -- -. . . . . - -- -, , + -- -. -, ' 0!---. E - - - - - - - - -$$$$$$$$$$$$%%%%%%&&&%%%$$$!!!"""###"""###"""!!!$$$$$$$$$$$$""" """"""$$$$$$$$$############$$$############"""!!!!!!!!!    ###%%%&&&&&&$$$""""""!!! !!!"""$$$###!!!"""$$$$$$$$$###!!!"""###!!!"""""""""!!! ###$$$$$$%%%######$$$$$$%%%$$$!!!""""""######"""!!!!!!  !!!!!! !!!""" !!!!!! !!!  ###$$$$$$%%%%%%$$$$$$!!!!!!  !!! !!! """### 3+ 4,"6/$6/$6.#3+!2)6,!7-!7."8/#5-".'/'70&92'4-"2*4, 5-!6."6."2)/'6."91%5, 3+6.#91&70%/'3+ 80&92'91'5.#4-"5.#6.#3+ 1*3+ 5-"4,!80$80%3*1)7/$4-!3, <3(@8-<3(6-"7.#<2'=3(7,!5*<1&<3(8/#5,!90$8/$6-":1%:1&7.#8/$;2'90%:1&=4(7."4*;1&9/#8.":0$5+B7(pT -" -   5 E,3IAIDgf2ki9ej0ih0ca27< """$$$"""$$$%%%(((+++222555777999377)EC8NQ>T[@Y_>X^:V\8SY:S\1BI - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - -  l\ED:,80$91%=4(=5);3'80$90%?6*@8,?6*;3'=5)?6*?6*<3':1%;3'?7+@8,=5)>6*B:.A9-<4(=4(?7+?7+=5)>6*@7+?6*>6*@7+?7+?6*A9-@7+>6*=4);2'<4(@7,?7+@7,@7,;3':2&>6*>6)?6)>6(:2%:2%>5(>6)=4(=5)?7,@8-=5*=4);2'8/#7/"80#;4&<4)91&91&80&7/$7/$6/$5-"5,!5,!3+3*4+ 5, 7."9/'8.%5+!3)4*4)2(4*6-!5,5, 2*2*/&)!$   - "$ '!,%/( .' -%-%1)3+ ,$2+ 1)1(7.#5-!2*0'1(3+!0()"%     - -  - -             - H2&I1$N3#J1"G1"J5(G/$A&@(A,7(3&7%2"0 .!1$0#-,!*!'$#!!7 5 -8 8 +  &, -. / -/ -/ -. -- , -, , - -- -- -- -- -- -- -. . . . - -- - , + -, / . -+ -* ,---, @ - - - - - - - - - ##################"""### !!!###""""""%%%$$$$$$$$$$$$$$$"""###"""""""""#########"""#########""""""""""""""""""""""""  !!!   """"""!!!"""!!!###""" !!!!!!%%%%%%&&&$$$$$$######$$$###!!!###""""""######!!!!!!"""!!! ###$$$$$$%%%$$$"""!!!###############"""!!!!!!"""!!! """ """###""" """!!! !!!###"""!!! !!!######$$$%%%%%%%%%$$$###"""!!!   !!!   """###"""!!!"""3,!5.#5.#5.#2* 1(4+6-!6-!7.#5-"-&-&6.$70%3,!2*4, 5- 7."6."1)/'6."80$5,!3+ 7/$:2'70%.&3+ 81&81&6/$4-"3,!5-"4,"3+ 1)3+ 3+ 2*5-"6/$1(1(90%80$5-!;4(=5):2'6."7.";2&<3'6, 4)=3(>5)90$6-"90$:1%6-"8/#:1&90%8/#:1&90$8/#;2'8/#4*<2&:0$7."9/#4+=2%J?. #   - -0D00MLOA`bBnq@dn:cl4ae9@F!!!$$$&&&"""%%%&&&(((,,,222555777999688.CD6LP8RW5SX:^`1[X1WV4VT/PI - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  G<-<3&7."7/#=4(?6*>5);3':2&@7+@8+>6*;2&>6*@8,@8,;3':1%=5)@8,A9-<4(>5)A9-@7+;3'<3'>6*>6*>5)?6*?7+>5)=5)?6*@7+?7+A9-@7+>6*=4):2&;3'?6+>5)=4)>6*;2&;2&?6*?7*@8+?7*;3&;3%?7*>6)=5)<4(>6*@7,=5*<5):3'6."5.!5.":2&;4)91'7/%80%6.#7/$6.#5,!5,!3+3*2*4+ 5, 8/#8.&8.%6,"5+ 6, 6+5*8. 6,7- 8/!6, 4+2)-$+#)!'!  !% '",&-&0(3*!1( /&,$2* 3+!.'2*/'0(5-"5-"3*0'0'2)0(*##     -   - -       - -   +((J2%F/"N3$I1$A,C0$F/$A(?'<(5'8'<&0/// 1!1"/", (&%%#"!4 5 6 6 3  ' + -- . -- -- - -- -, -- -. . - -- -- -- -- -. . . . -. -- - - , -, -- / -/ -* -,.-,.. 7 - - - - - - - - - !!!!!!######$$$&&&%%%""""""$$$$$$$$$$$$%%%$$$###""""""""""""###"""######$$$###$$$%%%###""" !!!!!!!!!"""""""""  """!!!  """!!!  !!!!!!###$$$"""$$$$$$$$$%%%$$$#########!!!!!!###"""######!!!!!!!!!!!!""""""  ###$$$&&&###!!!"""%%%$$$$$$###"""!!!!!!"""$$$%%%###!!!"""###"""!!!!!!""""""!!!      !!!$$$%%%$$$$$$%%%&&&%%%$$$"""!!!!!!     !!!###"""!!!"""###!!! 5.#6/$6.$3+ 1(4+6-!5-!5-"3,!,$,%4-"6/$3+ 1)3+5-!7."5-!1)0(7.#80$3+ 2*5-"91'80&-%0(91&7/%2+ 1*2+ 4,"2+ 2*0(5-"1)2+5."5.#0(1(90%8/$6."<4(>6*:2&5."5-!90$<2'6,!4)>4)=4(8/#6-!91%:1%4+6-!:2&:1%80$:1%7.#4, :1&9/$2)90$9/$6-!90#5,90#D9*iY@&   *B/-QHHO`_6)@8,?7+=5(90$90$?7*B9-A9-<4(=4(@8,@7+<3(;3'=5)=5)<4(>5)?7+>5)=5)?6*@8,@7+A9-?7*=5(<4'91%;2&>6*=5);3'>5*;3'<3'?7*?7*A9,@8+;3%:2$?7*>6)?6*=4)?6+?7+=5)<4(:3'7/#70$81$;4(:3(6/$6.$7/$7.#6-"5,!6,!7-"5+ 3)3)8."7."6-"6,#7-$5+!4*6, 5+4*5+7-8/!8- 5+4+2(/&-$-%.&,%(!*#/(,&-'0)0)3+ 4+!0'-$+"3* 0)2* 2*1)0(5-"6.#3+ 0)/'/'-%(!$        - -        - -  I3&I1$R8'P6&I1#;&8$?( ?);&6%4&;'2 /0/0 0 3$5&-*(&&$$#!5 4 4 3 - ! ' * -, -- -- -, -, -- . . - -- -- -- -- -- -- -- -- -- - , - - , -, -- / -/ (/,,..@" - - - - - - - - - - - - $$$###$$$&&&(((%%%$$$$$$%%%$$$$$$###$$$###"""!!!"""""""""""""""###$$$$$$$$$%%%$$$!!! !!!!!!   !!! """ !!!###############$$$$$$""""""""""""!!!!!!######### """"""!!!"""######""""""!!!$$$$$$######"""###%%%$$$###!!!!!!!!!!!!###%%%%%%$$$###"""######!!! !!! !!!  !!!  """$$$$$$$$$$$$&&&&&&$$$###!!!!!!""""""!!! !!!!!! !!!!!!!!!!!!!!!!!!  !!!!!! !!!80%7/%3+ 0(3+5, 4+ 3+ 3+ +#+$3,!5/$3, 1)3+4, 7.#6-"2*1(7."80%5-"3+ 5.#7/$4,",$/(4-"5.#2+ 1*2* 3,!3+ 0(2*6.#2+4,!6.#7/$2)3*:1&80$7/#<5)>7+:2&5-!5,!90%;2&7-"6+ >4(?6*:2&6."90$;2&4+3+:1%91%80$:1%7/#4+80$90#/&<2&:1$7-!8/#5, 9/#<3%E9) ! -  '<' ;/+DOLHXXD_e,LO*8>NLN6US1W_:N^/MN8B?*35 - - - - - - - - - - - - - - - - - - - - - - - - - - -   D9*<3'=4(80$5, :2&@7+A9-<4(<3'@8+A9,?7*>6)@8+@8+>6)80#80#@7+B:-@8+>6)<4'?7+>6*;2&:1%>5)>5);3'=5)@7+?6*>6*>6*@8,?7+A8,>6*<4'<4':1%;2&>6*=5)<3'=4(;3';3'>5)>6)A9+@8+<4'<3'?7*?7+?6*=5)=5)>6+=5);4(;4(5."70$;4(=5)=5+80&6/$7/$80$6-"6-"8.#90$7."3)1'6,!8."7-"5+"5,"5+!4*6,!4+3)5+6,7-!7-!5,4+2(1'0'1(3+ 3,!1)1* 1*.(0)4,!3+5+ 5+ 2(,#/&2)4+!.&1)0(1)5.#5."1)0)/'.&,$(!&        - -        - 1/.K3%G0#R7'Q6$F.9#;$;%8%5%0$6&='2/02 2 2!4$1"+*++''$#!2 -2 -3 0 -) " ' -+ -- . - , , -- -. . -- -, , - -- -- , - - - - , ,, - -, -+ / -0 , % ),,--< - - - - - - - - - - - - - - - - - - %%%######$$$%%%&&&%%%$$$$$$###############!!!!!!""""""""""""###$$$$$$###%%%%%%###    !!! !!!!!!"""""""""######"""###"""######!!!###############!!!!!!###""""""###"""""""""###!!!"""######$$$%%%$$$!!!!!!""""""###&&&###$$$$$$######"""!!!!!! """###"""### !!!  !!! !!!!!!"""###$$$$$$#########"""!!!#########""""""!!!"""!!!""""""""" !!! """"""!!! !!!  !!! 6.$1)0'3+4, 3+1)3,!+$+$2+ 5.#3,!1)2*3+6."6."3*0(5-!80%6.#3+ 5-#7/$5.#,%.&3,!4-"4,"2+ 2+ 4,"4,"1*5-"80%4,!5-"80%:2'4+ 4+:2&80$7/#<4(=6*81%5.!5-!7."7.#7,!7,!>4)>6*90%4, 7."91%3*4+:1%:2&8/#:1%8/#3+:1%:1%1(<3&<3'7."7-"7-!:0%;2&>4&OB0  !   -%7!6%!==6=IE=3@0\_6bc %%% ###'''+++***...222666999:::;;;;=>&N\1)+>--?ML4[]9O`:JX9DI19< - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  RF5>4&;2&>5)80$5-!;3'?6*@7+;2&=4(@8+A9,?7*?7*A9,A9,>6):2%;2&?6*A9,?7*>5)<4'?7+?6*;3':2&?6*>6*;2&=4(@8,?7+>6*>5)?6*>5)@8,>6)=4(=5(;3&;2&=5)=4(;3&;2&;2&<3'>5(>6(@8*?7*;3&<4'>6)@8,?6+>6*<4(=5*=5):3':3'4-!70$<4(<5):3(6/$5-"6.#7.#5,!7.#8/#90$7."3*1'5+ 7-"7-"6,#6,"5+!5+ 4+3*2)5+6, 8."8."5+3)3)1(1'3*8/"80#3*2*4, 2*2*3+ 2*5+ 6,!5+ .%.%1)1)0)0)1)0)3,!4,!0)0(1)/'/(-&&         - -      - - -J3&J2$S6&Q6'N4%F-@(@';$6$."+"7'9(6$0/4!4"3!2!-)-.,+)&# //0 0 -/ - -% * -, -,- - -, -- -- -- -- -- -, , - ,, - , - - - +, - -- - -- 0 , %0(#,-./. 7 - - - - - - - - - - - - - - - - - - - - - ###"""###%%%&&&&&&%%%'''%%%$$$###"""!!!!!!"""######$$$$$$%%%%%%######$$$###    !!!!!!"""!!!"""######""""""$$$"""###""""""###$$$$$$$$$""" !!!!!!###$$$!!!""""""###$$$"""$$$$$$$$$%%%###!!!!!!#########$$$$$$ !!!###"""!!!"""!!!!!!###"""###$$$"""!!!!!!  """!!! !!!!!! !!!!!! !!!################## ###""""""!!!"""&&&$$$""""""""" !!!""" !!!!!!!!!"""!!!   !!!"""!!!2*0'2)4+ 5, 3+ 3,!-'*$1+!5.#3,!1)3*2*5,!5-"2)1(5-"91&4-"3+!4-"80&6.$-&0(5.#5-#4-"2+ 4-"6.$5-"3+ 5-"6/$3+ 3+ 91&;3(5,!5, :2&80$6/#;3'<5)92&5-!4+ 9/$:1%6,!7,!=3(>5):2&6-!8/#90%4, 7.";2&:1%80$<3':1%3+:1%8/"5+;2&;1%6-!7-!6,!90$;1%9/#D9)wdH  !   - 3&#5?4@C@8*1ZBPATU:`] $$$!!!###(((,,,,,,///222666999:::<<<>>>;@DA)$?,#>E<2^[,_^0WZ4OT&HJ - - - - - - - - - - - - - - - - - -  pVI>080#:1%?6*:2%7/"=5(?6*?6*;3'>5)?7*@8+?7*?7*A9,A9,?7*;3&:2%>6)A9,?7*<4'=5(@8+@7+;3'91%>6*>5):2&<3'@8,?7+>5)>6*>6*>6*A8,>6)<4'=4(;3&;2&=5(<4';3&;3&;3&<4&>6)?7)@8+>6):2%;3&=5)@8,?6*>6*=4)>6*=5)91%6."6."70#:3&<4(:2(70%80%90%7/$6-"7-"6,!7-"6,!4+3)5, 6-!7-"7-$8.$8.$6,!3)3*3*5+7- 8/"8/"6, 3)3)1'1'4+:0$80#2)2*6."4,!3+ 3+ 2)5,!7.#6-".%/%5,"3+!1)2)2*0(3*5,"2* 0(/(-&/'-&(!         -      - - -K3&H0#Q5%P4'N3&I0"E, D*!:%3",!."7%4%4$2!102 4!0,-2!3#1".*)#!--. . *! ' * + ,. -- -- -- , - -- -- -- , - -- , ,,- , ++- - -. - -- , + 4*$6/)-...20 - - - - - - - - - - - - - - - - - -   ###%%%&&&&&&&&&%%%%%%%%%###!!! !!!###$$$$$$###$$$%%%%%%%%%$$$$$$###"""   !!!!!!  !!!!!!!!! """############"""$$$$$$###"""!!! !!!$$$%%%$$$$$$!!!###### !!!""""""###$$$&&&%%%$$$$$$%%%$$$######$$$$$$%%%%%%"""!!!!!!"""### !!!###%%%###!!!""""""!!! """!!!  """%%%  !!!  !!!!!!!!!!!!"""###$$$$$$###$$$$$$ !!! !!! !!!######!!!"""### !!!  """######"""!!! !!! !!! !!!0'2)5, 5-"3,!,%)#1* 4-#3,!2*3* 1)4+!4,!0(/(4,"6/$2* 1* 1)7/%5-#,$.'4-"5.#5.#1*3,!6.$5-"2+3+ 3+ 0(2*80%:3(6-!5-!;2&80$6/#;3'<5)81%6/"8/#90$<3(8.#8-"=4(>5);2&7.":1%:1%4+5-!<3'90%90$;2&:1%5, :1%8/"6-!:0$8/#6-!8."5+ 8/#:1%7.!=2%C7'   " -  -+''-<,FOGC>B98?=WV2XR5EG!!!$$$(((,,,...///333666999999===>>>0'&9( A.!OPF5X[)[`7QPIA?0?>36 - - - - - - - - - - - - - - - - - - - - - - - - - - -  NC4C:-90$:2%@7*;3&80#>6)@8,?7+=4(>6*@8+@7+>6)?7*B:-B9-?7*<3&:2%>6)A9,?7*=5(<4'?7*@7+:2&91%>6*@7+8/#;3'@7+?6*=4(>6*>6*>6*A8,>5)<4'=5(;3&:2%<4&=5'=5(<4';3&;3%=5(?7)B9,?7*:1%;3'>6*@7+>5*<4(;3'>6*=5)91%5.!7/#6/":2&<5):2(81&91&91&8/$8.$6,!5+ 6,!5+ 5+ 4*5, 6-!7.#6-#6,"6,"5+ 3*3*2(5+7-!8."8."7.!4*3)3)2(5+90#8/#2)2)6-"5-"5-"5,!3*5,!8/$7.#0&2(5-"3+!0)1)0(.&3*4+!3+ .&,$,&-&.'+$         -    - - - -I3'J2%M2!N2"P4%M2%J0#F.!A*9$1"+!2". . /!2"3#1-00.2 3"3#5$0"-*'#,- . -/ @% # ( * + , - -- -, ,, - -. - - . -. -- , ,, ,++, - -. -/ / -- -*,6.))--./ -: - - - - - - - - - - - - - - - - - - - - - - - - -!!!%%%%%%$$$$$$%%%%%%$$$""" """$$$$$$$$$$$$$$$$$$###$$$$$$###!!!     !!!  """###"""!!! """""" !!!"""$$$$$$"""######$$$###"""$$$!!!!!! """!!!"""!!! """$$$!!!  """###%%%%%%$$$###"""$$$%%%###"""$$$###$$$$$$###"""$$$"""###!!!!!!"""###%%%&&&$$$""""""""" !!!""" !!!$$$  """""""""$$$$$$######$$$$$$!!!!!!  """"""""""""!!!""" !!! !!!!!!!!!""""""######!!! !!!  !!! 2*5,!6.#3,",&)$1+!4-#3, 1*0(/'2* 3+ /(.'4,"6.$1)2* 2* 6/%2+!+$.'4-"6.$6/$3,!5.#5.#3,!1)1*2+ 0(3+ :2';3(6-!6-";2'80$6/#;3'=5)81%5."7.#9/$;2'4*7,!>4)=4)91%6.":2&90%3*5- ;2&:1%:1%;2&7/#7.":1%:1$7-!8.#9/#9/$8/#6,!6-!:1%7-!8.">3$`P9  -   -  0@@4)5=2>66BAG5(:2%;2&?6);3&80#>5)@8+?6*=5)>6*@8+?7*=4(>6)B:-A9,>6);3&:2%>6)B:-A9,>6)=4(>6*?6*80$7/#=4(A9-6.!<3'?7+>6*<4(=4(=5)>6*A8,>6);3&;3&:2%;3&=4'=5'=5(;3%91$91$=5(<4'>6)@8,;4(;3'@8,?7+=5);2';3'=5);3';3'=5)7/#7/#:3';4(92'81&91&;2'<3(;1&:0$7-!6,!4*4*3*5+6, 6-"5-"4+!2)2)3)4+3)4+7-!8."7-!7-!5+4*3)3)5,8."8/#4, 2*5,!5,!5-"5,!2*4+ 6-"6-"0&2)5,"3+ 0(0)0)0(3*90&1).&.&-'-'-&*#         -     - - - J3&H0#Q5%O3#Q5%P5&J1#E. @)9$1"0"7$.,. /"1"-,13!113!00 1 -)(%#!! ,- / -/ /  -$ ( -* -, , , +++- - - - -- - . -. -- -- - ,, , - - / . -* - -* 0"60*,---. 6 - - - - - - - - - - - - - - -  - - -  $$$###$$$%%%&&&%%%"""!!! !!!""""""###$$$###"""""""""$$$### !!!!!!!!!     !!!""" !!!$$$"""######"""###"""""""""######$$$$$$###%%%$$$$$$###$$$###""""""!!!!!!!!! !!!!!!### !!!!!!"""###"""######"""###$$$###"""###$$$%%%###"""!!!$$$$$$$$$ !!!!!!!!!!!!######%%%$$$$$$###   !!!!!!"""###!!!!!!!!!!!!!!!###$$$%%%$$$###$$$$$$"""""""""  ###!!!"""### !!!!!!!!!  !!!"""############!!!!!!!!!!!!!!!!!! !!!!!!!!!"""!!!4, 5-#3,"-&+%3,"6/%1*/(,$-%0(1* /(-%4,#5-#2+!2+!1* 6.$2+!+$-&4-"70%92'4-"6/$5-#3,!1)2+3, 0)1*;3(:2'5,!6-":2&6."5-!;3'=6*91%6."7."8/#<2'4*5+ :1%<4(91%6-!:1%90$5, 6.":2&90$:2&=4(8/#7.":1%;1%7-!6, 8/#:0%8."5, 7.";1%6, 6-!7. B7'    -   );F'A*!N<>@BF8QS7^b8VY!!! """%%%***......000333777:::999>>>5335B'I5-CHJ5WZ+]\4TO42$,%## - - - - - - - - - - - - - - - - - - - - - - -  F;+@6(>5(<3&<3'>6)=5(:2%<4'?7*>6)=5)>5)?7*?7*=5(=5(A9,?7*=5(:2%;3&>6)B:-A9,=5(=5(@7+@8,80$7."=4(@7+7/#<3'?6*?6*=4(=4(=5)>6*@8,>6)<4';3&;3&=5(?6)>6(<4':2%80#91$;3&91$;3&A9-:2&;4(?8,=6*;3'92&:2&;3'91%:1%=4(8/#90$=4(=6*<4)91&80$:2&<2(6-!6, 6,!5*2'2(3*5+ 5+ 5,!6-#7.#5,!5,!3)6,!5+5+7-!8.#6- 6, 4*4*/%1'6- 8."8/#5-!2)4, 5-"6.#7/$4+ 4+ 5,!4+ 0'1(3+ 2*0(0(1*.&2*5.#3* /(.',&-'.'*$        - -     -   H2'I2%O5%Q6&P4$Q6&P5&I0"E- @):%4#0",-0"/"0#+(-2#3"2!3!2 1 /.+)'&&$"!- . -/ / (  & -* -+ ,,++, - ,,- , ,. -/ . . -. -- -- - -,- . -- , ** -4*$60*--, / -+0 - - - - - - - - - - - - - - - - - -  - - - - - - -"""$$$%%%%%%$$$###"""  !!!"""!!! !!!### !!!    !!!   !!!""" !!!"""### !!!"""$$$$$$#########"""!!!!!!"""$$$$$$#########%%%$$$%%%&&&%%%$$$%%%$$$"""!!! !!!"""""""""  !!!!!!"""#########$$$###$$$###""""""!!!!!!!!!$$$%%%"""$$$######  $$$$$$######### """  """ !!! """!!!!!!!!!!!!"""###"""!!!"""###!!!$$$$$$### """$$$###!!!!!!###"""######!!!###!!!""""""!!!###!!!!!!  !!!###$$$$$$$$$!!! !!! !!!""""""!!! """###!!! 4-"3,"-',&3,"70&0).',$.&0'0(/'+#3+"5.$0(.'2* 6.$1* ,%-&3,!5.#80&4-"6.$4-"3+ 1*3+ 5-"1)3+ :2':2&5, 5-!:1&5-!4, :3'=6*:2&5-!7.#90%<2'5+ 9.#>5)>5)91%5-!8/#90$5- 7.";3'80$90$>5)91%7/#;2&<2&4+5+90$9/#7-!4+8/#:1%6, 7-!6- >4%OB1 -     - 28"<#D%#9+-9MO>^b?UY"""!!!$$$&&&+++......000444999:::999>>>5)$7#D+F4,6)?7*:2%;3&@8+?7*>6)>5)?6*?7+=5)=5)@8,>6)=4(:2%=4(?7*A9-@8+;3&=5(@8,B:.:1%7/#>6*>6*91%;3'>6*@7+?6*>6*>6*=5)>6*>6*=5)=5(<4'<4'>5(>6)<4'<4':2%91$91%80$:2&C;/=5):3'=6*=5)92&91%:3&=5)=5)=5)>5)6."6.";3'>7+>7+92'6."80%90%9/$9.#5+ 2(2'1'3)6, 6,!8.#8/$7.#3* 5,!1(5+ 5+5+6-!9/$8.#7-"4*3(0&1(5,5, 6-!4, 2*4, 4,!6-"80%6-"5,!5,!4+ 1(0'2* 3+ 2+0).'+#3*2* 1*/(.',&+%,%(!        - -     -I2&G0#N4%P5&O5%M3#M3%H/"D, @)8$4#/!-0"1$1%."$&+0".-/1!4#2!-+)('('$" . -/ .- &  " ( -+ -, - -,- - - ,- ,,- -. -- -- . -. -- - ,,- . -. , , + -,6/*(-./ 0 -9" - - - - - - - - -  - - - - - - - - - - - - - -$$$$$$%%%%%%###!!!!!! """  !!! !!!  """  """###""" !!!!!!!!! """$$$$$$%%%%%%###"""""""""!!!""""""###$$$#########%%%%%%&&&&&&%%%%%%$$$$$$$$$###""""""###"""!!! !!!!!!!!!!!!######%%%%%%%%%%%%###!!! !!!!!!""""""$$$"""###!!! !!!!!!!!!###$$$###$$$###!!!!!!!!! !!! !!!""""""!!!!!!!!! !!!"""###"""""""""$$$$$$###""""""###### """######""""""$$$$$$$$$######%%%###!!!!!! """######$$$%%%  !!!!!!""""""  !!!!!!!!!!!!""" 3,"-'+%2+!5-#/(.'.&0(0(0'/'*"2*!4,#0) .'1* 6/%2+",%,%1*3,!5-#4,"5.#5-#3+ 1)3+ 6.#3+ 4-!;3(:2&5, 5-!:2&5."3+92&=6*:3'6."6-!90$;1&6+ :0%>6*=4(90$7."90$91%5-!7.";3'<4(91%:2&8/#8/#:1&:1%5, 7.";2&7-"6-!5, 7.";2&9/#8."5,8/!G<,lX>    -  -*<*<#E$!<""0.+BZ[>^_>MO!!!""""""&&&'''+++...///111666:::::::::?>>@61E1"J1 D835IO)X\5VZ=??5(%$"" - - - - - - - - - - - - - - - - -  H;-@3'>5)<5(;0$;/#>7+?8+;1%;1%?8+@8+>6)>5)>5)=5);3'=4(A9->6*<4(91%=4(@7+A8,>6*;2&=5)?7+A9-:2&7/#?6*?6*;3';2&>5)@7+?7+?6*?6*<4(<4(?6*?6*>6*<4':2%=5(>6)<4'?6)<3'91%90$:1&:2&A9-=6*80$:3'=5)92%91%;4'=5)=5)=4(<3'6."6.";3'>7+>7+92'5-"7/#6,!5+ 6+ 4*1&.$.$0&5+6-!90$8/%90%8/%3*4+ 6-"5,!4+6,!7-"7-!7-"5+2(0&2(7-!7."7."4+ 3*4, 3+3+ 7.#4+!5,!5,!4+ 2)1)4-"3,!1*1*3+ ,%1)3,!/'0(/(,&+%+%'!        - -    - -F1'H1%O8)M5%K2#I0!G.G/ E. @*<&3!2!2!+-1$0#, %'-, ,-/ -0!1!*(++))'%! / 0 / --* -$ ) * , -,,- - ,-- - - ,+- - - - - ,+,- -- -- +- -(/ 91--./ / - -6 - - - - - - - - - $$$$$$###"""""" """!!!!!!!!!!!! !!!!!! !!!"""""" """"""######$$$###"""""" !!!$$$$$$%%%&&&$$$!!!"""######"""""""""###$$$$$$$$$$$$%%%%%%%%%%%%###$$$%%%######""""""!!!###"""  ###""""""!!!"""$$$$$$%%%$$$%%%%%%"""!!!"""""" !!!######""" !!!""""""$$$######"""$$$$$$$$$###!!!"""  """!!!!!! !!!!!!!!!!!!!!!!!!""" #########"""$$$"""!!! !!!""" !!!#########"""######!!!###%%%$$$###!!! """ !!!"""$$$$$$$$$$$$""" !!! !!!"""!!!"""!!! !!!!!! !!! *$3,"3,"/(/'.&/&.&/'-%*"1) 5.%2+"1) 4,#5.$/(,%+$0)5.#6.$5-#6/$70%4-"2*4,!6.#4,!5-";3(:2'5, 6-";3'6."3, :2&=5):2&7/#6-":0%;2&6+ ;0%>5)=4(90$8/#;3';3'6-!8/#<3';2&:1%:1%:1%8/#;2&;2&8/#90%;2&6-"7.#6-!5,!:1%8/#8/#5,8/"@6)C7'   -  4;9<& 160@WW;YZ&9: ### $$$'''(((+++---///111777:::;;;<<<=;;=0&;#B)!B5;9JS1Y^5W[=>?6*" - - - - - - - - - - - - - - - - - - - - - - - - - - YK9B7)<1%<4';4&9/#;.#=6*=6);0%:0$>8+?7+?6*?6*@7+>5)<3'?7+A8,?7+<3'91%<4(?7+?7+=5);3'<4(@7+A8,:2&7/#>5)A8,=5)<4(>5)?7+>6*=5)>5);2&;3'=4)=4(<4(;2&:2%>6)?7*<4'?7*<4';3'<4(<4(:2&>6+=5*91&:3';4(:3&:3&<5'?6*>6*<4(;3'80$80$;3'>7+?8-;4(5-"6-"6+ 6,!6+ 3(0%/$0&0&5+6, 7.#7.#8/$6-"2)4+ 5,"6-!6-!7-"5+ 4*5, 7-!4*2(3)4*6, 6."3*1(4+ 4+ 3+ 7/$6-"7."8/#6-"3*3+ 80%6/#2+2, 4-!.&0(/'2+ /(.'/)/) ,&'!        -    -   G1&F0#K3$K4%H1"E. E- E- C+>(:$6#3"2!2#/ /!- )*++/"- ,. -,*'()+,*($    0 . --,) & * -, -. -,,,,,- - - ,- - - - - - ,+,- , ,+*)',+#-./0 -- 1 - - - - - - - - - - -  """"""######!!!  !!!!!!!!!     !!!!!!!!!""""""%%%%%%$$$$$$###"""!!!!!!"""""""""$$$%%%$$$""""""######""""""""""""###$$$$$$%%%%%%%%%%%%%%%%%%$$$$$$###!!! """######""" !!!!!!""""""######$$$%%%%%%%%%$$$###""""""!!! !!!###### """!!!""" $$$###"""###""""""###""""""!!! !!!"""!!!""" """###""""""""" !!!!!!###!!!!!!"""  """""""""""""""!!!"""!!! !!!$$$$$$###""" """!!!!!!###$$$$$$###$$$""" """$$$"""###!!!  !!!!!!!!!!!!!!!  !!!!!!3,"3+!0)/'-%.&/'/'-%*"2*!7/&5-$2*!3,"6/%0()!*#/(5.#6/$3,!4-"7/$6.#3+ 3+ 4-!4,!5."<4):2&4+ 6-";3'6."5.";3'=5)92&80$7.":1%;1&5*9.#>5)=5)91%8/#;3'<3'7/#90$;2&:1%80#:1%<3'90$=4(<3'7.#8/#;2&6-"6-!4+ 3*6."6.":1$6-!7.":1$@4&[J6       010'C726RN8+?8+?6*?6*@8,>5)<3'A8,A9-?7+;2&91%<4(>6*>7+?8+;4(=6*@9,@8,<4'91%>6*A9,>5)=5(>6*?6*=5)<3'=4(:1%<3'=4(<4(;3'90$80$>6)?7*=5(?7*<4(=4)@8,@7,<4(>5*<4)91&;3(:3'91%70#;4&>6)>6);3':1%80$80$;3'=6*?8,;4(5-!5-!6,!7,!5*2'/%0%2'1'5+5+6-"7.#7.#5,!2)2)5,!6-"5,!6-!5, 3*5, 6, 5+3)3)4+7."90$4, 0'3*4,!3+ 8/$7.#8/$8/$6-"1(4+ 92&81%0*2,5."/'1)3+!/(/(.(/* .(+%&!        - -  -    C1'G1%H0"J2#J3%E/!B,C- B+?(='9$9%7&3!2!4%3$ *(*. ,),-,)''''),,)(#     . -. -,$ # ) , - -- +,- ,,- - - -- -. -- - ,- -,,, - , , +++(( %2*&../0 ,+ - - - - - - - - -  $$$$$$$$$"""  !!!"""!!! !!!  !!!"""###""""""###$$$#########"""!!!""""""""""""######"""!!!!!!!!!"""#########%%%$$$%%%"""%%%&&&&&&&&&&&&$$$###$$$###!!!"""######"""!!! !!!!!!"""###!!!""""""$$$$$$$$$$$$###"""""""""######"""!!!!!!###$$$$$$######"""###!!!"""#########""""""$$$""""""!!!!!! !!!"""!!! """""""""!!!!!!"""### """$$$#########"""""" !!!"""######!!!### ###############"""""""""###%%%$$$$$$######!!! !!!######"""!!!   !!!!!! !!!!!!"""!!! !!!!!!!!!!!!3+!1)-&-%,$/'/'-%-%3,#7/&4,#1*!4,#70&1* *"+$/'4-"5.#3+!3+!5.#5-"5-"5-"5."3+ 6.#<4);2'3*5-!;3'6/#6/#;3'=5):3'80$6-!8/$:0%4)8-">5)>5):1&90$<3'=4(91%91%;2&:1&8/#90$;2&90$?6*<3'4+5, ;2&7."5,!3*3*8/#8/#:1%7/":1%<3';0$C7)  - -   - -**&=9?6KM/YV0TQJOTI:BPKM### """&&&)))***---...111333888======EEE>6,@.!>&H2+<@@&RQ*SP.D:,=3'<1%<4'=5(:/#;0$<6(<4'9/$90%>7*?7+?6*?7+@8,<4(91%@7+A8,>6*;2&:1%=4(>6*=6)>7*;4(=6)@8,A9->6*<4'?7*@8,=5(=5(>6)?6*=4(=4(>5*:2'<4)>6+=4)<4(91%90$>6)?7*>5)@8+<4(<3(@8-@8-=4)=5*;3(80%:2'81%80$4- <4'?7*?7*;3&91%80#80$<4(>7+>7,92&7.#7.#7,!8-"7,!3'0%0&1'1'3*4+2)6-"6-"3*1(1(3* 4+ 4+ 6,!5, 4*5+4+3)2(3)4+6-!90$7.#3*6."5-"2*7.#6-!6-"7.#5,!1(4, :3'92&1+2+4-!1)0(1).',%.(.).)*$'!        - -  -   E1&F/#J0"L3%I2#A,?+A+ ?)<&=(;';'6$12!2"0 )+.++- ,++*%$(***,+$"  !     . . -. -. -- >  % -* , , -,,- - - - - - - -- ,,,,,++, ,,, ++,*+ -*0(%+.../ 6! - - - - -"""%%%$$$###  !!!  !!!  !!!!!!######"""$$$###"""""""""!!!###"""$$$#########""" !!!###""""""###%%%&&&############%%%%%%&&&&&&%%%###$$$$$$$$$!!!"""""""""!!!!!! !!!"""###$$$###!!!"""%%%$$$$$$###"""!!!!!!#########$$$######%%%%%%$$$$$$$$$$$$###"""!!!!!!#########"""""""""""" """""""""!!!   !!!!!!!!!######!!! """"""######$$$$$$$$$######$$$###"""###"""###$$$######""""""###"""###$$$!!!!!!######"""######$$$$$$$$$%%%$$$""" ###"""!!!!!! !!! !!!!!!"""""""""!!!  """2* 0(.'+$/'/(+$+$1*!4,#2*!0(2+"5.%3,",%,$0(2* 4,"2+ 3+ 6.#5-"7/$90%7/$0(3+ <5)=4)3*6-!;3'7/#6/#:3'=5);3'7/#5, 7.#9/$5*8-"=5)>5):1%90$<4(=5):1%8/#;2&;2&80$8/#91%8/#>6*;2&2)3*:1&6-"4+ 3*3*80$8/#7."5- ;2&>4(9/$=2%F:*    -   ! )**97;DDJ>NP4YT;cZLZVZPQJDE!!!$$$ ###'''***,,,...000222444888>>>@@@ECCE9-D-E1#C855AD/JL/NL*2-,&  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - nZAD8*@6)>3':0$=4'>6)<1%<2%<5(=5);1%:1%=6*?7+>6*>6*?7*:2%90$@7+@8,>6*<3':1%<4(>6*=5)=6);4(=5)?7+?8,=5);3'?7*?7*<4'<4'>6)>6):2&;3'>5*:2'<4(?7+>5*=5)91%91%>5*?7+<4)@8-=5*=5)@8-@8-=4)<4)<4*:2'91&7/#81%4,:3&>6)>6);3&:1%90$90$<4(>7+?8,81%80$8/$7-"8-"6+ 2&0%1'2(2)3+4,4+ 6."5-"1(1(2)3*4+!4+ 6,!4+5+ 4+5, 3)1'2(4*4+6-"5,!2)6-"6."3+7.#5,!6-!7.#4+ 1(4, <4(81$2+0)2+0(/'1)/'-&.'.)+%*%$%          -  -   C0'F1%K1#I0!H0!G/ B+@+<(;&<'=(=)<)9%1,-,,/0 .*-/!-**($$*.",*&    !##          . -. . -. * - & -* , - -, -- - - -, , - - ,,,- ,++,- ,+, ,++++( *0(%-.//- 2 - - - - -  - - $$$###!!!     !!!#####################"""######""""""!!!!!!$$$"""!!!######""""""$$$$$$###$$$###$$$%%%%%%%%%%%%###""""""$$$######"""""""""!!! !!!$$$%%%"""!!!######"""!!!""""""############$$$%%%###$$$%%%&&&&&&&&&%%%%%%######"""######!!!"""###$$$""" !!!###"""  ###""""""$$$$$$"""!!!"""######""""""######!!!"""###$$$$$$############"""$$$##################!!! ###$$$$$$$$$"""###$$$%%%$$$"""""" !!!""" !!!"""!!!!!! !!! """######!!!%%%### !!!  0(/',$.'0)-%,$2*!5.$4,#/(2,"4-#1*!,%-&0)5.$80&4,"5-"80%7.#7.#90$8/$3+5-!=4(<4'4,4, :1&70$6/#92&<4(:2&7/#5, 8/$:0%5* 7."=4(>5)91%7/#;2&<3'90$7.";2&<3'90$90$90$6.":1%90$3*3*8/#3+3*3*4+80$8/#6."5-!8/";1%9/$7,!?4%kW?       -!#"0-084::EG?URDaY=UK9C:>74 ###!!!$$$(((+++---000111333666999>>>EEE?<;;#@&B00B7=5>B(KK-OO.2,, - - - - - - - - - - - - - - - - - - - - - - - - - - - D8)?4'@7*>4'8.!=4'?7*=3';2%<5(>5);1&:1%=5)?7+>6*>6*=6)91%:2&A9-?7+=5)<3':2&<3'>6*=5)=5);3'=5)?8,?7+<4(;3'@8+@8+;3&;3&<4(=4(80$;3'=5*:3(;3(=5)<4(=4)80$91%>6*>6*;3'>6*<3(<3'?7+@8,=5);3(;4)92':2'92&5."81%;4'=6*=6);4';3&91%8/$=4)>6+?8-:2&91%:1&;0%;0%6+ 2&0%2'2(3)4+3+5-!4, 4,!2*1(1(1(4+ 3*5,!3*4*4+7-!4*2(3*5, 4+ 6-"3+/&5,!6-"5,!6."3*4+ 7.#5, 1'2*:2&4-!/(-&0)0(0(2+ 1* /'.'.(.(*$'"%        - -  -   -E1&E/#I0"I0#G/!E-C,C,<'7#:&<(<'9$3 0,)).-0-0 0!0!/ . . +*$&*+'"   "%#!        -   -   . . - -, & " ( -* , - -- - -, -, , - -, ,,- . -. -- ,- - -*+, - , +++* ( -/$ 4-*-// / , / - - - - - -   - -###!!! !!!  """"""""""""""""""############%%%$$$###!!! """$$$###"""###"""###$$$$$$###%%%&&&$$$###$$$$$$&&&###""""""###$$$#########!!!!!!  """""""""###$$$###""""""$$$$$$###$$$######%%%&&&$$$%%%&&&%%%%%%&&&%%%%%%!!!"""!!!!!!"""!!!"""$$$$$$!!! !!!!!!""""""!!! !!!###"""$$$%%%$$$"""###%%%$$$!!!!!!######!!!"""###$$$######$$$######!!!$$$$$$"""$$$######"""""""""!!!###%%%&&&%%%$$$###$$$&&&$$$!!!!!!!!!!!!!!!############"""###!!!!!!!!!"""##################  !!!""" ###.&.&0(-%+$1) 4-$2*!.&2+"5.$1* +$,%1)5.$6.$4,"6.#80%7/#7.#8/#7."3*6-!<4(;3&5- 5, 91%70$6/"92%;4(91%80#7.":1#<2%7- 8/"=6)=5)80$4, 91%;3'91%90$<4(;3'80$:1%80$4, 8/#90$4+3*5,!2)2)3*3*90%8/$7."7."80#:0%9.#7-!:/#B5'    -  1,/<5:D>CEMMXe_bh``ZTePLTIE!!!$$$"""%%%***,,,---000111444777:::>>>JJJC:1<) G-+=376;;)A@"CB6B>/!044 - - - - - - - - - - - - - - - - - - - - - - - - - - - hWB@5';2%@7*>4'5+=5'?7*=2&:0$=5(>5);1%90$<4(?6*=4(=6)<5)81%:3&@8,@7+>5)<3':1%<4(?6*=5)<4(91%<4(=6*>6*;4(;3'@7+@8,;3&;2&<3'=5)92&<5)=6*;3(<4)<4(;3'>5*:1&90$=5)=5)<3(=5)=5)=5)?7+?7+;3';3(<4)80%91&;4'92%92%92%<5)>7*<4(:2&8/$6-"=4)?7+A9.>5*:1&7."8.#:0%5*1&0%2'2'3)5,4+6-!5,!4,!3*2)2)3* 3* 1(3* 4+2)4+7-!3)1'3)4+4*6-"3+1)6-"5-"6-"6."3*4+ 6-"5, 2(2*7/#5/"1+.'0(2)2)3+!1* .'-'/),&-&$"        - -   -   B0'F1%D."F- I0#I0$H/"E-B+:$8#;&;&;(=)4!-,,.2 3!0/1 2!/./0!.++(''%   """!   -         -      . . -- -* ?! ! & ) -- -. -- - - -- -, -, , , - -. -. -. . -- - , +, - , , ++, -* -*2,)4.*../ --6$- - - - - - - - - - - - - - - - - -  - !!!!!! !!! !!!  !!!######""""""###$$$###$$$###%%%%%%&&&$$$"""%%%$$$%%%$$$$$$$$$"""$$$$$$%%%%%%$$$$$$######$$$%%%&&&######$$$###$$$%%%$$$$$$"""""" """$$$$$$"""$$$%%%###"""$$$$$$%%%%%%######!!!%%%%%%###$$$&&&$$$%%%&&&%%%$$$###!!!""""""$$$###"""$$$"""!!!!!!!!! !!!"""!!! """"""$$$%%%%%%$$$&&&&&&%%%""""""###"""""""""###$$$$$$$$$$$$%%%&&&$$$###$$$%%%%%%$$$$$$###!!!###$$$!!!$$$%%%$$$$$$###$$$'''%%% """ !!!"""!!! """!!!!!!!!!""""""!!! ###$$$"""!!!!!! !!!  $$$"""0)1) -%+$2*!70&2*!/'2,"6/&2+!-&-&3+!7/&7/$6.#8/$8/$7."7.#8/#6-!3*6.">5);2&6-!5, 80$70$6/#:3&=6*:3'80#8/":1#<2%8. 91#?7+=6*80$1*81%:3'80$7.#<2'=3(;1%:0%:1$5+90$;2&6-!4+ 6-"2)4+ 2)3*:1%8/#6-!7."8/";1&8-"8-":0$=1$YI6    --/?9=H=@OEE[PK`JCJ/*G+&OD@### ###&&&+++---...111111444888:::CCCJII@8.L1(T*'F035>?0A=3A?550$9;: - - - - - - - - - - - - - - - - - - - - - - G;-;1$90#?5(=4'5,;2%@7*:1$9/#=4(>5):1%80#;3&=5(;2&:3';4'92%:3&?8+@8,?6*:2&:1%=5)?6*=4(;2&8/#;3'<5)=6*<4(:2&>5)?6*:2&<3'=4(?7+<4(>7+=6*<4)<4):2&:1&=4(91%7/#<3'=4(;3';3'<3';3'>6*@7,=4);3(<5*91&92&;4(:3':3';4';5(=6*:3&7/#6-"5,!;2(?7,@8,<4)91&7.#7-"7,!4(2&1%4(3(4)4+6-!5,!3+ 3*3+4, 4,!5-"4+!3* 4+ 4+ 1(5, 8.#5+1'2(3)4+7.#3+2*3*5,!7/#5-!3*4+6-!5+2(2*5-!5."2+-&/'2)2)2* 2+!.'-'+%.(,&%! -       - -    -  E1&E/#L2&I0#H0#H0$H0$F."@)8":$<'<'9%6#0*,/4"6%5#5$4"1 .+,,---. +(&#   !!          - - - -         . -. / - )  " '+ - - - -. - -, , , - -- - - -- -- -, ,- - - ,, , -, ++ (( ,5-&.-.-*2,  - - - -    ######!!!    !!!!!! !!!"""######%%%$$$$$$$$$&&&%%%&&&$$$%%%$$$###$$$%%%&&&%%%%%%%%%$$$$$$%%%%%%%%%$$$$$$#########$$$$$$###$$$$$$###$$$###"""$$$""" !!!!!!$$$%%%!!!$$$%%%$$$###$$$######%%%$$$###"""###$$$###$$$$$$$$$%%%&&&%%%$$$"""!!!!!!#########!!!###"""""""""""" """###  !!!###""""""###"""###$$$######""""""!!!!!!"""$$$######!!!"""%%%&&&&&&%%%###$$$%%%%%%%%%$$$!!!"""$$$###"""###&&&%%%###"""###%%%""" !!! !!!!!!!!!  !!!!!!######$$$"""!!!"""%%%"""!!! !!!!!!!!!!!! $$$$$$$$$2+!,%+$2*!81'2+!.'1* 5.%2,".'.&4,":2(92'6/$8/$91%7."6-!6-!5,!2)5-!<3';3&6-!4, 80$70$6/#:3'>7*:3'80#80#;2%;2$5+91#?8+>7+70$1*70$;4'80$7."<2'=2';0%:0$;1%6, 9/$<2'7-"4+6, 2(7-!5,!5, 90%6-!5, 4, 5, =3'7-!8.#<2&9/#C7) - - ##,856:8@..B&%J0*M3(I.#A+" $$$ !!!###'''+++...///222333555888<<8?5=H.BE4FE3><''' - - - - - - - - - - - - - - - - - - - - - - - - ]O;C9+:1$:1$@6)=4'7/!=4'A8+:2$90#=4'>5):2%7/"91$:2%;2&92&92%92&:3&>7+@8,=5)90$:2&?6*?6*<3':1%7-!;2&=6*>7*<4(:2&?6*@7+;2&;3'=4(?7+<4(?7+>6*<5)=5)=4(=5)=4(91%80$<4(=4(:1%:2&<3';2&=5)?6*<3':2&=5):2&<4(=6*:4'92&:3':3&;3'70$6."5-"5,!:1'?6+>6+;2'8/$7.#7-"5+ 3(2&2&5)5+5+ 5+6-!6-"5-"5,!4+2*2*5-!4+!4+!5,"4+!0(4, 7/"4,1)1(2)4+:0%5,!1)3*4+ 6."5,!5, 5,!6."6, 0&0(6."70#3,/'2*2)1(2)2*!.'/(+$.'.''!!        - -   -  F1%D."F,!G.!G/"H/#G/#D-!>':$<&;&9$6!0,*' /8%6#5$4#7$4"0 -,+-.+-+(&# !      - -     - -   - -     . . . -+ ' -" % (, . - - -, -, , -- -- -- -- - . -. -, +, - -. -- -, , -, -, +)) -'-!5-%---+* 1     - ###   !!!   !!!  !!!"""###%%%###"""###%%%$$$$$$$$$"""$$$%%%%%%%%%%%%%%%%%%%%%'''$$$$$$$$$$$$$$$$$$######$$$$$$$$$$$$%%%&&&$$$$$$###"""###!!! """!!!$$$%%%###$$$&&&&&&$$$$$$$$$""""""###"""""""""!!!###$$$%%%###$$$$$$###$$$"""!!!###%%%$$$$$$###""""""""""""""""""### """!!! """!!! """###%%%$$$"""!!!!!! !!!######"""""""""$$$%%%%%%######$$$%%%%%%$$$###"""######"""###$$$&&&$$$"""""""""%%%###!!!!!!###### """"""!!! !!!"""$$$###$$$$$$"""""""""$$$### """!!!""" #########$$$-%)"3+"80'2+!/'2+!6/%5.$.'/'5-#91'91'7/$7.#80$7.#6-"4+ 4, 1(4, 91%;3&6-!4, 91%70$5.":3'>7+:3'6/"7/";2$:0#2)80"?6*<5)7/#2+70$;4(91%80$=3(=2':0$:0$;1%7-!8.#;2&7-"4*5+ 3)7-"6-!7."90%5, 4+2)2*=5(5- 8.#;0%8-">2&F9+    -)&.:434.:'!="G,"G/!A,B/""!$$$!!!"""$$$(((,,,///000333444666999AAALLL?::5;-;6(F?47=8.DF'GJ->?) ./- - - - - - - - - - - - - - - H=->5';2$<2%@7*<3&90#>4'?6):2$90#=3'>5)92%6.!90$;2&;3&:3':3&:3&:2&=6)>6*<4(8/#91%@8,?7+:1%90$8."<3'>7+=6*:3':2&>6*@7,;2&:2&<4(>6*;3'>7*>7+=6*>6*>6*>6*<3'91%80$<4(=4(;2&;3'<4(;3'=5)=5):2&<5)?7+92&;4(>7*:3'81$92%81$92&7/$8/$6.#6-#:1'=5*=5*:2'7/$6-"6-!5+ 3(0$/#3'5+ 5+4*5, 7.#5-!4, 1)0'1(6."3* 2)3+ 3+ 1)3+5- 5, 1)4+1)5+ ;1&5,"2*3+ 3+ 3,!5."5,!5-!6-!6, 1'0(6."7/#2+.&2*2*1(6-#2* /'0)-'-&,&'!$        - -    - - D0%F0#M5*G.#E, F.!E-!C+B+=&=&>);&7"3-+*-2"1!1 2 4!3 0.-/-+--++*)" -  !!              -  - -      . - ,. #  # ' * -- -- - , -, -- -- - - -, - -- -- -. -, , - -- -- -, -, -, + + , , ) ' 0#5)!-,,. )0&        """ """### !!!!!!!!!!!! """&&&$$$###%%%&&&&&&$$$&&&$$$$$$$$$&&&&&&"""###$$$$$$$$$$$$######$$$$$$%%%%%%%%%%%%$$$$$$$$$&&&%%%$$$%%%%%%###$$$### """""""""###"""$$$&&&$$$$$$&&&'''%%%######""""""""""""$$$##################%%%%%%###$$$###!!!!!!###&&&%%%%%%$$$$$$###"""!!!""" """ !!!"""###%%%$$$###"""!!!  !!!$$$"""%%%$$$###!!!###$$$###!!!"""$$$%%%%%%%%%###"""#########"""###$$$$$$""""""$$$&&&$$$"""!!!"""$$$!!! !!!  ###"""!!!"""""""""###!!!%%%$$$ !!! !!! %%%""""""######)!4-#70&3+"0(3,#70&5.$0)/(3,"7/%92'80%7/#7/$6-"6."4+ 3+1(4+91$;2&5, 3+:2&70$5.#:3'?7+:3'6.!6.!;1$:0#2(7.!<4(;3'6/"2,70$;4'91%90%>4)=2':/$:0%<2&8."8."<2'9/$4*5, 5, 8.#8/#6-!8/$6-!4+ 3*1)<4'6- 8.#:0$6, 7-!@4'eT= -  (,'%#<2)?,#B*M3'H. M, Q:1  """###%%%)))---000000333555777:::EEEONNED@A71A2+B816B?)JJ*CD;415.0, - - - - - - - - - - - - - - - - - - - - - - - - - MA0C9*>4&<3%=4&@7*<4';2%>3'?6);4&:0#=2&=5(:3&8.";1$=4'=5(=6)<5):3':3'>6*>7*<3'8/#:1%B:.?7+;2&7."8/#<4(=7+<5);3';3(=4)@7+<3'91%>5)>6*<4(=6)>7+=6*?7+>6*>6*=5(;3'80$;3'>5)<3'<4(;3'91%<4(=5)=5);4(?8+:2&;3'>7+:4'70#70$6/#91&91&90&7.$6-#:1'>6+>5*;3(7.#5,!5, 6+ 5)0$-!1%5*5+ 4+5, 6."5-!5, 2*1(0(6-"5-"3* 3* 1)/'1)3+3+3+3+2)6, 9/$7.#4,!5-"3,!2+ 3, 4+ 5, 5, 6+ 1(2*7."8/#4+0'4+ 5,!0'5,"3*!1)0)/(.',%+%(!      - - -   - -F0$E/"H1&I0%G.#F."C+@)A*?(='<'<'6!0.--16$3".-130-+ * ..--+*)'!          -   -               , ,,, ,  $( + -- - - -- - -- - - -. -- -. - -- -. -, . -- -- -, - -, -+ -, , -- * -( $  +--. -. 4"..(%5      !!! !!!######""" !!!"""###""""""###"""!!!!!!"""$$$$$$###$$$%%%"""$$$'''%%%###%%%&&&'''$$$"""$$$$$$$$$$$$%%%%%%%%%&&&%%%%%%%%%%%%$$$###$$$%%%$$$$$$%%%$$$$$$$$$!!!!!!"""######"""###$$$$$$###%%%$$$$$$$$$###!!! !!!###$$$""""""""""""$$$$$$%%%%%%%%%$$$"""""""""###$$$%%%###"""&&&$$$######  !!!"""###%%%$$$###$$$### !!!""""""!!!!!!%%%%%%###""" !!!%%%$$$&&&(((%%%$$$&&&######""""""$$$%%%###$$$&&&'''%%%###!!!!!!###""" !!!  """!!! !!!""""""""""""$$$###!!!$$$!!!!!!"""###$$$###$$$3,"6.$3+"0) 3,"6/&4-$0)0(3,"80&92'7/$8/$80$7."6."6-"6-!4, 5-!:1%;2&5, 2*:2'70$5.#81%>6+;3'7/#7/"<2%:0#2(6- ;3':3'6."2+70$;4(:2&90%>4)<2'9/$:0$<2&9/#8/#=3(;1&5+ 6,!6-"7.#7."4+6-"4+ 4+ 3*5,!<3'6-!7-!8.#6, 9.#:/#?5&    - 583.*#9*"<(K/&U,%T+$O.'R>:  !!!######$$$)))...111000333555888???JJJMLKO36F)'?'$@?:;DA2GC0??0.3& - - - - - - - - - - - - - - - - - - - - - - - - - - xfJG<,>5'>4'=3&<3%>5'<4&;2%=2%>5(<5':0#<1$=5(;4'9/#;1%>5)=6)?8+=6)92&<4(?7+?7*;2&80$:1%B:.?6*;2&6-!90$<4)=6*:4(93&;3'>5)@7,;2&91%=5)>5);3';4(=6*=6*@8+>6*>5)=5(=4(:2%<4'>6)=5(<4'<4'91$:2%;2&;2&91%?7+:2&:3&>7+;4'70$70$6/$7/$91'8/%8/%4+!80%>5*>5*;3(6-"4+ 5, 8-"8-"3'/#0$4)6, 6-!6-!5-!4+ 4, 3*2)0(4, 4,!5,"5,"4+ 1(2)3+4,0(4,2*3*:0%8/$4+ 5-"3+ 1*3, 6-!6."7."5+ 0&1)7."7/#3+/&4+ 4+ 1)8/%4,"1) 0) 0) /(.'*#("       - -  D0%G0#J0!J2$K2'I0&G/%C+ @)A*='9#9$=(5!- ./02 3"3"03"-4!2 /-+*,1",)('# !"!           - -  -      - -           ,,--*! $( + -- -- -- -, -, - -- - . . . - -- -- -- -- -- + - -/ , , + -+ -, * ( -$ - --* " -&2 ,('  -/     -   """ !!! !!!""""""######  """"""!!!"""###############"""""""""$$$&&&$$$%%%%%%%%%%%%%%%%%%$$$$$$$$$%%%###%%%%%%$$$$$$%%%%%%$$$$$$######$$$$$$$$$"""%%%%%%$$$""""""!!! !!!"""###"""$$$%%%$$$%%%%%%$$$%%%$$$!!! !!!"""######""""""###%%%'''&&&%%%&&&%%%$$$###"""$$$$$$$$$######%%%$$$$$$### !!!!!!!!!!!!"""%%%$$$"""""""""!!! """"""###!!! ###&&&$$$ !!!%%%%%%''''''%%%$$$%%%$$$""""""!!!$$$%%%###%%%'''''''''### !!!###!!!!!!  !!! !!!!!!""""""$$$$$$"""!!!!!! !!!""""""""""""$$$3+"1* 4-#70&4.$/(0(4,#91'92'7/$7/#80$7.#6-!8/#90$4+5, :1%>5)5, 1);3(80%6.#80%=5*;3'90%8/#<3&:0#2(4,91%92&6/#3- 92&<4)91%8/#>4)=3(:0$9/#;1%8/#90$>4)<2'5, 5,!5,!6-!7.#6."90$5,!7."5,!7."<3'7.!6-!7-!6, 8."7-">4&XJ8    -# +-)-'$7& @&M*$Y1(U/%J-&!!!###$$$###)))///222222333666999CCCOOOFBB4& C3-FC*++( - - - - - - - - - - - - - - - - - LB0A8)=4&=5'<3%;2$=4&=6(=4'?3'?6)=6(:0#;0$;4';4'9/#;1%?6)>7*?8+;4'81$<5)?8+>5)91%8/#;2&@8,?6*;2&6-!:1%;4(;5)94(:3':3'>5*A8,<3'90$=4(>6*<4(;4(=6*;5)A9-@8,;2&<3'=4(:2&<3'>6*?6*>5)=5(80#80$:2%91%70">6)92%92&>7*<5(81%81%7/$6.$91&7.$8/%3* 5-"91&<3(;2'6.#4,!5, 8-"8-"5)1%0$3(6, 7."8/$7/#6-!4, 3*1)1(4+ 3* 5-#6.$6-"3+2*3+4+/'3*4+2(7."7.#3*3+ 3+ 1)2+ 5,!5-!8.#5+ /&1(7."80$3+.%3*3*1(7.#4+"2) 1) 0)1* 1*!*$("       - - F0$F/"O4$P5$M4%K2'F.$C+!?'>';%8"9&7$300223!2!2 3"../1!/+ ,,+('('$  #!          - - -  - - - -    - -  -        , --. -# " %) + - , + + , -, -, -- - - - -- -- -- -. - - -/ / - * * *+ -* -(& # " -#   ! -0))( -       -  ###!!! !!!    !!!!!!"""!!! !!!""""""###""""""###!!!!!! !!!""""""$$$$$$$$$""""""$$$&&&%%%%%%%%%%%%&&&%%%%%%%%%$$$###$$$###"""#########$$$$$$%%%&&&$$$$$$###%%%%%%$$$%%%$$$###""""""  """!!!"""%%%$$$"""$$$$$$$$$### """"""#########"""###%%%'''&&&%%%&&&%%%%%%$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%$$$!!!!!!"""###!!!!!! ######"""!!!###"""!!!###$$$""""""%%%### """!!!"""$$$%%%&&&%%%$$$$$$%%%&&&###!!! ###$$$%%%&&&'''((((((%%%!!! !!!!!! """  !!! !!! !!!###%%%$$$!!!!!!  !!! """ !!!$$$ 0) 4.$60&4-#/'/(4-#92'91'7/$6.#90%8/#5, 6-"90$5, 5, ;2&?6*4+ 1(:2'80%6.$92'=5*;3'90%8/#;2&9/"3)4+8/#91%70$6/":3'<3(7.#6-">4)?4);1%9/#:1$9/$;2&@6+<2'5,!6-!5,!6-"8/#5,!8/$6-!4+ 6-!7."<3&7."6,!5+5+9.#8.#:1%F;-     +*(710-#"9"I&S+R.!P1%P7/"""######$$$***///333333333777===HHHRRRKE?B2+I=7ME@=DC5BF2>C-10)%)*, - - - - - - - - - - - - - - - - - - - - - - - m]DG>.=5'=5'>6(;3%:0";3%>7(=5'?4'>6);5&:0#;0#<5'<5(9.":0#?6)?8+?8,;3'80$=6*?8+=5)90$7.";3'?7+?7+;2&8/#;2&;4);5*;5)<5):3'=4)@7,<3'91%=4(>6*<4(<6)>8+:5(@8,A9-90$:1%;2&:1%;3'=4(=4(?6*?6*90$91%<3':1%92%<5)92&81%;4(=6);4(;3(81&80%80%8/%7/$5,"5,":1&91&80%6."6-"5, 8.#7+ 4(1%0$2(6,!90$:2&80$6-!2*2*2)3+5-!4+!3+!3* 3*0'0'2*2*2*3*2)2(4+4+ 1)1*3+ 1*4,!6-"5,!7-"5+/%0'7.#91%4, .&3*2)0(3* 2) 2* 0(/(2+!0* ,&(!       - -C/%G0#M3#P6%O6#L3!H0 D, ?(<%9"8"7!4"3 1004!8%4"3!1 01 --*.) & -.(#'(!  "  -      -     -  -                  +-- . - = -# &) -, -, +, -, -, -+ -+ -, -, -, -, - -- -. / / . -. -, *)*)* -* -* ( !  - " $ -$ $/')  -3      ! !#" " -  !!!""" !!!  !!!!!!!!!!!! !!!"""""""""!!!"""###""" !!!!!!!!!"""!!! """$$$$$$$$$""""""$$$&&&%%%$$$$$$%%%$$$###$$$$$$$$$%%%######"""######"""######%%%$$$%%%$$$%%%%%%%%%%%%%%%$$$#########!!!  !!! """############$$$###""""""!!!!!!!!!############!!!###%%%$$$###%%%%%%###"""###%%%$$$%%%$$$$$$%%%&&&%%%$$$!!!  """###### !!!"""###"""!!!"""###!!!!!!#########!!!"""&&&%%%%%%$$$###$$$###""""""$$$%%%%%%$$$###$$$%%%&&&###"""$$$&&&%%%$$$$$$&&&'''%%%###"""!!!"""""" """!!!!!! !!! """######"""""""""$$$$$$""" !!!!!! $$$ 3,"5.$3,"/'.&2+!80&80%6-"6-"8/$7.#4+ 6-!90$5, 5-!<3'>4)4+2)91&91&6.#92'>6+;3'80%7/#90$8."3)3)8/#;3'92%6/#92%:3'7."6,!<2&?5);1&9/#;2%:1%=3(@7+<3'6-"8/#7.#8/#8/$6-!6-"7.#6-!7.#90$:2%7-!6,!5+ 6+ 8.#8.#6-">4'K@1   -  1*)5((7 @!N+U1#Q1$D*O:1 """$$$###%%%***000333333444888AAAMMMQPPRE>TH=FA3BD@3CI1CJ4:;1'%%+12  - - - - - - - - - - - - - - - - - - - G=-A8*>5(=5'@7*=4&9.!;2$>7)>5(A5(?7*;5':0#<0$=6(>6)8."8.">5(?7+@8,;3'81$>6*@7+=5)91%7."=4(?7+?7+;2&91%<3'=6*=7,<6+<5)91&<3(@7,<4(:2&<4(=5);4(=6*?9-<6*?7+B9-90%90$:2&:1%<4(>6*>6*?7+>5*80$91%=4(:2&:3&<4(92%91%;4(<5)<5(<5)92&80&7/%7.$7.#5,"5,":1&;3(:2'7/$8/$6,!8."5*2'0%2'5+6-!90$:1&8/$7/#6-!5- 3+3+4,!4+!1)1(1)/&/'4,3+2)1)3*3)4+4+ 1)2*2+/(2+4+!3+ 6,"4*0&0'6.#91%4, .&1(0'0'1)1* 2+!1) 0)2+"0* ,&%       -F0$F/"L2!L3"L4"J1 F.B+=';$9#6!8$2 ./024!6#6$4"02 .--/)&+/,,((#  $"!       - -       -             -       .- - , ,  -$ ( -* -+++ , -, -+ + , -, -+ +, - . . . ---- ,+++ * -( -) -&   -" % % & ' 3".)) - -    !" !  %$#"#" -    !!!!!!""""""!!!  """$$$"""""" %%% !!!  !!!!!! !!!###############%%%###$$$"""###%%%%%%$$$&&&$$$###%%%$$$###$$$%%%#########""""""%%%%%%$$$%%%%%%%%%$$$!!!""""""###"""!!!!!!!!! !!!"""!!! """"""######"""""""""!!!!!!"""###!!!###$$$"""!!!!!!"""!!!$$$$$$"""!!!!!!"""%%%$$$######$$$%%%$$$###$$$!!! !!!"""!!!### """###!!!!!!!!!!!!!!!"""#########!!!"""$$$$$$&&&%%%###%%%###!!!######"""#########$$$%%%%%%$$$$$$%%%&&&%%%#########$$$######""""""######!!!  !!! !!! """######!!!###$$$###!!! !!!!!! !!!!!! !!! ###4-#3,"/',%0)6.$6.#4,!4,!6-"6-"5, 7."8/#4+7.">4)=4(5,!2)80%91'6/$:2'>6+;3(8/$7."7."7."3)3)90$;3'7/#2+5."80%7."7-"<2'>4)<1&:0$<3&:2&;3'>5):1%6-!7/#8/#8/#7/#6-"6-!8/#8/#6-"6-!90$8."7-!6, 6,!:/$8.#6-!7/#F5(=5'?7*=4'9/":1$=7)>4'A3'>7*95'>0$@2';6'=7)9-!9.">5(?7+?7+;3'91%>5)?7+>5):1%80$>6*?7+>5):2&;2&=4(<6+=7,>7,>7+91&<3(@7+<3(;2&=4(=5)<5)>7+?9-=7+>5)@7+91%90$;2&;3'=5)>5*<4(>5)?6*:2&91%;3':2&;3'<4(80$81%<5):3(;4(<5*91&91&80%7/$6-"6-"6.#:2'<4)<4)7/$90%6-!5+ 3(1&1%2'5+6-!80$:1&;2&80$7/"6.!3+2*4+ 4+!3+!4+!4, 1)1)4, 4,/&2)3*4*5+ 5, .&1)2+ 0(2+ 4+!2)5+!5*2)2)6.#70$2*.&1(0'0'1)1* 0)1) 0)0)/) ,&'!     C/%F0#L3#L3#K3#J3#I1"E.A+<&8#8"7!6#6#11135"5"4"3 102 00*)*+,(&'#   "!   -        -    -  -     - -      -          -,- ,$" % ( -* + , -, -, -+ -+ , -- , -*, - - , -+,,---,+ * ' ' "   # & ' ( ( 0 ++*        !""!!#%%"#"!%)#% %  """!!!    !!! """"""###"""!!! """###""""""!!! !!!"""!!!"""""" !!!!!!######!!! !!!""""""###""""""###%%%%%%"""$$$$$$%%%$$$%%%$$$%%%%%%%%%#########$$$&&&$$$!!!!!!###$$$%%%%%%%%%$$$###"""!!!"""!!! !!! !!!""" !!! ###"""!!! !!!!!!"""###""""""######"""!!!############"""###""""""###$$$######$$$######""""""!!!"""!!! !!!!!!%%%"""""" """###%%%%%%$$$###"""""""""###%%%$$$###%%%&&&###$$$"""!!!###%%%$$$%%%&&&&&&%%%%%%%%%&&&%%%$$$$$$$$$%%%$$$$$$######'''$$$###"""   !!!"""!!!""" ###$$$###!!!    !!!!!!!!!!!!  """ 4-"/(,%1)70%7/$3+ 3+ 6."5,!4+ 7/#8/#2*6-!=4(=3(7."2*7/#80&6/$91'=5+<3(90%8/$7.#8.#3*4*:1%<4(6/#1*5-!80$5,!7-"<2&=3';1&90$;2&91%;3'=5)90$5, 7."7."91%90$7."9/#:1%:1%8/#8/#:1%7."5*6,!8-"9.#7."3*6-"@7*J?1    -$$"7422)'?+$C(D)F,I/#H.%!!!"""###$$$%%%&&&***111333444666@@@KKKHRVRl`BZIAE@81?45A0@?,@7,7/*! - - - - - - - - - - - - - - - - - - - - - D:*;2$=5'?6)=5'>6(<3&9/"91#=6(=2%>1%=7)<8)=/#>0%;6(<5(:-!9.!=4'?7*>6*;3';3'>6*?7+=5):1%90$>6*?7+>6*;2&:2&=4(=7+=7,=7,<4)80%<3(A8,=4)<4(>6*>6*=6)=7*>8+=7+=5)>5):1%:1%;3':2&<3'>6*=5)<4(<4(90$:1%<4(<4(<4(<5)91%6/#92';3(;4):3'92'91&80$7/#8/$8/$7/$:2'<4)<4)5-":2'9/$7,!4)2&2&2(5+7."7/#80$;3'90$91$7/"3+1)4, 4,!4,"5,"5,!1(1)3*2)0(1)1(1'4+5, .&0)0(.'2+ 4+!2(5+ 5+ 3*2*7/#70#0).&2)2)1(2)2+!/(/(1*!0)/) +$'!&     E/$E/"K3$F/!I2$J3%G0"C,@*>(9$5!5!8$7$105#3!3 5"4"3!101 .,,& +.-,(&!  #"!            -  -  -      - - - - -          -      -,,,>!" % ( -* , , -, -+ -+ , -- - , , -- , -+ , + ,-.- -, * % -# -     -$'' & $ -0 ), -  )        ! ""$$& %#$" $%(!$$$!"""" !!! !!!   !!!!!!!!!!!!"""!!!###"""!!!!!!!!!"""###"""!!!!!! """ ###$$$######!!! """""""""###!!! !!!###!!!!!!###&&&$$$#########%%%%%%%%%###$$$$$$%%%$$$######$$$%%%$$$"""!!!###%%%&&&&&&%%%$$$%%%$$$""""""""" """!!! !!! !!!""""""!!!!!!"""""" !!!"""""""""#########$$$###""""""$$$#########!!!!!!""""""$$$$$$#########"""""""""!!! """###$$$###$$$!!!!!!  ###%%%%%%%%%""""""""""""$$$###%%%$$$$$$&&&$$$######"""###"""###$$$%%%&&&&&&&&&'''&&&%%%%%%&&&&&&%%%$$$$$$$$$###"""###"""!!!!!!   !!!"""!!! !!!"""!!! !!! """!!!!!!!!! """### ###$$$$$$/(-%3+!:2(80&4,!4+ 6."6-!4+ 7/#80$2)3*:1%;2&7."3*7.#80%6.$7/%;3);2'8/%7.#7-"7-"3)4*;1&=4(7/#3+6.":1%6-"8.#=3(>4(;2&8/#;2&;2&=4(>5)90$6-!80$91%90$90$7.":0$;1%:0$8.#7."90#7."3)6,!6+ 7-"5, 0'4+ <3'B8+[N<   - &+)41.5$"=& >$B'E+D(F( """###$$$%%%&&&'''***111333555:::DDDPUV^fgI[U=OB=>59789;A8??,60 #%21 - - - - - - - - - - - - - - - - NB1?5'8/"=4'@7*=5(>5(<3&9/"91#>7)=1%6)?6*;2&<3'?7+?7+>5):2&91%=5)?7+?7+;2&80$<3'<6+>8->8,;4(6/":2%A8,>5)=4(>6*>5)<5)=5*>7+?8,>6*>6*=4)<4(<3'90%;2'=5)?6*=5)>5):2&:2&:1%;2&;4(>7+;4(3,!70%:3'92'81&81%91&91&8/$90%90%5-"6.#:2':2'4,!:2'<2'9/#5*3(3(4)6,!8/#8/#7/#7/#91$:2%6.!3+1)4+ 5,"4+!5,#5-"1(2*2)0(0'1(0'2(7."7."0)1*1*-&0)0'0'4+ 5+ 2)2)80%7/$1*-&.&3*2)2)3+"0) /(0* -&0* ,&#'   A.$E/#G0#F/"@*E/$I4'D-!?)='<'9%6"6":&7$0./5#3!3 6#2 0/.1 )$ )--+**%    -" ##"     -         -     -    -  -      -  - - -        - -, ,,- -; " % ( -* + , -, -+ * -+ -, -. - -- , + + -+ -, -, -, + ) $ -       -# % & & % . *+  ,     !! !#!%$& )#'!%%" %% '!$%& #"!!!!"""###!!!   ###### !!!!!!"""""""""!!! !!!""""""!!!  !!!!!!#########!!!""""""""" !!! !!!!!!!!!!!!!!! ### """###$$$$$$$$$%%%$$$######$$$$$$$$$$$$############$$$#########$$$&&&%%%%%%$$$#########""""""!!!!!!######!!! !!!"""###"""######"""!!!!!!"""$$$$$$###"""###$$$#########$$$$$$###$$$!!! !!!!!!###$$$"""###############!!!!!!  ###"""%%%$$$### !!!"""###$$$""""""!!!#########$$$%%%"""######"""!!!""""""""""""######$$$&&&&&&&&&%%%$$$&&&&&&%%%###############"""""""""!!! """""" ###""" !!!!!!  !!!  """ !!!"""""""""### !!!%%%######$$$-%2+!;3)91&4,!4, 6."6."4+ 8/#:1%3+3*:0$:1%5,!4+ 8/%80%6.$6.$;3);3(8/%6-"6-!7."3)5*=3'>5)7.#3+7.#:1&7-"8.#>4)?5*;2&7/";3&:1%;2&<3'8/#6-!91%:1%7."9/$7-!:0%:0%8/#8/#8/#:1%6, 5+ 7,!7,!6,!3*0'3+<3':1%C9+   -   (1-32.4 9C&E,M3%I,"L*$N1*###$$$&&&&&&'''&&&***222444666>>>LUV]kjQ__ANO/><6>94=93A@4<:&!!+65  - - - - - - - - - - - - - - - - - - - - - - - - - B8):2$7.!<3&?6)=4'>5(=4'90#:2$>7)=1%6)>6*:1%<4(@8,@7+?6*;2&:2&>5)@7+@8,<3'90$<4(<6+=7,=7+;4(6/#;2&A8+>5(<4'=5(=5)<5)=5*>7,@9-@7+>5)>5)=5);3'91%;2&<3'?6*=4(=4):2&;3':2&:2&<4(?7+:2&2+ 81%92'70%6/$7/$:2'=5*:2&91%7/#4, 5-";3(;3(6.#91%:1&8.#4*3(4(3)6, 7."6."6."6."80#7/"4,2)1(2*4+!2* 4,"5,!0'1(.&.&/'0'/%1'7."7/"1*1*2+ 1)3+ 2)3) 5+!5+ 2)1)4,!5."1),$/&2)1(3+!4,"0)-&-'/) 1* ,%' (! B.$D."H2'D/$@,!B.#F2'A-"<'9%9%8%6"8#8#424 22 5$2 6#6$/,+*))*,,,,)# - ! !  !"""       -   -     - -    - -   -    -     -         - -, ++- ( -" & -) -+ + -+ -) -' -) -+ , - - + * + , **) % -%   -   " -    " # & ' ( - - -  -     ! !"#!""$"!#%%& '!%"!$& $$& %#$!!!!$$$""" """   """!!!######!!!!!!""""""!!!!!!!!!"""  !!!!!!"""###$$$$$$$$$$$$!!!###!!!  """ !!! !!! ###"""%%%$$$###$$$%%%$$$$$$%%%#########$$$%%%$$$""""""###"""""""""!!!!!!###!!!!!!"""!!!""""""!!!!!!!!!!!!!!!###"""!!!!!!"""!!!"""###!!!!!!###$$$$$$###$$$%%%$$$$$$$$$!!!!!!"""""""""""""""###$$$$$$$$$###!!!!!! """###$$$%%%!!!""" !!!!!!""""""######"""$$$###%%%%%%$$$"""###!!! !!! !!!!!!!!!"""######$$$%%%&&&%%%$$$&&&&&&######$$$""""""!!!!!!%%%!!! """!!! ###### """"""!!!!!!######""""""!!!    """!!!!!!%%% """$$$!!!"""###!!!""";3(91&5-"4,!6."5-!5,!8/$;2&4+4+;2&;2&5,!4,!90&80&5-#5-#:3)<4*80%7."7-":0%4*5+=3(>5)7/#4+7/#:2&7."8.#=3(>5)90$7.!:1%90$91%;2&80$7."91%90$9/$;1%8/#:1%8/#6,!8/#80#<3&9/#5+ 5+ 4)7,!6-"3*4, :1%90$@6)H<.     ,50-1+5#>E%@'?)F+ C&B& ###%%%''''''(((''')))333555888MUV_kkP`_@RQ1FC-?>*@A(?@*88-.+$%)( - - - - - - - - - - - - - - - - - - - - - - - G<,=4%;2%8/"<3&?6)<4&>5(=4':1$92$=6(<1%;/#;6'<5'=0%<0$;5'=5'<1$90";3&?6*?6*:2&=5)A8,@8,?6*;2&;3'>6*@7+A9-=5);2&?7+;6*=7+=7+;4(70$<4'A7+=4'<3&=4(>6*=5*<5*>6,?8-A8,?6*=4(<4(<3'80$7/#<4(>6*;3'<4(;2&;3':2&90$;2&>6*91%3+92&70%81%5."6/#81%;3(:2&:1%5, 3+4-!<5*<4)91&90%:1%9.#5*4)4)3(4*6-!6-!5-!7."7/"6.!4, 0(0(/'1(1)3*!3+/'1)/'.&.&0'/%0&6.!5- 4, 2+2+2+ 4-"5-#5+"5+!6+!2)0(2*5.#2+.&0'1(/&3* 4,"0)-&.)/)0)*#' ' ?-$C.#A-!B.#B0&A.$>,!?,!=+ :(7%7$7$9%9$5 336"8%6#4"2 ///,('&)-.0 -+& " -  - !"!"    - -   - -      - -                   -          - -+,. +/ -$ -& -) **( ' -( ++,- + ) * (&% #   " # !  -    &(( ' 0#+ . -     !#"%"!!!#& %$& & $%% '!$#'!'!& ("'"$!!!"""###!!!  !!! !!!""" !!!"""######"""!!!""""""  !!!!!!!!! !!!""""""!!!"""$$$&&&$$$$$$""" !!!!!!   !!! !!!!!!"""$$$###$$$""""""!!!###%%%$$$###$$$$$$%%%### !!! !!!!!! !!!"""!!!!!!######"""""" !!!"""!!! !!!!!! !!!"""""""""""""""######$$$#########$$$"""""""""""""""###############$$$$$$$$$"""######"""!!!!!! ######$$$%%%"""!!!!!!!!!### !!!"""###"""$$$$$$#########$$$$$$"""###"""  ###$$$######$$$&&&&&&$$$%%%%%%############"""###$$$%%%"""!!!""""""!!! !!!!!!"""$$$###""""""###"""""""""  !!! !!!!!!"""###"""###"""!!!$$$""" !!!91&6.#5-"7.#6."6-!80$:2&4+4+;3'=4(7.#4+ 80%7/%5-#6.$<4*<3)7/$6-"5, :0%3)4*<2&=4(80$5-!80$;2&9/$9.#<2'=3':0$7/"80#7/#90$<4(:1%8/#90$8/#:0%<2':0$;2&8."4*9/$:2%=4(8/#7-!7,!5+9.#:0%4+ 6."90%:1%=3(E:,iXA -  -   %"/40,/(0% ? E$I-%A*C+!B* D-#R7/ ###&&&((((((((('''(((333555HLObjlR__>ON/DA2EC0@?,;;#67)54++) !++- - - - - - - - - - - - - - - - - - - - p`HA7(6.!;2%90#=4'?6)<3&=4'=3&:1$81#=6(=2%:/":5&=5'=1%:0$:4&=4'<1%9/"<3&?6*>5);2&=5)@8,?7+=4(:1%;2&?7+?7+@8,=6):3&>6*<5*=6+=6*;3(80$<4'?7*<3';2&=5)?6+=5*=5*=6+>6+?6*>6*;3':2&<3':2&80$<4(=5);2&;2&:1%;2&<3(:2&;2&@8,92&4, ;3'92&92%81$71#92$:3&:3&;3&8/#4, 6.";4);3(81%80$90%8.#5*4(3'1&2(4, 7/#6-!6."7."7."4,0(0'1(1(2) 2* 2)/'0(1)0(.%1(1(0&5, 7."4-!2+1*0)4,"7.%6,#5+!6+"/&.%1*5-"2*/'.%0'-$3+!2+!/(.'/)0* 0) -&)"@-#B.#C/#@."?.$@/%>-#;* 9(7%7%6#6#9%9%5!36!7#7$8%6$2!.,)')&)++*+,)" -   !       -       - - - - -  -    -           - -     -      . / -. -, '  ! # ( )*)'(*+* , -, -) % $ ! -" "   % -' "   % & ' (.$+  - $   "#! %"'!%###$& & %& #"& )#("& $& '!'!)#'!'"'"######!!! !!!!!!!!!!!!"""!!!!!!!!!######""""""!!!"""%%% !!!"""!!! !!!!!!"""$$$$$$######$$$### !!!###""" """######""""""!!!!!!$$$"""!!!""" $$$%%%$$$############"""  !!!""""""###"""""""""###$$$$$$"""""""""!!! !!!######!!!""" !!!"""""""""###$$$$$$#########"""$$$""" !!!"""###"""""""""###$$$$$$$$$$$$###!!!"""$$$###  !!!######!!! !!!"""!!!!!!!!!""" """###!!!!!!###$$$$$$###""""""!!!!!! ###"""!!!!!!"""###"""$$$&&&&&&%%%%%%$$$&&&%%%%%%$$$###"""!!!""""""!!!!!!###"""!!!"""######""""""###$$$"""!!!!!! !!!  """### """######"""!!! """######!!!###"""!!!5-#5-"7/$7/#6."8/#:1%4+4+;2&=4(7.#3* 80%7/%4-#5.$;3):1'6.#6-"4, 90$2)3)<3'=3(9/$7-":1&=3(90$7.#:0%<2':1%7/"7."6-!80$=5);2&90$:1%90$:1%<2'90$<2'9/#3):0$:1$=4'8."7, 7,!4)7,!8.#5,!7.#80$;1&<3(?5)E:* -    - !*-).0+.*$7!E'"E)"E-%L5,P8.T5,T3+!!!$$$&&&))))))((('''***333@FI`gjV_aDNO3@A0A@2@;095,+*+("  !%!.43 - - - - - - - - - - - - - - - - - - - - KA1<3%7.!<3&90#=4'>5(<4&>5(<3&:1#80"=6(>3&:/":4&>6(>2&:1$:4&>5(<2%8/"<4'?6*=3(;2'<4(?6*>5);3'91%:2&?7+?7+?7+<4(91%<5(<5)<5*<5):3'80$<4(>6*:1%:1%=4(>5*<4)=5*<5*<5)?6*>6*;2&91%;3';2&:1%=4(;3'91%:2&90$:1%>5)>6*90$?7+<4(80$;3'<5);4';4'92%91%:3&:3&<4'91%4+ 6.#:2':2'80$70$80%9/$5+ 3)4*3)2(3)5, 6."7."7/#5-!2*/'.&3+ 2)3*!3*!4+ 1)/'0(1)1(0'0&2(6- 6.!2*1*1*0)4,"7.%6,$6,"7,#.&.%3+ 3+ 0(.'0(1(/&0(1) -&-'0* 0) 0) >-$A-#C0$E1%F2&@/$?0%=-"8(6&5$8'6$5"8#6"4 :%:$8$9%7$5#3!( *-'$',. ++*)"   !!        - -             -  -  - -     -       -   -         . -/ . ,- < " '' (((( )* + * * ' # # -"      ' "  - $ ) $ -    & ) ( % -$-!    #"! $#$$%%$%%& && $!$("("'!%'!'!("'!'!%$% $$$!!!""" !!!$$$!!!###"""!!!""""""!!!"""""""""""" """$$$$$$###!!!!!!!!!""" !!!"""""""""!!! !!!""""""###$$$###%%%"""""""""""" #########""""""###$$$""" !!!######$$$%%%"""!!!######"""""""""""""""!!!!!! """"""!!!""""""!!!!!!!!!!!!!!!"""###$$$$$$###$$$$$$%%%%%%###"""######$$$###""""""##################""""""###""" !!!""""""!!!!!! !!!!!!!!!!!! !!!"""!!!!!!!!!"""###$$$"""!!! !!!"""#########""""""######$$$%%%%%%%%%%%%%%%%%%&&&&&&%%%$$$###"""""""""!!! !!! !!!###%%%$$$ !!!###"""$$$$$$$$$"""!!!!!! !!!  """#########$$$###!!! !!!$$$###"""###"""!!!"""5-"7/$8/$6."7."90$4+ 4+;2&=4(7."2)80%80&5.$7/%<3):1'7/#6."5-!:1%3*3*;2&=4(:0%8.#;1&?5*9/$6-!90%<3'8/#6-!80$7/#7.";3';2&80#;2&;2&:1%;2&90$<3':0$3):0$80#=4'9/#7-!5*3)8.":1&:1%6."6-":1&>4)<3'=3%RE2   - # 540/-'3'"?& ?#B(L5'O5(S3*Q/&X?8"""%%%'''******(((&&&)))>NNWhhS_bCOQ6BD3>?0:5090-.).$$) !#$'(& - - - - - - - - - - - - - - - - `R5(<2%8/"<3&@5*<3';3'<3'?6*>5);3'91%:1%?7+>7*>7*:4'81%<5)<5)<5)<4(:2&91%<4(?7+:2&91%=4(>6*<5)=6*=5*<4(>5)>6*;3';3'=4(:2&80$:2&<3';3';3'90$91%>5)>6*91%?8,:3'81%;4(=6*;4(;5(:2&80$:2&91%;3'80$4+ 6.#80%:2&70$70#80$90$6, 3)3)3)3(4*5, 6-"6.#7.#6."3*0'/'2)3*3* 4+ 5,!3+ 1(2*1)0(0'0'2(4,4,0)/(0)0)3+!3+"2) 4*!5+"/&-%2* 1)/'.&0(1(/'3,"2+!0)/(/) /(?-#A-"E2'F1%G2&?-#;+":+"9)6&7&:)7%6#6"5"8#='=';%9%7$5"0/-.)&(+,)))&  - -  !!         - -            -                 - -      - - -    - 0 -0 . -- -*  -" & ') * -+ * ( * ( &  -# # " -" # # $ -( " -# '       # ' # % $ +&    !!!!$$"#%%$%%& %& '!#$'!& '!& ("("'!'!& '!("(# $$$"""""" !!!!!!$$$%%%$$$""""""###!!!###$$$###!!! !!!!!! """%%%%%%%%%###"""""""""   """###!!!!!!!!!"""!!! ######"""$$$###$$$$$$%%%%%%!!!!!! !!!###"""!!!""""""""""""""" """ ###$$$"""!!!"""!!!!!!!!!"""""""""!!!!!! !!!"""""""""######""""""!!! !!!###$$$$$$%%%$$$$$$###$$$%%%$$$#####################$$$$$$############""" """###!!! !!! $$$!!!""" """!!! !!! !!!###""""""###!!!"""$$$""" !!! ######"""###$$$"""######$$$%%%%%%&&&$$$%%%%%%%%%''''''%%%$$$%%%$$$$$$######$$$###"""!!!!!!""""""""" !!!"""######&&&%%%###!!! !!!!!!!!!  """$$$######$$$$$$"""!!!"""###$$$$$$###"""!!!!!!###"""8/$8/#6-!5-!8/$3*3*;2&=4(5,!0(8/%81&5-#7/%;3):1'7/#6-"6-!91%5, 4*9/#;2&9/$8.#<2'?5*8/#5, 90%<3'6-!5, :1%:1%8/#;2&90$7.";2&;2&80$80$:2&;2&8/#7."90$7."90%7-"6, 4*2(7.":1&:1&6."8/$90%<2';1&8.!E:+yfK -  )*'830*"7$F+H,L0%O/*S2.K+"F& """%%%'''******)))%%%?SRSigLdb;SQ1CC3@A3><092)/(%#!-#& !#%!&*+  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A7'>5'91$6- 90#8/";3&>5(>5(@7*=4';1$90#=4'=3&;2$>6(?6);1$80#:3%>5';2%8/!;3%@6*=4(:1%;3'>5)<3':2&91%:1%?7+<5)=6)92&92&?8+>7+=6*<5):2&91%<3'?6*;3'90$=4(?7+=6*>6+>6+<4(=5)?7+=5)<4(=5):1%80$<3'<3';3'=4(:2&:1%>5)>6*:1&<5):2&91%;4(<5);4(;4(92&70$91%70#:1%7."6-"7.#70$:3'70$6/#80$:0%6,!4)4)3)3)5+ 6-"6."6-"6."4, 2*1)/'1)3*3* 4+!4+!1)1(3*2)1(0'/&0'5, 2)/&0(1*1)3+!3+!3)!3* 4*!0'-%0)1)0(-%/'/&/'0)1* /)/).(@-#?-"E1&H1#F/#>+!9*!5)"6( 8(9(9'5!5"6#7#:%>'<&9$9#8#3 //1-.))+&$%$    !       -  -                -      -        -  - -  - - -  -   -      -0 -. -. -- & # & ( -* * -* ( ' ( # # -$ ! " " # $ $ $ "  " "     - -     ! # " !  -   "!# "%%$$& $%$'!("%%' & (!$)#("("'!%("*$&!&!"""######!!! !!!!!!!!!!!!!!!###""""""$$$$$$""""""!!! !!! !!!###$$$$$$###"""!!!###"""!!! !!!!!!!!! !!!"""!!!"""### """$$$###!!!"""#########!!! !!!!!! """!!!!!!!!!"""""""""""" !!!!!!!!!###"""!!!"""!!!!!!!!!###%%%######$$$"""###"""!!! !!!"""#########$$$%%%$$$###$$$$$$#########"""######$$$%%%$$$###""""""###!!! ###"""!!!"""!!!!!!!!!###"""""" !!!"""!!!!!!!!!!!! """!!!!!!!!!""""""$$$######""" $$$%%%"""###""""""############%%%&&&%%%%%%%%%'''&&&&&&%%%%%%%%%$$$"""$$$%%%$$$$$$%%% """ """"""###%%%###""" !!!###""""""  !!!$$$######$$$%%%###"""#########$$$######"""!!!"""$$$###7/$5-!4, 7.#2)1);2&=4)5,!0(7/$70%3,!5.#:2';2'7/#6-!7."90$6-!5+9/$<2&9/$7-"<2'=3(8/#3*8/#<3'7."4, ;2&:2&7.";2&80$6-!;3':2&7."8/#90$<4(5, 6-!7."6-"7.#5, 5,!6-!5, 7."8."7-!8.":0%:0$90$9/$7-!?5(J>/   -  !$"4/,5,'3%@)E+J.'V<;J0/G("F'R:2 ###%%%'''+++,,,***ARRUhhOge>07653/6*'(#$ !#%!"$!#,-/  - - - - - - - - - - - - - - - - - - - - - - QD1=3%;2%91#8/"90#80";2%>5(>5(?7)?6);2%:1$>5(=4';2%>6)>6(;1$8/":2$=4'<2%6. ;2%@6*>4):1%:1%<3';3':2&90$91%>7+<5(<5)82%81%<5)>6*=5)=5);2&91%<4(?7+<3'80$<4(>6*<5)<5)=5*<4(=5)?7+=4(<4(=5)80$6.";3'=4(<3'<4(:2&:1%=4(=5):1&:3':3'92&92&;5(<5);4(92&6/#80$7/#80$7.#7.#6."70$:3'70$6/#80$8/$6+ 4)4)3)3)4+5, 6."6."6-!4, 4+ 1)/&2)3+3*5, 4+ 0'0'1(2)1(0'/&.&0(1)2*2*4, 2*1)3+!0(0(3+ 2*,$.'0)1),$-%.&/&0).&/(?-#A-">+ F0#M2#F/"?,":+#5)"3&7( ;)!7%7!6"5"7#9$;'<'7"7!7"6!22.3!00 1".*#     !#!      - -   - -     - -    -        -  -    - - -   - -      -       - . -- -, , %  % ' -( ( -) ' # % ) ( -     # % & $ "% % # %!            -    !# !"'!(!' %' '!&%'!)#& %$' )#%% )$)$)#(")#+%'!)$*%%%%""""""   !!!!!!"""!!!!!!############""" !!!"""!!!  """"""###$$$###"""""""""!!! !!! !!!!!! !!!!!! """ !!! """"""$$$###$$$$$$###!!! !!! !!!"""$$$"""!!! !!! !!!!!! !!!!!!!!!"""$$$"""""""""$$$###"""###"""""""""######!!!"""###$$$$$$$$$$$$%%%###$$$$$$""""""######$$$$$$###"""""""""### !!!###""" !!!!!! """$$$###!!!!!!"""!!!!!!!!!""""""!!! !!! """"""###$$$###!!!!!!!!!$$$$$$###$$$$$$###""""""!!!"""$$$%%%%%%%%%&&&'''&&&&&&%%%###$$$$$$$$$$$$$$$%%%###""" """ ###"""#########""" """###$$$  """"""###$$$$$$%%%%%%""""""##################"""###%%%$$$###3+ 2)5-!1(0':1%=4)6."1)6.#6/$3+!5-#;2';3(7.#6-!7/#9/#6-!6-!;2&>4)90$5, 90$<3'8/#2)7."=4(90$5, ;2&90$5, :1%90$6.";2&:1%80#8/#8/#:2&5, 7."8/#7.#8/$6-!5, 90$8/#8/"7.!7-!8.":1%:0%:0%:0%8.#;2&F;-fT> - -  !!)'&53/-+&;,&K1,R62J-+I&'C"F(K,"!!!###&&&(((+++---FPO[hjZhkCUV1IG*B@-@?0;<-,.3 1" !#% "*&(#''  - - - - - - - - - - - - - - - - - - - - - - ?5%80";2%:1$80"80"8/":2$>5(=4'?6)?6):2$;2%>5(=4';2$=5'=5';2%7/!91#<3&;2%5,;2%@7+=4(:1%;3'?6*=5);3'91%91%>6*=5);4'81$81$<4(>6*=5)>5);2&91%>5)@8,;3'80$=5)>6*;3';4(=5)<4(>5)?7+=5)=5)>6*80$6."<3';3'91%;2&:2&91%<4(<4(90%;3'91%80%;3(<5*;4(92'81%5-!7/$70$80$80$7.#5,!80$;3'81$70$80$8/#5+ 4)3)3)4)4*5, 7.#6."5-!4, 3+/'0'1)2*2)4+5, 1(/&/&2(0'0&.%.&1)3+3*3*4+ 1)0)2* /'1)4+ 0(+#/'2* 0(*"*#,%/'/(0) A-#A-!D/"L2#O4%G/#B.#<,%6(!3%8( :(7"8$:%7"4 7"9&:&7"0 6"7"4 12.0.2#,-,$  -#####    - -  -   -      - -   -      - -      -   -  - -   -      -            * -+ , - - 9! & % & -' -$ ! " -' &     " $ & ) '% ) & ( $        - -  !"!  $("'!'!'!("("(!(!("("' %("("'!'!'!(#'"("(#*%)$)$(#&!&!###!!!"""""" """!!!  """"""!!!"""$$$%%%$$$""" """###!!!!!!###"""###%%%$$$"""!!!!!! !!! !!! !!!!!! !!!!!!######""""""### """"""!!!!!!!!!"""!!!!!!###""""""######""""""###!!!  """""" !!! !!!!!!""""""""""""!!!###%%%%%%#########$$$###$$$$$$###"""""""""$$$###%%%%%%###$$$$$$###!!!"""""""""######""""""!!!"""#########!!!!!!   """""""""""""""###$$$$$$$$$###""""""!!!!!!"""!!!!!!"""$$$ """!!! """"""""""""##################"""$$$%%%%%%%%%%%%'''%%%%%%$$$"""###&&&###!!!&&&%%%""""""  """"""!!! """$$$"""######!!!""" !!!!!!!!!   ######"""$$$&&&%%%$$$######$$$###$$$$$$$$$###$$$$$$###""""""0(4, 0(/&8/$<3'6.#1)5.#6/$4,"6-#:2&;2'6-"5, 7-"8."7.!7-!<3'?5*:0%5, 9/$>4)8.#2)90$>5)90$5, ;2&:1%7.";2&:2&90$<4(:2&:1%80$90$:1&7."6.!8/$8/$:1&:1%5-!90$8/#8."7- 7-!8.";2&:1%;2&<2&8/#9/#@6)F:+       "$#55330.5,)H3.H0*J/)<(B. E)A!M4, """$$$&&&(((+++KQON^\SddETW4CF4DE,>=):9)35) !# -  !$% "'!#+,, - - - - - - - - - - - - - - - - - - - - - G<,:1#8/";2%<3&90#8/"80";2%?6)=4'@7*?6)91$:2%>5(<4';2%?6)>6):2%5- 7/";3%:2$4+90#=4(;3';2&=5)?7+<4(;2&;2&:1%>6*>5):2&80$80$;3'=5)=5)=4(91%8/#=5)@8,=4(:2&?6*?7+<5)<4(<4(<4(>6*@8,>6*>5)=5)80$7/#;3'<3':2&<3';3':1%;3'<4(91%:3&:2&80%:3(=6+:3'70%7/$3+ 7/$91&80%90%6-"4+ 80$92&70$80%8/$80$6,!4)3)3)5+ 6,!6-!6."7/#7/#4+ 2*0(0'0'0'2)4+5, 4+ /&1'/%/%0&.%.%/'2)1)1)2*0(0(3,"2* /'2*.%*"/'1).&)"*#-&.'?-#B-"F0%J1$Q4#M1#G/"C-#=+"7'6&:( 8%6":%:&6"37$7$9%7"7#8#6"33 23 03!,/,+% "    $$! "    -    -    - -  -   -       -            -  - -    -     -              + -, -- - )   $ ( & "   - $% -"  -$ % -% ' $  !         -   !!  #$%("("& %'!)#*$)"("(!&&)#'"'!& '")$'"&!'")$(#(#)$'"(#  """""""""   !!!"""""""""$$$$$$######!!!!!!!!!!!!"""$$$""""""$$$$$$#########$$$$$$$$$!!!!!!!!!!!!"""!!!###""""""!!! !!!!!! !!!!!! !!!"""######"""###$$$###!!!  !!! !!!!!!!!!  !!!"""$$$$$$######%%%%%%###"""###$$$$$$%%%&&&%%%$$$###""""""""""""###"""######""" """!!!"""######"""""""""######$$$"""!!!!!!   !!!#########$$$%%%%%%$$$"""""""""!!!###!!!!!!"""!!!###!!!!!!!!!!!!!!!""""""!!!###$$$######$$$$$$&&&%%%%%%'''%%%$$$$$$###%%%&&&%%%$$$$$$"""""""""  !!!###############&&&"""######!!!!!!  !!!"""!!!"""""" !!!""" """$$$$$$"""$$$$$$%%%$$$""""""######$$$$$$$$$$$$$$$$$$"""!!!"""###5-"1)0'8/$:1&5-!0(4,"6.$4,!6-";2&;2'7.#7-"8/#8/#8."7.">4(@6+:1%6,!:0%?5*90$4+ ;2&=4(8/"6-!;2&:1%7/#;2&:2&:1%>5)<3':2&:1%;2&<3'8/#6."8/#7.";2&;2&7.":1%9/#8."7-!8.!8."<2&:1%<2&;2&6, 7.!>4'@5'OB1 -  -  !"""(*)56211+/"8 9:"D(C'?=U?9!!!###$$$''')))NYVUdcRcdFWY;JO8GK0@A-<;(53)12!$(  $% ! &'&,1/  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - wfLF<,:1$90#;2%<4&:1$80"90#;2%?6);2%?6)A8+;2%;3&>5(<4&;2%?6)@8*:3%5,7.!;3&:1$2)5,:2&;3';3'=5)?6*<4(;3':2&91%=5)=5)91%80$80#;3'=4(=4(=4(8/#5-!<4(@7+=5)<3'?6*>6*=6*>6*>6*<3'?6*A9->6*=4(=4(90$8/#;3'<4(<3'=4(;3'80$91%:2&:2&:3':2'80%92';4);4(82&6.$3+ 80%91&80%:1&6-!3+70$81%70$70%7.$80$6,"4*3)4*6,!7."7."5-!6."7."4, 1)0'.&/'/'3*5, 5,!6-!2)5+ 0%/%0&-#,#-$0'0(0(2*2*1)2* 1)0'2*.&+#-&.&-&,$*"/(A-"B-!I0$M3#N3"I/"G/$D.#=*8':(:'238$;&7"47#:'7#7#8%8$3 5"23 //..,,)&  - !  $#!    - -    -    -       - -  -  -          - -    -           -               , -,,+)  -' & "    -! %$ " # -% & % $        "  -     "#!!#& &&' %'!)#*$+%("'!)"& &*$*$("'!*$+%(#'"(#)$(#'#'"&!(#*$ !!!!!!  !!!!!!"""!!!""""""!!!!!!""""""###$$$$$$$$$######""" """!!!!!!###$$$""" """######$$$######$$$"""!!!!!!!!!""""""!!!$$$$$$"""!!!!!!"""""""""!!! !!!######"""###%%%$$$%%%###""""""    """""" !!! !!!"""$$$$$$$$$###"""######""""""$$$%%%$$$%%%&&&&&&%%%$$$######!!! """"""!!!###""" !!!###$$$$$$#########"""""""""###  !!!"""###!!!!!!!!!!!!"""###$$$%%%%%%$$$""""""""""""!!! """!!!"""""" !!!######!!!######!!!!!!$$$$$$$$$###$$$&&&'''%%%((('''&&&&&&$$$$$$%%%&&&$$$$$$###!!!""""""!!!!!!###############$$$%%%$$$"""###"""### !!!###"""!!!!!! !!!!!!!!!"""###"""$$$$$$$$$###""""""###$$$%%%%%%$$$######$$$$$$"""###$$$%%%3* 1)80%:2'5-"0(4,"6/$4, 5-!:1%:1&8/#8.#8/#:1%9/#6, ?6*>5):0%6,!;1%?5*90%5,!;2&<3'7."6.!<3':1%7/#;2&;2&90$<3'90$91%91%:2&<3'7."6."7.#6-":1&;2&7.":0$90#9/#8."8."7-!;1%:0$;1&<2&8.":0$>4(;1$F;+!   - - $$#!'(",14<"=":";$B#F#K2,"""$$$%%%(((N`_QbcM`aDVX:LP6FJ/@A(;9)74!+( )&!!! !#% !"#%)..  - - - - - - - - - - - - - - - -  MA1@6(:0#:0#<3&=3&90#:1$91$;2%>5(90#=4'?7):2$<3&>6(<4&:2$?5(?7*:2%6- 8/!<3&80"0(2*80$;3':2&<4(@7+=5):1%90$80$<4(=4(91%7/#7/#;2&=4(=5)=5)7."3+;3'@7+;3';3'>6*>6*=6*>7*>6*;2&=5)@8,=5);3'<4(91%80$;2&<3';3'<4(:2&80$:1%;2&;3&<4(;3'7/%81&;4):3(93'91&4,!70%80%7/$90%6-!4+6-"81%6/#5.#6.#6-#7-#4)2(3)5+ 6,!8/#8/#6."4+5-!1(.&.&0(0(1(4+6-!6-!4+4*2'2'1'0&-$.%0'1(1)2*2* 1*2* 1)2)3+.&+#-&/'.'+#?-"B-"J/!J0!N4#J1"E- D-"B,"<(<*A/#;(4 46!:%:&7"4 6#8%:&8$4!3 26#3!0./-+' (&  !""  !     - -      -  - -           -   -   -   -  -   -    - -         -              +,,, 3  # $ !  "$ " -$ ' & % %"         - -  - """  %%& $%& '!)#)#& '!)#'!&,%,&)$'"*$*$+%)$)$*$)$'"% $'")$*%!!!!!!!!! !!!### !!!###$$$###"""  !!!!!!"""###$$$$$$###"""!!!!!!!!! """###"""###$$$"""!!!"""######$$$%%%$$$###"""!!! """"""!!!#########!!!"""###!!!!!!""" !!!!!!"""###$$$######$$$%%%######"""!!!!!!  ######""" ###&&&$$$######""""""""""""###$$$%%%%%%$$$%%%&&&%%%$$$$$$""""""""""""######""" #########$$$%%%%%%%%%%%%$$$"""!!!!!!""" """""" """"""$$$$$$###!!!!!!###!!!###%%%%%%$$$$$$######"""  """###$$$ !!!"""######$$$###""""""$$$###"""%%%&&&(((&&&%%%'''&&&&&&%%%$$$$$$$$$%%%###$$$$$$ """###""" !!!###$$$###%%%%%%&&&"""!!!!!!!!!""" """!!! """!!!  """%%%$$$$$$""""""######$$$$$$$$$$$$######$$$$$$$$$%%%%%%%%%%%%2)7/$90&4,!0(4-"6/#4+ 6-"90$:1&8.#8/#9/$<2&7-!2)?5*>5)8/#5, ;1%=4(8/#5, ;2&<4'90$:1%<4(91%8/#<4(<3'91%;2&7/#:2&;2&;3'=4(7."6-!:1%6-"90$;2&7.!9/#9/#90#9/"8/"7-!;1%:0$;1%;2&90#:1$<2%;1$C8*I=, '$    - - "!#0%9'7:7C& H)$C'"C)&WB> """$$$SiiTllQhiMceDZ]8OQ4JL2BD0<>#++ ! $%$!" !#$ !&'(//  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  o^GG<-<2%;1$<2%=4'=4&:0#;3%;3&;2&?6):1$>5(@7*;2%;2%>4'<3&;2%?6)>7):3%6.!8/"<3&8/"1(3+91%<3';2&>5)@8,=5)91%80$90$=5)=5):1%7."6.":2&=4(>5)=5)6."4+;3'?6*:2&:2&=5)>6*=6)=6*=5);2&=5)@8,=5);2&<3':2&91%;2&<3';3'<4(:2&8/#:2%=4(;3&<4(;4(80%80%:3(:2(82'81&6.#91&91&80%90%6-!5-!6."70$4-!5-#5.#5,"6,"2(1'2)4+ 4+5-!6."6."5, 3+2)0'0(2*0(0'3+6."5-!3*2(2(1'1&1'.%/%2)4+ 4+ 2+0)0)2+!2* 2)1),$*".&1).'A-"B-!F,H/H0 G/!E/"C-#=(8$<(A."=(8$7#7#<'<';&4 07$9%8$7$4!2 3!2!.0/.)'#  - - "#!!    -   -   -       -     -   -   -    -   -  - -  - -   -       -    - -               *-.- - < ! $ $  -# # $ % & # " !  #    -     #$"! !%&("&' %(")#("(!)#)#& (!.',%+%+%+%*%("'!(#*%*%)$(#'"(#*%+&+& !!! !!!!!! """###$$$###"""!!! !!!!!!!!!###$$$""""""""" !!!"""""""""!!!""""""###$$$%%%$$$###$$$######$$$###$$$"""!!!!!!"""######$$$###""""""###"""!!!!!!!!!"""!!! !!!!!!"""######$$$$$$#########"""!!!""" !!! !!!!!! """###%%%"""!!!""""""%%%&&&%%%$$$$$$###"""######$$$%%%%%%%%%$$$$$$$$$%%%$$$$$$######$$$ """$$$###!!!"""$$$$$$###%%%%%%%%%%%%&&&%%%!!!!!!""" !!!"""!!!!!!!!!"""#########""""""###"""!!!"""%%%%%%###$$$$$$###!!!###$$$"""!!! """"""""""""###"""######"""!!!"""$$$&&&&&&&&&&&&$$$%%%%%%%%%%%%%%%$$$######$$$$$$######%%%$$$"""!!!""""""###!!! !!!!!!  !!!"""###$$$$$$###""""""######$$$$$$$$$$$$%%%$$$############$$$$$$######6-#7/%3,!0)5-"6.#3+6-"80$:1&8.#9/$9/#<2&5, 2)>5)?6*9/#6,!;1&>4(8/#4+:1%<3':1%;2&<4(90$7/#<3'<3'90$;2&:1%:1%:1&90$;2&7."5-!=3(7-"90$<2'8/#:0$90#90#8/"9/#9/#<2&:0$:1$;1$8/":0#=3&;1$<2%E9*  *&    -  (-34;!6#:)"=& E# K)% XpsSnqKmnLjlUoqIac=WZ1NP2LL.HD(@;,12&  !#$ !!%--  - - - - - - - - - - - - - - - - - - - - - - - - -  -MA1B8*<2%;1$:1$;2%<2%90";2%<3':2%>5(90#=4'?6)90#8.!<2&=3&<2%>5(=6(;4'5.!6.!<3&:1%3)5, ;2&<4(;2&>6*@8,>6*;2&91%:2&?6*?6*:2&6."5-!:2&=4(?6*=4(7."6."<4(=5):1%:1%<4(>5)=5)>6*?7+<4(>5)A8,>5);3'<3';2&:2&<3'<3'<3'=5):2&7."80$<4':2%;3';4(91&80&:3(<5*81&80&80&;4)91&80%:0%7-!6."7.#6/#3,!4-#5.#6.#6-#2(0&2(4+ 5, 6."7."6."5, 4+2*0(1)3+0(0'4, 6.!5-!4+2'3(2(3)1'0'0&2)5, 4,!3+ 1*1*2* 1)0'/'-%*"/'?-"B-!I0%F."H0!F.B,D/#A-#9%8$>)<(:$:%9$8#7">*:&6"24!7$6"223"/.1 ,..-+$  !#%#!         -   -   -                 -  - -        - -   - -     -     -  -          ,0 . ' # -: #!! # % % % $ -"         - -   ##""!"& '!& '!("%'!)#)#)#*$*$& )#-&+$+%*$*$-'*$'")#+&,'+&*%)$)$-')#(#'" ######"""!!!"""############"""""" !!!""""""""""""!!!!!! ######""" !!!"""###%%%%%%$$$%%%$$$###"""###$$$###!!! """$$$%%%$$$$$$######"""!!!!!!!!!!!!  !!!""""""!!!"""$$$$$$%%%$$$###$$$### !!! """!!!"""""" !!!###$$$############$$$$$$%%%%%%$$$$$$%%%###"""""""""%%%%%%$$$###$$$%%%$$$###%%%$$$&&&$$$###"""###"""############%%%$$$$$$$$$%%%%%%###""""""!!!!!!!!!!!!!!!!!!!!!"""$$$"""!!!"""!!!!!!###""""""$$$###"""!!!"""###"""!!!$$$"""$$$### !!! !!!!!!"""######$$$$$$"""###%%%%%%%%%&&&$$$###%%%%%%&&&&&&&&&%%%%%%%%%$$$$$$$$$###%%%%%%""" """!!!!!!!!!  !!!!!!!!!!!!"""######$$$$$$$$$$$$############$$$######""""""!!!###$$$%%%%%%###$$$$$$###"""4,"1)6.#7/$4, 6."8/$90%8.#9/$8-";1$6, 4+=4(@6+;1%6-!;1&?5)90$5, ;2%=4(;2%:1%;2'90$7."<3';2&7/#91%90$90$:1%80$;2&6."7."=3(8.#;1&;2&9/#;1$90"8.!6- 9/":0#=3&<2&;1%:0#7. 8.!>4'>4'<2%A6(M@/ **, - - - -    - $%+0%:1)<,$18 C'D+@+N;2 [ssQqrLprInrLorJkn?`c>Y\8SU2OP/GH1F?1C:)50*#% !#$ !#!#**   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - eU@G<-@7)<2%;1$9/":0#;2%90";2%;3&90$=4'91$=5(?6):1$8/"=3&>4'<3&>5(;4':3%3,4- ;2&=3'8.!7.";3'=5);3'?7+@9->7*:3&70$:3&@9-@8,:1%7/#4, 91%=5)?6*<4(80$80$<4(<4(90%:1%=4(>5)<4(=5)?7+=5)=5)@8,>5);2&;2&:2&:2&<3';2&;2&=4(;3'80$91$<4&:3%;4&;3'81%81&;4);4)92'91&80&;3(91&8/$:1%6-!5-!7/#6/#4-!4-#5.#5-#6,"2(0&2(4+ 5,!7."7.#6."5-!5,!3*/'1)4+ 2)2)4, 5, 5, 5, 3)4)3(3(1'0&/%2*5,!3, 3+ 3,!1*1)1* /'/'+$*"A-!B-!G0$F0%F/"F,F.E0$>+ 5";&@+ 9#:$9$;&8$9$9$7#25"8%4"3!3!/.--../.+)  - !#%&$"   -          -      - -   - -    -  - - -    - - - -   - - -   -    -    -  -            ') ' -& # 6 - - ! $ $ % -% -#           #" !$$& '!(!(!)"' ("*$*$("*$*$("&)!,%+%*$*$,&+%("(#*%,','+&*%'"+&&!'")$ !!!#########$$$"""$$$!!!!!!!!!"""#########"""!!!!!! !!!""" """ !!!###$$$###$$$$$$!!! """###$$$  $$$#########"""""""""""" !!!###  !!! !!!###$$$"""""""""######"""  !!!"""  !!!###$$$"""###$$$###$$$""""""###$$$"""###$$$"""$$$%%%$$$$$$%%%&&&%%%%%%%%%&&&%%%%%%%%%###"""""""""######"""$$$$$$#########""""""#########!!!!!!"""!!!!!!""""""!!!!!!######"""""""""!!!"""$$$"""!!! """###"""!!!!!!#########$$$### !!!###!!!!!!!!!"""###$$$%%%&&&&&&$$$$$$###$$$%%%%%%&&&&&&&&&&&&###&&&&&&&&&&&&############$$$%%%!!! $$$###!!!   !!! """"""  ###$$$$$$######%%%######################## !!!"""$$$$$$$$$$$$%%%$$$%%%$$$###0(5.#80%6."6."8/#90$8/#8."6,!:0#6- 5,=3'@7+;2&6-!:0%?5)91%5-!:2%=4(:1%80#:1%90$8/#<4(;3'5-!8/#90$:1%90$6-!<4(8/#7."<2'8.#<2';2&9/#:1$8.!5+6,90#;1$=3&=3'<2&8/"6,8.!=3&=3'<2%=2%C7(  +,+  - - -   -   -  &*0#-29#>)@+?,=(@&E)E+!]IB UwzGw|HvzGqtMrw@di9]a3VZ4SV5SU3PQ3FG5,*0&!" !#$ %+) ! !  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - MA1A7)@6(<2$<2%90#:1$=4&;1$=4':1$90#<4';2&=4'?6);1$8/!=3&<2%:1$=4'=6)92%4- 5. :1%=3':0$8/#:1%<4(91%=5)?8+<4(91%6/#:2&?7+?6+80$7."4, 80$=4(>5)<3'91%90$;2&<3':1%:1%=4(=5)<4(<5(=6)<4(<4(>6*<4(:2&:2&91%91%;3':2&;2&=4(;3'91%:2%;3%:3%;4';3'80%70%;3(;4);4);3(70%91&91%80$:0$4+2*6."6/#5.#4-#5.$6.$6,"2(0&2(3*5,!5-!6."6."6-"5-!2*.&1(3+3*3*5,!4+4+ 5,!5+!5+ 5+ 2)2(0'.%5,!5-!2*1*1*/'.'0(-&.'?,!B-!C."C."C0$A, @)J1 M4$>)8%>)='429$>(=(9%5!3 4"3!5#4#2 1 1 1 / .-.,*)#  - -$$%%"     -      -          -          - - - - -  -    -          -    - -  -              ( ) ( -' -$ -  - ! $ % % $ #    - -    """ !%%& &'!& %&("*$("(!)#)#'!'!,%-&,&*$*$)#,&*$)$*$,'+&+&*%(#*%&!& '"(#"""""""""############!!!!!!"""#########""""""  !!!!!!!!!"""""" """$$$###### """!!!###$$$""""""######"""###"""!!!######  !!!!!!!!!!!!!!!$$$######!!!!!! !!! """"""""" """ """"""!!!"""############ $$$$$$$$$$$$$$$###$$$$$$$$$$$$%%%&&&'''%%%$$$%%%&&&&&&%%%%%%$$$"""!!!""""""###$$$###"""""""""!!!!!!"""############!!! !!! !!!###$$$$$$"""!!!!!!"""###"""!!!""""""""""""###$$$###"""###$$$###"""!!!"""""" !!!!!!!!!###$$$&&&((((((&&&%%%$$$%%%###&&&&&&'''&&&%%%$$$&&&''''''&&&%%%$$$%%%%%%$$$%%%!!!!!!$$$###"""  !!!!!!!!! !!!###$$$$$$############!!!############$$$###"""!!!!!!$$$######$$$$$$%%%%%%%%%$$$###5-"7/$6."5-!8/$;2&9/$6, 7-":1#5,6, =4(@6+;1&7-!<2&?6*:1%6-!:1%>5(:2%8/#91%;2&90$=4(<3'4, 90$:1%:1%8/#5, <3'8/#8/#;2&8."<2&;1%9/#;2%8/"4+6,:0#;1$=3&>4'=4';2$8.!7- <2&=4';1%;1$>3%PA0    /%**  - -          .1 5!<B!>$@- =(<#D!I)F*G-#F/'A+&UE@ - - - VN{BzIy{Et|@mt;a\;^`5Y\1VX5VX4RT4OP1DD/((*&#  !#$!#!"(& !!"  - - - - - - - - - - - - - - eWBF;,>5'@6(;1$<2&:1$;1$=4';1$=4'90$90$<4'<3&<4'>6(;1$7.!;2%<2&:1%=4'?8*:3&70#70";2&=3':1$7/"80$<3'7/#:3'>6*;3'81$6/"92&>7+>6*90%6."3+8/#<4(=5);3'80#80$;2&<3':2&;2&=5)=5)<4(<5(=6):3':3'=5)<4(;3':3'91%7/#92&:2&:2&;3':2&91%91$:2$92$;3&;3'80%6/$92'<5*<5*;3)7/%80$80$7/#9/#3*1)4, 5/"5/$5.$6/%6.$5,"1(0&1'3*5,!4, 5-!6-"6-!5,!2)-%1)4, 3*4+5, 3*4+ 5+!5+!5+!3)2)3*1'2(5,!4,!0)0(0).'.'.&-%A- B- A- B."B0#>+?*H1#G/ ?&=(@+ /+0:$<'9$;':&4 25#6$5$2!3"//2"0!.,+'#   ! "$$#"      - - -                  - -          - - -  -                 -  -  -         ""!!* * ) ( $ - - - " $ $ % $      -     "#$#!#%%(!'!' %$$& (")#("(")#)#("*#+$*$)#*$*$+%*$*%*$,'+&*%*%)#-( )$'"(#)$)$!!!"""!!!!!!###%%%###"""######"""$$$$$$$$$""" ######!!!###$$$$$$$$$"""""""""###$$$%%%%%%######"""""""""!!! """""" """"""""""""!!!!!!!!!!!! !!!!!!""""""######### !!!!!!$$$$$$###  $$$""""""!!!"""###"""###$$$&&&&&&%%%######"""#########$$$%%%%%%%%%%%%%%%%%%%%%&&&'''%%%$$$$$$$$$###!!!!!!!!!$$$$$$###"""!!!!!!!!!!!!"""""""""###$$$!!!  !!!"""###### !!!!!!!!!!!! """"""!!!###$$$#########!!!!!!""""""!!!!!!"""######$$$!!!"""$$$$$$&&&&&&&&&''''''&&&%%%&&&''''''%%%$$$###%%%$$$&&&%%%######'''&&&###$$$###"""###"""!!!!!!!!!  !!!!!!""" """$$$%%%$$$$$$"""###$$$###$$$######$$$$$$######$$$###$$$###"""$$$$$$$$$$$$%%%%%%$$$$$$"""6.#5,!5, 90$>4):0%5+8."90#5+5+<3'?5*:1%7-!<2&?5*:1%5, 90$=4':2$80#:1%;3'90$<3'<3'4+:2&:2&90$8/#5-!80$6-!90$;2&8.";1%:0$90#=4&;1$6,7- 9/":0#=3&>4(=3'=4&:0#7- <2%=3'<1%=2&9/"D8)   *%)(  -       -  %)+19; 4 29> B'@(D-"@) P>8TGBMHEDEI_b_ - - - XJ~B|~@}>vGos?gd9ca4_\4XL/\T)[Z-PP-IJ,EE+@@-::  !!#$$*) "!"  - - - - - - - - - - - - - - - - - - - - - LA1?5'?5'A8*<2%=3';1$;2%>4';1$<3&:2%:1%>5)=4'<4'>5(<2%7.!:0#<2&:1$>5)>6)<5'92%70#;3&=3':1$6-!6.";3'80#;3'>7+=5):2&70#:2&>7+?7+;3'7/#3*8/#=4(>5);2&7."8/#:2&=4(;2&;3'=5)<4(<4(;4(<5):3':3'>6*;4(;3';4(:2&4-!:2&;4(91%:2&92&91%91%:2%:2&<5);4'6/#70$92&;4(;4);3(70$7/#80%90%;1%6- 3+4-!5."6/$6/%6.$5-#4+!0'/&2)4+6-"4, 5-!5-!5,!4+ 1).&0(4+ 3*4+4+ 3*4+ 4+ 3* 3*2)0'0'2*/'3+ 3+ 0(/'/(/'/(?,!B- C/!C/ E0"@, ;(?+E/#?);$A+='-*19%9%8$8$:&4!014"4#0//+,.,*,*!   "$$""!            - -   -  - -   - - - -         - - -    - -     -  -   -          -        "% ##! * + ) ' $ -  - " & -!     -      "$###%' & (!%%("'!#$'!*$("& )#)#(!+%,%)#(")#,&+%)$)#+%*$*%+&)$)%-(!)$'#'")$)#&!"""!!!!!!"""###$$$###%%%###""""""$$$%%%###!!! !!! """###""""""$$$%%%&&&#########%%%&&&%%%$$$%%%%%%""""""""" !!! !!!$$$%%%%%%###"""!!!!!! !!!"""######""""""""""""### !!!!!!!!!###%%%$$$ !!!"""%%%$$$######!!!!!!!!!$$$"""!!!%%%%%%$$$"""###"""!!!###$$$###%%%&&&%%%%%%&&&'''&&&&&&$$$######"""###"""######""""""""""""!!!""""""""""""!!!"""######  !!!""" """!!!!!!!!!"""#########!!!###"""!!!"""!!!"""$$$######"""###$$$######"""###%%%&&&&&&'''%%%$$$%%%%%%%%%%%%$$$$$$"""###!!!%%%&&&%%%$$$&&&%%%$$$#########""""""######""" """$$$$$$$$$$$$$$$###$$$$$$$$$$$$###$$$%%%%%%######$$$###"""$$$%%%%%%###$$$%%%$$$###$$$$$$$$$$$$###!!! 5, 5, 80$=4(8/"7.!6- 9/"5+4*;1%?5);1%6-!;1%>4)90$5, 90$=4':2$90$:1%<3'8/#<3';2&4+90$:1%80$7/"6-!7/#5, 8/#<3'9/#:1$;1%90#=4'<2%8.!8.!9/"9/";1$?5(=3&<3%;2$9/"=3'>4(=3'=3':0#@4&SE1    -&%$        ""'+)(028"9&:&9$F0(J?7MUP?OMAZ[5nl=qqRWW P}:|~:~Ayx=,67$79!25##   "$!""$ "(&!"!#  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dUAG=.=3%@6(A7)=3&?5(<2%<3&?6(<3%;3%<3&<3&?6*>5)>5(=5(<3&7.!:1$=3'90$=5(>7*=6):3&70#;3'=4(<2&5-!7.";3':1%;4(>6*=6):3&70$:2&=5)>6*<4(7/#4+ 8/#<4(>6*;2&7."8/#;3'>5);3';2&<4(;3'<4(;4'<5(:3';3'>6*92&91%;3':2&7/#91%:3'80$92&:2&91&91%:2%:2&;4(92&5."6/#91&:2':3(:3(7/$5."91%91%92%91$1*3,7/$4-"5.$6.%5-#3+!1(1(1(2)5, 5,!6-"5-"4, 3+2)0(/'3*3*2)2)1(2)1)1(1)0(1)2)1(0(2*1*0)/(/(0)A- C-G1#I3"J2"E/ >*?+?*;&<'A, 2) /6"9%;(9%9%7$2/011 0 .-***+*(&  " ##!$#! - -      -          -  - -      -         -            - - - -  - - -  -  -    - -    -    ""#% % $"#!+ * ( & #  - -!              "##$"#&)"' ' %$$%& '!(!*#*#("("' %*#+%)#(!(!,&)#("'"(#*%)$+&(#*&,' *%(#% '"($&!"""######$$$%%%%%%%%%$$$!!!!!!######"""!!!"""   ######$$$%%%%%%(((%%%$$$$$$%%%&&&$$$###%%%%%%###"""$$$!!! """!!!!!!###%%%%%%%%%$$$"""!!!!!!###%%%%%%$$$###$$$$$$""""""!!! !!!"""###!!!!!! ###%%%$$$###"""!!!""""""###'''%%%&&&$$$###!!! """$$$###$$$&&&%%%$$$%%%''''''&&&%%%$$$"""""""""###$$$###!!! """!!!""""""!!!!!! """######   !!! !!!!!!""""""!!! !!!"""######""""""$$$""""""!!!!!!$$$$$$###$$$######%%%%%%######%%%%%%'''&&&%%%%%%&&&%%%&&&&&&$$$###"""%%%%%%&&&'''%%%%%%%%%$$$%%%$$$#########"""""""""###!!!   ######$$$%%%$$$$$$$$$$$$$$$%%%$$$$$$$$$$$$$$$$$$###$$$###"""###$$$"""###############"""###$$$###"""!!!!!!"""5-!8/#<4'90$6- 7.!9/#5+3):0$?5)<2&7-!90$=3'8."4+:0%>5);2&:0%;1&;1&8.#<3':1%4+80$80$6."8/#7/#7."4, 8/#=3(90$:1$<3&:0#<2%;1$9/":0#9/"8.!9/">4(<2%=3&<3%:0#=4'>4(>3'=2'9.";0$C7(   - %%% -   $(")0/348(>=/<>/ppAhd=`_:]h=Wg6T_&Y_W],JK-+.!&#$4" !"& "##$#$!""$!#!#)("#"$!! - - - - - - - - - - - - - - - - - - - - - - LA1D:,>3&?5(?5'<2%?5(<2%<2%?6)=4&:2%;3&=4(?6*?6)=5(>5(;2%7.!>4'?5):2%=5(?8*=6(81$70#90$<3'<2'6-!80$<3';3'<4(=5)=6)92%6/#91%;3'<4(;3'6."5, 8/#;3'>6*;3'7."90$=4(?6*;2&:2&<4(;4(<5)<5(=6*;4(<4(>7+70$70$92&81%70$:3'81%6/#91&81%80$91%:2%92%:3&81%5."6/$92':3';4(;4)80$6/#91%80$80#81$2*4, 7/$4-#4-#5.$5.$2*!2) 2)/&3*5,!6."6."5,!4, 4+ 2)1(0'3+ 3*0'/&0'2)0(.&0'/'0(3, 1)/'0(0(0(/(?, C-E-F. L4!K2 F/F/!B. ;&9$A,">*/-27#9&:&4 6!5!3 3!5#1 1/-*% '*))&" ! &&%#"!            -   - -    -  -     -    - - -  -  - - -  -   -  - -  -    -       -  -     - - -  """"#&!% $ $$ # !( * ) ' $   - -       -    "##$###$(!'!' %$& (!%' )#*$*#)#'!%$)#*$(#("'",&("% % )$*%*%*%($+&,')$&!$&"(#&!&!""""""%%%%%%$$$$$$###""""""###!!! """ !!!###$$$%%%&&&'''((('''$$$&&&&&&$$$###$$$%%%%%%%%%$$$%%%$$$"""!!!"""###!!! ###$$$###$$$######"""!!!""""""%%%&&&$$$$$$%%%%%%$$$"""######"""!!!!!!"""$$$"""###$$$%%%&&&%%%%%%%%%%%%######$$$!!!%%%$$$$$$&&&%%%###"""###############%%%%%%$$$$$$%%%&&&'''%%%###""""""######### !!!""""""""""""!!!###!!!!!!""" !!!!!!   """""""""""""""""""""###"""""""""!!!!!!!!!!!!!!! ###$$$$$$$$$######$$$$$$$$$###$$$$$$&&&&&&%%%&&&&&&%%%%%%%%%%%%$$$"""%%%&&&%%%&&&$$$$$$&&&%%%%%%$$$""""""###"""!!!$$$!!!  !!!######$$$$$$$$$###$$$%%%$$$$$$$$$$$$###$$$$$$$$$$$$$$$#########!!!!!!"""###$$$""""""###"""""""""""""""###$$$8/#<4'91$5- 7.!9/#4+1'90#?6)<2&7-!:0$<3'8."4*;1&?5*;1%:0$;1&;0%8/#=3(;2&5,!90$:1%8/#8/#8/#7."5, 8.#<3'90#:1$=3&:0#:1$:0#9/":0#8.!9/"9/">4(;1%>5'=3&9/"<2&=3'=3'<2&9.";1$@5&WH4    -  )#   -   !!!!!% *+3(&/&!8%D$=4+5OG;YS:LN=a_4&<2%?5(<2%;2$=4'<3&:1$:1$;2%=4(=5(?6)?7*;1%6- >4(>4(;2&=5(?8+=6*81$5.!7.":0%:1%7."8/#:2&;2&;3'<5(=5)81$6/#92&;4(<4(;2'6."6-!8/#:2&=5);3'8/#;2&?6*?6*:1%;2&=5)<4(<5)<5(>7*=5)<5)>7+70$7/#91%70$6.":2&:3'7/#5-!6/#70$:2%:2&91%92%92%6/#6/$91&91&:3';4(70$6."80$7/#7/"81$3,4-!70$6.$5-#5-#6/%4,#4+!1(0'3*5,!6."5,!4+ 4+ 4+ 3*/'/&2)1)/&-$/&3*0(.'.'-%/(3+ /'/'1*0)0)A, D.C*H.L3 G.C+F.D-;%;&C.#6".16"6"8%9$8!13314"1 0.*' $ (+'&$ "&'%#!     -        -    -         - -    -    -   -   -       -   - - - -     -      -  - - - -  !$ ""$&!#% #&!#!!!!  ( ) ( & $ 3      - -    #$$%"  #("' ' $$& $$& ("'!(!'!""'!'!'!'!("+%("% '"+&*%+&*%&")$+&*%&!% &!&!%!&!#!!!$$$%%%%%%$$$###"""!!!"""###!!!!!!!!!###$$$$$$$$$$$$&&&&&&%%%"""%%%'''&&&$$$&&&%%%###$$$%%%'''%%%$$$$$$&&&$$$"""!!!######"""!!!""""""!!! !!!!!!###&&&$$$###$$$$$$%%%$$$#########"""""""""$$$"""$$$&&&&&&'''%%%%%%###%%%###$$$$$$$$$%%%"""$$$%%%%%%######$$$$$$$$$"""!!!"""############$$$%%%&&&&&&&&&###############"""""""""###"""###$$$""""""!!! !!!"""!!!!!! !!!!!!!!!"""""""""###$$$""""""""" !!! """"""!!!"""#########"""###$$$$$$$$$###$$$&&&$$$$$$%%%%%%%%%%%%&&&%%%&&&'''&&&%%%&&&'''%%%'''%%%###%%%%%%&&&%%%""""""###"""""" ### """#########$$$$$$"""###$$$$$$$$$$$$$$$%%%$$$$$$$$$$$$$$$###"""######!!!"""$$$$$$#########"""""""""!!! """###""";3'80#6-!7."8/#5+0&9/#?6*;1%5+9/#=4(:0%3):0%?5*;2&9/$<2&<1&:1%>4):1&4+8/#:1%90$7.#6-"6-!6, 6-!91%9/#9/$:1%8/#90#:0#7.!9/"8.!:0#<2$?4(<2%>4'=3&9/"=3&=3&<1&;1%;0$<2%<2$A5%  - -  - - -* %!         +26)'#*37.975GDCCNHAJE73,E5$F0D4*E==\\^WhmQkxPmyDlp>nq>pr>op>oqBoq@rq@rsArr?vrvuCsvBvxBxyEy{Iw{GuBwkn5hq5`h4ac&a_*WW8PV6GP.CJ)C? 83!85#3,&" !!""#"#"#"#"#"#"$!#!'-,#$$%"#  - - - - - - - - - - -H=-@7)A7*?5'>4'=3&;1$>4'<2%:1$<3&<3&:1$:1%:2%<3'<3&=4'?6*:1%7.!=3'>4(:2%<4(>7*<5(70$3, 6."9/#;2&8/#8/#;2&<3'<4(=5)<5)70$3, 91%=6*=5)<3(6."6."80$91%<3'<3'80$<3'@7+@7+:2&<4(>6*<5(;4(<5(>7+=6*=5)=6*81%7/#92&70$6/":3':3'81%6/#5-!81%;3':3'92%91%:3&70$5.#70%81%:3'<4)80$6."70$7/#7/"80#4, 4- 6/#6.$6.$5-#7/%5.$4,"1(1)3+ 6-"6.#4,!4+ 2*1)4,!.&/&1)2)/&-$.%2)2* 0)/'-&0)2+ 0)/)2, >, D-J.H-L1"J1 C*E,G.C+<%@*A, 105!6"6#7#7#55 5 01/000!)$ &+*("  ! #%($#!      - - -   -          -   -    -    -     -   - -     -  - - -   -   -       - - - -    - - ""  # "%!$ $$$&!$" ! ( ) ( $  43       -   -      #$$##!#$'!%%$"%$$!%'!& ' ""& & ("&!'")$&!&!(#)$+&+&)$'"(#'"&!$% $ $ ####$$$############### !!! ###!!!!!!%%%%%%%%%&&&###!!!$$$%%%###%%%&&&%%%%%%%%%&&&'''%%%###"""$$$$$$###%%%###!!! !!!"""!!! !!!###&&&%%%$$$$$$$$$%%%&&&%%%$$$######$$$###""""""$$$&&&%%%%%%%%%$$$$$$%%%$$$&&&%%%$$$$$$"""$$$$$$###!!!"""###$$$###!!!"""""""""######$$$$$$%%%''''''%%%###$$$%%%###"""######$$$$$$"""###$$$""" """!!! """""""""!!! !!!!!!!!! """######""""""!!! !!!"""$$$###""""""""""""###""""""$$$%%%######%%%$$$###$$$$$$$$$%%%%%%%%%&&&))))))'''$$$&&&&&&%%%%%%$$$"""###$$$$$$$$$###$$$$$$###%%%###""" """#########%%%%%%"""!!!"""###"""###%%%$$$$$$###!!!######!!!!!!###"""!!!!!!###$$$############"""!!! !!!!!!!!!7."6-!6-!7."5+ 0&9/#?6);1%4+8."=3';1%2(:0%>5)<2&:/$<2'<2';2&>4):1%4+7.#:1%:1&8/$4+ 6-"7."6-!80$8/#:0%<2&8/#9/#8/!7. :0#9/";1$=3&?5';1$<2%:0#8.!<2&>4':1$;1$;1$<2%;1$>3$XI3         &#" - -  "!#* ")860:' ;.'4/-B><@60;&;(#AA@LTTP`cHbgGfk@gk6gi5ij7gi9fk:gm9gk:gj;hl8kj6nj5(@6)>3&=3&=3%:0#<2%;2%:0#=4&=4&;2&;2&<3&>5(>5(<3'=5(91$90#>5(>5)91$;3'=6);4'6/"2+5-!8/#<2&8/#8/#<3'=5)=5)=5);4'81$3, 81%>6*>5*;3'5-!7."91%:1%:2&<3'90$;3'@8,@7+:1&>6*@8,=6)<4(<5)>6*<5)<5)<5)81%7/#92&70$70$:2&92&91%91%91%80$:2&:3&92&92%:3'70$4-!6/#6/#80%:3(7/#6."70$7/#8/"80#5-!5-!5."4-"4,"5-#4-#4,"2+!1*1)3+ 6-"6.#4-!4,!1)0(3+ /&0'1)1)0'/&/&3*3+!1) 1) /(1*0)/(0)A, F.M1N2 S8'J1!C+F/I1"B+B+D-8#3335 7#5!5!5!234 1310.'$ &*+&!  "%%""  "!   - -                 - -                    -  -    -  -  -       -  - -   - - !##! # !% &!% $ $&!$ ""!!' %     -4) -    - -        -  - -  "#$%##"  $%$#$& %("& %%&!'"&!'"& $("*$*$'"&!(#'"$'"(#)%)$(#'"'"'#'"&"%!$&!&!"!!"""$$$######$$$!!!    $$$%%%$$$%%%"""!!!$$$&&&"""$$$'''&&&%%%%%%%%%&&&$$$###"""!!!""""""######"""!!!"""""""""!!!!!!$$$$$$###$$$%%%%%%&&&&&&$$$#########$$$%%%###$$$$$$$$$&&&%%%%%%$$$$$$$$$&&&'''%%%'''###$$$###"""!!!!!!!!!"""###"""###############$$$$$$$$$&&&'''$$$###%%%$$$###"""######$$$$$$$$$$$$$$$###  """!!!"""!!! !!! !!!""""""!!! """###""""""""" !!!######"""!!!""""""###!!!!!!###$$$#########%%%######$$$###%%%&&&''''''&&&$$$&&&'''&&&%%%&&&%%%%%%###"""###!!!###&&&%%%&&&&&&%%%&&&###!!! !!!"""###$$$$$$###!!!""""""!!!"""$$$$$$$$$###!!!######!!!"""""""""""""""######""""""###"""!!!!!! !!!""""""90$8.#8/#7-!1(9/#>5(:0$4*7-!<3';1%3*;1&>4);1%:0$=2'=3';1&=3(:1&5,!6-"90%;2&:0%5+ 9/$90$6-!90$8.":1%>5);1%:0$7.!7. :0#:0":0#>4&?5'<2%=2&<1$:/"=3&=4';2$;2%:1$;2%;1$:/"B5&  -   -  -  - &%$ - -     "0016!1-(%3=B-7:9?<8F?:NJBRV:NQ:XZ2VY3WZ3W\0X[2X[1V[0U]1T]0SZ0UY1Y[5Y[8VZ9UZ5VZ7V[7V\2UZ1RX3QY4RY6WY2ZT2ZT5XU-UK+9.2,'$%'.+*'!! #"%&$'#"" !!!!"""""#!#!#"#"$"$%%$!)/-"#%&#$!"   - - - - - - - - - - - E:+>4'>5'@6(>4'>4'=3&9/";1$<3&:0#=4&=4'=4'=4'=4(?6*>5)=4(=5(80#80#>4(=4(80#:2&<5(:3&5.!2+3+8/#;2&8/#6.";2&>6*=6*=5);3'81$4, 80$=5)=5);2'5-!8/#;2&:2&;3'=4(80$:1%=5)<4(80$=5)@8,>7*=6)<5)=5);3'<4(:2&80$91%:3'80$7/#92&91%92&:3':2&70#80$91%91%92&;3'70$5."70$7/#80%;4(70$70$80$70$7."7/#6-!6."7/$5-"4,"5-#2+!3+!2* 2* 0(2*5-"6.#4,!2+3+ 3+ 2*0(0(1)1(1(1(0'3* 1)0)2+!1* 1* .(.'D-M2O3!Q5#R7%L2"E-C,D-?(@*C,25 8#5!15!6"3 12 3 4!5"4!1//(&)$ $ $  " ##! #!     - - -              -                 -   -       -     -     -    - -   - - - - - -#  !$" $ !$ $ '#$$$#!"!   - 2  -  -     - - -   -    - !"#%%""!"!$$$#$&%("%%' '!&!% &"% "'!*$)#("(")$$'")#)$)$(#(#'"&!'"% $ % % )$$!! #$$$#########""" """ """ !!!"""""""""######$$$$$$%%%'''&&&&&&%%%%%%$$$###"""!!! !!!""""""###"""!!!###%%%###!!!!!!$$$%%%###%%%%%%%%%%%%%%%$$$###"""###%%%######$$$'''%%%$$$%%%%%%$$$&&&%%%%%%%%%%%%%%%%%%$$$###""""""""""""######$$$%%%$$$###"""%%%%%%$$$%%%%%%######$$$$$$###!!!"""$$$$$$$$$$$$$$$$$$""" !!!"""!!!!!!!!!!!!!!! """######!!!###"""!!!!!!""""""!!!  """######"""!!! !!!!!! !!!$$$###""""""!!!!!!"""$$$######&&&''''''(((%%%"""%%%'''&&&&&&&&&$$$$$$$$$#########%%%%%%%%%$$$%%%%%%&&&"""  """###$$$$$$###"""$$$""""""###$$$$$$$$$###"""$$$###""""""""""""!!!!!!"""""""""###""" """ !!!"""""""""8/$8/$7.#2)90$>5);2%4+7.!>4(;1&4+:0%>4);1%9/$=3'=3(:0%;2&:1%6-!5,!7/#90%8/$4+ :1%:1%6-!;2&90$:1%>4(;2&;1%7.!6- 7- 8.!:0"?5'@6)=3&>3'=3&;1$>4'>4'<3&<3&:1$<2%;1$8- ?3%aO; - -   -  - -   +#$#  "" !$&$&!# "*+ ' ':@+FN/GG+FD/JI.FG0NN-LL2IN2FM.IN)IL+IL*GL)DM+EN)GL)LM)GI3HL1DJ3EJ2FK:GO89B-9@(7;045+>5(@6)?5(?5(=4&9/";1$=3&;1$>5(<3&;2%:1%;2%?6*>6)=5(<4'90#90#>4(<3'7."91%;4'81$5.!1*3+8/#;2&90$6.!:1%>6*?7+>6*<4(91%6."91%;4(<4(;3'6."7/#:2&:2&;2&<3'8/#;2&>5)<3'8/#;2&=5)=6*<5);4(<4(;3';3':2&5."80$:3'91%7/#92&:3':3';4(:3'6."7/#80$92&:2&;4(70$5-!80$70$6/#;3'7/#6/#6/#6."7."6-"4+ 6-"80%6.#4-"3,!2+ 3+!2+ 1*/'0(4-!6.#3+ 1)4,!4,!0(0'0'2)1(2*4+!1)2)0(0(2* /)0)A,F.N3 P5"Q5#N3"I0!E-A+@*>)=(:%35 6!7"5!4 7$4!2 2 4"5#6$3!//.+&%" ! !  $$! ! ""    - -   -      -    -    -  - -    - -        - -  -     - -  -   - -       - -  - - - - - - - " !!!" ! "!##"$#!!           -        -         "%&#$#"$! !#%%$$%$( #%& %$%'!"& '!& &!'"(#&!&!&!)$'"'"'"&!&!'"$% $("'!#""  !###$$$$$$###""" !!!!!!  """### !!!!!! ###$$$%%%%%%&&&&&&&&&&&&%%%$$$###!!! """"""$$$###!!!$$$&&&%%%###$$$###!!!!!!!!!"""######$$$%%%%%%$$$$$$$$$######$$$%%%!!!"""$$$%%%%%%%%%%%%$$$$$$&&&'''%%%&&&$$$%%%&&&%%%$$$$$$###!!!""""""!!!###%%%%%%%%%$$$$$$$$$$$$######"""###$$$###""""""$$$$$$$$$###$$$%%%%%%###$$$!!!!!!"""###!!!!!! !!!"""""""""!!!!!!!!!!!!!!!""" !!!###""""""###$$$$$$"""!!!"""######""""""!!!!!!""" """$$$""" $$$%%%&&&&&&!!!$$$'''&&&(((&&&&&&$$$""""""""""""$$$%%%%%%%%%'''&&&%%%$$$ !!!!!!!!!!!!"""#########$$$###""""""$$$###$$$$$$$$$$$$###$$$###$$$###!!!!!!!!!!!!!!!"""""""""###!!!  !!!"""#########7.#3*8/#>5)<3&6, 8/">4(:1%5, 90$>4):0%9/$<2'<3'8/#90%:1&6-"3+5-!7.#6-"2):1%:1%4+:1%9/$:0%<2&:1%:1$6, 6, 7- 8/":0#>4'@6)=3&?4'>4';1%=3'>4'<2%=3&;2$;2%;1$8-!;0#E9*      -  *"'&   !!$$$%#%"%!$#% '& $%23%9:$98&;:)<<'<<(;>*;?&:>"@B=>!<>";=";=$:?#9?#;>%:=(7</2,/$15&,/#"&$'""!,(!0*&$"# %&,  $!&#"$"$!#!!!!"!"""#!#!#!#!#!"  %&&%+11!"%&$%""  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -A6'9/"<3&=3'?6)?6(<3&;2$7- :0#<2%90"<3&;2%91$8/#80#?6*?6*>5(<4':1$:1%>4(;2&7/#81$:3'70$5."1*3*7.":2&80$6-!90$>6*@9,>6*<5(:2&70$:2&<4(<3(:2&6."6."80$:1%;2&;2&7.";2&>5)<3'80$91%;3'=5)<5(;4(<5);3';3';3'81%:2&:2&70$6."91%92&91%92&92&6/#5.!6/#80$91%;3'7/#4- 81$81$5.":3'6.#6/$5-"6."6-!5, 3*5,!80$5-"4,"2+ 2+ 3+!2* 0(.&.'3, 6.#3+ 2*3, 2*/'.&/&2)1(1(3+ 1)0'/'0)1* /(D-G.M4 O4"N3!I/F.A*@)>)>*<)/16!5!34!5"22003!3 3!2 0 .,("  -  &'$$$   - -      -     -         - -            -  - -      -     -   -   -   -     -        - - - - -" !   !   !""            -  - -   """%!$$" "#!"!"#&#$$""$'!! %%$%% & %"% '"(#&!& % % &!$##$& #! ! !!!###$$$!!! !!!!!!###""""""!!!  """$$$%%%$$$&&&&&&&&&%%%%%%%%%$$$""" """######$$$###"""%%%&&&$$$$$$###"""!!!"""""""""""""""###%%%%%%$$$############"""###"""######$$$%%%$$$%%%$$$###&&&'''%%%$$$%%%&&&'''&&&%%%$$$$$$$$$###!!!"""###$$$############"""#####################$$$$$$$$$$$$$$$%%%%%%$$$$$$!!!!!!#########"""!!! !!!!!!######"""!!!"""!!!!!!!!! !!!"""!!!"""$$$###"""""""""$$$$$$###!!!!!!!!!!!!!!!!!!###%%%$$$!!!###%%%((('''$$$&&&''''''''''''&&&%%%$$$#########&&&'''&&&&&&&&&&&&&&&%%%"""   """###""""""############$$$%%%###""""""###""""""###$$$$$$$$$$$$$$$###"""""""""""" !!!!!!!!!  !!!"""############3+7/#>5)<3'5, 8/#>4(:0%6-!:0%>4(:0$9/$<2'<2'6-"90$;3'6."1)6-!6-"5,!1(90%90$3+7."7-!:1%<2&:1$90#6, 7- 9/":0#9/"<2%>4'=3&>4'=3&;1$=3&=4':1$<2%:1$9/";1$7- 6, B6(iX@     -   -  -   *+- - - "!$#%#$#$$#%"&#%%%%&$&"$ % #'(///,,+**))*-'*'*'('(%'$&$%#%$%$$%& '!&!##!!( !!""#"#"#"$!#"""""""#!#!#!" !   $%'')/0!"%&$%"#   - - - - - - - - - - - - - - - - - - - - - _P;=2$7.!<2&=3'?6)>5(;2%90#6,90#:0#6,90#:0#:1$;2%:2%?6*?7*>6)=5(;2%;1%=4(:2&8/#81$92&81%4-!2+1(7."90%8/#5, 8/#>6*@9-<5);3'92%70$:2&=5)=4);2'80$8/#80#:2&:2&80$5, 90$<3';2&91%:2&<4(>6*;4(;4'<4(;3';4(;3':2&:2&;3'70$6/":2&:2&80%70$70$5."5/"70$81$80$92&6."3, 81$80$7/#91%5.#5."6/$7/#7/#6-"3*5,!7.#4,!5-"2+ 2* 2+ 2* /',$.&4,!6.#4,!4,!2*1)0).&.%2)/&-$1(/'.%/'0(A, F-J0N4!P4#K0D+F.C,>'>(?* 9&,,13 4 13 0.00///// -($#  %&##%"  -   "  -  -    - -        -  -     -  - -  -   -        -            -     - -    -  - - -             -      !"!!"$#!  !   !#%"##!!!$!"$#""$#$#$#$#"#% #$"#!"! !!!!!! !!!!!!""""""######"""  """$$$%%%$$$$$$%%%$$$$$$%%%%%%%%%$$$"""!!!"""!!!""""""######%%%$$$###############$$$$$$$$$%%%$$$"""$$$$$$###$$$$$$### !!!!!!"""###$$$$$$%%%$$$"""$$$&&&######%%%%%%&&&&&&%%%$$$$$$$$$$$$$$$$$$ !!!""""""!!!###""""""###$$$######$$$$$$###"""""""""$$$$$$$$$$$$###"""###""""""!!!!!!!!!!!!  ######"""!!!"""""""""""""""!!!!!!!!!###"""!!!$$$$$$$$$"""!!!""""""!!!"""!!!!!!###"""######"""###%%%###$$$&&&'''&&&&&&''''''&&&'''&&&%%%&&&'''%%%###%%%&&&''''''&&&&&&&&&&&&$$$###""" !!!  """""""""######!!!###############$$$###"""######"""######$$$###$$$######"""$$$###"""!!! !!!"""!!!!!!!!!!!! """""""""$$$$$$90$3+7."<3':1%6-!90$>4(:1%6, :0%<3'9/$:0%=3(;2&4+8/$<4(7.#3*7.#5, 6-!1(90%80$4+7."6,!:1%;1%:0$:0$8.!8.!:0#;1$8.!:0#=3&=2%>4'=3&:1$=3&=4':1$;2%90#8/";2%7- 6,=2%I=.  -   -  - - +,(  !"$%$%$$$$%$$$"$#$$$$##"##$&#%"#"$!"##%$$$"""#"#"%#%$&#%"%"%#%#$%%&&((%%%#%"&$%&"%"#%)%)%(&)*&,$) "!#!""!!! !!""""#"###"#!" !$ &&&'-.*23 !$%$%"#   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - H=.9/"8."=3'>5(=5(<4&<3&90#7- :0#:0"8.!;2%;2%;2%<3&;2&>6*?7*>5(=4';2%;1%<4':3&80#;0$;0%82%5/"4*3*6."80$8/#5, 7/#=6)@8,;4':3'80$80$:3'=5)>5*=4):2&90$80$;2&:1%7."4, 80$<3'=4(;2&;3'=5)?7+<5(:4';3';4(;4(=5);4(;3'<4(70$5."91%92&81%81%81%7/#60#81%81$81$92%6."3+81$91%80$70$4-!4-!6/$90%90%6-!1)3+7/#5-"4,!4-"4-"4,"4,"2*.&/'3,!70$5-"4-"1)1*0(-%.&2)/&+",#/&/&0(C-F-F,L2 O3#G-C+F.D-='>(?+!9%4!3/3 +.13!/13!3".,,,*($  !%$ %"! !           -      -   - - - -  -    -       -   -  - -   - -  -  - -  -      -      -         -          !"!    !"  !! "!#!#$###"#!  !!!   !!!"""######!!! !!! """###""""""!!!!!!!!!!!!""""""&&&&&&&&&&&&$$$%%%&&&&&&%%%###"""!!! !!!""""""###$$$######$$$$$$$$$$$$$$$$$$%%%&&&%%%""""""$$$$$$&&&$$$### !!!###%%%###"""######$$$$$$###%%%%%%%%%%%%%%%$$$$$$$$$###%%%%%%###""" !!!"""!!!"""!!!!!!"""######$$$%%%$$$###""""""###$$$$$$######$$$"""######$$$### !!! """!!! """###$$$###""""""""""""###$$$#########!!! ###$$$$$$$$$$$$"""!!!!!!!!!"""###"""###!!!$$$'''""""""%%%%%%%%%&&&%%%%%%$$$%%%$$$$$$%%%%%%%%%&&&&&&""""""%%%'''&&&%%%%%%&&&&&&%%%$$$$$$###$$$ """!!!$$$$$$"""###"""""""""######"""!!!"""###"""###"""""""""############$$$###############!!!!!!!!!!!!""""""!!!""" ###""""""$$$%%%8/$4+7."<3':1%6-!90$>4(;1&6,!:0$=3(:0%;1&<2';1&5+ 90$<3(7/#6-":2&6."6."3*80$80$7/":0$7-!7-!<2&;1%;1%90#9/":1#;1$7.!:0#>4&<2%>4'<2&:0#=3&>4':1$<3&90#;1$;2%8.!7- :/#F:+m[C       -  /'$   ! #!$#&$&$&$&$%"%"&$'$%#"!  $$$$$$#%$&$&$&$&$&$&$&$&$&$&$&#&#%"%"$"$!$!"!!! !! #!" ! ! !!""##$##"#!!  -# $%#(--*55 !$%$%"#(*  - - - - - - - - - - - - - -aR=D:+7.!8/">4(@6*=5'<3&<3&90#8/":1$:0#:0#=4&=3&<3&<3&;2&>5)>5)<4'<3&;2%;2%=4';3&91$:/$;/$61$5/"5)5+6/#90$:1$6-!6."=5)>5*:2'91%7/$7/$:2'=5*?6*=4):1&7/#7.";3';3'90$7.":1%=5)@7+=4(;3'=5)>7*;4(:3';4':2&81%<4(<4(<4(;4(70$5-!70$7/#70$80$91%70$6/"71$81$81$91%7."3*90$:2%80$70$4-"4-!6/$8/$7/#5, /'0)6/#5-"2+ 4,!5-#5-#4,"2* -$/&2+ 6/$4,"3+!1*1)0(/'.%0'/&)!*!,$A, E-K1#K1!M2!K0 E*E,E.B+=';&<'9%5"6#7$-& -)/12-04#1 -+))(! "(('$"                - -         -   -   -   -  -   -  - - -  -   -  -           -   -      -        -              !! !!# """""$$$$$$###   !!!  """"""""""""""" """###$$$%%%%%%''''''%%%%%%%%%%%%$$$"""""""""""""""######"""###$$$$$$""""""$$$$$$$$$$$$$$$#########!!!!!!"""$$$"""""""""!!! ###$$$###$$$$$$$$$&&&%%%$$$###%%%$$$$$$%%%$$$$$$%%%$$$&&&%%%%%%$$$"""!!!!!! !!! !!!###$$$$$$&&&%%%$$$###$$$$$$%%%$$$###$$$$$$$$$$$$$$$&&&###!!!!!!!!!######"""!!!"""""" """###"""!!!!!!###"""###$$$!!!!!!"""""""""%%%$$$"""!!!!!!"""%%%######"""$$$'''&&&%%%&&&&&&&&&&&&&&&&&&%%%$$$$$$###$$$%%%%%%%%%$$$!!!"""%%%%%%&&&&&&&&&''''''%%%$$$###"""###"""$$$!!! !!!$$$$$$$$$$$$$$$###!!!"""""""""!!!"""######""""""""""""#####################%%%%%%###!!! """"""!!!  """#########80%8/$3+5-!:2&90$6-!90$=3(;1%5+ 90$>4)90$90$:1%:1%5, :1&<3(5-!5,!:2&6."4, 4+ 90$91%90$;1%8."8/"<2&:0$90#:0$9/#;1$<2%8.!9/">4'>4'=3&;1$:0#>4'>5(:0#<3&:0#;2%;1$9/"8.!:/#A7)I=-  -  -    6"!-#!$$&$ -   !##%#%#&#&"&#&#&$&$&%&%&%&%%  #"#$$&$&%'%'%'%'%&%&$&$%$%$%#$#$"#""!"!!!!!! "!#!"!" ! !!""$#$"#!" !  !!$($*/-0<;#"##!# !#$$&#$ (*   - - - - - - - - - - - - - - - - - - - - - - - - - - G<,?6(7.!8."@6*A7+@7*>5(<3&:1$90#;1$:1#:1#=3&=3&<3&<3&;2&<4(<4(;3&<3'<2&<3&>5(;3&70#;0$<1&72%70$6*5+ 80$:1%;1%7."7."<4(?6*<4)92'80%80%;3(>6+>6*;3'80$80%7/%:2'80%90%7/#;2&=5)>6*<4(;2&<5)=6*92%81$:3'92&91%<4(<4(<4(;4(92&6/#81%81%91%91%91%7/#6/#70$81$81%92%7/#2*6."80$7/#7/#4-!3,!5.#5,!5-!5-!0)/'4, 4,!2*4,!5-#5-#4,"2*-$1(2+ 2+ 3+!2+ 2*2* 0(.'-%.&0'*!+#C,E-J1$M3$N3#I.F+H.G. C,@*='6"4 15"3 +) ,/.-00/.+)*)$  -$'(&$#!  !!    -        -   -  -           -      - -      - -    -   -     -    - - - -       -                  ######!!! !!! !!! !!! !!!!!!!!!  """!!! !!!######$$$%%%%%%&&&%%%%%%###$$$$$$""""""!!!###$$$######"""!!!$$$$$$"""###$$$%%%$$$$$$%%%$$$###"""""""""######""""""""""""!!!"""$$$###"""$$$&&&%%%%%%&&&$$$%%%%%%%%%%%%$$$###&&&$$$$$$$$$######"""!!!  !!!!!!###$$$&&&%%%$$$""""""$$$$$$$$$$$$$$$$$$%%%%%%%%%&&&'''%%%### """$$$###%%%###$$$""""""###$$$###!!!"""###"""######""""""!!!""" !!!###### !!!############"""%%%(((&&&%%%%%%%%%&&&'''&&&&&&"""""""""###%%%%%%%%%$$$######$$$%%%&&&&&&%%%&&&(((&&&%%%###"""######%%%"""!!! !!!"""!!!$$$$$$$$$""" !!!###""""""###"""#########$$$$$$$$$######$$$$$$###$$$$$$###!!! """"""!!!!!!"""!!! """""" """######6.#91&91%2*3+:1%91%6-!8/#<2'90$2)7.">5):0%9/$:1%90%4, :2&;3'4, 4, 80$4, 2)4+8/$:1%80#:1%:0#;1%=4(:0$9/#:0$9/#:0#<2%8.!7- =3'=3&<2&:0#90#=4'=4'90#;2%:0#;2%:1$9/"7- 9/">4&G<-kY@  -  -   /((- %, %(!  -    ""###$#$#$%%(%(%'%'&&'%%$!!  !!"!""#$%%&%&%%$$$$$$$$$$$$#$####"#"#"#!"!" ! ! ! ! ! " "!#!"!"!##$#$"# !#$ !#/-!!$$$$"$!# !#$%&#$ (+)+  - - - - - - - - - - - - - - - - - - - - - - - - ^P;B8)=4&8/"9/#@6*B8,A8+?7)<3&:1$90#:1#:0#:0#<3%<3&;2%;2&;2&<3'<4'<4'>5(<3&<3&>5);3&4,:.#>3(:5':2&7* 5, 81%;2&;1%7."7."<3'>6*=5*91&7/$91&<4)>6*=4):1&80$92'91&:2':2&8/#6.";2&>5)<4(;3'91%<4(=6*91%7/#92&:3&81%:3':3':3':3'92%7/#92&:2&;3':3'81%6/#5/"60#81$92&92&7/#2*5-!7/#6/#6/#4-"4-"5.#5-"4, 5-!1).'2+3+ 1*4,!4,"4,!4+!2)-$1(1)0)1*1*2*2* .&,%,$.&/'A, D-F.H/!O3$M1!G,H-J0 G/ D-?*<'8#7#34 1' -* 11 1 0./..-()%" " %%'&#"!             -   -      -         -  - -   -                         -         -                        !!!!!! !!!######!!!""""""""""""!!! !!!"""!!! ###$$$###$$$"""!!! !!!"""!!! """!!!###$$$$$$$$$$$$%%%$$$$$$ """$$$""""""###!!!"""$$$###$$$$$$$$$%%%$$$###$$$%%%$$$###$$$#########"""!!!!!! """"""$$$$$$###$$$$$$$$$%%%'''%%%%%%%%%&&&%%%$$$$$$###$$$%%%######"""###!!!!!!!!! """"""%%%%%%%%%$$$"""!!!!!!######$$$$$$%%%%%%%%%%%%%%%&&&%%%###""""""&&&%%%$$$%%%%%%%%%$$$"""!!!###$$$"""""""""$$$###"""!!!  !!!###$$$$$$###$$$'''%%%%%%&&&''''''''''''$$$###"""###%%%%%%%%%%%%&&&###"""$$$%%%%%%&&&%%%&&&%%%$$$###"""""""""$$$$$$%%%"""!!!"""""""""$$$$$$###""" !!!"""""""""###"""###""""""############$$$$$$################## !!!""""""""""""!!!!!!!!!###""" !!!###$$$4,!5.#80%80%1)2):1%91%5-!7.";1&9/#1(7.">4)9/$7.#90$80$5,!;2&;3'4, 4+ 7/#5,!2*3*7.":2%8/":1$:0$:1%<3&9/#8."8."8.!8.!:1$7-!6, =3&>4'<2%9/"8/"<3%<3%91#;2%90";1$;1$8.!5+8.!>4(A7)H<,   - -   57;.,0*%&# -  !!#!$"%#$%$&$'%)&(&'&&$$##$$$%%&&&&'%'$&#&#&#&#&#&#%"$"$!#!# " " ! ! ! !!!! ! "!""$#$"$!"  - (+""+')61!!$$#%#%#$"#!" !"#$&$% !(+)+  - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -G=->5'<3&:0$90#?5)A7+@8*?6);2%:1$8/":1#:1#90#;2%;2%:1$:2%;2&<3'=4(<4'>5(;1%:1$<4':3&3+9-">3(;5(:2%6*6,!92&<3&:0$7."7/#<3(>6*=5*92&6.#80%;3(=5)<4(:2&91%;3)92':2':2'6."5, :1%>5*<4(80$;2&;3'<4(92&81%:3'92&71$:3'92&82%92&81$70$92%:3&:3&92&81%70$6/"6/#81$81%91%7/#3*4, 5-!4-!5-!4-!4-"6.#5."3, 5-!2*/(3+ 2+ 2+5-"4,"4+!3+ 2)-#/&/(1*1)0)2* 1*.&,%,$,$C,D-A)H,N/ L0G-I/K1!H0 D->)6!4 5!6"210../0 1!0 /0,*+)'! " $ &&$" ##! "       -  -      -    -  -   -    -  -    -  -   - -  -  -      - -  -   -     - -   -   - -                        -        ###$$$""" !!!"""!!! !!! !!!"""!!!"""$$$###$$$&&&%%%$$$"""""""""!!! !!!!!!###$$$$$$###"""$$$### """#########"""!!!"""$$$"""!!!""""""$$$######$$$$$$#########$$$######""" !!!""""""############$$$$$$%%%$$$%%%&&&%%%###%%%&&&%%%$$$$$$#########"""###!!!###!!!!!!!!! !!!###$$$&&&%%%######"""!!!"""%%%$$$%%%%%%%%%%%%%%%%%%&&&$$$$$$"""###&&&$$$$$$&&&%%%%%%%%%###!!!#########$$$###$$$######  !!!"""###$$$%%%%%%%%%%%%%%%'''((('''((((((&&&%%%$$$%%%%%%%%%&&&$$$%%%$$$"""######$$$$$$$$$$$$&&&&&&%%%%%%%%%%%%%%%###$$$### !!!"""$$$###$$$$$$$$$######""""""###"""###############!!!""""""""""""############""""""######!!! """""""""###"""""""""""""""###"""###5-"6.#7/$91%91&2*3+:1%90$5, 6-!:0%9/#2(8/#>4):0$7."90$80$6-":2&;3'6/#4, 6-"5-!4, 5, 7."80#6-!:0$:0$:0$;1%9/#;1%90#9/#8."9/"8.!8.!<2&>4'<2%7.!7.!;2%<3&:2$:1$8/":1$:1$7- 6,8."=4'=3&E:+m[B  -      """"""""""*).*$)-'# - - -   !!"!"#$%&%'&(&)%'$'$'$($($($($&$%$%$%#$#$#$#$##"#""!"!! ! ! ! !     !"#$"# ! #"*"&&#' ''%'"%#%#$##""!" !""$%$% !)+)+)+ - - - - - - - - - - - - - - - - - - - - - - -  - - - -_R=A8*<3&=4';1%9/#>5)?6*?7)>6(:1$91$8/!:1#;2$90":1$:1#80#:1$;2&<4(=5(<3'=4'9/#8/":2%:3&5- :.#=3(:5(91%7* 6-!:2&=4':1%7/#80$=4(>6*<5):2'7/$91&;3(=5)<4(;2&:2&;3(91&:2';3'6-"3*90$>6*=5)7."=5)91%;3'92&92&:3'81%81%:4'92%81%92&70#70$92&:3&:3&:3&:3&81%6/"70#81%70$70$6/#3, 4,!4-"3, 4-!5-"4-"70%5."4-!6/#4-!1)3+ 2+ 3+ 4-!5-#5,"3+ 1(-$.%0(2+ 1* 1*1*1)/'.&A, D-C+A)J/ M/ M/J.H.J0 I1!D-<'//4!4!2/--1 ..1 0 / ,)(''#%&'&%# "! ##     -    - -   -  -  -  -    - -  -     - -    -   - - -    -     -    -   -  -  -   -  -  - -                          -                  !!!$$$$$$!!! !!!"""!!!!!!  """!!!"""######$$$%%%&&&&&&$$$###$$$"""  """$$$%%%%%%""""""$$$###""" ###!!!"""###$$$%%%%%%###!!! !!!"""""""""%%%$$$$$$$$$%%%%%%%%%###!!! """$$$###$$$######%%%$$$$$$######%%%'''###%%%#########"""""""""!!! !!!######!!! """!!!"""!!!"""### ######%%%$$$###$$$%%%""" ###%%%$$$$$$%%%%%%%%%%%%%%%#########&&&'''&&&%%%%%%%%%$$$%%%"""###&&&%%%%%%$$$$$$$$$###"""!!!  """#########$$$%%%&&&%%%%%%%%%&&&'''(((''''''&&&%%%%%%&&&&&&%%%%%%!!!!!!"""$$$###!!!$$$%%%%%%&&&%%%%%%%%%'''$$$$$$"""$$$###!!!"""""""""######$$$###$$$$$$############$$$"""""""""######""""""""""""########################"""!!! !!!"""""""""""""""""""""!!! """5-"7/$7/#91&:2'4+4+ ;3'91%5, 5,!8/#8/#2)9/$<3'8/#5, 7.#8/$7."91%;3'7/#4, 5-!7."6-"5,!5, 7.!6- :1$:0#8/"8/#7.!:1$9/#7.!6, 7- 7-!8.";1%>4'<2%8.!8.!<3%=4';3&;2%:0#:1$90#6, 7- 9/"=3'>4'@5(H<-   - - !"#$$$%%%%%$&"$0:>58,.$#  -  !"##$$%%%$%$$$$#$#$#$#$#$#%#$#$#$#$#$"#"#""!"!"!! !!!!"!"!!!!!!!!!!!"  #$+-1+79%%()')#&"$#%#$"#!" ! !!!$%$%!")+)+)+  - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C9):2$<3&<3&:1$:0#>4(>5(>6)=5(91#90#7.!8.!<3%8/!;1$91#8/";2&;3&=4(=5(;3&=4'90#7/"91$;4'80#:/$;2&94':1%9,!6-!:1%=5(;3&8/#7/#<4(=5);3(:2'80%91&;3(=5)<4(:2&91%80&80&;3(;3'5,!1)90$=5)<3'7/#;3'92&92&:2&92&92&70$81%;4'92%81%92%6/#6/#81$92%70$70$81$6/"4.!6/#81%70#70$7/#4-!5-"4,!2+ 4-!6.#6.#91&80$6."80%7/$2+3+ 2+ 2+2+ 2+ 4,!3+!0(.%.%0)1* 2+!0)0)0(+#C, D,B*E-L3"N3"M1 L0I/H/F.C,3, /111-' -.0..0 ,%$ &#   $ (((&# ##"%$      -   - -    - -     -         -     -  -               - -   -    - - -     -  - - -                            -                            !!!!!!"""$$$### """"""!!! !!!"""""" !!!"""###$$$&&&&&&%%%%%%%%%### !!!!!!""""""!!!!!!""""""!!!!!!!!!"""!!! """###%%%%%%###"""""""""""""""###$$$###$$$%%%$$$%%%&&&$$$""" !!!"""$$$%%%$$$%%%$$$$$$&&&%%%%%%%%%!!!$$$%%%""""""""" """""" !!!"""!!! $$$$$$ !!!""""""######""""""############$$$%%%###""""""%%%$$$$$$&&&&&&&&&&&&%%%"""###%%%&&&(((&&&%%%$$$###$$$%%%$$$"""$$$%%%&&&$$$#########"""  """$$$$$$"""###$$$%%%%%%'''&&&''''''''''''&&&&&&&&&$$$%%%###$$$######!!!%%%$$$"""###$$$%%%&&&&&&&&&$$$$$$###%%%%%%%%%%%%$$$ !!!""""""!!!"""#########"""###$$$######""""""###""""""!!!"""######"""######"""""""""###$$$$$$$$$$$$###""" !!!!!!"""###""" !!!!!!"""!!!:3'5-"80%7.#:1&:1&6-"6-";3':1&6-"6-"8/$7."3*80$<3'80$4, 8/#91%6."91%;3'5."2*5-!90$90$8/#5,!6- 5, 9/#7-!6, 6- 6- 9/#:0$6- 6, 8."8.!8.";1%=3'<2%90#8/";2%<4&;2%;2%:1$:0#9/"7- 6,9/#?5)>4(;1%G;-r_F   - -  !##$%%%&&(&)&(%(&(!#'35$') -   "##$#$"$"#"#"$"$"#!"!"!! ! !!! !   #&" ((-?@#$(((*'*&)#&"$#$#$""!" "!""#$$$%!")+)+)+)+   - - - - - - - - - - - - - -   - - ]O:?6'8/":2%=4';2%90#=3'>5(>6)<4':1$;2%7/!7. 90"7.!:1#90#90#<4'<3'=4(=5);2&=3(;1&6.!91%;4'90$:/#:2%94&;2&:.#6-!90$;3&:2&7/#6."<3(=5);3(:2'80%91&:3'=4)<3(:1%8/$6.$80%:3(;2'4+ 1(91%>5)=4(90$;3';3':3':3'81%92%70$92%:3'92&81%92&70#6/"70$82%6/"5.!5."4- 4-!6/"70$6/#70$6/#4-!4,!5-"4,!5.#6.#6.#80%91%6.#7/$6/#1*1*3, 3, 2+ 2+ 3,!4,!1).&-%-'/)1* 1* 0)A-!C,C*B*G/I2 J2 I0F-H/F/@)<&0- 24 0+( ( ,0/-/.)" " ($" &'&&$# " ##!##      - -   -   -  -   -       -  -     - -  -   - - -   -  -   - - -       -       -  - -("%"! #*%(#% #!!! #)$&"&"'"% #+& )$#""   '"&!% & $"!!' ( $#%$#  #(!)"&#"& ("("%   $(!)"%&#""  "*%)#'!&!% $!!"#(#)%*&(#&"#$% % $$% )$(#$"#&!&!% &!'"& (#&!!!!###""" !!!!!!"""!!!!!!!!!"""!!!""" !!!"""###%%%%%%%%%&&&%%%%%%###!!! !!! !!! !!!!!!!!! !!!"""!!!!!!######$$$&&&###"""""""""!!! """!!!"""###%%%%%%&&&%%%$$$"""###!!!!!!%%%'''%%%%%%&&&&&&&&&&&&%%%%%%%%%&&&%%%&&&###"""""" """"""  """""" !!!!!!"""######"""!!!###&&&###"""!!!"""$$$%%%%%%%%%$$$$$$$$$%%%''''''&&&'''&&&$$$###%%%&&&'''&&&%%%$$$###$$$&&&%%%###$$$$$$$$$$$$###$$$"""  !!!"""###""" !!!$$$%%%%%%%%%%%%&&&'''&&&%%%&&&&&&&&&$$$######### ### ###$$$$$$!!! """%%%&&&&&&&&&%%%&&&###!!!$$$%%%&&&&&&&&&!!!"""!!!!!!""""""######$$$"""###$$$$$$$$$######"""######"""!!!"""""""""######$$$######$$$$$$$$$$$$$$$###"""  """"""!!!"""!!!!!! :2':2'5-"80$7/$91&91&7/#5-!;2'90%4+ 6-!8/$6."4+7/#;2&80$6-!:2&91%6.":1%;3'4- 1(5, :1%;2&:1%8/#8/#4*5, 7-!6, 7."6-!7."9/#6, 5+8."7.!8."=3&=3&;2%:1#7.!90#<3&:2$:1$:1$8/"90#7.!5+:0$?5)=2&<1%C8*I=- - -    -   -   ""##%$%%&&(')&)')')'($&"65"/-#           - $% #!%*-. ''))()(*(*&(#%#%#$"#"#!"!!""#$$%$%!")+)+)+)+ - - - - - - - - - - - - - - - - - - - - - - - - - -  - - E<,>6(:2$;3%=4':1$8/"<2&>5(?7)<4&90#=4'80"4,91"7. 80"8/"80#;3&;2&<4(=5);2&=3'9/#4, 7/#81%7/"9."91$94&=3&<0$7-!8/"81$91$5."5.!92&=5)>5*;3(80%91&;3(=5)<3(91%7/#6/$70%:2';2'4, 1)91%<4(;3'7/#;3';3';3'91%81%92&81%81%92&92&81%92&70#5/"70$93&70$6/"6/#5."5."5."5/"5."81%6/#4,!5-"6.#5-"5-"5-"4,!7/$80%5-"6.#5."0)1)3, 2+ 1*1*2+ 3+!1).%,%,&/)1* 1* C- C,B)F,J1 F.E.C-B,D.A+:$/02//0,& -+1 .,/ 1!/& $ '&"  $)&%$ " #! #"     -               - -  -  -   -    - -    - -  -    -  -   -  - - -   -        -   -   -           $$$"""  !!! !!!###$$$!!!$$$"""!!!!!!"""$$$&&&%%%$$$$$$$$$$$$$$$###!!! !!! !!!  !!!""""""###$$$$$$"""$$$###"""!!!""" !!!###""""""$$$$$$$$$###$$$$$$%%%&&&######%%%&&&%%%%%%&&&&&&&&&&&&$$$###$$$$$$%%%&&&$$$###### """!!!!!!  !!! !!!$$$###$$$%%%$$$""""""###$$$""""""""""""###$$$%%%&&&%%%%%%$$$%%%&&&&&&$$$%%%%%%&&&%%%%%%%%%&&&&&&%%%%%%$$$$$$$$$%%%&&&$$$###""""""""""""!!!!!!!!!"""  ###$$$###$$$$$$%%%&&&%%%%%%&&&'''&&&$$$######"""#########%%%"""!!!"""###%%%&&&&&&'''&&&$$$$$$&&&%%%%%%%%%$$$"""!!!""""""!!!!!!"""$$$###"""######$$$$$$$$$############""""""##################"""$$$$$$$$$#########""" !!!""""""""""""!!! 7/$;3(;3(5-"7/$90%80%91%6."3+:1&;2&6-"90$:1%8/#5, 7.":1%90$7/#<3'90$6.":2&<4(5, 0(5, :2&;2&7."6."8."5+ 7."7-!5, 90$8/#7."8.#7-!5, 6-!8.#8.";1%<3';1%90#7.!90#<3&:1$90$90#6- 90#7.!4+;0$?5)=2&<1%?5(F:,q]D       - ! #"$#$#%$&$&%'(*)*(*()')"#.:5*'%# - -   -     #%$ *'(%-.0?@&'()()())*)*(*%'$%$%$$##""!!!!#"$$$%$%!")+)+)+),)+ - - - - - - - - - -  aU?@8)=6(=6(=5(<3&90#8.":0$<3&=5'<4&:2$>5(:1$6-:2$7.!8/"7/!7/"91$90$:2&;3':1%<2'7."4, 6/#81$6.!8,!91$94&>3'=0%7-!7/";3&92%6/#70$92&=5*?7+<4)80%:2'<4(>6*<5)92&7/$7/%80&:2';3'6."4, :2&>6*<4(:1%<4(>6*;4(91%81%;4(:3'81%81%92&81%93&70#5.!6/"92%81%81%71$70$60#5.!4.!5.!81%5."3+ 4,!5-"5-"4,!4,!3+ 6.#90%6.#5-"4,!0)1*2+1*1*1*2* 2+ 0(-%,$,&0)B- D-C*C)K0 M1 C*A*A,@,B/:'4 ).5#0*' ) *-..-+,/ +&'$  $%&&$ # ! ! $%%"    -             -    -   - -  -  -  - -  - -        - - -    -  - -       -   - -  - - - - -            """###!!! """"""!!!!!!""""""#########$$$###!!!!!!!!!"""$$$%%%#########$$$$$$$$$"""    """###"""$$$%%% !!!%%%$$$######"""$$$"""############%%%$$$$$$%%%&&&&&&$$$%%%######%%%%%%&&&&&&%%%&&&%%%###!!! ######%%%$$$$$$""" """"""!!! """###%%%%%%&&&%%%$$$######$$$$$$###$$$%%%###!!!!!!###%%%''''''%%%$$$%%%$$$%%%%%%&&&%%%%%%$$$%%%&&&%%%%%%%%%%%%$$$$$$%%%$$$""""""######### !!! """$$$###"""###$$$###$$$%%%$$$%%%&&&%%%"""!!!""""""!!!$$$ !!!%%%###"""$$$$$$%%%&&&%%%'''&&&$$$$$$&&&$$$$$$###"""!!!""""""""""""!!!######""""""###"""###$$$$$$$$$###########################"""######$$$###$$$###"""!!!!!!  !!!!!!""""""!!!!!!!!!7/$6/$;3(:2'5-"7/$91&91&:2'5-!2*80$:1&5,!8/$:1%80$4, 5-!;2&91%8/#;3'91%8/#<3'<4(2*/'5, <3';2&5-!8/#:0%8."9/#6, 2)8.#9/#8."7-"5, 5, 7-!7-"6, 9/#<2&;1%:1%8/#:0$=3'9/#8.";1%6- :0#7.!5,;1$?5(<2%<1%@6)C8*G;+         !!#$#%#%"% $"%%(')(*)*()(*)+&(%54,,%./&"$&!$$'#&%#'! ## $!%!"# $$""&%%" !'!$(#,&%1$',!%*$(/13$%')(*(*(*)***)*'($&$%$%$$##!!!!""#$$%%&%&"#(**+),*,)+ - - - - - - - - - - - - - - - - - - - - - - - - F=-<5'<5'@9+>6)=4'90#7-!:0$<4'>6(=5';2%>5(:2$8/!:1#6.!8/"8/"90#91$80$:2&;2&:2&=3'8/#6."82%:4'8/#9-":3&;5'>3'=0%7-!90#:3&;4'81%70#91%>6*=4);2'80$:2&<4)=5)<4(81%80%91&:3(=5*=4)8/$6-!;2&>5)<4(:2&;3';4(<4(:2&81%:3':3&81%92&92&81%:3&70#4-!4- 70$81%92%6/#81%6/#5.!6/#6/#81%4, 1)1)3, 5."5-"5-"2*4,!7/$5-"3+ 2+ 2*3, 2+0)1*2+ 2+ 2+ 1).%,$+%C- D,B*G-P4$K/A&B*B-@-<+3#+*/ 0-)% -$ ( )-.,+)*+(%   -%(&(%!  ! %$$"   -       -  -    -              -  - -         - -    - -        -     - - - - - - -       !!! ###"""!!!"""$$$"""!!!###$$$###"""!!!!!!!!!"""###$$$######$$$$$$$$$###"""  !!!!!!!!!###$$$###$$$$$$ !!!"""""" """!!!$$$###!!!$$$$$$$$$%%%%%%%%%$$$&&&&&&###$$$%%%$$$$$$###%%%%%%&&&'''%%%"""!!!"""######$$$#########!!!!!!!!!"""""""""!!!"""!!!###&&&$$$%%%'''&&&%%%$$$$$$$$$%%%&&&&&&%%%""""""!!!!!!###$$$&&&&&&%%%$$$###""""""###"""###&&&$$$%%%%%%%%%%%%%%%######$$$$$$###"""#########  !!!###$$$#########$$$$$$$$$$$$%%%%%%%%%$$$!!!"""######""" !!!"""$$$!!! """###"""%%%%%%&&&&&&%%%&&&&&&%%%###%%%######""""""!!!!!!"""###"""###############$$$""""""###$$$$$$###############"""""""""""""""###"""############""""""!!! !!! !!!"""""""""!!! 5-"6.#;3(:2'5-"6.#90%:1&;2'6."2*7.#:1&6-!8/$<3';2&7."7."<3'90$8/#:1%:2&:1%>5)>6*5, 2*6-!;2&:1%5-!90$90$6,!7-!7-!4*8/#8/#8/#7."5, 5, 7."6-!4+7.";1&;1%<2'90$:1%>4(6- 7-!:1$6- ;2$:1#6- ;1$?4'<2%<2%?6)>4'B8)     -  - - - - -  "" ##"#"%$'$($(&)(*)+*+*+*+)+),*-,/&)%(%(%(%(')(+)+)+)+)+)+(+(*'*(*)))****+)+(*(+)+),),),)+)+)*'()*'*(*(*(*)*))()&'$&$&$&#%##""""#$$%%&%'&'"#(*)+*,*,*,)+  - - - - - - - - - - - - - - - - - - - - aS>@8):3%:2%A:,=5':2$7-!6, ;1%>6)@9+>6(8/"=4':1$7. 90"5- 7/!90#:2%:2%90$:2&;2&<3'=3'8/#6/":3'<6):2%:0$<5(<7)?4(>1&8.":1%;4';4'81%5."81$>6*;3(80$80%90%<4)<4(:3'80$7/$80%:2'=5*<4)7.#5-!:2&>6*:2&90$91%;4(;3'7/#70#92&92&82%:3'92%81$92&81$6/"70$:3&92%93&4-!71$6/#6/#81%81%81%3, 0(1)4,!6/$5-"5-"3+ 4,!5-"3+ 2*2*3, 4-"2+ 0(2* 3+!2+ 2+ 1).%C- D-E-E,J0 P3$I-C(D+C-@-8&/*./ .+' $ ( /-,+)(')'$!  " &(! $$"$#&$!     - -  - -             -     -   -         -   - - -             - - -   - -  - - - -   """!!! !!!"""""""""$$$%%%"""!!!""""""""""""!!! !!!""""""!!!""""""############""""""!!! !!!!!! !!!######!!!""""""!!!!!!"""""""""###""""""$$$%%%%%%%%%###$$$&&&%%%%%%&&&&&&$$$%%%$$$%%%%%%$$$%%%&&&'''$$$!!! $$$$$$&&&$$$"""###"""###""""""!!!"""$$$"""### """######&&&&&&)))'''$$$$$$%%%%%%%%%&&&######$$$###"""""""""%%%###$$$$$$###"""###$$$"""###$$$######%%%'''%%%%%%%%%%%%$$$!!!#########%%%###""" !!!  """#########$$$$$$###$$$%%%$$$%%%&&&&&&%%%"""###$$$"""######"""!!! """### !!!!!! &&&%%%%%%%%%&&&&&&&&&### """!!!!!!!!!!!!!!!!!!"""######"""#########"""!!!"""############$$$$$$###""""""###"""###"""""""""############"""""" !!!!!! !!!!!!!!!!!!7/%3+ 6/#;3(:2'6."5-"8/$90%:1&7."2)7.":1%6-!8/$<4(:1%5, 5, >4)8/#6."90$;2&:2&>5)=5)4, 3*6.!:1&:1%7.":1%90$6, 7-!9/$7-!:0$9/#8.#8."5, 5, 9/#9/#6,!8.#;1&;1&<3'8/#:0$>4(6, 7-!:1$8."<3&;1$7.!<2%?4(<2%<2%?6(=4&>4&I>.    - - -  - -  -  !"#%$'%)&*(*)+)+)*()()(+(-(,',&+&+&+',)-),(,'+'*&*'*'+(+*,+-+.,.,/,/,0-/-/-/-/-0-/-/,.)+(+(+'*')()&'&($&$'%'$&$%#$"#"$$&%'&(&('(&&'*)+*,*,*,)+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C7*<3'7/#92%>7*;4'7/"4+5+<2%>6)>7)>6(8/":1$:1$8/!8/!6- 7/!90#:1$91$80$:2&:2&<3';1%6-!5-!:3'=7*:1%9/";4'<6(A4)?2'7.!91$;5':3&81$4-!70#>6*=5*;2'6.#7.#<4(=5):3'5."5.#7/%80%91&91%6-"5-!:2&>6*:2&7."7/#:3'<4(91%70$93&92&81%92&81$70#81%81$6/#81$:3&92%:3'6/"70#70$70#81%81%70$5-!2+2*3+ 6.#7/$5.#4,!5,!4,!3+ 2+3+ 3,!4-"1* 0)2+ 3,!3+!3+ 1)D-D-F-H/L2"K1!H-D*D+D-@+8$+,1",')''/,-+($&'&'$  # %%&(#! ! " $##!     -    -  -    -       - - -     -  -     - -                    -   -      - - -!!!!!! """""""""$$$""" !!!!!!!!!"""""" !!!!!!!!!"""###""" !!!"""###$$$###!!! """!!!!!!!!!!!!!!!$$$###!!!"""""""""!!!"""$$$""""""""""""###%%%%%%$$$$$$$$$$$$&&&&&&%%%$$$$$$%%%######%%%$$$$$$$$$%%%&&&%%%"""!!!"""###%%%$$$$$$$$$###""""""$$$"""$$$###!!! !!! $$$###''''''((('''$$$"""###$$$''''''%%%$$$&&&$$$""""""###$$$###$$$'''$$$"""!!!###%%%%%%%%%"""###%%%%%%######%%%%%%###!!!"""###!!!######""" !!!!!! !!! """###$$$""""""$$$%%%#########$$$%%%&&&'''&&&$$$$$$%%%$$$""" !!!"""""" """%%%$$$!!!###((($$$%%%"""!!!"""!!!!!!!!!!!! !!!!!!""""""###"""!!!"""!!!!!!!!!"""###$$$$$$$$$""""""######""""""!!!!!!!!!"""###"""""""""""" !!!!!! !!!!!!2*5-"3+ 5-":3'91&5-"5-!6.#80%<3(80$1)7.";2&6-"90%=4(:1%4, 6-!?5)9/$6."90$;3':2&>5)>6*6."4, 7."90$:1%8/#:0$:0%6-!9/#90$7."90$8/#8/#8/#5, 5, 90$:0%8."8/#;1%<3'=3(8/"90#=4'7.!8.":1$9/#<2&9/"7.!=2&>4';1$<2%>5(<2%:1$D:+  -   - -    !"$&&('(&*%+&*&''''&'''('(((())))))()(*()()'('(()()*)+*,*,*,*-+-+-+-+-+-,-,.,.,.+.)+'*'*(*')')&(%'&'%'$&$&#%#%$&%'&(&)'(%%'))+*,*,*,)+)+ - - - - - - - - - - - - - - - - - - - - -_P<:/"90$80#:3&=6)=6);3&6-6,<2$;3&=5(<5(91#:2$:1#9/!9/"7.!8/"90#:1$91$80$:3&;2&<3'9/$4+ 3, 92%;5(8/#7-!93&:5'@3(>1&6, 8/":4&;4'81%4-!70#=5*:2'91&8/$5,!;2'?7+;4(6."5.#80&92'91&90%6."6."91%:2&91%7."7/#:2&;4(81%81%:3'92%70$81$70$6/#70$81$6/#82%:3&81$92&60#70$81%81%70#6/#70$5-!2*2*3+ 5.#6/#5."4-!4,!3+ 2*2*2+ 2+ 4-"/(1)2+ 2+ 2+ 2* E-F-H0K1"L3$F.D+D*D+F/!@*9$--0!+&" " '/ 0!/ ,,**&&&&&'*)&## ! $'%"   -                   -     - - -   - -  - -   - - - -    -         - - - -  -    - - -!!!  ###"""######!!! !!!"""#########!!! """###$$$!!!!!!!!!"""###$$$###"""###"""!!!!!!!!!!!!!!!!!!!!!######!!! !!!!!!!!!!!!!!!!!!!!!!!!"""######$$$%%%###&&&&&&%%%"""%%%######$$$%%%$$$"""%%%%%%"""$$$'''%%%######"""#########$$$###!!!""""""$$$######%%%$$$!!!"""!!!"""%%%%%%&&&%%%%%%$$$######%%%''''''%%%$$$&&&$$$"""###$$$###!!!###'''%%%""" ###%%%%%%'''$$$$$$%%%$$$############$$$$$$$$$###"""###"""!!!!!!"""!!!!!!"""!!! !!!"""""""""!!!"""###$$$$$$###$$$&&&$$$$$$%%%&&&%%%###%%%$$$  !!!"""###%%%$$$#########"""!!!!!!!!! !!!!!!"""""""""!!!!!! !!! !!!!!!"""######""""""######$$$###!!!""""""""""""###!!!!!!!!!"""!!! !!!!!! !!!3+ 2*5-"1)3+ 91&:3(6.#5-"80$:1&:2&7/#0'7.#;2'7.":1%=4(90$3*5-!?5*;2&8/#:2&<3'91%=5)>5)7/#5, 7/":1%;2&8/#8/#9/$6, 90$90$8.#:0%90$8/#8.#6,!5, 8."8/#6-!6-!9/#<2&=3'8."9/#<2&8/"90$:0$8/#;1%8."7- <1%>3';1$<2%?5(<3&:1$A7(SG5  -   #! %#'%%&$'%(%(%'&(&('(')')')')')')')')&(%'&(')')(*(*)*)+)+)+)*)+)+*+*,+,,-,.,.+-)+(*(*')&(%'&''(&'$'$&#&$&%'%'&(%& ()%'')(*),*,*,)+)+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -F;-9/"=5(;3&:3&=6(=5(<4&90"8. =3&<4'<5(;4&:1$;2%<2%:0"9/"8.!9/"90#91#91$70#91%;3&;3&80#4- 3,70#:3&6.!6- :4&:4&?2'6+:1&80%6.#6-":2&=5)<4(91%80%:2';3(;3(:2&8/#7."90$91%80$7.":2&:3'=6*80$92&:3'81$6/#70$70$70#70$70$5/"70$81%70#81$70#70$92%81%5."4-!6/#4-!2*2*3+ 4-!4,!5-"4,!4,!3+ 2*2*1*/(1*0)0(1*1*E-E-F-I0K1"J0"E-@*?(B*B+<&3#1 /!+*'&&++/!--*-*(#%((***&%" #  " ##       -    -   -   - -   -   - - - - - -  - -      - - -      -     - -   -      -   - - - !!!!!!"""#########!!! !!!###$$$$$$!!! !!!!!!""""""!!! """""""""""""""###%%%%%%###  !!!!!!!!! """###!!!  !!!!!!"""!!!!!!!!! """$$$$$$###"""%%%&&& ###$$$$$$$$$###$$$$$$$$$%%%%%%%%%(((%%%$$$######"""!!!###$$$"""""""""###!!!###"""$$$%%%$$$###"""$$$&&&&&&%%%###&&&######$$$%%%%%%$$$$$$%%%###$$$$$$$$$""""""$$$%%%$$$!!!!!!$$$$$$%%%&&&&&&&&&%%%$$$############%%%&&&&&&$$$""""""!!!!!!"""###!!!!!!$$$###!!!!!! !!! !!!"""$$$!!!"""$$$%%%%%%$$$%%%$$$###$$$$$$%%%######%%%###  """###""""""###"""!!!"""!!!!!!!!!!!!"""######"""!!! !!!!!!!!!"""!!!!!!""""""###$$$""" !!!"""###""""""""""""!!!!!!!!!!!! !!!""""""!!!7/%2* 1)80&5-"5-":2';3(6-"5,!80$:2':1&8/#1(8/$:1%5, :1%=4(:1%5, 8/#?5*;2&80$<3'=4(90$=4(=5)90$5-!7/"91%:1%7."7."8/#6, 8/#90$8.";1%9/#7-!8."6-!6,!6-!6-!4+5, 7."91$;2&7-!7.!;1%:0#9/#8/"8.":0$9/#7-!<1$?4'<2%=3'A7*>5';1$=3&H=- -   !"#%#%"$$%&%&%%$%%'(')&(%(&)'*'*')')&)&)&)&)&)')'*'*(*(+),*-*-+.*-*-*-*-*-*-+-+-,.,/+.*,)+(*')&(&('('(&(%'$&$&%&%&%& !'(()()&'')(*)+*,*,*+)+(* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -aR6*91%7/#5-"91%<4(;3':2&:2';3(;3(;3(91%6-!6.":1%:2&8/#6.":3':3'>6*7/#92&92&81$70#81$81%81%81$70$5.!6/"81$70$92&81%6/#81%81%4-!4-!80$5-!1*2+ 4,!4,!3, 5-"5-"4,!4,!3+ 1*1*2+ 4-"3,!1*1* F-E-G.G.H/ D+B)?'>(A+>(8#0-+('%&+- ,)**+-,)%#$'((($  ! $" " %                  -       - -   -     -   - -   - - -         - - -     -   -    - - -  """$$$$$$"""!!! !!!######"""!!!!!!$$$$$$"""#########""" !!!###%%%&&&$$$!!! """!!! !!!""" """!!!!!!!!!###""""""$$$!!!!!!""""""!!!'''&&&%%%###"""$$$&&&###%%%&&&%%%%%%%%%&&&$$$%%%###""""""### !!! !!!###$$$###""""""######$$$&&&$$$%%%$$$$$$$$$###""""""%%%&&&%%%$$$$$$###&&&######%%%######&&&$$$"""$$$&&&&&&%%%$$$&&&'''&&&$$$$$$###%%%%%%$$$%%%&&&&&&$$$######""""""###!!!"""$$$$$$###"""!!! !!!""" """###%%%######%%%&&&%%%$$$$$$$$$%%%%%%$$$######$$$%%%###"""  !!!""" !!!""""""!!!!!! """!!!!!!######""""""!!!  !!!!!!!!!!!!!!!""""""######!!!!!!######"""!!!!!!"""!!!!!!"""!!!!!!!!!""""""!!!"""70%1)1)5-#3+ 2+ :2':2'5-"6-"7.#;2':2&80$3+90%90%3*90%;3'90$5, 8/#>4(;2&90$<3';2&7/#;3'=4(90$5-!6.":1%;2&8."6-!9/$6-!8.":0$7.";1&8."3*;1%3*7-"7-!7."4+4+7."7/";2&7-!6- :1$:0$7-!7.!8/":0$:0$9/#=2%>3'=2&?5(@7)=3&:1#=4&D:+[O;  !!""##$$%%&%'$'&((*(*()()()()'(&''((((((('(())*)**+*+*-+.+/,/,/,/,/+/+.+.+.+.+-+-+-+-)+(*')')')')()')&'$%%%%%""&''((*(*(*(*(*)+*,*,*,)+(* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - B7(<3&;1%;3&92%:4&=6)>7*=5'8/"6+:0#;4':3%91$8/":1$<3%8/!8.!8/"9/"9/#6.!80$81%91%<3';2&;3'80$6/"92%;3'70#6.!;4&91$91$7.!5-7."92%:3&81%3,80$=5)>6*;4'70$6.#91&:2'7/$5-"80&:2(;3(;3(80$4, 6-!;2&<3'80$7/#92&:3'>6*:2&92&92&92&81%81$81%81%81$71$5."6/#92&92%81%70#5."70$70$4-!4-!80$6."1)3+ 4,!4,!4,!6.#6.#4,!3+!3+ 3+ 2+ 3,!3,!2+!F,F-G.G.G.E,A(>%<$?'@*<'6"2-( % %$ ',- ))''*'('($&# $ $ # " !  $(%$!  -     -      -           - -   - -   -   - -   -        -     -  - -        - -!!!!!!!!! !!!###""" !!!  !!!###$$$######"""!!!"""""" """###$$$### """"""$$$%%%###!!!!!! !!!!!!!!!!!! !!!!!!  ###"""!!!!!!!!!!!!#########%%%%%%%%%###""""""$$$%%%$$$&&&&&&&&&&&&%%%%%%######$$$$$$%%%### !!!$$$$$$######!!! %%%%%%%%%%%%&&&$$$###%%%$$$$$$$$$&&&&&&%%%%%%$$$$$$$$$$$$$$$######$$$%%%%%%%%%%%%$$$$$$$$$$$$$$$%%%$$$$$$$$$$$$$$$$$$######%%%%%%%%%$$$$$$""""""!!!!!!!!!"""###""""""""" """###"""$$$$$$"""%%%###$$$%%%$$$$$$$$$###"""%%%&&&&&&%%%%%%""""""###   !!!!!! """!!!!!! !!!######"""!!!  !!!""""""""""""""""""######"""#########""" """"""!!!!!!!!!"""!!!!!!""""""!!!80%80&2* 2+ 80%5-"6.#<4);3(5-!7/$7/$;2'91%8/#4, :1&90%3*90$;2&91%5-!8/#<2';1&90$:1%8/#6.":1%<3'90$4, 5, 90$=3'90$5, :1%7."7.":0$8/#<2&7."5, 9/$6,!8."8."7."3*5,80#7.";3&8/"6, ;1%;1%9/#:1$9/#9/#:1$;1%=2&<2%<2%?4'>4&9/":1#=3&?6(MB2        ! " " "!#$%$&%&&'&(())+*,)+)+)*(*(*(*(*(*)+)+)+)+*,+,,-,.,.-.-.,.,.,.,.,.,.,-,-+-+,+,)+(*(*'*'*(*(*')&'&&$#&(&('((*(*(*(*(*(*)+)+*,*,)+(*(*   - - - - - - - - - - - - - - - - - - - - - - ^O:@6(<2&:1$;3&92%:3&=6)?7*<4'90#4*9/"<5(<4';3%91#;2%<3&8/!8/":0#90#90$6-!91%92%92%<3':1%;3'70#5."91%;3'70#7/";3&:1%91$6-!3*5-!91%:3&81%4, 80$=5)=6*:3'70$6.#7/$80%5-"3* 6.$80&:2'<3(:2&7."7/";3&:2%70#70$81%92&;4(92&92&:3';4'92&70$60#70$81$71$4- 5.!92&93&70$4.!4- 6/"60#4-!3,5."5-!2*3+ 3,!3+ 4,!6.#6.#3+ 4+!4,!4,"3,!3+!2+ F-E-G.I/I/E,B)@(>'@)>(9%5!4 /+' ')**, +'%')'$&("## # "   -#%%%" -  -   -  -     -     -   -    - - - -  -     -   - - -  - - - -        -    - -    - - !!!!!!"""!!!!!!!!!"""!!! !!! !!!"""$$$$$$###$$$"""!!!"""""""""!!!"""$$$%%%#########%%%%%%###!!!!!!"""###""" !!!###!!! !!! !!!"""!!!!!!"""!!!"""######%%%$$$$$$!!!!!!"""###""""""###%%%%%%&&&###$$$$$$%%%&&&%%%&&&$$$""""""!!!###$$$"""!!! !!!######%%%$$$"""%%%&&&%%%&&&%%%%%%%%%%%%%%%'''$$$$$$$$$$$$$$$$$$$$$$$$%%%$$$######$$$$$$###############$$$%%%$$$"""#########$$$$$$%%%%%%%%%###"""""""""######$$$""""""!!!"""###!!!!!!$$$###!!!$$$######$$$%%%%%%$$$######%%%)))((('''$$$"""###### """### !!!!!! !!!!!!!!!!!! !!!!!! !!! !!! !!!""""""""""""##################"""""""""###"""!!!!!!!!!""""""!!!""""""!!!5-"80&80&2+ 3+ 70%5-"5.#<5*<4)4, 6.#80%:1&80$7.#5, :1&:1&3*8/$<3':2&6."9/$<2&:0$8.#8/#7."6.!90$<3'90$5, 5, 7."<2':0%6-!;2&8.#7.":0%8/#;2&9/#8.#9/#8."8/#90$9/#4+6- :1%8/";2&8/#6- ;1%<2&90#;1%8."9/#:0$;1%=2&;1$;0#>3&?5(;1#;1#=3&?5(I?0_R? -   " " #!#"$"$"$"$$&$&$%$&&'&(')(*)+*,)+)+(*'*(*)+*+)+(*(*)*+++,,.,.-.-.,.,.+.+.+.+.,.+.+.+.*.)+)+(+(+(*'*'(%%&(')&(%(')(*)+(*(*(+)+)+)+*,*,)+(*(*  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -D9*=3&<3&;2%;3&;3&;4'=6)=5(;3&;1%5+8."=5(=5(<4':1$<3%;2%7. 90#;1$7/"80#5-!91%:2&:2&:2&90%;2'80$7/#:3'<5)7/#7/#:1%:1%:1%7."3*5-!:1%;3'92%6."80$<5)<5):2&70$5.#80%91&7/$4,"7/%81'91'<3(<3'90$80$<4';3&7/#81%;4(93':3(71%81%:4';5(:2&91%7/#3+7/#6."1*3,81%92%70$4-!3, 5.!70#5."2+4-!5-!3+ 4,!3+ 2*2*3+ 2+3* 5,"4,"2* 1*E,F-G,I/J0 J0 E,C+A*A+A+>(6#3!20-) ),/!. ,)()+(%" $""# # "  #'&"              -        -     - -  -  - -           -      - - -  - -  -     -  -`__^^^]\\\[Z """###!!! """""" !!!"""!!! !!!#########$$$###"""###!!!###%%%###$$$""""""%%%$$$$$$$$$###"""!!!###"""!!! !!!"""###!!! !!! """!!!  !!!!!!###$$$###!!!######""""""###%%%%%%%%%"""!!!###%%%$$$%%%&&&%%%"""######$$$######""""""%%%###"""$$$%%%!!!"""###%%%''''''###""""""$$$%%%$$$$$$%%%$$$&&&%%%%%%%%%%%%$$$###$$$###$$$$$$$$$$$$#########%%%%%%###$$$%%%%%%%%%%%%%%%%%%%%%$$$###""""""###$$$%%%!!!!!!!!!$$$###"""!!!#########$$$######$$$$$$$$$&&&&&&$$$%%%''''''&&&&&&$$$###!!!!!!$$$### """!!! """!!! !!!!!! !!!!!!!!!  !!!!!! !!! !!!!!!"""######""""""###""" """###"""""""""!!!!!!!!!######"""###1)4,"80&7/$0(2*80%5.#7/$<4):3'5-!5-"80%80%80$6."4, :1%;2&3*7.#<4(;2&7.":0%<2'9/#7-!8/#8/#7."8/#<3':1%6-!6-!8/#<2';1&8.#<2'9/$9/#:1%7.":0%90$8/#9/$7."7."90$:0%5- 5, 90$8/":1%8/"5, ;1%=4(:0$<2&7-!9.#9/#:0$=2&;0$:0#=3%?5';0#;0#=3%?5'D:,LB3 - -  !!$"$#%$&$&$&#%#%#&$&%'%'')(*)*)+)+)+),)+)+)*(*(*)+*,*-+.+/+/,.,.+.+.*.*-*-+-,.,.,.+.*,*,)+(+(*&(!"&(')')')')&('('))+)+(+)+)+)+)+*,*,)+(*(*() - - - - - - - - - - - - - - - - - - - - - - - - - - -bS?=2%;1%<3'<3&;3&;3&;4'<5(;3'<4'90$5*8.#<5(=6)<4':1$;3%:1$4+90#;1$6- 7."5, 8/#:1%:2&:1&90%;3'90%7/$91%:2&7/#8/#91%:2&;2&90$5, 6-!91%;3';2'80$80$;4(:3'70$5."5.#81%:2'6.$2+ 80':2):2';3(<3(:2&:2&<3'90$7/#7/#92&82&92'81&70$92&:3':2&91%6/#4-!6."5-!2*4, 70$91%80$5."6/#5."81$5-!3+6.#5-"3+ 3,!3+ 2*2*1)0(2)2)2* 3+ F,E,E+G-I/H.E,D+A*A+@*;&5$3!3!3"-*-.0!1#-&')**%#"   !!" ##%'#        -  -   - - -       - -  -    -  -         - - -      -     -         -  ddddcccbbbaaa``__^]]]\[[YXX@@<>?=?@?AB?BBADD@CD?BBACDBDDACB!!!"""!!!!!!!!!######"""!!!""""""!!!!!!"""######$$$###""""""######""""""!!!!!!###%%%$$$######!!!!!!!!!"""!!!!!!!!! """###""""""###!!!"""###"""!!! !!! !!!!!!!!!$$$%%%###### $$$###!!!!!!""""""$$$%%%###!!!"""###$$$%%%%%%%%%&&&%%%###$$$$$$!!!###""""""######!!!$$$%%%$$$ ###$$$&&&&&&""""""!!!"""######$$$%%%&&&&&&&&&'''&&&%%%###""""""###%%%######""""""#########%%%&&&'''&&&&&&&&&%%%###$$$%%%&&&###!!! ######!!!!!!"""$$$###$$$""""""###$$$$$$######$$$###$$$&&&(((&&&%%%&&&$$$###%%%$$$&&&!!!!!! !!!######""" !!!!!!!!! ###"""!!!!!!!!! !!!!!!"""!!!!!!!!! !!!!!!!!!!!!   !!!""""""!!!!!!###"""!!!""""""!!!!!!!!! !!!!!!"""###"""5-"1(5,"90&7.$/'1)80%4,!6/$<5*:2'4,!3, 5.#7/#90%7/#2*8/#:1&4+8/#=4(;2&7.";1&=3(90$8."90$91%8/#80$<3'80$4+5+ 9/#=2';1&9/#<2':0$90$;1%6-!9/$9/#7."8/#7-!6-!8.":0$7/!4,7/"8/#:1$6.!4+;2&?6);1%<2&8."9/#7-!:/#>3'<1%;0$>3%?5';1#;1#<2%>4&B9+H>0^P>  !"$$&$&$&$&$&$'$($(%(&(&(%(&)'*'*(*(*'*'*'*(+)+),*,+,+,+,+,+-+,*,*++,+,+,+,+,+,*,)+()%&')')(*'*')'(&'#&&()+)+)+)+*,)+)+*,*,)+(*(*(* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - E;,9/#9/#;1%;2&:2%:2%:3&;4';3&<4';1%5+8/#;4'92%:2%91$:2%<3&6- 90#:1$5, 7-"5, 6."80$91%91&:2'=4):1&80$80%91&80$7/#90%;2';2'90$5, 4, 90%;3';2'80$7/#:3':2'70$5.#6/#81%:3'6/$6/$6/%92(:2(:2':2':1&;3';3'80$7/#7/#:3'70$:3'71%71$81%92%92&91%6."6/"6."4, 4, 6/#80$6/#5."4-!6/#5."70$1)4-!7/$7/$2+ 3+ 3+ 2*3* 3+ 3* 2)3+ F+F,G-H. F,F-E,C*C+B+?)=(6&1!/01 /-0 2!10 ,(*+)'&#!   !#$&#   -   -  -           -       -    - -   -           -        - -       - -  nnnoooqqprrrsssuttuuuvvv<96><9=;9=<:?>=BAADCCECCC@@'%&DFGDEGDEGCEFCEFCEFDFGDEFCEFDEFDFGEFGCEFACCABCCEECEEBCDCDEBDDBCD@@ABCBBCB !!!!!!###"""!!!"""######"""!!!"""###"""############""" """###"""###""" !!!"""$$$###"""""""""###"""!!! !!! !!!"""%%%###$$$"""""""""!!!!!! !!!"""!!! !!!!!!!!!###!!!"""!!!######"""###""""""$$$######$$$"""!!!###$$$%%%%%%%%%%%%$$$###$$$$$$###$$$###"""###$$$%%%&&&%%%'''$$$$$$$$$%%%'''%%%$$$$$$""""""""""""###$$$%%%%%%'''&&&&&&'''$$$!!!###$$$%%%$$$###"""!!!!!!"""###&&&''''''&&&&&&&&&$$$###$$$%%%%%%###!!!!!!""""""!!!!!!"""###%%%&&&&&&%%%%%%%%%&&&&&&$$$$$$$$$###$$$&&&&&&%%%%%%%%%###"""%%%%%%&&&!!! !!! ###"""  !!!!!!!!!"""!!!!!!!!! !!!!!!""""""   !!! !!!!!!!!!!!! !!!!!!"""###"""!!!!!! !!!"""!!!!!!"""###5-#1(5-"90&6.#.'1*80%3+ 5.#;4(92'4,!4,!6/#8/$:1&80$2*5,!90%5, 90$?6*;1%8.";2&?5);1&8/#:0%;2&90$;2&?6*90$3*3*9/#<2&:0%8/#<2&9/$9/#;1%7-"8.#8/#7."8."7."6-!7-"9/#7/"5-7/"91$:1$7.!4+;2&@6*;1%<2&9/$9/$7-!:/#?3(>3'=2%?4'@4'<1$<2$=3%>5'B9+D;.F<.  !"$&'&'&(')&)&('(')()(*(*(*(*()')')'*'*(*(*)+)+*,*,*,*-*,*,*,*,*,),)+)+*+((!"')')(*(*(*'*')&(%'$'&((*(*(*(*),)+*,*,*,*+()(*(*&( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - eVBB8+90$:0$;1%<3&:2%92%:3&;4':2%;3&9/#4*7.!;4'<5(<5'91$92%>5)7/"80#80#5, 6.!6-!80$:1&:2'80&91&<4):1'7/$8/$91%80$5-!7.#:1&:1%8/#6-!2*8/$;2':2&7/#6.":3':2'70$5.#5.#6/$81%3, 4-"5-$91(:3)92'80%7/$:2&<4(:2&80$4-!70$92'<5*:3'71$71$81%91%92&6/#91%7/#5-!4-!6/#7/#4-!4, 3, 4-!5.!6/#5."4,!7/$4-!1*1*2*2)3* 3+ 3* F+F,F-H/ I/!G.E,D+@'@(C,@)<'3$0!,///1!3#4%4$.(*. -*'%!     !#%&!    -    - - -        -  - - -     - - -  - - - - -    -      -           -   - - - - - -||{~~CA?A?>;98<:9>=>?>=>===<<;76566311.  !!!!!!!!!!!!""""""!!!!!!"""######$$$$$$######!!! """######$$$"""!!! """$$$$$$###!!!"""###"""  !!!######!!!""""""!!! !!! !!! !!!!!! !!!"""###$$$###"""$$$!!!#########"""###$$$$$$$$$$$$$$$$$$$$$######%%%%%%$$$###"""$$$$$$&&&&&&&&&&&&%%%&&&'''&&&&&&&&&%%%$$$############""""""$$$%%%%%%%%%&&&###!!!$$$%%%$$$$$$""""""!!!!!!###"""%%%&&&%%%&&&&&&%%%$$$###$$$%%%$$$"""!!! !!! !!!!!!###$$$%%%%%%&&&$$$%%%(((((('''%%%$$$$$$%%%%%%&&&%%%$$$$$$###"""$$$$$$$$$ !!!!!! !!!!!!###!!!!!!!!!!!!!!!!!!"""!!! !!!!!!    !!!!!!!!! !!!!!!!!!"""###"""""""""!!! !!!!!!"""!!!###:1'6-#2)6-#90&6-#/'3,!91&3+ 7/$<4)92&4-!4,!6.#7/#80$80$3*5,!90$5-!:1%>5):1%8."=3(?6*;1&9/#;1&=3':0%;2&A7+:1%4*5, 8/#:1%90$8/#<2&8."7.":0%7."8."9/#6-!7."7."6-!8."8/#7/!6. 91#:2%:1%90#4,;1%>4(:0%;1%:/$:0$8.#:/#?3(?4'>3'?4'?4&<1$=3%>4&?5'B8+B:-B9,YL: -   "#%'((((((('''''&'&&&%%%%&&&'&&%&%'%'%($($'%(&)&)%($'$&#&"%"$!#!"&(')()()(*')')'('(&(&(&('*(+(*(*),*,*,*,*,*,*+()(*(*')+..  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -G7):2%92%=5(6.!7."8/"5, 5, 4, 7/#:1&:2'80&91'<4*:1'7/$91%:2&7.#3*5,";1':1&90$5,!1)7/#:2&:1&6."6.";4(<4)81&7/$5."81%92&3-!2+ 4,#80':3):3(80&5."7/$:2':2'91%70$70%81&;4)70%6/#70$60#7/#80$6."80%6."6."6."80$5."3, 3, 4-!4- 4- 6/#6/#5-"6.#4-!0)0(1)0(2)E+F,F,D,H0H.G-D+@'<$@(H0"A*;&,,)*/ 1"2#3$4$0!+*./ -)('# %  !#%$#         -               -  - -  - - - -     - - - -   -     - -          -  - -  - - - - - - zyx~}|987987;::>=<==<>>=@@?@@?@@?CCBBBA??>=>BBACCCBBCAABBBCCCCBBCAAABAAAAABBBCCCCCCCCCCCCCCDDCECBDBBCBBBCBCCCCDDDDDDCCCCCDEEEFFFFFFGGGFFFFEE434EEGEEFGFGEEEA@@==<=<; !!!!!!""""""!!!!!!!!!!!!!!!"""###%%%%%%$$$###!!!!!!###$$$"""""""""""""""""""""$$$###!!!!!!"""""""""  !!! !!!!!!"""$$$###""""""###""" !!!  !!!!!! !!!###""" $$$%%%$$$%%%$$$$$$###$$$######$$$$$$###$$$$$$$$$$$$%%%$$$&&&%%%%%%###"""$$$%%%$$$'''&&&&&&(((&&&'''%%%%%%%%%$$$$$$$$$$$$%%%$$$""""""###$$$######$$$""""""$$$$$$%%%%%%""""""###$$$######%%%$$$$$$$$$%%%%%%%%%%%%%%%$$$$$$""" !!! !!!###&&&%%%%%%'''$$$%%%&&&&&&(((&&&&&&$$$%%%&&&'''&&&%%%$$$######%%%&&&!!!  !!!"""""""""!!!"""!!!!!!!!!"""!!! !!!  !!!!!! !!!!!!!!!"""#########"""!!!!!! !!!"""###4+!90&5,"2)6-#90&6.#0(4,!91&3, 6/$;3(91&5-"4,!6.#8/$80$8/$2*7."8/$5, :1%>4(;1&7-!<2&=3'9/#8.";2&=4(;1%<2'@7+;2&6-!6-!8/#90$80$8/#<2'8/#7-!90$8/#8/#8."7-!7-!7-!6, 7."7.!7.!7.!:2%:2%:1%:1%4,:1%=3':0$9/$9.#;0%:0%:/#?3'?3'?4'?4'>3%<1#=3%=3&>4&A7*A8+>5)C9, - -  !"  !!!!!! %''('(')')&(&(&'%'&'(*')')(+)+)+)+)+)+*,*,*,*,*+(*()(*')%' - -  - - - - - - - - - - - - - - - - - - - - - - - eUAC9-;2':0$;1%<3&<3&<4'81#92%92%80#90$7-!3(6-!92%:3&=6):3&92%<5(5.!5- 7."5, 5, 5, 8/$:2&81&81&70%:3(:2'90%80%:2'8/$4+ 6-":1';2'90$5,!0(7/#:2&91%5-!6/#<4);4(81&70$71%:3';5)5/#2+ 3+"6/%81':3(80&5-"6.#91&91&70$70%70%92':3(70%6/#81%6/#5."5."5-!6."8/$5-"3+4,!3+4-!5-!4-!3, 5."3,!6/$5-"7/$4-!0(/'1)E+F,F,G.G.E,E+E,C*;#8 @)E.A*0". **,- / 2$1#1",& ,0!/+)&$## $! "&%#"     -    - - - -        -        - - - -  -   -                      -  - - -  - -   OMKSQPWUT\ZY`^]ecbkihpnmuts???AAABBBDDDBBB@AA@@@@@@BBBBCCABBCDDCDD011@=>B@ADBCDDCEEEEEEFFFEEECCCDDDCCDAAAAAABBBBBB@@@@@@DDDCDDCCCAAAAAAABBBBBCDDBCC???BBBCDDBBBEFFDEEEEEEEEDDDCCCCCCCCC  !!!!!!###### !!!###!!! !!!$$$%%%###""""""!!!"""###""""""#########"""######""" !!!""""""!!! !!!!!! """###$$$$$$!!!!!!"""!!!!!! !!! !!! !!!"""""""""$$$###"""###$$$$$$%%%%%%%%%&&&'''$$$###%%%%%%$$$$$$$$$$$$######$$$###""""""###$$$######$$$&&&''''''(((&&&"""&&&&&&$$$$$$$$$###$$$$$$%%%$$$""""""#########$$$$$$###%%%&&&%%%&&&%%%"""###%%%$$$!!!###!!!$$$$$$$$$&&&%%%$$$$$$%%%&&&$$$"""!!!!!!!!! !!!$$$&&&&&&%%%&&&$$$&&&&&&'''%%%$$$$$$$$$$$$%%%&&&%%%&&&&&&$$$%%%$$$%%%'''%%%""" !!!"""!!!!!!""""""!!!!!!!!!!!!  !!!   !!! !!!!!! !!!!!!"""###############"""""""""######1)3+ 7.$4+!2)5-#80&5-".'1*80%4,!5-";3(91&4-!4,!7/$91&:1&8/#1)7."8/#5, ;1&=4(;1&5, ;1&=3':0$9/$<3'>4);1&;2&?6*;2&7."7."8/#8.#91%91%;2&9/#6-!9/#8."8/#9/"6, 8."6, 6, 8."7.!7."7.!<3&;1%90$90$6, :0$=4'<2&:0$8.";1%;0%;0$>3'>3&?4'?4'=2$<1#>4&<2$=3%A7*@7+<4(@7*`S>   ! !     !!"!"!"#"#!# "%&'''''('(&('('(&(())+)+)+)+*+)+)+)+++*,+,*+*+*+(*()(*(*&('.+ - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - G<.?5*;1&8/#90$<3&;3&=5(81$;4'92%80#90$6,!3(6-!92&:3&<5'92$70#:3&6.!5- 7."5-!5-!6-"8/$:1%6.#6/$70%<4)91'7/$7/$;2'90%5-!6-";3(;2'92&6.#1)7/$91&91&5-"7/$<4);4)81&70%92'<6*=7+60$2, 2+!4-$6/%91(92'2+ 3,!81&80%7/$70%81&:2(:3)6/$5."81%5."4,!4,!3+ 3+ 7/$5-"3+ 5-"7/$80%6.#3, 5."5.#4-"5."4-!6.#4-"0(E+F,F,I0I0F-D+D*E,B):#9"A*A+?)/!-,,.!- -0 0"-()./ -*(&%"###%##%'#       -  - -   -      -     - -  -  - -  -      - -     -   - -     -      - - -   -  - -   <<5)<3';1&=3(>4);1%;1%>5):1%7."8/#9/#8/#;2&:1%:1%8."6, 9/$9/#9/#:1$8.";1%5+5+9/"8."7/"6.!<3';2%:0$:0$6- 9/#=3'=3';1%8.":0$:0$;1%=3&=3&>4'>4'<1$;1$>4&=3%>4'A8+A8+=4(=4(I?0   ! ! !! !"!!   !!"!#"""!     !! !"!"!" $&&'''&''(()(*)*)+)+)+*+)+(*)*)*)+*+*,*,*+)+*+)*()(*(*&(%&(., - - -   - - - - - - - - - - - - - - - - - - - - - - - eU@B8+=4(;1&8."8."<2&91$:2%81$<5(:3&91$:1%7-"4)6-!:3&;4(:3&6/"5/!92%7/"6.!7/"5-!6-"6-"7.#7.#70%5.#6/$<5*70%6.#7/$;2':2'6.#7/#:2':2&:2&70$4,!7/$70$80%6.#7/$;4);4)92&81&81%;4(<5)71%4."4-#5.$70&70&5.#2* 5.#:2'91'6.$70%81&:2(;4)5/#3,!80%4-"3, 4,!3+ 4,!7/#5-"3+ 4,!6.#6.#5-"4-"3,!4,!5.#5.#4-!4-!E,F,F,F-G/G.B)C*B)B)>&:#<&@*@)3"1 /!,*,,++-+(+/ / -(%'$#####"#%%%       - -   -  -     - -     - - - -   -          - - - -              - -     - -   ==>BBCBCCCDEEFGDEEDDEDDECDDCCDCCDBDCACB@BA@BA@BA@BA@BBBCC@BBACB@BB@BA?@@899A@?CCCDEDDDDDDDDDDDDDBBBBBBBBBAAABBBCCCCCCAAAAAABBB!!!######!!!"""###"""!!! !!!"""###"""!!!!!!!!!""""""""""""###$$$$$$###""""""$$$!!!!!!""""""!!!!!! !!!######"""###"""!!!!!!"""!!! !!!!!!"""!!! """###"""###$$$$$$$$$###""""""""""""######%%%$$$###$$$&&&%%%$$$$$$$$$###$$$$$$%%%%%%&&&$$$###!!!""""""$$$'''''''''&&&&&&&&&&&&%%%%%%$$$%%%$$$$$$%%%%%%""""""######$$$$$$%%%&&&&&&"""###'''%%%%%%%%%%%%%%%###$$$!!! %%%'''%%%###""""""###%%%&&&%%%$$$""" !!!!!!###"""%%%$$$$$$$$$%%%%%%######&&&&&&&&&%%%%%%%%%%%%%%%&&&&&&&&&%%%&&&&&&%%%$$$$$$!!! !!!!!!!!!!!! !!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!! !!!!!!""" !!!  ######"""""""""###############5.#1)4+!7.$5,"4+!7.$8/%3+ .&2+7/$5."6.#:2'7/$4,!5-"5."7/$91%7.#/'7/#91%8/#>5)>5)90$5, ;1%?5*=4(;2&<2'=3':0%:1%=4(:1%8/#:0$9/#90$;2&91%;1%8."6-!:1%90$8/"<2%:0#=3'5+4*8.!8/"8/#5- <3&<3&;1%;1%7.!9/#=3'=3'=3&9/#90#:0$<2%=3&<2%>4&>4'<2$;2$>4&=3%>4'B9+B9+=4'<4'D;.dWC    ! !! ! !!'''(&)()'*(+)+)+),)+)+(+)+)*)*),),)-*,)+)+)+)+(*)+(*&(%&&/+ - - - - - - - - - - - - - - - -  - - - - - - G=-@6)>5)=3':0%9/#<2&80$80$81$;4':3&91%:1%7-"4*6.":3':4'92&6/"4- 70#70#6.!7."5,!7."6-"7."7-"82&82&4."92':3(5-"5.":2'<3(7/$91%80$:3'70$70$5."7/$7/$70$5.#6/$;4(;4(81%92&81&:3(:3(81&70%60%6/%81'6/%3,!0(5.#<4):2'4,"7/%70%92';3)5.#3-!7/$6/#5.#7/$4,!5-"7/$2*1)4,!5."6.#4-"3,!3, 3,!5.#5.#F,F,F,E,H/G.C*A)D+C*@(=&=(?*;&:%0!/.-++,, )''*. +*+($%&%""""#"#%!"     -  -   -  -    -                   -  -  -           - -  -  -  -     ->>?BBCCCDCCEDEFDDECCDBBB??@!!!"""!!!!!!"""###"""!!!!!!###$$$######"""!!! !!!"""!!!"""%%%&&&&&&""""""""" !!!###""" !!!""""""""""""""""""!!!"""!!! """""""""  !!!""""""###%%%%%%%%%######""""""#########%%%#########!!!###%%%%%%%%%$$$$$$$$$%%%((((((%%%$$$$$$%%%%%%''''''&&&'''%%%'''''''''%%%$$$$$$###%%%%%%$$$$$$######$$$$$$$$$$$$$$$%%%&&&###%%%%%%$$$%%%%%%&&&%%%%%%%%%$$$&&&''''''$$$###"""###$$$&&&'''&&&$$$$$$"""!!!!!!""""""#########"""$$$$$$$$$&&&&&&&&&'''&&&&&&%%%%%%$$$%%%&&&&&&&&&&&&&&&&&&######!!! !!! !!!!!!###!!!!!! !!!""""""!!!!!! !!!""""""""" !!!  !!! !!!###"""###!!!!!!$$$#########70%5-"1)4+!7/$5,"4+!8/%90&4,!-&3+ 70$5-"5."91&6.#3+ 4,!5-"5-":2&80$0(90$8/#7.">5)?5)9/$5, :1%?5)=3';1%<2'=4(;2&:0%<3'<3'90$9/$90$:0%:1%90$;2&:0%8/#<2'8.#7.!;1%:0#<2&6, 5+7- 7."8/"3+:1$<3&;2&<2&8."9/#<3&;1%;1%:0#9/#;1$;2%=3&<2%?4'?4'<2%=2%=3&<2%=4&C:-B9,<3&=4(?8+G?1       $%&''((*(*(*')')(*)*)+(,),(+)+),*-*-*,),),)+)+(*)*(*'(%&$&'.- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cS?A7)=3'>5)<3':0$6-!:0%8/#8/#92%81%92%70$6-!5, 4*6-!91%;4(;3'70$3,5.!6/!6. 6.!5, 7.#6-!6-!6-"71%93'81%:3';3(3,!6.#<4(;3'91%:2&92&:3'92&70$3,!6/#81%70%5."6.#;4)<5)80%6/$6/#:3';4(81&6/$5/$81&92'70%3,!.'5.#;3)80%3,!6/$70%70%81&4."4-"70$70$5.#6.#3+ 5-"7/$4,!2*4,!5-"6.#5-"4-"4-"5.#F-F,F,E+D+E-D+B(C*E,@(<%?)?*<(7#./ .-/ .!0$."-!+''+-,&&'%$%$%"##  "!        - -    - -          -   -    - -    -  - - -  - - -        -   -       -    - -!!!"""""""""#########""""""$$$###"""!!!!!!  """ !!!%%%&&&%%%###""""""!!! !!!###!!!  !!!"""!!!!!!  !!!!!!!!!"""""""""""""""!!!"""!!!!!!!!!!!!$$$###$$$$$$###""""""###$$$###$$$$$$"""$$$""" ###%%%((('''%%%$$$$$$&&&(((((('''%%%%%%'''&&&''''''%%%%%%###$$$%%%$$$%%%$$$$$$###$$$%%%$$$""""""###$$$%%%%%%$$$%%%(((&&&###%%%%%%%%%'''''''''%%%&&&%%%$$$$$$&&&'''###"""!!!###%%%%%%&&&$$$$$$$$$###"""######""""""#########$$$$$$%%%'''%%%&&&&&&&&&&&&&&&$$$###%%%%%%%%%'''%%%%%%'''$$$### !!!!!!!!! !!!"""!!!""""""!!!"""######!!! !!!"""###"""!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!  """"""###""""""############""""""""""""###5.#70%4-"1(5,"91&7/$5-"90&:2(4,!.&3+ 7/$5-"6.#:2'5."2*4-!6."7/#<4(;2'2):1%90$6-!=4(?5)8/#6, :0%>5)<3':0$;2&=3(;2&90$<2&>4)8.#7.";1&;1&:2&8/#;2&;1&9/$=3(8."7.!:0$8/";1$9/"8.!7-!7.!7."2*7.!:1%;2%<2&8."9/#<2&:0$:0$;1%90#;1$:0$<2&=2&>4'>3&<2$=3&=3%;2$=4&C:-B9,:2%=5(>7+G?1 !"!!! !  #&')(*')(*'((*)***)+*+)+),)-*-*-*,*,)+)+)*)*(*(*(*&(%&$% &'.45 - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - -C8)<2%<3'>5)<3'9/#3*8."7/#80#92%81$82%70#5-!4+4*6-!90%;4(;3'81%3- 5.!6-!6-!6-!4+7."5, 6."6.!71%82&92';4)81&5-"7/$;4(;3'92&:3&:3&93&:3'6/#2+ 4-"71%70$4-"5.":3(:3(70$5."4-"7/$92&92&6/$5/$82'82'91'3,!.'6/$80&5-#4,"7/$81&70$6/$4."5.#81%7/$4-!3, 2+4,!6."5-!3+ 3+ 3+ 6.#70$4."4-!G-F,?(D+C*A)@'B)B*?':$:$>(<(8%*,/!.!,- .!."1%0#)&),. 0!+'# $##%)%!!!         - - - -   -  -   -        - - - -  -     - - -   -  -  -        -    - -  -  - -  - -"""###"""############""""""$$$"""!!!!!! !!!!!!!!!""" !!!###$$$###"""!!!"""###"""!!!  !!!!!!!!!  !!! """"""$$$$$$######"""!!!!!!  ######$$$###""""""""""""######$$$%%%$$$%%%###!!!###%%%&&&&&&%%%###$$$&&&&&&''''''&&&%%%(((''''''(((((('''$$$(((&&&%%%&&&$$$###$$$$$$$$$$$$$$$######$$$&&&%%%$$$&&&(((%%%!!!&&&%%%&&&'''''''''&&&###$$$%%%%%%%%%%%%%%%!!!"""###$$$&&&&&&$$$###$$$###""""""###$$$######$$$$$$%%%&&&&&&&&&&&&%%%%%%&&&&&&%%%$$$###%%%&&&%%%&&&$$$&&&&&&%%%$$$""""""!!!!!!!!! !!!""""""""""""""""""###""" !!!"""###!!!"""!!!  !!!!!!""""""!!!!!!!!!  """""""""###!!!"""###""""""""""""""""""$$$2+ 5-#6/$3+!0'4+!:1'8/%5-"90&:2'5-".&2+ 6.#4,!6.#;3(80%4,!4-"6.#80%<4(80$2):1&:1%6-!=4(>4)9/#6, :0%?5)=3':0$:1%<2';1%9/#;2&?5):0$5+ ;2&;2&;3'8/#;1%90$8/#>4):0$9/#;1$9/":0$:0$9/#8.!7.!7/"4,6- 91$:2%;2%8/#9/#<3';1%;1%<2&:0$:1$;1$<2&<2%=3&<2$<1$=3&=3&;1$=3&A9+@8+80#<4'=6)D(=(7$(*+,- ,.!/".".", (&(*,,)&$! """$'#!    -    - -    -       - - -    - -  - -        - - - - -         -  - - - -     - - - - - -"""######!!!"""!!!""""""!!!"""###"""!!!!!! """######"""!!!"""$$$$$$### ###""""""""" !!!!!!""" !!!  !!!!!! """#########$$$&&&$$$$$$###""""""!!! """###$$$###"""###"""!!!!!!"""###$$$%%%$$$$$$$$$###%%%"""###$$$$$$###$$$&&&&&&'''&&&&&&'''&&&((((((((((((((('''%%%###&&&$$$$$$%%%&&&%%%%%%&&&"""$$$&&&&&&&&&'''(((&&&$$$%%%%%%"""%%%%%%%%%%%%%%%%%%###%%%"""%%%%%%$$$$$$###"""%%%&&&$$$###%%%$$$#########&&&$$$###&&&%%%&&&'''&&&''''''&&&%%%&&&&&&'''&&&$$$$$$$$$%%%'''''''''&&&%%%%%%$$$!!! !!!""" !!!!!!""""""!!!"""""""""!!! !!!!!!!!!###""""""!!! !!!"""""""""######!!!!!!!!!!!!###"""""" !!!!!!!!!""""""!!!!!!""""""""""""######"""###6.$3,!5.#70%3,!0(3+ 90&7/%5,"8/%91&5-"/'3+ 6.#3+ 6.#;3(7/$3+ 2+5-"91%=4)7/#3*;2&:1%7."=3'=3(9/#5+ :0$?5*<3'90$90$:1%9/#8.#<3'>5):0$5, ;1&;2&<4(90$:0%7-"6,!=3(;2&<2&=3';1%9/#9/#9/"8."7.!8/#6.!6.!:1$:2%;2&90$8."<3&=3'<2&;1%90#:0$;1%;2%;1$=3&<2$;1$=3&>4&;1$<2%@7*@7*91$;3&=6)?8+JA2 "!#"""""""%''(()(*'+(+))&(!#&((*),*-+,+*))((&&%&))')()()(*&(%'#$#% $#+.  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@5&:0#<2%<4'<3'<2&;2&6,!7."7."7/#70$70$81%81$8/#6,!4*4, <3';3'92&92%60#80$80$7."4+4*8.#4+ 6."70$92&:3(81&91&6.#3,!5."81%:3'92&81%:3&;4(;4(80$3+2+70$80%6.#4-"92':2(6.$4-"4-"70%81%6/$3-!60%4."70%3,!2+ 5.#80&70%5-#5-"6.#81%70$4-!3,!4-"5.#5-"5-"5."5-"5-!4, 2*2*4-"5-"I/G-D,B+@)@*=%>'@(>'9#6 9$=)9%3!*)*,- - .!/"-!)''++++'$&'%'##$&##!   -       -     -   -    -    -    - -   - - - - -  -  -  -     -    -  -     -  -    - - - - - """""" !!!"""###"""!!!!!! !!!!!!!!!""" """"""######""""""######""" !!!$$$$$$$$$"""############!!!!!!"""!!!!!! !!!!!! !!!###$$$###"""$$$%%%%%%%%%$$$"""#########"""######$$$###"""!!!"""!!!"""######%%%%%%"""###%%%######""""""###$$$###%%%'''(((&&&%%%'''&&&%%%'''&&&)))))))))'''&&&&&&%%%&&&%%%&&&'''&&&'''&&&######%%%&&&&&&'''((((((&&&###%%%$$$############%%%%%%&&&%%%%%%""""""$$$%%%$$$"""!!!"""$$$###$$$&&&&&&%%%$$$######$$$###$$$&&&''''''%%%$$$&&&%%%%%%&&&&&&&&&&&&%%%%%%%%%&&&&&&'''''''''&&&%%%### """"""!!! !!!!!!!!!"""""""""""""""!!!!!!!!!!!!"""######"""!!!"""!!!!!! """!!!"""######!!!!!!"""!!!!!!!!! """"""!!!!!!!!!!!! !!!"""######"""######5.$2+ 4-"6/$3+!0(3* 90&7.$5,"8/%80%2*.'4,!7/$4,!6.#;3(7/$3,!2*5-":2&?6+:1&6-";2';2&8/#<3'=3(9/$5+9/#?5*<3':0$90$:0%8."7.">4(?5);1%7-!;2&<2'=4(:1%;1%7-!4+;1%;1%<2&=3';1%8."8.!7-!6, 6.!90#8/#91$;2&:1$;2%:1$6- :1%=3';2%8/#7."90#;1%:0$;1$=3&<2%;1#=3&>4';2$;2%@7*@7+;2&:2&;4(>7*F>0iYA !! !!!""!!$&'((*&*'**+))&'&'()(*)+*+**((''!%'!#$$''()'(')()'(%'$%#$#%#"&44 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -hV??4&90#<3%=4(<4(;2&;2&8."7."6."70#81$71$70$6/"80$7-!4*4+;3':2&:3';4(81$70#8/$8/#5, 4*7."4+ 5."70$92&92&6/#70$5.#3, 5."70$:3&81$6/#92&;3':2&7/#3+1*7/#70$6.#5.#:2(:3)7/%6/$6/$92'71&3-"4-!5.#2+ 1*1+ 2+ 5.#70%6/$4-"5-"5-"70$92&4.!2, 5."5.#5."5-"6.#5-"5-"4,!2*/(J0H.E,D,A(>'<%=%@)@(;$8!<&>)9$5"(+)+,*,-.!-!)$'.#."/!*&$$ &($#""$!   - -   - - -   -    -   -          -  - -      -    -   -    - -     - -  -    - -    - -  - - -"""!!! !!!!!!!!!!!!######!!!  """###"""""""""###!!!"""###"""######""""""!!!"""$$$%%%$$$$$$###############!!!""""""!!! !!! !!!""""""!!!""""""###$$$%%%%%%######"""""""""""""""######!!!!!!"""######"""###%%%%%%###$$$%%%$$$###$$$#########%%%&&&(((&&&%%%%%%&&&'''&&&''''''(((((()))''')))'''$$$$$$%%%&&&&&&%%%$$$&&&'''&&&$$$%%%%%%&&&'''((('''&&&&&&%%%############$$$$$$%%%%%%%%%#########&&&%%%###""""""$$$$$$%%%&&&&&&###$$$$$$#########$$$###$$$$$$$$$&&&&&&&&&###&&&$$$%%%$$$$$$%%%'''%%%&&&(((((('''%%%###!!!!!!!!! !!!""""""!!!!!! """"""######"""!!! !!!!!!""""""""" !!!!!!!!!!!!###############"""###!!! !!! """!!! !!!!!!!!!""""""""""""!!!80&6/$4-"6.$6/$3+ 0(4,!91&7/$6-#8/%8/%2*0(6.#80%5-"7/$:3'91&5-"3+ 6.#:2&=5):1&8/#;2&:1%7.";2&>4(;2&6,!9/$?5*<2'90$:0$;1&9/#7."=4(>4);1&8.";2&<3'<3':0%;2&8."4*9/#:0$:0$<2&;1%:0#9/#6, 6,7.!90#90#90#:1%90#:1%<4'5- :1$;2&:2%6-!6-!:0$=3&<2%;1$>4'=3&:0#=3&>4&<2%<3%@7*@7+;3&:2&<5(?8+C;.L@0   ! "!#"$#$#$##"# &'()&)(*))'($%''((')'*() &(#&&%%%$###" #$#%%&&&'')')'(&'$%#$#$'%%94 - - - - - - - - - - - - - - - - - - - - - - - - - -D8*:0#8.!:1$<3'=5)<3';1&8/#7."6."70$82%92%71$5."7/#7-"6, 4,;3';4'<4(;5(70$6."6."8.#7-!5+ 6-"4, 4-!6/#70$81%6/#81%70$3, 4-"81%92&6."4-!91%:2&81%7/#4+1)6."6/#6.#5-#92(;3)70&7/%81&:4)92'5.#5."6/$4-!3, 2, 2,!5/#60$6/$3,!3, 4-!80$80$4, 1*2+6/$6.$5.$6/%5-#4-"3+ K1 I/E,D+B*?';%;%>'A);$7 ='B,>(8#'((-&,,*,- +)'&(* )&#%&&'&##"!#   -      -    -  -       - -      - - - - - -   - - -     -    -   -          - - - - -######!!! ######""""""""""""!!! !!!###%%%%%%###############"""!!!""""""!!!""""""!!!$$$%%%"""###$$$######""""""######"""###!!! """!!!"""###"""#########%%%%%%$$$######"""###"""!!!!!!######"""!!!###""""""######%%%$$$"""$$$%%%$$$$$$"""%%%######$$$%%%%%%$$$$$$&&&&&&%%%%%%%%%$$$%%%%%%###$$$''''''&&&%%%$$$%%%%%%%%%&&&&&&&&&&&&$$$&&&$$$$$$&&&&&&''''''(((&&&%%%$$$$$$"""###$$$$$$$$$$$$'''&&&%%%&&&%%%#########!!!$$$$$$%%%&&&%%%$$$###"""######$$$######!!!%%%&&&%%%&&&%%%&&&%%%&&&%%%###$$$$$$%%%%%%'''(((%%%"""!!!!!!!!!!!! !!!!!!!!!"""!!! !!!###"""""""""!!! !!!!!!!!!""""""!!! !!!"""!!!!!!"""###!!!!!!"""###!!!  !!!"""!!! !!!"""""" !!! 81&:2'7/$4,"6.$6/$4,"1)4,!;2(91&8/%91&:2'5-"2*80%91&6.#80%;3(92'6.#4,!7/#:2&=5):2&7.#:1%80$5+ :0%>4(<3'7-!9/$?5);1&9/#:0%<2';2&8."=3'>4(;1%7-":0%;2&;3'90$:0%8/#4+7."9/#9/#:0$9/#;1%<2&7-!6, 7.!9/#90$8/":1$8/#80#:1%6.!<3&;3&:1$6.!7.!:0$=3'<2&;1%=3'=3&<2%=3&>3';2%=4&@7*?6*;3&<4(<5)>6*=5)C9*      !!""##$%$&$&#&#%$%$%$$&&''())*)*()((((&'!%''(!&'&%'&%%%%%$#"$" !$#%%!%%%$%')'(')&'$%#$"$$% +( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - @6(7.!5,8/";2&;2&;2&:0%8/#7."6."6/"5/"81$81%70#7."6, 4*6- <3'<4(<5(:3&6/#6."6."7.#7-"7-"7.#5,!4, 6/"81$81%70$92&92&3, 5.!:3'81%3, 2+81$:2&81%80#4, 1)6."5."5.#5-#91'92(6/%6/%81&:4(92'6/$4-"70$6/$6/$5.#3,!4-"70$82&5."3,!5-!91%8/#3+0)2+5.#5-#5-$7/&5-$K1 J0F,E,A(>&;&8$:%=';$7:#A*@+;&1+ '*)+'*+,+&&)(''$ $(()&$#"#!              -     - -     -    -   - - -      -   - - -     -  -  -  -      - - - - - !!! !!!$$$############"""!!!!!!"""$$$%%%$$$$$$"""$$$$$$###!!!!!!""""""""""""""""""#########$$$######"""!!!""""""###"""!!!!!! !!!!!!#########$$$$$$$$$$$$###"""""" """"""!!!!!!!!!"""###""""""""""""!!!######%%%$$$"""###$$$###"""!!!###"""""""""%%%$$$###&&&'''&&&&&&%%%&&&''''''%%%&&&%%%''''''&&&&&&%%%&&&'''&&&&&&'''&&&%%%&&&###%%%%%%$$$$$$%%%'''''''''&&&&&&%%%######"""$$$&&&'''&&&%%%%%%%%%$$$$$$$$$######""""""$$$$$$$$$############$$$$$$$$$###%%%&&&%%%$$$&&&&&&''''''$$$$$$###$$$%%%$$$%%%%%%### !!!!!!"""!!!!!!!!!!!!"""""" """"""""""""!!!!!! !!!!!!!!!!!!!!!!!! !!!""" !!!""""""""" !!!""" !!!""""""!!! """"""4,!91&91&7/%4,"6/$7/%4,!1)5,":1'91&8/$:1&;2'6."3+ 7/$91%6."91%<3(:2'6."4,!7/#;2'=4(;2&8/#:1&80$4+90$>4);2&5+ 8/#>5);2&90$;1%<3'=4(90$=3'>5);1&7."9/#;2&<4(90$9/#9/$6,!9/#:0$90#9/#6, ;1$<2&8.!7-!8."90#90#7.!;2&90$8/#80#6-!<3&=4';2%80#7/"9/#<2&<2&<2&>4'=3&<2%<2%>4';1$<3&A9,?7*:2%;3';4)<5)?7+A8*hXA ! ! "!"!"!"!"#"$#$$%$$%#%#%#%#$#$#$""$%&((*(*(*()'( %'"%'"&'$%'$%&%$$%%$$$$#$$%%&&%&"$&'('(')&'$%#$"##$$$%00 - - - - - - - - - - - - - - - - - - - - - - -  - - RD3;0#6, 4+7- ;2&91%:1%8/$6-"6-"6/#70#6/#70#70$70$7."6,!2(5, :1%:3&;4(:3'6/#6/#6.#6-"6,"7.#8/$5,!3+ 6.#80$81%70#81$81%3+5.!;3'91%3, 1*80$:2&91%80#4, 0(6-!5."6.#6/$:3(;3)81'70&82':3(92'6/$4-"6/#7/$70%5.#2, 2+ 6/$82&6.#5-"5."80$7/#4, 1*4-!5.$5-$5-$K1 K1F,C*A(?'<'8&7$9%9#7!9"@*A+>)7"8#1+)*+)&(+))%))'%"!#(.,($" " "   -    -    -        -  -   - - -     -    -       -           -  -       -  - - - - -!!!!!!!!!###$$$$$$$$$$$$######""""""######%%%$$$"""""""""######################## !!!###############"""!!!"""!!!!!!###!!!"""!!! !!! """"""###$$$######$$$###"""######%%%$$$"""""" $$$ !!!#########$$$$$$&&&%%%$$$$$$$$$############"""!!!!!!!!!###%%%%%%'''(((&&&&&&(((&&&((('''&&&&&&&&&'''&&&%%%%%%&&&'''''''''((('''%%%%%%$$$$$$%%%%%%$$$$$$%%%&&&&&&$$$&&&(((&&&&&&%%%$$$%%%&&&&&&&&&&&&%%%&&&'''$$$###!!!  """$$$%%%$$$$$$$$$$$$$$$%%%######$$$$$$$$$&&&%%%''''''$$$$$$$$$######"""$$$###"""!!!!!!!!!!!!""""""""""""  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!! !!! !!!!!!!!!!!!!!!  !!!!!! !!!!!! !!!0(4-!:2'92'70%3+!5.#80&6-#2*5,"90&90&7/$91&:1&5-"3*7.#8/$6-"91%=4(;2'6."5-!8/#;2&=4)<3'80$<3':1%3*8/#>4):0%4+8/#?5)<3':1%<2&=3(<3':0$=3'?5)<2'8/#8/#:1%=4(:0$8."90$7-":0$9/#7.!7.!3)8.":0$8."7.!8."90#8/"5,;3&91$90#8/"7.!;3&<4';2&91$6.!9/#:1%;1%<2&=3&=3&;2%90#<3&:2$;2&@8+>7*91%;3(<5*<5)?7*?6(H=-     !!!!"""#"#"$!# "! !!" ! !&((+),)+)*'(''('')&)"%&$%$%$#&$$$$&%(&(&'''((')')&'$%#%#$#$#$ !'(,,57 - - - - - - - - - - - - - - - - - - - - - - - - - - C8*8/"7-!4+5,:2&:1&90$7.#6-!5,!6."70#5/"70$71$92&8/$7-"2(4*90$92%93&:4(81%6/#6.#5,!4+ 6-"7.#4,!3+ 6."80$:2&91%91%91%2+5-!;3';3'6."2)7/#;2&91%7/#2*.&4+ 6.#80%80&;3):3)81'70&92(:4(:3(70%4-"5."5.#5.#3-"1+ 2,!5.#60$4-!5."5."5."5-"4, 2+5."6/$K1 L2 F-A)>&;"='?+9&7#7"7!8"?)C->)3:%<'4 /-,).)+)'&*('%" #% (,+)&"!"   - -   - -   - - -  -           -   -  -  - -     - - - - - - - -   - -           -   - - -  !!!$$$$$$$$$$$$###"""#########$$$$$$$$$$$$!!!"""###$$$$$$$$$$$$$$$$$$$$$"""!!!###""""""######!!!  !!!""""""""""""!!!###$$$%%%$$$###$$$$$$$$$######$$$$$$"""""""""!!!!!!$$$!!!###$$$###%%%&&&&&&%%%$$$$$$######$$$$$$#########"""!!!!!!######$$$&&&&&&&&&&&&&&&&&&'''%%%&&&((((((((((((&&&%%%%%%&&&''''''&&&%%%%%%%%%$$$###%%%%%%&&&%%%%%%'''&&&'''&&&(((((((((%%%&&&''''''&&&&&&&&&$$$%%%%%%###!!! ###%%%$$$$$$#########$$$%%%###$$$$$$$$$%%%$$$%%%'''### """""""""#########!!!!!! !!!""""""""""""""" !!!!!!"""""""""!!!!!!!!!!!!"""!!!!!!!!!!!! !!!!!!!!!!!!  !!! !!! !!! !!!1)5-"91&91'7/%4,!5-#:2(80%4,!5-"91'90&7.$80%;2'6.#3+ 7.#8/$6-"91%<4(:1&6."6."8/$:1&=4(<3'8/#<4(:1%3)9/#>4(90$4+9/$>5)<2':1%<2'>4(<3';2&=4(>5)<3'9/$8.#:1%>5);1%90$;1%8/#:1%7-!6, 8/"3)6, 9/"8."7.!7-!80#8/"4+90#8/"91$80#7/":2%:2%91$80#7."9/#:0$:0$;1%;1%<3&;1$8/":1$:2%;3&@8+@8,;3':3'=6*<5)=4(=4'E;+    ! !!!!!!""""# "!    !!!!!!! %&(*),(+(*()))(+(+'(#%&$%$#%%$$&!%'&(')(()())')')&'%%$%#$#$#$#"$&)2;> - - - - - - - - - - - - - - - - - - - -   - - - - -fVB@6(8/"7-!4+6- :1&90%7."8/#7.#5-!6."70$6/#81%92&;4(90$7-"3*4*8/#91$92&:3'92'70%4,!4+ 4+ 5,!6-"5,!4, 6."81$:2&80$;3'80$2*4, :2&;3'6."2*7/#;2&80$7."1),$2*5-"80%80&92'81'7/%6/$81&93':4(70%4-!4-"5.#5.#4-"1*3,"4-"5.#3,!5-"3, 3+3, 2+2+5."N3 G-C*>';$;$8#:&7"5!6!6 :%A+>)22:&<(7#00.(',*)'(*+("  !$%&(&$" %$!!       -  - -   -      - -  - -   -     - - - -   -     -         -   - -     -      - - -   !!! """#########$$$######$$$######""""""!!!!!!######$$$###%%%%%%$$$###"""###!!!!!!######!!!!!!!!!"""$$$"""!!!###"""!!!!!!###%%%$$$###"""%%%%%%$$$$$$###$$$&&&"""######!!!!!!###!!!"""######$$$%%%'''&&&%%%%%%$$$"""$$$%%%###"""######""""""$$$###%%%&&&$$$%%%%%%&&&%%%(((%%%%%%)))((((((((('''%%%%%%(((&&&&&&%%%$$$%%%$$$%%%$$$$$$$$$$$$$$$$$$%%%&&&&&&$$$&&&((('''&&&&&&((((((''''''###!!!"""###"""###%%%$$$############$$$%%%$$$$$$%%%$$$$$$$$$$$$%%%###!!!""""""%%%%%%###"""!!!!!!""""""######""""""!!!!!! !!!!!!!!!!!!!!!!!!!!! !!!"""""""""!!!!!!!!!!!!  !!!!!!"""!!!!!!"""!!! !!!!!! !!! 5-#2+ 6/$91'91&70%5.#5-#:2(90&6-#7.$:1'90&6.#80%;2'6."2)6-"7/$6.":2&=5):1%6."7.#8/$:1&=4(;2&7/"<3':1%4+9/$>4):1%5, :1%?5)<3':0$;1&=3(<3'<3'=4(>5);2'8/#7/#:1%=5)80$7/#:1%5-!:1%8/"7-!:0$7-!6, 90#:0#8."7-!90$91$5, 6.!6.!:2%91$6.!80#:2%;3&91$6.!7."9/#:0$;1%:0$=3&:0$:1$90#:1%<4'@8+A9-:3';4(>7,;4(=4(>5(B8*gU?       ! !!""#"# ! !!"""""! ())+(+(*(()*(+(*'(&''('(&'&'')(*(*(*(+&*')&(%%$%#$#$#$  !&+. - - - - - - - - - - - - - - - - - - -     - - - - -H=/<2&7.!5+4*8/";3'90%6-!8/$90$5-"4-!5."6/"81%93&;4(80$7-"4*4+7."80$81%82&92'60%4-"5,"5,!5,!6-"6-!5-!7/#70#91%6/"<4(:2&2*4, 91%:2&5-!2*7.":1%7/#90$3+0'2*6.#7/$7/%91'92(80&6/%81&:3(;4)70%5.#5.#6/$6/$4-"1* 4,#4-#6/$5.#4-"0)0(1*1)N3!G.A)>&:$;$<&:%7!6 8"8"8";%;%318#7$9%7$5"4#.)'**)()(('!  -# ''$&&#!"&#  -     -   -    -          -  -  -   -   -    -        -       - -     -       -  &  !!!  !!!!!!"""!!!"""######$$$######$$$###"""!!! """"""$$$%%%%%%$$$%%%$$$%%%### """"""#########"""!!! """&&&###!!!"""###""""""###""""""!!!###%%%$$$$$$%%%###$$$%%%""" !!!!!!!!!""""""#########$$$%%%&&&&&&&&&%%%######$$$######$$$###"""$$$%%%$$$%%%(((&&&%%%%%%%%%%%%$$$%%%(((((('''''''''%%%!!!###%%%%%%$$$%%%$$$###$$$%%%&&&&&&&&&%%%%%%&&&%%%$$$###"""$$$(((((('''&&&'''((('''$$$ !!!!!!!!!!!!#########%%%&&&%%%$$$&&&%%%$$$%%%###$$$%%%$$$%%%$$$$$$$$$$$$%%%$$$"""""""""!!! !!!!!!"""$$$######""""""!!! !!!!!!!!! !!!"""!!! !!!!!!  !!!!!!!!!!!! !!!!!! !!!""" 70%5.#0(4,!80%80&80%5-"6.$91'90&6-#7.$90&7.$5,!91&;3(6."1(5-"7/#6-":2&?7+;3'7/#7/#8/$:1%=4(:1%6-!;2&;2&6,!9/#?5*=3'7.";2&?5*=3'9/#:1%=4(=4(<3'>5)>6*;2&8/#90$:1%<4(90$80$:1%4+:1%9/#7.!;1%9/#7- :0$9/#8."8."9/#:0$5- 5- 6.!:1%:2%6.!80#:2%91$80#6-!6-!8/#9/#;1$8/"=3&;1$:1$90$91$=5(@8+@8+81%<5*>7,<5)=4(>5(?5'G;,  ! !!!!! ! ! ! ! ! ! !!!!!!! ! &''))*((()'*)*)))))*))(('''(')(*(*),(+'*')&(%%$%#%#$#$  !(34 - - - - - - - - - - - - - - - - - -     - - - rbKC9+:0$8."3*4*8/":1&8/#4+ 8/#8/$5-!4-!4-!5."70$81%92&91%8/#5, 5, 7.#80%70%81&81&5.#3,!4,!5,!4+ 7."7."6."8/#7/#80$6."=5);3'3+5-!90$91%5,!3*6-"90$6."7/#5-!3+4+ 6-"6.#6.$92';3)80&6.$6/$80&81&5.#5/#6/$70%6/$3,"1* 4-#5.$7/%4-"2+ /(0(N3!H/@)='8"9">&>&8"48!9";%=':$8#04 ;'<(6#4"4"2 *(,(%%)-)(" ! $ %('%%#"#!#       - -    - -     -    - -    -    -  -        - -     -      -             '!%  !!!!!!"""!!!!!! !!! !!!!!!###%%%$$$$$$$$$###"""!!!!!!"""###&&&%%%$$$%%%$$$$$$%%%###$$$""""""###$$$$$$"""!!!!!!""""""###""" ###"""$$$%%%###!!! !!!###$$$$$$!!!"""###$$$"""### """ !!!%%%"""$$$###%%%%%%%%%%%%%%%###!!!"""###%%%"""!!!!!!###%%%%%%&&&((($$$"""###$$$&&&%%%'''((('''(((((('''### """$$$&&&%%%%%%$$$######$$$&&&%%%&&&&&&$$$$$$&&&$$$$$$$$$%%%&&&&&&''''''((('''%%%"""!!! """$$$$$$$$$&&&'''&&&&&&%%%$$$$$$&&&$$$$$$%%%''''''$$$$$$$$$%%%$$$###"""""" !!!!!!$$$!!!!!!""""""""""""   !!!    !!!!!!!!! !!!""" !!! !!! !!!4-"70%4-".'3+ 91&;3(80&3+ 6.$80&90&5-"5,"8/%6-#5,!:1&<4)7/$2*7/$8/$5-!:1&?7+:2&7.#7.#7.#90%<3(90$5, :1%:2&6,!8.">5)>4(90$<2&?6*>4)9/$;1%>5)>5)<4(>5)?6*;2&8/#:1%:1%<3'91%91%;2&4+:1%8/#6, :1$9/#:0#;1%8."8."5+8."90$4+2*5- 91$91$3+7.":2%:1$7/"5- 6-!6-!7.":1%;1%>3'<2%9/#90#90#>5)@8*>6)92%92'<5*>7+=4(<3&=3&E:*          '(()'('(())*)*(*')((''&&&&'(()(*)+)+(*(*&($%$%#$"$#$ !"!"((,98 - - - - - - - - - - - - - - - - - - - -     K@1?5(8."8."2(5,6- 7/#5,!3*6-"6."6."5-!4.!5.!70$71$80$90$8.#5, 4+7.#80%70%70%81'3-"1*2*3*4*7."7."6-!7."8/$80$8/#<4(91%4, 6-"90%:1%6-"4+6-"90$7/#6."6."3+4+ 6-"5-#6.$92(;3)80&5.$4-"6/$81&6/$5.#6/$81&6/$3+!1* 3+"6/%5.$3,"0*N2!I/@)=(8"7!>'C+;#57 8!:#<&?)<'6 39%=):'6#6#2 .( +1#-(&)(+&  -$ &&$%$"!             - -               -     -           -         -   -    - - -   -    -&*$)#% """ !!!!!! !!!"""!!! !!!###%%%%%%###$$$$$$######%%%$$$###%%%%%%%%%$$$ $$$$$$######"""######"""!!!!!! #########"""###$$$###$$$###!!!!!!!!!"""$$$"""""""""###$$$%%% !!! """### """###%%%%%%$$$######$$$$$$"""###"""!!! !!!###&&&'''&&&'''$$$$$$$$$$$$&&&&&&''''''&&&&&&&&&&&&$$$$$$&&&&&&&&&#########$$$###$$$$$$$$$&&&'''###%%%(((&&&&&&&&&$$$%%%&&&&&&'''&&&%%%$$$"""!!!"""""""""  !!!!!! !!!"""%%%######$$$&&&'''&&&$$$###%%%&&&%%%%%%%%%((()))%%%$$$$$$%%%######"""""" """#########!!!!!! !!!!!!     !!!  !!!"""!!! """""" !!!!!!!!!2+ 5.#70%3+!0)4-!91'91'70%6.#7/%80&80%3+!2*80%6-#5,!90%;3(7/#3+ 91&8/$5,!:1&>6*:1%6."7."8/$:1&=4)90$5, 90$:1%6,!7."=3(=4(90$;1&@6+?6*:0%;1%>5)>6*<3'>5)?6*<3'80$:1%:1%<4(;2&:2&<3'5, :1%9/#6- 9/#8.!;1%:0$7- 7- 5+8."8."3*3+8/#<4'91$2*7/";2%90$6.!6-!6-!4+6.";1&;1%<2';1&9/#9/#9/#=4(@8+>5);2&<4(@8,@8,>5);2&<3&@6'[K5#$%'&''')*(*()'('(''&&%%%&&(()(*(*(+(*(*&($%$%#$"$"# !&&'++- - - - - - - - - - - - - - - - - - - -      F=.=4'90$7."3*6- 7.!7/#4+ 2)5-!5,!4-!2+2, 2+6/#81%80$80$7.#4+ 2(7.#6.$6/%6/%70&3,!1)2*4+ 4+ 8.#6- 3+5-!90%90$90$:2&6."4+ 7.#;2';2'8/$4+ 5,!8/$7/#7."6-"2)2*6."7.$7/$91':2(81'5.$3,!5.#81&6/$3-"5.#70%5.$3+!2+!4-#7/&4-#L1 I/A*>)7"1='E-@(7 8!>(<%=&>(>(='6 8#;';(;'8%3 2++,.,*))'&"  " &&&%%" "  "            -       - - -   -     -         - -     -   -    -  - - -      -     *$.(-&("*$)$#!!!!!!""""""""""""###!!!"""$$$%%%%%%%%%$$$&&&%%%$$$$$$$$$$$$$$$%%%%%%$$$!!!###### ###$$$$$$$$$$$$"""""""""!!!######### """###"""!!!$$$###!!!"""""""""###$$$##################"""!!!!!! !!!######$$$###$$$$$$$$$### !!!###"""!!!"""!!!!!!!!!###&&&''''''''''''%%%$$$$$$%%%&&&###'''&&&$$$%%%%%%&&&''''''((()))&&&&&&&&&$$$"""%%%%%%%%%%%%&&&%%%'''(((%%%&&&'''&&&&&&&&&$$$"""$$$#########"""$$$%%%%%%###""""""###$$$!!! !!!"""%%%$$$###"""$$$%%%$$$$$$$$$$$$&&&$$$$$$%%%&&&&&&%%%%%%############""""""!!!!!!###"""""""""!!! !!!   """!!!!!!!!! !!!"""""" !!!!!!"""0(4-"6.$2+ 0(5-"91':2(70%5.#7/%6.$6.#1*0(80%6.$3+ 80%;3(5-"0(80%6.#5-";3'>6*:1&6."7/#90%<3'>5)90%5- 90$:1%6-!8."<3'=3(9/#:0$?6*@6*;1%:0%>4)>6*:1%<4(>5*<3(80$91%91%=5)<3':1%<3(7."<3';1%8."8."6, ;1%:0$7-!8."8/"7.!7."4+3+80#<4'80#1)7.!;3&:1$5- 4, 5, 2)5-!;1%;1%;1&:0%9/#:0$9/#=4(A8,?6+<3'>5*B:.A9-?6*;3&<3&:1$@5& ! !     #$&()*()((&(%(&'''&'%'&(')()()(*'*')'(%($&#%#$"#"# !,%'-)+ - - - - - - - - - - - - -      WL9@7)=5(;2&6- 4,5,6- 6."4+ 3*7.#6-"2*1)/)1*4."60#7/#7/$8/#5+ 2(7.#7/%5.#71&6/%3,!1)3* 5, 5, 8/#5,2*5-!90%90%91%:1%6-"5, 7.#:1';2'8/$3* 5,!8/$7.#8/#6."1(1)5-"6.#6.$80&91'80&5.#3,!6/$92'70%4.#5/$60$4-"2+!2+"5-$K0 I/B+7"7#29#G/!D-=%9":%=(:%:%='7"7!8"9$>):&5"6$3 +( -,/-*()($!  -  &('#"   !    -      -           - -  -    -  - - -        -    -       - -      -        -     )#+%-',%)#)#'#!!!!!!! !!!!!!######$$$###!!!"""$$$%%%$$$%%%%%%$$$$$$$$$%%%$$$$$$$$$###"""###"""###!!! #########"""!!!!!!!!!""""""!!!!!!!!!!!!###%%%""""""###""" ###""""""###$$$###!!!"""######"""""""""!!!!!! """!!!"""!!!###$$$###!!!!!!""""""###"""""""""!!!###$$$&&&'''(((((('''&&&%%%"""&&&'''&&&((('''###'''&&&&&&&&&&&&'''(((%%%&&&%%%###$$$&&&&&&%%%%%%%%%&&&'''&&&%%%%%%''''''&&&%%%%%%###"""""""""$$$###$$$%%%%%%%%%&&&$$$$$$$$$!!! ###$$$$$$######$$$###"""$$$#########$$$$$$&&&$$$######$$$###"""""""""!!!!!!!!!!!!"""$$$###!!!!!! !!!!!!  !!! !!!"""!!! !!!!!!!!!!!!###""" /(/(3,!70%3+ /(6.#:2(:2(70%5-#80&7/$7/$1)/'80%6.#2*6.#91&2*0(7/$6.#5-!;3(>6*91%7."8/$:1&;2&>5*:1%5, :1%;2&7."9/#=4(=4(9/#8/#>5)?5*;1%:0$=4)>5)8/#;2&>5)<3'8/#90$:1%<4(:2&90$;2&8/#;2&;1%90#9/#7- :0$;1$8."9/#:0$6- 7."4,2)80#:2%80#1)80#=4';2%4,4+4, 2*7.";1&:0$9/#9/#8."9/#:0$>5)A9-@8,=4)>6*B:.A9-?7+<3'=4'90">3$   &(')')&)%'&'&'')')')()()()(*')&('(&'$&$&#%#$"#!# !! "()+-/  - - - - - - - - - - - - - - - - - - - - -   G>/>6)<3';3&7/"3*4+6.!7/#5,!1(4+ 5,!3+ 1)1+ 1*3."60$6/$6.#6."4*0&8/$92&93':4(:3(4."2*3+4+ 5, 8/"4,4+5,!7."80$80$:2&8/$5,!7.#90&:1&7.#2)5,"90&8/$8/#6-!2)1)4,!6-#6-#80&91'7/%4-#4-"70%:3(71&4-"4."4.#3+!2*!J0I/B+6"6"6"6#<(A+?(;$;$<&:%7"7#9#8#26!=)9%;(6#1/) * //,-(''%  "&'%$     "  -       -    -    -  -      -   - - -  -      -          -    -  -             ,&,%,%-&.(-'*$*$(##!!! !!! """$$$$$$$$$""""""$$$%%%%%%&&&'''###$$$%%%$$$%%%$$$$$$"""""""""!!!""" ###%%%###"""!!!!!!"""$$$###""""""######!!!###$$$######"""!!!""""""!!!###%%%$$$"""#########""""""!!!!!! """ !!!###$$$!!! """""" """"""###$$$%%%%%%%%%%%%'''&&&&&&&&&%%%''')))'''((()))&&&%%%%%%$$$&&&'''(((&&&$$$&&&###$$$&&&&&&%%%&&&''''''&&&&&&'''&&&&&&%%%%%%$$$$$$&&&###"""!!!!!!!!!$$$$$$&&&%%%%%%$$$###$$$$$$""""""!!!$$$%%%%%%#########""""""$$$$$$###$$$$$$%%%$$$$$$######"""!!!!!!!!!!!!  !!!""""""   !!!"""""""""!!!!!!""" !!!!!! !!!""""""!!!4,#/'0)4-"6/$5-#-&5-":2(91'6.$4,"80&91'81&0(0(7/%4-"2*81&<4)6.#1)80%6.#5.":2'=5)91%7."8/#:1&;2'>5):1%7.";2&;2&7-!9/$?5)=3(90$6, =4(@6+:1%90$>5)?6*8/#;2&?6*<4(80$91%:1%:1%90$90$;2&7."90$:1%:0$;1%9/"8.":1$:0#:1$;1%7.!7.!5- 0(7/";3&;3&5- 91$<3&:1$3*4+3+2)7."90$8."9.#:/$7-!8.";1%>5)@8,@7+=5)?6+A9-@7+?6*=5(=4'90"<2$XK6  ! ! ! $%'(')&''&(&&('(')()(*(*(*()')'(&&%%#%#%#$#$"#!" $(*%)+ - - - - - - - - - - - - - - - - - - - - - - - - - - -  gZEA8+>5)=5(:1%7/"2*2)6.!91%8/$2)3*5,!3,!2* 0)/)3-!60$7/$6."3+2)0&8/$:2'92&93':3'5.#3+ 3+4+4+ 6."4+3+5, 7."80$80$:2&80$5,!7.#:1&:1&6-"1(5,!9/%9/%90$5-!2)1)4, 6-#6-#:2(92(7/%5-#5.#81&:2(70%4-"4."4."I/H/C,9$6"7#7$8':(:&8#9#8":$9#9$;&7!7"6"4 6"5"3 4!1-* */2!0 ..(%"  )###  " !           - - -  -  -       -     -      -   -   -   - -   -             -   -      -',&+%+$,%0) .(+%+&)##!!!!!!"""!!!"""%%%%%%%%%######%%%%%%%%%%%%%%%%%%$$$%%%"""#########$$$"""###"""###"""###$$$######$$$"""$$$%%%%%%###$$$%%%"""""""""############""" ############$$$%%%"""###""""""###"""!!!!!! !!!!!!!!!"""######%%% !!!"""$$$%%%$$$$$$%%%%%%$$$&&&'''''''''%%%&&&&&&(((((((((((((((&&&&&&&&&(((((()))&&&%%%%%%###$$$'''&&&&&&'''''''''&&&&&&(((''''''$$$######$$$&&&$$$######""""""###&&&&&&%%%$$$###""""""""""""!!! """"""""""""!!! #########$$$%%%%%%%%%%%%############"""!!!!!! !!! """"""!!! !!! !!!!!!  !!!!!!!!!!!!!!!"""""""""!!!!!!!!!!!!  !!!!!!!!!!!!6.%6.$0(/(3,!81&4-"-%5-":2'91'6.#4-"70%91&91'1)1)7/%4,"3+ 91&=5*7/$2*80%6.#6/#;3'=5)91%6-"7."90%;2'=4):2&80$<4(;2&6,!9/#?5)=4(9/$5+<2&?5*;1&8/#>5)?6*90$<3'?6*=5):1%:1%:1%91%:1%:1%<3'7/#8/#:0$90$<2&;1%8.";1%;1%:0$;1%9/#8/"6.!-%7/";3&:2%6.!:2%<3&91$6-!7."8/#4,6-!9/#:0$<2&:0$8."9/$;2&=4(@8,?6*=4(?7+A8,>6*>6*>5(=4'90#;2$G<-   ! ! ! !    !!%&&'%'''(''('(')')()()()')'(&'%%#%#%$$#$"$"#!"  '),*,.$% - - - - - - - - - - - - - - - - - - - - -    G?0?7*>5)?7*;2&6-!3+3*6-!91%90$3* 3*6-"5-#5-#/)1*4."60$5."3, 2*2(/%7.#:2'71%82&:3'5.#2*2)3*5,!7/#5- 5- 5, 5, 5-!7.":1&90%5,!7.#;2';2(90%2)5, :0$90%8/$6."2)1(4+ 5-"5-";3):2(7/%6.$6/$80&70%4-"3,!H/G.C,<(7#6"6#6%6'8'9'7#7"9#:$;&@*:%4334 5!2101.//-.0.-(%   #$"     !!   -             -       -     -  -   -   - -  -     - -     -  - - - -  -             0*!,'/)-'+$*#.'0* .(+%,&)$$ """"""""""""$$$&&&&&&%%%######%%%%%%"""$$$%%%%%%%%%$$$$$$#########$$$$$$"""######"""###$$$!!!!!!%%% """$$$#########!!!""""""$$$###"""######""" !!!$$$$$$"""###%%%%%%$$$"""###""""""!!!!!!  !!!""""""""" """######!!!!!!"""$$$######$$$###$$$&&&'''(((''''''&&&&&&&&&&&&'''''''''&&&''''''&&&''''''(((&&&&&&'''%%%%%%&&&%%%&&&&&&&&&&&&&&&'''((((((&&&&&&&&&######%%%$$$###$$$%%%######%%%%%%$$$###$$$###"""###$$$!!! !!!"""###"""%%%&&&%%%&&&%%%$$$%%%"""!!! !!!"""!!! """"""!!!   !!!!!! """""""""!!!  !!!###""""""!!!!!!""""""!!!!!!""""""!!!!! !!!!!!!!!1)6.%5.$0(1*70%92'5.#/'5-":2';3(70%6/$80%91&:2'2+ 1)7/$5.#3, 91&<5*6.#4,!6/#6/#5-!;3'>5*91%5-!6-"90$<3'=4):1%90$=4(;2&6, 8/#?6*=3(:0$5+;1%>5);2&8.#>5)>5):2&<4(>6*=4(;2&:2&91%80$:2&;2&;3'8/#9/#:0$9/#<2&<2&9/#<2&<2%7- 90#;1%6-!5- 2*80#;3&91$7/";3&<3'6.!7.!90#:1$7."8/":0#<2%<2&;1$9/#:1$;2&=4'@8+?7*=4(?7+@8+>5)>5(=5(<3&90#;2$F;, !!!     #$&)&(&('('(&('(')'('('('(&(%'#&#&$%#$#%"#"#!" &&)+,.#$ - - - - - - - - - - - - - - - - - - - - - - - - - - - -   D<.<3(>6*>6*:2%6-!2)3*80$:2&8/$4+ 4+ 6-"4,!4-"/(0*3-!70$70#4, 5,!3*/%6-#92&70%82&:3'6/#2*2)4+6."8/#7.!6.!4, 7."80$90$91%7/$4, 5,!;2'=4):1&2)4+8/#8/$8/$7/$2)0'3+4,!6.#:2'92'6/$5.#5-#6/$6/$4-#G.D,B-!?+:&5!6$3$6&4$5$37";&<'?*?*9$0/136"5"002!1 1 1!/--+**"  "$$#!  "      - - -  -      -      -  -      -   - -        -        -     -                  /)1,".(1*!.(+%,%.'0* /) +%*$)$&!""""$$$######%%%&&&%%%%%%$$$###$$$$$$$$$$$$$$$!!!"""$$$$$$$$$$$$%%%######"""""""""!!!### !!! ###"""$$$$$$!!!######$$$############"""!!!$$$###"""###$$$$$$$$$###"""""" !!!!!!!!!!!!""" """###"""###$$$""""""#########"""###$$$"""######$$$$$$%%%'''(((((('''&&&&&&&&&&&&&&&(((''''''((('''&&&'''&&&'''%%%''''''&&&&&&''''''%%%%%%&&&&&&&&&&&&'''&&&%%%&&&&&&%%%$$$&&&$$$%%%%%%%%%&&&$$$$$$$$$#########!!!!!!###""" !!!"""!!!###%%%&&&$$$%%%%%%$$$"""!!!!!! !!!!!!!!!""""""!!!"""!!! !!!!!! !!!!!! !!!######"""!!! !!!!!! !!!!!!!!!!!!"""!!!""""""!!!!!!!!!"""!!!!!!""!!!!!!!###0)6/%4-#/(2+ 81&:3(6/$1)4,!91&:2(80&7/$80%91'81&2*1)6/$6.#2+ 80%91&4-!2*6.#5."4-!;3'?6+:2&6-"7."8/$<3(=5):1%80$=5)<2&5+ 8.#?6*>4):0%5, ;1%>4(;1&9/$=4(=4(<3'=4(>5)>5);3':2&91%90$<3'<3'<3'90$;2%;2%7.!<2&;1%8."<2&:0#5+:0$;1%5, 5- 5- 80#:2%90$80#:2%;2&7."6.!8/#7/"7."90#:0$;1%<2&<2%9/#:1$;2%;2&>5)?6)<3&?7*A8,?6*>5(=4'<3&:1$<3%C:+VI6 ! " " ! !  $%&'&'&'&'&'&(&('('(&(&(&'%'$&#%##"$!#"#!#!" '*,-.0"#%& - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - MD4@8,<3'=5)>5)91%6-!0(0'7/#:1%7/#4+ 5,!7.#3+ 3,!0*1+3."71$80$5."7.#4*1(6-"91&71%92'93'5."1)2)5, 7."8/#7.!6-!7/#80$7/#7."91%7/$3+ 3*90&;2'90%2)4+ 8.#8/#80$80$2)/&2*4,!6/$81&81&6/$4-"4-"6/$G.D-?*?+=)>+<':&:)9*!6&4#5"9$<'@)<&;'7#1117$7#4 3 3!3"1 2!.,.0 -)$ !  "%         -    - -  -        -      -    -    -  -  -  -  - - -   -     -  -  -     -   -  -    -      /)2,"/* 1+!0* 0* .(.'.(-&/)/)+%*$+%)#$"""$$$%%%%%%&&&'''%%%$$$$$$$$$$$$$$$%%%%%%$$$!!!!!!%%%###$$$###$$$###!!!!!! !!!"""$$$ !!! !!!### ######"""""" """$$$"""!!!"""###""""""$$$!!!###$$$$$$###$$$$$$###"""!!!!!!""""""!!!"""""""""""""""%%%%%%$$$###"""$$$&&&!!!$$$$$$"""###%%%&&&%%%$$$'''((((((&&&%%%&&&$$$%%%&&&((('''&&&'''&&&%%%&&&'''&&&&&&&&&&&&%%%&&&'''&&&$$$$$$&&&&&&%%%&&&'''&&&%%%%%%$$$$$$&&&'''&&&%%%&&&&&&&&&$$$###"""!!!!!!!!!!!!!!!!!!"""!!!""""""!!!""""""###&&&%%%$$$$$$###$$$"""!!!  !!!!!! !!!!!!!!!!!!!!! !!!!!!  !!! !!! !!!!!!""""""  """!!!"""!!! """###""""""!!!!!!!!" ! !"""!!!""!$$#2+!1* 60%5.#0)5-#92':2(6.$2*5-"80%91&91&7/$70%91&7/$1)2* 7/%6.#1*7/$70$3+ 3+ 70%6/#5-!<4(?7+;3'80$8/$8/$<3'=4)90$90$=5)=3'5+7-!>4)?6*:0%5+ ;2&>5);2&:0%<3'=4(=4(=4(>5)>5):2&90$:1&:2&<3'<3'<4(:1%<3&<2&6, ;1%;1%8."<2&8."5+;2%;1%5, 6.!5- 6.!91$:1%90$<3&<3'7/"7.!7."7.!7.":1$:0$:1$=3&<2&:0$9/#90#;2&@7*?7*<3'?7*B:-@8+>5(>5(=4'<3%=4&A7*H=. !!!  "#$&%'&'%'%'&(&(&'&'&'&'&'%&$%#$##"#!" "!"!" $(**,.!"%' - - - - - - - - - - - - - - - - - - - - - - - - - - -    E=/>6*>5*>5)>5);2&6.!2)4,91%;3':1%5,!5,!6.#4,!4-!0)1+4."6/#6/"6/#7."4*2)5,!80%81&:4(;4(5."1)2)5, 6-!8/#7."5, 7/#91%7/#5-!90%7/$2*2*8/$8/$6-"2)4+ 7."6."7/$80%3+/'2*5-"6/$91&81&6/$4,"G.D-@*>*<(9%='@(?*@. ;, 4$3"7%;'8#8!7!>(<'5"3 5"9%7#4!3 4!3!2!-.,-,-+$  """! -   -    -       -  -       - -     -         -  -  -  -        -              - -   -         -'3.$3-#0+!2,"1+!/)/)0) /)/(1+!0* ,&,&,&)#$###$$$%%%&&&&&&%%%$$$######$$$$$$$$$###$$$"""###$$$######$$$###""""""!!! !!!""""""!!! $$$ !!!!!! #########!!! #########$$$###$$$"""######!!!"""######### !!!#########"""!!! ###%%%$$$$$$%%%&&&$$$###!!!###$$$$$$###%%%&&&$$$%%%''''''''''''%%%%%%%%%&&&'''((('''%%%%%%&&&&&&&&&%%%&&&'''&&&%%%%%%'''(((&&&$$$&&&%%%%%%######&&&&&&$$$###&&&'''&&&'''%%%&&&&&&$$$###$$$"""!!!!!! !!!"""""""""$$$%%%###!!!"""!!!$$$%%%%%%$$$###"""""""""!!!  !!!!!!!!! !!!!!!!!!  !!! """"""###""" """!!! !!!!!!!!!"""######""""""""" !# !"!!"""#"""""!5.$/(.'5/$5-#1*6/$81&80&5.#2* 4,"7/$:2'70%80%80%;2'80$1)3+8/$6.#3*91&:2'6.#3+ 91%7/#5-!<4)?6+;3'91%80$8/$:1&<4(80#91%=4(=4(6, 6-!<2&?5):0%5+ <2'?5*;2&90$:2&=4(<4(<3'=4(=4(90$7.":2&;2&;3':1%<3(90$:1$;1%7-!;1%:0$9/#=3':0$6- ;1%90#5,6.!5- 5- :2%:2%7/";2&;3&7."7."8/#7/"8/"<3&;1%;1$=3'<2%9/#9/"9/#<3'A8,A8,;3&@8+C;.A8+>5(?6)>5'=3%>4&>5'C8)iX@      #$%&%'&'&(&'&'&'%'%'%&%&%&$%#$""!" ! ! ! !!()&+, !%'&' - - - - - - - - - - - - - - - - - - - - - -     YN;B:->6*>5)=5)=4(:1%6-!2)4+80$;2&:1%6-"5,!6-"5-"4,!/(0*5/#70$80$81%4+4+4*5, 70$81&;4)<5)70$5-!4, 5, 4, 7."6-!4+7/#91%8/$6-"91%7.#2)3*80$7/$5,!0'3*6-"6-"7.#7/#3+0'3+ 5-"5.#7/%70%H.E-@*<'<(;'<&A'C)C,@,7'1!3"7$8$8"3 7!@+?*9%5!4!5"5!23 4!/-.+.0!-)%! ! #$#   - &"#!                 -    - -   -  -        -     -   -     -    -   -       - -   - -  1* /(.(2,"2,"2,"1+!0* 0* 0) /(/(0)/)/(+%.'/)!+%% """###$$$%%%&&&%%%%%%$$$###"""%%%#########$$$###$$$###"""!!!"""######!!!!!!###$$$"""  ###""" ###$$$###$$$""""""#########!!!$$$!!!""" """#########!!!!!!"""""""""$$$$$$""""""$$$$$$###$$$%%%$$$!!!!!!%%%%%%######&&&&&&$$$%%%&&&&&&&&&&&&&&&&&&$$$%%%&&&'''(((&&&&&&((('''&&&&&&''''''&&&%%%'''((((((&&&$$$%%%%%%%%%$$$$$$%%%&&&%%%&&&'''''''''&&&%%%$$$###!!! !!!!!!!!!  !!!"""""""""!!!###""" !!!!!!"""$$$$$$"""#########""""""!!!!!!!!!!!!   !!!!!!!!!!!! """### """"""""" !!!""""""!!! !!! ######"""###"""###!!" !!"#"""""""""6.$5-#/(/'7/%4-"1*70%81&70%5-"2*2* 70$92'80%7/$80%:1&80%2)1)6-"6.#5,!6-":1&6.#5,!;3(6-"5-"=4*?6+;3'90%80$8/$90%<4(91%:1%>5)>4(7-!6,!90$=3':1%5+ ;2&>4(:0$7."90$<4(<3';2&<3'<3'90$6.";2&;3'<3':1%=5)8/#;2%<2&8.";1%;1$;1%?5(;1%7- 9/#8/#6- 6- 4,5- :2%:2%5- 90$:1$7."8/#91$7/"7."=4(<3&;1%=3'<2%8."8."8/"=4(A8+@7+;3&A9,D<.@7*<3&=5(<3&;2$=3&=4&?5'L?.!"$%&'&'%'%'%'%'&'%'%&$&$%#%"#!"!! ! !  ! **&.. &'&' - - - - - - - - - - - - - - - - - -    - - - - - - - - - F=/=5)=5)@7+?6*=5);2&7."3*5, 80$90%:1&7.#6-!4+!4-!1*/(0*60$6/#70$91%4+1'4*4, 70$81%:3'<5)70#5-!5,!4+ 4, 80$8/"3+6-!7/#7/#6.";2'7.#2)3+ 80%80%6-"0'3+ 7/#6.#6.#5-"3*/'2* 4,"4,!H.G-B+;':%;'=(>'C(F-F/":&1 1!0!3"7!35 ;&B-:%5!12 5"5"2 2.,,,,-..,$ ! $##!   -!   !      - - - -      -  - - -   - - -  - -   - -          -    -    -    -      -  - - -     -  ,%/(2+!/(1*!2,"4.$4.$2,"0* 0* 1* 1* 0)/(0)0)+$-&.(*$'!"###$$$$$$&&&'''&&&$$$#########$$$%%%!!!!!!!!!!!!######### """$$$"""######%%%%%%### """### """$$$$$$######"""$$$#########"""### ###### """"""###!!!""""""!!!$$$%%%"""!!!###$$$$$$$$$$$$""""""$$$&&&%%%$$$###$$$%%%$$$&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%'''((((((''''''''''''''''''&&&%%%%%%'''((('''&&&%%%%%%$$$###$$$%%%'''&&&'''(((&&&&&&&&&&&&######"""!!!!!!###"""!!!!!!!!!!!!"""""""""!!!""""""""" """%%%######""" !!!!!!!!!"""!!!!!!!!!!!! !!!!!!!!!!!! !!!"""!!!!!!""""""""" !!!""""""!!! !!! """"""!!!""!""!!! """"""!!!""!5.$2+!/'0(81'4-"1*7/$91'70%4,!0)1*80%91&70$5."7/$:1&:1&4,!/'4+ 5-"5-!90%<3(7.#5-"<3(4,!5-"=4)?6+;3'90%8/#7/#90$=4);2&:2&?6*>4)7-"6-!:0%;1':0%5+:0$=3(90$6, 8/#<4';2&;2&<3'=4(90$7.":2&;3'<4(:1%?6*90$<2&<2&8/";1%<2&<2&>4(;1$7-!8."90$8/"5- 4,6.!;2&:2%5- 8/#:1$8/"90$:1$6.!5- =3'<2&<2&=3';1%7- 8/"8/#>5)@8+?6)<4'A9,C;->5(90#;3%<3&;2$=4&=4&<2$B7("#$&%&$&$&%&%&%&%&%&$%#%"$"#!" !    #+((/.&(&'"# - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - -^O:B9,=4(=4(@8,?6*=5);2'7/#3+6- 80#7."8/$6-!5,!4,!4,!3, 1+3-!61$2,3, 4- 6-!1(3*4, 6/#60#92&;5(6/#7."6-"5-!3+7."80#6-!6."6-!80$7/#91&6-"2*5,"90&:1&8/$2)5-!90$7.#6."5,!3* /'2* I.H.D,>);':&9$9$=&B+I1%>(43 3"2!44. 4=(=(6!0- , 13!3!3 /+,.++,-)$ # #$"   #!#    - -   -   -  - -   - -    -     -    - -  -      -   -       -       - -  -         - -    -&+$0)3+"2+!1+!2,#4.$4.$2,"0* /)0)1* -&.'0)1) -&-&.(*#'!"$$$$$$$$$&&&'''&&&###"""###$$$$$$$$$""" !!!"""###$$$$$$###"""$$$!!!""""""###$$$%%%!!!!!!!!!"""###$$$"""#########""""""######"""!!!""""""#########"""&&&!!!!!!"""$$$!!!######""""""###&&&&&&######$$$%%%%%%%%%$$$"""%%%&&&$$$###%%%###%%%%%%%%%%%%&&&'''&&&%%%%%%&&&&&&''''''''''''&&&''''''&&&&&&''''''&&&%%%&&&'''&&&%%%%%%%%%%%%######'''(((&&&&&&''''''&&&%%%###""""""""" !!!!!!!!!######"""######%%%######"""!!! $$$###""" !!!""" !!! !!! !!!!!!!!! !!! !!!!!!""" !!! !!!""""""!!! """!!! !!!! !! !! !! !! !!!""!""!"!!2+!4-#0)/'0(7/%4-"0)5.#81&70%3+!0(2* 6.#91&6/#5-"7/$:1&:1&4,!.&5,!5-"5,!80%;3(80$4,!<4(6."5,!<3(>5*:1&8/$6."6-!7/#<4(:1&90$>5)=4(6-!6,!:0&<2'90$7.";1%>5);1%6-!8/"<3';2&<3'?6*<4(8/#8/#:2&<3'=4(:1%>6)90$;2&<3'9/#:0$;1%;1$=3';1%8."8/":1%91$5- 3+7/";3&91$5- 8/#:1%91$:1$90#7.!7.!=3'=3&=3'=3&;1$7.!:1$80#>5)A8+@7*=5'A9+D<.>5'7/!:2$=4';2$=4&>4';2$@5'gV@#$$&$&$&$%$%$%%&$&$%"$!#!" !   '*'+/,&(&'"# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - -?4'?5)?5)?5*@7+>5)<4(:1%6-!2*6-!8/#7/#90$5,!2)4+ 7/$4-"1*1+5/"3, 1)2*5, 3*3*3+6/#60#93'<5)6/#7/#6-"6-!3+7."8/#6.!6."5-!80$7.#91%8/%2* 5,"90&;2(8/%3+ 4, 7.#6-#5-"5,"4,!H.I.F-C+<(:%:&7"4;'@,#<(4!38$8$7"6!6!/ / 9&A- ;'-+ 01 /.1 002"-,++)'%%%#"  -"! !    - -                -    -   - -        -                     - - -        -   0).'-&,$2*!3,"3,"1*!2,"5/%60'5/%0* /(1* 1* -%/'1*2*!.'-'.()#&!#$$$$$$###$$$%%%$$$###############""""""!!! """$$$%%%%%%###""""""###!!! """%%%&&&!!! """""""""###$$$ """"""!!!###"""######"""!!!###""""""!!!"""###$$$###"""###$$$""""""###!!!"""&&&&&&&&&###%%%&&&%%%%%%###$$$$$$%%%"""!!!$$$%%%&&&'''&&&&&&'''&&&'''&&&$$$%%%''''''''''''&&&&&&&&&&&&%%%&&&&&&&&&'''%%%&&&''''''&&&$$$&&&&&&%%%%%%'''(((''''''&&&%%%%%%%%%%%%######!!! !!!!!!!!!######"""""""""$$$###"""""" !!! !!!!!!""" !!! """###"""!!!  !!!!!!    """""""""!!!!!!!!! !!!!!!!!!!!! !!!!!! ! !! !!!"! "! "! !! !! ""!2* 2+!4,"1* 0(1)7/%5-#1*4-"91'92'3,!0)1)7/$91&7/$5-"8/$:2&:1&5-"2*8/$5,!3+ 91&<4)7/#2*<3(7/$5,!<3(>5)91%7/#6-"5-!7/#;3'90$7/"=4(=3'5, 5+ ;1&<2':1%9/#90$;2&8.#4+8/#<3&90$<3'?6*<3'90$;2&;2&<3'=4(:2&<4'90#;2%<3&9/#:0$<2%9/"9/";1$90#9/#;2&:1%6-!4+90$<3'90#5, 7/":2%:2%8/"8/"8/":1#>4'>4'?5)>4';1$8.";2%91$>5(A8+@7*=5'A9+D<.?7)7/!;2%=4':1$=3&=4';1$>4&I>.!"$%$%$%#$#$$%$%$%#$"#!" "!!!!"%*'%$&&'"#  - - - - - - - - - - - - - - - - - - - - - -        - - - =2%=4(?6*?6*>5*=4(<3'91%5-!2)7."8/#80$8/#6-!4+ 7/#6/#6/#4-!/)5/#5."3+4, 6."3*1(2*5.!60#:3';4(6/#7/#5, 5, 4+7/"7."7."7/#7/#7.#7.#:1&8/%4+!4,"8/%:1'7/$3+ 3+ 6-"6-#4,"H.H.G-F,@(=&8#7"5 7$;*!9( 2!05!9$8$9$9$:&4!07#A.!;)0+ /3"3!//.+/0 .+*)&!  ##!         - -    -        -         -   - -    -  -                     -    -    - -   2+ 1*/(-&-&2*!4,#4-$3,#4-#60&60&60'2+!2+!2+!0).'/(2+ 2+!/(/(/(+%&!$$$$$$###$$$$$$###############$$$$$$###### !!!"""%%%%%%"""$$$$$$###"""###$$$"""$$$%%% """###!!!"""!!! !!!!!!###!!!"""#########!!! !!!"""###""" !!!###"""###$$$###$$$###""" """###%%%$$$%%%&&&%%%$$$###"""%%%%%%%%%###!!!%%%%%%%%%%%%&&&%%%%%%&&&'''&&&$$$%%%&&&%%%%%%%%%%%%%%%$$$%%%%%%%%%&&&&&&&&&%%%%%%''''''&&&&&&&&&'''&&&%%%&&&&&&%%%%%%%%%######&&&&&&###!!!""" ############"""###$$$######"""###"""!!!!!! !!!"""###"""  !!! !!!!!!"""###$$$###"""!!! !!!!!!!!!!!! !!!!!! !" ! "! #!!"!!!!!"!!4,"2+!1* 4-#2+!.'3*!7/%5-#1)2+ 70%92'3,!/(1*70$:2'7/$5-"7.#90%91%4,!4,!91%4+ 1)8/$:2'4,!2);2'6.#6.#<3(=5):2&7.#6."6."80$;3'90$6."=4(=4(5+ 2);1&=3(:0%7-"7-";2&90#3*:1$=4'80#;3'?6*<3'90$<4(;2&;2&<4(;2&;3&80#;2%<3&8/":0#<2%8.!9/"<2%;1%:0$<2&:0$8."5+9/$<2':/$5+ 7- :1$:1$8.!7.!90#;1$>4'>4'?5(>4':0#7- :1$:2%>6(A8+?7)=5'A9+D<.@8*91#=4'=4';2%=4'>5(;2%=3&G<."##$"$#$$%$%$%"$!# " !!  ! !"(*!#$&'"# - - - -  - -  - - - - - - - - - - - - - - -      G:+:/#<2'?5)>5)=4)<3(<3'90$4+0'5, 8/#7/#7/"6-"4+ 7.#6/#5."5/#2- 4.!81$5-!70#7."4*2)3+5/"60#:3':4'70#7/#4+4+4, 8/#6-!7."80$90$6."80$80%7.$4+!2* 6.$80&7/$2*2*4,!5-"G-G-H.B*@(>';%8"8":(8(2"-04!7#8#9$6"6"204!8%2 0///0.-,( *+./+& "  ""  ! !     -    -          -   -                -     -          -     - - -      -    .&.'2+ 3,!0)/(/'3+!5-#6.$4-#4-#5/$5/$60&1+!3,#2*!/'.&0)3,!2+!/(0) /(,&% ###"""$$$%%%$$$$$$###"""###$$$%%%%%%"""""" """&&&%%%"""###%%%"""###$$$$$$$$$"""!!!!!! """"""###!!! ###"""""""""!!!"""""""""""""""!!! """""""""""""""############ """"""$$$ !!!$$$!!!###%%%$$$$$$###"""$$$######%%%&&&'''%%%$$$###%%%&&&&&&%%%%%%&&&&&&%%%###$$$%%%$$$&&&%%%$$$$$$######$$$%%%&&&&&&%%%&&&%%%&&&(((''''''&&&&&&%%%$$$$$$$$$"""$$$'''%%%%%%%%%$$$ !!!  ###$$$$$$%%%######%%%$$$$$$"""###""""""!!!!!!#########"""!!!   !!!!!! !!!!!!"""###$$$######""" !!!""""""!!! !!!!!!   !      !5.$2+!2* 2* 4-#3+!0(4+"7/%6.$2+ 3,!6/$81&4-"0(2*70%:2'5,!3+ 7/#:1&91&3+ 4,!:1&6.#5-!80$:1&5-"2*91%6-"6."<3'>5);3'6-"5-!7."8/#91%8/#6-!>5)>4)5+ 0'<2'@6+;2&6-!6,!>4(=3'7.":2%<4';2&<3'=4(<3'90$<3';2&:1%;3':2&91$80#:1%<3&9/#:0$<2%8.!8.!:0$:0$:0$<2&9.#:0$5+ 7-"9/$<2'8.#:0$<2&=3&6,7- :0#<2%>4'=3&=4'=3&:1$7. :1#<3&>5(@7*>7);4'A:,C;-@8*;3%>6(>5(=3&?6(?6);1%<2%D9,eUA!!"##$#$#$#$#$"# !!   $+* !"%'"# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    @5'9/"=3&@6*?6*>5*=4)=4(:1%5, /'3+7/#6."6-!5, 3*5-!5."4-!4.!.(3- 70#7/#7/#6-!4+3*5-!60#6/"92&;4(81%7/#3+3+5-!8/"5, 5-!7/#6."7.#90%6.#6-#2* 1*5-"7/%5.#1*0(G-F-E,D+B)@(=&;%9$9%9&2",..16":%:&:&:&7$.- 2) ) +04#/+*)(+,..+(#   -   -              -     -          -   -                         -   -  -     -     -     /(-&.(2+ 3,!0)/(1)4,"4,"4-"1+ 2,!4.$5/$4.$0)3,"3+!1* .'1)5-"3,"1) 1* 1*!,&&"""""""###$$$%%%$$$###"""###%%%&&&$$$ """!!!"""###$$$%%%""""""$$$###$$$$$$"""$$$"""  """$$$###"""!!! """"""#########"""!!!!!!!!!"""!!!!!!""""""!!!""""""###### !!!"""!!!  !!!"""$$$"""!!!###"""###%%%&&&&&&%%%$$$$$$%%%&&&''''''&&&&&&&&&%%%######%%%&&&'''%%%%%%$$$$$$###$$$%%%&&&&&&$$$&&&$$$$$$((('''&&&'''%%%%%%""""""$$$###%%%'''&&&%%%%%%###!!! !!! """%%%$$$%%%$$$$$$&&&$$$#########"""!!!!!!  """""""""""""""!!!  !!!!!!!!!!!!""""""!!! !!!!!! """!!!""""""###"""!!!!!!!!!######"""!!! !! ! !! !!!"5-#1)1)2* 3+!3+!2) 3+!7/%6.$1*4,"92'92'6/$1*1*6/$91&3+ 2*7/$:1&80%4,!6.":2'8/$7/$91&;2'6.#1(7.#6."6-"<3'>6*=4)5, 5-!7."7/#91%7/#5, >5)>4(6-!2(;2&@7+>4)8.#8.">5(=3'91$:1%;3&;2&<3'<4(;3'8/#:1%;2&;2&<3':2&:1%80#91$=3'9/#:0#<2%9."8.":0$:0#8/";1%7-!;1%5+ 6,!8."<1&9/#<2%=3&:1$6, 8.!:0#<2%>4'>4'>5(>4';2%8/!;2$=4&?6)A8+=7)82&@:-B;/@9,=5)?7+?6)=3&A7+@7*:0#;1%A7*G<.!""#"#"$#$"# !! $+#!1)' %&"# - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - [K9=2%9/">4'A7*@8+>6*<4(:3'91%5, 2(3*6."6."5-!4, 2*3, 5.!4-!2,2, 3- 6/#4, 5.!6-!5+2)4- 6/"5/"70$:3'91%80$4+3+5, 7."5,3+5-!5,!7/#80%5-"5-#1*0)4,"6.#5-"G.F,D,D+C*B)@(<%;$9%6#2 ,/1!7$227#:&;'=)6#, -3!0( *01!.)**)&*+)'('$         - -   -   - -             -       -      -  -        -    -           -2+ 3+!1)/(0)2,!4-"0*0)3*4,!5.#3,"2+!2+"4.$3.$3.#0* 1* 2* 1)/'1)3+!2+!0)0) 2+"+%& !"""###$$$%%%%%%$$$""""""$$$%%%%%%###"""""""""###"""###%%%%%%###&&&$$$%%%$$$###%%%""""""!!!"""""""""!!!!!!"""###"""######"""!!!!!!!!!"""!!!!!!!!!!!!###"""###""""""###$$$###$$$!!!  !!!$$$$$$%%%$$$!!!"""###%%%%%%%%%%%%###$$$%%%&&&&&&&&&%%%$$$%%%%%%&&&&&&%%%&&&&&&&&&&&&%%%%%%%%%%%%$$$%%%###""""""###&&&'''%%%&&&&&&%%%$$$###&&&%%%&&&&&&%%%$$$###!!! """!!!###$$$$$$%%%%%%$$$'''%%%###%%%$$$###""""""!!!  !!!!!!!!!!!!!!!""""""  !!!!!!!!!!!!!!!###""" !!!!!!!!! !!!!!!!!!!!!!!!###""""""###"""!!!"""#########5.#2+ ! !! !!!"#6/%5.$1* 1)2+!2+!2* 1(2) 8/%6.$1*4-"81&70%2+ -&2+91&:2'5-"3+90%:2'90%5-"6.#91%6.#7.#91&;2'6-"1(5-"6-"6."<3'?6*;3'3+4+7/#80$;2&80$4+ >5)>4(8."4+>4(@7+>4)8/#8/#?6*=4':1$:1$:2%90#;2&=4(:1%7."80$<3';3'<4(;2&:1%90#:1%>5(9/#8.";1$9.!9/#;1%:0$9/#;1&7-!:0$5*8."9/$;1&:0$<2&>4(9/#9/":0#:0#;1$>4'>4'?5(>5(<2%90#<2%=4'@7*B:-=6*71%?9,C5)?7+=4(;1%@6*?5):0$<2&?6)C9, !"!#!#!" !   -$"+(&.,*$&"# - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - -F:+:0#9/!=4&@7*@8+=5):2'81%80$6-!2)3*6-!7.#5-!4-!5.!3, 3,0*1*5.!4- 5."5-!7/#6."4+1(3+70#6/#70#92&80$80$5, 3*3+6.!5, 3+4, 5,!6."7/$6.#5-"0)0(4,"I.F-D+B)A)B)@(>&;$<':'3"-.4#6$;'9%5!5"6#7$7$2, -./,)/1!.,,*+**)&# %# "       - -     -    -   -             -  -  -   -     -    -     -     -  - - -          -  - 3+!2* 2* 3+!2* 0)1* 3,!4-#1* 0)3*5-"6.#3,"2+!2,"4.$3.$3-#0*0)2+ 1)0(2*4,"3+!/(0)2,"+%' "!!!"""$$$%%%$$$""" !!!###$$$&&&&&&###"""!!!"""######%%%%%%$$$%%%$$$$$$&&&%%%$$$"""!!!!!!"""!!!!!!"""""""""!!!"""""""""###"""!!!""""""!!! """!!! """!!!"""###!!!$$$%%%###%%%$$$######!!!!!!!!!!!!!!!###'''&&&%%%$$$!!!!!!###!!!%%%&&&&&&$$$###%%%&&&&&&%%%$$$"""$$$%%%&&&'''&&&''''''&&&%%%&&&&&&&&&%%%###"""###""""""###$$$%%%$$$%%%&&&&&&&&&%%%&&&&&&''''''$$$!!!!!! """###$$$$$$###$$$###$$$"""$$$$$$%%%&&&$$$!!!!!!""""""!!! !!!!!!!!!"""!!!!!!""" !!! !!!!!!!!!"""###### """""""""!!!!!!"""!!!""""""!!!!!!!!!""""""!!!"""""""""###! 5-#3,!0)5-"70$2+/)-&3,"6/%5.$0)1* 6.$5.$2* 1* 3,"4,"3*!1(1(8/%7.$0(5.#82'81&3,!.'1*80%:2'6-"5,!91&;2'90%5-"6."90%7/#5-"90%;2'7.#2*6.#6.#6-!;2&?6*:1%6-!5-!80$90$<3'80$2*<3'?5*8/#7-">4(@6+>4)9/#7-!?5)=3'90$90#:2%90$:2%=4(<3'7."7.";2&;3'<4(91%80#7/":1$@6*90#8.":0$8-!9/"<2%;1$9/#;0%8."9/$6+ 8.#:0%:0%:0$<2&=3&:0$:0#;1$:0#;1$>4'>5'@6)>5(<2%:0#<2%=3&@7*B:,<7*83&?9,C4(;1%>4(<2&90#<3&=3'?5(ZL9  ! !   %'&$*+'.0.$%#$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - -dR=B7(;1$9/"=3%A7+@8+=5):3'81%7/#4+ 1(2)5-!7.#5-!4, 4-!3,2,0)3, 5.!3, 4, 5-!8/#8/#4, 1(3*8/#8/#6."8/#80$7/"5-!2+3,5-!5-!3+ 4, 4,!5-!6."5-"3+ 0(I/ G-D+A)@'A)A)?'<%<'=*7%0/2!6$='<&>):&9&4"3 4!/( ( -& ( *+/ 0 -,****''"   - -   - -  -    -  -    -          -  -      -         - -  -    -      -   -         -   -  - -  3+!3,"2+!2+!3+!1* 0)2+!3,"3,"1* 0)3*6.#6.$4-#4-#5/%50&3-#3-#0+ 0)1* 1)0)1*5-#3,!1)0* 2+",&(!#!!!"""$$$%%%$$$""" !!! ###$$$$$$$$$%%%""""""$$$$$$"""###%%%%%%$$$&&&%%%"""'''### ###""""""###!!!!!!!!! !!!"""!!!!!!"""!!! """ !!!""""""""""""!!!!!!######$$$%%%%%%%%%"""$$$######!!!!!!!!!"""###%%%&&&%%%$$$ !!!$$$$$$###$$$%%%###%%%&&&'''&&&%%%$$$"""%%%%%%%%%''''''(((''''''&&&$$$%%%&&&&&&&&&######""""""###&&&$$$$$$%%%&&&&&&''''''%%%%%%'''&&&###!!!!!!"""!!! !!!!!!######&&&"""###$$$$$$$$$######$$$%%%&&&$$$!!! !!!"""!!! !!!""""""""""""""""""   !!! !!! !!!"""""""""""""""###"""""""""!!!"""""" """"""""""""!!! """""""! 4,"4,"0)4,!70%3,!0*0*3,"5.$5.$0)0)5.#4-#2* 2+!4,"5-#3+!/&2(:1'8/%0)5.#93'82'3-"0)3, 92'=5*8/$1)8/$;2'91&6-"6-"80%6-"6-":1&<4)80$2*6-"6-"5, ;2&?7*:2&80$7.#80$:2&<3'8/#3*:0%>4);1%9/#>4(?5*=3'8."6- =4'<3&90#:1$;3&:2%:1$;2%:2%7."8/#;3':2&;3'80#7/"5- 90#@6*;1%:0#;1$8.!9/#<2&;1%:0$:0$8.#9/#8."9/$:0%:0$;1%;1%;1%;1%:0$;1$:0$<2%?5(>4'?6)>5(;2%90#<2%<3%@7*A9,<6);4(A;.D=0?8,;3'?6*>5(<2&>4(<3&;1%>5(>5(=4'B8*       !! "..+/,-68<#$#%   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - E9*?5';1$:0"=4&A8+?6*=4);3(81&7/$4+ 1(2)5, 6-"3+3+4, 3,3, 2+3, 4-!4, 7."7."80$8/#4+0(4+90$7/#7."90$8/#6."4- 2+4, 5-!5-!3, 4,!3,!5-"6/#3,!J0 H.D+F.B)B)B*@(>&>'=)9&3 /3!6#9#:$;%9$9#9$7$2 3!0)" '(% % +0 .-,(*/)#$%!"    -      - -       -  -  -   - -  -                 -        -    -  -    -  -     - - -  - - 1* 3+!3+!3,"3,"3+!3,"1)/(2+!3,"3,!2+ 1)3*5-"6.$5.$4-#60&60&4.$4.$2,"1+ 1*0)0(2*7/$5-#2+ /(0),%(!%!!!"""###%%%$$$$$$#########$$$$$$###$$$%%%$$$######$$$$$$$$$###$$$###%%%$$$"""$$$$$$###$$$"""######"""$$$!!!!!!!!! !!! !!!"""!!! """"""""""""""" $$$$$$$$$%%%$$$$$$%%%###""" !!!###$$$$$$$$$###!!!""""""%%%%%%###%%%$$$###%%%%%%&&&&&&&&&%%%$$$&&&&&&&&&'''&&&'''''''''%%%%%%&&&''''''&&&%%%$$$%%%$$$%%%$$$%%%###$$$%%%&&&''''''%%%$$$''''''$$$######"""!!!!!!!!!""""""###$$$$$$###$$$$$$###%%%$$$$$$$$$%%%$$$"""!!! !!! """"""""""""######!!!!!!   """!!!"""!!!"""""""""""" !!!!!!!!!!!!"""""""""!!!!! !! "" 5."4,!0)3,!70%5.#2+!1+ 3,"4-#4-#0(/(5.$4,"3+!3,"4,"5-#4+!.$3) <3*80%3,!4-"60%81&4-"0*2+6/$;3(:2'6."7.#:2'91&6.#6-"90%4,!4,!90%;3(7/$1(5-"6-"4,=4'@8+<4'80#6-!6.":1%;2&8/#5, :1%>4(<2'90$<3'>4)<2'7.!6- <2%;2%90#:1$;2&:1%;2&<3&90$6."8/#;2&91%;2&80#80#6-!90$?5);1%;1%>4':/#:0$<2&;1%:0$9/$8."9/#9.#:0$9/$;1&:0#6- <2&<2&;1$:0#:0#=3&?6)=4'?5(>5';1$90"<2%<2%@8+A9+=6)<5(B;.C<0?7+:2&>5)>5)<3'>4(=3':0$=3'?5)<3&?6'  -  -"%%%% -)&96!"%'%&!"$%  - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   -  B7(>3&:/"9/!<3%>4(=5)<3(:2(92'80&6-"2)3)4+ 5,!3*3*4, 2+3+3+3+4, 6-!80$7."90$90%5-!2)4, 8/#7."7."90$8/#6/"4, 3+4- 6."5.!2+4-!5-"6/#J0!I/ E,B+E,E-D,@(>%>'>)<(5#14!7$5 8#8#;&:%9$7#9&7$3!+$ -(+)&# &+-+-/++-*%$!                    -   - -       - -            -       -           - -      - - - - - - - -%0'2*!2* 3+"3+"3,"4,#1) .'1* 3+"2+!3+!2*2)4,!5.#5/$3-#60&61'50&4.$2,!2,!3,!2*0(2*7/$6/$2+ 0)2+!.'*#' !!!###$$$%%%$$$$$$ ###$$$###$$$%%%%%%$$$######"""$$$$$$$$$$$$""" ###$$$%%%$$$!!!!!!###$$$######%%%!!! !!!!!! """###"""!!!"""""" !!!###### !!!###%%%%%%&&&%%%###$$$######### !!!"""$$$&&&%%%$$$#########%%%&&&&&&###!!!"""###%%%$$$%%%%%%%%%&&&'''%%%%%%&&&&&&''''''&&&&&&&&&&&&&&&&&&'''%%%$$$&&&%%%&&&$$$$$$$$$######&&&'''%%%%%%'''''''''&&&%%%###!!! !!!"""###!!!######$$$$$$%%%&&&&&&%%%$$$$$$$$$$$$%%%###!!! !!!!!!!!!!!!""" !!!"""###"""!!!!!!  !!!  !!!!!!!!!!!!!!!""""""!!!""""""""" !!!!!!""""""!!!""!"! "!!!!3+ 5-"3, /(1*6/$5.#3,!2+ 4,"5.$4-#.'/(5.%5-$4,"3,"4,"6.$4+!.%2)=4*90&3+!4-"70%81&4.#0)0)6/#:2'91%6."7/$:1&80%6-"6-":2'6-"4, 8/$:2'6-"/&7/#80%5, =4(A9,=5(6.!4,5- 90$=5)90$3*:1%>5)<3'8/#;2&>4)<3'8/"7.!;2%;2%80#:1$:2%91$<3&=4(91$6-!8/#:1%:1%<3'91$:2%7/":1%=4'90#<2%?5(<2%:0$;1$:0$:0$9/$8."9/$:0$:0%=2'<2'9/#8."<2&<2&9/"8.!9/"=3&@6)>4'?6(>5':1$9/"<2%;2%A8+A9,>7*<5(@9,B;.?7+91%=4(<4'<2&>4(=3'8.";1$=3'<3&=4&WK7  -    '",)/%*.$=:$%&''(')  #$  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -  - - - QD2?5&=3%9/!7- ;1$;1%<3';3(:2(91'90&6-"2(2)4+ 5,!3* 4+ 4, 2)2*3+3+3+5,!8/#8/#:1%8/$6-"4+5, 7/#7/#7/#80$8/$6."2+2+4- 70$6."1)4-!J0!I/!E,B+F-!E,D,B*=%;#='<(7$15"8$:%5 7!9#8#:%9%7$5"3!0( % (($ &$  &*-+,.+))($#                   -   -     -   -         - -     -   - -      -   - -   -  -     -   - - - -  0'3*!.&0(3+"1) 3+"3,#4-$4,#1*!/(2*!3,#3,#3,"2* 3*5-"6.$6/$5/%71'71(60&4/$3-"3,!4-"4,!2*3, 7/$6/$1*1* 4-#0(/'+$$!!!$$$&&&&&&%%%###%%%###$$$$$$###""" ######$$$######$$$###!!!######$$$###"""!!!"""###$$$$$$%%%###!!!""""""!!!!!!######""""""""" """!!!""" !!!"""######""""""###$$$%%%$$$###$$$!!!"""$$$###$$$"""$$$%%%&&&%%%$$$###$$$%%%&&&$$$"""######$$$'''$$$$$$&&&%%%''''''$$$%%%&&&''''''&&&'''&&&%%%$$$$$$%%%'''%%%$$$&&&&&&%%%'''&&&%%%###$$$$$$###$$$%%%&&&&&&&&&%%%$$$$$$###!!!!!!""""""!!!###%%%$$$%%%%%%%%%&&&%%%###$$$$$$$$$%%%$$$!!!!!!!!!""""""!!!"""!!! !!!!!!!!! !!!!!! """"""!!!"""!!!"""""""""###"""###"""!!! !!!!!!!!!"""!!!#! #!$" ##"!#$3+ 4,!2+ /(0)5.#5.#3,!2* 4,"5.$4-#.'/(6/&5-$3+!3+!3,"7.$3+ /&3* ;2(7/$2+ 4-"70%70%4.#.'/(6/$<4):2'6.#80$91&80$6-"5-!:1&6-"4,!80%<3(6-"-%8/$80$6.!<3'@8+<4'5- 4,6.!90$=4(:1%6-!<2&?6*=4(9/#;2&?5*=4(90#9/"=4&<3&8/":1$;3&:1$<3&>5(;2&7/#:2&;2&;2&=4(:2%;3&90$;2%=3'9/#;1%?4(=3&:0$:0#9/":0$;1&:/$9/#9/#9/$=3(>4);1$9/#<2&;1$8.!7- 9/"=3&>4'=4'>5(=4':1$90#=4&<3%A8+A9,>7+=5)@9,B;/>7+7."90$;2&;2%>4(>4'9/#=3'@6*<4&<3%C:+     -  %!)$&&&+-7>"#%&'(()()%& !!" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - -F;,=3%=3%9/!7-;2$;2%:2&;2':2(81&7/$4+!1'2)4+ 5,"4,!4,!3+1)3*4, 4+ 3+5-!:1%;1&;2&7."5,!2*3+7.#80$91%80$8/$5."2+3+3, 80$5."J1"I/!E,@)B*F. F-C*@'<$=(=)7$2 5":&>'=(;&;$<%9$:%9%8&4"0) $% )(" " &%)-+))*(&&%         -   - - -     -    -       -  - - -   -  -           -  -     -  -  -  -       -   - - - -  2) 0'3+"0(0(2*!2*!3+#3+#6.%5.%2+"0) 3+"5-$5-$3,"3* 5,!7/#70%6/$81'60&61'60&5/%4.$4-"5-"6."5,!3+ 80%7/$3+!4,"5.#1* /(-%#"""$$$%%%$$$######"""############!!!!!!$$$$$$$$$$$$###"""###$$$#########$$$$$$$$$"""$$$$$$$$$###"""!!!""""""!!!!!!"""######"""###""""""###"""!!!""""""#########"""###"""###"""######$$$$$$%%%$$$$$$$$$'''&&&%%%$$$$$$%%%&&&###""""""$$$$$$&&&%%%###%%%$$$&&&%%%###%%%'''''''''&&&%%%%%%%%%######%%%%%%&&&'''''''''%%%&&&&&&&&&&&&$$$############&&&(((&&&###$$$$$$$$$""" !!!#########$$$%%%%%%$$$###$$$$$$$$$######!!!!!!"""###"""""""""""" !!!"""!!! !!!"""!!!!!!"""!!!!!! !!!""""""""""""###""""""""""""######!!!!!!!!!!!!!!! "!!$!$!$" $$$"$%!$$2*3+ 3+ 0)1*5.#5.#3+!1*3,!5.$5-#.'0)70'5-$3+!3+!3+!7.$4+!0'5,!;2(6.#2+ 5.#81&92'6/$.'/'6.$;3)<3)80%70$:2'81%6.#4,!80%5-"3+ 91%=4)7.#.&:1&91%7/";3&?7*<4'4,5- 80#7/#:1%;2&:1%<2'>5)=4(8.#;1&?5*=4(:1$:0#>5'=4'8/":1$=5';2%<3&>5)=4(90$=4(<4(<3'=4(;3&;3&:2%=3'>4(:0$;1%>4'<2%:0$:0$9/#:0$=3':0%8.#7-!7-"=3'?5*<2&;1$=3':0#8.!6- :0#=3&=4'=4&>4'=4':1$:0#=4&<3%@7*A9,>7+=6*A9-B:.=5);2&:2%:1$;2&?5)>4(9/">4'@6*;3%;2$A8)                   ! #')! )(&235 "#%$&&(()))''## !  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - -^P4(;3';2(:2(81'7.$4*!1'1(4*6-"5,!4,!4+ 2*3+2*3+5-!6.":1%:1%<3':1%7."2)1)5,!6."7/#7.#90$6."3+4-!4, 70$I0"E- @)>(@(A)D,E+A&A)A,:&3 4!8$;$<&>(='<%:$9$;&9&3!0-' ""'(%!  $ )+,)& **(''%    -     -     - -             -   - - -       - -      -       -    -   -    -  -   - - -   - -   1) 3*!0(0'2*!0(1)3+"2*!4,#4,#6.%5.%2+"1) 3,"5-$4,#2*!2*5,!80%91&70&81'60&71'60&50%5/$5.#7/#6."4+ 3+ 91&70$5.#6/$70%4-#1* 4-"*#$$$&&&%%%$$$!!!!!!"""%%%%%%###$$$%%%######$$$$$$%%%$$$$$$""""""#########$$$#####################"""!!!!!!######!!! """"""!!!"""""""""!!!!!!!!!"""!!!"""$$$$$$"""###""""""$$$&&&%%%$$$%%%"""$$$$$$$$$###%%%''''''&&&$$$$$$$$$###"""###$$$$$$&&&&&&&&&%%%"""%%%%%%$$$%%%&&&$$$%%%&&&%%%%%%%%%$$$###%%%$$$&&&'''((('''&&&&&&&&&'''&&&$$$$$$$$$###$$$'''(((&&&""""""###$$$"""  !!!!!!!!!#########$$$%%%$$$$$$###$$$###!!! !!!#########"""""" !!!"""!!!!!!"""""""""######"""""""""""""""###"""!!!"""$$$###""""""###"""!!! !!! !!!!!! !!!$! $! "!"!"# "#"#0)4,!5-"1*2* 7/%6/$3,!2* 4,"6.$5.$0)1*!7/&5-$2+!2* 3,!7/$5,"3* 5,":2(7/$2+ 5.#93'93'5.#0)/'80%<4)<3)80%6/#92'91&5-"3, 80%4-!4, ;2'=5)6."/&8/$:1%8/#<3'?7+<4(6.!6.!92%8/#;2&=4(:1%;2&@6*=3(6,!:0$>4)=4(;1%90#=4'>5(90#;2%>5(;2%<3'>5)<4'90$=4(=5)=4(=5)=4'<3';2&>4(?5);1%<2&?5(<2%:0$;1%:0$;1%=3'9/#7-"5+6, <1&>4(;1$;1$>4(9/"8.!6, :0#=4'=4'=3&=4&=3&:1$:0#<3%;2%?6)@8+>6*>6*B:.C;/>6*;3'<3'<3&=3'@6*?5)8/#=3&?6);3%80">6'RF4 - - -     - - - - -   -   - -  ").!+"".)-5CH!!$%$&$'&(')(*)*&'!" !  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - -I?0?5(=3%@6(<1$8. ;2$?6*;2&:1'91'80'7.%4+!2(1'2)5,"4+ 4,!5-"3*2*3*4+6-!6-!6-!8.#=3(<3'6-!2)2)5-!6."7."6.":1%6."3, 4-!I0"E- @)>(?(>'?'A(D)D+D,=(5!27#A+;&8#=&=&;$9$8#9$:&3!,*' # -!'- &  -" &&'**)((&$$"  -        -    - -      -  - - -          -            -  -     -  - -  -     -        - -    -1) 1) 2*!0'0'1) /'1)3+!2* 3+!4,"5-#4-#2+!1* 4,#6.%4-#2+!2)4+ 7.#90%70%70%5/%71&60&60%6/$5.#80$6."4, 6."91%80%6.#7/$80%4-"4-"4-"4-"3+!6."5-!0)-&-%+$.'0)2+ 92(6/%60%6/%4-"2+ 1*4-"6/$6.#81&91&80%5-"%%%$$$###$$$!!!!!!!!!###!!!###%%%$$$$$$$$$######%%%$$$%%%""""""%%%$$$###""""""###"""!!!""""""###""""""""""""!!!"""!!!""" """""""""###""" $$$!!!############$$$$$$$$$$$$"""###%%%'''%%%$$$$$$"""######%%%###%%%%%%%%%$$$%%%&&&%%%###""""""""""""&&&&&&&&&%%%######&&&%%%%%%%%%$$$%%%&&&%%%&&&######$$$&&&&&&&&&%%%&&&'''&&&''''''&&&&&&$$$$$$%%%$$$$$$$$$&&&$$$!!!!!!!!!"""!!! !!!!!!!!!!!!!!!"""###$$$$$$#########"""###  !!!#########"""!!! !!!"""!!!"""###"""###$$$$$$##################""""""###$$$$$$###"""######"""!!! !!!"""!!!"""##"#"#""# "#!"!"0(4,!6.#1)2+ 70%6/$3,!1*4-"6/%5.$0)2+!70&7/%4-#4,"7/%:1'7/$3* 5,":2'80%1*4-":3(93(6/$1*1*:3(=5*<3)6.#6.#:2':2'4,!3+ 7/$5-"5-!<4(>5*6."0(8/#91%8/#;2'=4);2'7/#6/"92%:2%=4(>5);1&<3'?5*>5)6,9/#@6)>4';2%8.!<3&?6):1$;2%<3&:1$<4'>5)<4':1%<4(>5)<4(=5)=5(;3&:2%=4'>5(:0$<2&@6)=3&90#;1%:0$:0$<1&7-!6,!3)6, <1&=3'9/#9/#>4(;1$9/"6,:0#=3&>4'=3&=4&=4':1$:1$<3&<3&?7)A9,>6*>6*A9-B9-=5);2&<3';3&<3'?6)?5):0$=3&@6*:2$7/!<4&E;,       -    -      -   $('(- "3+,0<<$%&'&(&(&(&)'*(*')$% !"  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  iZCE;.>4'=3&A7)<1$7- 90"<2':2&90&70&70&7.%5+"3* 1(2)5,!4+ 3+ 4+ 3*1)0(2)5-!6-!6,!7."<2';2'4+2)2*6-"7.#7.#5-!7/#5-!I0!E- @)?)?*>(='?'@'D,F/!>)6"126!='=)6"<%?';%9#9$7"1-,(& % &(*)$! -" &&'''*&'$!   - -    -      -        -       -       -    -  -     -           -      -  -   -       -0)/'0)1)0'/&/&1(0'2* 3+!1* 2* 3,"4-#5-#3+!3+!5.$80'6/%4-#3*5, 7/$91&92'81&60%71&71&71&6/$5."80%7/#5-!5."81%81%6.#7/$80%5-#5-"6.#5-"4,!5."4-!4, 3*5+ 1(1(2*5-!5."3, 3,1*0(+#.&0(0(70%3,"6/%6/%5.$4-"3,!5.#6/$6/$81&7/$4,!1*2*5-!5,!3+!!!######!!!!!!!!!!!!$$$$$$%%%&&&%%%###%%%###"""$$$&&&###"""###%%%%%%$$$###"""$$$###############""""""""""""!!!""""""!!! """###!!!!!!###""" """"""!!!"""!!!###$$$###""""""$$$$$$%%%&&&%%%###$$$$$$######%%%%%%%%%$$$$$$%%%&&&'''%%%###""""""!!!"""%%%&&&%%%%%%$$$$$$$$$###$$$######$$$%%%%%%$$$%%%$$$&&&((('''%%%$$$&&&&&&&&&((('''&&&&&&&&&$$$###""""""""""""""""""!!! !!!!!!"""!!!!!!!!! !!!######""""""######""""""!!!  !!!"""""" !!!""""""!!!#########$$$$$$$$$$$$#########$$$######$$$$$$$$$###"""######""""""!!! ############"""""""#$"#$ "# !!0(4,!6.#1)3+ 7/%5-#3+!1*4-"7/%5.$0)2+!70&7/%4-#3+!6.$8/%5-#1(4+!:1'7/%0)4-":4(;4)71&.'2+ 91'<4*<4)6.#4,!80%80%5-"6.#91&7/$6."<4(>5*8/$2*7/#90$7.#;2'=4):2&80$7/":2%<3'=5(=4(90$<2'@6+=3'5+:0$A7*>5(;2%6, <2&>4(;2%:1%<3&;2&=4(>6)=4':1$;3&=5(<4'=4(<4':2%:2%>4(>4(:0$=3'A6*=3&:0$;1$9/"8.#:0$5+ 5+ 3)7-"<2'>4(:0#9/#>4(>5(;1$7- 9/"<2&>4'>4'>5'?5(;2%;2%=4&=4'A8+D;/@7+?7+A9-A8,=4(;2&=4(;2%=3'?6)@6*;1%<2&@6*:1$7.!<4&C:+"    "!#  &'"!!2!#3 $/+.,34#$'''(')(*')&(')(*')%'!""#  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   G=.A7*>4';0#?5(:0#5+7.!8/#:2&91'7/&7/%7/$6,"4* 3*2)5,!5,!3*2*1)1)1)1)4+4+ 6-"6-":0%:1&3*2)3+6."6."4+4, H/!E. A*='=)=(<'='?'A)F/!F2%8%00/3<(A,@+?(=&;$:$:%8$1* +(& %)*&&&# %&&'&&')%%"     -        - -  -           -  -   -   -        -    - -    -            - -       -      /'-&/(/(1* 1) /&.%-$/&0(2) 2* 1)1)2* 4,"6.$4,"4,"6.%91'7/%5.$4+ 6-!7.#7/$6/$6/%60%82'82'71&6/$4-"8/$8/$5-"6."92&:2&6."6."80$6."6."7/$6.#5-"7/$5."3, 4+ 5+!3*2)4+ 5-!6/#4-!6/"3, 0)/'0(1)4,!70&5.$81'81'70&5.$6.$6/$70%92':3(80&4,"2* 2* 4,!7.#5,!2*4+ """$$$###!!!!!!!!!!!!""""""$$$!!!$$$%%%$$$"""###"""$$$$$$$$$%%%&&&%%%$$$###"""$$$$$$#########""""""######!!! !!!""""""!!!######!!!!!!### !!!!!!!!!######$$$###$$$###$$$$$$###$$$$$$%%%&&&%%%%%%%%%###$$$%%%%%%$$$###$$$%%%$$$$$$###""""""""""""%%%$$$$$$$$$###$$$ """#########%%%$$$&&&&&&%%%%%%&&&'''%%%$$$%%%'''&&&&&&''''''%%%&&&&&&"""!!! !!!!!!!!!!!!!!!"""""""""""""""""""""""""""!!! !!!"""""""""###$$$#########!!!!!!!!!!!! !!!######""" !!!######""""""""""""###$$$$$$###""""""$$$$$$$$$###$$$$$$######"""#########"""!!!!!!!!!""""""""""""!!!!!!!"#""##""2+1)2+3+ 1*4,!6/$4-"3,!1*6.$81'6/%1* 3,!70&7/&5.$3+!5-#6.#5,"0'3+ 91'7/%0)5.#93(:3(6/$-&1*7/$;3)<4)5-"4,!7/$7/$5-"6.#80%7/#7/#;3'=5)91%4, 8/#8/$8/#=4(>6*:1%7/#7/"91$;2%<4'<4(7.";1&@7+<2&5,<2%A8+?5(;1%5+;2&>4(90$8/#;2%=4(?6*?6*=4':1$;2%=5(=5(=4';3&91$90$<3'?6):0$<2&A7*=3&9/";1$8."7-"9.#5+5*4*8.#<2'>4(:0#8."=3'>5(<2%8/"9/"=3&>5'?5(>4'?5(<2%;2%<3&;2%@7*D;/@7+?6*A9-A8,<4(:2&=5(<3&>5(@7*@7*;1%=3'@6*:1$8/"<3&A8*OD3'%## "#" )"#& % ("#('%(!$)"$)"$+%''&&-'),''.%&,#%'%#' !.$$0##," *'#,+,;189AE !%&'(')(*(*'(&'&(')(*'(#% "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -     F<-A8+>4(8.!>4'9/"2(6, 7.":2&:2'7/%6.$7/%7-#3*2)1(4+ 5-"3+ 2*1*2*2*1)3*3*8/#6-"8/$90$3+2*3*4, 7.#H/!E. A+=(<(<(<(='?'A(D- D.";'0017%7$?+?*;%?(@)<&;&:&6#3!,) & $ (*'#" " %'''&" $$$"    -   -       -      - - - -   -   - -  -   -        - -     -   -     - - - -         -      .&.',%.'.'2+!1)0(0'/&0'1(2)3* 3+!1* 2+!5.$7/%4,"4-#6.%91'70&5.$5, 8/#80$6.#6/$70%82'93)82'71&6/$4-"7.#80$7/#6/#:2&;3'7/#6."80$6."6."90%90%7/$7/#6.#6.#6-"6-"4+ 3*4, 4, 6/#5.!6/#4-!1*/'1)4,"6/$70&6/%70&6/%80&80&5.$5.#81&91';4):3(6.$4,"5,"6.#80%5,!0'3+ 3+ 6-"7/#######"""""" """!!!!!!!!!"""""""""###$$$###!!!###$$$$$$$$$%%%&&&(((###"""!!!%%%$$$!!! !!!"""######!!! """###!!!"""$$$"""!!!"""!!!"""!!! !!!!!!$$$$$$#########!!!$$$$$$%%%$$$$$$###%%%$$$$$$&&&$$$$$$$$$&&&$$$"""###%%%$$$$$$""""""#########$$$$$$$$$$$$"""""" """!!!"""###%%%&&&&&&&&&"""&&&'''&&&%%%&&&((('''''''''&&&$$$$$$$$$###""" !!! """###"""""""""###$$$$$$$$$"""!!!!!! !!!"""###############""" """!!!  !!!"""!!!!!!######"""#########$$$###""""""""""""$$$%%%%%%$$$$$$%%%###"""############"""""""""!!!"""!!! !!!!!!!!!""""!!#!!3+3+5-!4,!2*4-"70$6/#3,!2+ 5.#70%5.#1* 1* 6.$5.$4-"3+!5-"7.$6-#1(3* ;2(80%0)5.#92'92'5.#-&2+ 6/$<3):2(6.#5-"80%80%6.#7/$;3(7/#7/#;2'=5)91%4, 8/$90%7/#=4(?6*:1%7."6.!80#80#;2&=4(6-!90$A7,<3'7. <3&A7+?5);2&5, ;2%;2%91$:1$<3'<4(>6*?6*>4';2$;2%=5(=4(;3&80$80#90$:1%?5):1$<3&@6)<2%7- ;1%8."6,!8-"6,!6+ 5+7-"<2&>4(9/#7-!;1%=3&;1$9/"90#=3&=3&?5(=4'>5(<2%<2%<3&:1$@7*D;/@7+?6*C:.B:.>5);3'<4':2%=4(@6*?5(;1%>4(>5)91$8/#<4'@7*E<-   !!""""###$$%$&%! %&&('*(+(+')&'%'&)'*()&'!""$  - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  TH6D:,C:-?5)9/"?4(9."2(6,8/#:1&:2(70&6.$8/%7.#3)0'/&2)4,!3+ 2+ 2*2*2*1)3*4+ 80$6."8/$8/$4+ 2*4+ H/!E- A+;':&;(<)<(?(A)E.!H2'=(3 004#<) <)=)@*;$:$>'<%;%8$3"0( & -'%()$   ! $&%%"  -! $!     - - - - - - -    - -  - -   - - - -     -         -       -  -    -  - -     -      - -    -    -    .'-&.'0) -&,%.&1* 0(0(0'/'0'2)1)3* 4-"3+!4,"80&7/$4,"5-#6.$92'81&5.#4+ 8/$80%6.#6/$60%71&93)82'5/$6.$4-!6-"80$7/#6."92%:2&7/#5,!90$7."7/#80$90%8/$7.#6.#81&7.#8.$4+ 3*5-!4, 6."6."70$5."1*-&2+ 6/%7/%81&6/%70&7/%81&92'6/$6/$92'92'<4);3)7/%5.#7/$80%91&5-!2*5-"4, 6-"6.#5-"5-"############!!!!!!!!!!!!!!!!!!!!!""""""$$$$$$"""$$$$$$$$$$$$$$$%%%%%%"""!!!"""%%%%%%"""!!! !!!$$$$$$###"""!!!"""######!!!###$$$###""""""""" !!!!!!"""!!!$$$$$$""""""###!!!"""###$$$$$$$$$###"""###"""%%%###%%%&&&'''&&&###"""%%%$$$""" ###%%%$$$###$$$$$$%%%""""""###!!! !!!###%%%&&&%%%%%%&&&&&&'''&&&&&&'''((('''%%%%%%%%%"""#########$$$ !!! """"""""""""###$$$$$$$$$$$$###!!!!!! !!!###""""""############"""""""""!!!  !!!!!!###"""!!!""""""######""""""""""""###$$$$$$%%%%%%$$$$$$###"""###$$$#########""""""!!!!!!!!!!!!""""""!!!!!!"!!" 4, 3+4, 4,!3+ 6.#80%70$3,!2+ 5-#81&5.$0)2+!80&6/$4-"3+!5.#91%7.#3* 2)91'3,!0(4."92':3(6/$.'2+ 80%:2'90&4,!2*6.#91&6/$6.#=5)80$7/#:2&=5)91%3+8/#:2&6.";3'?6*;3'80#8/#91$80#<3'>5)6-!8.#@6+=3'8/";2%?5)?5)=3'8."<2&;3&:1%:2%<3';3'=4(?6*>5(;2%:1%=4(<4';2&8/#7/"90$8/"=4'90#<2%>5(;1$7- ;1%8."8."9/$7-"6,!5+ 7-";1&=3&9/"7- ;1$<2&;1%90#;1$=3&?6)>4'>4'>4'<3&<3&>5(:1$@7*B9->5)=4(B9-B9.?6*=4(;3&91$=4'?6)<2&;0$>4(=4'90$7."=5(A8+D:,bS>  !! " " #!$!$"%"&#&$'$'$'$'%(&((+(+(*(*&(%(%(&)')'(#% #$#$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   -F=/@7*C9-=4(:/#<2&6+1'4*7.#91&91'80&7/%80%8.#4* 0'/&2)3+!1)2*1)2+3+ 1*1*3+6."5-!7/#90%4+ H/!E- A+=)6#7$:(<*=(@(B-G3'@,!5!102!8&;)>+?+<&<&9#<&;$7"8$0-+' % (*$   -#'&%%# #!"              - -       -   - -   -  -       -     -      -    - -  -    -  -   -      - -    /(-&,%-'0) .'-&-&/'/(1)0(/'1)1(/'4+ 6.#5-!5-"91&70$4-"4-"4-"81&80&4-"4+8/$80%7/$81&81'71&82(71'5/$5.#4,!6-"8/$7/#6.":2&:2&7/#5, :1%90$8/$90%:1%90%7/$6.#91&6,"8/$4+ 3+ 7.#4, 5-!6/#81%5."0),%1*3,!4,"70&6/%81'92'92';3)91&7/%81&92&;4);3(6/$5-"7/$90%91&8/$6-"90%5-!7/$91&6.#5-!5-":1&"""###%%%$$$###!!!"""""" !!!###!!!###%%%$$$$$$$$$###!!!###$$$%%%"""""""""$$$$$$$$$$$$!!!###$$$$$$%%%$$$""""""######"""###%%%$$$!!!"""!!!!!!!!!"""%%%!!!$$$&&&$$$###"""!!!"""######"""$$$###"""""""""$$$%%%%%%%%%&&&'''&&&$$$%%%&&&&&&"""###%%%$$$###%%%%%%%%%""""""###""" !!!!!!"""%%%&&&$$$&&&''''''((((((&&&&&&&&&&&&############"""$$$######"""!!! """$$$###"""$$$$$$$$$$$$$$$""""""!!! """""""""!!!!!!""""""######!!!!!! !!!!!!!!! !!!!!!"""""""""$$$###"""###$$$######$$$$$$$$$#########$$$###""""""""""""!!!!!!!!!"""###""" !!! ! 5-!3+ 3, 5-"5-"7/$80%6/$3,!1*3,!70%5.$0)3,"92(81&6/$4,"5-"80%6-#3* 3* :2'3+ /'4-"93';4)70%0)2+ 7/%:1':1'5-"2*5-"91&6.#6.#=4)90$7/#:2&=4):1%3+7/#;3'6.";3'?7+<3'90$91$:1%90$=4(=5)6-!7."?5*=3'8/":1$=4'?5)=4'90$;2&<3':1%:1%;3';2&=4(?6*>5(:1$:1$=4(=4(<3'90$8/#:1%7/"<3'9/#;1$>4'<2%8/";1$8."9/#;0%8.#7-"6,!9.#<2'=3&:0#8/"<2%<2%:0#:0#<2%>4'?5(>5(=4'>5(=4'<3&@6);2%A8+A8,;2&<3'A8,B9-?6*=4(<3':1%=4(?5);1%:0#=3'=4(:1$6.!>5(A8,A8*G=.  ! !!"!"!#"$$%%&''')'((*))()&)%(%(&)'*()&'!" !#$#%  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -     -fWDD;.<3'?6*:1%9.#9/$3)2(4+7/#92&:3'91&7/%8/%9/%5+!0(0(3+ 3,!1)2*1)1*2*2+2*2+3, 3*5,!H/ D- A+?,!:'5"8%;)?*@(?)B.!?,!6$1 2 6"9&;(:'<(<'?):%7#8#;&8$7%/) ) ( )))%  -#'&$ %&%$          -     -   -        -    -   -     -        -  - -   -              - - - - -    - - - - -0)0).'-&+$,%.',&,%-&/'1)1*1)0(1(1)0'3+ 6."6-!4-!81%81$4- 2+ 3-!70&6/%4-#0(7.#81%70%92'92(81'93)82'5/$6.#5."7/#80$7/#6."<3'<3'80#6-!;2&91%8/$;2'<3':1&80%6/#:2'6,!7-#3*3*7/#4-!5-!5."92%6.#0).'2+ 4,"5.#70%70%:3(92'92':3(92&92'92'92';3(:2'4,!1*80$90%:1&80%90%:2'7.#7/#80%7/$6.#7.#7.#:2&91&:3&"""!!!$$$%%%$$$"""!!!""" """"""###$$$###$$$%%%"""!!!$$$%%%%%%$$$###$$$$$$#########"""#########$$$$$$""""""###"""!!!"""$$$$$$$$$!!!!!!"""!!!"""$$$"""%%%&&&%%%"""!!!""""""$$$$$$###"""!!!###"""###%%%%%%%%%$$$%%%$$$&&&%%%###%%%&&&###%%%%%%$$$###$$$$$$$$$!!!!!!###""""""!!!"""###%%%%%%$$$$$$%%%&&&''''''%%%$$$###""""""$$$$$$""""""$$$%%%%%%$$$"""!!! """$$$"""###$$$$$$$$$######""""""!!!!!!!!!"""###"""!!!!!!"""""""""""" !!!!!! !!!!!! !!!"""""""""!!!###$$$$$$$$$###$$$$$$###############$$$#########"""!!!"""!!! !!!!!! !!! !!!6-"5-!7/#7/$5-"5-"7/$70%3,!0)3,!70%6/$1* 2+!81&81&6/$4,!5-"80%6-#3* 3* 91'4-"0)5/$92'93(70%2* 2* 5-"8/%:2'80%3+ 6-"91&6.#6-";2'90$7.";2&>5*:1%1(90%<3(7.":2&>5*;2'8/#80#:1$:1%=4(<3'5, 8/#?5*<3'8/"90#<3&>5(<3'80#:1%<3';2&;2&<4(<3'>5)?6*>5(:1$:1%>6)=4(=4(;2&:1%:2&80#<3':0#;1$>4'<2%:0#:0$8."9.#:0%8.#6,!6,!8-";1%<2&:0#8.!<2%;2%9/"9/"<3&>4'?5(>5(=4'?6(>4';2%@6)<3&B9,A8-<3'<3'A8,B:.@7+=5)=3(;1%=3'>4(;1%8."=3'>5(90#6.!=5'A9+?7*@7)   !!""##$%%&'')()()'(%(%(&(')(*()$%   !"##$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   -D:,A8+80#<2&9/#7-!:0$7-!2(2)6."91%80%6.#6/$7.$7-#4* 1(0'3* 4+!1(3+ 2+ 2+ 3+ 1)2*2+2+1)D- @+<):(6$8&;)<(@(E,C->* 7&1 2!<(=(<'>)=);'='<'9%8$:%7"4 2 ,( +),.'$$ ! $$'$! $$#            - -      -     -        -   -     - - - -  -   - -  - -     -  - -            - -  -   - -  - - -0)0(/(.'-&+$*#-&+$)"-%0)3,!2* 1)2*0'2*0(2*6."6."4- 70$6/#3,2+ 6/#70&5.$4,"2*6."80%80%91'92(92(=6,:3)6/$7/$7/#:2%91$7."7.#;3'<4(80$6.":2&90$7.#;2&:1&:1&:2'80%:2'6-"5+ 2)2*5-!4-!4, 5."81$5."0).&2* 6.$80&82&92':3(81&81&<5)92&:3(92'92'<5)<4)7/$4, 8/$8/$:1&80%:1&91%6."6.#8/$:2&6-"7/#90%91&91%80$80$:2&"""!!!"""$$$$$$$$$###$$$""" """!!!!!!###"""###$$$&&&$$$###$$$%%%%%%$$$$$$$$$%%%$$$$$$###""""""###"""###$$$###""""""###"""#########"""!!!!!!""""""!!!###$$$$$$%%%&&&######!!!"""###$$$###""""""###$$$$$$$$$###$$$%%%&&&&&&&&&%%%$$$&&&%%%$$$$$$%%%$$$###$$$$$$###!!!###$$$######""""""###$$$&&&$$$###%%%%%%%%%%%%%%%""""""!!!"""$$$""""""$$$&&&&&&$$$#########""""""!!!!!!!!!$$$$$$"""$$$######""""""""""""!!!!!!!!!!!!######"""!!!""""""!!!!!! """"""!!!  !!!""" !!!!!!"""""""""###$$$$$$$$$$$$$$$###"""############$$$$$$$$$###""""""""""""!!!!!!  !!!5-!6."5-!7/#7/$5-"4-!6/#70$3,!1)4-"81&70%1+2+ 92'81&7/%4,!5-"90%5-"2)3* 90&5.#0)2,!:3(;4)6/$2+ 3+ 4,!5-"90&:1&6.#90%<3(7.#5-":2&90%6-!:1&?6*:1&0&8/#;2&7.";2'>5*;3'8/#90#80#:1%=4(<3'7."8/$=4)<3'8/"8/#;3&>5(;2&8/":1%<4(:1%;2&=4(=4(?6*@7+>5(91$:2%>5)<3'<3':2&90$90$8/#<3':1$:0$=3&;2%:0#:0$8/#8.#9/$8.#7-"7-"8.";1%=3&;1%90#<2%;1$9/"8.!<2%>4'?5(>5(>4'>4'<3&;1$@6)=4'A8+B:.>5)=4(A8,C:.A8,>5)=3'<2&<3&=3';1%8/#>4(?6)91#6. <4'A9+?7*<4&WI6  ! "!#"$#%$&%&&'&'&'&'&(&(')'(&&"#  ! !"#"$  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   -?6(>6)7/"=4(<3'7-":/$8.#2(1(4,!6.#5."3, 80%8/%6,"3* 1(/&0'0(1(2*3,!1)1)0(1)2*D- @+<):(:'9';)<)<'?)D. D.!:'2#1 ?)?(@+A,>*>*?)=(<(9&5!4 2/.+,// 1",('% # ! # %$&#  ##               - -   -       -  -  -     - -  - - - - -  -   -  -  - -   - -         -    - - -   -    -1)3,!1)/'.'.'-%,%)"-&-&-&.'0)4,"2+ 1)2)/&4+!2*2*5-!5-!4- 70#6/"2+2+ 70$6/%4-#4-"4, 6."80%91&92'92(92(;4*92(6/#6/#80$:2%91$6-!6-":2&<3(80$7.#91%8/#5-!:2&:3':2';3'81%91&6-"5,!3*2)4, 4, 2+5.!6/"5-"2+ 0(2+ 5.#70%71%6/#71%6/#6/$<5*:3(;4(:3'81%;4'<4(80$7/#90%91%91%91%90%80$6-!7/#91%:2&6-"80$:1&90%80$70$80$92&6/#80$###"""######$$$""""""###""""""%%%"""!!!$$$###"""$$$&&&&&&$$$$$$$$$%%%%%%&&&&&&&&&###"""######"""%%%#########$$$$$$###############!!!!!!!!!""""""!!!""""""%%%""" """!!! !!!######$$$""""""###"""$$$$$$%%%$$$###&&&%%%''''''$$$$$$$$$$$$$$$&&&%%%$$$"""###%%%###!!!"""""""""$$$###$$$###%%%$$$######%%%%%%$$$###""""""######"""!!!!!!"""###$$$%%%$$$######"""######"""""""""##################"""!!!!!!!!!!!!"""!!!!!!######"""###""""""!!!!!! !!!"""!!!!!!""" """""""""!!!!!!""""""###$$$###$$$$$$$$$$$$###"""###$$$######$$$$$$######""""""""""""!!!!!!!!! """4, 6."6."80$6.#4,!5-"70$6/$4-!2+4-"6/$71%3,!2+ 91'81&7/$4-"6.#91&5,"2)5,"80&4-"1*4-"92'92'6/$3,!4,"7/$90&;3(:1&5-"6-"<4)7.#2*7.#8/#5,!:0%?6*:1%/&6."92&7.#<3(?7+<4(8/#8/"6.!80#<3'<3'7.#90$>5*<3'7/"7/"<3'>6);2&7.":1%>5);2&:1%=4(=4(>5)@8+?6)91$:2%>5):1%;2'91%8/#7/#7."=4(;1%9/#;1%<3%:0#:0$8/#8."9/#8/#7-"7."8.";1%=3':1$8.!;2%;1$9/"7- ;1$>4'?5(=4'=4'>4'<2%:1#?6)>4'@7+C:.?7*>5)B9-C:.@7+<3';2%<2&=3'>5(=3':1$>4(?6):1$7.!<3&?6)?6)91$=3% ""$$%%%&%'&'&'&(&('(&'#$! ! ! !!#"#  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   _P:A7)@7*:1$?6)?6)7-!8/#7-"1(1(4,!6/#7/$4-"6.#6-#7-#3) 0(.&/&1(0(0(/'0)0(0(C- A+=)9'9(9(:(<*<(=(@, C/$=)5!2 07"D-!E."C- @+?)?(?)>)6"30, /) ----,)%% &$ %%$##"!     -     -  -   - - - -  -  -       -    - - - -   -          -  -       - - -          -   - -    -    -%.&0(2* 0(.'/(/(-%,%)!-&/(/(0)0)3,!2* 2)2)/&4+!3+ 2*4+ 4, 3, 70$80$3,1*5.#5.$4-#4,!3+5-"91&91&92'92(:3(:4)92'5.#6/#91%;3&;3&6-!6-"<4(>5*91%7/#8/$6-"5-!:2&;3';3':3'70$81%7.#7.#5, 4+ 5,!5,!4,!4+ 7/#6."4+ 2*2+ 3,!5.#5/$3,!81%5."6/$<5*<5):3':3'92%;4(;4(91%91%;2':2&90%90$80$80$7/#80$:2&80$80$91%91%:2&80$7/#92&;3'7/#3, 5."5.! """###"""""""""###"""!!!!!!$$$###"""$$$###"""###%%%%%%&&&%%%%%%&&&%%%%%%''''''###"""######$$$$$$###$$$######%%%$$$###%%%"""""""""!!!!!!!!!!!!"""############ """$$$$$$$$$%%%######$$$###&&&%%%%%%###%%%%%%&&&&&&$$$######$$$$$$%%%$$$$$$############"""""""""###%%%&&&$$$$$$$$$###""""""$$$$$$###"""!!!###$$$######"""!!!###$$$$$$&&&%%%$$$%%%######!!!""""""""""""######""""""######!!!!!!!!!""""""!!!""""""""""""######"""!!!!!!!!!!!!"""!!!!!!"""!!!!!!!!! !!!"""###!!!!!!!!!"""######$$$$$$###############$$$###""""""$$$$$$###""""""""""""!!!!!!"""!!! !!!6.#6.#6.#7/$80%7/$4,!4-!91&92&4-"2+5.#6.$81&4-"3+ 81&70%7/$5."7.#91%4+!3*7.$80&4-"1*4-":3(93(70%4,"3,!80%<3);3(80%6-"6.#;2'8/$2*90%8/#5,!90%@7+:1%2)7/#:2&7/#=4(@7+=4(7.!6- 8."80#<3'<3(90$:1%>5*>6)8/#7/"<4'?6*;2&6.":1%>5);2&:1%;3'<4(>5)@7+?7*;2&<3'>4(;1%<2';1&90$7."80$<4(;1%8/":0$<3&:0$:0$8."8."9/$:0%6-!8."8/#<2&?5):1$6- <2%;1%90#8/"<2%>4'>4'<2%=4'?6(<3&90#>5(>5'@7+C;.?7*>5)B:-B:->5)90$:0#;1$=4'?6)?5(<2&>4(@7*:1$8/"<3&>5(>5):1$<2$  !!""$#%$'%&%'&&%&&'&'"" ! ! ! ! ! !!"  - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - -     E:*?6(?5(:1$>5)=4(5+7-!7-!1'0'5-!6.#6/$7/$3+ 3* 7.%4+!0'/&.%0'1(.&/'/(B- A+>*9(6%6&7&:(@+?*>*@-#;* 7$4!2 7#<'A+G1%I3(C-!?)=':$9$2- / + 04"2 3")&'" %# $ ''(%#" -      -    -  - -   -   - -  -  -   - - - - -  -   -  -   - -     - -    -  -  -  -               -    -   -0(/'/'/'0(3+ 1).&1)0(-&,$)".&0)0(1* 0(3+!3+ 3+ 4+ /&3*3+ 3*3+4,!4-!81%92&4,!2*4-"5-#4,#3+ 3+6.#91&70%91':3(:4);4)92'5.#6.#70#:2%;3&8/#7.";3'<4(90%8/$90$7."6-":2&<4(<4(:3'70$80%90%7.#5,!4+ 4+ 3*4+ 5,!91&7/$3+2*3+ 3,!2,!5.$6/%60%6/$92'>8-;4)81%70%70$:3'<4(91&:2':2&:1&91%90$80$7/#7/#6."80$90$80$7/#80$90%80$70$80%91&5."4-!5."5-!3+ 6.####"""###!!!######"""!!!!!!"""$$$###"""######"""""""""#########$$$%%%$$$$$$%%%%%%######$$$%%%%%%$$$$$$%%%###!!!############""""""######!!!!!!!!!"""###$$$###$$$###""" """######"""###"""###&&&$$$%%%%%%###""""""$$$%%%%%%"""!!!"""######$$$###$$$$$$######!!!"""$$$$$$$$$&&&%%%%%%$$$$$$###!!!!!!"""""""""###$$$%%%&&&%%%$$$"""###%%%%%%%%%&&&%%%%%%$$$""""""###"""""""""""""""!!!!!!"""###!!!!!! """""" !!!!!!!!!""""""""""""!!!!!!!!!!!!"""!!! !!!""""""""""""!!!!!!!!!"""""""""!!!""""""###$$$$$$""""""######$$$###"""""""""$$$$$$###"""!!!!!!!!!"""!!!!!! !!!!!!8/$6.#7/$7/$7/$7/$81%4-!4-!:2':2&3, 1)6/#7/$81&3,!3+ 81&81&70%5.#6.#8/$5,"4+!80&91'5.#3,!5.#:3(92'70%4,"3+!80&<3);2(90%6.#:1&;3(80%3*<3(8/#5, 8/$@7,90%4+80$92&7/#<3(?7+<3'5- 4+6-!7.":1%;2'90%:1&>5)?6*7/"6.!<4(?7+;2&5-!:2&>5);2&:1%:2&<3'=4)?7+?6*;2&<2'>4);1&;1&;1&:0%7/#90$<3':1%7/"90$;2&:0$:0$9/#7-"9/$:1%8.#8."8.#<3'@6*90#5+=3&<2%;1$;1$=3&?5(>4'<2%>4'?6)<2%90">4'=4'@7*C:->5(>5(C:-B9,=4'8/":1#:1#=4&?5(?5(<2%>4'@7*:1#9/"=4'>5)>6):1%<2$XJ6 ! " "!##$#$#%#%"#   !!"!"!!!"!"""!" - - - -  -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - -B8)>5'=4&:0#=4(;2%4*6- 4*-#-$4-!5.#6/$82'5.#5,#7-$4+"2)/'-%0'/'/'C- A+?*>)9(6&6&7'<(C,D. A-"=*!8'2"2 4":(>*@+A-!B-!G0$@)8"6 2, /0.0/02!*$  &%'(''&%$!     -         - -         - -  -   - - - -     - - - -  -    -           -  -  -             -  -  - -0(.&1)2*1)/'1(3+ 3*/&1(3*!/(/',$.'1* 1* 1)-%2) 5,"4, 4, 0'2*4+ 3+4, 6-"6."91%92%4,!3+ 4-"5.$4-#3, 4+ 7/$70$70%70%;5*;4);4)92'6/#6."5."80$91%6-"7.":2&;3'90$80$:1%7.#5-!91%<4(<5);3'80$91%8/$6-"4+ 5,!5,!5,!6-"6-"8/$5-"3+1)4+ 5,!4."70%4-#93(71&93(<5*81&6/$6/$6/#92';3(91&:2(:1&:1&8/$6.#7.#5-!6."6."7/#7/#7/#7/#91%91%90%7/$7/$92&5-"5-"6.#5."5-"5."3, 2+5."""" """"""!!!!!!!!!"""!!!!!!""" !!!!!!"""!!!"""###$$$%%%$$$%%%%%%############$$$%%%###$$$$$$"""!!!#########$$$"""""""""!!!"""!!!!!!"""###$$$###"""""""""!!! """###############$$$%%%$$$###%%%$$$"""!!!!!!!!!"""!!! !!!$$$###$$$"""###$$$$$$$$$""" $$$$$$%%%&&&&&&%%%$$$###"""!!! !!!######$$$%%%&&&&&&'''&&&$$$###$$$&&&&&&%%%%%%$$$###"""""""""!!!""""""$$$""" !!!"""!!!"""!!!!!!!!!!!!###"""!!!!!!""""""!!!!!! """"""###"""!!!!!!"""!!!""""""!!!"""""""""###"""""""""""""""######!!!"""########################$$$"""!!!!!!"""###"""!!! 4+ 8/$8/$6.#6.#6.#6.#7/$:3(6/#6.#:3'92&3+1)6.#70$70%1*0(7/%91'81&4."2, 6/#5,!3*6.#91&70%3, 4-"92':3(81&3,!1)7.$:2';2'91&6.":2'=4)7/$1(:1&8/$5, 7.#=4(90$4+7/#92&7/#<3(?7+<3'6- 4*5+6-!91%:1&90$90%>5)=5(6.!4, <4'@7+<3'5-!;3'=5);3';2&;2&;2'<3(>5)=4(:1%;1&=4(:1%90$;2&;1&8/$80$;3':1%90$:1%;2%90#:1%:0%8.#:0$;1%8."7-"8/#<3'?5)7.!5+=3&<2%:0#;2%>4'>4'>4'<3%>4'?6)<3%:0#=4'<3&@8*C;.=4'>5(C;-B:,<4&90";2$;1$?6(?6(>5';2$=3&?5(:0#90#=3'>5(?6);2%:0#C8*   !!"!"!"!" " !   !!"!"!"!""""""### - - - - -  - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  cT>@6(?6(@6(:1#:2%80#3*6-!3)-#0&0)5."80&6/$4-#4,"2) 2* /'/'-%/'D- A,?*A, <)8'8(8(;* @,@*C, B-!=) 9'2!0:):';'C/"E1%B-!?);$243000./,( ()($ # '''%&% $ #" !    -      -       - -      -    - -    -       -   - - -        -      - -  -  -             - - - 2* 1*0(3+ 4,!2*0'2)4+!1)/&/&1(1)0(-%/'3+!3,"1).%2)4,!4+ 4+ 1)3+4,!4+5,!6."6."91&80$3, 3+ 5-#70%5.$5-!4+ 6/#80%80&81&<5*;4);4)92'7/$7/#6/":2&:2&6-"7.#:2&<4(:2&91%:1&7."4, 81%<4(=5);4(81%91%90$7."6-!5, 7.#5,!6-"5-!6."5-!4+ 1(4, 6-"70%81%5/#6/$6/$;4(<5)92&70$5."6/#81%:3'81%91%91%91%80$8/$7/#5-!5,!7.#7.#7.#91&;2':2&:1&;2&90$91%:1&6-"6."5-!5-!6.#7/$5-"4,!70$7/$3+ !!!!!!"""!!!###!!!""" !!!!!!!!!!!!"""""""""###&&&%%%$$$$$$$$$$$$$$$$$$"""$$$$$$$$$$$$######""""""######$$$$$$"""  !!!!!!""""""""""""""""""### !!!###"""!!!###$$$"""###%%%%%%&&&$$$"""###"""""""""""" """$$$$$$######$$$$$$&&&%%%######$$$"""%%%%%%$$$$$$###!!!!!!!!!!!!"""%%%&&&&&&$$$$$$&&&'''&&&$$$###%%%&&&%%%%%%%%%###"""!!!"""""" !!!!!!"""###"""""""""""""""!!!###!!!!!!""""""!!!######"""###### !!!"""###!!!!!!!!!!!!""""""""""""!!!###### !!!###"""""" !!!!!!!!!"""########################"""###!!! !!!""""""""" 3+ 4,!7/#7/$6.#6.#6.#6.#70$<4)7/$6.#:3';3'6/"3+5.#70%80%2+ 2+ 81&92'70%4."4-"70$6-"3+ 7.#:2'80%2+4-":3';4(81%2+ 1)80%:2';3(6.#6.":2&<4(7/#3+:1%8/$7."7.":0%90%5, 7/#91%7/#<4(@7+=4(7-!4*4*5, ;2&<3'90%8/$>5)=5)7/#4, <4(@7+<3'6-!:1%=4(;3';2';2':1&;2'=5)<4(:1%90$<3':0%:0%;1&90$8/$7.";2&:2&:1%<3'<3&8/#:1$;1%9/$;1&;2&8.#7-!90$<2&<3&6, 7-!=3&<2%9/"9/";1$>4'>4'<2%=4'?6)<3&;1$>5'=4'A8+C:->6(?6)C;.C:-=4':1#=4&;2$@7)@7)>5';1#<3%<3&8/!9/#=3'?5)?6);1%9/"A7( ! " " ! !!"!"!"!! ! - - - - - -  - - - - - - - - - - - - - - - - - - - - - -  H=->5'?6(@7):2$<4':2%5, 6,!3)+",#.'5."6/%4,"3+!2*!2) 4+"1)-%F.B,@*E.!?+7&6'7( :*!=,!>+ =(@)?);&8$5#4"5#8%>+B/"D1$B.!>(6!17"9$21,)+.(% '+()&  -'%" $# ! $ -  - -  -     - -      - -        -  -  -   - - -  -  -  - - - - -  -     - - -  -  - -    -   -    -     - -  - 0(1)1)1*1)5-"6.#2*/'2*3+ 2)/&.&1(3* 0).'0)3,"4,"1(/&4+!6-"6-"4+ /'2)4,!4+ 5-!7."8/$:1&91%4-"4-"6/$80&6.$6-"4, 6.#91&81&:3(;5);4):4)81&70$7/$7/#;2&:1%6-"7/#80$:1&91%91%<3(8/#4, 80$;3'<5);4(81%:2&:0%:0$7."7."8/#6-"6-"5, 7.#7."4, 1(4,!4+ 70$70$5/#70$92&:3':3(92&81%81$70$;4(92&81%70#8/#90%:2&:1%7."6."6-"90%7/#7/#91%:2&;3';2'<4(;2&;3';3'7/#6."5,!5,!6.#90%7.#6.#7.#7/#7/#5."4-!5-!!!!  ###""""""""" """!!!!!!"""!!!"""""""""###%%%$$$%%%%%%$$$%%%%%%$$$$$$$$$###"""$$$$$$### ###############"""!!!!!!!!!!!!"""!!!!!!!!!!!!"""""""""!!!###### !!!$$$$$$""""""$$$%%%%%%$$$"""###$$$"""###"""""""""%%%$$$$$$""""""###$$$$$$%%%###$$$###"""###"""""""""!!!!!!!!!"""###%%%''''''%%%%%%%%%&&&&&&%%%%%%%%%%%%&&&$$$%%%###"""######"""!!!!!!!!!""""""###"""""""""!!! !!!!!!!!!!!!!!!$$$%%%$$$###$$$""""""!!!"""!!! """"""!!!!!!#########""""""!!!"""######"""!!! !!!######!!!"""""""""""""""###"""!!! !!!"""!!!!!!4, 3*5,!8/$80$8/#7/#6/#6/#80$;4(6/#5."81%:3'80%4-!5-"80%92'6/$5-"92'92'6/$5."5."7/$6-"3+ 6.#;3(81&1*5-";3(<4)91&3+ 1)81%:2';3(5-"5-!90%<3'7.#4+:0$7-"6-"90%>5);2'6-#91&92&6/#;4(?7+<4(6- 4*3)3*;2&>5*:1%6."<4(>7*81$5-!=4(?6*:2&6-!90$=4(;2';2&;2':1%;2'=4(<3(90$8.#;1&:0%;1&:1&7.#7.#5, :1&:2&90$=3(=4(8.":0$;1%90$;1%:0%7-!7-!90$;1%:1%7-!:0$>4';2%9/"7- 9/"=3&>4'<2%=4'?6)=3&<3%@6)>4'A8+C:->6)>6(B9,B9,=4';2$?5(;2$?5'?6(=4&:1#:1#<2%9/#90#=3(@6*?5):0$9/">4&   ! ! !!"!"!! - - -   - - - - - - - - - - - - - - - - - - - - - - - -     F<-=3&?6(@7)<3&;4'81$4+5, 4*/&/&/(6/$6/%5.$4-#3,"3+"4,"F.C- A+H0 D. A- 7&2#6':)<* :(9%;&>(<&9$9%:'8%9&;'@-!A-!C/#8$.33:$5 0)' )+-((+*&&" $'$! "  !    - -  - -       -    -         -  -   - - -    -   -         -       -         -  -     - -   - -*"+$/'0(0(2)1)4,!5-"2*0(3*3* 1)/'/'3* 3*!2) 0(1) 3+!3*!0'/&4+!5,!5,!2)/'1)6."6-"5-"6.#80%:1&91&4,!4,"70%91'6.$5-"4,!70%:2'81%:3';4(:3(;4(:3(81%6."6/"91%8/#6-!7/#91%<4(;3'91%<3(90$5, 70#92&;3';3'81%;2&8.#90$6-!90$7."7.#7."5,!7."8/#6-"2)4+ 4,!5.":3'81%81%81$92%;4(81$81%81%;4'81%81&81%80$6."6."91%91%7."80$7/#;3'90$8/#90$91%;3';3'=5)<4(<4(<4(91%80$6."5-!7/#8/$7.#7.#91&7/$6/#6/#6/#5."70$81% ### !!!!!!!!! !!!!!!!!!!!!""" ###""" ###"""###%%%%%%%%%$$$$$$&&&%%%%%%$$$%%%$$$""""""######"""""""""############"""###"""!!!!!!!!!"""!!!"""###"""###"""###"""!!!!!!#########!!!$$$%%%###$$$ !!!$$$%%%%%%$$$""""""######### !!!$$$###""""""!!!!!! !!!!!!"""""""""!!!"""###$$$$$$&&&'''&&&%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%###"""###"""!!!!!!""""""###!!!!!!"""""""""!!! !!!"""######%%%$$$%%%$$$###$$$#########  !!! !!!"""!!!"""""""""!!!"""$$$$$$###"""!!!!!!"""!!!!!!"""""" !!!"""""""""""" !!!!!!"""5-!3+0(4, 80$91%80$7/#6/#6."7/#92&6."5-!91%:2&80$4,!4-"80%:3(6.$2+ 81&:3(6/$5."5."80$7.#3*5,!;3(91&2+ 5.";4(;4)91&3+ 2*91&<4)>6+91&7.#:1&=4(7."4, :0$;1&6-"8/#<3(:1&5,!91&:3'6/":3&=6):3&3+3+5,7-":0$?6*91%4- :2&>6*91%6."=5)?6*:2&6.!91%>6*;2':1%;2&90%;2&=5)=4(90$7.":0%;1&<2';1'7-#6-"3*90%91%80$=4(>4(8.":0%;1%9/#:0$8/"5,7-!90#;1%;2&90$;2&=3&;1$:0#7.!8.!=3&=4'<3&=4'?6(=4'=3&A8+=4'@7*B9,=4'>5(B9,@8*:1$;1$>5';1#>4'?6(>4&<2$=3&>4':1$;1%=3(?6*?5):1%:0$?5'YK7   ! "!""!  - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bT>B8);1$=4&?6(<4&:3%70#4,5, 4+0'/'1*6/$6/%5.$5.$4,#G/ D- B+D+C,A->+7&4$8(=)@);(8'9%;%=&:%<':'9&8$9&;):(:&4 05!7"121-)(+--+&((''$ &'#! !    - -  - - - -    -     - -    -     - -  -  -          -  -   - - -   -     -  -       -   - -    - - -  - -* ( ( *"0'/'.&0'0(3+4, 3*1)4+ 5,!3* 0'/'4+!4+!2* 0(0(2* 3*!1(1(5,!5,!4+ 2(0(2)7/$6.#5-"6-"7.#90%:1&5-"4,!8/%91'80%6-"5,!81&:3'91&:3(<5)93':3':3'70$7/#70$80$7/#6-!7.#:1%=5);3':1&:2&;2'6."6/#:3':3';3'81%;2&9/#9/#:0$8."90$8.#8/$6-"7."7."5,!2)4+ 90%70$80%92&81&81%81%<5):3'71%92&6/#92'70$82&81%6."4, 7/#7/#7/#80$7/";3&:2%80#91$:2%:2%:1%=4(<3'<3'<3':1%:2&91%8/$80$80$6."80$;2'90%6.#6/#81%92%82%81%81%92&:3'!!!###!!!!!!!!!!!! !!!""""""!!!!!!!!!"""###""""""$$$###$$$&&&%%%######$$$''''''%%%$$$%%%%%%!!!!!!###!!!!!!"""!!!!!!######""""""""""""!!! """###"""""""""!!!"""""" $$$%%%!!!$$$%%%$$$%%%%%%%%%###$$$"""$$$######"""!!!""""""!!!"""%%%###"""""" !!!!!!###$$$#########%%%&&&%%%%%%%%%&&&&&&&&&%%%&&&''''''&&&&&&&&&%%%$$$"""!!!"""!!!!!!!!!!!!!!!""" """###$$$"""!!!!!!"""$$$%%%%%%$$$%%%%%%######""""""######  !!!""""""""""""###"""###""""""""" !!!!!!!!!""""""!!!!!!"""  !!!8/$7."3+4+ 3*6-"80$:1&91%6/#6."6."7/#91%5."3, :2&:2&80$4-!5-"81&:2(5.#1*92':3(6/#4-"5."91&8/$2*3+ ;3(:2'4-"6/#:3(:3(81%3, 3+ 91&=5*<5*90%6.";2&>5)8/#5, :0%<2'6-!7.#;2&8/$3*80%;3(5."92%<5)92%3,4,7-!6,!9/$;3'90$4, 91$>5)91%6."=5)?6*;3'80$:1%>6*<3':1%;1&:0%;1&>5*>5)90$8.#;1&=3(=3(;1'7.#5,!2)7/#80$80$<4(>5)8/#:1%:1%90#:1%90#7.!8/#:1$<2'<3':1%:0$:0#90#:0#9/"9/"=3&>4'<3&<3&>5(<3&<2%B8+=4'?7*B9-<4'=5(B9,@7*91$:1#=4&:1#=4&?6(=4&<2%=3&>5(<2&;2%<3'?6*?6*:1%<2&>4'E;,  ! " !   - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  F<->5(:1$<3&>5(;4&82%70#4, 5, 5-!0(0'4-"6/$5/%6/%6/%D- B,?)D,='=)=+8(8';*>(D(A):(9&<$>%;#9$:&9&6#7%:'>+7$136"3/./21-/ . -+)% ''()# %$!      -   -   -         - - -  -   -     -  -  -   -  -  -   -        -    -   -       - - -   -  - - - - -.%-#* )!( *!0(0(0'1)1)4, 6-"3*1(4+ 6-#4+!2)1(4,"5,#3* /'0(3*!3+!2)2)5,!5,!3)2)3*3+7/#5-!4, 5-"6."80%90%5,!4+!7/$8/%7.$6.#6."91&:2'81&:3(<5*93':3':3&70$81%91%90$8/#6-"7.#:2&=5);3'80$:2&;2'80$80$91%92&;3'80$;2&8/#:0$7-!3*6-!8/#8/#7."7.#7.#4+ 2)5, :2&80&:2'81%92'92&:3'>7,92'6/$60%3,"81'92(60%7/$6."6-"8/$6."7/#8/#80$;2&:1%80"91$:2$:1$:2%;3';3'<3'<4(:2&;3';3':1%:1%:1%6."91%;2':2&70$81%81%81%92&92&:3'<5)81%92%5."60#"""###!!! """!!!"""$$$$$$""" !!!""""""$$$$$$###%%%###%%%&&&%%%$$$###$$$%%%%%%$$$!!!###$$$#########!!!!!!!!!""""""###"""!!!"""!!!"""""""""!!!!!!"""""""""""""""######%%%$$$%%%###$$$&&&$$$$$$''''''%%%&&&%%%###"""!!! !!!!!!###!!!""""""!!! !!!""""""&&&%%%$$$$$$&&&&&&%%%###%%%'''&&&$$$%%%&&&'''&&&&&&%%%$$$$$$###"""!!!""""""###""" !!!"""!!!"""$$$$$$"""!!!!!!"""$$$$$$######$$$$$$###"""###"""!!!""""""  !!!#########""""""!!!"""###!!!"""!!! """""""""!!! !!! !!!6."8/#7.#7.#5, 1(7.#90%91%91%7.#7/#7/#80$:3'6."3+70#81%70$4-!5-"91&;3)5.#1*81&92'6/$6.#7/$:2'90%2)3+ <4);3(5."7/$:3(:3'81%4-!4,!:2'>6+=5*91&6-":1&=4)8/#5, ;1&<3'6-"7.":1&7/$3*80%:2'5."92&>7*:3'6."7."7-!4*7-":1%7/#4-!91%=5)91%6."=5)?7+<3'90$:2&>6*<4(:0$90$90$;1&>5*<3(90$90$=3(;1&;1&;1&90$7."2)7/#80$91%=4(>5)90$91%91$90$;3&;2&7/"8/"91$;3';2&90$8."9/":0#;1$:0#:0#>4'?5(<3&<3&?5(=4&;1$A8+=4'@7+B:-=4(=4(@8+A8+>5(;1$=3&;2$=4&?6(=3&;2$=4&>5';1%8/#:2&?6+>5*90$<2&?5(D:+      "!" ! - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  C:+>5(<3&=4'>5(:3%81$60"4,5, 6."1)0(3,!71&71'D. B,@*E-A+;';'<):* :* =)?&>%='=(>'>%@'>%;"=':':'7#6#8&6#4!23, -1.13 3!/!*)*)'%'&'(" %$!  -   -    -    - -      -  - - -      -   -  -  -     - -     -  -  - - -  -  -  - - -     -      - - -  - -2) 2(0%.#+!)!*")!/(.&0(2*1)3+6-"2*1(5,"7.$3* 3* 3* 5,"5-#3+!0(3* 5-#5,#2* 3*5,!5,!4*3*4, 3+6."5,!3+7/$7/$80%90%6-"6-#90&90%6-#6-#6.$91&:2'81&:3';5):3':3':3'70$80$:2&:1&90%7.#7.#:2&<4(;3'6.":2&;2'6."91%91%91%;3(81%;2'7-"8/#9/$7."90$90$8/#6-"6."8/#3*1(6.";3(;4*91'91'92(80&;4)>7,70&5/$5.$1+!6/%71'4.$6.#6-"7.#90%7/#80$6."8/#:1&91%80#8/#80#;2%<4':2&;3'=4(=5);3';3';2&:1%:2&:1%80$80$;2';3'81%:3'92&70$81%:3';4(<5(:3':3'5."4.!6/"6/"  !!!!!! !!!!!!%%%$$$###""""""###%%%$$$######%%%%%%$$$$$$$$$%%%%%%&&&&&&###"""###$$$$$$######!!!!!!""""""######### """### """"""!!!"""""""""############%%%%%%$$$$$$$$$'''%%%%%%&&&%%%$$$&&&'''%%%""""""!!! !!!!!! !!!"""""""""###############$$$%%%$$$%%%&&&%%%$$$%%%&&&%%%######$$$###$$$%%%%%%##################$$$""""""###!!! """#########"""!!!!!!"""$$$###$$$!!!"""###$$$$$$""""""""""""!!!  !!!$$$$$$###""""""""""""###!!!"""!!!!!!!!!"""""""""""""""!!!!!! !!! !!!6-"6-"7.#7."6-"3*1(6-"90%91%91%90%80$80$91%;4(6/#5-!80$;3'70$5-!5-"91&<4)5-#1*81&91&70$5-"4-!:1&8/$1(5-!=5*:3(5."70%:3(;4(92'6.#5-":2'>6+>6+:1&6-!:1&=4)90$5, ;1%=4(7."6-";2'8/$3*91&:2'5.!92&>7+;4'7/#:1$7.!5+7-":1%7/"6.":1%>5):1%7/#<3'>6*;3'80$:1%?6*>5):0%9/#8/#;1&>5*<3(8/$8/$?5*90$;2&;2&90$8/#4, 8/$:2&:2&=3'>4(:1$:0$90#:1$<3'<2&7."8/"8/#:1%:2%90$7.!;1$<2%;1$;1$;2%>4'?5(;2%<2%@6)>4';1$A7*=4'@7*B9,>5(>6)A8,@8+>5(<3%>5'<3&<3&?6(=4&;1$>6(<4&90#7."90%>5*=4)7-"90$?5)A7*    " "  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _Q<@7)>5(?6)?6)?6):3&82%70#5- 7."8/$0(0(3,!E. B,@*F. C-@,9'8%9'7(:(='?(<'9$;'A)B)C+A)<$<$;%:&9&8%7%6$5"4 - , /3 4!6#4"1 0*%((($ %''# # -             -   -   -  - - - -              - - -   - -   - -  -  -   - - -  -             - -   - -    .&0(2) 1(0&.$* *",$)".'-&0)2+1*4, 5,!3*1(4+ 5+!4+!3* 2)4+!4,!3+!2)3* 6.$5,"2)2)5,"6,!5+ 5, 5, 1(4+ 6."4+ 7/$7/$7/$80&7.$7.#90&:1&7.$5-"7.$:2':2'91&:3';4(93&92&:3&81%80$:2&:2&80$6-!7.#:1&<4(:2&5-!;2';2&7.#:2&:2&:2&;3'81%;2&6."90$8/$6-"7/#7.#6-"6."7/$5,!1(1(5-"91&80'70&7/&:2(:2(:2);4*5.$4-$3-#1* 3,#3,#1*!3+!5-#7/$:2'80&91&7/$7/#91%80$90%7/#7/";3&;3&:2&;2&=4(=5);3';3';2&:2&:2&:1%90$7/#:1&;2&80$:3':3'6/#82%=6)=6*<5)<5(;4(6/#5."70$70$70$4, 7/" !!!""" """!!!#########$$$$$$###!!!###$$$$$$$$$#########"""###%%%$$$%%%%%%%%%$$$!!!###%%%$$$"""""""""######"""!!!!!!"""""""""###!!! """!!!""""""############$$$###%%%&&&&&&%%%%%%$$$&&&&&&$$$######$$$&&&%%%""""""!!! !!!  """!!! """"""######$$$###""""""%%%%%%$$$&&&&&&$$$$$$%%%%%%%%%$$$############$$$$$$$$$###$$$###############"""""" ###$$$###"""!!! !!!"""!!!!!!""""""############!!!""""""""" !!!  """#########""""""$$$"""!!!###""""""!!!"""######""""""""" """ !!!!!!!!!4+ 6-"6-"6-!6-"6-"4+2*5,!91%:1&:2&:2&91%91%80$;3'7/#5-"91%<4(80$4, 5-"81%;3(5-#2*81&92&7/$6/#6/"80%90%3+ 7.#<5*:2'5.#70$92';4)92'6.#5-"91&>6+=5*80%5, :1%=4):1%5, ;1%=4)7."6-"=3(90&4,!:2':2'5.!92&>7*:3'8/#80#8/"6, 8/#;2&80$5-!80#=4(:2&80$;3'>5);3'80$90$?6*?6*<2';1%8.":1%>5*=4)8/#8/#?6*90$=3(=3(:1%:1&7.#80$91%;2&;1%=3':0$8."8/":0$;2&;2%9/#8/#8.":1$;1%;1%8.":1%7-!;2%90#:1$=3'?5(<3&<3&@6*>4(;1$?6)=4'@8+B:->5)>6)A8+?7*<3&;2%>5(=3&;2%?6(?5(;1$=4&;3%90#91%;3'>5*<3(5, 7."?5)?5(XJ7  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   D:+=4'=5'?7*@8+@7*:2%81$6/"5- 8/#90%0'E.!B, A+C+C-@,<*7&6%6&6$9#;%<(<*9':$>'B*B*>&<$=%>'='=);':'6$4!1, , /5"4"3 2 2 0.*&&$#! ! -%%           -  -  - -     -     -  -   -     - - - -   -           -  - - -     - -         -  - - -    3+"2*!.&/'2) 1(2(.$+!*",$*"-%-&0)2*1*4-!3+ 3+ 1(2(4* 4+!2)1)3+ 4,!3*3*3*7/$6-"4+ 2)6,!6-!6,!6."4, /'3+ 90%6-"7/$8/$90&90&7.$7/$90&:2(7.$6.$80&:3(:2'91&:3';5)92&82%93&92&80$91%91%7/#5,!91%;2';3'8/$5,!;2'90%6."80$81%;3'<4(70$;3'7/#80$7/#6."80%8/$5-"3+ 3+ 3+ 1)2*5-"7/%4-#3,"7/&80'4-$2+!81(1* 0)0) /(2+"/(-&/'2* 4,":2(80&70%7/%6/$91&6.#6/$80%80%91%:2&;3'<3'>5)=5):2&;2';3';2&91%:2&80$7/#80$:1%70$:3'92&5.":3'<5(<5(<5)=6*:3&5."5/"81%92&81%8/#5-!6-"4, 5-! """!!!######"""###$$$$$$$$$$$$"""######"""""""""$$$%%%%%%$$$&&&&&&%%%$$$""""""######"""!!!"""######""""""!!!$$$###"""######""""""#########$$$$$$###$$$$$$&&&&&&'''&&&%%%%%%%%%&&&&&&############$$$###""""""!!! """ !!!"""!!!"""$$$"""$$$###!!!"""###&&&%%%&&&&&&$$$$$$$$$$$$$$$#####################$$$#########""""""$$$######"""!!!"""$$$$$$"""!!! !!!!!! ###"""###$$$!!! !!!"""""" !!! """ !!!!!!"""######""""""!!!!!!"""$$$###!!! !!!###""""""###!!!"""###  !!!3*5,!5,!5, 6-"6."7."4+ 4+ 6-!:1%:1&:1&:1&91%91%8/#:2&7/#5-!80$<3'7/#0(3+ 7/$92'6.#3, :2':3(81&70$70#90%8/%4,!80%<4)92'5.#70$92&;4)81&6/#5-":2'?7,=6*:2&7.":1&=4(90$6-!<2'=4)7."7.#<3(90&5,!91&91&5/":3&>7*;4'8/#6-!8."7-!8.#<3'91%4- 7/#=4(;3'91%<4(>6*<3'80$7/#>6*?6*=4(<3'8.":1%?6+>5)8/#8.#=3(;1&>4)=4(;2'<3'7/#80$90%91%:0$<2&90#8."90#<2&=3';1%90$8."6- 90#90#:1$90#;1%7-!9/#7.!90#<3&>4(=3'=3'?5)?5);2%>4(>6)B9,C:.=4(=4(@8+@7*;2%:1#>4'<3%;1$?6(>5(90#<4&<4&80#:2&=5*>6+:2'4+!6-"=3'<3&D9*    - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - -    B8)=4'<4&>6)?6)=5'70#81%81%5, 7-"E/"C- A+A)A*C-!=)6%6&6&7&8$9!9%9'8(;&<%;$?(>&8!:#?(>(<'=);(;(6#4!.+ /125#3!.-+****%! $#! ""    -        -    - -    -   - -     -  -   -   - - -         -   -  -  -           -  - - - - -    - -2+"3,"1* ,$-%0(1'2'.$,"+#-%,$.'/'1)2*2*6."3+1)/&0'3)3*1)2)5,!6-"3+ 3+3+90$7.#4+ 2)6-"8/#8/#8/$5-!0'3+ 7/$6.#80%80%:1&:1&7/$7/$:2';3(8/%7.$91&;3(:2'81%:3(=6+92&:3'93&92&91%80$90%80$7.#:1&<4(;2&7."4, 91%8/#3+ 6."92&;4(;4(80$91&6.#6.#6.#6.#80%80%6.$4,!4,!2* 0(0(2*4,"1) 0)1* 3+"3,"2+!0),$*#+$*#,%,%,%.&1)2* 6.#3+!4,"6.$4-"7/%6.#6.#81&6/#;3(<4(;3';3'<4(<4(:2&;3':1%:2&91%;2&80#6."91%:1%7/#:3'70$6/";4(<5(;5(<5)<5):3'6/#6/#81%;4(:2&7/#6-"7/#5,!3+ 4,!4,! """"""###"""""""""###$$$%%%%%%###%%%%%%###""""""$$$%%%&&&$$$###%%%&&&%%%###############!!! """###"""###"""""""""$$$$$$""""""!!!!!!###$$$$$$###"""""""""%%%%%%&&&%%%%%%'''%%%$$$$$$###$$$$$$!!!$$$""""""###"""  !!!""""""######""""""%%%$$$$$$%%%%%%$$$$$$#########$$$###$$$$$$"""""""""###""""""""""""""""""""""""###""""""###"""###$$$###"""!!! !!!### """### !!!!!!""" !!!!!!!!!""" !!!"""############""" !!!"""""""""### """"""!!!!!!"""$$$######!!!7.#3*3*5,!5,!4+ 6-!7."7."5, 4, 6-!91%90$90$91%90$90$90$<3(90%6-!90$=4(7/#.&4+ 80%:2'6.#4,!:2';3(92&71$81$8/$7.#5-"91&<4)91&5."80%;3(<5)80%5-"4,!91&?7,=6+;2'90$;2&=4(:1%7-"<2'<3'6-"7.#:1&8/%6-"91&81%5.":3&=6*:3&7/#8/"8."8."8."<3':2&5."8/#=4(<3'91%=4(>6*;3'80$6-!>5)>5)=3'<3'8.#:1&?6+>5)9/$8.#;1%<2'>4)>4)<3';2'6-"80$91%8/$:1$<3&:1$90#:0$;2%<2&;1%90#7-!6- 9/#90#90$90#:1$8."8."7.!90#<3&=3'=3'=4'>5)>4(<2&>4(=4(@8+C:.>5)>5)B9,@7*90"90"=4&91"91#=4(=4(8/";2$=4(90$91$>5)?7,:1'5,!7.#;2&<2&A7) !   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  XI5>5'=4'=4(>5(<4':2$4-!70#80$F/"C.!B, B,A+@)?)<'8%8'9';&<%9%9'8(;(=';#:#:#;%8"9#=(?)=(=(<)7$3 /, -24!3!4"4#0/-(' ((*$"#"""   -  -         -    - -   -  -  -   - -    - - - - - - - -    -  -  - -   -  - -    - -           - - - -    -1*!1*!2+"3+"1) ,$,$0'0'0&-#-#,%.&.&1)0)0)2+ 2+6."5,!0(/&1(4*3* 1)1)5-"7/$5-"4,!4+ 8/$7."4+ 1(6-!8/#7.#7.#6-"1)3+ 7/$6.#7.#90%;3(;3'80$8/$<3(<4(90%7."90%;3';3'81%;4(?8+92&:3'93&:3'92&80$90%90$8/#8/$<3(;2&80$5,!8/#5-!2*5.";3';3':2&80$80&6.$5-#5-"4,!4,"5-"4,!2+ 0(/'1)+#,%-&&2* 5-#wvuuusqqolljeecggfppovvu|{{3,"4-"2*2*0(1)/(0(1)3+ 2* 4,!4,!7/%6.$92';3(;3'<4(=4(:1%80$91%8/#:1%;2&;3'8/#7/#:1%91%70#;4'70$6/#92&;4(;4(<5)=6*;4(6/#6/#:3'92%91%6."7/#91%6.#3, 4,!5."3+ 7/$7.#!!!  ######""""""%%%###"""%%%$$$$$$&&&%%%"""!!!"""#########$$$###$$$%%%%%%###"""#########""" !!!""""""""""""######"""!!!%%%$$$"""!!!############ !!!###&&&&&&(((&&&&&&%%%%%%%%%###"""%%%%%%$$$$$$###"""""""""    ######!!!"""!!!"""$$$%%%###&&&%%%############%%%$$$"""######"""""""""!!!!!!!!!!!!!!!!!!!!!"""######"""!!!"""!!!"""""""""!!!!!!!!!  !!!"""###"""!!! """######"""!!! !!!!!!!!!!!!""""""###""""""""""""!!!!!!""""""###$$$######""" """######"""!!!90%6.#2*3*5,!7."5, 6-!7/#7."5, 4+7.":1%90$90$91%7/#80$:1%=4):1%6."91%>5)8/#.&4, 91&:2'7/$5-":2';3(91%80$81%90%7.#6-"91&;3(80%4-"81&<5)<5*81%5-"4,!80%?7,>6+;2&:1%<3(>5*;2&8."<2';2'6-!7.#;1&90%7/$92'91&4- 81$>7*:3&80#7."8."9.#8/#;3';3'6."90$<4(:2&80$<4(>5);3'90$5-!>6*?6*<2';1%9/$:1%=5)>5):1%8.#:0%<2'=3(>5)=3(:1&4, 7."90$8/#:0$<2&;1%:1$;1%:0$;1%:1$8/"7.!7-!90$;1%8/"7.!:0$90$90#8.":0$<2&=3'=3'>4(>5)>4(=3'>4(;3&>6(B:.=5)<4(@7+@6*9/"9/!?6(90"80";3&;2&80#;3$<3'8/$90"=4'>5+:1&6-#:1$<3%=4)>5*  - - - - - - - - - - - - - - - - - -  -  ?4%;2%?6)?6)>6)<4'80#4- F/"D.!B, C-!C- B,!@*<&:%;);+!=( ?'>):(8(:(=(A)?'8!9"8":$:%<'=(=(=(:'4"0-+ ,03!6$3!3"2 -,**,(&&$#   -    -  - - - - - -   - -       -            - - - -     -  - - - -   - -       -          -  - - - -  -2*!3,"1* 0) 2+!3,"1) -$-%/'/'/&.$.$-$-%.&0(0(0(3,!2*2+5, 1(/&1(3)4+ 2)1)5-!7/$6.#5,!5,!8/$7.#6-!2)6-!7."4+6."6.#3*3+ 8/$6.#6.#91&<3(<3(80%80%<3(=4)91%7."91%;3';3'80$;4'=6*82%92&:3':3':3'91%90%80$7.":1%<3(<3)90%6-"7/#6."3, 6/";3';4(:3'81%92'6/$3+ 3+!3,!3+ 1*0(-%2+!/'( srqrrpqqouusttrrso{|x}}{wwutusrrqqqpnomllk( *"*"+#0(2* 3+!5-"6.#80&91&:2&91%;2':2&:2&90$7."91%;3';3'7/#80$;2&:2&81%:3&6/#6/#92&;5(<5)<5)<5(:3'71$92&=6*:3&92&91%91%92&70$5-"3+ 4,!6.#7/$5-"6-"6-!2)7."!!!  $$$$$$!!!"""%%%###"""###"""$$$$$$######""""""###""""""############%%%$$$"""###$$$###$$$#########$$$###"""###$$$###"""###""""""!!!!!!!!!"""###!!!!!!"""###$$$###%%%%%%%%%%%%&&&$$$######&&&&&&###$$$###!!!  !!! !!!$$$$$$$$$$$$###$$$%%%%%%############$$$$$$$$$%%%%%%######"""""""""###!!!!!!!!! !!!!!!!!!!!! """"""!!!!!!!!!!!! !!!""""""!!!!!!"""###"""#########""" !!!$$$###"""  """"""!!!""""""""""""###"""#########!!!!!!""""""######!!!!!!######"""""" 80$91%7."2*3*5,!7.#6-"90%7."6."4+4+7/#:1%90$:1%:2&6."7/#90$;2&90$6.":1&=4(80$1(4, 80%:2'80%6.#;3(<4(91%70#80$:1&8/$7.#91&;3(70$4-"81%;4)<5*92'5-"3+ 80%?7,>6+:1&90%<3(?6*<3'8.#<2&:1&5,!6-":1&:0&7/$91&81%4- 70#=6)<4(90$7.!9/$9/$7.":2&;4'7/#90$;2&90%7/#<4(<4(;3'90$7.">5)>5);2&:0%:0%:1%<3'>4);1&90$;1&<2'=3(>4)<3':1%4+4, 80$90$<2&<2&:1$:0$<2&9/#:1$:1$9/#8/"7.!;2%<3&8."7-!:0$;1%:1$8/":1$;2%=3'=3'=3'>4(>4(=4'=4':2%=5(A9-=4(:1%=4(>4(8/!8/!A8*91"91#;2&8/#8/"<3%<3(8/$80"=5'>5*90%6-#90#;2$<3(>5*WK8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    :0#:1%@7+>6*=5(<4(F/"D.!B- D/#D-!C,!C-"?);&9':*!<(>&?(>*<+;';'='>&>'<%8"8"<&=(<(<)9&7%8&4#-) -.--1 3"0//++*('&&%%#      -        - -  - - -     - -       - -     -     -  -   -     - -       - -      -     - - -  1) 3,"4,"3+"2+!3+"3,"4,#1) .%.%/'/&/&0&/%-%.%.%.&.&/(3+ 1*2*6-"3+0'1(3)4+ 2*2*6-"7.#5-"5,!6-"90$8/$6-"3*6-!7.#3*6-"6.#3+ 2*7.#5-"5-!91&;3(<4)80%80%;3(<4)90%7.#:1%:2&:2&7/#;4'>7*92&81%:3';4(;4':2&:1&90$8/#:1&;2':1'6.#6-"80$92&6/#5.!81%:3(91'92'92'7/%3,!4,!3+ 0(,$5-"\\[lmjrroturrrpttr{{ztttgggaaaccckkkȢ{|yiigcda^^]VVU``_ddc,$.&3+!4,"6.$80&90%90%;3'7.#5, 6-!7.#91%;2';2&8/#80$:1%80$5."93&92%60#92&<5)<5):3';4';4(81%92&=6);4':3&:1%91%92&80%4-!4,!70$91&6.#7/$5-!3*4+5, 1(0(4+"""!!!!!! ###"""!!!!!!$$$$$$######!!!###$$$"""""""""############"""""""""""""""###$$$$$$%%%$$$$$$&&&$$$$$$###"""!!!"""$$$$$$"""!!!!!!"""""""""""""""""" !!!###$$$###$$$%%%%%%%%%$$$$$$$$$######%%%%%%######!!! !!! !!!###""""""$$$###%%%%%%$$$###$$$%%%%%%############$$$###$$$$$$$$$###""" """""""""""""""""""""###""" !!!!!!!!!""" !!!""""""""""""#########"""!!! """"""!!!"""""""""!!!!!! """###"""!!!######!!! """"""######!!!""""""""""""###"""!!!###"""""" !!!"""70$91%91%8/#4+2*5, 7.#8/$7.#8/#6.!3+4+ 8/$;2'90$;3&:2%6.!6."7/#80$8/#5-!91%:2&80$3+6-"91&:2'7/$6.#;3(;3'80$6/#7/#90%8/$6.#80%:2'6/$4-!81%<4)=5*;3(5-"2*80%@8->6+90%8/#;2'=4(;2&9/#<3';2'7."6-"90%90%7/$91&92&4- 6/#<5)=5)91$7.!:0$9/#5, 90$;3'80#91%<3'91%6.";3'<3';3'91%80$>5)=4(;1%;1%;1&;1&;1%=3':0$9/#<2&=3'<2'=3(;2&90$4+5-!:2&90$;1%:1$8/#9/#<3&8/":0$;1%90#9/#8/"=3'<2&9/#8.";1%;1%:1$9/#;1%<3&=3'=3'<2&>4(>5(=3'=3':1$;3&@7+<4(<4(@7+@6*90"7. @8*91#<3%=5(91%90#;3%<3(7.#7/!>5(>5*7.$5,!90#<3%;2(>5*D;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    YK78.":1%>6*=4)<4(D.!C- D/$D0$@)>'@*=(:'8'9&;#>&?*<*>)>):%9"9!9"8"7"6"6"=)>+=*:'4"3!2!,*-000/.-*+*))'%$ # &%$#   -        - - -        -     -   - -         -           -    -   -       - -  -  - -  1)5-#2+!4,"4,"3+!4,"5.$4,"3,#2*!/'/'0(2)0'0&/%.%.&.&/',%.&0(0(3+ 6."3*0'2)4*4+ 2*2*6-"7.#6-!5, 6-"8/$7.#5, 3*6-!8/$5,!5-"6.#3+ 1)5-!5-"5,!90%:2'=4)90%90%<3(=4):1&8/#;2&;2':3'70$;4(?8+:4'93&;4(;4(;3':2&:2&80$8/#:1&;2(;2(8/%6.":2&81%5."70#81%91'70&81'92'5-#2* 2+ +$&ffcffdfgejjjfff___\\\[[[``````]]]WWWRRRVVVOOOLLLOOOPPPVVVYYY^^^```___ddduuu}}}mmjYYVWWVddc5.#/'0)3+!6.#6-"6."90%7/#5-!5-!6-"90$:2&;2&80$90$:1%90$5."81%92&70$92&<5(;4(81%:3'>7*92&92%;4(;4(;3';3':2&92&70$5-"7/$80%6.#6."8/$7."6-!6-!4+ 3*1(2)3+5, 2)/&"""###""""""!!!!!!""""""######$$$$$$$$$$$$"""!!!!!!!!!"""######$$$###!!!!!!!!!"""$$$%%%%%%$$$###$$$###""""""""" """$$$### """"""######"""!!!!!! """!!!######$$$$$$$$$$$$$$$###$$$%%%$$$######!!!  !!!!!!##################%%%%%%######$$$%%%###$$$$$$%%%%%%%%%#########!!!""" !!!""""""!!!"""#########"""!!!"""!!!!!!!!!!!!  !!!""""""######"""###"""!!! """ """!!! !!!"""!!! !!! !!!!!! !!!!!! ### !!!""""""###"""!!! """6.#4, 6."70$7/#80#6-!3+5,!7.#8/$90$:1%80#5, 3*7.#<3(:1%;3&:2%7/"6."7/#90%90%6."5-!:2&80$4, 6.":2':2&6.#5-"91&92&7/#6."7.#8/$8/$6-"7/$;3(70$4-"81%<5)=5*;4)5-"1)70$?7,>6+80$7.":1&<3':1%9/$=3'<3(8/$6-":1&90%5-"7/$81%4-!6/#<5(<5(90$7-!8.#8-"5, 90$:2&7/#91%<4(:2&6.":2&<3';3'90$8/#=4(=4(:1%;2&=3(;2&;1%<2':0%9/#<2'<2';1%;1&:1%:1%5-!90$=4(90$90$:0%6,!:0$<2&8/#:1%;1%:0$90$8/"=3';2&:0$8/#;1%:1$90$90$<2&=3'=3'<3&<2&>4(?5)=3'>4(90#<3&@7+;2&;3'?6*?6*:1#90"@8*;3$<4&=5):2&:1$<4%=4)7.#6. >5)?6+8/$6-":2$=5'<3(=4)A8* - - - - - - - - - - - - -  - - - - - - -    -B7)8."<3'=4)D. C- A+F1&B,!;%>(@*<(8'8%9!;!>(?+ <'9%=(:%7"5346!9%7#8%=*:(9'2 ..++.0 /1!3$-,+(*)&&# $%&"  !   -   -      -   - - -            -     -  - -      -  - - -            -  - - - - -       - - -/'2* 1)6.$4,"3,!3,!2+ 4-"6.$4,"3+!2*!.&.%1(2)1'0'/%.%.&/'1)-%-%/'0(3+5-!2)0'3)4+5,!4+2)6-"7.#6-!4+5, 6-"6-"4+ 3*5,!8/#5,!5-"80%7.#2*3+ 4,!3+ 80%91&<4)90%90%<3(=5):1&7/#<3(<4(<4(81%;4(>7+;5(:3';4(:3':3'91%:1%:0$90$;1&<2'<3(8/$2*70$92&2+6/"60#81&6/%70%70%1)/(0(```ffe```aaa]]]QQQNNNLLLJJJHHHGGGLLLMMMJJJJJJDDDEEE======???FFFMMMPPPRRRLLLFFFHHHOOOUUU___\\\fffppp``]_`]llkmml2* /'2*4+ 7/$:2&80%5,!4,!6-";2&<4(;3'90$91%:1%80$5."93&<5)81%6/#82%<5)81%;4(>7+92&92%;4(;4(:3&91%80$91%80$6.#70$6/#4,!6.#7/#91%6-!3*6-"5, 2*2)2*6."6."2)0'6,!9/#3(######""""""!!!!!!!!!!!!######$$$$$$%%%%%%"""!!!!!!!!!!!!"""######"""!!! """#####################$$$""""""""""""!!!"""###""" !!! !!!!!! !!!""" """"""###""""""#########$$$%%%$$$$$$$$$"""!!!!!! !!!!!!!!! !!!"""%%%$$$$$$###$$$%%%$$$$$$$$$%%%###$$$###"""%%%%%%######"""""""""!!!!!!"""###!!!"""#########!!!!!!!!!!!!!!!!!! !!!!!!""""""######""""""###"""!!!###!!!!!! !!!     !!!  !!!!!!!!!"""######!!! 6.#6.#6."6."7/#7/#7/#6."4+ 6-"8/$8/#8/$:1%:1%7."4+ 8/$<3(;2&;3&:2%80#7/"8/#:1&:1&91&70$:3'7/#3+6.";3';3'7.#5-"70$81%6/#5."7/$80%8/$4,!7/#;3(80%5.#80%<5)<4);3(5-"0(7/$>6+=5*8/$7.#:1&<3';2&9/$;2&;2'7.#6-!:1&90&4,!6.#70$4- 6/#<5(;3'8/#7-!8.#8."6-!91%:3&80$:1%=4(<3'7."91%<4(;3'7/#7/"<4(=3(:0%<2&>4):1%:1%<2';0%7-"<2'<2':0$:0%:0$;2&8/#:1%<3'9/$90$<2&8/#;1&;2&8/#:0$:1%9/#:0$8.#=3'?5*:1%7-!9/#:0$8/":0$;1%<2&<3&<2&<2&>4(>5)=3'>5(7/!<3&@7+:1%<3'@7+A8,:1$90#?7(<3%<4'=4(:2&91#<3%<3(7."5,<4'?6+8/%6-";3%>6(>5*=5)?6( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   >4&7."E. C-B+D/#D.#A+?)?*?*<):&:#; =%@+;'8#:%8#@*9#2018$;(8%7$6#6#1,+,/.+0 2#2".*')+)*(&%" #"      -     -  -           -  - -    -         -       - - - -   -   -       -       - - - -3,!1)2* 2+ 2* 6.$4,"3,!4-"3,!4-"4-#3,"3,"2*!-%-$1(0'0'/&-$,#.%0'3+ 0(1(1)1(3+5-!2)0'3*5+ 6-!5,!3*6-"7."5,!3*3*7."7."5,!4, 5,!7.#5-!4+ 8/$80%3+ 4+ 6.#3+90%90%<3(90%80%<3(<4(80$6-"<3(<4(<5)91%:3'=6);4(92&92&70$92&90%90$:1%90$;2&<3(;2(8/$5,!5."92%1*4- 6/#5.$5.$4-"3,!+$-%dddaaaXXXQQQMMMFFFBBBAAABBBAAA???>>>@@@>>>:::;;;555:::444222999===@@@AAAEEEBBB???AAAJJJKKKNNNQQQTTTZZZYYY```ghemnlnnmqpp0(0(3+ 80&80%6.#3+ 3+ 91%;3';2'90$:2&;2&80$70$:3';4'92%:3':3'<5)81%;4'<5)70$70$:3&;4(;4';4':3&92%81$70$70$6/$5-"7/$7/#90%5-!4+ 7.#5, 2*3+5, 80$8/#2(5+ 8."5+ 2(4+6-!7/#8/$ """###"""###!!!!!! !!!"""######$$$$$$$$$######""""""!!!!!!"""""""""""""""!!!"""#########""""""###############"""!!!"""###!!! !!! """!!!!!!"""""""""!!!"""############""""""!!! !!!!!! """###$$$$$$$$$$$$%%%%%%$$$$$$%%%%%%$$$%%%$$$$$$###""" !!!######""""""!!!!!!""""""$$$$$$"""###!!! """!!! !!!!!!!!!""""""###$$$###""""""!!!"""#########"""!!!!!!!!!   !!! !!! !!!""" !!!!!!!!!""""""3+!6.#6.#80$80$:1&91%7."4, 3+6-!90%90%8/#90$90#7."5,!90%=4(;2&<4':2%80#7/"90%;3':2'80$80$;3'80$4+ 6-";2'=5)91%5-!80%92&6/$5."6."7/#7/$3+ 7/#<3(90%7/$90%<4)<4);2'6-"1(80%>6+=5)80$80$;3'=5)<3':0%<2';2'6-"5,!<3(:1'3+ 7/$70$4-!81$=5)<4(8/#7- 9/$9/$7.":1%;4':1%;2&=4(<4(7."80$=4(<4(7/#7."<3'=4(:0%<2&=3':0$:0%=2';0%5+ =2'=3(<2&<1&90$<2'8/#:1%;2&90$:0%<3'90$90$9/$7-"9/#90$7."8/#8/#<3'>5):0$6-!8/":0$8."9/#9/#:1$;1%;1%<3&>4(>4(<3&>5(90#<4'?6*;2&=4)@8,?7+;3&:2$<4&:1$<3'>5)<3'90";3%<3(7/"4,:1%=4)90&7.#=4&?6)>5+=4)>5(TE1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - -  `Q=E. C-C,E- C, C, A*A+A, @+ >)=%="=%?);'6!29$A+7"6!3, -18%;(8&4"2 0.*' ) /3#/ ,./($ &# (*(($! ##    !  - -       - -                   - - -  - -  -      - - -  - - -  - -  -     -      - -  -   - - -1*4,!3,!3+!3+!1)2*6.$4-"5-"4-"4-"4-"4,"3,"3,"2* -%-%0'/&/&.%-$,#.$0'5,!2)3*3*1)3+5-!3*1(3*5+6-!3*2*4, 6."6-!4+ 3*6-!7."6-!5,!5,!7.#6-"4,!7/$90%4,!5,!80%3+ 91&:1&<4)91&80%<4(;3(7.#5,!;3';3'<4(92%:3'<5);4'92&92%70#92&:1&90$90#:0#<2&<3(;2'7.$5-"80$7/$2+2+3,!2+!1*!.'2+\\\bbbSSSTTTHHHAAA???999666666777777555333444111...///222555555333555444999888999888666777;;;:::@@@EEEFFFGGGHHHKKKTTTaaanolopnqqp70$-&3+ 5-#5-#3+!4-"81&:2&;3'6-!<3&<3&91%80%;4(:3':2&>7*<5);4(5."92&<5)81%70$70$:3':3&:3&;4'92%92%93&81%6/#6.#7/$70$7/#7/#4+5, 4, 3+5, 7/#:1%80#4*7-!8.#6, 4*6-!6-"6."5-"3+ 5,!4+7." ###""""""""""""###$$$""""""###$$$###$$$############"""###$$$###"""""""""""""""""""""#########"""######""""""""""""""""""$$$$$$!!!  !!! """######""""""###$$$###$$$$$$###!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!"""######$$$&&&&&&$$$$$$$$$$$$$$$%%%$$$###""" !!!""""""""""""!!!!!!"""#########"""###!!!!!!!!! !!!!!!!!!"""######"""######"""""""""""""""###"""!!!  !!!!!!!!!  !!!!!! !!!!!!###"""!!!""""""!!!!!! """4,"2* 5-"6.#7/#91%<3(:2&6-!4+4, 6-"80$8/$6."7/"7."7."4+ 90%=4)<4(<4':2&91$7/#91%<3(:2&7.#90$<3(91%5, 6-!;1&>6*;2&4, 80%;3'80%5.#6.#7/$7/$3+ 6.#:2'91&90%:1&=4)<3(;2'7.#2*:1&?7+=5):1%90%<4(>6*:1&7/#;3';2'5-!4, <3'=4)3+ 6.#70$4- 81$<5(<4(8/#6- 9/$:0%8/#:2&<4(:2&;2&=5)=5)7/#7/#<4(<4(80$7/"<3'>5);1&<2'<3':1%:0%=2';1&5+ =3(>4(=3'=3':1%;2&8/#;3';2':0%;1&<3':0$8."8/#8."90$:0$7."7-"8.#;2&>4(:0$6, 6- 9/#9/#9/#8.":0$;2&;1%<2&>4(=4(<2&=4'8/"<3&?6*;3'=4)B9-?6*:2%;2&<3&;2%;2&>5*>5*:1#<3&=4)8/#5-:1%>5+<3(7.#;3%>5)?6+>5)>5'>3$ - - - - - - - - - - - - - - - - - - -  - -  E. D-D,H0!I0#D+A(>&>(A, A,!B)A%@&@(:&6!36!:%;%8"3/05!8%:(9'3"0/-*)+.0!0!-,)% !# -&&&&%&#"        - - -   - - - -            -      - -  -  - -     - -   -     - -  - - - - -    -     - - -   - - - -3,!1*2* 1*3+ 3,!2* 3+ 6.$5-#4,!4,"4,"3,!3,"3+!1* 1).&/&0(0'1(1(/%.$.$1(5,!3*3+ 4+ 2*3+5-!4+3)3*4*6."3*3*3*6-!6-!4, 4+7."8/#6-!5, 4, 6."5-!3+ 6.#7/$2*4,!80%4,!80%91&;3(91&90%=4)<3(7.#7.#;2'<4(:3'92&;4(=6*;5(93&92%70$:3';3'90%;2$<2%<2&;2'<3(91&7/%80$81&3,!3, 3,!/(,%2+ ___[[[PPPDDDDDD???:::222222...------......---//////---+++---///000000+++)))777888555333000+++...---555>>><<<>>>>>>@@@GGGNNNYYYgheopmppoqqp3,!0)1* 0(2+ 70%80%;3'80#;3&:0#90$92';4):1&<3'>5)=4);3'91&;4*<5+81&70%91%;4':3&81$92%92%92%81%81%81%7/$7/$81%6."8/#3*5,!6-!6."7/"80#81%5-!2(6,!:0%7-"5+ 7."7.#7/#5-"5-"6.#6."2).%,#1(3) """############$$$###!!!"""$$$$$$$$$$$$###$$$$$$%%%"""###%%%%%%$$$$$$$$$$$$"""""""""###$$$$$$#########""""""###""""""$$$$$$$$$"""!!!!!!!!!!!! !!!!!! """###%%%$$$###"""#########$$$$$$&&&### !!!###""""""""""""!!!"""  !!!"""""""""$$$%%%%%%%%%&&&%%%%%%############"""""" !!!!!! !!!"""!!!""""""""""""!!!"""   !!!######$$$"""!!!"""#########""" """"""   !!!"""!!!  !!!!!!!!!!!!!!!!!!"""$$$###!!! !!!###5.!4,"0(4-"7/#7/#;3'<4(90$6-!4+5,!6."6."5-!6-!7.!7."8/#5,!8/$=4(<4(;2&:2&:2%7."8/$;3':2&8/#90%<3'80$5, 6-!<2'>5):1%3+90%;3(80%6.#80%80%7.#4+ 6-"91&:2':2';2'<4):2':1&6."3*91&?7+>5*91%80$<4(=5)80$6.";2';3'5-!3+<3'>5*3, 5-"80%5."80%=5*<4)7."6-!8/$90$80$:1%<4(:2&:1%=5)>6*8/#7.";3'<4(91%7."<3'>5)<3'=3'<2';1%;1&=3(=3(7,!=3'>3(<2'<2&:1%;1&:1%=4(=4(90$:1%<2&9/#7-!8."8/#:0$:0$7-!6, 7-!:0%=3(9/#6, 7-!:0$9/#8/"8.":0$=3';1%;1%=3'<2&;2%=3&90#<4&@7+<3(<3(B9-=4(91$:1$<3&:1$;2&>5);2&80!;2%=4)7."7. <3(?6+<3(90$=4&>5)>5*=4(<3&;1" - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - -  - E. D-D-D+D,F,D+?&;#='@+ C+D)C(A)?)8#21:%?*9#41, 4 =):(6$7&//,+**-0!1"0!,+'% !" ))$$#""##  !   -  - - -             -       - - - -   - -     -         - -  -      - - -  - - - -   - - - -1* 4.#3-"2+ 3+!3,!3+!3+ 4,!4,!7/$5-"4,!4,"4-"3+!2+!2+!1) 3,"0(0(1)1(1(2)/&.%.$2(5,!3*3+ 4,!3*3*4, 2*3*3)4*6-!4+3*3*6.!6."6-!5,!8/$90$5,!4, 4+ 6."5-!3+ 6.#6.#2)5-"90%8/$;3(<4)<4)91&91&=4)<4(8/$90$<3(<3(91%91%<5)>7+;5(92&81%70$:2&;2'90$:1$:1$;2&;2(<3);2(7.$80%91'1*1+1+(!YYYZZZPPPJJJEEE===???999555///---++++++)))***++++++,,,+++***)))))))))******&&&)))111333111---+++)))******...444777;;;999888===FFFJJJTTT```ghemnlmml81&1* .'0)81&92&;3(90$<3'<3'91%81&:2'80$:2&<4(;3'91&91'<4*=5+91'81&:3';3';3'91%7/#6."6.#6/$6.$7/%6.$4-!7/#6."80$5-!8/#8/#7/"80$91%6."2*2)7-!9/$7-"6,!7."6-!6."6.#6.#6.#6."0(-$.%3*3)0&.%0'4+ """""""""###""""""$$$%%%"""###%%%$$$"""###%%%%%%%%%###"""###%%%&&&%%%%%%%%%$$$"""%%%$$$$$$%%%%%%$$$$$$###!!!"""###""""""###""" !!!""""""!!!!!!  !!!!!!######!!!$$$$$$""""""""""""###$$$%%%%%%###"""""""""###""""""$$$###""""""!!! """""""""###$$$%%%$$$###"""###$$$"""!!!"""!!!!!!!!! !!!""""""!!!!!!!!!!!!!!!!!!!!!!!!!!! !!! !!!###""""""###"""#########"""""""""#########!!! !!!!!! !!!!!!  !!! """"""######!!!""""""92&81%0*1)1*5-"7/#80$<3'<4(80$6-!4+5,!7."6-"7/#:1$90#6.!7.#5,!8/$<3(<3(:1%91$:2%6."7/#;2':1%7."90$<3(8/$5, 7-"<2'<3(8/#3*90%;3'91&6/$90%90%80$7.#8/$:2&:2&;2'<3(=5);3':1&6."3+ 91%?7+>5*91%7/#<3(=5)80$7/#<4(=4(6."4+ <4(<4(3+ 5-"7/$5-"7/$=5*<4(80$6."8/$80$7/#90$<3(:2&80$=4(=5)80$6.";2&=4(91%5, :2&>5)<3'=3'<2&;1%=3'>4(>4(7-"<2&=3(<1&:0%:0$;1&:1%>5)=4(:1%;1%<2&9/#6-!8."8/#8/#9/#6-!5+5, 90$<3'8."7-!90#:1$7-!6- 9/#90#<2&;1%;2%=4';1%:0$<3&90"<3&@8,<3'<3(A9-=4(80#91$<4'90#<3'>5):0$7/ :1%;2'7.!80">5*?6+;2(90$=4&>6*=4)=4(=4';0" - - - - - - - - - - - - - - - - - - - - - - - - -  - - -D. D-E-G.D*B)B)C*>%<$='A*F+E)A(?(;&5 14:%9$6!3/05!=*8&9(1 1!.-(' +.-/ ,(+*'# '-%" "#! !$"!  -   - -  - - - - -  - - -     -      - - -  -   - - -    -      - -           -  -     - -  - - - -3* 0(1* 2,!2,!1+ 2+!3*!3+!4,"6.$4,"80&6/$3,"4-#4-"2+!1* 3,"4,"4,"1)1)3* 2)1)3*0&0&/%1'4+ 4+ 4+ 4,!3+ 3+4+2)3*2)3*6-!4, 3*3*6-!6."6-!4, 8/#80$5,!4, 3+6-"6-"3+ 7.#6.#2*6-"80%80%:2&;3(:2'8/$80%<3(=4)90%90%<3(<3(91%91%<5)>7+<5)92&70$6/#:2&;3'91$:1$;2%;2'<3(<3);3)6-#70$6.#/(/(UUUXXXNNNGGG@@@<<<;;;:::888///,,,---...***'''&&&&&&((('''(((''')))&&&'''%%%'''$$$$$$&&&)))+++---''')))(((''''''***...111666444666===DDDDDDIIINNNQQQZZZdebhhgfff/(0)70%81&;3'91%:1%;3&81%80&91&7.#90$;2&;3'91&92'<4+<4*92'91':2&92&;3':2&80$7/#7/$5-"5-#6/$5-#3,!6.#7/#;3'6."7.":0#:0"9/"8/"6,3*6, 9/$:0$8.#8.#9/#7/#90$:2&7/$80$5."1(/&0'4*4*1(0'1)2)3*2)0'/&1(1(1(7-"1*  !!!$$$"""""""""###$$$$$$%%%$$$"""######$$$$$$""""""###$$$%%%%%%%%%%%%%%%%%%###$$$###%%%%%%$$$$$$$$$######$$$###"""!!!!!! !!!###"""!!!!!! !!!###$$$###"""!!!""""""""""""###"""###$$$$$$$$$"""!!!#########"""!!!######"""!!!"""###"""""""""""""""$$$$$$$$$$$$###"""""""""!!! """""""""######"""!!!  """ !!!!!!!!!"""$$$######"""###$$$###"""############""""""  !!!!!!!!!"""!!!""" !!!!!!"""""" !!!81%70$80%1*1*3+ 7/$80$91%<2'<3(90$6-!5,!7."8/$80$80$;1%:0#7.!6-!6,"8/$<3)=4(:2&80$;3&7/#80$;3':1%7."90$>4)9/$6,!8.#<2'=3(7."3*91%;3':2&80%91%91%91%80$91%<3(:2&:2&<3'=5)<3(:1&6-!2*90%?6*?6+;3'91%<4(>6*:1%7/#<3'<4(6."4, ;3':1&3+ 4,!5."3+ 6.#=4)<4)80$5-!7."8/$7/#90$;2'90$7/#<4(=5)8/#5-!:1%<4(80$4+91%=4(:2&;3'<3';2&>5)@6*<3'7.";1&=3';1&:0%90$<2';2&=5)=4(;1&;1&;1%9/#5, 8/#8/#7-"8/#7-!5+6, :0%;1&9/#7-!9/#:0$8."7-!9/#90#;2%;1%<3&>5(;2%:0$<3%8/!<3&@7+;2'<3(@8,=5):2%;3&<3'7.!<3'=4(:1$80!;2&:1&7.!90"?6+>5*90&7.";2$?6*>5+=4'<3&;1$SE2  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C-!D-E-K1J1B)?%C)F-A(=&>(B*F*B(>':'7$4 4 ;&8#:%14 , 15"6#;)4"0 02"+' )--()**+,,('*$  -## -##"!    -  - -  - - -  - - -   -  -      - -  - -          -       - -        -  - -  -       - - - -2+!4,!5-#2+ 2+ 2,!2,!2+!3,"4,"3* 4,"3* 5-#7/%7/%4-#3,#2+"1*!1) 3,"4,"3*!1)2)4+!4+ 2)4* 1'0'/%0'3*5,!4,!5,!4, 5-!4, 3+3*2)2)7.!7-!4+3+5, 7."6-!4+7/#90$5-!6-!4+ 6-!6-"3+ 5-"6."4, 5-!7.#7/$:1&<4);3'80%90%<3(>5*:1%91%<3(<4(92&81%:4'=6*;5):3'81$70$;3'<3(:1%:1$;2%;2'<3(=4*<3)6-#6.#5-!,$LLLSSSFFF@@@:::666777555444///---,,,***+++&&&$$$######$$$###$$$%%%'''"""$$$"""!!!!!!!!!$$$%%%&&&%%%$$$%%%###$$$"""%%%***222222333888===@@@AAACCCGGGNNNOOO\]Zdecaa`0)4-"91&;3(7/#6."7/#7/$91&:3'80$90$:1%:2&:2':3)<4+:3(81&80&91&91&:2&:1&8/$7/$80%6.#6.#6.$7/$6/$5-"6.":1&7/#7.!:0"8/!9/!90#6, 3)5+9/$;1%9/$8/#8.#8/"8/#:1$:1%7/"5-!3*0&2(5+5, 1(0'1(2)4+ 2).%.%2)0'/&1(/&1)-$+"-#0&2(3*5, 6-!7.";2'91&81&70&6/%5/$3-#2+!3,"2+!1* /( !!!###!!!#########$$$$$$$$$######"""###""""""###"""###$$$%%%%%%%%%%%%&&&$$$###$$$"""###$$$###$$$#########$$$$$$"""!!!"""#########"""!!!""" """###!!!######!!!!!!""""""$$$######%%%$$$$$$###!!! ###$$$######!!!""""""!!!!!!!!!###"""!!!"""""""""###$$$###$$$$$$###"""!!! """!!!!!!"""######"""  !!!!!!!!!###!!!!!!###"""!!!"""###""""""###$$$$$$###!!!!!!!!!  !!!"""!!!  !!!!!!""" ######### """70$7/$4-"4-!/(0)2+ 70$7/$90%=3(=4(90$6-"5,!7."90$91%80$:0#90"7-!6,!6,"8/$=4)=4(;2'91$<3&90$80#=4);3'8/#:1%>4(90$7-!8/#=3'>4)7."4+:1%;3'91%80$:1%:2&91%7/#:1&>5*<3(:2&<4(>6*=5);3'6."1)8/$>6*@7,=4);2&=4)>6*:1&7/#<4(=5)6."4, ;3'80%2*3+ 5-"2+ 6.#=4)=5*90%5-!6."7/#7.#:1%<3(90%7/#<3'=5)80$5- :2&<4(7/#4+90$<3':1%;2&=3'=3'>4)=4(;1%8.";1%<2';2&:1%:0%=3'<2&:0%=4(90$8.":0%9/#3)7."8."7-"9/#7."6, 7-!;1&:1%9/#7-!9/#:1$:0$8/"8.":1$;2%;1%<3&>5(<2&<2&>4'8/!<3&?7+;2&;2&?6+>5*=5)<3'<3&7.!<3'=4(:1$6-8/#90%5-8/"=4)=4)6-"6-!:2$>5*=4)<3&=4';0$@5' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   A,!D-D,K1 L2 G.?&@&D*D,B+?(@*B+?'=%8%7$4"08#?*=(24 13 7#6#7%2!///,*& )-+('')*(*)%&%##!   !     -            -  -     - -   -  -  -  -    -   -  - -             -    - - - - - - - - -1)2* 2* 4,"5-#2,!2,!3-"3-"2,!4.#3+ 3* 2* 3+ 5-"92'81'4-#3,"2+!3+"2+!4,#4,"3* 1(4+!5,"4+!4* 3)0'/&.%1(4, 5-!6-"5-!4, 6-"6-!4+ 3*2)3*6-!5, 3*2*4, 7."6-!4, 7/#80$6."6."4, 6."6."3*4+ 6.#6-"5,!7.#6.#80%<4(<3(80%7/$:1&;3(:1%:1&<4(<4(91%70$:3'<5);4(:3'81%70$;3'<3(90$90#90$90%91'<3);2)5-#4,!2*.'UUUBBB;;;666555222000///......///,,,(((&&&#########!!!"""!!!!!!###""""""$$$%%%$$$ !!!!!!$$$%%%$$$###""" !!!$$$&&&---......111444666;;;:::<<<@@@AAAFFF\\Zaa`7/$3,!80%91&6/#80%81%70%92'<5):1&:1%91%:2&:2';3);4*92(81&70%92&91&91%91%6."6.#7/$4,!6.#5.#7/$6.#5-"80$91%7."8/":0#:0"90";1$8."8.!7-!8.#;1%9/#7."8/#9/#7-!90$80#7.!4+2(0&2(6, 7-!2(1(4+4+4+ 3*0(/&5,!2)2)2)1'3*.%,#.$/%0'0'2*4+4+3*3*5, 6."5-!5,!80%6.#3+ 91';3)5."91%<4(92&81&81'5.$6.%:1'90&8/$7/$5.#4-#2+!2,"3-#1+ 0)1* 1) /',%!!!!!!###"""""" """#########%%%&&&$$$$$$"""###"""###$$$$$$!!!!!!&&&&&&&&&%%%%%%$$$###""""""############$$$"""#########"""""""""$$$$$$###""""""!!! !!!!!! """!!! """"""###%%%###$$$%%%%%%$$$###!!!"""%%%%%%###### """!!! !!!!!!"""!!! !!!"""!!!"""###$$$#########!!!!!!!!!!!!!!!"""######!!!"""###!!! !!!""""""!!! !!!""""""!!!!!!!!!!!!""""""###%%%%%%$$$$$$""""""  !!!""""""  !!!!!!!!!!!!"""######"""2+ 3,!3-"4-"1*.'/(3, 80%6.#80$=3(<3(90$6."6-"8/$91%:2&80$8/"7.!7-!6,!5+!8.$=3(<3'<3';2%<3'90#80#=5)<3'7/#:0%=4(:1%7-"8."=3'>5)8.#5, ;2&=4(80$80$91%:2&91%7/#:2&?6*<4(:1&<3(>6*>6*<4(7.#1)8/#?6+@8,<4(:2&=4)>5*90%7.#=4)>5*6-!4, ;3'80%1)1)4,!3+ 6.#<4)>6*;2'7.#7/#8/$6-!:1&=4(80$6.":2&=4(80$5, ;3'<3'7/#4, 91%<3'90$:1&=4(=3'=3(<3':1%8/#:1%<3'<2&;2&;1&=3';1&8/#<3'90$8.#;2&8."4*6-!6-!6-!8/#7-"6-!7-!;1&90$9/#7-!8.";1%;1%9/#8.":1$;1%;1%<3&>4(;1%:0$>5'8/!91#>5)90%:1&>6*>6*=5)90$;2&7."<3'?5*:1$4,8/#90%5-7/"<3(<3)6-"5- :1#>5+=4*<3&<3&;0$>3& - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - C,D,D,L2!J0F-C*C*D,A)@)A*A+@*<%8#8%5"13!:'<(<'8#5!0/12 3"/) ,++% '(*))*(''&'(%%%$"  ! !    -             - - - -    -   -   -   -  -     - -   - -  - -     - - -      - - - - - - -1*.&/'1)2* 3+ 4-"3,!3-"3-"3-"2,!4.#5-"5-"2* 3+ 5-#92'5/$3,"4-#5-$5.$4,#5.$5-$3+!2)4+!4+!4+ 5+ 2(.%/&/&2)5,!6."6."5,!4, 7.#6."4+ 4+3*5, 7."5, 2)2)5,!5-!6-"4, 7/#8/#6."5-!4, 6."7/#4+ 3+6.#7.#5-!7/#6.#80$=4)=5*91%90%<4)>5*:1&;2&=5)<4(91%80$;4(=6*;4(:3'81%70$;3'<3(91$80#7/#7/$8/&;2):1(4,"0),$XXXEED;;;666333111---&&&***+++''''''&&&"""!!!###!!!!!! !!!$$$"""###&&&###$$$""" !!! $$$###### !!!######***)))***---000///---222777777888<<5)<2&8."8."=3'>4)8/#5+ ;1&=4)90$80$:1%;3':2&8/#;2&?7+=5);3'<4(>6*>6*=5)7/#1(80$?6*@8,<3(:1&>5)>6*80$6-"<4(=5)5-!5-!;3'91%3+ 0)2*4,!5-";3(>6*<3(8/$8/#91%4, ;2&=4)7/#5-!:1%=4(90$4, ;2&;3'7/#6-!:1%<3'90$:1%>4)<3'<2'<3';1&8/#:0$=3(<2'<2';1&<2';1%8/#<2'9/$8.#=3'7."8."7."5+ 5+ 7."7-!8."7-!9/$8."7.!6-!8.":0$:1$:0$8.":0$:1$:0$:1$<3&;1%:1$<3&8/":1%=4(8/$:2&?6+>6*:2&4, 80$5, :1%=4(90#4,90%90%7. 91#>5*=4)7.#7.!;2$>5+=4)<3&=4';1%>3& - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    A, C+C+I/J0G-E+F-F-D,B+@)A*?(>';&5"4"2 16#:&;&8"5!5!1* 02!.,)*,&'*)$ %')(((&&'&$###"""    -      -      - - -     -         - -    -        -  -               - - - -   - - - - - -1* 2+ 3,!/(.&/'1)2+ 2+ 1*3."4/#3."2,!3-"5-#5.#2* 2* 6/$71&4-#2+!5-$6.%6.%4-#6.$5-#4+!3* 3* 4+ 4* 2)2(/&/&0'2)5-!6."6."6-"4, 5-!7."5, 2)3*5,!6-"4+ 2*2)6-!7.#7.#5,!8/$91%6."5,!4+ 5-!7.#5,!2*5,!7/$5,!7/$7/$8/$<3(<4)8/$7/$;3(=4):1&;2'>5*=5):2&81%<5)=6*;4(:3'81%70#:2&<3(91%80#7/$80%80':1(91(4+"0(3, NNN???555222...+++((("""&&&'''$$$###"""!!!!!!""" !!! """!!!"""###"""$$$ !!!!!!!!!!!!###(((&&&$$$"""!!!!!!!!!!!! $$$(((+++)))***+++***...000222444555CCCPPPYZXRRR0)4-"4-"5.$92'70%92'<4(<3';2&:2&:1&91&:2(:2):3)70%70%91%80$7.#6."6-!5-"7/$5-"80&6.$80%6.#7/#90%6."8/$<2%:0#9/!:0"9/#7- 7-!9/#<1&;1&9/$6, 6,!8."90#:1%:0%7."4*3)3)2(4*4*4*4*4*7."6-"5, 1(2)5,!3*1(4+4*1'-#,!/%1'0'2(4, 5-!6-!6."5-!5-!5-!4-!70#6.#3,!2* 5.$6/$7/%4,"2*7.#6."4, 6."8/$80&6/$6.$6.#4-"0)1)5.!70$4-"4-#6/%1* 3+"6-$4,"5-#3,"1* 2+!2,"2,!1+!/(/(/(.&,%+$ """###!!! ###%%%&&&%%%$$$$$$%%%%%%'''&&&%%%"""!!!###"""""""""$$$&&&%%%%%%$$$""" !!! !!!###!!!!!!!!!$$$###"""###"""!!!$$$"""!!! !!!!!!""" !!!###%%%$$$############""" """$$$&&&$$$!!!###!!! !!!!!!!!!!!!!!!!!!"""!!!!!!#########$$$""""""""""""!!!!!!"""!!!!!!!!!!!!"""!!!!!!!!!"""!!! !!!!!!""""""!!! """######!!!  !!! ###%%%%%%%%%######"""  """!!! !!!!!!!!!"""!!! """!!!!!!!!!91'7/%6.$2+ 3,!4-"4."1*0)0)4-"91%80$:1%;1&:0%8/#6-!8/#80$7/#7/#81$8/!5,4+4*2(6,"=3)<2';2'90$:1$:1$90$;2&:2&7.":2&?6*=4(9/#8/#=3(>4)8.#3*91%=4):1&91%;2&<3'<3'8/$;2'@7,>5);2'=4(@7+>5*>5*7/#1)91%>5*@8,=4):1&<3(>6*8/$5,!<3'<4(6."7.#<4(;3(5.#1)2*4,!4,!;3'?6+=4)90$8/$<4(5,!;2'>5*90$6.":2&=5):1%5-!:2&<4(90$7.";2&=4(:1%:2&>4)<2';2&<2';2&7."90$>5)<3';2&:1%;2&:0%9/$=3'9/#:0$=3'7.":1%90$6,!5, 7."7."9/$7-"7."7-!6-!7."9/#90#:1%:0$8/":0$:0$8.":0$=3';1%8/">4'90#;3&<3'6-!:2&@7+?6+:2&7.#8/#7.#:2&;3'8/"3+90$8/#6- 90$>5*>5*8/$6- ;2%=4*;2'<3&?6)<2&=2&UG5 - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - ?,!B+C+D+E,F-F,F+G,E,C+B+A)?)<&9$9$5#0-4"9&:&=)7!7 0.,02!1 --.& $ (+'$ %('(&'%##$#! ""          -  - - -    - - -    -     -   -  -   - -    -     -     -   -          -   -  - - - - 2,!0)1* 3,!3-"0)/(/(1)2+ 0*/)3-"4.#2-"1+ 5/$3,!4-"2+ 1)4-"6/$5.$4-#5.%5.%5.$5-#5.$5-#4+!3* 4+!5,!4+ 2(1'0'/&/&2)5-!6-!7."5,!4, 5,!4+ 2)1(2)4+ 5-!4+3*1(5, 6-"5, 4, 80$80$7.#6-"4+5-!8/$5,!2)5-!7/$5-"7/$8/$8/$;3(;3(80%6.#:2'<3(:1%:1%=5)<4):3'92&;4(=6*;4(:3'70$6/#91%:2&91%80$70$80'80'80'7/&0(*!QQQ===888222...((()))&&&!!!!!!"""!!!!!! !!! !!! """&&&$$$$$$######""" """!!!###&&&((('''&&&&&&+++,,,***///222666>>>HHHTUSRSS4-"0)2+!5.#81&70%:2':3'<3'<3'>5)<4(81&81';4*;4*6/%6/$80$7/#6-"4, 5-!5-!6.#4,"7/$7/%80%70%91&:1&7."5-!<2%:0#9/"<2$:0#7.!7-!9/#;1%:0$7-"4+8.#8/"7."90$90$7-!4+5+4)4*6, 6,!5+ 4*4+ 6-"6-!3*1(2)4+1(1(3)3)1(0&/%0&1'2(5+80$7."6-!7/"4, 5-!6."7/#81%7/$3,!2* 6.%81'80&5-#1)7.#6-!5, 7.#90%:2(80&6/$6.$6.$2*2+6/#92&5-#4-#70&1+!4,#7.%4+"4,"3+!1*!2+"/* 2,!0* .'/(1) /'-% !!!######!!! !!!$$$$$$%%%&&&''''''&&&&&&&&&$$$"""!!!"""""""""!!!###%%%%%%###$$$###!!!!!!  """###""""""######$$$######""""""""""""!!! !!!!!!###!!! """###$$$$$$###""""""###$$$$$$###%%%%%%$$$"""###!!!!!! !!! !!!"""""""""###""""""######!!!######"""!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!""""""!!!!!!!!! """"""!!! !!! !!! !!!###%%%$$$$$$######"""  !!!"""!!!  !!!######!!! !!!""" 6/$81&6/%6.$2+ 4-"4."3,!2+ 1+ 1*3-!7/#80$:1&;1&:0%7."6,!7.#7/#6-"6."80$90"6- 4*2(0&5+!<2(;2';2&8/"8/"90#90$<3';3&80#;2&?6*>4(9/#9/#=3(=4(7."3*91%<4(:2&:1&;2';2'<3(8/$<3'@7+<3(;2&=4)@7,=4)>5*7."3*91%>6*@8,<4(91%;3'=5)91%5-!;2';3'6."7/#=4);3(7/$2*2+ 7/$8/$=4)@7,>6*7."80$=4(6-":1&?6*:1%8/#;3'>5):2&6.":2&=5)90$6.";2&>5):1%:1%=3'=3'<2'<2'<2'7-"9/$?6*=4(;2&;1%<2':0%:0$=3(8/#<3';2&7.":0$;1%8/#8/#9/$8.#9/#7-"8."8."8."9/#90#:0$<2&9/#7-!:0$;2%9/#:0$<3&:1%9/#=5(91$<4';2&5, 91%>6*>6*91%6."7/#90$:1%:1%90#4,:2$80#4+!8/$>5);2(7-%2);2&=4);2';3%?6)=3&=3&C8* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -=+"@+A*A'A(B)D,D+G,E+D+B*A)?'<%9$8$4"2 2 -2 ;);(4 6!42-03"1 +-((% # **$ $'%#%'$! " " ! ! " !      - -    -   - -       - - - -  - -      - -   -       -       -           -    -     - - - - - -2,"5/$5.#3,!3-"4-"2+ 2+ 3+ 2+ 3,"2+ 0*3.#3.#3-"3-"3-!2+ 2+ 1*/(2+ 4.#6/%6/%7/&5-$5.$5.$6.$6-#4+!3* 4+!5,!4+ 3)2(1(/&/&2)6-!6-"8/$4+ 3*3+5-!3*/&0'3*5, 4+3*1(5, 7."4, 4+ 5-!5,!6-!6."6-"7/#90%6-"3*5,!7.#5,!6."8/$80%<4):2'91&6/#:2';2'8/$80$<3(;3'91%92%:3'=6*;5(92&6/#7/#91%<3'80#7/"81%7/%70'6.%3+"-%FFFDDD555333...+++&&&%%%###    !!!"""!!!""""""  """'''&&&%%%$$$$$$(((***(((+++---333;;;BBBMMMSSUMMN1* /(3,"5/$6/#91&:2&:1%;2'?6+?6+81%70&<5+;4*70&70%80$7/#5-!4, 4, 5-"80%3+ 4,"7/$80%:2'91&90%8/$80$=3&;1#:0#=3&:0#7-!7-!:0$=2';1&6-!3)8/#8."5, 8."8/#6, 4*4*5+ 6,!5+ 6,!6, 5, 6, 6,!5,!3*2*5,!6-"4+3*4*3*1'/%.$.$/%2(5+7."6-!6-!8/#5- 6-!7/#8/$91%90%4,!3+!70%:2(81'5-#3+ 80$7/#5-!7.#80$81&81'4-#7/%6.$3+!2+ 6/"92%6/#4-#60&0* 2+"5.$5,"3+!2+ 2+"2,"1+!4-#0*-&0)3,"1) .&"""""""""###"""!!! !!!######$$$%%%'''&&&%%%######$$$$$$ !!!!!!!!!"""###%%%$$$$$$###!!!"""""" !!!############""""""###"""###"""### """"""!!! !!!!!! !!!"""!!!"""""""""""""""###$$$$$$"""###############""""""###""" """!!!"""""""""""""""""""""######!!!"""###"""!!! !!!!!!!!! !!!""""""!!!!!! """"""""""""!!!!!!""""""!!! !!! !!! """$$$$$$######""""""!!!!!!!!!!!!!!!!!!!!! !!!"""""""""!!! !!!!!!4-"4-#6/%6/%4-#2+ 4-"5."5-"3, 3+3+2,70$91%:1%:1%90$6-"5, 7."7/#6."5."6."8/!6- 2)0&0&6,":0&<2';2&8/"7/"8/#:1%>6*<4'91$;2&>5)=4(90$:0%=3(=4(6."3+91%<4(:2&91%90$:2&<3'90%<3'A8,<3(:1&=4)@7+=4)>5)7.#5, :2&?7+@8,<3(91%;3'=5):1&5-!:1&:2&5-!6."=4(;4(80%2*4,!6.#7/$=5*?7+=5)5, 90$<4(7/#:1&?6*91%7."=5)?7+<3'7/";3'=5)91%6-!:2&>5)90$8/#;2&>4(=3(=3'>4(7."9/$?6*>4(;1&;1%<3':0%:1%=4(8/#=3(;1&7."9/$;1&;1%;1%:1%9/$8.#7-"8/#9/#90#90#9/#:1$<2&:0$8."<2&;1%9/#;1%=3'90#8/":2%80#=5(<4'6-!91%<4(:2&7/#8/$:1%:1%;2&=4(8/#8/";3$80#4+!8/$;2%8/&6,$4,;2&=4)90$;2%>5'=3%<3%A8) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<+">+ ?*?'=#A(?'@(@(C)B(A)@(?'<%9#8"8$4#0./3"5#17#7"1003!2"/-),+# -# $ (&%&"  -! $" " #!  ! #    -  - -         -         - -     -   -               -   -     -   -     - - -  - - -2,!1* 1+!60%5.#3,!3-!6/$1*2+ 3,!3,!4-"2,!/)3-"5/$0+1+ 3,!2+ 2+ 3,!1)2+ 6/$6/%6/%6/%5-$5-#6.$7/%5-#5,"3* 4+!7.#4+ 2(3)1(0'0'2)6."6-"80$3+4, 5,!6-"4+1(/&2)5,!5, 3*2)5, 7."5-!5-!8/$6."7/#80$6."8/$90%8/$4,!4+ 6."4,!5,!7/#90%;3(<4)92&80%:2':2'8/$90$;3':2&91%:3&<5)=6*<5)92&6/#6/#:1&:1%91$7/"70$81&6.%5-$0(+$III::9223--.***+++&&&$$$!!! !!! """ !!!"""### """$$$'''%%%"""###"""$$$''''''((()))...555;;;FFFKKLMNOJJJ*#0)5.#60$81&92&90$<3'@7+?7+92':2)=6,<5+92'91&92&80$5-!6-"7.#7/$80%2+ 2* 3+ 7/%:3'91%91%6-"5-!<2$:0":0"<2$8.!6,7-!:0$=2'<1&7-!3)9/#90$7-!6, 7-"5+ 1'2'7-!8."7-"8."8.#8."7-"6, 5, 2*1(5, 6-!3*3)5, 5+ 1'/%-#.$0&1'4*8/#7-!6- 90#7."6.!7."7/#90$:1&6.#5-"80&91'91'6.$6.#:1&90$6-!8/$80%91'91'5.$70&7/%4-"2+6."91%6/$4.$71'1+!3,"4-#4,"5-"3,!3,"4-#2+"5.$1* /(/(0) 0* -&!!!"""######""""""!!!!!!""""""!!!$$$$$$$$$%%%%%%###"""###%%%$$$"""""""""!!!!!!"""$$$$$$###$$$!!!!!!!!!  !!!"""###"""""""""""""""""""""###"""###"""!!! !!!!!! !!! """"""""""""###############$$$######"""###""""""###""" """""""""!!! !!!"""###""""""""""""######"""!!!!!!!!!!!! !!!""""""!!!"""""""""!!!""""""""""""######"""  !!!###$$$#########!!!!!!""""""!!!!!!""""""!!!!!!  """"""!!! 1* 4-"2+!3,"4-"3-"3,!5.#6.#6.#5-"3+ 3, 3, 81%;3';2':2&91%6-"4+ 6.#6/$7/%4,"3+5,2*1(/&1(7.#;1'<2';1&80#8/#91$;2&?7*=5(:1%:1$=4(=4(90$:1%<4(=4(6-!3+91&<4(:2&80$7/#;2'<3'80$<3'A9-<4(91%=5)?6*>6*=4(80$6-!:2&?6+?6+;2'90%;2'=5):1%6-!:2&91%4+5-!=4)<4)80%0)2+3+ 5-"=4)>6*=5)5-!80$<3(90$;2&>5)80#5-!<3'>6*;3'7/#;2&<4(:2&7.":1%>5)90$7.#<2&<2&<3'>5)=4(9/$90$?5*=3':0%90$<2&:0$:1%>4)90$=3(;2&8."8/#;1&<2&<2'<2':0$7-!7-!8/#:0$:1%8."8."9/#:0$;1%9/#<3&90$8/";2%=4'7-!6-!91$70#:3&;4(6/#:3'<5(70$6."7/#:2&;2&<3'>5):2%6. 91"8/#4+!7.":1$9/'5,#5, ;2&<3(8/#;2%<3';2%=3'?6( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -=+"=+!>*<&:"@'D,B*>'@(C)A(?'>'<%:#6 324"2!1 3"01 3"3!5!3/232/*% +*( # %%%$!    !#"#!            - - - -    - -     -          -     - - -         -    -      -    -         - -0)2+!3,"2+!1+ 3-"4-"3,!4.#5/#2* 0(3+!4,"4,!2, /)2,!5/$1, 1+ 4-"4-"4-"4-"3,!3-"5/#6/%6/$4,#4-#6.$5.$7/$6-#4+!3* 4+!5,!4+ 2(3)1(0'/&1)6-"5-!7/#4+ 4, 5-!8/#5-!2)0'4*7/#6."4+3*4, 7."5-!6."91%:1&90%90$7."6."90&:1&6."3*6.#5,!4+ 7/#80%:3'<4):2'91&:2'91%7.#80$<3';3'92&92&<5)>7+;4(81%6/#5-!91%;3'6.!80#7/$80&6/&4-#+$LLL>><444//0**+%&&&&&!!!!!!   !!!######$$$!!!""" """$$$$$$$$$'''+++---444<<5*80%:3)=6,=6+;4):3(:3'91%7.#6."8/$:2';3(70%6/$5-#70%91&7/$91%6-!6-!;1$7- 8. :0#8.!4*7- ;0%<2&<2&7-"4*:0%90#5, 8.#7-"4*0&0&7-!8-"7-!6, 6+ 5+5, 5+ 6-!2*1(3*3*4*4*7-"5+2(0&-#/$0&1(5+9/"8.!6-:1$8/"80#8/#7."90%;2'8/$6.#90&;2(:3)6.$5-":2&;2&7."8/#91&;3(91'70%80&80&4,"1*5.!80$6/$3-#5/%0* 2*!5-#5,#2* 2* 3,"2,"3,"5.$3,"/(/(0) 1* .'$$$######$$$###"""!!!"""###"""###$$$%%%%%%&&&%%%$$$$$$$$$###"""""""""###!!!"""!!!$$$%%%$$$###!!!###!!!!!! !!!###$$$""""""!!! !!!"""!!!"""###"""###$$$$$$!!!"""""" !!! """"""""""""######!!!"""###### !!! ###""""""!!!!!!!!!!!!"""!!!!!!!!!""""""######""""""!!! !!! """""""""!!!!!!""" !!!###"""""""""######!!!!!! !!!"""""""""###""" !!!""""""""""""""""""!!! !!!!!! !!!""""""!!!!!!"""4,!2*2+ 4-"1* 3-"3,!3,!3,!5.#6.#6/#6/"3, 3, 4, 91%=4(<4(;2':1%5, 1)4,!6.#7/%5-#3+3*1)0(1(3* 7.#;2'8/%90$:1%:1%:2&=4'?6*>5)90$8/#;3'<3'8/#8/#=4(=4)6-!3*:2&=5):2&80$6.";2&<3'8/#<3'@7+;3'91%>5)>6*?6*=5)90%6.":2&?6*>5*;2'90$:2&<4(91%5-!:2&;2&5-!5-!=5)=5*81%0(2*2*4,!;2'>5*<3'7.#:1&<4(90%:1&=4)80$5-!;3'>5):2&7.":1%<4(:2&8/#:2&>5);2&:1%<3';2&=3(?6*=3(:1%:1%>4)<3';1&:0$<3'90$9/#=3';1%<2'<2&90$9/#;1%;2&<3'<3':0$6, 6-!7.":0$:1$6, 8/#:0$:0$:0$7-!;2%90#8.":0$:0$6, 8/#:3&80#6/#91%6.":3&<5)92&6."6-"91%90%<3'?6*;3&;2%<3%7.#3* 8/#8/";1)5,#5- :1&;2'8/#90#91%7."<2'<2'N@0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -=*!=+!=*9&8#:$A+D-A+A*C)E*B*?)>&<$8$8#5!..15#8%4"3"3!5#2 4"3 35"3 /.+,-&# %&# " $" - - ! !!!   -      -     -  -      -       -   - -   -  -      - -    -        -   - -        - -2* 1* 1* 2+!2,!1+ 3-"3-"1+ 2, 5.#4-"1*0)3+ 2+ 3+ 3-!1*1, 4."2-!2, 4."4-"4,!3+ 3+ 5.#5.#5.$5.$5-#5.$6/%6/$6/$6-#3* 2)5,!5,!5,!4*3)0'.%/&1)7.#5-!4, 4+ 3+5-!7.#6-!4+1(3)7-"6-!3*3*5, 7/#6."6."80$:2&7."8/#6."5,!90%:2'6.#2*7.#3+ 2)7/$7.#:2':2':2'91&:2'90%6-"90$<4(<5):3'92&<5)>7+;4(70$4-!5."91%;3'81#6/!6/#6/%6/&2+!1*!AA@43200/,,,''($%%%%%### """#########&&&(((***///444???EEEHJIDDD/(3,!5.#81&91%80$<3'?7+=5*6/$:3)=5+<5+;4):3':2&:2&80$80$90%;3(;3(91&91&80&91&;3(80%91%6-"8/#<2%7- 7- <2%9/"4*8.":0$;0%<1&6-!4*7-!8."6, 90$9/#5+0&/%5+6,!6, 4*4*4*6, 7-!7-!2)1(2)3*5+6, 6, 6+ 4)1'-#0&1'2(5,8/"8/"8/"<3&;1$;2%:1$8.#:1%<3'8/$6-":1'=5*:2(7/$6.#;2'<3'7/#7.":2&:2'92(70%92'81&4,!1*6.!81%70%3-#5/%2+!3+"5-$5,#4+!1* 4,#4-$4-#3,!3,"1* 1* 1* 2+!.'"""%%%$$$######"""###$$$$$$"""###%%%$$$&&&%%%$$$#########!!!""""""######"""######$$$$$$$$$###!!!######""""""!!!!!!"""###$$$###"""""" !!!"""""""""!!! !!! !!!!!!!!!!!!!!!"""  !!!###"""######""" """""""""!!!  !!!!!!!!!""""""""""""""""""!!! !!!!!!""" !!!!!! """$$$""""""###""""""""""""!!!  """"""!!!!!!!!!!!!!!!!!!"""""""""""""""""""""""" """""" !!!!!!$$$###!!!###5-"3, 3+ 5-"4-"1*3,!2+3+ 4,!5."5."70$80$4-!4, 5-!:2&=4(<4(<3'91%3+1(3+4,!4,"2* 0(1(2)2)4, 6-"8/$8/%8/$90%;2&:1%;2&<3'?5)=3(7-"7.";2';2&8/#7.">4(=3'6, 4*<2&=4(<4':1%6.":1%;3'91%>5)?7+;2&:1%>5)?6*>6*>5)90$6.":1&>6*>5*;3'91%:2&<3(8/$3*8/#;3'8/$5, <4(=5*80%0(3+ 3+ 5-"91&=5):2&7/#:2&<4(90%:1%>5)80$4, :2&>5)91%5-!80$;2&7/#8/#;3'@7+<3':1%<2&;1%=3(?5*=3':1%;1%=4(=3(<3':1%>4(:0$8."<2':0%:1%;2&:1%:0$;2&<2&<3'=3':0%6-!6-!7-!:0$;1%6- :0$;2&<2&90#5,;2&:1$8."90#8."6, 91%<5(81$5.!70$60#81%;4(<5)91%6."90$:1%=3(>5)<3'90#80"8/#3*!6-!8/"90'5,"6- :1%;2'90$7."6-$5+":0':1&<2% - - - - - - - - - - - - - - - - - - - - - - - - - - - >* >+ =*6&6%9&<'>)?(>'C*G,B*?*>)<&:%:&:&9&4!-/6#4"3!14"3 00/4!3!2010!1#(  # ''&#" "      "     -    -     -   -  -      - - - - -  - -  -  -  - - -        - -          - - -   -         - -1* 2* 0)1* 2+!3,"1*/(2,!2,!2, 3,!5.#3,!2+ 2*3+ 3,!4,!5.#5."3."4/"2-!3-!5."6.#6.#4,!1)4."70%6/$70&70&7/%7/%6/$6/$4,"2)3* 6-"5,!4+ 4*2)1(0'.%2*6-"7.#6-"3+4+ 5,!5,!5, 4+1(3*8.#8.#5+ 2)6,!8/#7/#6."91%91%5-!:1%7/#6-"7.#90%5-"2*7/$2*0(5-"5-"80%91&80%80%:2':1&7.#7/#:2&;3(:3':3'=6*=6*<5(71$3, 6."90%:2&91$6/"6/#6.$4,#*#III543.-+**()()%%%!!""""!!!"""""""""$$$###$$$''')))***000999@@@DDDEFE:3)1+ 3,!70$80$8/#90%>5)<3(5.#:3)<5+<5+;3)92'91%90%91%91%80$91&91&80%7/%5-#80%:2'90%90%5,!8/#<2%7- 8. :0#9/"1'8.!8.#:0$;1%7."5+ 6, 6- 7."9/#7-"3(0&1&3)5+5+ 3)4*4*5+5, 5, 3+2)3*4*4*5+ 2)7-!0&/%.$1&3(3)8.!:0#9/":0#:1$:1#:1$;2%9/#:1%;3'8/$6-";2'>5*92'70%7/#;2'<3'7/#8/#;3'92'92(70%91'91&5-"3,70#:3'81&3-#3-#1* 1) 4,"4+"4+!2+!4,#2+#2+!3,"3,"1* 1* 0)1* .'###%%%######""""""###%%%%%%###$$$%%%%%%%%%$$$$$$"""!!!###!!!###"""""""""###"""###$$$###""""""!!!"""!!! """"""$$$$$$###"""!!!  !!!!!!  !!!!!!  !!!######$$$$$$"""!!!######!!!!!!!!!!!!!!!"""""""""!!!!!!!!!!!! !!!!!!!!!!!! !!! """###"""###"""$$$!!!!!!""""""!!!!!! !!! !!!  !!!"""######""""""!!!!!!!!!""""""""" !!!#########$$$6.#6."4-!4,!7/$4-"2+ 1*1)3,!6/#80%7/#81$7/#4, 5-!7/#<3'<4(<3'=4(8/#2*1)3*4,!4,"3+!1(1)2*5, 5,!7.#8/$90%:0&;2'<3':2&;2&;2&?5)<2'6-"7.#;3':1%6."8/#=3(=3(7,!5+<2&=4(>5(;2'7.#90%;2'91%<3(?6+:2&80$=5)?6+?6+>5)90$5-!91%>6*>5)<3(91%91%;2&7.#1(6-":2&7/#3+:2&;3(7/$1)4,!3, 4,!91&=5):2&7/#:1%<3'8/$:1%>6*90$3+91%>6*<3'80$:2&=4(90$90$;2&@7+<3':1%:1%:0%<3'>4);2&90$:0$<3'>4(=3(:0$>4);1%7-!90$7-"7-!:1%;1%9/$<2&;2&:0%<3':1%7."7-"7.";1%:1%7.!:0$;2%<2&8/#6, <2&:0$8/":0$8."5+91%<5(60#6/"81%92%92&<5)=6*:2&6."7."90$<2'>4(:1%80"<4&90%2(91#:2%90'6-#7/!:1&90&8/#7/"6,$5,#8/%90%<2&  - - - - - - - - - - - - - - - - >+ >*:+$7( 6%:'=)<';$?&C(C+@+=)<(=(;&=(>*:'4!4!4!31/3!00.12.01/--,(  -" $%%$"!   -              -      -      -    - - -   - -  - - -     -     -     -   - -  -  - -     - -/(0(2* 3,"2+!1* 2+ 3,"0)/)2,!4.#4-"3-"5/#4-"4-!4-!4,!4,!3+ 4-"5.#60$71%4."4."6/#7/$80$7.#1)4-"70%4-"6/%80'70&6/$6/$80%4,!0(3*5-"5, 3*4*3*2)0'/&5, 6-"6."6-"5,!6-"6-"5, 5,!3*/&3*9/#90$6,!3)6-!90$7/#7.";2&;2&4, 80$6."5-!6-"91&7/#4,!4,!2)0(4, 5-!7/$91&80%80%:2':1&7/$6.#80%:2'92&:3'>7+=6+92&70$6.#6.#8/$91%80#6/"4-"5-#1) HHH99:..-+*()(&%$%!!"  !!!###!!!!!!&&&###"""$$$)))---///222999===ABBABB,&1*5."7/#90%:1&?6*:2'4-"92(;4*<4*;4);4(;4(;3'<3':1&6."6.#6.#80%91'81&:2'7/$80$:1&6-"7/";1$8/!8.!:0#7- 3*6, 9/#:/$9/#7-!6, 6-!7.!7."7-"6+ 1'1'3)4*4*4*3)5+6+ 6, 6, 5, 1(1'3*4*4*4*4*4*1'1'0%1'3)3)7- :0#90":1#<2$;2$;2$;1%:0$;1%<3'8/#7."<3(<4)92'70%6.#;3'=4(7/#7/#;4(:2(92'7/%6/%70%5-"3+6.!92&70%4.#3-#/)0(3+!4+!4+"4-$4,$2+"4-#3-"2+!1* 0)1* 1* ######"""###############$$$######$$$$$$######$$$"""######"""%%%"""###"""""""""!!!"""######$$$######""" !!!!!!!!! """$$$$$$###"""!!!!!!  !!!!!! """"""!!! ###""""""$$$###"""######%%%%%%###!!!  """!!!  !!!""""""!!!!!!!!!"""!!!!!!!!! !!!!!!""""""!!!""""""""" !!!"""!!! !!!!!! !!!"""######""""""!!!"""""""""""" !!!######"""90%7/#70#6."5."6/$4-!4-!2*3+ 5."6/"81$7/#92&70#3, 6."91%<3';3';2&<4(8/#4+ 2*2*4+!5.#5-#3*3*4+6-!4+ 5,!7.$:1'<3(;2':1&:1%;2&:2%?6*>4)8/#7.#:2'91%6-!7.";2&=3'8-"5+;2&=5(=5(;2&8/$;2&;2'8/$91%<4(80$7/#=5)?6*>5*=4(90$5, 91%@8,@7+<3(91%80$;2'80$1)6."90%6."3*80%91&6.#3+ 7/$3+ 1(7/#<3':1&7/#90$;3'8/#90%?7+;2&3+80$>5)=4(90$:2&=5):1%7/#90$>5)<3':1%:0$;1%<3'=4(;1%8."8/#;2&>4)=3'8/#<2';1%6-!7-!5, 5, :1%:1%7-";1%:0$8.#=3'<2&7."6,!7-!;1%:0$8.":0$;2%<3'9/#7-!<2&90#9/#90#7-!5+70#81%4.!70$:3&92&:3'=6*>7+;2&5-!5, 6-!:1%=4(90$7.!90"90%2)8/"90%90'6-"7.!;2'8/$6- 90$8/&6-#7.#90%<2% - - - - - - - - - - - - - - - - - - - - - - - ?+ >*<):) 8( 9) :(;(;'<%>$?&>(=)<(='@*=(>)A- 9&14!6$1( .4"1 +-1 2!.-/0..+*"  #$##"!    - -       -      -     -   -  -       -                 -     -    - -         - - -4-"1*0)0)3,!4-"4,"2+ 1* 2+ /(/)1+ 4.#3,!1*4."4-"4-!4-!5-"4,!3+ 2+ 3, 50$61%4."4-"6.#6.#4+ 5-"2*5.#70%60%6/$70&70%70%70%81&6.#1)2)4+ 5,!4+ 4+4+3*.%0'4+ 6."6."6-"5,!5-!7/#7.#6-"3*/&3*9/$:1%7-!3)6, 90$80$8/#;3';2&5, 7/#5-!5,!7.#80%7/#4+ 4, 3*1)4, 5-"80%91&80%7/$80%90&8/$6-"91&91&91&:3'=6+=7+:3(80%6.#6.#91&91%7/"4- 5.#3+"-%AAA001*)()('('&"!"!!! ###&&&&&&###"""(((...000...000666:::ABB@@?+$1) 4,#5.$80&<5*70%6.#:3(;4):3(:2(:3';3'<3(<4(91%6."6.#7/$81&80&7/%:2'6.#80$90%5,!6- :0#8.!8.!:0#:0#4*7-!:0%;1%9/$7-"6-!7-!7.!5, 6,!6,!2(2'3)5+ 6+ 5*4*6,!7-"6,!6,!5, 2(1(4+5+3)3)6, 3)2(3)1&1'2(3)6- ;1$:0#:0#:1#:0#;2$<2%:0$:0%=3'90$7.#;2'<3(:2(80%7/#<3'=4(7."7.#:2':3(92'80&81&6/$4,!3,6.!:3'70&5/$4.$0* 0(3+!3*!4,"2+!2*"2+#3,#3,!3,"1+ /(3,"2+ !!!######!!!$$$######$$$"""######"""&&&$$$###"""$$$"""###$$$######!!!"""######!!! ######"""$$$###"""###!!!!!!!!!######""""""!!!!!!!!!!!! !!!!!! !!!!!!!!!  !!!!!!#########$$$$$$&&&%%%""""""!!!   """###"""!!!!!!""""""!!!!!!!!!!!!!!!!!! !!! !!!""""""""""""!!!"""""" """!!! """!!!!!!   #########"""""""""""""""  !!!!!!91%90$90%7/#80$6/#6."80%6/$5.#4-!4-!6/#70#:2&80$:3&70#4-!7/#:1&;3';2&;2&;2&6."4+ 2*2*4,!7/%6.$4, 3+5, 5-!5,!4+ 90%<3(<3(:1&90$:1%;2&;2&@7+?5*8/#6-":2&91%5-!6-!:1%=2'8.#4+;2&>6)=5(;2'90%<3';2&7.#8/#<3(90%7."<3(>5*>5)=3(90%5, :1%A8,@7+;3'80$90$<4(91%3+6.#7/$5-"2+ 70$;3(6.#3+ 91&5-".&4,!;2':2&7.#80$=4)8/#90%?6*;2&3*80$>5)>5)7/#:2&>5)<3'8/#90$=5);2&90$90$<2'<3'=4(;1&7."7-";1%>4(<2'8.":0$:0$6-!7."6,!7."=3':1%6, 90$7."6, <2'=3(7."6, 8.";1%9/#8.":1$<3&<3&90$8.";1%9/#9/#9/#6, 5+6/"81$6/"70#;4(92%92&<5)<5)8/#2)3*5,90#=4(:1%6- 90"90&5,!91#:1%8/%4+5,:1&90%7/";2&90&6-#7.";2&8/"SF4 - - - - - - - - - - - - - - - - - - - - - - - - - - - A+ ?+ =):'8%9':* :) 9(;'>&>%=';(<(;'A*<&='>)<(6"4 5#4!,* -1/,/10-+*))+)%  " '&$"! -   -           - -         - -   -  -  -     -  - - -     -      -    -      - -   -  - -    -  -2+ 5.#1*1*1*4-!5.#4-"1* 1*2,!1*1*4-"5.#5.#4-"5.#5."3+ 3+ 5-"5-"6.#5-"3, 5/#60$4."5-"7/#5-"1)5-"3+6/#80&5.#5.#80&91'70%70%80%80%4+ 4+!5,!5-!4+ 5+ 4+ 3*0'/&2)7."80$6."5-!5,!7/#90%6-"3*0'3)8/#:0$6-!2(4+8."8/#7/#:1%91%4, 6."6-!5-!7.#8/$80%3*5-"4, 2*4,!7/$91&:2'80%7/$80%:1&7.$5,!91%92'81&:2'=6+>7+;4)92&4,!6.#91&92&6/"4-!6.$3+"AAA779++,'&&&&$##"!!! """&&&((('''!!!  !!!"""!!!!!!###$$$###!!!$$$(((,,,***+++111666233111+%0(2+!3+!:3):3(80&7/$:3(;3)91'81&80&:2(:2&91%91%80$6.#90%91&6.$5-";2(5-"5-!5,!5-!8.";1$8. 8.!=3&<2%6, 7-!;1&<2'=3':0$7-"6, 5, 5+ 5+ 4*1'2(4*7-"8-"6+ 4*6,!8."6, 6, 6, 3)3)6-!6-!3)3)7-!5+3)3(2'1&1'3)8/!:1$90#8/":1#90#;2%;2%90$9/$;2&90%8/#<3(<4):3(81%7/#<3'<4'7."7.#:2&:3(92'81&92'7/$4-!3,5.!:3'70%4.$3-$1*!1* 4,"5,"3+!3,"2*!2+"4-#3,"5.$0).'1* 2+!$$$###"""!!!###$$$"""""""""$$$######$$$$$$######%%%%%%#########"""""""""!!!!!!!!!#########!!!"""$$$###"""  !!!$$$#########$$$###!!!!!! !!! !!!  !!!  ###"""############"""""" !!!!!! !!!###""""""!!!!!!!!!!!! !!!""""""!!! !!! """###!!!""" !!!!!!!!!!!!"""!!! """!!!!!!"""!!!   !!!###""""""######"""!!! !!!!!!8/$91%91%:2&7/#80$6/#5."80%81%6/#70$70$80$91%;3';3'<4'90$6."80$91%:2&;2&;2&:1%7.#5,!3+ 3+ 5,"80&6.#4+3*3*5-!6."5,!;2&=4(;2':1%90$;3&<3'<4'@7+>4(6-"7.";3'80$5-!7.";1&<2'8.#4+;3'?7+=5);3':1%<3':1&7.#6."=4(90$7.#<2'>5*>5*>5):1&4, ;2&A9-@7+;3'80$:1%=4):1&4, 7/#7/$4-!3,!91&:2'7/$3+ 80%4,!/'4,!;3(:2'7.#90%?7+7/$8/$=5)91%3*91%?7+>5)7/#90$=5);2&7/#8/#<3'8/#8/#9/#;2&<2&=3(;2&7."7-!;1%=3';1%8."9/#90$7."90$7-"90$>4);1%6, 90$6-!3*9/#<3'7."6-!8/#:0$8."8.":1$=3';2&90$90#;1%9/#:0$:1$7-!4*91%:3&5."5.":3'81$81%92&:2&6."1)4+5+9/#;2&:2&7/!90#:1&8/$:2$=4(;2)4+5,8/%90%80$:1%80$80$:1$;3%8/"?6( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -B, A+ ?*9%7#9&9(9(:(:'=(?'<&;'<(=(F/"E/!A+<&;%8#4 7$9&0( .4"-) .13!/.-*$ $ ))$!$%$""!    -          - -      -           -  -  -   -            -     -     - - - -   -   -  -3,!0)3,!5.#2+1*0)3, 4-"4-"2+!2+ 4."4,"2+ 3,!5.#5-#4-"4-"3, 0(0)3+ 7/$8/$6.#5-!5.#70$50$5/#70%4-"3+ 5-"3+ 7/#80%4.#5.#81&81&7/%7/$70%7/#3+ 4+ 5,!6-!5, 5, 4+ 5, 3*/&3*7/#80$6."4, 4, 6."80$7."6-!0'2(8."9/#6-!2)5+8."7."6.":1%:1%6.!7/#7/#6-"6-"80%91&2*4,!5-!4,!6-"80%:2':2'80%7/$91&:1'7/$4,!80%:2'81%91&<5)>7+<5*80%5-"7/$90%91%70#4-!4-#1* >>>113''(##$###  ###)))'''***///000333444111...,,,***&&&"""!!!$$$%%%%%%###$$$###"""&&&&&&''''''++++++000///332-&0(0)4-#7/%91&80&6.#92':3(81&6/$92(:3(:1&;2'90%7/#5-!7."7/$6."4,!:1'6.#4,"5,"3* 7.!<1$8. 9/">5(=3&6, 7-!;0%<2'=3(:1%6,!6- 7-!5+ 5+ 4)3(4)7,!:/$9/$6, 4*6, 8."7-!7-!6, 3)4*7."7."4*6, 9.#6, 3)2'2(1&0&3)8/!90#8/"8.!;2%:1#;2%;2%;2%:1%:2&90$7.#<3(<4):3(80%6-"<3'<3&8/#8/#92&;3):2'81&81&81&5-"2+5.!92&70%4.$4.$3,#4,"6-$6-#3*!3,"3+"3,#4-#5.$4-#0)0)2+!1* (((###"""""""""$$$$$$###""""""$$$%%%$$$$$$$$$"""%%%$$$######$$$######### !!!"""!!!###### """"""###!!! !!! !!!###############&&&%%%###""" !!!   !!! """"""######"""!!!!!!  !!!   !!!######!!!!!!!!!!!!!!!"""!!!""""""!!! !!!""""""!!! """"""!!!""""""!!!###"""!!!!!!!!!  """$$$###"""###""" !!!5-!80$90$91%:1%6."80$6/#6."91&:2'81%81%81%80$92&;4';3';3'80$8/#91%:1%<3';2&;2&:2&7."5, 5, 6.#6.#90&80%4+ 1(1(5,!7.#5, 90%=4(;2&:2&91%<3'<3'<3'?5)=3'6."8/#<4(81$6.!80$;2&<3'8."3*;2&?7+>5);2':1%<3';2&90$6-!<3'8/#7/#<3'>5*>5*?6*;2&4, :1%@8,?7+;3'80$:2&=4)91%4, 6/#80%5."5-":2':2'7/$3+ 8/$5-"0'3+ 80%80%6.#91%>6+90%7/#=5)80$3+:1%>6*=4(8/#90$;3'8/#6."7/#<3':2&8."9/$;1&<2&=3';2&7."7-";1&;2&:0%8."9/#:1%8.#:0$6-!90$=4(:1%6-!:1%9/#6-!8.#<2&7-"8.":0$:0$8/"7.!:0$=3';1%:1$:1%:1%9/#;1%=3'8/"4*8/#80$4+ 7/#;2'5."70$:2&:3'6."2*4,5, 9/#;2&90$;2%91$90%8/#:2$=4)=4*6- 8/"90&90%90$;2&;2&91$:1%:2%7/">6' - - - - - - - - - - - - - - - - - - - - - - - - - - - - -B,B+ @*<'8$9%<)<):'<'='>'>);(:'<(A,C- D.!C-?*9$4 7#;'8%0,.3#1 +-2//.-)% %)'$#$$&!            -     -     -                 - - -                   -  - - - -     - -  - - -4-"4.#3,!0)4-"5.#3,!1*1)4,!6/#5/$3,"3,!5.#5.#4,"4-"5.#6/$70$7/$5-"1)2*5-"7/$90%7/$4,!5."60$5/#4/#71%5.#5-"5-"3*6.#70%4.#5.#6/$70%81%70%6/#7/#4+ 4+5,!6,!6,!5, 5, 5,!0(.%3+7/#7/#7.#3+2*5,!6-!7."6-"0'2(8."9/$7-"5+7.":0$8/#7."91%:1%8/#90$:1%7.#5,!91&:2'4,!4, 6.#5-!6.#7/$91&92'91&6.#80%8/%7.#4,!80$80%80%91&;4(=6+=6*81%7/$80%;2':2&60#2+ 2*!/':::--/&&'###$$#&&&,,,///+++(((%%% """###))),,,...444333///&&& ######%%%%%%%%%"""!!!"""%%%%%%&&&---...333===>@=+$/(0(2+!81'81&6/$5.#91&:2(81&5.#92(:3)<4(<3';2'8/#4, 7/#7/#6."5-"80%8/%7.$7/$4,!8/";1#7-9/"<4&:2$5-6- ;1%<2&:0%9/#4*6-!4+5, 6, 5+3)5*8-":0%:0$6, 4*6, 8."7-!6- 7-!5+6-!9/#7-"4)7,!9/#7-!3(1&2'0&0&4)6- 8/!8/"7.!;2%90#:1$:1$<3&;3':2&7.#6-":1&;3(92'70$5-!;3&<3&91$80$:2';4):3(70%81&:2'6.#3,70#92&70%4.#3-#3,"4-"6.#6.#4,"4-"3,"3,"3,"4.#3,!/(1* 4-#1* !!!$$$###$$$$$$$$$###"""!!!"""$$$%%%###"""######$$$$$$$$$$$$$$$$$$###""""""!!!""""""######!!! !!!###!!! !!!###!!!"""######"""###&&&######"""  """   !!!!!!""""""!!!  !!!  """!!!!!!!!!"""!!!"""""""""###"""  !!!!!!!!!!!!""""""!!!!!!"""""""""!!!"""""""""!!! !!!  !!!#########"""###"""!!!!!! !!!2*5-!8/$80%:2&90%4, 6."6."6.":2'<4):3'92&91&7/#80$;3'<4(=5):2&90$91%:2&<3':1%:1%;2&7."3*6-!7.#6-"90&;2(3+0'0'5,!90$6-!:1&<3(;2';2&;2&=4';2&;2&?6*=4(8/#90$<5(92%6."80$<2'=3'9/#4+ ;2&?7+>5);2'91%;2'<3';2&6.";2'7.#6-";2'?6*@7+?6+:1%5,!91%?6+?7+=4(91%;2'>5)91%4, 5-!81%6.#4,!;2';2'7/$4, 7.#4+ 0(7/#;3(91&7/$80%>6*90%80$>5)90%4, :2&>5*=4(80$91%;3'80$7."91%=5);2&8.":0$<3'=4(>4(<2&7-"8."<3'<2&;1%9/#8.#:1%:0$;1%7-!6-!<2&:0%7.":1%90$9/$8."9/#4+7.";1%;1%9/#8.":0$<2&;2&;2%:1$:1%:0$<3&>4(9/#5+6-!8/#3+7.";3'5-!6/#91&:2'7."3+4+6-!:2%<3':1%:2$:2%7.#6.!91#=4)=4+8/"90#;2(91&:1%<4'=5':1$;3&:2%7/":2$ - - - - - - - - - - - - - - - - - - - - - - - - - - -C,C, A+A*<&:%<(?,"<);&A(D)?)>+ =*=)>(?*>)?)?)>(9$7":'=)5"01/.+0 3!1/-.,& '(&###!!!    - -      -  -     -     -                -        - -     - -     -   - -        - - - - - -4-#5.$5.$5.$3,!1*4,"4-"3,!1*0(2+ 5."5.$3,"2,!4-"5.#4-"4,!4-"5.#6/#6/#3,!0)2+ 6.#7/#80%7/$4,!5."70%5."5."82&60$70$7/$2*6.#81&5.#4."70$81%70$6.#5-"6-"3+4+5, 4*4+5, 5+!5+ 1(.&3*8/$7/$7/#4+ 2*6-!6-"7.#6-!0'2(8."8/#7-"5, 8/#;1%:1%8/#91%:1%8/#:1%:2&6."4+ :1&:2'7/$5-"7.#5,!6-"6.#7/$80%91&6.#80%7.$6-"5-!80%80%81%92'<5)<5):3'70%91&91&:2'81%60#1*0(-%766))*&''""#### (((...$$$ !!!(((111555,,,""" """$$$$$$&&&%%%!!! ###$$$$$$$$$)))000555:::<=;&/'0)2+!70%81&7/%80%92':3(:3(70%82':3(:2&:2&:2&7/#5-!:1%91%6."6.#8/$80%80%80%5-!90#<1%7- :0#=5(:2%5,6-!;1%;1&;1%6-!3*1)4, 5-!5, 4*3(6*8-"9/$8."6, 3+4+6-!7-!7-!7-!5,7-!:0$7-!4*8."9/#8."3)0&1'0&1'4*5+7.!7/"7.!;2%8/"91$90$:2%:2&;2'8/$6-#90&:2(:3(80$6-":2%;2&90$80$:2';4):3(6/$81&:2&6/#3,70#:3'71&4.$4-#3+!3,!7.#7/$7/$6/$3,"3,"3-"5/#3,!/(0)2,!!!!###$$$###%%%$$$###"""!!!"""############"""######$$$%%%###"""###$$$######""""""###!!!"""!!!!!!!!!!!!!!! $$$""" !!!"""$$$###"""######$$$!!!   !!!""" !!!   !!!  !!!!!! !!!!!!!!!"""###""""""""" !!!!!!!!! !!!###"""!!!!!!!!!"""###"""$$$!!! !!!  !!! !!!!!!!!!###""""""""""""!!!"""!!!0'1)4,!7/$7.#91&7/$2*4+4+ 5-"92';4)91&81%91&6/#80$;3'<4(=4(:2&91%:1%:2&;2&91$:1%;2&6-!4+6-!6.#90%:2':1&3*1(1(6-!:1%6-"90$;2';2&;2&<3'=4(;2&;2&?6*=4(80$91%;5(92%80$:2&=3'>4(:0$4, :2&>7*=5)<3(90%;2&;2':1&6-":1%7."6-!<3(@7+@8,>6*:1&6."91%>5*@7+=5):2&<3(>5*91%4, 5-!91&80$4, 8/$=4(90%5,!7.#5-!1(6.":2&80$6."8/$<4)80$90%>5*:2&4+ :1&>5)=5)90$:1%<4(;2&91%<4(>6*<3'8.#:0$=3'>5)?5*=3'7."8/#>4(=3';1&8/#7."9/$7-":0%8.#6-!;1&:0%8.#90$8.#8/#:0$90$5, 5+ 90$;2&8/#8/":0$<2&<2&;2&:0$;2%<3&>4(>4(8/"5+6-!90%3*5,!<3'90$5-!7.#80$7."4, 5, 7/"<3&=4)<3'90#:1%8/%5- 90"<3)=3*7/"8/"90&:1&;2&<3&;3&:2%<4(91%6."7/"I>. - - - - - - - - - - - - - -C,C,B+B+>';%;&<(<)<(@(E*D*@*?, >*@*B-A,=(<':%7"6!;&>*:(102 0--1!3#1!///('%&$"           -  -          -           - -         - -  - - - - - - -       -      - - -  -       - - - - - 3,"5/$5.$5.$4-#6/%3,!1*3,!3,!3,!2*1*3+ 6/#5.$4-#3-"4.#5.#4-"3,!4-"5.#6/$7/$4,!2*4,!70$7/$80%6.#4-!5/#81&4."4-"60$5.#70$6/#3+ 7/$:3'60$5."70$80%7/$6/$7/$6-"4+3+5,!5, 5+ 5+ 5+ 5+ 2)-$1)6."5-"6-"4, 3*6-!8/$8/$6-!1'0&6,!90$7-"5, 8.#90$:0%8/$:2&;2&90$:1%90$4+ 3+ :2';3(80$6-"7/$5-!6."6.#7/$70%81%6.#91&:1&80%8/$;2':2'91&81&;4);4(92&70%80%8/$7/$70$60$2+ /(,$322''(&&'"""""! $$$)))&&& """...222111$$$ """###$$$%%%$$$$$$ !!!######$$$(((---222999998:78/'0(0)70&92'7/%91'91':3(:3(80&80&:2'91%:2&:2&90$90$:2&<4(6."7.#80$8/$7/#90%7/#9/#>3'<2%<2%;2%91$4,5, 9/#;1%9/#6, 2)0(3+5,!6-!4*1'4)6, 9/#7-"4+2*4+6.!7."8/"7.!5+6, 9/#7- 5+8."90#5+2'1'0%1&2'6+7, 8."7/"7."<3&90#:1%;2&90%91%;2'90%8/%:2';3(;4)91%8/$:1%;2&80#7/#:2';3):3(6/$70%92&6/#3,70#:3'82&5/$60%3,!4-!80$90$80$6/#4-!3,!3,!5.#3,!/)0*3,""!!!!!######$$$"""$$$$$$"""!!!!!!!!!"""""""""!!!"""$$$$$$$$$###"""$$$%%%$$$$$$!!!"""""""""!!!"""!!!!!!"""### """###"""###"""###"""###"""   """ !!!  !!! !!! !!!!!!!!! !!! !!!!!!"""######""""""!!!  !!!""""""  !!!   !!!!!! """ !!!""""""!!!4,!4+!1)0'3* 7.$5,"7/$6.#3+3+3+ 6.#:2';3(80%5.#7/$5."6."7/#:2&<4(:2&91%;2&<3'=4';2%:1%:1%7."5, 7."80%:1&91&7.#4+2)2*6-!:1%5,!7.";2';3'<3'=4(>5(:2%:2%>5)<4(80$81$<5(:3&80$;2&>4(>5):1%5-!;3'=6*<4(<4(80$:2&;2&90$7.";1&7-"6,!=3(@7+@7+>5*;3'6."80$=4(?6+=5):1&<4(>5):1&5,!4, :1%:2&5,!8/#<3':1%4, 5-!6."3+91%=5)=5)80$:1&;3'7/#90%>6*:2&2*7.#=4)=5)8/#7/#<4(;3'90$<4(>6*=4(:0$:0%<2&=3'>5)=4(8.#7."=4(=3';1&9/$8.":0$5, 8/#9/$90$<3':0%7-!9/#8."8.#:0$:0%6,!5+ 90$;3'6-!6.":2&<3';2&;3&;2%<3';2&=4'=3'7.!5+8/#;1&4+6-";2&91%6-!7."7/#7/"4,6-!8/"<3&>5)<3'90#;2&8/%5- 91"<2);1(7.!8/#;2'=4);3';3&:2%91$<4(91%8/$90%:1% - - - - - - - - - - -C+D,C+B, @*<&='<&<';'?(C)B)?)?)?*A,A,A,B-@,=(:%5 6!='>)8%3!11 /*-/ / ,.0,)''#   !        -  -           - -   -   -      -      -   - -  - - -  -      - -   -  - -   -  - -    - - - - -  5/$6/%4-#70&5.$5.$3+"6/%3,"2+ 3,!3,!4-"3,!2+ 3+ 6.#5.#5.$4-"4-"5.#4-"3,!5-#6/$6/$7/$4,!2*3+ 6.#8/$7/$5-"4-!6/#92&5."3-!5/#70$80%5."4,!8/$91&6.#5."70$70%6.#5.#6/#7.#4+ 2*5-!6-!5,!5+ 5+!4+ 2)0'4,!6.#7.#6."6-"3*4, 8/$8/$7-"2(1'6,!:0$8."6,!7."8/#8/$8/#91%:1%7/#91%:2&3*4+:1&;2&8/$6-"7/#5-!7/#80%91&70$80%6/$;3(=4);2':2'<4(;3(92&91&<5*:3(81%70$80%8/$6.#5."5."3,!0(-%00/%%&$%%!!! '''!!! +++)))&&&###!!!!!!'''111+++ """###%%%'''&&&%%%!!!!!!"""###%%%(((,,,111555665646-%/'0)70%92'81&81&81&92'80&6/%81':2':2&:3&<3'80$80#91%91%6."7.#80$7/#7/#:1&91%<2&?5);2%;2&>5(=4(6-!4+9/#9/$:/$6,!4*2)2*5-!7-"3)0%2'5*9.#7-!4*1)4+6-!6-!8.":0$7-!6, 9/"7-!5,7-!7.!5+2'1&.#0%2&6+8,!9.#7."6.";2'80$;2&:1&:1%90%;2'91%80%;3';3(<4):2&90%:1%;2&90#80#:2';4):3'81&70$92&7/#2+5.":3'82'5/$71&4-"4-!7/#7."5.!5.!3, 3, 3,!3,!1*/)1* 3,"%%%!!!$$$###""" !!!""""""!!!!!!!!!"""""""""!!!"""######$$$$$$$$$$$$$$$$$$$$$"""!!!$$$!!! !!!"""### !!! !!!"""""""""$$$###"""!!! """!!!!!!   !!! !!! !!!!!! !!!!!! !!!!!!!!!!!!""""""!!!"""!!!!!!!!!  !!! !!!  !!!!!! """###!!! """"""3,!6.$7.$4+ 0'2)8/%5-"7/$7/$5-"4,!5,!7/$;3);3)7/$2* 5-#7/$7/$8/$:2&=4(:1%90$:2&;3&=4(;2&;1%:0$90$5,!8/$:1&7.#7/$8/$4+!3*5, 7.";2&7."8/#;3'<3'<3'=4(=4(:1$:1%>5);3'7/#81$<5):3&80$<3'>5)=4):1%5-!;4(=6)<4(<4(90%;2';2'8/$8.#;1&8.#6-"<3'?7+?6*=5);2'6."7/#<4(>6*>6*:2&;2'=5):1&3+2*90%;2&4+ 7.#:1&:1&3*3*80$5-!:2&<3'=5)91%:2&<4(8/$80$>5):1%2*6."=5)>5)7/#6."<3':2&7/#;2&>6*>5);1&:0%;1&:1%=3(<3'8."6,!<2'<2';1%:0$9/#;2&7-!7."9/#:0%>4(<2&6-!:0$9/#8.#:0$;2&8/#6-!91%;2&5-!5-!;2&<3'<3';2&;2&<3';3&=4(;1%5+5,;2&>5)8.#7-!;1&:0%7."8/#80$6/"4- 6- 7.!<3'=4):1%90#:1&7.$7/!:1#=4*:1'7/"90%>5*?6+:1&81$70$80$:2&6.#6.#80&91% - - -  B+D,D,C-?(='@*@+?)>(>(B)C)>(;(?*=(@+C.!@+>*;'9&;'8#9#A+>(:&6#2 1..// 0!+(*)&'%#      !   -    -     - -   - - -   -     -        -    - -  - - -  - -  -        - -  - -    - -   -  - - -   1+ 4-"6/%5/$3-"70&6/%6.$5.$6.$3,!2+ 4,"4-"3,!3+!4,"4,!6.#5.$5.$4-"3,!4-"3,!2+ 5.#70%7/$70%4,!3+ 3, 6.#6.#5."5-"4,!5."81&5/#3, 6/#81%81&6.#6."80%6.#4,!4,!6/$7/$6/#6.#7/$80$5,!3*6-!6."5,!4+4* 6,"3* 0(1)3*6-"5,!4, 3*6-!90$9/$8/#4*2(6-!:0%9/#6-!6-"7."8/#8/#90%90%6."91%:3&5,!5,!90%:1&9/$7-"7-"5, 8.#;2&90%8/$7/$6/#:2&<3(;2'91%<3(;3(91&;4(:4(;5):3'70$6/$80$6.#5."4.!3,".&777-,+%%&"""   e\Xrjgupnqonoopuuwfefiii===''' !!!)))...%%% !!!$$$'''((('''###""""""######&&&+++...7770001/1+$0)3+!70&70&70%80&92'92'7/%6/%:2):3(;3'<4(;3'7."6."8/#7."5-!4+5-!6-!7/#:2&90%;0$>3'<2&=3'>6*=4(8/#6-!:/$9.#<1&8/#5, 2)2*5, 6-!3)1&4)5+ 8-"5+ 2)1)5, 7."7.!9/#;1%7.!5+7.!8.!7-!8."8."7- 4)2(0$1%1&5*8-!:0$90$80$91%80$:1%<3(<3(;2'<3':1%80#:3&<3';3'<3'8/#90$:2&80#7/#:2';4(:3'81%70$92&6/#2*4- :3'82'4.#71&4-"4, 6."5- 5.!5.!3- 1+4.#3-"1+ 0*1+2+ (((!!!######!!! """!!!!!!###""""""$$$%%%###"""!!!!!!""""""$$$$$$######$$$###"""!!!###"""!!!!!!!!!"""!!!!!!""" !!!"""!!!###"""""""""  !!!!!!!!! !!!  !!!!!!"""!!!!!!  !!!!!!!!!!!!!!!"""###"""!!!!!!        """###!!!!!!3,!3,!5-#6-#5+!3)5+!8/%8/%80%91'8/$6.#5-"80%<4)<4)70%3+ 4,!5-#7/#80$;3'<3'90$80$91%:2%=4(<2&;2&;1%;1%6-"7.#90%5-"8/%:1&6-"4+ 6-"8/$;2'90$90$;3';2&:2%<3&<3':1%;2&=4(;3'70$81%<5)92%81$<4(=5)<3(8/#4+;4(=6)<5)<4(:1%;2'<3'90%90$<2'8/#6-";2'?6+>6*=5);3(7/$80$;3'>5*=4)91%:2&<4(91%3*2):1&;3'4+ 8/$<3(=4(3*3*8/$7.#<3(=5)>6*;2';3'>6*80$7/#<3(80$4, 7/#>5)>5)7/#80#=5);3'7/#:1%?6*=4(:0%90$;1&:0$=3(=3(8/#7-!=3'<3';1%:1%9/$<2&8."8."9/#90$<3'<3'7.";1%:1%8."9/#;2&:0$7."90$;2&6."6-!;2&;3&<3':1$:1%;2%;2&=4'8/"3*5, =4(?6*<2&;1%=3(<2'7."8/#:2&80$4- 5, 8.!<3'<3*90%90"90'8.'80 91"<3);2'7/":1%=4)?6*90%91%5-!5-!80%7.$7.$6-$8/% - - -B+C,D,B*A,='?(B,C,A+@*?'@'>(9'<(?*A, >)?*>*9%6"8$9&=)<&<'9$4 3 4!6$5#2"0 .,*&(('$#"!   -  "        -  -   -   -          -     -        - - - -  - - -         - -       -       - -   -5.$2+!1* 4-#70&60%4-#70%6/$5.$6/$6/$2+ 0)4,!5-"3+!2* 5-"5-#6.$6/%5.#5.#5.#3,!1*3,!5.#5.#6.#70$5-"4,!4,!6.#5."5-"7/$5-"5.#71%5/#4-!6/#6/$80%6.#5."80%91%6."6-"7.#6.#7/#80$80%8/$5-!5, 7.#7/#5-!3+4* 6-"3* /'.&2*4,!7/#2*2)6-!8/#90$90$5+ 4*7-":1%90$7-!6."8/$90$90$90%91%6-!80$:2&8/#6-!8/$;2&90$7-"7-"4+6-!90%8/$80%80%7/$:2&<3'91%8/#<3(;3(91&<4*;4*<5+;4*70&6/$80&7/$6/#6/#3,!+$333*)(&&&!!" !  eeeoooe]ZmhgmkkhhihijklnhijLJJ748989,,,(((  )))***  !!!$$$&&&&&&&&&$$$############"""$$$'''000222222*"0(1)4-#6.$6.$70&;3);3)80&5-#70&92'92&<4(92&80$6."80$:1%80#5- 5-!5-!90$91%8/#:/#>3(<2&;2&>5*=4(6-!5, 7-!8.#9.#8.#3*2)2)4*7-"5*1&4)6+ 7-!5+ 2)2*6- 8/"9/#:1$;1%7-!5+7-!8."8."9/#:0$7-!4)2'0%1&1%5)8-!:0$90%80$8/#8/$80$;2'<3(<3';3'91%6/"81$<3';2&;2&7."80$;2&91%7/#;3'<4(;3'80$7/#92&5/"1+3, 92&71$81%81%5.#4-!7/#70#81$70$4-!1*2+ 2+ 1+ 0*0)1* !!!"""#########$$$$$$######$$$$$$$$$$$$"""  """###"""###%%%$$$###""""""!!!$$$""""""""""""!!!"""  """#########""" """ !!!!!!!!!!!!"""!!!    !!! """!!!"""  !!!!!!!!!""""""###"""!!!!!!   !!!  !!! 6.$/(2* 6.#7.$5,"4* 7-#90%6-#6.$91&8/$7.#7.#91&;3(;4(80%3, 5."3, 6.";3';3'<4(90$7/#91%;2&=4(;2&;1%=3':0%6-!6-!8/$6-#8/%;2'8/$7.#7.$8/#;2&:1%:1%;2&;2&:1%;2&<3&;2&<4'<4'<4'81$81%>7*81$70#;3'=5)<3(6."2+;3'=6*;4(:3'90%;2&<3(:0%90$:0%9/$8/$;2'=5)>5*=6*;4(80%81%<4(?7+=4)80$:1&<4(:2&4+ 3+<3(<3(6-":1%=3(;1&2)4+7.#8/#;2'>6*>6*<4(>5*>6*:1&7/#<4(8/#4+ 7."=5)>5)7/"90$>6*;3'7/#91%=5)<3':0$90$<2&90$=4(=4(9/#7-!>4)>4)<2&;2&:0$;1&8."8/#:0$8."9/#;2&8/#;1&;2&8.#8/#;1%:1%8.#6.":2&80$7/#:1%:1%;3&90#91$:1$;2&=3'7-!3*7.">5)A7+>5)=2'?5)>4(8/#8/#;3'92%3,5,8/";2'<3*90$91#90(8.'7/ :1#=4);2'8/":1%;3'>5)<3'91%5-!5-!7/#7/#7.#5-"8/$K@1 - - -B+B+B+B+@'<%<'?)C,C,B+@*@(8$5$9&;(?+ E1&A-"<(:'6"3 :(;(7$A-!8#:%2+ 3!6%7&4#0!,)%'*'#$!          - - -        -    -         - -        -      -   -        -  -      -    -      - -  - - -5.#4.#3,!2+!5.$70&60%5.#70%6/$5.#70%70%3,!1)3,!4,"2* 0(2* 3,!5-#6/$4-#5.#70%4-"3,!4-"70%5.#5-"6/#6.#4,!5-"5-"5-"2+ 5-"3,!6.#92&6/#5.#6/#6.#81%80%6.#91&80$6-!6."80$7/#7/#80$80$7."4, 4, 6-"6."5-!4, 5,!4+ 2)0'0'4,!5-!7."2)3*7.#8/#90%:0%7-!5+ 7-!:0%9/$6-!7."91%90%90$90%;3'7.#90%:2'7.#6-!8/$<3':0%7-"8/#5, 6-!90%8/$80$80%80%;2'<3(90$7.#<3(<3(91'<4*<5+;5*:4)81'92(;2(8/%91&7/%2*/'000)(((((""#   eeegggpki{|~abcbbaLLK311:67865(((###!!!)))&&&"""$$$%%%&&&((('''%%%$$$###"""!!! !!!,,,000/004-",%/(5.#5.#5.#6.$;4*:2(6/%5.$70&92&:3';3'70$6."6."91%:2%6.!5- 7/"80#90$;2&7."9.">4(=3(;2&=4(=4(7."8.":0%:0%8.#6-!3*1(1)3*8/#5+ /$2'6, 8.#8."5, 5- 7.!80#:0$:0$:0$7.!7-!8."9/"8."9/#;1%7-!3)2'2'2'2&5)8-!8."91%7.#7/#7/#8/$;2&=4(<3(<3':1%6/"81$<3'<3';2&7."90$<3'91%6-!:1&;3':2&70$70$92%5."2+4-!93&81%81%81%5/#5."81&:3'92'7/$1)0)4,"3,!1*0)0)3,!!!!$$$$$$$$$$$$###$$$%%%###$$$$$$%%%###"""!!!!!!!!!!!!"""######$$$&&&$$$$$$""""""###$$$"""""""""#########!!! !!! ######""""""!!! !!!!!!  """"""!!!!!!!!! """!!!!!! !!!!!!!!!###$$$$$$""" !!!       ! 5.#7/%3+!3,!6-#7.$6,"4* 6,"8/%7.$7/$91&:1&80%80%91&;3(:3'70%5.#6/#4-!7/#<5);3'<5)91%80$91%:2&;2&:1%<3&:2%7."4+5-!90%90%90%<3(90%:1&:0%8/#;2&<3';2&<3'<3';3&<4'<3';3&<4'<4'<4'81$82%?9,81$7/#;2&>5)=4)7/#2+;4(=6*;3'91%80$:1&=3(:0%8.#;1&:0%8/$;2&>5*>6*=5):3'6.#80%=5)@8,=5)90$:2&=5);3'4, 3+;3';3'7/#;1&<2'9/$2)4+ 7.#7."90%>6*?7+=4)>5*?6+91&7."80$6."3+4, :2&<4(5-!80$?6*;3'7/#:1%<3';2&:0$;1%<3'90$=3'=4(8/#6-!>4)>4)<2'<2&:1%;1&7."8/#:0$6-!6-!:0$8.#:1%<2&90$90$;1%;1%8/#5-!:2&80$8/#:1%:1%<3&80#91$:1$<3&=3'7.!6-:1%>6*C9.@6+=3(?5*>4(8/#90%<4(:3&6.!6- 8/!;2';2)7.!90"90(8/&6.90"<3(;2&7/"90$;2&=4(<3(:2&7/#8/#91%8/#7."5,!6."=4( B*A+A+B+B);";#?(>(A*C+B+@):%3!3"8%:%?,!;'?,":'5"3 6#:(<*:&5"5"1///3#3"3#/!*" ! &'&"  !  - -         -       - -   - -    -      -    -    - - -   - -    - -              -     - - - - - - -/(4-"6/$6/$5.#3-"5.#60$5/$3,!5.#6/$5.#70%70%3,!2+ 5-#5-#4-"2*1)2* 5-#6/%3,"4."70%5-#5-#4-"81&4-"3+ 5-"5-"3+ 4,!5-"3+ 2+5.#6.#5-"81&80%7/$7/$6/$91&80%6.#91&;2'90$7.#90$90%80$80$8/$6."5,!5-!5-!6."7/#5-!4+ 4+ 2).%0'5,!5,!7."4+ 3*5-!7.#:1%:1%8."5,5, 9/$90$6-!7."90%8/$7/#90%<4)8/$91%:2&8/#6-!8/#=4(<2'8.#:0%8.#6-!8/$8/$80%80%80%:2'<3'90$7/#<3)=4):2'<4*<5+<6,;5*81'80&:1'7/$81&6/$1)3,!---+*****"##!!"===aaadddgstƭ}~Z[Z__^CCB!!!,++999222###"""&&& """$$$$$$&&&(((((('''%%%"""###""""""%%%,,,///---/'+$1* 3,"3,"4-#6/%;3)70&4-#6.$91(91&:2&92&91%6."7/#:2&:2&7/"6.!90$:1$:1$;2%7."9/#<2&;2&;2&=5)<4(9/$6,!;1&;0%9.#6+ 3)1(3*5, 8.#5+1%4)9.#9/#6,!4+5- 6-!8/#;1%:0$9/#7- 7- 8."7-!6, 7-!;1%8.!4)2'3(3(2&4)7, 7,!91%6-!8/#7.#7.#90%<3';2'<3(;3'7/"91$<3'<4(;2&7."90%=4(:1%7.":2&;3':3'81%91%92&5."2+6/":3&92&81%81%6/#6/#81&:3'70%3,!1*0(3,!3,!1*0)0)! !!!""""""######!!!""""""%%%%%%$$$$$$###""""""######$$$""""""######$$$%%%$$$$$$!!!!!!###$$$$$$!!!!!!"""###"""!!! """!!!!!!"""!!!!!!     !!!!!!!!!!!!!!!!!!!!!""" !!!!!!!!!######$$$"""!!!!!!   !!! 2)4+!5-#5.#2+ 4-"8/%7.$6-#4* 5,"8/%8/%7/%80%8/%7/$7/$91&<4);4)80%7/$70$5."80$=5)92&;4(91%80$8/$90$91%91$=4(;2%7/"5, 6-!90$:1&:1&<3':0%<3';1&9/$<2&=3(:1$;2%<2&=3'>5(=4';2%=4'>6(:3&80#93&?9,81%91%;3'>5)=5)70$3, ;4(=6)<4(:2&80$:1%<3'9/$6-!:0%;1&90$91%=4)=5);3'91&4,!80%=6*@8,=5)90%;2'>5*=4(6-"5, <3'<3'90$90$;2&:0%3)5,!90$6-"80$>5*@7,=5)>5)?7+80$8/#:1&90%5-!6-";2&<3'5-!90$>6*;3'80$:2&:2&90$90$;1&;1%9/$=3(>4(90$8.#>4)>5);1%;2&90$:0$7-!9/$90$6, 7-!90$7."90$;2&:0%:0%:1%:1%8."6.":2&80$80$;2&:2%<4'90#:1%;2%<3'>4(:1$:0#:2%=4(B9-@6+=3'>4)?5);2&<3(<4(92&81$7.!6- ;2':1'5,8/!:1)90&7.90#:1':1%7."80#;3&=4)=4):2&8/#90$:1%80#7/"5, 6."=3(A*A+?+B+B*;#9!>&B+?(?(B+C+ <'4"2"6$6#7%>+!;):(6%0/5"9&8%:'6#2/+ 2 4$0 0 0!+%"#)'%  "    -      -      - - -   - -   -        -          -    -     - -      - -  - - - - -  -     - - - - -  3,!0)0)4-"60$6/$5.#3-"5/$5/$5/$70%81&70%4,"6/$70%1*2* 7/%7/$5.#2+ 2* 4,"7/%81'3-"4."60%4-"5.#4,"81&4-"3, 6.#5-"3+ 4,!4-"2*3,!4-"6/$5."70$6/#6/#6/$6/$91&80%4-!80%90%:1%8/#:1%<3':1&91%80$6."6."6."5-!4-!6."3+ 3*2)2)0&/&6-!7-"7-"5,!4+ 7."90%90%80#8/"4+3*8/#;1%7."7."91%90%7.#91&<4(7/$80$91&:1%7."8/#=4(>4(9/$90$9/$7-"8/$90$80$90%80%:1&:2&90$7.#;2(<3):2(<4*<6+=7,;5+81'80&90&8/%81&5-#3+!5-",*)))(()($$% !  IIIZV[dbcigfjjkvyzw{~`aaUUSWWW;;:!!!***333)))$$$  !!!"""###'''((((((''''''###$$$######(((++++++**)***+#/(3,"2,!4-$70&91(6.$2+!6.$;3)92'70$7/$;4(91%7/#:2&;2&7/#7/"80#90#:1$<3&:1$:0$:0%80$91%<3'<3':0%8.#<2';0%8.#5+ 3*2)5, 7.#8."5*1&2'6,!7-!4*1(4,6- 8/#;1%90#:0#7-!7-!8/"8.!6, 7-!:0$8."5*3(4)3(1&4(6+8-"80$5-!7/#7."6."7.#90%90%<3';3'6/"81$<3'<3':1%6-!90$>5):2&6."80$91%81%70$81%81$6/"3, 60#92&:3&81%81%6/#5.#70$81%4-!3+ 4,!2+ 4-"5-#2+ 0)2+ %%%"""### !!!""""""###%%%$$$######!!!!!!"""""""""###!!!!!!"""$$$%%%$$$$$$### ###$$$%%%############""""""""" !!! ### !!!""" !!!  !!!"""  """ !!!"""######"""!!!!!! !!!!!!      3*0(2)4,!4-"3,!6/$90&7.$7-#6,"7-#8/%7/$7.$8/%6-"6.#7.#80%:3'=6*92'80%92&81$:3';4(:2&;3';3'7/#5-!7/#90$91$;3&;2&80#7/#8/#90%;2'<3(;1&;2&=4(:0%9/$<3'=3';1%:1$<2&;2%?5(>4';2%=4'?7);2%80#<4'@7+;3':1%<4(>6*=4)6-"3+<3(=6*<5):2&80$90$;2&9/#6,!8.#;1&:1&;1&<3(<4(;4(80%2*80%>6+@8-=5)91%:2&=4(<4(7."6-!;2&<3'90$9/#<2'<3'4*5, 91%6-!91%=5)>6*=5)=5)?8,81%7.#:1&:2&6-!80$=5);3'80#:2&>6*<3'91%:2&90$;2&9/$;1&<3':1%=3(>5):0%8/#>4)=4(:1%:0$8/#:0$7."90$:1%6-!8.#:1%7-"9/$:0$9/#9/$90$9/#6-!80$;2&7/#8/#<3';2&=4':2%<3&<3'=3'>4(;2%;1$;3&>6)A8,>4)9/$;1&>4*=4(<4(:3'81$70#6- 7.!;2':0'6-7/!;1):1&90!;2%;2':1&7.#80#<3'>5*>5*:2&80$91%91$7/"7/"5-!80$=4(A+@+A+E,=%:"@(B*A*>'@)C+@)6$2"6%:%8$9'9';)3"0/3"6%5#5#7%8&3!00 /6%,,).!($$%&$          -  -         - -        -   - - - - -        -  - - - - -   - - -    -       -   -    - - - -   7/%5.#3,!1*1*4-"5/$5/#4-"3-"60%60%71&6/$70%81&4-"5.#6/$2+ 3+ 91'7/%4,!1)3+!6.#7/%81'3-"4-"6/$3,!5.#4-"70%4-"4-!6/$5-"3+ 5-"6.#5-"5."5."5."5.#81&70$6/$7/$6/#81&80%3,!91&;2'=4(91%:2&<3'90$91%80$5-!5-!7."6."6."5."4+ 3*4+4+ 1(0&6-!7."8/#6, 5+7."91%80#90$8."4*2)8/#<2'8/#7/#90%90%7.#;2'<3(8/$80$91%:1%8/#7/#;2&=3(9/$9/$9/$7.":1&:1%7/#80%91&:2&:2&90%7.#;2'<4):2(<5*=6,<6+:4)81&81&80%5,"6/$3,!1)6.#(&%'&&&&&$$%!!! GGGRPSZYZ^\]WVXY\]begXY\OONOOO"""%%%%%% !!!###&&&''''''&&&'''###$$$%%%&&&)))((()))''&&&&+$0)3,#5.$4.$81'91(6/%3+!70%<4*;3(70$70$<4):2&6.":1&:2&7."7.!7/"80":1$;3&:0$:0$:1%8/#80$;3'<4(;1&9/$:0$9.#7-!5+ 5, 4+8/#:1&8.#7,!1%3(8-"8."4+1(3*5, 8/#;2%:1$:0$7-!8.!9/"8.!4*5+9/#6, 4)3(4)3(1%4(7+ 8.#7."5, 7/#7/#8/#8/#8/$8/$<3'<4'70#:2%<3'<3':1%5, 8/#>6*:2&6-!8/$91%92&91%92%92%5."3, 5."81$81%70$70$4-"2+ 6/#70$5-"5.#5."3,!5.#5.#1*/'2+ (((###!!! !!!######$$$$$$"""!!!"""!!!"""######"""###!!!###"""$$$%%%$$$$$$$$$""""""###$$$$$$!!!!!!""""""""""""""" !!!!!!%%%###!!! !!!!!!!!!  !!!  !!!###"""""""""!!!!!!!!!""""""!!!  !!!!!! 3*3*/&2*7/$7/$4,!5."80$8.#7-#6,"7-#8/$6-#6-#8/$4+ 6."4,!7/$:2'=5*92'92&;4(:3';4(;4(;4(;3':2&7/#5-!90$;3':2%;3&<3&91$90$90$:1&<3'=4(;2&;1&<2':1%90$;1&<2&<3&:1$;2%;2%>5(>4';2%=5'@7*;2%90$=5(?7*<3':1&;3'>5)=4)5,!4+;1&?5*<4(:1%80$90$;1&<1&5+ 8/#;1&:1&<3(>6*<5):3'7/$1)91&?7,@8->6*:1&:1&<4(<3(7/#5-!90$:2&9/$9/$=3'?5)6-!4+8/#5-!80$<4(>5)=4(<4(=5)80$5-!:2&<4(6-!80$<4(<4(:2&;3'>5)<4(:2&:1%90$:1%:1%;2&;2&;1&=3(?5);1%8/#>4(<3'90$8/#8.#;1&9/#8/#;1%5, 7.";2&8."9/#9/$8."7-!7."8."6-!90$;2&7/#80$;2&:1%;2%90#;2%>5(<3'<2&90#90#<4'>6)?6*=3'7-";1&A7,:2&91%:2&81%6.!6.!90#=4)<3(8/!6.!;1):1&91#;2%<4(<3(90%90#=4(@7,>5*:2&91%;2&:2%80#7/"5- 80$=5)QE6A+@+ A+G-=$9!@(G/"E- C,B+B+B+=%4!4#>)='8#7#7&2!4$1!--1 2 6$5#5$3"/1!3#,2!'$ (*'("      - -           - -     -    - - -   -    -   -        -  -         -     - - - -  - -      - - - - -  5-#6.$70&3,"2+!0)2* 6.$70%5.#2+!4-"60%81&81&6/$5.$70%6/$70%6/$3+!3+!80&6.$3,!1*4-"6/%6/%70&4-"4.#6/$3,!5.#6/$6/$4-"5."6.#5-"4,!5.#4-"5."4,!5."4,!6.#81%7/$80%80%6/$91&81%6.#;4(;2&;3'80$90$:2&90%:2&8/$3+3+6."7/#8/#6."6-"5, 6-!6,!0'2(7-"8.#8.#6,!4*6,!90$90$:1%:1%6- 3*8/#;2&7."7."90$90%6-":1&;2'7/$6.#90%:1%90$7.":1%<2&90$:0$;2&7.":1&:2&90$91%91%;3';2&:1%7.#;2'<3)92';4)=6+=6,:4)81&81&90&5-#6.$6.$0(6.$'%$%%%''(&''!!"!!!  DDDMLMQQQVVVSSSNNNRRRNNNEEEEEE """$$$''''''&&&'''$$$###$$$)))))))))(((#"""""/'2* 6.%5.%4-#70&7/&5.$3+!5.$;3(92'7/%81&;3(92&80$:2&:2&7/#7/"8/"91#:2%;3%:0$;1%;2&8/#8/#=5(>6);2&9/#:0$9.#9.#7-!7-!4+6-!90$8."9.#2&4)9.#9/#5, 4+6- 8/#:1$<3&:1$90#8.!8."8."7-!5+8."8/"5+3(3(4)3'/$3(8-!5+ 6-!5-!6."6."6-"7."8/#7.#;3';3'70#:3&=4(<4(;2&5, 7/#=4(90$5-!7/#:2&91%80$70$92%5.!2+3, 5/"6/#5.#5."5-"2+ 6/$70$6/$70%4-!3, 6/$70%2* .&3+!***###""""""###"""$$$$$$$$$$$$!!! !!!!!!"""$$$###$$$$$$######""""""###""""""#########"""######"""!!!!!!!!!!!!!!!  """###    !!!!!!    !!! !!!###"""!!! !!!!!!!!!""""""    !!! !!!""" !!1(5, 5,!2)5,!7/$6.#5-"6.#90%90%9/%7-"7-#90%8/$6."7.$2)5-"3+ 7/$<5)=6*:3(:2':3'81%91%;3';3':2&90%90$7/#:2&<4(<3'<4'=4(:1%80$90%:1&<3'=4(<3'90$90%:1&90%:1%<2'<2&<2&;1%<3&?6)>5';1$>5(@7*;3&:1%=5(?7*<4(:2&;2&=4(>5*7."4+:/$>5)<4(:2&80#:0%<2&<2'6, 7."=4(:1%91%<5);5(;5(<4(6."81%>7+>6+>6*;2':1&<4(<4(8/#6-!:1&<3'9/$:0%<3'?5*8.#3*8/#5, 7/#=5)=5)<4(91%81%6."5-!<4(>5*4, 91%=5)=5);2&;3'=5)<4(;2&91%:1%<2';1%90$:0$;1&=3(?5);1&8.#<2&<2'90$8/#7-"<2':1%7-!:0%4*6-!;1&8."8/#8/#6,!5, 7-"7-"6-!7.":2&91%90$;2&:1%90$7/":1%=4(<3'<2&8/"8/"=5(>6)?7*:1&6,!=3(:0&7/$7/$<4(92%6/"7/":1$?6+>5*:1#7."<3*;3'80"91$=4(=4);2&90#>5(@7,=4):1%:1%<4'<4&;3%:2%7/#91%=4(B8,B+A, B+J1!E+=$?&E- D- D-C, B, A+='8"7":&;';'7#5!7$8'.,3#1"01-1 3"00./+(% &('($%!             -    -       - - - -   - -   - -      -     -   - -        - -   -        -   -  - - -  2* 0)3,"6.$6.$3+!2+!2+ 4,"70%70%5.#1*4-"60$81&81&6/$82&81&5/$4."4-"2* 3+!6.$4,"5.#2* 4,"6/$6/%5.$4-"4-"6/$2+ 4,"6/$6/$5.#6/#7/$6.#5.#6/#6.#4-!4-!6/#4,!5."81%81%80%80%6/#70%6/$70$;4(:2&:1%80$7/#80$91%:2&90$3*3*6-"8/$8/#6."6-"4+ 6-!6-!1(3)7."9/$8/#6-!3*5+ 7."90$:1%:1$7.!4,7/#:1%7."7."90%90%4+ :1&:1'80%6.#91%:1%90$7.":0%;1&;1%9/$:1%9/$;2':1&90$91%80$<3';3'91%7.":1';2(80&92'<5*=7,:4)60%7/%8/%6-#5.#4,!0($$$'%%(('(()&&'##$"""!!    @@@AAAHHHMMMJJJFFFHHHFFFBBB=== !!!"""%%%((('''&&&$$$###$$$'''((()))(((((("$"+%0)4.$5.$5.$7/&6/%4-#3+!3,!:2'81&70%91':3(81%80$:2&90%7."8/#8/"91$;2%<3&:1$;1%;2%7/"7/"<4'<4'8/"8."<1%;0$9/"7- 7.!3)3*8/#8/#7,!2'6, :0$8/#5+5, 80#:1%;2%;1%9/#9/"8.!:0#8."6, 3)7-!:0#5*1&1&2'4(0$3'9."5, 7/#7.#8/$7/#7.#7."7."6-";2&<4(81$:2%=4(?6*=4(7."8/#:2&7.#5,!80$;3'81%6/#5.!70$5."2+2+5."70$6/#6/$5."4-"6/#70$7/$6/$3+ 1*6/$6/$2+ .&2+ !!!###"""###""""""######$$$###!!!!!!!!!!!!###%%%$$$$$$%%%%%%###"""""""""###$$$$$$###!!!!!!###$$$""""""""""""!!! !!!!!! !!!!!! !!!"""   !!!""""""!!!  !!!!!!!!!!!!"""###""""""!!!"""""""""!!!   !!!!!!2*2)1(3*4+2)4+ 80%6.#5-"7/$90%:1&;1&9.$8.#9/%8/$7.#90%4+ 5-"5-"7/$:3(=6*<5*:2'81%4-!6.":2&91%:2';2';3'90%<3'=5)<4'=5(=4(:1%8/#:1&;2&;2'=4);2'8/$7."90%:1&;2&=4(;2&<3':1%;3&?6)<3&:1$=5(?6)<3&:2%=5(?7*=5):2&;2&=4)>5*8/#4*8.#>4)<4(:2&7/#:1%;1&<2&5+ 7-"=4):1&80$=5)<5)<5);4(6."80$=5)=5)>5*<3':2&=4)=4)80$6.";2&=4(9/$9/$=3(>4)90$4+91%5, 7."=5)<3';2&7/#81%80$6-";3'<3(2*90$>6*=5);2&;2&<4(<3':2&80$;3'>4);1&7."8/#:0$;2&@6*;1%7.":0%;1%7."7."6-!=3';1%6, 9/#4+8.";1%7-"8/#8.#5+5, 8.#6-!6-!6."91%8/#8/#90$:1$90#7/";2%>5(>4(?5)9/"7.!:2%>5(?6*;2&8.$90%:0%6.#80%<5)92%80#91$<3&?6+?6*<2%;2%=3):1$8/"90#=3&>5+:1&90">5(@7,=4);2&:1%=4'<4&<4'<3':1%:2&=5(@7+C,B, B+I0!G-B*A)B+D- B+?)?*?*;&8#7"8%9&9%5!4 6#5"3 3#3$8) 5&5$3!+,/1!0 .+)&# &)%!  !   -    -    -  -   - -     - -   - - -     -  -       -        -      -   - -          - - - -  81'6.$1).'3,"6/%4-#3+!3+!3,!4-"70%7/%4-"1*3,!60%70%70%4.#70%92'6/$4.#2+ .'4,"6/$4-"5.#1*3,!5.#6.$4-#5-$4,#2+!1* 2+!3,!4-"6/$6/$70$6.#5-"4-"5.#4-!70%70$6.#70%91&80%80%80%70%70%5.#81%:3':2%:1%91$8/#8/#91%90%90$4+ 3*6-"8/#7."7."6-!3)6,!6,!4+3)7."90$90$7-"4+7-!8/#91%;2&:1%8/"4, 6-!80#7."7/#90%:1%7."90%:1'90%7.#90%:1%90$7/#:0$<2';1%7."9/$90%<3':1&91%:2&80$<3(<4(90$6.":1&:2'91':3(;4);5*93(60%7/$80%6.#5-#4,"0(###%$#''&(()&''##$$$###"!!   - - -:::999???FFFDDDCCCBBBCCC???777 !!!###&&&'''&&&$$$###%%%((())))))((('''#$"'!-'3,#5.%5.$5-#6.#7.#5,!7/$91'92(81':2(:2'70$80$<3'80#7/#:1%;2&<3&<3&<3&;1%;1%;2&91$80#<3'=5(:0$9/";1%8."5*4*8/"4+5, 7."8/#5+2'7,!9.#7-!4*5, 80#8/#:1$;2&9/#7-!7- 9/#8."6- 3)7- 9/#4*2(3(2'5*1%3'8-!6-!8/#90%91%:1%8/$8/$8/#6-":2&<4'92$;3'=5)>5)<3'7."7."91%6."4+ 80$:2&70$6."5."70$6/#2+ 3, 6/#81&6/$70$3,!4,!6/#70%6/$4-"0)0)6/$5.#2+ .' """%%%######""""""!!!"""###""""""""""""!!!###&&&&&&&&&&&&%%%$$$$$$############$$$%%%""" !!!###$$$###"""######"""  !!!""""""  !!!"""!!!!!!!!!!!!""""""#########"""!!!"""###!!!   1)2*2)2)1(4+ 2(2)8/$7/$5-"80%8/$:1&:0%8.#8.#90%8/$6.#7.#4+ 5-"6.#91&:3(<5*;4)91&81%4-!6/#80$70$;3';3';2'80$;2&<4(;3&<3&<3'90$7/#;2&:1&:1%<3':1&6-"5,!90%;2&;2&<3'<3'<3':1$;2%=4(;2%:1$>4'>5(<3&:2%=4'?6*=5):1%;2&>5*>5*9/$4+8.#>5)<4(;2&7.";2&;1&;1%4*6,!=3(:1&80$:2&:3';4(;3'6."80$=5)>6*>6*<3(;2'=4(<4(80$5-!:1%=4(8."8."<3'=4(8."4+;2&4+6-!=4(:2&;2&;3';3'7/#6-">6*=5)3+80$>6*>5):2&;2'<4(;3':1%80#<4(?6*;2&6-!6-!:0%;1%;2&;2&8.#:0%;1%7-"9/#7-!=4(:0$6-!8.#6, 9/$:0$6,!8/#8.#4*5, 8/#7-!6-!7."80$7."8/#80#90$90#7/":2%=4'=3'>5(7.!6- 90$<4'?6*;2&7-#90%:1'5-#80%;4(:3&:2%91$;2%A7,@7+<3%<2&>4);2%9/":0"=3&>4+9/$8/!=4(@6+<4(:2&90#=4'<3&;3%;3'91%:1%<3'?6*D- C, B,B*B)A&E,C,@)B+@+9$5!8$6"5"6#8%6#6#326#6#203#5&5%5$/00// 1!.-'&())%  !   - -   -        - - - - -   -  - - -         -  -  -   - -   -     -       -  - - - -    - - -  - - - - 6/&70&6/%4-#/'/(4-#7/%4,"3+!3,"3,!3,!6/$7/%5.#2+ 4-"81&60$70%3-!5/$81&70%70%2+ .'2* 5.#4-"2+ 0)4-"6/$6.%5-$3,"5-$4-#4,"0(1* 3,!6/$70%91&5.#2+3,!6/#6.#80%81%6.#80%:3'7/$7/$80%80%7/$4-"80%92&;3&:2%91$80#80$91%:1&8/#5, 3*6-!7."6-"7.#6-"4+ 6,!5+ 5+ 3)8."9/$:/$7-"5+ 8."8."91%;2&91%8/#5, 5-!8/#80$8/#90%:1%90$90$;2':1&90%90%91%90$7."8/#<3';2&7-"8/#:0%;2'90%90%:2&81%;3'<4(80#6."90%:2':2(<5*<6+<6+93(81&7/%7/$5-"4-"3+!/'"""#"!''&((('''$$$&&&&'&###  333444777<<<>>>???======:::555!!!!!!!!!######%%%$$$######&&&))))))***'''%%$$%#)#.(3-$5/%7/%8/%7/$5-!2*8/$91'80'80&;3):2'6/#:2%;3&90#8/"<3&<3&=3'>4(>4(=4(<3&=4'<3&80#91$=4'<2&:0$9/#8.!4*3)8/"7-!4+ 5+ 7-"5+3'8-":0$7-"4+6."8/"6.!8."9/#8/"5+6, 8.!:0#7-!5+8.":0$5+3)3(2'5)0$2&7,!6,!8/#90$91%:1&7.":1&<3'90%:2&;3&92%<4'=5)>5)<3'8/#7/#91%7.#4, 7/#91&80$70$70#81%6/$3,!4,!70%92&6.#6/#4-!3, 70%70%5.#4-"1*1)4-"81&3,!/($$$"""$$$$$$$$$$$$###!!!"""######"""###"""!!!$$$'''&&&&&&'''%%%#########"""$$$""""""### !!!######"""!!!######"""!!!   !!!  !!!!!!!!!!!!  """"""""""""###""""""###""" 3+ 2*2*2)2)2)5+!3)2)8/$6.#5.#80%90%:1&9/$8-#8.$:0&8/$6.#6-"4,!5-!6.#80%:3(:3(92'92&:3'70#5."7/#80$;3';2'91%80$:1%<3'<4'>5(>5(7/#7.";2'90%90$:1&90%5,!5,!:1&90%80$:1%=4(<4';2%:2%<4';2%:1$>5(>5(<3&:1%<3'>5)<4(90$:1%?5*>5)8/#4)7-"=4(<3';2&8/#<2&;2&:0%4*7-"=4);2':2&;4(:3';4':3'4-!6/#;4(=5)<4(;2&:2&<4(<4(7/#3+80$=4)9/#8."<2'=4(6-!3*;2&2*6."<3';3'<4(;3';4'7/#6."?6*?7+6."90$>5)=5):2&:2&=4(>5(91$90$=4(>5):1%6-!8.#;2&;1&<2';1&9/$=3(<3'7.":0$8.#=4(9/$7."8/#7-"90$:0$6-!9/#9/#5, 6,!8.#7-"6-!8/#7/#7."8/#90$:1%91$8/";2%<3&<3&=4'8.!6.!92$>6)A8,;1&6,":1';2(80&92&92&81$91$90#;2%@7+A7+<3%<2&>4)<3'90#9/!>4'?5,:1%90"=3(@6,;2&;2&90$;2%;2%:2%;2&:2%:2&90$<3&F- D- B,@+=&=#E)I.D,@)>(;'5#0/16$6$8%7%2 2 4"5"5#4"2 2 4"4#3"2!,0 1!0 ,)(($%%&' !!          -         - -     -    -    - -      - - - -    - - -  -        -     -  -    - - - - -  2+"5.$6/%7/%6.$/(.'5.$80&4,"3+!3,"4,"4-"6/$70%7/$4-"6/$:3(82'82'4-"5.$70%81&92'3,!.'1*3,!4-"2+ 0)3,!70%70&5.%5-$5-#80&5-#3+!3,!3,!6/$81%:2'6/$2+ 2+ 4-"4,!7/$80%70$91&:2'7/$7/$90%80$6-"5-!6."90$:1&<3'80$6-!80$90$:1%80$5-!3*5,!5,!6-!7."6-"7.#6-!6,!5+3)8.#:0$;1%9/$7-!8.#7.":1%;2&:1%90$6-!5-!80$:1&:1%:1%90%8/#:1%;2&:1&90%90$91$91%7."6-!;2&;1%7."90$90$:1%80$90$91%80$:2&;2&7/#6-!8/$:2';3(<5*<6+<6+:4)92'80%7.$4,"3+!1)0)'"!!)(())('''%%$&&&&''&&&###  ,,,...000222666777666444444///~|~}{~}|{{yyywww !!!!!!!!!"""!!!"""###%%%%%%$$$***((()))(''$$$!!!,&1+"4.%5.%70&80%8/$5,!2*80$80&7/%7/%;3(91&6/#80$<4':1$90#:1$;2%<3&>4)?5*>5*<3'=4(=4(90#;2$@6)<2$:0#:1#6,5+6,8.!7.!5, 5- 8."5*4)9.#:0$7."4+6-!6.!90#:1$8/"8."4*5+8."9/#7-!5+7-!:0$5+3(3(1&3(0%2&7,!6-!80$91%8/$90$7."<3'>5*<3';3';3&92%;3&=5)?6*<4(90$7/#:1%7.#3+6."81%91%91%81%92&70$4-!4-"92'92'5.#5."3,!3,!6/$6/$4-"4-"2+ 2+ 4-"80&3,!/((((###############!!!$$$#########"""### ###%%%%%%&&&&&&%%%###$$$######$$$ """!!! !!!!!!!!!###"""!!!"""!!!!!!  """!!! """!!!""""""!!!  !!!!!!""""""""""""""""""!!! 2* 2+ 5.#4,!2)1(2)3*5,!4* 3+ :1&7/$7/$7/$90&;2'9/%8-#8.#:0&6.#5,!5,!4+ 3*3+ 6.#:3(;3(:3'92&92&92%92&92&81%;3'91%80$80$:1%<3';3&>5)?6*8/#7.";2&90%90%90%:1&7.#6-":1&;2':0%;2&=4(=4(<3';2&=4(;2%90$>5(>5(;3&:1$<3&=4(:2&8/#90$?5*?5*9/$3)6,!=3(<3':1%8/#<2&<2&:0$3*6-"?6*;3'5."92&<5)<5(:2&4, 6.";4(=5)<3(:1&91%<4(<3(7/#3+8/$=3(8.#6,!:1%=3(6-!3*91%2*6."<3'=4)=5);3'<5)91%7.#<4(=5)80#80$>5)>5)<3';2&<3'=5(:2%90$<3&=3':1%8."9/#<2&<2&;1&;2&8/#<3'=3(9/#8.#:0$<3'8/#8/#90$9/#;2&<2'9/#90$90$8/#8."8.#6-!5-!7/#6."6."4, 90$;2&:1%7.":1%;2%<3&=3'90#91$7/"=5(A8,;2'8.$:1';3):3(;4(=6*;4'80#7.!;2%?6*@7*<3%;1%<3';2&8/":1"?5(@5-:1%90!<2'@6+<2&<3':1%;3&<3&<3&;2&:1%:1&:1%:1%NB0E- D-!B, 8%:%9"A(K0M0G,>';&8$2 ,+,5$8&8&4"/15"6#5#4"4"2 4!4!4#/0 // -)! %$%$$    -   -  - -      -  -       -   -    -    -      -  - - -   -       - -  -     - -   -   - - -  - - *#0)1*!4-$81'70&5.$1)/(4-#80&5-#3+!3+!4-"6/$70%80&5.#3,!6/$:4)93(81'4,"5-#6.$70&:2)4-#/(4,"4-#3,"2* 2* 3,"6.$6.%5.$6.$5.$6/%5.$6/$7/$70%7/$6/#81&81&70$5.#5.#5.#91&80%7/$70%80%70$7/$80$7.#6-"6."80$<3'<3(;2&8/$5,!6-"5,!8/#91%5-!4+5, 5-!6-!6-!6-!7.#6-!6-"4*4*8."9.#;0%:/$6,!7-!6-!:1%:1&:1%:1%6-"4+ 7."90$8/$:1%90%7/#91%:1%:1%8/#90$;2%;2&8/#5, 90$9/#8.";1%9/$90$91%91%91%91%:2%:1%8/#5-!8/$91&:2':4)<6+<6+:4)81&7/$90%6.#4-"2* 1),$))(**)(((''&(('((('''### {zzvrqqkjrkjzzz(((((()))+++...000000000///,,,oonnoorstvvx $$$$$$######%%%$$$###))))))***'''&&%###-&1+"4.$4.$70%91&90%6."4, 80%70%7/%70%;3(92&6."7/"<4';2%91#;1$;2%<3'=3(=2'>5);2&<4'=4'90#<3%?6(<2$;1$;1$2)4+7- 8.!6- 4-6. 7/!5,1'8,!;/$9-"5+7-"7."8/#80#6.!7.!3*3)9/"7-!7-!3)8.!;1%6+3)4)2&2&1%3(8-"7.":2&:2&80$8/$8/$;2'=4(<3'<3'<4'92$:2&>5)@7+<3'8/#7."91%6-"2)4, 70$92&92&82%92&70$3,!4,!91&81&4,!4,!2+ 3,!6/$6/$4-"4-"4-"3,!5-#6/$3,!/(***"""!!!"""%%%%%%$$$$$$$$$"""""""""""" !!!!!!!!!"""$$$%%%%%%$$$######"""!!!"""!!!""" !!!!!!""""""""""""!!!  """"""!!!  !!!!!!!!!!!!!!! !!!!!!  !!! !!!"""""""""""""""!!!  !!!0)0(3+ 5-#5-"2)0'1(4+6-"5,!4, :2'7/$7/$7/$:1&;2'9/%8.#8.#:0%6-"5,!6-#6.#5-"4,!80%;4)<4)92&:3';4(92&91%;3':2&=4)91%8/$80$91%<3';3&=4'>6)7/#7.";1&:1&:1%:1&90&7.#6-"90%:1&90%;2&<3'<4(;3';2&<3':1%80#>5'?5(<2&;2%=4'=4(:2&8/#90$?5)?5*:0%4*8.">5)=4(91%90$<2&<3':0%3*6-!>6*>5*:3'=5)=6*=5);3'4-!5."=5)=5)<4(:1&91%<4(;3'7/#3+8/#<3'6-!5, :0%=3(6-!2)90%3+6.";3'=4)=4(<4(=5):2&7.#:2&<3'7."80$?6*?6*=4(90$:1$=4(;3&90$;2&<3'<2&:0%9/#:0%;1&<2&;2&7.";1&<2'8."7-!90$;2&91%8/#:2&90$<3'<3':2&90$:1%90$7."7."7."6-!7."8/#7."3*90$:1%:2%6-!91$90$<2&<2&:1$:2%81$>6)=4(<2'9/%8/%:2(:2(:2'<5);4'7/!7. ;2%@6+@7*<2%;2%>5(;1%7- :1!?6)@5-;2%90!<3(@6,<2';2&:1%<4'=4'<3&;3'=4)<4)<3(90$E:*D-E- B, <)7$5!:%C+L2!L0I,@(7#4!.+)1 3"7&6$115#4#2 4"5#3"3!1001"-,-*$')&(###!         - - -  -     -        -   -  -   -  -            -      -               - -  -  -  -   - - 1* -'-&0) 2+!4-#70&70&6.$1*-&2*!6/%4-#2* 0)2+ 6/$70%91&3,!1*4."92'92'70%6.$7/%6/%6.$80'4-#0)3,"6/%3,"0(1)3,"5-#6/%4-#5-#5-#3,!5.#5.#70%81&5."4-"80%70%70%6/#6/#7/$91&80%70%91&:2'80%7/$7/#6."6."7/#:1&;2';2'=4(8/#5, 6-!4+5, 7."5, 5-!5, 3*4, 6-!4+ 4+6-!6,!3*3)7-"8.#9/$8."6-!5, 5, 7/#90$90%90%6-"3+6-!90%90%7.#:1&90$8/#90$:1%8/#:1%<3'<3&8/#6, 90$9/#8.#:1%7."7.#91%:1&92&:2&;3&:2&90$6-!90$91%91&:3(<6+<6+:3(81%80$:2&70%6/$1)1)1)))())())())())(*++'''"""xxwoljf`^eee^^^aaaaaa$$$$$$$$$'''******+++++++++(((XXX___^^^bbbkkk~~~tqoonlmnmttuwwy ###%%%%%%###$$$&&&$$$'''*** !!(((&'&#.(2,#5/%5.$81&<3(91%5-!4, 80$70%70%80%<4)<4)7/#:1%>5(=4';2&<3&<3'>4(=4(<2'=5):1%<3'<3'90#<3&>5'<3%;1#:1#3)5+4+7- 5,5. 7/!8/!4*3)8-!:.#8-!5*6,!7."7."6."5-!6- 2)1'8."8."8."3)8-!<1%8- 4)4(2'2'2&5)8."7.#:2&;2'90%80$90%:1&;2';2&;3'<4'92$:1%=4(?6+;3'7."6.!:1%7/#4+ 6."91%:2&:2&92%92&70$3+ 2+6/#70$2*3,!2+ 4,"70%70%4-"4-"3,!3,!4-"5.#3,!/(""" !!!"""###%%%"""%%%$$$###""""""""" !!!###"""$$$###$$$%%%$$$""""""###"""!!!!!!!!!""""""!!!""""""""""""""" !!!"""  !!!!!!"""""" !!! !!! !!!!!!  !!!!!!!!! !!!  """"""!!!!!!!!!!!!  1)2* 1*/(1)4,!6-"2*1(2)4+ 7."4*6-!;3'70$70$80$:1&<2'9/$8-"7-"8/$6-"5,!7.#6-"5-"3, 81%;4)<4)92&:3';4(91%80$<4(:2&<3'91%80$90$:1%;3&:2%<3'>5(7."7.";2&:1&:1&:1&:1&7.#5,!8/$:1%:1%;2&;3';2&;2&;2&<3&91$90#>5'>4';1%;2%>6)?6*;3'91%:1%>5)?5*;1&5+9/$=5)>5):0%9/$;1&;2&:1%4+ 6-!>5)=5):2&>6*>7+=6);3'4-!5.">6*>6*>6*<3'91%<3(;3'8/$3+7.";2'6-!7-";1&=4)7."2)90$5, 6-";3'<3(;3'<4(;4(;2'6-"91%<4(7/#:2&>6*?7+=4(7/#90$=4':2%8/"<3'=4(>4(:1%7-"8/#:0$;1%;1&6-!:0$=3'8/#7."90$:1&:1%:1%<3'90$;2&=5);2&90$91%7/#5-!6-!7."7."7."8/#6-"5,!90$:1%90$4, 7."8/#;2&:1%90#91$81$<3'>4)>4*90&:0'91(81':2'=6*:3&6.!7. ;1$>4(>5(:0#;2$@6):0%7- ;3"@6+?5-<2%90!=3)?5+<2&:0%90$<3'<3':1%;3';3':2':1&5,!9/!C,E- C, >* 9&4"7$=(C-I1!J/C)?'8#0--0 2!4#5$5#006%6%3"2 5$3"3"2!.,--,*(&&*(#  "   - - -    -   -  - -     - -  -  - -  -  - - - -   - -      -  -    -  - -   -     - -      -    -  -  - -   - - 2+!3+!2+!-&,%1+!4-$6/%70&7/%6/%1* .'1)6.$4,"1* /'0)3,!81&:2(3,!0)2+ 70%70%4-"5.$70&7/%4-#7/%4-#2* 4-#7/%3,"0(/'2+!5-#70&4-#5.$3,!4-"5.#5.#5.#6/#4-!5."91&70%70$5."70%81%91&91&80%:2':2'7/$6/#8/$7.#7/#7/#:2&<3(<3(<3'7."5,!6-!7.#8/$7."5-!6."5-!4+7."80$4+ 4+6-!7."4+4*7,!9/$:0%8.#7-!5- 4, 6-!8/#90%90&80$4+ 5,!:2&7/#6."8/#91%8/#9/$;2&8/#:1%=3';2&90#7-!:0%:1%8/#:1%7."6."90%:2&:2&:2&;3&<3':1%7.#90%:2'92':3(<5*:4)82&70%80%:1&5.#4-"2* 2*/'!!!))())())((('**)*+*'''"""qpqmki[UQ[[[\\\UUUIIIKKKKKK#########%%%((((((***)))***$$$BBBGGGHHHKKKSSS\\\```hhhpppmjillllkm """%%%&&&######&&&%%%'''***''&())&('3-#-'1+!2,"5/$91&=5)91%4, 4, 7/#80%81&91&<4)>7+80$<3'>6);3&:2%;2&;1%=3(<3'=3(;3'80$;2&;2%8/#<3&=4&;1$;1$;1$3*3)5,8/"7.!7/!7/!7.!4*3(8-!:/#7, 4)6, 6-!8/#80$4, 7.!4*3)8."8/"7-!4*9."=1&9.!5*4(4(3&1%3)8.#8.":0%<3'90$90$80$:1%;2';2&;3'<4(91$90$;3'>5);3'6-!6-!:2&80$5-!80$92&:3':3'92&92&80%3, 2*4-!6/#3,!3,!3,!4-"7/%70%5.#5.#4-"3+!4-"5.#2+ /( ###"""###$$$$$$$$$%%%$$$###!!!!!!"""!!!###  $$$#########"""######!!!"""!!!!!!""""""""""""""""""""""""!!!""""""""""""""""""!!!!!!###!!! !!!!!! !!!  !!!  !!!!!!!!!!!! !!!   0(2* 3+!0(,%0(3+ 6-"5-"4+3*4+ 6-!2)6-!;2'80$80$8/$90$;1&9/$8-"7."9/#7."7.#8/$6-"6.#5-":2'=5*;4)81&:3':3'81%80$=5)81%;2'80$8/$8/$:1%;2&:2%>5(=4(7/#7.";2&;2&:1&:1&:1&8/$5-"7/$91%91%:2&;2&:1%;2&<3'<4':2%:1%?6)=4';1%;2&@7+@7+<4(:1%:1%=4(>4);0%5+ 9/$=4(>4):0$90$;2&<3':1%5, 5-!=5)>6*<4(=6*=6*<4(:3'4-!6."<5)=5)>6*<3'90%<4(;3'8/$2*6-":1&4+ 6-!:1%>5)7/#3*8/#5-!6-":2&<3(;2';2';3';3'6."80$;3'7/#<3'=4(>5);3'7/":1%=4(91$6-!;2&>5)>5):1%6."8/#8/#90$;1&6-!9/#=3(:1%:0$:1%;2&:1%90$=4(:1%:1%=5):1%80#90$6."5, 7."7."7/#7."8/#7."4+7.#8/$91%4, 5-!6."91%8/#7/#80$5-!91%<4(?6+:2&:2&<4(<3(:2&<4(:2%7/!:1#=3&=3'>5(90#<2$@7*:0&9/">5$@6+>4,90!8/ =3)>5*;2&8/#8/#;2&:2%80#;3';3(;2':1&5-!3*B,E-C,B-!;'6#6$<*?, @,H1#D,;#:#9#3/4"3!5$6%4$4"3"1 0 1!2"3#1!1!// / **+,*())(, #  "       -    -    -    -   -   - -  - -   -    -   - - -  -     -    - - - -      - - - -  -   - -    - - - ,%/(1* 2+!3,"/(,%0)2+"5.$6/%6/%7/%2+ .'1* 6/%4,"0)/(3+!81&92':3(6.$1*1*4.#5.#3,!5-#:2(91'5.$6.$6.$3,"5.#6.$4-"1* /'2* 4,"4-#5-#4-#5.#6/$5.#5.#5.#6.#5."5."70%6/#5-"2+ 6/$81&92&80%6/$91&92&7/$7/#80$80$80$7.#91%:1%;2&;2&5, 6-"90$:1&:1%8/#6-!6-!4+5, 8/#7/#4+7."7."6-"4*3)6,!:0%<2&9/#8.#7."5, 5, 8/$90&:1&:1&5,!5,!:2&:1%7."80$80$6-!8.";1&8/#9/$<1&;1%:1%7/#80$91%8/#90$9/#8/#:1%:2&:2&92%;3&;3':1&8/#90%<4):3(:3(<5*93(71&70$80%91%5-"70%1)3+ 1) ''&))())())(**))*)&''!""gef`^\ZZZQQQLLLFFF???888444333######$$$###&&&(((***++++++"""...444666555>>>CCCKKKSSS___fffga`fcbghh!!!###%%%''')))((('''((((((()'&((&)'2+!.(2,"4.$60$80$=4(80$5-!5-!7/#91&92&92&;4(?8,92&:2&<4'90$91$;2&;2&<3'<2';1&;2&8/#:1%:1$90"<2%<3&;2$90"7. 3*1(6,:0#7/"6.!7/"5+3*5*:/#:.#6+4)6,!7."7."90$4+7-!4+4+9/#90#7- 6,9/#=2&:/"5*4(5)4(1&3)9/#9.#:0%<3':1%91%80$:1%<3';3';3'=4(7/#7/#:2&=5):2&5,!6-":2&7/#4, 6."80$92&92&92%81&81%2+2*3,!5.#5.#4-"4-"3,!5.#7/%5.#6/$5.$2+ 3,!5-#3,!#!! """###$$$$$$&&&$$$$$$$$$$$$$$$!!! """######""" !!!"""""""""!!!!!!!!! !!! !!!""""""!!!!!!!!!!!!!!! """%%%$$$"""!!!!!!"""!!!!!!  !!!  !!!!!!!!! !!!  !!!  !!!"""###!!!  *".&1* 3+!3,!0).&2*4+ 4,!3*1)2)4, 7/#4+5, 80$8/#8/#8/$8/$:1&8/%6-"6-"9/$7.#8/$80%6.#7/$80%:3(<5):2'81&:3';4(81%80$<4(92&<3'91%80$80$:2&;3'=5(>5)<3'7."7.":1&<2';2'90%91&80%7.#8/$91%80$91%:2&91%:2&<4'=4(;2&;2%?6)<3&90#;1%?6*?7+<3'91%:1%<3'>4(:0%4*8-">5)>4):0%:1%<4(=4(:2&5, 6-!>6*>6*<4(>6*>7+<4(;4(5-!6."<4(=5)>6*:2&90$=5)<4(91%5-!6-"8/#5, 5,!:1%=4)7.#3*6."6."6.";2'=4);2'91%<3(<3'80$91%;3'5-!;3'=5)<3':1%7.":1$>5(:1%7.!:1%<4(=4(:1%90$91%7/#:1%<3'8/#8/#;3':2&;2&:2&;2&<4(90$91%7/#8/#<3':1%90$:1%5- 4, 90$90$7."6-"8/#7.#2)6-"8/$8/$6."7/#:1%;3'7."7/#90$7."80$<4(=5)80$70$>6*;3'91$<4'<4'90";1$<2%=3&?7+91%;1#?7*82'90#>4&?7,?6-:1#90"<2(=3(;1&7-"7-!:1$91$80#;3'=4)=4)90%2)0'B+D,D,F1$@+8#6#:'>, >+>)=(<&9#8"8"7"3 6#7%7&8'6%3"4#4#2"/-..!,)&)+'''''+**)$ -                -  - - -        -      -  - - -   -     -            -     - - -  -   -   -   - - - - 1*/(,%0(2* 3,"3-".',%1* 3,#70&81'80&6/%2* .&1* 6.$4,"0)1* 4-"6/$70%92'6.$5.#3,!4-"6/$6/$5.#92'81&5.#6/$70%4,"6.$80%6/$1)0(4,!6.$80%5-#5.#70%80%6.#5-"6/$7/$5-"7/$81&6.#6.#5.#70$80%6/#4,!4-"80%;3(80%7/$80$90%91%6."8/$:1&;2';2&3*3*8/$;2'8/#6-!5, 4+1)5, :0%90$7.#5,!7.#7."3)3)5+ :0$<2'90$9/#8/#6-!6-!90%;2';2'<3(6."6-!91%91%91%;3':2&8/#8.":0%90$8.#9/$;1%:0%6."80$:1%90$:1%9/$:0%:1%;2&92%:2&;4':2%:2%7.";2&=4(;3(;4(<6*;5*92'70%81%91&5-"70%4,!3+!2*6.#$##((''''))((((()(&&&"""_^_YWVNNNLLLDDD;;;555+++'''###$$$###$$$###"""&&&((()))++++++$$$%%%''''''%%%(((...666@@@NNNTTTWWW[[[bbbfff ###&&&((((((((('''((()))''&&''&)'-'/) 4.%60%6/#6/#;3'8/#7."7/#80$92&92&92&;4(?7+:3':2&<3'80$80$:1%;1&<3'<2';1&<2'9/$:0$90#90#;2$<3&;2$90"6- 3*3)6, 90#6.!5- 6- 5+2(6, 9/"8.!6+5+9/#8/#5-!80$4+4+3)4*9/#:0$7-!5+7-!<2%;0#6+4)5*5)2'4*9/#9.#90$;2&:1%:1%90$:2&<4(:2&;2&<4(7."3+91%=5):2&5,!5-!90$5."3, 3, 70$92&81%70#80%6/$2*1*3, 5.#6/$4-"4-"1*4-"5.#4-"4-"4-#2+ 2+ 4-"3,!'''###$$$$$$$$$$$$$$$$$$$$$$$$###"""!!! """###%%%$$$!!!!!!  ###"""!!! !!!"""!!!!!!!!!!!! """######!!!!!! !!!!!! !!! !!!!!!  !!!!!!!!!!!!  !!! !!!!!!!!!!!!!!!!!!!!! !!!"""   -%+#,$.&1*3+!2*1)3*5,!5,!4+ 2*3*6-"7."3*3*6-"8/$8/$8/$:1&90%8/$7.#7.#8/$7.#7/$80&6.$80%81%;3(<5*92&70$:3'<5(91%92%;4(:2&;3'91%80$80$91$91$;3&>5);2&8/#7."90%<3'<3(:2&:1&90%8/$90%91%8/#91%;2'91%:1%;3'<3':1%;2&@6)<2&8/#9/#>4(>5)<3':1%;1%=3(=3(9/$5*7,!>4)>4):0%90$<3'=4(:2&5,!6-"?6+>6+;4(>7*?8+<4(;4(5."5."<4(>6*>5*:1&80$<4(<4(91%6."5-!6-"4+ 6-!:1&;2'5-!2)5,!6."7.":2&<4(>5)80$<4(<4(90$:1%=4(5-!:1%=5)<3'91%7."80#=5(;2&8.":1%<3'<3':2&;2&:1%7/#:1%;3':1%8/#;2&;2&;3':1%<3'=4(7.";2&8/#6.!;2&:2&:1%:1%4+3*7/#80$6-"6-"8/#6-"2)6-"7.#6-"3+5-!8/$:2&90$7/#8/#6."90%<4(<3'7/#92&=5)91%80#>5(=5(8/"90#;1$>4'@7+:1%:0"=4(60&7/">4&>7-?8.:2%7/"92&<4(80$6."8/#:1%91$7/#;3'=5)>6*<2'5, 5, B+D,D,G1#D/">):%<'?+<(<(7%5#6#8$7$5!3 8%9%9&:(8&7%6%5$5$6%1!,)(('#%$$#!##$#"$'             -  -   -       - - -   - - -  - - -        -  - -        -  -  -     -    -    -     - - 1*2+1*-&+#1* 3,"3+!3,!.',%0) 2+"71&92(92(7/%3,!0(1* 6.$4,"0(1) 5-#6/$70%70%6/$60%70%60$81&70$6.#:2'92'5.#7/$91&6.#7/$:2'80%3+ 2+ 70%80%80%6.#6.$91&91&6/#4-!5.#7/$5-"7/$91&6.#6.#5."4-"6.#5.#4,!4,!6/$:2'81&80%80$91%:2&5-!7.#=4(=4);2&3*1(4+;2&<2&;2&:1%7."1(4+9/$:1%8/$7.#6-!8/#9/$3)5*7-"<1&90$8/#8/#6."6-!90%;2'<3(=4)7/#6."80$80$91%;2&91%9/$8."9/$:1%7-"8.";1&90%5-!7/#:1%9/#90$:0%;1%:1%:2&81$81%:3&91$91$6.":2&<4(91%92&;5)<6*:4(5/$81&82'8/#7."3+ 4-#3,"6/%! **)))))))((((('%%%###WWWLLLDDD>>>777,,,""""""$$$######$$$%%%###"""%%%)))******)))%%%$$$%%%&&&&&&######$$$...:::CCCKKKSSSYYY```aaa $$$&&&((((((((('''((()))'''%&&##",&1+!5/%50%6/#81%:2&:2&7/#80$:2&:3'81&92&<4(>6*92&;3';3'7/#6.":1%:0%<2'<2'<2'=3(:0$90#90#:1#;2$=4&;1$8/"8/!5,5,8."8."6- 4+6-!7.!2)5+7, 6, 5+5+:1$8/#8/#91%7/"5+3)4*9/#;1%8."5*8.!=2&=2%8, 6*7+6*3(3)8.#8."8/#:1%90$91%80#91%;3':2&:1%<4(7."2*80$<4(:1&4, 4, 6."5-!2+3, 6/#81%80$7/#7/$70$2+3, 4-!70$6/$4,!3,!1)5.#7/%5.#2+ 4-"2*1)3+ 3,!***$$$$$$$$$%%%$$$%%%$$$$$$$$$!!!!!!"""!!!"""%%%&&&&&&$$$###""" !!!  """"""!!! !!!###"""###"""!!!!!!    !!! !!!"""""""""!!!!!! !!!!!!!!!!!!!!! !!!  !!!"""-%/'.',$,$-%0(1)0(1)3+ 5-!5-"4, 3*3*6-"8/$4+ 2)5,!90%8/$90$8/$7.$90%8/$8/$90%8/%7/%92'7/%80&91&;3(:2'7/$81%;4(<5);3';3'<4(<4(;3'90$7/#7/#91%:1%;3'<4':2&6-!6.":1%<3';3';3':2'91%80$91%:2&90$91%<3'91%91%;2&<3'90$<2%@6*=3'9/#8."<2&=4(<2';1%;2&=3(=2'9/$5+ 7,!=3(>4(:0%90$:1%<3':2&5,!7."?7+?7+;3'?7+?8,<5);4(6/"6/#<5)?7+>5*;2'90%:2&;3'90$5-!5, 8/$6-!5, :1%<3'6."/'3*4, 4, 90%<4(=5)7/#;3'>5*80$90$=4(6-!90$<3'=4(90$8."8/#>5(<2&9/#:1%;2&;3';2&<3':2&80$8/#90$:2&90$;3';2&;2&:1%:2&=4(90$=4(;2&8/#;2&;2&;2&:2&4, 3*6."80$8/#8/#90%6-"3*5,"6.#5-"4+ 4, 80$90%5-!7.#80$6.":2&?6+=4)6."92&=4(80$80#=5(>5(:0#:1$=3%@6)>6*:1%;1#<4(5/$6- >4'=7,>7,:2%80$91%;3'80$6."7/";2&7/#6-!;2&=4(>5);1&5,!5, B+D,D,C, @,=*;(>)@+ ?*<(8&3"0 4#6$5#4 5 :&>*>*9&7$6#5#5%5$6&0 +(%%$%%#"  !   - -      -  -    - -          - -  - -       - -    - -    - -  -   -       -   - -   - - -    - - - - - 3,!0)1*2+2*,%,%0)3,"4,"2+!.',%1*!3,"92(81'70&4,"1*0)2+!5-#4,"1)3+!5-#5-#70%6/$3,!4-"70%82'93(70$6/#81%81%70%70$80%6/#80%:3'91&5."5-"91%80%91&70%7/$80&81&6/$6.#6.#3+ 7/$7/$91&7/$5-"6.#6/$7/$7/$6.#5-"91&:2'70%91&90%:2&<3'4, 91%;2&<3';2&3*2)6-!;1&;1%<2&;1%8.#1(3)7-"90$8/$8/$8/#7."8.#3)2(5+ ;1&90$8/#8/#6-!6-!:0%<2';2&=4)90$8/#80$91%:2&:2&80$90$7-!7-"9/$6, 6,!:1%:1%6-!7/#:1%8/#7.";1&:0$:1%80$70$81$:3&80$91%7.";2&>5*:2':3(<5)<6+:4)3,!5.#5.#7/"6-!5-"3+!2,"/(*))**))))(('''&$%$!""QPPLLLDDD:::000+++%%%"""$$$###$$$"""############%%%(((+++)))((($$$"""$$$$$$%%%$$$$$$"""$$$,,,777AAAJJJRRRVVV\\\!!!###$$$%%%''''''((()))***'''%&&$##/)2,"2,"60%60$80$90$7/#3+5-!:2&:2':3(81%;4(<5)81%:2&:2&8/#7.#:1&:0%;2&;1&;2&<2':0$;1%;2%9/"=3&:1$9/"8/"90#6, 4+6-!8."5- 4,:1%7-!4*6, 8-!6+5+5+:1$90$:1%:2%90#7-!5+7-!;1%<2%:0$6,9."=2&=2%9- 8, 8, 7,3)3(7-"7-"8."90$8/#80$7."91%:2&:1%7/#;3'8/#5, 80$:2&91%4, 3+7/#6."4, 4-!80$92&81%80$70$6/#3,!2+5.#70$6.#4-!3,!1*4-"5.#4,"1*3,!3+ 1)3+ 2+ -,,$$$$$$$$$$$$$$$$$$###%%%###!!!!!!"""%%%$$$&&&&&&&&&###"""   !!! !!! !!!"""!!!!!!  ###"""!!!""""""!!!     !!!"""###"""!!!"""!!!!!! """"""""""""      ,$+#.'.',%+#,$1)2* 0)1)2*4,!6-"5,!3+3+5-!8/#5,!2)5,!90%6-"6-"7.#8/$:1&90%8/%:1&90&80%:2(7/%70%91&<4):2'6/#91%;3':2&:2&:2&;3'<4(;3'91%7."8/#8/#91%;2&<3';2&7/#7/#90%:1%;2';2':1&91&80%91%80$80$90$;3':1&:1%;2'<4(80$:0$?5)<3&9/#8.";2&=4(<2&;1%;2&=4(=3(9/$5* 6, <2'>4)<2&90$80$<3'<3'5-!7.#?7+?7+;3'@8,@8,=5);4(70$80$<5)?7+?6+:2&6."91%91%8/#4+ 5,!90%5-!5,!90%:2&5, .%2*4, 3+7.#:1&;2'7.#<3(?6*8/#8/#=4(7."90$>5)>5);1%7-!9/#?5)<2&:0$;2&;2&;2&;2&;3';3'91%7."<3'8/#:1%=4(:2&91%80$:2&<4(91%=4(:2&90$;2&:2&;2&:2&6-!4+6-!8/$6-!7.#7.$4+ 2)3* 5,"4+!3* 6-":1&;2':1&7/#91%7.";3'?6+;3'5-!;3'?6*90$90$>5(<3&8/"<3%=3%@6)>6*:0$:0";4(4.$5,;2%>8->7,;2&7/#80$91%90$90$80$;3'7/#80$<4(;3'<3':1%4+ 6-!L@1C,C,D,A+?*<)8'>+B."@*>(:&5$1"0!1"2"4!5"5!<'?*D1&>+7#6#5#2 2 3".+(&%%%$!!$ !"  - -     -   -  -   -   -        - -      - -    - - - -     - - -  -        -    -   - -     - - - - - 1*4,!0)2+3,!2+/(-&2+ 4-#3,"2,!/(,%1+!3,#:3(81'81'6.$4,"0)0)5-#4-#2+!4,"5.#5.#6/$6/$3,!5.#81&;4):4)92&81%81%92%;3'92&80$5-!7/#<4)91&5-"4, 80%91%91&81&80%91&80%6/$81&80%3+ 80%91&91&7/$4,!5.#80%70$7/$7/$6/$;3(:2'6.#80%91%;3'=4)6.";2'>5*=4(;2'5, 3*6-":0%;1&:1%<3'8.#2(0&7-"9/$8/$7.#8/#90$8/#1'1'5+<2&:1%90$80$6."6-!:0%;1&:1%>6*<3':2&91%91%:2&91%8/#:0%6,!7-!9/#7-"7-!:0%:1%8/#7.":1%:0$8.#;1&:0$90$80$91%92&:3'91%:2&7.":1%=5);3'92':4(;5*92'2+ 3-!3-!7.#6."4-"4,#3,#0) !!!(''((((('((((('&'&#$#NNNA;:BBB:::111(((%%%&&&%%%"""###!!!$$$$$$$$$%%%$$$&&&+++((((((%%%!!!%%%&&&"""$$$'''///777AAAKKKQQQUUU[[[ """$$$%%%%%%%%%&&&((())) &&&%&%/'/)3-#4.$60%70$:2&;3'80$4, 7/#<4(92&;4(92';4(;3(7/$92&;3'91%8/#90$8/#;2&=3';2&90$9/#;1%;1$90"<3&<3%7.!8.!9/"5+3)6-!90$5- 5, ;1%8.!4+7-!9/#7-!6,7-!;1%<2&;3&<3&8/#6,!6, 9/#<2&:0$:0#7- 8.!<1%<1$8, 7+6+6+4)3)8.#8.#7."80$6."80$80$;2&:1%80$6-!;2&80$5-!80$:1&:1&5-!4+ 80$7/#5-!6."92&:3':2&91%92&81%4-"2*6/$70$6/$5.#5-#2* 3,!5-#4-"2+ 4,!3+ 2*3,!3,!###$$$$$$%%%&&&$$$###"""$$$###!!!!!!!!!"""$$$$$$"""""""""!!!!!!!!!!!! !!!###""""""""""""!!!!!!!!!!!! !!!!!!######""""""###"""    !!! !!!""""""!!!  """###"""###"""!!!!!! !!!""""""!!!  %%%0(,$*#+#,$+#+#,%0(0(0(0(/'3*6-"5,!4+ 3+4+5, 4+ 2)5, :1%6-"6-"7.#90%:1&7/$8/$:1&:1&80%91'6.$6.#80%<4);3(70$91%:3'91%91%:3&<4(<4'<3':2&4, 6-!7."91%:1%;3':2&5-!6-!:1%:1%;3'=4);3(90%7.#80$80$6."90$;2':2&:1%;3'<4(80$8/"=4'=3':0$8/#;2&=4(<2&;1%;2&>4(>4):0$4*5+ <2'?5*=3'80$8/#<3'=4(6-"7/#?7+>6*:2&@7,?7+=6*;4(70$70$<4(?6+@7,<3(80$:1&;3'80$4+ 5,!:1&4,!3+ 8/$:1&2)+#1)5,!4+ 7/#:1&:2&8/$<4(?6*80$8/#=4(7."8/#=4(?6*;1%5, :0$>4(=3';1%;2&<3'<3'<3'<3'<4(7/#6.":2&6.";2&<3':2&8/#80$91%:1%90$;3':1%90$:2&:2&90$:1%8/#6-!6."7."3*5,"6-"3*1(3* 4+!3+ 2* 4+!8/$90%80$8/#80$7/#=5)>6*:1&5-!<4(?6*;3&:2%<4';2%7.!<2%=3%?6)>6*90#8. 92'3-"3)90#=7->7,:2%7/"91%:2&;3'91%80$;3'91%91%=4(<3'<4(:1%5, 7."H=.E,D,D,A+=*;):);(?+ @,!>);'6$2#2#2#/ 023 28$=)>*A."<)7$5#3!03"4#+)(('%$!#&'##          - -    - -      -    - - - -    - -  -  -  -       - -    -        -     -  -  -   - - - - 1)/'1)3+ /(2+4,!0)1*1)4,"6/$60%60$2, -'1*4,!:2'91'91'70%3-"3+!4,"4,#3+!1* 4-#80&91'6/$4-"3,!6/$81&;5*;4)81%92%:3&92&:3':2&92&6/#70#;3':3'7/#4+ 7.#:1&;3(81&80%91&81&6.#80%91&5-"70$;3(:3(80%6.#6.#81%7/$91&91&80%<4):2'6.#80$;2'=4(=4)80$>5)=4(<3(;1&5,!1(4+9/$<2&<2&<2'9/#5+3)8-"7."8/$8/$8/$:0%9/$5+ 2(6, ;1&<2&90$91%8/#4+6,!8."90$>5);2&90$:1%;2&:2&91%90$;1&7-!8.#:1%9/$7-"90$:1%:1%5-!91%;2&9/$;1%:0$90$91%:2&92%92&:2&:1&7.":1&>5*;3(92';5*=7,:4)6/%3,"3,!6-"5-!4-#4-$1+!0) $$$(('&&&))(**)()(%%% KKKFFF<<<333+++###%%%&&&$$$ $$$###%%%%%%###$$$((('''(((%%%((( """###''''''///:::EEELLLOOOWWW!!!"""$$$%%%&&&&&&'''((((((%$#%&'%%%0).(5/$60%5/#6/#91%;2&7.#5-!7/#:3'92';4):3(<5*<5*70$91&;3':1&80$;2':1%;2'<3(;2&90#90$<2&;1%90";2%=3&8/!8/"8/"4+1(4+7."6.!7.!;1%7-!4*7-!9/#6, 6, 8.";1%=3'=4(=4(9/#6+ 5*8."<2%;1$9."7- 8-!<2%;1$7, 7, 6+6+2(3)9/$9/#7/#8/#5-!7/#:1%91%80$8/#8/#:2&7."5,!80$:2&;3'7/#4+ 80$70$5-!6.":3';3':3'92&92&81&3, 1*70$70%80%6/$4-"3+!5.#70%5.#3,!6.#4,!2*4,!4-"#########%%%&&&###$$$$$$%%%$$$"""!!! """###"""!!!  """###""""""""""""""""""!!!!!!!!!!!! !!!"""###!!!"""###"""###"""!!! !!!  !!!   !!! !!!!!!!!!"""#########"""  !!!!!!"""######"""!!!  %%%$$$/',$-%-&.&+#*".&3* 3+!2* 2*0(3*5-"4, 4, 4+ 3*4+4+2)3*8/$6-!7.#7.#90%90$6."7.$:1&:1&80&91&7/%7/$81%<4);3(81%81%;3'92&80$:3&;3';3'<4(:2&4, 3+5-!90$91%;2&<3'6."7."<4(:1%:2&<4);2'90%6."91%80$8/$80$:2&:1&:1&;3'<4(90$8/#=3';2%9/#8/"<3&>4(;2&:1%:1%<3'>4(:0%3*5+ <3'=3(<3(;2&90$<3(=4)6."8/$>6*=5*:1&>6*>6*=6*;4(6."5.":3'>6*>5*;2'7."8/#:2&90$4+3*:2'6.#3+ 8/$;3'2*+#3*5,!3+ 80%<3(;3(80$<3(>5*8/#7.":2&6-!6-!=3(?5*;1%7-!:0$<2&>4(;1%:1%<4(=4(;2&;2&?6*90$5, 90$7.":1%;3':1%5-!:1%:1%:1%80$:1%80$7/";2&:1%6."90$;2&80$7."5, 4+ 5,!6-#2)2)5,"4+!2*2)4,!7/$8/$80$90$:1%6."<4(=5);3'4, :2&>6*<4';3&;3&;2%7. :1#>4&>5(>6*9/"9/!81&1+ 2(:1%=7->6+:2%80$;3(;2';3(:1&91%:2&91%:2&=4(?6*?6*;2&6-!7/"@6(F-E-D-A+>*<*8(9';(=)=):'7%1"1"2#1"1./23:&@-"@,!@, ;(9&4!2 3"4"4#2,*)*&"#(&"!          - -  - -              -     - -    -  - -        -  -    -      - -  -        - - -  .'1)1).'3+ 5-"0)1*2+ 1*2+ /(1*3,!5/#5/#2- 1*3, 6.":1&:1&92'71&4/#3-#5.%5.$4,"0(70%70$:3':2'5.#4-!6/$71&92'92'92&81%;4':3&92&:2&:3'92&:2&81%91%7/#4, 80$<4)<4)80%7/$80%80%6.#7/$7/$5.#5-":2':2'81%80%6/#81%5-"91&80%6/$:2':2'7/$6.#:2&<4(;3':2&>5)=4)=4)<3'7.#1(3*8/#;1&<2&<2':/$8."6, 7-!8.#:1&<3'90$:1%;1&6,!1'6,!;1%;1%90$90$8/#2*4*6,!:1%<3'<3'80$90$:1%;2&90$8/#;2&9/#9/#;1%9/$7-!8/#:1%;3'4, 91%;1&8.#:0%:0$:1%92%:2&81%92&<4(90$6-"90%<3(:3(91':4);5*71&4-#0)2* 6-!4+ 3+!4-#4-$/("!!&&%''&(('(('))(%&%"""IIIBBB???666---%%%%%%%%%&&&$$$""" ###$$$$$$$$$###$$$&&&&&&(((&&& """"""&&&&&&(((222<<4(;1%:0%90$;2&=4(:0$3)4+<2'=3(<3(;2&90%;2'<3(6."6.#<4)>6+;3(;3(=5*=5);3'5."3+92&<4)<4):2&6."7/#:2&;3'4, 3*;3(7/$3, 7/$:2'5-!/'6-"5-"3*7/$;3(:2'7/$;2'=4(90$90$;2&6-!5, <3'=4(;2&8."9/#:1%>4(;2%:1%=4(=5):1%90$?6*:1%5, :1%80$90$<3'7/#5-!7."90$:1%7."8/#7."7.":1%:1%7."91%<3':1%8/#6-"5,!5,!7.#3* 3* 6-#4+!3* 1)7.#8/$8/$6-"6."91%80$<3(?7+90%5."91%=5);3':2%;2%:2$6,:0#=3&?5)?6*8/!9/"82'3-"4*:2&=7->6*;3&:3'<4)?6,<4);3(;3':1&80$<3':2&=4(=4(90$6- 7/":2%G-F-E- A+?*<)<, 9)6%9&:':'8%4%0!.1"7%2+ 02 6#;(=)>+!@,!=)5"123!4#2!3!1/ *)'%&)($ !!"   -    -     -    -  -    -    -  -  - - - -   - - -           - -       -  -  -       -   -+".&0(0(1)0(2+ 3,!/'/(1*3+ 4,!0)2+ 4-"71%5/#2, 2,5."8/$:1':1&91&71&50$3,"4,#6.$5.$1*6/$70$;4(:3'5."2+ 5.#70':3*91(81%:2&<5):3'92%;3':3&91%;3':2&91%6."6.":1%=5);3(80%80%91&80%6/$6/#80%81&6.#91&;3(80%80%80%:3(7/$:2'81%7/$:2'91&91&7/#:2&90%:1&:2&;3'=4)<3(;2'8/#3*5, 8.#:0$<2&<2&:/$8."5+ 5+ 8.#:1&;2':1%:1%;1&6,!2(6, ;1%;1%:1%:2&90$5, 3)7-!;1%<3'<3':2&90$:1%;2&90$90$<2&;1%90$;1%9/$7-!8/#:1%:2&3*:1%;1%7-!:0%:1%:1%81$81$6/#81$<4(7."6-!91%:1&80%80&92(<6+70&2,"/(1)4+ 5,"3,"2+!3-#0),%!! &%%''&''&%%$'''&&&"##DDD???;;;000&&&$$$$$$###$$$###!!! - - - - - - - - -!!!$$$######$$$$$$%%%''''''&&&$$$ %%%$$$%%%%%%+++333<<4(<2&90#9/#=3'<3'9/$90$9/$;1&>4(:0%3)3*;2&=3(;2':1&90%:1&<3(6.#5-"=5*>6+:2':2'=5)=5):3'6/#2*80%;3(<4)91&6-"6."91%:1%5, 5+ :2'7/$2*5-":2'6.#0(5-"5-!3+ 8/$;2'91&8/$;3'<3(:1%:2&<3'5, 4*;1%<3';2&8."8.";1%>5(;2%90$<3'=5):2&91%=4(91%7/"<4(:2&90$;2&6."6."80$:1%;2&7."8/#6."7/#;2&:1%7/#;2&<3':1%8/#8/$6-"5,!7.#4+ 4+ 7.#5,"4+!3*80%91%91%7."7.#80$7.#<3'>6*80$4-!80$;3':2%80#:1$;2%6- 9/"=4&=4(=4):0#9/"82'5."6,;3'<6,>6*;2&:3';3(>5+<4)<3);2'80$8/$91%:1&;3'=4(:1%5- 6.!:1$F-G.E. B+@*?*9':(:)8'8&9&8$7"3!-.2#3!028!6#8';(;'9%<)<*5"/03!1 1 1 2!0/)$(-+)#       -       -       - -  - - -           -          - - -        - -    -      -      -*"/',#-$2*2* 4,"1*1*1).&0(2+ 2+2+ 2* 4,"6/$71%5/#1+2+6.#90%:1'91&81&61%50$3-#3,"6.$5-#3+ 5."81%;4(:3&4-!3, 7/%80':3):2):2&81%;3':3'91%;3':2&91%91%92&7/#5.!6/"91%;3';3'91&91&91&80%5-"7/$80%:2&6.#91&;4(80%7/$6/$:3(80%92&80%70%:2':2'91&91&;2'8/$80$91%;2'=4(>5)=4)90%6,!6,!6-!;0%<2&<1&9/#7-"5*5*9/$:1&:1%90%9/$:1%6,!4*5+ :0$;1&;2':1%7."5, 2(6, ;1%<3'=4(<3'8/#:1%:2&90$;2&<2&;1&8/#:0$:0%8.#8/#90$:1%3+:1%;2&7-":0%:1%91%70$80$70$81%92&90$7."91%;2'80%70%71'<6,92(3,"/(2* 4+ 4,!2*!2+!2+"0)0) %%$%%%%%$$$#%%$&&&%%%!!!EEE>>>999444+++###$$$%%%$$$$$$""" - - - ##$%%%$$$###$$$%%%&&&&&&%%%"""   %%%%%%&&&)))///444;;;EEEMMMPPP !!!$$$''''''&&&&&&''''''''''''%%%0+!2,"5/$60%71&70%80%91%7/#6.":1'91'92(70%6/$81&:3(91':3(80%91%7.#:1%90$90$:2%>4(;1%9/#=3&90#6- :0#90#8."8/#90$3+3*4+ 7."7."90$;1%6, 4*8."9/#5,5+:0$<2&<2&=4';2%9/#8-"8-!:0#=3&=2&;0#8- 7- <2$:0#4*4*5*6+ 4+6,!:1%7.#5, 4, 4, 5."4, 3, 5-!7/#8/$80$7/#5-!7.#;3';3':1%5-!80$91%5.!4- <4(;4(;3'91%92&81%3,!3, 92&:3'92'70%5.#4-"5.#81&5-"3,!3+ 3*0(0)---###$$$"""$$$$$$""""""$$$&&&&&&$$$$$$""""""""""""!!! !!!!!!!!!""""""!!!!!!!!!!!!"""!!!!!!   !!!!!!""""""!!! !!!!!!!!!""""""    !!!!!!!!!!!!!!!!!!"""""""""!!!!!! !!!###$$$$$$"""""""""!!!!!! $$$$$$$$$$$$###$$$.'.',$,$.&/&,$/'3* 4+!4,"4+!1)1)2*4,!3+0(0(4+ 6-#5,!3*6-!8/$7.#8/$8/$8/#90$7.#7.#90%7.#7/%80&80%91&91&91&92&7/#70$92&80$6."7/#:3&:2&;3';3'6."5-!7.":2&91%;2&:2&7."7/#;2&91%:2&91%;2'80$7.":1&:1%<3';3':1&90%:1%;2&:1%7/"<2&>4(<2&8."90$=3'=3'9/#:0$:0%<2&>4(90$1(3):0%<2':1&90%90%;2&;3(6.#3,!=5*>6+;3(;3(=6*=6*;4(70$2*7/$;3(=5*<4)7.#6."90$<3'6-!5, 8/$7/$2)5-"80%5-"0(6/#4,!1*5."91&91&7/$91%:2&90%91%;2&4*2(;1&>5)<2&7-!9/#;2%>4(:1%80$<4(=5)<3':1%;2&91%:1%=4(;3'91%:2&7/#7."90$91%;2&7."8/#6-!6.";2&91%6.":2&;2&8/#5-!7/#5, 4+7."6-"6-"90%5,"5-"5-"91%;2'<3'91%80$91%8/$<3(=5):2&81%;3':2&7/"7/"<3&<3&7.!90"=3&>5)>5):/"7.!82(6.#7- ;3(;5+>6);2&91&;3(<3):1';2(:1&7/$6."8/#7/#90$<3':1%6- 7.!:1$*E,F-F. B,C*@*@+>*<(<)<);(9%9"6!2 // 8$5#/7$@)?'=):(;(5"3 5"13 6$2!..1 .1 2!-)-.,*"      -              -  -   - - -      - - - - - -      -      -       -    -     -  -      -/))",$0'/&0'2)2*4,!0(1)3+ 0(0)2+ 1*1)2)4,"60%50$5/#0*2+6."8/$90$90%81&72&61%6/%6.$70%4-"4-"6/#81%:3'93&4-!3,!70%81'92(;4*91%81%92&80$80$;3':3'91%70$;3'92&70$7/#91%91%91%;2';3';2'91%6."90%91%:1&7/#:1&<4(91%8/$7/$:2&91%:2':2':2&=5)<4)6.#80$:2&:2&91%80$;3'<3(>5*>5*:0%6,!4+5, :0$<1&<2':0$8."5+ 5*9/$;2&:1&8/$7."9/$5+ 4*6, :0$<2&=4(<3'8/#7."6, 6- :0$;1%<3&<3':1%91%:1%91%=4(<3';1&7-"8.#:0$9/$8/#:1%;3'7.";2&;2&7.":0$:1%:2&92%81%81$81$91%:1%7."8/$;2'92'70%60&<6+93)4-$0* 6.#8/$4,!2*!/(3,#.'1*!"""##"&%%%%%$$$&&&'('&'&##"BBB999222///)))$$$$$$%%%%%%$$$### """###$$$""""""$$$%%%%%%%%%  %%%%%%%%%%%%)))---222<<4';2%;0$8-"9-"<0$=2%<2%;1#8- 7-:0#9/#4*3)4)4*3*5, 90%8/#5,!3+2*3+3, 3, 4, 6."7/#8/$8/$3+80$;2'<3(:2&5,!80$91%4, 2+;4(<4(;3'81%81&81&4,!2*70%92&92'70%5.#2+ 4-"81&4-"2+ 0(1)/'0)!!!######"""######!!!"""$$$%%%$$$$$$###"""!!!!!!"""  !!!"""""""""!!!!!!!!!  !!!  !!!!!!!!!""""""!!! !!!###""""""    !!!"""!!!!!!!!!""""""""""""!!!!!!!!!!!! !!! """###$$$#########""""""!!!###$$$$$$######%%%.'.&-%*#-%.%+".&2)3* 4+!5,"2*0)3, 5-"2+0(0)4, 7.#5,!3*7.#90$6-"8/$90%90$7."6."8/$90%7/$80&:2'70%91&92':2'92&6/#7/#92&7/#6."7/#:3'91%:2&:2&7."6-!80$:2&:2&;2&:1%7."7.";2&=4(<4(;2'7/$80$91%;2&91%:1%;2&:1%90$91%;2&91%7."<3&<3';2&5, 90$<2'<3'8.#90$:1%<3'>5):0%2)2)9/$<2':1&90%:1%;2&:1&5-"2+ <4)=5*91&:2'=5*>7+<4(6/#2*7/$<4)>6+=5*7/#5,!80$<3'6-!5, 90%90%3+ 6.#:2'5-"1*5."3, 1)4,!81&:3'7/$6."80$8/$7/#:1&3*/&8/#;3':1%4+8.";2&=4(:2&90$>5)>6*;3'90$91%:2&:2&=4(;2':2&<3'7."7."90$90%;2&80$8/#7/#6."90$:1%6.!8/#90$4+5, 6."4+4+7."7.#7.":1&6-"7/#7."80$91%;3'7/#91%91%7/#;3'=4):2'80$;3':2&5- 5- <3&<3%6- 8.!<2%>6*?7+9/!5,71'6/#7- 92':3)=5(90$7/$:2(;2(80%90&:1'7/#5-!6."7.":1%<3&;2%6. 3+;2% -&4%#E- D. C,B(C*?)=)>)=(<(<(<):%8!5 4 26!324"9%=)>(='9%6#2/003!7&7&4%. )/ 5&0 0 ,+/+&          -      -      - -   -    -  - - -  -   -    -      -       -      -    - - -  -     -1* /(0)*"-$2)3* 3* 2)2* 3+!0(2*4-!1).&0(1)1(0'4,"81&71%71%2,2+6."7.#7.#7/$70$71%61%70%81&92'5.#6/#81%:3';4';4(6/#5."70%81'91(;4*:2&:3';4(91%80$;3';3'70$7/#;4(:3'70$70$:2&;3'<3(;2&91%6."8/$7/#7/#80$91%8/#:1&;2':1&90%90%:2&91%<4(<3(;2'=5)<3(91%<4(=5):1&8/#91%<4(<3(>5)>5);2&8/$5, 5+ 7-";1%>3(;1&9/#6+ 5+7.#8/$;2'8/#9/$9/$5+ 5*7-":0%=3'=4(<3'8/#8/#9/#8.":0$:0$;1%;2%;2&:1%90$91%<3'=3';2&7-!9/#;1&:0%9/$;3'<4(8/#:1&;1%8.#;0%:1%91%92%81%81%92&:2&:1%8/$91&;3(:2(70%5/$;5*70&2+!1* 5,"6-"5-#3+"0)2,"/(1* .&$"!&%%$$%%&'&&''''&&%$$#===888333***$$$$$$""""""$$$$$$   "!"$###"""! #"!$$#$###""  &$!&&&&&&%%%&&&,,,333;;;AAAHHHMMM###$$$&&&((((((%%%$$$&&&'''&&&""!' +%2,"4.$5/$71&82':3':3':2'7.$7.$:1';3(:1'6/$5."82&=7+82%<5(;3'80$4+7."90$:2&;3':2&5-!6-":1%7."7."7."6.!7."8/#8/#6- 4+5, 9/$:1%9/#7-!2)3)9/#8/"6, 5+9/#;1$<3%>4'<3%;0%8,!:.#<1%<1$<1$<1$8. 7- :0#9/#4*3)4*3)2)4+ 90$80$5-!3*1*3, 5-!5-!6."7/#6."80$8/$2*80$;2';3'90%4, 80$:2&4, 1*:3';4(91%81%81&81&4-!1*6/#81%81&70%5.#3+!4,"7/$4-"2+ 2*3+ /'0(""""""#########"""!!!"""$$$############""" !!! !!!!!!!!!!!!  !!! !!!!!!!!!""""""!!!!!!###!!! !!!"""  !!!######!!! !!!""""""!!!!!!!!!!!! !!!!!!"""############$$$###""""""CCCMMM!!!%%%$$$"""###$$$*#,$-%-%+$/'/&,$.&3+!5,"5-#6-#1*0(4,!5."2+3+2*3* 7.$5,"4+ 6-#90%7.#90$:1%:1%7."6-!8/$:1%6.#7/%92'7/%80%91&;3(:2'7/#91%<5)91%80$7/#:3&:2&;2&8/#5-!6-!80$<4(<4(<3':1%6.!6.";2&<4(<3(;3(90%90%:2&;2':1&91%91%91%91%91%:2&8/#5- 91$;3&91%5-!7/#<3';2&7."7."7.#:1&=3(90%3*2(8.#<3';2&90%90%:1%91%4,!3+ ;3(=5*80%92'=5)=5):3'6/$2*6.#:3(>6+=5*90%5,!:1%;2&8."7-":1&90&3+ 6.#:2'5.#2+ 4-"4,!1)4,!80%;4)80%7/#:1&80$7.#:1&3+0(7."=4(:1%4+ 6-!;1%=3':1%8/#=5)>5*:2&90$91%90$8/#;2&=4(7/#81$80$7/#91%91%;2&7."4, 6-!5-!80#:1%6-!7/":1%3*4, 5, 3+4+7."7.#7."90%7.#6."4, 4, 7/#;3'7/#91%91%7/#;2&=5):2'7/#91%<3'7/"5,:2$;2%7.!7- :0$=4(?6*9/!4, 60&6."5+70%93)=4(80$5."7/%80%90&80%90%7/#4+ 4, 6-!:1%;3&;3%7.!4+90" - -  5)(C, C-!B, @(@(B*@)<'='=(<'<(<)9&6!5 8#9"6205":';(:';'8$5!...3 7%4#8(3#/!. ...-0!.. *# !           - -      -     -   -    -  -  -    - -                      -    -   -          -1* 2+!0)/(+$.&2*3* 2)0'/&2*2)3*6.#2*.&0(1)1(.&3,!81&83'92&5."4, 6-"8.#9/$91%81%71%50$70%92'92&5."6/#92&<5);4(;5(71$70$81&:3(:3(<5*;3':2&;4(:2&7/#70$:3'6."70#:3'91%5-!7/#92&:2&<4(80$90$5-!80$7.#6."90%91%80$:1&:2&:2&:2&91%7/#80$;3';3';2'<4(=4)91%=4)=5)7.#91%91%=5)=4(=5)>5)=4);2':1%7-"6,!9/$>3(<1&9/#5+5+6-!8/$<3'90%:1%7-"4*2(5+9/#=3'<3'<3'7/#6-!8."9/#9/#;1%=3'<3&<3':1%90$90$;2&<2';2&7."9/$<2&:0%90$=4(=4(90$;2&;1%7.":0%;2&80$92&92%92&92&:2&:0%8/#90%;3(91'70%60%71&70&3,"3,"7/$7.#5.#3,"3,"4.$2+"2+!0)+#&%$%$%%%&&'''''&&&BBB:::555///&&&"""###""""""$$$$$$ !!!!!! %%%(((((((((,,,222999>>>EEELLL"""###&&&&&&&&&&&&%%%''''''%%%"##%.(2,"4.#5/$82':4(;4(:3(91&7.$7.$:1';3(:1'6/$5.#93'>8,60$;4(92&6-"5, 90$8/#80$:1%8/$5-!6."6-!5, 3+7."8/#5, 7/#8/#6, 6, 7-!8/#90$8/#5-!2(2(9/#8."5+6,8.":1$<2%<3%;2%9.#7,!;0$=1%;0#<1$<2$9/!8.!:0#9/#4*3)4*3*2)4+8/$80$5, 2+2+4-!5."5."80$:1&5-!80$6."2*5, :2&:2&91%5,!80$:3'4- 2*92&;3'91%81%81&81&5."2+6/#80%70%70%5.#3+!3+!6/$5.#2+ 3+3+ /'&$####"""$$$$$$$$$#########$$$""""""###$$$!!!    !!!!!!!!!!!!""""""###"""!!!""""""!!! !!!"""  !!!"""$$$###"""!!!""""""!!!!!! !!!!!! !!!!!!"""###$$$#########"""111999@@@III ###$$$###%%%$##+#,$-&,%-&/'/&.&/&3* 5-"4,"4+!1*0)5-"5-"2*3, 1*4+ 6-#4+ 3*6-"90%8/$8/#:1&;2&90%7."90$;2&6-"6.#80&6.#6.#80%<4);3(6/#92&<5)92%5-!80$<4(;3'<4(:2&7/#5-!7/#;3';3'<4(;3'7."6-!:2&=4)<4)<3(:2':2';2'<3(;3':2&91%91%91%:1&;3'80$5-!:1%;2&80$7/#8/#<3';2&8/#7.#7.#90%<3(90%4+1(7."<2':1&90$8/$90$8/$3+ 3+ :3'=5*80%91&=5)<4(:2'81%3, 5.":2'<4)<4);2'6.";2&:1%8."6-":1&:1&4,!5-!70$6.#3+ 2*3+ 0(2*80%<4)80%80$:2&8/$7.#;2&3+/'8/#>5):1%6-!5, ;1%<2'91%8/#<4(=5);2&90$80$91%8/#:2&;3&6/#81$:2&80$:1%8/#<3'90%4+ 5,!4+5,!90$6-"8/$:1%3*5, 6."4+ 4+6-!5,!5,!8/$7/#5-!3*4+ 7/#<4(91%:1%90$5-!:1&=5)92&4, :1%=4(80#5- <3&=4'8/"8/";1$;3'>5)9/"5-!71'5, 4*70&:4*=4)90%6.#80%;2'<4):2':1&80$3+3+5, :1%;3&<3&7.!3+5,D8( -  7&#C, A-!A, B+@(A)@)=':%=(>(<'<(:'6#4!7#=&@'8!28";';'>+:'8%6#21+.4"7%6%3"3#.,*,--)-. (" " "  -  -    -      -  -             -         -                 - -    -  - -   -   - -   - - - 2* .'.'3-"3+"1*!/(1(4+ 4+ 2*.&.&4+ 2)4+ 6/#3+ /'0)1)/'.%1)6/$82&71%71$4, 4*6, 8.#:1&92&82&50$81%92'81%5."6/#92&<5);4(;4(70$70#81&=6*<5*<4):3':2&;4(;4(:2&:2&<4(7/#91%;4(91%5-!7/#92&;3'=5)80$90$:2&;2'90%90$:2&90%80$91%:2&80$80$;2&90$8/#;2';3';3';3'<4(90%<4(;3'6-"90%80$=4(<4(=4(=4(=4)=4);2'7.#5+ 8.#=3'<2&;1$6, 5+6,!:0%;2&;2&:2&8/#5+ 5+ 7,!;1%?5*<3(<3(91%90$;1%;1%9/#:0$>4(=4';2&;2&:1%:1%;2&<3'<2&8/#;1%=3';2&:1%=4(;2&80#:1%:1%6,!8.#:1%8/#:3&92%:3&:3&;3':1%8/#90$>5)81&81&82'92'92(4.#4-"80%8/$5.#4,"5.$60&4-#4-$2+ )"###%$$$$%((()))(((>>>888111***###"""$$$$$$$$$%%%  &%#((())))))+++000777===BBBKKK!!!%%%(((&&&&&&'''&&&&&&&&&!!!"+$,&2,"1+!5/$71&93(:3(:3(91&7.$6.#8/%:1'90&7/$6/$;5)<6*82&:3'<4(7/#6-!7/"5, 90$91%80$6-!4, 6."7."6.!8/#90$6-!7/"80#7-!7-!7-!90#80$7."7."2(0'7,!8."5,6, 7.!:1%;2&;2&90#7- 7- :0#;0$;0$;1$<2$9/!9/!;1$9/#3)3)5+ 4*2)4+ 8/$8/#4+ 2+2+3, 5-!6."80$:2&4, 6."6."3*5,!80$90%80$6-"80$:3'4-!3+80$:3':3'81%80%92&6/#1*4-"81&81&6/$5-#2+ 2+ 81&7/%1*3+ 4,!1)*))$$$""""""###"""###$$$###"""!!!!!!###$$$!!! !!!   !!!"""""""""!!!!!!!!!"""!!! !!!!!! !!!!!!"""######"""!!!!!!  !!! !!!"""#########!!!""""""%%%---666<<6+80%:2'<4(<5);3(91&4,!6.#92'=5*=5*;3'6."90$:1%8/#7.#80%:1&6-"7.#91&80%4,!2+ 4,!0)2*80%;2'6."7.#;2'8/$7.";2'3+/&8/#=5);2&8/#7.";1&:1%;2&:1%<3'=4(;3'80$6."91%7/#91%91%70#:2&;3'7/#91%80$<3':1&4+ 5,!2)4+ 8/#6-"8/$8/$5,!7.#7."3*3*5, 5, 4+ 7.#8/#6-"4, 6-!7/#<3'7."80$80$4, 80$;3'70$3, :2&=5(80#80#?6)?6)7. <2%=3&<3(>5):0"5."60&5, 4*6/&:4)=4(:2&80%;3(<4)=5*<3(;2'80$5-!5-!6-!;3'=4(=4(8/"4+4+?4&   8-,C-!A,!@, @+@*A*A*?(;%<(?+>(<&9$6"3 6$9'<&>';$8!='B,@->*:(6#1..,2!7&7%5"4#3#/ .-/!*'*))&&&!   -       -      -              - -   - -  -             -    -        -  -    -   - - - - ,$+#1)-&,%2,!3,"1+!0)2)5,!6-"4,!0(/&3+ 3+ 5-"7/#3, 1)1)0)0'-$0)6/$93'93'81%4, 4*4*6-!8/#70$60#60$81%92&70$5.#6/$92&:3':3';4'70#5."80%=6+;4):3'92&81%:3':2&92&:2&<4(80$91%;3'91%6."7/#91&;2&;2'90%8/$;3':1&90$:2&;3'91%80$:2&<4(80$8/#80$7/#4, 91%;3'91%=4(<3(91%<4(<3(91%:2&:1&<4(;3'=5)=4(<3(=4(<3'9/$6-!8.#;1%<2&<2%8.!5,7."8/#;2&;2';2'8/#5+ 5+ 7-!;1&?5*<3(;2'81%80%;2&;1&8."8.">4(>5(:0$:0$:1%:1%<3'=4(<3'90$:0%<2';2&:1%;3'8/#5-!90$:1%7-!7-"90$7/#92&70$92%;4';3'90$80$:1&=5):3'92&94(=7+:3(6/$4-"80$90$5.#5.$5.%70&5.$4-$3,".&,%&$$&%&(())))''':::555///(((###"""###$$$&&&''' "!!((())))))***...555<<5)=4(90$9/#9/$:1%<3':2&;2&=4(<4(91%6."80$6."91%91%5-!92%:2&5, 8/#8/#:1%90%5, 6-!1(4+ 7."6-"8/$8/$6-"6-!5,!3*4+ 6-!5,!5,!7.#90$90%7.#6-!7.";3&7."7.#6.#3+80%:1'80$5-!:2%<4'91#:1$@7*?6(7- <2&=3'=4(?5):/#5.#60%5, 4+60&;4*?6*<4(81&;3'=4)>5*;3':2&90$5-!5-!6."=4(?6)>6):1$5,4+8.!  - C-!A-!?, ;)=)>(@*@*>(;';(>*=':$6!25"?)>+<(8"9"=&A)@*?)@,;(4"0../5$9'7%8%8&5$1"*(*(&()$$'(    -       - -         -     - - - -   -        -                -          - -    - - - 3+ 0(-%+#0(/(.&0)0)0* /'0'3*3+ 2)/'/'6-"5-!6-"7.#4, 1*0)1)/',#3+ 6/$81%92&81$6-!5, 5+ 8."8/#81$71$50#71$92%92%70%70%92&92'81&81&5."3, 92%<5)<5(;3'92&:2&:2&91%70$92&<5)92&92&;3'92&6/#6/#92&;3':2&91%90$91%91%90$:1%;3':1%6.";3'=5):1&:1%90%7/#7/#:2&:1%;2&;3'<3'91%<4(<3(<4(;3';2'=4(;3'>5)<4(:1&:1&;2'90%7."9/$:0%;1%<3&9/#6, 6, 8.";1&:1%8/#6-!6,!3)3)8.#<2';2';3'92&90%;1&<2&9/#8."<2&>4';1%;1%;1$9/#:1%<4(<4(91%91%<3(;3'91%:3&91%7/#8/#;1%7-"8.#90$8/#92%80$81$:3&;3&80$80$:1%<3';4(:3':4(<6+:4)71&4.#:1%90$5."5.#6/&70'4.$5.$3,"-&)"*#%$$&&'())>>>999222***&&&%%%$$$$$$&&&'''(&$)))((((((***222:::@@@EEEJJJ###%%%'''''''''%%%%%%%%%$$$!""%,%/(1* 3-#3-#60&60&71&70%81&81&6.$7/%80&90&7.$4,!6/$=7+;6*:4(92&:2&8/$7/#7.#6-!80$:2&5-!1)3+5-!3*7.":2&;2&:2&6."8/#;1$6- 6- :1%;2&7-"4*/&4*6,!5+4*5,90#;2&80#80#8/"6, 6, 9.":0$;1$;1$<1$8.!7- 9/#8."5*4*7,!6,"4* 2)6.#5-!4+ 3*3+4- 5-!8/#7/#;2'6.#5,!8/$6."6-"80$;2'90%5-!5-!70$5-!4-!7/#:2&:3'81&92'81&5.#3, 4-!7/$6.#4-"6/$4-"0)70%70%4,!4,!5-"3+ +)("""""""""!!!!!!"""######!!!!!!###""""""!!!   ###!!! !!!"""""" !!!   !!!     !!!!!!!!!  !!!"""""""""!!!"""$$$######&&&''''''''',,,444===AAA$$$%%%###+%(!*#/'/',$,$0(2).%0'2)5,"6.$7.$5,!5, 6."5-!4+3+3+6-"6-"3*4+ 90%;2'7.#7.#8/$:1%90%7.#:1%=4(4,"80&;3(80&80%:2'=5*;4(7/#:2':3'91%70#80$7/#90$<3';2&7/#6."6."90$;2&;2&<4(7/#5, 7.";2&<3(;3(91&8/$90$=4(<3':2&;3';2'91%:1%;2&90$91%<4(:2&7/#7/#91%:2&80$5-!6-"7.#8/$;2';2&5, 1'7-"?5*<3(90%6-"8/$7/$3+ 4,!=5*<4)7/$91&<5*=5*;3(92'2* 5.#91&<4);3(91%5-!7.";2&8/#5, 7.#90$5,!5-!91&80%4,!4-!5-"2*3, 91&:1&4, 80$>5):1&6-"90%5, 1)7."?6*>5)90$8.#7.":1%=4(;2&:1%<3'<4(:1%6."80$5-!91%:1%4, 80$90$2)6."6-!8/#8/$6-!7.#3*5, 6-"5, 7.#7.#3* 4+ 4+ 2)4, 6-"5,"5,!7.#90%:1&8/#6-!7.";2%6-!5-!5-"2*;2(;2(:2&6."80#;3&:1#;2$?6)>5(7-!<2$:0#:1%>5*90%4-"6/%5, 4+ 92'=6+?7*<4(:2'=4)<4(=4):2&80$80$6."7/#7/">5)?6*?6):1%4,5+7-!  C-!A-!?,!:(:'<(<'>)?*=(;&:&:':%7!46!='?)A*@+8$7!<%>(=&='=':&1-,,1!6%9&9%5#6$4",-&(,&%'&%&"    !""       - -  -   -       -  -    -   -                        - -         -    - - - ,&0)2*0(-%,$/'.'-&.'/(/),$,#1(2)1(1)0(2*4+ 3+7."4, 0)1*2*2)/%4, 70$70$81%91%7."5+4*6,!7."70$60$5/#81%70$81%81&92':3(92'6/$5-#2+ 4-":3':3'92&91%91%;4(;4(:2&91%;3';3':2&:2&:3'5-!4-!80$:2'=5);2&90$80$8/#:2&;3';3'<3';3'4, <3'<4(;2&;2&:2&80$90%91%:1&:1&90%<4(;2&>5)<3(=4)<3'<4(>6*>6*?6*=4(:1%90$;2&90%8.#:0$;1%<2&=3':0$6, 6,!8.#<3':1%8/$6-"7-"2(2'6-!;1&;2&;3'92':1%;1&<2':1%9/$<2&>4'<2&;1%;1%9/#90$<3'=5):2&91%;3';2&:2%;4(;3'91%8/#:0$5+ 8.#;1&:0%:1%81$70#:3&:3&80$7/#91%:2':3':3'93';4)<5*5/$4-";2&:1%7/#5-#6/&70&5.%5.$4,#-%,$( ###$$$(()<<<555///(((###$$$######''''''%$#)))))))))***///666<<9-<7+;5);3(7/#6-"6-"7."6-!8/#8/#5, 1)3+5-!1)5, 8/#=4(8/#90$8/#8."6, 4+9/$9/#5+ 1(.$4)6, 4*3*6, 90#:2%8/"7/"7."5*5+8.":0#;0#;0$;0$8.!7- 8."8."5+4*7-"8.#4* 1(6.#6.#4+ 3+2+4- 6."8/$7/#90%7/#7.#7/#6."6.":1%<4(80$5-!3, 7/$4-!3+ 6.#81%:2'92&92&:3'70$3, 3, 5.#5.#5-"7/%4-"1)7/%70%4,!4, 3+!2*!!!!!!!!!""""""###!!!""""""""""""######"""###!!! !!!   !!! !!!""""""!!!!!!!!!  !!!    !!!!!!   !!!"""""""""""" ###%%%&&&%%%%%%(((///999>>>FFF%%%*#+$)"+$/(/(-%,$1(1)*!0'3* 4+!5,"5-"6-"4, 7/#4+3+3+5,!6-"5,"3* 4+ 8/$:1&8/$90%:1&:1&90$6-"90%<3(7/%91';3)6/%6/$91&<5*;3(7/$:2&;3':2&80$;3'91%;3&=4(91%8/#6-!5-!91%;2&:1&<4(7."6-!90$<4(;2';2'91&80$:2&=5)<4(;2'<3(:2&:1%;3';3'80$7/#;2&:2&7/#7.#91%;2&8/#4, 5, 6."7.#:2&;2'5,!/&6,!@7+<3(80$7."80$7/$2*3+ <4)<4)80%91&92';3(;3(91&2* 4,"80%<4*;2(80$5, 7.#<3':0$5+ 8/#90%5,!6.":2'92&3, 4-!7/#1)5,!:1&:1&5-!80$?6+:1&7.#:1&7."2*7.">6*>5):0$7."7-!:1%=4(;2&:1%<4(<4(:1%6."80#5-!80$:1%5, 8/#7/#3*6-!6-!7/#8/$6-!7.#5,!5,!8/#4+ 6-"6-"2)4+ 4+ 2*4+ 6-"5,!5,!7.$7.#8/$5,!7."91$<3&7."7/#6."4+ <3)=4*<3(7/#91$=5';2$;2$>5(>4(8/";1$:1#8/#92&6/#3, 7/$5-!3+90$>5)>7+:2'81%<5(<4(;4(7/#7."7."8/#90$8/#>5)?6*?6):1$3*4*6,    D-!A-!?,!:* 9':&<(=(>)=(<(:&8%7%6"36 ='?*D- C+:#:%9%:$='<&;%;%5 -+*-0"3"7$;&8$2 5#.-**'&&##%$   -    #%"  -  - - -  -      -         -    - -   - -            -                      - - -0)0*,&0)2*0(-$.%/',%,%.(/(/)-%,#0'1(0'0(0'3*2*2*7."4, 0(1*2+4* 2(3*70$92&92&91%8/#7-!4*5+ 8/$80$5/"4."70$60#70$70%92(;3)81'5.$4-#2* 5-";4(;4(<5):2&81%92&;3'91%92&;3';3'92&:3';3'5-!2+6."80$>5);3'91%90$91%:1%91%:1%:2&91%91%;3'=4(;3';3';3':1%7/#;3':2&7.#:2&;3';3'>6*<3(=4(=5)<4(?6*A9-?6+=4):1%7.#:1&:1%9/$9/#:/$:0$;1%;1$7-!4)8.";1%;2&90%90%:1%4+4*9/$;2';3';3(:3'91&:0%;1&;1&:0%;1&=3&;2%;1%<2&:0$:1%;3'>5):2&90$;2&:1%90$:2&:2&80#6-!=3(5+6,!<3':1%91%80$70#80$81$70#7/#81%:2';3(92'92';4);4*71&3-"91%:2&6/#4-!5.#7/%6/%6.%4,"0()"-%(!$$$%&&999222,,,&&&###$$$######'''&&&((())))))(((,,,222999>>>DDDCCC'''''''''&&&&&&&&&%%%$*#/(1*!2+"3,"3,"5.#81&5.#4."70%70%6.$6.$80&7.$5,"3+ 70%=7,<6*:3(92&7/$5-!4+ 6-"5, 6."91%7/#4+ 4+5, 0(3+80$;3'90$7/"90#8/"4*5+<2&8."5+3)3)6+ 6,!4*4*6, 5, 7."7."80#7.!4)5*8."9."8.!:/#9/"8."7-!8."8."5+3)6,!7-#4* 1(7.#7.#4, 2*1*4- 7/#7.#7/#90$80$80$8/$5-!5,!91%<4(91%6-"4,!6.#4,!3+ 5."92':2'81$81$;4(81$3, 2+ 5."5.#6.#6/$5-#2+ 6/%6/%4,!4,!4,!2+ !!!!!!!!!######"""!!!"""!!!!!!"""""""""""""""!!!     !!!!!!  !!!    """!!!"""###$$$&&&&&&%%%---555;;;BBB+$*#+$*#,%.&.',$+$0(.&.%/&2)4,!5,"5-"5,!3*7.#4, 4+4+5, 4+ 5,!4+ 5,!8/$;2':1%8/$:1&:1%8/#5,!90$:1&7/%80&:2(6.$5.#92';4):2'92&92&:2&:2&7/#91%;4(;3';4(;3'81$5-!5-!80$91%:2&>5)7/#6-!8/#;3';3(;3(91%80$:1&<4(;3':2&<3':2&:2&<4(<3'80$7.":2&;2&6."5-!91%=4):1%6-"6."7/#7/#:2&:2'5,!.$4+=4):1&6."7."90%7/$2*2+ ;3(;3(91&91&92&;3(;3(6/$1)1)7/%;3):2(91%5,!8/$;1&90$7-"90%:1&6-"6.":2':2&3+4, 7/#4+ 6-":2&:2&6-!7/#>6*90$6-!7/#6."1)7/#@7+=5):0%7."6-!:0%<3':1%:2&=5)=4(:2&7."7/#6-!6.":2&5-!7/"80$5, 5-!5- 8/#7.#4+ 7.#4+ 6-!90%6-"7.#6-#3* 5,!5,!4+ 4+ 5,!4+!4+ 8/$7.#:1&6."7.":1%=4(90$:1%7/#5-":1(=5*:3':2&>6)A8+<4&<3&?5(=4'9/"9/"8/"7/"90$6.#3+ 7/$5-!4+80$=4(>6*91&6/#<5):3&92%7/#90$7."9/#:1$9/#?5)?5*=4);2&4+2(5*   "D- B-!?,!>,;*;*<(<'='=(;&9%6$4$4#24 9#<'@+D- B+;$;%A,<(>*=(:%6!1,,,-/"/07%:'4!1/' .$ *($#$$! -  !# "!   - -   -     -     -  -     -  - - -   -  -           -    -    -  - -         -   - - -.(1+/(0)0)1*3, 0(,%-&1)-&-&/(/(1+!/',#/&1(2)2*0'2)2*2*6."5-!2)1*3+4* 2(3*6/#92&92&91%7."7-!7,!6, :1%80$4."4.!6/#60#6/#5.#80&:3)80'5-$4-#2* 5-#:3(;3(<5(6/#5-!81%<4(92&:2&:3':2&91%91%:2&7/#3, 70$80$;2&:2&90$90$:2&:2&:1%90$91%;2&:1%<3'<4(:1%;2'<3(:2&91%:2&;3'90$;3'<4(<4(=5)=5)>5*<4(91%>5*A9-@7+>5)90%6-":1&<2':0%8.#:0$:0#9/#;1%9/#5+4*9/#=4(;2':1&90%6-!5, 90$;3';3(;4):4(:2';1&<3'=3(;1%;1%<3&<2&;1%=3';1%90$:2&>5);3'90$;2&:2&91%:3':3&8/#6-!;1&3)5+<2&:1%90$91%80$6/"80$81%70$81%:3';3(91&81&:3(:3*71&4.#70#91%70#6/#6."6/#6.#6.$6.$.&.'-&)!+#>>>666000+++%%%$$$$$$######&&&&&&)'%***)))(((***000666<<6*<4(90$80$90%8/$:2&:2'5, -#3*<3'90%5,!5, 7.#6.#1*3+ ;3(;4)91&80%:2';4);3(6/$2* /'5-";3(;2(:1&5, 8/$:1%:1%7-"9/$90%5,!5-!91%91&3, 4, 70$5-!5-!:2&;2'6."80$<4(80$6-!8/$8/#2*6."=4(=4(;2&8.#7-!:1%;3'90$:1%<4(<4(:1%6-!8/#7."6.";2&4, 7.":1%7."5, 5, 8/#7.#4+ 8/$6-"6-"8/#6-"7.#7.$4+ 6-"5, 4+ 3+ 4+ 5,!5,!90%7.#:1&7.#5, 90$;3'8/#90$80$6.#<3)?7,=6*;4'>6)@8*<4&<4&>5(>4(:0$8/!7.!7/#:2&6."2+70$5-!3+8/#;2&;3'7/$80%<5):3':2&80#80#8."=3'>4(;2&>5)?5*=4):2&4+ 2'5+    -%E- C- @,!B."?,>,>,>+>)>(=(:&7%3$1"1!3!<'<'=(>(?):#<%@*B-C.@-<):%2- /.-0"/!-//4"4"2 .1 1!/.-*%%"  !  "!    -               -   -  -    -         -         -        -  - -  - -    -    - -/(.&.(1*/(0)2+ 3,!5-"1*-&.&1*/'0(1* 0) 1*!.&+#.&0(2*2*.&1)2*2*5-!6-!3+2*5."7-#3* 3+ 5."82%92%:2&7."4*7,!7-!91%80$5/"5/"6/#5."4-!5.#91(:2)6/&5.$3,"2+!7/%;4(;4(;4(4-!3, 81%=5):2&;3';3'91%6/#5.!81%80$6/#92&:2&<4(<3':2&;2&;3';2&:2&7."80$<4(<4(>5)<4(90$;3'<4(:1&90%:2&<3(:1&<4(;3';3'<4(>5*?7+<3(90$>5)?6*?6*>5);2'6-!90%<2'9/$8.#7-"9/"9/";1$9/#5+5+9/$=4)90%90$90$7."5, 8/$:2';3(<5*;5);3(;2'=3(<3'90$9/$;2&;2%:0$;2%;2%90$;2&?6*=4(8/#:2&:2&92%;3';3'80$6-!:0$5*5+ ;1%<3':1%80$92%6/"92%:2&91%81%92&:3(81&6.$70&:3)71'4.#81%92&7/#5."4,!5.#6.#5-#4-"-%.'0(+#$<<<777000)))#########$$$&&&'''&%$((((((((((((---333999???CCC'''((('''&&&&&&*$%("+$0(3+"3,"5.#2+!4."81&71%70$92&81%6/#6/$81&8/%8/&70%92'=7+;5*:3(;4(80%3*4+ 8/#6-!5-!80$90%5-!7/#4+3+4+;2&:1%6-!5- 90#8."5+:0$<1&:0$6, 4*4*5, 5+ 4*4*5, 7/"90#8/#80#8/"5+5+9."7-!6, :0$90#8.!7-"8."5+ 6, 5+7-!4* 4*2)6."8/$5, 2*3+5."8/$7/#6."7/#7/#8/$:1%7.#5, 7/#:2&;2&6."3+ 6.#4-!2+ 4-":2'91&92%:3&<5(81%2,2+6/#70$70%81&6/$5-#70&80&5-#4-!4-!)!!!!"""!!!""""""""""""""""""!!!""""""!!!!!!!!!!!!  !!!"""   !!!!!!!!!  ###$$$&&&'''%%%&&&...555;;;BBB*#+%+%-&0)/'+$.&.'.&,$0'1(5,"6.#4, 2)0(4, 6."5, 3*4+6-"7.#3*3*8/#90%7.#6-"8/#90$7.#5, 8/#:1&90%91&:2'7/$7.$7/$<4);3(91&;4(91%4-!7/#80$:2&81%;3':3&70#6/"70#;2&80$:2&;3':2&6-"7.#:1&<3';3'7/#5-!91%<5(;4':4';4':2&91%;3';3':1%91%<4(;3'5-!4, :2&=5)<4(91%90%80$7/$:2';2'7.".%3*:1&90%5,!4+ 6-"5-"0(2+:2'<4)92&80%:2'=5+<5*7/$4,!/'4,";3);3(:2'4+ 8/#=3(>4)8/#8.#90%5,!6-":1%:2&5-!5, 7.#4, 4, :1%:1&4, 8/$:2&80$6-!90$:1%4+6-!;3'=4)=4(9/$7-"90$<2'90$8/#;3'=4(80$3*5-!6."7.";3'6-!7.":2&7."5-!5, 6-!6-!5, 7.#8/#6-"8/$6-"7.#8/%4+ 6-"3*2)3*5,!6-"5,!;2'7.#:1%6-"3*7/#90$8/#8/#8/$7.#<4)>6+<5):2&=5(A9+?7)>6)?6*?6*<3'91$80#91$<4'80$4, 91%5-!3+80$<4(;2'6.#80$:3&91%80$80$:1%90$?5)?5*<2'=4)?6*>6*;3'6."7- 9/"F:*    -E. D- A, @+ ?* ?*>*@,@+@+@*>)8&4$3#1!3#7%>)?*A+?)7"3:$B-C.A,@,<)3".-.0/-,.,///06$01!-(((,)! -  #!   !   -      -  -  -     -   -  - -    -    -  -     -                      - -   - - /&/'-&.'1*0)0)0)1*3+ 1).&-&0)0(1)2*!.'/(.&+#/'/'3,!2* .&1)3+3+6-!5-!2*3+7/"8."5+ 4+ 70$92&;3'<4(90$4*5+7-":2&92&5."5."6/#4- 2+ 5-#91(92(6/&6.%4,#3+!7/%:3(<5)<5)6/#3, 80$;3':2&;4(;4(92&70#6.":2&81%91%81%91%91%90$90$<3'<4(;2&;2&;2&<4(<3'<4(>6*=5):2&<4(=4):2&:1&<4(>5);2'<3(;3';3'=5)?6*?6+<4(;3'>5)?6*>5)=4):1&6-":1&=3(:0%8."7-"8/":0$<2%:0#7-!6, 8.#<3'90$8/$8/$7."5+ 7-":1&:3(;5);5)<3(;2(<3(;2'9/$9/$;1&<2&90#:0$<2&91$<3'?6*>5)80#;2&:2&91%:3&;3'7."5, <2&8."7-!:0$91%91%81%:2&80$:2&:3':2&91%:2&;3(80&5.#70%<5+82(5/$80$91%6/#5-"4,!6.#6/$5-#3+!-&/'0) -&' 999444...((($$$######$$$&&&''' $$#&&&(((((('''+++000666<<<@@@@@@'''&&&&&&%%% "'!+%/(2*!3+"3,!4."3,!5."71%70$70#81%70$4-!6.#80&91'91'81':3(=7,;6*;4);3(80%3*3*7.#7.#8/#80$8/$5,!7/#4+1(4+90$90$6-!5- 8/"6, 3)8/#;1&<2'9/#2)4+7."7-!5,3*4+:1%;2%8/#7/"8-!4)6+9."6, 7-!:0$90$8."9/#9/#4*6, 5*5+ 4* 4*4+8/#80$5-!4, 5."5-!7/#7/#4, 6."7/#8/$:2&80$4, 7/#:2&:1&5-"3+ 7/$6.#2*5-"80%81%81%81%:3'70$3, 2+6/$81%81&92'6/$3,!6/%81'6.#4-!4,!!!!!!!"""###"""""""""""""""!!!###$$$"""!!!!!!!!! !!! """!!! """!!!!!!!!!!!!    !!!!!!    !!!!!!   """###$$$&&&'''%%%%%%+++222999<<<*#*#*#,&0) 0(.&.'2* /',%/'3* 5,"5-"5,!3+2)4, 6."3+2)4+7."6-!2)3*8/#90$7."6-"8/$90$7/#6-!90%<3(:2':2';2'7/#6.#7/$:1&91&91&:2':2'6.#6.#:2&80%70$;3':3'80$70#81$<4(80$:1&<3':2&5-!80$;2';2';3'91%6."92&<5);4(;4';4':2&90$;2&;2&90%90%<4(;3'5-!5,!;3'=4);3(90%90%80$80$;3(<3(8/$0(2)90%:1&6-"6-!7/$6-"/'1)91&<4)91&80%;3(=5*<4*7/$3,!.&3+!91':2';3'4+ 6-"=4(>4)8.#6-"90$7."5,!:1&:2&6."5,!5-!3*4+ 90%90%5, 7/#:2&80$5, 7."91%5, 6."<3'>5*>5)90$6, 8.#<3':1%8/#:1%<3'80#2*4+7."8/#;3'7/#6."90$6-!5, 5-!5-!7.#4+ 7."8/#6-"8/$6-"6-"8/$4+ 6."7."6-!4+ 5,"3*2):1&8/$8/$5-!3*8/#;2&8/#8/#5-!7/#<4)>6*;4(81$;3&?7)>5'=4'=4'>5);3':1%7/"90$;2&80$3+7/#3, 3,7/#=4):2&6."6.#70$91%90%:1%<3';1&>4)?5*;2'=4(>6+?6+;4)80%9.!9/"@5& -   F.E-C,B, ?)>(=(=)?*B+ A+A+=(7%3"2!1!6%=)=(?*C-!>)6!5 >)@+A,@+?+=)1 ) ,.00,)*-+./-.0.-.-)'$   !!!!        -       - -                 -                        - -  - - /&,#-%/'-%-&0)0(0)1)1)3+ 2*0(-%0(/'0(1* -&.'-%+#/(0)5-"3,!/'2)3+4+7."6-!4+5- 80#9/#6,!5,!80$92&<4(<4(80$6,!5, 6-!8/#80$6/"70#92%6/#2+5.#70&81'70'7/&6/%4-#6/$:2'=6*:3&6."4, 91%;3':2&:2'91%80$7/#80$:3'92&;3':2&<4(=5)<4(<3'?7+?6*;3';3';2&>5)<3'=5)?7+=4(80#;2&=4);3';3'=5)=4)91%:2&:2&;2&=5)?7+=5);3';2&=5)@7+@7+>5):1%6-";2'<3'9/$6, 8."9/#;1%=3'<2%9/#6, 8.#;3'90%90$90$7-!3*6,!90&92'82':4);3(<3);2(;1&90$8/#<2&=4(9/#90$<2&80#;3&>6*=4(8/#:2&:1%91%;3';3'6."6-!9/$7-"7-":0%;2&80$:2&92%:2&:3';3'92&80$:3';3(70%5.#71&;4*82(60%7/$70%5-#4,!5-#70%70%6.$2+!/'0)1) .'???777222,,,&&&$$$$$$$$$%%%&&&&&&"""!!!,)%'''(((''')))...444999===>>>&&&%%%$$$,')#*$,&.'2+!3,!3-"4-!4-!5/#70$60#70#81%70#3, 5."6/$:1(91'81':3)<6+:4)81&:2'80$2)1(6-!7.#80$80$90%5, 7/#6-!1(4+8/#91%7."6-!8/"7-!3)5,;1%:0$5, 3)4+7."7."4+3+8/":1$:1$8."7."5+3(6, <2&8."8.":0$9/#7.":0$;1%5+ 3)4*3(3)5+ 5,!90%90$6."6-!6/"6."7/#7.#5-!80$8/$6."90%90%4, 6.";2':2&5-"3, 7/$6.#2*5-"80%81%70$81$93&81%4-!2*6/$81&92&:3(6/$2+ 6.$81&7/%5-#+$!!!"""$$$###"""!!!!!!!!!""""""""""""!!!  !!!!!! !!!!!!!!!        !!!!!!!!!!!!!!!   !!!!!!###$$$###%%%&&&&&&%%%&&&---555:::CCC*#+$.'1* 0) .'.'1* /',$/'2+ 6-#5-#3+0(2)5-!7."4+3*6-!7.#6-"2)4+ 8/$90$6-"7.":0%91%7."6."8/#:1%91%:1&91%7/$7/#6.":1&80%70$:2';3(80%5-":2'6/#6/#:2':2'80$7/#70$<3';2&;3';3'91%6.!90$;2':1&;2':1&6/#92&<5);4(:3';4(:2&91%;2&;2&91%91%=5);3'7.#7.#;3'=5)<3(90%80%8/$80%;3(:2'5-"1(2*:1&<3(7.#6-"8/$8/$4+ 5+!:0&>4*;1'6.#90%;3(:2'80%4-".&2+ 7/$8/$:2'4+ 5,!=3(<2'4+ 3*8/#5,!2*7.#90%6."4, 4+ 2*4+90$:1&3+6.";3'90%4+ 4, 80$5, 5, <3'@6+>4(8.#4*8/#<3':1%8/#:1%;2&80$4+4, 80$8/#:1%7."5, 7."5, 4+6-!6-!90$4+ 5,!6-"5, 7."5,!3*7.#3* 5,!7.#5,!4+ 7.#4+!3*90%8/$6-"5, 4+ 8/$;3'8/#90$6-!8/$<4)<5):2&81#;4'>6(>5(<4'=4(>6*<4(;2&5, 8/"90$7."3+6.#4,!4-!6/$:2':1&8/#90%:2';2'90%90%<3'<3'?5)?6*<3(=5*>6+?7,;3)90%8- 8- :0#   "G.F.D,@+B->)<'<'<'=)@+ B+ @*<'8%5"2!4#9%>*?+@, ?*8#1 8#?*@*?*>*:&8$2-,-/.)'%'0"- --*,./ -+'&!  - - ! "    -                 -         -  -  -  -      -   -   -           -  - - 3+!3* 0'.%.%0'.&-&0)/(1)2+ 2*5-"3+0(,$0(.'/'1* -&.',$,$/'2* 3,!4,!1)1)2)4+8/#7/#5- 6.!7."8.#6,!5,!91%:3'<4(;2'7/#6,!7-"6-!8/#7/"3,70#:3&71$2+ 6.#70&81'7/%70&80&6/$6/#;4(<4(<4(7/#6.":2&92&6/#81%;3';3'80$92&92&:2&:3'92&<4(=5)<4(;3'?7+@8,;3':1%;3'?6*=5)>5)>6*=5):1%;2'<4(<3(<3(<4(:2&80$:1&91%91%<4(>5*<3(:1&91%=4(@7+@8,>5*:1%7.#<3(=4(9/#6,!9/#:0$;1%=3'=3&:0$7.!8.":2&:1%90$:0%7-"4*6,"90%80%71&:4);2(;2':1';2':1%:0%=3'=4(8.":0$;2&7/";2&?6*>5)8/$:1&;2'80$91%:2&5-!5+ :0%7-!7-!9/$7."90$91%7/#:3&;4(;3'81%6/#:2';4)81&6/$81&;4)71&5/$5-"6.$5-#4,"6/$81'81&3,"2*!/'0)1* /(===666000***%%%%%%&&&%%%%%%'''###!!!!!!!!!!!!!!! """!!!('%&&&(((((((((---444888;;;>>>$$$#(")#+%-'-'/(3+!4-"6/$4."4."5."6/#6/#70$92%81%4-!6/#5."7/%7.%80&;4)=7,;5*92(:3'90%3*2)7."8/#80$80$91%4, 7/#7."2)3*7."6-!4+6- 90#7-!4*5, :0%7."3*2)7/#90$7/#2)5, 9/#:1$9/#7.!8."4)5)4*8-!7-!7-!:0$8/#8.#8/#8/#5+5+3)3)4*5, 6-!90%:1&6-"4, 5.!6."8/$8/$6."80$8/#5-!80$91%4, 5-!91%:1%4,!4-!6.#5-"3+ 5-":2'91&71$81$:3&92&5."1*6.#81%81%92'5.#2+ 5.#70%6.#3,!,$ """############""" !!!"""!!!!!!   !!!!!! !!!!!!     !!! !!!!!!"""""""""!!!!!!!!!!!! !!!###"""###"""%%%%%%&&&&&&&&&$$$,,,444999@@@*#+$.'0) 1*!.&/'0(.&+#.&2* 6.#4+!4,!2*3*6-!7/#4, 4+6-!5, 6-!3*4+ 90$<3'7."7.":1%:1%80$7."80$:2&90%:1%:2&6-!7.#7/#91%7/$6.#70$;3(91&5."91&80%70%:2':2'80%6/#70$;3':2&:2&<4';2&6.!80#:2&90%:1&91%7/#92&;4(;4':3'<4(:3&:2&<3'<3':2&:1&>6*:2&7/#8/#;2'<4(<3(90%80%80%91&;3(:2'7/$3*3*:1&<3(8/$7.#90%8/$5,!4+ :0%>4*:0&5,!7.$;3(:1&92&3,!-&1+3,!:2'80%5-"5,!90%:0%4+ 2)90$5,!4+7/#:1%6."3+3+2)3+8/$;2'4, 7/#<4(<3'7.#5, 91%4+1)91%?6*<3'7-!5+8.#<3';1%8/#:0%;2&90%6-!5, 90$7/"7."6-!5, 6-!5, 3+5-!7."8/$4+4+ 6-!4+ 8/$6-"1(6-"4+ 4+ 5-"4+ 4+ 7.$5-"3* 8/$7.#5,"4+3*90$:2&6-!91%80$90%;3(<4(:3'80#;4'<5'<5(:3&<4'<4(<4(;3'6.!7.!:1$6.!5- 81%6/#5.#81&<3(=4)8/#80$;2';2'8/$:0%=3(<3'=3(<3(;2'=4)=6*=6+92(80$7, 7,9/"   H.G.E-A+C+@+>)=(=) ;&=( @+"?*=)<':%7$6#5#8$<(>*A- ?+8$5!8%>)>)=(?+;&2/../!.-*'%%(*)-0"++*+%!      $!"   -    -             -     -  -  -     -  -         -   -        - -   -    -  -  3,"1* 1) 2)2(0&/%0'/'.'2+ 1*2+!2+ 3,!5."5."1),$1)/(0(2+!.'/(.',$/'1)3+!3+ 1)2)3*4+8/#80$6.!6.!7.!8."6,!6-":2&;3'<4(<3(90$7-"9/$7-!90$90#3,6/":3'81$4-"6/#80&6/%6/%80&81&5.#7/$:2&=4(<4(:2&81%:3'92%6/#70#:2&;3'90$=5);2&:2&91%81%=5)>6*=5);3'>6*@8,:1%7."<4(>5)=4(=4(=5);3'91%;2';3':2&<3'<4(:1&80$;2&:2&80$:2&<3(;3'91%80$>6*?7+?7+>5*;2'90$=3(=3(9/$7-"9/$;1%;1%=3&<3&;1%:1$8/"90$90$8/$:0%8.#5+ 8.#:1'80&71%:4);3);2(;2(;2(;2&;1&<2'>5(7.!;1%=3'80#;2&?6*>5):1%;3';2'80%92&81%4+ 4+8.#6,!7-!8.#7."91%81%70#:3'<4(;3'81%5."91&;3(91&5.#60$:4(60%3,"4,!5-#6/$5.$7/&80&70&5.#4-#0(0(2* 0(:::666///(((%%%&&&&&&%%%&&&(((""!""!###"""!!! !!!!!!!!! !!!""""""!!! !!!!!! !!!!!!""""""###$$$&&$%%%&&&((()))+++000888;;;>>>??? #)"*$,%-'-'.'3+ 6/$6/&4/%4.$3-#6/$5.#70$92&71$6/#6/#5."7/%7/%81';5*=7,:4)81';4(:1&5,!5, 7."7.#90%90%7.#6."7/#6-!2)3+7."7."6."7/"90#7-!5+6-!7."3+1(4+5, 91%6-!2)6-!9/#;1%8."8."8."5*4(9.";0$9.#9/#9/$8/$8/#6-"6-!7-"4*5+4*5+ 5, 6-":1%:2&7.#5-!5-!6."8/$8/$7/#80$7/#4, 7.#8/$4, 5-!80$:1&5-!2+70%5-"2*4,!70$91&81%70$92%70$4-!0)5.#81&70$70%4-"1*4-"6/$5-#4,"!!!"""!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!! !!!"""!!! !!! !!!!!!       """###""""""!!!!!!!!! !!! """######$$$%%%&&&&&&'''&&&$$$$$$)))111777;;;*#+$.'1) 2+"/'/(/'.&+#-%2+ 7.$3+ 3+ 1)1(4+ 6.!4+3*4, 5,!5-!4+ 5,!8/#8/$6-!7.":1%;2&:1%7."8/#:1%91%;3';2&7."5-!6."7/$6."6-"6.#;3(80%1*7/$;3):2(:3(:2'80%5."7/#;3':2&;2&=5(;3&6.!80#;2':1&:2&91%7/#92&<5(;4(;4'=5);3';2&<3'<3';2':2&>6*:1&7/#7/#91%;2':2'80%8/$80%91&<4)<3(90%4+ 2*80%;2'8/$8/$90%7.$6-#5,!:0&@6+;1&5,!7.#<3(:3'92'4-!.'0)1*70%80%7.#6-"7.#90%5,!2(9/$7-"4*7.":3&6/"3, 5."0)2*:1%<3'4, 7.";2&;2&6-"7."<3'3*0'7/#=4(;2&7-!5+ 6-!;2&:1%8."90$;2&<3'7/#5-!90$7."5- 7."7."7/#7."5, 6-!7.#8/#4+ 4, 8/$4+8/$5,!2)5,!4+ 4+ 3*3*5,!90&6-"3* 6-"6-"6-#4, 3*:1%:1%7."90$8/$91&=5*>7+<5)70#:3%;4&;4&:3&=5(>6*<5)92'6/"8/";2%8/!6.!:3'6/$6/$92':2'8/#6+ 8/$7/$:1&8/%90%<2&;2&<3';2';2'>5*=6+>6,:3)80$7,6,7,    I/H.F-B,G/"B+=(<)<*?+!=)!<'!=)<)<(<'<&;&;'8%8%9&;'>*<)9&:'=)@,A-<(;&6"1-* /4#0",+*)(&(("'()*&$ -  "    -   -     -       - - -      -         -           -    -   - -   -    -  -  4+ 3+ 1)0(1)1(1'/%.$.%-%/(2+ /(3,!1*5-"6.#80%1*,$1)1)3+!4-"0)1) 2* -&0(2*4,!3+ 1(3*5,!3+6."90$6."7."8/#8."6, 6-!:1%;3'<4(>5*<3(:0%;1%7-":0$:0$5,6/":3&81%6/$70%92(70&6/%70&70%6/$91&;3'=5);3':2&81%:3';4':3&92&<3(:1%91%<3'=4(>5);3'92&<5(<6)<5(<4(=6)?7+;2&5, 6.":2&;3'<4(>5):2&80$:2&91%80$;2'=5):2&8/$;2';3'80$:1%<3(<4(:1&80$>6*>6*?6*>5*<3(:1%<3'<3(9/$8.":0$:0$:0$<2&<3&<3'<3&8/"7."90$90%:0%7-"4* 7-#:1'91'81&:2(:2);3)<4)<3(;2&:1&;2&?5)7-!:1$<3'90$<3'@7+>5*;2'=5)=4)92&:2'91%4+ 6,!9.#7-!6-!90$7/#80$70$5."92&<4(;3'81%4,!80%;3(92'70%:3(;5*71&4-#5-"5-#5-#5.$6/%81'92(70&4-"/'0)3,!0):::666---&&&%%%&&&&&&%%%&&&&&&#"!$$$$$$###"""######"""###%%%$$$###!!!$$$%%%%%%%%%$$$###"""""""""!!!""" !!!###!!!$$$$$$&&&''''''((((((''')))...555999;;;<<<'!*$+$*$,&-'-'.&1*5.#5/%5/%5/%5/%71&5.#6/#91%5/"70$70%5.#82&70%70$<5*?9.:4)81&:3(91&4,!4+ 4+ 4+ 90$8/$4, 6."80$3+2)4, 6-!7."7."5, 6, 7-!6, 5, 5-!3*1(3*3*4, 5, 3*7.!:1%;1%9/#8-!8-!3'5)7, 8-!8.#6, 6-!8/#6."4+ 8/#6,!4*4*4*4+5, 7.":2&;2'6."3+4-!6."8/$8/$80$:1&90%4+ 5-!6."4, 5-!91%:1&6.#4,!6/#7/$2+ 4,!70%91&70%6/$7/$5-"3,!0)3,!81&6/$5."4-"0)4-"6.$5-#/'"!!!!!!!!!!!!!!!!!!!!!!!!!!!"""!!!!!! !!!""""""######  !!!!!! !!!      !!!  """"""######!!! !!!"""!!! !!! !!!""""""!!!"""###"""%%%$$$&&&%%%%%%&&&'''(((...444:::BBB+$.'0(1*!.'0(0(.&+#-%1*5,"3* 4+ 2)2)4, 6."5, 4+4+ 5,!4+ 3*5,!8/#90$7."8/#:1%;2&:1%8/#80$:1%90$:1%<3'7."6-!5-!90%7/$7.#7/$91&80%6/$80&:2(:2(;3(;3(7/$5."6/#;3'<3':2&<4';3&6.!7/";2';3';2'91%70$92&<5);4(;4(=5)<4(;3'<3'<3';2&;3'?6+;3'80$91%;2':2'91&8/$7/$80%90%<4);3(8/$3+ 3+ :1&;2'8/%90%8/$7.#8/$6,":0&@6+;1'6-"7.$<4);3(:2'5.#0)/(1*6.#80%8/$8/$90%:1&5,!0'8.#8/#3)4, 91%5.!2+6/"0(2*:1%;1&4*7.">4(>5)5-!5-!91%4+0'5, <3'=3(8."5+ 5, 9/$8.#7-":1%<3'<4(8/#6-!91%7."4+8/#8/#80#91%6-!6."7."8/$5,!5, 90$3*6-!5,!6-"5,"2*4+ 1(2)5,!:1'6-"3* 4+!4+!7.$6-"3*91%:1%7/"7/#6."80$=6*?8,;3'70#:3&<6'<5';4&<4'?6+;4)81%7/"90"<3%90"7.!<5)70%81&81&91&90$8.#8/$6.#6.#7.#<2'<3':1%<3(;2':2&>6+<5*<6+:4)8/$6+7, 7-  -  -I/ I/G.C,@'A*@+<(:(:*<* >*#<( ;'<(=)=(>(@*>)=):'4"3!:'?,7$6";(=*@,:&7#., ./02 0 .,,+*(%$$$&%" !   - - "    - -       -  -     - - -  -    -           -              -          -   - -2(3*4,!3+ 1)0(2* 2) 0&-#-#,#,#0(4-"2+ 5-"1)3, 6.#7/#3+.&1*2*4-"5."1* 2+!3+!0(2)4,!4, 3+1)3+6."2*6-!:1%6."7/#:0$9."5+4+8/#:1%:2&>6*>5)<2&;1%7-!9/"9/"4+5.!92&92&70$91&:3):3)80&80&6/$70%92&<5)=4(;2&92&70$92&;4(<5(;4(<4(80#91%?6*?6*<3';3'<5)=6*=6*<5(;4(<5(=6);3'90$<4(<4(:1%:2&=4(:3'81$80$91%:1%90$:1%91%8/#91%;3'91%;3'<3'<4(:2&80$<4(=5)?7+>5*=4(:1&<3'<3':0%8.#:0$9/#:0$<2&=3'=3';3&8/#6."90$:1%:0%7,!3)6,!:1';2(92'92'91';3)=4*<3(:1&:2&<3'=4(7-!:0$<3&:1%;3&>5)=4(:1&=4)>5):2&:2&91&6-"6,!:/$8.#6-!;2&80$80$91%7/#:2&<5);3'80%4,!6/$;3(:2'81&92';4)71&4-"5,"6.%5-#5.$5-$70'92(6/&4-#1* 1*2+ >>>999444,,,&&&&&&%%%$$$%%%%%% %$#%$#$$$$$$"""###%%%&&&%%%%%%$$$###$$$%%%###'''%%%%%%############$$$###""""""""""""%%%###%%%&&&+)&%%%&&&%%%(((---222888888:::(!*$+%,%.&0).(.&0(3,!4-#4.%50&60'60%4-"6/#92&70#6/#70%81&:3'70$4-"<5*?8-93(5/$92'60$2+2*3+5-!90$90$5-!6-"7.#2*1)4,!6-"5,!5, 5, 7-!7.!7- 6-!5, 3+0'1)4, 6."4+3*8/#:1%:0$:0$8-!7+ 4(6*8-!;0$9/$8.#5, 8/#4, 5,!7.#5, 2(3)4*5,5, 7/#;3';2'5-!2*4, 6."8/$7.#8/#;2&;2'5-!5-!6-"3+4, 91%;2'7/$3+ 5."5.#1)2*7/$91&70%6/#70$7/$4-"0)2+6/$6/$4-"4-!0(2+ 4-"5-#/& !!! !!!############""""""!!! !!!!!!"""######"""  !!!  !!!    !!!   """"""!!!!!!"""######"""!!!!!!""""""###"""!!!###""""""##################( ''&&%%%%%%&&&%%%%%%,,,333999???+$.'/(1) /'0(0)-%)"-%0(4,!4,!4,!3*3*6-!6-!5, 5, 5,!7.#5, 3*5, 7/#90$8/#80$90$91%:1%8/#91%<2&9/#90%;2&8/#7.#90$;2&90%90%7/$:2':2'91&91';3):2(:2(;3(7/%6/$7/$;3';3'91%<3':1%5-80"<3':1%91%7/#6."92&;5(;4';4'=5)<4(<3'<4(<4(:1&;3'>6*=4):1&;2&<4(;3':1&7/$6.#8/$80%<3(;3(80$3*2*:1&<3(90%90%8/$7.#90%5,!9/%>4*;1'6-"7.#<3(:2':2'70$1*0(2+6.#91%90%8/$80%:1&6."0&5, :0%3*3*91%6/"2+70$1)3*90$:0%4*8."<3'<3'6-!6."90$4, 2)7-!>4(>5)9/#6,!4*7-!:0$8.#;1&<2&<3'90$6-!90$7."5+ 90$7."7."90$5, 6-!5,!90%5,!4+ 7.#4+5,!7.#8/$6-#2)4+!1(0'3*8/$4+!3*5,"3*7.#6-"4+:1%:1%7/"7/#7/#80%>6+?7+;4'70#:3%<5'<5'<5(;3'>6+:3)81&91$;2$<3%8. 6-!81%70%92(81'90&9/$9/$<3(91&:2':1&=3(=4(8/#<3(<3(91&=6+=6+=6,<6+90%8, 7- 7-  $J0 I/ H/D,@+=(='<(;):)9(:);) ;';'>*?*?)A+B, @+>*:&22!6%7$9&4!9&:'9':&6"/+ ) /7%1 1!.-+,)'%"#$"#!     -  $!!   -         -    - - - - -  -    -                       -    - - -      -   - -1+"0(2(2)3+ 2*1*0(3*!3) /%,",","-$1)3+ 2+ 7/$1)2*5-"5-"3+ 0(3+ 3+ 5-"7/%3,!1*4+ 2*5-"6-"5,!3+2*3+7/#3*8/#<3'7."7.":0$:/"6,4*8/#;2&:2&<4(=4(;1%:0$7-!8.!8.!4+5.":3&93&70$81&92(92(92(91'6/$5.#81%:3'=4(<4(;3'81%93&;4(;4(<5)<4(=5):1%?6*=5)<4(<4(=6*?8+>7+=5)<4(<5(=5)<3';3'<4(<3'91%91%<4(:3&80$80$:2&91%80$;2&;2&7/#:2&<4(91%;2&:2&<3'<3':2%?6*?7*?7+?8+=6);4';3'<3(:0$8.#9/#9/#9/#;1%=3'<3&:2%80#7/#80$90$9/$6+!3)6,!;2'<3):2(91'81';3)<3);2'90%91%<3'>4(90$:1$;2%:1%;2%<3'<3'90%:1&=4):2&92&:2&6-"5+ :0%9/$5, <2'90$90%:2&81%:2&;4(;4(91&3,!5.":2'92'81&92&;5)93'6.$4,"3+!3+!3,#4-#6/&81(60&3,"0)0)2+ <<<777111+++''''''%%%$$$%%%%%%&!%$#$$$###"""$$$%%%'''(((&&&%%%&&&&&&$$$$$$&&&''''''&&&######%%%&&&$$$######"""$$$%%%$$$$$$''')(&%%%&&&%%%(((+++000666666999)#+%,&/'.&.'.'0(1)3,!3,#3.$5/%61'71&5.#6."81%70$6/#70$82&:3'71%6/$;4):3(81&6/$81&60$2+ 2*3+5, :1%91%6-!4+ 5,!2*1)4,"8/%5,"4+ 6."90$8/"6- 6, 6-!4+/&1(5-!6-!4+3*90#90$:0#9.#:/#4)5)6+9-!9.#9.#8/#8/$80$6."5-!7."5+ 2)3)5+7.!6-!6.":2&;2&5-!1)3+ 6."8/$6-"6."90%:2&8/$7.#6."2*2*7/#:2&6/#2*5-"6.#2*4,!80%92'91&5."6/#70$4-!/(0)5."6/$3,!3+ /(1*3,!5-# !!!""""""######"""!!!!!! !!!""""""!!!   !!!!!!!!!!!!!!!!!!   !!! """!!!!!!!!!!!! """!!! """"""###"""###"""!!!#########$$$###$$$######& %' )&'&&&%%%&&&$$$###***111888;;;*#.'/(0( /(/(1* .&)!-%/'3* 4+!4,!3*4+ 7."6-!5, 5+ 5,!7."4+3*4+8/#8/#7."7."80#90$90$8/":1%:0$6-!9/#90%7/#7."90$;2'90%80$80%;3(:2'91&:2(<4*:2(:3(;3(80%7/$7/$:2&:2&80$;3'91$4+7/":1&8/$80$6."5.":3&:3':3&;4'=5)<4(<4(=5):2&:2&;3'?6*=4(91%:2&<4(;3(:1&7/#6-"7/$8/$;2':2'80%2)0'90%<3(90&90%7.#7.#8/$4* 8.#=3);1'5,!7.#;2':2':2'81&2+ /(2+ 7/$91&7/$6.#8/$;2&6."/%4*;1&4+3*92%70#2+70#2*4+9/$;1%4+8.":1%91%7."8/#:1%6-!3*7/#?5)?5)90$6, 3*7.";2&8/#90$:0%;1%8/#6,!90$8."6-!;2&5, 4+ 7."5,!6-!3*90%6-!4+6-!5, 5,!6-"6-"6-"2)4+ 2)0'1(4+!4+!4+!7.#2)4+ 5,!5, :1%90$7/"6."80$80%>6+>6*:2&6/"82$:4%;4';4'92%;4):4)81&91$=4&=3%3*3*70$70&60&81';2(:/$;0%;3';2'=4);2'=3(=4(6-":1&;2'91&<4*:3(:4);5+90$7-!7- 7- @6&   I0!J0 I/ E-C.@,;):(9& 9(9*8(8'8':'=)?,!=(=&?(A+@*=(7#13 :)3". 6#:(:(8&6$3 1,/01 /,+,)))&$##$$   - -   "#"   -      - -       -     -   -  - -    -                 -          -    - -4.$4.$2+"0(1&1'2)2*2* 1(3) 2).$+!,"-$.%2*3+!2+ 7/$2* 2*5-!3+ 1)0(2*2*4-!6.#4-"1*2*2*5,!7.#6."4, 3+4+ 90$3*7."<3'8/#7/#:0$8-!5+3*91$<4(;3'<3'<3':0$:0$7-!9."9/!5+5.!:3&92&81%92'92(70&80&6/%5.#4-"91%:2&<3';2'81%81%;4(<5);4(<5(<4(?6*;3'=4(>6*>6*<4(;4(=6)=6*<5(<4(=5)=5)<4(<3';3'=4(<3';2&=5);3'70#90$;2&:2&:1%=4(<4(7/#;3'=5):2&<3';2&=4(=4(;3&@7*@8+?8,>7+<5)=6)>5)<4(;1%:/$:0%:0$90$:1%<3';2&<3&90#8/#:1%90$9/$6,!3)6,!;1'<3(:2'81&92(;3(:2(:2'90%80$;2&=4(<2&;1%:1$:1%;2&=4(<3(90%8/$;3'92&92&:1&6-!5+ ;1&:/$5+ :1%91%91%:2&70$80$:2&:2&91&4,!5."91&92&81%:3'<6*;5)5-"5,"6.$7/%4-$5.$5.%4.%2,#1* 0)3,!5.#:::333///***'''&&&$$$$$$%%%&&&*#$"###"""###%%%&&&'''&&&$$$$$$%%%$$$$$$&&&''''''$$$$$$$$$%%%&&&&&&$$$$$$###$$$%%%%%%%%%$$$('&%%%%%%&&&'''(((///555444888+%+%+$-&/(1).&1)2+ 3,"3-#4.$5/%71'82'6/$6/#81%81$70$70$70$92&6/#5/$92';4)81&70%81&6/#2*3+4+ 6."90$91%5-!3+5-"4,!3+!6.$80%5,"2*7.":1%8/#4+4+7."5, 0&1(5, 5, 4+5,9/#;1%9/#8."7-!5*5)6*9."9."8.#7.#7/#8/#7.#6-"5,!6, 3)4)5,8/"6.!5, 91%91%4, 2)3, 6-"7/#6."6."8/$80$7/#7/#7/#3+2)6.":1&6.#2*5-"5-"4,!4,!70$:3':3'5.#6.#6/#3, /(1)6/#70$3,!3, /(1*5-"1)#!!! !!!!!!!!!!!!!!!"""!!! !!!"""!!!  !!!!!!!!! !!!""""""!!! !!!!!! !!!     !!! !!! !!!!!!"""!!!"""""""""###$$$%%%$$$################$$#$$+$'!$!$'&'''&%%%$$$###"""(((...666999@@@+$.&.'-&.&/(.&*".'0(3* 3* 4,!4+ 5,!7/#7."6."6-!8/$8/$4+ 2*4, :1%80#5-!6-!80#:1%90$6.!91$9/$6-!8/#:1%8/#7."8/#80$80$7/#:1&:3':3'92&:3(<4*:2(:2(:2'7/$6.#6.#91%:2&7/#<3':2%4+8/#:1%8/#7/#6."6.":3':3':3&;4(=5)<4(=4(>5);3':2&;3'?6+<4(80$91%<4(<4(:2'7.#5-"6.#7/$:2':1&90%1)/'80%<3(90%8/$7.#8/$6-"1(6,"<3(:1&5,!8/$;3(;3(;3(92&3+ /(2*6.#:2'8/$6-"6-";3'7."/&4+;1%3*3*81%6/"1*5.!2*3*9/#;2&4+7-":1%:1&8/$80$:2&7.#2*6-!?5)?5)9/#5+ 4*8.#<3'8/#7."9/#:0%90$5, 8/#7-!6, =4(6-!4+5,!5,!7."5, 90%7."3+4, 5, 4+3*5, 6-!3+4+ 6."3+ 1)3+!3+!3+!7/%0'2)5, 5, 80$90$90$7."91&91&>6*=5)81$6/":3%<6'<5';3':2&:3(:4)70$7/"<2$=2$3*3+82&71'5/%81'=4)7,!:/#:2'<4);3'91%<3(:1&6-"90%;2':2'<5*92'82':4)9/#7-!7- 7.!<3% G/!J0!J0 F.E-A,@,<+9)8'7'!9*!9)9'9'9'=) <(7!<&;%='<';%35!6#3!/005#6$7&8&3"/-/6$2!1 ,++,)('$#$## - - - !"!!!   -   - -   -    - -  -   -  -       -   - -        -                     - - 4-$4-$3-$0*!/'0%/&1(3+ 3+ 1)2)3*.$* ,".$.%2)4-"2* 5-#3+ 3, 5-!3*0(0(2*2*4,!6.#5.#2*4+ 3*3*7.#7/#5-!4+4+ 8/$3*7.";2&8/#7."9/#7, 5+4,91%;3'<5(<4(;2&8."8."8.!7- 8. 5+3,81%92&92&:3(:3)81'92(7/%4-"5.#91%<4(<3':2&6.#81%<5(<5);4(:3'<3(=4);2';3'>6*>5);4':3&;4(=6)<4(<4(=6)=5)<3'<3';3'<4(;2&91%<4(:3'6/#80$:2&;2&:2&=4(<3'80$>5)>6*:2&;3':2&=4(=4(;3&?6)@8,A9-@9->7*<5)<4(<3';2&;1&;1%;1%:0$9/#:2%;3&;3&8/#7.":1%:1%:1%7."3)5+ ;0%<2';1&:1%:2&<3(:2'91&:2'90%:2&<3';2&:1%:1%;2&;2&=5(;2':1%8/$:1&81%91%:1&6-!7,!<1&9/$6,!90$;2';3':3'70$81%;3'91&80%5."5-"70$91&81&:4(<6*94(6.#6."6/$6.$3,"5.%5/&5/%3-#/).'1*4-"777222...)))%%%######$$$&&&&&&-&(!' %!######$$$%%%%%%%%%&&&&&&$$$$$$''''''&&&%%%$$$$$$$$$%%%%%%%%%$$$$$$%%%&&&%%%######$$$%%%(((((((((///444444666:::+$+$+#-&.'-&0)2+ 2+!2,#3-$3.$82(71&6/$80$92&92&70%6/$70$71%5/#6/$93(<5*92'71&92'6/$1*2*4,!4+ 6-"5-!2)2)4,!1(/'6.#7.$5,!3+7/#:1%7-!2)4+9/$7."2)3+6."6-!5, 6- 8/":0$9/#9/"7- 4*5)6+8-!8-!7-!6-!8/$6."90$7.#6-!5, 2)2(2(7."5- 4+80$80$4+2*4,!5-!7.#8/#90%91%80$6."7/#7/#5-!4+ 8/$;3'7/$3, 5-"6.#5."5-"80%92&:2'6/$6/$6/#3, 0)2+6/$80%4-"4,!/(0)4-!1'!"""!!! !!! !!!"""!!!!!!!!!  !!!  !!! !!!!!!!!!"""!!!!!! !!!!!! """!!!!!!    !!!!!! !!!!!!"""###"""""""""""""""###%%%$$$######"""!!"!!!("+$)#*$' & "&&''%&%"""###"""&&&,,,444999>>>-&.'-&,%0(.&.&*",$1)3* 3+ 3+ 2*3+7."6."5-!5, 7."7.#5, 3+6-!:2&8/#5, 5-!80$;2&90$5- 8/#:0%7."9/#9/$8/#7.#90$6."80$7/#91%92&:2&80$:2(=5*:2(:2(91&7/$5."6."91%;2'90$>6*<4'5- 80$;2&90$8/$5."5.":3':3';4'<5(<4(;3'=5)>5);2&80$:2&>6*<4(80$90%<4(=5*:2'6.#5-"6-"7/$<3(:2'7/#3+ 0(90%;2'8/$8/$7.#7.#8/$2(3*;1':0&5,!7/$<3(=4)<4)91&2+.&0(5-";3(7/$5-"7.#;3(90%2)5+ 9/$3*2)80$5."1*4-!3+3*7.":0%5, 5, ;2&<3(90%8/$:1&7/#1)4+ =4(>4)9/$6-"5,!7."<2'90$7-"9/$:1%;1&6, 9/$7."4*=3'8/#6-"6-"6-"7."5,!90$90$4+5, 5, 4+3*5, 7."5, 6-!7."3*1(3+!1) 1)70&1)3+ 6."6-!91%:2%91$81$81$:3'>7+>7*80$6/"<5'=6(:2%:3&=5)<5*93)70%7/"9/!<2$5,3+60$5/%4.%91(=4)7+ :/#:3'<4(:3'7/#90$6-"5, ;2&;2':2'<5*;4);5*<6+<1%9/#8.!9/":1$     F/"H0!J0!G.F. A*=':&>+<*:(9( 8)!8(8&;(;(:'8"7"@*A,<&='8#6!6#;(7%/1!5%1 4"5#6%4#1 .0000.,,,)'''#""      !         -  -    -       -  -    -  -                             -    - - - 4,!3+!5-$3,#3,$0*"/&/$/%0&3+ 2*2)2)2)-#* ,".$.%2)4-"3+ 4-"3+ 3+ 5-"3+ 1(/'3+2*3+ 7/$6/#3+4+ 3*3+7/#7/#7.#4+ 4+8/#5, 7.":2&7."7."9/#9/"7- 7/"80$:2&;4(<4(;2&8."7-!7- 6,6,4*2+70#92&92&:2(:3)70&70&70&5.#70%;3'<5)<4(:2'6.#81%;4(;4':3'92&<3(=4)<3(<3'=4(=5):3&92&;4'=6*<5(<4(=5)<4(:2&;3';2&<3':2&80$<4(:3'6."80$:2&;3';2&<3';2&91%=4(=4(;2&;3':2&<4(=4(;2&>5(?7+@9,@9->7+=5)<3(;2';1&;1&;1&;1%9/#7.!;2%;3&:1%7."5- 90$:1%;2&8/#4*6, ;0%<2&:0%90$:1&:2&91%91&:2'80%:1&<3(91%90$:1%;2';2&=4(=4)91&80$91%80$91&91&5,!6,!;1&8."5+ 7.#;2':2':2&80$92&;4(:2'91&6.#5-"7/$91&81&93':4(82&5-"4+ 6.#6/%5.$70'4.%4.%3-#/)-&0(3+!666111,,,(((%%%$$$###$$$&&&+%.(+$*#' &$'&%%%%%######"""%%%&&&&&&%%%%%%$$$$$$$$$###"""!!!!%" -+(&&&(((((((((---222555555999,&*")",%-%0(1)3+!1* 2,"1+"1+!71'60%6/#80$81%6/#70%81&92'5/#3-!70%;4):3(81'70%92'4."1)2)2*3*4+5, 2*3+5-"2)1)7/%7/$6-"4, 6."7."4+3)7-!90$6-!3)4+6-!6-!4+5, 8/":0#8."6, 4*3)5*7, 8-!7-"6, 6-!8/#90%6."6-!7.#6-!2(2(3*5, 4, 3+80$8/$4, 4,!5-"5."4-!<4):2&:1&80%6."6.#6.#5-"4+ 80$<3(80%4,!5-"7/$5-"3,!80%70$70%5.#6/#5."3, 0)2+5."6/$4-"3,!/(0)4-!"""""" !!!!!!!!!""""""""""""""""""!!!!!!!!! !!!!!!!!!!!!"""""""""!!!  !!!!!!!!!!!!     !!!  !!!"""###$$$$$$######""""!""!"$$$$#$""#$)#("%' (!)#)#*#)#& "$(''&&&!!!$$$$$$%%%***111777;;;/(1* -&,%/'0(-%*",$1(2)2*1).&1)6."6."4+5, 6-"4+ 2)2)6-"90%6."5,!6-!80$<3'90$4+8/#90$8.#9/$8.#7-"6-"8/#91%91%7/#80$80$91%80$;3)=5+:3(:2'91&7/$6.#7/#:2&:2&80$=5);3'5-!8/$;2&91%80$4, 4-!92&:3':3';4(;3';3'=5)>5);2&7/#91%>5*<3(80$80$<4(>5*90%4+ 4+ 5-"7/#;3(;3(80%3+ 1)90%;1'8/$7.#6-"6-"6,"2(3);1&:0&5,!7.#=4)=4)=4)91%4,!/'/'2+ ;2':1&4,!5-":2':2&4+ 5+ 9/$4+1(80$5-!1*5.!3,3*5, 8/#6-!3*:1&<3(80$6."90$80$2*4+ ;2'=3(:0%8/$6-"5,!:1%:1%7.#90%:1&;2&7."90$8/#4+ ;1&7.#7."8/#7.#8/#6-"8/$90$4+ 5,!5,!5,!4+ 5,!8/$6-!6-!6."3+ 1)2* 0(/'7.%4,!5-"7.#8/#:1%91$80#91$91$;3'?8+@7+80$7/#?6*>6):1$<3%=4'>7+:4*6/$6.!9/!;1#5,4, 71%3-#2-#81'=3(8-!9/#92&:3':2&80$;2&8/#90$90%:1&;2'=6*>7+<6*<5*=3':0#8."90#;2%       - E/"G/"J0!G/ G.!F.!?(:$<&?*?*=(9&7'7&:(<* =) :$9$='B,B,@+<'<&9$:%:'=*7%00,/3#3"//..000-..,,&"##"      - -   - -  - - -     -    - - -   -   - -  -      -      -   -    !     -       - - 2* 5-"4+!3,"5.%4-$4-%2,$0'.#/%/%3+2*2* 2)1'-"+ -#.$/&3* 3,!3+ 5-"3+ 3+ 6-"4, 2)/'4, 1)1)70$70$4, 3*2*5,!7/#7.#:1%4, 4+ 80$7."80$:1%7."7.":0#;0$8."5-!4-!6/#:2':3'90%7-!6, 8-!7- 5+2(1*70$92&80%92';3):3)81'5.$4-"91&;4(=5)<4(91&6.#80%;3(;4(93&91%;3'=4(;2';2&=4(<4(92&;4(:3'=6)<4(;3'<4(;3':2&;3';2&=4(;3'80$=5)<4(80$:2&<3'<3';2&<3';3'<3'=5)=4(=4(=5);3'<4(<4(:1%=4'@8,@9-@9->7+=6*=5)=4(;1&:0%:0%:0$8."7.":2%:2%90$8/"6.!90$90$;1&9/#4*6, ;0%;1&9/$8/#90%91%90%:2'91&7/$91&;3(90%6-":1%<3'91%>5)>6*:2'8/$:1&90%:2':1&6-"6-";2'6-"4+ 7.#90&:1&:2&80$81%;3(:3':2'6.#5-"7/$91&70%82&94'82&6."3+ 7/$6/%4-#60&71'50&2-#/)-&0(;;;444000***&&&&&&&&&&&&&&&&&&-&-'+%*$*$)#(",%&$%%%#  ,&###!!!"""+% "$!$$%'!,*(&&&'''((('''+++222666555999.',%*#+$.&.'/'0)/(2,"0+!0* 4.$3,!4-"80$80%5.#6/$71&60%71&5/$70%93(92'6/%5/$60%4-!0(1)4,!1(3+5-!3+4, 6-"3+ 3+ 6.#7/$5,!4, 7."7."4+2)9/#:0$6- 4+5, 5, 5, 4+7."9/#8."6, 4*3)3(6+8-!9/#:0%6-!6-"8/$80$6-!6-!7."5+3)6, 4+ 1(4, 3+7/#7/#4, 3+5,!5-"6.#:2':2'80%6/#5-"5-"6.#4,!3+ 80%<4)80%3,!4,!6/$4,!4,!91&80%70%6/$7/$5.#4,!0)1*3,!6/#5.#4-!0)0)2*#"""""""""!!!!!!"""""""""""""""""""""######""""""!!!!!! """!!! !!!"""###"""!!!!!! !!!     !!!  !!! & '!!!""!""!"("& %& ' $' +$)"$$&'!(")"("'!%' (&''&'"""$$$%%%$$$(((///555:::@??1*!.'-&0(1) -%+#-%1)2)3*2*/'1)6-"6-"4+4+ 5,!6-"3*2)6-!8/$7."6-!7.#90$;2'7.#2)8/#90#80#:1%90$6-!6."6."90%80$80%:2&91%81%7/#;4)=5+;3(;3(92&70$5-"7.#;3';2&90%<3';2&7."8/#:1%90%7/#3, 3, 92%:3':3&;4(;3':2&<4(>6*<3'7/#90%=5);3'7/#7/#<3(<4)7.#2)3+ 6-"7/$:2&<3(:1&3+2*7.$<2(:1'7.#5,!7.#5,!2(3):0&;2'6-!6-!=4)=4)=4):1%5-!0(.&2*:1&:2&5,!5-":2':2'6-"6,!9/$4+ 4+ 81%5."2+5."3, 1)2)6-!6-!3*90%:2&8/$5-!90%90%2*4+:1%;2'90$8/#7."4+ 90$:1&8/#90%:1%;2'7."6-"7.#6-"90%7-"7-"9/$6-"8/$8/#90$8/#3)3*5,!6-"7."5, 90%7-!5, 7."5,!2)2)2) 0'5,"6-#7.$7.#8/$:1%90$8/#80#80#:2&>6*>5)8/#8/#=5(?6);2%<3%>5'>7,;5+5."7."9/!:1#3+4- 82'5/%3-#:2);1&9-!:/#:3':3'81%90$;2&5, 6-!9/$8/$8/$:3'=5*<5*=5*>3':0$8.!90#:2$ E/"J0!H/ F/#@)A*<&>'A*A+A+?)8'5'8(;)=+!=) <&;%?)?*='=(;%9#8":%8$;(:(4#*& -.0.-/,/.-,,,++)%""'              -  - -  -  -  - - - -    -   -       - -      -   -     !""  - - -     - - 3,!2+ 0)4,"3,!3,"4-$4.$5/%3-$1(/%.%/%2*1)3* 3* 1'-#+!.$.$/%2*3+ 1)4,!3+ 4+ 5-"3+ 1)0'5, 1)0(6/"70$4, 3*2*5-!6."6-!:1&5-!4+8/#8/#90$90$6-!8.":0$90#7.!4, 4-!7/$:3(91&7/$8.#7-"8."6, 4*1(3,92&:3'70%92(=6,;4*81'3,"5.#;3(;4(=5)<4(:2&7/$80%92'92'92&92&;3'<3(;2':1&=4)<4(:3&<5(;4(<5);4(;4(=5)<4(:2&:2&:2&<3';2&91%=4(;4(92%;3'=4(<3';2&<4(=4(>5)>5)=5)>6*>6*;2&=4(>6*<3'=4(@8,?8,?8+>7+>6*?6*>5);1%9/#9/#8/#8."8/":1%:2&:1%90$80#:2%91$;1%8/"4*5+9/#:0$9/#7."90%91%91%;2'90%8/$:2'<4(90%5,!:1&<3'8/#>5)>6*:2'7/$:2'91&;3(;2'7.#7.#;2'90%6-":1&:1&;2';2'80$70$;4':3':2&70$6.#80%;2'80%81%;5)93'60$3+ 6/$70%4-#4.$3-#3-#2,"0* .'0):::333---)))%%%'''''''''&&&'''-&-'+%*#*$)#+$,%' %' ("*$("'"& & &!#& %& '!'!& ("%("$#(")#*$*$)#*)'&&&&&&(((%%%***222555555888+%-&,$-&0)/(/'0)2+!3-$2,"2-#3-#3,!4,!6/#5.#4-"6/$6/$60%81&60%81&:3(81'5/$5.$70%2+ 0(4+ 5,!1(2*4, 3+6."6.#3+ 3+ 5-"7/$4+ 2*5-!7."5, 4*8.!9/"6, 5,6.!5- 4+3+8/#:0%7-!4*3)2(4)7+ 7,!:0%<2'7-"7."8/#7."4, 5, 8.#8."5+3)5, 3*6-"5,!7/#80$5-!4, 3+5.#7/$:2'7/$70$7/$5-"4-!6.#4,!2*5.#91&6/$2*2+ 5-"3+ 2*6.#70%6/$5.#70$80%5."1)2*5-"70$7/#6."1*/'1(!$$$###"""""""""!!!"""""""""###"""###$$$###"""""""""!!! !!! """"""!!!!!!  !!!""" !!!!!! #% & %& $$""%##%'!#%'!)#%& ("(!)#("*#*$(!)!*!(%&%%&%%%$$$$$$&&&---333:::@@@0) .'.'1) 0(,%+#/'1)4+!4+ 4, 2*3*6-!5-!4+3*4+7."4+2)7."90%8/#6-!7.#90$90%4+ 1(6-!8/#80#90$6."3*5-!2*5-!7/$7/$7/$80%81&4-"92'<4*<4*;3(91&6.#4-"5-!:1%:2&:1&;3':1&6-"7."90$80$7.#3+4, 81%;4(;4';4(;4':1%<3'>5);3'7/#80$<4(;2'7.#80$<4(<3(7/$2*3+ 5-"7.#91&;3(80%6-"2*6-":1':1'8/$6-"8/$7.#4*3):0&=3(6,!4+=4(=5)=4);2'7.#0(.&3+91&:2&5."6.":2';3(7.#6,!9/$4+ 3*7/#6/"4- 6."4- .'0'5, 4+ 5+ :1&<3(7/#3+91%90%2)3*:1%:1&8/$7."7."4+ 90$:1&8/#80$:1&;2'5,!5, 80$7."90$8.#7."8/#5+ 7."90$:0%8."2(2(5+ 7.":0%5+ :0%7-!6-!6-"5,!3*3* 4+!1(4,!6-"8/$7."90$;2&91$90$91$:1%<3'?7+>5)7/#7/#=4'?6)<3&<3&?6(=7,93)5.#7."9/!<2$5,4- 93(71'5/%91'<2&9.!8."70$:2&91%7."7."6- 5+6.!5, 7."<4(>6*=5)=5)>4':0#9/"90":1$  G/"I0!H/ E.$D0%?+ @*>(@)D-D-B+<(5%5(8*;*=* C-!A,='=':%9$;&;%7!5 9$8$6"5"4#-)-/!--.0 .,-,-**())%#! "           - -      - -    -  -   -  -    -  -    - -    - -            - - -  -   - 0)0)4-"1*0(4,"3+ 2+ 4-$4.$5/&4.%2)0&/%/&1)1)2* 3* 2(.#,"/%0&-$1)2, 0)2+ 3,!4,!5,"2*0(0'4, 1)/'4-!6."2*2*2)5-!8/$7."90$6-!4+7."7."8/#7.#4+7-!:0#8.!6- 3,5.#81&:3(91'90&:1%9.#9."5,3)1(4- 81%:3'92'92(>7-<5+80&3,"6/$;4(<4(<4(=5):2'70$80%81&81&92':2'<3(<3(;2&;2'>6*=5);4'<5(<6)<5)=5);3'>6*=5):1%7/#;2&=5):2&91%=5)<5(;3'<4'<4';3&:2%>6)<4(=5(>5)=5(?7*@8+=4(>6*?6*;2&<4'@8,?8,?8+=6*=5)=5)=4(;1&8.#9/#90$8/"8/";2&;3';2&:1%8/#91$:1$;1%8/"4*4*7-!:0#:0#90$;2&:1&:2&;3'90$7/#:2&;3':1&7.":2&:1%7.!;2&=5*91&80%:1&91&;2';2'8/$7.#:1&8/$6-"8/$:1&;2':1&70$80$;4(:3&92&70$6.#91%;3(80%70$;5*:4)60%3,!6/$6.$3,"4-#4-#3-#3-#0* -'/)777222,,,'''$$$&&&$$$%%%&&&''',&-'*$)"*$*$-'-'*#(!)#*$,&*%)$'!+&("*%+%*$*$("+%,&+%)#*$)#'!)#+%+%("+&((&'''&&&'''&&&)))000444555666)#-&*#.&1*0)1)2+!1* 50&3-$1,"4.$4.#5-#6/$6/#4-!5.#5/$70%70%5/$70%;4*70&5.$5.$60%3-!/'5-!5-"1)1)3+3+6."6."2*3, 6.#6.#5,!5-!6."7."6- 7- 6,8/"7.!7.":1$90#6- 1)7."90$6,!3)1'0&4)7,!6+ 9/$:0%7-"7."7.#6."5, 5, 8.#8.#6, 5+6-"6-"5, 4, 7."80$6."3+ 4+ 6.#5-"80%80%7/$6/#4,!3+ 5-"2*0(4,!7/$5-"1)0(4,!2+1)4,!6/$6/$4-"5-"6.#4,!0(2*5-"7/#7/#7/#3*/'###$$$$$$###"""!!! !!!""""""#########"""!!!!!!!!!!!! !!!!!!!!!  !!! !!!     !!!###"""!!!!!!!!! !  #% '!& $$$"& # !& '!#%'!("#"(")#*$)#)")#'!)!*!'$&'$&&&&'''%%%&&&+++222:::===1*!-&-%0(/',$,$0(0(5,"4+ 3+1)3*7."6-!3*3*4+ 5,!4+ 3*6-"90%8/#5, 6-"90$:1%6-!3*6-!90#:2%:2&91%7."7."4, 6."8/$80%7/$7/$81&6.#92'<5*;4):2'91&6/#5-"7/#:1%:2&:2&;2&80$4+5-!90$8/$7.#4, 5-!81%;4(:3':3';4(;3'=4(=5):2&6."7/#<3':2&7/#91%=5*=5*91&4,!4, 5-"6.#80%:2'80%5-"2)4+ :1&:1&90%6-"7.$8.$4* 2):0&?5*6,!4*=3(>5*=4)<3(7/#1).&3, ;3':3'6."6.#92&:2'6-"4+ 8.#4+ 3*6."5."3, 6/"5.".'0'4+ 4+2)91%;3'6."5-!:1&80$0(2);1&;2&90%7.#6-!2)7.#90%7."5,!90$90%5, 6-":1%7."7.#7-"6,!7."6,!7-":0%:0$7."1(0'3)8/#:0%5+ 9/#6-!6-!5, 3*2)3+ 4+ 2)5,"6-"8.#8/#;1%;1&8/"8/#90$:2%<4(@8,?6*7/#7."=4(>5(<2%;1$<3%<5+82(80%5, 7. ;2$6- 5.":4)71'60&:1'<2&:."5, 4.!70$81%4, 5-!7."7/"80$6-!7/#=4(?7+?6+>5(>4';1#9/"9/"90#      H0"J0"I0!D/$?+#=+";(?+ A+A*C,F.A+=(7%6'7*7(<(>*@+=(:%7"7":%8"56!8#>*9%7$5#0/-*(+,-/-.,*++*)%%!!  !    -    -     - - - - -    - - - -  -  - - -   -  - - - -  - - -      -         -   - 1+!1*!2+!1*4-"1)1)4-"2* 2* 4-#3-$5/&3-$2)0&.%/'1)2*2* 3* 2).$,"/%/&-$1)3,!1*2+ 2+ 3+ 6-#3* 1(/&6-"0(/&6-"7/#3+3,3*6-":1%90$8/#6-!5- 7/"7/#90$8."4*6-!90$8."6- 2*4-!6/%70%:3(;3):1&9/#;1%9/"4*1(3,70$92&92':3)=6,;4*80&4,"5.#:3(=5)<4(=5):2&7/$81%92&91&92':3'<4(<3(:1%<3(@7+<3(92&<5)<5)<5(=5):2&>6*>5):2&90$;2&>5);2&:2&=5)<5(;4'<4'<4'<4'<4'?6*=5(=5(=5(=5(>6)@8+@7+@8+>6)90$=4(?8,?8,@9,<6):3'<3(<3';1&9/$:0$;1%8/#8/";2&;2&:2&90$8/#8/"90$;1%:0$5,4+7- 90#:0$;3'=5);3'<3(<3(91%8/$80$80$91%8/#:2%91$8/";2&=4):2':1&:1&91%91&;2'8/$6-#90%7.#4+ 6-#90&;1&:1%80$91%<5):3'92&80$6.#90%;3'80%5/#94(93(5/$3+!4-"5-#4-#5.$2+"3-#2,"0+!-'1* 555111,,,%%%$$$$$$$$$$$$&&&'''-&-&*#*#+$+$.(,%("' (")#+%*%*$)$+&+%+&+%*%*%*%+&.)!+&*$*$(#("("+%,&*$.(*$'''&&&''''''(((...222444555777,&*#,$0)1)0(2* 2+"4.$3.$3-$3-#4-#5-"6.#70%4-!4-"6/$70%70%4-"70%;4*70&5.$4-#6/%2+ /'4,!6."3+4+ 4, 3+6."7."3+ 4,!7/$8/#4+ 3+5-!3*5, 5, 3)9/"9/"8/":1%80#4,2*6-!6-!6+ 4*1'0&4)7,!5+ 7-"6-!7-"7."7.#7."3*3+8/#8/#6-!7-"6-"6-!3+5, 80$91%7.#5,!4,!4,!5-"6.#80%4-"5-"3+ 3,!6.#3+ 1)5-"80%7/$3+ 2*6/#6.#3+ 5-"70%70%6.#5.#6.#5-"1)0(4,!6.#6.#6."3*2*#"""$$$%%%$$$###  !!!###"""""""""!!! !!!"""!!!   !!! !!!!!!  !!!!!!!!!""""""!!!!!!!""%& '!'!!%%$& & "$("("%$& ("$$& +$+%+$*#*#)",$+"$%%%$%%%%'''&&&&&&***111888:::@@?.'-%0(/',%+#/'0'4,!3+ 3+1(2*6-"5-!3*4+5, 4+ 4+ 3*5,!6-"7."5,!6-"90%:1&7.#5,!7."8/#:1%;2&80$7/#6."4+ 91%7/$7/$5-"7/$92'81&;3)<5*;4);3(:2'70$6.#80$:1&;2':2&;2&90$6.!7/#:1%90$8/#5-"6.#91&:3(81&:2'<4)91%;3'<4(:1&8/#80$;3'91%7/#91%=5)=5)90%4+ 4,!7.#7/$80%:1&7/$5,!0(2)<3(90%:1&6-"7.#9/%5+ 1'9/%A7+8/#4+<2'>4)=4)=3(80$3*/&3+:3'92&5-!6/#91&92&5,!3*6-"4+ 3+6/#6/"1+6/"70$/(/'3*3*0'90%<4(7/#3+81%7/#/'1):1&<3(:1%8/#5,!3*6-!8/$6-!5,!8/#8/#5,!7."90%6-"6-!5, 1(8/#6-!5+ 7-"6-"7."2)1(2)8.#8."5+8.#6-!6,!6,!3*1(3+4, 2*5-!8/$8/$9/$:0$:0$7."8/#90$:1%;3'?6*>5)8/#6.!=4'=4'<2%90":1#:4*71'80$5, 6-90#4,6/#81&5/$6/%;2';1%9-!3+3, 7/$91&3, 5-!7/#80$90$6."70$;4(=6*>7*=5)>5(;2$8/"7.!8/"      -   J0"K1"J0!E0$?-";*!9(:(B.#C-!B*C+C,?)=( 9& 6%3%5"8%9%;':%6"5 8#:%9$09$<'9%9%6"4"3"/.)&&(**,*+*+*)'          - - -   - -    - - -   -  -    - - -  - -         -  -       -             - 0'1) 0* 4-#4-#1)3,!1*2*4,"2* 2+!3-#3-$4.%3.$3)0'.&/'1)2+ 2* 3* 2)/$+!/%/%-$1)3-"0)2+ 2*3+!7.#3*2)/&3* 2)0'6-"7/$4, 4- 3+5-!8/#90$8/#6-!5,8/"8/#90#7."4+6- ;1$:0#7."3+4-"70%81':3)<4*;2'9/$<2&:0#4+1(4- 81%92&92&<5+;4*92(6.$3+!5.#:3'=5)=5)<3'80%6/#91&:3'92&92&92'<3(<3'90%<2'>6*91%70$;4(=6)=6)>7*<4(>6*=5)91%6."8/#>6*=5)<3'=5)<5(;3'<4'=5(=5(<4'?7*>6)<4'<4'=5(<4'@8+>6)>6)?7*:1$=5(@9,@9,@9,=6*<4(<3(<2';1&9/$90$:1%:0$90$91%80$90$90$90$90$:1$;1%:1$7-!6, 8.!:0#:0#;2&>6*>5*=5);3':1&91%:2&:1%:2&7.":1%80#8/";2&=5*<3(:1&91%80%80%:2'6-"5,!90%6-"3*6-":1&;2'<3':2&92&<5):3'80$7/$6-"8/$;2'91&60$93'93'6/$3,!5.#6.$4,#4-#3,"3-#3-#0* .(:::433///+++%%%###%%%$$$$$$%%%*#,%-&*"+#,%,$/(/&*")!)")".',%+%*$*$+%,&,%*#*%)$)$,'+&(#(#)#'")$+&*%)$,'.)-*(&&&''''''(((,,,111222333777,%,&-&0)/(0(1* 2+!4.%4.%4.%4.$5.$5-#7/$81&5."5.#70%93(:3(5/$70&92(6/%4-#5.$5/$2+ 0(3+ 5-!2*4, 4, 3+6."7/#5-!5-!80$80$5-!6-!7/#4, 6,!5+5,7.!8."8/":1$8/"5,3*7.":0%9/#6+ 3)3)6,!6,!4*5+ 5, 7."7.#7."7.#4+3*7."7."5, 7-"6-"5,!4, 5-!7/#80$5-!4, 5,!5-"5-"7/$80%5-"7/$5.#6.#7/$5-"3+ 5-"80%70%3, 2*6.#5-"2+ 4-"70%70%6/$6/$7/$6/#2*/'3,!7/$5-"4,!2*1%""""""$$$$$$"""  !!!!!!  !!!!!!    !!!!!!"""""""""""" "# "#$& ("'!("#%& $'!)#%'!)#)#& %& ("& & )#,%+$+$+$+$+$,$+#)!$$%%%%&&&'''((()))...555888???0)/(2*!1)-%*"/'2) 4,!3+ 2).%0'4+ 4+2)3*3*5, 4+ 3*5, 5,!6-!6-!6."90$90$6-"5, 6."6-!90$:2&:1&90$7/#5,!5-!7/#91&6.#80%91&80%;4)<5*;4);4);3(80%7/$6."91%;3';3';2&8/#4, 91%<3';2&90%6.#7/$:2':3'80%:2';3(91%;3'<4(;2&90$91%;3'81$7/#:2&=5)=3(8/#5, 4, 5."6/#91%:1&80$5,!0'2);2'8/$:1'6-"7.#;1&6,!/%7-#A8,;2&5, :0%=3(=4)<3':1%5, 0'2*91%80%5-!5."70$91&6-"3)5+!3* 3+70$81$2+6/#70$0(.%2)1(.&80%;3'6.#4-!70$7/#0(2):1%=4);2'7."5, 3*5,!7.#5,!6-!7.#6-"5,!5-!8/#5,!6-!6-"1(6-"6-"5, 7."6-"90$4+ 3*4+7."5,!5,!5,!3*5, 6-"3*2)4,!4, 2)5,!90%:0%8/#8/#90$8.":0$:1%:2&:2&>6*>6*7/#5- ;2&=4';2%:0#<3%;5+81'7/$5,5,8/"4,5.!5.#3,"6/$91&8."7,!3+ 5.#;4);3)3+ 4-!5."7/#7/#5.!91%<4(<5)=6)=5)>6(<3&90#7.!8/#      - -    - -K1!L2"K1!F0#A.#<*!8( 7( ;( B.#A+@(A*B,@*>(:& 6#4#4#9'7$9%7#36"6 6!19%=(<(9%9%7#3 2!2!0 +'&'& )')*++''#  - !##!          -  - -          -     -  -      -   - -        -  -        - -        - - - 5.$1) /'1* 0* 3,"5.$3+!3,!1)1*2+ 1)1* 3,"3-$2-#4.$4*1(/'0(1)2+ 2* 2*2(/%+!/%.$-$0(1*/(3,!2+ 5-"8/$1)1(/&2)4+ 1(5-"7/$6/#6."4+7."80$8/#7."6- 4+7.!6.!8/"7.!4+6- <1$;0#8."4, 5-":2(81&92(:3);3(:1&<3'9/"5+2)5- 81%:2'<4)<4*81'92(3,"2+ 70%:3(=5)>6*;3'7/$6.#92';4(:2'81&91&;2'<3(90%:1&=5);2'81%:3'<5(<5)>7+>6*>6*>6)90$8/#91%=4(=5)=4(<4(81%91$;3&>6)=4(;2&>6)?7*<4'=5(>6);3&@8+<4'=5(?7*91$=5(@9-@9-?8,=6*>6*=5)<2'9/$8.#8.#90$8/"6-!6."6."8/#80$7."90#:1$:0$:0$8."7- 7- :0#;1$:2&>5)?6*=5)<3':1%:1%;2&;3';2&6.!;2&90$90$=4(>6+<3(91&80$8/$90%:2'7.$7.#90%7.#3*6-":1&<3(<3(:2&92&;4(:3'7/$6.#4,!6.#91%80%6/#83'93'6/$3,!5-#5-#3+!3,#5.%4.$4.$0* .(999434000+++%%%%%%&&&&&&%%%&&&*#+%,%*"+$+$+#-&.&*")!(!(!,&-'-'.(,&,&.'.'-&-'.'-'.'.')#*$+%)#)#+%+&+%+&+&+*(''''''''''''***000222222777*$+%-&-&/'.'1* 1*!1,#3.$4/%60&70&5.#80%80%5."5.#81&;4):3(5.$81&93(70&60%70&5.$2+ 0(2)2*1)4,!3+ 3*5-!6."5-!5-!80%8/$5-!80$90$5, 4+4*5,:0$8/"6-!:1%90$5, 4+8/#9/$5+ 3)3)4*6+!6,!4* 4*5, 6-!6-"6-"6."2*2)5, 7."4+5, 4+ 4+ 4+ 4, 6.":1%8/$2*3+ 4-"6.#7/$80%5.#80%7/$6.#6.#4,!3+ 4,!6.#5-"2*1)4,!5-"4,!5.#70%6/$5.#6.#6/$7/$3, /(4,!80%6.#4,!2*#"""######$$$###!!!  !!!!!!   !!!  !!!""""""###$$$### ""#!##& )"*#)#)#&&'!%'!("$'!*$(!& '!)#)#)#& *#,%,%-&-%-&,%+#-$+##&&$"$&&&'''(((''')))111777<<4);2':1&5, 1(3+81%92&7/#5."6/$91&7.#2)4+ 3*2*70$81%3, 5/"6/"0(,#2)3+ /&7/$;3(7/$5-"7/$6."2)2*90%<3(:1&6-"5,!4+ 7.#80$6-"6."7.#7.#5,!3*6-!4+ 8/#90$2)5, 5, 3+6-"7.":1%5,!5, 5,!7.#6-!5, 4+ 2)6-!8/#5,!2*5-!4+ 0'4+ 8/#8/#8/#9/$8/#6, 8/#;2&:1%90$?6*>6*6."4, :2%=4'90#:1#=4';4*91'91&5, 4+5,4+4, 5-#4-#6.$8/$7-!6+ 3+!4-":2'92'6.#81%70$80$6/"4, 81%<5);5(<5)>7*@8+=5(:2%7/"80#       - -    -K0!M3"M3"G/"D/$>+!8'6' 9*"<*"<'<&='>)@+A+?) 9$5#5#9(7%5#5"6"6"7"8$34;'>)<(8%6#5"7$4"1 4$0!*()' ' % ! (**&!   !!#"           -        - - - - -  -       - - -  -    -             -  - - -           - - - - 1+!5.%2) /&1* 0* 3+!3-"3+!3,!0(0)2*0)0)3,"3-#2,#2,#4+1(0(1)1)2+ 3+ 2)2(/%+!/$.$,#0(0*/(4,"2+ 4-"80%2)2)1(3* 4,!1)5,!7/#70#7/#5-!7/#90$8/#7."6-!5+7.!6- 7.!7/"5- 7.!<1$;1$9/#5, 5."91'6/%:3);4*;3):1&<2&9/!6+2)5, 7/#:3'=6+:3(:3(92'5-#4,"80%:3'=5)>7*;4'80$7/#:3(<5):3'81%81%<3(;2'7.#90$=4(:2&81%:3'<5(<5(>6*=5)<5)>6*:1%8/#<3'>5)<3':2&<4(92&91$91$=5(<4'91$=5(?7*=5(>5)>6):2%>5(<4'?7*>6)91$=4(@9,@9-?8+=6*>6*=4)<2'9/#8."8."90$8."5, 8/#80$:2&:1%5, 7/"90$:1%:0%9/#6, 6,8.":1$<3'=5)=5)=4)<3(91%91%:2&<4(<3'90$:1%90$90#;2&=4);2'90%8/$80%91&;2'8/$7.#8/$6-"2)6-":1&<3(;3'91%92&;4(:3'80%80$5-"6.#90%91&60$83':4(81&5.#5-#5.$4,"4-#5/%5/%4.%0* .(777444...***%%%&&&%%%(((%%%&&&*$,%-&*"+$+#+#.&/'+#)!(!*$-'-'0)!.(-'.'/( 0( /( /(0*!/) 2+#/) .',&-&)#)",&-&+$,%-&*)'((('''&&&&&&***000222222666-&,&,%-',$-%/(/)/) 1+"3.$4.$6/%6.#80%70$3,!4-"70%;5*92'4-#:3)92(;4*70&6/%5.$2+ 1)2)2)1)4+ 4+ 2*4, 4, 4, 6."80$80$6-"91%91%7."4+4*6, :0$8/"7.!:1$90$6-!5-!90$:0%6,!2(2(4*3)4* 5+!6,"6,!5,!6-"6-"5-!2)2*5, 5-!3*5, 4+ 3+2*3+4, 8/#4, 2*2*5-"6.#6.#6.#6.#6.#5-"5-"5-"4,!2+ 2*4-"3,!0)/(1)3+ 3+ 5.#70%6/$4-"4-"4-!6.#3+ /'4,!80%7/$5-"2*####$$$$$$$$$###!!!  !!!!!! !!!    !!!!!!"""""""""#############$$#$#("+$'!'!& & ("("(!)#*#%%*#*$$%)",%,%' )"-%-&,$,$.'-%,".%.%%&&$$%&&&'''(((&&&(((000777888>>>-%0(0(-%+#1)4,"3+ 2*1(0'1(4, 4+3+0'1(6-"6-!3*7."7."5, 5, 5, 8/$90%6-"4+7.";2&90$:1%6-!6."80$7/#7/#7/$91&91&:2'81&80%;3(<5):3(:3(:2'80%5-"5,!7/#91%;2&=4(91%4+7.#;2&:1&7/#5-"6/#91&92'81%:2':2&81%:2&;2&:0$8/#:2&;3'70#6/"92&<4(:1%6-"4+3, 5."5."80$;2&90%7.".%/&7.#:0&:1&8.#7.":1%7-"-$5+?5)<2'6,!8/$<3(<3(=4);3'6."2)2*70$;3(81%5.#6/#:2'7.#2(4+ 4+ 1)6/#70$3, 6/"6/#1),#/&2)0'6-"90%5-"4,!5.#4,!1)2)80$;2'8/%5-"4, 4+ 7/$91&6.#5-"5-"6.#5-"0(4,!5,!:1&91%3*5-!4, 3+6."7.#80$5, 5,!6-!7."6-!5, 3+0'4+ 6-#5,!1)4,!4,!/&2*90%5,!8/#:1%8.#6, 8/#<3'90%8/$=5)<4(5-!6-!;3';2&90#7.!;2%;4*:3(91%3+3+7."4, 5-!80%70%70%91&7-"4*5.#6.#91&7/$8/$90$6.";2&:2&6.":2&=6*<5)<5)>6)?7*=5(;3&80#91$   - - - -  - -J0!M2"N4"K3$G1$A.#9'6&7( 9*#8)!8%:&<(=)A,B-!<'7#4!6$9':(6%219&<(4 238$;':'9&6#5"4!4"00..,*'$ " " (. (%  - - -!#!              -     -        -       -          -        - -             - - - 1+!.(1*!5-$2) /&1+ /)4-#4-"1*2+ 0(0(2* 0(0)3-#3-#3.$2,"5, 1(1)2*2*3+ 3+ 2*3)/$+!-#-#,#2*3,!/(3+ 1*4,!7.#2)2)1(3* 4+ 0(4, 7/#6."7/#6."6-!8/#8/#7/#7.!5,8/"6-!6.!90#7."7.!;0#:0#90#5-!7/$92'81&:3):4):2'91%;2%9/!5+3)5-!91%;3(;5)<5*;4):3(6.#7.$;2';4(<5)=6)<5(;2&91%;4';4(;4(92&81%:3';3'5-!7/#;3':1&70$92%;4'<5)>6*=6)>6*?7+<3';2&>5)>5)<4(;3'<4(92%91%91$;3&<4':2%<4'>5)<3&<4'>6):2%:2%:2%@8+>6):1%<4(?7+?7+>7*=6*>5*=5)<2':0%8."8.#9/#8/"6-!8/#90%:1%:2&5, 7/#:1%:0%9/$9/#4*4*7-!;1%:2&;2&<4(=5)<4(:2&91%91%<3';2&80#90$90#:1$;2&<3(:2'7.#8/$90%91&:2'8/$7.#:1&8/$2)5,"8/$<3(;3(81%92&;4(:2'80%80%5,!5-"90%:2'71&83'93(81&5-#4,"4-#2+!2+"4.$5/&4.$/* .(555322...)))&&&&&&'''&&&%%%&&&+%-&/(,$,%+$+$.&.&*"(!*#,%-'0) /) -'.(/( 1*!3+#0(0) -'.'1+"/)-&.'0) +%*$.',%+$,%,%+%((('''&&&''')))///111222555888-&-&0),%.&/(0)/) 0*!2,"4.$5.$5.#80%80%3,!4-"5/#93'70&5.$;4*92(92(5.$4-#6/%4,"3+!4,!2*1)4,!5,!2*5,!4, 5-!81%:2&8/$5-!90%90$8/#4+2)5, :0$6, 5-!7/#6-!5, 5- 90$8/#3).$/%3)2)4* 6,"7-"6-!4+ 3*4+5-!3+2*5, 4+1(3*3*2)1)1)4+ 8/$5-!4+ 3+ 6.#5-"5-"6.#6.#7/$6.#5."6.#5-"3+ 4,!7/$80%3+ 1)3+ 3, 3+ 4-"6.$5.#4-"3,!2+4-"2*.&3+ 7/$6.#4-""""############"""""""""!!!   !!!!!!!!!""""""!!!!!! &&&$$$###$%& $& & )",%("+$)"%'!(!("*#,&& %)")#%)#,%/(+$'(!-&/'.&/'0(+#-#.$/&.%&%&&&&'''((())))))000666:::>>>,$0(1),$+#0(2)4+!2*/'/&2*6."5-!4+1(2)7."4+ 1(7.#6-!7.#4+ 4+ 8/$90%6-"5, 6-!90$8/$7."2)6-"80$8/#7.#80$91&91&6/#92&81&<4)=5*:3':2':2'80%7/#7.#:1&;2';2&>5*:1%4+7.":2&:2&7/#5."7/$91&:2'91&;3':3'92&:2&;2&:1%90$;2&;3'6/#6/"92&=4(:1&7.#4+ 4, 5."5."70$;2'91%80$-%.%4+!90%;2'8/$7.":1&7.".%4+>4);2&6,!8/#;2'<3'<3(<4(6."1(1)7/$<4)91&5-"4-!:2'6/#0(3+ 4,!/'5.#70%5-"6.#81%3+ -%2)5-"0'4,!90%5-"3, 5-"5-"1)0(7/#<3(:1&7/$5-"4+ 7/$:2'7/#6."5,!6.#7.#1(4,!4, 7/$6.#2*6-"5,!3*6-"6.#7.#3+ 3+ 4,!5,!4+ 4+ 5,"3+ 3* 5,!3+ 1)4-"5-"0(0(7.#3*5-"8/$8.#6,!7."90%91&80%=5*:2'5-"5-!:1%;3&7/"8/!8/#:3(80&70$2*4+80$4, 5-"80%7/%91'91&8/$5,!7.#8/$91%6."8/$80$6.!91%<4(80$:2&<5);4(<5)<4(>5)=4(;3&7/"90#     - - - -  -  - J0!M2"N4"N5%H1$B-!;(5$:*!<,$8) 6'7&:';(=*@-!>*;'6!33 7$8&7%3!26#9'5"15"323 6#7$6$5"3!1/0 +)(&'&%'**$   !          - -    -           - -     - -     -    -         - -  -        -          - - - .'0*0*!/(1*!3,"0(0'/)2,!4."3,!1*1*0(/(0)/'.'2,"3-#2-#4-#5-!3+1)1*1*3+ 3* 3* 4* .$+!,",#,#2+ 2,!.'2+ 1*3+ 4,!1(0'0'2)3*0(4, 7/#4-!6."7."5, 7."8/#8/#7."4+8/"6- 6.!:1$8/#8/":0":0#8/#5-!70$91'81&91':3(:2';2&<3&:0#6,3*6-":2&<4):3(=7,=6+;4)6.#80%=5*>6*>6*>7*>6);2&;2&;4(;4(92&92&:3&:3&;3'8/$6.":1&;3(91&92&;4(<5);4'=5)>6*>6*;3';3'=5)>6)=5(;3'=5)<5(;4'<4';3&<4';3&=5(<4':1%;3&=5(;3&;3&;3&@8+?6);2%=5(>6*=6)<5)<5)=5)>5*<3':0%8.#9/#90#8."6-!7.":1%90$;3'7."8/#;2&:0%9/#9/$4*4)7-!;1%;2&:2&<3(=5)=4);2&80$80$;2';2&80#8/#8/#:1$<3(<3(;3(5-!80%80%91%:1&8/$6-"8/%7.#2)7.#:1&<3(;2(70$80%:3';3(91&8/$4,!5-"6.#70%60%71&83'70%3,"4-#5-$1* 1+!5.%3,#1+!.(-'333211...((('''%%%%%%%%%%%%&&&-&.'0) -&.',%,%.'/(,$)!*#-&-'/(/) 0) 0*!2,"3,#3,"1*!-'.(.(1+!.(-'-'0* .(-'0* .(/)/(-',%.,)''''''&&&(((---///222444777.'-&/(/(.'0) 1*!0* 0* 2,"5/%3,#3+"7/&6/$4-"3,!4.":3(71&5/$;4*;4*92(5.$5.$70&4,"3*!5-"2*1)6-"6-"2*5-!4, 5."81$<4(7/#4, :2&;2'7.#5+2)3)9/#4*4, 7/#4, 2*5,9/#8."2(-#/%1(2) 5,"7.#6-"5,!5, 3*3*4+3*1(3+3+1(2*2)2*3*1(3+8/#6-"4+ 3+ 5-"4,!5-"7/$70%91&7/$5.#6.#5-"2+ 4,!91&:2'5-"3+ 5-"4,!3+ 4-"6.$5.#7/%1*2+ 4-"1*-%2+ 7/$5.#3+$######""""""""""""!!!!!!!!! !!!  !!!"""###""""""""""""%%%&&&'''%%%###(!)"*#%'!)")#,%("*#*#' )")")")",&' )"+%("' )"+$.'-%)"+#/'/'/'/'/&(-$-$/%/&&%&%%%&&&'''((('''---444777<<<.&.%1).'.&2) 3+!4,!4+ 2*0(3*5-!6-!4+1(3*7.#7."4+7.":1%7."5,!6-!6-"7.#6-"4+ 7.":1%8/#6-"5, 8/$8/#80$90%70#:2&92&92&92'92&<5):3'92'92':3'80%6."7.":1%:1%90$>5*:2&5, 7.":2&;2&80$80%;3(<4):2'91&:3'<4(;3'<3'<3':2&90$;2&:2&6/"6/":2&;2':1%6-"3*4, 5."5."80%91&80%7.#.&.%5,"90%;2'8/$7.#:1&6-".&4+ =3(;1&5, 6-!90$:1&:1&;3'7.#1(.&6.#<5*81&5."6.#:2'6.#0)3+ 5-"1)5-#6.$4-"5-"80&4,".&2* 5-#1)4,!80%4,"3+ 4,!5-"2*/'5-"<3);3(90%7.#2)6.#91&7.#7/$4,!4,!7/$2)5-!4+ 4,!4,!1)5-"4,"2*5-"5-"6.#3+ 1)3*3+ 2*2)6-#5-"2)3+ 2*0(3+ 5-"0(/'5,"2)4,!8/$8.#6,!8/#8/$:2'80%;4)91&6.#5-":2&:1&6."5-!7/$<5+6/%5-#1)1)5-"4,!5-"80%6.$:2(7/%7/$4,!91%91%91%7."91%91%5-!90$7/#5."81$:3'92&:3'<3'=4)=5)<4'80#90#     -  -     - I0!L2"N4#J1"I1#F."?*8$;) ?.%=-#9)7'9';(:(<) ;):&5#5"8#4 3 6#5#3!6#7$3 26#9&3 004!4!3!6$6$2 -.-)&('&%')("!   !!!                -   -          - -   -  - -    -   -      - - - - -    -  -         - - - - 2+-&-&/)0* 0) 2+!2+"/'/'1* 1+ 2, 2+ 1*2+ 0(.&/'/(/(3-#5/%3-#4.#4, 2+0)0)0)2+ 3* 1(2(/%-"-#,"+#1*3,!0)3+ 1)2+4,!1)/&0'3*4, 2)3+6."3,5-!6."4+6-!7/#80$9/#4*7.!5, 7.!;2%8/#8.!:0#;1$90#6."80%91'81&:3(;4);4(<4(=4';1$7-4+7.#:2&>6*:3(=6+=7,;4*7/$:2'?6+?7+>7*>7*=6):1%;3&<4(;4'71$81%93';4'80$8/$5-!:1&;2'70$81%92&<5(;4':3&;4';2&;3'=4(<4(=5(<4';3&?7*<5(:3&<5(:2%<4'<4'<3';2&91$<3'<3&:2%=5(>6)?7*>6)<3&>6*?7+<5)<5)=6*=4(;3'=3(<2'9/$8."9/#8/#6.!6.":1%90$<3'7.#7.#:1%:1%:0$;1%5+ 5*7-":0%;3';2';3'<3(<3(;2'91%91%;3'<3'90%7/"8/"80#;2';3(<3(5-"90%90%80$90%7.#4+!7.$6-"1)7.#;2'=3);2(7/$70$92';3(91&7.#3* 5,"80%92'71&72&82'6/$1* 2+!4,#2+"1+!5/%2+"1+!/)777333000+++&&&&&&%%%&&&%%%%%%+$.'-&.',%.'-%-&.'.'+#*#)"*#.'0) 0) .(1+!3,#4-$4-#0) /) /)0* 1+"/).(/(1*!.'-&/)/(/).',%-&,*)(((((('''(((,,,...333222555.'.&1* 1)/(3,"2+"1+!2,"4.$60&5.$4-#6.%4-"4-"5.#70%:3'81&5/#:4*;5*93(5/$5.#5/$3,!3,!7.#3*1(8.#6-"3*5-!3+ 3, 5."<4(6."4, :2&<3'8/#6,!4+ 2(6,!3)5-!7/#4, 2*4+5,6, 2),#/&3)4*!4+!5,!4+ 5,!6-"5, 4+3*2*0(3*0'-$0'1(1(2)/'3*80$7/#5,!4, 4,!4,!5."70$81%:2'7/$4-"5-"5-"3+ 6.#:2':2'6.#3+ 4,!5-"3+ 4-"5.$5.#70%4-"5-#5.#1*-&2+ 70%7/$3*$######"""!!!!!!!!!!!!!!!  !!!!!!!!!  !!!"""###$$$######!!!&&&%%%%%%&&&$$$*#' (!+$&*#*#*$+$*#*$*$+$+$)#(!)",&'!)#,&+%(!)"*#.'+$)",%/'/'/'/'2) 0'.%.%0'1(&%&$$$$$$%%%&&&&&&***111555888-%*"/(/'/'2* 2) 3*4, 3*1)3*4, 5, 4+2)4+90%5,!3*7.#8/#90$7.#8/#6-"5,!5,!5, 80$90%90$90%7/#80$80$6.":2&81%91%:2&92%81%6/#:3'92&70%80%:2&80$6."6-"91%91%90%<3(:1&5,!7/#:2&:2'91%91&:3(:3'91&81%92&;3';2'<4(<3'90$80$:2&:2&6/"6/":2&;2';2&6-!2)3+4, 4-!80%91&7/%4,!-%-%4+!7.$:1'8/%7.#8/$5,!/&3*;1&:0%5+ 3*6-!8/$90%:2&7.#0(-%4,!;3(80%7/$80%<4)70%0)3, 6/$2* 4,"4,"3+ 3,!7/%4,!,%0(3+ 0(3+!70%5.#3+!3+!6.#4,"/'4,";3(;3(80%6-"2)4,:2%6/#5.#1*1* 3-#/'3+!2*2* 1*/'2+ 2+ /(3+!4,!5-#3+!0(2*2*1)0(4+!4+!0(1*2+ /(1*5.#/(1)4,"1)5,"7.$6.#5,"5,!6.#7/%80&:2'81&5.#6.#91&91%4, 5-!7/$92(6.$4-#1*1)5-"2* 4, 70%4,"5.$5.$4-"0)5-#5-#5-"5-!6.#7/#4, 6."4, 4, 7/#70$6/#81%;3'<3'=4)=4(:0$<2%      - -      H0"L2"N3#K1"K3$F.!C, ?(A,!C/$?-#;*:(:'9&8%7%7%7$4 13!8&:&6"3 5"6$9&5"13!5#6#0.018&5$7%2!4"1!,*)%$''%! "%'&"!  !   -     -      -  -    -       - -    -       -        - -   - -  - - -  -    - -  - - - - - 2+ -&1*0).'0*/) /(1* 2*!0'0'0*1*4-"3-"0(2*/(-&/'0(0)4-#4/$2,"4-#4-!2+1*/(/(2*3+ 1(2(1&/$.$-$.&3,!5.#1*3+ 1)2*6-"1(/&1(4+5-!3+2*5-!3, 5.!6-!4, 6."7."80$;1%4*6.!5, 8/";2&7."6- 90":1#8/#5-!6.#81&91':3(<5*<4)<4(=4(;1$6-3)5-!91&>6+;4)<5*=6,:3)7/$<3(?7,>7+?7+?8+=6);2&;3&<4(;4(71$81%92&;4(90$80$80$:2'91&5."7/$92&=5);3'81$>6*<4(;3'=5);3&<4':2%;3&?8+;4';4'<4';2&;3&<3&;2&;2&:1$=4(=4(;2&=5(>6)=6)=5(>5(@8*?8*=6)>7*=6*;3';2';2';1&90$90$:1$:0$5-!7."90$90$:1&6-"7.#:0%:0&;1'<2'7,"5+ 7,"7.#91%:2&:2&;2'<4(:2':1&91%;2'<3(90$7."7."7.":1&;2':2'6."90%:1&80%90%6-"5,!90%6-"1(5,!:1&=4);3(7/$70$92';3(91&7.$5,"6-#91&91'71&93(71&5.$1* 2+ 2*!1* 2+"3,#2,#2,#/) 777333000***%%%%%%&&&&&&%%%$$$,%-&-&*#)#,%-&-&,%.&,$*"' (!.(1* /).'/) 1+!2,"4.$.(0*!.)/) 2,"2+"0* 0* 2+".'.'0) /) /(.'-'-'+)(((((((''''''+++...444111444-&.&2+!0)0)3-#1+!2,#4/%4/%5/%6.%7/%70&5.$4-#5.#5/#70$5/$3-"93)93)82(5.$4.#5.#3,!5-"7.#4+ 5, 7."6,!4+ 7/#5-!2*6/#:2&6."6.":2&:1&7.#6,!4*3*6,!2)2)6-!5, 2)3*3*5+3).$2(5, 4+"3* 4+!5,!6-"7.#5, 5, 6-!5, 1)4+2)0'1(2)1)2)1(4, 8/$7/$6-"4-!5-"6.#7/$80%80%81%5-"3+ 5-"6.#3+ 6.#:2'91&4-!2*4,!5."1*3,!5.#5.#60%4-"5.#5.#2+ .'3,!91&80%"""######!!! """ """!!!  !!!"""!!!     !!! !!!"""#########)))''''''%%%%%%%%%###*#&*#)"' /(,%+$*$)#+%,&*$+$+$*#+%-')#+$-'+%& %,&0) ,%*#.'0) 0(0(/(0(/&-$.%/&1(/&#$#%%%&&&'''&&&(((///444878<<6+<3(9/#;1%             - H0"L2#N3#K1"O6'I1#F/"B+ E.#I3(E0$>):';(=)9%6#3"5#4"/18$5#5%8%6"3!7$8%3!03!=*2 000//6%6%6%/.*)')'%%#!!"#''$#      -  -     - - -          - -              -    - - -       - -  -    - - -  - - - - - 4-"0),$0)1*0)/).(.'0) 2*!1(1)1+ 0*3-"4-"2+ 1)1)1)2* 0(1* 3-#2,"3.#5/$6."3, 2, /(/(2+ 5,"4+!3(1&/$/%.%/'6/$71%4,!3,!2+2*7/#3+0'2)4+5-!2*3+5-!4- 7/#7."6-!90$7."90$90#6, 6- 4,6-!:1$7."6- 90";2$90$5-!4,!80%81&92'<5)<4)=4)=4(;1$6- 2(4+ :2'=5*<5*<6+=7,;4)7/%=4)?7,>6*>6*@9,?7+;2&:2&;3';4(81%82%92&;4(90%5, 7.#91&91&6.#70$:3'<4(:2&6/"<4(<3':2&<4(;3&<4'91$:2%>6):3&:3&;4'<4';3&;3&;2%<3&90#<3'=5(;3&=5(>6)=6(<5'=5'?8*>7*<5)?7+=6+:3'91&;3(;2'90$8/$:0$<2'6."6."80$:1%:1%7.#8/$90%:0%<2';1&6,!5* 6+"6-":1%:2&:2&;2'<4)91&80$8/$:1&<3'8/$6."7."6-!91&<3(80%6.#80%:2&91&90%6-"6-":1&7.#2)5,!90&<3(;2'7/$80%:3'<4)91'7.$5-#6-#91&81&60%94(71&3,"1* 1* 1*!1) 2+"3,#2,#2,#/)555333///***%%%$$$&&&&&&$$$$$$0) 0) ,%)"(!*#.'-&-&-&+$+$+$-&1* 1* /).(0)1+!2,"2-#0+!/* 0* 0* 2,"3,#0* 0* 0) .'.'0) 0) -&-&-'-')('''''''&&&'''+++...222000222+$,$0(0(/(2,"1+!2,#4.$3-$5/%5.$6.%81'6/%4-#60%70%5/#3-"3-"82'93(82(4.$5/$6/$3,!6.#8/$3*5, 9/$7."6-!80$6."3+5-!5-!4, 6-!90$90$6-!4+4*5+ 5+ 4* 4+5, 3*3+4+6."6-!4*0'2)5, 3+!4+!7/$8/$6.#7."6-!4, 5, 4, 2*5, 2)/&0'2)0'0(1(4, 7/#7/#5-"4,!4,!7/$80%80%70$7/$5-"3+ 6.#5-"1)4,!81%80%5-"2+ 4,!6.#0)2+!4-#4-"4.#3,!4-"6.$3,!/(2+ 81&3,&"""###!!!    !!!!!!  !!!!!! !!!"""!!! ,,,***(((''''''&&&%%%""#+$' )"+$(!,%-&,&*$("+%,&,&+$+$*$,&-&)#+$,'*$%%+%/),%)"-'/(-&.'/'/(.&.%.%/&/&-$###"!''''''&&&'''---222777<;;/'1).'.&3* 6-#5-"5, 0(1)3*4+2*1)5, 6-!5,!6-!3*4+7.#90$7."6-":1&90$6-!7."7.#7."90%90$3*8/#90%7/#7/#7/#81%80$92&81$5.":3&81$70$:3':2&70$7/#5,!8/$91%:1&;2'90$5-!7.#91&:2'80%91&<4);3(91&91%91%:1%:1%;3'<3':1%80$81$92&6/"60#;2&:1%90$7-"3*3*4, 5-!7/$80&80&4-#-%,$0)6.$7/%6-#5,"4+ 4+ .&1(7.#:1&8/#2)1(5, 90%;3(6.#/'.&3+ 81%70$7/$7/$:3(:2'3, 3+ 4,!2*2* 4,!3+!3+ 7/$3+!.&2* 6.$3+!4,"80&7/$1)2+ 81&5-".'7/%>6,<4*5-"5-"4+ 8/#:2&5.#0* -('#&!#$$% (#'"*$)#)"+$,%0) .',%/(-&.'0)0(-%+$-&1) )".'/'-&,%.&/'1(2) 4+!3* 4+!3+!4,"5.$81'91'5.$4-"5."6.#1*1*5-#4-#2,"0) ,%.'4-#.'0(2+ 0)1* 1+!1+!/) 0) 2,"0* 0* 2+"1* /(/(-&-'0*!/(0* 1+!2,"6.$;3(80%7-"8."       -       - - -H1"K2#N3#K1"L2#J2"G/ F/"F/#I2'J3(E.#=&;'<(<(:&5#2!4#014 7$9&2!4%4"7%7$3!02 4"3!0/3!3!4"01 3"2!2"-+*('((%   - #&%%!       - -      -  - - - -      -  -       -  - -              -     -      -  -  - -   - 92'4.$3,!/(-%/(/(/(0* 0* 0) 1*!4,#2* 1)2, 0*3,!2+ 1*1)0(3+!5-#0(2+!3-"1+!4.#5/$6/#3, 2, /(/(2+ 4,!3)2(1&/%/%/&.&5."81%4-"5-"3, 2*5-!3*1(1(2)5, 1)6-"7.#5."80$7/#6-!90$7."8/#:0$6, 6- 5,6.!:1%90#8/!8/!;2%90%5.!4,!70$:3(;4);4)<4)>5*>5)<2&7- 2)4+ :2';3);5*<6+=7-;4)6.#:2'>5*>5)=5)>7+>6*<2&:1%:3&;4'92&92&:3';4'91%3+5,!90%91&4,!81%<5);4(<4(91%;4'<3':1%;2&<4'=5(91$91$=5(:3&92%<5'>6)<3'<3&;2&<3'90$<3&=4(<3&<4'<5(<4'<4';3&?7*?7*=5)>7+=6*<4):2'<4)>6*;2'8/$90$<3'5-!5-!7/#91%:1%7/#8/#90$90$<3';2&7-!5+ 6,!9/$;2&;2':2&:1&;2'80$7/#7.#:1&=3(90$8/#7."5-!80%<3(8/$6.#8/$91&90%90%6-"6-"8/$7.#2)5,!90&<3(:2'7/$80%:3';4)91'7.$6.#6-#91&92'4.#3."60%3,"0)1* 3,"0) 1+!3-#2,#2,#.(333222...)))&&&$$$&&&&&&$$$$$$-&/(+$)"' +$,%,%-&/(.',%+$-&1* 1* /(0) 2+!2,"3-#1+!0* -(/) /* 1+"2,#0) 0) 1* /(.'/(/) .(/) 0*!-'/)((((((''''''+++...222111111,%+$.&0(.'1+!1,"1,"3-#4/%6/&6/&6.%7/&5.$5.#70%71%60$4.#4.$60%81'70&3-"5/$70%4-"80%:1&4+ 5, 9/$7.#7.#90$7/#6-"7/#4+ 2)3*7."90%8.#3*2(3)6,!5+!5+ 5, 3*3*4, 7/#5, 3)2(3)4+ 2+ 4,"80%90&8/%4+!5+!5+!6,"3*1(4+ 3*0'1(3*0'.%/&4+ 90%7/$6-"4,!3+ 6/$70$80%70%7/$5-"2+6/$3+ 0(2+80%91&7/$3+ 4,!5-"1)2+!3,"2,!3-"3-"5.#6/$3,!/(1*5.#4+$"""###!!!  !!!  !!!!!!!!!   !!! !!!(!3330//,,,***(((''''''%%%%%%""#+$&)")"(!.'+%,%)#)"+%+$-',&*$)#,&,&("*#,')#&%+%/),%)".'0).&.&/'/(.&.%/&/'/&.&&%&$$#%%%&&&&&&(((+++///555999/'3+!/'.&3+ 6-#4+!4+!0(1)5,!7."4+2)1(8/#7."5, 4+4+7.#8/$7."5,!8/#8/$7."7.#8/#8/#90%:1%7.#:2&:1&80$7/#7/#91%80$;4'81$6/#:3'92&;4(;3'92&80$6."5-!8/#90%:1&;2&8/$5-"7.#:2';3(70%91&;3(:2'91&92&91%91%:2&<3'<3'91%7/#91%;4(70$81%:2&:1%90$7-"3*2)3, 4,!5-"70%92(5.$/'-%2+ 5-#5.$5-#3* 5,"3+ -%/'8/#;2'90$2)0'3*8/$;3(7/$1).&1*70$91&7/$6.#81&91&3, 4,!5.#2* 1)3+ 1)/'3+!2*/'3+!7/%2* 4,"91'7/$2* 4,":2(4,"-%6.$=5+;3*5-#6-#4,!7.#80%3,"-&&!),!  #%("& %*$'!("+$.&*#)!+#,$'*#+#+$+#,$,%1) 1) 1*0)0(0)2+!4-#80'4-$4-#2+ 4-"3,!0(0(1* 3,"0* .(,&,%.'+$-&.&+%/(.(,&*$+%,'*%+%/) -'*$)#'"&!*%*$*%($)$.) 4.%1* 2+ 4+ !       - -       -J1"K2#N4$L2"N4%F.D+A)E-H0%H1%F."C+ >(9%;':'8%3"/!0 118%8$5"8%3"6&:)8&104#5$2 //2 3!5#4"2 /,((*)*)&&"   !$$""  -    -    -   - -    -    - - -  -  - -       - - -    - -  -      -   - - -  -   - -   - -6-!90%93'4."1*.'-&0)1*0)0)/(.'/(3+"2* 2) 1, 1+1*/(/'2* 0(2* 4,"0(2+!5/$4.#50%5/#5."3, 2, 0).(2+ 3+ 2(1&0%.$.%/&/'2+ 6/$2+ 5-"4-"4,!7/#4+ 3*2)2)6."2*6."80$5-!7/#6."5, 90$6."8/#90#5, 5- 5- 7/":2%90$8/!8/!:2$80$6."5-"80%:3(;4)<4)=5*?6+>4)=3'5, 2(5+ 91&<5*=7,<6,=7,:4)6/$<3)>5*?7+>6*>6*?6*<3';2&=4(<5)<5(92&;4(<4(:1&5-!5-"80%81%6.#5.":3'<5(<4(:3&;3';2&90$:1%<4'=5(;3&:2%<5(:3&92%=6)?7*<3'<3'=4'=4(:1%;3&=4(=4(;3'<4(<5(=5';3&?7*>7*=6*>7+<4(<4);3(<4)>6+;3(90%90%:1%6."5-!7."90$:1%7/#8/#90$90$;3':1%6-!4+5+ 8/#:1%;2&;3'90%90$9/$8/#8.#:0%;1&;1&;1&:0%6-!90%;2'80%7.#80%91&90%90%6-"6-"7.#7.#2)6-"90&<3(:2'6/$70$92':2'7/%6-#5-"5,"8/%70%2,!2,!5/$70&/(1*!4,#0)0) 2+"2,"1,".)111000---(((&&&###&&&&&&%%%###,%.'*#+%*#,%-&,%-&/(/(-&*#+$/'0) /(2+!1* 0*!2,"0* 0* .).)/* 0*!1*!-&0) 0) /(.'.(/(-'-'1+!0) 0) /,)((('''''')))---000333111000,%/'1) .(/) 1,"1+"2-#5/%60&6.%6.%80'6.%4-"6/$71&71&60%5/$5/%70&6/%3,!3,!81&3,!80%6-"4+ 5-!8/$6-!6-!6-!5,!5-!8/#5-!3*3*6-"90$7.#3)2(3)7,"6,!5, 6-!5, 4+4+5, 6-!4*3)2)4+ 3+!6.#91&:1&8/%7.$4+!6,"5,"3* 2)4, 4+1(3)4*2)0'0&4+ :1%91%6-"4-!6.#7/$70$80%80%80%6.#2*7/$1)0(3+ 7/$91&70$3,!4,!5-"2*1* 3,"3,"4-#4.#5.#7/%4-"1)1*5.# !!!!!!  !!!"""!!!!!!!!! !!!!!! !!!""" !!!(!'!("3330//,,,***(((&&&&&&&&&&&&""#-&(!+$+$)"+$+%+$'!)#+%*$-'/( +%*$.'-'("*$/) *$& %+%/).'*#.'1) .'-&.&.&-%-%.&.%.%/&&%&%&%&&&'''''')))+++,,,333777.&1).&.&3+ 6-"2) 3*!2* 1(3*6-!3+1)2)6-"7."4+ 5,!5,!8/$90$5,!6-"8/#8/#6-"6-"90%90%8/#;2'8/$80$91%91%7/#5."91%81%93&5."70$82%71$92&91%81%80$6-"6-"8/#80$:1&;2'80$5-!7/#:2':3(70%81&:2'92':2';3':2&:2&;3'=5(<4'90$6.":2&<5)81$92%;2&:1&;1&8.#4+3*3+3+ 4-"70%80&4-#0(+$2* 6.%6.$3+!1)5,"4, ,$.%7.#:1&8/#4+0'3+ 80%;3(80%2*-&0)7/$;3(7/$2+ 4-"81&5-"4-!5.#3+ 1)5-"3+ /'3,!4,"1)4,!80&2*4,":2'80%3+ 5-#:2'4,".&5-#:2(:2(6.$6.$4+!4,!5-$/( )# "$%()   #!"& ("& %'!%#$%& (!*#(!.'.',%-%-%-&/(0) 3,$0*!.(,&/),&*$*$+&/) )$+&+%*$+%(")"' )"+$(#("&!'"'"##% #"" $,&*$-&/( $       -       - K2!L3#N4$M2"K1"H/ E-A)B*G/ H0#C,A*?)<(:':&9&5"0!/ 1!2"6"6#8%6#4!6$5$8)6%13!6%5$3!//2!6$3!2!1 0--(+*)*($  -  $%"    -   - -     - - -      -   - - - -  -  -              -    - - -     -      - -   - - -5. 6-!90%:3'4."/(.'/'1* 2+ 0(0(1)0(0)4,#0( 1) 3,!4,"1* 0(1*3,!/'2+ 5-#1* 2+!60%60%4/$4-"4- 3-!3,!1*.'2+ 3+ 3* 0&-"-#.%/&.&3-!6/#0)4,!4,!6.":1%5-!5,!3*3*90%5-!5,!91%70#7/#6-!5, 90$6.!7."9/#6- 7."8/#91$;3&91$8.!8/!:1#8/#6.!5-"81%;3(<5)=5*>6+?6+<3';1%4*1'5,!:2'<5*<6+<6,<6+81'70&=4*?7,A8-?7+<5(=5);1&:1%80$<5(<5(;4(;4(<4(91%4, 6.":2'91&91&81%92&=6)=5);3':2&91%90$:2&;3'=5(<4'<4'<5';4&:2%=6)>6)<3';3&>5)>6*:2&;2&=4(<4(:1%<4(=5)=5(;3&?8+>6*=6*?8,=6*<4(91&;3'>5*<3(:1&:1&90%7/#6."7/#:1%;2&8/#8/#8/#90$;2&:1%8/#6,!6, 7.#:1%;2&<3':1&:1%:0%9/$8.#:0%:1%:0$:0%:0%7-"90%:1'90%7.#8/$:1&:1&90%7.#5-"80$6.#2*6-"91&<3(91&6.#6/$92&92'7/%7.$4+!4+!6.$5.#2-!60%82'80'0(2+!3+"0) 0) 0*!1+"0+!/) 222///,,,&&&&&&###&&&&&&%%%.',%,%+%,%,&-&+$*$.'/(/(,$)"+$/(0) 0) 1*!1* 0* 0* 1+!0* /* /* /) 1+!0* .'/(0) /(/(.(/)+%,&/) 2,"1*!,*('''&&&&&&))),,,///222111000.'0(/'.'/) 0+!/* 1,"4.$70'91(70'7/&5.$3,!2+ 93)82'60&60%82(81&5/$2,!3,!:2'4-"7/$3+3+6-"7.#5,!7."90$90%80$:1&80$5,!5, 7.#8/#5,!1(1'2(5+!5+ 5+ 6-!4+2)4+4, 4+ 1(1(5+ 5,!4,"7/$90&:1'7.#7.$5+!5+!5,!4+ 5, 5-!4+3*3)5+ 3)1(1(4+ :1%90%6."5-"7/$80%80%80%80%7/$5-#2* 3,!1*.'1)7/$91&7/$3+ 3+ 5-"2* 1)4,"5.$5.$4-#5.#7/%5.#1*2+ 4,&!!!!!!  !!!!!! !!!!!!   """!!!"""!!! *$' ("& '!(!222/..+++)))((('''&&&&&&&&&""#.')"+$,%)",%,%+%(")#,&-'.'/) ,&+%/) .((",%.(+%'!)"-'0) .'+$/(1* .&,%-%-&.&-$.%-$/&.%-%%%%'''((('''((((((***333877:::0(-%.&3* 5,"3*!3+!2) 1)4, 4, 3*1(2)6-!7."5, 5,!5,!8/$8/$4+ 6-"6-"7.#8/#8/$:1&90%8/$90%6."8/$80$91&91%70$80$6."6/#4- 4-!70$81%81%:2&91%80$7/#7/#80$90%:1&;2'90%4,!6.#91&91&6/$80&:2(91';3(<4(<3(;2&<3'=5(;2&8/#6/";4';4(70#81$;2&:1&:1%7-"3*2*2+3+ 6.$6/$5-#4-#2+!-%1* 5-#5-#5,"4+!6.#6-",#/&7.#;2&7.#2)0(5,!80%;3(80%2*-&0)6/$:2'6.$1)5-"80&5-"1*4,"3+ 4,!6.#4-"/(4,"5-"1)3+!80&1)4,":2'91&4,"5-"80&4,"0(6.$92';3)80&7/%4+!2* 3,".($  -  $(*- ! "%"& & '!("("("("("+%,&'"%'!'!$$% )$$'"'"% $!" !"  *+,,+(&'&$$! !      -       -M2!N4#O5$M3#M4%H/ F-D+C+F.H0"E- @(>(<';&;';'8%3"0!0!0!4#7$7#5!7#6#4!4#2"0!1!5#5$4"3!0.2 7%5#3"/.*)*&),*)#   - !#!#   -        - -           -      -          -     -        -   -  - -    - -        -  - - -:2%6/!6-!8.$72&3.$.(-'/(1* 1*.'/'2*/(4-"2+"1)!/'2* 5-#4,"1)2* 3,!/'1)3,!1)2+ 6/$5-#5.$3-#3.#3."3.#2, /(3+ 3+ 3)0&,",#-$-%,$5/#5."0)4,!4, 4, 91%6-!4+3*3*90%6."4, 91$80$6."4, 4, 8/#6."7."9/"7-!8/#90$90$;2&:1$7/!90":2$7/"5- 3, 6/#92':3(;3(=5*>5*;2&:0%3*1'5+!:2':4):5*<6,>8.93(92(:2(?6,?7+>5*>6*>5):1%:1&;3'=6)<5);4'92&;3'91%5-"80$;3(91&6/$92&;4';3':2&<5);3':2&91%:2&<4'?6)<4'=5(<5(<5':3&=5(>6)<3'90$=5)=5);2&<4(>6*<3'91%<4(>6*<5(:3&>7*?7+>7+?7+>6*<4)81%91&;3';3(:2';2(:1&7/#6-!7/#:1%<3'80$7/#7/#90$:2&:1%9/$6,!4+7.":1%;2&<3':1%:0%90$8.#8.";1%<2':1%9/$8.$6,!8/$;2':1&8/$8/$91&90%7/$6.#5-"80%6.#2*5-!:1&<3(80%6.#5/"92&91%80$7/$4,"4,!6/%5.#1,!5/%:4)70&2* 1* 2*!0) 1* 0* 2+"0* 777333...***%%%&&&$$$&&&&&&$$$/(,%,%+%,%,%+%+%)#,&.'/(-%*#,$/(1* 0(0) 0)0) /) /* .)/* 0* ,&/)/)0)/(2*!1* 0)/(1+!*$-'1+!2,"4-$+)((((&&&&&&(((,,,---222222////'1* 0)/(0*!/* .) 0+!3-$6/&70'80'92(3,"4,"92(82(50%5/%81':3)81'4."1*3,!7/$5-#5."4,!3+5-!6-!6-"7.#90%80$7.#:1%:1&6-"6-"80$90$5-!2)0&2(4* 5+ 5, 6-!3*0'3*5-!5,!2)2(3)1)3,!8/%4+!8/%7.#6-#5,"6,"6-"5,!5, 6-"4, 3*5*5+ 3)1'1(3*90$:2&7/#5-"6/#7/$70$7/$6.$4-"5-"4,!6/$5.#2+ 3,!6/$81%6/#3+ 3*6.#5,!3, 5.#60%71&71&5/#6/$5."3+3+ 4*$"""!!!!!!"""!!!!!! !!!  !!! """'!*$-'("("'!& (!000..-***((('''&&&&&&&&&%%%"""+$*#)"-&)"*$*$+%*$*#,&/( ,&/( -&+%/) -'(!+%.(+%(!*$0) 1*!.'+$.'2+!0).'.'/'/'-$.%,$.&-%-%%$%#$"((('''((((((+++222767:::0(,%+#1)5,"4,"4+"2) 1)4,!4+4+0'1(5, 6-!5, 4+5, 8/$7/#7."7."80$90$7.#7.#90%80%90&90%6.#7/$7/$80%80%7/$:2'70$81%70$4-!:3';4(92%;4(92%91%80$80$90%91&:1&;2'90&5-"7/$80%80%6.$80&:3(:2';3(<4(;3':1%;2&<4':1%7."6/#:3':3'81$91%<3';1&;1&6-!3*3*3, 4,!6.#7/%7/%7/$4,"-%1)7/%6-#6.#4+ 5-"7.#/&/&7.#:1&7.#1(0'4, 91&:2'6.#2*.'0)5.#70%6/$2*4,!70%5-"1*5.#4,!4-"80%6.#1)4-!4,!1)3,!80&1)1*:2'81&4,"5-"7/%4,!1)6.$91':2'91&90&4+!2* 1* ,&" -      $'*+          "#      **('$!#""!##!  -         -        -L2!O4#P5$O4#N5%G/F.E-E.H0!J2$D,A)?(=(;':%:&;'8%3"1!0"1"2#5$5"5!5!5"5#4!.+/2"3!01 0//3"5%0/-,'('&&('" ! "   ! #!"  -             - - - - -  -   -  -     -   -  -    -   - - -  - - - - -    - - - -   -    - <4':2$8/#9/$71&4/%1+!/)/(2+!1* .'0)2+ 0)3+!3,#2*"1) 2* 3+!2+!0(2* 3+ 0)1*3,!2+ 2+!5.#6/%6/%5/%50&4/%4/$2,!1*4,!7-#5+ 1'-#,",$*#)"5-"5."1)5."4,!3+:1%7.#2)3*2)7/#6-!5, 80$91%7/"5, 4, 80$90$7/"90#7.!8/#90#80#;2%:1$6. 91":2$80#4- 2+5."81%91&81&:2'=4);3';2&5+ 2(3*80%:3(;5*<7,=7-:4)81'80&>6+>5*=4(>5)>4(:0$:1%=5)<5(:4'70$70#;4(:2&7/$80$:2'81%4-";4(;4(<4(:2&;3'<4(;2&91%90$=5(>6)<4'>6)>7*;4':3&;4'>6)=4(7."<3'=4(:2&<4(>5)90$80#<4(=5)?7+:3&;4(>7+?7+>6+=5)<5):2'80%8/$:2':2';2':2&8/#6."7/#91%;2&8/#6-!8/#90$:1%:1%90$5+ 3)6-!90$:1%:1&90%90%90$7.#8.#:1%<3':1&8/$8.$6,"8/$;2(<3(:1&90%90%8/$7/$7/$6-"80$7/$2*4+ 91&;3(7/$4,!5.#92&80%7/#7.#4,"3,!5.$5.$1+!3-#71'70&4-"4,!4+ 2* 1) 1*!1*"/) 666111---)))%%%%%%%%%&&&%%%$$$-&+$-&-&+$+%-'*$-'-'-&-&+$+#,$.'3+"/(1*!.'.(0* /)-(.)/* /)0* 0) 0) /(1*!1*!/(/(4.$,&.(1+!1+!2,")('((('''''''''+++,,,000222000.'0)1* 0).(/* /* /+!3-#6/&5.%5.$92(5-$5.$81'60&4.$5/%81'92(70%4-"2*2+7/$5-"7/$4,!2*5,!6."6-!7."90%8/#7.#:2&:1&8/#7.#8/$90$6-"3)4)5* 6,!5+ 5+ 5, 1(0'2)5, 6-!2)1'2(1)4,"7.$3* 7.$7.#5,"7-#8.$6-"4+!5, 6-!3+2)4)4*1'/&2(2):1%<3(7/$5-"70%80%7/$7/$7/%4,"5-#4-"6/$5.#3+!4-!6/$80%6.#3+ 2)5-"4,!3+ 6/$92':3(93)60$81%70#3+3*"""!!!!!!!!!!!!!!! !!  ,%("("*$+&*$*#' (!+$000.-,***(((&&&%%%%%%%%%%%%"""+$+$*#,%)"*$*#+$("' +%,&.(/) +%*$/) ,&'!+%/*!+%&)#/)2+!-&*#,%1) 0(.&-%-&/&.%.&,$,$,$-%###"$#((('''''''''***///5448880(-%+#1)4+!2* 2) 2)0(3+4, 4, 1(2)6-"8/#6-"4+ 5,!7.#7."6-!5, 8/$80$7."8/$:1&7.#90%91&80%7/#4,!5-"7/$7/$92&81%91&81%70#;4(;4'92%;4'92%81%70#70$91%:1%:2&<3'90$5,!7/#:1&91&7/$80%;3(;3(;3(;3':1%80$:1$<3':2&6."6/#81%81$5."6.":2&;1&:1%5, 3*3+4, 5-"6.$92'92'70%5.#,$2) 7/%6-#8/%5,!5,!6."0(0'5,!7/$7.#1)/&3+ 80%80%5-"1*/(0(3,!80%6/$1)2+ 7/%5-"2+ 7/$4-!3+ :2'7/$1*4,!5-"2+ 4,"80&2* 2* :2(91&4,"4,"6.$2+ 1)5-#91';3(:2&4, 0)2*/)*%   -  - -    !# #$%&''()         **))*&! """!      -          -       -J1!O4#Q6$P5$M3$E-B*B*C+F.I1#F.!@)?(>(<';';&;'@+ ;&5#1!0!1#2$1!3!4 25!4!1-,.0 1!..0 1!/..*)-)-''&&'!  -  -! #"!!""!      "       -       - -              -  - - -   - - -    - -      - - - - - - -  -   -  - - - - - - - - ->6(<4&:1%:1&72'2-#0* /)-&2*!3+"-&0)3,!0)3,"3,#3,#2+"2*!2+!2*!0)3,"2+ 1*0*0)2+!4-#4-#4-#6/%60&60&71&3-#0*/(3*5+!4*0&-"+"+#*#*#4-!6.#2*5-"4,!2*90%6-"2)2)2(6-"6-"6-"80$80$6."4, 4+80$;3'8/#9/#7.!80#91$90#;2&:1%5,90":2$80#4- 2+60#92':2'92';3(<4(;2&;2&5+ 1'3*91&93(93(:4*<6,:4)81':2(>5+>5*=5)>5)>4(;1&;2&>6*<5):4'70$81%;3';4(:2'80%81&91&6/#92&:3'<4(91%6/"7/#80$8/#90$;3&>5)=5(>6)>7*;4'92%:2%>6)=5)80#;3'=5);2&=4(<3(8/$90%<4(:3&=6)92&;3'=6*?7+=6*<5);4(;3(;3(91&;2':2';3(;3'90$7."7/#90$:2&90$6.!7."7/#8/#90$9/#4+3*6.":1%:1%:1&90%90%90%8.#8.#:0%<2'9/%7-#8.#7-#8/$:1':1&80%8/$80$7/#8/$7/#4,!7/#7.#2)3+ 80%:2'6.#4,!5-"70%80%7/$6-"2*4,!6/%5.$1+!4.$71'6/%3,!4,!4,!2*.&0) 1*!/) 444111...)))%%%&&&&&&%%%%%%$$$,%+$,%-&+$+$,&*$-',&,&,%+$,$-%/(2*!1) 2,"0* .(/)-'*%,(/*3-#1+!0)/(/(0) 0) .'/(60&.(.(/)1+!2,#('&''''''&&&(((+++,,,111111000.&0(0)0) 1+!-(.* /+!3-#6/&4,#5.$70'3,"4-#71&4.$4.$4/%81'92(81&4-"2*1*6.#4,!5-"2+ 0(2)7.#6-!6-":1&8/$7."90%:1%8/#8/#8/#90%6-!4+4* 5+ 6,!4*4*4+0(0(4, 6-"5, 1(0&1'2*4,"6-#6-#7.$6-#6-"8.$7.$5,!3*4+ 6-!4+3*4)4*2(0'2)3*:1&<3(80%5.#80%81%7/$70$80&6.#7/$5-#6.$5.#3+!3,!5.#80%7/$4+ 1)4,!3+ 1*6/#81&92(93(60%92&70$2*5,&    !!!  ""!""!!   .'*#*#)#'!)#)#(#("*#(!)#-&///.,*+++)))&&&$$$$$$$$$%%%"""*#+$+$,%)#,&*$,&'!'!-&,%-'.'*$+%0*!+%& *$-'("%(".'1*!.'+$,$/(/(-&,%-&.&/'.&,$*#,$-%$#$"$$&&&''''''(((***///444877888.&.&2*4,"4+"2* 3+!0(4, 5-!4+1(3*7."90$7.#4+5, 6-"8/#5,!5,!8/$8/$6-!8/$:1&7.#80%91&91%7.#4,!5-"7/$7/$6/$6/#81&92&81&92'92&81%92&92&6/$6/#6/#80$:1&:2&<3'8/$3*7.";2';3'7/$7/$:3(;3(;3(;3(91%7.#91%=4(:1&8/#70$92%81%5/"6/":2&;2&;1&5,!3*3+3+4,!6/#:2(92'80%7/$-$1)6-#4,!6.#5-!5,!6-"2)/&1(4+ 7.#1)-$1(6.$7/%5-#2+ /(.'2+ 80&7/%2* 3+ 80%4-"3+!7/$3+ 3+ 81&6/$0(4,!5-"3+!5-"80%4,"3+!:2'92'6.$5-#7/%2* 0(3+!80%:3'91%6/#2*/',%(#    -  -         !"#%()*)(''''&&$" !"""! "####!              - -       -        I0!N3#R6$Q6$T8(I0!B*@(@(C,E-D-A)>'=(<';%:%?*D."B-!>*7"4!1#0#0#0"/03 4!4 1--.// -,/2#1!.*& ((,,*'&$"    " " "  -! !!"  -         - -       -      - -          -      -  -  -      -  -   - -  - -   -  - - - - -?6)<4&:0$:1%:4(3,"/(/) ,&/(2+!,%0)0*/(2+!3,"3,#2*!0)1*!2+!1* 4-#3,"2+ 1* .'/(3,"4-$5.%60&60%5/%81&3-"/(.&2)5*4*1&-"* ( *"+#5-!6/#4, 5."4, 3+90%7.#3*2)2(6,!6,!6,"90$80$6."6-!4+:1%;3'80#7."5, 6-!8/#6.!:2%90#5-90"91$80#4- 2+70#92&:3(;3(<4);3'90$90$5+ 2'3*91':3)93):4*;5+93(92(<4*=5*=4)=4(;3';1&;1%:2&=5)<5(:3&81%:3';3'92&81%70$91&81&6/#92&<5);4'92&92&80$80$8/#:1%:2%=5(<4'<5(=6);4'92%91$=5(=4(:2&<4(=4(<3'<3'<3(:1&<3(>6*<4)=6):3'<4(=6*?7+<5);3'<4)<4):3(<4*:2(:2'<4*:2'7."6."7/#90$;2&;2&8/#8/#8/#8/#90$8/#4*5+6.":1%;2&;2':1&:1%90$7."7.#:0%<3'90%7-#7.#6-"6.#91&:1&80%7/$7/$7.#7/$6-"2*6.#7.#1)4+ 80%:2'70%5."5."70$81%80$6."3+ 2+ 4-"5/%2,"4.%81(5.$3+ 4,!5-"0(-%/(.'.(222000---)))%%%&&&&&&&&&######,%+$+$-&,%-&,%+$,%-&.'+$*#*"+$,%0(1*!1*!0* /(1+"1+",'.)/* /),%,%-%/(1) 0)-&.(4.$.(.(.(/)0+!0* '''''''''(((***)))000222///.&/(.'-'2,#2-#.* -(3-$5.%1*!5.%6/%1+!0+ 5/%5/%4/%5/%71'92(70&2+ 2*3+ 70%6.#5."5-"2*2*5-!6-!6-!:1&90%7.#8/#8/$6-!7.#90$:1&6-"4+4* 4* 6,!3*3*4+0(0(4, 5-!3*/&0'3)2* 4,"5,"6.#6-#7.$6-#7.$8.$5,!0'2)6-!4+4*6+ 6, 3)2)1'4+ 8/$:2'91%6.#7/$80%7/$6/$6.$6.$7/%6.$5.#6/$5-#2+ 4,!6.#6.#4+ 2*5-"4, 1)4-"6/$60&82'5/$92&80$4+ 4' !!!!!! !!!!!!  ! #"!""!  & ' -&)"("& & ("("'!& (!)#)#,%///.+))))(((&&&%%%$$$$$$$$$!!",%+$-&-&)".'*$,&)#(",&,%-&-&+%-'1+"+$&)")#'!%("+%,%.'*#.&1* 0(.'-%.&/'.&,%*",$-%.&+#$%%!"!&&&'''(((***000544878998/'0(2*5,"6-$3+!2)2*3*7."4+2)4+ 7."90$7."3*4+ 7.#8/$5,!7."90%8/$4, 7.#:1&80%:1&:1&90%5-"5-"5."6.#6/$70%80%81&80%80%:2'92&70%91&:2'6/$6/#5."70%:2';2'<3(90%3*7/#:2&:2'70$80%:2':2';3(;3(90%80$;3'?6*:1&8/$81%;4'71$3- 5.":2';2'80%5-"3*3*3*3+ 6.#91&:2(80%6-#.%0'6-#5-"6."5,!5,!8/$4+,#-%1)7.#4,!.&/'5-"7/$6.$2+ .&-&2+ 7/%80&2* 0)6.$4,!3+ 6.#3,!3+ 70$5.#0(4,!4-"2+ 4,!80%6.$3+!7/%91'7/%6.#91&4,"1)2+ 7/$92&91%7/#1*.'-&&!     -  -  -  - - -                  !        - -  -              -       H0!L3#Q5$S7%]>+T6$I/B*?'D,F/ C,A*@)?)=';%:$<&>)A+A,>)427$1$.".!.!.1!5#3 0-,-.,)+.1!0!,% % *+++(&&#  -  %$$"! ""!   -         -   -   -       -  - - - -          - -     - - - -   -   -    -   - - - - - - ?7)<4%90#;1&;4)6/%1* 2+"0) 0)2*!/'0)/(,%1*0) 2+!1*!0) 0(/(/(4-#5.$3,"0).'/(2,"5/%5/%60&70%6/%80%4-"/(/'2)4)4)0%-"* ( +$-%5-!7/#5-!6."4, 4, 91%7/#3*2*2)5, 4+4*90$90$5-!5-!4, 90$90$6.!7.!4+4,6.!4,:2$91#5-!70#6/"7/#4-!4- 70#81$:3';4(:3':3'80$80#5, 3)5,";3(93(:4*:4*:4*92(60%:2(=5*=5*<4(:1%;1%9/$:1%<4';4'93&92&<5(<4(81%6."6/#91&92'81%93&;4(:2&91%;3'<4(7."80$:2%91$<3';3&:2%;4';4':3&;3&>6)>5)=4(>5)=4(<3';2';2';3'=5)>6+=5*=5)<4(<5)=5)>7+<5);4(<4)<4(:3(<4);3);3)=5+:2'7."6."7/#80$<3';2&7."7."6."7/#90$:0%5, 5, 6."90$;2&;3';2&:1&:1%7.#7.#90%;2'8/%6-"7.#6-"6-":1&;3(:1&80%7/#6-"8/$6-"2*6.#7/$3+ 5,!91&:2'70$6.#6/#70%80%7/$5,!3+ 3,!5.%4-#2,"60'82(6.%2+!4+!6-#/'.&0) .'.'322---***'''%%%&&&%%%$$$###""".&-&,%-&,%-&-&,%,&/(/(,%*"*#-&.&0) 0) 1*!0* /(0* 2,"0* 0) 2,".'.',$+#0(2*!.'-&-'1+!.(.(.(/)/)/) -+(''''''''')))***.../////////0) .(.(0*!.) 1,"/*!2,#2+"2*!70&81'0)/)3-#3-$3-#5/%60&81'6/$2*1*5-"7/$6."5."5."4-!6."4+ 3*5,!90%8/#6-"6-"5, 3*5, 7.#7/#4, 2)3)3)4*2)2)2*1(1)4, 5, 2)0'0'3*4,!4,"5,"7/$8/%7.$5,"6-#9/%5,!.%1(7."3+4*6,!5+ 3)0'0&4+7.":1&91&6.#7/$7/%6.#6.#6.#6.$6.$5-"4-"6/$4-"2+4-!5."5-"3*2*6.#5-!1)4-"6/$60&71&5/$81%81%6-"!!!!!!"""!!! !!!  !!!!!!!! !! !!!! ! 1+",&*$& ' *#& '!%& ("'!& & &'!*#+$/..+++(((''''''&&&%%%$$$$$$+$-&*#-&,%*#.',&-'-&*$*$*#+%,&,%,%/) +$%'!)#'!%("-&.'-&)"+$/(/'.'+#,%/',$-%)!*#.&/(+#$#%"%$&&&''''''(((---222666888/'0(3* 5,"5-#2)0(0(3+5, 3*2)4+ 5,!8/#6-!3*5, 7.#8/#5, 6-!90%6-"4+ 7.#:0&90%91&91%80%6.#4,!6/$91&80%70$81%91&70%6/$;4(:3'81%:3':3(6/$5.#5-"6/#91&:1&;2'8/$5,!80$:2&80$80%91&:2':2':3(:2&7/#7.":1&=4(:1%8/#91%;4(70$2+6/#:2'90%8/%5,"0'2)2*3+ 5-#6.$91&80&4,!.&.&5,"6-#8/%6-"6-"80%4+ -$-%3+6."80%/'/'4,"5.#5.#1*,%,%3,!92'92'3+!0(6.$5-"5-"6.#5-"4,!80%6/#1*4,!5-#2+ 3+!80%7/%3,!6.$:2'6.$4,"80%4,"0)2* 80%70%7/$6/#1*.'-'%          -  -  -  -  -  - -            - -                - -   -  - -             -    K2#P4$R6%bA.[;(S3!H,B)D,H1"E. B+@*?*?*:%8#;%A*@*>(<&9$2 37$8%1$-!- -!0!1!0/-+**'&*...'! -& '))))(("  -   "  $%"     -              -  -     -  - - - - - - -      -         -  -  - - -   -      -   -  - - - - - @9*<4&:0#:1%;4(5.#0(3,"2* 1) 2) /'3+!.'/(2*1)/(0)1* /(/'.'4-"70%4-"3,!1* -'0)4-$4.$5.$70%6/$70%5."0(0'1(4)5)1%-"+ *!-$.&3,6/"5. 5.!4, 5, 91$7."2*3*1)4+2(2)90$90$5-!7."6-!8/#7.!6, 8."5+5, 5, 2*90#80#5-!70#7/#6/#6."3, 5.!81%81%93&:3&:3&:3&81$3+2)6.#91&;4)92';4*;4*:3)5.#70&=6+<4*<3(:1%;1%8.":1%;2&:2&:3';4(<5);4(70#5-!81&92'82&92':3&:3'<5(;3':3'>5)90$7/#80#80#:2%:2%:2%:3&:3&92%<4'>6)=4(<4(=4(<3';2'<3';2&;2'=5)=5*<4)<4(<4(<5)=5)>6*<5);4(=5)<4(:3';3(:3(;4);4*;3':2&7/#6-!:1%;2&80$7."5-!6-!80$90$:0$6-!4+5-!90$<3';2':1&:1%;2&6-"8.#:1&;2'8/$7.#8/$6-"6.#91&;2'91&8/$6.#6-"90%6.#1)5-"80$6-"6-"90&91&7/$6/#70$70%80%7.$5,!5-"3+!6/%5/$3-#50&81(6/%2+!5,"6-#0(0(1*!.',&100,,,''''''&&&&&&%%%""".',$,%,%+%,%,%-&,%,%/(0* .')"*#,%-&/(.'/)0) .(/) 0*!0*!0*!1+!0) 1) -&,%0)2+"+$,%0(/(/(/)/).(.(.(,)(''''''&&&(((,,,///111...///2+!/(0*!3.$1,"0+",'2,#0) /'3,#70&/)/)3.#61'61'72(5/%5.$3+ 1*2*6/"7/#5.!6."5-!7/$8/$4+ 1)4+ 7.#7."6-"7."5, 4+6-"8/#7/#6-"3)4)3)3*2)2)2*1)2*5, 4+ 1(1(0'2*5-#6.#6-#7.$8/$6-#5,"6,"8.$5,!1(4+7."3+5, 5+ 5+ 3*0&.%3*6-!91%80%6.#6.$6.$6.#7/$7/%7/%5.#4-"4-"81&4-"0)4-!7/$6.#4+ 2*5-"4-!2*4."70%71'71&5/$70$91%6-& !!!!!!   !!!!!! !!!!!!!! ""!!! ! -'/) /) .(*$%' +$' '!& ' '"'!& $&%("(!/..,,,)))(((''''''&&&###"""*#-&*#-&,%*#.'.( .( .'+$*#("*$+%*$*$-&*#%& ("%' '!,&/( +$' +#/(/(-&)!-%-%-%,$+#+$-%.')"$#%!#"&&&&&&&&&'''+++///3225550(0(2)4+!3*!2) 0'1(4+ 5, 4+ 2)4+5,!90%6-"3*4+ 7.#8/#6-!6-":1&4+4+7.#90%8/$90%80$91&90%4,!5-"7/$6/#6/#70%92&80%6.#;4(:3'92&;4):3(7/$7/$6.#6.#90%:1&;2'8/$6-"90%80$80$70$91'91';3(;3(92&7/#7.#:2&;2'6-"5-!70$:3'71$3, 5.":2'8/$90%5,"/&2)1)1)4,"3,!7/%80&4-".&.&5,"6-#8/%6-#5-"8/%4+!.%/&5-!80$6/#1*/'2* 5.#5-#0)-%,$2+ :2(92'5-"2+ 7/%4,!4-"6.#4,!4,!80%7/$2*3+ 6.$3+!4,!80%7/%5-"80&<4*6.$3+!7/%4,"0(2+ 92'70%6.$6.$2* -&-&$             -  - - -                            - -   -                    - -  -    - -    -  -                      K1"N4$R6%bB.]=)V7$O0E(F,G/!F/!C,@)>)=*:%6!8#='?)D-@*;%658":%9%6$1$,!+, -,--*(& # %*,+'%%&'&)$%##    "##"!"#   - -     -               - -   -      -     - - -    -    -  -        -   -  - - - - - - - - - - - - - - - - - - - A:,=5'9/#:0%;4(5-"/(2) 0'1(0'/&2*0)2*3+ 2* 0)0)1) 1* 0(-&2+ 5.#3,!4-"4-"/)0) 2+"3,"6/%70%6.#6.#5-!1)1(1'2'2'0%-"+ +!+#,%2+5. 3,4- 4,3+8/#7/"3*3*1(2)0'1(7/#90$6-!7."5, 6-!6-!6, 8/"6-!7."6- 1)80#90#6-!6."5-!4- 3+0)4-!7/#70$92&<4)92&92&70$2*0(4,!80&;3(81&;4)<5+;4*6/%70&<4+;4*:3(92'5-!7/#:1%91%:2&:3&;3'<5(;4'6."3+81%:3'81&92&:3':3&:2&:3':2&=5):1%91%8/#8/#:2%;3&;4';4'92$70#<3'>6)<3'<3'<4(:2&:1%;2':1&:1&;3(;3(:2':3';4'<4(=5)>7+>6*=5)>6*<5);4(;4(:3(;3)92(:1&:2&6."4+80$90$6-!6-!4, 7."90$90$90$7-"2)3*90$<3';2&:1%:1%:1&6."8/$:1&:1&8/$7.#8/$5-"6.#91&:2'91&7/$8/$7/#91&7/$4+ 5-"80%6-"5,!8/%90&7/$6.#6/$70$80%6-#2* 4,"3+!70&3-#1,"5/%81(6/%2+!4+!5-#/'1) 2+"/( 6660//---)))$$$&&&''''''!!!/(/'-&-&+$,%,%.'-&+$-&0) -&)"*#-&-&/(.'.'0) .(-'/).(1+!2,"1+!2+!0)-&0(2*!/'-&0(0)0(-'-'/(/)-'*(''''''''''((()))///333...///1*!-&0* 3-#2,#1,"1,#2-#1* 2+"70'60&1* 1+ 4/$61'61'71'5/%5.$4-"3, 2+6."7/#4-!7/#4,!7/$91%5,!3+7.#7."6,!8.#8/#5, 3*6-"7/#6."5,!2)4* 5+ 6,!4*5,!5-!2)1)4+2*/'1(2)3*4,"6.#6-#6.#7.$6-#6-#7-#6,"5,!5,!6-!4, 3*6, 6, 5+ 3*0'/&1(4+ 80$7/$5-"5.#6.$80&80%91&80&7/%5-#6.$81&5.#0)5-"91&91&5-"2*4+ 4-!3+5."81&71'60&5/$6/$91%      !!!!! !! .()#/) 0*!0*!/) )#%(!+$("'!'!& & ("("%& &%' ...---,,,***&&&'''%%%###+$-%*#+$-%+$.( .'.( -&,%+%)#*$)")#*$,&(!$& & ("& ' ,%/(*#%+#-&0(/')",$+#*"+#,%,$.&-%,%)""#$&&&''''''''')))---2125447770(3* 3+!3*!1)/'2)4+ 4, 4+1(1(3*90%6-"3*4+ 8/#90%7."6-"6-"5,!3*6-"8/$7.#80$8/$91&80%6/#6.#7/$5.#6/$80%91&7/$6/#:3(92&81%;4(:3(6/$7/$5."6.#90%91&:1&8/$6."7/#80$5-"7/$91'92':3(;3(91&7/#7/#:2&;2&7."5,!7/#:3'81%3, 5.":2'90&90%6-"2)2)/'.&2* 2*6.$:2'6.#/'.&4,!7.$7.$6-#4,!6.#4+ /&.%5-!91%7/$2+0(1*6.$5.$1* .&+$1)92&92'4,!3+ 7/$6.#5-"5."4,!4,!80%7/$2*1*6.#3+!4,"7/%6.$5-"92'=5+6.$4,"81&6.$0)3+!81&70&5.$3+!/'-&-&$             -  - - -  - - -       - - - - - - - - - - - - -    -   - -  -   - - - -   -       - - -  - - - - - - - - -  -    - - - - -   -  -  -             -  -         J1"M3#Q5%aA-_?+Z:&S3 K-K/L1 H/ C,A*@+<)9%4 5!6$?*B- ?(=&<%68!;%=(>*6$3#.!)(')+*('% $ '**(#! ')''# $#$#!"###! !"$"     -          -        -     -              -    - -    -  -     - - -          - - - - - - - - - - - - - - - - -A:+=5':0#:2%;4(6/$1*1) /&0(2* -%0'0)0)1)1)1)1) 1) 2* 0(-%2+ 4-"2+ 2+ 3+!.'0)2+!3,"5.$6.$4-#5-"4,!1(1(0&1&2&0%-!+ +",#,%1*3,1*3, 3, 0(5.!7/"3*2*0'2)2*3*7.":1%6."6-!2*4+6-!6, 6-!4+5,!5-!2*7/#7/#4,!5-"6."5-!2*/(2+6/#92&81%:2'81&70%6.#3+1(2*80%:2'7/%81&:3(<4*:3(:3(;3);4);3(92'4, 7.#:2&;2&;3';2&;3&<3':2%91%90$;2&;2&8/$80$91&92&91%91&91%;3':2&;2&91$91$:2%=4(<5':3&70#5.!;2&=5(;2&<3'>5)<3':1%<3';2':2&;2';3(92'92':3';4'=5)>6*>6*>5*=6*<4(;4(;4);4);4*92(:2&:1%6."4, 6-!7/#6."5- 5, 80$90$:0%90$6-!1(3*80$;2&:1%90%90%90%6."8/#91%91%7.#6.#7/$5-"5-"81&80%:2'80%80$7.#90%6-"3*4,!7/$5,!4+ 7.$80%7/%5.#6.#7/$7/$6-#3* 2* 2* 5.%4.$3-$5/&71'70&0)4,"3+!/'1) 3,#1*"4440//***((($$$!!!###%%%!!!.'-&,%-&,%.'-&.(-'+%,&0) *#& (!-&.'0) .'/(-',&-'.(/)/) /)0* 0* -&-&,%.&1* /'/'0)1* 0)/).(0* /) )''''''''((((((***...111...///0* +$0* 3-$2,#0* 2,"60&3-#4-#4-#70&3,#4-#60&61(72(60&6/%5.$4-"2+ 2+6."70#4-!70$4-!6.#70$4, 4, 90%8/$5, 8/#9/$6-!3*7.#8/$6."4, 1(2(4*6,!4*6."7/#2*3+6."4, 0(0'4, 4+ 2+ 5-#6-#6-#6-#6-#7.$6-#4+!3* 4+ 5,!2)1)6- 6, 4*2(0'/&.%3*6."6.#5-"3+ 5-"6/$7/%7/%7/%70%5.#6/$70%4,"/'5-":2':2'5-"1)4,!5."4- 5.#71&60&5/%5.#5.#80%  !! """!! 2+"0*!,&-'*$.)1+"1+"-''!%)!+$)#(!' && ("'!$$#%*"...***,,,)))$$$&&&%%%###-%-%*#,%,%,%.'-&/( .(-'*$)")#("*$+%,&'!$'!)#*$$' ,&.'*#%)",%0) 0()"-%,$,$-%-&,%-&,$)"+$%$% ! )))'''(((%%%)))4336557771(2*5,"6-$3* 1)3+ 4+ 3+3*3*3*7."90$5,!1)4+90%:1%6."5,!7.#6-!4+6-"5,!6-#:1&80%80%7/$6.#6.#5-"5-"6/#70$80%5.#5.#:2'92&70$:3(:3'6/$6/#5-"7/$:2':1&;2'80$6."7.#:1&5."81&:2(;3):3):3(91&7/#7/#91%90%7."7/#80$92&81$2,6.":2';2'90%7.#4+ 3*1(.'1*2*6.$:2(7/%1)/&3* 7.$7.$6.#4+!5-"4+ 0'-%4, 91%70$2+ /'1)6/$6/%5-#1).&2+ 91&91&4,!3+ 6.#5-"3,!5-"4,!4,!7/$7/$1*1)6/%5-#3,!7/%6/$3, 91&<4)7/$5-"91&6/$0(2+ 91'80&7/%3,".&-%-&#            - - - - - - - - -  - -     - -  -  -  -  -  - - -  -  -  -  -  -  -             - -  -  -  - -  - - -   - - -  - - - - - -  -  -  - - - - - - - - -   -  -  - - - - -           -    - - -         J1"M2#P4$aC0]=*[:'U5"N/M0O3"L2"F-A*?+@- :'5!5 8"9'<(@+>)<&>(;$;#;%<'<(6$0,(%$')(% %% ')(($ -#(&&&$"#!$###!"#!#!   -  -        - -   -     -    - -   -  -    - -      -  -   -    - - -  - - - -   -   -    -   - - - - - - - - - - - - - - - - - - ?8*=5'90#:2%;4(6/$0)0) -&2*!2*!-&-&.'/(2+!2+"/)2+!2+!1* /(,%0)1* 0)1*1* -%0(1* 3,"4,#4,#3,#4,"2+ 0)0(1(1'/$-#+ (*!*!+#0*1*0)3+ 3, .&4, 5."1)1)/&1)3+2)4-"81&4-"3,!/(1)4,!3+ 3+ 0(2)3*1)4+ 3+ 2*3+ 4-"3+ 1*/(1)4-"70&70'81'70&5.$3,"3* 0'/'5-"70%6.#80&:3(;3);4);4):2';3(:2&7/#4,!6/#:2';3';3';3';4'91%;3&:2%91%;2';2'90%5-!6.#91&80%91&:2&81%81%91%90%:1%90$90$<4(7/#70#5.!:2&<3';2&;2&=4(<3'90$;2'<3(:2':2';4):2'92&81&92&;4(=5)>5*>5)<5):3';4(;4);4*:4*92)91&91%8/#6-!5- 8/#90$6-!6.!90$8/#:1%:0$5, 3)5- 80$:1%90%90$7.#7/#5-!7.#91%91&7/#7.#8/$4-!5.#92'70$;3(81%7/$6-"80%7/#3+ 3*6-"5,!4+!6-#8/%7/%4-"3,!4-"6.#8/%4,!2* 1* 4-#4.$3-#4.%61'60&1* 4,"1*/(1) 3,#1*"222///***())$%%&'&&&&### .'-&*#,%+$-&,&-',&+%,&1*!+$'!(!,%-&/(/(/(.'*$+&*%,&.)*%)#+%*#-&/(*",$-&0(0)0)/).(/)/)*$+&((('''&&&((()))...000.......(.(/* 0*!1+!0+!1+!60'60&6/%70&80'4,#5-$6/&5/&60'60'60%6/$4-!1)0)80$6."5-!:2&5-!5-!6."3+ 2*7.#90%7-"6+ 7-"7-"4+7/#7.#4-!3+1(2)3)4+ 4+ 7."80#3*2*6-!5,!/'.%3*3* 3+ 7.$6.#7.$5,"6-#6-#4* 3)3*5,!7."3*0'8."8."5+2(2(0'/&3*8/$70$4-"1)3+ 2+ 5-#6.$6/$7/$4-"5-#6/$3,!0)5.":2';3'6.#1)4+ 5."4-!5.#70&60&5/%4-#6.#7-'  !! ""! !! !! ,%/(1*!.(,&,',&.(2,#0*!+%(!%( +$)#'!%%& & & %& $%///-..***)))&&&%%%%%%%%%### ,%+#)!/',%-%.&.&-&-&-'-'*$,&+$*$*$+%'!%*$.( ' %("+%,%*#&+#/'/(,$%+#-%,$-%/'/(*#-&+$,%%$%!$#)))((('''&&&***111444555/&/&5,#7.%3+!2* 4,!3+2)1(2)3*6-"7.#6-!3*5,!:1&:1&6-"4+ 7.#5,!3*5,!6-"7.#91&80$7/$8/$4-!5-"5-"5.#6/#70%81%6/$7/$:3'91&70%:3(:3'6/#4-!5-"6.#80%:1';2'8/$5-!7/$91&80%92';4):2(92'91&91&7.#7.#90%80$5,!5-!6."71$81%4-!6/#91&;2'90%6.#3+ 3+ 4,!1)2+ 2* 6.$91'80&3+ .&2)6-#7.$8/%4,"5,"5,!3*/&3+81%80%3, -&/(3,"5.#6.$2* .'2+ 80%81%4,!1*5.#6/#4,!6.#5-"3+ 6/$80%2*/'5.$5-#4,"80&80%3+80$<5)81%5."81%7/$1)3+ 4/#93'70%4-"0(.'+&#       -   -      -  - - - -  -  -    - - -  -  -  -   - - -  -  -  -  -  -  -             -  -       -  - - - - - -    -  - - -  -  -  -   -  -     -  -  - - - -     -  - -  - -    - - -         J0!L2"O3$aE2Z<*U6#S4!M.M/O1!N2"J0 D+@)>*:(6#5!9$;(=*!<);';&;%;$>(<%<&<&:&5$1 *%#&'''%% &))&$   $%#"$$"$#" !!  """ "             -              -  -  -      - - - -      - - -         - - -       -   - - - - - - - - - - - -?8)<5&7-!7/#72&4.#.(.(-&,%.'-&-&.'.'/(.(-&.(/(/(.',%/(-&-'0* 0*!1*!/) 1+"/) 0*"2+#1+"0*!0).',%.&-$,",")&(( )"/(-&+$0)3,#-&3,"3,".'.&,%.'1)-%/)4.#2+ 1*-&/'1)/'0(.&.'.'-%1) 0)-'-'0* 0)/(,%,%0* 3,"3,"1*!/'0) /(0'-%,$4,"70&7/%70&:2(:3(;3'<3(;3'=4):1%91$6.#70$:2':2':2';4(;4(80$=5)91%80%;3(:2'80&4,!5."81%92&6."80$92&81%80$7/#91%;2&6-!;2'<4(6."7/#<3'=4(:1%:0%=2'<2':0%;2'<3'90%91%;3(92&:3&92%81%<4(<4(=4)=4)<5):3';4(;4):3)93)82(91%91%8/#5-!3+7."90$6."6-!8/#8/#90$:0$5, 4*5, 8/#91%:1%8/$6."6-"5-!7."91%:1&7/$7/$80%4-!6/$:3(92':2'80%70$7/$7/#6-"2*3+ 8/$5,!3*6-#80%7/%4,!2+ 3,!6.#8/%5,"2+!2+!5.$4.$0+!1,"5/%71'0)1)2* 0(.'0*!0*!111...)))&'&%&%%%%%%%###!!! .',%+$,&,%-',%,&+%+%,&1* +%(!)",%,%.'-&-',&*$(#)$)%/* .(+%.(.(.'/(,$-%-&/'0) 1) /(+%/).(+%-'(((((('''(((***---000....../) .(0+!/)/* 1+!/)5/%70'5.%70&6/%2+!3+"60'5/&4/%5/%60%5/$3,!2*1)80$90$91%:1&6-"5-!70$4-!4+ 7."8/$7-"8.#<2&7."3*5-!6."5,!3*3)4*2)3)4+5-!7/#3+1)5-!5, /'/&3+5,!4-"7/%8/%6-#6-#6-#5,"3)2(2)5, 8/#5-!1(8."8."6, 3)3)0'0'5-!90%:2'6.$0(3+!3,!5-#6.$6/$7/%4-"5.#6/$4-"3,!6/#91&:2'7/$2*3*6."4-!5/#71'60&5/%5.$4-"  ! !"!"#""! 4-$2+",%,%0)1+".'-'-'-'/) 1+"0*!,&("$' +$)"'!%%& & %& ' & & ///---)))(((%%%&&&&&&&&&### .'*#)!.&-%,$-&.'.'+$*$+%+%-'-&+$*$*$%%*$.()#%'!)#,%*#'!+$,%.&,%' ,$-%)!,%0).&,%-%,%,%%$%#$$(((&&&%%%&&&)))-,-222333/&0(3* 4+"1(1(2*2)0(0'0'3*5,!8/#6-!1(5, :1%:1&7.#4+ 6-!4+ 4+ 6-"7.#6-#8/$8/$7/$8/$4,!5-"6.#6.#6.#7/$70%5.#70%:2'70%6/$:3(92'5.#2+ 3+ 7/$:1&:1&90&7."3+6.#80%80%92'<4*92'80&:2(91'3+ 6."8/$7.#5+ 4+ 5-!70$5."1*6.#90%90&91&6-"2*3, 4,!1*2* 2* 5.#80%7/%2* -$0'5,"7.$80%5-"5,"6-"4+ 0'2)70$91&3, .'0)4-"7/%70&4,"/'1)5.#80%5-"2*6.#80%5-"7/$6.#3+ 7/$80%2*-&3+!4,"2* 70%91&3+6/#<4(81%5-!70$80%2*3+ 5/#82&82&5.#/(,&&!"        -  -       -  -  -  -      - - - - -  -  - - - -   -  -  -  -  -  -      -      -  -   - -   - - - - -  -  -  -  -  - - - -  -    -  -             -  -           -        -  I0 K1"M3#X;)X;)T6%M/J,K.M0N2!J/F-C+?(:%5"3 7#;(=(;&=)<(:%<&9#='>(:$:%9&7$1!-&"'*'%&&(*($   -  $%"!!"%!   !  "!               -    - -  -  - -   - -  -  -     - - -        -  -    - - -       -    - - - - - - - - - - - - - - - - - >7(;3%5, 4-!61&0+!*%)#("*$,%)#)#)$*$+&*%(#*$,&+%*%)$,&(#(#*$+%,&)#-'*$+$*$+%+%+&*$& (!( '( &!"$%*$)"%*$-&(".'.')"("(!)"+$( (#,')$(#(#(")"("*$' (!' %+$-'*$& ("*$%!#(")#("+%*$+%)#)!(!)!0) 4-#5.%6/%80&80&6.":2&;3':1%91$8/#70%70%92':2'92&:3':3'93&;4(81%70$92':2'92'4-!4-!70#;4(70#81%:3&91%6/#5-!80$;2&7."91%80$5-!91%=4(<4(:1%90$=3'=2';0%=4(=4(91%91%:3'91%;4'81$70#<5)<4(;3(<4)<4);3(;3(:3(:3(92(92';2&;2&90$6-!4+7.":1%7."5, 6.!8/#8.":0$6-!3*3+8/#:1%;2&8/#7.#7."5-!6."90%91%7.#7/#80%5.#6/$81%92'92&6.#5-"4,!5,!7/$4,!1(4,!4+!3+ 8/%80%6.$2+ 2* 5-"70%7/%6-#3+!3,"5/%3-$.)0* 3-#71'1) 0(2* /'.'0*!-'222///---'''&&&$%$$$$### ,&.'-&*#,%-&-&*$,%,&+$*$-'*$(!*#+$+$+$+$.'-')#(#'")%-(/*!-'-'.(-&/(.&,%-&0(0) /(.(+%0)/(*$*$-*(((('''((((((,,,///...---///.(/) 3-#0*!.(0*!5/%70'5/%80'70&5-$6.%4.$5/&5/&5/%50%4.#2+ 1)1)80$6."6-!80$8/#6."70$4, 4, 7/#90$5, 8.#:1%7."4+ 5, 6-!4, 3*3)5+ 3*3*3*2*4-!1)/'3, 3+/'/&2)4,!5-"80%7/$6-#6-"6-#5,!2(1'2)4+ 6-"6-!4+7.!8.!6, 4*3*1(2)6-";2':2'3,!3,!4,"5-#5.#6.$5.#6.$4-"5.#6/$5.#4-!80%:2'91&7.#2*3+ 3, 4-!5.#60%60&60%5.$4,!  ! !!! "# !" !"3,#4-$3-$1*!,$,%1*!2,"/(.(-',&/) 1+"1+"-'(!%(!,%)#(!&%& '!$%%&' ...---((('''&&&$$$%%%$$$### .&,$+#.&.&,%-&.&.',%,&.'-'-&-&*$+%("$%*#-&("%*#,&,&)#(!,%,%.'-&,$-%/&-%+$.&-&,%,$,%.&/'%$%&&&%%%&&&''''''+++2226665440(3*!3+!0(0'1)3*1)0'1(3*4+ 6-"4+ 2)4+8/$;2&8/$5, 4+ 3*4+ 7.#7.#7.#:1&7/$6.#6.#3, 5-"6.#6/#6/#81%81&6/$81&:3(6/$5.#81&81&5.#3+!4,!7.$8/%80%:1'8/$3+ 6.#81&80%81&;4):2(92':2(91'3,!4,!7.#7."4+4+ 5,!6/#5/"3, 6/#91&90%90%7.#3*4,!3+ 0)1)3+!6.#70%6.$0(,#0'4,!7.$90&6-#5,"8/$5,!0'0(5-"80%3,!.'0)4-"6/$6/$4,"0(0)5-"7/%5.#3+ 6.$80%5-#6/$5."3+ 7/$7/$1),$3+!4,"1)6/$80%3, 6/#;4(81%4-!7/$:2'3+ 2+60%:3(70%5.#1),%)#               -  -  -  -  - - -  -   -  -     - -  -    -  -  -   -  -    -  - -       - - - - - - - - - - - -     -  - - -  -  -             -     -  -          -     -   - I/ K1!L2#K1!Q6$O3!O2!I-G+L0M2!K0 H.E,A+;&5 24!8$;';&>)=):&9#:#;%9#=';%9#5"5#3"/ '&&)+'%'))(%" ! " $$!  "    !#  -    - -     -  -   -     - -    -  -  - -    -     -    - -  -       - -       - -   - - - - - - - - - - - - - - - - - - - - - -'''=6';3%5+0*0+!)$&"% !"! "! "! "% #!!#  ""  !"""!!  !   - -  !"  !      #+%/) 2+#5-%6/&6/%5.$:2'<4);3(7/#5."6/$70%91&:2'91&81%70$93&:3'70%60$92':3(92'6/#70#82%;4(6/#91%;4':3&92&80$:1&80$80$:1%90%6.";3&<4(:2&:1%:1%=3'=3':1%<3(=4);2&:2&:2&92%;4(6/#6/";4(:2&:1&;2'<4)<4);3):3(:3(:3(92';2&:1&90$7."6-!9/#:1%7."5, 7."7."7-"90$6-!2)3*8/$:1%;2'7."6."6."4, 5,!7/#7/$5-"6.#80%5."80%92&92&80%4-!3+ 4, 4+ 7/$5-"2*6-"4,!3* 8/%7/$5.#0)3,!5-"80%6.#4,"1)1) 3-#3-#.)/) 2,#5/%1) /(.&*")#,&,&222000+++'''&''%%%%%% -'.'+$*$,&-',&*$,&,&(!'!,%)")")"+#+$*#)"*$-&,&% )%+'.* .* +&,&-&,%+#-&-%-%0(1*!/'.'-&/(.',&+%+)''''(((((((((,,,///111,,,000.(/* 2-#2,#3-$2,#4.$5/%5.$70&6/&4-$6/%3-$3.$5/&5/%5/$3-"0)0)3+ 7/$7/#6.":1%7/#7/#80$3, 3+90%90$5,!7."9/$5, 2)5,!8/#5-!4+ 4*6,!5, 4+3*2*4-!0)/'3+2*0'0&3)6,!6-":1&90%6-"7.$7.%6-$2) 0&1(4+ 5,!5, 4+6, 6, 4*3)2(1(1(2*:2&80%4,"2* 6.$7/%6.#6.#3,!3,!2+ 3,!5.#4-"1*5.#92':2'8/$2*3*2+3- 4."5/$60&81'5.$7-& "!!#!!"!! ! ! 1* 2*!2+"2+#2,#/(*#,$2+!2+!/).'-'+%/) 3-$0*!.(*$& (!+%("("& & '!'!%%%%' ---,,-)))(((%%%$$$""""""""" -&-&)"-&,%-&/(.'0) ,&+%/) -'-',%*$,&*$%$*$+$'!%)#+%*$&' *#-&/(-&)",$/&.&-%-&-&-&,%,%-&0)%$%##"&&&((()))'''+++1117775440(3+"2*!/'/&0(4+ 2*1(1(2)6-!7.#5,!3*4+ 90$;2&7.#5, 5, 3*2)7.#7.#6-#80%6-"5-!5-"3, 4,!5-"5-"5.#81%81&6/$70%:2(70%4-"6.$7/%5-#4,!4,"6.$7.$7/$:1'6."3+ 6.#80%80&81&:3(92'92'70%70%6/$6."7/#8.#5, 4, 5-!70$6/#4-!6/#80%8/$8/$6-"3+ 4-!4,!0(2* 5-#70%81&5-"3+ -$0'4+!5-"8/%7.$6-#90%6-"0'0'4,!7/$4-"-&0)5.#6/$5.#5-$2+!2* 6.$7/$5-"2* 6.#80&5-"3,!5-"3+ 5-#6.$0),$4,"6.#2* 7/$7/$3+5."92&7/#3+7/$91&4,!3, 70%80&6/#4-"0),%("!                     -  -  -  -  -  -         -  - - -       -  -  - - -  -  - - -       -                            - - -   - -  - I/ K0 L1"J0!O6%L3!I/H-H-H.N3"K1!J0 F.C,?)7"138#:%<(>(;'?+=(=&7 ;%<&='=(;&6"4"2!-,)&()*()**''$!  -   #"""          -                       -      -  -           -       -  - -      - -        - -  - - - - - - - -&%&60&3-#.&)#%       - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - -""" $("-( 1+#3-$1* 6.$91'91&8/$4,!5.#7/$81%92&70$70$6/#81$92&70$81$;4(:3'92'92&92%:3&<5)70#7/#:3';3'91%:2&<4(;2':2&:1%7/#70$;3'<4(:1%90$90$;2&<2':0%;2'=4(;3';3'92&:3&<5)5."6/";3'92&91&:1&<4)=5+=5*92'91':3(:3(:2':1&:1&8/#7-!:0%<2&8/#6,!7-!7-!7."90$5, 0'3*7/$90&;2(8/%5,!4+ 3*5-!80$6.#4,!5-"80%4-"6/$80%70%91&6.#5-"4+ 0(4,!6-"3* 4+!3*3*7.$6.#5.#/(5-#3,!5-"3+ 2*0(1) 3,#3-$0* .(3-#3-#0)0)/',$+$,&222111---****++'''&&&%%%!!!.'.'*#("*$-&+%)#,%+$'!(",&+%(")")"+$*#,&(!*$+%'"&"(#+&,','-(+%+$-&.',%*#.&/(,%.'.'.'.',%+%)'&'''(((((('''+++...333***111.(0* 2-#0*!.)0*!2,"2-#3-#6/%6.%3,"6/%60&3-#60&70'5/%1+ .'0(5-"6/#5-"6-"80$90%:1&80$4-!3, :1&7/#5,!6-"8.#4*1(6-!8/$6-!5,!4+6-!5,!5, 3+3+6."1*0(4+ 3*1(0'3*4+ 5,!:0&8/$7.$7.$7.$5,#2(0&1(4+4+ 4+3*3*5, 4+3)2(0&0'.%7.%6/$4,"2*6.$80&5-#5-#3+!4,!3+ 3,!4-"3, .'2*7/$:2'80%1)1)3, 3, 4."60&60&60&6/% "! "! ! ! !2* 0(1)2+ 1*!2+!2,#3,#0) *"+#1* 0)/(.(,%*#/) 2,#1+!-&,%(!(!,%("+%(")#*$("& &' & ' ..-,,,)))'''%%%""""""###""" .'+$*#*#,%,&/) -&0)!+%*$/) -&.(+%*$,&+%& & ,%*#' &("+%,&(!' +#-&.'+$',#-%,$,$-%.&/(-&(!,%0(%$%$%%'''))))))''',,,222888444/'2*!0(-&,%0'1(4+!2)1(3*5-!7."5,!3*5,!:1%;2&6-!4+ 5,!4+4+ 8/$5,!7.#80$5,!5-"6.#5."5-"5-"4-!4-"7/$7/$4-"5-#81&81&5.#5.#5.#4,"3,!3+!6.#7/$7.$8/%5-"2+ 5."80%81&81&:2(81&92'81&6/$6.#7/$80%7.#6-!4+ 5-!81%6/#4-!6/#80%8/$8/$5,!2+4-"5-"2*3+!3+!80%80%5.#2* -$0(4+!4+!5-#6-#6-#7.#7.$1(/'3+!70%6.$-%.'4-"6/$5.#5-#2+!2*6.$7/$5-#2* 5-#80%4-"1*5.#2* 4,"7/$1*,$4,"5.#3+!80%7/$2+5.":2&6."1)5-"6.#2*2* 7/%7/%4,"3+ /'*#'    -               vvvutu       -  -          -        -  - - -                                   - - - -   - - -  - J0 J0 K1!I0!M5$J2!H0F.D,E-C+H/ H/G.C,?*;&4 25!:'>)<'=(<'=(<&9#6 8!=%=&;&;'6#10 /!,**)'(*,*++($# # # " %# !"           -  -   -  -      - -        - -        -  - -                 - - -        - -   - - - - - - - - - - ))()((((((((''((()(()''(&&'%%&%%%$$$$$$###### - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"""")$-( -'0*"70'71(6/%3,"4-#6/%92'92'6/#7/#70$81$81%92&92&;4(;4(92&82%92%:3&;4(92%81$91%:2&:2&:2&<4(;3(90%91%80$7/#91%<4(;2&7/#6-!;2&;1&:1%;2'<3(:2&:2&:2&;3'<5)5/"60#;4(;3';2':2&;3(=5*<4*92'92':3(:3(;3(;3'<2'90$7-":0%;1&8/#7."7."6-!7."90$5, 0'2)7.$:1':1'7.$5,"5,!5,!8/#:2&80$4,!5-#70&5/#6/$92'92':3'5.#4,!3+ /'3+ 4,!4+ 4+ 1(2)7.$6.$3+ /(3,!4,"4,!4+!2* 0)3,"5.$4/%0+!2,"60&4.#0)/(/(,%+$,%111111---((('((%&%&&&$$$!!!+$,%*$*$*#,&+%("+$*$'!(",&*#& %&+$-')#& *$*$)$(#)%%!-) ,'.) ,&(!*#+$*#(!+$-&-%.'-'*$,&-&,&'&%(((((('''&&&***///333+++000-'.(.(/)0+!0+!0*!1+!2,"5.$4-$1) 5-$5/%3,#60'60'60&2,"/)1*6/$6/#4,!6-"8/$8/#7/#7/#3+3+91%8/$5,!7.#8/$6-"6-"90%90%6."7.#6,!7-"5,!5,!3+4, 7/#2+1*4, 3*1(0'4*5,!6-"7.#7."6-#7.$6,#5,#2) 1(2)3*4+2)3*5, 5+ 4*2(1&1'1(-%3+"5/%3,!1*4-!4-!2* 4,"6.#5-#4,!4,!5-"3+ /(3, 80%:2'80%3*2*3, 4- 3-!60%71'60&5-$ "! 3+!3+ 2*1)2* 2+!1*!1+"2,$3-%0) )!)".'0) .(.(,&*$/(0*!0* .'-&*#)",%*#+%)#*#)#+%+%("'!& (!...,++((((((%%%"""###$$$###.'+$+$+$,%,%,&*$/( +$,&.'+%,&)#("*$)$$& *$)#%#' *$+$(!&)"+$+$+#)",$,#*"+#-%.'/(-&)",%/(-&%&%'''(((''''''+++011666222.&0) /(,%-&/&/&0'0'/'1)5,!7.#5-!3+5-!91%;2'7/#5-!5-!4+ 6-"6."6-"8/$80%5-"7/$6.#4,!3+ 3+ 3, 3,!5.#5.#3,!5.#92':2(81&81&6/$4,"2+ 2* 5,"5-#7.$:1&6/#3+ 6.#81&70%6/$92';3)92'81&5.#5."70%6.#6-!6,!3*5-!70$5."3, 6.#80%80%7/$5-"2*4,!2+ 0(3+!2*80%80&70%3* ,#0'3* 4+!4+!3* 4+!6-#7.$3* 0(3+ 81&70%.'.'4,"70%7/%5.$3+!2* 7/$80%6.$3+ 6.$80%5-#2*5-#3+ 4,"6/$1)+#2* 3+!3+!91&80$3, 6/";3'6/#2+6.#7.#2)1)4,!6-#5-"3+!0(*"&                     jjjllliiiiiiiiieeeiiigefkijomn               -     -  -   -  -                                   - - - -  - -  -   J0 K0 K1 I0 I1!I1 F.C+C,E-G0!D,D-D-C,@*;&6"5!47#;'=(@+!;&:%;&='418"<$<%8!4 3 1...!+((%%%(++,)" " &%###"!" -                            - - - - - -  -     -   - - - -  -       - - -   -   -  -      -  -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ###  #*$1+#2,$3,#3,"4,"3,"7/%80%5."6."7/#:2&;4(80$81%<4(;2':1&60#81$93&:3&81%92%;4(92%92%5.!;4(=5)91%7.#80$6/#7/#;3';3'7."6.";2&:1&:1%;2';2'90%91%:2&:3';4(70#70$;4(<4)<4(:2&:2&;3(;3(:3(;3):3(:2';3(;3(<3(90$7-!90$:0%7-"8."8.#6,!6-!8/#6-"1)2*7/$;2'90&6-#5,"4+ 4+ 6-!91%80$4,!6/%80&60%60$92':3(:3'4-!4-!2*/'3, 3+!4+!3+!2) 4+!6-#4,"5-"2,!3+!2+!4,"4,"3+!1* 3,"5.$4.%1+!0* 3-#4-#1).&0)-%)#-&000000+++(((&''&'''''%%% *#)#("("'!*$+%)#+%,&(")#,&*$'!$&&.(.()#,&,')$($'"% .)!%,&*$%( )")!(!*#,%+%.(.(-',&+%)#*$((()))'''''')))///222+++...+%+%,&-(/* 0* 1+"1+"2,"4.%3-#.'3,#5/&4-$60'4.%4.$1,!/)2,!4-"3,!5-"5,!7/#7/#70$80$3+1*80$7/#4+ 6."8/$6-"8/#:1&90%4, 4+ 6,!7-"5, 5,!4+ 4-!7/#4-!3, 6-"4+ 2)2(5+ 5, 90%8/$8/#5,"6-#3*!4+"3*!2)0'2)4+ 0'1)4+5, 6,!3)/%/&.%-%2+!5.$2+ 1)3, 2*1*4,!5-"4,!3+ 4,!6.#4,!1*4, 70$:2&91%3+ 2+4- 0)0*6/$81&60%7*! !!! !!!!!! "! 0+!2,"3,!2* 1(0(1(2*2*!1*!1+"2,$3-$1) )")!.&1+!/(.(-'+%/)0) 0* .(,%*#)"+$)"*$)")#("+%,&)#(!& *#...,**((((((%%%"""###$$$###.(-&*$,%*#,%,&-'0*!+$,&,&*$)$)#&!+%(#%& '!)"%#&)"*#' &*#-&+$,$+#+"+"+"+#-%.'.&+#)!+$-&-%&&&""!'''(((&&&(((...444111.&0(/(-&.&/'1)1)1(0(2)5-!8/$6-!2)5-!:1&:2&6."5-!6-"4, 5-!6."80$80%7/$5-"7/$6-"5,!4, 4+ 5,!6-!6."5.#4-"6/$92'91'80&81&70%4-"0)1)5-#5,"6-#91&6.#3+ 6.#81&81&80&:2(92(81'70%5-"5-"70$5-"7-"5, 3+5-!70#4.!2,6.#70%8/$7.#4,!2*4-!0).&2+ 3,!81&:2'70%3* ,#0'3* 3+!3* 2)3* 5,"5,#3* /'3+!:2(70%.'-&3,!70%80%5-#1)0)5-"7/$5-"1)5-"70%6.$2*4,!3+!4,!6.#3+ +$0(4,"4-"81&80%4, 6.":3'7/#4,!7.#8/$2*0)4,!5-#4,!1(0'+$'!!                 efgeee[[[^^^]]]\\\\\\XXX]^]]_^[\[a_`dbd                -  -        -  -  -                           - - - - - -  - - -    K1!K0 K0 I0 H0 H/ F.D,@(@)D-D. B,B,A+A+<'9$6"8#6"6#:&;&=(>*:%:$6 348#:$;%:$6!0.,*+)'#"$&'**+%! -# (%%$$!! !"    -    -   #   -      -     -        -            -            - -   -     - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - -       - -        - - - - - - - - - - - - - - - - % (#,&1+"3-$5/%81(92(7/%5.#6.#91&92&80$81$;3'91%:2&5.!5."82%:3':3&:3&<5(81$91%81$=5);4(70$7/#92&7/#6.":2&<3'90$90$;2&;2&91%:1&;2&90%81%91%92&:3'81%70#:3'<5)<3(91%90%:2';3(92':3(;3):3(;3(;3(;2'90$6-!8/#9/$6,!6-!6-"5,!6-!6.#5-"2)3*7/$90&7.$6-#6-#5,!5, 5,!80$6."3,"5-$7/%5.#5.#70%81&92&3, 3+ 3,!1)4-"5,"5,"4+!1)4+!4,"3+ 3+!3-"3+!4-#5.#4.#4-#2+!3,"5.$3,"2+!1*!6.%70'1* ,%0).&+$.'///000+++((('(''''(((###+$("' ("& (")#'!("*$("("+$*#("$%*$.(.) +%,&,')$(##*%.)!+%,&("%("+$)#(")#*$)#*$+%,&*$*$(")#.+()))((('''(((...111,,,,,,("(",&-(/)0*!0+!0*!2,#5/&4.$/)4.$60&4.$60&60&4.$0* -'2,!3-"3,!5."6.#7.#6-"80$91%4-!2*80$7."6-"7.#7.#5-!8/$8/$8/$3+2*5+ 6-"4+ 4, 4+ 4-!6."4, 3+5-!3+2)4*6,!5,!8/#90%90%7.$7.$6-$5,#4+"2)-$2)5, /'0'2*5, 4+ 2(/%0'1(.&1* 3-"1* 0)3, 2+2* 5-#6.#5-"4,!4,!6.#5."3+ 3, 81%:3&81$3+2+4-!0*0)5/"60$50$ """###  !!!!!!""""""!  5/%3-#1+!3,"3,!2* 0(0'0(1)1) 0) 1*"2+$2,$1) *"(!.'2,"/).(.(,&0* 0*!2+"0)+$)")"+%*#+%*$*$*$,'+%("'!' +%...,)()))((($$$"""###&&&%%%.(,%*$,%)",&+$+%.(("+%+%'")#)#&!+&)#& '!("& $"%' )"%$)",%*#+$(!*!+",$,$-%-%,$,%*#*"-&-%'&'%&%((()))''''((,,,121222222.&/'.&/'0'3*2)0(1(3*5-"7/$5-!2)4,!91&:2&6."6."6."3+4-!6.#80$80%7/$5-"6.#5-"3+ 3+5, 6-"6-!7."7/$5.#7/%92'70%6/$70%70%5-"1)1(6-#6-#6-#8/%6.#5-!6.#70%81&70&80&91(81&6/$4-"5-"80%6.#7-!5+ 4+ 4-!70$4.!3, 7/$80%80$7.#4,!1)4,!1).&0)3+ 6.$80&7/%3+!-$0'3* 3+!3* 1(2)4*!5,#3+!-%1*92'7/%.'-&3,!80%80&4-"/'0(5-"7/$5.#/'2*80%80%2+ 3+ 2+ 4,!6.#3,!+#.&3,!4-"81&70$3, 5-!:2&:1%6-"4,!6.#3+ 0)3+!5-#6-#3* .&+#)#!                 ^_`Z[\XXXUUUSSSSSSRRRPPPNNNQQQRSRTSSSQRTST[Z\         -        -   -  -  -  -  -      -  -  -  -                         - - - - - -   - - -    J0!K0 K0 I0F-H0!F.D,B+A*>'A*C,A+?)>(<'8#6"5 8$8$7#:%;&9$:%;%8"40 7";&<(9%9#7#2/-*%%#! $&'&%#  -$&'#$##!     -          - -      -   - - -     - - -     -     -    -     -       - - - -       - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -                                    - - - - - - - - - - - - - - - - - - - - - -!!! )$-'2,#3,#5.$4-#4-"5.#6/$6/#6."7/#:2&<3(=5)5."4-!92&;4(:3':3&;4(6/#91%6/";4'92&70$81%:3&70#7/#;2&<4(;2';2&<3(;2':1&:2&;3'91%91%92&81&92&81%6/#:2&<4(;3'91%90%:2';3(91'91';3);3(;2';2':1&80$6-!7-!8/#6, 4+4+5,!6.#6-"4+ 2)3*6-#7.$6-$7-$7.$5,!2)5,!7."5-"3+!2+!5.$4-"4."6/$70%92&3, 1*4-!3+ 4-"4+!3+ 3+!3* 4+!6-#3+!4,"5.#1* 4-#6/%5.$2+!1* 3,"3,"2+!0)1* 6/%5.%-&,%1* -&+$.'+++//.+++(((()(''''(("""(!+$*$(")#'!(")#'!'!)#("'!(")")###,&.) ,&+&*$*$(#)$*%'"+&-&-&+%(")#,%)#("(#*$)#)$'!*$& '"(#)#+)'***)))***)))...000---+++' )#-',&.(1,"1+"0+!3,#5/%3-$0) 5.$6/%4.$60&60&3-#1+!.)1+!5/$70%7/$7/$7.#6.#91%91%4, 6."70$5."5.!91%90%5-!7.#7."6-!3*2)5, 7."5+ 4, 3*4, 5-!4, 3*5,!2)1(5+ 5+ 5,!7."90%90%8/%8/%7-$4+"4+"3*.%2)2).%.&2)4*3)2'1'/&2) 3+!5.$70%4-!2+ 5."6.#4,!5.#5."4-!4,!3+ 5."6.#4-!2*91%;4'91%3, 3, 4.!3, 1*4.!60$60$ """""" !!!!!! +$3-#4/%2,#1,!1* 1*2)1)0(0'0(0)0) 1+"1+$1+$0()!' .'3,"/)/)/),&0) 0) 1*!/(,%)"(!+$+$+$+$*%+%-',%)"'!'!,%.--+'&%%%&&&$$$"""$$$(((%%%0*!-'+%+%'!+$+$)#,%)#)#'!& % )#% )$&!#& )#'!#$%' ' ##' *")"+#)!+"+",$,$,%,$*",$' (!,$.&&%&&'&((((((&&&(((+++000011111/'/(/(/'0'2)1(0'0'2*5-"6."4+ 2)4,!90%:2'6.#6.#5-!3*5-!6/#7/$7/#7/#5-"6.#4+ 2)3*5,!7."6.!7/"70%5.#81&:3(70%6/$70%7/%5,"0(1(5,"6,"7-#9/%7.#4,!7/#80&70%81&82&92'92'70%4,!4-"80%6.#5, 4+3+3, 70#3- 3, 7/$91%90%7/$5-"0)3,!1)-&1)3+!4-"5.#5.#3+ .%/'3+!4+!4+!2*1(3* 5,#3+!-%0)81'6/$-&,%2+ 70%80%3+!.&/'4,!6.$6.#.'/'80&80&3+ 2* 3+ 3,!5.#4,".&.'3,!4-"70%7/#3+3+:2&:2&6."3+ 6-"4+ 1)4,"5,"6-#2* .&+$*$"               - -WXYRSTPPROOPLLLKKKKKKKKKJJJJJJJKKIKKIKLKJJKJKOOPSST                   -  - -   -     -  - - -  - -                             - - - - -   - - -   I0!K1!K0 J0E,F- F- A)@(B+A*?)>(@+?*=(;%9$7"6#5"8$:&9%9$:%:%7!6 7!25 9$;';'9&26!1-0 ,%!   !$$$$   ##&'%%$$    - - -     - -  -           -  -          - -              - - -       - - -      - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - -                             - - - - - - - - - - - - - - - - - - - - - -###")$+'0+#0+#0+"4-$4.#5.#5."7/$80$;3'80%5.#5-"92';4(:3':3&:3&6/#81%70$<4(:3&81%91%92&70$80$91%91%:1%:1%;2&:2&:1%91%91%91%:2&:2'81%81&70$5."91%<4(<3(80$:1%91&:2'91&81&92':2':1&:1&91&90$6-!7-!9/#6, 3)2)5,!7.#6.#4,!3*3*5-"7.$6-$6-#6-#4+ 1(5-!7.#7/$3+!3,"6/%5.$4-#70%70%91&3,!2*4-!4,!5-"3+ 1)2* 4+"2)7.$4,"3,!4-#4-"4.#5.$5.$2+ 1* 2+!2,!2+!0)1) 5.$70&1* .'0).(,%.'///--,)))))))))(((''' )#+%)$)#+%(#)#'!'!("'!'!'!'!(!*$$$)#,',&,'.((#% )$*%'"+%+%)#& '!)#*$("'!)#+%)$)#+%)#'"'"&!)$)'&***)))***))),,,//////***,,,,&.(,&.)1,"0+!/) 1+"3.$3-$1+"5/%5.$3-#4.$4/%4.$1+"1+!3-"3-#6/$6/$7/$7.#5-!81%6/#3+5."70$4-!3, :2&:2&6-"6."7/#6-!4+3*6-"7.#6-"3+3+5,!6."5-!5,!6-"3+2)5,!5+ 5,!6-"8/$90%7.#7.$6-#2) 4+"3*1(2)/&,#.%1(1(1'0&2(0&1(2* 5.#70%4-"1*6.#6/$6.#6/#6.#4-"4,!4,!80%7/$4,!0)80$;4'92%3+3, 4-!4- 1+5."71%6)! !!!  1* 4.#/(-&3,"4.$3-#2,"0)1*2*2*0'/&/'0(1* 2+#1+#0*"/')!( /(1*!.'.'.).(1+"1*!1*!.',%)"(!*#*$+%+%*%*$-',&*$' ' +%-,,*&$"""%%%%%%###%%%((("""*#*$& & )#'!*$'!'!*$'!("("("'!)##("&!##'!(!!!%&% !&)")"(!*")!(!*"+#,$,$+#+#)!( *",$+#&&&(((((('''(((***000111///0) .'/(/(2)3*0(/&/'2*5-"6-"3+ 2)5,!90%:1&6.#6-"5-!3+ 4-!6/$6/$6.#6.#4+!4+!3*2)3+5, 6-"7."8/#6/$3,!70%:3(70%6/$70%6/$2+ /&0'3* 4+!6-#90%7.#3+ 7/#81&70%81&82'82'82&70%4-!4-"7/$6/#5, 3+3*3+6."5-!4, 70$80$80$70$6."1)3, 2+ .'0)2+ 3+ 4,"6.$4+!0'0'4,!3+ 3+ 2* 2(2) 4+"3* .&1* 80&6/$.&,%2+ 80&80%3+!.'/'3+!6.$5-#.'-%6/$6.$1*1*3+!4,!5-"4-".'.'2+ 3,!7/$70$2+1*91%:2&6."3+ 6.#3+ 1)3+!4,"5-#2) .&+$)#!             - - -OOPLLMIJJHHHFFFFFFEEEDDDCCCBBBBBBBCCABCBCDFEEDDDEEEIIIMMM              -  -  -   -      -  -  - - - - -      -                - -    - - - -    - - -   H0"J0!K0 J0J1%G.!F-!F-!A)>&A*A*>)>)?* =*9%7!6!5"6#5$5#:%:%9$7"8#9#416!7":&<(;(9&3"02 -**%$    !##"  -!!&"'%"""#  -             -          - -  - -          - - -   -    - -    - -    -  - -  - -  -  - - - - -  - - - - - - - - - - - - - - - -                     - - - - - - - - - - - - - - - -!! !$ (#+%0*!0* 2+!3,!4,!4,!91&80%5.#5.$91':3)81&;4(92&6/#6/#81%:3';3':2&:2&:2&80$80$81$80$91%:1%:2&;2'91%90%80$80$92&:2&70%80&70$6/#:3'<4(;3'7/#:1%:2':2'81&70$70%81%90%:1&:1&90$4+5,!6-!6-!3*3)5, 7/#7/$6."3+ 2*5,"7/%7.%6-#6-"2)1(2*8/$5-"3+"3,#6/%5.$4-#60%70&80%4,!2+ 4-!5-"6.#5-"3* 3* 4+"3* 4,"3+!4,"3,"4-#5.$5.$3-"3,"2+!3,"4-#2+!/)0) 5.$4-$.'/(1+ .(,&.(0//,,,)))((()))())&&& *%*%)#(#*$("("'!'!'!("'!& & &("%%(#)$(#)$)$&!$% )$(#)#)#& "& )#+%)#% '!)$)#("*%("'!(#)#($'&%))))))))))))+++...000(((,,,,&-'-'.(/*!0+!/) 0*!3-$2,#0) 3-#4-#4.$60&5/%5/%2,"4/%4.$3-#60%6/$6.#7/#6.#81%4-!2*5-!6/#4-!4-!:3'91%5-!6."7.#6-!4+4+ 7."6-!5-!4+ 2*6-"7/#6."5-!6."4+ 3*4+ 4+ 5,!6-"7.#6-"5,"5,#4+"1(4+!4+ 3*4+/&-$/&0'1'1'/%0&1(1)2* 5.#81&4-"0)4,!6.#6.#7/#8/$6.#5-"4,!70%7/$4,!1)7/#:3'81%2*2+4-!3- 1+5.#70%!!! 0)+$.'2+!/(,&2+!4.$3-#1+!/)1+ 2+ 2*/'.&/'/(0) 2+#2,#0*!.&( )!0)2+!.'.'-(-(2+"1+!0) -'+$(!(!)#*$+%+%*$)$-'+%*#'!'!*#,++*&$"""&&&&&&%%%&&&(((!!!)#,%)#(!*$'!("' ("*$%%& %)#'"& (#&!""%&  !%& $ %%'!' ' '( )!*"*",$,$*#(!'*"+#+"&&&""!'''((()))***000222./.0)-&/(0)3+ 3*/'/'1)3*5,!6.#5-!3+ 5-":1&90%5-"5-"5-"3+ 4,!6.#5-"5-"5.#3+!4+!3*2*3+ 4+ 6-"8/#80$6.$3,!5/$92'71&6/$70%5.#2* /'0'3* 5+!7-#90&7.#3+ 6/#91&70%71%82'82'92'81&5."5-"7/$7/$5-"3+ 2*3+90%5-!6.#7/#80$70$70$6/"2+2+2+ /(.'1*4,!5.$6.$2* /'/'3+!3+!3* 1(1(3*!6-#3+!.&1)6/%6.$-&+$1*91&91&5-"0(0(3+!7/%6.$/(-%4-#6.$1) 2* 3+!3+!3,"4,".&/'2+ 2+ 70$92&2+0(7/#91%5,!3+ 7.#2)0(2*!5,#6.$3+!.'+$&        -          -GGGCCCBBB@@@??????>>>>>>>>>===;;;<=====>>>>>>>>>===AAACCC        -              -         -  -       -                - - - - - - -  -  - - - -   - H0"I0!K0 J0F-G.!E, C*B*D,?)A+A+?)<(>* 9&5"4 43!4"6$5#8%8$:%8#6!7!515 9$<(<(9'5$6%1 ./*% # $"  !$$!   !$""!$ "!#   -               - -     -      -   -   - -      -    -     -   - - - -    - - -  - -  - - - - - - - - - - - -                              - - - - - - - - - - $$#"(#+&/) 3,"0)2+!6.$7/$4-#5.$81':3)80&;4)92&6.#5."81%92&;4':3';4(;4(70#7/#81$81$91%:1%:2&:2&80$80$81%6/#80$92&7/%80&70%7/$;3'<4(:1%80$:2&:2&91&70%6/$70%80%90%:1&:1&8/$4+4+3*4, 6,!5,!5,!6."7/$7.#3+ 2* 6-$91'7/%5-#4,!2*/'2*5."4-"3+"3+"6/%4.$5.$5.$6/%80%5."2+ 4-!4,!4,!5,"2* 2)2)3*!3+!4,"3+!2+!3+!4-#4-#2+!2+!0) 1*!2,"0).'/(4-$4-#/(.'0).'+%///00/+++((((((((()))%%% ("("'"(")#& & &!% &!'!%#%$& &!#&!(#(#'#'"'"$ % $&"'"(#% #$&!)$*%% (#'"'")#*$'"(")$)$*%%$$(((((((((***,,,...///&&&++++%+%,','/* 2-#/* /) 3.$2,#/) 3-#5.%3-#60&50&3.$3.$50&4/%1+!5.$6/$5.#7/$6.#5-!3+2+6."6/"3, 3, 81$70$5."7/#7/#5,!3*5, 7.#5, 4+ 3*1(5, 7/#7."6-!6-"4+ 2)4+4+ 5, 6-"8/#7.#6-"5,#4*!2( 4*!4+!4+ 5, 1)0'1(1(1(1'0&0&1(2)3+!5.#82'2+ 0)2*5-"6-"6.#8/$6.#5-"3+ 6.#7/$4,!2*6.#91&80%1*2+4-"3, 0*4-!5.#!!! .'/(3,"1+ +$-&2+ /(.'3,"3-#1+!0+!1*!3-"3+ 1)/'-%.&0(0* 0*!2,"1+".%( *#0) 1*!-'-&,&,'.).) .(-')#' ' *#*$*#("'"(".(+%*#)"(!("++**&$$$$&&&''''''%%%'''(!)#& $)#& '!& & '!$$$& & ("(#(#'"$#$$ "& ("$$%%'!%%&(!)")"*#*#+#)!')",$*!'&'%&%'''(((((()))-.-232122000.'/(0)0(1).&0(2*4, 4,!5-"4, 2*5-":2'8/$5-"5-"4,!2*3, 6.#5."6.#6.$4,"4,"3* 1)3*3+5-!8/#80$70%4-"5.#71&71%6/$6/$5.#2+ 0(1(3* 4+!7-#80%6."2*6.$81&70%60%71&82'92'81&4-"4-"7/$6.#4,!2*1)6-"7/#5-"3+ 5-"7/$80%70$7/$3, 2+ 1*/(/(1*3+!6.$6/%1* -%.&3+!4+"3+!1(0(1)4,"2*!.&0(5-#5-#-&*"0(70%7/%4,"/'/'2* 6.%6.$0(.&4,"7/%2* 1)2* 0(3+!3,".'/(3+!2+6/$70$1)/(6/#80$3+2*7.#3+ 0)2* 5,#6-#3+!.&+$%                -AA@>>>==<;;:::::::999888888888777555777788999777888888999;;;><<                                                   - - - -   - - - - -  - -    - H0!J0 J0F.E-E-C*?'<%>'@*C- C-!>)<(8%3 12 3!3!5#6$6#6"8$8$9$8"4457#:&<(=*;(4"2!1!-+(& % $ !  #'$     #$$$"!  -!%!    -               -      -      -      - -                    -   -    - -   -  - - - - - - - - - - - - - - - - - - - - -                       - - - - - - - - - ###"("+$+$2+!4-#3,!1* 2+"70&92)5.$80&81&6/#70$92&;4(<5(:2&;3'<4(6/"5.!70#80$80$80$91%91%70#70$70$6/#80$81%6.$7/%5.#5.";4'<4(;2&90$:2&91%80%80%80%80&81&91&91&91&8/#5, 4+ 4+5,!4+ 3*4, 6-"5-"4,!2* 2*3+!6-$6-$4+!2* 3*-$2+4- 5.#1* 2*!4-$4-#5.$6/%70&70%4-"2+ 4-!2+ 2*3+ 2)2)2)1)0'3+"2+!1* 2+!3,"4-#3,"1* 0)0) 1*!.',%/(4-#1*!-&-&.(-&+%...//.++*(((''''''((($$$ )#*$& &!'"% '!$$% $"!%#)#&!"$(#'"&"'"#%!'"&!% &!% ##% #&!'"$#)$(#(#'!("'"(#'"(#'#'''(((''')))+++---///(((+++*$*%,','/* 3.$/).(3-$0+!.'3,"5.$2,"4.$4/%2,"1,"3.$3.$0+ 4.$6/$5-#6.#4,!6."5-!4-!6/"4.!3, 4- 6/#6/"6/#81%80$6-!3*5,!8/#7."4+3*2)5,!8/#6-"5,!7."3*1(2)4+ 6-!6."7.#5,"5,"5,"4+"2) 4+!5,"5,!5,!2)/'0'1(3)2(/%1(2)2)2* 4-"81&4,"0(2+ 5-"6-"7.#8/$7/#5-"3,!6.#6.#3, 2*5-"81%80%2*2+5.#3, 0*3, 6)!!!! 2,!0*.'0)4-#3,".'/)3-"/(.'4.#4.$1+"0* 1* 3,!2*/(.&.&/(0) /)/) 1+"1*"-%)!,$1* 1* .'-'+&-'/* /* -(-')#( &*#+$+%*$)#(#/) ,&)#("'!)"**)(''%%%%%%&&&'''######'!)#%#("& '!'!& ("%#$%$'"(#*%&!##$# !$$! !%%$#$%' &%)")"*#(!&)!+#*!&%&&&&'''))))))'((+++121343000/(0*2+ 1)0(-%/'2*3+ 4,!4-!2*1)3, 91&80%7/$5-"4,!1)3+ 5-"5.#7/%6.#3,!4,!2)0(2*3*5, 7."7/#70%5/#5/$82&81&5.#5/$6.$4-"2+ 2*4+!5+!6-#7/$5-"1*5-#81&70%70%60&71'92'5/$2+ 4,!6.#5-"4,!0'2*5-"7/#5-"2+ 5-"80%81%6.#6.#4,!3, 2* 0)0(0)1)5-#5.$3+!.&-%3+!3+!2) 1(/'0(3+!2* /'0(4-#6.$/')"/'5-#5-#3,"/(.'2* 6/%6.$0).&4,"7/%2* 0)2* 0(4,"4,".'/(3+!1)5-"3, .'-&5-!6."1)1)6-"4,!0)1) 4,"4,"1) -&*#& !              - -987776665554554444333222222333222111222111222///222222333444655                  -                                -  - - -   - -     - -   J0 J/H/ F.E-E-C+>&:#:$A+D.!A,!<(9%4!0104#6$7%7%8%6"7$6#9$8"425 8$8$6#6$7&4#..,($ # " -$ " " )'%"  !&&##!       -   !!      - -  - -        -  - -        -       -                   -      -   -  - - - - - - - - - - - - - -                             - - - - - - !! !*%/*$.) -'/)3-#70'3,"5.#70%6/#80%81%<4(;4(91%:3'<4(6/"5-!6/"6/#7/#7/#70$80$6/#6/#70#7/#7/#6/#6.$6/$3,!3, ;3'=5)=5)91%91%81%81%91&81&70%80&80&80%8/$6."5,!4+4+6-!5,!3*2)3+ 3,!3+ 1*2* 4,"6-#5-#4+!5,"4+ .&2+5."4-"1) 2+!4-$3,#3-#6/%81'81'5.#4,!4,!2* 2* 2* 2)2)2)2) 1)3+!1* 1*2+!3,"3,"3-#2+!0) 0) 0)*#+$/(4-#1*!+%-&-',&+%+++..-***((('''&&&'''#$# & )#& #$ "&!"$$#! ""&!! $ (#'"(#$ '" &!&!&!$$$#!% #$&"'"&!("& '"&!&"'"($(#''')))(((***,,,---...)))+++*$+%+%.( /*!1+".(/* 2,#0*!/) 2+"3,#4-#5/%4.$1,"/* 2-#4.$1,!5.$4.#4,"6.#6."80$7/#5."5."4-!3- 4-!5."4-!4-!7/#7.#5-!4+ 4, 6."7.#3*3*3*5,!8/#5,!5, 6-!2)0'2)4+5,!6-"7."6-"6-#5,#5,#3) 4*!5,"5,!4+ 0'-$0'3*2(0&2'2(3* 4,!3+ 2+ 6/$2+ 0)2+ 5-"6-"6.#80%5-"8/$4,!7/$6.#2+0)5."81%70$4-"3+ 5-"3, 1*3, !!!!!!   3,"4-$4-#1*!.'/(4-#2+!.'2+!5.$.'-&4-#1+!0*!0* /)1*0).',%-&.'.&-'0*!1+"1*!/'(!+$0)0) .'-'-','.(0*!-',&)$( ( +$+$*#)#)#(".(,&*%("(!*#))('''&&&$$$$$$#########'!)#'!$("&!% $'!& "#%$$$% %!!!"% " #" !!#$##$$$"#'!)#*#(!'*",$*"( &&&%%%((()))())*+*/00232000.'/(1*2)0(.&.&1)3+ 5-#4-"1*0)3+ 80%7/$5-"5-"4,!2*3+ 4,!3+!5.#4-"3+!3+!1(0'1)4+6-"6-!6."6/$6/$60%92'81&5.#5/$5.#5-#3,!3* 5,"6-#6-#7/#4,!0(4,"81&71&70&60&71&82'5.#2+ 4,!5.#5-"3+ 1)2*5-"7/$4-!3, 6.#80%80%5-"6.#4,!2+ 2* 1*0)/(/(4-#6.$4,"0(,$1) 3+!2* 1(.&/'2* 2+!0(0(4,"4,"-&)!/'4-#5-#4,"/'-%1)5.$5-#0(.&4,"7/%1)0(2)1)4+!4,".&/(2*0)5-"4,!/'.&4, 5,!0(1)4+ 3* 0(1)3,"3+!0(.&)##               -1100////.//.//....---------...---------,,,-,-)))+++,,,......///                     ʡ{|z||{}}|                    - -  - -    - -         -I/ J/C*F.F.E-E.D-@(:$>(C-?);'9&6#3 3!7%3"3!6%8'8&9&7$8%8$:&6!334 7#7$5#4"0/-,+(" -" -"  " ')&$!   "&$!!  -   #  -  - -  !!!!            -    -                               - -            - -  - - - - - - - - - - - - - - - - - - - - -        - - - - - - - - - - - - "! $!'#(#+&0* 3-#3-#4.#6/%6/$5."81%;3'<3(7/#:2&:3'6."5-!6/#6/#70#70#70$6."5-!7/#81%7/#6/#6.#6.$6/%3,!4-!:3'=5)<3'80$7/#70#70$80%7/$7/%70%80&7/$8/$6-"4, 2*3+7."5-!2)2*4,!3,!3+ 2* 1)2+!5-#6-$3+!5-#3*0(3+ 5."4-"2+!3,"5.%3,"2+!5.$70&70&6.$3,!3+ 2+ 4,"4+!2)1)2)2)1)1) 0)0(2+!2+"2+"2,"2+!0) 1*!2,"0* -'0* 3,#2,"+%,&.(,&*$***--,***((('''&&&&&&$$$!!!& $'!% "#"!  !"! "$"!$'"&!% $ &!% &"$" $#! !$##$ &!$$% #"% '"'#(&$)))))))))***,,,---+++---*$+%,&0*".(0*!.(.(/*!/) /) 0* 2,"1+!3.$3-$1+"0* 2-#5/%3,"6/%4.#5-#6.#5-"7/#6."5."4-!3, 3, 4-!6/"4- 3+5-!6-"5, 4+5-!7.#6."5, 4+ 3*5,!7."4+3*4+0'/&2*4+4+ 5-!6-!7.$8/%7.$6,#4+"4+!6-"5,!4+0',#0'1(0'0&2'3)3*4,"3+ 0)3-"0)/(1*5-!5-!7."6."6-"7.#4-"6.#7/$3, 1*5-"70$6/$4-!1*3, 2+1*7-&!!!!!! !!!!!!.&-%/'2+"2+"1*!1*!/(/(3,"/(-&2+"3-#,%-&3,#/)/)0* 0)0)/(-%-%.'/(.'-'0*!0*!/(.&(!,$0) /),&+%+%,&.(1+!-'*%)#)!)!+$+$)#)#*$'!,&*%*$'!' )")('%%%###$$$###"""###"""'!("& $$$%$% ##% #"#&!&!# " !!! "  "#"#"#$'!'!("' %)!+#+")"&%&"! '''((()***++...121///-'.(0)1)/(/'-&0(4,!5-#5-#3+!0(2* 7/%7/%4,!5-#4,"1)4-!4,!2*4-"3+ 1)1)/'/&2*3*4+ 4+ 5-"6/$60%71&81&71%60$6/$7/%5.#4,"3+!5,"5,"5,"7.$4+!/(3,"81&81'71'71'60&81&6/$3,!4,!5-"5-!1)1(0(6.#7/$5.#4,!5-"6/#7/$5."6/$4-!2+0)/(/(.&/'4-#6/%4,"0(+#0(4,#3+"1)/'0(2* 3+!1)0(3+!4-#.'*"0(5.$5.$4,".',$/(3,"3,".&-%4,"6/%0(/'1)1(4,!5-#/(1)2* 2* 6/$6.$1)0'5,!7/#1(0'2)3+ 0(2)4+!3,!1) .')#$     - - -  - - -    ******)))***))))))))))))******)))((())))((('(%$$&%%(''))))))***                    - xyzqrsqrsrrtpprqqprrruuu                  - - -       -          - J/A(B*G/F.E-D-C+C+A+C- @+;&7"5"3 4!6$7%9'5$8':(<(:'9&6"6!8#7"47#6"5"6$3!2!0-,,(($ ! -! - # ('&" "  $$!   #&! -    "         -           -  -    -      -   -                           -  - - - - - - - - - - - - - - - - - - - - - - - - - - -     - - - - - - - - - - - - - - - - - - - - - %$$$+%.) /*!2,"5/%6/%4-"6/#:2'<3(6."7/#80%5-"4,!6.#6/#70$6/"80$6/#3, 6.#81&6/#6/#7/$5.$6/$4,"5-"<4(<3(90%6."6."70$70$7/$4-"6.$70%91&80%90%6-"5,!3*4+ 7."5-!1)1)2*1*2+ 2+ 1*3+!5-#6-$3+!5-#2*/'2*3, 3,"2+!2,"5.$2+!0)4-#6/%6/%5.#4,"4,"3+!5-#4+!2*2)3* 2* 2* 2* 1)0)4-#2+"2+"1*!1* 0)0) 1+!0) /(2+"3,"1+!+%-'.(+%*$(((,,,***((('''&&'&&'"!"$!$ $ # !!" "! !#"$!##"$$""$#!"#$""#% $"$% &!'"&%#(((***)))(((+++,,,...---)#)#,&0*"0*!1+"/* /) 2,#0*!/) 1+!3-#2,"2-#3-#1+".(1+!3-#4-#6/%5.#4-"4-"5.#6.#4,!2*7/#5-"3+5-!6.#5-"4, 5-"5-"5-!4+ 6-"7/#6-!6-"5,!2)5,!6-"3*3*3*0(0(3*4+ 5, 6-"4+ 7.$6-#6-$5+"3*!5+!7.#4+ 1(.%-%/&1(0&0&2(2)3* 3+ 2* 1*4."1*/(1*6."7/#7/#80$6."7/$5-"6.#6.#3,!2*5."70$5.#3, 0(1*1*0("""!!!!!! """"""!!!"""-&-&-%,%/'3,"2+!0) 2+!1* 1* 3,"/(,&2+!2+!*#-&2+!0*!/)/).(/(/'-&-&-&/(/(.(/) /) 0(-%( *"-&.(-&+%*$,&/) 1+"-'+%*$*"*"+#+$*#+%*%)#.(,')#' '!'!'&%&&&######"""######### '!("& ###% ##%% "!"$#"! "# "!! "!# "$& & & $#)!,$+#*#$#$$%$&&&''')))))*,,,111111-'.'0(0(.'.'.'0(2*4,!5.#4,"/'1)6.$6.#3+!5-#4,!0)5.#4,!2* 4-"3+!2* 2* 0(1)2*2*4+ 4, 5."4.#4."6/$71&60%5.#5.#6/$5-"4,"3+ 4,!5,"6-#8/%3+ /(4-"6/%70&5/$60&4.$70%5/$3,!4-"5-"5-"4,!/'0(3+ 5-"6.#3+ 5-"7/$70%5."6/#4-!3,!1* .'0).'0(4,"6.$4,"/'+#0(3+"2*!1) 0(0)2* 3+!1)/'1* 4,#/(*#/'3,"4,"2+!.',$/(4,"4,".&,$4,"7/%0(0(2* 1)5-"5-#/'1)3+ 4,!80&80%2*0(7.#91%4+ 0(1)2*1)1)2* 2* 0)-&("&       - - - - -     ***(((((()))))))))******)))***)))((((((((((''%%%&%%((()))))))))                  - hghmklkijgefabcdeffgh_`abbcbbc``bbbbeeeiiikkk                 - - -   - -   -        C+C+B*E-D-D,B*@(D,E/B,>):%6"34 7%7&7&7&9(7&9'<);(:(6#45!8$5"8%8%5"4"2!.--,,'# ! - ! ! -# # &# # " "!"#$"    !!   - -  "#         - -   -                  -  -   - - -        - - -    - - - -     -   -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - - - - ! #'",'1,"4.$3-"4-"80%80&5."6."80%7/$5-"6.#6.#6/#80$81%70$4,!5-"80%6.#6.$70%5.#6/$5-"4-":3(:3'5."4-!6/#81&70%6.$4,"5-#7/%80&80%80$5,!5,!5,!4+ 6-"4+ /&1)3+ 1)1)1*0(1)5-$6-$4,"2* 2*.&0(3+ 2+ 0)1+!4-$2+!0)4-$7/&7/%6.$4,!4,"2* 4,!4,!2*2)3* 1)2* 1* /(/(3,#2+!2+"1*!0) /(0)1*!0) /(0) 1*!0*!-'.(.(+%*$&&&,,,)))''''''(((''(!!!% !$" ! ! !#  % "!!! !    !! """#&!'"$#"(((+++)))(((+++...000+++***'!+%/) .( /) -'0*!3-$0*!/*!2,"2,"2,"3-$3.$1+!.)2,"2,"5.#5.$3,!4,"5.#6/$6/#4,!1)7/$6-"2*4, 6.#5-"5-!5-"4,!6.#4-!5-"6."7/#7/#5-!2)5, 6-!3*3*4+ 2)2*4+ 4+6-!7.#6-!7.$6-#5,#4+"2) 3* 6-"2)/&*"-$/&0'1'1'2(2)4+ 2+ 3+ 2+ 4.#2+ /(2* 7.#6-"7.#6-"6."5-!5-"6.#6.#2+ 0)4-!70$6/$4-!1)2+ 2+/("""!!! 1* 1) 0(1* 3+"0)-%/'2+!2+!/(1* 0) 0)4-#0)-&3,"0) (!-&2+"0* .(/(0) /(.',%-&/'0) /).(/) /) .'*"( )".'/(.(-'+%+&.(0*!-'+&*#)!(!)"+$*$,&+%+%.(,&*$'!)")"%$#%%%$$$"""!!!###$$$$$$ (")$% $# "#"""#!!!##!  " !"  "!" #%%%%'*"+#+$*$##$%%$&&&''''(((()))*///00/----'/'/'-&-&/'0(/'3+!6.$3+!/'1)5.#4-"3,!6/$4-"0(4,"2* 1*4,!2+ 4,"3+ 0(2*0(2)4, 5-!4-!3,!2,!5/#71&6/$5.#4."3,!4,"5-#3+ 5,"5,"5,"7.$3+ 0)4-"6/%60%3-#5/$4.$60%4.#2+ 4-"5.#5-"3, 1)1)4,!7/$5-"3,!3+ 6/$70$4-"5."3,!4-"2* -&0)/'0)2+!5-#4,"/'+"0(2*!2*!0(/'0(0(2* 1)-%0(3+!1* ,%/'2* 4-#3,"/',$0)5-$6.$/',%5-#6/%1)1* 3,!2*5-#4,".&1)4,"5-#80%70%1)/'6.#90%5,!1)3*3+ 1)2* 4+!4,"1) ,%(!%        -       )))((()))******))))))******)))))))))'''((((((&&&%%%((()))((()((           -       -fffeeeaaa^]]XXXXXYTTUVVXWXYUUVVWXWWYXY[XXXZZZ___eee                    - - - - - - - -         D,E-E-G/ E-B*@(C+E.B,=)<':%6"5!4!6$8&9'7&9(:(<)8%7$8%8#5 35!5"3!4"6#2 2!/,+*+-$ " ! " # &%! " -" $#$&$"  -     - - "#!      -  -         -            -               -  - - -  - -  -  -    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - - - - - - - - - - !! "(#,'.(0* 6/$6/$4."3, 7/$80%6.#5-"6.#6/#70$80$91%4-!4,!7/$5-#5-#6/$5.#6.#5."4-"81%81%5.#4-!5.#70%7/%5.$4,"4-#6.%7/&5.$4,"4,"4,!6-#3*5,!6-#1(1(3+ 4,"3+ 1*1) 1) 1) 4,"5,#2) 1).&/'2* 2+!0)2+!0)/(.'3,#6/%7/%5.#3+!3+!1)2* 5-"3+!3* 2* 0(3+!2* /(0)2,"3,"2+!2+!0) /(0)1* 0)-'.'0* 1+!/(.(.(*%)#-,,+++''''''((((()''( & $$    "  !   !#$$ $"! )))+++)))+++,,,......+++)))("+%.( -'-',&1+"1+"0*!0*!3-#2,"2,#4.$3-$0*!/)1+"2,"3,"5.#2+ 4-"6/$7/$7/$3,!1)80%6.#3*4,!5-"4,!6-"5-"3,!7/$6.#6.#6."7."6."3+1)5, 6."4+3*4+2)3*5,!5-!6-!7/#6-"5,!6-#5,#5,#3*!2) 6-#6-"3*,#-$0'1(1(0&3)4* 1)1)1*1*4-"4-"2+!6.$8/$6-"5-!4, 6-"4,!5-"5-"5-"2+ /(3, 70%80%5.#2+3,!3,!7-&!!!  !!! /(2+!3,#2+!1*!0(1* /(.&/(2+!2+!.'0).'1* 4-$/(.'4-#1* )",%1* .(-'/(0) .(.'-'-&.'/(/(/(/) /) -%( )!*"/(/(,&+%)$+%/) 0* ,'+%("'' (!*#*$+&+%,&,&*$)#&'!)"&$#$$$###"""!!!###"""""" '!'"##"!$"""!  #!    ! #$$#"%("(!( )")#$##&&&'''''((((&&&***+++,++/(/'.'-&,$.&0(0(3+ 6.$3+ .&0(4,"3+ 3+!6.#3+!0)3,!2+ 3,!5.#2* 2* 3+!/'1)1)3+ 5-!6-"4-"3,!1+ 4.#71&5/$5.#4."3,!4,!4,"1)5,"6-#5-"7.$3+!0)2,!4.#5/$4.$4/$5/$5/%3-"1*2+ 5.#5-"2*/(1)5-"7/$4,!1*1*5."6/#4-"5."3, 3,"2+!-%,%.&.&1* 3,"2+!.'*"/'3+"3+"0(-%/(.&2* 1* -%0)4-#3,".&.'2* 3,"3+!/(,$0(5-$6/%0(-%5-#6.$1)2* 3+!2+!5.#4,"/'1* 4-#5-#7/%7/%2+ /'5."90%6-"2*4, 4,!2* 4+!6-#5-#2*!-&*#&            - - -  -***''')))***))))))))))))))))))))))))((('''(((&&&%%%&&&)))((()((                 \\\\\\WWWUUUUUUNNNONOONNLLLLLLMMNNNONNONNOPPPQQQRRRWWWlll                   - - - -   -         <&E-E-F.G0!E,A)C+F/A+9%7$8%:%8$;'9&6#9$8&5$6%7$9&8%4!5!8$7#5!23!3!11 2!0.,+()&! -" $$ $ &)&# ! &(('%"         - ""!  - - !  -       -     - -                         -  -  - - - -  -      - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $$"  &!*%0+!0* 0* 1+ 4-#4-#4-"4-"6.#70$6."6/#81%4-!4-!6/#4,!3,!6.$5.#5.#6/#5-"6/$6/$5."4-!5.#6/$7/%7/%3,"4-#3,"6/%5.$4-#4-"4+!2*2*3+ 5,"1(0(3+!4-"3,"0).&1( 5-$2*!0(2* 2*0(/'2*2+!2+!1*!1* /(.'2+!4-#6/%5.#3,!4,!1*0(4,!2)1(1)1(3+!2*!0)0) 2+"2+"1*!2+!0).'/(0* /(+%.'0*!0) .(-'.(+%*$,,,***''''''((((((&&'#"#&!##! !##""  '''+++)))))),,,...///---((((#+&.( -( -(-'0+"/) -(.)2,#3-#2-#3.$3-#1+!0* 0*!1+!2,!5-#4,"5-#5.#6.#7/$3+ 1)90%5-"2*6-"7.#5-"7.#5-"3,!6.#5."6.#6.#7.#6-!2*1(5, 6."4+2*3*3*4+5, 5-!6-!80$7.$5-"5-#4+"4,#2) 2) 6-#6-#2)+".%1'2)2(2(4*3*1(1)2*2, 6/$6/$4,"6.$8/$7.#5,!6-!7/#7/#5-"5-"6.#4-!0)4,!70%70%4."1*2,!2+ """!!! !!!!!!!!!!!! 5.$3,"1* 3,"3,"2*!2+!/(0(.&.&0)2+"2+!,%.',%1*!4.$0)/(4-#/(("*#/(-'.'0* 1*!/(/(/(0).'/(0)/(-',&*"' *$+$-'+%)#,&*$)#/)/),&+%)"( (!(!(")#*$*$+%+%(")"& %'!&%$#$#"""###"""###"""""" &!'"$$#""!"  ! !!! ""#%' ')")"%%%%%%&&&&&&&&&&&&)))---***0(,%-&-&.%.&/'0(2* 5-#3+ /'1*5-"4,!3+!4-"0(.'2+ 2+ 2+ 3,"2* 2* 3+ .&0(2* 3+ 3+ 4, 4-"4."2,!4.#60%4.#4.#4.#3-!3+!2* /&4+!7.$7.$7/%2+ .'1* 4-#3-#3-#4/$4/$4.$3-"1*0)4-"4,"2* 0(1)5-"7/%4-"1*1*5.#5.#4-"5-"3,!3-"0).'-&.'.&0)3+"2*!.&*"-%2*!3+"0( .&.&.&1) 3+"-%1) 5-$2+!,%-&3+!5-$4,".&+#/'4-#6/%0(.'5-#6.$1)1)2* 2+!5-#4-#0(1* 4,"4-#7/$7/%4,!/(4-"80%5-"2*5,!5-"2+ 5,"5,"3+ 0(-&*#("      -          )))))))))))))))((()))))))))((())))))'''''''''&&&%%%((()))))))''                 PPPPPPMMMNNNJJJGGGHGGIHHFFFEEEFFFFFFFFFGGGHHHIIIJJJLLLPPP                 - - - - - - - - - - - - -       ?)C+D,D,B*C*E.C,9#14"5"8%:%8#:'9$:$;&7&6$9%7$8&5!323 5"12 3"1 ../-**%# " ! -$'&'')'$ '%)*(%      - -    &$! !  "        -   -     -          -  -     -     -    - -  -    -     -      - -  - - - - - - - - - - - - - - - - - - - - - - - - - - -     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "#'")$)#,&2*!1* 3,"4-"6/#80%5."5."60#4-!4-!6/"3, 3+ 6.#5.#4-"5-"3, 6.#6/$4-!3+ 5-"6.$5.$5.$2+!5-$3,"7/&6/%6.$4,"4+!3* 4,!4+ 5,"2)0'2* 4,"4-"1).&.&6.%4,#1)0)2+ 0)1)3+ 5-#3,"2+"1*!.(-'2+"2+"4-#4-#2* 3+!0(/'2*0(0'1(1)2* 3+"2*!1* 3-#3,"1+!2+!0) .'.'1* /(+%-'0* .(-'-'.(+&+%+++(((&&&((((((''(&&'####     "!!$$'''))))))''')))+++---+++&&&'#+&.) -( ,(,(0+"0,"-(.)2,"2,"2,"3-#2-#0*!.)1+!3-#2+!3,!3,!3,!4-"5-"6.#2*2*80%4,!2*7/$8/$5-"7.#6.#5-"6/$5-"5-"6.#7/#6-"2*1(4, 6-!4+2*3*3*4*4*5, 5, 7/#7/$7.$6-$4,#4+"/'1)6.$3* 1)-$-$2(4* 2(1(4+5+1'0(4+5."91%81%3,!3-!6/$5-#4,!5-"7/$7/$4,!4-"7/$4-"0(2+ 6/$60%4-"0*2+ 2+ """"""!!!!!!!!! !!! 3,"5.$5.$4.#3,"1+ 1* 3,"2*!2*!0) 2*!/'-&/(2+!3,"0)1* .'1+!3,"/(/(1*!,%&)".'-'.'0) 1* /(/)/(0) .'/(0)/(.'.()"(!)#+%/(-',&-'+&*$-'.(-',&*#)!(!(!)"("("*$+&*%'!)#' $&&%#$$$######"""$$$$$$### '"%   !""  !  !!!&( ( (")"%%%#%%%%%&%%&''')))--,(((.'-&-&.&/&0(0'0(2+ 3,!2+ 0(2+ 4-"3+!3+!3,!1).'2+ 3,!4,"4,"1)0(2*/'0(1)2* 3+3+3-"5/$4.#5/$5/$1+ /)2,!2, 1*2*0'2)4+!5-#6.$1)-%1*2,!1+!2,"3.#4.$4.#5.$2+ 2+ 4-"4-"4,"1)0(4,!7/%5.#1*2+ 5.#6.$4-"5-#3,"4-"0)0)/(.'.'/'2*!1) -&*"+#0(3*!1) 0(/'1) 3+"2*!.&0) 3,"3+",%.&3,"80'4,#,$)!-%2+!6/%1* 0(4-#5.$1* 1)1* 2* 3,"3,"/(1) 4,"4-#7/%7/%3+ .'5-":2'6.#1)3*4,"2* 5,!5-"3+ /(-&+%)$!    -          )))(((((((((((((((((()))((((((((()))''''''((('''''')))))))))                 JJJGGGHIHEFFDEEABA@A@AA?AA@@@>??>?????>@@?@@?@@?CCCCCCDDDFFFZZZ               - - - - - - - - - - - - -   -   A*A)A)C*D,B+:$013!5#:%>(:%9#:$9#=':%5"7$7$7%6#35!13 1/1 1!-**(%%#  -! # &# $&''&$'))%$   "  -    ""#! !!#!            -      - -            -  -    -   -   -   - -     - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - #%(! & .&1) 3,"5.#7/$6/$3,!5."6/#4-!4-!5."4.!3, 4-"4-"3,!4-"1*5."6/#3,!3+ 4-"5.#5-#4,"1*!5.$5.$5.%4-#5.$3+!4+!3+ 3+ 3* 5-"2).%/'2*!4,"0).&0(7/&5-$3+!2+ 2+ .'0(3+ 5-#3,"2*!2,#/)-'2+"3,#4-$4-$1* 2* 0)/'2*0(1*2* 1(1) 3+"2*!2*!3-#2,"2+"1+!0) /(.'1*!0* ,&-&0) /),&+%.()#*%***'''&&&((((((''(&&'##" %! "#'''))))))'''(((***,,,((($$$(#*%.) -(*%*%-( 0+",'-(0* /* 1+!3.$3-#0*!/* 1+!5/%2+!3+!1*2+ 4-"5.#6.#2*3+ 80%5-!3+ 7/$7.#4, 5-!5-"7/$7/$5-#5-#6.#7/$5-!3*1(4+6- 4+3*4*3*4*4*4+ 3+6-"6-"6-#5-#4,#3*!/&0(5-#4,!3* .&.%1'2(0&/%3)4*/&0(4, 5."81%81%3-!1+ 6.$5-"4,"6.#6.$5-"1*3+ 70%4-"1)2* 4-"6/$4-"1*3,!5)!"""""""""""""""!!! 1+!1+ 2,!5.$5.#4-#2+!0*/(3,"2*!/(/(1) /'.&/(2+"0).(0).(2+!2+".'0) 0)+$&+$1* 1* /(/(.'.'0) 1* 0).'0) /).'.'0) (!' ' *$/(,&+%-'+&,'.(/) .(+%*#(!' ' )")#)#+%,&+%&!*$("%(!&$#$$$$$$!!!""" ###%%% $#       $'$*$!!"$!!&&&'''&''''''''((((((-&-&-&-%.%/'0(1)2+ 2+ 2+ 0)2+ 4-"2+ 2* 3+ 1*/(2+ 3,!4,"4,!1)1)2* 0(1)3* 2)3* 3+ 4-"4.#2,!3-"3-"2,!3-"5/$2+ 0)3* 2)1(2*4,!4-"0(-%0)1* 0* 2,#2-#3-#3-#5.$2+!2+ 4-"6.#4-"0(/'4,!70%4-"1*2+ 5-#5.#4-#4-"4-"4-"2+!/)/(/'-&-&0)0(.&+#*"/'2*!2*!0( -%/'2*!2*!/'0(3,"4,#.'.&4,#80'4,#,$*",$1* 5-$2*!1) 4,"4-#1)3,"4-#1)3,"3,"/(2+!4-#4,"6.$6.$3+ .'4,!80%4-!0(3*6.#2* 5,!6.#5-"1* .'.()#"  - -    -       - -((('''((()))(((((((((((((((((()))''''''''''''))))))))))))                 BCCABBABA>??;<<=>=:::;::;;:::9:99::9::9::9;:9998<<<======???EEE           - - -      - - -    -  9$@'A)E-C,9$1334!7$7#9%=(:$<&9#:%<(7#4!4"6#7"23 4!2 2 .-/-)&# ! !  !   %%%%$'%%&'''&"     - - !       "!   -     -  - -  -         - -  -       -  -  - -  - -   -     -    - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - */+,,* +#1) 2+!4-#81%6.#2*6/#6/#4- 3,5/"6/#3, 3,"2+!3,!5.#1)4-"5.#4,!2+ 3+!4-#5.$3,"1* 4,#5.$4,#3,#5-#3+!3* 3* 3* 2)4+!2),$-%0)2* 1).&0(4,#3+"2*!2* 1).&0)3+ 4,"3,"2*!2+"0) .(1*!2+!3,#3-#0)2* 0(0(2* 1)0)1)0'1) 2*!0) 1) 3,#3-#2,"/).(-&,%1*!.(+%-'0* /),&)#,&)#*%(((''''''((()))(((&&'"""""!   !#''')))((((((((()))+++&&&"""'")$,'-( -(*%+&.) +&-(/) /* 1,"1+!1+!.)/* 2,"5.$3,"3,"1*1*3,!7/$6.#3+ 3+ 8/$5-!3+6.#6-"4,!4,!5-"6.#5."5-#6.$7/%7/$4+ 3*1)3+5,4*4*5, 4*4*5+ 4, 4, 6."6-"6-#6-#5-#5,#1(1(6-#6-#3* /'0'1(2)3)1'2)5, 2)2)4, 5-!70$6/$2+ 1*5-#3+!3,!5-"4,"3+!0)2* 7/$5.#1*1*4-"6/$4-!1+4,!"""############!!!2+ /*0* 0+ 0* 2,!4.#2,!0* 0)0)-&/(1) 0(0) 0(/(/(/)2+!.(/(0) /(1+!1*!-&/(.')#' .'3,"1*!/(.'.'/(0)0) /(.'0) .'.'/(.'(!&&*$/) ,&*%-'*$-'0* 0+!.(,&*#&%' ("*$*$,'.(,'% '!'!'!)#&$"&%%$$$"""""" """$$$ ##      !    5#3 12=*#H3/<(#'" *$#!!&&&&&&&&''''&&&((''''-%.'-&.&.%/'1(1)1)2* 2* /(2+ 3,!2* 1)3+ 2*0)4-"5-#4-"5-"0(0(2* 1)0)1)1(2)2*5-#4-"2+!3,"4.#4/$4.#2,"0*/)/(0'1(2) 3,"4-#.'-&1* 0* /)1+"2,#2,"4.#3,"2+!2+ 4-"6.#3,!/'.'3,!6/$4-"1*1*4-"4-#3,!2, 3,!4-#2+!.'-'.'+$-%0(0(/',$)".&1) 2*!0( .&0(3+"1)!-%1*!5-$3+".'-%2+!5.$1* ,%*#-&3,#5.$2*!1) 4-#4-#0(1* 4,"0(2*!4-#1)2+!5-#3,"5.$5.#3,!.&2*7/$4,!1)4-"6.$2* 4+ 6.#5.#3,!/(-'(#&     -    - -    - - - '''((((((((((((((()))))))))((((((''''''(((((())))))                 122;<<:;;9::9:9787676566566555444555655555555554332433777888888;;;                      - -      ?(C+D,;&125!5!6"7#8%8%=)<&;%='9$;':&8%5"5"5!2//1 //,,-)$! ! " $$!  -$*((%# %$$'&%#         - -     !#  !       -   -     - -            -  -     -  -    -  - - -    - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - )"0)2*!4-#5-#6/#5-"5."6/"4- 2+5."60#2+5-#3+!3,"4,"/(4-"6/$4-"1*2* 4-#5-$1*!1) 2+"4,#5-$5-$5-$3+!2* 4+!4+!2)3* 2)-%.&0(1)2* /'1) 2*!3+"2* 2* 3+!0(0(0(2* 3+"2*!2,"1*!/)1* 2+"3,#2+"/(0(/'/(2* 1)0)0(/&1) 3+"1) 0) 2+"2+!1+!-'-',%*#0) 0) *$,&0) /)+$)#+%(")#)))(((''')))((('''&&&!! #    ('%"  "$  -"'%")))((())))))))))))&&&"""'"(#*%)$)$*%-'.)!+&.(1+!/)0* /) 0* .(/) 1+!4.$3,"3,!1*1*2+ 7/$7/$4-!3+ 7/$5-"1)6-"7.#5-"5-"5-"5-"4,!5-"7/%90&80%3+3*1(3*5+3*4*7-!5+4)5+ 5,!5-"6.#5-"5,"4,"3+!5,#0'1(5,#3* 2)0(1(2)3)3)/%0'4, 3+3*4, 3+ 5.#70%3,!1*4,"1*2*2+ 2* 3+!2* 3+ 6.$5.#2+ 1)4-"6/$3-!1+4-!!!!"""###$$$###5-#2+ 1+ 2-"1+ 0+ /* 0* 1,"0* .'/(.',&/(/'/'0) 0) /(/'0) 0) -&-&.'.'2+!0) +$-'.')")".'2+!/(.'0)1*!1*!0)/(.'/(1*!-&.'/(/')"&&+%0* ,&*%,&*%.(1,"1+!-'.(,$' &(!)"*$*%+&,&+&$%&& ("%#"'&&&&&%%%$$$""""""$$$ !#$       >%>$?$=$:#9%7$3!2/4!C0)L61B+'/')#''''''%%&%%%'''((((((-&.'-&-%-$.&0(1*2* 3+!0).'1*3,!2* 1)2* 1)0)4,"5.#3,!4-".'/'2* 1)0'0(2*4+!4+!5-#4-"2+!2,"3-#3-"2,"4/$2,"0* 0(0(1(1) 2+!5.$.'/(1* 2+!0*0* 3-#4.$3-#4-#3+"2+ 4-"5-#3+!/'-&2+ 6.$4-"0)1*3,!4-"3,!1*2+ 3,"1* ,%,%-&+#-&0) 1) /'+$( ,%0( 3+"1) .&-%1) 0( .&3+"5.$1*!-&,%1* 3,"0) -&)".'4-$4,#1) 1) 5-$5-$0(.&1) .&1)3,#/(1) 6.$3+!6.$5-#2+ .&2*6/#3, 0)3+ 5-"2* 3+ 5-"4,!2,!.'.()$!  -  -      -  -  - - ((('''''''''''''''(((((())))))((((((((()))))))() - -               454333333344232111/00011011000//0000111000000000...//.110222222444;;;               -     6"E- ;'3 24 6"6":$9%7$8%9$=)8$;&9%7$6"5"5#4!5"4!0/-1 .,+,*&!  " '(&%%&&&%$#$##%#          -   -     !    -    -              -         -   -     -    - -  - -   -    - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - -  %,%0(2*!5-#4,"6.#5."4-!4.!3, 1*4- 5."1*3,"1* 1* 2+!/(2+ 5.#5.#1* 2+ 4-#4-$1*!2+!3,"3,#5-$4-#4,#3+!1)3* 2)1(2)2* .&.&0(1* 1)0(2)!1) 0(1) 1)1)1)2*2+ 2* 2+!1*!2,"0* .'/(3,"2+!0) 0).'.&/'1)0)0)0(.%/'2*!0)0(0* -'.(.(,&+$-&1*!0)+%.(1+!/)*$)#*$'")#)))((('''((('''&&'&&& "!.<( P70<( +,-./134 6"8#:%;&;&;&<&<&<'<&;&:%9$8#8#6"5"4!2 0.-+(&%$# # $ / 6'"+! #! )))((((((''''''(((&&& '"(#*%*%,')$*%.) ,&-(0* /) 2,"1,"1+".(/)0+!4.#3,"3+!1*2+ 3,!5-"5.#4,!4,!5-"3+ 1)6.#7.#5-"6-"6.#6.#5-"5.#7/$90&:1&6-"3*1)3*5, 3)4*7- 4*3)5+4, 6-"6."4,!5,"5,"4+!4+!1(/'3* 3* 1)1(2)4+!4+ 2(0&2)5-!4+4+3, 3+5.#80&4-"1*3+ 1)2*2* 1*3,!4,"4,!6.#5.#1*0)4-"6/$3,!1*2'!!!"""4,!3+!4,"1+ /(2-"2-"0+!/* /) 1+!1*!.'-&,%-&/(/(0) 2+!2*!/'.'.(0) /(/(.'-&/(2*!+#/(0)*#)"-&1+!0) 1* 1*!0).'/(0) .'.'1*!-&-&.',%(!%&+$/) ,',&,',&.(1+!0* -'-',$( ' )"*$+%+%+%*$+%%$$%)#%$#&&&&&&'''$$$###!!!$$$"!"#$       A,"B,#@* ?'?*?+?)=%=#=$=% ;$ 7#7$3"2 .6!G2+L50?'"/)1%%%&&&&''&&&''''''&&&-&.'-&+#-%/'/'0)2+!1* /(.&0)2+ 2*1)2* 0(/'2+!4-#3+!3,!.&/(2* 0(0(1(2)0(1)4,"4-"3,!3-"5/%2,!2,"4.$2-"1* 0)0(1) 2) 1* 5-#0(/(1* 0* .(1+!4.$4-#2+!4-#2+!1) 3,!4-"2+ /'-&0)4."3-"1*1+ 3-"5.#3,!2+ 3,!2,!0)+$+$,%,%.&1) 1* /(,$' +$/'2)!1) -%-%1) 0( .&0(3,"1*!-%+$0) 3,"1*!.()"-&3,"2*!/'0(5-$5-$0) ,%0(-%0)4-#.&/(5.$5-#70&6.$1*-%1*7/$3+ 1)3+ 5-"3+!4+ 5-!4,!2+ .(/)*%!  - - -     - - - -  -  - &&&&&&&&&&&&&&&&&&&&&''''''(((((()))))))((                 ---------,,,++++++*++*++*++*+,++,++,++,*++++++++***+++,,,---------222          -  -  -         -     8$3"1 3!4!6#B*>(:$8$7$9%9%6"6#7#7#4!22 1 03 .-,---,**("  $&'(&(%%&&$%$%$"      -    !     "    !   -      - - -  -   -            -  -          -  -   - - -    - -    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - "'!,%0(0(1* 3,!2+ 4-!3,!4-!5."3,!1*3, 5."1*3,"0) .'/(.'2,!6/$4.#2+ 2+!5.$5.$2+"2+"2+!3,"5-$2*!4-#2* /'2)1(0'2* 1)/(0(2*!3+!1) /'1) 1)!0(0(2* /(0(1)3+ 2* 4,"3+"3,"0* .'.'0)2+!1* 0).&.&-&/(/'0(/'-%.&0(/'0)2+!/)0) /(,&*#,%/(-'+%/(/) -&*$+%*$*$!!!((()))''''''&&&&&'"2!A+$K2+;&!.++,./24 5!6"6#7$9%:&8$8$8$9&:'9&7$6#5"3!1 0 .-,+*(''&% '/?.'?.'-"  !)))(((''''''))))))''' &!*%+&*%+&*%-(.)!.)!0*!0* /)1+"1+"1+!/* /* 1+!4.#4-#4-"2+ 1*2+ 5-"6.#4,!4,!4+ 1)2)6.#6.#5-"5-"5-"6.#91&80%7/$90%90%6-!2)1(4+6, 4*4*7-"4*3)4*4,!5-"6."4,!4+!5,"4,"4+"2* .&2) 5-#1(0(2)4+!2*0'0'3*4, 3+3*2+3+ 5.#6.$3,"1* 3+ 2* 2+ 3+ 1)1*3+ 4,!5-#4-"0)0)4-"6/$3-!1*3,!1)0(3+ 2* 2+ 1+ .'1+ 3.#0,!.(.'1*!2+!.',%*#,%.'/(0)1*!0).&-&.'0) /(0).'.'/(1* ,$.'.(*#*#-&1* 0)1* 1* /(.&/(/(/(/(/(.'/(/(.&*"%' )#.'+%,&,'+%,&0* /)-&-&*"'&("+%+%+%+%+%+%& %$$("%$#%%%%%%%%%$$$"""!!!%%%"""!!   ;' ;&;';':%;&=)!?*"?)"?)!@*"?*!?+ >) =&;#;!:":#7#7$ 4$4#.4C+&F.)9!1.6#$$$&&&&&'&&&&&&&&&&&%,%-&,%+",#-%-&/(1* 2+!0)-&/'1*1)1)2* /(-%1)2+!3+!3,"/(1)1)/'0(1)1* 0(1*3,!3,"2* 2,"5/$0+ 1+!3-#2,"0* /(/'0(2) 1* 5.$2+!0)0*0*/)1+!4.$60&4-#3,"2*!1) 3,"4-#3+!.'-&0)4-"3,!0*0*3,!5.#2+ 1*2+ 1,!0*,%(",%+#,$1) 2*!0(,%( *#.&0(2*!-%-%0(1) -%/(3+"2*!,%*"/(4,#2+"/()"-&3,#2+!.'/'4,#4,#0) .&0),%0)5.%-&/(4,"5.$7/%6/%1* +$0)80%7/$1*3+ 6.#5,!4,!5-"5-"3-!/).)+%!   - -    - - - - -   -  - -  -%%%&&&&&&&&&&&&&&&''''''(((('( - - -                 ((()))((()))))))))((()))))))))))))))())((()))'''(((***************...            -      -     1!1!3"4!8%<'>&:$9%8%6#8%8%7$5"5"4!002"/01-,,-+**%&"$)&" # %%%#" %'##$$#  - !          - -                    -   -          -   -    -   -       -    - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -      - - - - - - - - - - - -  #'")#-'/)/(0) /(0)3,!2+ 3, 2+3, 5."3, 1*2+4-"1* 3,"/(-'/(/(1* 5.$5.#2+!2+!4-$5.$3,#2+"3,#4-$4-$0) 2+!1* 0(1)0'0(1)/'/'.'.'2+!2+ /'1) 1*!/'0)1* /'/(0)2+ 1) 2+!2+"2+".'/(/(/(2,"2+!0(.&.&-&/'/(/'-%-%/'0(.'/(1*!0* 0) /)-'*#+$.'-'+%,&0* *#-'(#)#)#!!!((()))(((''''''(()  !/A)!H.'>)$2++-./13 4!5"5#7#8%9%8$9$9%:&:&9%7#7#6"4!2/-,,*)'&&&(0=*#D0*;("'! !))))))((()))******'''"""% )$*%*%+&*%-(.)!,'0* 0+!/)1+!2,#2,"1+!1+!2,"4.$5-#5.#1* /(1)4,!5-"3+ 4+ 3+1(2)5-"5-"4,!5-!3+ 5-"91&90%7.#90%80$5,!2)1(5, 6, 3*3*7-!4*2(2)4+ 4,!5-"5,!5,"6-#5,"4+!1(/&1)3+!2*1(2)4+!3*2)1(2)3*0(2)3+2)4,"6/%5-#3+!4-"4,!3+ 3+!0)0)2* 3,!4-"3,!/(0)5-#70%5.#2+ 3,!3+!1)0(3+!3+ 0(1+ .(0* 1,!.*,%,%0)3,"0)/(,%,%-&/'1) 2*!0).&-&.(/) /(/(.'0) 2+!1* ,$.'-&'!+%.(1*!/(2+!2+!0).&.'0) 0(.&-&-&.'/(.'*#%'!*$*%*%+%,&+%,&0* -',%-&*"&%(!,%+%,&)#*$*%& & &&'!%$$$$$$#$$$$$$$###!!!&&&###  -1444"6#7#6#6"6"7"7#9$;&=( =( <';&=(!@+#?*">)">&!=#:"8#7#8%6%4"4!6 445416' "!&&&&&&&&&%%&%%%&&&''&,%/(-&,$+#,$-%-%.'1) 0),%.&1*0(0)1*/'+#0)0(2+!3+!0(1)/(.&0(/(0(/'1)2+!1* 0(0* 3-#0+ 0* 2,"2,"0* /'.&/'2* 4,"5-#1* /(1* 1+!0* 0* 4.$6/%4-#2+"2*!1* 3,"5-#3+!/'-&/(2+!2+!0).'1+ 4-#2+!1)0*/*/*,&'",$+#-%1) 3+"1) -&)!)"-&/(0(-&-%/(2*!.&/(2+!2*!+$)"/'3+"4-#/((!+$3,"2+".'/'3,"3,#0)/(1* -%/'3,#,%/(3+"4,"3+"3,!2+ .'3+!7/$7/$2*3+!6.$4,!3+ 5-"5-"4-"0)/)-'#   -    - - -   -   -  - - - -  -''''''''''''''''''  - -          -          '''(((***)))((()))***))))))))))))))))))***))))))((())))))***)))))).--            -  -   - -      +0!4#7$8&8%8#7!8$9&6#7$6$6#6$5"1./3"1!/0/-)***$#! #%'&$# $ %$$  ! ##"#$       - - - "!!"!!      -    !#     -   -                  -   -    - -   -   - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -        - - - - - - - - - - - - - - - "(#)$*%-'.(/*/)2+!3,"0).(2+ 3,!2+1*2, 5."2,!0*1*3,"1+ 3,#1* /(0).'.'3,"4-#2+!1*!2+"3,#3,#2+"2+"3,#3,#2*!3,"2* /'/'0'0(0(2* 0(,$,%1*0(,$/(0) .'1) 1* /'.'/(0(1) 2+!2*!0) 0) .(.'0)0) 1*!0(.'/(,$/(/'.&.&-%/'0(.(.'.'.(0) 0) -'+$,%.(-'*$,&/) -(*$("(#("!!!))))))(((((((((***!! ###!$+. . ++,+,.1236!7#8#8#8#9$;&<'<' ;&:%9$8#8$7#6!3 0-+)(&&&&%',1 6$/&%%" )))***'''((())))))&&&"""&!(#)$)$*%*%,'+&,'/* /* 0* 1,"3-#2,"/* 0* 3-#4.#4-#4-"1).'0(3+ 4-"1*3+2*2)3+4,!4,!4, 5-"3+ 5."91&8.#6-!90%8.#5, 3)1(6, 5, 2)4+7-"2)0&1(4+ 4,!5,!5,"5,"5,"4+!2* 0(0'3* 4,!2*1(2)4+ 4+ 2)1(2)2)/&1(4, 1(4,"6.%3,#1)4,"4,!2* 3+!2* 2+ 4,"3,!4-"3,!0(1)5.#92'6/$5.#4-"4,!2* 0)2+ 3+ 0(1* /(/*.)-(-&,&2+!5-#3+!1* .'-&-&/'0)1* /(-&-&-&/) /(0* 0) 1) 2+"0) +$.'-&&+%0* /(,%1* 1*!/(-%-&0)/'-&.'.'-&.&-&)"%' *$-',&,&+&*$,&0+!-'*$+$)"&' *#,%+$+%)#+%*$'!' & %&$$$###"""###$$$$$$"""%%%### (?)$N71J3.2*)(*0102 4!4!4!6"8$;' ;& :%<' >)!<' ;'=)!?*"@*#@*$?("?%!<$8#8$9'7%5#6"8!7> A%;"7"7%!!!!,,,'''''(&&''''((('''-%/(-&+$*#*#-%-&/(1*!.'+$.'0)/'/'1).',$2* 0)3,"4,"1)1).'/'0(.&/'0(1)1* /(/(0)3-"2,"0* 1+!2,"0) /(/&/'2*!2+!3,"1* /(1+!1+!/)1+!2,"2,"1*!1*!2*!0)1* 2+!1) .'-&/(1+ 3,"0)-&1*4-#2+!0)/)-(/).'(!+$-%/&1) 2*!0( ,$)!*#-&.'/'-&-%0(1) .&0(2+"1*!+$)"/'2+!3,#/()!+$2+"3+".'/'4-#4,#0(/'1* .&/(2+!,%.'3,!4,"2+!4,"2+ -&0)6/$7/$3+ 3+!5.#3+ 2*4-"4,!3-!0)0* -($   -    -  -    - -     - -   - - -      -          -           +++((()))((((((******)))******))))))******)))))))))*********)))***                - - -    0 7%;(=*9&8%6"7$6$8%7%8&7%6$4"/.///-,-,,))$#!  -" %&%''&&' -$! "#"$      - -  -   !    %"       -    #    - -                 -  - - -   -  - -  - - -   - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -        - - - !$&!)$-(.).(.)0*0*0*2+ 4-#/(-&1+ 4-"3,!1+3, 4-"2, 0)2+!4-#2+!3,"2,"0).'.'/(2+!4-"2+!1* 0) 1* 1+!2+"1*!2+!2,"3,"2+!0(,$-%0(/'0(2+!1* ,$-%/(/(,$/'0( /(0(1)/(.'/'0)2*!2*!0) 0) 3,"/(.'0) 0(1) /(/'0),%,%0(+$,$.&/'0(/(.'-'.(/(.(,&*#+$.',&*$,&/) -'*$'!*$)# )))((('''(((((('''**+$$###"0 4 A(9#-.//024!7#8$8#9$:&:%9$;%<'=( =(!;':%:%:%9%8#7"5!3/,*('&&&%&))*+*&',(&&&&+++)))((()))(((&&&"""$$(#*%*%)$+&(#(#/) 0*!0* 0* 0+!0*!/).)2,"4.$4,"3,!1).'0(4,!3,!0(2*1)1)3+ 5,!4, 3+ 5-"4,!6/#91&7-"7-!90$7-"5+3)1(4+5+ 3)4*6,!2(.$0'3*4,!4,!3+ 3* 3* 3+ 2)0(0(3+ 4,!1)/&2)4+!4+ 2)1(2*3*0'1(3+ 1)4,"6.%4,#2* 3+!4,!3+!2*3+!4,"5-"3+!5.#5.#3,!1)6/$81&70%6/$5.#4-"2+ 1)1*2* 2+!1* .(0* .)/*.(,%2+!5.$2+!0).'/(0)0)0)0).&-%-&-&.'-&.'2+!0(2+!/(+$.'-&' -'2+".'+%0) 1*!0(,%.&/(.'.'/(/(-&-&,%)!%& +%.) -',&,&)$+%1+!-')"*#(!' )"*#*#)"*#(!("("'!& $#!###'$! !!!"""$$$$$$%%%&&&)#  ! -;&!9%,&$$&.0011114 7#9%9%:&<' ;'<'>)!?*#?*"@+#B,$A*$B(#A(#>("<'!9&6$4"6":"B'R4+X<4I/(>&8% 444777///''''''''((((###,%/',$+#(!(!*#/(0) 1* .',%/'0(/'1)3+!.'-&2+!1* 3,"3+"1) .&.'/'/(/'0(0)0)/(/(0(0* 2,"2-"/* 1+!1+!0) 0) 0'/'1) 1* 3,"1* .(1+!0* /)1+!3-#3-#2+!0* 1* /'0)1)/(-&-&/)0* 3-"0)-&0)3,"1* /(.(-(/*.'(!+#-%.&/'1) 0()"( ,%-&-&-'-&+$/(0)-&.'2+"1* *#(!0)2+!2*!/'(!*#1*!2+!.'/(5-$4-#0(.'0)-&/(2* .'/(3+"4-#4-#5.$2+!+$,$3,!6.#3, 3,!6.#4+ 3*5-"3+ 3,!/(.)-'&    - -      - -                                     -)))))))))((()))***))))))))))))((((((******)))((())))))******)))***          -  -        - - -    -6$=*=*9&7$4 6"5"8&;):(7%8&3"1 /0.,,*)+)+'" !  " )'%&()'&&'$#"""  -   - -  - -    !"#"       - - -                      -     -  - - - - - - -  - -  - - - -   - - - - - - - - - - - - - - - - - - - - - - - -     - - - - - - - - - - - - - - - - - -  %)#,&-'-'0* /*.(/)1+ 0*/)1* 4-".(-&1*3,!3, 1+2+ 2, 1+ /(2+!3,"2+!3,#3,#0) .'-&/(1* 3,"2+!1* 0)0)0) 1*!/(1*!2+"3,#1* /(-&/'0(.&/(0)/(+$,%0(/(+$-&/( 0( .&.'.&.&/(2* 2*!0).'.'1*!.'-%/'0) 1* /'.&/(,%-&0(,%-&/(1) /(.'-&,&-&.',%,&,$,$/(-'+%*%.),'+%(")$("((((((''''''&&&&&'///'&%((':%G1&[?4H1(7$2013 34!7#9$:&;&;&=' >( ='='=( =( <'<'=( <' :%9$8$7#6"30.+)((((*+.12.))!///(((,,,***))))))(((&&&"""$'"&!($*%*%+''"'"-',&+&/)0* /) .(.(1+!3-#3,"2+!1)-&/(4,!0(.&1)2)0(2*5,!4+ 3+ 4,!3+ 7/$80%7-!7-"8.#6, 3)2(1(4+4*2(4*4+ 0'-$/'2*3+ 3+ 3+ 3* 3+ 3+ 1)0(1(4+!4,"1(/&2)3+ 3* 2)1(3*3*0'0(1)0(3+!4-$3+"1)2+ 4,"4,"3+ 4-"4-"3+!2+ 5-#6/$2+ 1)6/$81&70%5.#4-"3,!2* 1* 2+!3,"4-#3,"0).)/*/* -&,%1* 4-#1* /(.'.'/(1* 2+!1* .'-&-&-'-'+$,%0) 0(2+!/'*#,%,%(!-'0* .(,&/(0) /',$-%.'/'.'.'.'-&-&,%)"%& +%.(,&*%-'*$)$/) .()")"( )"*#)")"(")"(")#)#& $##"###'#!!!!!!!!!!!!!$$$&&&))*("   " % &$#$'/20//0236"9$;&<';&;&=( ?)"?)!?)!@*#C+%D+%D*$C)$A)$>(#<( 9%8&:&<%H-#_A7dF>O3-=%:& ???777333'''&''(())))"""+$-&*#*#+#,%-&0* 1* 0* .'-&/'/(.&0(2+ /(-&1* 1)2+!2*!/(/'0(/'/'/'0(/(/'.&1)/)1+!/)0* /) 1,"0+!1*!0)0(0(0(1* 2+!.'-'1+!0*!/)1+!2,"2,"2+"0)0).'0)0)/(.&.'/)/*3-"/)-&/(2+ 0(.&,'-(.)-'(!+#-%-%.&2*!0) (!' ,%,%,%-&-&,%.'.'+$,%1+!0) *#' 0) 1+!2+!/((!+$1*!2+!.'/(4-#4-$0(/'0).'0(0).&0)3+"4,#5-$6/%4-"-&0(7/$6/#3, 4-"6/%4-!5,!5-"4, 3,!/)/) ,&%    - -   - - -                                    - - +++***((()))))))))(((((())))))))))))***))))))))))))()(***)))+++                    -   - -    06$8&7$7$36"<)9'?-"9(7&1 -3"1 ,*+,,+&((%" ! ! %*)&%')))'&$"    -          %# !    -         -   -   -               -   -    - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - -     - - - - - - - - - - - - - - -  #& '!%)#.(/).(/)/).(-'/)1+ 0* /)1* 3,!.'.'2+ 3,!3,!1*1*2+ 1* /(2+!3,"2+!1*!1+!1+!0) .'0) 2+!2+"1*!0* 0)/(0( 0)!/(3,#2,"2,"0) /(.&.'/'/'.'1* /'.'.'0)-&*"-%/(0( .'.'-&,%.'1* 2*!0)+$,%/(-&+#-&1) 1*!.'-&.',%-%.&+$+$,%/(.'-'.',&-'-'+%*#(!)"-%.(,'+%/) -(+%'!)#&!)$('('''''''''&&&,,,777-++))'9989'R9-^B8N80=)#5!25"7#7#8$9%;&<' =( >(!?)"@*"@*"?)">( >( >(!?*"@+#=(!:%9$9$9%8$6!4!2!0 .---,./9#H2)H3+:&0.444///,,,***(((((((((&&&!!!#&"'#)%*%($*&(#&!,&,'+%-'-',&,%,&0*!3-$2,"1* /(-%.'2+ 1).'/'3+ /'3*5,!4+ 3+ 4,!3+ 6/$6.#7-"7-!7-!5+2(1(2)5+3*1(4+ 4+/&.%2)3+ 4+ 3+ 3*3+ 3+ 3* 2)1(1)4+"4,"0(/&1(2*3*2)2)2)1(.%/&0(0(2+!5-$4,#2* 2* 5-#4,"3+!4,!3+!4,!2* 2* 4-#2+ 0)4-"81&71%4.#2+ 3+!2* 1* 3,"4,"4,"3,"2,!1,!2-"0+!/(-&0)4-#2+!/(.'/(,%0*0*/(-&,%,%/(/(,%.(.'/'0)-%)"+$+$(!,%0) ,&+$,%-&,%,%.&/'.'.'-&-&-&-&+#(!$& +%-'+%*$-'*$*$0* /)+$*#)")"*#)")")"("& %)#& %!"$#"#&# ######"""!!!######**+ !%  ! '&%$$%'.1113!6#7$8#8#:%>( =( <'=(='=&>&?'@( D*#F+&F+%E*$C+%B,%?*"=* <(;&<$D(eE)"?*"?)"?)"?*"?)"?) ?) ?)!?)!?)"?)!>( ;&9$:&;':&9%7#6#5"4!2 10/.15M2)Z@6N5-7!20%$#;;;777***(((((()))(((%%% #% &"(#(#(#*&)%%!+&,',&,&-'.'*$*$/)1+!1+!1*.'-&-&3,!1)0(.&3+ 0'3*5-!4, 3+ 4,!3+ 5."70$5-"6-"6,!4)1&1'3)5+ 3*1(3*3*1(0'3*3+ 4,!3+ 1)2*3*2*2)1(1(3*!3* /&.%0'2*3*3*3*2)0'-#.%0'0(2*!5-$5-$2* /'5-#4,"1)3+!2* 0)0)3,!4-"2+ .'3,!70%70%5.#2+!3,"2*!1)3+!4,"3,"2+!1+!1,"3.$3.#2* /(1)4-"2+!/(-&.',%0)/(-&,%+$-&/) /(+$/(.'.'/'-%+$,%*#'!,&1+!.(.'/(/(-&.&.&/(-&-&-'.&-&-'*#&#& +%,&*%*$,&)#+%/)-&*#*#)"(!)"(!)")#)"("(",%'!$!#& ""#&# $$$%%%$$$"""$$$""",,,+++% ($&1$9& 0'&%&',123 5"8$:&:&;&=( ?)!=(>( A+!@* >'@'B) A(D*"G+$E*"D(!D*#E,%B-$@-#=) :%:$=&V@6^G=D*(99#*AAA222(((&&&&&%''&&&',$*#,$)"( &+$-&-&.'.'-&-%/(0(1)1*2* /(-'/(/(/(0),%.&.'-%-%-%-%.&,%1* /(-&0* /* -'.(2,"1+!0)/(/'/'/'0) 2+!-'+%.(/).)0* 2+"2,#1+"1*!.(/(0(0).(.(.(0* /)2,"/),%.'0)/'+$*%.).)+$(!*#-%.&.&/'-&( '+#.&-&,%+$+$,%-&(!*#0* 0))"(!/(1*!2+"/((!+$2,"3,"/(/(2+!0) /(/(2+!-&.'1* .'.'1*!3+"3,"6.$3,"-&3+!70%7/$3+ 3,!70&7/$6.#5-!5-!3,!0)0) .'+$   -   -                                -               -((()))((()))))))))(((((()))))))))*******************))*()*))               -       - - - - -   - -228%:':&;(4"--*,+/,)+**('&  ! $('%# &&'((''# $$     -  !     -                      -    !   - -           - - -  - -   - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - -  #'#*%*$*$,%.(.(+$,%0*!1+!0* 0* 0* 0* .(0* 1+!1+!/)2+ 1*/(/(1* 2+!1* 0)1* 2+!/(+$.'1* 0)1* 2+!/)0)-&/(2+"2+!1*!1* 0* 0) .'0* 0) 1* 2+"0) 0).'.'-&0(.'-%0(/(/'-&-&-&(!*#1)!0( /'.&,%*#.'0)0)0()"*#/'.&+#-%0(1) 0) /'/'-&-&.'+$+$,%,&-',%+%-',&.(,&+$( ',%+%+%*%.(-''"'!(#("*%&&'&%&%%%$$%333::;HHH?=< ;!? ?$;&7#6"6"8";&=( ?*"@+#@,$@+$@+#@+#A+#A+"A*!B+"B,#A+#@*#>)!='<';&9%9$9$8$7#6"6!4 210017F,#[A7]B:C*#2/1???;;;777)))))))))(((&&&$$$!#$ '")$($)$(#)%'",&,&,&,&+%+%+%)#/(/)1*!0)/(-&.'3,!0(/'/'1)2*4+ 5-!3+ 3+ 2+1)5-"70$5-"1(2(3)0%0&4*5, 2)1(3*3*1(/%1(5,!5-!3*0'0(2)2)2)0'/'1)1)/&.%0'1)2)2)4+2*0(.%0'2)1(2*!6.%5-$1)0(3,!2+ 1)2+ 3+!2+ 1)3,!3,!3,!1)4-"6/$6/%5-#2* 2+!2* 0(2* 2* 2+!1*!/)0* 2-#3.#0)0(1)4,"3,"1* .'-&.(2+!1* /(-&-&-'/(.',&/).'.&.',$,%.'*#(!-&0) .(-'.(.'.',%-%/'.&-&.'-&-&-'*#$$'!,&,&,&*$,&)$*$-'+%)")!(!(!)")")")#("& ("*$"##"$###%" $$$$$$$$$"""""""""666''(,,, -+&->/(M93E/)0)')*-24 5!6"7#9%<&=( ?)!@*!?)>(A) D+ D+ D+ C+B*!D,#E+#D*!E) G+#G+$E*%D+(@)&:'#8%5">* C.#;#64 0888///&&&&&&%%%%%%+$+#,$)!' &*#-&.'.'-&*#,%/'/(0(2*1*.'.'0) 0)0) 0) ,$-%-&,$-%,%,%.&1* 3,".'+%/* /* .(-'1+!0* /(/'.&.&.'0)1+!-'*$-'/).(.(/) 1+"1*!.(-&.'/'1* /(.'.(0* 0) 1+"/)+%.'/).',$,'-(+&)#)"*"+$-%/'/'-%)!(!+#.'/(,%,%+$,%-&(!("/)/()")".'1*!3-#0)(!*#1* 2+"/(/(1* 0* ,%/(0) -&.'0)-&/'3+"1) /(5-$1)*"0)5-"7/$2+ 0)5.#6/#8/$90$7/#4-"1* 1*!.(%   -   -   -                                          )))))))))***)))***)))))))))******************)'()(()((                     -   -      +15#8&7%8%1.+) //./,*)'''$ "  ! $(($'# &''(&"$"         - -    - ! !        -            -         - -      -   - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -      - - - - - -   - !(#+&,&,&-'-&.'.(,%-'0* /)/)0* 1+!0* -'/)0*!2,"1+!1* 1* 0)0)1* 1* 0)/(0)2+!/(+$.'1*!0)1* 1* .'/(,%-&0) 0) 0) 1* 1*!.'.'0)0)0) 1* .'-&*#,%-&.'/',%.'/(.&*#+$,&(")!.'/( 0) 0) -&*"-&.&.'.'&)!.'.'+#-%/(/(/(.&.'-&,%-&,%,%,%,%.(+%("+&-',&*$+$)!&-&*$+%*$-'-((#'"(#&!% %&'&&&&&&&&&&...666GGFMML >#8 648!:#;#<%>&A)!A*"B+#A,#B,#A,#A,"A+"B+"D+"C,"B,"A*!?) >)!>)!?)!=' :%9$8$8$7#6!4 2 0//016 I1(W>5M5-3..1DDD666000******)))'''%%%"""#$$ &!'"'#(#&")%'"(#-',&+%+%-&+%+$.(0* 0* 0)/(-'.'2* 0(.&1)0(3* 4,!4,!3*3+ 2*0)3,!6/#5."4+ 1'0&3(4)4*4*1'0'3*3*0'/%2)5, 4+ 2)/&/&1(1(1(2)3*2)/&-$/&0'0'0(0'2)2)1(.%0(2)0(1) 5-$3+"0(0(3+ 3+ 2* 0(1)3+ 0(3,!4-"1*/(3,!5.#4-#4,"0(0)1) 0)2* 1* 0)0* /)0* 0+!1,"2*!/'0(3,"2*!0).',%.(1* 1* .'-&-&,&/) /(-&/(/(/'/(,%,%.'+$(!,%.(-'/(/(.',%,%-&-&,$,%-',&-&,%*"#"& +%,&,&*$*$("*$.(-'+$)")")"+$)"(!'!("' ("*$$"#"$###"%%%$$$$$$###!!!***:::...++,FFF-&,:( R;5X=8=!0,,,,024 5 6!8#:%=(?* @*!?) >(?(A+!C,#C-#C-#A.%@.%A+"C*!E+!F+!F*#E*%?($=(#9% :' 8$8"9!:"7!6"4!+++&&&&&&&&&&&& *$*$*#+$)!' ( *#.'-&-&+$)#-%.'/'.'1)0).'.'1* /)0)0) ,$,%.&,%-%,$,%-&.'0) .(-'.).)-(-'/).(-&,%+#,$-&/(0*!.(*%-'0* /) 0* 1+!1+"2+"1*!.'-&-&0) .(,&-&0) 0*!1+!.(,%-'.'-&,%,','+%)"*#*"*",$/'/',$(!'!+%/'-%-%-&,$-%.&( (!/(.'*#)"-&0) 3,#.'(!+$1* 2+"/)/(2+!2,"-&.'0)-'-&0).'/'0(-&/(5.$1) *#1)5-"7/#2*/(3,"70$7/#7.#80$3+!0)1*!.(%   -  -        - -                                   )))))))))))))))))))))))))))******)))))))))))(()(                  -    - - - - - - -      )07%6$6$2!.,/1!02!0 /,)'(&&! -  " '(()'(&&$"""!   -         !"   !!!    - #            -   -           - -  - - - - - -   - -  - - -    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -       - - - - - - $(",%+$,$.'-&-&,&.'0) 0* 0* 0+!1+!0* .(0) 0* 0* 0* 0)1*0)/(0)/(.'/(0)2+!0)-&.'0) /(1* /(.'/),%,%/(0)0)3,"1* .'-&/(0)/(0).'-&*#,%-&,%,%+#-&/'-%*#*$+%(!(!,%/'/(0)-&+#,$-&.&,%)"*#-&-&+$-&.&0(/(,%,%,%,%.',%+$+$+%-&+$("*$,'-',&+$( ',%*$)#)#,&,''"&!&!#"$&&'&&'&&'&&'''(///CCBGGF K0&T4+K0(A(!<#;"<#?%A)!C*#D+#D,$D-$C-#B,#@*!?)C+"E,#D+#B*!?(?(?)!@*!?*">(!<';&9%8$6"5"3"1"0!../147!:%4 **+/AAA...)))***)))((('''%%%!$% $ &!% (#&!'#)$#& *$,&,&-'.(+%+$.(0* 0* 0* .(.(/'2*!0)/'1)1)1)3+!4,!3+ 4,!2+0)3+ 5-"5-"4+ 0'.$2(4*4*2)/&/'3+4+0&0'4+4+2)1(.%.%0'0'/&0'2)2)/%.%/&0'/&.%/&0'1(1(.&/'2)1(2*!5-$3+"2*1(3+!4,"4,"2* 2* 4,"1)3,!4-"0)0)4-"6/$4-#4,"/'/'0(/(2*!2+!/(/(-(/).*0* 2*!/'/'1*!0(/)/(,%/(0) /(-&,&-'.(0) /(-'.(.'/(0(,%-&/(,%(",&/).(/)/).'-&+$-&-&-&-&+$)#+%)#*#$"& *$,&,&+%)#("+%/),&)"(!'*#+$)")"' '!& '!*$$& "!$#$$#&"$$$###$$$###,,,000444666<<<0)+2M2+`A)"=(!=( =(?) A+"A+"@+!?+">*"@)!B*"E,"E+!C)!A("='!;&!9$9#9"%<#=$?'A)!B*!B*"C+"D,#D-$C.$B-#C,#D,#F-$F,$C)!@'@) @* ?*!@*#?)">(!<':&9%7$3"1"1"0!. - - -,,,+('&0 222((()))***)))'''&&&###"$#&!'")$!$'"% *$,&,',&.(.(,&*$.(0+!0* .(.(/)/(2+!/(.&0)1)1(2*3+!3+!4,"1).'2+3,!3+!2)/%-#1'3)3)2)/&/'3+3*/%0&4+ 4+ 2)0'.%.%/&/&-$.%2)3*/&,#.%0'/&,#.%2)2)/&.%/'2* /'/'3+"2*!2)2*4,!4,"5-#3+!4-"4-"2+ 3,!4-"1*1*3,!6/%5.$4,"/(/'/'.&1)2*!0)0* -(.(.)0* 1) -&.'3+"0(.'+$,%/(0) .(,&,&-'.'/) .'-&/(/(/'/'+#-&1* -&+$.'0*!.(-'-&-&.'+$-&,%,%,%+%*$,%*#*#%#'!*$-',&*$)#("*$-'+%)"' &)"*#(!(!& )#'!'!)#& % !$$#$#!"#"$$$$$$%%%))),,,55589:;<<,*)(.5"1+++.2 3 3 125!8$:&;'<( >)!?+#>)!='>(@+!@*!?)?) @*#C+$E-%E,#D-"A+!=(;':& 9%8!;"B&`?2kJ'!@)"B*#D+#E*!F* G+!G,"G,$G,$F,#E,#E,#C+"A+"@+#@+#?*"@*"@*">)!<' ;&9%5#.",011. * +-046!3 *&2"&&&''')))***)))$$$"""!!!#$ &!&!)$$% '"(#+%,&,&,&,&.(+%+%.(/) 0* .(-'+&-&/(.'.&/(/'0(1)1*2* 4,"1).'1*3,!1)/&-#-#1'3)3)2)/&0(3+2).$0&4+ 4+ 1(.%-$.%.%.%.%/&1(1(.%+",$0(1(-$.&2*1).&.%/'4,"/'.&3+"2+!0'1)3+!3+!4,!2* 4-"4-"1*2+ 4-"0).(2, 5.$4-#3,"0)/'.&/&2* 2* /'1* .(.)0* 2,!2+!-&.&5-$0)1* .',%/(/),&*$*$+&,&/(.'+$.'/(.&/()",%.'*$*$.(0* -'-'+$,%,%+%,%,&,%+$,&,%,&+$(!$$& ("-&*$)#*$'!(",&+%(!' &)"*#(!)#(!)#'!)#'!%# #"$$###"$""$##%$$###%&&,..144779-*(()**++,.12 4 3237#;' =)!<( =(!?*#>)">( ?* A+"A+"@* @*!C+$F.'G.'E,#C+!@+ >+!=+!;*!9&7!;#D(dC6vSEM5+02 %%%'''$##& '!(")#(!%' *#+$+$+%*$'!)"+$)!)!-%.'*#,%0) /(0) 0) ,%-&-&+#+#+#-$.&.'.'-',&-'-&,&+%-'.',&*"*#+$+$,%.',&*$.(.(.(,'.(/)/) .',%)"+$-&-&)#*$-'/)/) *$' +$.',%)#'#'"'!& ' &',$.&-%( "")#*$,%*$(!' )#)#'!&+$-'*#& )#-'/) -'(")#/(/) *#*#1*!1+!+%+$-'*#-&/(+$-&,%/(1* 3,#0(+$4-!81&5.#3,!3,!5.#6.#5,!6."6."3,!2+!2,"/) )#                                                       - - - ))))))))))))                         - - -        ")1!-++-.,*)+*+)'" # $ $ &&&',#&#!       -  -       !      -           -       !   -         - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -       - - - - - - - - - - - - - - -565..-%(!)"*$)#*$-'+%+&.(/).(-&.'/(,%*#-&/(/(/(0* 1* /(-&/(0) /)/)0* .',%,%.'/) 0* /)*$*$(!*$,%.'/(/(.'-&+$+$+$,$,$+#+#-&.')"("+%*#(!*#,%-&.'+$)"+#.'.'-&*#)"+$-&+$*#-&.',%*#*#*#*$+$,%-'+%)#,&+%)#)#+&-'.(*$' ' )#(#% % *%)$)$&!% $"$"%%&&%''&(&&&%&&>) @*!O6,X<2G.%;$:$;% =("@*$B*#E*#H,#H,"G+"F,#H.&G-%D+"C*!C*!C,"C.$B-%A,%B,%B,%A,$?*#=(!;'8$5"1"1 343/++-8#G-#M3)F.$3"+2 &&&&&&'''((('''!!!  $% % $'"&!% '"'")$-(-(-'-',&-(+%,&.(/) /) .(-',&,%,%-&-&-%.&/'1)1)1)4,"3+!0)1*3,!2+!0(,#-#0&3)3* 1(/'1)3*1)/%0'3* 4+!0',#,#.%,#,#.%0'1(0'-$,#-%0(0(.%0'2*0(-%-%/'6.$0(.'3+"4,#1)/(0(2*2+ 1*3+!3,!1*0)0)/(/(1*4-#4-#2+!/(/'/&.%1* 3+!/(1* .(/)2-"3-"3,!.'/(3,!2* 0(/'-&.'/(-&*#*$+%+%-'.',%+%,$.'.'( *#+$(!*#.'.(-'.(,%-&-&-'-&,%,$,%,%*$+%+%' %%%("+%)#*$+%(#)#-',%)"(!')"*#' *#& (!(!)#("%#  #$#$$#%# "! "! ""!"""!""&'')++-.// ,-4 5!-+*+-./24!4 3 36":&=)"<(!=(!>)"?)"@*"A+"B-#C-#C-#C.$H.(H-(F+%D*#A)>)>+!>+";*!9(9%?'K.$dD8tRCQ6,/5# "!"%&&'!*#' ' *#+$,%,&*$'!)#,%)")"-%.'+#,%0).'0) 0) ,%+$+$*"+$-%-%.&.',&,%+%.'-',%*$+%-&,%(!)")")#+%.(+%(",%,&,&,&/) /) /) /(,%%*#-&,%(")#+&-'/))#&*#,&*#'!%!% % %&&)!,$-&,$&!#("*#+%+%)#'!)#+%& & +%-&)"%*#-'/( -')#)#/) 0*!+$*$/(0*!+$*$,&+$-&+$(!*#.'0) 1*!0(/(/'4,!6/$4-"0)3,!5.#5-"5-!7/#6.#3+!0* 0* .(("                            -  -                              -                            - - - -       - *-+-,*+)'&-++(" '%((/!,  -&&$    -              !!!      - -  -           !"   -           - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -            - - - - - - - - - - - - - - - - - - - - - - - -@??!!'"+&*%-(/)0* .(,&-&/(-&+%-&/(.'.'0) 0)-&,%0) 0) .(.(1+!.(+$)#,%/) 1*!-&*$("' ("+%-&-'.'.'-'+$+$*#,%,%+#+$-%-&' '!*#("'(!+$-&.&,%(!+$,%.'-&+$*#,%,%,$)"+$/(-&)"*#)")"-&)"+$,%)#,&+%)$)#+%,&,&)#("(!*$)$&!$&!'"'"&"% $###$#$%#$%%%&''=$3;"?$=#<#;#;& >*#@+$C)#F+#H.$G-$F,$E-%E.&E,$D+"D+"D,#D,#D,#C-#B-#B-%B,$@+#?*"?*"=(!:&8$6%6"7751.,.F/$Y>5T90B*!0+1%%%((('''!"#&!&!% % )$(#*%-(-',',&+&,&*%+&-'.(.(.(,&+%*#,%,$-%-%,$.&1) 1)0(1)2+ /(1*3,"2+!0(-$,#0'3) 2)0'.&1)1)0'.%0&3* 3* /&*"*!-$-$+"-#/&1(/&,"*!-%/'/'/&1(2*/&,$.%/'5.$0(.'2+!3,"1* 0(0(2* 2+ 1* 2* 2* 0)/(0)1*0*/)3,#3-#2+!/'/'/'-%0(3+"0)2+"/)/)2,"2,!2+ .'/(2+ 1)0(/',%.&0)-'*$)#)#*#,&-',&-&,%.'.&(!+#*#&+$-'-(.(.(.'-&-'.'.'+$*#,%+%+%+%+$( %& & +%-'+%*$+%)$,&-'-&*#( ')"*"( *#%%%$& %#!$"!###"""!  !! """ "#$1 /3 F2)Q<3>) /++.//14!5"5"5!6":%;' <' =)!>)!?)"@+#B,#C-#D.$F0&G1'I/)H.)G,'F,$C+!@* >+!<* =+!;(!:'<%D* Z<2bC6H,"//! "%& %%)!(!' )"+$,&,&)#& )",%*#+$.'-&*#-&/(.'/(0) ,%,%+$+#+#,%,#,$-&,%+%*$-'-',&*$*$-&,%' (!*#*$+&.(+%("-&.(,%-&/) 0)!.(,&+%%*#*$*#)#("+&-(/) )#& )",%+$)#)$(#% $&&)",$-%,$$ #'!)#*$)#)#(!(!)"&&*$+%'!%)#.'-'+%(!)".(.()#,&/) /) *#*#+%*#,&,&,%+$.'2+"0) /(/(.'3,!6/$2+ /(2+!5.#4,!4+ 6."6.#2* 0) 2,"/)(!                         -                                                             - -         - %,/ ,&%''*&))! # $'$'&)*   #         -           !"    !   -         -       !              - -   - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -            - - - #)$+&+%.(/).(,&-'-'-',&/),&*$+$-'.',%,%/).(-'-&.(,&*#(!+$.(.',&)"$$("*#*$+%*$-'-&,%*#,$-&-&*#*#+#,$&& '!& %&*#,%-&)"*#*#,%-&+$*#)#,%,%-&+#,%/'.')"*#)!' ,%)"*#*$*$*$*$)$*$+%+&+%)#(!)"+%,&)#% ##&"% " "% % #"#%%&&&&:"39; =">%>&!>)#>*#A+$D+$F,$G-$G.&F/(E/'C.&E.%G.%G.%G.&G.&G.%E-$D,$C-$A+#?)!?)"?)">(!<':&8&9#:!9 621 1:&W>7_C=O3,8-+0%%%&&&"% %!'"% &!(#(#*$-( ,'*%)$(#*$*%+%-'-'/)-(,&*$*#,%.&-%-%-$/&/'.&/'0)1* .'0*3,"2+!0(-$-$0&1(1(.%-%0(0'/&.%0'3* 2).&+") -$-%.%/&0(1(.%+",$-%/'/&.&0(1).%,$-%0)4,"0)0(2+"2*!0(/'1)2* 2+!2+!2+!1).&/(2+!1* .'.'1+!2,"2+!.'.'/'-%0(2*!0(2+!/(/)0* 3-"3,!.'.'1*0)/(/'.&,%.'+%*$)#("("-'-'-&-&+$-%-&)!,$+$&+$,%.)-(.',%-&-%.&,&*$*$,%)#)#+$+$' %%% ,&.( ,&+%,&)#,&-&,%*#( ')")"' (!$%&& ("'!#!$!  """ 0/1F1&`I?N8.9"0,/0 004!6"6"6"7#9%;' <' >)!?)">)"@+#A+#C,#F.%H0'I0(H.(G.(G-(E,%C*!B+!A+">) <( ;& :%;$<#A'E)<"00'!! %' %%' ' &' *#)#)#*#& )",%*#*#-&,$)"-&/(.'/(/(+$+$,%+#+#,$+#+$-&-&,&*$+%,&+&*%,&,&*$(!' *#)#+%,&*$("+&-'+&,'.) /) .(+%*$)#*#*$*$'!$(#+&.((#%' *$*$*$*$("%$$%)"+$-&*#$"%' (!*#("*#)"(")"%$)"*$& $(",&,&+$' (!.(/) +$,&.(.()#)#,&*$.(/) ,%*#/(0) .'2+"0).'2+ 4-"2+ -&0)5-"5,!4+ 5-!4,!0)0)4-$1*!("                             - - -                                                          - -          -  #+-)&% %''# %$#   &#! %('" "!       -                     -    -   !!  -   #$         - -    -      - - -    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -        - - - - - - &!*%+%.(0* 0* .'.(.'-&)#.(+%+%*$,&-'+%,&/(.',&,&/(.(,&(!)#/) -&+%("##'!)#("*$)#,&,%+$*#,%.'.&,$)")"+$(!' ' &$%*#,%,%)")",%,%-&+$)#& )#+%,%("*$-&-&)"*#)"(!+$)#(")#)#+%*$*$*$*$*$+%)#(!)"*$+%(#&!#"$ "  "$ # =&F.#Q4(J-!>#<#=' >)">*#B+$E-%F-%G-&G/)G1+F1*F1*I1)I1(I0'I0'J1(I0'G.&E-$B+"?)!=( =( =(!=( ;':'9':$;"8 40 / 0 >*#U;5V;6="/(+0### !!!$$$$("(")$+&*$)$+&+&,&,&,&,'-(-'-'+%)#)",%-&,$,$-%.&.'-%.'1* 1* /(1* 1+!1+!/(-$-$/&0'0'.%,$0(/'.%-$0'3* 2)/&-$) ,#.%0'0'0(/&.%+") -$/'/'-%/&0'-$+",#0(1) 0) 1* 3+"2* 0(/'1)1* 1* 2+!2+!1).'.'1* /),%-&/)1+!3,".'.&/'-%0(2*!/(0* /)/)0* 0*0*-'.'0)/(.'/'-&+$,%*#(")#(#)#,',&-&-&+#-&.'+#,%)"$+$.(-),',&+$+$,$.'*$+%(#*$)#+$,$*$& #& '!-(/)!-',&-')#+%,&*#(!'')"(!' & $%' )#)#& #!#$! ""!0--9%T>4R;2B-#5!-/1 1 1 4 5!5"6"7#8$=(!>(!?*"A+$@+$B,%C,$D,#F-$G.%H/&G/'H0*H0)F-&C+"B* @)>' ='!;&"8% 7%9%8#8!8!1.1  !  '!)"'!%(!' &(!)#)"+$)"%("+%*#*#,%,%)#,%.'.'.(-'+%+$,%)")"*#*#,%-&,&,%(#)#+&*%)$,&*$(")"( (!("*$*$)#'!)#)$)#*$+%-'-'(")#)#)#*$+%("&!*%*%*%'!& '!*$*#*#)#'!$#"#(!+$+%("%!$(!*"*#*#)#(")#)#%#' *$'!%)#,&+%*#& ' .(.'*$,%/(.')"*#.'*$,&.(+$)"/(1* 2+!2+"1*!.'3+!4-"2+ .(2+!5."4+ 4+ 7/#70$0).'5.%/)("*#                              -                                                      - - - - -         "(($ &$ )('%#" " " &$'&'" -                   - - !            - -  !#   - ##"!            - - -     - -   -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -       - - - !"'"("(#+%/)0*-'-'-'*$("+$("*$,&-&-'+$,%-'-',&,&/) 0*!-'(!'!-'-&*#("$"(!("' *$*$,&+%*$*#+#-%-%+$(!&')!' ' & $#)#-'+%)#(!)")")#*$)#%("*$("& )#,&*$(")#(")#+%)#(")#)#+%*$)#(")#*$+%)#' ' )#(#&!##% "!"!##"  E/&W>3hI=S7+;"<$<& >*#A,%C-%E-%F-%G-&H0*H2,H4-H3+J2(J1&J1&J1'J1(I0'I0'F-$B) ?(>(<':&<( <)!8'6&:$:"7!3 . - 0!2<#9 0+%*!!!"% #& )#("&!(#(#)$,&+%*$+%+%,&-'-','*$("(!,%,%+#+#*".&/'-&.&/(/(-&0)0*!1+!/(,$,#.%0'0'-%,$0)1(.%.%0(1)0(/'.&,$+#.&0'0'/'.%-$*")!-$.&.&-%.&.%-$+".%0(/'0(0) 1* 3,"1).'0(0)/(0)1)2* 0)0)2+!/)+%-&/) 1+!3,"/'.&.&-%/'1* 0) 0* 0* /) 0* 2+!1* .'-&0)0).'.'-&-&.'-'*$*#*$*$*$*$-&-&*#-%-%*"+$)"%+$/(-(-(.'-&+$+$-%+%& &!)#)#)",$)#&$%'"-(/) -',&,'(#,'+&(#&!%#'!'!& %%& ' (")#$"!!#    !!! -+0?* F1'>) 6"10/1 3"4"4!4 5 6 6 9$;&=(!@+#B-%D.&F-&G.%H/'H/&F-%E-%F0)C-&B+#C+"C*A'@' ?("='#;&"6#5"6#:';(7#2:' "  %& %%(!&$(!)#)#*$)#& ' +$*#*#*#+$)"+$,&,&-',&*#)#+$( (!)!)!)#)#*$,')$(")$)#(#*$("(!("' ' '"+%+%'"& )#)#)#)#*$,&,&)#*#(")#*$)#&!&!&!+&(#& & '!)#)"'!'!$###$'!)#*#'!%"$( )!)"+$+$)#)#*$& !%+%+$'!*$-'+&)#'!(",'-'*$*$-'-'+$+$,%*$,%/)+$' -&1* 1*!0* ,%-%3,"6/$3,!.'2+ 5-"5,!4+ 5-!5.#0)/(3,#0) ,%/'                                                                                  - -  -         -    %$(*(,*(# " ! ! "&#%#" !$       -      -!!       -          ""!          - - #$!     - - -        -     - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - -      - - - % )$(#(#*%-'/)-&-'/(+%)#*$+%,&,%+%,&*#*$,&-',&,%.'/( ,&'!'!-'+%.( +%%!& '!&*#+$+%+$*$*#+$+$,%+#&#$(!' (!'!%#("-&,%)#(")#)#)#*$)#%' ("%&*#+%*$(!*$)#("*$)#'!("(")#("'!'!)#,&*$)"& %("(#% #% &!""!"!" G1'_E:nQDQ5+<#=%>("?*#A,%E-&F-%F,$F-%G0(G1)G1)G1'I0%I0%J1&J1'K2'J1'I0'G.&D+"B) @) >(=(>) <( 7'6':$9#5!1 + * -!0 31,(&*    !#"% '!("&!)$)$*$,'+&+%,'+%,'-'/) ,&*$("(!,%,%*#-%+$-%-%-&.&/(.',%0)1+!1+!.',$+".%/'0'.&,$/&/'.%.%.&/'/'0(-%,$-%/'.&/'/'-&,$)"*"+#,$-%-%-%-$-$,#-%-%.&/'/(2+"3,"1* ,%.'/'-&0(1* 0).'.'2+ 0),%-'0* 1+!2,".'-&.'.&/(1*!0* /)/) .(1+!0)0).'.'1* 0)/(/(-&,%.'.')#(!)#+%+&*$,&,%*#-%+$)",%)"%' *$,','.'.&*#,$,%*#%)#)#)$+%*$("& $$("-'-(,&,&,&*%-(,&)$&!%&)#(!& %%%%& & "!"##  !!!  +*,032110/03"5#7#7#8"9#:$<&=' =(!?*"A*#C+$E-&H0'J1)I0(F.%E-%E1)B.&B,#D,$F-"F+"F*#D($@'$;$!9% ;' >( Q90Z?5I/$/7# ""$$%' %"%(")"("'!& (!*#+$*#)"+$(!*#*$)#+&+%)#'!*#' ' )")!("& ("*%)#'!(#)$("("("'!& %& %*$+%'!%)#)#)#)#+%,&+%+%*$'!(")#'"$$$)$)$'!%(!+%)#&!'!$""""& )"("& %#$' (!("*#+$)#(")$$ & ,&*$&)#,&+%)#("("+&-'*$)#,&-'*$*#,%*#+$/( *#& -&0) 2+"2+"-&,%2+!3+!3,!0)2+!5-"4+ 3+5-!6/$1* 0) 2+".(-&1*                                                                                  - - - - - - -       -    &)()*)$ ! -!  "%  -% -                -  !    -        !!!    -    -   - - "!   - - -  - -             - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -      (#*%)$)#+%.(.(-'-',%+%(")",&,&*#)#+%)#)#*$,&+%)$+%,&*$& '!,&'!+%*$$"#& %)#*$*$*$)#(")#*#*")"' %&' '' '!& #' *$,%)#("' ' '!)#("&%' &%)#,%*$(")#)#'!)#)"(")#'!& '"%!% '"*$)#& %%'"(#$#$$"!  )G1'^E9cH*#A,%E,&G-%G-$G.$H/&I0(J2*J1'J0%J0%J1&K2'K2(J1'J1&I0'F.%E,#D,#B+"A+"@*!<'6'6&8$6#2 .) ) *.132+',  #"#'"% '!)#*$+%-'*$+%-',',&-'-(,&*$)"(!-&)"+$-%-&-%.'.'.'0)0)+$/(1+!0* .'-$-$/&/&-%-%+#-%.%.$.%/&/',$/'.&-%/'0(/'0(/'.&+#( )!)!*"-%-%-$+"+#+#.&-%.'0(0) 0) 3,"/(-&/'/'-&-&0(1*.'-&0*/(,%-'0* 1+!1+!.',&.'-&.'0) 1* /(.(.(2,"0)0).'-&0) 0)0)/(-&+%.(.(*#'!(#*%,&)#)"*$+$.&+$*#,%(!%("+%+&+&-',%*"-%-&'!%*$+%)$,&+%)"& $$(",&,',',&+%)$+&+&)$%$'!)#'!&& %& & & %" ! )*+,-..-../1 3!4!5 7!9#;&<' >)"?)"A+$B+$C*$C+$E,$G.&H/&G/&G/'E1(C0(C.%D-$D-#C,#A+"?)!>)<%>&A&C'bD9lLBR4(4 0 ! !$$#%# #'!("("' %(")"(!(!*#+$' )"*$("*$+&)#("*#&%' &(!& )#+%)$&!'")$'"*%)#& $#$"&!*%'!%("("("'!*$*$)#+%*$'!'!("'!$$&!'"'!%$%)"' $% #""""%("("& #!"(!)"(!("("'!("("# %*$)#%'!*$)#'"&!("+&+&)$'!*$,%)#(!,%)"*$+%*$%-&.'1* 1+!,%+%2+!4,#2+!0)2+!5-#3+ 2*4,!6.$1* .'0) /).'.' -                     -  -  -  -    -  - - -  -  -                                                   - -   -  -       - - -    $)()''! -  # &%"      -           -     -       -      ##     -  -    !       -     - -       - - - - -  - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - -"($+&,&*$,&-&,&,%-&/(+%)#)#+$*$("(!+%("(")#+%*$'!("*$("$%*$("("("##$%$)")#)"*#)"'!(")"( (!( ' '' &%& ' #$)")#'!("(!("(!*#)#'!%& & %("*$)#)#)#)#%'!("(")#'!& &!&!$&!)#)#' %$'"'"$ "#$ " " 3!;%E+ D* <$;%>(#>)$>+$A*$D*$G,$I-#I-$I.%K1(L2*K2(K1&K1&K2'M3(L3(K2(K2(I1(H/&H/&G.&E-$D,$C+">(9'9%:#6 2.**+2?%H/(G1+4%(-  !% #$'"% '!)#'!)#*$)#)#*$+%,&,&-'+%*$)#(!)"*#(!,%,%.&.'.'+#0)-%,%.(0+!/) .&,$.%/&/'-%-%,$.%.%,"-#-%.&+$.&/'.&.&/'0(0'.%,$*"( )!(!*",$-%+#) *!*"*"+#-&/(.',%/(+$,&/(/(,%.'0)0)-&,%0)0)-&-'0* 1*!1+!.(,&.'.'.'/(/)0)/(-'1+!0* /).(,&0* 1*!/(0* +%*$-'.')"& (#*%,&'!)",%,%-&*#*#,%)#)#+%*%($*%+%*"(!*#+#'!)$*$(")#*$*$*#& $$'!+$,&*$+%,&+%,&+%("%#'!'!'!%& %& & '!""     -)+1"0 -.//...0 2 2 26!8":%;&=(!>)!@+#B+$B*#B*"C*"E,$G/&H/&H0%F-$F+$G.&G/'C.%@,#>+!>*!>)>(;#<"F,"`D:eH>L/$6!-  !##"$# "%& & %#(!*#(!*#,%*#&' )#("*$+%("("*#%#$%%& (")#'"'")$&!$'"'!%#""% % )$% #$'!'"& )#)$("+%("% %'!& %%%& & $#%(")#% %" !!"$& '!%! )")"' '!'!& &!'!#!$("'!%& )#)#& $&!*%*%'"& *$+%)"(!*$'!(!,&+%' +%.'1* 0* +%*#.'5.$1* -&1*!4-#2+!3,"5-#6.$2+!0(1* 1)/'3+!                     -  -  -  -  -  -    -  -  -  -                                 -  -  -              - - -   - -       - -   - #&$'%$  -! $ *)##       -                   -     - $!$$""    - !                      - - - - - -  - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - -#(#+&*$*#,&,&-'+$,%.'+%*$)#*#*#'!'!+%& & )#+&(##&!'"(#"$("("'!'!##"#("("'!)"(")")#(")!(!' %&(!%$%& "")#)"& '!'!("& (!(!& $&' & (")#)")"("("%'!)"(!(!& $% % $&!'"("'!%$% &!&!"#$"   ;&8!9:!;%<' <(#>)$?*%B*%D+%G,$I-#J.$L0'L1)L1)L3)L3(L3(M3(M3(M3(L3(K2(H/&H/'I0(G/&E-$D,$C+#?)!;( :$:!74/*,-<$R6-Z>6T;37&(,   #&!#$&!$%& ("("*$,&*$)#+%,&,&,&*$)#$'!)#(!)"+$+$-&.'.'-%/(.'-&.'.(.'+$*"-%-%.&,$,$+#-%-$+!-$-%-&.'-&,%+$-&.&.'-%+#+#)!( )!(!)!+#+#*"( )!*")"*",%/(,&.'3,#1* ,%/(/(.',%.(0).'-&/(0)-&-&/) 0* 0* .(,%,&-&-&0)/(/(/(+$.(0* /)-',&1+!1+!/) /) ,%+$-&,%(!&% )$-(*%)#("+$,&*$("*$("(!+%,&($*%*$( ( )!)#(#(#)$)#)#*#,%+$' %#'!+%,&+$+$+%)#+%+%)#&#' ' '!$$#$#%    -08"P80R:1D+#9!420 1 2!3!4!5"6#7#8#:&=(!>(!>(!@*!A+"@'B)!C*"E,$H/'I0'I0&I0&H.'G.&F.%C.$B.$A-#@-#>)!=';%;#H/&\A9\A8H-$4+ -!""## !#$$##& *$(")"+$*#$$)#(")#)#'!'"*$%#"$%%& '"&!%!%!'#% &!&!$#" #$&!$#&!&!&!(#(#(#(#)$'"#"'!#$%%%& # #'!("% #!!#%& # (!'!& & &!% $% "#'!& #$(")#&!$% (#(#(#%+&,&)"'!+%*#'!/) +%'!)"/(2+!1* ,%*#/(3-#2+!/(2+!4-$3,"5.$5.$5-#1* 0(2+!2* 0(3,!,$                     -        -  -  -                                   -  -  -    -             - -    - -         -   !$#" " %! #('#!             -       "   -   ! -    ""      -  - - !  !"  -    -  -         - - - - - -   - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - -#'"*%)#)#+%+%,&)"*$,%)#)#)#)"(")#'!)#%%("*$(#% &!$'""$("'"&!% ##""$("'!& '!' '!)#'!%&&#%(!%%&%!!&' & & %'!'!' & $"$&&& &("& & & %' ("(")"'!$% % % &!'!'!& $#% % '"$$% #  >&?%B'=$7!9$"<(&<)'>*(@+'C-'F-&H.%I0&I0'I0(J1)L3(N4)O5*O5*O5*O5+O4,M2*J/(I/'H/'G.&E-$D+#B*"?( ;' :"9860+-2Q3*cB;\=6J/'3 ,,  !$!#&!$%& &!'!(#)#)#*$+%,&,&+%+%*$("*#)#&)")"*#,%-&,%+$-%.&,%-&.'-&*#*#-&.&-%+$+#+#-%,$*"+#.&/'-%,$,$,$-%,%-&,%*#+#)"(!)")!)"*"+#+#( ( *"+$+#+$-&+$-&1* /(.'0) /(,%)".'0)/(.'/(/(,%,%0) 0* /).'+%,&,&,%/(.'/(.'*#.'/) /) -&+%/) 0* /(.(,&+%-&,%(!' $'#,&*%)#("(",&+%' )"'!& +%,')$*%)")"(!'' ("'"(#(")#,&*$+$)!&#(!,&,%)#("*#*$+%)#% %"& ' '!%$$$!$"    /5 L5,X@7S:3@' 6101 2!3"4"5"7"8#9$:&=( =(!=( =(?) A) C+"D,#F-$H/'I0'H0%I0&I/'G.&E-%D-$A-%@,$=*"<(!;(!:%;&B*#L3,K0*?$40! !!"!!"#& $"'!*$' '!)"'  "("& '!("% &!("$"!#%% &!&!#$% &!% &!&!##!!$$%!#"$##'"(#'#(#'"& "##% $#$%& ! !% % %# !!#%$" && %$$#"#!!& & #!& '"&!#$ '#)$% & *%,%'!'!+%)#& ,%-'*#*$/(1+!0) )"+$0)3,"1*!.'0) 5.$5.$5-#4-#4-#1* 0(2+!1)2+ 91'0)1* 0)+$/' -                                                            -  -  -  -  -                -           - -   -    !   -" &%%  !  -        -              -   - - -     !"    - - -   - -! #"#   -      -         - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   %!'"*%*%)#+&+%*$("*$+%("'!'!'!(#'!$& %%& '!'"% $"$!#&!% $$!"#& & %& & &!&!$&!& %"#& &%#$!!' '!& & %%%'!& $""& '!#"'!& $%$%& (!("&!#$$%&!'!&!%#$$ #$!!#" C) U9/_A7L0'?&=$ =%">(%@*&B+&C-&E,%F-%I/'I1)I3,K4+M3)O5*P6,P6+O5*N4+N3+L1*J/(I/'H/'G/&F-%D+#B*!?'<$7 30..--5 U<5[>8O3-90,+    !% "$'"% % $#(#'"(#'"*%(#)$*$*%+%)#'!)#)#'!)#(")"+%-&+$*#,$-&,$.'.'.'*#,%,%.'-&+$*",$-%-$-%,$-%/&+$+$+$,%-%-&/',$)"*#)!)!+#)!)!+#+#+#( '*"+$,$+$*#*#,%0).'-'.'-&)",%-&/(/(.'.'.',%*$/)0) .(-&+%-&+%*$.'-&.(/(+$-'/) 0) -'*$-'.(-'-',&+%-&-&*#)"&!)$,&*%)#("("+$+%%(!%& +%+&($*%*#*#)!( '!("'"'"(")#*#*$*$' $"'!,&+%)"'!("*$+%*$& %#& & & %$#$ "$"   .1@+"P:3T=7H1+9#100 1!2!3!4 6 8":&;' =(!>)"?*#@+"A+"C,#E,$E-$F-%H/'I0'H0&I0&J1&I0%F.%E-%A-%@,$>*#=)"=)#8%6#6 8!8852-!  ! !"$"#"'!*#' &(!'!!"'"% '"'"% '"&!#""$% % &!$ "% % $&!& "#!!$$$ ! $" !'"&!'"&!$ $#"##$$ !$#"  !!"#!" $$% %$"""!$% !!% &!$!$)$)%$ $*$*$& & )#' & ,&-&(")#-'0)1*!+$+$0)4-#/)+$0)5.%6/%5.$5-#5.$1* 1* 3,"0(2* 91'2* 5.$4,".'/(-%(!*#'"  -                                                     -  - - -                           - -      -! $&!  !   -  - -      -       !!      - -        -     -  $&"     - - - -   - -   - -  - - - -  -    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   #"%!'#*%*$'"+&+%)$'!)#+%'!%%$*#& #& %$& '"% ###" "% % % "  $& $%#$&!&!$$$"#$$""#  %'!& & & %$'!'!%"!$& %#("& #%$%$%& $"$""$&!& $#$$%!#""!# -H-"iH;oL>U6*F)A%@& @("A(#B*#C+$D+#F-%I/'I1*I4-K4+M3)N5*P6+O6+N4*M3*L1*K0)J/(I/'G/&F.%E-%D,$B*">(8$4 2 0.--//?,&?+%1(((+ -  #!$'"&!% $$)$+&&!'"(#($)$)$)$*%(#'!)#*#&'!& '!,%,%,%)",%,%+$-'-'.(,%,%,%.'.'+#*"-%.%,$,$+"*!+"*"+#-&-&,%.'/(+$(!( ( *"-%*"*"+#*"*"'%&' )"+$+%)#)".'.',&-'-&,%+$.'.'.'-&.'-&+$(",&.(.(+%*$-&*$)",&-&-&,%*#-&/) .(*$)#,&.(.(.(,&+$,%-&+#*"($*%+&)$(#("(")"*$%'!$% *$+'($)$)#*#)"( '!("(#'"'!(")#)#)#& $#& *$*$(!& & ("*$("& "& & & & $$"# !""   0!.6"A,'G2-E0+9%1// 1!2!3!4 7 9":%;' =(!>)"@+#A+#A,"C-#F.%F.%F-%G/&H0'G/%H/%H/%G.%F.%E-&B,%@+$>+$>+$;(!:' 7#6!7!87525"!!  #""# %("%$'!'!! $#% % $(#%#"$$#$% $!!$$ "$$!" !"#"# &!%!'"% %  !#""""$#!$"!  !#"##!"#$##! " #$$!#%!$ #)$($$% )$*$%%("& ' ,&,%(!*#.(/(/(,%*#0) 1+!-&+$0) 4-#5.#5-#3,"2+!0(1* 4,"0(3+!80%3+!6.%4-#0(2+!2+!/(1* 2* /(-%,%.&,$( )"*#                                              -  -  -  -  -             - -         - -         $$" "         -  -     -  - " "     -      !  -   - $$  -  -    - - - - -     - - - -   -    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - "$ '")$&!&!*$*%)$% '!)#& $%#& #"$%##% $"#%"!"$% &  #%$#""$$$$% "#$"!$" $& %$##$& &!% " "% !"$$!$"$#$& $## "% %$$##$ #"!" -J."lG8jF6W6'G)B&@&?' A(!B)"D*"E+"G-$H/&G0(H2*K3)M3(N4)N5*N4)L3(K1(K0(K0(K0(I0'F.%E,$D,$C+"@)!=* 7%2!2"0"-,,+*.*%&''+ -   "!$% '"&!% )$*%&!% '")$*%*%)$)$(#'!(!)#%%& $)"*#+$)"-&,%*#-&-'.',&*#,%.'.'*")",$,$+"+#+#-$,$+#+#.&-%,%-&.&+#(!(')!,$*!*"+"*")!&&( )!)"*#+%)#)#,&,&+$-&,%+$,%,%-&.&-%.'.'+#(!,&.(.(*$)#-&+%(",%.'-&+$)"+%.(-(*$'"*$+&,&,'*$)#+$-&+#*#)%+&,')$)#("& ("*$& & #$("($'#)#)#)")")"("("'#'"&!'")#*$*#& ###)#)#'!'!$& )#&!$!$$%%## "!!   /!---.///../ 1!3!5!8";#;& <' =(!>)"@+#A,$B,#C-#F.%F-%F-$F.%G/&G/%G/$H/%H/%G.&F-&B+%?*#=*"<)":(!8%8%8#9#@'"A'"<"4:%!!!!!! "###& %  !##$##%$""##"! !"!#$!#$"  "# #% % % '#% " "#% $!!%# #""   !$!!"!!!  !""# #&!$ $(#'"% % (#*$& $("'!% *$+%& & ,&-'+$' *#/(1* /(+%0)3,"4-#4,"2+!3,"2* 3+!4-#1)3+!6.$3,!7/%5-#0)4,"4-#0)2+!4-#2* 2+!3+!2+!1* -&/(.'-&.(*$)#("#!                                         -  -   -          - -  -         - -   -  -   - #"   !         -                 -    -    -   - "    -          - -   - - - -   -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    ##&!(#% '")$*%*$& & '!$"$#$ "% $ #" #$#!!"#$""#"#""#$#"!#! "" ##!######$""$ ##!$"$#$$!!!  "#$##"####    I, ];-V6)H+B'>&>' >)#@)"A)!D*!F+!G-"H/$G.%I0'K2(M3(M4)M3)L3(L2'K1(K0)K0(L1)I0(F.&E-$E-$C,#@*"=+"6'1"/"/"- ,,,,+(&%#&,   !!#$&!(#)$'#$ '"'"'")$+&(#&!%("("'!& %#(")")#)"-&,%*#-'-'-'+%)"+$-&,$( *"+$,$*"*",$,$,$+#*"+$*#-%-%,$)!' ''( +#)!*!)!)!( &&( (!' '!("(")#,&+%*#-&-&-&,%-&-%-&.&.'.',$*"-&-'+%(#(#-'+%*#,%-&-&,%)")#,&.(,&)#*%,&+&+%("("*#-%+#*#($+'-()$)$("%("("%%#$'"(#(#)$*#(!'!(")#("&!&!&!(#)#+$)#& ##!'"(#("'!#& *$&!" "$$#"!      /!.+.0110/00 0 3!6"9#;#<& =(!>*"?+#@+$A,%C.%D/%E-$F-%F-%F.%G.&H/&H0%H/%H/%G.&E-&B+%?*#=)"<)";(!:&9%7!A*#X?9\B;J/'8!8$  !  "& "#&!% #!!"!"& "!!!!#%##!"!!$!  ""#% #!"$#!!& ##"" !#!"!  ! !""G.%A)!F.%M3)S7,U8-V8-U7,T6,Q5+N4*K2)G/&C,#B,#*$& %-&1*!/()"& -&1* .(-&/(2+"3,"3+!3+!3+!1* 3+!5-#2+ 5-"5-#3+!5.#4,"1)5-#6.$4,!6/$6.$2* 2* 4,"4,"3+!0(2*!/(/)2,"0* /)0* -&+%,&*$& )#& ! - -                                   -              -  - - -         - - - -   -      - !" !         -   -           - -              -   -      -   -   - -    - -     - - - -  -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  D.$ - - -   "$ #'"% &!'")$&!$% & "!##$###""#!"$ #!  !#   !"!" "##!! !##"##"""!# !##"!# "$%$!     ##! !    " #>$?%<$9#8$8$"7%#9&$<'"?)!C+ F, G,!I-#K/$M1&M4)M3)M3(M3(M3(L2(L1)L1*L1*L2*J1)F.&E-%E-%D-$A+#>+#:)!4$0".!. -,,,+,,'$'+  !% % $(#($&!% % &!&!% *%)%'"& '!("& %#'!)")#("(!,%+#*".',&-')#)",$-&*#&+#-%-%+#)!+#,$+#)!(!*"+#-%,%*#' &&')!+#*")!)!( '%&(!(!(!)#*#*$,&,%.')#+$-&,%,%,%-&-&-%.&/',%+$-&-(*%'#($,&+%*#+#+%.',&)#+%-(-',&(#)$,'-',&("'!)"*#*")"&"*&,('"'"("'!'!'!$$##'"'#&"'"("(!(!)#)#("%!% '"(#)#)#("& ""!'"(#&!& "&!*%% ! "$$"         0"----01/001 1!3"6"9#<$<% <' >*#A,%A,%A,%B-$D.$D-$E,$G/&H0'H/'G/&H0%H/%H/%G/%F.%C,$@+$>*#<)";(!8%8#8"E,$bH?dH?O3)="8#    !" $" !!#$  !!& !!""" ""  !""! ! !$!"!  !" B+"_?2W8-M1(D+"<&;'>)"F/&N5+T9-V:.V9-U8-U8-R7,N4*J1'F.%B,#,%' #,&0*!/(*#(!/(2,".'-&/(2+!3,"2+!2+!2* 0)2+!2+!4,"5-#5-"2* 4-"4,"1)5-#5-#3,!6.$4,"3+!1)5-"5-#6.#3,"3,#1* 2+"6/&2+!2+!3,"2+"0* 0) /()#.'/) )$(#)$*%*%% "" -          -                                 - - - -            - - - -   -        -                -  -   - - -     "!        -     -    - - - - - -    - - - - -  -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  B,"E.$H0%K2'O4(R6*T6+U6+W7-V7.Q5+L1(E-$?)!<&:%$ %!'"% $% % !!"#!!   #  "## ! !#! !!#    !$$#  !""!   ! !!##!!   "" !09!54 3"4$"4$#4$"7'#;(">)"B*"E,!H-!I."J/#K0$J1&K2'K2'L3(M3(M3)M2*L1)K0)J0)H/'E-%D,#D,$C+#A*#?*#;("7%2"/!/./129%K7,S?5>,$+(*   "$ #&"'"&"% %!&!(#'"(#(#("& & '!%& $'!(!(!' '!*$)"& +%+%*$)")"+$-&*#&+#-%+"+#*")",%+#)!)"*#,$+#*#)!' &&' *")")!( ( ( '%'( '& (")#)#*$-'+%("(",%,%,%+$-&-&,%-&-&,$+$-'.(*%(#)$*%*$*#+$+%-&,%)#+%-'-'+&)$*$,'+&,&)#& )")")"("&!)$)$% '!)#'!'!& $"!"&!%!%!'!'!&' (")#'"%!%!'"("("("'"% !"("'"$" %!(#$! "% #"         /!--01100/01 2"4#5"8#;#<% ;' >)"@,%A,%A,%A,$A,#D-$F-%G.&H/'H0'I0(G.%D,!E+"E,$E-%D-%A-#?+"<* ;':%6 9"@'dJAhLBP3)=5 - "" "! ! ! $! "! #" "!    #!!!   "!!>' ?( 9%9%:%>' J/&R5*N1(H-&A)"<' ;(!=*#A.&I2*Q7.U9.U9-V9-V9-U8-R6,N3*I1'D-$A+!&$-&1*"/( *$*#2,"3-$0).'0* 3,"2* 1)2* 1* 1) 2+!3+!4,"6.$5-"2+ 5-"4,!1)6.#5.#2* 4-"4,"2* 4,"5-#7/%6.$4,"4-#1* 3,"70&2+!3,"3,"2+!2+!2+!2+!.'1*!3,"/)/(0)0(/(0)-&-&.(-',&+%+& &" - -                         -               - - - -           -                 - "   -            - -    !"!!!    - - -       -     -     - -   - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A+"C-#G/%K2'N4(R6+Y;0aB7eE;bB9Z=3R7-I1'B,#=( ;&:$9#9"8"7"7"=&$ !!"!!! !!"      ""!  !"    !"!! >( :#:$8%4#4$"3$ 4$ 7& ;(!=)!A)!E+!H-!G-!F-!F-"G.#I0%K2'L2(L3(M2)M2+L1*K0)J0(G/'E-$C+"B*"A)!@)"?("='":&!7$ 4#2 001:#M7,YC9ZD;=*"+('   !#$% % $$&!'"'"#$% % $#& & % ' )#'!%& )#' %*$,&)#'!'!*#+#' ' +$+#*"*#)!*",$,$)!)!+$,$)!)!( &%&(!+#)"(!( ( ( '%' ' ' && (")#+%-(*$(!& ("*#)"+$,%-&-&+$+$+$+$,&,&*%)$($)$*$)"+#,%,%*#)"*$+%,&,&("(#,&+%+%*$'!)#*$)"("(#)$)$&!'!'!' '!$# #% $ % % &!$#'!("("% % &!'"'!% &!$  !&!&!"! % % "  #""          -. -,6#B.'<' 42101 2!3#5#8#;#<$;& <(!?*#@,%A,%B-%A,#C-$G/&G/&G.&G/&H0'G/&E-"E,#F,%E,%D,$@+"=* ;(:':&;%:#>$\B7fJ@L.%<6      !   !"" !    :$:$7#6"6!7"7"6!5!5 6!8"=#?#@&>& >(">)#>*$@,%E0(L5,S9/V:/V:.V9.V9-U7-Q5+M3)H0&D-#A+!!,&/) ,&(!+$2,#2,#1* /(0* 3,"3,!2+!4-#3,"2* 2*!3,"4,"6.$5.#3+ 5.#3+ 1*7/$5-#3+ 5.#7/$3+ 6.#6.#7/%6.$4,!6.#2* 2* 7/$5-#5-#4,"2*2*3,!3,!1*4,"5-"2+3+ 4, 3+7/#3+ 2)5,!5,!4,!2*5-"5-".'.'2+ 2+!/(,%+%+&                 -  - -        -  -      - - -                      !  -  -          -      -    !!  !    -  -  -   -       - - - -   - - - - - - - - - -    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@*!C,#F/%J1&N4(R6+V9.[=2`@5_@6[=3R7-J1'C,#=( <';%9$8"8"8"7#7"7"6!5 5 6!>&!!! !      K1'V:0V<2L4*>( 6#6#7$8%<'!>) A+ C,"E-%D.$C.#E.#H/$K1&M3(M3(L3(M2)M2+K0)I/'I/'H/'F.&E-%C,$B*"@& >% >&";%!7#3!2013J2)YC8\E) <(:'9&9%7#6!?+$@-&5#/1   "     6!6!7"8#8#7#6"6!5!6!6!6!5 5 5 5 5!8#=& F-&O4-O5.K3,G0*A+%@*$B,%F/'M3*R7,U8-V8-V9-V8-T7-P5+L2(G/%B,"@*!+%.()#& ,%1+"0*!-&.'.'/(4-"3,"2* 5-#2+!2* 3,!4,!5-#6.$1)4-"2* 3+ 80&4-"3+!6.$81&3+!6.$6.#6.$5-#5,!8/$4, 3+ 6.#6-"5-"4,!3+0(0(4,!2*4,!6.#5,!7-#7-#8.#9/$5+ 6,!9/$9/$9/%6,"90%7.$2*4, 91%:2'7/$3,"3,"6.%4-#2+"+$*#,%*$("  -                        - - - -               !!!"                  - -    ""!    - -   -      -  -     -     - - - -  - - - - -     - - - - - - - - - - - - - - - - - - - - - - -A+"C-#G/%J2'N5)R7+U8,U7,V6+U5+R3*N2(I0&C,#>( <'<& ;%:$9#8#8#8#7#7#6"6!7"8#7"6!6"7#8#;%:$   V8+hD3fD3W8)E)9!:#;%;&<'>*!@,"A-$C.'C/(D0(H0'K1&L2(M4)M4)L3(L2)L1)J/(H.&G.&G.&G/&E.%D,$B*"A(!?' =&!:% 7# 4 21/4R:2YB9P927!,*&( !#" !!$ $ "##""#$#" &!& & %%("'!%)#+&+&("& (!( ' *#+#+#*"(!(!*#*#*#&' +#*#)!&%%%&( )!(!(!(!' ' &%'' ( &%("(!)")#,&(#'!("' ("*$+%+%,%+$+$+$*#*$*%+&)$'"(#)#( )",$+$+$*$)$+%+&*$&!'"+&(#)#)#%& '!& &!'#)$+&'"&!%& $" !#$% $""%& %%#####% %  !%!$ "!       ,,5O4,[>6Z<3I.#50/1 3 6 8#8&7);)@)!A)!B*"C,#E-%F.&H/'H0'H0'I0(I1(I1(I0(H0'G/'F.%D-$C,$C+#A)"?(!<(!;' :&!7$3!4"6$3!-1'  24 5!6!6!7#7"6"6"6"6!5 45 6!6!6!5 5 5 5 5 7":%H0(X<2^?6[=4U90K1(A)!@( B*!G.$N4*S8-V9.W:/V9.T9-Q7,N5*J2'F.$B+"@*!.'*$'!-&1+"1+"0).'.'/(5.$5-#3,"4,"3+!1* 2* 4,!5-#5-#0(4,!1)3+!80&3,!3+ 6.#7/$2+ 5-#5.#6.$6.#3+ 91%4+3+8/$6."6-"6-!5, 4+ 3*5, 3*6."70$5-!7/#90%:0%;2'7-"6-":0%:0%<1'8.$;1&:0&7."90">5'>5';2%6-!90$;2&80$7/$2*1)4,"3,#1+!-(+&+&*&*%)$% -                       - - - -          -        ! -                    -   !"!  -  - - -    -     -     -       -     - - -    - - - - - - - - -   C-$F/%J2'M5)Q7+T8,V8-W7-X8.V7-Q4*K1'E.$@*!=' ;&:%9#9"8"7"7"6 6 6!7"8#8$8$8#8#7#7#9$9%:%9%:%;&<%:%:$   U5+c?4b@5U5*D&9;"=&=&=(>* @,#@,$A.&B/)D0+I2(K2'L3(L3(M3(M3)K1(J0(M3+L1*I1(I1(H0(F.&C,$A*"B)"?(!<%!8$ 6$ 4"3 1008"=(!3,'&$(!#"##!$"#####!"!$& '!%$("'!$*$,&+&& $& ' &)!)!*"(!'')"*")"%'*"*")!' $%%%(!(!&' (!' '( %%''$$)"(!& '!+%*$(#(#'!(")#+$+%+%*#+$+$(!)#+&+&)$&!&!(#' (!+$*$+%)#'!'")$)#% '"*%)$)#("%%&%%&!)$)$$&!& %$!""$ $" % %& #!"##"#!$ #           - -+*-;$P5/Y=5W=39%/-.258!9$8(;)?( @)!A*"C+#E-$F.&H/'G/'G/&H/'H0'H0'H0'G/&F.&E-$C,#C,#C,$B+#@)!>' <& 9%9%8$8%7%7$.11     24 5 6!8#7#7#7"6!5!5!6!6!7"7"6!5 445 5 434455 6!8#<&I.%S4(U5(O2(H.%A*!=) >) @+"H0'P6-U90W:0V:0T:/R9.O7,L5)I2'E.$A+!A*"+$("+%1*"1+!/)+$+$/(6.$4-#3,"3+!2+!2* 2* 4,!5-#4,"0(3,!0)2+ 7/%3+ 2* 6.$5-#2+ 5-"6.#80&80&6."6."4,!5-"90%7/#7."7."3*5, 6-"5, 5, 8/#81%6/"92&:2&80$:1%6."5-!80$90%:2&80$;3(<4(91%:3%=5(=4'<3&:2%<4'=5(;3';2&7."4, 8/$80%7/$6/#3, 4-!3, 2*3, .')#*$'!+&($!" -             - -   - - -         - -          -  -             -         -       -    -   -    -     - - -      - - -   - - - - - - - - - ""#'!#' ' $(!+$& #&!%!%!#!#& ' '!&!% $ !   "  E-%F.'K1(O3*R5+U7,Y:.^>1`?2]>2W9.N3)G.%A+">(!<' ;%9$9#8"8"7"6"6!7"7"7#8#8$9$9$9$9$8$8#9$:%;&<&<&<&<&<&='<&:$8#6"         -I,#S6.T7.E*!:: >%=$='<(>*?-!A-"B/"C0#D1#I0%J1&K1'K2'M2(M2(L1(L0(O4,L2*J1(I1(H0(E.%C+#A*">*!=)!:("7'!4%!3#2!0/...*(%$%( #!# ! ####!#""!"%% ""'!& #("+%+%%%'!%' )")!)"( %'(!("(!%&(!)!( &#&' & )"(!& ' (!&%)"$%' ' #"'!%& '!)#(#(")#'"'!'!)#*$*#)#*$*#& '")$($%!% &!)#'!'!+$*#)$'!% (#*$("% (#*%*%)#'!%$%%% % &!%!$% % $"  "!#$ ! % % %$"!!!"#!  #!        (&$,7#F0(K5,8&,+,0489"9%:'=&>'@( A*"C+#E-%G/'H/'H/'H0'H0(I0(H0(H/'G/&F.&F.%D-$C,$B+"@)!?' >&=' ;%;$;$=':$547#           <(34 6!7"8$8#8$9$8$8#8#8#7"7"7"7"7"7"8#8#7"6!6!6!6!6!5!5 5 455!6"7#8$:%=' >(!=' <&=(?* @+!B,!E.#M3)U8.X:0X:0W90V90S8/P7-M4*J2(E.%A+"A+"$& .'/(-'+$,%/(4-#3,"2+!2+!1* 3,"4,"2* 4,"4-"0)4,!1)2+ 70%3,!3+!7/%5-"3+ 4-"6.#91'80&6.#7/$5,!7/$;3'7/#7.#8/$4+ 5, 8/#7/#6-!90$;3%6. 81#91#91#91$6-!6-!91$80$81%81$<5(<5(:3&<4'>7*<4(;4';4'>7*>7+=6)<5)92%5.":2&:2':2'91&5.#80%5-!5-"7/$1).&1*/'4-"3,!-&/)2,"0*!0*!3/%95+<7-<6,<5* - -     - - -   - - -         - -       -  -     "     -          - !        -   - -      - - -      -   - - - - % '!&!! $'"(#'#)$*%'"'")$,'(#)$+%*#("+$+%(#& (")#+%.',&*$*#+$,%)"-'/) *#-&.'/'1* 2*!,%+%.(/(-'-&*#,$.'/( .( .( -( *%("%& (")#% &!&#%!&!$ ##!E-%F.&I0(N3*R5+T6,Z:/b@4fD7eD7^?3S6-I.&B*"='<&;%:$9"9"8#8#8#8#8#8#8$9$9$9$9$9$9$8$8#8#9$:%:%;%;%:%;%;%;%<&<&;%:$:%;%:$8#8#?)         6!7"7#9#9$6"8$;(!;' =)"?+$@,$B-$C.$E/%F1%J1&K2'K2'L2'N1'N1(O2(O2(P3*N2(J1&H/%F/$E-#C+"A*"@($>'#;'#8&!4$1"0!/-,+)%#""$)  "!  #"!"! ""#"#!"%%!!& & $'!)#)$&' '!$%)!(!' ( &( & ("(!&&' ( '&#'(!(!("'!& %&$$( #%'' $#' ' % &!'"'"'!("'!& & (")#)#("*#'!&$)$'#%!% $'!'!'!+$("(#'!%(")#'"#% '"(#'"&!$#%%#&!'"% #$&!#" !  #! $% ##""" "" !      -)$ !#).*'().479 9#:&<&=&?( A)!C+#E-$F.&G/'H0(I1(I1)J2)I1)I1(H0'G/'F.&D-%D,$C+#B*"@(!?&>&=&@( I0)Q90P8.@(5:$        @,"5!4 5!7":#9#9$9$8#8#8#8#8#8$8#8#8#8#7#8#8#9$9$9$8#8#8#7#8#8#7"6!5 44446!7"7#7#9$?' F+#I.%I/%H/#F-!D+F- J/#P3)W7.Y90X90W90V8/S7.O6,L4*I2(E.$A+"A+")#/) ,&'!(!,%0) 4,#2*!1) /'-&-%4,"2+ 1*4-"1*5-#1)3,!91&5-"4,!6.#3+!2+ 4,!6.$80&7/%5-#5.#4,"5-#91&7/$5-!80$6."5-!80$6."4, :2&<4&7/!81#91#;3%:2$7.!7.!91#81#81$92$=6(<5'92%<4(@9,?7+<5)<5)?8,@9,=6*=6*:3&6/#;4)<5);3(;1'8/$<3)6,"8.$:0'3)1(5+!3* 8/%6.#1)4-"60&60&71'94*<7,>8.?8-?7+  -    - -   - - -         -      -  -                     -     -   -    -         -      -       =6,:3)81(2,#2+#0*!+%)$($(#)$+&+%.'*$*#*#,%/).)+%.) 0*!0*!,%.(-'-'+&-'/)!0*"*$%*$,&/)!1+#2,#2,$2,#/(+%/(2+"1* 0* 1* /(.'1)1+ /(-'.(.'0) 4-#3,#1* /'0(3+".&2*!2* -%/'0(3*5-"4,!1)/)1+!2,"0* 0(.&0(2* 2+!1+!1*!0) -'*#)"(!+#,%&& )%)$(#&!% % C,%D-%F.&I0(L2)P4*T6+X9-[;/]=1Z<1Q6,H/'B+$>(!<&:%:%:$:#9#8#8#8$8#8#7#8#9$:%:%9%9%9%9$7#8#9$:%;&;%:$:%;%;&<&<&<&;%:$:$:$;%;%;%;%<&8#7"5!='      ),- /!2$5'6'6&9(!;("=)#?+$@+%C+%E-%H.'I0'K2'L3(M3)M2(N1'O2(P3*P3*P3*N2(K1'I0&F/$D-#B+!A)"A'%=&$:$"7$ 4"2 1 00.++*%"#%  -!!""! "% !!!!"$&  !'"%$%'!)#%&& $' (!( ' ( %( %(!(!' ' (!(!'&%&&& '!'!& %' %%&#%&' $#$' "% '"&!%'"'!%& '!(")"'!(!'!%$(#&"&!%!% '!' &(!'!("'!%'!)#'"% &!(#&!% % $"$""$ '"&!$% % "#   # #$"!  !       - (#!&)+*'()-3689#;( ?*"A+#B+#C,$D-$F.%F.&G/&I1(J2)K2*K3*J3*I2)I1(G/'F.&E-%D,$C+$C*#A)"@(!@' @'C*"I0(N6-S:1N6,B* =& -          L7*B-#7"4 6!7";$;$;$:#:#:#:#9#8#8#8#8#7#7#8#9%9%8$9$9$:%;&;& :%9$9$9%9$7"6"6!6!5 5 5 5 6!6!6!7"7#8#:%B*"N2)X:0\>3\?3S7+J0#G- I-!L0$S5+X90Z:1Y:1X90V8/S7.O5+L3)I1'D-$A*!+$.(-&)#*#,$/'0) .&0(0(0(,$5.#2+ 1*0*3,!7/$0)4,"7/$4,"3+ 3+ 2*2*5,!6.#80%6.#5-"7/$4,"5-"91&6.#5-"80%5-!6.#80%5-!4, :1%<2&:0#;1%:0%;1&:0$9/#9/#:0$90#91$:2%>6)<5(91%:2&?8,?8,=6*=6*?8,?8,=6*@9-;5(70#<5)=6*<4);2(:2'>4*7.$9/%<2(5+"5+!7-#3):1'8/%5,"7/$:3(:3(;4)=7,=7+?8,?7+            - - -  -            -   !"             -         -   -    -     -    - -              -  ;4)<4*=5+81&:2'91'4,"1* /).(0)1*!2+!2+!0(/(1)0)4-#3-#/)2,"81(5.$5.$5.%5.$5.$3-#5-$4-#5-$2* )".'1* 3,#6/&6/&70'60&4-#2+!5.$6/%3+!5-"7/$4, 1)3+4-!1*0)1*3+ 3,!80&5-#3+!0(2)7/%/'3+"4+"2)3+ 3*4, 7."6-!3+ 1*3,!5.#3,!0(/&1(3* 4,"3+!3,"2,"0)-&+$+$.&/'(!("*&(#("&!% B,$C,$E-%H/(L1*P4+S6+V7,W7,Y9-W9-Q5+J0)D-&?)#<'!:%8$8#8#8#8#8#7#7#8#8#8#9$:%:%:%:$9$8#8#8#8#8#9$:$:$9#9#9#:$:$;%;%;%:$9$:$;%:$:$:$;%;%;%<&<&<&9#7#6"='H0$            8$+-/"1#4%6&8' :(!;)#>*$@+%A*%C)%G,&K/(K1(K2'L3(L3(M2(N1'O2(P3)O3)O2)M2(L3(J1'G0%E-#B+!@)!=&!:& 8&6%4#3!2 2115!?,%B2*4&'$$   !"  #"!""   "$& #%$$& '!("'!%%$$%("'!%%&%&' ' ( )!)!$$' ' &%%%%$& $$$$$&'$##&#&!(#&!#% %%%& (#*$("'!)#& $'"'#&"% $'!' $%' ("'!%& )#'"#"$&!$$" #!!"% % $&!'"#$!!!!! "#!   -       - )$#%,2:"6 *))-136 8$;(>* @*"B+#C,#D-%F.&F.&F.&H/'I0(I1(I1)I1)I1(I0(H0'G/'G.&F,%D+$C*#B)"@'!@' @' @' B)#D,%M5-S;3F.&:#               R=.F1&:&4 6!7"8"9"8!7 8!9":#;$;$:#9#9"9"8"7!6"6!6!6!7"8$9$;&<' ;& :%:%;&;&;%:%9$8#7"6"6"6"6!6!6!6!6!6!6!6!7"8#9$;%E,$Q4*X9.Z<0W;/N3(G.#G.#I/%N3)U8/[;3\<3[;2Y:1V8/T7.P5,L3)H0'C-#A*!.(.(,%+$,%/(0) -&/'/(,$.&2+ 1*2+ 3,!4-"5.#0(1)5-#2* 2*2*1)0(4,!4+ 90%6.#5-!7/$4+ 5,!7/$5,!4+ 6-"3+6-"7/#5,!5-!8/#:1%9/#:0%:0$:0%:/$9.#;1%:0%9/$9/$;1&?6+?6+;2%=3'A7+@6*>4(?6*B9,@7+>6)C;.=5)80$=5)=6*;3):1';3(<4)8/$90&<2)7-#6-#8.$4* :1':1&7.$91&=6*;4);5)=7,=7,@8-?7+         - - - - - - -        -    -  ! !!                             -     -   - - -           -  -    ?6+?6+>5*90%;2'<4)91&5.#1* 0)1* 3+!5-#3* 1(4+ 4, 3*80$7.#4, 7/#;4)70&81&70&81'81'6/%:2(81'70&5.#+$1)5.$7/&80'80&92'91'6.$5-"5-"6-"4, 4, 7."8."6- 6-!7/#4-!2+2+ 3, 4,!81&6.#7/$3*4+ 90&3*5,!4,!3* 5,!6-!5, 7."5-!4, 3, 4-"6/$5-"2)1'3*5-"6.$5-#3,"4,"2+!.'-%/'1) 1( *#*#,&("'"'!% B-%E.'I1)M3,O4+Q4*U6+X8-X8,V7+Q4*L1)F.'@*$=(";&"9%!8$8#8#7#7#7#7"8#8$8#8#8#:$;%;%;%;%;%:$8#8#:#:#:$:$9#8"8":$;%;%;%<&='<&<&<'='='=' =' ='<&<&<&<&;%;%;%;&<&8#6"4 ;&F/$Q7*             >&>'C-$A,#:'7$7%9' :' ;(!?+$A,%B*$D*#G,%K/'K1'K1'K2'L2'N2(N1(N1(N1(N1(M0'K0&J1'I1'G0%D-#C,"=(:&8%6%5$3#3!2 336E.%U?6XC:B.%.'&  !#! ##"!!"%!% "#$#$%& "& %"$$&'!%$& %&%&&(!)"' $&& %%%$$$%%###%%&&%$%& $& '"% % % % #$%'!)$("(#)###% '#'"% #& & $&'!'!& $&("'"$"$% $$#!#$!#%!$#$&!$$!! "  !         - .*+-5 >& H/(L2+>(10/03 6"8%9(;*>* A*"C,$E-%F.&G/'G/'G/'H0(I0(I1(I0(H0(H/'G.&F.&G-&F-%E+$C*#B)#A("A)#@("?'"=&!<% 9#6!436"                _J7R>.G2&;'4 6!7"8#8"8!8!8!8!8!8!8!8!9":#;$<%;$:#9"9"9"8"7"8#8#8#8$9$:%;&<' >(!>(!=' <'<&;%:%9$8#7"6!6!6!6!6!5 5 6!7"6"6"7#8#8#8#:$@'E( I+#I-&G-&D,$C,$E.&H0(O4,W:2\>5]=4[<3Y:0V8/S6,O4*K2(F/%B,"@*!/),%(!,%.'0(/(.&/(,$-&3+!3,!3,!0)1*80&1)3+!5-"1*1)3, 0(2)2*5,!:1&8/$4,!8/$2*5,!7/#4,!4,!6."3+5,!6-!4+ 5,!7/#80$7/#90$80$80$6."91%:1%90#8/#90$;2&@7+A8,<2&>4(B8,@6*=3&@6)C9,A8*?6(D;->4':1$?6)>5';4':2&;3'<4(91%:1&=4)7.#7.#8/$6-":1&91&7.$:2&?8,?7,=6+>7+?8,A9-?6*    -    -    - -            -                              -   -   - - - -         - - - - -  >5*>5);2&>4(?5)=3(91&5.#4-!7/$80$90%8.#4*5, 6-!5, ;2'90$5, 80$=6+;3):2(92':3(:3(:3(<4*;3):2'6.#.&4,!7/$7/$70%70%81'91'6/$7/$80%:2&6."5, 7."6-!6, 8."91%70$3, 4, 5-!7/#:2&3*6-"5, 5, 8/#5,!4+ 3*3+!7.#6."4, 80$90$6."3, 4-"6/$5.#4,!2)2)6.#5.$3,"4-#3,"2+!.',%/'2*!1) *#*#-')#& $A,$C.%I0(O3*R5+U6,Z:/_>2cA4bB5\=2R5,H/'B+#<':%9$8$8$8$9$9$8#7#8#8$8$8#8#9#:$:$;%;%;%:%9$9#;%>&?&>%=%=%<$<%=&='=' >( >(!?)!>( =' >( >(!=' <&='=' =' ='<&;%:$:$:$;%<&<&;%;%;&<&8#6"5!;&F.#O6)        J/%U8.^A7R6-A&<#<$<&=(>* ?+!A,"C-#E-#F-#H/$K1'J1'K1'L2(O3)P3)N1(L0&P4*N1(J0%I0&I1'G/%D-#B+!<(9%7%6%4$2"2 235;!R81X>7R:27 +%%   !     !!$% """ "#%'!#$#"$'!' $#%%%$$&' (!$"$%$$$$#"$$#$%$%' &##%& $$$$% &!&!##$%'"&!("("%"%!'"&"$"%%#%& & & $&'!'"$"$% $"& """ "% ""#$&!% !         - **+3 ='E.%M5+B,"3 11 2 5 7!9#:%;(=( @)!B*"C,#D,$E-$E-%F-%G/&H0'I0(I0'H0'H/'G/&G.&F-%E+$E+#D*#C*#B)$A*$A)#@("?'!=%:#7!4 11           K2$H/#D,!@);%19$9$9$8#7"7"7"8#8#8#8"8!9"9"9"9"9":#:#:#:#:#9"8!8!:$<% <& <' ;&:%:%;%<&;&;%<&>( >( >( ='='=';%:$9#7"6!5!6!6"7"7#7#8#8#7#7#7#7"7"7"7#9#=$@$B'"C*$D,%E-$F-#H.#K0$P5(U:.Y=0Y=1W<1V;0T9/Q7-M4*J2(F/%B,"@*!C+#C+#C+#B+#A+#@+#@+#@+#@+#A+#@+"?) =';%:#=$I/$U9/U8-N2'B*"6$3 5"2)4,!91&8/$5,!8/$2*4+ 80$4,!5-!5-!3*5-!5-!4, 5,!7.#8/#80$91%8/#8/#7."90$;2%91$80#91$<3'@8+@8+=3'?6)D:.@7+=4(?7+B:.?8+=6)@8,;2&:1$?6)=4';4(;3';3'<4(:2&91%=4(8/#8/#91%7/#:3&92%70#;3'?7,@8-?7,>7,?8-@8-=4(    -   - -     - -       -        !      -           -  - -         -     - - - - - -  -    - - - - - -  >5*=4);2'=4)>5*=4);3(80%7/#:2':1&;2';1&5+6, 8/#6- <2&<2&5+:1%=6+<5*;4);4)<5*:4);4);4):3(92'70$2*4-!6.#7/$81&81&92'92'6.#5."7/#91%6."6-!80$8/$7."90$91$91%5-!4, 5, 6.":1&8/#:1&5,!5, 7.#6-!6-!5-"4,"6.#6-"5,!;2';3'7/#3, 4-#6/%6/$6-#3)1'3+!4,#2+!2+!2,!2+!/(.&/'2*!2*!+#)#)$&!'!C,$D.%H0'M2)P3*S5+V7+Z9,_>0eE8eF9X:/K0&E,#@)!=( <&;%;%;%9$8#8#8$8#8#8#8#8#8#8"9#:$9#:$:$;%;%=&>&@' A("B)"A(!@' A(!B)"C*#C*#B*#B*#A)"@)"?)!>(!>( >( =' <';&;%;%:%;%;&;%9#9$<&=' ;%:$:%;%<&<&=' >(!>( <&:$;%;%@) D,"G.#J0$      K2(R9.V=2K2(>$=$>&>'?( @* @+!A, A, C.!E/"G1$J2'L4)N5*O4*N2(N2(N1(N2(S6-O3*I0%I1&J2(G0&C,"A*!=)!9&7&6$4#2!1 235<"V<5U<4J1)-' #%  -!  !#" ##!#$$##!!#& & $#$%%%#$&&"!#$$$##"#$$#$#"#%%##%& %#%& %& %#$$$& '!("& #!% &"&"$"%$#%%$%$$& % #!#% &!#&!""" #%  "#"#"#! -        +)(*.27"7#4!2!2!2!5"7#9$:%<'>(?) A*"B+#C+#D,$E-$G-%H.'J/(K0)L1)L1)L0(K/(K.'J.&I-%H-$E,$D,$C+%B+$A)#A(!B(B'A'=%7"315"          M4&I1$D."?)9$1.;$:#:#:#:$:%:%9$8$7#7#7#7"7"7"7"7"7"7"7"8"8"9"9#9#:#:#;$;%:#9"8"9":#<%=' >' =' <&;%;%<&='<'<&<&<&=( >(!>( =' >( >( =' ='<&:%9$8#8#9$9$:%:%:%9$8#7#7"6"6!6"7"8#<%B(!I.$N3'S7+S7*O2%K-!J-!L."R4)X:/Z<1Z<2Z<1Y;0W9/S6,P4*K2)G0&B,#A+"C+%D,&B,%@+$@+#@*#@*#A*"@+"@,">+!<) <(;&:%;%?(!B+%B*$='!9%5#3!4!5-!:1&7/$4+ 80$3+ 3+ 7/$4+ 5-"6-"3*5-!5-!4, 4, 7."8/#90$91%7."8/#80#91$:1%90#8/#:2%;3&A9,?7*<2&@6*E;/@7+=4(?8,C;/>7*;4(<5(80#91$>6)>5)<4(=4(<3(=4(<3';2'=5):1&90$:2&8/#:2%:1%7/#<4(=5*?6,>6,>7,?7,@7,        - - -   - - - -      -                -        - -          -      -   -  - - - - - - - - - - - - - - -   =4)>5):2&;2&>5*<4(<3(91&7/$91&91&;3(;3(3*4+ 7.#5,!=4)=4)5, :1&=5*<5*:4):4):3(:2(:3(:3';4(92'70$4-"5-"7/$70$81&82&81&:3(7/$5."6.#91&7/#6/#80$:1%7/#90$:2&90$5-!5-!7."8/$;3'80$:1%6-!5,!90%7.#7.#6.#4-#6.#8/$7."<%D*!O3+S7/P4,K/(C(">$<$;%<% =& ='!>'!>'!>'!?'!?'!@("@("@("@("?'!>' =/'B+"C,#F.%J0'N2)P3*R4+T6+U7+Y;/[=1U8-N1(J.%E,#B*"?)!>( >'>%<%;%:%:%:&:%9$9$9$9$9$:$<&=' ='<'<&='>' ?( A(!B)"B)#C)#C*#B)#A("B)"C*$D+%D+$C*#B)#B)"A(!A(!@(!>'<&<&;%:$9$9#9$9$:$:$:$:$:$9#9#9#;%=' >)!=( ='<'<&<&<&<&;&;%;%;%;&<&;%<&<' 4 5!>'B* E,!F-"     8$8%<( =) ;%:$<%>'!@("A)$A)$B*%D+&F-(H/)J1)J2(L3(M4)O5*P5+Q5+Q4*P3)P4*P4+N3)K1'I0&H0&E.#A* =&>(";% 9& 4"3"1!2!2 239"F/)F.(:#( % $'  -  "! !##$!$%""$& #!!%' %"#&$!"$$$"!##$#"#""$$$##$%$$'!$"$$##$$%& & % "!% (#'!% #$#!""#& $!"!! #$&!% $!! !"!!!"!! !            .+)&'*,/1233!4"5$7%9'<(?)@*!B+#C,#D,$E-$F-%G.&I.'I/'J0(K0)K0)K0)K0(J.'H,%G,$G,#E+#C*#C+$B+%B*#D*#J0'Q7,Z@5]C9L4*;$42         K2$G/#D,!:&5!/,8!8!9":#:#9"9"9"9"9"9":#:#9#9#8#7#7#7#7"7"7"7"6"6"7"7"6!5 6!7"8#:$;$:$;$;$;$:$:$:#9#:$='=( >( >(!>(!=' <&<&='>( >( >( >( =( =' =' ='=' =' =' ='<&<&<&:%8#9$9$:%:%:%:%9$8#8#7"6!6 7 8!9":#B)!M2(X:/`A6gH>]>4P1(K,#L-$N/&S4+Y90[;2[<3Z;1Y;0X:/U8-P5+K2(F/%B+"A+"B*$C+$B+$A+$B+"C+!C+!B+!@*!>)!<)!;( ;(!:(!9& 7%7% 8$ 7#5"4"2!2 3 80%6."3+:1&5,!5,!6."2*5-!7.#3+5-!5-!4, 5-!7/#7/#7/#91%7."90$:1%91$:1$90#90$;3&:2%@8,>6)<2&A7+D:.?6*=4(@8,B;.>7*<5(<4(91$91$?6)=5(<4(=5)=4(=5)=3(<3'?6*;2&:1%;2&8/#;1%;2&8/#=5)>7+?8,=6*;4)>6,@8.     - -     - - - - - - -                              -   - -       -    -  -   -     -   - - -   -  >5*90%80$=5)<3'<3(80%91&91&7.#:1&;3(4+ 4+ 7.#3*=4);2(4+!;2'>5*=5)<4):3):3);5*:3(;3'=4)<4(7/#4, 6."7/$80%:3'81&5-#91'70%5.#5.#81&6/#6/#:3&70#70#92&:1%6."3+5-!91%;2'<3(91%91%6."4+ 6-"5,!5,!5,"4,"6.#80$7#9#;%='>(!>(!;& 9$:$:$;%=& ='!>'!?("@("A)#A)#A)#A)#A)#A)#A("@("?(!>' C-#F.%K1(O3+R5,T6.V7-W8-W8,U7+R4)N1'J.$E+"A) ?( =( <' <' <&=&=&<&;%;%;&:%:%:%;&<&<&>( >( =' ='<&<&>&>&@& A("C)#C*#C*$B)"A(!B)#D+$E+%D+%D*$C*#B)#C)#C*#A)"?(!>( ?)!?)!=( <&='=( =' >( >( ='<&;%:$:$;%<&=' ='<&<&=' >( >(!>(!='<&=' >( <&;%;%;%<'>(!=' ;%:%:$;%<&;&:%9$9$9%,/4 <%@(D+    //12!5"8%;(!=)#?*#@*$B*$D+&G-(I.*J/,K0,M3+M4*N4*O5*P4*Q5+R5,R5+Q4+P4*N3)K2(H0&E.$C,"A*!>' <#:"8"4!1 1 3#1 //-./*#""%  - " "$"!""!"$%"! %& $!"' $! "$$#! #"###"!"$$#"!#$!#'"$"###"#%$$$$""$&!%##$" """ ""! #% % $"  !   !               ,*((*.24554 5!6#7$9&;'>(?) @)!A)"C*"D+#E,$F,%H.&J/'K0)L1)L1*K0)J0(I.'H-&G,%E+$D+$C*$B+$A+$A+#B+"F-$L1'U:/^C8V<2F.$;$5 7"      I2%D."<(5"0+(6"6"7"8#8#7#7"7"7!7!7 7 8!9"9"9"8!8!7 7 8!9":#:#9#8#8#7#7"7"7#7#7#7#7#6"6!5!5!5"7#8$:$;%;$:$:$;%<&='<&;%;%<&='=( ?)!=( <&<&<'='>( >)!?)!?)!?)!>( >( >( >(!>( ='<&;&;%;%;%:$9$9$8#9$:$:$;$;%;$:#8"8!8!8!7 7 9"B(!J-%S4+Y;2Z<3P2)I,#H,"I.$L2'Q6,U:0X=2X=2V<0U;/T:.R9-O6+K2)F.%B*!B+"A)"@)"@)"?)"@)"A)"@)"?)!>)!=)!>* >* >)>(@* D,#M4+V<2N3)A';%5#2 4!5-"4, 91&6."5-!6."2)3+6."5, 7.#7/#6-"6."8/#8/#7.";2&8/#:1%:1%:1%;2&:1%:2%;3&:2%@8+?6)=3'A7+A7+<3'=4(?8,@9,=6)<5(=5);3&:2%?6*=5(=4)>6*=4)>5*=4)<3(@7+;2&91%;2&8/#>4);1&7."=5)>7+?7+=6*;4(>6,?8-  - -   - - -   - - - - - -       -               -               -         - - - -   - - -    -  >5):1%;2&?6*>5)=4)8/$;2';2'4+ 6.#91&0(2)2)1(=4)90%7.#;2'?6*=5*<4):3);3*<6+<4)>6*?6*;3'4, 3*7.#80%80$90%6-"80$7/$81&70%6/$81&5/#70$92&81%70#70$91%7/#5, 6-!90%;2&<3'80%6.#2*2)5-"7/$5-"4+!3* 5,!7#8#9#9$8$7$5$5$8$:$;%<& =&!>'!?("@)#A)#B*#B*#B*#B*#B*#B*#B)#A)#A)#C-$F0&K2)O4+R5-T6.U7-V7,V7,T6*Q3(M0&I-#E*!A(?'<&<&<' <' ;&;&<&='>' ?' @' ?' =&=&=&='='='<&;&<'>' ?' @'!A(!A(!A(!B("C)#C)#B("B)"D+$E,%E,%E+%D+$C*#C*#C*#B*#A*#?)"?)"@*"@*"?*"?)"@*"@*"?)!=' =' =' >( >(!>)!?)!?)!@*"@+#?)!=' >(!?)"?)!>(!>( >( =( ='<&<&;%;%;%;&;&;&<'<'=( >)!>)">)!=( <&;%;&;'<'<'=' =&!=& <%<%<%;$:$,048#<%C*  5245 5 6!9%<(!>(!?)!A*"C+#E-$G/%I0&J1'K2)L4,M4-M4,N4+O4*P4+R6,S6-S6-Q6,N4*K2'F.$B+!A* @) >'!<%!:$ 8$4"1!0 .-,++(&$ !$&  -  ! !"  $$!!"" "#%%#! #$! "##""""!$$!!  """! !"!"& $"##"!#$#""#" "% &!$"#" !!"!# #&!##$                    ,++-4!<'E/&H1(@(9!8"7"7#7$8%9%;&=&@' B("C*#E+$F,%G-&I.'J0(K1)L1*L1*K1)J0(J/'I/'H.&F-%C,$A+$@+$@+$?*#@)"A)!C* E+ M1'N4*C+":#53<(6#0)&/000012 3 4 5 5 7"8#7#7"7"7"6"6!7!7 8!8!8"9"9"9"8!8!8!9"9":#:#:#9#8#7#6#6#6#7$7$6#6#6"6#6#6"6"8$:%;&<&<&;%;%;&<&<&<&<&='='=' >( =' ='='='='='>( >(!>( <&<&=' >(!?)!?)">(!=' <&<&<&;&;%:%:$:$;$;%;$:#;$;$:#:#:#:#9"7 6668!>$A'D) D*!B) A) A*!C,"E.$I2(P8-U<1V<1V<1V<0V)"=)"=)"<(!<(!<(!=) =)>(@)B)E, J/$T8-]@4S5*D(<%4"2 4!6-"91%5-"5,!6."2*4, 7.#6-"8/$80$7/#8/#91%90$7/#<3'90$:2&91%:1%:2%:1$;2%;2%:2%@8+?6*?5(@7*?5);2&=5(?7+?8+=6);4'<5):2&91$?6*>5)=5)>6*<4(>5*=4)<4(@7+:1%90$;2&8/#@6*90$8/#<4(=6*?7,?8,=6+>7,>6,  - -    - - - - -           -                       -           - - -     - -  - - - - - -    -  =4(:2&=4(@7+>5)91%:1&80$80$5-!7/#91%2)4+ 6-"2)<3(;2'8/$;2'?6+>5*<4*;4*<5+=6,<4)>6*>5*;2&4, 3*8/$90%90%8/$4+ 80%80%:2'81&92'93'5."70$81%:3&80$70$80$5,!3*4, 6."7."91%7/#6."2*2*3+ 5-!5-!4,!3* ;%>'C+"D,#A) >&<%;%;%:$:$;%<% =& >'!?'!@("@)"@("?'!A)#C+$C*$B)#B)#B)#A,#D.$H0'M2)P4+T6.V8.W9.\>2eG;eG'<';&;' =(!>)!>)!=( <';&;%<' ?("?(!>' ?' >&>&>&>&>&>' >'>& @' A(!B("B)"B("A(#B(#B)#C*$D+%D+$C*$C*#B)#B)"B)"A)"@)"@)"?)"?)"?)!>(!>( >(!>(!>( ='=' >)!>)!?)!?)">)!>( A)"C*$A)"=&<&>( >( =( ='<'='>( ?)!?)!?)!=';%<&=( <'<&<'=' >(!?)">)">)!>)">)"=( <';&<&=&>& >&!>&!=& ;$;$;$;$;$:$:%:%9$8#8#8#5!21#'-26";%:"D+"R90P6.C*!=%=%>&?'@( B+"E-%E-%F.%G.%G.%H0(I1*K2+L3+M4+O5+P5+Q5+R5,R6,P5+M3)J1(G/&D,$A*"?( <'9&8&7%5$3#3"2!1/-,*(&$%&(  - !#" !# !##! !!"!!!!" !""  "! ! !$"!##" "!  !"" !%&!#!" " # ! % ! #                 ++,-6#@,#H3)P:0I1(>&<%;%9$9%:&;'<'>'@( C*#D*$E+$G-&I/(K0)L1*M2+N3,M2+K0)J0(I0(H/'G.&E-%D+#B+$A,$?+$>*#>)#?)"?)!?'?&=%:#6!204!#%'+....//023 4 5!6!6!6"6"7"8#8#7#8#:#:$:$:#:#:#:#;$<% =&!<& <%;$;$;$:$9#8#7#7#8$9%8$7#7#9$9%:%9%9$9$:%;&<&='<&;%;%;%;%<&<&='='='=' ='<&<&<&='>( ?)!?)!?*"@*"@*"@*"?)">(!>( >( <':$9$9%;&:%:%:$:#:#:#:#:#9"9"8!8!8"8!8!7 7 7 7 9":#:$:%;&=)?* @)!B)!C*"F-$L1(S7-X;1Z<3Z<2Y;1X:/V8.R6,N2)I/&E,#C*"@(!@("@)"?)#?*#>)">)!>)!>)!=) <(;';';&;&<'?)!E/'J3,C+%:$6"2!13!91%4, 5,!8/$5,!6."80$6."91%7."6-!7/#91%91%80$;3'80#:1%90$80#8/#90$;2&;3&<4'@7*?5)>4(@7*?5);2&<4(?7+=6*;4':2&=5);3&91$?6)>5)>5*>6*<4(>5*>5)=4(?6*:1%:1%:1%90$@6+:1%:1%=5*>6+>6+>6+=5*?7,  - -    - - - - -             -     - -                      -    - -       - -    - - -   -  ;2%=4(A8+;3&:2&91%6."7/#80$;2&<4(5,!6-"7."3*90%:1&8/$:1&>5*=5*<4*<5+<5+<6+;3)=5)<3'<3'7/#5,!80%:1&:1&8/#3+80%92&;3(81&92';4)6/$80%92&;4'81%7/#80%6."4, 5-!7."7."91%8/#7/#4, 4, 5, 5,!4+ 3+!<&@( J1(Q8/P6.N4+H-%A'?' =& <& =& ='!>'!?("@("@("@("@(!@(!@("A)"A)#B)#A*#A*#@+"C-$G/&L1)P3+S5-T6-T6,W9-bE9iL@Z=2K.$G+"D*!A)!A*"@*#@+#?*#?*#?*">*"=)!=( >)!>)!>(!>( >(!>(!>( =' <'<&=&>&>' ?' >' =&=&=&?' @'!@'!A(!A("A'!@'!A(!A("B)"B)#C*#A(!@'!@(!?(!?)!?)"?)">(!=' ='<'<&<&<&;%;%='>(!>(!>( ?' @'!C("C)#A)"?( <&<'=( <' ;&<'=( =( =' =( >( >(!?(!?'!>%=%>&?' @(!@(!?(!>(!>' ='>( >( >(!>(!?' ?% ?% >% =% =% <%;$;$;$;$;%9$7"6!5!4 3 21/+'$! E-$U;2aG>Q6-A&?%@&A'B)!B)"C*"C*#D+$D+$E,%F-%F.'G/(H/(I0'J0'L1'N2(P3)P3*P4*N4)K2'G/%C+#B+#A*$@)#@("=' 9%7$6$3#1!1 126!<&!C.)?+&2 *'&(  -!  !" !!!    !"!!!       ""#!""!     !  $$  ! " !!!!# !!!                *++/5":&?)!@) =&<%<& ;'!;'"<("=(!?( @)B* E+#G,%G,%H-%I/'K0)L1*L1*L1)K0)J0)J0(I0(I0'G/&F.%E,$D+$B+$@+$@+%@+%>*$=)"=' <%;$9#5!2/0!$'),-//0122 3 4!5!7"7"7"7#8#9$9%9$9$:#:#;$<% <%<%<%;%;$:#9#9#9#:#:#:#:#8#7"8#8#9$:%:%:%<'=( =( =( ;':%:&;&<'<'<&<&<&;&;%;%;%<&<&<&<&='='=' >( >( >( >(!?)!?)"?*"@*#A+#?*"=( <'<'<';%:%:%:%:%:%:%:$:#:#:#:#:#:#9"8!8!9"9"9"9"9":#:#;$<%=%>&C+$L3,O5.J0)D*#E*"G+"L1'S7-W;1Z<3Z<2Y;2X:1V8/Q5,L2)F/%C,#A+"?'!@("@)#?)"?)"@*"A+"@*!?*!>)!=)!;( :' 9&8%7$6#6#6#5#3!2!1!2 4"4, 5-!80$5-!6-!7/"6."91%5-!4, 6-!91%90$90$;2&8/#90$90$80#7.!91$;2&;3&=4(?7*=4(<2&@6*?6*;2&<4(?8+?8+<5(92%=6)<4';3&@8+?6*>5*?6*=4(?6+?6*=5)>6*;2&;2&90$:1%@7+=3(;2&=6+>7,>6,>6,=5+?7-  - - - - - -   -                         -      -       -    - -        -    - - -   -  ;2%<4'>5(;3&80$6."91%<3'90%;3'=4)7.#5,!7."5,!90$90$8/#:1&>5*=5*;3);4*=6,>8-=6+<4(;2&:2&5-!3+90%;3(;2'90%6."80%92':3(91':2'<5*70%92&:3':3'92%70$80$8/$6-!7.":1%:2&<3'6."7/#7/#4, 6-"7.#5-"3,!=%B*"H/'O5.T:2L2)B(@( ?(">'">("?("?("@("@("@("@("@("@("@("@'!@("A("@)#?)"@+"B-$F/&K1(O3+R5,T6-T6+S5*X;/]?3V9.M0&F*!B(@'?( >)!>)!=(!=(!=(!>)!>)!?)!>(!>( >)!>)!=(!=)!>)!=( <' =( >)"?*">(!=' =' >( >( ='<&=' ?)!@*"@*"@)"?' ?' A(!C*#A(!A(!A'!?&=%>' ?)!?)"?)"?)">(!=' ='='?)!?)!>( =' =( >(!?)!>(!?)!A)#C)$B(#A("@("?(!=( <'<';&;&;&<'=( >(!=' =' >& ?& ?& @'!A(!A("A("B)"A)"A(!@(!@'!@(!@(!@(!@' @' @&!@%!?%!?%!?&!>&!>&!=&!=% <%;$;$9#7!7!6!5!4!2/,(&$:#>&I1)N5-D+$<"=#@%B(!C*$C*$C)#E,%F.'G.'G.(G/(H0)I0)I0(I0'J0&L1'N2(O3)O2)N2(L2(J1'E-$A)!@(!?("?)"?)!=' :%8$6$4"1 0 003 @+#O91L4->%2)'  !!  !  #! "" !!  !!""    "     !"   "              ++++-03 5 8"9#:%;&!<)#>+$@+$B+#D,#G-"H.%I/'K0(M1)L1)L2)L1)K1(K1(K1(J0'J0'H/%G.$G.$G.$G.%F-%D,$A,$A,#A,$@*">( ?' @% @%!@%"=$ 8!1.3"$')+--./24"5"5"6"7"7"8#9$9#:#;$;$:#:#;$<% <% <%;$:#:#:#:#:#9#9":#;$;$;$:$9$9$9%;&=( >)!>)!=)!=( =( =( =( <';&<'=( <'<&<&='='=( >( ='<&<&<&='='='='='=' >(!?)!A)"A*#@*"?*"@*"@*#?)!=( <'<&;&:%:%:%9%8$7"7"8"8"9"8!8"9"9"8"9"9":#:#:$;$<& >'!=&!=& @("E-'L2+Z?7iMD^B7K0$A'A(D+K1&R8-V:0W;1X;1X:1W90T6.P3+J1'E.$B,"A+"@("@("@)"?*#?*#?*#>*#>*#=)"<(!;(!;(!;'!:' 9& 8%6#5#4"4"4"2!0 2 5#7."91%6."7."7."6-!91%5-!4, 5-!:1%80$80#90$8/#90$80$7/"8/";3&<3':2%<4'?7*>4(;1$>4(?6*;2&=5(@9,@8,=6):2&=6);3&;3&?7*=5)=5)?6+=5)@7+?6+=5)>5)<3':2&91%;1%?5*>5);3'=5*=6+=5*=5+>6+?8-   - - - - -               -  -          -        -     - -    - -        -   - - - - - - -  :1$;2&=5'<3&:2&90$:1&<3(;2'<4(<4(6."5,!8/$6-"90%90%6-";2&@7+>6+;3):3);4*=7,>6+<4(<3(:1%2*2)90%:2';3(;3'91&91&91&:2'91';4(<4)5.#70$;4':2&70$7/#80$7/#6-!6.":2&;3'=5)91%5-!7/#5-!6."7/#7/#8"9":#:#;#=%?' ?'!>(">(">("?(">(">'!>'!>'!?'!?'!?("@(!@'!@'!@("@("?)"?)"C-#F/%I1'M3(P5*S6,T7,U7,V8,U8,S6*O3(J/%E+"@'?( ?)!=( ;&:%:%:&;&;&;';&;&;&;&;';&;'<';';&<'='='=( >(!>)!?*"@*#?*"?)!?)!?)"@*#@+#@*#?)"?)!>(!>' >&>&?' ?' >(!>(!>(!=' ;%9#:$:%<&='>(!@*"@*"?)"@*"?)!>( ?(!B*#B)#B)"A("@)"?)"=(!<';&:%:%:%;%;%=' ?)!@)"A)#B)"A("A(!A("B("B("A("A(!A(!A(!@'!@'!@'!@'!@'!A(!B("B)"B)#B)#B(#A(#?(">(!>'!=& ;%;$:$9#8!6!5!4"3 0-)&# 458":#9":"<$?& B*$E,'E-'E-'F.(G/(F.(F-'G.(H/)I0)J1(K2)M3(N3(O3)O3)O3)M2(J0&H/%F.%C,$@("='!>)!>)!=( ;&:$8#6!4 20007%C0(B.&;'2 (& -  ! "  !  !     ! !!                    ----./13 6 8!9#:$:&;( <*!>*"A+#D+$F,%H.%H/&I1&J2'K2(K2'K2'L2(L2(L2'K1&I0%H/$H.#H.#G.#G-#F,#D,#B,#A,#A-#A,#@+"@)"A'!D($R73Z@;H0+7"1/!$'*+-./024 5 6!7"8#9$9%:%:$:#:$;$;$;$:#:#:#:#:#:#;$;$:$:#9#9#9#:$;$;$:#:$:%;&=( >)!>)!=(!=( <( <' =( =(!=' ;&;&;&<&<'=' =' >( >( >( =' ='='<&;&<&>( >(!>)!?)"@*"@*#@)"?' ?(!?)"?*"@*"?)"=( <'<&<&;&;&:%9$8#7#8#8#9#:#:$:#9"8!8"9":#:$<%<% <% <% <% <%;$<%@'E* O3(]A7fKAS9/C* ?'A)D,!J1'P7-S9/U:0W;1X;1W:0T7.P4+J1(E.%A+"@*!A)#A)#@)#?)">)"=)"=)"<(!<(!<' ;' <' <' ='=&;$:#:#:$:$8#5"1!2 4#;3'7/#8/#7."6-!91%6-!4, 6."80$7/#8/#90$80$80$7."8/"90$<3&;2%80#:2%?7*>4(:0$>5)@7+<3'=5)@9,B;.=6)92%<5(:2%<3&@7+<4(>6*>6*=4)@7+?6*=5)>6*:1%;3':1%;2&=4(>5)<3(=5*?8-?7-?7-?7->6,      - -              -  -    - - - -   -   -  !     - - -        -   -     - - - - -  <3&?6*=4(<4(=4)=5)<4(:2&<4(=4)8/$7."8/$7.":0%:1%7.#90%=4)=5*<4*;4*<5+>7,?7,=5)=4(:2&2*2)90%90%:2(:2(:2(;3(91':2(:2(:3(;4(6/$70$;3':2&6/#7/#90%7/#5-!5-!91%:2&<4(91%80$;2&5-!5-!6-"8"9#:#:#;$<%=% =&!='!>'">'">'">'!>'!>'!>'!>&!>& ?'!?'!@'!@("A)"A)#@*#@+#A,"E.%J1&N3(R6*U8,W9.X:.X9.V8,S5*O3(J0&E-#@) >) =) ;( 9&8%:%:&:%:%9$9$9$9$9$9$8$8$8$9$:%:%;&;'<'<'=' >(!?)!>)!?)!?)!?)"?)#?)"@*"@*"@*"@*"?)!>( =' ='='<&<&=' >( =';%;%;&<&>( @*"@*#@*#@*"?)">( ;%<&@)"C+$B+$@*#?)">( =' <';';&;&;&<&=' >(!A*#C+$C*#C*#C*#B)#B)"B)"B)"B)"B)"A("@' ?&?& @' A(!A("B)"C*#C*$C*#B)#B)"A)"@*#?*">)!=' <&;%;%;%;%:$9#8"6!30-)&"7"14 7#9$;%<& >'!@)#C+%D-'F.(G/)G0)H/)G/(G.(F.'F.'H/'J1(L2(N4)P4*P4*P4*P4*O4)L3)I0'F.%D,%B+$@*#?*">)!<' ;%:$8"7!5 30.,*)('&$& -      !   !                -  - -//03 7$<(A+#C,$?( <%<'<( <)!=*!?)!@)"C*#E+$F-$G.$I0%J1'K2'L3(M3(M3(L2'K1&J0%H.#I/$J0%J0%I/%H.%G-%F-%D-%C-%B-$A,#A+#B)#B(#M1-X=9R94B,&6#04!$'*-/13 3!4"5"6!7#9$:%:%9$9$9#9#:#;$<% <% <% ;$:#;$;$;$;$;$;$:#9":#;$;$<%;$;$<%<&=( ?)!?)">)!>(!>(!>(!>)!>)">)!>( =' <&<&<&=&=&<&='=' ='<&='='='<&<'>(!@*"@*#@*#@*#?)"?)"@)"A)#@)"?)"=(!=( <' <' ='='<';&9$9$:%:%9%9$9#8!7!8!9"9"9"9#9#;$<% =&!=& <%;$9"8!9":$=%?&A( @' =$=&=(>( >( A+#J2)Q8/T:1V;1W;1W:1V8/S6,N3)I1'D-#?) >( A)"A)#@)#?)#>)#>)#=("=("=(!=(!=(!>( >' >'@(E-%J1)L3*L3*D,";#7#2"2!4#6-!7."6-!6.":1%6."4, 7.":1%8/#8/#80$8/#80$7."80#90#:1$91$80#:1%?7*=4'<2&@7+@7+;3'>6*@9-A:-<4(;4'>7*:2%<3'@8+=5)?6+>6*<4(>5)>5)>6*?7+;2&<4(;2&;1%<3'>4(<3(>6+?6+@8-?7-?6,>6,       - -                         !      -   -          - - -   - - - -  ;2&?6*>5)>6*>6*>5*=4);3'<4(;2'8/$7."90$7.#:1&:1%7."<4(?6+=5*;4*=6+@8.@9.>7,=5)<4(:2&3*3*90%91&91'91&:2';4):2':3(<4):3';4(:3&80$:3'92&7/#7/#90%7.#4, 3+80$91%;3'80$80$91%5-!8/$9"=&A*#C,%E.'C+$?( >' >'!='!=&!='!>'!>'!>&!=& >&!>&!>&!?'!?'!@("@("@("@)"?*#@+"D.$I0&N3)Q5*T7+U8,U7,Y;/dF:hJ>Y<1L/%F+"A( >':%8$7%5%6$7#8#9$9%9$9$8#7"7"7"7"8#8$8#7#8#9%;&=(!?)"?)!?)!@*#?)!=' =' >(!>)!>(!>( >)!?)!>( ='<'='='='<&<&<'=' >( >( ='<'>( >)!?)"@*"A+#A+$A+$@+#A+#@*"?)"@*"?*#>)!<':%;&<'<'<'<'<&>' @'!B)#D+$E,%E+%D+$C*#C*#C*#C*#B)"B("B)"B)"A(!@'!@'!@'!A(!B("B)#B)#B)#B)"A("A("@("?)">(!=' ='<&<&;%;%;%:$:#9"5 20.+'!7!:#?)"@)"?)!?(!@)!A)!A*"B*#E,$G.'H/&I0'I0'I0'I0(I0)I0)J1)K2)M3)N4)P4*P4*O3)M2(L2(L2(J2)H0(E.'C,&B+$?)!>(!<' ;& :%8#6!4 30.+)''&%%'                                  .0 2 4!>)G1(M6-R;2J2*?'>( >)!=)!=*!>)!?( @(!B*"D,#F.$H0%J1'K2'K2'L2'L3(L2'J0%J0%K1&K1'L2'L2'K1&J/&H-%G,$E,$C,$B,#@,"@*"@)"A'"A'"D*%B*%;%4!0/&),.012 4!5"6#6"6"7#7#8$9$9$9$:$:#;$;$:#:#:#:#;$<%;$:#:#:#:#:#:#;$<%<%=& >'!>'!='!=' >( >(!?)!?)">(!>' >' ?(!?(!>' >&>&?& >' >'=&<&='>( =( ='<&='=' =' =( ?)!@*"@*#@*#@*#@*#?)#@)#A)"A)"@)"?)!>( <'=' =( =' <';&:&:%:%9$9$9$9$9#9#9"9"8!7 57 8"9":#:#:#9#8"8"8"8!8!9";#;$:#:$;%<'>( @*"D-%K3*P7.S:0U:0U9/U7.S5,O2)J0&E-$@) <%='B*$B+$B+$A+$@+$@*$@*$?*$?*#?)#?)"?(!@(!@(!B*#H0(L4,P7/Q80G.&;$6#2"2 5, 6-!5-!6.":2&7."4, 7/#;2&90$80$90$80$91%8/#7."6.!7."91$:2%:2%?6*=3'<2&@7+>5):2&>6*A9-B;.;4(;4'=5):2%<3&@7+>5*?6+>6*=4)<3(<3(=5)?6*<3';2&;2&9/$<3'>4);2'>6*?6+?7,?7,?7-  - -      -                 -      -    -     - - -  -   -    -  -   - -  -    ;3'?7+>6*>6*>5*>5*?6+=4(<4(>5)90%7."90%8/#:1&90%6-"<3'=4)=5*=5+=5+=5+>6,>6+=5)=4);2&5, 4+ 90%:1':2(:3)91';4):3(;3(;3(92&<5);4(80$:3':2&70#90%<3(90%4, 3*80$90$91%8/#:1%:1%5,!9!>&E-$N4,V<3R7.F,#A( ?(!=&!<% <& >'!>'!=& =& >'!>'!>'!?'!?'!?'!@'!@(!@)"?*"?*!B,"G/%L2'Q5*T7,W9.X9.Z;/hH=sSHcD:Q2)G*!B'?%<%9$7#6#6#7#8#8$9$9%9%9$8#7"7"7"7#7#8#9$9$8#8#9$;%<'<';&='?)!>)!=' ='>(!?)!?)!>)!>(!=' <&='>( >( >( >( >)!?)!>(!?)!>)!>( =' =' >(!?)"@*#@*#A+#@+#?)"?)!>)!>)!>)">)"<' ;&;&;&<'='=( >( ?(!A)"C)#D*$E+$E+%E,%E+%D+$E+$E+%D+$C*$B)#A("A'!@' @' A(!A("A("A("A("B("A("A(!@(!@'!?(!>)!?)"@*">(!=' ='<&;%;%:$9#7"5 31-)$ ;"O6,bH?[B8P8/I1(D,#C+"D+#D+#E+$F,$G-$H.$I/%I0&J/&I/'I/'I.'J/'K0(L1)M2*M2)L1(K0'H.%G.%H0'H0(F.(D,&B+%A)#?)"=(":& 7$5"3!2 10/2!5%1"+'&&)                                   @-#>,"<* ;)9'&   ../27#?) C,$F.&D,%?' =&=(=) =*!>*!?*"@*"C+$E,%G.%I0&J1&K2'L3(M3(N4)N4)M3(L2'M4(O5*N4)M3(M3(L2'J0'H-&G-%E,$C,#A,#@+"@)!?' >$<"9 6310 %(+.012 3!3 24 6"6"7"9$:%:&:%;%;%;%;$;$:#:#:#9"9"9"9#:#:#:#;$;$<%>'!?("@)#@)#?(">'!@("@("?' >' ?' ?(!>' =&<&<%;%<&='>( >( =' =' >( >(!>(!>(!>( =' =' =' >( >(!>)!?)!?)!?)"?)"?)!?)!?(!?( ?' ?' ?(!>(!>( >( =( <';&;';';&:%;&<';&:%:$9#9"8"8"7!6 6 7 7!8!8!7!7 7 6 67 8!9"8"8!:#=& ?("?( =&=%>%D,"L3(Q7-T8.T8.T7-S5,P3*M0'I.%D-#@) ='B*$C+$C,%C,%B,%B,%B+%B+%A*$@*$@)#?)"?)"?)"?(">(">("=(">)#>(":%7"4"2!3!7."6-!7/#:1%7."4, 8/#91%8/#80$:1%90$90$8/#7."7/"8/#;2&<4':1%?6*>4(;2%@6*?6*:1%=5)@9,A:.;4(;3'<4':2%<3'@8+@7+>6*=5)<3(;2&;2'=4(=4(<3'<3':1%8.#=4(?5*91%>5)?6+?7+?7,?7,  -      - -                  !  -      - -   -  - - -  -    - - -   -  - - -<4)<4)?6*?6*=5)>6*>5);3'>6*;2'7.#:1%7/#;2':1&6-"<3'=4)>6+>6,<5+<5+=6+=5*>5*>5);3'7."4+90%:2(:2(;3);3);4)92':2';3(81%<5);4(70$:3'<4(:3&91%;2':1%3+1)90$:2&:1%90$:2&91%9!=$D*!P5+\@6Z>3O1'F+"A)!='!<& <& =& =& >'!>'!>'!>'!?'!?'!?'!@("@("@("@)"?*"?*!A+"E.$K1'P4)T7,W9.Y;/[<1aA6eE:^?5S4*J,#E( @&=$:$8#6#5"5"6!6"7#8#9$9%8$7#7"7"7"7#8#9%;& ;&:%9$9%;&<&<&<&<&='<&;&<'>(!>)">(!=( =( >( =' =' =( >( >(!>( >( >( ?)!?)!?)!?*"?)">(!>(!?)"?)">(!>)!?*"@*"@*"A+#@*"?)">(!<';&<'=( =( =( =' >' @)"C+$E+%F+%E+%E+%E+%E,%E,&E,&E,%C*$B)#B)#B)#B)#C*#B)#B)"A(!@'!B)"C*#D*$D*$C*#C*#B*#A*"@*"?)"?)">(!=' ='<&<&<&:$9"7!5 1.+(#=%A'R8.]C9T:0J0&H-$E*!D*!C*!C*"C)"D*#E+#F,$H-&H.&I.&I.'J/(K0(K0)L1)L1)K0)L1)K1)J/(H.&G-&H.'G.&F-&C,%@+$?*#>)#<(":' 7&4$1!/ .-/@+$Q<4J4-=(!1 (&##/0123 4 5!6"7#7#8$9$:%:%;&;&             [>4[?5\?5[>4Z=3         C.#A-"@+"?*!=) ;(:&8%6#4"E/$F/$F0%8#9$;$:$7!5 5 5 4!4!5"5"4!3 2/+(&$"   -  ---/14 6!8"9"9"9#:%:';(<) =)!?)!C+#G-%G.%H/%I0&K2'L3(N4)N4*O5*N4)N4)N4)O5*O5*N4)M3)L2(K1'J/'J.&I.'H.&E-%C,$A*"@(!?'!=% ;"8!6!3 1!0"(+.0123!4!3 3 4 6!7"8#9%;&:%:%9#8"9"9":#:#:#:#:#:#;$<% =& <% <&=& >' @*#B,%A+$?)#?)#?)">(!>(!=' ='=' >( =' <&<&=' >( >( >( >( >( >( >( >(!?)!?)!?)!?)!>)!>(!>)!?)!?)"?)!>(!>(!>( ='<&<&<&<&>&?' ?(!>(!>( =' <&:%:%;&<'<&<&<'=' =' ;&9$9#9#9"9#9#9"8"8"8!8!7!7 7!8!8!8!7!7!8!8!9"=%I0(Y@7U<2F-";"=#@&F,!O5*S8-U8/U8/U7.T6-Q3+M1)H/%C-#?) <&A)"A*#B*$B+$B,%B,%B+$B+$A*$A*#@)#?("?)#?(#=("<'!<&!;% :#8"7"6"4"2!3!7."90$:2%6."5- 80$91%7."7/":2&90%:1%8/#8/#90$:1%<4'<4':2%@7*>4(;2%@6*?7*:1%<4(@9-@9-<5(<4(<4(;3&;3&?6*?7+>5)<3(;2&90%<3'>5)>5)<3'<3':1%:0$?5*?5*:2&>5)?7+?7+?7+>6+  -      - -                  -       - - -    -      - - - -   -  - - ->6+>5*?6*?7+>5)>6*?7+;2&=5)<3'80#91%7/#<3'<3'80$=5)<4)=5+>7-=6,=6+>7,?7+?6+<3(90$7/#6-":1&;3)92(:3)<5*<5*<4)=6+>6*81%<5);4(6/#92&=5):2&80$;3';2&5-!2*80$:2%91%91$;2&5!7"<&H1'V=3W>3M3(D+"?)";(!:'!:'!:' :' ;' <' <' <' =(!>)">(">(!?("@)"@)"@)"?)!@*!C,#H/%M3(Q6+U9-W:/Y;/Y;/X:.U7,P2(J.$E*!A'>&:$7#5"4!4!4 5!6"7#8#8$8#7#6"6!5!6!6"7#8$9%:%:%:%9%9%:%;&:%9$:$:%;%<&=' >( >(!?)!?*"?)!=( <&=' ?)!>)!>(!>)!?)!?)!>( ='=( >( ?)!?)"?*"?)!>(!='='>( ?)!?)">( =' >(!?)"?)!>(!?( ?' @' @' B)"E+%F-&G-'G-'F,&E,%E,%E,%E+%D+$D+$D+$D+$D+%D+$D+$D+$D+$D+$D*$D+$E,&F-&E,&D+%C*#A)"@(!>( >( >( >( =' =' >( =';%;%;$9#7!5 2/,'!8!<#D+#G.&E+#C)!B)!B)!C*"C*#C+#D+$D+$E+$E,$F-%G-%I.&J/'K0(K0(J/(J/'I.&I.&J/(K0)K1)K0)J0(I/(G-&E,%B+#?+"=*!<( ;' ;&9$6"3 /--1?)!K3+J1*E+%4 &&   !&*,-01233445 7"8#8#8#9$8#7"7"7"6"6!6!6"6"6"6"6!7"7"8#8#9$:%:%9$9$9$9$:$;$;$E.$F.$F/$G/%G/%G/%G/$G/$D/&E/$F0%G0%P3*Q2)S3)cA6lK@[?6L4,O7.R91S91U91V;1W<2Y=3Y=3Z>4Y=4W<4V<3V<4W<4Y<3Z<2[=2\>3]?4^@5_A6_A6`B7`B7`B6`B6`B7`B7`B7bC7cC6dC6dC5cC6bC7aC8aC7`C7aD8bD8cE9dD8eD7dC6cB6aB6_A6_A6_@5_@5`@4`?3a?2`?2`?2_>2]=2]=2\=2]>4]?5^@6^@7_A7_A7]@6\>5\>4\>4\>4\?5]?5]@6]?5]?5]?5\>5Y;2V90U:0S9/R9/P7.O4,N2*M0(R3,[=6X;4G-%=%:$9#:#9"8!7 67 9"9#9#:$;$:#7 7 7 7"7#5"3 5!6"6!5 6!7#6!58";%;$:#9#7"6"6!5!4!4"5"4!320-*'%"  -   .--,.01344 5"7%8':(=* @+"C,#F-#H-$H/%I0&J1'K2(M4)N5*P6+P6+O6*O5*O5*O5*O5*N4)N4)M3)M1(L0(K0(I/(G-&D+$B*#A*"A)"A("C)$F,'C*$;%6"5"&),/13 3 3 3 3 4!5!6!6!7"8#9%;& ;% 9#9":#;$;$;$;$;%:$9#9#:$;%<&=' ?)!@*#A+$A+#@*"?)">(!>(!>)!>(!>( >( >( =' =' =( =' ='=' =( >( =( =( =' =' >( >)!?)!>)!>(!>(!?)!?)"?*"?)"?)!>(!=( ='='='<&<&>' ?' @' ?' >&=%<$<$<%<&=( ?)!>(!>( >( =( ='='<&<%<%;$:#8"8!8!8!8!8"9#:#:$;$:$9#9"8"8!;#?$J.#_C7w[P_C7C(>$>$@&I/%P5,R6-S7-T7-T7-Q4+N2)I/&D,$A*">(!<&A(!A)"B*#C+$C+%C+%C+%B+%B+$A*$@)#@)"@)"?(!>' <&<%<%=&>' <%:#6"3!4 5-!7/#6.!5- 7.#90%6."7."<3'8/#7."8/#6-!90$;2%<3&:2%;2%@7+?6)>5(A8+@7+;2&=5)@9-A:->6*;4(<4':2%;3&>5)=4)>5)>5)<3(:1&=4(=5)<4(;2&;2&;1&:0$?6*?6*:2%=4(@7+@7+@7,?7+ -       -                   -     - - - -      - - - -  - - -   - -   - - -=5*;3(<3'<4(=4(<4(>6*91%=4(<3'90$:1%80$=4(>6*:2&<4(<4)<4)=6,=6,=6+?8-?8,@7,:1&7."7."80$:2&;3):3*;3)<5+<5*=5+>6*=5)70$;4(;3'6."91%=6*91%7/#;2':2&7."3*80#:2%:1%:1%4!4 5!;%D-%H0'F-$B*">)!:' :' :' :' :' ;' ;' <(!=)"=*">*#>*#>*"?)"?)"?)"@("@("@*!B,#E.$I0%N3(S7,V9.X:/Y;/Y;/W:/S7,M2(F-#@) =&:%8$6#4"4!4 44 5 6!7"7"7"6"6"6"6"6"6"7"8#8#8$9$9%9%9%:%:%:%:%:%;&<'<' =( >)!?*"A+#B,$A,$A+#@*#?*#>)"=' <&<&;%;&<&<&<&=' >(!?)"?)">)!>(!=' <&<'=' =' =' =( >( >(!?)!@)"A)"B)"C*#C*$C*$C*#D*$D+$E,%E,%E,%E,%E,%E+%E,%F-&F-&F-&F-&F,&E+%E,%E,%E+%E,%E,%E,&F,&E,&D,%C*#A)"?(!=' <&<&;&<&;&;%<&<&;%:#9#7"4 2/*$ 4 5!6"9$<&=& >' @)"B*$C+$C+$D,$E,%E-&E-&F-&H.'I.'K0(L1)K0)K0(K0)L1*M2*M3+M3+L2*L1*K1*J0)H.'E,%B+"@) ?) ?( <&;%7#3 0-,,.2 7#:&9%/&' -  "'+.02344345 6!7"7#7"7"7#7"7"6!6!6!6!6"6"6"6"7"7"7#8#8#8$8$8#8#8#8#8#8#9#9#:#:#9#:#;$:$9$<' ?*#@+$A,%C-&F/'H.'K.'N/'R2(T2(Z7,lH( ?)!>(!>( @*"B,$A,$@*#?)">( =' =' =' =' >( ?)!?)!=' <'='=' ='='='=' >( >(!>)!>(!>(!>(!>)!?)"@*"@*#@*"@*"?)"?)"?)!>' >' ?' @(!A(!A(!@' ?&?&?& ?&>' =' =( >( >( >(!?)!>( =( =';%:$:#9"8!8!8!8!8!8"9"9#:$<% <& =&!;%:#8"8!7 : <L/$fKAfMCL3*?'=$<"B( K1)N4+M3)O4*Q5,P5+N3*J1'G.&D,%A*#=' =( A( B*"C+$D,%C+%C+%C,%B+%A*#@)"@("@("?(!?' =&>&A)!F-%L3+O6.F-%<$7#4!3 91%80#5, 7.":1%7/#8/#;2&7."6-!5-!5-!7/#91$:1%90$:2%?6*>5(=4'A8*@6)<3&=5(>7+>7+=7*:4(<5(:2&;3&=4(<4(>5*>6*=4);2&=5)>5)=4(90$;3'<2&7.">5)A7+90$<3'A8,A8,@8,  -       -                 -     - - - - -       - - - - - -   - -    - - -<4(=4(=5)<3'91%?7+:2&<3':1%90$:1%8/#<3'=4(91%:2&>5*;4);4)=6,=6+>7,>6+?6+:1%6."6-!80$:1&;3):3*;4*=6,<5*>6,@8,>6*7/#:2&;3&7/#91%>6*:2&80$;3'90%6-!3*80#;2%:2%:1%3!4!5!6!8!9":#;$;% ;& <& <& =& >'!?("@)#A*#B+$C+%C+%B*$B*$B*#A*#B*#A*#@)"C,$F.&H/'J0'N3)S7,U8-X:.Z<0\>2W:.O4)F,!@)<':&9&6%4#4"5"6"5!4 4 4 5 6!6!6!6"6"6!5!6"7#8#8$8$8#8$9$9%:%;&;&:&:%;&<'=' =( >)!?)"?*#@*#A*#A*#@*"?)"?)">(!='<&;&;%:$:$:%;%<&='=' =' =( >( >(!>(!>( >( >( ?)!@*"?)!?)!@)"A)"C*$E,&E,&E,%E+%D+$D+$D+%E,%E,%E,&E,%D+%E+%E,%E+%D+$E+%E,%E,%D+$D*$D*$D+$D+$E+%E,%E+%C*#A("?' <&<&;%;%;$;$;%;%;%:$8"8!9#8#5!3/*#:%7$6$ 7$7$9%9%:%<' ?("A*#C+%D,%D,&E,&E,&F-&H-&J/'K0)L1*L1)K0)L1)M2*M2+N3,N3,M2+L2*K1*I/(G-&D,$B+"@* ?)>'<%:$7#4#1"/", )))))('&)  - #)-025 6!6!6!7!8"8#7"6!6!6!7"8#8#9#9#9#:$;%:$8#9#9$9$:$9$9#9#9":#;%:$:#:#:$:#9"8!7 8!9":#:#9"9";$=& @("B*$C+$D+$E,%G,&H.'I/(H.'I.(O4.Q60L1*I.&H.&H.&H/'H.'G-'J/)C-&?*#@+#?+#:&8$9%;'!='"<&!9#9$;& :%8#9$:$:%:% 9$<'"<'":&!:% :&;':&9&8$8%9%9%:&:'8%9%9%9%8%9&;&!:% ;&!8#:% ;'!7"7"9$;&!;& =("=(#:%=(";%?'@( A)!D,$C+#C+#F.&H0(J1)K2*N5-P7/Q91R91O6.K1)I/(H.(H.(H.(G.'H.'I.'L/%N1$N0$K-"F) A&?& =& ;#9":#;$:$:#8"8!9"9#8!8!9#:$;$;$:#9":#:#:#:#8!8!:#;$:#9"9":#;$<%;%:%:$:$:#9#8#7#5"4!20/-*'$   -   -.04>(H0&L3)P7+H.#>%<%<%<& =(#?*%B+&D,'F-&G.&I0&I0&I0&J1&K2'M3(M3)N4)O5*O5*O5*O5*O5*N4)O5*O5*P4*Q3*M1)I/(G.'E-'C,%C+$B)!B'M1(Y>5T91E-%<%8#$(+.145 6!7"8#8#8#7#7"7#8#9#:$;$;$;$<%;$;$;$;%<&;%:$<&>( >( ='>( @*"@*">)!?)!@*"@*#@*"?)"?)!>(!>( =( >( >)!>(!>( >( >(!>)!?)!>)!>(!>( >( =( =' ='='='>( >)!?)"?)"?)"@)"@)"A*#C*$D+$B)#A(!A(!A("A(!@'!@' @' @' @' @' ?' >' =' ;%9#:$<&<'<&;%;%:$9#8"8"9"9"8"7 567 8"9#;$:$9#8"7!6 5 348#C.&K5.B-%:%8":$='D.%J4*K4*K5)N6+O7,M5+J3)H1'G/(D-%A*#=' A) B)!C*#D,$C+$C*$B+$A,%A+$@*#@)#@)"@(!?(!?'>&@'D+"K1(T;1W>4J1'<%8#4"4 7/"4, 90$:1&7/#90$90$6-!80$:1%:1%90$8/#90#91$<3&>5);3&=4'A8*@6):2$<4'?7+?8,=7,;6*;5(;4'<4'<4';3'<4(=5)=5)91%;2&?6*<4(6.";2&>4)90$>4(?5):1%<4(A8,@8,A8-  -       - -                   - - - -   - - - - - - - -   - -  - - -;3(<3'91%;3'=5)>6*<4(=5);2&90$90%7/#:2&;2&80$;2&=5*;4);4*=5+<5*>6,>6*>5)90$5-!4+ 7.#;2';4*;4+;4*=6,<4*=5+@7,>5*8/#:2&;3'80$91%=6*;3'91%;3':1%7."4+80#;2%:2%5"6"7#9#:$;$;$;%;& ;% ;% <& ='!?("@)#A*#A*$B+$C+%C,%D,&D,&D,%C+$B*#A)#@*#C+$G.'I/(J0)M2*O3*S6,V8-\=1cC7iI=Y:-I+D(>%:#9%8%5#2"3!5 5 5 5 4 4 44 5 5 5 5!5 6!7"8#8$8$8$8$8#8#8$9%:%:&;&;&;&<&<'=( =( >(!?)"@)"A("A("A)"B)"B)"A)"?(!=&<&<&<&;&;%;%;%=' >)!>( >( >(!?)!?)"?)"?)"?)!?)!?)!?)!@)!A)"C*#D+%E,&E+%D+$D+$C*$C*$C*$D+$E+%E,%E,%D+%D*$C*$C*$D*$D+$D+%E,%E,%E,&F-&E,&E,%E+%E+%E+$D+$C+$B+$@*#>( ;%<%<%;$:#9"9"8"7"7"8#7#4!2.)#<#H-!S6*R6*M3(G.$B) >'>' >(!?)"A+#C+$D+%D+%D+%E+%F,$H-%J/'K0(L0)L0)K0)K0)L1*M2+M2+M2+K1*J0)H/'F-&C+$?*#=)"=(!<' :%9#7"4"2!0 / /-,+)(')  %*.2236!8#8"7!7!7"7#7#7#8#:%;&;%;%;%;%<&<&<&<&;%;%<&<&;%:$;$;$<%<%;#:#;$;$:#9"8"8!9"9"9":":#;$;$<% @(#B+%D,%E,%D+$C*$D*$D+$E+%E,%E+%D+%B,%B-%F0*H2+L5.J4-I2-L50D0)A-&B.&@,%;)";)"=+$>,%>*$=)#9& :& <)#<(":'!;(":'!;'!9& 9& :'!8%6#5"5"6#6#5"4!4!6#5"3 4!3 4!5!5"4!6#6#6#7$5"6#8%4!6"8%8%8%;("?,&?,&C0*A-'D-'F.(G0)J2,H1*H0*J3,L4.N6/O70P82Q92P81L4.G.(D+%D*#F,%G.'G.'H.(H.'I.'R5+Z=0^@3_A5Q4+D( @& >&!<% ;$;$;$:$9#8!7 9":#9"9":#;$;$;$:#:#;$<$;$:#9"8!;$<% ;#9"9"9":#;$;$:$;%;%:$:#9$8$6#5"4!2 0.,)&"   - -,.19%D/'J3+M6,I1(?( :$9#8#8$:% >'"A)#C*#E+$G.%I0%G.$F-"I/%K1'L3(M4)N4)N4)N4)N4)M3(M3(L2(L2(M2(O2(N1(J0'G.'E.'C-&@+$?)">&?&B)!B*#;%6!5"6$()+.146!6"7"7"6"6"7#9$9%:%;%;%<%<% <%;$;$<%<%<&<&<&=' >( >( =' >( ?)!@*"?)">(!>(!>(!>(!>)!>)!>(!>)!>)!?)!?*"@*"?*"?)!?)!?)"?)"?)"?)!>(!=( ='<&='=' >( ?(!@(!@("A("A("A("A)"B)"B)"C*#C*#B)"A("A(!@'!@'!@'!@'!@'!@' @' ?& >&=&<&<&<'=' =' =( >( =' ;&;&;%:$:#:$:$8"7!6 6 6 7"8#6"4!3 334 2234 5 35 4 7#9%=)F2(J6+K6*M7+M7,L6+J5*H4)H1(G/(C,%?("=' A) B)!B*"C+$C+$C*$A+$@+$?*#?*#?)"@(!?' >& >&=&=&>&A( E,#F-$?&8!5!2 3 7."90%90$5-!90$80$6-!91%:2&;2&:1%:1%90$8/#<3&>5);2%<3&A8*?6):1$<4'@9,@9->8,<7*;4'=6)=5(<4';2&=4(<4(=5)90$91%>6*<3'7.";2&>5)91%<4(?5*;1%<3'A7+A8,A8,  - -     - - - - - - - -            - - - - - -  - - -    -  =4)<3(>5)>5*>5)=5)=5)=5);2&90%:1%8/#:0%<3';2&92&<5)>7+=5+<4*<4*;3)>5*=4(90$4, 3+7.";3(<4*<5+:3)=6,<5*=5*?6+;2'7.";2&<3'91%91%;4(:2&90$;3';3'90$5, 90#;3&8%?+$F0*M6/O7/F.&>&=&='!;& ;% ='!?(#@)#@*$A*$B+%B+%C+%C,%D,&E,&D,&D,%C+%B+$B+$B*#H/(L3,N4,Q6.O4+N2)R5+V8-`B6mNBkL@X9-J, B'>$<$9$7"3 4!3345 5!5!5 4 5 6!6"6"6"6"7"7#9$:&:%9$8$7#6"6!5!7"9$:%;&<' <';&<'=' =( ?( @(!A("A("A(!@'!@'!A("A("A(!@' ?& ?&>' >&<&<&>( ?)!>( <&<&<&=' ?)!?*"@*"@*"@*"@*#C+$E+%F-&G.(F-'E,%E,&F-'F-'E,&E,%E,&F-&E+%C*$D+%E,%C*$B("B)#D+$E,%F-&F-'F-&F-&F,&E,&E,%D+%C*$B*#?(!<&<'=( =' ;$:#9"9"9"8"8"8#8#7#5"3!0,(;%<&O6,^C8Y=2S7,L0$D)A'?( >(!>)#?*$A*$B*$C*#C*"D*"E*#F+$H-%I.&J/'K/(K0(K0(J/(J/(J0(J0(J0(I/(G-&E,%B,$@+#>*"=)"<(!<'!:%8#6"4!2 26!A* G/&D+#?&2)*  !&+.14 7"7"7"7"8"8#9$9$:%:%:%:$:$:$:$:$;%<&<&=' >( >(!>( ='<&<%;%;$;$<%<%:#:#:#:#9"9!9"9"9#:#:$;$;$;$<% ='!?(#A*$A*#B*#C*$D+$E+$E+%D+$D+$C*$A)"=( <( <( =)!@+$=(!;&;&!7$6"6#4"1 2!3"2!22/./.-.//.0100/2!1/.-..-,,,+,,,.1112 00//3 1114!13 27 :":#<%9"8!;$;$:#:":#<%A*$>'">("@("C)"E+$F-&G.'G.'H.'J.'S6-]@4bD7bD8V8.H+#A' =% =% =% <%;$;$:#:#:#;$<$;$:#:#;$:#9"9!8!9":#9"8!9";$;#:#9"9":#;$;$;$;%:%;&<';%;$:$9$8$6$4"2 1/-*'#   -$,-.0 4"7#8$9$7"6!5!5!5"6#;' ?*"A*"B) D+"G.$I0%J0&K1'L3(M3(M3(M3(M3(M3(M3(L2'L2'K1&K1&K1&L1&M1&J/%F-$D-%B-&@,%?*#?)!>'=%:#7!324"'*-/245 6!7"8#7"6!8#:%:&;&;%;$;$:$:#:#;$=&!?(">(!>)!?*"@*#@*"@*"?)">(!>)!?*"@*">)!>( >)!?)"@*#A+#A+#@+#@*#@*#@*#A+#@+#@*#@*"@*"@*"?)">(!>( =( =' =' >( @(!A("A("A(!@'!@'!@'!A(!A(!A(!A("B)"B)#A("@(!@'!A("A("B)"B)#B*#C*#B*#B)"B)"A)"?(!>(!>( =' =( =( <';&;%;%;%:$:$8"8"7!5 5 6!7"7#7"7#3 112331313 3 3!6#5#6"9&A.#J5+L7,N9-N8,L6*J5)J5*J4*H0(F.'C,%?("@*"B*!B*"C+#D,$D,%C,%B+$@*$@*#@*#@)#?(">'!>& =&<%;%:$9#9"8"7!6!4!3!4!90$90%6.!:1%90$7/#90$;2&:2&8/#91$90#90$<4'>5)<3'<3%@7*?5(;2%<4(@9,@9.>8,;5)<5(>6*>5(=5)90$>6*=5)=4(;2&;3'>5);3'8/#<3'=4(:1%=4(?6):1$:1%?6*@7+@7+    - - -   - -  - -  -                 -    =5)>6*=4):1%;3'=5)=4):1&90%;2&8/#90$<4(:2&81%<5(=6+=6+=5+=5+<4+=5)<4(90$4, 3*7/#;2';3);4*<5+>7,=6+>7,=6*:2&7/#:2&<3'92&92&;3'92%90$<4(=4(91$4,80#9$>(G/%S:0[@6R6+F* B)!?'"=&!=&!?'"@(#A)$A)$B*$C+%D+&D+&E,&E,&E,&F,'E,&E,&D,&C,%@( D+#H/(L2*P5,Q5,Q6,S7-V8-Z<0bC7mNBcE9T6*G* @%>%;%9$6"4"4!344 5!5!6!5 4 5!6!8#7"7"7"5!6"7#9$9$8$8$8$7#7"7#7#8#9$:%;&;&;&<&=(!?(!?(!@' @'!A(!A(!A(!A(!@(!A(!@'!@' @' ?& ?& ?& ?&?& ?& >& >&=&=&='>(!?)"?)"?)!?)!?)"A*#C+$D,%D+$D+$E,%F-&F-'G.(F-&D+%D+$D+$D+$D+%E,%E,%D+%B)"@' @'!A("B)#C*#D+$E,%C*$A(!A(!B)#B)#A("@'!>' =' >( >(!=& ;$;$;$:$:#9#7"7"7"6"5"3!/*&5";' J4,R:2Q8/N4*G-$@'?'='!>)#?+$@+%B,%D-&F.'G.&G,%F+$G+$G,$G,%H-%I.&J/'J/'I.'H.&H-&G-&G-&F-%E+$C*"B* A*@* >( <' ;& 9%7$6#4!34<$H-!S4(W7+P3(:%+, - - !'+.146!7"8#:$;%;&;&:%:%:%:%;%;%<&<&<&<&='='='<&<&<&:$:$9#:#:#;$;$;$:#:#;#:#:#:#:#:$:#:#:#:#9"9#:$<& ?("@)#@*#A*#A*#B*#B*#C*$C*$D+%F-'H/)I1*=' 7#4"3!3!3 1.,+*))*)))***+,-..--.//.--../.........-.0/,+++-./00000025 6 654444443447";& ?(#B(#E*$G-'G-'G-&G-&I.'K/&N0%P2&Q3'M/%F*"B(!@("?'">&!=% <%<% =&!;$8!8!:#:#:#:#9":#;$:#7 8!9":#:#:#:#:#9":#;$;$:#:":#;$;&;%:%:$:#9#8#7#5#4!2 10.+($   -  /,,-./1345 5 5!5"7$9& <(!>)"A*"C+!D,"F-#I0%L2(M3(M4)M3(L3(M3(N4)M3(M3'L2'K1'L2'L2'M2'M1&K0&H/%E.%B,$@+$>*#>)!='=%<$:#8#7"6"5#*,/0234 5!7"7#7#7#7#7#8#8#8"8"9#;$;$<% =&!>'!>'!=' =( ?)!@*">)!>( =( =' >)!?*"?)"?)!?)!>(!?)!A+#B,$A+$A+#A+$A+$A+#@+#@*#@*#@*"?)"?)">)!>(!=( =( =( =' ?(!A)"A(!@'!?& ?& ?& @' @'!@'!@' ?& ?& @' @'!A(!A("B)"B)#C*#C*$C*$C*$C*#C*#B*#A*#@+#?)"=( =' >( >)!<':%:%8#9#7"6"5 344 5!6!6"6!7"5!1111122 3 3 23 4!4!34<%E.%L4+O7,Q8-Q7-O6+O6+N5+L3+I1*E-'A*#>' A) B)!C*"C+#D,$D,%C+%B+$B*$A*#@)#?(">'!<' ;&:&9& 8&6$5#5#5#3"2!1 1 4 :1%8/#;2&:1%8/#91%91%90$6.!7."7."8/";2%>5(=4'<3&@7*?6)<3&=4(@9,A:.>7,:4(=6*=5)=6(?7*80$>6*<3':1%;2&=5)>6*<3'80$<3'<3'90$=4(>5(:0#90#?6)@7+     - - - - -   - - -                <3(=4)<3(80$91%;3'>5)<4(;3'<3'8/#90$>5);3'81%<5(=6+=6,=6,=6,>7-=5)<4(7/#3*3+7/#;3';4*;4+<5+>7-=6+=6+=5*:2'70$91%;4'91%80$<3(;3':1%<3'<3'80#5,5!7";%F.&P7-L2(E* B)!>'!=&!>'"@(#A)$B*%B)$B)$C*%D*%E+&F,'F,'F,'G-'G-(G-'F.'E.'C.&A( G.&K1)N3+P5,R6-T8.T7-U7+X:/]@4bD9X:/M0&E*!@&<$8#7"6"6"5 44 5 5!5!4 434 5!5!5!8$8#6"6"6"7"9$9$:%:%8$6!7"9$9%:%:%;&<'<'<' =' >& >%>&?&?&>%>%>%>&@' @'!A(!A("A("@'!?& ?&?&?&?&?&?& ?&?& @(!A)"A)"A)"A*#A*#B*#C*#C*$C*$D+$E,%E,&E,&E,%E,%D+$D+$D+$D+%E,%E,%D+%C*$B)#A(!@' A(!C*#D+%E,%D+%C*$B)#A(!@' @'!@'!@(!?)!>(!>( =' =& <%9"8!9#:#9#8#7"7"5!3 0,'#2 6#:&='@(A) A) @)!?)!>)"?+$A,&B-&C-&D-%F,%G-&H.&I-&H-%H-%H-%I.&J/'J/(J/'I.'I.&G-&G-&G-&F-&E,%C,$A,$@+#@*"?)">(!;'!9& 6%4#2!1 2 9$C*"O3*Z<3O5-9%-- - #'+/25 7"8#9#:$;$:%:%:%:%:%;%;%<&=' >( >( >( =' ='<&<%;%;%:$:$:$:$;$;#:#:#;#;#:#:#:#:#;#;#:#:#:#:#9$9$:$;% ='!>(">)"?)"?)"@*"A*#A+#A*#E.'K3-R82Y=7Q60>& 4/,,+*)+,,,,-.///11123!4!4!4!5"5"5"4!4!4!4!5!6"6"6"6"7#7#6"5!5!5!5"5!4 3 3332234 4 4 3 123 5!6"8#8#8$9$8#7"4111126";&!?)#C)#E*$F,&G-'G.'G-'H-&I-%J-!K- L."K-"F*!C(!A("?(">'!=&!=&!=& =& <% :#:":#:#;$;$:#:#;$;$9"9"9"9"9":";$;$;$;$:$:$:$:$;$;%;&;&:%9$9#9#8"7"6"5"3 10.+($   -   0---/02456 6!6"6#6#7$9%;' >( A* C+!E,"H/%K2'M3(M3)M3(K2'L2'M3(N4)N4)N4)M4(M4(M4)N4)M3(L3'K2(I1(F0(C/'B-&B,%B+"B)H.#O5*K1'A);$:$(+.0235 6!6"6"6"6"7"7#7#8#9$;%<% ;$;$<% <% =&!?(">(!>( ?)"A+#A+#A+#A*"@)!@)!A*#B*$B*#A)"A)"A(#B)#B*#A*#A*#A+$B,%A,$@*#?)"?)"?)"?)"?)">(!>(!>( >( =( >( >(!?(!@'!@' @' @'!@'!@'!@'!@'!?& ?&?& @' A(!B)"C*#B*#B)#B)#A)#A("@'!@' A(!A)"A)"@*"?*#?*"?)"?*"@+#=( ;&<&:$8#9$9%5!35 7#8$7#5 36!5!1011001027#C/'H3+D.';$:": B'J/'O2*R4+T6-V8/U7.S6-P4,L3+H0)C,%?(";%B)!C*"C+"C+#C+$D,%D,%B+#A)"@)!?(!>(!<' ;' ;' 9%8#7#8#<' C-&F0(@)"9"6!2 4 8/#<4(;2&6-!80$8/#7/#8/#90#6.!7.";2&=5)=4(=4'@7*?6)<3&>5)@9-A:/>8,;5)>7*<4'=6(=4(<3'?7+=5)<3';2&=5)>6*;3'80$;3'<3'90$<4(@7*;1$90#=4'@7+      - -    - - -             =5)<3(;2'90$80$;3'>6*>5)<3'=4(80$:1%?6*;3'81%<5)=6+=5+=5,<5*>6+>6*=4)7/#3+4, 7/#:2';4*;4+;4*>7-=6+<5*=6+;3(7/#92&;4(80$7/#;2'<3':1&<3'<3':1$3 3 3 4!6"6#7#9%<&!=("?)#@*$@*$A+$A+#B+#C+$C,$D,$D,$E-%E-%F-%G.%G.&G.&G.'F-&B* F-$J0(L2)N4+Q5,R6-U9/V9.V9-U7,S6*O2'J-$F+"C)!?':%8#7"6"6"6!5!6!6"6"5!5 4 5 5!6"7#8$9$8#7"8$8#9$9#9$;&<';&;&<' =(!<( <'<' >(!>)!>)!=)!?)"@("@("?' ?& ?& ?& >%=$>%@'!B)#C*$D+$B*#A(!?& >%>%?&@' A("C*$D+$C*$C*#A("@'!@'!A(!A(!A(!A(!A(!A(!@(!@'!A(!A("C*$E,%E,%E,%D+$C*$C*$E,%E,%C*$B)"A'!@' B)"D+%E,%E,%D*$B)#B)#C*$D+$C*#B)#@(!>( >' =' <&;$;$;$:#9"9"8#7"6!4 2/,)%8$4!5#8$<&?(@( A)!@*"@+#@,%A-&C.'E/'G0'H/&H/$J/&K0(K0(J/'J/(K0(K0(L0)L1)L1)K1)K1)J0(I/'G-&F,%E,%C-%A.%@-%@+$?)#?'!>&=%;$7$4#2"2"3!5!:$@(#:% 0-  %+.136!7"8#9#:$:$9$:%;&;&;&<&<'?)!@*#@*#@*"?)!='<&<&;%;%;%;%<&<&<%<%;$:#:#:#9"9"9":#:#:#:#:#:#:#9#8#9$:%;&;& <' <' =( >(!?)"?*"?*#?*"B-%G1)O7/Z>5R6.A'!72/..//012334444455 6 7 7!8"8"8!7!7!8"9#9$9$8#9$<';'8$8#9$9$7#6"6!7"8$8#7!6667 7 7 7 8!8!7!6 456 8"8#9$;& ;'!;&!:%7#6"5!5 4 33 7#<'!?("C*$F,%G.'H.(H.(H.'H-&J.&N1&P2%N0$L."H+"D)"B)#@)#?'"=& ;$:#;$;$;$;$>'!?(#>'"=& =& <% <%;$;$:#:#:#:#;#;$;$<%<% <% <%<%;$:#:#;%<&:%9$9#8"7!6!4!3 3 20.,)%"   - !/-/16"<& >' @( >&:#9#8$7$7$8&:' =)!A+"D,#E-#H/$K1'L3(M3)M4)M3(L2'M3(M3(N4)N4)N4)N4)N5*O5*N5*M4)L3)J1)H0)F0)D/'C-&C,#C* G-"X=2aF& >& >& ?'!A("B)#B)#B*#C*#C*$C*#B)#B)#B)#C*$D+$D+%E,%D+$B*#B)"A(!@(!A*"A+$@*#?)"?*"@+#@*#?)"?)">(!>( >(!>)!>( =' =' >( >' ?' @'!A("A("A("A("A)"B)"B)"A)"A("A("A)"B)#C*#C*#C*#C*$B)#@(!@'!?& @(!B)#C*#A)#?)"?)"?)">(!?*">)!=( >(!=( ;%8#:%8$6"6"8$:&:%7"3342/.////01=% S;5eLF\C=M3-A& <>"E)!N0)R3+V6.W80W90V7/S5-N3+J1*F.'B+$>(!:$D+#C+"C+#C+#C+$C*$B*#?)!=) <) <) <( ;( ;&;%;$;#=$A'I.%V;1Z>4P3)D) ;%3!3 ;2&;2&90$80$7."7/#90$90#5- 90$<4'=5)<3'=3'@6*=4';2%>6*A:-A:.?8-=6*>7+;4&<6(=5)<4(=4)<4(<4(;2&=4(?6*<3'8/#;2&=4(:1%<4(@6);2$90"<3&>6)           - - -  -          ;3(=5*<3(;2'>6*>6*=4(:1%=4(:1%91$>5):2%70#;4'=5*<4*=6,<5*=5*>6*>5*90$5-!6-!8/#91&;4*;5+;4*>6,>6,<5*=6*;3(6/#92&<4(80%7/#:2&<3(;2'<4(<3'4 5 5 7!8"9#:$;%;& <'!>(">(#?)#@)#A*#A+#B+#C,$D-$E-%F.&G/'G/&G.%G.%G-%G-%F,%B*!E-$I/'L2)O4+Q6-S7.U8/W90X:1X:0V8.Q4+H-%E*#A( >'<&:%9$6"6"6"7"7#7#7#6"6"6"7"6"6!6"6"9$8$7"7#9$9$;&:%:%;%;&;&=( @*#@+#>*">)!?)"@*#@+#?+#@*#A*#B*#B)#B)"@(!@'!@'!@'!@'!@(!A)"B)#C*$D+%C*#A(!@'!?& >%>%?& A(!C*$D+%E,%C*$A("@' @' @' A("B)#C*#C*#B)"@(!A(!A("B)"B)"C*#D+%E,%C+$B)#C*#C*#C*#B)#B)#A("B)#D+$D+%C*#B)"A("@'!@(!A("A("@(!@("@)"?)!>' <&<%<%<& =& <%:#9#9$7#6!30-+(%9#:$<&@)D,"E,!C* B) B+"B,%B-&B-'D.'G/'I/&K0&L0'L0(L1)L1)L1)L1*M2*M2*M2*N3+O4,N4,M3+L2*J0(H.&F,%D+$C,#A,"A,#@+#?)">("='!;& 9%7$5#4#2"0 //.-,-  !&+/235!7"9$9#:$:%;%:%9$:%<'>( ?)"@*"@+#@*"?)!>( ='=' >( ='<&<&='<&<&;%;$;$;$:#9"9"9":#:#9"8!9":#9"9"7!6!7"9$:%;&;&;&<'<'>(!@*"?)!<'=' >)!?)A(G,!>#631001245 5 5!6!6 554567 7 7 569"9"7 7!:#;%;%:%8$8#9$9#8#8#8#8#9#8#7"7!7"7!6 55667 7 8!8"9"9"8!667 8":$;%;%;%;%:$9#8"8"7!6!5 6!:$<& >'!B)"F,$G.&H/(G-'F,%F,$J/'[?4hJ=bC7Y:/N1'D( @' =& =& =& =& ='!>'!>'!=& =& ?)"A+$?)#>'!=& =& <&<%<%;%;%<%;%;$;%<&<&=&=&<&<&;%;%;%;&<':%9#8"7 54321000.*'$      /,-.8$E/(J3+K4+G/&?':$9$9%9% :&!<'">("A)"D+"F-#G/$I0&K2'L3(M4)M4)N4*N4)M4)M4)L3(L3(L3(L3(L3(M3(N2'O1'M0'K/(I.(F-(E,'E+&E*$F)!O3*Y=3T80H.&A(!=% &*.136!7"8#9$9$9$9$9$9#:$;&<&<'=' @(!B)#C*#C*#B)#B)"C*#E+%D+$C*#B)#C*#C*#C*#C*#C*#C*$B)#B)"C*$D+%D+$B)#A*#A*#?*">(!=' =' =' >(!?)"?)!>)!>)!>(!=( <'<&;&<&>' @(!A(!@'!A(!B)#C*$D+$E,%D+$B)"A)"C*#D+%D+$C*$C*$C+$B*#A("@(!@(!@("A("B)#A)#@*#@+$>)!<'>(!>)!=( >)!?*">)!;&;&:&9%8#7#7#7#6!5 435!3 2 1000047E+&Z@;eJE`E@I.(@$< @$F*#N1)S6,U8.V9/U8.T7.Q5-M3+I0*F.'B+%>( A) B)!C*"C*"C*#C*#B*#B*#@*"?*">)!=( =(!<(!;' :&:%:%:$;$B*#N6-Q90G/&>'7$2 2:1%90$8/#8/#80#:1$90$5- ;2&<3'<4(;2&<3'@6)<4&91"=5(@9,@:.@:-=6*=6);4'=5(>6*<4(=4(<3';2&;2';3'?6*<3'7/#;2&?6*;2&;2&A8*=4&:0#=4'       - -      - -         -   ;3(>6+;2';3'>6*?6*<4(7/"=4(;3'91$>5);3&6.":2&=5*<4*>6,=5+=6+=6*=6*:1%6."7/#91%91%:3);4+;4*=6,>6,<5*<5):3'6/#81%=5):3'90%;3'<4(;2&<3'6 ;%@)!D-%H1(D,#>&<%;%;% <& ='!?("@*#B+$C-%D-%E.&F.&F/&F/&G/'G/&H/%H/%G.%G-%G,%F+%B*"H/'L2+O5-R7.S7.S7.U8/V90V90U80S7/J0(B)!?'=%;%<&;&:%8#7"6"7"7#8$8$8#8#8$8$6"6!5!5!7#9$9$:&:&:%<&<'<&;&<'>)!?)"?)">)"?)"?(!@(!A("?'!@(!A)#B*#B)#B)#C*$C*$B)#A("A("A("A("A("A("B)"B)#C*#B)#A("A("A(!@'!@'!@(!A(!A("B)"B)"A("A(!A(!A("B)"C*#D+$C*$B)"@'!@'!@'!A("A("A("B)"B)"B)"B)"B)#C*#D+%E,%C*$B)"B)"B)#A(!?&?&@'!?(!>(!>)!?*"@+#@,$@+$>)!<&;&;%;%;%<&;%;%:%9$7"5 1-+)&#;$F.$P6,T:/Y=2Q6+G-!C*C+"B,$C-&C.'E.&G.%I.$J.#K/%L1(M2*M2*M2*M2*M2+M2*L1*M2*M3+L2*K0)J/(H.'G-&F,%D,$C,!A+ @*!?*!>)"<(";'"9'!8& 6%5$4#6#8$:%<&8#0--   !%*.25 7!8!8"9#:#:#;$<%<&<&='?)!@*"?)!>( >(!?)!?)!?)!?)!?)!>(!>( >( >( =' ='<&:%:%:%:$9$9$9#9$9$9#8#8#8#8#7"6 57!9#:$<%<%<%<& ='!>(">)#?*#@+$?*"<' :%7"8"7 41///012 3 4!5"6"5!5 4345 6 6!6!7"7"8#8#9$:%:%:%8#8#9#9#8#7"6!6!7"7"7"8"8#8#9$9#7!6!6!6!5 5 6!7"9$:%:%:%8#7"7"8"9#;$;$;$:#:#:#9#8!7 7 6 7":$:$<%@( E+ E-#F.%D,$C+$C*"F+"W:0gI=cD8[<0P3(E* D*"C+$A*#?)!>(!>( >(!?)!?)!>(!?)!?)!?)!>( >( =' ='<&;%;%:$;%;%='=' >( >( >(!>( =' ='<&='=( <';&:%:%9$8"6 44 4!4!4 2/,)&#     .,+-2 :'!A,$C-$C,#>(9#9$8$:&!<(#>)#@*$C*$F+#G-#H.$I0&K2'L3(M4)N5*O5*O5*O5*N4)N4)M3(M3(M3(L3(L2'L2'M2&K1'I1(G1(D0(B.(A,&@+#A)!B)D,!D,!?(:%9%8%+/245!6"7#9$:%;%:%:$:$;%<' >(!=' <' ?(!B*#C*#C*$C*#C*#C*#D+$D+%C*#B)"C*#C*$C*$C*$C*#B)#B)#B*#C*$D+%E,%C*$B)#A*#A+#?)">( >(!?)!?)"?)"?)!>(!=' =' =' <'<&<&='>' >' ?&@' A("B)#D+%E,&E,%D+$C*#B)"C*$B)#A("B*#C*$C*$B*#B)"B)"A(!@' @'!@("A("A*#@+$?+#>)"@*">(!=( >)!?*">)!>(!<&<' 9%8#8$9$7#8#:%6"6"5!4 3 2232036=#F,'\C=bICV>7E+$: ; @%H-%N3*S8.S9/S9/S8.R8.O5-K2+H/)D-&A*#=(B*!D*"D*"C*"B*"B)"B*#B*#B*#B*#A)"@(">'"='!;'!:&!:& :& 8%6#7$8%7$6"4 2 027/#7/#8/#8/#80#91$5,;2&=5(>5):2%;2&?6(=4&:1#=5(?8+@9-?9,<6);5(<5(=5(?7*>5)=4(<4(:2&:2&=4(?7+<4(7.";2&?7+;2&90$A8*>4'90"<3&     - -      - -          <4)=5*7/$90%=4(>5);2&5-!<3';2&90#>5)<4'6.!:2%>6+<4*=5+=5+>6+=6*=5):1%7.#90$;2&90%92):3);3)=5+=6+=6+<5*<4)70$70$=6*;3'91%<4(<3(90%6!<%A*!K3*T<2O6,C* =&;%:%;& ='!?(#@*$B+$C,%D-%E.&F/'G0'G/'F.&F.%G/%H/&H/&H.&G-%F+$>&C*#H/'L1*O4+P5,Q5,S7-T80U91S80R80M4,C+$>&;%:$:%:%9$8$7#6"6"7#7#7#8$9%9$9%8$6"6"6"7"7#8#9%;& :%:%<&=' <&<&=( ?)!>(!<&=( ?*"?(!>&?&?& @'!B)"B)#@(!@'!B)#D+$E,%B)#A(!@' ?& @(!A)"A)"B)"B)"A(!@' @'!A("A("A("A(!@' ?&@' A(!A)"B)"B)"A(!@(!A(!B("A("A(!?& >%>%>%?& A(!A("@(!@' @'!@'!B)"C*$D+$D+$C*$B*#B)#B)#B)"B)#B)#@)"=( >(!>)"?*"?*#?)">(!=( <';&:%9$9$9$:%;%9$6"30-*'$8"=&L3+W=3\A6_C8R6+D)C)B*!A*#A,%C-&E.%G.%I.#J."J.$I.&J/'K0(L0)L1)L1)K0(K0(J0(J/(J0(J/(H.'F,%F,%E,%D,#C,!B,!B,"A+#?*#=)#;'"8&!6% 4$4"4!:$@(K1'V;1M5,8%,,  "'+/25 7!8!9";$;$:#;$<&<&='='='='=' >( ?)!@*"A+#@*#>(!>( ?)!?)!=' ='>( ?)!=' ;&;&;&;&;&:%9$:%;&;&:%9$8#9$9$8"7 8!9";$<% =& >&!>'!?(!@*"A+#B+$C,%B*#@(!<%9"4 1/.-..01356!6"7"7"8"7!656 6 6 7 7 7!9":#:#:$:$:#:#:#:#9"8!7 7 7 7 7 7!8!9"9"9"9"8!7!7 7 7 7 8":#;$;%;$:#;$;$:#9":";";#;$:#9"9#8#5 344 6!8#9$;%?' B)B*!A+#A+$A+$A*#C)"K/&T6,S5*P2'L.%G+#D*$A*%@*#?)"?)!?)!?)"?)"@)"?)"?)!>(!?)!?)">(!='<&='='<&<&<&<&=' >(!?)"@*"@*"@*"?)!?)!>(!?)!?)!>)!=';&;&:%8"7!7!6"6"4"2/.-*'$!  -  -.++-03!5!7!7!7"7#8%9& <(">*#@+$C,$G-#I.#I/$I0&K2'M4)M4)M4)N4)N4)N4)M3(M3(M3(N4)O5*O5*N4)M4)M4(K4'I4(G3)E2)B1)@.&>,$>* >(='=';%7$6$6$(-25!6"7#8$9%:%:$9#8":$<&<&<&<'=( ?("A)"B)#B)#B)#A("A(!B)#C*$D+$D+$D+$D+$D+$C+$C*$D+$D+$C*$B)#B)#C*#B)#A("A)"@*"@*"?)!?)!?)!?)!>)!>( =' ='=' =( =( ='='>( ?)"@)"B)#B*#B*#C*$D+%E,%D+$D+%B)#@'!B)#A("A("B*#D+$C*$B*#@(!A("@(!@(!A("A)"B)"A)"@*#?*#>)"?)">(!=' ?)"@+#>(!>(!<':%7#6"9%:&8$8$9$7#5!43212321158=%E-'H1*D.';%8"9#<%B*!J1(P7-R9/S9/R8.R8.Q7-M3+I0*F.'B+$?(!<&A)!B*!B)!B*"B*#B*#B*#B*#B*$C*$B)#@(#>'"<&!;&!;&!9% 7$5#3"3!3!2 2 10026."7/#8/#80#80#5- ;2&<3';3'90$;2&@6)>4';3%?6*A:-A:.?8,>7+<5)<5(>6)?7+>5)=4(<4(<3';2&>5)?7+<4(6.";2&@7+:2&:1%A8*>4'8/" - - -                 ;3(6.#7/#=5)<4(91%5, ;3&:2%91$>5);3&6.!90$=4)<4):2(>6,>7,>7+=5)80$6."91%<3'90%:3*92(:3)<4*<5*=6+=5*=6*91%6/#=5):2&7/#;4(;3'90$7#9%E0'T=4S;1I1'B+">(!<& ;& ='!?)#A+$A+$A+#B+$C,$E-%F.&G/'G/'G/&G/%G.$G-$G,%G,%G,%?'!A)"F-&J0)L1*N3*P4+R6,S7.T91S91Q80N6.F.'?(!=&:%9%8$7#6"7"7"5!6!7"7#7#7#8$8$7#8#9$:%9%8#7"7#9%:%;&<&<&;%:%<&=( =' ;&;%<'>(!>& =$>%@' @(!A("B)#@' A("B)#C*$C*#B)#B)"B)#?& @'!A)"A)"A("@(!@'!@'!A)"C*#B)#B)"A("@'!@' @'!A("B)#C*#B)#B)"A("A(!@'!?& ?& ?& @' @'!A(!B)"B)#B)"B)"A)"A("B)"B)#C*$D+$D+%C*$A(#A("@(!A("A)#A)#?)">)!?*"@+#A,$A-%?*";&<&=( <' :%9$8$8#9$9$7!420-*&#5";&B+"I0%N4)P4)J.#E)D) B*"A+#@,%B-&E/(F/'H.%I.%J/&J/'J/'J/'K0(L1)L1)L0)K0(K0(J/(J/(I/(H-&F,%F,%E,%E-$D-#C-#C,#A*#@)#>'";&!8% 6$4#4"5#:$?&N3(\@4M5+6$.-   #),0247!9#9#9"9":#;%<&<&;%<&='='='>( @*"@*"?)"?)"?)"?)"?)!?)!?)!?)!>( =( =( =' <' <'<';&;&;%;&<&<'<';&:%:%:$;%<%<&=' >(!@)"A)"B)"C)"D*"C)!C(!D)!F)"K/'P4-L1*F-'9#3/,,-.036766 7"7!6 7 8"9"8!8!8!8!8!8!8"9"9#:#:#:#:#:#:#:#:#:#9"9":#:#9"9"9"9"9"9"9":#9#9#9"9"9#:#;$<% <% <% ;$;$:#:#;";!;#<%;$:$9#7"42234 6"9$;%<%='?)!@+$@+$?*#?)#@)#B)"E* F* G* F)!C)"B)#@*%@+%A+$A+#?)"@*"A+$A+#?)">(!>(!>(!?)!?)!='<&;%;%='=' <&<&>( @*"@*#@*#@*"@*"@*"@*#@*"@*"@*"?)"?)!>(!=(!=( <&;$9#8#6"4!3 1/.+'%"     .**+-/135 7"8$9&:(!<)#?+$A,#C-#G.#J/#I/$H/$J1&L2(L2(L2'L2'M3)N4)M4(N4)O5*O5*P6+P6+O6+O5+N4(L3&J2'H2)E1(B0(@-&>+#>*!?(@)C*B*='8$7$7$-15!6"7#9%;& <& ;&;%:$:$;%;%<&<'=' >( ?' ?' ?& ?& ?& ?& @'!A("B)#B)#C*#C*#C*$C*$C*#B*#B)#B)#B)#B)"A(!@' @' @'!?(!?(!?*"@*#?*">(!='<'='=' =( =' =' >( ?)!@)"A*#A*#B*#C*$C*$C+$E,&E,&D+%C*$A("@'!A("B)#A("C*$D+%C+$C*#@(!?' @'!@'!A)"B)#A)"@(!?)">*">)">(!>)!=' >)"?*"?*"=( <'<':%8$8$8#8#9$8$7"6"6"6"4!2 13 3 2136!5 2234 5!5!8$<'D.%L3+Q6/T7/V8/T7-S6+O4*K2*H/(D,%A*#;%;'A)!B*!B)!B)"B)"B*#B*$B*$A)#A("@("?'"='";&!:&!9& 7%5$4"3!5!8#9$7"5!1 04!90$80$91$80#8/#<3&>6*?7+;2&<3&?5(=4&<2%?6)A:.A:.>8+=6*;4(:3&>6*?7+<4(;3'<4(>6*:1%;3'=4(:1%4, :1&@7+;3'<3'B8+>5(:0# - -    - -     -       ;4(91&70$<4(=4(80$5-!:2&:1%91$>6)=4(6-!6.!<3(=4*=4*>6+>6+?8,=5)6/#6."8/#;2&:2'91':3);4);4);4)<5)<5*>6*81%6/"=5)92&70$=5)<4(3!3 4!7#8%9%:&<' <'"='!='"?)#@*$@*#@)"A*"C,$C,$D,$D-%F.%F/&G/%G.$G-%G-%F,%E+$D*"?(!D+$G.'J0(M2*O4+Q5,Q5,Q6-Q6/P6.M4,G/'=' ;&:%9$7#6"4 5!6!6"5!4 4 5!6"7#7#7#9$:& :&:%9%8$8#9$9%9$9#:$9$8#:$=( >(!;&:%9$:%=&>&>%?& @'!A(!B)#A)"@' B)#B)#B)#A)"A)"B)#A)"?&?&@(!A)"@(!@' @(!A)"B)#B*#B)#B)#B)#B)"@'!?& @' A("B)"@(!@' @'"A("?& =$>%?& @' @(!B)"C*$D+$C*$C*#B)#A)#A("A("A("A)"A("A("A("B)"B)#B)"B)#?(!=' =' =( =( =(!>)!?*#@+$?*"=( :&8#8$8$:%;%:$7"4 3 1.*&8& 4"7#<%@'D)F+H+ G+!F,$F-%E/'E0)E/(E.'F.&G-%H.&I.&J/'K0(K0(K0(K0)L1)L1*L1)K0)J/(H.&G-&G-&G-%F-%E,%C,&B,%B,%B*$A("?& =%:$8#5"3!2!2 36 >%F,"<'/- -  $*.25 7":$;%<%<% =& ='!=' =' ='<&='=' ='='>( ?)!?*"?*"?)"?)!?)!?)!?)"?*"?)">)!>(!>(!>( =( =( ='<&;&;&<&='=' =';&;%;%;%;%;&<'=( ?) @*!A)!B)!D*"E*"D(!D( F)!I,#V9/_C9[?8T:4E,'6 0,++.1356 6!6"5#6"8"8!8!7 6 7 7 9"<%<% <%;$:#:#;$;$:#:#:#;$<%<% ;%;$;$;$:#:#:#:#;$;$;$;$;$;$9"8!:#<% =& =&!<% ;$;$;$;$;$=$ >% >% =&!;%9#9#8#6!31/15 7!9";$;%=' ?*#?+$?*#?)"@)"C+#G-$I.#H,"G+"F,$C*$?(#='"?)#@*#?)"?)"?)"?)!>( >( >( >(!?)!>)!>( =( >( >( <&:$;%='?)!A*#@*#?*"?*"?*"?)"?)!?)!?(!?)!?)">( <'<' =( <&:$9#8#7#7$6#3!1/-)&#    .+*+,/2 5!8"9$:%:':(!<*#?,%A-$C.$E.#H."I."G/$H/%I1&K2'K3(L3(L4)M4)M3)M3(N3)N4)N4*N5*N5*N4*O4)P3(O3(M1)I0)E-'A+%@*$@)"A(!C( N2)Y=2O5+D,">'9$+/4 6!6"7"8$9%:%<&<&='<&;%;%<&=' >(!?)"?(!@' ?' ?& @'!A("A("A("A("A("A(!@'!@'!@'!@(!A("A("A(#A("A("A("A("@(!@(!@)"@*#A*#A*#@(!>' >' ?' @'!@("A("@'!@'!A("B)#B)#B)"A)"@(!@(!@(!C*$D+%D+%C*$C*$B*#C+$E,%D+$D+%D+%C*$B)#B)#@'!A("A("A)"B*#B)#@(!?(!@*"=(!?*#?*#>)!=( =( >(!=' ;&<':%8#7#6!5!8$9%8#6"6"6!6"4!3!4"5"3 012123 3 2 5!6"6#9%>) G0'O6-S9/U9/U8/T6.R4,N3+J1*F.'B+$>( :%>&@'@(@( @( @(!A)"B)#@)">'!='!<'!<&!;&!:% 9% 7$8#8"6 5B+#R:2P8/F/%='4"1 5"90$91$8/"8/":1$;3'<5(91$<3&?5'=4&<3%?7*B;.A:.=7*;5):4':3&=5)>6*<4(<3';3'=5)80$:2&<4(:1%5, ;2&@7+<4(=4(B9,?6)<2%    - - - -  - -       :3'70$91%<4(:2&6."5-!91%:1%90$>5)=4'7. 6- ;2':2':2'=5*?7,@8,=6*7/#6."90$:1&91&:2(;3);4);4);4);4(<5)>7*81%5."<4(92&7/$;3)3!2 2 2 3!4"6#8$;& <'!='">("?)#@*#A*#B+#C,$C,$C,$C,$D-$E-%F.$F-$G-$G-%G,%F+$D*#>( @+!D.$G0'J3)L6+M5*Q4)Q2(W3)W2)Y3*d?6fD:S5+B(<%7#5!4 5!6!6"6"4 336!8#8$7#7#9%:%9$8$9%9$8$8#7#7"7"9#9$;%=( >)!<&:%:%9$9$=&@(!@' ?' A("C*$C+$@(!@' A)"C*$D+%C*$C*#C*#?' =%<$>%?& @(!A("B)#C*#B*#B)#B)#B)"A("A("@(!@'!?& ?& A("C*$D+%D+%C*$A("@' @' @'!A("B*#D+$E,&E,%D+%C*$B)#A("@'!@'!A("B)"A("@'!@'!A("B)#B*#B*#@)">(!=' <' =( >)!=' ;&<&=( <'9$7#7"7"9$;%9$7"5!2 0-)$5#5"8#<$>$A&D(G+ H-#H.&H.'G/'G0(I0)I0(I.&I-$I.&J/'L0)M2*M2*M2*M2*M2*M2*M2+M2+L1*K0(J0(J0(H/'G-&E,&C+&B+&B*&B*%@'"?%=$;#8"4!2!0!0!1!1 10-*+   !'+/37"9$:$;$;$<% >'!?("?(!>( >( =' ?(!@)"@)!?(!@)!@)"B+$D-%B+$A*#B+#B+$B+$A+#@)">( >(!?*"?*"?*">)!>( ='<&<&=' =( <( <' <'<'='=' <' <' =( >(!?)!@*"B*"C*"E+#F+#F*#F*#G+#I-$P4,U:2R81N6/E-(51,*)-1356!7$6%5%6#7!7 7 6668!:#<%<%:$:#:$;$;$;$;$;$;$;$;$<%<% <% <%;$9"9"9":#;$<% ;$;$<% =& ;$:#:#:#<% >'"=&!<%<% <% ;$:#;#=#<$;$;$;%:$8$5!223236!9#;%>'@) A+#A,%A,$@+#@)"J0(^B9cF;S5+H+"G+#E+$A*%?)$=(!<&>( ?)"?)!>(!>( >( ?)!@*"?)"?)!?)!?)!?)!?)!>' >%@' B)#C*#C*#B*#B)#B)#C*#C*#B)#A("A'!@'!@'!?' >' <';&;%;$;$:%:%9&8%6$4!1-)%#    -,)*-5$>,$A-%D.%A+"<';'<( =*#?,%@-%A-#C-"F-"H."I.#J/%K0&M1(N2)O3)P3*P4*Q4*R5+R5+R5+R5+R5+R5+Q4*P4*Q4)Q4)N1(K/'G,&C*%B($A'"A' B'N2)aE;cG=S8/F,$=%7!/25 6!6"8#9$:%:%;&<&<&;%;%;%;&=' >)"@("@(!@(!@'!@'!@'!@'!@'!@'!@' ?& ?& @' @(!A)"@)"?(!>' >'!?(!?)"@*"?)">(!?(!@(!A("B)#B)#A("A("A(!@(!A("B)"A("@'!@'!@("A("@(!@'!@' @' A(!B)"B)#A("A("C+$C*$D+$D,%D+%D+$D+%B)#A("B)#A("A("B)#C+$D,%D,%B)#@("@)">)!=' =' >(!<&:$;&<&:%9#8#6!6"6"6"7#8$8$7#5!4 5!6#5"5"6"5!4 31/1321135!6":$A*!J2(R8.T9/U8/U7/T6.Q4-L3,I0)E-&A*#<&8#>&>&?&?&?'?'?'!@(">'"<'!;&!:& :% :% 9$6#5"6!6 55J1(^E;V<3I0'>'2!15!90$7/"80#91$=5)>6*80#;1$?5'>5'=4&?7)B;.@9-<6);4(;4(;4(?7+@8,=5)<4(;3';3'8/#;2&<4(;3'6.";2&?6*=4(>5)B9,@6*     - - - - - - -     70$91%<4(91%6."5-!91%;2&80$=5)?6):1#7.!<3'<3(:2'=5*?7,A9->7*70#6.":2&<3(;2(<5+=6+=6+<5*=5*<5)<5):3&81%70$;4(;3'91&5"5"6"7#7#7#8#9$:%;& ='">)#@*$A+%A+%B+%B+%C+%C,%C,%C+$C+$D+$D,$E-%F-&F-&F,&D+$=(>(B,#F0&J2)J4*L6+O5*Q4(U4)Y3*a:1lD;qJAmJ?S2&E(<":"7"6"5!5!6"5!4 4 5!7#8$8$8#7#8#7"6"7#8$9$7#6"6!5 5 8":$;&=' <&;%;&;&;&=' <$?& @(!@'!B*#D,%C*$A(!?& ?& B)#C+$C+$B*#B)#>&>&<$<#>%@'!A("B)"B)#B*#A("A("A("A("A("A("@'!?& >%>%=$>%?& @(!A)"A(!@'!A("C*$D+$D+%D,%D,%D+%D+$C*$C*$C*#B)#B)#B)#B)#A("A("@(!A(!A)"@)">(!=(!=( <';&:%9$8#8#8$9$9$9$9$9$:%:$8#7"4!2 /+':& 4"6#:$?&D* F*D)D(F+#H.)H/(H0(I0(J0(K0'K/%K.$J/&K0(L1*N3+N3+N3+N2+M2*M2+N3,O4,O4,N3,L2+K1*I/(H.'F-'D,'C+&B*$A)#>("<' :& 8%4#1!1!1"1"0"/ .-++, - $*/35!8#:$;%<%<%<% =&!>'!>(!>( ='=' @(!B)#B)"B)"A("B)"D+$E,&D+$C*$D+%E,%D+$C*#B)#A("@)"@*"?*">)!=( ='<'<'=' >( =( =' =' =' =( >(!>(!>("?("?("?)"@)#A*#B*$C+$C+$D,$E,$D,$B*"A)!C*#C+$A*"?)!=' 40,**.2356!6#5$5$6$8"8!8!8!8":#;$;$:$:$;%;$:#9"9#:$<%<% ;$;$<%<& =& =& =& <% ;$9#:#:#<% =&!:#9";$=& ;$:#:#:#<% >'!=& <%<%<%;%;$<$>$>% >'"=& ;$:$8#7"5 422248"<$?'B)B+!B,#B+$B*#A( I.%dG' <&;%;%<%<& ;%:%8%7$6#4!1-*&$!  -   -(*-:&J5-R;2T<2O7-D-#<&=( >)">*$?,%@+$A+"D-#H.#J/%L0'M1(N2(O2)P3)P3*P3*Q4*R4+R5+S6,S6,S6,S6,R5,Q4+P3)O1&L0&I/&G-&D,&B*%@("?' ?&B(T9/cG=T:0F-$=&5 -14 6!7"7#8#9$:%<&<&;&;&<&;%:%:$;%<&>' @(!@(!@)"@(!?(!>' =' =' ='=' >(!>)"?*"@*#>(!<'<'=' =' >( >(!>)!?)"@)"A(!A("A("B)#C*#B*#B)"A("@' ?& @' @(!@'!@'!?& ?&?& @' @(!A("B)"B)#B)#C*$C*#B)"C*#C*#C*$B*#A)"A)"B)#B)#B)#C*$D+%C*$B*#A)#@("?(!?)"=( <'=( ;&9#9$:%8#7"7"5 345!7"6"7"7"7"6"5!6"6"6"5!5 4222322;'H3+H3*<'37!<$D,!N4*S9.T8.T7.T7.S5.O4,K2+G.'C+$?(!:%8#<%=%?&?'?' ?' >' =' <' ;':&9&8%8%7$7#8#9"9!: >#P5+_C9T9/I/&=(2!2 6!80":1$;2%<5)=5)8/"<2%@6)>5'<3%?7)B;.@9-=6);5(;4(:3'>6*A9-<4(;2'<3'=4(:1%;3'<4(=5)80$:1&>5)=4(>5)B9,@6*   -    - - - -    81%91%;4(:2&80$6."91%;2&6.":2&>5'<3%90#=3(=4):2'=5*?7+A9->6*80$6.";2&<3(;2(<4*<5*<5*<5)>7+=6*<5)81%81%81$;4(;4(8$=(!B-%G1)I3+@+"8"8#9$;% ='"?)#@*%A+%A+%A*$A*$A*$B+%C,&C+%C+%C+%D,%D,&D,%D+%C+$B*#?(!?) A+"E.%H1'J2)L3*O5+Q4*U6+X5,]9/lH>uRHkK@Z;0G*>$;"9#7#5!3 4!6"6!7#7#7#8$8$9%9%8$7#7#7"7#8$8$6"5!5 45 7!8#9#9#9$;%=( =(!:%>& A("@'!?& @'!A("B)#A)"@'!?& >&A("B)"A(!A)"A("A(!@(!>&=$>%?& @' @(!B)"A("@'!@'!@("@("@("A(!A("A("A(!A(!?' >%>%?& @(!A)"B)"B)#C*$C*#B)#B)"B)#B)#B*#C*#C*#C*$C*#B)#B)#A)"A)"B)"A(!?' >& >( >)!=(!=( <( <';&:%9$8#8#8#8#7"6"9$<&:%7#6"4"2 .+'6#4"<(!E.'S:1^D9T9.G+ D(D)"E+%F-&G/'H/%H.$J.$K/#K.$I.&J/'K0)L1)M2*M2+N3,O4,N3,M3+M2+M3+M2+L2*K0)I/(G.'F.'E.'C,%B+#A*"@*">)";' 8&5$2"1!2!7$;&>)@,8%0-.  !&*/36!8$;%=&!>'!>'">'!=&!='!>(!>( =' ?( A)"B)#B)#B)"A("B)"D+$E,%D+$C*$E+%E,%D+$C*#C*#C*#B)"A)"@)"@(!?' =&>&>' >' ?' ?' ?' ?' ?' ?(!@(!?(!?'"?("@)$@)$@)#@)$B+%B+%A*$@*$@+#?*"=( <'>(!>(!;&9%7#3!0-++.146 6!7"6"6#7#:#9"8"9":#;$;$;$;$;$:$:#9"9":#;$;$;$:#:#;$;$:#:#:#:#8!7!:#<%<% <% ;$:#:$;$<% <& ;$9#;$<%<% <% :$9":#<% =% =#=$ =& =& <% :$9$8#7"5 2025 9#<%@(D* D+"D+"B*"A(!@'B(W;/iK>Y;.H*G+G+!D*"B)#@)"?)!@*"A+#@*"?(!>( >' >(!?)">(!='>' @)"A*#A*#A*#A)"B)"C+$D+$A)"A)"B*#B*#A)"@)"@)"@)"@(!?' @)"A*#>(!;&;&;%<&='!<& :%8$7$5"10/,)&#   - ,**-6D,$O6-R8/S9/I/%?&>&='!=)#=*$?+$A+$D-$G/$I0&L2(O3)O3*P3*P4*Q5+R5+R5,S6,T7-T6-S6,S6,S6,R5,R5+P4*O3(M1&I/&F.&D.&B-'@,%?*$@)"@) E,#J1'G/%?) 8$3!3 0244 5!6"6"8$:%;%;%<&<&<'<&;&<&<'<'<&=' >)!>)!=( =' <&<&>( @*">)!=' =' =( =( =( >( >(!>(!>)!>)!?)"?*"?(!>%>%@'!B)"C*$D+%B*$A("@'!?&>&>&>&>%>%?&?& @'!@(!A)"C*#B*#B)#B)#B)"A)"@'!@(!B)"B*#C*#C*$C*$C*$B*#B)#A)"A)"A("A)"?' >%>' <' <'<&:%:$;%9#5 5 7"5!224 5!4 4 5 5!6"5!5"6"6"5!5 4 22346 9#G1)\F>jTKT>48#7 9!=%G.$P7,R7-S7-S6-T6-Q4,M3,I0)D,%@)"='8#=( =' =' >' ?' ?'!>'!=' ;' <'<';&:&9%8$7$7#6#6"5"5"7#:&;&9$6!3!1!3 5 :2$;3%<5(>6*:1$>3&A6)?4&;0#>6)B;.@;.>8+;5)<5(:3&=5)B:.=5);2&<3'?6*<4(;3';3'?7+<3'<3'>5)>5)>5)B8,  -   - -   -    :3'<5);3'81%5-!:1%;2'5-!80$@6)=3%9/";2&>5*<4)=5*>7+?8,=5)80$6.";2&<3(;3)=5+<5+<5*=6*?8->8+=6)<6)81%6/":3'9$?)!F/(R;3^F?P80@':#:$:%<&!=(">("?)#?)#?)#?)#?("@)#A*#B*$B+$C+%D,&E,&D,&D+%B)#@'!?(!?*!A+"D.%F0&J2(L1(P4+S5,V7.V7.U6,_A6oRFiMBR9/C* =&9#9#9$7#5!4!6"7#7#7#6!7#8$6"5!9%7"8#8$8#7#7#7#6"5!6!6!6!8"8#8#8#;%>)!>)!<'<&A)"C*$@'!>%?' ?& ?' ?' >%>&?& @(!A)"A)"@(!C*#B)#B)#A("@(!A("A("A(!@' ?' @'!@'"@'!@'!@'!@(!A("B)"B)"A("@(!@'!?' @'!A("B)#C*#B)#@(!@'!A("B)"B)#C*#B)#A(#B)#C*#B)#A(!@'!A("A("A("A(">' ;%;%;&;&;&:&:%9%9%9%9$8#8#8$8$9$9$:%:%9$7"5"4!0,(%5"8$A*#N6-cI?rWL\@5E*D)F,$F-%E-&E-%E,$F,#H-#K.#J.$I.&J/(L1*M2*M2*M2+N3,O4,N3,N3+M2+L2*L2+L2+J0)H.'G-&F.&E.%E.$E-#C,"A* ?( =' ;% 8#7"5 8"@(!I.%S7-[>2E.%2/  -%*.135!7#:%<'!>("?*#>("='!>("?*"@)"@(!A("B)#C*#C*#B)#B)"B)#D*$E,%G-'G.'F-'F,&E,%D+$C*$C*#C*$C*$B)#A("A'!@' ?& ?&@& @' @'!@'!A(!A(!B)"C)#B)"B'!B(!C*#C*#B*#B+#B,$B,#A+#A*"A)!A(!B' C' D'"C'">& :%7#4"/*+-036 8 9!9"8"6!8":#:$:#:#:#;$;$;$;%;$;$;$;$;$<% <%:$:$;%<%:#9":#:$:#9"8!8!:#<%;$;$=& >'"<& ;$<% =&!<% ;$<%=& ;%:#:#:$:$;$<$>$>% =& =&!='!;% 8#7#8$8#5 34 6"8$9&=(!@)#@)$A*$@*$@+#A+$B,$A+$@*#@+#@+#@*#@)#?("?'"?'!?& @'!A("@'!?& @' A("A("A(!A'!A("A("A("A("B)#B)#A*#A+#A+$A,$A+#@*"A+#A+#?)!=( =( >( =' ='>)!@*#?)!<( <'<&=' >'!='!;%9%7$5"4 21.*'$!    - -,)+.7!?("B*#E,%A)!=%<%<& <("<)#>*#A+#D,#G.$J/&K0'L2(M2)O3*P4*Q4+R5,T6-U7.V7.U6.S6,R5+Q4*P3)O4)N4*M3(L3'J1'G/(F.(E/*D.)C-(B+&A)#?&!<$9#7#5"1 .+-.02 4!6"7"8#9#:%;&<&=' <';%;%<&=' =' =' ='<'<'<'='=' =( >( >( =( =' <'<&<'=' =(!>)">)">)">)!>(!=' =%=$?& A)"C*#D+$B*#@'!?& >&>&?& ?& >&>%?& @'!@("A("A)"B)#B*#C*$C+$B)#A(!?& >%?& A("C+$D+%C+$B)#A("@'!@'!B)#B*#C*$A(">&=&<&9$;%8#9$<&;%9$9#8#6!423345!4 4 5!6"4!5"6"5!4 4 322579 =%Q90qYOoWMJ2'79!:"?'J1'P6+Q5+R6-S6-S6-O4,K1*F.'B*#?(!;%8#=(!<( >(!@("@("@("?(!=' =' >&!>%"=%!<% :$ 8$7#5#3"1"0!/ . . . ,,/ 1!35<4&<5)>7*;2%>4'A6)=2%:/">6)A:-A;.=8+;6)<5(:3&>7+?8+<5(:3&<4'=5(:2%91$<3&?7*=4(;3&=5)=5)=4(A8+  - - - -      :2&=5(=5):2&6-"91%:1%3+5,!A7)=3&9/#8/$<4)<4)<4)>7+>7+;4'8/#6-!;2&=3(<4)=5+=5+=5*=5*>6+<6);4(>7*81%5."9#:$<%J2+ZA:X?8L2+C*#=' :%;& ='"=(">("='!<& =& >'!>'!?("@)#B*$C+%D,&E-&E-&E,&D+%B*#A*#;&?) C-$F/%H1'M3*Q4.T6/U6.U6-T5-R3*N3(L3'E0$<(8$8%5!6"7#7"6 55 7"8$8$6"6"8$6"5!8#:%:%9$7"6 5 6!5 5 7"7"8#:$:%:%:%<&>)!<';&=&=%A("A)"@'!@(!@'!@'!?' =%>%>&A("A)"@'!@'!B*#A("B)#A)"A)"B*#C*$A("?' ?& @'!@'!@'!@'!@(!A("A)"B*#B)"A("@'!@' @'!@(!A("B)"B)#@'!>%?& @'!@(!@(!A("A)"B)"B)#B)#A)"A(!A(!A("A("@(!?'!>' ='='<'<' <( :&8$8#8#8#8$9$9$9$9$8$8$8#7#7#5"3 1.*&:$7";$A( O5+cH=hL@R6+A%C(D*#D,%C-&C-&D-%F,%G,$I,$I.&J/(K0(K0(L1)M1*M2+N3+N3+O4,N4,M2+L2*L1*K1*I/(F,%F,%H-%G-%G-#F,"D+ B)@)>(<& :% 9#7!;"B&!N/)Y92\<4D,%0/ - ").14 7#9&:&;' =(!>)#?)#?)#@*#A+#@(!?&A(!B)#C*#C*#B)#B)"B)#B)#D+%F-'G-'F,&E,%D+%D+$D+%D+$C*$C*$C*$C*#A("@'!@' @& @'!A("A("A("A("B("B)"B)#C)"E(!E)!D)"D+"C,"B,"A+!B,"C-#D,#E+#F*#H+#P1*^>8]?9L3->)"7"31,++/46 9!9":$9$9$;%<&<&<%<&=& =' <&<%:$:$;%;%<&<&<&='>(!>(!<&:$;%<&;%;%<&='=' =' <'<&=' >( =' =' >( ?)!=( <&<&='>(!@*#>(!;%<%=' =' >(!=' <&<%;%;%;%:%9$7#6"6!5!4!4!6#7%;(!>)"D+%C*%C*%C,%C-%C-$C-$B,#A+!A+"B+#A*"@'!@&!@&!?% ?%?&@' @' @' @' A(!A("A(!A'!B("B)#B)#B)#B("A("A*#A+#@*#@*"@+#A+$A+$A+#?*">( ='<&='>(!?)!?)!>(!=' <'<'<&<%;%:$9$7$6#4"2 /,*(%"      /+*),/24 7!9#:% ;'"<*#=*"=*"@*!B*!F+"I-$J/&K1'L3)O3*P4*P4*Q4+T5,V6-W7/W80V8.T7-S6,R5+P4*N3)L2(K1'I0&H/'F/(E/)E/*D.(D,'C*$B("@'>%:$6"3 13 )+-/24 6!7"8#9$:$:%;%;&;%:%<'>)!>(!>(!=' <&<&<'=' =( =( =( =( =' <'<'<&;&;%;%=' >)">)!>(!<';%<%>%@' A("B)"B)"A)"@(!?' ?' ?& ?& ?' ?' ?' @'!@("A("A("@(!A("A)"B)#C*$C*$C+$C*$A("@'!A)"B*#B*#B*#A)"@(!@'!A("B*$C*$B*#A)#@(!?& =':&;&;&:%;%;&:%9$8#7"5 33335!6"4 4 6!4 4 5!5!4 4 4 335788 ?'\D:t\R`H=A(:":";#D,!N4*P5+Q5,S6-T6.S5.N4-J2+F.'C+$?)!;%:&>(!>(!@)"A)"A)"A)"?(!=(!='!>%">$"<# ;#8#7#6#5#2!. ../0 0 / 0 0 1 45=6*?7*<3&?4'B7*>3&9/";3&?7+>8+=7*;5(<5(;3&>7*<5(<5(<5'=6(>6(:1$91$<4&?7)=5':3&=6)=6)<3'  - - - -    ;2&<4(;3'7.":1%<3'7/#80$A7+=3(8/#8/#;3';3(;4)=5*=6*:2'7.#5, :1%=3(=4*=6+>6+>6+>6+>6+>7*=6*=6*;4(9#8"7!:#@(!C*#B(!@' =& ;& ;& <& ='!>(">'"=&!=& >'!?(!?("@)"A)#B*$C+%D,%D,%D,&D,%D+%B+$A+$=(A+"E.%H0'K3)P4,R5-S5-T6.T6-T6-O4*G0%@+ <)7%6%5%5#6"6!8 655!5!5!6"4 34 5!7#7"9$:%:%8#7!7!7!6!7"8#8#9#:$:%:%:%:%;%<' 9$=%@'!A)"B)#@("B*#A("C+$B*#@'!?& ?& A("A)"?' @'!?' ?' ?& ?& ?' A("A("@(!@'!?' ?' @'!A("A("A("A("A(!@(!@(!@'!?& >&@'!A("B)"B*#B)"@'!?& @'!A("@'!@' @' @'!@'!@'!@(!A("A("A("A("A("@'"?(!>(!=( =' <'<';'9%7#7#7"8#9$8$8#8#8$8#7"6"5"5"2 0-*(%9#6!:#=$F,#Q7,P5*G,!C'B(A)"B,%C/'C.'D.'E-&F,%G,$H-%I.&J/'K0(L1)M2*M2+N3+N3,P5-O5-M3+L2*K2*J1)I/(G-&H-&I-&I,%H,#F,"E* B)?)=):( 8'!7%6"7"9!?$F)#E)"8"// %+.035"7$8$9$:%;%<% =& >("@*#B*#C*$C*#B)#@'!?& C*#F-'E,%C*#C*#C*#C*#B)"B)"B)"C*#D+$D+$C*#C*$D+$D*$B)"A(!A(!A(!@'!@' @'!A(!B)"B)#B)#C)#C)#D)"D)#C*#C+#C,$B,#A+!C,"E-$G.%I/&K/&L.%W8/hH?eH?S;3F0);'4 20-,/24!6#6"7"9$;&<'=( >(!?)!>(!=' <&;%;%<&;%:$:%='=' <';&:%:$;%;&<&='<&<&;%;%=' ?)">(!>( =' <&=' >( =' <&=' ?)!@*#A,$B,$B,$@+#>)!>)!?)"@*#@+#?)";&9%9$8#7#7"7#7"5 44 3 3 3!6$6#<%A("B)"B(!D+#F.%G-$F,"H-$K0&I/&E,$C*"B(!A' @' @' A(!A(!A'!@'!@'!@'!@' @' A(!B)"C*#C*$B)#A("A("B)"A)"@)">)!>( ?)!@*#@*#?*"?)!>( =' ='<&;&;&='=';&:%:%;%<&=&!:%8#5"3 2 100.+'$    #-,-.025 8!:#<% >("?+#>,#>,#?+"A*"C+"G,$I.&J0'K3(N3*P4+Q5+R6,T6-V7.V7/W8/V8/U7.S6-R5,P4*N3)L2'K1'J0&H0'G/'E.(D-(D-(E,'E,%E+"F+!H-#H-#A(;$6!27!),.024 6!8#:$:$:$:$:%;%;%<&<'=' >(!>(!<&:$;%;%;%;&<&<'<&;%:%:%:%:$9#;&>(!=( ;&:%;%='?(!A)"A)"A("A(!@'!@'!@(!A("@(!@'!@'!@'!@'!@(!A("B)#A)"@'!@' @(!A)"B)#C*$D+$D+%D+$C*$B*#B)#A)"A("A("@(!@'!@'!A("A("A("A)"@("@'!>' <';&?)"=( <&:%;%:%9$7!5 4 5!5!5!5!5!4!5!4 334 4 4 4 4 3246765A*!T>4R=3@*!8"9":">&I0&O5+Q5+R6,S6-S5.Q5-M3,I0*F.'B+$?) ;%=' <'='>' ?'!?'!?'!>(!=)"='!>& <$:#8#6#5#5#5"2 0129"@("A)#A("=&6#3!5 6 ?7*:1$>3&C9,?5(:0#=5(@8,A:-<6);5(:2%;4'?7+<5(<5(=5(>5(>5(:1$;2%=4'>6(<4';3&>6*>6*:2& - - -    :2&<4(:2&6-!<3'?7+:1%90$>4)>4(7-"6-!:1%=5*<4)=6*=6*91&8/$7.#80$;2&=4)>6+=5*>7,=7+=6+=6*=6*>6*5 4455 6 9";$:$9$9$:$;% ='!>'"='!=& >'!?("?("?("@("A)#A)#B*$C+$D,%D,&E,&D,&B,%;&@*!D-$G0'K3*O4+R5,T6-U7.W8/U8.S7-K3*B.$=* :(7&5$4$6$6#7!9 8 56"6"6"6"5!34 5!7"7"8#:%:%:%9$8#7"7"7!8"9$:%:%9$:$<&>)!=( ;&;%>' A)#@("B*$B*$A("A("D,%B)#A)"@'!?' @'"@("A("A("@("@'!?' ?& >&>%>&>&?& @'!@'!A("A("@'!?' @(!A)"A)"A)"A("@'!@'!@(!A("B)#C*$B)#A("A)"B)#B)#A("@(!A("A("A(!@'!@'!@' @'!A)"A("@'!>& =' <( >)"?*#>)!<' :%8#7#7#7$9%:%8$6"7"8#8$8#7#6"4!1/+(&=' 9#8":#<$>'!A*#A*#A)#A)"A)!B*"D-%E/'D.'D.&F.&H0'J0(J/(J/(J/(K0(K0(L1)M2+N4,O4,O4-O4-O4-N4,M3+K2*J0)H/(H.(G-'G,%F+"F*!E* B*?)<)9) 6(!4& 2$1#0!1 331/0 - %*-013 4!6!7"9$;% ='!='!=' >' @(!B)"C*#C*#B("A(!B)#D+$D+%E,%E+%D+%C*$B)#A("@' A(!B)#C*$D+%E+%E+%D+$C*#B)#B)#C)#C*#C*#B)"B)"B)#C*#D+$D+%C*$C)$C*%C+%C-&D.'C.%C-$D-$F-$H.%J0%K/%K-$W8/gH>bF)!8$30/0124!6"6"7"8#9$:%;%<&<&<&<'<'<&<&;%<&=' =';&<&=' =' <&<&<'=' >( >( =' <'<&<&=' >)!=( ='=' >( >( >( =( =' >)!@+#@+#@*#@*"?)"?*"@*"?)">( >( ?)!>(!<';&:%:$8$8#7#7"5 4323 5"6"7#<%?' B)!E*"G+#H-$K/%O2'V8.`C8_B7P4*F+"E*!C)!B( B(!B)"C)#B)"B("B)"B)#A("A'!A(!A(!B)#D+$B)"@' @'!B)"A)"?(!>( >(!>)!?)!?)!>)!>(!?)!>)!>( =' <&<&<'='<&;%;&<&<%<%9#6!4 4!2 10/-+(%!  -   -.+,.26 :#>& >&=%>&>( >*!>+">+#@+#B,$F-&I.'I0'J2(L3)O3*Q5+R6-T6-T6-U6.V7/V8/U7.S6-R5+P4*N3)L3(K2'J1&I0'H0(G/(E/'D-&D,%D*$D) E(V9/fJ?^B8R8.F.#:#6 (+./1246!7"9#9$:%<&<'<&;&<&<'=(!>)"=(!=' ;&:$9$:$:$;%<';&:%:%;%:%9$:$<'=( =' =' =' =' >' ?' ?' ?& ?' ?' @'!@(!A("A("A("A("@("@("A("A)"B)#B)#A("@(!A("A("A)"B)#C*$C+$D+%D,%E,&D+%C*$B*#A)"@(!@'!?' @'!@("@(!A("A("@(!?' =' ;&=(!>(!<&:%:%:%9$6!45 7"6"7#7#5!34 6"21124 4 3234 444107#:%7#7"7#8#8#A)!K1)O4+Q5,R6,R5,R5,N4,K2+H0)E-&A*"=(;&=(!<' =' ?'!?'!>& =%=' =(!='=&;%9$7$6#5#5#5"5!5 69G+#T7/W8/X90J1(8'2!46 7.!<3%C:,?6(;2$=5(@9,B:.>7+;4'>6)?7+@9,>6*=5(?7*=5'?6)=4'=4'>5(>5(;3&91$=5)=5):2&  - -     <4(<3'5-!<3'@7+91%91$@6)=3'6,!4+=5)>6+<5*>6+>6+80%7/$6.#8/$:1%=4)>6+;3(<5*<6+=7+=6*=6)2012 3 3!4"5"7#9$:%;%;& ='!>(">'!='!>'!?("?("?("@("A)#A)#B*#B*$D+%E-&D+%B*$@)#:&>) B,#E/%H1'K2(O4)Q5)Q4)S6*T7,T6,O2(H.$A)<(9&8&6$5$6#7#8 8534 5!6"4 35!9%6"9$:%:%:%:%:%:$8#7"7!8#:%;&:%:%;%<'>)!>)"?)"=(!=( <' =(!?*"@*#>(!>' @)"B*#A)"B*#@(!>%=%>%>& ?' @'!A("A)"@'!>&=%=$=$?& @("@'!?' ?' ?' @'!A("A("@'!?& @'!@("A("A)"A)"A)"A)"@(!?' ?' ?' A("B)#B)#A)"A("@(!@'!@'!@' @(!A)"A("A("A("@("@(!@(!@(!@)"?*"<':%:%:&:%9%9$9$9$8$8$7#7#6#5"3 1.*'%<%:"?& D+%D+%@(!@( @( A)!A*"A*"C,#F.%F.&E-%E-$F-#G.$I/&K0)K0(J/(K0(K0)L1)M2+N4,O4-P5.O4-N4,M3,L2+K2*J1*I0)F/)E.)E-&E+#D*!C* A)>(;(9(6(4'3&2%1#0"0!0// - %+-/13 5!6"7#8#:%=& =' =' ?(!A(!B)"B)#B)#B)"B)"B)#B)$D+$D+$C*#B)"B)#B)#B)"A(!B)"B)#B)"B("B)"B)#C*#C*$C*$C*#C*#C)#C)#C)#C)#C*#C*$E,&F-'E+&D*%D*%D*%E,&G.'G.&G.%J0'M2*M2)M3(L0&K.$K.#K.#H-#C,$?*";&6"4 10124 5!7"8#9$:$:$9$9#:$;%:%:%<&=' =' <&;&;%=' @*#?*"<&;%<'=' =( >( >( >( =' ='='='=' =' <'<&>(!@+#?*">(!=' <&=' ?)!?)!>(!>(!?)!>)!=( =' >( >(!>(!=' ;%:$:$:$9$9$7"6!5!5 42236!9$;&@( C*"F+#H,$J-$M/&Q3)Y:/eF;hI?X90J,#G+"D)!C)!B) B)!B)#A("A(!A(!A(!@'!@' A(!B)#C*$D+%C*#@' ?&@'!@(!?(!>(!?)"?)">( ='=' =( >(!?)">(!=' =' ='<'<&=' >("=' ;&:$9#8#8#7#6#5#3!11/,)%"   -   +-.09$E.&L4,P7/M4-D+#=$=&<'<) =+!?+#A,$D-&G.(I0(J1(L3)N3*P5+R6,S6-S5,S4,U6-V7/T6-R5+P3*N2(M1'L2'K2'I1&H0%I0'I1)H0)F/*F.'F,%E*!D(O2'`C9dH=Y>3M3)@(59!*+.13 5!6!6!7!8#:%='>)!<':%:%;%;&;%;%<'=' <&;&;%:%;%;&;%9#9#;%<&:$8":%<'=(!?*"?*">(!=' >' ?& ?& ?& @'!@("@(!?(!?(!@("A("A("A("B)#C*$B)#@'!@("D+%D,&B*#@(!A("A("B*#C+$D+%D+%D+%C*$B*#B*$C*$B)#A)"@(!@'!@(!A("B)#@'!>%<%;'<' =( <' ;&:%9$8#6!5 7"8#7#8#9$7#5!4 4 5!312222234 5 24323 2 25"7#7#7#;%F-%N3+Q5,S6-S6,S6+P5+M3,J1*H0)C,%@*"='=(>)!>)">(!?'!?'!?'!>'!=(!<( <&;%:$9$9%8%7%7$6$6#6"6;"K/&X:1\=3_?4J3)6&3!56!<3%A8*?5'=3&?6*A:-B;.?7+;3';3&>7*@8,>6*=4(@7+<3&?6)?6(>4'>5(>5(;2%8/#=4)=5) -   =4(=5)6-!<3'A8,<3';2&A8+>5)7."7/#=5)@8->6+>7,>7+70%5-"5-"7/#90%;3'=5*<5*>7,=7,>7,<5(2!1 4#7& 9(":)#8'!5$5#7#9$:$;%<& ='!='!>'!>'!>'!?("A)#B*$B*$B*$C+%D,&D+%C+$C*$B*#A*#@*#>) B-$F0&H1'J2(L4(O5(Q6)S6+S6+S4*R2([=4]@7H/&9$8$7%6$5#5"5 65423324 7"5!6"7#9$9$:%:%:%;%:%9$8#6!6!8#9$9$:$:%;&;&<'>(!<' =(!>)"<' <'=( =( =( >)!?*"@+#A+$?*">(!=' ;&<&>(!?("@)"@)"?(!=&<%;$=%?'!?(!=%<$>&@'!@'!@(!?' >%=%>%?& @'!A)"B)#B)#A)"@(!@(!@("@'"@'!@(!A)"B)#A("?' @(!B)#B)#B)#B)#A)"B)"B)#B*#B)#A("@("@)"?)">)!=( =' <';&9$7#6"7"8#8#7#6"4!2 10,'$<'>&B'R8/aF>X<4J/&D*!A(A) B)!B*"D,$F.%F.%F-%F-%F.%G.&H.&J/'J/(J/(K0)L1)L2*M2+M2+M3+M3+M2+L2*K2*K1*K1*J1*H0*D/)B.(A-%B,"B+!C*A(?'<&9&7%5$5$5"6"5!3 0./ - &+.123 5!7"8$:%;%=& =' =(!?(!A)"B)"B)"B)"B)"B)#C*$D+$C*#C*#D+$D+$C*$C*#D+$D+$C*#B)#A("@'!@'!@'!B)"C*$D+$D+%C*#A("B)"C*#C*$C*#D+$F,&F-'E,&E+%E+%E,%E,&F-&H.'I0'H.&H-%J/&L1'L1'L1'K0&K/$G-$B+#?*"=' 8"310035 6!7#9$:%:%:$:$9$;%<&<&;%;%<&<&<&=' >)!>( <&<&<'<&:$:$<&=( =' <&;%:%;%;%<&=' <'<&>( ?*"?)!>(!=' <&=' ?)"?)!='='>)!>( ;%:$<&=' >( >( =' <';&;%='>( :%7#8#9#7"5 4 4 6"6";&?)"B+#C+#E,$H-%L/&M0'P2(X9/]>4S5,I,$F+#D*#B*"B*"B*"C*#B)"@'!@' ?& ?& ?& A(!D+$E,%E,%D+%B)#@'!@'!@(!@)"@*"@*#A+#?)!='<'<&='=' >( >( >( =' <&;%:$:%:%;&:%8"7!8"8#7#5#2 0/-+(&$    -   /029%G1'R:1T<4U<4I0)=%<%<&<';( <)!>*#A+$D,'F-(H/'J1'L2(O3*P4+R6,R5,S5,T5,T5-T5,R4+P4*P3)O2)N3)M4)M3(L2'L2(K2)I2*G1*G0)G/'G-%F+"I,"V9/bF;X=3O5,C+#8"5')+/24 5 5 58";%<'=' <' <&<' <' =' =( >(!>(!=( <';&;&;&;&<&<';%9$:%<&;&9$:$<&=( >(!=( =' =( >(!?)!?)!=( =( =' =( =( =(!?(!@("A)#B*$C+$C+$C*$C*$C*$D,%E,&C+%B)#A)"A)"A)"C*$D+%C+$C*$B)#A("A("A)"A)"A)#A)"@'!?& @("B*#@(!>%<%<&<' =(!>)"=' :%8#8#8#8#9$8#6"7#8$9%7#5!5!4 5!32212333 4 32332102 4 5!7#8#?) H1)M4,P6+Q6,Q6*O4(M2)K1*H/(D,&B+#@*!=(9%>)">)"?("@("A)"B*#@*#?)">(!>& >% =%!=&!<'"<(#:'#8'"7% 5#5!5 :#B* H/$K1&K1&<(/ 147!?6(>5'>4'?6*A9-B:.A8-;3'>5)?7*?6*?7+=5)@7+=4'?6)?5(=4'=4'>4(<3&7/#>5)>5)  <4(7.":1&=4(<3'=4'B8+@7*;2%90$;3'?7+?7,@8-?8,:2'6.#7.#90%<3';2'=4)<5*>7,=7,>7,6!5<&D-%L4,T<3P7.B(9 9":$:$:$:$;%=& >'!?("?'!?("A*$C,%C+%B*$C+%D,&D,&D,%D+%D+%C+$A*#=(@+"D.%G0'I2(K3)M5(N6(S8+U8,V6+U3*`?6pQHfI@B)!7 6!6"5"4"4!4 55 4 3 5 5!5!6"5!36":%=(!=( <';&<';&:%9$9$:%:%:%:%:%:%;&<&;&;&;%;&=( =(!:%:$;&<'=( ?)">)">)!?*"A+$@+$>)"='!<' <&=( >)!>(!=( <' <&;&<'=' =( =( <';&<'?)"@)"=&:$;$;$<%=&>& ?' ?'!@'!?' @'!@(!@(!A("@(!@'!@(!@' ?' A("C*$C*$C+$C+$B*#B)#@'!?& @'!A("A("A("@("@)">(!<&:%:%:&9%9$9$9$8$7#6"3 10/+&$?(E,"R7-eJ@pUJZ>4E)C(C(C* D+"E,$E,$F-%F-%F-%F.%F.%G.%H.&I/'K0(K0)K0)K0)L1)L1*M2+N3,N3,M2+K1*K1*J1)J0)I0)I/(I-'G,&D+$B+#@,#?+!>)=';%:$9"9 ?'"G.)M3-J0)B(!4,- - "*-/13 5"6"7"8#9$;$<%=' >)!A)"B)#A("@'!A("B)"B)"B)"B)#C*#C*#C*#B)"@'!@' A("B)#A("A(!A(!A(!A(!A(!A("A(#B)#C*$D+$D+%D+$C*#C*$D+%E,%E,&F,%F+$F+$F+$F+$G,%H-&I-&I.&I.&I.&G-%F,$G.&H0'I0(J1*F.'A)#?(!=' ;& 7"3335 7"9$:&<&=' =' =' =( >( =' <&<&='='='=' >( >)!?)!?)"?)!>( =';%9$9#<&=' <&:%:%;%;%<&;&;%;&<&=' >)!>(!>(!>( =( =' =' <'<&<&<&<&<&<&=' >( @*"A+#@)"@( ?( >( >(!>)!;&9#8"8!7!5 5 6"7":%<'!>)"@+$C-&E/'G-&H-%J.%K.%L.%L.%J-%H,%E+$B+$A+$A+$B+$C+$B)#A(!@' @' @' @' @(!B)#C*$B)#A)"@'!?& @'!A(!?(!>( ?)"?)#>)!=' <&:$;%<&>(!@*"@*#?)!=' ;%:%;&<';%:$9#8!8"7#5"4!20/-+*'#    -   -0.04!A-$N80P81P70H0)>' ;$:%:&:&:' <(!>)#@)$B)$D,$F.$I/&L1'N2)P4+R5,S5-T5-S4,R4+R4+R5+Q5+Q4+P4*N4*M3(M2&M1&L3(L3*J3+I2+H0)G.'G-%G,#F*!C(@%<#8"6"6#9#'*.3 4!5!6"7"9#;&<'<&;&=( ?)"?*"?*">)!=' <&<&<&;&;%:%:$;&=' <' <&;&;&;%;%;%=( ?*"=( :%:%<' >(!=(!=(!=( =' >(!>)"?*"?)">)!?("A("B*$D+%D+%D+%D+%D+%C+%C*$B*#B*$C*$B*#A)"B*$D+%D+%B*#A)#@'!>& >%=$?' B)#A)#?'!?' @'!@("?'!?& =' <'<' =' =' ;&:%:%:%;&;%9%7#8$9%8$7#4 4 5!4 4 322332223 212214!9&8$7"9#8$:'B-$H3+L5,O6-P6+Q5)O3)M1)K0)H/(D-&B,$?*!;'=' >)"?*#A*#B*#B*$B*$@*#>*#@)$B($B'%@'$?'$?($>($;'"8%!6$4"3!3!4"6$7%8%6$2!/124"?6(=5'?5)?7+A9-A8-=4(>5(?6*=5)@7+=4(?5)?5)?6)>4(=3&<2&=3'<3'8/#>5)  =5):1%:1%>5)=4(<3&A8*?6);2%8/#;3&<4(>7+@8,;4(70$6.#7.":1&=3(<3(=4)<5*>7,<6+5 48"?' K2*[A9`F'!?("?("?("@)#B+$C+%C+%D,&E-'E-&E+$E+#F,$F.%D+#>)!@*!C-$F0'I2(L4*M5*N6)Q7+V9-W9-\9/`=4oOFlNEU80=#9 6"6"4!3!4!5!6"34 6"6"6"6"5!5!5!8$9$;&<'<'<'<';&9$8#9$;%;%:%:%:%9$8#8#9#9$;&;&<'<'<'=' >)!?)">)">)!<' ;&=(!?*#>)"=' <' <'<&=' =( =( =' <' =' =' =' =( >)!?)"=(!<' <'<';&9$9#9$:%:%;%;%;%=&?' @'!@(!A("A("A("A("@'!?' ?& ?& @'!@("A)#B*#B)#B)"A)"A("@(!@("@("A)#A)"A("@'!>' ;'<' =' <';%9$9$8#7#6"4!2 00.*'%B*!M3)]B7hMBfJ@P4*C'D(E)E+!F-#F-$G-%G-&G.&G/'H/'H/'H/'I/'J/(K0)L1*L2*L2*M2*M2+L2*L1*L2+L2+K2*J1)I0)H/(H/(H-&G,$F,%E,%B,%@,$=+#:) 7'6&5$5"5A) O4,V92V70I-'6!+,   #)-023 5!6!8"9#:$;$<%='!?)"A*#A*#@(!>&?' @(!A)"B*#A)"A)"A)"A)"A("@' @'!A("B)#C*#C*#B)#B)#B)#B)#B)"A("A("A(#A("A(!C)#E+$E,%E,&E,%D+$E+$H,%I,$H+#I+$J-&K.&H-%G,$G,$F,$F-%G-&G-$G.#T9/`E;R80A*">&<&:$7"6!5 6!8#:%<& >'!=' =' =&=&=' >( >( >( =' <&=' ?)!>)!>(!?)!?*">)!=' <'='<&9$9#;&=' ='<'=' >( >)!?)!=' ;&<&<&='=' =' =( =' <&<&<'<'<&<&='=' =' >( ?*"A+#A+#@+#?(!>%?' @(!?(!>( =( =':$8!7 6 6 7!9#;$<& ?*"A,$D-%F.&G-%H,$K.%M/&L.%K-$K-%K.&G-%C+#A+#B,$B,$B+$A*#?(!?( ?)!@)"@)"@)!@)"@*#@)"?(!>(!>( ?)"A*#A*#A("A("A("@("?' ?& ?' @' ?& ?&>%>%>%=$=$=$>%?&>' >( =' <%;%:%8$7"5!20.,*'#    - &,-.14 5556 7!7#7$8%8& ;(!=)#?)#A)$C+%F.%H0&K1'N2)O3*Q4+R5,T5-R4+Q2*Q3*Q4*Q4+Q4+Q4+O4*M4)N3'N2%M3'M4)K3*J3,I1+H0)G.(H-&G,$D*!B(>&;%8$5$8$')-2 4!5!6"7"8#;%=' <'<&<'=' =( >(!>(!<&9$8"6!8":%:%:$:%<'=( =' <&<&<&<&<&<'=' =' <&;%;&;&<&=( >)!>(!>(!>)!?)"=(!<&>' @(!A)"B*#B*$C*$C*$C+$C+$C*$C*$B*$B*#B*#B*$C*$B*$B*#B)#A)#@("?'!>& >%>&?'!@(!@(!@("@(!@'!@'!@'"?'!=(!<( <';&;&<' <'<' <&:$8#8$9$8$7#5!6"6"5!5!34 4 3 3210133 13"4!5 ?(O9,XA5O6*B)<$9!>& E,&L2,P4-Q5-R5+R5*P4+N2+K1*G/(D-%B,#>) 9%='>' @("A)#B*#A)#@("@*#@+$?+%>+&>*$>)!>(>'=%:$8#6#3#2"1!1!1!1 2 20/13 4!>5(?6*@7+B9-A8,=5)>6)>6*=5)B9-=5)>4(>4(?5)>4(=3'=3'>4(;2&9/#>4(   ;3'91%;3'=4(<3&?6(=4';2%8/#80#<4(=5)>6*<4(<5);3'80$;2&=4(=4)<4);4)=6+6"5 4 6 ;%K4,X@7M4,A'=%:$9$;%<& <& ='!>'!?("?("@("@)#A*$B*$C+%D,&F.(G/)F-&F+$F,$F.%E,$C+#>) A,#E.%H1'J3)N5,Q5,T7.T7,V9-Z;0_?4eG&=' <( =( =( <&:%9$9#8"6"5!3 2 0.,)&9#=%C) K0(R7.N3*E*!D)D* E*!E+!E,"E-$F-%F-%F-&G.&H0'I0(I/'I/'I/'J/'K1)M3*M3+M3+L2*K1*K0)K1)K1*J1)I0)H/(F-&E,%G,$G,$D+$C+$@*#>*#<)":' 8&5%4#4!5 @) N4,R6.Q4,B)"/(  - $).3446!9":#;$<% <& =' >( >(!>(!>(!>(!>(!>( =( =( >( =( =' <'<&>' @' @'!A("A("A("A("A(!A("A("A("A("A("A("A("?& >%@'!B)#C*#C*$D+$D+$E*%G)&G)$F)"G+"I.$I/%H.$G.$F/%G/'I/&K/&N/$S1%mH:]MbC8@*";&:%9#7 6 6!6!7"8#<% >'!=& =&<$<#<%<&<&<&>( @*"?)!=' >(!?*"?)!=( <';&<&<'='=&=&=%<%=&=&?' ?(!@)"A)"@)"?(!?(!?(!>' =&>'>' >' =&<&=&=&=&=&=&='>' ?(!@)"@*"?)!>( ?' @'!A(!A)"@(!>'>'>( <&:#8!557!7"8$:&=)!A,$B,$D,#G-%J.&M0(P2)R2*R2*P2)N0)J.&E+#B*"A+#A+$@+#@*#?)!>(!?)"@*#?)">(!>)!>)!=( ='=( >)!?*"@*#@)"@(!A(!B)"A("?&>%?& A("@'!?& @' @'!A("B)#B)"A(!?& >%>&>( >(!='!<& ;%9$8#6"4!20.+(%!   -   -/.-.0223344!4"5$7%9& <("?)#@)#C*$F.&J1'L1(N2)N2)N2)O2)P2*Q2*Q2*Q3*Q3*P3*P3*P3)O3)O3)O3(O3'N3'M4)L3*I2*G0*H0)H/(H.&H,$F+!C)@'<%9$8%7%9%),03 4!6$6#7"7"9#:$;&<';%:$;%<&;%9$8#9#9$:$:$:$:$;&=( =' <&;&;&<&>)!A,$@*#>)!<' ;&:%9$:%=' ?)">)!=( >(!>)">)!<' <'>' @("A)#B*$B*$C*$C*$C+$C*$C+%C+%B*#A("A)"B)#A)#A)"A("@(!@'!@'!@("?'!>& ?' @'!@("@("A("A)"A)#@("?'">'!<' ;&:%:%;&<' =( =(!=( <';&6"4 5!8$8$8$8$6"6"6"6"5!4 3 33333 02 5 5=&R9.gODdK@T:1B(!=#:!@'!G.(L2,P4-P3+P3(P3)N3+L2+I0)F.'D-%A+"<(9%>&>& @'!A)"A)#A)"@(">(!<(!<'!<'"<& <%<%;%:%8$7$5#4"3"3"4!4 6740./02?6*A7,C9.B9.=5);4'=5)=5)D;/>5)>4(=3'?5)>4(>4'>4(>4);1&:0$<3'  =4);2&<3'>6*=4'=3&>5(<3&6.!81$;4'>7*=6*=6*>7+;2&8.#;1&=3'<3(=4);4)<5*3!12 3!:&A,%@*#>'<%:$:$;% =& >'!?("?)#@)#@)#@)#A*$B*$B+%B+%C+%E-'G/)G.'G-%F,$E,$D,#C+#>) A+"D.$H1(J3)M5,P6-S6-U8.W:.V9-U6+U6+S6,N2(D,#:&6#4#2"2!2!3!2102325!6"5!6"7#7#:%9$:%:%9$9$;&=(!=(!;&;&;&;&:%9$9$9$9$9$:%;%;&;&:$8#9$9$9$:$:%;&<';&:%:$:%:%;&;&:$9#:%;&;&;&<' =( =( =' <';&;%;&;&:%:$:%:%:$:%;%:%:$;%?' @'!@("@("?'!?& @'!@(!@'!>&>%>%>&?' @'!@'!@'!@(!?)"?*"?*"?*"@*#@*#@+#A,$@*#>)!<&:$:$;%;&:$9#8"6!5 4!3 1.,(%57!9!=$?&B(!C*!C*"C)!C*!C*"D,#F-%G/&F.&F.&G/'I0(I1(I/(I.'I.'I.'K1)N3+N3+M2+L2*K1)K0)J0)I0(H/'G.'G-&F-&E-%E-$D,#C+"A*"?(!<& ;%9$8#6#5"3 37"='@)!A) 7"+) -  $*034 6!7"9#:#;$<% =&!=' =( ='<&<&='=' >(!>(!>( =' =( =( <'<&>&@' A(!B)"B)"A)"A(!@' @'!A("A("@'!?& ?& ?&>%>%?& A("C*$D+%E+%E+$E+&F,'F+&G+$H,$K/&J/&I-%G,%J0)J0*J0*J.(K.%O0%gE9xVH[?4>)"<'9%7"5 4345 7"8$:$:%:%<&='='='>( ?)!?)!?)!=( <&='>(!>(!>(!>(!>(!=' <&<&@(!@(!>%<#>%@' @(!A("A("A("A(!@(!@'!@'!@(!@(!@'!@(!@'!?& ?& ?& ?& ?&>%>%>%>%>%@' A)"@'!?& @' @' ?' =( =(!=)!=(!<' ;&:$8#6!5 5 6!7#:%=)!A,%C-%E-$G.%I.'O2*V8/`A8aB9X91O2*I-&E,#C+#B+$@+$A+#A+#@+#@*#@*#@*#?*"?)!?)"?)"?)">(">(!=( >( ?)!?)"@(!A(!A(!?& <#9 =$@' @(!A(!A)"B)#C*#C*$C*#B)#A("@' ?' >(!=' ;%:#9$9$6"4 310/-*'#    -  -  1 -----/2345!5#7%9&;'='@(D*!G-$I.%K0&L0'M0(M0(M0(M0(O2)P3*R4,T6-S5,Q4+P3*O2)O2)P3)P3)P3(O3'N3)L3*J2*H1+H0*I/)I.&H-$J.$M2'N4)I0&C-#<(5#7#)-/022!3"6"8"9$;%;%;%;%:%;%;&;&;%;%;&;&:%:$9$9#9$:%;&;&;&;&;%<' >)!>)!<':%:%:%;%;&<' >)!>(!<' <' =(!>)!?)"@+#A+$B+$C*$C+$C+$C+$C*$B*$A)#B*$D,%D+%C*$B*$C*$C*$D*$C*$A(">&>& ?'!@'!@'!@("A)"A)#A)"@("A("A)"A)"@(!?' =' ;' ;' <'<'<'<' =( =( <' ;&9$7#9%8$8$7#7#8$8#8$7"5!4 4 4 3 3 4 5!5!5!5!58!E-$X>4hMDhLCL1)A& 9 <#A)$H/*L1,N2-O2*P2(M0(J/(H.'F-'C,%B,#?) 9%=' >' ?' @(!@("A("A)"?)"=)"=)!=)!>) >(>'=';':'9' 8& 6$ 5#5#6#;$A'F)K-!@'2--/2 @7+B9-B9.:3'81%<3(<4(D<0?6*=4(<2&=3'=3'>4(>4(>5)<2'90$   ;3':1&=4(?6+<3&<3%>6(8/"6.!81$<5)>7+>7*>5*>6*:1%7.#;2&?5*;3':3'<6*3!001 3!5"7#9$;%;%;& ;& <& <& ='!>("@)#@)#@)#A)#B*$C,&D,&D,&E-'G/(H/(H.'H.&F-%E,$D+#?*!@+"C-$G0'J3)M5+P6-R6-R6-W:/X:.V7,T4*M/$E(A%:$7$6$4$3#2!3!3 211123 5!6"4 6"7#8#9$9$;&;&9$9$<' ?*">)!;&;&;&;&:%:%:%:$9$8#8#9$:%:%:%:%:%:%9$8#:%;&<'<' <&:%:%;&<' ;&:%:%<'<' =(!=(!=(!=(!=(!=(!=' <';&;&;&;%:%;&;&;&;%:%:%:%<%>%@'!A)"A)"A("A("A)#B)#@'!>%?' @(!A("A)"A)"A)"A)"?(!>(!>)!?)"@+#A+$A+$@+#?*"?)">(!>(!=( <';&;%9$8"8"8"6!421.+'444 8":#;#>' A)"B*#C+$D,$D,$D,$D,$E-%F.%F.&G/&H/'I0(J0(J0(J/(J0(L1*M2+M2+L2*K1*J0)J0)J0(I/(G.&F-&F-%E,%E-%D.$C-$C-#A+"?(!=& ;% :$ 9#7"5!3 20.-,*(* -  %*035!7"8#:#:#:#:$;$;%<&<&<&;%:$;%>(!?)">(!=( =' =' =( >( ?' ?& A("C*$B)#A(!A(!A(!A("A("A("B)"A("A(!@'!@'!@'!@' @' B)#D+$C*#A("B+%D.(E-&F,$G,#I,#J-$L.&L/(K0+K1-L1,L1+J/'K/%U8,Z=0M4*A,$=)!:&7#4 2015 6!6!7"8$:%:%;%:$:$:$:$;%=( =( <'=( @*"@*"?)!>( =' <&<&>' @(!A("@' ?& @'!A(!C*$E,&D+$B)"B)#C*#B)#A("A("A("A)"B)"A(!B)#B)#@' ?&?& ?&>%>%?& @'!@' @' @'!A(!@(!@' ?' =' ;';&=' ?*"=(!:%7"4335!8#;&>)!C,%E.&G/'I/'K0(P4,W:1cE;fH>]?6Q6-I.'F,$C*!A)"@)"A+#B,$A,$A+$@*#?)"?)"?)"?)">)"?)">)!>)!>(!>( >)!?)"@)"A("C*$D,%C+$C*#B)#B)"B)#B)#B)"B)#B)#C*#C*#B*#B)#B)#B)#A*#@*">(!<& :$7#7"6"5!3 10-*'$"     ---./ 2 6#<& =&!:#7 7#8%8&9'<(?*B+!F-#H-$H-$H-$I.$J.%L0'N2)O3)O3*P4+Q5+Q4+O3)N2(N2(N2(P3*Q5+P4)P4(N3(L2)J2*I2+I1+I0)I.'I-$I-"T7-_C8[@5R9/G0&<&7"9$+-/000 3!6"8#:%;%;%;&<'<' <'<'<&;&;&:%:%:%:%:%9$:$9$:%;&;&;&;&;&<';%9#9$9$:%=' =( =( =( =' <' =( =(!>)!@*#A+$A*#B)#B)#B)#B)#A)#A)"A)"A)"C+%E-&C+%B*#A)#A("A)"B*#B*#@("?' >& =%?' A)#B*#B)#A)"@("@'!?'!?'!?' ?'!>' =' ;&;%:%:$9$:%<&<&;%;%<&=& <&:%:&:&:%9$7#6"5!4 33 4 5!5!5!5!5!6 7 7 ;#C( Y>6`E=W;4C*$9#7!<&"B,(G0+L3-N4-P3+N1*K/(I.'F-&D,%B+#@* <'8$>' >& >& @'!A)#A)"@("?(!=(!=) >)>(>'=&;&9&8%6%5$4"4"5!<%I/&U7,^>2gE7L3)2 ..03!@7+?6+92%;4'<4(=5)C;/>5*<3':1%<2&<2&>4(>4)>5)<3':1%  8/$<3'?5*;2&;2%<4'<4'7/#7/#92&@8,@9,@8,?7+:1%7.#;1%<3':2&81%4!2113 6"8#9$:$;%<'!<'!<&!<& <& =&!>("@)#A*#A*$B+%C,&D,&D,&E-'E-'F-'F-&G,%F-%E-$D,#D+"?*!C-$E/&I2)L5+O6-R7.S6.T8.W:.U8,U6+P2'E(?#=$9%8%6% 4%4#3!3!4!4 4!4"4!3 5!6"6"7#8$6#6"7#9$;&<' ;&;&=(!<' :%9$:%:%;&<'<' ;&:%9$9$9$:%;%:%9$9$:%:%:%:%:%;&<' =( =' <' <&;&;&=(!>)!=( <' <' <&<' =' =' =(!=(!=' <' <';&;%:%:%;&;&;&;&:%9#9#<$=%?' A("A)"A)#B*$D+%C*$@(!>&=%<$?& A)#A)#@(!@(!=' <' >)!@*#@+#@+#@+#A+$@+#?)">)"?)"?*"=(!<&;&:%9#7!6 5 4 1.,)%6!8 8 :"=$=%>' ?(!B+$D,&E-&E.&E.&E-&E-%E-%F-%F.%F-%G.&I/'J/(J0(J0(J0(K0)K1)K1)J0)I/(I/(H/'G.&F,%E,$D+$D+$E,$F.%E.%D-$A+#?("=&!<&!;%!9#8"5!310 .,**)   ")-036"8#8#9#9#:#:#:$;$;%;%;%;%:%<'?)"?)!=' =' =' <'=( >(!?'!@'!B)"C*#C*#B)#A("@'!@'!@'!@'!@' @'!A(!A("A(!A("C*#C*#C*#B)#C*$D+%B+$@+$A*"B) E*!I+"I+#J*%I*&G+&G-(H/*I0*I1)I0'J0%I0#F/%D.'?*#;'9%7"5 347"7#7"8#8$:%;&<'>(!>("<&:%;%<&='>( ?*"@+#A+$@*#?*"?)">)!>( ?)!A)#C*$B)#B)"A(!@'!C+$F-'C+$A("C*$E,&D+%C*$B)#A("B*#C*$B)#B)#C*#B)"A("A("@'!@' ?' @'!@'!@'!@'!B)"C+$B*#@'!?(!>(!<' ;&=' @*"?*";%8#7#6"4!4 7#:&>)"C+%F-&G-&I/'J/(L1)Q5,Y=3]A7Y=3R7.M2*I/'F+$C)"@(!@)"A+$A+$A+$@*#?)!>)!>)!>(!>(!>(!>(!>( >( >( =' ='?' A(!B)"C*#D+$E,&D,%C*$C*$D+$E+%D+%D+$C*$C*$B*#B)#B)#B)#@(!=' ;%;$9#8#7"6#5"3 221-)&"   -  -  /./3"<)!F1)M6/Q81E,&8 7!7"7$8&9&:&=&A)!F+$F+#E*!G,#J.%L0'N3)O3*O3*O3*O3*O3)M0'K.%L/&M0'N2)O3*O3)O3'M3'K2'J2(I1)H0)H/(H.&I-$I+"R4*`B7dG=\@6Q7.D,#8"8"8#,.0002 5!7"8#9$9$:$:$:$:$:%;&;%:%:$:%:%:$:%;&;&:%9$9$:%;&<' <'<&<&;%;%;&<' <' <' <&;&<&<'<' =( =(!?)"@*#@*#A)#B*#C*$C*$A)"@("@("@(!A)"B*$B*$B*#B*$B*$C*$B*$B)#@("?' =%;#;#=%?'!?'!@'!?'!?'!?'!?'!?'!@'!@(!?' >& >& ?'!?' =%<$<$<$=$=%?' @(!?'!<&:&:%9%8#6!6"6!6"6"6#7#7#7#6"5!6"8#6"44:#@'D+#B)"<$9#6"9%;'!B.(H4,J6.L5,M4*M3*M2*J0)H/)D-%A+">):%7$=& >&?& @("A)#A)#A)"?)">)">)!?(>(>'=';&9&7%5%4#3"4"6"?( L0'Y9/fD8jH5*@8,=5)<3';1%=3'<3'>4(=4(=4(<3'   :1&;2'?5*:1%8/#<3'=4(<4(70$92&>7+?7+?7+>6*90$7.";1%<2'=4)5 46!8#<&?)!A*">&<#;$;%<& ='">(">(">(">("?("@)#@)#A*$B+%C,%D,&D,&D,&D,&E+%E+#E,$E-$E-$E,$>( A,#D.%G1'K4*N6,O6-Q5,R6-U8-V9-U7+S4)M/$D(@%<&:&8& 5% 4$3"2!3 4 4!3!5#6#7$7$7#7#9%7#5"6"7#8"9#;%<& :$9$9#9#9#:$:%<&=(!=(!<';&<'<' ;&:%;&;&;&;&;&;&;&;%:%:%;&<' >)!>)";&8#:%<' <' <' <' <'<'<' <' =( >)!=(!=' <' <';&;&:%:$9$9#9$:%9$9$:$<$=%?'!@(!@'!@'!A("B)#A)#@'!@("?'!?& @'!A("@'!>%=&=' =( =( >)"?*#@+#@+$A,$@+#?)">)"?)">)!=( <'<'<&:$8"7!6"4 0-+)6#;$@'G,!J/$I/$C*@(A) D,%D-&D/&D/&D/&D.&D-%C-$D-#E.#F.$G-%H.&J/(J0(I/'H.&I.'I/'J/(J/(I/(H.'G-&F-&E,%E+$D+$D+$F,$G-$F-%D,%A*#>("<&!;% :$9$7#4 24"4#0!+*** - - %*.135 7"9#:#9#:#<% <& ;%;%<&<'<'<'=( >( >( >( =' =' =' =( >(!?' @'!@(!A("D*$E+%C*#B)#B)#B)#@'!>%?& @(!@'!?& ?& @'!B)"C*#C*#A("@'!>(!=("@(!C( F*"I+#I+$I*&H+'H,(F,(F,'F-'I0(J1'J0%G."E.%C-%?*";' :&8$7"5!6!8$9$9$8$8$9$;%;%;&;&<&='=( >( >)!@*"@*#@*"@+#@*#@+#B,%A+#>(!?)"C+$D+%B)#A("A("B)#D,%E,&C*$B)#C+$D+$D+$C*#B)"C*#B)#D+%D+$B)#B)"A)#A("A("A("B)"B)#B)#C*#C*$C*$A)"@'!@' ?&>& <' ;';&<&=( =( :%6!6!6"5!4 8#;&?)"D+%G-'H-&H-&H-&I.&I/%J0%K1'L2'M2)M3+L1)J/'G-&D*$A)"?)"@*#@+#@*#?*"?)"?)">(!=' <&=' =' =( >( =( =( ?(!B)#B)"A("A)"B)"C*#D+$D,%D+$C*$B)#A)"B)"B)#A("@'!@' ?& >& <';&;%;%9$8#7"6!5"4!21.*'#   -  - -,.2>) K4,P80R91I0)>%9"9#9$8%8&:&<&?' B)"D*#E+$G-%H.'I/'I.'I.'J/(K0)K0(K/(J/(J.'J/'K0(K0)K0)K0(K1'K1%J2&I2'H1'G0'G/&G.%H-$I,#L-$T5+[=3V:0O4+E,$<%9"7",-...03 6!7"8#9$9$:$;%<&<&;&:%:%:%;&;%:%:$;%;&:%9$:%;&<' =( <' <'<&<&;&<&<' <' ;&:%;&;&;&;&<' =(!>)">)"?)"@)"A("A)#B*$A)#@("?'!?'!?'!?'!?'!A)"B*#B*#A)#A)"A)"@("?' >&<$:";#<$=%?& @(!@(!@("@("@("@(!@(!?'!>& =%>&>& =%=%=%>&?' @("A)#A)"@(">(!<' ;' ;' ;&:&:&9%8$8%9%8$7$7#7#7#6#5"4!3 36#6!5!6"7"7#6"8%9& =*$D1*K7/M8/P8,P7,O4,M2+J0*G.(C,$@*!<'8$='!?(!A("A)"B)#B)#B)#A)#?)"=(!=( <' <&<&;%;%9$7$6$5#5#5!5 =%G,$T6-aC8_B8F0)3"0.13 >8+?8+=6*>5*>5*=4(<3'<3'>5(=3'<2&<3'=3(=4(  80$<3(:1&90$<4(=4);4(92&91&;3(=5*@8,@7,;2&7.";1%=3'5 59"A*"K2*U<3_E(">("='!=& ='!>'">'!>'!?'"@)#B*$B+%C+%C+%B*$C*$D+#E+$E,$F-%E-$>( ?*!B-$F/&I2)L4+N6,P6-Q4,S6,V9-T7+R3(R3(J-$C'=$9%8%5$3#3"3!2 134!4"5"6"8$7#5"7#:& 9&7#6"6!6 6 7"8"7!7!9":#<$>& >& =%=%<$<$=%>' >' =& =&<&<&<&<%;%:%:%9$9$9$9$:%<'<' ;&;&:$9$:%;&;&<&<' =( =( >(!>)!=(!=( <' ;%:%<&<':%9$:%:%:%;%;&=%=$>%?'!?' ?& ?& >& @'!@(!@(">& >%?& ?' @'!A)"@(!?(!>(!>(!>(!>)">)">)"=(!>(!?*"?)">(!=( =' ;&:%:%;%:$9#7!5!30-+'7"D+!R6,\?5_C9X<2L0'B(B(!C)#D+%E-%E.&D.&D.&C.%C.$C/%D0&F0&H/'J/(K1)L1*J0(H.&H-&H.&I/(K0)J0)I0(H/'F-&E+$D+$D+$E+$F+$F,$E,%C+$?*#<(!:' 9&8%6$5"4 5 D0(Q=6E2*8&/+,  ").14 5!6"8"9#9#9":$<% <& <&;&;%;%;%<&=' >( =';&<&<'=' <( =' >&?& @' A(!C+$E,%D+$C*$C*$C*$C*#C*#A("?& >%>%?& A("B)#C*$D,%E,&E,&C,&C,'E,&G,%J.&M/&L.&J-&H+&E*&D*&D*%E+$G,$G+!H+ G+C+"?*"=(!:&9%8#7"6!6"8$9%:%:%8$8$<'>)!?(!?' ?& >&>&>%>%>%?' A("A)#D+$C*$B)#B)"@' @'!A("A(!A("B)#D+$E,&D+$B)"B)"B)#C*$E,&D+%B*#C*$D+%D+%E,&D+%B)"@'!A)"C*#B)#A("A)"B)#A("A("A(!@'!@' ?& ?& @' ?' ='<' <&;&<';':%8#7"6"6!6"8$;&>(!D+%G,'H.'I.'H-&H.&I/&J1&J0%I0%J0'K0)J/'H-%G,%F+%C*$?(!>(!?)"?*"?*"?)">(!=' ;%9$:%;%<&=' >( >)!@*"B*$C*$B*#B)#B)"B)"C*#D+$C+$C*$B)#B)"B)#B*#A)"@'!?' @' >' =( <' ;%;%9$8$8#8#6"4!1/-+)%"   - -  ,-/8#C,#I1(I0(D+$=$8 8!8#8%9'9':&<' ?("B)$D+%F-&F-&G-&G.&H.'H.'G-&G-&H.'H.'H.&H-&H.&H.'I/'I/(I/&J0#I0$I1%H1'F/&E.&G.&H.'I-%J-#J-#J-#H,"C*!@( <%8#7"6!+,...15 6!8"9#9$:%;&;&:%9#9$;%;&;%:%:$9$9$9$9$:$;%;&<' <';&;&:%:%;&;&<'=( <':%:%:%;&>)!?*">)!>)!>)">)"?)"?)"?)"@*#?*#>)"=("=(!=(!>("?("A("B*#C*$B)#A("@("?'!?' >& >%=%=%>& @("@("@("@("@("@(!?'!?' ?' >& >& =%=%=%=%>& ?'!?'!@(!@(!@("@)"A)#@)#>(";' ;' ;' ;&:&:&9%9%8%7$6#6"7#7$7#5#3#1!3!4!3 3234 5"6$8&9' @-&I4,M8/O7-Q6+P5+O4,L2+H0)E-&B+">(:%6">'!@("C*#C*#C*#B)#A)#@("=(!<(!;(!;'";'!<& <%<$;$:$9$7$6#6#6#7"7!8!:!7 0--.02 A9-?7+>6*>6*=4)<3'=3'=4'<2&:1%<3'>5*  =4)>5*90%7.#;3'=5*;3(92';4(>6+>6+@8,@7,;2'6,!:0$4 45=%F-$W<3gKA_B8L/$A%=%;% ='!?)#?(#>(">(">("?("?("?("@)#A*$B*$B*$B*$B*$B*#D*#E+#E+#E,#D,#D+#?)!A,#D.$F/&I2(M5+O6,N2)O3*S7+T7+T6*Z;0[=3Q5+B':%6#4#2#2"3"3!2233!2 24 6#7#5"7$8%8$7#7"7!7!6 7!8":$:%:&;';' <( ;&:&:%:$;%>(!?)"?)"?(!=' <%<%<$;$:$:%:%:%9$9$9$8#9$:%<' ;&9$:%;&<'<' <' =( >(!=(!=(!<' ;&;&:%:%<'>)!=' ;&:%;&;&;&<' =&=%=%>%=%=$=%=$=$>%>& >&=%=$=%>&?& @(!@(">(!>(!>(!>(!>)!>)"=(!<' =( >)!>(!<';&<'=( ;&:$:$9#8"6!4 31-*$:$N4*bE:bD:^@6Q4*H+#C&D(!E)#E+$F,%G-&G.&G.&G-&G-&G-&G.&I/'J0(K0)K1*L1*K0)J/(H.&G,%H.'J0)K1*J1)I/(F-&D+$D+$C*$E+$H+%G,&E,%B+$>*":) 9(7'6%4$4"4 :$N7.ZA9P7/B)!4 *,  $*.13 5!7"9#:$:#9";$=&!='!=( =' <&<&<&=' ?)"?)">(!<'=( >)!>)">*"?)"@(!@'!?& ?' A)"B*#C*#C*$C*$C*$C+$D+$C*$B)#@'!?&@'!B)#B*#B)#C*#D+$C+$D+&E,'F-&H-%J.%L0%K/&J-&I-'I/)K1*M2+O3+R3*Z9.iE8dB5L2)<' :&9%7"5!6!6!7"8#9%;' ;' :&;&=(!?)!?'!?& >%>%?&@' @'!@'!@'!@'!@'!B)#B)#B)"A)"@'!@'!B)"B*#A("A("D+%F-'C+$B)"B)#B)"A)"A(!B)"C*$D+%E,%E,%D+%B)#@(!@' @(!A(!@' ?&?' @'!?& ?& @'!A(!@' ?& ?' ?& ?' =' =( <' ;&;&:%8$7"5!4 5!5!8$:&<&A)#F+%F,%F,$E+#F+$I/%K1'K1&J0&K1'J0(I.'H-%G,%G,&D*$@)">(!>)!?)!>(!=( =' <&:%9#9$9$:%;&='=( ?)"B*#C*$C*#B)#B)"A("A)"B)"B)#C*#B*#B*#B*#B)#B)#A("@("@'!?' >( <' ;& ;%;%:%8$6"5!4!3 31.+&"    - .--06";$;$;#9!76 6"6$7&8(:';' ='!?'"A("C*#D+$E,%F,%E+$E+$F-%H.&H.'H.'H.&G-&G-&G-&H-&H.&H.&I.$I/$I0&I1)G1)F0)G0)H/(H.'H-%G+"G+"F+!B) >':%6$6#6"(+-..03 6!7"8#8#9#8#8#8#8#8#9$:%9$9#9$9$9$8#8#9$:%:%:$:%<&<&:%:%:%:%;&=( <' ;&:%:%:%;&<' <' <' =(!>)"?*#>)"=( =(!=( =( =(!=(!=(!>)"?("@("A)#B*$B*#A)#A)"@("@(!?'!?&!?&!>& ?'!@("@("@(!?' ?'!?(!>& <%<%<%<%<&=& ;%9#:$;&<' =)!>*#?+$@-%@+$A)#?(!<' :&:&:&;' ;' ;':&9%8$8$8%9%8%8$7#5%3%3#3!3!4 4 6!7"7!6"7#9$=("F/(O5.Q5.R4*Q3)O3+N3,K1*G/(D-%@*!='9%5!=& >'!?'"@(#B*#B*#B)#@)#=)"<(";($;'%<'#=&!>&?%>%=%;$9$8#6"5!5!5!420.../00?6+=4)>5+=4)=4(<3'=3(:0$:1%=4(@7+  >5*8/%6-"7/#:2';3)70%:3(>6+=5*=5)?6*=5)8.#/126 :#F.'W>7X@9K2,@'!>&!<&!>(#@*%A+%A+%A*$@)#?)#@)#@*$@*#@*#@*#A*$A+$B+%C+%C+$C+#D*"D*"C*"B)">( @*!C-$F/&H1(K4*M5,P5,R6-S7-T7,X;0^?5jKAeI?P5,?'8$5"3#3#3#2!10111125!6"6"6"7#6"7#7#7"6!7!8#9#9#9#:%;' :':&9%9%:%;&<' <' <( <(!=(!=(!<( ;' <(!=(!<' ;&:%:%:%:%:%:%:%:%;&;&:%:%;&;&<' =(!=(!<'<'<' =( ;&:%9$9$:%;&<' ;&:%9$9$:%;&<'=&=%=%=$<$<#<#;#<$<$=%>&?' >& <#;#>& @(">(!=' <';&<'=( >)!>)!=(!=( =( >)!>)">)">)">)!<&9$:$:$8#5!4 31,'5!;%O7,\B8X<3O2*H,$C( B'C(!D)"F+%H-&I-'J.'K/'K/'K/'K/(K/(K/(J0(J/(I/'J/(J/(J0(J/(I/(K1)L2+L2+L2+J0)G.'E,%D,%D+$G,$J-$H,#E*"B)!?(!<' 9&7&5$4"2 2=%P6.Z>6S5.E)!5( - -  #)-0246!7!8"8!8"9#:$;%<'=' =' =( =( >(!?)">)!>(!=( >( >(!>)"?*"@)"A)"A("@'"A("A)"B)"C*#C*$C*$C+$E,&F-'C*$@(!A("B)"B)"B)"A("A(!A)"C*#D*$F*&G+'G+%H,$J.%K0%J0&I0'H0(G1(I1(J1'P3)X7+eB5yRDpK=N4+<' :%7#5 345!6!6!8#;& :&:%;'<'>(!?'!@'!?& >%@' A("@(!@'!B)#D+%D+$C*#B*#B)#B)#C*$C*#C*$B)#C*$D,%C*$A)"B)#C*#B)"A(!A("A)"A("A("A("B)"B)#B)"A("@("A("B)#B)"A("A)"@' =$>%>%?& @'!@'!?& >&?' ?'!>(!=)!<( ;&:%9$8#8#6!4 5!6"9%9%:$=%A'!D)#F,$F,$F,$H/&K2(L3)J1'I0&I.&J/'I.&G,%G,&E+%B+$?*"?)">)!>(!>(!>(!=( <&;%;%:%;%<&<' =( >(!@)"A*#@)"@(!@(!@(!@(!@(!@)"A*#A*#A*#A*#?(!?' >' >' ?'!@' >' <( <' =&!;% 8$8#8#6"1/00-+'$"     -'.--/02455 5!4"4#5$6%8&:& <& >&!?&!@'!A(!B)"C*#D*#D*#E+$F,%G-&H.&H.'H.'H.&G-&G-&H.&H.'G.%G.$G.%G.'F.(E.(D.(D.(E.(G-&H,$G+#E+"B)!>( ;' 7%4$6#7#(+-/1!4!7"8"8#8#8#8#8#8"9#:$:%:%:%:%:%:$:$:$;&;&:%:%:%;&;&;&;&<'<' ;&;&;&;&;&;&:%9$9$:%:%<' =(">)"?*#>)"<' <' <' <' =( =)!>)"?*"?)"@("?(!?(!?("@)"@)"@)"?(">'!=' =' <' <' =(!>)!>("=(!<'!<' ;':&:&:&:&;&;';&9%8$;&=)!>)">)">*">*">)"@)#A)#?)"=)!=(!<'!<'!<( ;' ;' :& :&9&9&:&:&9%8$6$3$3$5#5!5 7:"A'C)?&:!:";"B(#K/(Q4,R4*S3(Q3)O4,N4-J1*G0)D-%@*!='8$6"?(!@(!@("A)#A*#A)#@)#>("<'!;&"9%$8%$:%"<& >%@%>$=$;$:$7#5"3!3"3"1 /..,++++=4)?6+?6+<3(:1&;2&90$;1&>5)A7+ - - -   =4*81%70$90$;3'=4)80%;3(@8-?7,=5)<3'<3'/ 00237"=( A+%=)#9% :& <& ='"?)#@*$A+%A+%A*$@)$@*$?+$>*#>*#>*"?*#?+$?+$?+#@,#A-#B,"C+"C)!B( ?)!@*"B-$D.%F0&I2(K3*M4+R6.R6-U8-X;/aC8mNDfH>V:1C) :$4!3!2"3"4"2!1002 3"3!3 4 5"6"7#8$6#5!5!6 6!7!8"9#:$:$;&:&;&:&:%:%;&<' <' :&:%:&;&:%:%:%;'=(!=(!<'!;' ;&:%9$:%:%:%9$9$9$9$9$:%:%;&;&;&:%;&;&<' <';&:%9$:%;&:%:%:%9$9$:%;%;&:%:%;%;%;%;%;%;$;$=%=&<%;#;#;#<#<$=%<&<'<&;&<&<' =(!>)"?*"=' ;&<' >(">)">)!=(!=' <&;%:$7#5!31.*%455:">&@(?'>'@(!A)"B*#D,&E,'F-(G-(G-'H-&J.&K.'K.'H-&H-&H.'H.'I/'J/(J0)K1*L2*L2*L2+M3,M3,K2+J0)H0(G/(G/'G.$H-#F-#E-#B*"@(!=&!;& 9%8#7!4!25"=)#D-(C*$:!0( - %*.23 36!9#;$<&<'<&;%;%;%<&=( =' =( =( =( =' <&<'>)!?)">)!?)"@*#A*#@)"?)"@)"@)#@("A("B)#D+%E,%D+%C*$B)#A("B*#C+$A)"@(!@' >&@'!B*#D*$F*&G*&F)$H+$I/%J1&I1'I2(H1'G0'H/&I/&N2)T5,aA7sRGiJ@M4,>(!=(!;&5!3335 5!5!6!6"7#:%<'>' @("B)"@'!?&@(!B)#A("@' B*#E-&E,%B*#B*#B)#B*#D+$B*#B)#B)"C*#C*$A)"@'!A("A("A("@'!@(!B)#C*$B)#B)"A("@'!@'!@' @'!A("A)"A("@(!@'!@' ?& ?& @'!@(!@' >%=$>%?& ?' =' <' <';&:%9%9$9$8#5!5!7#9%8$8#;' ?*#A*"D*"F+"I+"T4+dB8iF)">)"?)"?*"@*#>)!=' =( >)!>)!>)!>)!?*"?*"?)">)!=' ;&<&<'=&>%=&<' <& <&!;% 9$8$7#6"3 00/-,)%#"    ..../00124!3!3"4"4#6$8$9$;$=%>&@' A(!B)"B*"C+#D+#D+$E,$F.&G/'G/'G/'G/&G.&G.&F.&F-%F-%E-%E-&E-'D-(C.(B,(B+'C*&D+%C*#B*"@* =( :' 7&3$3"4 ')+-.1 5!7"9$9$9$8#8#8#8#:$:$;%;%<& ='!=&!=$ =% =' <' <' <& ;&;&;&:%;&;&<';&:%9$8#9$;&<' ;&:%:%:%;&<'!=(!=(!=( =( <' <' <' <' =(!>)!=(!=(!=(!<( <(!=)">*"=*"=)"<(!<' ;' ;' ;' ;' ;'<' <' ;&9%:%;&;&:%:%:%:%;&<' ;&:%:&;&<' =)!?*#?*#>*"?)"?'">'!='!;' ;' ;&;';';' <' <(!;' :&9&9%8%7$7#5#5#6"8"8 ; H,"\?6lNEbE=E)!; : <"C)!K0'N3*N3)N2(N2)N3*L3*J2)F/'B+$?(!;&7#@( A)!@*!@+"@+#?*#=)!<' =&?%;%7$!7% :%;%=%=$=$=$;$9$6#4"3!2 110/.--,,-?6*@7+=4(;2&<2'90$;1&?5*    - - -;4(91%;2&>5)?6+:1&;2'>6*?7+?7+;4(. ./0134 5"6$6%7%9$:$;& ='!>("?)#?)#@)#?)#?*#>*#>)"=)">)">*#?+#@+$@,$A-#A,"C+"C*"B(!A& @*"B-$D.%C-$E.%J2)M5+P5,R6-T7-U8-Z<1eF)"@+$@,%B-&C/'D/(D/'E-&F-%H.&I/'I.'G-&H.&J/(K0)J/(I.'I.'I.'I/(K1*K2*L2+L2+K2+J1*I0)G.'E-&E.$D.#D.#C-#A,#?*"<)!:(!8' 6%4#2"1 1!2!0.-*+ - !&+/2 4 6!8#:$;%;%;%;%:%:%:%<'=( >( >)!>( =' =' =' =( >(!>)!?)"?*"@*#@*#?*"?)">)"=(!?("B*#C*$D+%C+$B)#B)#C*#C*$C*$C*#A)"A("@'!>&A(!D+%D+%D*$E*$D)"F+$I/'J1)J1)I0(I0'I/'I0'K0)L1)L0(S7/]@8V:3H/(@("<&:&7#4 337"9$7#6!7#8$9$=' >( A)"B)#@(!?& A("B*#A("@' A("B*#C*#C*#C*$C*$C*$C*$B)#A)"B)#B*#B)#A("@'!A("B)#B)#A)"A("C*#C*$A("A("A("?' @'!@(!A("B)#B)"A("@'!?& @' @(!A("B)#A("?& >%>%>%>&?' =&;&:%8#9$9%8#8#7"4 5!7#:&7#6"9%:&>(!C+#E+#H+"R4*dC9nKAfC9Z8.P1(J-$G,$D,#A*#>*#?*"?)"?)!>)!>(!>)!>(!<'<'<'<&;&;&<'=' >(!?*"@+#@+#?*">(!>(!>)">)"=(!=( >)!?)">(!=( <&:%;%<&=&>%=%<&:%;%:$:%:%7#5!3 110/.+&# "   -  - 0.--/1 4!6#5!3 3 3!4"4#5#6#7#8#9#;%>( ?*"A+#B,$C,$C,$C+$C+$D,%E-%E.%F.%F.&G.&G.&G-&F-%F-$F-$F-%F-&E-'C.(B.(B,&B+$C)!D(O3'Z?2Y>1R8,H.#>%72/(*,.024 5!6"6"6"7#9#:$;%;% ;$:$;%;% ;% ;#<#<%<' <' =(!=(!=(!<' ;%9$:%<';&:%9$8#8#:%<'!<' ;&;&;&;'=( >)!=(!=( <' <' <' <';&<'<' =( >)!>)"=)!=)!=(!<( <(!<(!=(!=(!<'!<' <';&:%:&;';&:%9$:&:&9%9$9$9%9$9$9$9%9%9$8$:%<( =(!<( <( =& =%<&;&:&;&;&;&;&;' =(!<' :&8%8$7$7#6#5"4!38!: ="D([>3pSHuXMY=2?#; :!=$D,#J2*K3*K3)L2)M2)L2)J2(H1'D-%A+$>(!9%7#C*"B*"@+">*!<( ;' ;&;%;#;"9#8%!9% ;%;%;%;%<%;&:% 8% 6$5"7":$?' E,#F-#:%....-. =4)<3';2'>5):1&;2&>5)    - - -:3'80$:1%=4(?6+<4(;3'=5)=5)>6*--.//0123!5$6$7#9#:$;%<& =&!>'!>'!?("@*$@+$?*#>)">*">*#?*#@+$@,$@,#A-"B,"C+#B)!A' >( A+"D.%E.%F.%J2(N6,O6,Q5,Q5,P3(P3(S5*V8-Q3)D()!=(!<' :%;&<' ;&:%:%9$9$:%:%:%7"7"7"8#9#9$:%:%:%<' <';&:%;&<' =( <' <' =&=%<%:&:&:%:%:&:&9%9%9%9$8$9$9%9%9$9$9#8#7#5!1-*'5 57 8"9#9%;'=)!=*">+$>+$?-&@.'A.'B/'B.&C-$D.$F/&G0'G.&H-&I.'J0)J0)I/'H.'H.'H.'I/'I/(I0)I0(I/(H/(H/(H/(G/(F/&D/%C.$B-#A-#?-#>,#;*!8'6&4$3#2"1!0 0 .+,,   "',/13 5!7!8"9#:$9$9#9$;%;&=' =' =( >)!=' ;&<'>(!=( =' >(!?)"?*"?)">)!?*"@*#>)!<'>' A("A("A)#B)#B)#C*$D+%D+%B)#A)"A)"B)#A("@'!B*#F-&E+%C)#D)#D("E+$G.&I0'J1)J1)I0(I0(K1)M2*L0(I-$H+#I+#F*"C*#@("<&9$5!35!6"6"5!6"7#8$9%<&?'!@'!?& @'!@(!@(!B)#C*#A)"@(!@(!@'!A("C*$C*#C*#C+$B*#B*#B)#B)#B*#B)#A("@'!@(!A("A("A("A("A)"A)"A("A("A("@(!@'!@("A("@(!@'!@'!@'!@'!@'!A("A("A("A)"A("@(!A)"B*#@)!>)=';%8#5!6"8$ 7$4 3126"8$6"6"9$<& ?("B*$D+$F+#L0(Y<2bD;\>4T6,M1(I.%G.&E,%B*$?)#?)">(!>(!>(!=( >)!>)!<&:%;%<'<&;%:%;&=' >("?)"@+#?*">(!=( >(!>)">(!=( >(!>(!=(!=( <';%;%<&<&=%=%;%9$9#9#9$9%7#6"4!3 2 20/+($"   -  135=$G-"R7,Z?3Q6*@'7 5 4!4"5#5#5#6#7$9%;( <*#>+$@-&B,&C,&C+%B*$B*$C+#D,$D,$E-%F-&H.&G-&G-%F-$F-#E-$E,%D,&B,&A,&B,&B,&B*"B)J0%V;/^C7Y?4P7-C+"6!3/(+-/134 6"6"6"8$:&;&!='"='!<% ;% ;% :$9#9#:#<#<$='!=(!<' =( =(!=(!<' ;&:%:%:%;&<';&:%:%<'<';&;'<' <' =(!=(!<' ;&;&<' >)!<' :%:%:&;&<' =(!<' ;&;&;&;&<' <( <( <' ;&:%9$8$8#9%:&:&:%9$8#8#9%:&9$8#8#8$8#7#8#8$9$9$9$9%:&;&<%<%;&:&:&:&:&9%9%<' =)":&7$6#6#6#6#5#3"1!3 6 7!>$F+^B7w[OnRGI.#;":";#@( G/'L3+N4*P4)O4*N3*K2)H1'F/&D-%A+$=(!8$9%B*"A*"@+!=) ;':&:&;%;#;#9#8$:%<%<&<';':' 9'!8& 7% 5"4 <%E+#Q5+^@4[?3C-%10../0!;2';2'?5*90%90$   - - -:2&90%;2&>5)=4);3'<4(<4(-,.18">( ;&7"4 3!4"6"8#:$;& <& =&!>'!>(!>(!?("@)#>("=(!=(!=)">)">*#?+#@,#A.#B-#D,#C*"A' =& @)!D,$G-%J.'M1)O3+R5-P3+O2*P3*P4+O4+K2)D+"@(<$:#6"4!2!0!1 2!2 211101233 5!6"6#7#6"5 56 7!7"6!7"9$:&9%8$7#6"6"7$8$8$8%8$7#7#9%:&:&:&:%9%:&:%;&:%:%9%9$9%:&;&8#5!6"7"8#9%:&:&;&<' >)!=(!=( <' ;';&=( =(!;&9$9$8$:%9$9$8#7"7"8#:%;&<':%9$;&=(!=(!<' <' =( =(!=( <' =&=%<$;%:&;';'<( =(!<(!;' :&8$7#7#7#7#7#7#6"5 5 5!31.*3!17 =%>&;$:%=(!?*$>*#=*#>*#>*#?+$A,%B-&B-%B-$C-#C.#E.$F-%G-&H.&H.'I.'I/'I/'H.'H.'H.'G.&G.'G.'G-&F-&F-&F-&F-&F.%E.$D-$C-$A,#?,#<+":) 8(7%6#4"3!2!2!1 /.-,  -#'+/234 6 8!9#:%:$9$:$;&<&>(!>(!>(!=(!=' <&<&<'<' =' =(!?)">)!=( =( ?*"@+#?*">)!?' ?' @("A)#B)#B*#C*$C*$B*#B)#B*#B*#B*#B*#B)#D,%G.'F,&E+%E*%C(#C)#E,$G.&K2*L4+J1)I0'K1(L1'K/&K.$K.$K-#G+"C*#?(!:$7"5!34 6!6!5!7#9%;&;&<&=%>%?& ?' @'!@(!B)#B*#A("@(!A("A)"A)"A)"A("A("A)"A("A("A("A("A)"A)"A)"A)"@(!?' @(!B)"A)"@' ?' A("A)"A("B)#A("@("@(!@' ?' ?' @'!@(!A("B)#A("@' ?' A("B*#B)#A)">';&:%:$9$8#5!22331134 338">%"?&"A(#C*$E,$H/&J1(M5*L4)J1&H/&G.&F-&D+%B)$A'$?'"='!=( >)!>)!>)">)!;&9$<&>(!=( <';&;%;&<&=' >)">(!=' <'=( >)!>)!>)!>(!=( =( >(!=( <&;%;&<&<%<$9#6!6!7!8"8#6"5!5!4!3!21.,)%# !      .02;$G/&S:1X?5U;1D+!76 5!5"4"4"5"6#8#:$:&:' <)">*#@+$B+%B+%A*#A)#B*#C+#D,$E-%F-%G.&G-&F,%F,$G-$H.%F-%D,&C+&A+&@+&A,&A+$A*!C+ L3(W=2X?5U>6H2+:& 3 00,./135!6"6"6"8$9%;& <'!='!;% ;% <&!;% ;% <&!=&!=% >$ <%;&;&<'<'<'<' =(!=)!<' ;&:%:%:%:%:%;&=(!=(!<' <' <' <( =(!=(!<( <' <(!<(!<(!;&:&;&;&;&;&;&:%:&:%:%:%9%9$9$9$:&;&:&:%:%9$9$:%:%9$8#9$:&:%8#7"7"7"7#8$9$:%9%7"6!8#9%:%;%;$:%:& :%:%:% :& 9% 8$6#4!3 4!4!5"5#4#1"0!3!5!8!;!G,"gLAqVKX>4=%9"8";$B*$I0(M3)P3(Q4*P4+M3*J1(F/&D-%A*$='!9$6"A(!B*"A+"@+">*"<)!<( ;' <&>&?&=&<&>&?' >)">+#<*#9'"7%!6$ 4"4 4<#C(U7+hH9`C7H1*7% 3!////!<3(?6+90%8/$  - - -;4(91%:1%>4)<3(<3(>7+.,.0@(!S;4T<5I2+>(!7#13 4"6#8%:& ;& <'!='!?("?("?)#>'!<&<%=' ?("@*#B+$A+$@,#A,#C,#C+#B)!A& <&B*"E,$G,%J.&L0(N2*O2*M0(O2*N2)L1(J1(D-%='<'9%6"5"4"3"0 //00011121124!6"6"6"4 346 8"8#9#8$7#7$7$7$7#7$8$8$8$8$8$8$7$8$8$9%9%9%8$9$9%:&;&:&;&:&:&:%9%8$7"6"7"7#9$:%;&;&;&;'<( <' ;'<' =( <' <' ;&:%:%;&<';&:%9$9$8#8#8#9$:%:%:%;&;&<';&:%:%;&<'<' =( =' >& =& <' ;&:%9$9$9$9%:&:&9%7#6"6"6"6"5!5!5!5!4 1/+(3 6 H,!V7,P3+F,%?& =% =% >&!?'"@(#@)#@)#A*$C+%D,%E-$E-$F-#F-#G-%G-&G-&G-&H.'I/(I/'H.'H.'H.'H/'H/'H/(G.&E,%D,%D+$D+$D+#D*"C*#A)#@)#@)#>(";&9$8#7!6!5 ;(C0&?+!4 0.,   #'+/23 5!7!8"9#:$;%;&;%;%;&>(!>(!=( <'=' =' <&<&=( >)">(!=(!=( <' =( ?)"?*"@+#A+$A)#A)"C*$D+%C*$B*#B)#B)#B)#D+%D,%B)#B)#C*$C+$E,&F-'E+%D*$E*%D)$D*$D,#F-%I1(J1(K2(K1&L2'N3(M1&L0$K."J, F+!A("=' 9$6!6!5!5 5!6"6"8#:%:&;&<%>&?& >%?& @'!@(!A("B*#B)#@(!A("B*#A)"@(!@'!@'!A("@'"A("@'!@(!A("A("A("A("@' ?& A("B)#A(">&>%>%>%>&?' @(!@'!@'!@'!@(!?' >%=$>%>&>&=%=$?' A)"B)#B*#A*"?* >( <' :%7#5!21/.--.0238!>#"@%#@&#B(#D,$F.%D-#C-"D.#D/#E/%F.&E,%B)$A'#@%#?$">(!>(!?*"?)">(!=' :%9$;%;&<&<' <':%:$;%<&<&<';&;&<'=( =( =' =' <'<' =( >(!;%:%;&<&;$;":#9$8#9#8"7"6"7#7#6#4"3 2/-)&$#   -  - )./5!C.'Q:3S;4Q91C,#7 44!4"4"4"4"4"7#:$9$9%9&;(!=)"@)#A*$A)#@)"B*#C,$D-$E-%F-%G-&G-&F,%D+#G,$I.%H-%F,&D,&B,&A,&@,&@-&@*#?( A*!D,"F.%E.'@+%8$2 0/2!,.035!6"7#7#7#7#7#8#9#:$<& <&!;% ;% ='">(#>&!>$ =$;%;&;&<'<' <' =(!>)">)"=(!<' :%8$9$;&=( >*">)!=( <' <' <' =( >)">)"=(!<' <' =(!<' :%:%;&;&:%9%:%:&:&9$9$9$9$9%:%:%9%:%;&<' :&9%9%:&:%9%9$9$9%8$7"7"7"7#9%:&9%9%9$8#8#9$8$9$9$9$:$:$9#9$9$8%7#6"5"5!4!4!4!4"4#3"2!2!4!6"6 7A) J2*B+$7#4!5!7#;'"D,$I0(M2&P3&P4)N3*J1(G/&E.$B*#?(";&7#8%A("B)"A+"@+"?+#?+#?+#?+#@*"A(!A(!@(!@)!@)!@*"?)">)!:' 7% 6% 6%!6$ 5"6 8 ; M0$^?0T9.C-'8$ 3 0///!?6*:1%  - - -91%:1&>5)<4(:2&/+/2@' S92Y?9M4.B)$;%4!3 3 4!6#8%:' <)">)#?)#?)#>(">'!>'!>'!?(!@("A)#B*$A+$@+"@,"B,#C+#C)"B(!:'?)!C,$F-%H.&K0(M1)N2*M0(L.&K/&L0'J/&F.&@)!>(;'9%5"5"5#3"1/./001122223 5"5"5!4!4 45 7!7"7"8#7#7$7#6#7#7#7$7$7$6#6"7#7$7$6"6#8$9%8$9$:%9%;&:&:&:&:&;&;' <' :%9$9$9$9$9%9%:&:%9%9$;&=(!=)!=)!=(!<( <';&:%;&<' <' ;&;&;&:%9%9$:&=(!>)"=(!<';&<' ;&:%:%:%:%;&=( >(!=& >& >' =( ;&9$8$8#7#8$7#7#7#6"5"6"5!4 4 5!4 31/,)%6"D*c?0qI8d>/V2%H*!?' <'"<'$=(%>)%?)$A)$A(#C)$E*$G,$I-$J.$I.%H.&H.'H.'H.'I.'I/(I/(I/(I/(I/(I/(H.'G.'E,%D+$C+$C*#B*#B)"B("B)#C*$A)$?("=& ;%9#9!8 8!8"J3+\E&>%=$>%?' @'!A("B)#A)"@(!A("A)"@(!@(!@'!A("A)"A("A)#A("A)"A("@'!?& >%>%?& @(!@(!?' @(!A("?& >%?& ?& @(!A)"A("@("@'!?' >& >%>&?' =%:":!<$>&>%>%>'>) <&9#8#7#6"4 2.,,./1236 ;">#!>$!A(#C+$F.%C,"A+A+ A+ C,"E-$E,$E+%C(%@%#@%#>'!=( >)!>(!<' ;&:%:%;%;%;%<&<' <';&;%:%;%;&;%:%:%;&;%:%;&=' =( <' <';&;&=' >(!<&;#;#:%9$9#8"8#7#7#6"6"5#3 1.,*'%$"  -  -+-.4";'!<' :%6!4 22 1 2!3!3!3!5"8"9#9%9& ;(!<)">)"?("@)#A)#B*$C+$D,$D,$D,$E,$F,%F,%E,$F,$G,$H-$F,%D,&B,&A,'A,'A-&@+$?)">'=%;#:#8"5!2 0//),.014!6#7$8$7#6"7"9#:$9#:$:$:%;% <&!=&!=$ =$ <& <' <' =(!<' 9$8#9%:%;&=(!<' 9%:%<' <( =(!=(!=)!>)">)"<' <' =)!>*"=(!<' <' =(!=(!:%7":%<' ;&:%:%;&;&9%8$8$9$9%9%9%8$7#7#7#7#7#6#6#6#7#7#8#8$8$7#7"7#6"7#8$8$8$9$9%9%9%9%9$9$9$9#9#8#8#8#7#6#5"5"5"5"4!3 3 4"4#4!4!5!6"5!5 33321 1 4!8% ?*#F.&J1'N2$O3%N3)L1(H0&F/%C,$A*#>(!;&8%9& @' @(!@*!@+"@+#@,$A,%A-%A+#B)"A)"A*#@)"?(!>' =&<&:&9& 8% 6% 6#6"6!55: >#8 2011000!<4(   - - -91&;2'>4*?7,/,/4?( O81ZC;J4-:%6"3"2!2 2 3!5"7$:' ;'!<(!=(!='!>'!?("?("?("@("@)#A*$A*#@+"?+!A+"C+"B)"A' 9&:%>( A*"C+"G.%J0'L1)K0'J-%J-%L0'J/&H/'E.&?( <'8$5"4!4!4"4"2 10002 2 21223 4!4!4!4!5!5"7#9%:%:%9$8$8$9$9$8$7#7#8$9%8$7#6"7#7#6"4!6"9%9&:%:&:%:&:%9$9$:%;&<' =(!=(!<' ;&:%9%:%:%:%:%9%9$9$9$9$9$9%:%:%:%:%:%;&;';&:%:%:&;':%9$:&>)!>)!;&;&<' <' ;&;&;&;&:%;&=( =' >& =&;&;' :&8$8$8$7#6"5!5!6"5"5!4!5"5!4 4 20/.*&7&?* U:.nL>lI;T3'D%?%;& ;'";)%;)&;)%<)$=)#?*#A*"C)"E*"H,#I-$H.%G.&H/'H/'I/'H.'H.'J0(J1)J0)I/(H/'G.&F,%D+$C*#C*#C*#B)#@("@(!@)"@)">("<&!:%9$9#8!668!L4-^G>Q:1?'51  - - !&)+,/3456 8#9$;&=' =' <' <'<'<'<&<'<' <' <&<&;&;%=' >(!=( =' =' <';&;&;%=%>& ?' @'!?' ?' @(!A("B*#D+%D+%D+%D+%D+$D+$E,%E,&D*%D)$D*$D*%F,&H.'I/(J0(K1'I/%J0%N2&P3'T6*aB6jJ?iH=R5,@'!<%:%7#5!4 5!7#7#7#9%;&:&:%;%=%=%=%=%?' A("A("A("B)#C*$B*#B*#A)#?& ?& A("@("?'!@(!?& >& ?& >&>%>%?& ?& ?' @'!@(!@'!?& ?' @'!?' ?& ?' @(!?' >%>&?& ?' ?& ?' >&>& =%=$<$=%@(!A)"?( >)<'9$7"7"5!20.,,-/0125 :">%!?'!A(#C)"D*"F,#I.$G,"D*E+!E,#E+#E,&D*%@'"@'">'!=' =' <&;&;&;%<&<';&;%;&;&<&<&<&;&:%9$9$9$:%;%;%:%;&=' =(!<';&;&;%;&;&;$:";#9#8#9$;% :%8$7#5!5!4"3!1/.-)&%$    - - ,,,-.0/01111 2!3"3#4"6"7"8"8$9%;(!=*#?+$@*$A*$B*$C*$D,$D-%D-%D-$E,$E,$E+$F,%F,%G,$G,#F,$D,&C,'A,'A,'A-&@,%@*#?( >%<#:"8!5 3 1/.2!()+.14!5"6"6"6"7#7"6 7!9#:$:$:$<&!<&!<% =$ =& <' ;';&;&;&:&8$6"8$:%;&8$7"9$:%:&;'<( <' <' <' <( <' ;&;&;&;'<' <(!;':%;&<'!<' :%8$9%9&9%7$7#7#7$7$7#6"6"5"6"6"6#6#6"5!5!7"7#7"7"7#7#7#6"6"7#8$8#7#8#9$9$:%;&:%:% 9$8#8"8#9#7#5"4!4!5!4 3 3 3 3 3"3"4"4!5"6"4 32210/ 2!4"8% B+#I0'L1%N0!L0$L1'I/&F.%E.$D-%C,%@*#<(!7$>%?&>'=(>)!>*#?+$@+$@+$@)"A(!@(#@)$?(#?'"?& >&>&=&<&:%8% 6$3!2 2 2210001000/   - - -:1&=4).++.27"='8$30/ /!2!4!5"5#6#7$8%8%9&<& >'!?("?("?("@)#A)#A*$B*$@*#?+!?*!@)!A( @' ?&4!:&@+"A+"A+!E-$J0'K0(M0(M0(K/&H-$L2)ZB9S<4@+"8$8$4!3 3!3!2 11112 3"3 22233 4!4!4!4 4 4 6!7"6"6"7#9$9%9%9%9$8$8$9%:%9%8$8#7"7"8#8$9%:&;&<' <' ;&:&:&:%:%:&;&<' <(!<' ;' ;&:%:&;';&;&:&9%9$9$9%9$8#8#9%:%:%:%:%;&;&;&:%:&:%:%;&:%:%:%:%:%;&<'<' ;&:&:%:%:&<' =(!<&<$;$:%:&:&:&:%8$8$7#7#8$6#7#5"6#6#5!4 20/.-(#5#>* M5*Z?4Q6,A'<#;%:& ;(#;)$;(#;(";'!=' ?( B*#E,%F,%G,%G,$F-%F.&G/&G/'G/'H0'H0(H0(H0(I0(H0(G.'E-%E,%D+$C*#C+$C+$@+#>+"<) <( ;'9&7$7$6$5#4!4 36!D0(O;2G1);%40  "&*-03 6"6!6 8";%<&;%:%:%;&=( >)"=(!<' ;&:%:%;&;&;&:%;%;&<'=' <' =' <';%<%?' @'!A("@("?' ?& ?' @'!@'!@("B)#C+$D+%D+%D,%E,&D,%D*$C(#C)#D)$F,%I.'J0'K1'K1'K0%L1%L0#P3'X9-fF:lK@kJ?T7.A("<%:%8$5!6"5!6#6"7#:&;' ;&;&<%=%=%>%>&@(!B)#A)#A)#C*$D,%C+$B*$A)"?& ?& A("A("?'!@(!?& >&>&>%>&?' ?' >&=%>%?& @'!A("B)#B)#A("@(!@(!@("@("@(!@(!@(!?& <$<#=$=%>&=%=%?& ?' @'!@)!>(<':$7"5!30..-.....0138#=&A)"D)!F)!V8/hH?bB8Q1(K,"H+"F*!E+$C*#<&8$;&=' =( =' <'<';%<&;&9$9#9$:%:%:%;%;%:%9$9$9$:$:%:%;%;&=( >)"=(!<' <' ;&<' =(!>(!<%;#9#8#9#:$9#7"7"7#6"4!21/.,*'%#    -  (,))///1231 3!2#3#4#7#9#9#:$8$9' ;)"=)"?)#@)#B*$C,%D,&F.&G/'F/&E.&E,%E,$E,%F,%F,%F+"H-#F,%D+&A*&?+&?+%>+$?*"?(?'>%>$=$=%8#4!2 01(*++-133 4 5"6#6!6 7!9$<&!=("?)$='";% ;$=$ =$ ;$:%:&:%9%8$7"6"6"7#:%8$6!5!7"8$:%<' <' ;%<%=& =& <%;$;%;&;' ;' ;' ;&:&;&;&:%9%9%:&:' 8%7#6#6#6#6"5"5"5!5"5"6"6"6"5"5"5"6"6"6"7"8#9$8#7"7#8$9$8#7#8#8$8$9%9$8#8"7"6!7"8#7"5!3 4 4!3 2223 2 1 3!5"5"5"7#5!222 3!0!0!3!5"=' G.&M2)O2"L0"M2)K1(H/&E.%D-%B+%@*#=(!:&3 <#=$='=(<( ;(!=)"?+$?*#?' ?& >(#?)&?(%@($A'!A'@&?%=%:$7$4#3"1!0"/!. ./11210//   - - -90%.+*,-021.--- / 2 4"6#7$7$7$7$8%:&='!>'!>'!?("@)#A*$B*$B)$A*#@+"@+"A+"B*"A(!@& 4!7#>*!B-$A,#C-#G/%J0'L0(M0(O2*P4+R7.`G?iRJWA9>) 8#5"4 3!3"3!2 222 2!2!3!3!4!4!4!4!4!4!6#6"5!4!7#:%:%9$8$9%:&:%9%9%:%9%8$8$9$8$8$8#7#6"6!7#9$:&;&<' ;' ;&:&:%9%:%:&;&<' ;&:&:&:&:%:%9%9%:%:&;&;&:&9%9$9$9$9%:&:&:%:%:%:%:%;&<' =(!;&:%9$8#8$:%;&;&;'<' >)!>)"=(!;&;&;&<&=%=& <' ;' ;' ;' ;';&:%:%8$9%:& :& 9%7#5"4 5!5!20/.,'4#34 8#<':%6"8#9% 9& ;("=)#>)"?(!@)!B*!C*#E*$F+&F,&F,&E,%E,$E-%F.%F.&F.&F.&G/&G/'G/'G0(G0'E.&D-$E-%F/'F/'D-%A+#>*";)!:( 9'7%5$4#3#2#2#2#2"2!3"6%9'7$30/   !$'*.2 5"7#8"9#:$;&;&9$;&=' =' =( =( =' <' ;%9#:%=' =' ;&:%9$9$<&<'<'<';&:%<&>&?& ?' ?& ?& ?& ?& ?& ?& ?'!A)"C*$C+$D+%D,%D+%C*$C)#C(#B("C(#G,&J/)K1(K2(L2'L0$N1%N0$O1%U5)cB6iH&>& ?' A("B)#B*#B*$C+$D+%C*$B)#A)"?'!?' A("@("?'!@'!?& ?& ?& ?& >& >& >&>%>&?' ?'!@'!@("B)#A)#A("A("A)"A("A)"A("A)"B*$A(">%=$>&?'!?& ?' @'!?' ?& ?& >'?) =(;%8#5!31/..//-+-.036"<%A(!C( E(V7.oMCmJ@Y6-N,#J,"H+"E*"C*">' :%:&;&;&:%:%;%9$<' =( <' ;&:$9#9$:%;%:%9$:%:%:%;%;%:%:%:%;&=(!=' <&<'<'=' =( =(!<&;%:%9%9$8#8#7#6"7#6"4!2 10.,*'$!  -  - - ,+,-/0124 42 2!2"3#4#6$8$9$:$8$8%:' <(!?)#A*$B+%E-'F.(G/'G0'G/'F.&E-%E,$E+$E+$E,$E+!F,#E-%D+&A*&?*%?+$>*$>)"?(B)>$>#B'D+!A) :$41,2!+../124 4 4 336!8"8#9#:$<&!<& 8#8";#<#;#;&:%:%9$8#7"7"7"8#9$7#6"6"7#9%;&<' ;&<%=%=& >& =%<$;$;&;' <' <' ;&9%9%:&;&:%9$8$8$6#5!4!5!6"6"6"5"5"5"5"5!5"5"5"5"6"6"7"6"6"7"8$8$8$9$9%9%9%8$8$8$7#8#8$8#7"7"7"7"7"7"6!4!3 5!4!3 1123 0/6#7$6"7#7#34 6$3 1 0 2"6$:' C,$J3-N2'N1&M2(M2)J1'F/%D-$B+$@)#=(!;' 5";#=%=%:%:%;&;' <(!>)">(!?' ?'"?)&?)(@)%A(#A(!A(?&=%;%8$5$5%4&2$1#0"/ /110.-,-0  - - -.-,,--//.-../12 4"6$7$7$8%9& :' ;' <& <& =& >'!@)#A*$B+$B*$A)#@)"?)"?*">)!=( <' 6";'?+"C.%F0&E.$K0(H.%O3+R5-P4+Q6-Y?6bKC[E'!<' ;'9&8$8$6#7#8$7$8$9%8$7#5!3 4 5!5!20//+'1 0012 3"4"6$8% 9& :' =( @) B* D*!E+"D*#D)$D*%D+&D+'D,&E-$D,$D,$E-$E-%E.%F.&F/&G/'G/'G/'F.&D-%D-%D-%C-%B+$@*"=(";'!9& 8%7$5#4#4#3#2"1!1"1"1"/!/ .--.  "',/24 4 5!6"7#:&=(!=(!<' ;'<'=' =&=&<&;&9$8#:%;&<' =(!=( ;&;&;&;&<'=' ;&:%<%=$=%=%>%>& ?' ?& ?& @'!A)"B*#B*$C*$C+$D+%D+%D*$D*$D)$E*$F+%H-'I/(J0(K2(L2'L0$L/$N1&O2&R4)U6+U6+Q2'F+#<%9#8$8$6"7#7#9%8$8$9$9%8$8$:$<$=%>%?'!@(!A("B)#C*$B*$C*$B*$B*#A)"@'!@(!A("@(!?& >& >& ?& ?' ?' >& =%=%=%>&@'!@(!@'!@'!@(!@("@(!@(!@(!@("@("@("B)#C+$C*$?' >%?'!?' A)#C*$@(">& >& >& >&;&;%;%:%8#6"4 100/.-+,-/37#;&@*"A*"B) P5,eI@hLCT7.H,#F+"F+"C+"@*"=( ;&;&<'=( 9$:%<'<&=(!=(!=' ;&;&<' <&;&<';&;&:%:%:%:%:%:%:$9$;&<' =(!<&;&<' =(!=' <';&:&9%8$7$7#7#7#6"6#6"4!2 21/-*'$ !  - - -  -))-00124343 2!3"3"4"5#6#9$9#8$8%9& ;(!>)"A*$C,&E.'F/(F.&E.&E.&E-%D,$D*#C*#C*"C*#C*!D,"E-$D,&B+&?+%?+$@*$?("?'@'>%B)S8-]D9X?4@+!31.0+-.01233 4 4 5!6"7"7"8"7"8#9#8"8"8"9#9$;&;&:%9%8#7"7#8$9$7#7"8#8$:%<( =(!<' ;&<&<%<$;$<$=%>& <&:%9%9%9%9$9$:%;&;&:%9%7#6"5"4!5!5"6#6"6"6"6"5"5!4!5!5"5"5"5"6"7"7#7#7#6#7#9%;&;&8$8$:%:&8$6"7"7"7!7"7"7!7!8"7"5"4!3 3 4!3 2000111236"49$E1*K70A.'3 3!7"8$B*#I0)M2)O2'O2'N3*L2)H0'E.$B+#?("=(!;' 6#7":$;&<&='>'='>'>' >' >' >'!>("?)#@)$A)#B*#A*"A+!>) ;':'9' 8'!7' 6&5$5"<'D.$F/%A*#;% 5"/.,-0  - - -,--.0256 30001 2!4!3"4"5#7%8&8& :' =(!>(">'!='!?("@)#A*$A*$A)#A)#@(#?(">(!>)!>*">)"7$8%?+"A,#E/&F/%H/&K1(K0'R5-O2*G,#U:1eKCaJBK4,8$>*!9%6#4"4#7&6$ 3 16$ 5$2!3!5"5"4!4!5"6#5"5"6"8$9%:&:&:&:&:&9%9$9%9%9$9%9%9%9$8$8$7#7"6"6"6"7"7#8$9%:%:%:&9%8#8#:%:%9%8$9%:%:%:&:%9$7#7#7#7#7#8#9$:%:%:%:%:&:&:%:&:%9%9$9$9%;&<' ;&:%9$9$:%;&<' ;&:%:%;&;&<' =(!<' ;&;&>(!?(!;%7#9$:&;&;' ;&9%8%9%:& :& 6#6"4 33210/.,&1"0/012!3"5#6$!7%!8%9%=&@'B(D)E) D)"C(#B)%A+(B,(D-&E-$D,$D,$D-$E-%E.%F.&F/&F/&F.&E.&D-%C,$C,$B,$B,$B+#@)#>'"<&!;% :$9#8"7"6"5!3!3!2!2!1!0!/-,+   -"&+/1235!6"6"8#:%;&;&;&<' =( >' >& =&<';&:$9$9$9$;&=( =(!=' <' <&;&<'<';&<&<%=$=%=%>&?' ?'!?& ?' @(!A("A)"A)#B*#C*$D+%D+%C+$D)#D*#E*#F,%I/'K1)J1)J1)I0(G/&I1)I1)K3+H0(G/(G.(E-'A*%<&!:$7"5!4 6!5!7#6"7#8$9%:&;&<&>&>& >&?' @'!@'!A)"B)#B)#B)#B)#B)#A("@'!@'!@("@(!>& >%?' ?' >&=%=%=%=$<$=$=%?' ?'!?'!@(!@("?'!>&?& ?'!@(!A("A("C*$A(">%<$=%@("@("@(!@("@'"?'!?'!=&9#8"9#9$9%9%7#4!0./0/+*-/5!9%<' >)"?)!?'D,#N6.R:2H0'A) A) B)!B+#A+$>(!;%;&=' =(!<' <' <';&;&;%;&<&<' ?*#>(!<'=( ;&:%:%:%:%9$:$:%:%:%<&>)"@+$?*"=' <' =( =( =( <( :&9%7#6"7#7#6!5!4 322 20/-,($ # "     .,-/3 ;$>( :#244!3!3!3"4"4"6#9#9#8$8%9&;(!>)#A*$D-'E.(E.(E.&E.%E.%D-%C+#C)"B)!C)"C*#B*!C+!D-#D-&C+'?+&?+%?+#@)#@&@%@$F+bG:pVKbH=F."6201 )+,./13 4!5!4!5"6"8%8$8#9#8#8"7"7"9#:$;% :%:%:&;&:%9$9$9$8$8$9%9$9%:&<' =(!<' :&:%:$;#<$=%>& ?'!='!;&9%;'<(!;' 9%8$9%:%:&:&9%7$6#5"5!5"6#6#6#6"5"4!4!6"6#6"5!6#4 7#8$7"6"7#7"7#8$9%;&:&8$:%<' :&7#7"6"6!6!7"7"5 7"7"6"5"4 24!5!4!3 112!1 /3!8$5!4<%P91fPHbLD7"6"7#9%?)"F/'K3+N3(O4*N3*L1)H0'E.$B+#?("=' ;' 8%17#:&<)!?)!B*"E-%@)!?( A*"A*$B+%A*$@*$@,&A,&@)"E+$C)!B+"?' ?'!@)#>($;&"8$9$:#8Q6-aE<]C;I2-5"1!0 ,./  - - ----05!='F/&L4*A* 6 2113!5#5#5#6$8&9& 9&9&=("@*$?)#>("?("@)#A*$A*$A*$@)#@("?'!>& =& =' =(!;& 9&=) C.%E.&I2)H.&L2)M3*N2*M0(I,$C'^B9dLCQ:2?) 9%;'9&8%5$5$4#3 115#4#3"4"5"6#5"6#9%7$4!3 5!9%=(!<(!;' ;' <( ;'9%8$;':&9%8$8$9$8#8#8#7#7"7"7"7"8#8$9$9$8$8#8$7#6"8$;&:&9%8$9$9$9%:&:&9$9$9$8$8#8#8#8#8$:%;';&:&:&:%:&:&:%9$8$9%:&;' ;&:%:%:&;&;&;'<' <' ;&:&;&<' <' ;&9%:&<' ;':&:&;&:&9%9$:%:&:%:&<(!:%7#7#5"5!3210.,*%-/6 7!8!6!6#6$6$8&:' ;'=&?%A&C'D(C( C)#B*&B+)B+(D,%D,$D,$D,$E-%F.&F.&G/'G0'G/'F/'E.&D-%C,$C,$C,$B,$B+$@)#>'"=%!<$ ;$;$;#:#9"7!56!6"9$8$5!10., - $),035!6"7#8$7#8$9%:%:%;&=( >)"?(!?'!=& ;&;&;&;&:%9$:%<'<' <'<&;&;&;&;&<'=' =&=%=%=%>&?' ?' >& ?' @'!@("A)"B)#C*$D+%C+%C*$C*#C)"D*#E+$G-&J/)K1*K0)K1)K1*L2+K0)G-&G-%G,%G,%F,%E+%@)#:& 9$9#7!4 6!5!7"8#9#;$=% =% >% >% ?&!?'!>& ?'!A)"A)"A("A)"B)#B*$@(!>&?'!@("@("A)"A(">%>&?& >& =%=%=%=$<#;#<$=$>& >%?' @("@(!>%<$?& A)#A)#A)#A)"?'!?& ?'!@("@("?'"@("@("?'!>%=%=%<$<$<$=%=%:$9$7#5!4 5!3/.,-.1 5"8$:%=' ?(!?'?'?'?'@'A( A) A)!B+#C,%?)";&:%<' ;&=(!=(!;&;&:%9$9$;&;&>)!<' ;&;&9$8#8#8#9$:%;&<'<&;&;&;&:%:%;&;&:%;%<'<' ;&9%8#6"6"7#5!311111/-,,)&$#    - -0--/9%S;4YB9M6/8#44!3!2!2!3!3!5"7#8#9$9&9' ;(!>*#A*$C,&E.(D-'D-&E.&F.&F.&D-$D*#C)"C)"D*#C*"B* D,#E-%D+'@,&?,%?,$?*#A(!B'A$@%bF9mSG^D8E,9 7,/()++,04!5!5"5"6"6#6#6"7"8#8"7"8"8#9#9$:$:$:%;'<' =)"<' 9$8#8$:&:%:%;'<( <( <( <(!<' <' ='!?("?'!>& =& >'!@(#>("<(!;( <(!<(!;' ;&;&:&9%=(!<( 9%7$7#6"6#6#6#6#6"5"4!4!6#7#6#6#5"4!7#9%8$7#8$8#8$9$:%;&:&8#8$:&:&8$8#7#6!5 7!7"5 5 6!5!4!4!3 4!4!4!5"4!3 2!02"0! 2 229 I0'mTJpVMK3+9#9":#=' E,%J1+M3(O4(M3)K0(H/&E.$C,#A*#?("<' 9%4!6":& >*"@+$?'D,$A*"?( @)!B+$C,&C-'C-'B/(D1+@-$B+$B)!C)!B)!?'!A)">'#>'#;$ :#=$>!N/)jJBjKDV=78"1 1!/ ..   - - -.,0;&G0)U=4aI?R90=%533 4"5#6$7%8&9& 9& :& ;%='!?)#@)#@)#@)#A*$A*$A*$A)#@("?' ?&>&>&=&<' ;&9%:&@+"C-$F.%I/'H.&N3+O4,M1)J-%D(B'K0'I2*=&9$8$8$8%7%5$3"3!212 3!4#3"4!5!5"7#8%9& 7#7$7$7$8%9%9%;' =)";' :&:%8$8#:%;&8$7#6"5!8#8$5!8#9$7#7"9%:&<' 8#6!6!7#8$8$7#8$9$9%9%9%9$9$:%:%:%;&;&9%8$8#8#8#8$9%:%9$9%;&;' ;' ;':&9%9$9$9$9%9%9%9%9%9%9%:%:%:%9%9$;&<( <' ;&:%:%:&:&:&:%9%9$9%:%:&;&:&:%:&:%:%:&;':&9%7"31.,(#+5"H1(W;0G+!;"7!7$8& 9& ;(!=+!>(?'A'C(C)B) B*#B+&B,(C,'E.&E-%E-%E.%F.&G/'G/'G0'G/'E.&E.&D-%C,$C,$C,$B,$A+#@*"?)"=("<&!;% <% <%<%<$;#:!8 <$A)#P81U>7Q;4>("0.,  $).14 7#7#8$8$8$8$8$9%:&;' <( >(!@)"B*#?(!<&<' =( <' ;&;&;&;&;&;&;&<' <' ;&<&=' =(!>& >& >&=%>%>& >& >&>& >& ?' @("B)#C*$C+%C*$B)#B*#C*$D,%E-&G.(J0*K1+K0*K0)K0(K/(K/'K/&J.%I-$H+#G+"E*!=&6"7#9#7!457!9#:$:$<$ =% =$ =#=$>$ ?%!>& ?'!@("@("@'!@(!@(!@'!>&<$>%?'!@("B*$C+$A("A("?& =%>%>& >& >& >& ?& ?'!>& @'!?& ?'!A)"@("?& >&@(!B*$A)#A("A("A)#B*#B*#B*#@("?'!?' >%=%=%;#9!;#@(!A)"@'!>& <&:%8$6!3110/,,/03!8#;&>& ?' @'@'B( D)"D*"E+#E+$E+#D+$D+%B*$>(!<' ;&9$;&<' ;&;&:%8"8#;&;&:%;&;&:%:%9$8#8#9$9$9$:%;&;&<';&9$:%<'<':%;&<' ;&9%8$8$9%7#5!5!4 2320//.,+))&#    -  /.07$\D>gOF`H@E/'422 21 2 3!4"5#7#9$9&9& ;(!=*#@*$A+%C,&D-'E-'F.&D-%E.%D-%D,$C*#C*#C*$C+#A+ C-!C,"B,$A-$A-#@+!?)>&>%B'?$`B8pSI]?6B#? 9..(*,-.1 4!5!5"6"7#7$7$7$7#6!46 8#9#8"8"9$;& ;& :%:&<' <( 9%7#9%;&:&:&;&<' =(!<(!<' <' <(!=(!>'!?'!?(!@)"A)#A*$@("=(!<(!:&<' <(!;&=(!<( ;&>)">)";'!9& 8%6#6#6#5"5!5"6#6#5"7#7$7#7$6#4!5!8$9%9$9%8$7#7#:&=)":&7#8$9%9%9%8$8$6"7"7"7!5 47"5 3 24!5"3 24!6#5"4#1 / /!4$;'7$9B'dI?uYP`D;>%;#9!;$A)"G/'J2)L4)L3)K0'I/&E.$C-#B+$@)#>(!;' 6#/;' >*#@,%@)!A)!A)!?( @) B+#A*$@)#C,&B.(C0*B/'@+#B)"A'D*"@' B)#?&!?%"?&#>$!="@#D"iHAnLE[@9B+&2 //-,,  - - --,+.;%V?6dLC\D9=%58"7#4"4"6$8%:& ;'!<("<'!='!='!>("?)#@*$B+%C,&C,&B*%B)$B)$>&<$>$?&='>)"=)"<(!6":%@+"A)!E+$F+#H,$L0(M1)N2*K.&M1(M2)J1(F/'A*";';'7$6#6$5$4#2 4!3!4!3"3"3"5"3 6"8%9& 9& 7$7$9&:' :' 9%:%<(!<(!7#:&;' 9$8#;' =)":&9$;' ;' :&:&7#9%9$6!7"8$:%=)!8$6"7#8$9$9$9%;' 9$9%<' :&7#8$;&:&;' ;&<' :%8$9$9$9$9%:%9%9$:&<' <(!<' ;' ;' :&9%9$9$9%:%:%9%9$9$8$8#8$8$8$9$:%;&;';&:%9%:%:&:%9%9$9%;&<' ;' ;':&9%:%;&:%8#8#8#8#6"4 1-*%!*A-#`F>lPGT7.>$8!8#9& 9& 9& :)!<)">( @(C*C*A)A*#B,&@+&C,&E-%E.%E-%F.&F/&G/'G/'F/'F.&E.%D-%D-%C,$B+#B+#@*"?(!=' <(!:'!9& 9& :&;&;%:#9"8!7 <%D,$Q:2ZC;W@9@)"0.  - - %*/235!7#8$8$9%:&:&<( =)!<( ;&=' @)"B*$@*#?*#=(!;&:%:%;%;&<'<';&;&=( >)!>)!=( <' <' >' ?& >&=%>%>& >&>&>& =%>& ?'!@("A)#B*#A)#@("@("A)$B*$C*%D+&G-(I.)J/(J/'K0(K/'J-%J-$L/&Q3+O1(J,"D';$4!5!6"6!456 8"9#:$;$<% ;$ ;#=$ ?%!?&!@'!@(!@'!?'!?' >& >&=%>&?' ?'!@("A)#C*$C*$@'!@(!?'!?&!?'!?'!>& =%>%>& >& ?' @("?'!?'!@("?'!?'!?'!@("A)"A)"A("A)#B*#B*#@("?' @("C+$A)#?' >& ?& =$:"<#=%?& ?' ?' =& ;&:&:%7"220/,,./3 7#;&?(!@("B(!C)!E*"G+$F*#E)"F*#F,$E,%C*$A*$?)#<(!;&;&;&:%:%;&:%7"7"9$:%:%;&;&9$8#:%9$9$9$8#8#9$:%:%:%:%;&:%;%:%:%<'=( <' 9$6"6"5"5"5!5!5!4 4 21000/,*'&$!  -  ./0/N72^F>bJ@O9/6!12211 2!3"5#8$:$:%;& ='!>)"@)#A*$B+%C,&D-&E-'D,&C,&D,&C,&C+%C+%C,&C,%@- @-?-@-A. B. B,@)>%<#A'A&V;1mOFbC;B#> 7.,1#% (+-0 13 4!5"7#6#7#7#7$8$:%;&!<&!;% 9$9$;&!<&!:$9$9$:&:&9%:&;&:&:%=)"<' :%:&;' <' >)">)"<( <&>& ?("@("?'!>'!=& <& <)!=)"<(!<(!;&<(!=)!<' <(!=(!;' ;("9& 7$7$7#5!4 5"7$7$6#7#7$7$8$8%7#6#9%:&:&:&:%8$8#<' @,%<' 8$9$:&:&9%8$:&9%8#7"7"5 37"7"5!23 6#3 13 5"5"3!1 0 /! )0-5>#V;0y]QpTHD)>%;":"=&C,$H1)J2(J2(K1(I/&E-$C,#C,$B+%@*$<(!9%4!<("?+$?+$@*#B*"@( @( @)!B+#B+$@)#A*$C-'@-&A.(=*!@)"A&C) B)!B)"B)#A'#A(%@&#<"=!B#[;5mLEbD=I2,8#.-,*,  - - -,*+.D-%\D;eMBV?3456!6#5#6$:& ='"=(">(#?*$@*$?)$?)#?)#A+%C,&B*%C+&F-(F-(D+&B)#F/&@)!C,#D,$@( ?( B+$>)"7#='A*"A( G,%F+$J.&L0(N2*N1)I-%L0'H-$B*"A*">( <(=) 8%6#7&6%4#3!5"4"4"3!2!4"6#6#7$5"4!6#8%9&:' 9&8$7#:%;' 9%6!<(!@,%<( 9%;&<' 9%6"8$8$:&:&9%:&:&6"9$9%:&:&8#7#9%:%:%:%:&:&9%9%=)!:%9%;' <' :&;' :&<(!:&:%;&:&8$<(!9%:%:&;' <(!;' :&:&:&:&:%:%:&:%:%:%:%:%9%9$8#8#9$:%:&:&:&9%9$9$9%:%:%:&;&;&;&<' <' ;':&9%8$8#8#9$9%9$8#7"5!4 0+'")*M7.nQGrPDY;.A&:!8"7#6$8& :)!;):&>(B*B*A)B*"C,$@*"C,#D,$D,$D,$E.%F/&G0'G0(G0(G0(G0(F/'E.%C-%A*"?( ?( ?(!=(!:'!8' 7&7&7&7&7%6#6"7"7":%?) N8/]F=W@7>'2.  !&+13 4 6":& ;'!:&;'=(!>)!=( <' <' =(!>(!=&>& ?)"?*#<' :%;&=( =(!=( ;&<';&;&=( =(!>)!=( <'<&?(!@(!>&=%>&>& >%=%=%=%>%>& ?'!@("@("@("@'"@'"@'#@'#@'#B($E+&G,'H,&I-%J.'L/(J-&H+#U7/gIA`B9L-#C&:$5"5"5"34546 8"9#:$;% ;% <% >&!?'"@'"@(!@'!?'!?' >& >& >& ?& @("A)#A)#B*#B)#B*$A)#?& ?'!?'!?'!@("?'!>& >&>& >& >&?& A("?'!?'!?'!?' ?'!?'!?'!?'!@(!A)"A)#A)#@("?'!>&?'!A)"@("?'!?& >& <$;#<#=$=%>& ?'!=& :&:&:&8$31.-,.003 7$:&>(!@("A(!A' N3,\?8S6/F*#D)!E*#E+$C+$A)"=' :%9$9$9$9$:%<'<';&<' :%9$9$:%:%:%:%8$8#:%:%9$9$9$9$9$9$9$9$9$:%:%9$9$9$8#7"7#7#7#6#6#6"6"5!5!5!3 10/.,+)'&$   - ,-10F.'Y@9aH?V>5<$73422 2 3!5#9$;&;%<& >'!?)#A*$A+%B+%C,&C,&C,%D-'D-'C,&C,&C,%B+%C,&C,&A-"A- A, A,!B-!C-"B,"A* >(<$=&=&D,$U<5S:3:!74/,0!# '*+,./3 3 5!4!5"7#6#9%<'">(#<&!:% <&!=(#='";&!8"9$:%8$9%=)!@+$:&9$=(!=(!:&9%;&;';' ?*#@+$<( :$=& @)#A)#?("?(!?'!='!=)"=*#<( =)":&<' =)!=(!;' <( ;' ;(":'!9& 8%7$6#7#9%9& 8$7$7$7$7$8$9%8%8%9%:&:&:%9%8#9%:&=)!<(!:%:&<(!;' :&9%:&:&9$8#6!5 6!9$9$7"4!4!8%4!123!3!2 1 02#!/ 1238@&nSHmSHO6,>%9"8!:$@)!G0(L1)K1(L1(K/'H.%G0&F0&B+$?(">(!<& 7"<(!>*#=)!;&A*"@( @)!A)!A*"C,%B+%?("D-'@*$A-'@*$A)"B(!C( E*#A("C*$D+'B)&@'$>$!=#?#N/*jJBhHAK1*<&"2 --,+/   - - -*)()0C.&S=4W@6G/&7 5!5#6%7$:% <'"=(">(#>)#?*$@*%@*$@*%A+%C+&D+&D,'E-(G.)G.)F-(E-&E-%D,$D,$C+#@) B+"A+#;&;$@) A*!D+#J/'I.&M1)N2*M0)M1)M1)M2)L1)G0(B+#>) <(<( :' 7$8'8' 6$4"4!4"2 3"4#7%7$7$7$6#5"8%7$6#7$8%8$8$;&;' :&9%<(!?+$<(!7#7#8$8$7#8$4 8$7#9%:&9%7#:&:&:&9$7#8#9%;' ;' :&7#8$9%9%<' 9$:&=(!;' :&:&:&<(!:%:&:&9%:%<(!:&;' :&;' <(!;' :%:&;' :&8$9$:&:%:%;' :&9%;&:%7#8$9%:&;&;&;&:&:%:%:%:&:&;' =(!<(!;' ;&;&<' ;':&:%:%:%9$9$9$9%7#5!3 0-'!*,WA7pQGkI' ='?(!>)";(!8& 7%7%7%7&6%5$4"3!3!4!8#D/&S>4M8.<'2.  "',25!7#7#7#8$9%9%9%;&:&;&;':&;%>& =&@*#>)"<' ;&<' <' ;&;&<' >)"=(!=(!>)">)">)">)!=(!>(!@("@(">&>& ?'!?'!>& >%=%=$=%?' @(!@(!@("@("@(!@("A(#A($A(#C)$F,&G,'G,%H,%J.'K.(J,%H+#]?7uWNgI@J+!A%<&8%5"5"3 1346 8"9#:#:$:$:$;% <&!='!?'!@("@("?'!>& >& @(!A)#A)#A)"A)#B*$A)#A)#A)"?'!A)#@'!?'!?'!>& =%>%>& >& <$>&?'!>& >&>& ?' >& ?'!>& =%?' A)"A)#@("?'!?'!?& =%;#;#>&?'!>& =%=%=$=%=%>& ?' >'!<( ;'9%6"0.,-.12 03!8%<(!>("@("A(!B'V:3nQJcF?J,%E'!F*#F+#D+$B*$>(!;&:%:%9$8#7"9$9$9$:%:%:%:%:%:%:%9$8#8#:%:%:%9$8#8$9$9$:%:%9%8#8#9$:%8#5 5!7#7#6"5"5!4!4!5!4 3 23 2 10.,*(%#    ,+.1=%R92fKB`E(!?)"5!221./ # &)*+/13 5!6"5"8$9& 8$8$<'"?*%>(#:$;&!='";% ;& :% 9$9%:%;';&;'<' ;' ;' <' :&:&;' <( <(!=)">*#<(!8#>'!A)#A*$@)#A)#A*$@)#<(!<)!<(!>*#=)"=(!>*">*#;' <(!=)!;(!:'!:'!:'!9& 8%7$8%8%8%9& 9& 9%8%7$7$7$7$8%;' :&8$8$8#9%:&;' ;' 9%:&<(!<(!:&8$9%9%8$7"8#7"6!7"9$9$7$4!6#5"4!3 3 2 3 2 3!1 / 0 028";$Q<5^JCO<58%4!4"7$>(!E.&K1)M1)L0(L0(H.%G0&G0'C-%@)#>'!<' 8#/;'!;(!;'?( A)!B+"C,$@( A*"D-'?("?("A)$C,'C-(A+#D*#D( F+#C)"B)"C*%B)%?'#?'#@($=%B'!R6.U90F,$9"4!-/ +), - - -  / .--07!>'C,!75 4!4"5#8$:% ;&!<'!<'!=("?)#@*$@*$A+%B*%C+&D+&D+&E,'E,'F-(H/*G0(H1)G/'D,$D,$G.&F-'A+$6 ;$@)!?'F,$H-&I.&L0(M0(K/'T80N3*K0'J0(G0(A+#A-$:&;(!:' 8&8'9(!8&"5"6$ 5# 4#5$7&6#5"6#6#5"5"9& 6#6"7$8$8$9%;' ;' :&9%:&<(!;' 5!8$8$;' ;' 9%7#:%7#:&:&8$8$:&;&;' 9%8#8$9%:&;&;'9%;' :&:&:%8$;' =)":&:%9%:&;'8$9%9%9$:&;&:%:%9%;&<(!;' :&;&<(!;' :&:&:%9%:%<' ;' :%<(!;' 9%9%9%:&:%;&<' <(!;' :&<(!<(!;':%;&<' <(!;' <( <' :%8$:%;' ;&8#9$:&;' 9%6#4"2!.(#/4]D+#=*!@+ C- B,B+ C,"D,"C,"F.&E-%D,$D,$E-%E.%E-%E.&E.&E-%D-%D-%D-%D-%B+#>( ='>(!?)#>)#;("9& 7%7%7%7$6$5#3!1 5"4!10/../ - - $(-14!6"6"6"9%;' 9%:&:%;&;':&:&;&=&?'!>(!>)!<' ;&;&;&<' <' <( >)">)">)">)">)">)">)">)"?)"A)#@(">& >& ?'!?'!?'!>& >& =%>& @(!@(!?'!?'!@(!@("@("A)"@("@("C*$G-(H.(G-&G,%G,%G+$G+#F*"]A8wZQfI@H*!@%9&6$4!332335 :$:$9#9#:$:$;% <& =& >& >& >& >& >&>& @(!@("@("@("A)"A)#B*$A)"@("B*$B*$A)"@("@("A)"@(!>& >& @(">& <$;#=%=%>& ?' >& =%>& =%>&A)"A)"@("@(">& <$;#:":";#=%?'!@'!>& =%=%?' @("@("@)"@+$=)!8$6!42322 3!1 03!7$;' <& ?'!A(!D(!V92rSMkLFN/)F'!F)"E)"B)"A)">(!:&9%9$8$7"7"7"8#8#8#9$:%:%:%:&:%9$9$9$:%:%9$9$8$8$9$9$:%8#7"7"6!7":%;&8$6"8#7$6"4!3 223 4!4 33 2 11/+)'&%#   *,,/5 D.'_H?^G=L5+8 211 1!2!3"4$7%8&:&<& ='!?("@)#A+%A+%C,&D-'E.(E.(E.(E.(F/(C,&B*$C,&D-'E.'E-&D,%C+$C*$B+$@*#>)!<( ;' ;' :'7#6#6$4$1#0"0"..# &'),/ 14 8%8$8$:& :& 9%9%;'!>(#>)$;& ;&!;&!:$;&!='";& :%:&:&;' <( :&8#8#:&<' ;' ;' =(!>)";' 8$;&<' ?("A*$A*$A*#A*$B+%@)#<' :' ;' <(!<' ;' @,%=)":&<(!>)"<)";("=)#=)#9& 9& :& 9& 8%7$:& 9& :'!:'!8%7$7$8%8%;' :%8$9%:&<' ;' 9%8$7#:&=)!=)";' 9%8$7#7#7#6"6"7#8$5"3 4!5"7$8%5"5"3 22220,.127!6 7!<)"8$8%6#5#7$=(!D-%J2*N2*K0'L0(I.&G/%F/&D-%@)#=' <' :%48$;(!>*"@+"B+"C,$G/'B*"@)!C,%A+%?("A*$C+&F-)C)#B("E*#G+$D*#@'!=(!:'!9&"8'!=,&<+"9%8#9#7 45 --*)+  / -,,./155 121 3"7$9$9$9$:% <&!>(#?)$?)$@*$B*%A)$B*%D+&C*%A(#B)$D+&F-'E.&E-%B+"B*"F,%G-&D+%B)#6!;&@( B)!E,$G.%J/'M1)O2*Q3*S5,L1&F* H/&D-#?) ?*!;&=*#;' 9'8&7%5#3 4"7%!5$6%5$214!6#6#7$7$6#6#6#8$7#8$:%<(!=)"<(!<(!=)">*#;' 8$7#:&:&9%:&;' ;&>*#=)!:&;' ;' ;' <(!:&9%:&;&:&;' =(!=)">*#:&;&9$8$<' >*#:&:&9%;' :&8$;&:%8$:&9%9%:%9%:&<(!:&;&<(!=)"=)";' =(!<' ;&;' <( ;'9%=(!=(!;' ;&;';&;' <( =)">)";' ;'=)";&9%<' =(!=(!=)!<(!:%8#7#:&8$;' =)":&9%=)!<' 8%6$3"/+&"-:!ZB9cMCR<3B+#;#:#:$='@)#>'!?)#A+$A+#B+"C-"C+"C+"D,"D,"C,"F.&E-%D-$D-%E.%F.&F.&E.&F.&D-%D-%D-%C,$B+#@*"?)!>( ?)!@*$@*$>)#<'!9%7$7$7#6"5!2/.21/..-   $)/234 6"8$:&;( <' <' :%;';&;'<' <&=%=' =(!<':&;&;&;&;' =(!=(!=( =(!=(!=(!=(!=( =(!>)!@)"A)#@(">& >&>& =%>& >& ?' @(!@("A)#A)#?'!?'!@("@(!B(!C)"B(!B("D*$G,'G-&F,%F+$F,%E+$F,%E+$O5.Z@9P60B(!=%6#3"3!223324 6!7"8#9#9#9#:$<&!=&!>& >& >& >& >& ?' ?'!@("@("@("@("A)#A)#@("?'!B*#B*$@("@("?'!?'!?'!?'!>& ?'!?'!=%=%?'!?'!>& >& =%;#<$>& @("A)#C*$B*#A)"@("?'!>& >& =%<$<$?'!@("?'!>& =%>& @(!@(">(!=(!:&6"4 3111110013 5":%?'!A(!E)"Q4-hICiIDP0+F& F("E)"C)"A)#>'!:%8$9$8#7"6"6!6!7"7"8#8#:%;&;&:%:&:&9%9%:%9$9$9$:%:%9$9$:%9%9$:%;';&:%8#7"7#8$6"5!4 223 5"5"5!4!2 10.,**(&%"  -+/ ./15 B+$B*"7431 11 3!4#6$8%8&:'<&!='!>("@)$A+%B,&C-'C-'D-'F/(E.(E.(E.(C,&A*$A*$C,&D-'D,'C+&C*%B)$A*$@)#>)#<)";(!8&:(!9'!6%5%5&3%/#0#.-3"&***/4#5"9& 7$6#8$8%8%:' <)#;% =(#:$;&!='"<'"<'">)$;&!:&=)">*#:&7":&=(!;' 9$;' <(!;' <(!?+$<(!7#<' >*#A+$B+%A*$@)#@)#B+$@)#='!;' ;' ;' <' =)"?+#=)":&;' >*#<(!<)#>+%=*$:'!9& ;(":'!8%7$;(";(";(":'!9&:& 9& :& 9&;' 9%9$9%9%:&9%;' 9%7#9%<(!;' :&<(!:&8$8$8%6#3 6#6#5"3 3 5"6#5"4!4!4!3 2201.-1 118!48$312 5"7%:& B+$H1)M1*K0'J/&J.&G.%E.%D-$A*#>(!<& :%6!:%;'!<' ;' >( @( D-%E.&B+#B+$E.(A*$B,&C+%E*'E)%C("C("E*"D)!A(!@*#>*$<)$:(#9("9(!6%8$9%6!6 6 0))(+-   / .-,-/04 20/1!6%!:% 8#8#9$;& >(#@*$@*%@*$A)$A)$B)$C+&D,'C*%@'"A(#D+&G/(E.&C+#D,$F.&F,%E+$D*#4 9%>( A)!C+#F-$H.&K/'N2*O1(O1'N1'N2'P5*ZB8I1'B+"?( =( =)"=)":' 9&7$5"6#7$3 2 5"6#6#6#6#9& 7$7$6#6#6#7#8$9%8$8$:&;' 8$7#6"<(!;' 9%:%:&:&9%;&:&=(!?+$=)"<(!?+$>*#=)";' :&;&=(!<(!;' ;' =)">*#=)";&=)"9%8$;' <(!:&:&9$<(!9%:%;' ;&:&:&8$:%;&:&;&;' :&<' <(!<(!<' <(!?*#?+#=)"=)"=(!:&:%=)!=(!:&:&;' ;' ;&<' <(!=(!;&=(!<(!9%9$=)"=(!:&<' =)!;' 9%<' @,$8$;' =)";' 9%;&>)"6"6"4#.'#",3A) I3*B+"<$:":#;%=' @*$?("@)#@*$A*#B+#B+#D+&D+$D+"C+ B) C*"E,%E,%F-%F.&F.&G/'F.'F.&G0(G0(E.&B+#@*"@*"A*#@*"?)!?(#?(#>'#<&!9#8"7"7"5!5!5"4!220/0-+ -  !%*02236"9$:%;&<& <' >(!=(!>)"<( :&=& >& <&:%;%;&;&=( >)!=(!<' <' <' =(!=( <' <( =(!>)"@*#?("?'!?'!?'!?'!?'!>& >& >& ?'!?'!@(!@("@("?'"?'!>& >&@' A' A' B' C)"D+$E+$E,$E,%E,$E,$E,$B*"D+$F-&C+$@("='!7$3"2!1 1233 3 35!7#8#8#9$:$:$ <% >' ?' >&=%>& ?'!?' ?'!?'!@("@)"A)#A)#?'!?'!A)#A)#@("@("@("@("@("@("?'!@("B*$>& =%@(!@)"?'!>& =%;$<$>& @("@("A)#@("?' @("B*$@("?'!?' >& >& ?'!@)"@)"@("@("A)"@(">& <%9$8$7$7#7#7#6"4 2/001 3!5";%A)#A("D)"F*#N/)P0+K+&H)#G*#G+$E+$C+%?)";&9%8#8#8#8#7#7"7"7"7"9$9$:%;'<' ;':%9$9%;&:%8$8#9$:&:%9%9$8#8#8#8#8#9$:%:%:$:#:#9$8#6 56!7#6"5"5"3!1/-,+++)'$   "%'.///4024!1!1 1!2!4#6%!8&!9& 9' <& ='!='!?)#@*$B+%C,&D-(E/)C,&E.(E.(D-'C,&B+$A*$A+$B+%C*%B*%A)$A)#@)#?)#?)#>)#>*#8&9' 9' 5#2!2!3"0!1".-1 %),.// 8%:& 7$6#8$9& 9%9%<("<'!=(#='"=(#?*%?*%>)$@+&;% <'!=(!;' ;' >*#@,%9%7#=(!>*#<(!;' <(!?+$<(!:&<(!>*#?*#C+%C+%@)#@("A*$@)#>("<(!=)";' =)"=)">*#>*#<(!9%=)"=)"=)">*#>*$=)"<("=)";'!:&;' <(!=(!<' ;' :&:&<(!<( :&:&<' ;' <(!=)"<(!:& <(!=)":&:&>*#>*#<(!;' ;' :&8$8%7$6#6#8%7$4!5"6#5"6#6#6#6#4!25"221!/!/ 3 .6534 4 25"6#7$>)!E.&J0)L0'I.&J-%H.%E-$C,#A*#?)"='!;%9$09$<' =)!>( ?'A)!F/'C,$B+#E.'C,&B,&C+&D)%E)&E)#D("C' B'B("@+#>+$<*$;)$;+$5&5%8(:(7$333+))*,  -++*+.032 0-/ 4"8$7"7"9$;&!=(">(#?)#?)$A)$A)%C*&D,'E,'D+&C*%D+&F-(G/'@)!C+#G0'G.'D*"E+$G-&5!;&A)"C+"E,$G.%I/'M1)P4,P2)O1'N1'X<1eJ@eMCL4*C,$=&;&;' :' 9&8%5"27$9& 6#6#7$7$7$8%8% 9& 9'!9& 8%9& 7$5#7$;("9& 5"9& 7$7$;("8$:'!7$:& :& 9&:' ;' :&:&=)">*#=)"=)">*#=)"=)";' :&<(!=)"=)"<(!<(!=)">*#<(!<(!?*#:&:&<( :&9%:&;' <(!9%;' ;' ;' <(!;' :%;' ;' ;' <' ;' ;' <' <' ;&<' =)">*#>*#=(!>*#=)";';' <(!;'9%:%<(!=)!=)!=)"<(!;&>)">)"=)!<(!<( <(!<' ;&<(!=(!<(!;' =)"@,%8#<(!>*"<' 9%:&<(!203#/ (%--/16 8!8!9!;$<&=&='!?("@)#@)$A*#B+#C,$E,&E,%F.$E-#C*"B)"D*#E+$F,%F,%F-&H.'I0)I/(F.&F-&D+$A)"@(!@)"A+#A*#>( <% <% <% ;$9"8!8"7"6!30-07#6#0/,+  -! %(,/135 7!9#:#<$=%?'!A)"A*#?("=(!<)!:':%<%=%=%=%>& ?'!?'!>' >& ?'!?(!@("A)#@)"?(!>' >'!@("A)#@(">& =%>&>& >& >' ?' ?'!?'!>' >& >' ?'!?'!?'!?& >%?&?& @' B)"C+$D+$D,%C,%B,$B,%A+#?*"@+#A+$@*#>)";& 7#4"3"2 /.24!5!4!5!5"7#8$9$8#7!:#>& >& <$<$>& >& =%>& ?' @("A)#B*$A*#@("?'!A)#@("@(!@("A)#B*$A)#?'!?'!B*$B*$@(">& @("@)"?'!>& >& =%=%?(!@("A)#@(">& <%>& @("@)"@("?'!?'!?'!@("@("?'!?' ?'!?'!>& <$:#9#8$8$8#8$7$5!30-./2 3!4#8&;(!>)#A*#D-&E,&F,'G-(G-(E,&C+%B*$@*$='":%9%9%;&:%8$8#8#8#9$8#:%9$9$;&<( =(!;&9$8$;&:&9$8#9$:%:%9$8$8$8$9$9$9$9%:%9%:$;$;$;&;' 9$8"6!5!5!5!6#3!2 10/-,-+(%! -  -)+-*.,/.05"1!1 1!2" 5# 7%"8&#:&!:& =' ='!=' >(!@*#B,%D-&D-&F/(D-%F/(F/'D-%D-%C,%B+#B+#B+#B*$B*%A*$@)#@)#?)#?)#@)$@*$;'!9' 8& 5"12 100 0 /1 &+...3$5#8$8%8%:& <)#;("9%<)#>)$?*%@*%>)$A+&?*%?*%@+&=("=(">*#<(!=(!@+$>*#>*#<( ;' <(!:&:&=)"=)"<(!=)"?+$>*#<' ?("A*$@)#?("@*#A+%@*#<(!=)"<(!<(!?*#@+$=)":&=)">*#?+$>*#>*#?+$>*#>*#=)"<(!;' :&:&;' <(!:&;' 9%8$9%:&;' =)"=)"=)">*#=)"<(!=)"@,%=)"9%8$;' <(!;' ;' <(!8$8$6#7$7$7$8%5"7$5#6#7$8%6#2 4"3 4!4!3 2!0!-3!047 7!8$7#5#4"3!4":& B+$G/'L/'I.%H,$H-$F-$C,#A+"A*#?)"<& 9$36"9%<' <(!>'?( C,$D-%C,$D-&D.(C,&D-(F,'D(%C(#C'"B' B'C)"A+$<*!;)#8(":*$8(!5&7'8(6$2/1/-+*),   -,**),./13#3$0# /"5#7"7"8#:%;& ;& <& >'"@(#B*%B*%C+&C+&D,'E-(F-(F-(F-'C+#?'C,$F.&A(!@'C)!A'6"<'B*"C+#F-%H/'L1)P4,Q5,O2(M0&J.$eI>oVL]F*#=(!;' <(!<' :&?+$=)!;' =)!>*#=)"=)"@,%;' ;' >*#?+$<(!;' =(!<( :&;' <(!;' 8$<(!=)!:&;' ;' 9%<' :&=)!=)"=(!<(!=(!>*#;' <(!>)">*#>*#=)">*#=)";' =(!<(!:&:%;' =(!>*#=)"<(!;&:&@+$<( ?+$B-&@,%>)"=)"=)"9%<' >*#;' :&<(!9%<(!;' ;&<(!>)";' 4 10 ,'#$ 15458!8!8!9#:$;%='!?)#@)#A*$B+$C,$E-&F-'G.&G/$G/$F,$E+$E,$F-&G.'G.'G.'G-&F,%F-&G.'F-&D+%B)"@(!@(!A)"@(">(!9) 9( =% ;$ 9#8"7"7#7"5 48$ E0,O;7F3/0,.,  $(+-/3 7#7#8#9#;#<$<%=%>' @(">(!;' :&8%;'=' ?'!@(!@("A)"A)#@("?'!?'!>' A)#B*$A)#@("@("@("@("?'!>' >& =%=%>& @("?'!?'!?'!?(!?'!>& =%>& ?'!?'!?'!?'!>& >& ?'!@("B*$D,&D,&C,%B+$@*#@*#A,$@+$@+$@+$>)!<' 9%5 42 1 .-034 5"5!6"7$8%8$7"7":$=& =%:";#=%=%<$=%>& ?(!A)#B*$B*$@("?'!A)#@(">' ?'!A)#C+%A)#>& @(!D,&C+%A)#?'!@("A)#?'!?'!?'!>& =%@("@("A)#@("=&<$>& ?'!A)#A)#?'!>& ?'!@("?'!=%;#<%>& <%;#:#9$9%9%8$8$7#3 1/,-03 5"7%:(!=)#>)$C,%D-&D+%D+$D+$D*$C*$C+$C,%A,%?*#;'!:& :&;&:&9%9$9$9$9$9$:%;':%9$:%<'!;' 9$9$:%:%9%9%9%9$8$8#7#9$9%9%9$9$8$8#8#8#;$:#8#8$9%:$8#6"6"7#8$4"0//.-+**('#   - (')-,-../12"2 2 3!6# 8% 9&!;&;&>(!>)!?)!?)!@*"C-%D-%B+#C-%G0(G0(F/'F/'F/'E/'D-%D-%D-%D,&D+&B*%A*$@)#?)#?)"?)"?)"=(!:&:%8"3>(!E/(?)"7!31.',0!1!1"2"6$:' :'!8%8%;(";(":& <)#>*$>)$@+&>(#=(#=(#<'"?*%@+&>)#<(!A-&@,%?+$;' ;' ?*#=)";&:%;' =)"=)">)"?+$>*"=)";' >)"A-&@,%=)"?+$@,%?+$=)"=)"<(!=)"?+$@,%@,%=)"<( >*#@,%?+$?+$?+$?+$>*#=)"<(!<(!;' :&<(!<(!:&;' <(!=)"<(!:&<(!=)"=)"=)"<)"<(!:&=)"=)"=)"<(!:&:&9%9%9&:&:&9%8$7$7$9& 4!5"7$7$6#7$6$7$:'!9'!4!1223 .+/2354;(!8$6#5"4!5"8%?)!C,$H-%H-%G,#G,$G.%D-#B+"B+$@*$='!:$6!29%;&:&<&?'@)!B+#B+#C,$D-'D-'E.)F/)D+'@&"A& B(!B' D*"C+$>(!;(!8'!7& :)#7&9&7#9#:#7 30/ ++)*  .++++.//01!2#2%!4% 7#8$;&!<'"<'!;& ;% =&!A)$A)$B*%B*%A)$A($C*%F-(F-(E,'C,%C,$D-%E-%C+#C)!D+!D+!28$>( B*"D,#F.%I0(M2*R6.O2)L/%I,"O4)qUJqYON7-C,#B+#@*";(!9&<*#9&6$8%;("9'!7%7%7%9'!9& 7$9'!6$9& :'!9& 8%9'!;(":("9& 7$5"6#:'!7$7$7$9& ;("<)#<)#7$:' <(!<(!;' <(!=)">*#>*"=)"?+$?+#<(!>*#>*#<(!=)"<(!:&;' @,%9%=)"@,%?*#<( :&<(!?+$<(!?+$<(!9%9%:&7#;' >*#;' 9%:&:&>*#>*#<(!;' ;' =)!;' <( >*#>*#>*#>*#>*#<(!:&<(!<' <' <(!<( <(!;' <' :&8$9%<(!;&?+$B-&@,$=)"=)"<(!8$:&=)"8#9$:&;' =(!8$;' =)!;&7#4!2.., $(16568":"9!8"9";%?)#A+%?)#@*$B+$D-&F.(G.(G.&G.$F.$D+#D+$E+$F-&H/(J1*J1*J0)H/(G.'G.'G.(F-&C+$B)#A)"@(!>&;&8(8(=$ ;$ 9#8"5"3"2#5#5 E*#V:3\B'!>&!>& >& =&=%>& ?'!?'!>&!>& =& =&>' @)"B*$C+%B+$B*$B*$C*$A)"B+#A)!A*!B+#@) <&9"4210//134 5!5!6"8$9%;&<& =& >'!?(!>& ;#:#:#;#>& ?'!>& >& >& ?'!@("?("?'!@("@("B*$B+$B+$C+%A*$?'!A)#D,&C+%@)">' @("A*#@)"@("?(!>& >& @("B*#A)#?(!?'!?'!?'!?(!A)#=%>' ?'!?(!>& <$=%>& =& <' ;'<' <' :&9%9$8#6"5!4!4!3/.13 6"9$<& >'!?'"C)$E*$H-%J.&F+#D)!C)"C*#C+$A,%?+#<(!9&:&;&;&:&:&:%9%:%:%;&<' ;&8#8$;';&8$8#9$9%9%9%9$8#8#7"7"9$;&:&9%8$8#8#8#8#:$;#8"6"7#:$:$7#6#8$9%6$3!2 10/.,,)&#   ()&().11023!2 2 3"5$ 8&!9'!<&<&>(!?)"@)"@)#A*$E.'E-'B+$D,&G/)G/)F.(E-'E-'C+%C+%B*$B*$A*#?+ =)@,"B/$A+"?) ?(>'>&>%;!:4L1*^D(#A,'A,';' ?+$A-&@,%>*#>)"?+$8$>*#>*";' <(!?*#@+$@,$>*"=)">*#@,%@,$<(!:&<(!@,%=)"=)">*#>)"<(!>*#?+$?+$>*#>*#?+$?+$<(!?+$>*#=)"=)">*#<(!;' =)";' :&;' ;(!;' ;' <(!?+$;' :&<(!=*#=)"<(!=)"<(!>*#=)"<(!<(!<(!=)"@,%=)":&9%8$7$9%8%9& :'!5"4!6#7$5"7$8& 8& 7$6#6#2 3 3 1/,-2 149"K6/S@9I6/9& 6#5#6$;&@*"E,$G+#F+"F*"H.%E.$C,#C,$B+%?)#;%8#1:& ;' :&:&?( @( @)!A*"B+#B+%D-'E.(E.)C-'>'#?(!A)"B(!B) B*"@)"<' 9(!4#7& 7&9&8#<%J2(N5,E.%4.++++.    0!!,),/1148 599 8!7"7#9$9$8#:$='"@)$B*%A*$@("B*$B*$A(#B(#D*%F,&F,&C)$A)"F.&E-%B*"B)!D+#E,"B)5!;&A)"C+#E,$G.&J0(M2*Q5-O2)M/&H,![?4oUJfNEB+!@*"A+#?*#<)":& 8%6$8%9& 9'!8& 7$9& 8%:'!7$6#7%8& :'!;(":(":'!7$4!5":'!9'!9& 9'!9& 7$8% :'!<)#<)#=*$;("8%9&9&:&8$9%<(!>*#=)">*#@-&@,%@,%?+$>*#;' >*#>*#<(!>*#@,$=)"?+$B.'=(!=)"<(!<(!>*#:&>*#>*#>*#>*#=)";' >*#?+$;' 9%:&<(!=)"=)";' <(!=)"<(!;' =)"A-&>)"<(!>*#>)";' :&<(!<(!=)"?+$>*#;' :&;&9%:&:&:&;' >*"?*#?+$<(!<' <(!<(!;' <(!8$<' <(!>*#>*#;' >*#?+$=)"9&7$3!..-" #-/6657 ;#=% ;%;%='!?)#@)#>("@)#B+#D.&G/)G.(G.&F.$F.$D+$E,%E,%F-%G.'H/(H.'I0)F,%G.'G/(G.'E-&D+$C+$B*#@(!=%:%9(8'<#:#9"8!5!2"1!02O3,aC;_C;K1*0(*/ #').4"7#8$9%:& <&!<% <%<%=%>& @("?'!<' <' <(!<'!=(!A)#A)#A)#@("@("@("@("A)#A)#@)"B*$B*$A)#A)#A)#A)#@("?'!>'!>&!=& =&>& ?'!?'!>&!>& =%=%<$<$=& >&!=% <%<%<%=& >' @("B*#B*$B*#B*"C+#E+$C*"B) @'A'B(A&@&=$8#41001234!5"5"5"6#8$:&<&?'!>& =%>& =%=%>& >& ?'!?'!?'!?'!?'!?'!@("@("?'"@("?'!?'!?'!@("A*#@)#?'!?(!@)"@("@(">'!@("A)#@("@("@("?'"?'"?'!@("A)#A)#A)#A)#?(!=%>& =%>& =%=&?'!?'!?'!?'!=& <' <' <(!<(!<' ;':%8#7#8$6"3 1/.14!7":#<#?% @%D'!H+$T70_B:U90G+"D) B* B*"@+">*";( 9&:&<' <' :&;&:&:%;&;';&;&;&9%9%;&:&9%9%:%9%:%:%9%9$8#8#8$8$8$9%;&;&;&;&;';&;%:#9#7#7#8#9$8$6#7#7$6#4"3!2 10/.-*''! ')'+--.00434 5!5"7#:$9#;">%>%=&!?(#A)$C+&E-'F-(F-(G.(H/)H0*I0*I0*G.(D+%D+%C*$C*$B+#?+ <(?,!B.#B-#A*!@) ?(=&;"="; 9P4-jMFfJCI-%8024!/ 2#1"0!1"3#9& ;("8%;("?+&?+%;("9%;'!;&!?*%?*%>)$>)$?)$>)$@+&@+&>)#>*#?+$@,%@,$=)"A-&=)"=)"A-&B.'>*#=)"A-&>*#?+$?+$?+$@,%>*#A-&A-&>*#@,%@,%?+$>*#>*#>*#@,%?+$?+$>+#=)"?+$<(!<(!>+$?+$>*#=)">*#>*#<(!<)"<(!<(!<(!<(!<(!?+$=)"=)"=)":&:&?+$;(!<(!;(!>+$?,%?+$>*#<)"<(!?+$>*#<(!;'!;' :& >*#=)"9& 8& 8& 7$4"7$6$5#7$8%6#4!3!3 0023 4"2$!0"2 219"N91hUNeQK>,%8%6$6$:&@)!C,$G+#D*!F*"H-%G.%D-$C,$C,&A*$<& 9$5 ;& <("<(!:&>' @( >'?( A*"A*"@)#D-'C-'?+%>*$?*$A*#A)"A) @'?(!>(!;& 7#7"7"8";#7T7/bD'='>*#>+$<)":' 9' ;("9& :'!9&!:'!:'!9& ;)#8%8%;(":'!6#6#8%;("9& 9& :'!9& 9& <)$;("8%8%9& :'!=*$;)#<)#:' 9&9&:&9%:&;' =)"?+$?+$<(!?+$?+$A-&@,%=)"<(!?+$@,%@,%A-&@,%@,%A.'A-&;' A-&=)">*#>*#=)"?+$>*#;' ?+$?+$=)"=)">*#;' :&=(!=)";' 9%;' =)"=)"<(!=)"?+$A-&=)"=(!A-&>*#;' ;' ;' ;' <(!?+$@,$=)!:&:&:&>*#?*$<(!<'!=(">*#A-&=)"=)!@+$>*#:&:&:&@,%<' =)">*#>*#>)":%9$6"7#3"/ /!,!$/5B*!@) 8!7 ;$>'!=( >( >("='!>'">("?)"A*"C,$F-(G.'G/&G/%G/%H/(I0)I0)H/'G.'G.'G.'H/(E,%G.'H/(F.'D,%C+$C+$C+$A)#?'!;'8'8&<"9"9!7 3 1!0 /1\@:gKDZ?7A(!.)(3   %(+1!7$9%9& :& :% ;% <& >'!?'!>& >& >' >'!=(!<(!;' ;' >(!?(!@("@("@("?("?'!?'!@("@("@("A)#A)#A)#A)#A)#A)#A)#@(">& >' ?'!?'!?'!?'!?'!>& =%=%=%=%=%>& >'!=& =%<&<&=' >(!@)"A*"B*"B*"B)"D*"F+#I.%L0&V:0]A6W;/L0$D(>%7!4 100124 5!5"5"5"6#8%9%;$<%=&>'!?'!=& =&>& ?'!@)"@("?(!@("@)"@)#A)#?(">& @("@("@("@("@("@)"@("@("@("@)#@)">& =%@("B*$@)"?'!?'!>'!?'"?("?'!?("?(!@("A)#@("=&=&=& ?(!@("@("?'!>& >& ?(!?(!<' <' <(!<(!;&9$9%:%9%9%7#4 1/.13 5!:!7@% >"?#H*"_A9wYPbE' @("A)"B+$D,%E-&G/(H0)I0)L3,I0)K2,H/(F-&E,%D+%D+$C+$>,;)>+@. @- ?*?)@)=';!?%>#< L0'mOGmOGJ-$<010.2#3$3#4#6$ 9%<'">)#>(#>)$?*%=(#<'">)$='"=(">)$?*%?*%A,'?*%=(#;&!>)#?*#=)"?+$@,%>)"@,%A-&@,%@,%B.'E1*>*#B.'@,%?+$?+$?+$A-&@,%?+$A-&A-&@,%@,%C/(@,%;' ?+$A-&?+$=)"A-&;' <)"=)"@,&A-&@,%@,%?+%>*#>*#>*#>*#=*#<(!;' =*#<(!=)"<(!<(!<(!:&:&>*#=)";' :' =)"?+$>*#?+$=)"=)">*#=)";(!9%8$9%9&;' :' 8%8& :'!7$8%8%7%8& 9& 7$6#6#4!2015"6#0!0" 2!3 12D.&kWPo[TQ>7;)"6#5#8%?)!D.&I/'I.&J/&K0(I0'F/&E.%B,%@*#='!:%6!2<)#>*#<)!=' ?'?'=%@)!A*">(!A*$A*$?*$>+%?,&>+#?)!A*!?) ='=& <% 9":#7 695I,%dE=fIAT>52/./ --  ,),00;"X=5fMD]D=?& :!:"9#9% ;&!:& 9$:$=&"@)$@)$?(#A*#B*#D,%H/(K0*K0)J/(H-&G,%F,%E+$E,%F-&F-%C+#B*"A*!4 8$='A)!D,$G/&J1)M2*P4,O3*N1'J-#F+ X<2T<2K3*C,#@*"@*#>+$;' ;(!;(!<)#<)#:'!9& =*$<)#:'!:'!9'!7$8%9&!:(":'!:'!<)#?,&6$7$;(#;("9& 9& 8%7$7%7$9'!<)$=*$;)#9' 8%9&;(!<(!9&<(!=)"=)">+$?+$?+$B.'B/(?+$>*#>*#>*#?+$A-&?,%@,%A-&B.'@,%=)"D0):&@,%@,%@,%@,%?,%>*#?+$<(!;' <(!>*#=)"=)":&>*#>*#?+$A-&=)"@,%>*#?+$B.'@,%;' >*#C/(@,%=)">*#@,%?+$=)"9%=)"<' <' =)">)"?+$B-'<'"9$9$;&!>)$?*%;& <'";'!:&:& <(!>*$:& ;' <(!;' 9%:%:&5!7$5% 1"/"-! /2D,#X@8S=3A+!:#:#:$:$<&@*$='!?)#@)#?)"@)!A*#D+&F-&G/%G/%G/&G.'I/(J1*I0)H/(I0)J1*J1*I0)H/(H/(F.'D,%B*#B*$C+$B+$@)";(8'9%;!9!9 62 0 0 2 8$`E>aF>M2+8 -*( #&(-3"7$8%:' ;(!='"='">'!>& =%>'!A)#?(!:">*"B.'=*"<( >(!@("@("A)#@("@("A*$A*#>& =%@("C+%A)#?'!B*$B*$@("@("?("?(!@("?'!?(!?("?'!?'!?'!=& =%>& =%=%?(!?(">' >' <&:%<( >)"?(!@( B)"C)"B(!D)!F*!C'D(lPC}`TZ>2F*B&=$5 21//025!5"6"7#6"6#9%:&;%=%>'!@("@(">'!?'!@("?("@)"?("?("@("@("@("A)#@)#?("C+%?'!@("A*#A)#@("?'!?'!@("?("@("=%<%@("B*$A)#?(!@(">' @)#A*$?'!>& >& ?'!A*$D,&@)"A)#?("@("?'!?("?(!>'!?'!@("?(!=(!<' <' <' :&:%;&<(!;' 8%6#5!3 1.14!4!:!:!A& @%@#G*"^@8xZRfI@E)E) A(A*@,"=*!;&:';( <(!>)"<(!;&9%9%;&=(!<( <(!;' :&;&;' :&:%:&;&;&9$<( ;':%:&:&;&=(!;' >)"9%9%=(!<(!;' <' ;&=%;#8#8%;& ;% 9%8$7#6"6#6$5$4"4!2110,**$! )(*)/C.$O8/I3*9$3345 5!6"9$:#;#>$@'?(!A)#C+$C+%D,%G/(I0*H/(I0*L4-I0)J1+I0)F.'E,%D,%D,%D+%?,<*<*>,?,>)=(>'<%9 =#=#; E*!nQIjMEJ.&:40+0!3$5&!6'"8&":($=($?*%@+&?*%<'"<'!>(#>(#?*%>)$='"=(#>)$@*%?*%>)$A,'C.)B-'?+$?*#A-&@,%B.'C/(B.'@,%?+$>*#?+$A-&E1+D0)@,%?,$@,%@,%?+$>*#@,%A.'?+$B.'B.'?+$<("<)">+$@,%=)"C0)?+$?+$>*#;(!<(!>*#A.'>*#<)"<(!=)"?+$?+$=)"<(!<(!;' :' <(!>*#?+$8$=)">*#=)"<(!;'!:& ?,%>*#>*$=)"=)"=)"<)">*#<(!:&:' :& :&:& 7$9'!7$;)#;("8%7$9& :'!8%7$5"3 3 5#2 5#3!1!1# 2#2 21<&^IBq]VaNG@-'4"3!5";&B,$H0(K/'I/&L0(I/'F/%D.$C-%A+$>(";& 8#0<'">*$>*"<( =&?( ;$?( A*"?(!>'!@)#='!@-&?-'<*";'?) A+"?)!<%<& :#:$8"7 87<^A9fIA_G=B,#1.-*,0  1!..020F.%[B:bIAW=79 ;#8!9$:% :% 9$8#:%>'"?(#>&"A)$E-&C+$C+$F.'H.'H.'H-&J/(L1*F-&D+$E,$F-%E,%C,$C+#A)!4 9$>'B*"F.&J1)M3+P5-R6/N1(Q4*N2'O3)P6+H1'G0&>'?)!>)"<)";(!;)";)"=*$;)#:'!;(">+%9& 8%9'!:(";(#<*$<)#9& 6#8%:'!9'!8%;("=*$:'!9& 8%8% :'":'!9& ;(";(";("=*$>+$9&:' ;' =)">*#>*#>*#@,%@-&B.'B.'A.'A-&@,%?,%?+$>*#=*#>+$?+$?+$@,%=)"=)"@,%B.'>*#>+$?+$?+$B.'@-&>*#=)";' ;' <(!>*#?+$<(!7#8$:&=)"=)"=)"@,%@,%>*#D0)?+$;' =)"@,%B.'B.'=)">*#>*#;' 9%=)"<( ?+$A-&@,%>*#?*%=(#@*%='":% <'">)$<'"<'";'":'!:'!:'!:'!<)#=*$9& :'!=)#>+$=*#7&5#4% 1"/"-! 0 6 R91fOF_I@H2)=& :#9"8"<&B,&<& @)#@)#?)"?( @)!B)$D+$F.$G/%G.&F-&G.'H/(H/(H/(I0)J1*J1*I0)I0)H/(F-'D+%B*#B*#C+$B*$@(";(8(9$;!:!8 5 1 . -/8$S83M3,=#2,**'*,0#6$8%8%:& <("?*%@+&B+%B*$@("@)#C+%B*$=& ?*#B/'<)":&@*$B+%?'!@("B*$@("=& >& ?'!A)#B+%B+%B*$B+$C+%@(">& ?'!@)"A)#A)#>& @)"A)#>& ?(!@)#@("?'!?'!=& =%>'!>& >& >' >(!=(!<' <' @("C+#D*#B)"A(!B( D(D(K/$qUJ{_SY<0H, D(=%41000.03 4!6#;' 8$4 :&<' <%>' ?'!?'!>& =%@)#B*$?(!@("?'!?(!@("?'!@("C+%A*$?("B+%A)#B*$C,&C,%B*$A)#A)#A*$A)#A)#@(">& ?(!A)#@)"@)#B+$@)"A*$B+%?'!>& >'!@("B+$E.(A)#@)#?(!@("=%>& @)"@)"@("A)#>'!>*#<' ;&;&;'<( >)"?*#=)!5"5"6"4 1/14!5":"=$A' B'A%G*"]?7xZRkNEI-#F+"A)B*!A-#>*!:&:&:&=(!<(!<(!;&9$9$:&:&:&;' :%9$9%:&:&:&;&<(!;&9$;';&:%:%9%8$;'<( =(!;&<( =(!;';&<(!:%>& ;$8#8$9%:$9$8%8$6"5"6$5$5#4!3 2 3!2 .,+'$"&(*1N8/\D;YA8@(456!7!6"7#9$:$;#=$A(?(!A)#B*$C+$D,%F.'H0)G/(J2+K3,L3,K3,K2,H0)D+$D+$D+%D+%@+!=*<)>*?)='<&=';&:$;%;%7!B*!gOFeMDL3,9 53))5&7(#8)$9(#;)%?+&@+&?*%>)$>)$;&!>)$?*%@+&A,'A,'?*%?*%B-(B-(B-(C.)A,'>)#@,%?+$B.'B.'B.'C/(C/(C/(B/(>*#A-&C/(@,%@-&C/(@,%A.'B.'@,%>*#?,%A-&<(!=)"A-&B.'@,%?+$=)"A-&@-&A-&@,%@,%A-'=)";' >*#>*#<(!;' ;' ;'!>+$@,%>*#=*#<)";' <(!>*#<(!=*#?+$>*#<)";(!;(!>+$:' <(!?+$?+$>*#=*#=)"=*#>+$=)">*#?+$<(!8$:' 9& ;("=*$=+%;("7$5"7$7%7$6#4!113!23!3!0/!4&#.127!M81o\Uo\UE3,7%5#6$8%>( F/'J.&H-%J/'J/'G/&E.%C-$B,%@*$<'!9$44 =)#<(!<(!;%=%=&=%?'!A)#A)#@*$@*$@,$=,#;*!;) >(!>'!<'!<'"='#<'!:%7"7":#9 :P4,`D<`F>P9/6!02!.. 1!   /,-038!K3*]E'"?'#=&!C+%D,%B*$B*#C+$E*#D*#E+$I.'I/(F-&D+#D+$E,%D,$C,$C+#@) 5";%A*"F.&I1)L3*N3+O4,O3*O2(X;1O3(O4)K2(F/%A*!@)">( =)"<("<)"<)"<*#=*%<)#<*$>+%;)#8%9& 7%;)#<)#:'!:'!;)#:'"<*$:'!:'"<)$=*$:("8& :'!;("<)#>+%?,&;("=*$7$=+%@-':(!4":&;(!<)">*#?+$>+$>*#?+$B.(C/(A-&A-&A-&?+$>*#?+$=*#=)">+$A-&A-&=)"=)"B/(@,%>*#B.'D0)A.'B.(A-&>*#=)">*#=)";' @,%=)";' ?+$>*#=)";' <(!=)"?+$@,%>*#E1*A-&A-&A-&?+$=)"?+$@,%B.'?+$>*#?+$>*#>)"A-&B.'A-&>*#<'"=(#@+&>)$;&!;&!<&!<'"=(#>+%;("9& 9& :'!;'!9%8%:'!;'!=*#>+$:)"7&6'"4% 0$!.#!.9![C;jSJ\F=D-%=%;$:$9#=' @*$;%?(">(">( ?( @)"B)$D+$G/%H0&G.&G.'H/(I0)K2+K2+J1*K2+J1*H0)H/(F.'E-&C+$B*#B*#B*#A)#?(!;)8(:$;!:!9!6 0 . ,-4@% 9 2/)',!),.!1$7%9%9&:& <("=(#='">'!=& A*$@(">& @("C,%C.'<(!6#?+#B,%A)#?("A*$C,&?(!:#<$?("A*$A)#@)#B+%D,&A*$@)#A)#?("?(!@)#@)">'!A)#A*$>' @)"A)#@("@("?'!=&=%>'!=& =& ?'!=' ;'<' ?'!A)#B+"B*"B)!B)"E+"G,"F+"O3*sWL{_TV:/F*D(;#20/01.0326"<(!9&5":'<(!:#:"<%>'!=%:#?("@)#<$?'!>'!>' ?("A)#B+%C,&@)#>& B+%C+%B*$A*$A*$A*#@)#@("@("?'!?'!A)#?("?'!@("@("@("B*$B*$@)#C+%@("?'!@)"@)#A)#D,&A*$>'!=& >'!?'!@("@(">& >& B+$B+%?*#<' :&;&<( =(!>)"=(!<' 6#6#5"3 1/24!7$<%<#@& B(!A&E( V91rTLgJBK/&H,#C+!B+"B-#>+":&9&8%<(!;' <' ;&9%9%:&:&8$:%8#8#9$;&<( <' :&<' :&8$:&;&:&;&:&8$:%<(!<' ;&<(!<(!:&:%=(!9$=& <$9$8$8$9$9$8%8$8$6#6$6$5#4!4!5"6$ 2!0/-*&%!(*+.L6.\C:]E(='<&>'>(9#>(P;2R<4E.&8"41,+7(!7(#7(#8'":($>+&A,'?)$>)$@+&>)#=(#>(#<'"<'"C.)@+&@+&B-(B-(A,'C.)C.);&!B.'=)"?+$D0)B/'C/(D0)B.'B.'A-&@,%?+$?+$E1*?+$B.'C/(C0)C/)A-&?+$@,%@,%@,%@,&A-&B.'C/(?+$@,%@,&@,%@,%A.'>*#B/(B.(D0)B.'=)";' =*#;' =)"?,%?+$>*#>*#>*#=)"A-'>*#>*#?,%?+$=)">+$>+$=)":&;' =*#?+$?,%<)";(!=)#=*#=)">*#A-&?+$9%;' :'!8% 6$7%8% :(";)#8& 6$6#5"3 13!3 22 3!2 / 1# 4#3 28"@*"dPIiVOO=6;("6#7%6$;%B,$F,$F+#G,$J/'H/&F0&E.%C,%@*$='!;% 8#1:'!:& :' :&:#>&!>&!=% @'"A)$A*$@*$@+$=,":) :)=( >("='"<'!<'"<&"9$5!6"8"8!9 B' U:2]C;P9/8"0/.,.0    1-+/04>'O7-aH>bIBC,%56 8#8$8$8#8#9$<&!>(#?(#?("?' A)"B*#C+$D,%D,%D+$E*#E*#I/(G-&D+$D+$D+#B*"B+"A*"4!8$>( C,$G/'I0(K1)M2*O3,O2)Q3*R5+N2(Q6+I1'A* @) @)">)!=*#<("<)#=*#<*#<*$=+%>+&<*$<)#;)#<)#>+%=+%;)#:'!:'!:(";)#<)#7$<)#>+%<)#:'!:'!:'!=+%=*$>+%<)$:'!;("=+%A/)9' :(!<)"<("<(!;' =*#@-&@,%>*#?+$C0)D0)B.'B.'B.'A-&@,%A.'?+$<(!@,%E1*C/(=)"?+$B.'A-&B/(E1*E1*B.'A.'A-&@,%>*#>*#@,%=)"A-&=)"<(!>*#@,%>*#<(!>*#?+$?+$@,%B.'D1*@,%C/(E1*>*#<(!B.'A-&C/(@,%A-&@,%>*#?+$>*#B.'C/(>*$=(#@+&A,'>)$=(#?*%>)$=(#=(#=*$;("<)#<)":'!9& ;("?,&>+%:' =)">,%=,$:*#8)$8)$2'$0&$.=%cKClULT>5=':#9"8"9#=' ='!;%>("?("?(!@)!B*$C+%E,%G/%H0&G.&G.'I0)J1*L3,H/(L3,L3,L3,J1*F.'E,&D+%C+$B*$B*$B*#@)"?(!;+8(;#;!:!9!6!0!.,,0410/(&,$)-.!0#5#7#8%;'!=(#>)$?*$C,%E.(B+$?("?(!@("?)">*#<(!9%B.'>'!=& @)#C+%B*$?(!>' ?'!>& B*$B+%B*$C+%C,&A*$@)#A*$?(!?'!@("@("?("B*$A*$?'!A*$@)#@("@("?("=&<%=& =& =& ?'!<& ;%=& @("A*#A*#A*"A*"C*#E,$E,#C* L3)jQFqUJQ6+D)D):#2111.03 225"7#6#7$:' ;' <&>'!>'!?'!?("?("@("@(">'!>& @("B+$@)#>'!@)"@(">' A)#D,&B+%C,&B+%A*$B*$?'!>& @)#?'!=& A)#@)"?'!A*$C,&@("?("D-&?'!B+$?'!?(!C+%B*$?'!C+%F/)>'!B*$>'!=& ?'!?'!>& @)"C,&B*$<' ;' ;' <' =(!<(!<' :&:%8%8%6#20.13 9& ='!;$=% @'!@& A%H-$^A9T8/I-$H-$E,#C+#B,$>+";' :' 8%<(!<' <' ;' ;&:&;&;'7#:%9%9%:&;&;' ;' ;&<(!;'9%;' =(!<(!=(!<(!9$9$;' ;' :&;' ;' 9%:&>*#8$<%<$8#7#8$:$;&!8%7$7$7$7%7&6$5"6#5#7$ 3"2!1!/ -)'#'*)) B,%V>6^F>O7.7 8"6"5#5#4#5$7&7$9%>)>( ?(!A)#B*$B+$D,%F.'H0)H0)I1*L3,L4-H0)I0*G.'E,&E,&D,%C,%A,$@*"A*#?)"=' =' =(!<)!9&5#7%5#2 3#4$/ / /..,7(!9*$:+&;*&;)%=+&B-(A,'C.)B-(@+&@+&A,'?*%:% A,'B-(?*%?*%?*%=(#B-(D/*D/*D0*B.'B.'F2+E1*H4-F2+A.'A-&C/(B.'D0)B/(C/(C/)C0)C/(C/(D0)D0)A-&B/(@-&?+$B.'=)"C/(D0)B.'A.'A-&?+$@-&C0)A-&>*#=)#@-&C/(A.'=)">+$:&<(!@,%?+$>*$@-&B.(?+$?,%@,%@,%B.'@-&>+$?+$>+$>+$?,%@-&A-&:&A.'=*#:& ;'!=)":' ;' >*#?+%;(!;' <)"8%9& ;("8%6$7$7$6#7$4"4!4"5"4!2 23 2 -*.5"7%9#<&N92XE>O<5;)"5#7%6#:%@*"E,%G+#F+#I.&J0'I1(G0'D.&@*$>(!<'!;& 39& 9& 8%:' :#=& >'!>&!?'"A)$@*$?)#A+%?*"<( <'<&>& ?%!>$ =$ <% 7$4#5$6&5#6!5@) I2)E.$9"/./,-0   -+,//3<'N7-X@8O718#.6"7"7#8$9$:%;& ='">)#?*$@)#@("A)#B*$C+$D+$E,%F-&F,%F,%G.'D*#C*#D*#B*"A*"B*"@)!5!:&A*#E-%G/'I0(K1)N2+P4,Q4+Q4*Q4*P5*M3)G0&G0&C-%A+#@+$>*#<(">,%=+$9' :'!;)#<*$?,&>,&;)#;(";)#;)#;)#;)#9&!6#8%:'!:'!<*$=*$;("<*$<*$<)#?,&A/)<*$=*$<)#:'":(";("9& =*#=*#;' ;' >*$>+$@-&A.'@,%B.(E1*C/(A-&C/(F2+F2+B.'?+$@,%>+$?+$D0)D0)A.'A-&C/(>*#C0)E1*D0)C/(B.'@,%D0)?+$:&9&;' <)"B.'?+$@,%B.'@-&=)">*#@,%@,%A-&A-&?+$>*#?+$C/(;' :&>*#?+$?+$>*#?+$>*#?+$?+$<(!@,%?+$;'!=(#?*%?*%>)$?*%C.)@+%=(#<'";(";("?,&<)#<(">+%>+%>+%@-&;(!=*#=+$=,$:*$8)$7)$1&$/%#0D,$gOGjTKK5,;$8!7 5 8#;%<& <&!>("?)#@*"A+#C+%D+%D,#E-#G/%F-&G.'H/(I0*K2+I0)O6/K2+J2+I0*F.'D,%B*#C+$B*$@(!>' ?'!>( :*9(<$;":!8!5!/!-.-/21/,'%)'+- /"0"4!5"7$9& :% :% <&!@("A)#9"A*$F/)?("7!9%B/(@,%<(!;$<%@("B*$A*#@)"A)#@)#<%A)#D-'C,&A*$A*$B+%?("<%=%=%>'!?'!@("B+$A)#>'!B+$@("@)"A)#@("=& <%=& =& =& ?(">'!>' >'!@)"A*$A*#B*$B+#C+#C*#D*#E*"M2*cI?fKBP5+G,#F+!;$312 1-/24!3 5!8%8%:&=*"=(!>'!@(">& =& ?("A)#A*$A*$@(">'!?'!C+%A*$?'!@)#A)#=& @("B+$B+%D-'C,&B+%B+%?(">'!A*$?("=& @)#A*$@("?("@)#>'!>& B*$@)#A*$@)"@)#A*$?'!;$>'!C+%A*$B+%@("@("B*$B+%@(">'!?("?'!<' ;' ;' =)"?+$?+$?+$=)";&8%9%6#21//2:'!;& ;%=&!?'"@'"A&!=#I-%B'D*!H.&G.&C,$B,$?+$<(!<)"9&<(!<(!<(!<(!<' ;' <(!;' 8$:&:&9%9%:&<' <(!;&=(!=)"<' =(!>)"<(!=)"=)"9%9%:&;' ;' ;' <(!:%:%<(!9%;%<%;%9%8%:% ;&!8%7#7#7$7%8&8' 8&"7$ 6$ 5#3!3"3#1!. , *%!%'&+:&Q:2^G>T>59#534 3 2 3"5$4$6$9'<' >' @("B+$B+$E-'I2+H0)F.'I1*J2+K2+G/'G/(F.&E-%D,$C+#C+#B+&@)$A)$?(#<& ;& =("<)#9& 7$8&8& 5#1 0!0 4$/20+;-&=.(=.)>/*>,(>,(B.)B-(C.)B-(?*%A,'B-(B-(@+&B-(B-(@+&@+&@+&@+&?*%@+&A,'C/)E1*A-&F2+D0)C/(B/(B.'B.'E1*B.'C/(C/(D0)E1*E1*E1*C/(C/(C/(C/(E1*E1*@-&@,%?,%B.'B/(?+$>*#E1*A-&A-&B/(E1*B.(>*#@-&@,%@-&<)";'!:' ;' A.'@,%>*$C/(D0)@,%=*#?+$?+$?,%?+$>*$?+%?+%<("9&:&@,%@-&=*#;(!<(!=)"?,%;' :&<)"?+%>+$<(!>*#;(";(#:'!9& 8& 6$3!7$6$5#6$7%7%4"4"3 2 4!4#0"+9'!5#7#8!7":' :' 6$5#7%7%9%?)!E/'I.&I.&I.&J/'J1(H2(F/&A+$>(!<& ;& 7"5!9& 7$8%:%<%='!>'!?("A*$?)#?("@*$@*#>' =%>%<% >$ ># <#:#8$7%6$8&4"1/.16 7 10/-+,  ++.//17!B+"D-'8$114!5!7"9$:& ;& :% ;% <'!>(#B+$@("?' ?' @'!A)"C+$F-&H/(F-&C*#B)"C*#D+$B+#B+#C+#A*"6"<'B+#E-%G/'I1(M2+P4-Q5-P3*P3)N2'N3(I0&H0'I2)C-%A+#@,%=*#=*#?,&=*#5#<)#<*$;)#<)$>+%:(";(":(";)#<*$;)#8%8%;(":(";("<)$=*$;("<)#>,&>,&=+%=*$=+%?,&<*$?-'A.(?,&<)">,%=)">*$>*#>+$?+%>*#?,%@,%D1*F2+C0)A-&D0)@-&C/(A-&A-&B.'C/(D0)D1*D0)B/(@,&>+$?,%F3,E1+C0)C/(B.'A.'E2+C/(>+$=)"<)"=)">*#>*#A-&@,%A-&@,%>+$@,%A-&B.'D0)A-&=)"=)"?+$<(!A-&B.'A-&?+$=)"@,%?+$?+$?+$<(!:&<(!@+&?*%@+&@+&@+&A,'B-(>)$>)$=)#?,&@-'=*$;("A.(B/)>+%=*$>+%=*#>+$<+$=,$9*$9*%8*'3)',0D,#ZB:^H??) :#9"7!7!9#:$;% ='"?)#@*$A+#B,$D+&C*$B*"B+!D,#G.'G/(F.'I0)J1+I0)J1*F-'G/(G/(F.'D,%B*#A)"@("?' ?' >'!=( :)9( =$ ;"9 62/ / ./021.*'%+)-/"0#1#9& ;("=)#=*$=)#='">(#A)#A*$;$>'!C+%A*$='!<(!>+#;( :&A*$>' =& @("A*$@)#?("?'!>'!>& B+%A)#>& @)"D-'A)#;$A*$=& >'!?("A)#B*$@(">'!B+%?'!A*$B+%A)#>& <%=& =&<%>'!@)"@)"?("@("A*#B*$B+%B*$A*#A*"B*"@( @( G/'I1(@( B*"B+#:$3112.224!3 5"8%8%8%:' ;' =& ?'!=%<%>'!@)#A*$A*$@)#@("?'!A)#@)#@("B*$A*$@)#B+%E.(C,&C,&A*$A*$B*$@)"@("B+$?("=& >& A*$A)#?'!@)#>'!>'!>'!?("@("@)#A*$B*$?("=& >& @("B+%D-'B+%A*$B*$A*$?(!=& >'!?("@+$>*"<(!=)"?+$A-&>*#=)!9$8$:'!8$4 3 /.09& 5"5"8$:% ='"E.'?(!D+$C+"C*#G-'G.'D-&C-'@,%=)"=*#:'!<("=)!<(!<(!=(!<' =)!=(!:&<' <' :&:&;' <(!;&:&<(!<(!;';' <( :%;&<' :&<(!<' <' <' :&<(!;' :&:&:&;%<%=' <( :&:$;% 9%7$7$8%8%7&9(!:($8%!8%!7$ 5$6%7& 2#. ,!+ (%&&&+5!F0*U?6P:17"201 0 /!/"1%0#2#5%9'='?( A*!C-$F0&G0&F/&I2)J3)E.$J3*J3)I1(E.$C,"C,"B+"B+"A)#@("?'!>'!<&:&;'!;(!9' 8& 7&7%6#27"5 5 2/.+*@1*@1,@1,A/+@.*B.*C.)C.)B-(@+&B-(A,'?*%@+&D/*F1,A,'>)$B-(D/*>)$;&!@+&F2,D0)D0)D1*D0)D1*D0)B/(B.'E1*D0)C0)D0)D0)C/(E1*C/(C/(A-&A.'C0)D1*D0)C0)=)"?,%A.'B.'E1*C/(K71I5/F3,E1*E1*E2+B.(A-&>*#@,&@-&>+$?+%=)"D1*C0)C/(B/(A-&?+%>*$>+$>*$<(!;(!<(!=*#A-&<)":& >*$@,%>*#;(!<)">+$>+$>*$>*#=)"=)"?+%?+$>*#<(!:'!:(";(#:(":("8% 7%9&!7%6$9& 6$9& 6$6$5#4"5#5#7(%0"8(#9'!5!8!8"4 7$6#5#8% 9'!7%>)!E.'I0(K0(J0'J/'J1(H2(F0'B,%?)"<& :%8#29& 8%8%:&=& =& <& >("@)$?)#>'!>("A*$>'>%>%>$ >$ >$ ># ;#8#4#3"3#2"0!/.* .1320 .+*.  .!++.0-/121/4"3!3 4 7#9%;& :%8#8#9$='!@("<$<$?' A(!@(!A(!D+%I0*D+$B*#D+$F-&E-%B+#B+#C+#4!8%?)!C,$F.%G/'J1)N3,Q5.Q4+P3)N1'J.$V;0P8.J3)E/&B,$A+#?,%?+%:'!;)"<*#;(">+&A/)=+%=*$<*$<)$?,&>+%<*$>+%<)$:(";)#<)#9& ;)#=+%>+%<*$:'"8& =+%;)#:("<*$>,&<)#?,&@.(?-&?,%>+$;' A.'=*#>+$>*#=*#>*#>*#E2+D1*D1*F2,E1+?,%D0)G3,E2+C/)C/(D0)C/(A-&C0)@-&@,&A-&B/(F2+D0)A.'A-&B.(D0)D0)?,%:& >+$@,%?+$?,%B.'>+$D0)B.'@,&A.'B.(D1*C/(?+$@,&A-&>*#<(!>+$B.'D0*B.'@,%B.'@,%>*#A.'>*#>*#A,&@+&A,'C.)A,'@+&A-(B-(@+&A,'B/)B/)=*$;("A.(B/):'!;("=*$=*$?,%@.'>-&=,$:+%=.)=0-;0.(-:!D,$B-$16 8 8"9$9$:$;%='"@*$A+$B,$C-%D,'C*#A) A) C+"F.'H0)K2+I0)H/(I0)J1*I0)F.'F-&E-&D,%B*$@)"@(!@("@)"?(!=) :* :( =# :"8 62. .,,.11-*$$,*.!1$2%3$6"8$9& ;'!=(#>(#?)#@)#B*$C+%;$?(!D-'C.'>*#9&8%@+$F/)?("=& ?("A)#?("=& >'!A)#?'!B+%?("=%@("D-'B*$=& B+%>'!?'!@("A*$A*$>'!>& D,&?("A*$C+%A*$?'!=%=%<%;$=& A)#@)#?("?("A)#B+%B+%B+%A*$A)#C,%B+$?(!@)"@)#?(!A*#>'!6!421104 3 6#6#6#7$8$8%9%;&=& <%=& ?'!?'!?'!?(!?'!?("A)#@("?(">'!?("@("=& >& @)#C,%@("A*$B*$B+%B+%A*$B*$C,&B+%B*$=& ?("@)#>' ?'!?(";$<%A*$=& =& @("A)#A*$A*$@)#?'!A*$E-'C,&B*$A*$@)#?(!?("@)#A*$?*#=)"<(!=)">*#?*#;&9$:&9&;(!9%4!4!0.06#7$9& ;("<(#;& C-'@)#C*#D+%D+%F-(G.)D-'E.(B.'>*#?+%<)#=)#=)"<(!<(!=)"=(!<' >*#<(!=(!<(!9%8$:&<(!;&;' <' ;&:&<(!>*#<(!<(!<( :%<(!<(!<(!=)"9%;' <(!;' :&;' ;&;$<&;' 9&:% =(#<(#:' 8%8%9& 7&:(!8&"8% 8&!9'"8&!7&8'!3$1".#."-"*(''*-5 A,$?+#2100 0!/!/"1$0"1"4#8%<&=(@*"B,$E0(H2*H2*J4,F0(D.&K4-J4,G1)E/'D.&D-&B,$B+$@)"?' >' ='<'<';( :(!9' 8&6%7% 8%!2356!400-,?0)<-(?0,B1-B0,D1,F1,E0+C.)C.)B-(B-(@+&?*%B-(C.);'"<'"@+&B.)>)$9$?*%E0+E1+D1*B.'B.'D0)A-'C/(F2+C0)E1*F3,F2+H4-F2+E2+B/(B.'E1+G4-F2,E1+D1*F2+B/(C/(F3,C0)D1*F3,J6/J60H5.E2+C/(C/(C/(B.'@-&B.(D1*?+$@,%?+%C/(A.'?,%@,%<)"?+$@,%>+$>*#<)";'!<(!:' B.';'!9&<("?+$@,%;'!?,%B/(@-&<(!;(!>+$=)";(!<)"=*#=)";(!9'!;("<)#;)#:("8& 6$5"8% 7$4"6#6$6$7$4"7%5"7'#5'$4%!8% 5#='7!6"7$6#5#7%:("8% <' C-%H0(J/'I/&K0(J0(H0'E/&C-%A*$>(":%7#27$8%7$9&<& =& =& ='!?)#@)#>'!<& @)#?' ?%?$?$ >$ ?$ ?%!>$!;$ 7$4#3"1!2#0!0!11135 0.-+- - - -   ,)*-,*/1,.1#/05"6"7#7#8#9$9$:%<& =' =' =&?'!B*#C+$B)"A)"C*%E,&D+$F-&G.'H/(D,%B*"A)!?( 7#<( B+#D,$E-%G.&J1)N3+O4,R6,Q4+K/$S8-dJ@^G>K4*F0'C-%@,$?+%?,%<)"9& :'!>+%?-'>+%>,&<*$;(#=*%?-'?,&<*$?,';)#:(":(":("<)$?,&>+&>,&=+%<)#:'"5#=+%<)$=*$<)$:'"<*$?,&@-&>,%<)"<)"?+%?+$>+$=)#B.(D1*B/(C0)D0)F3,D1*B.'B/(E1*C/)A-&@,%A.'A.'@-&@,&>+$=*#F2+D1*C/(D0)C/(@,%B.'@-&B.'C0)B/(C/(@,%A-&?+$?,%B.(B/(E1*C/(@-&@,%@,&A-&@,%C/(A-&>*#?,%?+$;' B.'E1+A.'A-&@-&>*#@,%@,%A-&A-&B.(A,'@+&C/*A,'@+&C.)E0+B-(?*%B0*=*$A/)C0*A.(>+%;(";("=*$=*#@-&A/(?.'=,%>/*A2-?30<20&-1431669#:$:%;% ;% >("@*$A+$C,%D-&E-'D+$C+"C+!D,#F-'H/(J1*H/(I0)H/(H/(I0)H/(F.'E-&E-&C+$A*#B*#C+%B+$@)"=* :* :' =# :!8 51 . -,*5<#9!1*#!+- 1#3&3& 5& ;(";(";'!;("@+&@+&?)$?'!?(!@)"A*$D-'?("<& =)"?+$?+$A,%C,&A*$A)#@)#@("?("?("?("?'!@)#B+%@(">& @("B*$@)"<%=& >' ?("A)#B+%A)#>& >'!C,&>'!@)#A*$A)#?'!>'!>'!<%;$=& @)#@)#@)"@)"A)#B*$B+%C+%B*$?)#B,&B-&@+$@*$?*#>)">)":%4 44 2025"4!7#8%7$6#6#9%:' <(!=' ;$?'!@)#?'!?'!@("?(!@)#B+$A*$@)#@)"?("?("@("?'!A)#A*$@("A)#A)#A*$B+%A*$A*$A*$>'!?'!=%@("?("<%A*#D-'B+%@)"D-'@("?'!?(">'!@)#B+%@)#>'!A)#B+%B+%B+%C+%B+%@("@("A*$@)#@+$>*#=)"=)"<(!<(!;&9%=)!<(";(!9& 6#4 0.13 4#6%7%<)#9&>*#>*#D,&E,'C*%D+&E-'D-'G0*D0)?*%?+%=*$>*#>)";' <(!>)"<(!<( <(!<(!=(!=)"<' 9%:&;' ;' =(!=)!<(!<(!<(!?+#=)"?+$?+#<(!<(!<' <' >*#:&<' =)"<(!;' <' <'!;&;&:&;' <(!;(!8%7$:' ;("<)#=*$=*$;(":'!:(!9( 8&7&5$4% 6'"3&"0%!0&".#!((*+,21-110 0 0!1"3"5"9";";#:%<' ?)"A+$C-&F0)G1)L6.K5-L6.P92O91L5-I3+E/'C-%B+#A+#A*#@("?(!>( =' >( <( ;( :' 9' 9' 8%9$9$7!5443.-,A2,@1,A2-D3/F40F3/G2-G2-E0+C.)A,'B-(B-(?*%B-(A-(A,'?*%B.)D/*<'":&!A,'@+&F1+E2+@,&?+$?+$<(!F2+J6/F2+E1*I5.E1*D0*D1*D0)B.(D0)H4->*#@-&C/(H5.K70H4-C0)B/(?+$D0)D0*A.'@-&C0)C/(B/(A.'A.'B/(C/(A-'F2,@,&@-&@,%@,%?,%=*#F2+C/(:' ;'!>+$?+%=)"=)#>+$;(!>*#=)#<)"?+$:&>*#?,%>+$=*#<(!:&:' <(!=*#;(!<)">*$=*#>+$:(";("<)$;)#9'!7%5#3 6$8& 6$5#7%9'!9& 5"6$6$6% 4%"4"6$;&9#6!:' 6#8%7%:'"8& 7$=( D/'H.%H.%J/'I/'G.%D.%C-$A+$>(";& 9$4 27$6#7$:&=& >'!=& >'!?(#>'"=& ='!>'!?%?% ?%!># ># ?$!>%!<% 9$6% 6% 1!3#0 ,-/+.2.)*,+. - - -  .!)'****++(-*,1 5"7"7#7#8$9$:% ;& <& =' >( @)"B*#C+$D,%D,%C+$B)"B*#E,%G/(G/(G/'B*"C,$@)!9&:&?*"C+$C,$D,$G.&J0(L1)O3+U8.P3*J.$eJ@mUJ_H>I2)C-&D.&A-&>+$>+$?-&@.'?,&=*%;)#;)#<*$<)$;)#=+%?-'=+%<)#=*%9'!;(">,&=*$=+%@-(>,&?-'<*$:("9&!9& ;(#<*$=*$:'!;("=*$=*$>+$>,%?,%?,%?,%?,%@,%@,%?,%C0)E2+F2,F2+>+$C/(C0)A.'B/(C0)A.'A-'B/(A-'A-&?,%>*#B/(J70F3,D1*B.'B/(E2+B/(>+$A-'C/(C/(C0)C0)B.'?,%A-&B/(C/(C0)G3,C0)?,%@-&?+%=)"@,&;(!;(!@,%>*#<)"C/(B.'<)"?+$A-&=)":&B.'F2+B.'A,&?*%>)$A,'B-(A,'C/*E0+B-(?*%?,&A.(@-'@-'?,&>,&?,&?,&>+%@-&?,%A0)C2*A0)@1,A2-?31=20)1236 9#9"6:$9#:$<&!<& ='!>("@*#B,$D-&E,'E,%E-$E.$G.&I0)K2+K2+H/(I0*K2,J1*H0)I0)H0)F-'E-'D,%C+%C,%D-'C,%?("<* 9):& <#9!8 50 .,,1L2-V<6K3.:$-'&, 0#4& 5' 6'8(!:)!9( ?+$=*#?+$?+$A,%B+%A)#A)#?("A*$@)!?)!@*#B,$B,%B+$A*#B+$B+%A*$@)#@)#A)#@("=& >'!@)#@("?("@)#A*$A*$?("=& >'!?("A*#C,&A*$>'!@("D,&>& ?'!@("?("?(!?'!>'!=& <%>'!?'!?("@("@)#@)#A*$A*$B+%B+%@+$@,%@,%?+$?+$=)";' ;' ;' 6"5 4!3 103 5"8%:' 8%5"5"8%<)!?*#>'!=& @)#@)#?'!@)"B+%A*#?("@)#>'!@)#B*$A)#@)#A*$@)"@)#@)#>'!@)#@)#@)#B+%C+%B*$A*$>& =& ?'!@)#?("<%?'!D-'?("@)#A*$A*$A*$A)#?("?("@)#>'!>& ?("@)#A*$B+%C,&B+%?("?("@("@)#A,%@+$@,%A-&<' ;' ;' <' ;' ;(!<)#;("8%8$003 13"6&6$@-'?,%>("?("D,'B)%A($D+&E,'C,&H1+F1+?)$>*$=*$>*$=)";' =)"=)"<' <(!<' <(!<(!<(!=)":&:&<(!;' <(!=)!=)"=)"?+$>*#>*#>)"@,%@+$<(!;' =)!<(!:&;&<( <(!<(!=)!=)"<(!=)";' ;' <(!<)";(!;(!<)":& :'!<)#<)#<)"<)#<*#;*#:)":)"8' 6'"7(#4'#1&"1'#0&$+" ''(*+,+./--/0 2!3"6#9";#;#;&<' >)!?*#B,%E0(E/'G2*G1)G1)J3,J4,G1*I2+F0(D.&B,$B+$A*$A)$@(">( >( =( <( ;':&9&;)"7%5 6"6"57!40/,*E70F71D50C3/F40H62I50F1,G2-D/*B-(E0+B-(B-(D/*B-(@+&?+&A-(C.):&!?*%B-(B-(D0*E2+A-'A-&<)"@,%E1*F2+C0)C/(G4-F3,B.'@,%A-'E1*E1*C/(B.'F3,H5.H4-G3,F2,A-&@,%?,%@-&A.'B/(>+$C0)C/(C0)C0)B/(B.(E1+A.'D1*A.'@,%A.'A-&A.'<)"C0)B.(>+$=)">*#>+$=)#?,%?+$<)"<(!<)"=*#>+$=*#<)"<(!=*#>+$:' <(!>+$?,%A-&A-'@-&A-&<)"<(!:'!9'!9'!:'!9&!6$4"5#7%8& 8& 9&!6#7%6#4"5#7%7% 2$!2$!2!4#7%6"3 4#5#5$5$5$5$8(!7&@/&E1%J3'J2(G+$E+#C-#C-#A+#>(!;%9$8#26#6#6#9%;%>(">'!<& <& ='!<& ;%<& >& ?'">&!=$ ="="=$ :%8#4"3#1!1"6'.0 9%7!57 5!,+0!. .  -!+*,*-*+-/. $+0 3!5"6#7$9$:% ;& ;& <& =( ?)!B*#C+$C+$C+$C+$D+$C+$D+$D,%H/(F-&E-%E/'B+#D-%8$<( @*"B+#C+#E-$H/'L1)L1)O3*P3*N1'R7,qVLkSIQ:0B+#B,$D.&@-&9&>+$>+%:("8& 9'!:(";("<)#<*$;)#:'">+&:("<)#=+%;)#9'!A/);)#B0*D1,A.)@.(?,'8%7%9& :'!:'":(":("?,&>,&=+$>,%A/(B.(@,%@-&@-&A-&B/(A-'A-&C0)F3,H5.F2+?,%@-&@,&A.'C/(B/(@-&@,&C/(>*#=)#A.'F2+F2+@-&H4-H4.F3,C/(?+%@,%>*$C0)D1*D0)D0)C0)A-&E1*C/(B.'?,%=)"A-&:&B.'>*#:& :' 9%>+$>+$;'!=)"@-&@,%?+$@-&=*#<(!@,%F3,F2+A.'A,'@+&?+&@,'B-(B.)>*%A,'?*%A-'A/)>+%>,&>+%?,&A.(A.(?-'?,&D1*<)"C2+E4-D4-C4/A3.?42=31*.302 5"5"7"9$7"9$;& ;% <&!='"?)!A*#B+%C+&D,$E-$F/%H0(J1*K2+J2+M4-M5.O6/K3,H0)H0)G/(E-&D,%D,&D,%D-&D,&A*#>'!;) 9):%:"7!750 .-.8$[@;dKEQ949#*%'.#2%6)#8)"8)"<,%=,$;)!<)":' ?+$?,%@*$@)#@)#@)#?'!@)#B+#B+#B+#B+#B+#A*#?("@)#A*#@)#@)#A*$A*$@)#@("?("@)#A*$A*$B*$B+%B+%@)#=& >& :#>'!A*$@)#?("@)#A*$>& >'!A*$@(">& =& >'!>' =%?'!>' >' >(!?)"@*#A+#A+#B+#B+#C,$A)"C*"D*#D*#C*#=%>'>& 6!5 3 20/3 7$<)#:' 7$6#7#8%=)"?+$>'!>'!A*$?("=& >'!@)#?(">'!@(">'!>'!?("?(">'!=& >'!>& @)#>'!C,&C,%A)#B+%A*$A*#A*$@)#A*$@)#?("?'!>' ?("C,&@)#A*$@)#@)#?("?'!?'!?(">'!=%>'!?("A*$B+%A*$@)#>'!<%>'!A*$C,&D.(A-&?+$?+$>*#=)!D0)A-&>*#=*#=*$;("9%;("214!14!6 9">&@(!C)!>#N3)[@5W;0J.#C'E*!H-$F-&D+$@("@("?)#=)">*#?+$<(!<(!;' <' =)"=)";' >*#;&;' <(!<(!=)">*#=)";' ;' >*#=)"=)"<(!=)"=)";' =)"=)";' ;&;' <(!<(!=(!=)"=)">*#=)";' <(!=)"<)"<)"?,%<)#<)#>+%?,&>+%=*$<)#;*#9(!>-&<+$:+%9*%6)$3($4)%3)'0&$(%&),,,//-..01!3"6#9";#9";&=( =(!?)"A,$E/'D/'F0)G1)F0)F0(F0(B,$E/'E.'C-%B+$B+$A+#A)%@(#?(!>( >( =' <&;%8%:&;' :%8"8">& R;4N60<$3.*+I:4H:5G83J84G62G3/F1-I4/H4/D0+K61@,'C.)B-(@,'@+&A-(C/*F1-H3.G2-C.)B-(E0+F2+B.'D0)A-&D0)I5.I5.E2+H5.D0)E1*D1*C/(B.'G3,F3,C/(F2+I5.I6/I5.A.'I6/D0)C0)C0)B/(B.'C/(A-&D0)D0*D0*E2+G4-D1*E2+C/(C/)B.(>+$A.'?,%@-&>+$B/(D1*@,&=)"?,%D0)?,%?+$?,%=)#<)"<)"<)":' =)#?+%>+$=*#C/);(!@-&?,%>*$A-'@-&>+$=*#?,%:' 7$7$7$7$:'!7$5#6$7$9&!7%9'!6$4!3!4"9& 7%6$5&"3"2!6& 1 3":)A0'B1(8( 5$5' 5& 8( >-$B0&F1#G2&F+#D*"C+"B,#A+#?(";&:$8$4 9% 7$6#9&:%>'!?)#='!;$<& =&!;%:$>& @'!>&"=% <";!:"8#6#3!01 -3#2 249"D,$;%, *+*(*/  +(*,,,(,.0!,(- 02 3!5#6$9%;& ;&!<'!<&=' @)"B+$D+%C+$B*#C+$E,%F-&F-&F-&I0)C+$E.&C,$A*"@)!9$=( A*#B+#D,$G.&J0(L1*L1)P3*P4*S7-_D9jPE^G=H1'D.&D.'C.'?,%>+$@.';(":(":(":'";)#9& 9'!<*$:'!7%<)$<)$>,&=+%=*%<*$:("9'!@-'@-(A/)A/)@.(?-':(">,&<*$;)#=*$?,&B/)?,'?-&@.'@.'@,%;(!?,%@-&>*#C0)G3-?,%B/(D0)C/)A.'?,%?,%B.'B.(A.'@-&>*$>+$A-&;' ?+%?,%B/(D0*B/(F2+K70G3,C/)@-&@-&B.(D1*G4-E1+B.'A.'C/(I5.D0*F2+B.'<(!;' ?+$C/(?,%>+$<)";(!?+%=)#;'!9%=*#?+$=)"C0)E1*=*#A-'D1*C/(A-'E0+C/*C.)C.)D/*C.)?*%@+&@+&=*$?,&A.(A/)@-'A/)>,&A.(B/)B/)C0);(!E4-C2+@1*D50F84?53,,.201 3"6$9&9$8#9$<&=' =' =' >(!@*"B*$B*$C+#D,"D-#F.&H0)J1+J2+L4-P70M4.G/(H0)I1*G/(D,%D,%E.'E-'C,&B*$?("=' :) 8(9#9!7!7 5 0 //1A+"^C.'=,$=+#>+$:' ;' =*#B,&B+%A*$@)#?("A*#B+#C,$C,#A*"A*"@)"?("?("@("?("@)#B+%B+%A*$?("=& ?(!@)#A*$B+%B+%@)#=& <%A*$B+%>'!=& @)#A*$?(">'!@)#>'!A*$@)#=& =& >'!>'!=& >'!>'=&=(>) ?+"A-#A-#B+!@)G+"E( I*"R1*Y:2U7/C&E)!A$6 43 0.04!9& <)#:& 8%9&9&8%:' >*#?("@)#A*$?("<%<%>'!=& >'!A)#?("@)#A*$A*$@)#@)#@)#?("A*$A*$C,&B+%@)#B+%B+%@)#A*$B+%B+%A*$A*$C,&C,&A*$B+%>'!C,&C,%A*$?(">'!@("A*$>'!<%?("?(">'!?("B*$B+%A*$B+%D-'C,&A*$@+$@,%?+$?+$?+$?+$@,%>*#>*#A.'@-'<)#<)#:'!12 3"4#3 57 7;"B(B(Z?5pTIhLAO3(F* H-$H-$F,%D+$B*$B+%B,%<(!=)">*#<(!;' :&;' >*#>*#<(!?+#;' ;' =)!<(!<(!<(!;' <( <(!?+$=)"=)"=)"<(!<(!;' ;' <(!<(!<(!=)"=)"=)"=)">*#=)">*#?+$=)"=)"?+$=*#=)">+$>*$=*$>+%?,&?,&>+%=+$=,%<+$>-&<+$;+%;,'9+&6+'7,(6+)4*()&&(,--..-./01!3"5"8"9"9":%<'<' =(!@+#C.&E/(F1)G2*G1)F0)F0(B,%C-&C-&C-%B,$B,$B,$A*$@)"?)!?)!>)!>(!=( <&:%9$<' >)";$7!B)!_G?aHAJ1+5.*(J;4G83F72H72F40H51J50I4/H4/E0+K61C/*B.)B-(B.)H4/E0+G2.J50G3.D0+C/*C.)B-(I5.A.'B.'E1*F2+G4-J70I5.H5.H4-D0*B.'F2,F2+I5.I6/G4-G3,H5.K81P<6E2+J6/J70F2,B/(D1*E2+C0)D1*D1*D1*G3-D0*F2+E2+C0)@,%?+%B/(>+$@-&?,%@,&@,&@-&E1+A.'@-&>+$?,%>+$>+$B/(<("=*#=)#=*#<)"<)">+$A.'?+%C0)?,%?+%A.'?+%A-'<)"8%9&:' :' ;(";)#9'!9'!;("8& 4"6$6$7$6$7% 7$4"4"6#7%9&!7%5% 4($1&"4#5%2"5#B0'XF=\JAB0)7%4$5&8( >,#C2(E/#E."D+"D)!B*!A+"A+"?)"<& ;%9$5!35"7#9&:&<$>(":&<& :$8"9$;'!7%7$7'9' ;& :% 8$5#4"4#3#1!//247 B)"U=6T=4A*!0**)+.  ,)'*,-,-/+-,-/01 2 4"5#8%:& <'!='!:%=' @*#C,%D,%C+$B*#D,%G.(E,%F-'F-'E,%E,%@*"B+#>':%;%@*"D-%E.&G/'I0(J1(K1)M3*P5+L2(V>3cLA`J@Q;3B,%B.(>+$?-&?,&=*$;)#9' <)$;)#;)#:("7%6$=*%<)$=*%>+&=+%=+%9'!:("?,'>,&<*$A/)@.(A/)@.(B/)B/*>,&B0*?-'?,&?-'@.(A.(>+%@.'@-&>+$<)";(!=*#I5.@-&A.'B/(B.'B/(A.'C0)A.'@-&D0)F2+A-&>+$=*#>+$@,%A-'C/)F3,B/(D1*G4-H5.G4-I6/I6/C0)B.(C0)C/(@-&D0*C0)@,%@,%C0)F3,K70I5.D1*C0)E2+F2+B.'D0)D1*B/(?,%=)";(!<(!;' ;(!:' =)"A.'C/(@-&E1+C/(B.'C/)E0+D/*E0+H3/K61F2-?*%@+&F1,B/)@.(C0*D1+A.(@-'9'!D1+E2,E2,E2,D1+G6/E4,D5/I;6I<8C97,.26 5#02!6$9%:$:%=' <&;%<&='>( @)"A)"B*#B*"B+!C+"D,%I0)K2+L3,L3-L4-N5.F.'H0)I1*G/(D,%D-&G/(F.(C,%@)#>(!=(!9) 6'9#8!7!6 4 0 ..5"K4-cHB`E>D*#1)(+5)$8+#;-';,%<-&?.'<+#;)!;(!<(!=)"=*#C,&B+%A*$@)#@)#A*$B+#C,$B+#A*"?( @(!@)#@)#@)#?("@)#C,&C,&A*$@)#?("@)"@)#@)#A*$A*$@)#=& <%@)#B+%>'!=%>'!>'!;$<%@)#?("A*$@(">'!>'!>'!>'!=& >'!=&>&=(=* ?,"@-$A-#A*!@) E)!G+#H)#_?8rTLfIAG*"H,$A%7"5 4 2 /27$:'!:'!:' 9&:' :' 8%8%=(!>'!A*$D-'@)#=& =& =& =& >'!B+%?("@)#A*$@)#@)#B+%A*$@)#A*$C,&B+%>'!>'!B+%A*$=& @)#C,&C,&B+%C,&E.(E.(@)#>'!=& B+%A*$?("?("?(">'!?("?("<%;$<%>'!>'!>'!=& A*$C,&D-'D-'@)#>'!?)"A+$A+%A+%?+$?,%A-&A-&@-&?,&=*#<)#<*$2 02!1!2 9$<'":#=& D*"D+"\B8uZOoSIT9.H-"G.$H-$E-&C,%@*#>)$?*$?+$>*#A-&<(!:&;' =)"?+$<(!;' >*#;' ;' =)"=)"=)"=)"<(!?+$9%;& @,%@,%=)">*#?+$@,%:&<(!=)"=)"=)"=)">*#?+$A-&>*#?+$@,%>*#>*#A-&?,%>+$>+$>+%?,&@-'B/)A.(A.(>+%=,%=,%@/(?.'=-'>/*=/*:/+:/+7-*7-+*(&(+,--+/./0 1!2"3!5 7!8":$;&<&<' ?*"C-&E0(G1)F0)D.&E/'G1)D.'E/'E/'D.&C-&C-%C-%A+$@*#@*"?*"?)"?)"?)"=( <&:%:$:%:"7 E,$^E=gNEU;48,))M>8I;6G83F61K96O<8L72H3/G2-G2-G3.E0+C/*D0+C.)F1,D0+E1,E0+C.)B-)E1,I50C.)I5/D1*B.'H4-I6/E1+H5.I6/J6/K70J60B.'D0)E1+H5.K81L81H5.F2,K70M:3J6/G3,E1+B.(A-&E2+F2+D1*E2+E2+@-&L92G3-D1*F3,F3,A.'=*#B/(@-&@-&?,%@,&B/(?,%C0)@-&>+$>+$@-&B.(=*#?,%@,&C/)B.(>+$=*#<)"?,%?+%?+%@-&?,%>*$@-&<)"9& ;(!;'!:' >+$5":' ;("8& :'"<*$9'!5#4"7%6#4"4"3!4"4"6$5#3!2 00".!3"4#3!6!>*"fQJkVOS?8=)"5"7$8% ?)"C.'G/'G-#D+!D)!C)!A+!A+"@*">("<& :%8#05 5!:&9&:#<& ;% ;& <& 8#5":' 6$5$4%5&7&8$7"5323!3!0/236H.)[@;aG@U>59$,+))+  ,))+.6#<'?) 4++/0 1 1!1 1 3!4"6$:% <'!<& ;&>)!B,$D.&C-&B+$B+#D,%E,&@' D,%C+$E,%B*#?( A*"=&8#>( C,%E.&G/'H0(I1(J0(J1(L2(L2'M4)U>3_H=U?6G1)@+$@-&@.(@.(=+%<*$9'!8& :'"<*$:("9&!8& 9&!9'!=+%:(":'!;(#<*$=+%?-'<*$?,'@.(?-'=+%=+%?,'B0*A.)@-'@.(@.'=+%=*$A/)B/*@-'@-'@.'=)#>*$>*$=)#>*#@-&C/)D0*E2+C0)B.(E1+C0)A-&F3,E1+A-&?,%:' A.'D1*C/)@,%A.'I5.F2,C/)G4-I5/G3-C0)@-&I6/H5.E1+B/(A.'A.'I5.C/)E1*F2+D1*E2+G3-C0)B.'C0)E1+F2+D1*G3,B.'>+$<(":' ;(!C0)<)";' >*$B.(E1*H4-@-&E1*D0*B-(E0+H3.E0+F1,H3.J50I40E1,E2,A.(B/)A.(@.(?-'<)#A.(A.(A/(E2+E3,C2+I81@1,I:5H;8F;9.7"C,&I4.C1+1 2!5#7#7":$<'7"9#;%=' >( >( @(!B*#B+"C+!D-$F.'J2+J1*K3,K3,K2,N6/G.(G/(F.'E-'E-&E.'F.(E.'C+%@)"?(!=(!9) 6'9"7"6!5 3 / --7#P7/`D0*?0)?0)@0)>-%?,%@-&>+$;' <)"H1+B+%B+%A*$@)#@)#A*"A*"A*"@)!?( @)"A*$B+%B+%@)#A*$B+%A*$@)#@)#B+%A*$A*$>'!?("?("@)#@)#?("=& =& B+%C,&>'!:#<%>'!?("?("@)#?(">'!>'!>'!>'!=& >& >%>%=( =*!>,#@.$@-$A*"A)"E*#E*#C& aC=x[SiMEH,#E*!@%8"5!3 202 8%:'!:'!:' 8%7$8%8%9&>*#<%?("D-'@)#>'!>'!>'!?(">'!A*$>'!=& >'!?("?)#?("@)#@)#A*$C,&A*$>'!>'!B+%A*$=& B+%D-'D-'B+%A*$B+%A*$>'!<%?("B+%@)#=& >'!@)#?("@)#@)#=& ;$=' ?(">'!>'!=& A+%B+%@)#C,&A*$A*$B+%A*$A+%D-'@+%<)"?,%C/(B/(?-'>+%>+%?,&2!/0 0 2 5 =(#;$>("B+"B)!X>6uZQqVMW<2H-#F-%F-$E.&D-'A+%=(#<("=)"?+$@-&>*#<(!<(!>*#=)"9%9%<(!;' <(!=)">*#?+$@,%<(!=)"<(!;' >*#?+$>*#@,%<(!>*#;' =)"@,%@,%?+$>+$>*#@,%A-&A-&@,%@,%?+$?+$C/(?,%=*#>+$?,%?,&A.(D1+D1+F3-A/)A0)A0)A0)?.'>.'@1,A3.?40>3/;0.:0.+(((+.00)/./0 1"1"1 3 6 8":$;&;&;&>)"B-&E0(F1)E0(C-&D/'I3,I3+G1)G1)E/'C-&C-%C-&A+$@*"@*"?*"@*#@*#?*">)!<' <'='8":":!F,$ZA8hOE^D;<"-)*M?8M>9K<7I84J84M:6M83H4/M94M94J50E1,C/*D/+B.)A,'D/+F1-D0+B-)E0,E1,I4/I4/I5/I5/H5.I5.J6/C/)E1*G3-H5.M93N:3?+$G4-I5.G4-H4.I5/G3,G3,I6/L81J70G4-L92H5.H5.F2,E1*D1*C0)C0)A.'J70I6/F2,E2+C0)C/)A-'D0*C0)@-&@,&?+%B/(@-&A.'@-&=)#:' ;(!?,%;(!=)#>+$>*$;(!:' B/(<)">+$>+$>+$=*#:' ?,%A.'>+$:& 9&<)":& <)"9& :' 9& 7% 9'!:("6$8% 7%7$7%6$8& 13 4"4"4"6$8& 8& 6%!4#!4"4!239!\D>qYSdMFC.(7 8"7!:#A)#G/)J.$E+ E*"E+#C,#B,#A+#@*#>("<& :%5!9%4 8$8$8#:#;% ;%='!:& 7#7$7$3#1$2%3%5$4"3 1110.0233="V:5cGB^G>F/&3 ,+*)-   -*,.;&K5-S<4R;2;%0011 2!2!1!1 2!4"6#:%;& <' >( @*#B,%C-&B,$?)!?)!B+#A*#A)"D,%F.'C*#A*"?( ?( ?( ;%A+$E.'F/'H0(I0(I0(J0(J0(N3)J0&F.#I2'N7,G1*B,%?+$>+%>,%=+%=+%<*$9'!9&!9'!9'":("8& :("8& 6$8% 9&!4":'"=*%>,&?-'>,&@.(<*$<*$<*$<)$<*$A/)>,&?,%@-&@-&@,&C0)G3-A.'A.'B/(@,&<)"<)"@-&?,%@-&A.'?,%D1*D1*B/(B.'C0)D0*?,%C/)B/(C/)?,%:' ?,%E2+A.'=*#?+%F3,J70@,&I6/H5.G3-D1*D0)K81K81I5/I6/G4-E1*G4-C0)G3-D1*D1*E1*B/(D1*>*$E2+G3,C/(@,%C0)@-&?,%<(!=)"A.'D0)C/)C0)D1*E1*F2,H4.B/(G3-F2-C/*B-(E1,K61L72G2-G2.F1,C/*D1+C1+<)#<*$@.(B/)@-'D1+?,&?,&C1*F4-H80L;4G83E61F:8I?=-A)"V=7[F@L:43"2 6$8$9$<'!?)":%9$='?)!?)!>( @(!C+$D-$D,#E-%G/(I1*G/(I0)J2+J1+H0)H0)G/(H0)G/(F.'E.'E-'C,&A*$?(">'!<& ;%:$9$4#3"3"2!/ --4 I/(R5/E)"1/((-=1*?2+A3-A2+B3,?/(A0(?-&@-&?,%;' 9%B+%@)#B+%A*$@)#?(!?( @)!A*"@)!?( @)"@)#A*$B+%@)#@)#A*$@)#>'!@)#A+%@*$@)#>'!>'!>'!?("@)#@)#>'!>'!C,&E.(?("=& ?("A*$@)#?(">'!=& >'!>'!>'!=& =& =& ?& ?&=)"=*#=+$>,$@,#B+#B+$I.'D*#F)#cF?vYQhLDJ/'@&@%6!4 3 1/27$<)#:'!;(!8%6#6#9&<)"?*$>'!<%>'!?(">'!>'!>'!?("@)#?(">("<%>'!@)#?("=& ?("B+%A*$A+%B,&C,&B+%C,&B+%C,&E.(D-'D-'B+%A*$A*$?("?("?("@)#B,&B+%?("?("@)#A*$C,&B+%?(">'!A*$?("=& ?("@)#C,&A*$>'!A*$B+%B+%C,&B+%C,&D.(A-&?,%@-&C0)A.'>+%@.(@-'<)#2 ./1 2!3 <)$:%<'!@(!?&S:2u[Ru[RY?6I/&F-&E,%D-'D/)D/)A.(B.(E1*<(!;' :&=)">*#<(!=*#9%:&<(!<(!<)">*#>*#?+$?+$;(!=)"<(!?+$A-&?+$>*#>*#>*#:' ;' >*#A-&C/(B.'A-&?+$?+$?+$A-&@,%?+$@-&B.'B.'@-&>+$>+$?,&@-'@-'B/)A.(E2-B0*C1+D3,C2+A0)@0)C4/C4/?40>3/<2/;1/ (()09% ?*$?)$---.0 1"1"0 2 5 8"9$:&:&;&=(!@+$C.&F0)G1*F0)E/(I4,K6.H2+G1)D.'C-&B-%B,%A+$?)"?)!>)!?)"?*"?)">(!<' ;&;%7":#9!@(U<2iPGcIA?%0*)M?8O@:N?;K;7L;7K95N:5L83M94P;6O:5H3.J51D0+A-(B.)E0+F2-J50H3/I50H4/I50I4/E1+D1*L92E1+G4-D0*C0)H4-B/(B/(H4-C/(B/(F3,J60J70C0)E2+F3,G4.J70J70H4.H4-E1*G4-I6/G4-C0)C/)?,%C0)I5.I5/D1*B/(@,&G3-J70G4-A.'?+%B/(>+$?,%@,&?,%@-&A.(?,%=*#>+$>*$>*$>+$=)#@-&C0)B/)A.(?+%=*#A.';'!9& ?,%A.'A.'?,%:' <)#8%9&9&9& =*#:("<*$9'!7%7% 8& 8& :(";)#<*%5#2 5#6$4"6$5#5#5#3 4! 6436K2,qZSr[TL71<&!8!7!9"<$F.)J0&H-#G,#G-%F-%D.$B,#A+$?)#=(":% 6"4 5!6!7#7!7!:$;$<& ;'!9&7$6$5#0"0#1$2$3"3 3 22 0012 4 32D*&W<8_F?T>4<( -+,+,     /-,-0L5,ZC:_G>V=4B*"7432 1 1 0 1 3!4"7#:$<& ?)">)!@*"A,$A,$@*">( ?)!A+$C+$D,%F.'D,%@(!@)";%>( ;%='C,%F/'G0(I1)J1)J1(J0(K1(M3)K2'F/#F0$F/&C-%B,%;("<*#<*$<*$<*$:("<*$;)#9'"9'!8& 6#6$;)#7%4"5#8% 9'!<*$<*$;)#>+&A/);)#?,'>,&9'!9&!=+%:'!B/(=*#>+$B/(C0)D1*B/)<("=)#A-'B/(A.'C0)?,%A.'?,%@,&D1*A.'B/(@,&@,%@,&?,%?+%>*$;(!>+$A.'B.(C/)G3-D1*E2+G4-D1*C0)M93M82J5.H3-H3-H4-G3-D0*H5.H5.D0*?,%B.(H4.H5.H4.D1*@,&?,%?,%G4-E1+@-&=*#@-&F3,F2+<)"<)">+$B/(I6/H4-H4.F3,G3,H4.F3,D0)I50L72I50E1,D0+H4/E0+E1,B.)@-'C1+E3-9& >,&>,&C0+E3-E2-H5/C0)L92I81J92J:4I:5J;7J?=LB@-F,%[B;_KEH70005#:%:$='!?*"<' ;%?)!@+#@*"?(!A)#F.'F/%C,#E-%G/(H0)H/)G/(L4-I1*H0)J2+H0)H0)H0)F/(E.'D-&B+$?(">' =& ;%:$9#7#2!1!1!0 .,+''*,++&'-B5/C6/C5/B3,B2,B1*B1)?-%?,&?+$;(!9%<& >'!B+&A*$?("=' >'?( @)!@)!?( >'!?("A*$A*$?("?("@)#@)#>'!='!>'!@*$B,&A*$?("=& =& >'!?("?(">'!<%=& @)#@)#?)#@)#@*$?("=& <%>'!>'!>'!=& <& ;$;#=$<(!=)"=*#>,%@,%A-&@,%?' @' F+$eICuZSeKDG.'9"8 6!5 3 1/2:'!@.(8%;(!:' :' 8%:' @-&;' @*$>'!@)#@)#>'!>'!?("<% @*$A+%B+%>'!?("@)#=& <%?("A*%A+%C,&E.(E.(C,&C,&C,&E.(E/)B+%B+%B+%C,&C,&B+%C,&C,&@*$A*$A*$@)#?("@)#C,&E.(B+%?("?)#B+%@)#='!@)#?("A+%A*$?)#B+&C,&A*$A*$C,&D-'@*$@,%B/(@.'?,%>*$=*$@.(=*$;("3"-01 2!2 8&!9&;&!?("?'!O6/rWPv\TZ@8K0(F.'E-&F/)G2,F3,A.*@-'C0)>*#<(!>*#@,%@,%@,%=*#:&;(!=)"<(!<(!=)"=)"=)">+$;' <(!=)"A-&B.'=)"@,%B.'@,%>*#>+$A-&C/(B/(A-&?+$@,%?,%?+$>*#?+$A-&C/(D0)@,%A.'@-&>+$@-&A.(?-'B/)A.(G4.D1,C2+D3-C2,B1*C2+E61E61B51A62A63@64 '')3 D/*S<7R=78"--./0!0!1!4!7#9$9%:%:%;&=( @+#B-%D/'C.&B,$C-%G1*M7/H2+F0(E/'B-%A+$@+#@*#?)!>( >(!?)"?*">)!<';&;&9$7!9"9!;#M4*gNE\B9A'1+(*PBM>:Q@*$C0)>*$?,%A.'=*#=)#>+$=*#>+$A.'B/(?,%=)#<)"=*#>+$<)"A.'@-&<)"9& <)":' >+%?,%>*$>+$?,&>+$?,%<)">+$<)#9& 7$8%=*#8& ;)#9'!4"5"9'!8& 8& <*%;)#5#5#6$:'"9'!7%4"13!24! 53246cMFmWPVB;?+%7"7!9#:#B+%H/(J/%H.$I.'H/'F/&D.%B,$@*$>)#<&!8#16"5 8"6 7!9#;$;$;% :' 7%5#6$3"1"2"3"3"4 43210/ -..06D,'[C=aJAH2(2 +++*-  -+,.:"R;2^G?]D;P7.@( 6 22 /001 2!4"5#9$;% >(!>)!=' >( @*#@*#>(!?)!A+#C,%D+%E,&C+$A)"?' =&<&=&7!=' B,$E.&G/'I1)J1)I0(J0(J0'K1'M3)H2&I2&D.&C-%?*#;(!>,&<*$;)#:(";)#<*%:(":("7%7%9'!;)#:(":'"8& <)$=+%;)#:(";)$:("?-'A/)?-'>,&:(":("@.(A/)A.(D1*>+$>+$A.'@-&?,%@-&:' @-&?+%@-&A.(A.'>+$B/(=*#A.'B/(@-&B/(@-&?,%;(!;(!>+$@,&;(!?,%9& =)#B/(E2+F3,F2,H5.I5/E2+F1+L50J4.H2,H2,E/)A*%B,&F2,@.'C0)B/(D1*J70H4-I5/C0)=*#=*#C0)F2,D1*H4.A-&?+%B/(>+$:' @,%A.'D1*F3,C0)G4-H5.G3,B.'=)">+$J61H4/F1,D0+G2.I50F1,F2-C/*@-(A.)B/)@-'C0*E3-J82I60D1+D1+J70I70H71H80K<5M?:OA=ODB4"5L1)^B;\HB>-'./4!:% 7":%<' <'<'@*"A+#@*"@)"B*#E-&E.$C,"E-%F-'G/(I0*H0)N60L3-M5.N6/J2+G/)F/(F.(E.'D,&A*#>'!=& <& 9#8"7"4!0 / / .,++)+*++)%'C84E81E92E71D5.D5.F5.B1)A.'A.'?,%>*#=)">'!@)#C,&@)#='!=&>'@)!@*"?( =&?("@)#B+%B+%@)#?("@)#@)#>'!>'!>'!?("@)#@)#?(">'!<%=& ='!?(">'!:#:#@)#?("<%<% ?("?("<%<%>'!='!=& =& <%;$=$>% <(!=)">*#?,%@-&@-&@,%B)"G/(F*$gKEw[UcIBG.'?( =%7"6"3 1/3 :'!?,&<)#:' :(!9&9&<)"A.'=)">'!?("B,&B+%@)#A*$B+%=& ?("A*$D-'C,&B+%@)#=&!>'!A*$@*$B+%F/)F/)B+%@)#C,&E.(B+%A+%A+%<& ?("C,&B+%@)#B+%E.(A*$?("?("?(">'!?("D-'G0*A+%='!?("A+%A*$?("@)#='!>("?("A*$D.(D.(B+%A*$B+%C,&>("?*$B/(?,%<)"=*#>,&@-'=*$=*$6%.0//13!9% ;'!>("?("G/)aGAgMFX>7I/(D-&D,&E/)G2-F2,@-)=*%@-&?+$>+$<(!;'!?+$?+$A-&:&;' ;'!;' ;' <(!<(!=)"?+$=)"=)">*#@,%?+$<(!>*#C/(>*#>*#?+$@,%A.'B.'A-&A-&A-&?,%<)">*#A-'A-&B/(E1*@,%?,%>,%>+$@-&C0*B/)B/)@-'C0*D1+C1+E4-F5.H70G6/E60E61B51B74F<8E;9C97(')2H4-[E?ZE?>*#...../ 1"5#9% :% :% :%:%;&=( ?*"A+$A,$B-%C.&C-&E0(N80I3+E/(E/'C.&B,$@+#@*#?)">(!>(!?)"?*">(!;&:%:%:%9#9#:"7A'O6-L3*>$2.+(RC=SE@QB>P?;O=9N;6O:5Q=8N:5K72O;6J50I50J61F2-B.)F2-I50E0+A-(B.)I40H4/H4/K82E2+B/(D2+E2,I70E3,F4-G5.F4-C1*B/)G5.@.'@-'C0*G5.I70I70K81M93J70H5.G4-F3,D1+D1*D1*C/)B/(D1*@-&>*$B.(@,&A.'D1+A.'C/)B/)C0)A.(>+$=*#B/(=*#=*#>+$?,%>+$=*#=*$=*#?,%?,%?+%@-&A.(:' :'!?,%>+$>+$=*$9&?,%>+$=*$<)"=*#?,&@-&8%9&9& 9& 8& 7% 5#7%;)#;)#;)#:(#7% /5#6$:(";)#7%4"3!1 011.037!R<5gQI^JB?,%4!6"5"8">'!E.'K0&H/$J/'J0(H0(E/&C-%A+%?*$<'!9$35!4 7"8"8"9#;% ;%8#8%8&5#4"6#2!3!3!3!3 320./.,+,.20G0+O90G0'6#+**&* - /+).2>$T92bH@^C;S81>%8!2//0 1 1 2!4"6#7$7#<' <& =)">)"?)#A+$@)#B,%C-&C,%D,%D,%A)"A)"<&>'=&;%7!>( B+$D-%F/'H0(I1(I0(J1(H.$J0&I1&H1&H1'B,%B,%=)#;)":("7%7% 5#7% :("8&!5#:("9'!8% 9'!9'!7% 8& ;)#<*$:(":'"<*$>,&<*$;)$;(#:'";)#>,&D1,:(";("?,&?,%?,%@-&=)#=*#=*#<)"@-&?,%@-&?,%?,%A.'B/(9&>+%?,%@-&D0*G4-G4-?,%@-&A.(?,%<)#D1*H5.A.'D1*I6/J70E2+D1*G3-D1*F1+K4/J4.A*%@*$F0*D.(>)#@-&B/(H5.F3,E2+H4.J60H5.?+%<)"A.'H4-J60D1*L81>+$<(">*#=)#;(!D0)F2,G3,E1+D0)G4-I5/K81L82D1*C/)J61J61I4/C/*D0+F2-G3.H3/B.)D1+;(";)#@-'?-'=+%P=7A/)@-(D1+H6/J81I81N>6PA;QB=QD@QGE.<#U80_D' ?( @)!@)!>'<%A*$C,&D-'C,&B+%@*$@)#?)#>("@*$@)#?("?("?(">'!=& =& ?("?("?("@)#A*$A*$?("<%;$:#>'!@)#<%<%>'!=& =& =& =& =% ?'#?'#>)$>*%?+%@-&@-&?,%?*#@("H/*A&"W=7^E>O70>( 9%9%6"5!4!1.4!>+%>+%=*$9&5"8%5"4!;(!6">(">'!B+%D-'B+&@)#@)#@*$='!='!A*$>'!:$9#<%?("@)#B+%F/)J3-H1+F/)D-'B+&B,&C,&@)#?)#>("@*$B,&@)$='!@)#C,&@)#?)#A+%B+%@)#='!A+%H1+E.(C,&B,&A*$?(">'!@*$>'!?("?("@*$D-'D-'C,&C-'@*$A+%@)#?+$@-&>+$>+$A-'>+%@-'?,&>+%8' //.0 5"2 :&"<(#>)$A*$B+$N6/Q81M4.D+$D-'G0*H2,H3.D/*>+'>+'@-&@,%@,%?+$=)#>*#;' >*#A-&A-&@,%>+$=)"=*#=)"=)"?+$>*#?+$?+$=)"?+$@,%>*#A-&@-&>*#=)"@,%C/(A-&D0)E1+B.'?+$?+$>*$=*#@,%A-&@-&B.'A.'B/(B/(?-&D1+D1+C0*A/)B/)D1+E3-E4-H71I81H81G72I:5I<8F<8E:7I?=F<:('(.D2*XCB.'/1/..0!2#5$8% 9$9$:%;&<' =(!>)!@+#A,%D/'E0(F0)M80B-%H2+E/(D/'D/'B-%B,$A,$@+#?)">)!>)!>)"=(!;&9$9$9$8#8#:#56:"9!520-)SD>RD?RD?N?:L=8N=9O;6I50L83J51N94P;6K72F1-F2-E0,F2-H4/J61I50C.*H3/I40H4/J71L:3K92F4-B0)G5.F4-H5.H5/D2+>,%<*#A/(=+$;)"B0)G4.@.'=*$G4-J70H5.H5.D1*A.(H5.A.'=*#A.'>+$C0*A-'A.'@-'>+$?+%C0)C0*D1+D1+B/(=*#9&;(!F3,D1*@-&@-'A.'>+$?,&A.'?,%@-&A.'@,&?,&D1*A.'A.'?+%<)">+$>+$<)"=*#@-&<)"8%;(!6#=*#;(!9&8%8&8& 9'!9'!:(":("9'!7%4"8& 7%6$8& ;)#8&!3!3"4"3!0/3" .011:#N91S=6?,&3!3 5"7#;$A+&I/&J0&J0'K0)I1(E/&B,#@*#>(";& 8#5 05!6":$8";%<& ;% 7"5"7$5#/5#5"4 5 43331.---,,/ /.2!6$6 3++*''- - - .+,05@&Z?8aG?ZA8G.&335 001 1 1 2!4#5#5#6#:%;& >*$=("@)$B*%C+&D-(A+%C-%E-&E-&C+$@)!>' <&:$7"8">( B+#C,$F.&H/'I0(I0(J1(I/$H/$E.#G0%E/%?)"B-%>+$:(!<*$=+%:("8& 5$7%7& 7% 7%5#7%8& 7%6$7%:(#<*$8& :(";)$:(#7% 5#9'!:(";)#=+%?-'@.(>+$A.(@-'=*#=*$>+$:' ;(!<(">+%C0)C0)A.'A-'@-'=*#9& A.'@-'@-&A.'B/(B/)?,%7$8%;(!>+$C0)I5/>+$@-'B/(D1*E2+E2+E2+J71K5/J4/H2,B,'C-(C-'F0*D0)C0)C0*@-&@-&D1*E1+F3,E2+>*$<)"C/)F2,G3-F3,E1*?,%@-&?,%<)">+$H5.J70F3,I5/I5/F3,D1*B/(J60B.(@-'G3.J61@,';'"E0+D0+F2-F2-@,'H60?,'A/)E2,E3-C1+F3.H60K93K92N;4N=6L;4TC;O@;RC>SFCRHF/@&U80[A:I8202!028#7";&=( >)!>)!?*"@*#@+#A*#B*#B*"B+!C,"F.'E-&G/(H0)F.(I1*O70I1*H0)F.'D-&E-'E.'D-'B+%?("=& <%;%9#8"6"3!0!/ /.,-///-,+)'*LA6J=7I:4H:3I92H70F4-C0)E2+?+$;(!>)"@)#@)#B+%?(#>'!?(!A*"A*"?)!>'<%:#9#:#:#:$=& A*$B,&?("A*$@)#?(#@*$B+%A+%?(">'!>'!?("@)#A+%C,&A*$=& ='!?("<%>'!@)#=& <%>'!<%<% ='!='!?'"A)%?'#=(#=)$?*%?+%>+$=*#=)#C*&I1,A&"G,(D+%B+$=( 6#9%4 320.2 9& <)#?,&;)";(!?-&@-&;(!9&@+%E.(A*%>'!A+%F/)F/)A+%;%:$;$?("A+%@*$@)#A*$@)$=&!A*$F/*F/)G0*G0*F/*F0*G0+B+%?)#B,&A*$A*$C,&D-(C-'E.)D-'@)#A*$C,&D-'A+%<& >'!E/)H1+G1+E/)A+%<& <& A+%A+%A,%@*#>("@+$B,&A+$A+%B+%B+%A*$?*#=*#>+$@-&A-'=*$A/)>+%<*$9(!0 /.3"7% 4":&"=(#?*%D.(D-'I0)H/)D,%?&F/(M71M72K72C.)>+'>+'>+%>*#@,%A-&=*#:& 9%>*#<(!;' =)"=)"<)">*$?+$=)"?+$?+$?+$>*#;'!@,%C0)A-&@,%@-&@,%@,&E1+H4-B/(C/)E1*C/)B.(D0)E1*A-'C/(A-&?+$B.'D1*E2+F3,B0)D1+B/)D2,F3-E3-E2,E3-G6/I81K:3I81I:4J<7I<7J?;J?;KA?KA?('')=+$R>6WB;E1*/0-/2"3$3$4$6%8$8$9%:%;&<( >)"@+$A,%D/'F1*E0(M80H2+I4,H2+F1)E0(A+$A,$A,$A+$@*#?)!>(!>(!<' ;&9$9$9$8#8#9#6 65325/-+XHASD>RC>QC>NA+$H4.B/)A-'@-&=*#8%?,&@,&@-&A.(B/(>+$<)":'!<)"B/)E2+C0)B/)>+%?+%?,%?,%>+$>+%@-'>+$A.(B/)B/)B/(>+$7$8%:' 8%:'!=*$=*$@-&>+$9' 6#6#8%7$:' 7% ;)#:("9'":("6$;)#5#9'!:("7%6%<*%3"3!5#4"12 /1"2 0---6"8%6$3#2"4$3$7%=+#E/'I1&H1&I/'J1(E.%A+"?)!='!;%8#6"06"6":$9#8#9$9$5"16#7$12 6"7 7765530-.- , + --,1!*23.+,,',)'+-2A*$W@:^F@T=6;%013 /0 0 1 1 3"4#6#5"8#:%;& <'!<& >'"@($A*%A*%A)$B*#B*$A*#@(!>' >' >' ='4:$?(!B+#C,$F.&H/'H0'J1(K1(J0&H/%F/$L5*C-$>(!>)"=+$>,%7& 9'!9'!8& 6$4"7%7%6$6$6$4"8& 8& ;)#?-'>,'5#;)#=+%9'!5#6$9'!;)#;)#=+%>,&=+%@-'B/(>+$;(!=)#?,%8%;(!;(!>+%C0)E2+D1+?,&9&<)"D1+I6/B/(?,%C0*@-'@-&B/(A.(>+$?,&A.'D0*F3,D1+?,%=)#B/(F3,G3-G4-J60H2-D.(J4/K50F0*G1,J3.E1+B/(A.(A.'C0)G4-@-&B/(D1*D1+F3,F2,B/(I6/G3-@-&?,%?,%B/(>*$@-&G4-G4-?+%B/(I6/K81G3-@,&?,%G4-C/*E0+E0+A-(B-)P<7C/*G2-F1-A-(A/)K93M:5D1+C1+G4/J71M:4P>8L94N<7O=8O>8QA;L?9RD?THEQGE.8H+#J1*<+%1 1 035 6!;&:%=( ?)"?*"@+#A+$C+%B*$B+#C,"D-$G/(E-&F.'G/(G/(H0)J2,H0)J2+F/(D-&D,&D-&C,&B+$@)#>'!<&<%;%9#6"3!0 .---10./-,,)')NC>NB:NA;L=6J;4I92H70D3+?,%@-&?+$=*#?*#@*$A*%A+%?)#>'!>( @)!@*"@)!=&;%;$8":#<%=& >'"@)#@*$?("@)#A+%B+%@*$?("?("@*$A+%?(">("?("@)#?(";%<%B+%C,&>'!<%='!?(">'!@)#@*$?("<%<%=&!?($>'#<'#=(#>)$>*$?+$?+$@+%D,(B)%D($C($@'!@*">*"8'6#230.-4"A/)D1+?,&>,%=*#=*#;(!;(!=*$?+$E/)?(">("?("C-'J3-H2,=& ?(#@)$>'"@*$?)#?("@)#>("<% A+%F/)A+%B,&E.)E.(B,&B,&?)#=& A*$B,&D.(D.(B+%A*$D.(F0*D.(B+&>("<& ;' :& >*$B.'@,%?,%A-&B/(A.'?,%A-'?,%@-&?,%;(!<)"@-&@,&>("D-'C-'A+%=)";(!=*#?,%<)":'!C1+A.(=*$8' 0.0 3#4"7%!8% :% =(#B,&D-'G/(F.'G/(D+$H1+L5/J4.P;6D/+?,(=+'<)#<(!?,%B.(?,%?,%?+$@-&=*#;(!=)"?+$>+$@,&A-&?+$?+$?+$?+$>*$9%=*#B.'@,%@,%A-&B.'B.'B.'F3,@-&@,%B/(B/(A-&B.(D0)@,%C/(B/(A-&C/(E2+C1*F4-H5.G4.D1+E2,G4.F3.E2,F4.E5.J93N=6L<5K<5L>9L>:LA=J?;LB@MCA)&# & 6#K80S?8G2+1.+-/ 2#3#4$6%8$8$8$9%;&<( ?*#@+$@+#A,%E0)C-&K5.H2+F1)G1*F1)G1*B-%@+#?)"?)#@)$?("=( =( <' ;%9$9$8%8%9&8$6"6!7!4 330,*.YIDVGCVHCQD?OB+%@-'C0)>+%B0):'!>+$@-&>+$=*$?,&@-'<)"=*$@-&B/(E2+A.(:'!9&:'!:' 7$8%>+%<*#=*#<)":'!;(!;(!6#9&9'!;)#:(#5#9'!:("9'!7& 9'!;)#9'!3!5#5#3!3!7%3!10".!/!3#*/./01 3#0!3#2"4":( ?,%D."B."G-%I/'F/&B-$@*!>("<& 9$8#336#8#9$7!67!5"/26#3!.6$6!5 654320.-.-+*)(/--0/(+*$',)(+-1<% C,'D-'>(#/..//000 2!3"5#5#5#8#:% :%;& <&!>'"B*&B*&C+&E.(G/)F.(C,%@)"=' ='<%;$5 ;%@)"B+#D-%F.&H/'H0(J1)M3*F-">%=&F0%B,%<'=)";)"8& :("9'!9'!6%4"3!5#6$7%7%5#5#;)#:(#:(":(";)#;)#6$<*$:("9'!:(";)$;)#:("9'!:(";)#=*#>+$;(";(!?,%>+$:' :' ?,&>+$?,%>+%<)";(!?,&D1*G4-G4-E2+C0*E2,>+$?,%B/(B/(?,&A.'D1+E2,I6/I5/C0*B/(D1+C0)E2+D1*C/)H2-L60K5/I3-G1,I3.L60?+%B0)E2+F2,F3-F3,A.(B/(D1*G4-J60I6/G4-K81B/(@-&A.'?,%@-&>+$>+$?+%A-'C/)B/)P=6P<6G4-@-&B/(K71D0+@+&C/*F2-J61P<7D/+O;6I50B.)C1+J82I71J72I71M:5K93J82P>9I62K85M;7O>:QA=QE?VJDSHDTIE,. 32//3"3!5!6!8#;&7!;&>(!@*#A+$A+$A)#A*#C,#E.$F/&G0)F.'G/(I1*J2,I1*F.'H0)H1*F.'D-&C+%B+$B+$A+$A*$?("=& <%;%8"6"3!0 -++,0..1/**)(+QE@PD'<%<&>( ?(!=& 9";$?("A*$@)#?(">(">("?("B+%C-'A+%>'!=& @)$C-'?("='!<%<& >'!?("?("A*$@)$>'!='!?("@)#>(">("?)#>'!<%<% >'"?'#=%!<'"@+&B.(@-&?,%@,%A,&E,(@(#D($C)#@(!?(!=( 9&7#34 0--7%>+%;(">+%:(!?-&:'!:' >+$=*$:%<& B,&D.(E.(D-'I2,K5/A*$D-'@)$K4/D.(?("@)$D-'E/)D-'D.(C-'>("@*$B,&C,&F/)H2,?)#=& C-'C,&C,'D.(B,&A*$D-(C,&B+%C-'A*$>)#?,%?,%@.'@-&=*#=+$B/(F4-E3,?-&@-&>,%E2+F4-A.'=+$?,%@,&?)#B,&@*$D-'B-'?,%A.'D1*B/(@.(>+%=+%=*$8' -.1!1 4"8&"8% 8$=(#?(">("A)"F.'E-&N6/S;5I2,C,&P;7D0*@-)?,(>*$>*#@,%@,%=*#A-&@,%@-&@,%=)";(!<(!9&:' ;(!;'!<(!=)"=*#=)"8%=)#=*#=*#?,%@-&@-&D0)?+$F2+C/(A.'C/(B/(?+$@,%B/(C0)@-&<)">*#E2+K81D2+B0)D1+G4.F3.G5/H60F3-H5/K82G6/J92M=6O?8O?8M>9O@;MB>OD@PECNDB+,'(0A-&K6/C.(0+)+.0"1"3#4$6$7#7#9$9%:%<' >)!>)"@+$E0(D/'J5-I3,E/(D/'K6.G1*C-&@+#>(!='!?(#>'"=' =( <' ;&9%8%8&8&9' 7$6!6"7!5 62/-))WGAYKFRD?I=7NB,%J81M;4G4.B0)B0)D2+=+$A/(C1+B0)A/(C1+D2+?,%9& <)#D1*G4-B/)F3-@-'@-&B/(B/(@-&9&A.(@-';(!:'!=*$6$?,%>+%>+$<)";(!?,&D1*;)"?,%@-&A.'B/)A.(B0)B/)B/)?,%;(!;("?,&E2+D1+?,%;(!;(!<)"7$8%9& <)#?,%=*$8%9&8%6#6#9& 9'"9("5$5#;)#9'"2 8'!9'!6$2 3!6$4#16$5#5#3#0# - 4$,./-/.2"0 1!3#5%9(<,%B.#A/"C-#G-%G/&D.%A+"?)"='!:%9$7#15#6#8%8$8$6"3 115"6$4"3!3!3!3!3!0.,,--+.++)(,/,/1,*(&&-*'(*,,0./.--*-./0 1 2!3"4"4"5"7#9$7"=("<% @)$B+&B+&D-(D+$D,%C+%A*#?)">(!>(!=' 239%>*!@+#D/&G1)G1(F0'F/%J0&K1'M6+W@5YC9M70=( ;(!9' 8'!9'!8& 7%5#5#5#5#5#6$7% 6%7& :(":)#5#9'!:)#9'!8&!<*$8&!?-'=+%:(#:(":("5#;)#9& :'!<)";("?,&@-&<)#:(!<)#?,%=*#@-&?,%;(!:'!?,%B0)B/(G4-G4.B/(>+$B/(E2+?,%=*#?,%A.'C0)H5.I6/H5.G4-E2,A.(=*#A.'E2+H4.J4/I3.D.(A+%H2,J4.H3-C1*J81H5.C0*E2+E2+=*$@-&K71I6/K81K82F3-B/(=)#A.'E2+B/)=*$@-&@-&?+%@,&?,%>+$C0)B/(E2,C0)D1*G3-B.)@,'B.)E1,I40I50F2-M94P<7J71I61N<6R?9L:4L:4I60J82L:4M:5H62J73J84L;7N?:QD?VIDSIE3"../*+/2!5#6!8#;&;&:$=( ?*"A+$A,$B+$A*#A*#D-$F/%F/'G/)G0)H0*N6/R:4O70H0*F/(G/(E-&C,%B+$B+$B+$C,%B+%@*#>(!<&:$7"5"2!0 -,-,0/9%B-&>(!/**),SGARE>QD>PA:M?8J93J91G6.D1*B/(A.'D1*F0*G0*D.(A+%@)#>'!=&>( >( >'<&=&>'!;%=& @*$A*$@)$?(">'!='!A*$?)#A+%B,&@)#='!?)#C,&?("<& 9"9#='!A*$@)#>'!=& =& >("@*$@)$>(">("='!<& ;%<& ?'">&!<$ <'!@,&B/(@-&?,%?,%A,%D+%A(#A& C("@' <%;%:'8%4 4 1./8% :("@-(@-'9& =*#>+$<*#:(!;(!?+$@*$H1,D-'B+%D-'K5/K5/>("D.(B+%@*$>("@*$?)#>("C,&F/)D.(A+%@)#>("A+%D-'C,&F/*?("?("='!>'!B,&F0*F/*D-'A+%F0*H1+F0*@)#;& =*#@-&B/(E1+E2+D0*D1*G4-I6/G4-E2+I5/E1*A.'B/(D0)D0*D0)<& A+%<& A+%A,&?,&?-&@-&G4-A.(<*$@-'<)#7%-.1!/14"7$:'!@+&E-&?)#=$G-&J0)N4-Q82O82M5/D/*;(!B/*@-(?,&@-&>+$=*#:' >*#=*#@,%@-&>*$>*#>+$<(";'!:' :&:' <(!=)#?+$>*#<)":&=)#@-&>*$;(!E2+C0)H4-E1*D0*H5.L92H4.B/(=*#A-&A-&@,%A.'E2+G4-<)"<*#C0)B/)A.(C1+G5/J72I60K93N=6K:3J:3O>7QA:O@;PA)!?)">'"=& <&<' <' ;'8&7%7%7%7&6$4!6#5 35 3/.+)YIBUGBSD?OB+%?-&F4-A/(C1*D2,C0*B0)B0)>,%<*#=*#@-'G4-F3-A.'@-&?,%>+$>+%@-'A.'>+$>+%A.'C0)@-'B/(8%;(!>+%>+$:' 9& <*#C0)=+$;(!>+%>+%@-'@-&@.'@.'@-&@-&A.'<)#<)">,%A.'?,&;(!:' <)#:'!;(";(!:' >,%9& 9' 9& ;(":' 6$>,%6$6$8& 6$7%;)#/6$8& 6$4"3!5$4"2 4"3"10/"/"0!+*.*.01!0 0 4$3#6%<,$A/&D0#D/$E+#G.%E.%B-$@+#>(";& 9$9%4 8%4"5#7$7%6$5"3!3 3!3!3"4#3"0000/-,,-,-+*++,0 ,.0/-,))-+'%'*))*),,-+*..01!3"4#4#4"3!3!5#6"8#<'":% @*%?)$A+%A*$@("@)"@(">(!=( =' ='<&06#;'=) @+"C.%F1(F0'F0'H0&J0&K2(XB6dMBWA9F1)=)"=*$:("8& 8&!7%5#5#6%8& 6$5#5#5#6%5#6$6$4"5#:("9("9'"9'!:("@/)<*$9'!:("9'!7% =+%8%<)"=*$>+$?,%;("<)"=*$?,%@-&@-&>+%B/)?,%9& <)"A/(B/)C0*G4-?-&?,&D1+D1*>+$@-&@-&?,%A.'G4.E2,E2+C0)@-&>+$?,%>+$A.'G2,K5/H2-C-'C.(F0*E/)E1+G4.H60F3,D1*F3-D1+E2+K81I60K81F3-C0)A.'@-&@-&B/)L92J70C0*?,%;(!<)"D1*?,%?,%E2+=*#<)#D0*D1*C/*B.)B.)@+'H4/M94M94N:5R>:O;6Q?9N<6O=7Q?9M;5E3-H60L:4L94J83K84K85J95L;7L>9SGAYMHWMI/.240/.05#6"9$9%;&<' >)!@+#A,$A,$B,$B+$C+$C-#E.$F/'H0*J2,K3,M5.P81M5/H1*F.(F/(E-'C,&B+%B+$A*$A*#?)">(!<& ;%9$7"5!2"0 ../144H3*U?7N708#-,(,UICTH@SF@QB;N@9I92H70G5.D2+@.'=)#@.'B+%?)#>'!?("A*$A+%?(!<%9#;$=&>'!?("?("?)#?(">("@)#@*$>'"='!B,&='!?("B,&A+%>("?("C-'B,&='!9#:#=& @)#@)#=& ='!?)#?)#B+%@*$>("?)#=& <% ;$='!?'"=% ;$;(!>+$?,%>,%?,%?,%@+$C*#B)"?%D*#B)">$<%;'8#4 4 1./8%<)$?,&@.(=*$;(!?,%=*#8%:(!C/(?)#F0*@*$?)#A+%G0*F/)<% E.(C-'?)#D.(G0+D-(?)#='!?(#C,'>("?(">'!?("A*%B,&H2,A*$B,&G1+C-'G1+L60H1+F/)B,&E.)E/)F0*C-'@+%B/(E1*G3-G4-C0)@-&B.'F2,I6/J70K70L92E2+A-&C0)F2+A.'=)#B,&C-'<% <& <(!;(!;(!?-&F2+C0*B0*@.(>,&;)#,----16#:'!?*%E-'B*#H.&Z@7`F=X>5N5-N6/P71>*%>*#=*$<)#?,%A.'<)"=)":' ;(!;(!=*#=*#<(!=)#?+$?,%?,%=*#;(!:' :& :' ?,%?,%?,%<(!<)"@-&@-&>*#H4.F3,G3,D1*D0*I6/N;4K81H5.F2+F3,E2+C/)A.'A.'F2+?-&@-&@-&B0*D2,F3-N<6M:4K93P>8Q@9N=6K:4M=6QA:QB=RC?PD@QGCSIFSIGSJH'&'((*-,+*,. 0"0!0!1!3!6"6"9$9$8$:%=(!?*#B-&D.'G2*G2+D.'D/'F0)C.&A+$B,%A,$?*"@+#>'!=%<&<' <' <' 8&7%6$6$5$4#4"8%!5!248#2.,*\LETE@SE@UHBTGBPA,&@.'=*$=+$B0)A/(E3,C0*@-'?-&B/)H5/E2+E2+A.(@-&@-'?,&<)#@-'B/(@.'>,%>+%@-'?,&=*#<)"=*#>,%A.'=+$>+%=*$?,&?,%:' <)"=+$?,&@-'A.(@.'=*$:'!;(";(!;(!:(!:'!=*#:(!:'!<)#<)#;)";)"8%:'!:(!<)"=*#<*#:'!7$9& 5#5$7% 5#9("8& 6%6$7% 7% 6%4"3!2!2!3!4#1 0/ .!. +)1 +.1 0 /-2"2"3#8'?-%D/#D/#E,#F,$E.%C.%B,$@*$='!;& :& 7#4 3!4"5#6$6#5#5"4!3 2 2!4"5$1 000 1 0...,++),.....2...+*-0+''()'),//--,-./0 3"4#4#4"4"4"4#5#6#:% ;& ;'!=)#=(#?*%@*#A*#@)#?)!=( <'<&:$7!3 9%<( =( ?*!B-$E0'G1(H2(H0&E,!N6,aK@gQFJ4-=( =)"<*#8' 8& 9'!6%4"3!5#8'!8&!6%6$4#2 4"112 5#9'!9'":(":(";)$=+%<*$:("9'"8&!9'";(#9& 9& <)"<)"<)#=*#=*#@-&@-&=*$;("<)#?,&=*#:'!:' @-'C0)?,%D2+@-'?,&@.'A/(C0)G4-@-'@-'B/)E2,G4.D1+H5/G4-@.'?,%A.'?,%>)#G1+H3-E/*B-'B,&C.(D0*A.(@-'C0)A/(A.(H5.I60H5/F3,C0*>+$@-&D1*G4-H5.F3,O<5J71D1*=*#;(!@,&B/(@-'F3,G4-?,%=)#F3,@-'@-'@,'@,'D0+?+'>*%9% @,'I50I50G5/P>9P=8L:4H60F4.L:4J82J72N<7O<8K95L;7UD@TGAVICVJEWLH-.231 1 .05"7":% 7";&>)!>)!?*"@*#A+$B+$C,%D,%D-$D.$F.'G0)J2+J2,J2+K3-J2,G0)F.(F.(F/(F/(E.(E.'C-&B+$@)#>("=& ;&:%8#5!1 /01236 6!P;2[DPA;Q@:M=5J81H5.F3,E2+H5/D.(>("@)$?)#>'">'!='=&<%<%;%=&?("@*$@)#<& <% @*$A+%>'"='!C,&?)#?)#A+%@*$>(">(">("<& ?("<& <& ='!>("?(#?)#A*$@*$?("@*$?(#>'!>("=&!<% ;$>'!>'!=$;$;(!=*#=*#>,$A-%@+$A*#D*$D+$C("O4-O5.E*#?&<$8!5!31..8% ?-'>,&A/)?,%7$;(!:(!9&<)"A-'=& M60A*%B,&E.(F0*D.(?)#B,&?)#='!E/)G1+E/)B,&>'">'!G1+A+%=&!>'!A+%A+%?)#G1+D.(@*$I2,H1,L5/N82E/)E/)E/)E/)B,&D-'C-'B-&C/)@-&A-'A.'>*$=*#A-&D0)E2+J60J60H4-G3-E2+D0)C/(A-'>*$D-(B,&;$:$<' :' :'!C1*H4-B/)G4.A/)>+%<*$/,/,/37"9$<& B+"B*#R90jOGrXOfLDT;2O70K3*?("L60G2->)$=)#@-&<(":' 8%:' ;(!;' :' :&:' <("@,%@,&=*#;'!:' :' =*#?,%A.'=)"=)#D1*I5/B.'?,%L92E1*C/(C0)C0)G3-H4-E2+H5.I6/I6/I5/G4-F3,D0)E1*A/(D2+G4.E3-G4.UBSGBTJFUJGULJTKI*(&&&&())),-/!/!/!0!3!6"7#8$8$9$:%<' >*"A,%B-&C.'F1*J4-P:3F1)B,%A,$A,$@+$?)">)!=' =%<%<'=(!;( 9&7%6$5$5$ 5$7$9% 8";#F,$S7-N1'4 +),XICVHCTFAOBL94M94N:5K72G3.I50C/*E1-G3/J61K72I50H4/I50G3.F2-D0+@,'>*%I70K82J81D1+A.(C1*B/)E2,F3,G4-F3-B/(>+%A.'>+$C1*D2+B/)@.'?,%E2+D1*B0)B/(B/(?,%A.'>,%@-&@-'?,&>,%@-&@-&>+$<)"<)"=+$=*$>+%A.'A.'?,&?,%>+%?,&;(!=*#?,&@-'A.'@.'@-'@-&>+%<)#=*$A.';(!<*#<)";("<)"<*#:'!;(!8%7$9' <*#<)#>,%;("9& 7$5"3!4"3!2!6$6$4"7%4"6$5#2 12 2 3!2 1/,--*0.*2//,.1 2!7#=+$C-#E-#F-#F,%F.&D.%C-$A+$?)#<'!;'!;'!22!3!4"5#6#5#4"3!2 3 3!2!2!1 1001 1 0..-***,./.0 5%;&!3-,+),/*'()((),*)), /".-.02!2"2!3!4"5#5$6#8$:% ;&!;'!<(">)#?)#>(!?(!>)!>(!=( =' ;&8#4!6";'=) <(?)!B-$E0'H2)I2)H.$@'W@5gQF]G=A+$9$;(!8&6$7%7& 7% 5#5#7% 8&!6$02 114"5#2 5#7% 9'!9'"9'"9'!:(";)$<*$;)#7% 7%:(":'!8%8%:'!<)"=+$=*#<)#=*#=*#=*$<)";(!=*$@.'?,&:' A.(@.'?,%A.'B/(>+$A.(@-'A.(E2,F3,C0*A.(C0*D1*D2+H6/F3-=*#?,%A.(B/(E/)H2,H2-G1,D.(C-(F1+G4-D2+A.'E2+K81F4-F3-G4-E2+F3,E2+<)"B0)I6/J71J70I6/H5/>+$>+$E2+B/(<)"?,%@-'C0*B/(?,%@-&C0)<)#=)$D0+C/*A-(H4/G3.8$ A-(E1,G4/L94M;5I71C1+F4.I71G50J82J72K95K95K95M<8P@)!>)!?)"?*"A*$C+%D-%D.$D.$D-&G/(H0*H0*H0*I1+J2,H0*F.'C,%B*$A*$A*$@)#@)"?(">("='!=' ='<&:$7#3"1 22126 9$V@8ZD;H2*5!-,+ZOKYLFWKDWICVG@TE>Q@9QA9P>7K92F3-E2+F2,B+%@*$A*$@)#?)#?(!>( ='=&<&;%<&>("?(#>("<% <%@*$A+%='!='!B,&B+%A*%>("<& >'!A*$@*$<& ?(">(">(">'!=& >'!@*$@*$>(">'">(">("='!=& ='!<& ;$>(">' =$;%;( =+#=*#>-#A,$@*"C*#E*$E*$L0*eHAfJCP3,A&<"9!6"20/.8% C1+F4.I71A/(5#7%8%7%:(!?*$=&!M71A+%B,&E/)D.(D-(F/)C-'@*$?(#A*%D.(E.)B,&?)#=& E/)D.(>("?)#D.(E/)@*$@*$G1+>'"A+%E.(G1+F0*A+%C,'C-'G0+D.(C-'B+&B-'D1*=)"<)">+$<("=*#B.'C0)B/(K81K71F3,G4-H4-E1*C0)F2,E1+D.(C,&<% ;$>)#=*#9&C1*D1*F4.G4.A/)A/)@.(.-../28#<& <& D+#A*!S90nTIz`VoTJU;1M5,O5,B+%M6/P;5J61C/*D0*A.'=*#9&=*#>*#:' 9&;(!:&:& >+$>*#;'!:' ;(!;(!@,&B.(D1*B.'@,%?+$9&8%?,%<)">+$@,&@,%A-'F2,E1*B.(F3,G4-I5/J70H5.I5.I6/K70G5.I60L:3K92I71R@:N<6O=7O=7O<6P?9SCQC>REAUJFVKHVLJXNM)%$%('&(+,*,. . / 0 3!6"7"7"7#8$:%;&=)!A,%B-&B-&H3,I3,K5.E0)A,%@+$@*#@*#?)"?("?( >(='='>) >) =(!:'!8&!7%$6%"9&!9#9 B&Z:-jH8eA0B*!.--XHCWIDTFAL@:I<7K94L83L84M94F2-J62H4/G3/H40L83O;6J61C/*G3.A-(=)%C/+J62I50J71K92I6/D2+B0)C0)@-'>+%A/(E2,C1+>,%C1*E3,@.(A/(C1+@.'E2,?,%B0)D1*A.'>+$A.'@-&@-&?,%=*$<)"<*#=+$>,%>+%=+$=*$;("7$@-&>+%<)";)"<)"A.(>+$A.(>+$<*#@-'@.'A.(?,%?-&A/(A.(=*$;(!@.'=*$=+$?,&=+$;(":'!8&;("9&5"7%=+$;(!;(!9' 9& 8%5#4#6$6%5#5#6$06$4"4"4#3!02 111 2 1 --,++-( ?*"E2*>,%2 ,017"=)"C-%G-#G.$G-&G.&E.%C.%B-%@+%>)#<'!<'"5"6#3!3"4"5#6$3!112 2!1 /.1 0//0/.--,,.01117#C/(K6/F/(4+**+-+'&'(*,--+,,,----/0 0 1 2!4"4#3"6"7"8#;& 9$<'">)#<'!;&<'=' =( >(!>)!<(!8%27$<(=) =( ?*!C-$F0'H2)I1'F,"C* _H=eNCO90>)!:&8& 7&3"3!4"4"3"4#5$7%6$3!2 003!5$5#8& 9'"9("8'!7% 7%8'!:(#9'"7%6$8'!>-';("9& 9&9& 9' <)";("<)#<)#:(!:' ;)"9&<)#?,&?,%=*#?,%@.'>+$?,&C0*F3,G4-B/(<*#=*#@.'A/(A.'E3,=*#:(!?,&C0)>+$B/)C0)F1+H3-G1,D.)K60F0+D/)D/)>+%C1*B/)G4.I70E3,@.'E2+D1*I60H5/A.(B0)I6/D1*D1*B/)A.(D1+A.'?,%?,%<)"<)"?,%=*#>+$<)#?,%C0*B/(H4/Q=9M95J61I50G3/D0+B.)H4/G4/E3-C1+?-(@.)E3-G5/D2,B0*L:4P=9O<9N=9P?;RB>QE?WJEUJFWMI&-44 1 1 3"3!4 7#<'!;&8#<'=(!>)!>)!>)!@)"B*$C,$D.$E.%F.(G/)H0)G0)G0)I1*J2,H1*F.(C,%B*$A*$A*#@)#?("?(">(!='!<& =%<$:#7#3#1!11027"A,$]G?YC:A,#/*+,\QMWKDUIBVIBXJCWHARB;RB:N;4H6/F3,F3,D1*@)#B+&D-'A*$>(">(!?( ?(!>( =';%=& <& <& ='!='!='!?)#@)$=& >'!A+%B,&A+%@)$=&!=& >(">("<& @*$='!='!='!=& =&!>(">("='!>("='!A*$>("<& >("<% ;%>("?(!=&;%;(<+!<*!<+!?*"A+#D+$D("C'!P2-tVOwZST80@$("@*$?)#A+%G1+C-'E.)C-'A+%F0*E/)A+%A*%=&!?)#D.(A+%?)#C,'G1+F0*<& J3.C-'@*$A+%?)#>'!@*$A+%='!E.)E.)C-'@*$A,&F2,>+$?,%A.'=*#>+$C0)F3,D1*H4.M:3J6/E2+C/)B/(E2+H5.C0)@*$@*$<& <% ?*$?,%8&C1*C/)D2,D1+B/*C1+B0*0 -,,.28"?(!=%F-$D+"R8.nSI~dYuZPW=2I0'Q7.P81Q92M60E/)@+%E2+C0)=*#9&:' :' 9%9&>+$:& 9%;(!;(!9&9&:' 9&<)":' ?,%A-'>+$>*$;(!A-&M93D0*?,%>+$;'!;(!B/(C0)B/(C0)D1*F3,I6/D1*E2,J81N<5P=7O=7N;5N;5N;6Q?9L:4K:4O>8Q@

y14D*}!FCwVP1pzs2wSp{`Zh*IfNr2LFm| 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

xoXep*6r?qM2E3e1F3J@CSG{iC$yNd+=D3%p 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%0DsERL|_;r^4sfp z+dAh3+%cH_p^-Z@xaM2T|wR|}@EwhIqnmr|0W`3apJ9Axw zoqn{uliv|s2UB=Yns~F3%vo^J@q_R`-MHu5AN1e;;CA!&^CRhRlbWzMI4cH(?99J< zT@Oo{?la@oMScgrSr8ks!*(q9m?AJXJt{rI&RicPgnb~M`pbaipA{n7AI92NgFuLy z*f-aq2Jvd*sWoI~B9DqfDn}g;%e)z~GZ&UA3I>OV>{OU<7{*F;_FGoibmg+5BsroU zd}mvTA|^(YHf^yH%X9M;NsTR>6*dzTL>@9;0^?ebPd1kP2 znHfaWNP(-jHO3qcYzlOA9 zmU>4K9M7NN1?3HJcETKdUCOjd^k>A~L>}T`(hN3ELj|U+Jscjx+HnJbfGbX-Pgv4_}kql-0PslGEC2 z_&Wa6C%=wwHuCEu#@!V;Z}*cQp4^**ZyB=gO|;GV3mnVyp1**YUTr1INyOl*_;UUN zKD=`BE;ChTRE*o)i_5c=#eEl^yvZPl@I zQR;YW$e!{?T`+&c$t?3vQj|gAvhnsLc`T8@p+gjlrJCouWQKQLTIXGt+1_?2i#aYl8v2{r+_34Kg9{=|{q?BZQ*#1HIZ1v=xEXRJpTiG@qQlK}llSvd zem>{@oPn*HJZHsVDZgIf*QKPTv?{joYi7BvK8}9@JXh;W%PV>CZSUt8ekv^?rDJLT zSK4bcvMMm;;_*L)>c_n5x~TJ2a!g?1Cc9Wfjseabd>7_~5_p7@#w9ahSBEyzp5Ha72!l<4#WynMs@> z2$j)*Pl;#ZJ@GdyMB{+_>`2N25nt0c~H#YSBRt(AtUo>8v1t%;_G zpkPFqYRgr7DYcujwIS6`DZf;;M&CDsTFyy&&z7oIY)`i5O2+nwY;BopnX+8ZxGRi$ zGFw}r+L`5Jay>JNqt<3?D^;sNUzy0RPoDt7Z&{xTef;?UN1$&q_gMz`!odFp z@WK9~&%*xD{}B9@4YBSlWk#$!UmE`Z8xt_}Gbf<*vnF8J|Ih>|`DEQ$rDg(#{@<8@ zcxqi`JoWYf4(eddkAy#HEZMdk78xHYtM#Y+&`yHpVR9zWT$4E?K+>ssiA?ptGc$o3 z5+k0Cj(7<-XJr*RSY)o6-NUEnx!uE-!(I)N$2;66Pb;*&QZ#Z-@Kj%cp6}4wV#eV4aF-tJw6c8;FyI*AfqsrjIA|~L?>b6)dx)(xdJr|BoA>AGywb!xiK{Z_WA_yp^Qw_*JF=xJ~3&tIa}lrO}7 zYPhLsB)gt6WGpu^wq`ThGg>ZCDu=#>~|EH+)GKW{t2i+lk5N-kyXYh^= zmTPbGNorTaIZM(k%B^>TQ*`qLCope9I&kxZbP;wdj9P=84rO=jY9!5d_?n>nAw1)# z@c@z)=!~a4E0ClgtU!`5{;9KY`PQNfcTYE)XHWh0_g^2FlFmv3n(hSay-`$m(;Ifb&Arq3*YGoj0iSE4b|*>Q2d({!pdI^Gey_Oyv8{Cp80JqN%dDa|Oo| zNiua2u{<&*FaAR4hU&+if0%E3BfJa71b5Yu#`ZShd)avN$34$+u8y~k?kDf|=>twS z;l&4yhDv?f`GL%!VnfFUY&(Vr_72ZqruxB?4B2jz`Jhfl{Lu=&FLp>CNV8IZjRbxn zZJs?#@;}yGVs1R?E(QFE{;lnO!v9t>CLih^mg{__IxpoGkPgU|zN^yB2j_t_`NY0K znwF=B0qLki`-Aj5M;MT9zcCBat}VNtkgHZ~I1N-ZN1;MMOsuhkTV|IQpgqm(Kxwjn zQF6F@2@sGKK2vhDMt3QZkI)WZR+}9f%6v~q_h?s%d$pw zF{Qi~%jsr*A&_f#J?e-wim?+PFcv85#7E0pcp24rCGZzv*V9K6CI<3j7aIRpXK-p~ z;jHrsYbF2k+t}IIB`OOF+OOw2Mpw*59M<7(tnQ*<_*kf6kYi~m!IULi(Ycfcmi(WK zqv^zA61^5SzPL>xKodCq6MiG;43uq?CEq_> z_oa)B>({0814LYacC{&M#leN9FVfS~r_%{{V@xMw=0kZT-xQto_*qRTe3xXnCC@yBFUMT&7eCg3#;AoL3HzI!&bp*0KtK7g7cVi}_mH83c zeKs_E*Mz@=c00l@0U(%f{xbjkHF^z%moh#!1m{Pk(Ckfmn8oW1MH{FXIF$x?5D}1)NnQnAM!& z@s4+iDE@jPeM};KF(E`QCM?Gj=9r0M2;t_klFMG)T%M)WJ-P$`6qW;~g$Ddv-q>mr zi@%$2T{mCFRxdY~A#!us(JpTo)H(T~gY2HdER7*x=FKb|@7A$1xMcj~Rls=V5aklYX%?Tv3|(^YG@7 z^Q6&4%hWUenCQb8n9$*Jve`T3$A;xucSY$@&R_f(?2SA5g`Dq%Al^s68|%&fd5>fK zk%rEhQ0;A_d-x;GqlNsDF6IF>;1y%@w!vp$ z!9ALNO{hQ3eq^Yj+2d}=((GYR=hJN4!6joieecZjr4aFYNX~y=+Y60cfoZHarVynj z6PUjf6cJiun6`rX?|ECnk#3#&N^J!Te$7Wuf7-71mRH69&b&F|^$6h5IsDDbpD zsswg?+9&+`vq-!NOf&7-9FZ4M=cZE>9(oOFm(;mCbsxUzG^~MZA@GkiquQ-N&3$1P zZVl!s4MO_`ub>>gfs_zzm68I=$978tgi{|Q;dYEJY@BA(^!8EgOYEGV311?xM8j7> z@rOh4ky4hpA5K*cFJ-Jmwwi0Ff3u8b8d8(ame9#k|SCnVA zWZBv5U%R_z&*v!|v*QYsp)Xs`6Z7xsSBaan5P?@78y=+W5ga)0AtuIp;?^~;P_QPQNS!}fYXnAXHfU?L z9svp%7wHjRXobvBW83-%6bd80BZb0U-Mf0XJ;MyUCnCf_UtH%UVjEel9h8Ys66hi` zrdo5)(Te4HbN_@}tQFv#U-~{|EAVT`Cfd&lPW0D7yhap}<};B3@i8H!s2Q;#-mw#; z;Dc6!!bkuB7Dn9GWlDKe7uZ0JhjU$^OW+(u2OBm&;zZ}`bq%~78x@msmzKk)Vb26~ z7nhbd@ONhUOd=kfz(}74FP^q4)`-@j@Zh|+VZX)K)@_0^KGQgaU#Ju7K4vI&k7dz~ zGodrtL$g@nV}y|5KZA0&ZTM$V4irOv0sh5---0+}C#0jlH5tdjlL-b-&MI{u-X=-^ z`cffHt!Uj@Lb7^ALsc-2e;i|W&J@O6L3c)NNkkZr#2IqX?!<{fJ*|pLkt}@2;YfOgI1bKY^8{L zWd#MJz>4BRJ`39<;u2}qMs-|OC~3)>HfSnG(o`)6i@Zpco;)FW0sa(c4A0*J@n8!o z8bZzJy*VdXInTEKUbu~GMx_MrP4D8R<*wv|ZQOyt;jucCB(a{uGppSnQ=vFJoQm8M zcMgg;kx)1in#K8T7sxX+=zCb-J+DmJ=TN((vcCh#P&TJPiK(W>hL)`B1LD<)TxGZ7=(p)qD#gz~Y? zA@1L7Rdj=nR|LF$4D9?P#h2bJHSD<|Q7miPWNzwQeh|;G0z{rR0TylA*KiJ~!`H&2 zYu2<&D%2DeuOVqya9qA_6aW4y3TV}xJB&ZGMp{ExK~&9-+;lTqj)~Bei-nX`*OfNy zrx9OuG{4KN)|c`7;a7##`V7CkZ`r^vD^w_DP$i!#ye1pgZy&pH4 zqsElnYD9Q`c#=Cmeq6rPYjdBk=7HQGKKPBl;|9xv_p_{#M7a%Vii zDb}CR_%Z46mCks8Q>;Is@nh5D$2j9h>V9N;{8)*}(5?{==B_@F#XRI!G z_~_E)ZD~YH<>}UP8wi=l>$rs;@pmRk&;Yd6T1K4*(nI-`K&e*EHRkNd#do<X%AvEoM{yo7&Z)ZH(^QL{oW8#mf ztRqa8Q4py?507PsXewcS*qY_|QP-|cvTPOi9sah*V||i`*(`R`D;*@g(oY`4-X)ln z^SVt40iNWsO2UWX)21oL=d>G#5DUrjr%7&$nlGL z74-Q2ivP{uxp-CncjEZk|5Npudq)Z=sF5G}_AEuH@TdkQSvpdYr7RU$T2qmwJ{2B4 zl44N=N@_$=E*^%i$S2oOajv4`dWT3j`f!nck`8#gogcqQ`YN0-{UkPJSbhlTL~io! zSQ@I#L9FIubL-c{bBa2vdRL8iiduRD-}8@Z{n9 z>hD%F#X&R~KTz`PWXF?mUaTRlLL5cl)blvCr0uazAGef`WHZ7~Ip(~=t_25z&-$J5tru`?@mWTGa0MORIFR%bl@HI6dm>0`+HZaZyq{bcmZYp^rLowlt4 zppNfV7$Y_(zfaoVTJ$$ct+sdh3j$ULtdk}MtVL>SwLR|_a=eBZJc~A%!Zm&&=W`|% zS&I|}*=mzYSC4Z_XHv*o^lzr{4!@AYI+KQ4i)03~+7|eQr4*LVxhAP2+||Rl88+w2 z>c)fQVaXERc#u3W8Jv&_95X&0_!ZE^FWHA?#36b+01bCp z^M7q59)pV$tIC&KDSfGX2T2?}J67awl$UpM8*%OujP1;g?am`+@Ohyo)Kb}sfp%(QFxVYRWc(8J_{VJ)e@Ps~ z5qO}RK@uIZu=nvu;S&V;Sl)ebJiSu=Mb@?HEn4A-X)MWB!}^$z&6QzqbUn9cD?%)G3v4} zg!E?L5DlBI8s&jqhsu9?o|zmQ7;*3*9>^9`MD%t)4m0m#%c zTE2`|gl}-wvhBzF>)USF$_RTsT31V6x-Bto*`yol;pK-GkC@c z{MvSIEbmk?Us#(8%{`H1T&(NynWS3cI3(?jIjUvGC#AflbGH3e3_y+F{eA z-7ma$ba)t&i`TYnkG5r|?R?sLEl9wHwKM;%6{bZ!Ew*hmxVBDv!7mvk=g%C(nxbkc zlvv%mxv6tK`Dj|w zmvv&2buQRV*0~IBXIf1u&85Eib`gK_WSyy!b&`9?I>2=Pxhz05u10jJw?Z|DE@(|C zF~Ua!C6&Ur7QRa8wwSAH6^Pb!iERBhiyHTpxAH<>)M^&HgbHk0%?ljdWpT&OEt7^3i`$uBchzvygmTsN{ngoC(2r zT2oqR1dQIbLL0tk?_!1#c&FSP45MeC-^-2yXjl;Yv5n_IBl#k0kJ=Y}MheBt1fOMs z&oU!@E&E>qpD+A2A3jfC?!%|dgHM0xFySb@jcB1jnbW#7`<`gQv2xS{!VF0kHzQe0 zs`y{|y{A5y|Glq$!~foje;yw!;e)dyVm zK}j9%v=&%&8Fj9~CiTlM7Id@_cOEHa{f#9~;*pv{6NV=0ykArJ;Y8=szYz!ObE$Fj z3X%x|DE=)NPoEW3l*uC^&L6z*DI}jyCQiiXw+1BN*O^haVs<#a01kh9YTJOOIr?)Y zx%ryDZUT;WUuk>B-xW}M#jumBg75ZI^z<%bnoJ_nS+CwR0tHvU{nd=3CQ}`VI8%bV z3J-~-rxfh6%|S@Lyt~!(*skR$eW9|CkyW3^8a? zXJd9AZJc3Yt8gdKxm%;bOu#%&(b>8?0VyT#}{wEPViBOND z{`KQ&)!WW|o3|NHu=iw&{H_&h5r<~aTV*aN?#istLKA{gx+$v5skVxZLT{l7-KZTz z1-0(R+sTB59*kzHFE)`TR6zYrrVq+%DfjxgNso_y!9Oo}j1YtKi28g5+;@gP@79P9 z&Yl*0O_DAvi){=}wB880{`d5gxBVbt+sv8esvjCQ_=KFieY@AcBJx zjR?YMex-xmyEKh_FMo_$_*~nQr@f$Askd#Rj@U?LBiWW6MS)3ZCB zk0Vvf#LG4};@45S*mf3(hjpGJYD?T1UurwUx}xEqi@QvInPAUb`614daP=G9i?GFt zDPKsTI7~;i(eTz}kuxC>8L*#xs|M_kX5e>vL*qTdpca~l`xb*D0in9;7X~0PRANyL zYk}YqbDlIu8spAph3~D1Vgna)x$a;lAp6cl_og5(aF5-%tM_3|g=B^jZhBWo!vCtr8`sC3@97!$lP7oe z)}-&%Z!K_*AiT5Dsd4_Mq%NKrF18rjnn=%G8XYTz@%yx8M67X^VGTpW6&)2;JI+o!QvYajW_h9orK0!OWKxwmV%! z8O6)peegorJmf;%`-Yv=`DxFUWh`4f^+=M8c2X7R4g3b(02iI!&FHk#4CT29D zRSV4g%#9LeV`jqnwkvs;jm#tQBJeCnXB-6nr<&g6X?dyxB8ffaUUzMt>OhWEGoo-V z)zNTI^5AIUSpjKVW<(1o1*0HTweg#J(2)8iysc++dm>Zc>-0p~A!nw3r+F`EzCbZQ z2%YNl7YEm3PRY3t6-WGVx$NUB5f$@tPvOB?2xk9p;a)2 zIzt&J^W!1q5p*NBpC%oSStNg87@$iuJsUKb9pWDWLWQtxiLd3<&Qeb1)N3a_^o@3PRlw0oDu-erk* z>GUp3y~{FlnO#XYWBFIjKbwEG{Hx<%J^yCNAs1#WwhRnjVuzhF4WVipV6GH~GqUi@UKOasA4Qx7dZ|^Ae-|>09 z17(mM{0I9lrB8%yrHv7p%(#M-kt+)JADZtZ#=v+oqbh}hv+i`8~5QNTs_cz9+kjOuUx zx1dlEeR!N2)?tU$I{Xmv1HCXwk<{E!L35MGqQO~rM$?aYgyxa0d>Y89d^GSL1 z9eYCIX83NcpJ;kqm;V!{xGUJ(5uO}uB=0aB&XinO$PI4YV=!+XH*%{Pg+?=iOcpx} zBWYMRXB`_(xyNru9Co)e*#!b!b~=F7o74iakQ`WJi@RTyk5+@Wrzpn+djxOdBX)cw zFRk0SW0imALBVq;$xCa^YI&LOu~#2TnZMuNLkqsd_`7(1F4~1NloJ04z*QDBkCOfm z{xvq1P0KK^?DbE%-(3Gm@57$d_>?=H2gJBuP}%qgSiG_BWD081bH~Qgb1RtzdaB2q zsKa@lenIT=49$g|IXA!)LHFv_cxqUoJH!=pyW*TD(?uE_z`U zQw!Ay9j?4vmW9j%c*RUxY#4jv0b?>GP-}epctA-JxRnxkahdr&ZMk@Vo?24j)uAb# zwsfTT8z;uP<(2$4CUv>Q82JH}*ZtnBL-%{VgzoTq4&7rU38TkerosB-_P%P5aeK~( z{&?kovG4ItTkef-+7fTP(rEXMvu}LfIEwH0T7~WqECg49M{q4QgOV?iKR)x?PamK6 zjA`g~w-)}faVa}|!?a^Y4t@$~nMT2v^SJDUh|= zg5+pJ-I62IM&8QUh3-*m2vM`s^JefYxQjrtP(Ru5w+#oc5t8d8g*CN>ooT1mG^q(X zH|v)#fWMk$)i$jZh3@gYtD}X~#@f=X1-G&p7<%e``sPKueR}NCzE8K)!_7F-DVsi= zjlQ(qiHgrNGwuZ{_rOZ}P+4a_PP_j@JYL|QqG6?t$eFIhnnGZ@NH|G?@b5}mG$Yg+ z{+=13KQ$-sKE9tkvaj(Weh}7gD*mAl7w|qaNBa->xHnyBWXGDiGn_FUcKCy)!_x#S zYnOFYJBj<=T{*)j{DDRVdqCVmhQU#ZWNvKrj7^RWK7H}v_x<#4@Ei0Q$F^_MA=Ux&Is3JtsB%qm;=l#+xgd{f+6>L1sp}Jct!Hp zPk<8}5@#&$pY7^~=P+E#{ zlCVZS!950}P?_#)@vYw!w+ zWx4<|dxHYwlI`tatXH9f7~HNs2FHU)R^I67iA~NQ9ghG0t13MB*^E)Z{M6C;UG$C4 z^s$f80Y1ev3Y9WUY}28G86ieOAAEqP!+d<+5EXi>4}jLFKl$(r?mk4OyB`4QBjiKy zBfk#=Q9*FE---E7GSBgaP2iEfv%V&Co}&IJybXtNy$Rb~L-WEOIQ4r`Xh_F&*j-6fS$R>8^1j8wQ>I;kHZo_icxBs2+G`}K zceH$1S{}^~zk@`@PcFu;7_R$v+8;|gKbIFajJ|H~ARSGJisnLsCZMWcC z#Az+1ttTjt3C>fTWZ@UjH3!9F$OAR}i#^6z*MXn}QbEIl2>SYHo(=asT9h)hZy@T^qY=-FTi#qYSjHIp( z6f|EXLW-a1pUrtiwv?gOaVH+)V&O=j@fUFSvKTRAO z4!xX3zoy`X-&5dBU9OwnlG-sUE{SAogVZ`xAMh$idzE9dmEFIi@>#F$Ft4sMTlW-o zcIGx|gUoAAf1hKU?uncDF26LjQua`V!0}qal^sDfpK+TiOcb22kZ9O;GNzZ$mTzZ` zm3;f>2fRQyMi7#1stx@H($Z*=Z#D*(4>T}Gxot{1vw> z^_HCaC4t1ml<6&5$W0$GkJ#)1^NiVQ0(75SNkPP!TC2O>l7XXDUNSmc{V>(k)_b+D zpKNN6&(_{aZ5BA{tmr*~?8B!%6=ZKx{a*lC^;ZP4U*GS6?5)_oL6#4zXlCAQqe+VT z(2Bg2g_dRTz=zgXx#@$}+g%>CstICXp!M@d4eG7%!12r%4LDB9)@G;$SRt?Ww_feI zZ0&cb%?H-Y?+RFtZ~RnXJxuj~0a%B8S-@)hwFj(~(SHnByCK%0f69W&n|~ivqd*mg zR3AkVQeWk@{_?Ld69gIUk_I%g; zts(*nab&z8*Sq&$;+ZmxjT$p?|9oCKdwnjy3=xv!&U=I-AW|^~SB$AuUxk9tqucn( zpLzcs_zmJ2dE(2s&S?1eA{oiA;{IY@-u8|{5DP3N0adOEIM z;h6;QntNJ7nl$mf_+>k1A+n8?Ro^rqAOZISq}U>bizBaqdieyPxPr6bYbvuwZ$jZ@ zhFm@#`rS5LaT_|`3igX%#13(`_|GAi<7Y)kR%?DWK&D{Og-ih4jWvIiS8z6m4yitd zJ5yZh7Z;i01GB~Q0avFXQ>=UeruAF=P;sd#elc78v|l{T6tBq^%QIT7%S`bvvc*5~ zi_1;1)Z3*Ak@`Z*e{70Wk_5L96R~+^6Wn7BqOW9==FOufND*nF5>itlxUe;SAXD`cf zcb-2=28x*D?q2gxUgRgdHsk4wvGlw-hPZ*XbZ&!}=I%(0q;2gKe3b$euq3?047zYq zsXHKBQ`f)daQ97YlYCi-FVhKZzH-Q40UdI34NcXXSZL#(b6dOmtQhpVKr1Jmg_Dk; z`5^P%SQtD%o&9)~jIWuJarNFPP%0Ep8fJy;kX3vZo)Wn97f%|;JzhL#CEUx5b<{gO zgUCsezDd(_!Jx8dO?1uDgXi4&CK%Nq2OgVKpG9De7w@Hy7O1@sFP+)U47!N6kdQQI zOn16p=Xo!FcbT4LVQ;@r#Lpbf?2F$mf1Em;&l}37Dv8~0DeQ1J=_JF>3fmd<@K=22 zl2|p!LE0+s=&yoVhlmv6Hg;-TDLIlcY&#ix>Rzk@+-x!>lPGgfUiS$HpZWho;;Uhr zz;EfIQ1cl4t`Vt`0){>>duc+d%ahiTBMw?LsZ{O@(ZcT{($#Ipg9FsLDAf3b`(?Ur zZMWJsvzX0s``_?`<9l*Ru&vLx!;Eehe-1@5F_{Nlb~@AKnNMokdrPhx=>=yj<1y^4 zUT{YI;l$sM?Jc=n)iSw^^%`Erl9FG??u&EZkEwG z2|JgwE~qN`rqEI^aG!m^a6oW{=5+<1S4GLix%%HyPecm8`jrz+^*OofB~)7#8~y5^ znWv|gd0p>%Q(OESYc&^?rRI(`@e|9W&)Z5VpEY%Ce(*$UKGP<0`bpY5fAuqOPv17q z?CG(}wXrhrDhs9br+~+eJ);dVQBLN)gGcCdGz<0oa>Hh*C3hl2YK%o|gfunP+MSnQ z=k3l7%#u#T$H`6Aw?k*Q+erh;rUZ76|SAwumS{M#_5IX zC1Cj<#$;Wn>V;eQpMf<^#+3@`UDOCee;pgFJiNx?a3e!k4T8pqXw}z)&BrIIz8-2C z&hJ3;;i*#sO||Y<%@=7IY`v229lIlS%wDA|ty@XfUR`h8#ae|zkm#P@PqwlfWfO$;$L-z5Q9q9Mm zVczR%gL+@n@a#kH_kWk|zbsCwPYt;3EH)e7?C$vKu3paRi8>^p4rm60IZ6?=E+nqo zS38LXF=*Yl3E@d#**Vq8(>y)u1(ZD8qH$(w8r|7%1?2H`87!zKi>e)ObXXb%k zBED-Da{L6HI5A|h)9CvPXPt!KyjLpa7*ssAB!V*y=~Bp&^X?#hq;-94JA_qeI|HX6 zFziL?=qD)0O{QkM+fCBM1P6#f^Ln1&&b%Aft(wdj+(eqnXT+VC2y{uLQ{l(EH;^$0 z%9OsKryCo=RJhH{wu|MfCz?Qfgr60sXV!2Ye>A}XoI~vq&*P&d53SpH_KZw`5Nxp? zP&KGzI3Z`_3NRE?y~&32=q}?c_}4`GGG=KP7rX-5ps)wy)&yOE06)i9EMp20P`yM1 z{#S0HwQC$^q_wagVixq@>9T3x(1Vr3_R}TSq4UNWjdY1GQtJM(5tNr2_%QBp0KysV z^{sKh(WCFeZ{@Nr@l0S018@`a`2w$5vj`4+zU#S3)r@7>-DNi6YX}#*(M{2%4^z9F z?Ada|LZc^=QLT{!<9RrYvs{`;N(5ICF1D@l9ZpC-**Ht`R`566D9Ov_hGi*QD(uQdG1yat1=Pqt4O0(wI z@!Gka-6In~tieOycK1eCgbdsejyQ8sO2OaA&1#GXg!HiTcuWF zJ0Ng#oD}PV63DsSYWtJ%rBAlo&IQYq>3lYdr547wVqGA`*W$j?E~Jc#^mftJ!kX}7 zO_QaXs`KV2<|v!IL)fmPoQ)Gk6y1~woQ(!794oaZZi<9AUx(3VbIf@z&d_-_i8mb| zthZo*=uI{y!aJHy&hy8xGm{8A*b{Y1O+&u6b9`#t9R*kIp9pVHzS6y)dF)g>!|C1LCm>qKurr1NGsB{FwHo z(VRmM|N@Oc5lh;s$?1(e17gs^Yru~ zppjRWW#@*>mArMpt{k#>ebKbMwfN_ms_ zzLUySUUEsc`i-B#&=E?`tL^b>YqGVS)Dkelt9*el!_I=2j6fN&eSrwq}qMTy zZ4}|N+{zLpkzD)E>goa~LD~Tn)~O z@e!C(+k5O(&+z8`drLk9t)9?cc$qrVx~W&@tcfCyGqT&KA5kjK#^-l;l-J#*<@EPh zet-9R{XOB9m~Rw=F@nIGDC6en z{{E3&y#zbRmoOFj&qVzR`hkHsBgKOo-1}#MhpE-2cKGEap_n99qNFlsN+g$N{}bO4 zJU1^tI+7}3e#B5a?=`xR>Y#^IYBS^5RFjB(l@%_tq@Kc zNk6A;BhrTZP+K257`||~`C&I!<(!d4&$3O3!J}?ul%`J_4&B7hWS9_ zsGx+xe=}R#1$(tKwZ{LhZ?+8V;}9kTd+UaWfGWoYfd9*i&h>IPak-weZupTY4ty<< zDVNp_Dm=Y>c6{D0v%J0(N0cPv^%K^DIka;R`KHgpU1pw|O*r5;x1xiD&3x1x_Cdt& zCU^GhO{HSqUY{Z6jY{wEuPP7XPsG`oNZ)AMo3~9SVF?ToPRa@LI`Id@CG+FjrsMPW z*F^e&L^_VvGmc+pN2zIM!xALlNH`ZVgZst9tD8u)cz(#kmjr<}6GTq3omw7}|2-Fu z5uULm!Fc$krh^x2>5aY2TY8iviBpE}qmSyE zjNQPU8G4T0@oHg~lF;?4&&3_PCo!TUo~bs3>8g_xPDh+gr0a)bD^KIQulK(DOod7w zM_gsTEl*_&67`mhI9depuK6M`m&1Da3*P9X^5VDj*H8DDGoq1utsymrra^L?(-+CPW@3tKAiIP9rl5FCB7hJq*RDj>bb_r#kpCYlyup^G^ zkAb^`b3j2ba)z!4N5ggqCx3Y&uWDjus)H10?_kwT#~~lfJ{uy9&kfqWF;>Y5cAD5A z>5~<+n>W#aj5%Lp7q%1hr6UoJ1(S!`=`kJM$BIPv%|iDBHQ{y1{Y+JnT{Wd6m_$fv z>R_3DS<^jW8?nt`TZX)OAqtrx_5I>Sr``sMHly1e!Qq$3SuXn{;}pijB!ipOrEt2Z z!(t6=tcnxHFV%qwxoA^Oxbvz(2y?T_?ew^E>`?>|--#9c83Q#4UdOh=5A2^O3OPkH zuDpgFwG?8|s#-9QFhK**SP)NeeeyllSuhuSNK0zB^`z~o%vaO0lO~+;jQ0J+h=KNs z+zz_KWs8>YH`}Ct%%pF(Oy9gLpm|FNby397A2SN~ncLBjJff=I4?H;3$RqGXX$?N- zdA3*go!?8OukOkB#edhFb%-f}uE_??`6>0<9P$0d;?AKYeAde&xDWKMN_?}^Y-E{0 zwL+2xir*h^6-z9Q76-?tqw@$?c8fY_MDlh*{4itwH;wt2eUACr+q^L!uQ4B|G3Vg@ zY2#J*+3}9=H(u53b-dByqP_tS?Kfb~dYZ)6X244|;0A`ZcOakO54cYyIz0kz3yPJ;pTD_dU;l|Fgbl&-JSB zQMaty?DtGbWG)Pxl^OOm(hm*nlh4fhz0ow@W5Q|*H+=dUUd5LlY4j*2*6BA|q6dCBhoJLuopXrkcNMERBgQ1^wKL5yp%=~r@CaVy2bioCN@hJV=mdL-s5 z$5fu>6uHyIL*sXY*W}P1u-ZGI=s>xe)}vT+CM&Uw)hbVA_se@9$BNF5?{7Elb$q{|ShM^OjIZL;##gbA@$Esp`o_mSq90U3 ztav?N8_tto481aypH8gIz&jhede=Bz+a`I`DmVT|a^r8XTICI)@!#u@zrmf&K=*u>pCdHC=+)S2E0W`Xcz` zi^}*{Vcc!7t|=n5cZmF`?0%IypH`@6oNPSivx5E^wXB|I+iN%CSzB^h2q`ZAzipEN zNM3>X&yez{!Iu+yffy%b^}In-3nyA>J6FT(zbvkPgZppiO~<)bQp6bK?lG5lj)=#%k}l5SjD`)^1+||C|~0D^z!iH+}X_ zq*Q$maGdGq!T=tKf!&$ z`M~`J<*n_>lZeI!UVe^wDRsK~*-HrcUD$xB3dM;c0&RD?yNjG|c|H)XC8`yk=l-zK zeTUH$x}KZE>+V^md#jCrcm?6VB@cHG%8etTalHH!%#Yup(pfuV4f*c3TVMN-%Ubf? z%L77c^If$$??Mz9Zf2SBR4e%ckINok=1#sQBq-k%- zB(L_?TmznBY%RM(Zb$;bKsjTY&m!0v;iQrSlh^4yrOF;06v_Q3StEn<7 z?6JnF^+vBRq~v_XDvPK`>Z3fx>Rm&mjj$GZYV1kFj2gSOTs~lHTTLfGS~8+>Y#nsw zQ9_Am5lHP9W(@#EBvwP+qZlh20H_HDGPb@Mh`(S;0G`C4ERDN z4EXrrT|uI5jQBF$E015^dfN0>KlcPrzU$|ma9?>fwiCj=wBzJ#f-7U0|Xk)m}m zQ;+ddR!;tHjqu5(?&_&1FbF|bN6BfI=ii2;t_}}xd=0x| z_$!T%GE|H#(efEGFwe$)H{hp0#YFFhOOU~N0C8Y$z-uX8$Yn5F1XuaKK)+jX70%%M z!BxIo3@f(Z6edsR)g=5vKYKQb4+yLh60LsaTw|d&FVZNgc>_m~#tf4W2|7}|P!GXu zKYFwK@#S=fW*7GY6geGlVxC#&bh&Tj6(4}fm?6>&-&^Tk{SLMbyi9{;6bn3LF)F9X zL&`vuK;?n*C+>7*GZ5K%8HnI~vl)oykb&sPX!wk>#u9_L@o*QTPpzsjcikvn!Da(y zXP~&aqqEtFN?6s?6~5g|b#*xI3d@t_d6|fegN5fdUFjbFE<0rg<2Qkhe1Nxr-isM{ z!NUg{fOE2Y!fPM1^Thc;J5^QCG??@PC~ZtvUlo&C9WE639Lj8;;iST-I5jvaPCqx-|u&+ls z?V27N@0W3&VdA5QH9l6AB+0@lEc!mxt^IITZ>xQ^Ugtlo2RGWIJ8kQi>#YZ)gI$V@iQ_$gtr*458cLKO4H-?m7gE=p%_L@=8|dm?z+6Yt=`>s?@mfiT87Le zQ|8@OdUw^{U9ERl@7*IoIT#bdjVQ2$Q|@LcPIO5y-KOw#Ix{1$ zAED`y@PCKp+TBU5*Y3w&I~IC-)2Z>)+=_yxFVpnoT+?N_rur4Z zIrUL+)|cX`YoBQ-X!-(YUOA<6LflbYMZ8L~PqiAjn8#W(ojljOs(USNt(aSbv%W~A zg~_RF*Hjje;>UC_9HSC*HQ9--sr2+1omO${GlCdl7`h)f%TXbS?96S8=?$v9+#U9| zJY_dWQIpp(aSO3gxA=(@rL?UzG-5Vgumtcrs3jd-%o)=vr_P1rDX#hECn3|<6bz(= z&yw4P;HepP?-oPtq~|%9W~pn-6Kra)Q*Lr3uhfzd!IXz+jq{TpZVkURncPQ=VM)Rn zwyLJ^<+GfkKddu(f3@0uBr?AY66qI6WGJ@EReJxn#<`yGrk_ z+Pkau?&`g}2JfzgOWc_kWO&(GX=|ZNZ!Q<|i&|+Pg%o{Ab7QWF)B`k;!cR@UlA_UK8oqa`ckmQ zN1(xzt6DoMc&Smxp-Azu$1BW3AOTGX#K|=%2Hexr%y0`myQ3`4aMS0}6GyS_&OhCF z*T{(~^+|72HE~4$GCY5hjkF)tX{#vS506m^B8sQp(42;I5dz*n*4k z1rJ5=1IHIUge|z(#vY6;m z1g8XM$a?*0=sr4;F+?U#$Q8J@8Sc$nb#haI(pXsa{)#wTORG0hWfp|BKue0R;MldH_jr`BcP{N`^Z zhHtuEVmPI#xedm1j19Tdz2i2|bF3lXbBvnL6uCeDNd%Gm&N-gQ{f8pYb8N=i7-!xb zLz#SG`xRt!3=Bi`MR_&8#C_`!X*U?D*d+I;p9pM*d+RN6&6j0LL5|*%(SH{t#06k` ze&fyFUijlv`ncawqH6G;tRQ&bp{$^c=oNC>_`Tueo>+vHCl)@i@%2dW>S*}L z#z(Qe#;Qz04C{Mh$B?h{>Frjty2fOMI}Q_kh=cVE=XRZ{k|c=5y{67Rd9WP9lQV4R zdtwiaE?YZ~f_hz0U-dh425Z4$O5{FT?eD*~bGuqQf&Y)UH-V43zVrVRGJydC-$98+ zr4lvP*iearD|ApZFat9%gHb_)qO$8nTeWG(09w(=B$(;fvDlxswA*dj?zYQz``@yy zx_CC>N{}ny1;r!Y-xv?PAcC6z^Y!_DCkZjs_W%Ds{yfNhug`tFKkxf}C}M{jFpg1f`|?u!jcXvr#VKIM68cWaV}FEpz^O;(0PJrjY_lnsQyoHANH!hYJnUWs=Atg zMeVJ$v&dO-f0iFM1_3r zL3EMw(8>FRkzxK@vaF*M#8ZsgcfvYCC(6~yv+n+tNwm{>W(khFx?9i{#_x$cclT6+ zZlF#Nh)b?Q>CdWPPGZ#IQP5Z|J=@V*ZxGXKh_v2E6)v$ZR<@%L^Yds7&p!Hsr>SlI z^#w*>ZoI-Fp`BbkhxO${Zes&kB($Tzr9t$8;=s+nu$ut611BW_Q;qSZvy75w^AKiJBEbJeA zSa=9xNf1rvZbu(86I~q;&+-7rfS%>SQ+##iPo-_*)cnk(?NwXr94%7<>??LSla$8p zqE|RK7ztMe#ky<^q*~nSj&`-<{+bAZXq2ta$F*W|_%2XzN?7Oo1){+&NNb~658d6B z{8+-+atUK62{fW%j6_y!^@=XWTFzi)svx}J`4`+XJ)6Y&$^5JWn8puq(qo_ON)Gm7 znyg5fvL-&Hb#+l3pNqWZSrpz{$S#DUfuti-)U^}TwQq0I!g2kM=b^F} zM5O4CetWa~79XKey`2_N&*0!lQx!YEgLLf3e`fw&c}I3;Er~s>Ct4q)0^<2bpKdo3 zoKk(6sR(AwfZgGb4#!!~6Rq&aWH*Cr$>`IsG2ul_(n-$0i>IsbMVV>jn9f4Eno%Aa z4es>Jrx-HEzB&3tRxK|2SeCb9@IFsp$a=VP6m(KFfO=the8P6hKur!EI@m3h$MoJF z>)q;-IBhRNd|y28>Y{`_JRaPc92!gK#TcN@WDISqFgl6gJAovJ=rM5^E~mr^>=;9{ z5gAh=9f-kx!8dCnjj|ECj`(lqBbg_`MXF_V#GIKLU{0mM6i2Z!mL3+D!ftw$6qI6V z$d;L8y_i4vejGXUla4oxXWwYb+(l;sG4-sxt2d}IU)7FIyl#xhnamk9{aZ$j%gmpY z@&Z!D^rLueCe!F0?p1$ai1n^J@x@q>s2b~_Fi0l)z0Wz*wIN*%zDfmx#cK$fw?dcN zF5#p};A4yQNKM4MR1=!4?d_P=BM{qI%8GsHV{Jt?&``bTIFZyaPV~(=W}fyS z$2`+U07zptKmQUrU6J>o5GJ(qr}7gxeZ(Z8YV&sUhk~G-z!-0iZPxf_th>cXB2i4v zlr9dC=Mw$Q)MJSFK=Y^abCj&NdRfbrb)vHBXQm!Qla!U8qh!6n%Zh)az{O*fRX;QJ z7%Em)evXng&&yh(tfk7TpP70LjZ;>Bj*_*NS&oQ76 zi+;1-(4qf!o4dwbdxRo5<3^_1M{Kr)o!hLXriJwEEs_Rb{^6J5A^MOU#|gAH%bKMS zsc3Pju2SpX?=bLDxZnW%fO(rn_YtjX#3P75%&|lV17W|<8Xxj4=IrvZkA}`l7XSis z%@A0=Y1ViWEH0g87x-t|K5J&Wz?zlz`9C5iIv;T5L{>bP_hch*Ecn>&L>U26$72Uu z5VMCxVgILx#nOXJeRx3Dhtu$EPL+XJx&Tlh-&a#r9A7wwhPmkzGUnSyS;AKBDJ9B3 zmF&|fH);=$*@J*&pvZbpfC!WO6mrLGpyzO}LNCKmWpGog5VvCj4uQoZ)jPM5rf*&? zH05T~NVgWZiQa(BFae#)gls{ZG-aR6X!G@1l6%P^@ybkN0^f6AHzIAV4_21xj{^QyQ3nQ8ub@S{av z@1bv~c$zlJEE?6kWTZ8|bqS!VQ>kiRiw8F?I>UVIP49Ieo0dvQyQ$_a#6xj=AN>Dk zt<(f9HH--W!KtPpfJD}ESFyGHb@pvMGt=LPepCI%7g+2wHQ;0#VBP(Z(xG(B&@p%3 z5UHl#)TX&^YPma01eu#})6KYZa91sG<2%{V{f{TS_EHBd;8GLrpIc{66z)aKB6E(6Y57;S+0H1rd z2FsC`7RM5qSzUd{hw%;pvAhW~#hj`M!s^2GIBFAhnw5-BGA~md=p}ztvxTCPGc*@Q z_rp{hvsu$_S|(?hy6Zl>1SK&X*ZVuphlGMb*&*MS#760mZ|zuWLl;FQ%iMLbPt(F) z)0Sed#eh_?l+#;w$EOB$!n}mfGA0)W(eb)@i3Xu8T)(2Lah0-V0DuSXr$oStNZLJwJ!JwC>F?KQ8?V-FL5SSV6jQ zLlT#sI-0%DJM!Bs-d8bLx-gegW32S)AW@gQzAz=`ePA*X8iuG1kc6pM=y&rn@F^7N zcRGp&9<#sbL}8Rr0XrPIhKt$g!?Vz#P-&9em>(_WLp1ogRWGhtJhKFVd>|hD#Hv4) z=g^;#$mPV#y4g};Z4;!R*k{joDgKf<)_9`vt=K@X;<%cm<%zr&)iy+gQF?60E`70I zjF-I}gI-TyoVV-K1bTD#%Gy7XxwJdB>rkKdGt&<5?22`7F~XaK>_$+3e`?t|J^DwP zf@3CtS_Hy7S@PkX1=dg2M?r=2cEO5y9`H{5g!S0!-ToZQKY45j4<*SF1hIO#OWzV; z$7s_pQ*_ukZ66D>uChD2>yQe3UJHLQ7<^ATAe^_qG&AjMQGBmK%yuH3CoY&tnMZ_^Uuzn|9@|Pn%(~F^!gL(hW5SV zZ|o1upF3aDzEhu&R0Tay7qBv6)u+ zeWD4WzzS)2*K8AEsG!*kv{4qaIgIxu*HkZS54hJk<{7cx@+agNe>0HFEDtdC4cbh7 z;xlLRN0CDMRJmlxo*!O3EH;Bo$DA9MXZb_F|0cNkd3Q-)N=i@1OW#S7AO(-Apbl5n zsl%DrljG;)&`xHHW*q}{9H{%kL#vzL9(sfVP1N3q{~C_GYBu=N;<-KcMwvAZum?4o z{o2sIZfriR#2U3=W`BWHxVw!Gmq}!!Bw33B`@qt zz;VLteFe+;_G-ARF!8WzXB|}#r(&gu`n$<-!%8m%)l7TJeg*0h-)iw?5~`PG_v_ta zX=#1$0W8Cv8)y6WAaJYTk72qPP>vh`TrDgkG@xpT$hgB)d#Phx2@oQ>m*LGl1Xn&{ zpJAK~M1m0Wa5rn}#O#dHI5ZHVIC8LWUKJDMSU8xzU4DRS&p!qtxOaaT>l=tfd%e`} zK=x$ATNDpASu4~bbQs`?I=>}~fSWSUq-=6iqB|7N6ts#g91>5@0#32(;ny2i{^7Fb zNZx*;-OK#v0uWCFuRv^#O)uSiD*2&x)_y$yoPseljC&GPz_URmXdYNHVlwP}Ib#4D zZ;RU&3%+PID889SGg?tE?U;Nf$v!?iHEWz5zcf?xIy~bj0Jv8nQAUez%Xn8dipFTs zfy=k1_6`X$F>mR?PcVLBM#p>+4bK0gm}W^vJu1f|6`wsVXyH3 zbFta z+&aHn=1RBD6Y~-Gt2$RuP|AM`svWhRCcp&_kaAyzn=6Y!HB=G?DEQ1=luP9k>77^j z2xGU&6`p+U-%Zx}Bbu`BvWki$9w$R9z8rD$B4c7NY z?15}Vp)DhAfX(J@j=DFLM{SHs+_u=wC8thdXVVKm`d{J)WBiCAzKy4zNO|0v$`3Zq zXCG+xB~cZK{!oW)qOH3yuU%82b#XCww9AWNf`MeD4)he_OW{izXe?v$m94v< z<*>~eOzR{9)s|x)USB7l1&d5LCA`=Q{j2}+=PZ9$RPk7^p7w^Ls%Q6+RvgW{L6PcK z;dd*197j#(Nc~28%cm9pL@QQ$G0eK}GmTg+*bJg^G(m~f509Lb#RzeZaIEkzY@2Q3 zmlsfV)XubOv|#_=e2%M{D`GZ7Ang z2s``vN64n%>+F8Y;7_Msru93o~HeT zcg1uT=P?a*JV_F<>pcAaQeJ=<9tzZa6C)wqZ?4Y{&VVfP*Jk`DF)K z$8ye;%jpM)-EAM%4qwr}Gu6J!OcPAA1{|u62e#n;y6}I2J-t<%JB{Cw(K3HuQchYB zzc#ResGUFPtt`UV#3V*xY8dO-i2c5TJXJc6F3IAmt1%RC?8RT0=udHd4cpU;h07)U z5P*$HSz$^*14eZ;3s_b=1vhds8#BN=0*k+;cy$=0PY1;2J5bXabzQbaQ$HvL>HHnysqFq;kh$n==j>8ZYy7WZMaWZE2Ja1g$Eia7`y zo%63XFHGA^igCOk!N0z1pmd`%MhV>GZzb&^;^b;B_y=0U#cb~ey@yuVPP9Q#9G!sG zb|R3YN0s@%`+3cdXak&>Vw&^<;Lj36x8RaDTL>O;QR=iizT(rud5Uz z^eEkDy*IiTO#Z8#3|%@rqA~lf2ZO0+gjYJ>z#tj5Lc<3g$#bWH|~r-XNH00~!Z}i|T;HhkXsJzA3o#(&g&I4~nz! zaPzc4jtBp?I?a4^;bP~nx(kEUyv_TD4xaOG`s!|4dv>uoAEF0e!6P5+s8(mL3bywX zYMhUtF~?`=b^9rzqBVA}=XG#b4gQ+n@1ONV6)c7XVG~SdtNs-x$lFi$VW4-P#cgi| zWA-q5e5HI&N;dE8(ojPnIj%cg5{B|TMOd&2%5(Ch+?<|php$|w{!K4Uq^I~gZ=SGw zrd@D~^Z2)N(XW62o$`cR6b%Wd#|%*rwtcn1xZN7D+Y~g_YXhiBBagk_-x>zh4vhp) zu*~hMHC!gw+n2o*s8zsC!fQ2K9fhwfvh*syB+^V24$Ii89$Q_9%&X z!#S9y;!qC=`l4Fp`XapcJo!a@*@b+1FUW^0+1>$CDcxA2t*7af0UHLC!NaV$_$ryO{i=Tlan7jg2 z%1f%}Khwf~U@g^9rL%@v=qzD!;xyzZQ`5flGz~F(im&4m@ho^?E}Eig3*!E2_}phO zN~t>t#dkXA%TB&?zKm|Qm+O2%5otyGhvu%kB^9bCaP69A4a@&nmWr*{3_nC3Uwt>}MI7+g@%PGJxTzsv*2GKpqM8VGt~jSFKx z#3;+W*eg{F<9)KRyU_QvhNduI23dm0kMmLbZwbCRyUn*xvl&<}ai#P5 z_XOd1m3pF)UKq8uYHh%e`9LQh&|3o(CK}jAr@tD9u6$lSTYssG;U9X##qc#snP7JF=kdYtN`Fij?qO?m9<1VKtm>lqvkmzP9(8Q;YR1CRaI~;nadW zHD?xYVRDJNoylL0^_9-k3Jv2E)keDpWCLH7Fz?!;sij4M8qR8t@``}-?)jQrP9d}k z!T8QKgDl;luO8*MpVcVOzr-Eo`(HPs477m4lE6sZ-z!07*c zosmp!tj=;Ud-3&CiP{0-oO)Yxm^YzGh&^WL{WzYa_(zi>w__9;w#9Lude=Lv3?`ZX zA1`=gTwk()H?j1UMKKWUSb9-cEd7K1FhdjRYn?=TQF|i&gFT4QoW#x9X%8~Y&dE1@ z(H%MGKrDS{G5o^=Gm0u|(Ju=o67a5o_;%;as-F0f+nq5N z8y4U-s;&^20=cFTXCkWhd&N(SbT0D{+T_a zw6{Lf{-2%Qa|msBkcOM;iq-xZK&u;>0l?c<=Z{GJj8{`Iy~Pk!;+dLt={l>EG>2p? z;fkOC?1T%shP`W4SLae{$!346XzE|dzI|K#d}a5pQC*$UWViEokdZBMylA>W{#q3i zF1b#vsI>k!|3RJs@U-FvUN01;H-~~Mk7INy8f#0wqc%E^o|BtnMvft>4caehj3!@G zxwzP)=Ps&x^d`n0`qwUKcH$Sg<55}j2E$+FOyQZauSzeeG=+c@*ZxDckOhlRBGJM} zC-vqp@bWJ(`4>8$%{KWLrk5-*`AJy|BiL<3U~!q8toNIrEocBfswmW2Y>$)Q< z6*<3m%PUGR33N_%&7Ol=S6Tc<{Czy+L9r7Y-Fc6ZsBfaO10;=Dk&nAK2lvmlhp}6!~hw!Dkig%s$!qI$wDzg>wkVa*pqtxHK$V zGqXjB1`@H~4mH1z8|sfkb#LWDT4iRy%WDHZZr~i9xIyJD!E=6d(+MH$81p0b-L;oE zo8zW-CT?3ieOWaxlauY|Q{DbWr-$)@mueb0JLB7+c}GB=nb{4EpAK)WPGlBM1eqzEg5?oFXxo2fb^mlr0WV3Swx*GedJ(Iq$MU$T z(EP0qp&gsoWVfL?C&KcBebQjRel`5hR*;GXOyBeXUe)a`FK;oK%7I0AdGx|F-gVfh zB!?K^{Cojdk0%LJ-5n@;WLqY1^iAY@$YACfKJ1BE8Z+C?Xa@8>4H&T|u|6aG-<5`Ec?BxhmjQyen?h{X|UxT+|5 ziIg15Fvsc2OAko|Kf|A9`aA`yVTo)V75(OPi3l+CJ;@la!%Cxax?THFwFx2RSu+n*FJ^z@rh1q&Lgi>!tm8rOG} z9??nae1A04uJyB%)SwJ$e>w^$4?m#kDC;E3LWm;XZB*;ije-t5w7VCFOJn1He$$Qn zIji{6`JTLO5~NHNpfTZ+>ZA zK;;~KGuEJSO=$Qz>nJte`N%*JLOhK|86o1A0G*GlYxaQm2v|2ZW zGM6E5+~NFb%mpBM`#Oj56S6;wr>|;{r5`lzt2xQ?lKFOIZRfC1Cc>8aL%75rq8J~k z+W2$$gGG4No|q7t+Dq&`o_EF9OuJ~$H`N~P=}4O_l4u#sntiU%LbLzl>3R59JOLY+ z0%HU7e&-Mw$foDE#n_$!3NFg2ofqN=$+|G>DSKB~9ciL$$159ui2Fbzj`WB4rScQ@ z2DLpwM~W!F7)<{+8tH-RxS2ZK_G@|5ZYn5I1ru-=V)T*Hp)N!M+2-%>94vL4xzI{; zN{R<8^2DBI@9~;#ID9}<+&HcrU_9LR?ooRo5FXNUPGlY|F*^VgSv}hC#LFDe(pVV> zSfVlXxSzM)_?|pFGvzEyK9b$rFXvE zJ~Y}k#L_d^iGu-YFw1Yc>`q_@)!!ts=FPNaS@g*9PcS~|tNr}3H#QfUK9VO%X%U#k&xrxnm?Y#$I$2>v z|E7nkgWVnhz7YWhd9`#Gszdg^)RXFZ&f+VGs?u%r{FcIDL^Vr#9w@)9Xy@x}+lLZa z$gYzL#lZu@u0xpVo=y<92;`H1Cj~|`Ye~APT;CRE*qyBY`*7Br85@G6s5jsr!`-dj=>7Fhnrr2Q+@t=NhIm%W$S~Z1n(z zWYDJx%CFWobGx7{C`9NwN&JGlF9ZGrCf!Jp__BkM=N!c|SS zA!3Bnw6VbKR*z@@N!xv>H-if->C;nNJ!=G^0 zeA~PZgV)-1?bJv-_^wAP*;&rG;lji5{nAvs5Pn@=<1}A7r9DUaQlg8tqyk)Wa_TPR zO%b>0RI&TMr1$+e^IpLUNk6IgeT8`+<+mjj_g-Umw=Zhn-A`yu=EuPy?({rX5z`Ue#`mvdty1qTKyvE`fVhAK!GDW!KXEvf58_ zqS&t52hx91ueyleT>+aVWQWZO2y@B)rEi4MNC|S0fBsaYdb-c=0_h#YT zUg)1S;9J-sT;FOfU;MFJNf;@X0!K|%7kJwxhYkT)@;pC>tefC)$Fo5}rR2i?gomm_hh>49Xh$9wsqi?YTPQd^U@c$pAqJ<*>e*~J zfqUG zxFEC9hWfO2e9WF*YWNP9x**@2^Mt^MDEQc6$9v+MMLYYdG!3pu|I%IX|@xvPuz zAM_h{S4E)%7*=FPMDxYbEL@F%6@C1e71_lHUyP{UR%8peC`7L3wwc@91Ye~cTPYfp zE0{m5ebJ&^AqNm6NE|OUx#BQd@R|Jge7)kZ0G)L*cMvhHN{%5}teFSQyLmi1;q1G@ zV`!06IM;}462$_pl}v5<-!G8**%J~d3};ZX^gUj@%IQ9*z`ojV#minJvR79WY|INI zF$QaIm}*y|OoW!RyD}A}rBVgOZ1~?>oyR9@eP%>kiDme;ky=#0D5-V@Gh%u4@M;Lo zhdAfE(u0v^$nMLH+{=ioCOMH&~Xn0!+1|fCy zt=Q1SgNKqsoGVDvSqy8zspQUZ!1zpT94Vwj<2jRg&3U3oIIfAV^ZeIUER297gP1sf zIJtM@c>~^`e~&(1MGUJ(qc*0&q}6mq^g+4i=JW~grpHIq-=mdJ%c$peVK0VJ1!Q!m z=cVL}8Y*Up)zOE`TcNqi?(eeP1p<;vnZ4vF{|I>)B;!3<;y?_x8*7 zlv+Q=D5fKIYY`xDiPneQV+$5L7hII(+mHJK-4biIi4AMib`c0`ZI|0Gxl%UIUIg9@ z5<4TSPe68R(QS90M_mw=ni+xM9^vP4R$dvxe6v-d4(oqs8jAGpy>kRz`+iSfbTsVZ z$4Z-?QRG^lkg3=`l8p~TG*+H-`8x<{;ItAzM&dzycSh5`UEP2-F=P5AEe+wHtq z3Rj0qHPpKVZxur1rcjiNAG+d=A0Iv+#L}GdlUO{s-DHUImTOLSOz@{8Cz@W&Uui78 zLY$CLdWA-xr*`+^=w;)I{ko)A>=%lZUeV=VBy_Cmw zZfSMyrO~}KxtEphWtDqrbuX*k%Nlc;UQRKS_^aSA%3mdaRs1dBZ(*n3$eU_QCPmUW z`0W*@$!T+mWqv8S1(ND$=3ZBVvA1@to$GN5h&duo!MzX*cfJBL0Ur4qEj=zK_I@1P7*vZ z0Nu>f$~+2(EhXReA47`z(D0WgVr@9fA~$WLP1kyDD&a_i+$wfiEFgbm$~Bx z>%^34f@b`+5{vtnu#6I9uf^bFR%Qz6FHZ>}uki#PboPDvS=x!2f0Mb9y>Y~Dk7e#a zS>j18UO2FdBkGE)Zdi#%==e~2$jsD~@j11#Qg;A`B7GXc!P@F{eWRxlr+JMyIV*{X zBX2pPeo3Uks)oSqK{$uZp#`?&Xa1U>7)MWVmw8j}RyV^`7s?70vNEbP)v3d$_Z>C* z;mJ=zU2)T2cagkrs=|C-)pYx7ej{b=Nt&4DXbH&KN;Oc*zE`{dC~S=rsE@7OPKxZY zijTY|;ob1%VX$b~mYbN#k;w*(SSwzJU{Hq^gzWuBAkcH3?(mrOak~V=)c4_Se6ACE zff)AnCE~MjoQAub4}M^`X_jD8$;An5d&V?gQsw;aG4bxH)-=FW;?^xMe~+6I7XLu3 zD{+0QahY2pUgXTom@a#GD7d{Q%+@-K;BZr7_}gMb;xYjj7A=S#X+`IWh#EyInW`@Q zXRj(#3#wUNkN}~wP5gAXM1pQ*HNS92LZk#WmeVP#egj~{Ws(j#a6Tge&)Uoxx)PJZ zjY}~_Sf{SW)9YMDXLsxZAke)|nX!2|jfwAhe=T8iHp0|(b z(y7qm+r!-CfA?o=02yV?D0Oq@M!fT!(VNPsV@&oB{jPO=v6WM zUey2_V6Q)9kHjv5lc2UtKc}P)<<=gb+JfYKBwT&Ac0?$Kyg7Fsm)hd%^ryBA>dZ@R z$rY<$q)9O0-E8}(*`t3?K!Tm!EwnK{E$v%Fk=)QTRSTj@$2?m6>v#K-BlXW6q)zC07zBHR~?h_lWU#9exCgaEJ44H`Tck zE0L;rpj1-lpWWl0y*K|#oNxex??BdE97;{fS**GM8ndehEM=+S?iiDhP{6a74wPs` zod%Y4V@*0%@4b36U{WDOM<&&q0h6x$Qc}GcFsU%ABTLnr0h6x&Qc}GcFsV?oBTLnr z0g|TfKoWkM>HOCuD#iSvT-@8d-Ei~E+2%fr8E@f4K~-N&~**y)ukpa{pQ?`=+QGsEn$~Cm)cmlEDXi0iXm44yiMYej3e1ax_kX_2sUk_fBIt|`ODl>KkM!!&UmseJ-4yP z`*pUq7)~#|+T?z+h}z)Ei`)@UK5b6CUz8ZlCyXV4Zhd+3eTYBNf8uBLqo;CQddg^1 z+4;MFpQWevQvvi;t4mL|dS&IGeZB!o}eUR%#|u=ai(>C;YjR&?Ub>R89eKt(G$hb$TLbO~}#9uLg zrP1^%f#dWloijYN>(Wx^aM8cbb^CQmuiDR8@>z5kpEW@G$E|2F?^g7f{-sx$323QX z>pqjQs+zy0BwyF_YE>P#6xpatOI;He{o{?m3l{@STIyQOYx8Ec`(cf_RFzXCvZtyF z{t!r2Rq|KG-va&?in2JIzQ*SgXKAA$7R~%h!-fD3NGb-PK|3yYNwUK^eej7L&P(qL zN3A{oui~e-j%BLScehh0o`^Mq627@MX*($|!a+TeE!LPQ+sxsd7i)F~#e>O4Mad(+ z^^6TVmkPyKG|HjkcdsIwWX)N8mk#29l?c}6yrEGZeL&l08ESyTHjAFWeX@&sppx)R zgb?Q@glVt5AxnRGDr8yuYXhu3Lx26?+CKDGpJM-yS8NHKb`{&7{u-b>Lx0UO<@KSz z`jmO0SLUf+nMcxJ1C;2}UwumW{A(h8w&+|K=M~bQ{)$2W5V%SDa-zTJr=h=^%?zW8^YJ0#zCk$gS28+$(ykgg5Eb?Jt22eBadkUAz95+CS;~ zU+L0kt~ZME`(jK__s^ys!ZguUMlY^szH!jnzyINvt8op~`9m56h%yfyw+RLT;G@wp zxhRp;$4;z)k%&6=V%7yfiL=7FdL+Dp30uO!TWIf#Y;?r*bw|)wvF10>cD%VM?qY{C z?1|X$;Es*hLi7zq+1fL3C{v0;(N=>G6O0`>9TLL3yRFDmI1kHIARr_T!JGC)zPzVG z!EM&vwN!)-ZX2){R8yArL0VdSQaBB^iP~&tZkq;Ulma59_#EgwhJ%QAXf>(T{x`76 zpRmQrVYJ-*K;{MEboG9NsD4>j?mtdaLagbd>8V}z)cq+Zw|1<4jwO0i?GS_WcOGjp zcNVOJ)XeG3HzuV+hcG%3`xT=Q{Letii2bP@*%Yb?G;V5}@{0x{!AC8hoXVrjt^x-IZ zRv#^oJ{%>Fj=llw(T9QZFe}1|&5(f;ziDt{n=>zOH(UjS6OUvy8Jt)jJ)GF2KbDPX z$iEo|CqBo+XI-4QUkZa0XH&R1alaG>CqB+A!^MgFrKl8Moh`$~iTkCf>YKvFiTkB6 zIB~WXaAI)teklxE?4{5~w`X>-l(4;KN5&Bp$P8Qt+`NouCRWU}$9ym|IR68`RsT!g z;*2FCnzJGYCzP%}SR4-@xE)NMg&jqabKmP?fVb*g8WB$;9$pBjS{UfW+2HoxEa`$) zqc2G%K%^?;HjDtTUaS}6;|)}1kkDO!=Ln&PRl;{mM*yDCmZU)k{8q!Q26iXcqL;MJ zKrM<3r6W1rTwwCa3LHfQzBXCQmkE~#W($bx0P?h}%7u|n3{Sq%S3ArA_vI7e&IzQv z@TSY9n+BAN+ka@M^L=&p#_<~FL+^Pr+n&&{-K^2`p7 z)bE4P>Z{<#V_ywFeeJ_tO4v*MiL&z)n<8QpRj*gW4`YRX%%q}17o&sW$`U(JTV$9? z^^C0WVT_w_t)7y8AM%LK!TezSG7xJCWoo?R(|%M{L~umWCPjtA4Ij`ia)9ya)XztT zb@xa!-L1~Uqd)6Tq|ZyF=>(RaM#oO77Qf`Zs~_s^3Kn2E_*>z`*78?8-;))J>;sN* zxJOm}C}NFbO4Cv~3*!uw#3j~v_laJy#>M|Eb`pjebJ4xo;hflczLus2;C0L!-_3$)WY|0g1(*{G6cPBL4wUI!2o5Yc>D5>Pf`^|`1Yict)D z^m6UVo_yK#V2GO7S2bvo-~_nd(?%5ojA7|}LIZ9I`qf*VjmH>;$i6jpto#7T zQ+Uo#|vL4WM_o=K;eS*y_wsNemodxmUllrtL`m&e<;s zwtPvyb03Rnr6Ad$U-#iJd@{=Qc~Pf*@NINjSG#&C5LjR7QZ1xrIe(&rPBeYs@xusM z+6%RNr&3Ic>{M=XYVKDjGGZc#OYzzpYVI#eq9C^z9gCJ8h)ZGk6N;Zvq^j^&JSQ~Q z^I2RGH_lbFG-C0DcWp!&tQGsd1>lXT^|`nS1pzL0etL^^bx}hI+iz$gl}`R|rLb1C zvXsL1CNi~-KJdDZ`x^(JAX~cf2bF2=rY6*@^!(N&L{lX4Z+f2hE*egn$<2L6a znqw5qA_y?-wuqd~>^BMy%{41r&|>o$GHy4UTX@0_%6m{AN|p@M6$3aR9pv-p%7R!Z&c z-YT9T$BY4gQ2KnEg8!`)HL#$GQWY!1AM{(F#emXxb>{?l&kkt$QoJ8DPoMj-*#XZB zzD=c}@eGQD_^q21v%kxA5fJ>fo>gPi8hY0YdY{I%bumg_F}ovy5`bAR+N$#eiYkuO z*m`y35!gxljo||iS2>hJ9b@>{J%_?dJsm!KfL!oz8w9 zQ2E7ZAo)AAdCYrfA1|?#Lh<~Q+9dtYi%t%KLjNn$NlkCL@i;?kavo8eoGbVCs*PBIJY4(+@DYbKtUYUVI$C1S zDoRI7?O9{e(Q){VLp1^m{u?Gu*g{N)l9-lD)Sd<}v%bU}k#>=knJYA=l3)di4E*2J zqL-{NG@>%NMRN9NRvos5gjvN9*3n{^N=hRpZk70_Tq})jubC7n_4UU_>E7~+@)-^2!BIjl!xJ$uO!xu0hk>DQ#%Wt11?Dx4ib^gf+kGT zQJ@KdbYA`iDnXy`KEKZvt?<;2XR`8e?TwOf3q99XH0$siS`X!Y?N74nF*U63dL&Wr zqFl(Q?4lHKxTfPW-ne^I<+=KsR$!30?e-_|OZ^wq@t%VmilQ zP3@f@W2biX`FYL%<@qUfn`WkD1K+7ftCVisUQ*qp`1f7!1cm?!Jpb}x>&%KZ{6tsrQ`yMRDg|%gx_Y5|T~p;=*GApzx=CE4 zcK-YyXQfUHzzhMS7)dvo^C1E84n2a8h(=&ituySjtOj58vuxLWr+mTJWWbX(t;8gD zHDJQ3zl&bMT_*6C@OfWaeFLl+5z{J+{Ln*5tcLDg$-7qhZQyUM_q?tLABv|@5xLXv zx^sg-*>-|JIsfH|RC+8d4zh_HeFi2h^9dTX)5+J^;1dG>d~E0ip~vWDcZAUFk;%*O zQ@WQv!U;L|r9a5)SK$2PHsgcd@DqtYVMkbAQ(Dz!5X01+vWUHx4DR<5RQnXOp{K+!F9ELunG&?-}6iIbBpoNHzbO^ zY}h_9+0gmPso8{+jRHvW99sOH$7LvlT42YUZmaLqDQVk96piL!!|PPZ6d~&~9hGF2 zDhM@?-eAqoS*8m_5#rONXw9JHu-^Wy$xV)KX%GpXgMLp-gMydnZjCQFoW5%`^bcz+ z-3rt6j}}#sQH2=K3|Ys5Cfvyk)IQ8Rv;3YHKPg0jdl3qMfTl@cQx=wniTL@GS7}JI z41Ks0NM7C$ORa&Fwi#s{i9Di3fNfdYyg<_MVb}`XypEsbnveK3Q>2@W+N_%g)D7MI z%QN21Z`5dLdR9phP7?P|{+X${p%qRAaJV|hs(*spkll>e7(^@0)hPNzK1e-&*IF{> zS>j#lH|yr^VjR${PzjmBATP|cTmr#{bDhyda4=KiPiItB$4#=3%oLuM zP4|s2r<1&~BkZP|ke%j1CY{wVPVe0^P3UDaBlyxwo9^RCq8oUIf=oErwdjPEVMaG@ z51D2AS~=U>5UYfP7x`-(Z=pD2^4QlcriE0R^Jp=v$Lx3B8#FhZ*X6CCh_`M#WC!dr zg(E8&!*XL4f)9P2?BY)bh$=OIqcvxwI+IjTCqk{PwI*hO&?;5DUqAVDt|g@tA9F@p#(TsJo%%~~1DgU}p>FA=NZw-iKN zYposUTc2qB)pH*`kNVT!FX??mmo~KlRA)kOv!auy(X7V$kuBEMg4W%0iUXK!!*?!jY5r&cWkYEtnLKIB{M~VtKUiRo& z{6Dw%Johk+9nKf1HW*!jZ$<5|$p17+v-Cqx{wH~<7Qu_D#`cxpAak^Q3C!Z|4F<3W zufjj+44wttT`=##d{j0=HnK=ELBeynJu*2GuvYwKguA7`_CG&{krcM~yIXnUezZSY zwJhU#$(7`YXKsNjusxcZoKriz8@j65pX&10yw8Hh6VyGi)H1aAFBcvlF41fj+_^I- z5%c2QGMW!eN z;Pmp#iI}GC6~J%ESs&c?&14xBR~Ot?k~~#!fmJl__++6TD)0`*)6nFQ2#pFX$x|qg z$yb&qhlW91Lx0TeoEoX$ojgBg9~ZTck=CpA=7AD++2HG$K`_4W9wLN z3}H>tZU2y*$aTzZXC(=y7?|n~;VH?ndT>W>bn+NRZffyj#3P{XZPDO{+u#|B zJE(euck!Klk`DP}-NM)~SVsE+#UQtO){KcOvUs?Fd{-7Q{g)czw#UA-{H{Yfv1{)L z1)s0IHEQQ#P1TSj14fF0&|Of{=JRpRD<@=ue9Ja~{2zJjL=Es6PIv7Dc9@vhap@Lhe)x-oW~OHYv3VtFQZ zx(jFDCLVaE@X4oyEF>H!KmTy|qkh`wen0sKdSCeG?B_RqWCla`##%;VPqZtwi;JQ} zhQrV&v?}eZ8dF<+YLqo9vc^s<=;JpYop&P!F66ulxPIfSlq z3h)JN5=JU|{l@!IOj-;7dyUJw^0va)-#pZvdhKv(YaY&hoHfU>alFltdcvVq#%;Ws zCrQV*`OLUKpby4Huj^XbY^px&bT8ie5pLtHyLW+HIyWAYRHy$4Y<6)|+UrEGje^wY z|3`*lOovA}*>^pz<6mc-_dD;Gh(u3xbr(Ltgm72gT{xVfe@ru>G1O*MESYpefC=UB zT*_^cxm{7G=BFEq-KR$PsnmVaM&w($`=ouy(jiPN@0!`Y=+}|}t))hpq4a^vAU7>V02COSycbRGQxe^u| zJUM>xE6p#mEq>`Ezt?#I9i**#J1zV<^<`bEFJM@m7%oDb(W5lSF}S8&54 z%QGHklC3k-lxoia6}{h$WX^FuT1FFbIaNZ=D5O3C3sCRmq6f*0%{bp#WSw>Jw(-et zT4ya8bK4oo(=`X~0exap@snq`2lR;Ka1Q7h#fyEo9UXK|6P7p)%OTEKCe;zE^cDU- z4O^uLgcn^-@a4dgV&dKI$4hbPW>YU86}-)vK^wSl=dTN#?=@w(Ch$>&0L8lf-e}!+ zP~3WM<~8fd{jo~l0;`$#3O`le58rkv!7g&LG8XF7r|yq6YFS;#D&3tSMNTvE`Qxz`GzVq6kiGQ%xJk)mI+E`OI-pYW-h>*wk?5j3m5P%+P{)aO;q zb9{f3@29tKG{tOGF*$BA?IeGN=k25+O5nUtRK~}={6J;Ap)%f78Co}=@HB5f2{&k< zOoL5dHO9|sT`9}w%3=oakRCVb(Ij0@3iWE9dSyyjuY%1yGN$uhD*GRS^lf zw?~JS@jcc5f(qGxTs3qIfK5O1)-nZ)gc48FrH)^<5s(E|bYpC*RSt_Xd)z9+%QXkp^ zkd*~gn!Jy;1itoggQh%i?oYVFFY0$HRQ~OU!s);3e<)lDr=P4##RvWabEBo;e zd<@ArPB_ak+KmM4H*>6v}-=;n6mAaU3Sqw(#*_&r6SVY^1zlzs1^Lb_5Hr&Bj zsw+@)Tnw_)Hf*vi&G0!+eF%A%|3*p^c&B06WbqbN^!Z7LW#WE=YC?7hUy|lJ=M@NJ zk}KS=8TL#@JYFdU?AU|=Ec1&J@sI}&PsT!?*2d2)yr`F6x|W|SSMzi2N`Agu$IqXt zMRZuDk1gQZM?5TNL?cGhOlRC9=L=aKk*kNXJoFJC;J^IXBkb8de)rsHW=*5m4tKpH zdrkP;j&o8^)Vk=S z4!D8;$y(SPsmMWu0}e9c2J4n)4*a{G01r781SA=ix8eE}sSY&b$+#O&#-wQ?O@=hq zl}%PDaBO~;b;Vz-D|X%xv+mdn0)fWEqd96zCQ;#xnTVRkncc1bN#nbdK~kDz6mc6x z^rrh5M;}({7j?@ja%u~mhlhLfHMhcflzVoqxLlV47sfrMmJg zk9p2V!+N`LkbAnY$k#Dj^HB=Ox;p>KpJ~aCYZ3$ZbY5#@8B!ou{%OB8C(wRxpCYJr zt}Adi>hB-ZmeQM3yV$ApW)?IX&)tP*-(q&_?|M??kish6;e9^Fe4dM&T~l6}cHnF^ zGQ+#nvT_rvrAP!tl(!(lbCJUlL&OWz!k4eq%=wS+OEc$$_uM^sah=(dk zNCQzjV-`NUH?ZE_z1kt{Ua+pxMLGw6(9S;eTsURriR%>`&p?Ekj{@@zkKMTlvFB0z zLy*`ASP27pDKs1L30@W>1@_6MsPKKYg2qWw(CB{WuyLsa>qSf#C=H}qSE7b-3-Ho~ z0TQjG|xbdjJ# zCDZIkk~*swaq}~tUPKlKNj_JM*2kRCWf*D_5g>kTTOw0cfSo`rb8!K2nPZt-Sqo4P z*5&)K?*x*~<7*yh*tB$bWdXQO$VO`O{USczXAk1#eFb(dn!Wegc~kW;p(&B6EW+l( zXWg@qg)g0{(okmlXK^V{MePo$UrdUXbzrBHu)7jvpW*||c08|VtoVxxIL_zC3b-Aj zyIgKAGwSM*+DSa!lpj75q<`L} zP%E1$W!_Y_+Ikh&u6(8_RAZa;MmTstx##7nw78{$Hd&=_^JbRrh5Q7j7U^TyqM6O* zcym*s1j=#SENr?XmUmDx!5(!}iBA_)2#o4V=<3k?YmRXL(#PM{sT}3dxf={{fPn7jXvVO+-#5@-O2gq zG})K<8G?D9Wq4Mf$$GdcH93!wXp%`)tgJ2hE=F$?(D4n~+Xxe4Li!-|^aFdQ$FlDJ z5w+rkuq$r~bbsgRp#$sv$?fMfb;wOks`-mh9+()AKNReWT2t5Cli2T^HS6&Zjp5P8 zQ0mo#q102pNcuQ?Z`S!mUzKb{9k-^!P-u0Qy`@Dn;(&CXo0vzq>^$ zyc@hQdpn$(Cs7PWUjYr}>sRCLLmCy6GBXC*dpwbSlQex6^0iGz^RESUq51Ks-N5Yt z9<_JDS9OXX%z|L6eg-dKF`N-iwYQ7E0LuWd*49}p<^vulb~qpYNhg*2c38~bI6LF} zy6fOF4u@%>^zSN-!U2BhkF;Nkr;Ees1&}XIfD}dxd%8$#=TI1OP2%oUdVSat@?=fi-_6-3>dL6vsKfb{n8bByQ;>QLSi45VOXwjxTR5jUaVE%hK&b`Xce(^LH&bEubu zKC9tv@J(?N?N11ZlWNB`Y`B5mkFLnf_#*qrgjR$zO9<+-x%X8;1?+CvLx91+oO}FG z#ev)J7tJ^SkY2^_5r7QLzuyO_<%j`PPSgwEJ^C%VpSPSP@Z`z?`+?eeK<@kxKbk?t zdY=l}qWjVHx^2_#byUIqtGd65vbpcj{lt583&ZFc;Po>u;SBLy)dqUBld9(J*Y zpVGq){fHf88ms|;Jy5mYDI+gTG%9K09q>r$Ht^WWW8BQcJjf-o(MrSe5$md|$@y@j zDy>2spMUGmLpe(@V@9EPvri}uqZIhsMYP6Rz8jLK6YFM3=12}j*7&W9PqfCjF3w{;TR&~0={$wFLn*v7V2$6ic(}0&)rV4)=UcU~ z$HUp0-Ws;1H%-`r8n|V=av<0aXUs+h;K()L7@3)ll+5}VCOZ(m-`^>Oh#Oz$VBPrc z=XaD3CtW=mnwtp*8;<5^wm>n&-fC zf}PyS=fN8`fB6hHs_zN9AV` z>#XN)8ZyRjYPa_4dpS|svWI(TxwYTWK#Pz&?y3hNKdVehMt@3qz(7=EnajmT@ zKBSy^V(-2~`WFo=_lizIO_xR5q|aojVv+45`CdI6p6W*Ks)%j%I&a_7@bQ6aG<^Kc zZN8>Yq~W!N zz3_+5b+50Ra$-*M6EJsw+TZg6BQ79S&!hJ}>f=pjYHl=dL)|1PuJBZm%Wd|%zmxc9 zpUOT*?7{Q@8|1x+M+29MJhCPc++I6DLRwG%1l?b7Tf3kxJr* zvLw;ETm~%1vFb4TVu0%mFz@Tvq5iXq5w9`~-6|Z{`v!hgH=+mMj_yKT9p9zSh0(k=FsDmsFhaDiyF|Lc2dcS$%9Nd zfwU^XBAa7n_<`MH-CeKohs0PA%lIg0Mj(!VZ_wj~FjooO8^@9)<2x2uzWAhB8QQwf9+9pKI!{(dO646v+WA;#$p(z2vTd;l)h^Mh)jB0dMQH8ybYK&g zA{Z=s1MdXuj0A6S5FSt87(o5INJg z>bueUwG}V1sPOu_TU$b&P~_~*LH!czr7)5&)Jj{{8q9kjsw5UY`meZ_c`~$ zBh*YjL@!{0yj1hN?M@S-D^QozM!z?0oHENBIc2O;l>MzzJdFr+EzqK4<$=)23Sg-W zEmu<%I6rtc=9YClgsyTUH2ml9-I@7EXi)4e>PwpVNYlTKOf1ghIv&F|{_nQ4Zc7dB z=$xyxaoXgiy{b9H`dY7r?VQlBoQo+Z>@}Z4vPEh?xP>{;x*mH8epFv)R794ha_h_o zOX|!Ofm+ngulOgAmjbEoI&r}Tt=%rFyc7lKb0EV zW?qIe-$On2L!AID>v8ug2*?FknOXIP>61}_p-uLSq2N1O*ans*Q362k zoP-IMnhBtA16sY~4h0iA$rHkW#7u(f=K7oorn+Q4F1h4o39bm-k0-R!SL!5Vmp%mL zowp~Nxf8YlY91Y4c^qE1rw->PFQiR0L^ZiBUFCX>;A|NFJ5hDsgs~{A6;W72jm2Z= zDnY8Nu0#|!mzHq$Igft?uy=3oIz_+-$|Pd%G`=1g&fol5Ym@nOHqasxX7kne=8FxG z@ARI0w(^NfR*dTjSxIIJ*FFi7v55EEv<5}7^{w*PJy|Q2g!DxSmBlrx(6fsAQl1M; zo*mA~N^!)${_DBXOjQ1|YkHP&wPGhs@>GLazu4o<5#r{qW9>(YjNP4bvJ{IabZddS z1!=|?2=^(8u;2yDa5ix`6daj6(M&kTAoB0vgdQ@=``HO21ck#Z*gdz$=nn0(yWsZt$V(VBZSL)AhIMhX|YYopqB#C*FxCZIskfA!|O z(zy?p=>6yWA;e1Vd_PSKR`%w*zc=5!0rH*OlkcC&*JlP?c@uP~&emKwO92Up6|Kv~xZqL~x*8lnM|GHmma~I!nUVGBLr2y9=l z#Y}eP2meve;eSbKZPdQ3LKxIcR*k>)FhCT}J1RxOx8BVwJ!p1MDBhlfq*`8w6IB-z z_4N&9z+ZUByfc^e;C;`)M7~F3j)uy?Jj&TQ3Jr~$i&=?kg^$#D)vsl@;ctDNYSi9m z8^`vwccHR~u7m{$EyoQI@f;|on$F;mb!#Gm%!l=xT(B7qzFWU2YEP^M>^EM<5Y1%L z9%snFSs~-)N{39$o&^@qcznh~ zPbouC>2GV$5G>+;roU~L?(gQl#@}|O?%U1K@WyWpJaEsPP2|Kie65dg7r~8z(=G;Ct?w6SilSa9Ye}L6w;~T&E6? zpktQ5?NrM5{Eh5#tXH!96LX%p>uWUm&h25A8@|mJwNR|f7Sca z!T+T%feG>cq1?M)3aSdNkF^ndHG!O{bt&hH)8i%~4_A{DO4_U>9=4csXN}YCKIbjr zL+Szzd?wq#+ua7{srDt_d$)KETI@Y<^PXG0=SsKxPM!B$ywo((sns)sxr}_T{ZI6b z)RhFBaZd5x*dHzv4R((6p17F>c6uQ)al(` zV>h|adF5_n@SXu|727hMSEe`9MFo28J{24APw)}}!X>5fQW{H(jkUIIbV@&j>_PGM zOIG?!A8wBb$m(;Be&FPs^p%6yV}tG8Rd?w8Y&K!B2dv+p>5K#?0&jc4`2~nqZZ8*dXItz&U>eZ?}JqLob6#GZ6WY?&=BwpEB(Y09-J=u z2tkV;pVKmZ2K~XRB+i0$$#1!APfu;h6#1*AOzpQ;SQjX!yfm6CJyDcgC_E`zoquz! z;AaqRY!|Vqt3}9K$xNW(P*rY02B|i;-#@$$?b=0GjjQaLECcmqx8DkO&cb|p+am|* zwO|L5NKCKKhB>Qo`o%*!)De3bF%z|E6+jZXRU)wbvZ-)fPzWYSmYCv(R}g-ZgO7nb z;ey*C0)n0OR}p@+Q1w_=T5@E#1(tt;?$UW@Q3i{i=0i?T`*4j9$ACzfv+`ngrU!+T z-Ih28F=P_yNrgsbZj*EGZ^a`J$3WZWCY}&V1>@yAXnLWQ``3is>C82$G`#0f9k&oi zzz~;X0Mo(i-$f?2jz+ddoKyc?^xciwq!I!aYyuLX*I^Na42z(X`FraPU@U6#H5h=F z)~O%5XEg436D=fR@aTA>YIFj;J&g%@|B^2hOo;Pz|I?oS-+AJl&4nN%5Pc2HM*`G= zRkAz&WtC1`Rh~L`z1aKcKF+d zks{r>)mr!$JkJI(BNmdlyV^3wsceo@4cF=*%3A4Bzu;pa)Vqz&(NQ!9ouf7W1)oua zbKFe~jPL;+U&L;Q6ZGa5Bu%|NMPf4IM01TZOl9nCT8$rTIfbnBxG~ygY>5@}(7Vn# z_Fjr;-*vi_{veErMReT5mm^iRNPl&V^ua^<3$v+nRQDcZ;ctsk%6=@L&a<;Bg1!Fq zE>f)Y4)2 zmiUm0y@mPmRfn=p%Q&EbozD<*hJHN+b)ldHQ;h|wJ`k)4)ZgjmTn#r|GIbnj+06t4g&b%{JkfiYf`LwmNtq2H8EfZvtF%>b zFI}QBPOhvSK=Z-o03I715afSE-=VV`K!()W-d=NV84#@j;aoB#e>-Iwy)w^H23%x< zR!@bO)~+;X*aPf+XYBpZk#&JD@;~wN8^0j`8ZUo}^7*$n zKH)i)s`Vdb&XryMqu{#{SppU)%O2h|J}R6e1MGr@;(d;J*GQS(JlE(;;9chg`%+_Y z^cAb>cZQAB_B4Z6^*ccgf9owQ;H~1fS@w0>O0e_s98DtPdHWyQ?6;9AIZGD5mKfL+ zMIN=@e!2M&^a5aLpU0<0b&y$u-R@}E;EhzmY=^zP5hxOm-dKP9MgDV_r%yvaM(w>H+g(wZ_@|4mtqnWEgc7BIAB-=8+kwJ_WDC`J6te*Pk{}||HFH}d=P;o9P zE3(e?Vhh`NUxBVaSI_;0_+5Qs%qBLJEcDwL|+l3G57VY==a$Y}77v9-! zx?q|$unT7V=l{rbK?J6{u*U6zrpa_+y4paxW^AA1-+VaDyOdmd+F|9cGUIP%!kvU4 zsDgJJCuK{i2x@+six28eU!q=Lw3G|(HPb;~I``d|61Oj=ecpGeF{3)icG!ka4m$q% z)94g1^PuEY>SRvS$mCOoEze10TB?N%ic^aurv$%hW%yOAK#)5DWe&5pjfb@vpm;@R z{L-|@ISF+E$QbR{>0VN4f70b>Pm70Cpd_ZI!=0M>Zb=f>3|L(yW_3AlfQx!H{@~Z{ z>(45w|Mdp9)_uSJE0v`+r@7Pb{H*_7jpW5{mHU482P)h5&+K=w2uYeE_PP0E-Zk2c z&*K}&<^|w67?VoC`CB)jejc0qlCIQvF zrlSzj=K1GOCy}7S$@aVmVGHLc^oXke_{w7f{N!l>5F;qf5vk*@2lWUaM(-*< zM#VGj(clVq|5<7DK8!*yh@+vGq=Nyhs$dv47}9FJQ~V$c^qlQ1<+f|-4uHBYxiy!= zYU`lJJU-KOrK*{^cQw>-hgU=A{n`m~uUK@ON3Y#rtjG8LT9^0Qb>_7unbT2FiU+Q6 z$IV~kobgZU7;ebL_0A->4!PLy>KNQO5*thQP~MRc%*|@ldtReH!!*ZLvNV2p);Q0w zCc{QI#Y=eHB!F!(tA7>B^jnjljp8NTY7+AM6H+Dt3zck%*(L$KoovFzCILodHsNfO zuwQ>d)FdDy$d(vu62N)02}h71c}|5$%vw&@5KNF2QBaR`(GKVj=MQ)i(3;-`J?Q+> zdpPzEymJAn)qY3*NmXJtB}^iz&Xr!`1p`Z7q(s~`P`F2RpRH%}&$8w3X^#jY^WIrZ z?UDsb254k|>=E#63x{73+bWSd4&FNE3mJ)m`6ib!HrBl5@2FA383l0gsJ$`*vl2C@ z#)i1-bT(r9FG3$^15UYBLktG$=ZiD8BR<#{<)kIxL>3^P6YroR8uX0tL%>?#-$bKyh*gZmNHw z`Up#eO^9y}0``p0Cwh1A93No`_?S3M%Zam**YfIN_NGm*jo+^jf1w@G;IR6QVT9$u z8APIsqH{dary3GAuop$wh*+5$t&X=LWuH#+>WWQU+I&BYqJ$jrM^?l#9r5x_O$et5 zG630Y`J;I4*uiYs4{fsl8FdfV?N>dP*l{x;_JYZFFt`F~3yXh!1AvGEF zVDjrZ?1h`nFfH7|#Ypn*ptPZco@F1$?3VphI5|KFxZBaHU#V#G z4>jNRd+3`8^`re&zODY`49W}EZI$BA)(5>OJ(UIKy%COzJ1CXa z_-r)Ge0HXj2x|I7{aqGPBDECaP2EBXrqzAk=Jha4i1Xxc$%@+#t02*N-?JD5?PdEY z{AqN?IPQW+H$lU|8%BPa?C?3S-6}fMEhP*|E~oU>9rf!;RXyG~Ze1^pC@_cQRb7TY z(t22U9>rM?S_=qSrMCIf!1I-|c<&!(7Q{kvnfuDVZ_1i2qugff>H{Yq47tPggs*Z1 zo~&dzd`WNczV1JFGbhFFh9UfYx&BKA`!K7o=gh)=D3&?ur6W( zU??SQtIptE1FRMW^R4uC26Dbi7!Q{P_&z!pT0p<+aRK}+^s@DQr}sS6d%n(lzS#)2 zpK<2$j10BtRIjU-xzBF(^ZTk_>b+jA*HJ0sjdYq*A!ME((SioNkor5X;E~GUc|E1n zjxTx7H+#=Rz30(h`5kYoVpCDnRCI@z@v<_gsMC91$FmxI_VsSXPbxnuc4N^5Zw!8` zB%N-8i;$Xb?z>(EX|F;&D4CYc@tz;@o-gGYpG%^CzWYumC9pc$LBN#c{*J18lLJ6N&*Xq zce&2_EdU0-+haP3UH*KnxbrgwBshpxR?i@Ec(=z{xI?^jUb=|TIa+t83Hh0(2d}{S zB&a}iK-%?Q+BZm3P-#RGlf$yx|m!v(xUD66LmV`Re3W{Hb&_71O!0 z72!uz1Fab@wD4MejfWF?h=JT*?LGgyu3J2kBiJfaBw@xr*_OpXs&HeTpbUv9bb;G8DNm`Np8>M*Kz3h+SG)_!?Dp7R4^ z+IvP=sTqM~T9EjXMR!%@8#fpMjYJ1RtN7|3!Wm}3mG>)PAR_gquWN_!jd3^W<1p;U zJnM|Ok+UuBNNhQ|i1x&;E>jrQ7x0 z^j@zuK8=j{V2QiVVN};SfB%yAp1*a0#%LMaME`PKH-n;UU9k?8mOT>U(OG*nhVnoV z97C6&4TuszZKXdjM32~FB5JTmx(G?bX|AMU2-8(&5$c6s;3DJ?tXhb)3bDojoxmJ6 zi`-D1^D{|ldY2B0rA`Sil8-Cni<#l*=Rm~lE74MRy}M6e;avE0m*cOofYlEy7H`q@ zj4bc97kB%8y#~ksy`5&U0A=Au3NVPBt zo&}JcRhgb#;cOaMW}=cqDJ1-B#5Z2Xq+fr)&G8BU*pep4vlx#S+9wP%z(YG!bMUYC~XMThFjOQG$Z^6)#8=~eoB zzf-z)20O%Tj!e;a#{hZz{<-uYYNY*<7t;6i0%MUJZeYdjK?Xt#T5|Hccs2`*>n$_g z>yjGxdXME^msYyhWo2BEJzn-rPxct46YL07T>4d@Ad}vW+HXkkU1QG|SRWLI;<&`s z!ot2RQS2Ok)qqKbr5v_DjaL0mWt%Gq@^0U(6GEXE$~Y!CT-Q0Jd^u(>H0h~hHfOrR z!KciTu_2a*iZYtGC=E%%me>&MYNt5nZlN6HdE;A9oNd~UdxduA-E*{(zg=S4R|1DV zYMBd+I({I3Ruh9bv)#F%FuQMYzcx3}!(Y^uPt_ZZFSK0EdxgjXDNC&<^_9(~Qgrw? z8(G>njCd~5K0uVVZ>M6%gCjc!Jb=l-6RraIZ-!a;Z)p1-=_1}31-aYuw{B(zr6pQD zW_$L0kv%|KavO$GPCZ zf4Bem2k9$|;EGX_g9OBrUjOMrANueG{ij>b0r%7Y;0{-lzwKqS;;#(AE;o#M)T&#= zI+xxIs@02?UTW^6OO!74W73ye>6>->GA%7ms2+a~foO}rz^x*HnNWdSLm;|@R8v79 zv6NK3kFHaqib#R24@r%0Z2%hLf*<_MZcWA8TXmymxoTcojXJr!mh)Z4<>s zie{w=H^hqu2?=p^wfJ!(t|vO>PX^5znpqwWZm54x=S3}d{x(1F$I?%l{Xrmxi7|V- zv9yrY!clCK09Fe}u}5%{$MX`NK?Ss>*h^zKVioQ$ODyFNS!Ht;`^%bIwmzB^w?=3WN>v`*xllGtQJ`?iG@QclX`$`WRm~mkfnk^_ZbC&1U zJ77?t7jukcrcw~hhi$Cw7=k|g1on>+zDDer1sW|q4-PpREH~ZkV705O5j)ZOl7!}jHX)EVvjp)Z)D4F{+!GUFh1=fz&_F{uQ z{%b%0!xOi+Ko!Q*4~X#7={hq~W!6RWQ9920)-y)1gg7dk7fuzHVunD3J?K0)4AARZ zHnh<_T5{D!S>y%2)?URX_T(kfDzdK(M5+vM@-O%~d`v0*RrmF0p<2KvmYGk$mc?5s zzp)$jIpYZ|Pb*F)TLJzQOl{X~jVyl)&R?nfTG?P1e6L&gGfkOG)VvGSZo;XmkX@nhPObI{3HInQKcav|-qp{s4e>RV@GL*R@ zk99nD>JgR`k0m@BqiXy?PW!W$Wok$9V>;3`&oG)7Kr?DK4yaodPTxSnGpf$mV0U{( zybq9!={L1tnHgys?=LH=hkv2bz;2YwhOX$AoSgQ#c*gU0zJMfQwZC)qZ~UF_PQ_1? zzw<*$%Ds%NnjK{|whE`VP!VEG9@|D!PO?gORFcVxHdvR;48r zU828<+x2(qE&6-@jr#k&#rk`xJOBim7U}PtR;rA)xU0l$ufF|dP=a|KTH%w@3~}W-Gt%kMfr>9n;P%@d}la z$dWUK%DBhszvj$iDDh)zo^~)#A94LoJ~top`|$`GHq@RNwn{(U?=x7<$Z~()`jvnbFZ}}_XTqD z1C7YjbEL}aph{>X^f@@7F@?nq`&PzQ{7gb7tTV8Vh)=_Kmuup)eJHRhG(E`&b7VcDD4r? z%V3=oOdW1KFYoZ>P3IVs3_2{!SNvct6cI<!gNl;`v)MVg&yD$6gX$dBeyzzX9{mH`Dc#_`Du=Tr6ec^vJb(cv}zdKf{mN zgFA3vX$f(eU=M8JXqV~U2CkN!_miWu3dZe>ka2=EMY{g5M^Hc*lQH3KW{PX-ob*`M zCScW1_+0*@Shl3*M#8DNA;PT|8y=c{b|8U?Mgn_{n7vwzla8HC$Hs;sv9xb-&o`RK zU>IK;D{m*5J0Y5=)(UQD9v(}dQSEdQ#-Zmxm@o;Rc-z^IfCBUSnwWhyRP1`^?2$}& z`eJbUwazXq7O0B(D~>%OHUR%n`h|LagarbhIAEo3awR!yonxuUAHa<>ffdl6GRP%- z@0KeJeV<$oeUCT&b8vs|(gNR4fT}_vu7uW#+2cxGT~KJ58m&H;4Hx~PD8+3ebFfH3 zXB;2>&fQQRR_YWhbv1bE)v&QnW7Wuy`c>!wABEb0%nRYSRj3PZvA5lQ8VgRW@V8B* z3lTfx(KJTEAbDj4g4udjlDz}hC&YYSr511;RT3EF8_8wGOd2I7P+}l|Lzy-zp)Dn5 z*%zYum}MT+;nKWCb)=qH#Kq;8?!iB(bM8M4H9q1b)eRWKtw=|{XbcafdIlg-=Ny>p zjbRh!^yULSjox6+f#{SSvOAa>5qBUz`M&s>foPq}!Az@hVq!ie4fM`v9W8~D6|=d< zV_%AxG&A81X?x$0-iTU&88~UK*B4-PgLV8=x(6GqgLC%Qovp|AM=`aaW?z!EM<> zI^3);9&lHlKagKj=bRj6ykqv*QkYis6OJIm1J3@L;jW)d{1l}bUUPbCo%6t;>_Rmh zW;JDB{AR;yUuAedhq>HHMxj3YE@77JUuXqju-Y(??;O#}|I2=i3q0p)Z}Fzj2svj7 z^6X=x(lh*_MRQnJ75HnT`E`MdQnQ&dt@$jYnT6j!OYhBa*XUTs--M?fW zeadV(f4)`FSGrVosCs5N0Vnh3%?yp}k)=tySd(20* zJ0FkC*4~>+>paaIBqmTB^Vw&HA=jp3mg8iJE?sT+D4pMUFS>BG3i>CbiZ!B7iw{11=3iMxy7z;=cX$O%6|%Ul~l?=%vB$G%axNN-P`!jR7l zZ(lX2@q6Lq8!+E)()SHx`Xs}cH{TxsUc9j0dj$ND2K}Hf!wqs8eg=eb8%QW-Mh) zMrUiDQkW~FtI%bza*ggIK!+S>A~jnswjIL@nw7!_PrEUOne8%&zxCZcxVE!}zs-gV zD3YO02-^2hR&jBCEsz8)LrJ!IY)t4-+BCrm_BKv+Tay}U8hVqO1V7g26se&@J0q38 zoStu>v{gf=K-ps{g2$9$WgUNaD8R-~xp0 ziIH&C#E`$$wM2<764F+UB=8?cN-W89IuU>$SR~D)T zgiAQfjr#I?^KNA1qHJ2$Tl2_PURazds-`-=v7h@5j_^6XT~SRGsYM^ja)x@H`d_d_ z!uB~K_bay@p!6bNiONMf-UbmA}$Mm|#hHSsl=UnZ|%oKoHNk&N)vP{o&#hpQ`8cgSmtQTgL zB)v{rc-M-cDOCS=t&$2?-ktO`K|0<(Xb<~bqYuK$$b0b+k6e{sF0`I(8SELhu84vP z^DW7o48(@I1i8nK3EutNS8Bi@`n0^#2w`dS6c*<|Ysiv+#UppMtdW?`-{i`=^W=xZ%$KpER`5BQ zeeKjLb$pBVSfB35cDX@`_tb|#OCxJ^Yr&Y|H7X#nsNKb`SJ2^ z#5z8MpA^HVyB~s{+l|&n99FHc%9q2{nKc}vNMzYB136w+(`r07TG7LGR`nWD;OXfR z+n|0E<(-q$K10Q##dBJn3~&+Z*k2+#n2wNxNLh?RA4OwQ{a>$UdnTq^Pk@KvEFrF= z%jM|*YqU<(pDAG?*c&aL67e$Z4`Po@b^jH`f*bt{f5~wtU!qp|{;?;re%NC6Dr?79 zylTZZq6D{6-q_-~Tkr%*fA@DY_w>_dueLVAL&HNjlAR6yg|f0lJ*j{=(hVqSf7Y{K zEV$FZ@OYE#n;TD$Ycneoa4|DBFOw5sj~oZjKPs?wL0FbGh19=dPmI#)~vGV5{OVE%? zYUg5h+^ZIJEYn@R6ng(>%cc%Ps-9yx`?*=TxpF!T5PkO(@}4#t#y7LM6WtKWov1YJ9{@Fw|M5HOH6Q*?-*5q9B6@gDraOG=l(9IQ3lBd_V8 ztmaP*YCqVJ0P0GpI>){uz&a~&j`_7YHVcTtJ-p>?#eG~+Un`@CtHkONP}e6f-Q-Efld3f=aIV{yyX*HR=^E>L@S)l`#(zR$1M6WJ7^P;HiN^rQ_(9~9tkwx;Wr}>t7RSYMvED-;8>QE$ zkFfd@vuN)KkW5(VnW7rr;X?(cr10#n=rRp%S5)YZmdJ_CD!~Vw#-DJ zFPhkwJ(X-T*>3*TZ~d1+Vy9LQB=pGnm#2U8aDhQ*p^L$mK$t>>MNKdJhW(#T zf^*d$1SN49ktvGhYfv@UH**KhTle2toEO7m{O8b0IB+$>G2S@O#Y2}049r_8XfP1} zWNyaris|^RzjX0V9B&BkeDPj`cTOLb#XHBrEF5?~{|o%mXy^6w-=Oy-;u?rwmf#&V zmhmml;+QXaIObQ)`Su^;m;OgzD{45@Uf$vOO9w3qS1%LT*uK1_Dc259Nrk5@9kk;3 zb|G5czmR8pstDef2w4TS*b0NV>QUjl{snhxn{iOril>7u8Gb^H+HMx!SoQ+9KhMO| zg^O(8qByD`pzI?;thHMhjNup=!# z+VQP$Rb&yKAN-nmz{}+HG0*7Dh#j3GO^?ax5l6-C!i_Pz0DGWJqu)N=7tUQ52F5Iu zA4kg7WHa)^x$8}azU|r@hO3O(p}*}nBqi+mTXdmQ`-hW{Zss0u48K>v$EU62qsq%^ z9NCxQMuPlichiqs=2Yi24#m%K)!?QJ_4=^v>$9f9=AUT=r`8GfqBuO*N=9eq;{%J` zrW44%LI+|L!2UB$gt`RJ{-{W9oiCC*JKt5d%5>W!=8sQ}I6QN$Mm2-;0%i%b1$U6= z|H?2Y;Ww$Kunl?3H#=U%4J~eiayzW5skLr+`fNjV2)GR)Rw=E>qZN2ho~b=En@On! z1^&(iPVw{{-~vwK(gYC>o)f^F1P}yH$J@F2JtI9v%X(+!<*GnS$Ii9NhiYwPy2oU~ zslk!p17;=6zaDwA7&73$T7{^QQZ*~nQ>K$FxuW?{#=&K;ASo`~<&2U-6#X>1wtojP zGiI%OH_P8D4Py6fQ^U44^JsR6!JiC0GVgM81RMJC`KF5Sve0jxMk3lC%WGEjsC8}(-`z%f{UtZ;sH z0RS=W8>41{e2GxWzBm9nxcF4y91y|$IJAL%Fs>)8@=exLSqcM1?l?5lj<@6X3$cy6 zV_;>5$k?197VLrAmO_qWsnhuYn)EYPG@otAEl%gI#g6A%G5B;V63 zTYKq9qI^wb@tF3-u~bgDE0izHH%3ep6G5gYks^qPTRr0M##!pJrxefdGAz4<>OSwn z)8RS^F%SCp;&>e+B=w|uLQ;)NKR7Dr{R(u>UTONH#*ErEf*uxnlh0tG{WH8T`b|NJ z?bpm)6B*^h1d*8-Ul}BI^!oZpRX-k|Tz`G>^la9IqVYTpu7pn7K4{cf@RgW<{447D zOpivrzFx}i+k_L%jwRpR7SG*=rg0Q6#|4CT(Tsx+bSHvan(~A#9Gt*|bNO=TN8bV8 zN>2``NTM9?EzddUkp!x-#`Qt1#s0mo34g;;%btXe^S7A;Xd8EZd-Qle{aPV~d(p31 zU2#LdmYc)DrC%S-uC5r25Yex1*vvugIBV4nf*BV8^? z1a~yxV|z!>eu>}*{)K-cnbq0ML9$A_LMPko*t|~+1v@qd7=wge>t7(lTW3t%BVjMs zA(EaA3H#O-HchXUdc1Uz_SB0#$0pidZ^W1BS|?AX#T#hN=8YKhB3`;ux0`44CGhe~ z_1Rc1{vt+nX_Y|a!O)4}5UPBYOwC%A51c*NN=?h>$Fl1vHf2oItv4lbw>LV&4OBdv z*<|kzi4leVn_B1D_v7e_NWKgtrxIk%Hjh+O5Kk%S4U7-fnrtuT%_bm&sqf5bF{TiVJhaj17WD>aUK;d zXN;Z~Us2H~4HEiz@ApJSH(X>^T0i~#?AwNZKH`UfU5|cdNc-sK;zbh>La*qWP?D3= za;g@t;WzcY?=d(p0WbjSi1#O@5>(*(ecF2v1K0L@uDHFsyAP^)mI(*A?W!*b2RI|A z4{G$EH&7bq{6I$t3M+%K&`freIg-H6*i$hu?q})i|f<%BL&$7maL7{UX zek)kE=rsnafgJ?!42-;0DpR9Z`{z$l4ic*CLrU1-pD%q2Q#9Y?kLA&%muJ&QnDkNE z^aHc$gkhmRUp9R=?K1Tgn{*izn|l79O&?{_pUbAN$)=Z>bfcH8_WUuMUTV_s&X&I| zn|_Q*zb2cW%%)e6UO$^});E}TjMei@Jzrp+EA?EX=d<)It;dlIPc_3*AJ&k}Ki&*U zy@}6MU8v$msd%Y*y-d#s>$%W8kJIyhJo}SAc-`9UA;!W=pX-YQBm&%{iY)b{9B$)P zR|Nd6kJ8piRnWgcKEtr*bIKMZW7%f^57VFRH^`->mVfxy6lnw13v2+?M!TKL)epuFT*1 zHg~3DuX4lSG934nmYLyzq#{8u=|Mx9`;U6u_?yOh%k>PvjpqWvf7Feo?HVHgQMZ>G z@t^;wyGxh2Dfg8w=Ei>%SP%7uQ22*2t(q$+{$Oc~TMFr&ic~AN)~UGb6BBu3`SzP%wvstB)npYM%~}4?Pms9+b_;g7ITf-J1zohUsjA>9-g4E&9ytZtmXG9 zRu3FBW3`~BJfs~z{UP=E!iVVRG)2``u<*4kfNit_O=m*d@ERJ)%B=Z-`}JOdUS7+# z&t&c-;Tm)-X)s~F+f~ecvs2FEU2&17Vcb%-ic#Zvtvhnu z$*6$QV+hLrmv{A>=M3yB%4~b~Rz2PKx(NE`e_6C`HbMY5F67`Q3rotf(4{O3Z_2U| zsLX{){xTOx$(xA*V=OcA6{!RW6UVQ;;Jf6Ug8BNEfINJr3NFU%ypJF-=lekZv>Pi$ z`hI|_t0em~u8llyfxq=CK&Zzt@GrQG2mEGs1Ko7ppsW2G@flzSTj{35td95cvbqhp zki?f#YpJpgV^p3tjZeF*ch}3_6waFBbfr zkObgd4Cx~>pd6~N7j4*W4M-%%{V^Wg)ri>ZL%hsNurrD`LGVx>m3}I0rt0t`3`|b) zjl-Hp+Rt#@ZQ7FQ{%YippDYtyXJ00BIHR6XBCZomN&KbWpkAcM;*Coq`;5@Z;+6Kzv#&*c~@K zv%~(;O(pd~+qW7Uxdq|i+Q#y5aDCG#=kjZ_Y|pM**q-0K?$eCdy8Xjlz6C7*Ob@Z3 z#x0;1^3jB2RQb}dH{z$s9+7O@h=Vjv&M25yCo%P~^!E+l*yG#r>=7HsrwWtOV(V*t zaH(4FpFfpKwdCwS%X^P@aG%){y|K`E|hm{MpZv0QdEc!6t&X3xou9d%&s&OAS*BS8L2fuMffs-UbA6q08T6up zdtKx1dRQ#R%j$}~ysVyw77U`o{!0G#5tSHm`x+-kJ^nwrPzKIryWm*_cWlK2j_+DxRIkUu+M}iheBk7pt-9K5 z)zx7_<8`U7U~m1SQTw^Dea0xc=(z@JBwBe+DJydg0%wY7`LK6T$9=Lpc#*vGl0riS$I?Lm^^~b1JT|VyPJwJ>PAvMOay> zx?m{o&EpZ9@IbK%OT{KkpHb%g>|HkJv5E5T#-e!YNFtWO+PE0jMi*hz37Xu~_l@<= zi^lX~ZbkNpasA_sX%|q}c@{F#<#1IL!Ro!hIt2la7RT*zy*e9a>JOgKbv#9vAOIBj zl2agW%KNcdY{B3Z7I45P$VGtok?alua?JhXD3j-|(OfWUJ{miHx@N2uaD z1Oxfbx=YMx#^6h`J01$V1(qo6B}T93%f{_I8&1|z?|nx*?m~pD?#K>}JE5G#?5x`4 zx_q78Spn}CV{98W#r zsIIQIZR#|?$f75dkzD6f7qAH3j0DA#?tYbqR(jH1l%I?b;y9D0avzb^~-kQWkt6DzD&G(G#b+SqVp&Ge<$DEom`j8musDq7O*VRHz^B+ zMKw>dUiTUHcNy6X=1s~NAn`R-4G{Y7+c(B`pp~=z`>cb{^}o}M3sAOinoj(b@%-Xx za<0BnJiY|3BjRsU(kz8rb;p{W=`7y4JM(A>8_a#2r;j2Os@pn`hD&lZvxoT0O-szm z*D=ew?`98gAe+iY%=OlPsEh~p$AIPEy~pzJcE0Ag%YXlPD%ijFzbc?qV~!iG{%zmh zbM>ROqJzGY=~x;w4*j+XdG^kCGkgggpbt3T{R^L@X*yCKoQYd9K$Hn1T4oNFa1a!|h^{v_}e_0))SK(9?0Sazv=JFCKO28N)#&&Gk%ND#X^}A@$xrg9iQZ$o-TaDj8uP{j}~ipZ>Q}=nWAfZSo)cwh3=(A7vbIS zUyPR9>SXpv&pDeT{kHimE)C16nzh-na^o1@jLQJW@OzDm)Y^}xR-r5!ou5&$Wv6>J zk4XD>1a)@bURo`TW8O+39s_ZeK4OfUj<>(Ohd$;2{;Ry=;V4TEaJNqh3rIU(Y2B^J zeMR5i8PdMrK{C$z>@~P$T{N-OnVa;Oun^W0OT=T|llbF%mcnG>%OAHZCN@e|ERvpi z7bucCfQO@daCCbMUimAwWNc5 zopbYMExavcT?dZygeJ|9b(9wR6TMR?&RXZcCTf_V=%(J>lh2~OnRvC=;gUaAj;5f< zx!#5&Ac`IrIR|!w-!MbYC3p?&268US8*?tk-^#DU!fpyMW*LayJpPICxtOsVJc2Iz ziuBm$yl-4n{F+vwT4;z)%Tpa3i@H1n9jb%7Q4n$-JKiJcF5@Ylo(Vzs#un)*l(1}j z-O788>@yd>hT?I~QDKf==CCo(MqCUNQu5MQCa1@arn&EyvmQIeU@(Q{Wq&&?{SuQc>rye%gje7f=L;o!QagPeO>vO8q^x7Z=ypZ95|ClKz6 zwB;CDE-#vDY@?%{E-|+bjKf0-C)gue+g3M~h@8VkNtT?;AHI4*YD8;KzDT+Wslrwn zW%o5XXb4ibtN!_MI&3Vs|EO*nE5dBn0c54-TxK_T))P@E;W>X5gt&a~c_eg*H;+|d zht5Y8-aLL=*bnlvSn@3h^NGDZU()1(USsP`88m8p@-$<+IDET6tWRaK{`#mU!J8rh zrk)5TQ%&p9a|fKy>9S2zJ)G=!wCO3e>59GEbZlRnoen(acF#P1L)R?&>7T(5m+yN!C7MzNKmG$V@B z(jBNS3r9YaL(s+VpA_;Qw*L|)Tu&~WG^xWUW=DDrnL9m=zR6$0RbzXbuLfPl-(;8% znq1Mh@tg2({e0uMBEj1iV@vc!JWBWT<$4C=JU4@u zGLGE~d+Tl5m;FR>I5@Vq>40cz)XhY=o;yC{yE9^+e_4-Tf92Xab^c|_V9n6iNN^iI zdmRo-6TuJ7qkFBy|b&bcfH4>t^G7MF+4x~eo}uTLc|vP$2NCDm{NM zCCr3@bn={-m?R47qhJ9(bh*M zA_Oih^dsadMh!;#)5a9D^!}w%-B(}dAari11wrVCPEwl^{E67xf$$n&!3hsKYk>W2 zRTN>V&K;i|w-k7G^nii1jE$=q$mEszInCz{9Lj3e=R$V~YqCRFogKpJJ%-S7F1fpJ z2&?xwgn#h-)v8_(KurdG#^$vLv`1MecH&~^XbjD=;EQ1{LEDMYrG|Rj zbG*NaGtWK8d&Xa{!cQ0612^mC(vO=d z*4Ap7j5{mM-zWJy5L**}X-a9pRjL`tMNhtCxq-&Bpn%Zl9L*3NSK-~>{)sfmkjt|t zW3bq|2T1i{E&yWX%YmH+d&0^E)OlF$byx+(S)r6 z=jfxqVHN2KDzq(7!D#L0xg@$R6eCnS|vOrxOm=%3r9n0!~^AvW7Y zf7=B>Wd*6e#dL-aa!z@D6PsuW$qD-{xT&dYOc@Veo{=6~vS%MI@cPio8+u3WPgKp! z|5wfbF8Xo%Xg<-m1~%XQIL$|EWGl`08q?Njn*X4gi*WJ@&1VkYHSGPJThH5#M*b;c z+m!XuK!d}nHkDz_kNZNG{1v&?hFIm1_mV_Ut-xZ_)^|rQv0>C*XIjb6z=@AxW;Z z`ZoZvs`p;+pYzvUBIPLzIPCoh|73yP0(ib*;h)4cy4aT8*Twr%L^%=8k8`oUn>x~- z1z2`2_jE`Oy#hHgH*GL!P`T|qF1K^gGKFG0kOBq6$r$1vt^A?9{}=!0LEIj|2R_mJ zsuQ8=Xo+TI{@_daClZ?j=Pl9va0*}2_>U?$h@amy44oH!{c|nx2L=yp2yO0bh+9Q} zTliR1UsG#3-PQ#9TH-cT4GB=eMtd;r96>v%u&*6_i&khXsKtx}4Kl;>e>Wb*eXSTU z9;5olqi~7sAo47tZp-g5B^;R^(`#T|M?{B+A#E{EPy`SE0x8sJ`bv z_zzPpm)X!xKk3TIuO1{bj6hKlSC|jDb_1WP$;VVy4l5NG9-k*Rk>_S__LuEMy(ZL+ z;CneY)-rC;%qU2_r9XIyD@eT0pQ)&O6imezW5Lu{;IBQ*hcJ>c#3YYh?&Er0OwfT{ z+)!IJv3<&(<)-EqZk~7PCCeW1ay*^DK~VHz`%GBbv4ArhmRH0-dg{Y4J79Q3AExyX zqyE#R5&t4N(Z@&$kn@;o^fF!{Bk`1!Y#{f*(%j;2F&itCh>Cg?wSqu&jdDyUAfTy` zUIn6PznBtkCSDz*FZxI04uS6Skf81|`I4)klJ%zMjCLCuKm~I&AZC1;dN|+x^N(f% zDURYge~rTX;|3{Wp-taLQmZ-4^~6}0T~pe^=-^-wGVnno)C0p2Z%g@3Ar2Wd z3qC=?5H#2#R4V!mg0ZKnq&Q4$$QRvkEz{L`9Z3~E=FvDql+WE;vrEx+jy&zgCRiHw*wLq?Ec}LMkos27_6*SIkcwshiz>*G4Rpc~mRyYOy zt>0kp+F>v)f2+(ul8`PDn>eRS-~!h1lAF<`X-cN4W)-6x$8e|_|Yfl^yG57joDuHkUs0$ z<%y80+{1pQZ3~&QLm#)T>P|`1o6n&w1N@PClK;qNpY7Ys;z5TDesm~iPg#eB>4zr>S6gfi%+FPA{e#dbrX}@1@$fF=TcgvJNCHA?7~#%E|a-;Z?N!aOaD#3!hvi)}Ai0RU_O4l;nY?nH5`qtA^Q|E?TT+bKpGLLDM@M z@^QrC|I@G@XoweFc%}RyF%h}k;a zN6Si;#!ve$I=brPcuL4Y>FMfpJup(Q=8rG56BrJGYFRE&P6f-l;sN z*1XDS97Fke;P3HM_@?y?jtf)d`?I6Qf|FXz!*cGIjp!|^1iB&U(LE-%Yz+)ug9xyjW& z_;-lalRNVp#zySt&!~#LP}g{Lv}(MsxpbKT*rqMRH%v%AeydK)+@}4O34$pt)6uh9 z{8nFWAeo2dsc?M}?KF%4r;)(S5!G(!HO} zUTgB}zBoSur;Am-PbSE`cNXzg*RK5$$w8ef4%V*Urjx3IBS+_=&@N6h&+Qj&qF_#)3aZM$^5I>7wHNP5uwfts^-~N%nK!wrg z3)`3WsSlDr9nA;f_y4V$(&Ie!L6<}y-6s*4iLBE}0NczEmGcx&*CM5O9Vtbmv|oP^ zPZg3096?FsYo7jK-2Qt!b+?IFCw0YI*goTgRMa73Lyxd9Zo>MUaEvEd;sovaTE9}^ zp##%LiZZFq)@Iq*(+y47GxFo*n`0fj2gm77C}M9)pw)Di#Eyr--}Nnub!_n^a@#a{ z_9lfEYA)~NN8zdz%b$onV$p=;xN9;^LnoxhU1Mds z3^n5EKbZ?kOnv7v-az)DXN3!SIp+ z=it<7`KhaY%SMoA?Rd-TS_S5t0nJ(^^y-f>v4b`U!$ON;z2q(M5kbGYT!$V)xI!bu z1ZsMx2i#(ll{y>VSkxCw&MD4mtl_;WeN}sP&gif6Sg+19)j1IV`X|+6`D&^!$?>;} zF62vP-2RGN?VLNf?)}AgLAbnLlzU(Ny7^+3zxU6&Q?hq$clOuzKWTrNW%n?5+I#Wz z)hxeNilxp126AqTb*LAmQ&itO+ zSUm$CuQ9btXCf5yKH;MM=2M60QwHtF=~a3*hi9I%4XqP~u>{0Fz7B4q-SwzxAfTWS zY*Nc}w+<)Z)RSfx_865d*(i}CG`4R)TDGTHFS*<}^FI44HS`PF zmY1JK3qei6E0d?P*Y~Jjyjp@8v?#_z*!JBxKINN-x}H5Wj`Zxc%qsiSSP-AEO^ko) zb_27_koy-HOE1BbkC4wjh$XzgRmLT93Lk;Zm_7yqBpQ(QAI^q-%VZIBuN_&IpNiZI zBkdXIk3W%1^u{ksTaHr2`!03ATWTz&N+?ybuTtV-PbO%I2)}| z&;kTNM_cx=&%a=$zr`wa1~vUnjBkyx8hS-v6(=Tgw0aBKC`bX*G#aJ1c6hiP?q(os2JEs8<{f7=?7j-H535-7$NRFVIn6^d3-rlMM>uHo#OmL)O@aXF zX}#)cd3irwyr!+y&I?e<>nLO(j|GC$~c{s95wZnV^sTc|m8hw8U`Qtr&c zw%0RM_cm5-KYy6kJOB)r*!>al^_`0YLWxY}4XNVJkPoCq-4Y_BOIJ&POHK|pqFpV; z=2m!3iJMp2pLa}Oo?#_=+{Y)?6s9f%(>1vGi(H} zuQ!IIiB|U?$T{y+6`q`PIJFot(8@)8e*l?%-U{daGKn^~^0$wMPVUT`b((d7qP2eK z+MOBun)$E)cu0&3n(gzP;CTHa~lPQu&L2OAU|lTfy&-{MPW> z#7`eh?mS@D)$aE`NSp6nQ{Vr+w~uqb_vT*L_q^xqb-VZcMc2=~{2^X@_xG*`4ZJQs zgfAb#ubkf)enEa`@tef&Jbn}SUBK^${2KTrzuDdA8v*&h}-)HQ>Z~Gv`iek}X z@8H>dXUpo!;9hP@4BGm8UNHU#1L7w@7NL~uc_Ks;aH~^rUREvZX1eFRHto|4;jv)% zH3XWc87^WZ-8{&g#{KXIb8?QuXHe+>(2*WuYdc!}nXo_l8Qi&sK>aHQJ0d(*<3Y~S zbF&{fTOas6k9ak@wJ&v%Qh&&2lSk|jRSa5(^{5aJ%VmbBKb$u3W3v2^J^Th@TY<+j zW32QYwA-aQvslM9A#T#OG_HRTt$qM=n~7x(Fs4E(NndM|8LEf@r$9h zj)buA`i$>}>0-`?}eA2)m0)gSQ*x_1oiw8bV>hofQ->MIn^QI2`@9d>1~)Q)1M+f9~h zN~-5AJcsR9lDqR8F0gxu%Jv=<*fcZPXYJk8o4!ehY2|TVD?t_Aao%Ttneun)V4~mc zS|^(OTlf_G0e$T<_iLiB%-3dQ$*b(LInw*uN#56RqnuqY+3#6htWIroc?@CQyk(_Y z-&slupS{g|w(s#8+n{DfxMJ=2yZHzN7Vc@x8hx~iuBAsF(Yw?1@MxG(Fk3L#f%9QB zZ=kYHM8_*DS&^pl10ZcZ`RJ!;_0(z*pETHB^C^__Fsak+5$*OoAtN|Wn3VQ~kd;8p zA_XlU1UJICNy>AkuOUv*ilAv>{qm^&J_;Uen6b&LWqAan#;8LBLv`zHgAOm;;$ zc?#J_l8rSd3JKo#{R`ywYvB5)ZHlIG?G_D|38>+sN3%q4)`CxwW^anyEkcpxj2t3u z!}u!ST}>y;zjX}^&_HB^IG>Ty=@!O5^a2G$&lJH(ec*fzl={>-i+-a%4ftr#V6^o& z00ppKd_Y6xpZ{G*KH}8k25PQLB#u}DmK0OOFOg2P3{io|x}V#T#rdho&*7`Bb6&d2 zkac)L6;iavH=C8yhwb#+ zTK;LaZ%HDzoeKU^q5Y8i?CEyvb6V;m3Og7ec)A@uPnfc)W0s&qSYfO(D)4a^4i53p ze;z#pQpcLqvBA@@9>uFD+E=V_mQUZ>*-D);mn+r>f3$cOY#{@|cduoqv`n0bPeh*| zCk2yi-^Y{e=^ta3g=?svs8so8t7CVrhtF%T8RpvAyx_5=zG@Kq7aK>p@V|c_gU@5a z2R?6X)B3-ex?bO$WEXyXh8_7B)}xH~awmJPjrY;IlfJ~}$V+Mz-eVvJf-S19~L8)eT{p8>eBKYsh#U9P{Q^`V@u3B@@gSoeYEg5M6J1Y*ps8+l=EXzDpQkxt)Nx>VA^ zdGE+X2I4G?vKSg3I5OZFvlo(1zPvMp7D3k)L;S6uVt-*+S|4*`C9eQhwr_1;&52IzhE-XLTh27DrKZwL`zN&Bi!+bC#tTg1G zj@v$p7?bnngu8xe*g3`aas*~*o@AE0f^h>(ks(F8B~pubBP5$Pr5l$%1tz7yq!f@6 z4lWiru7AW}k3Z43>(j6^qQMyz{`s{m)2RKXeD}7f_+%RLDgVCy4 z;Ln%xb{uN7(#^WDbPHLOaRa1rb9ZUGo5E9c5X^5lk1W2y-cedX^D*|2I z5Qj8M4S_aqV!A0%=fx-8Lb@4s^Mc}=mW`aIdfe9tk(|hJX8&WS;+SvH3JVdjbPG)i zP^p3`t3(NDAk)zb?nBP$Zs`E0Dd{DA;Nr?DEkxL?9c5vh6+v({9|<}HZ6uIFCfyIb$E z^OhQy+2-~+9$(_;@Y_ZWpZJfOljGc{j?>t>PH5Q6=s+YutqCWl0_-S7Tbr1#`e*5&0(ShOaXg=ip4UW@!+<4co^Qn&Q%Ax)~!Je=B=#eF+5|2 zr!p9~Uqabtwv=sZjn;AC$36{4HQ+z$KWYNY<2|jU@CcqJEdwU@>Ty4w&bo)E=k;`^ z;`nYP={yt0_|VJ~AswWpr6jN5tdMTVv|b>Z(Gr=qfp?}URPA4SHbW$>P6XB9#^-ah0D?2}opMSpob#6%lA<#f?qUq)vV=GIQ+gUWnF zndzdRKB+Psw*?c6oxhp9X>5FH)tEHCHo#2TDCAym)(?(UW(QCfzGo(Q5vZcUSjzHF z-{eA@5|l6UfjFEQb&i$3)vQ)@gbf}63dsb9y7@3yYuV=%MwL(jA|egaN?qA!InF7c z?d*d~>}dcGpp3Jj>}21o9$YHXf)S+Qf>jK2F1Xav2ba2{;=9WiodHb-Wbx?2GInUY zskV}?N1x+Q0^w8iM!n5-iQepr-s3&4{6EB<34B!5+3>SMfZ!dFNT}Ob(h`kI1gl9W z>I})?9ht$nptOp{y1ZDe#V`XX0s~1T)9Vz}TD5hd?fX{RYN3lPS|wpg0w@G*1+)rU zl^f#{^p#CzzW;O1oyjDC*nYp?_xY2|z2~0&Jm-0y^K3_6Nq))s71|>2yX3dkFA59> zKdZ~$2Wn>=L6y$A-TA#;erZnr^+sGh@RCUeg~QnQl6MFl6ZXbIXBt15V&erekW@F1 z!J?Zqidv}B1-C_0NJ`Kdh$&wv44@K#o#nSR+3e2CKpN%b)Dt4*L|46UQJ&Q zdp)R1fW1t@p)D4|#PU?LpYBt^40)(8s!{anZ$-jL2%Zvl%@~yJ;J9(h8WRLp={5$9 zK-V$ojE=QUQk*Xy2reS#CqS z1H=Nn8i*ap)nFT6AmIG(fNtIA3UtQ`N$m-`0X%+;;w}eZnTRHU7IF+EMU!9)K>z;$ z+zSyL{hNS$WQyAZoYO!w4V)E#D!3JDt0?V*8jN{uQP8I-?m~y+E=p2c0b(J& z$3S2nZV9_s1VsAgaO8IA&|jCczd$)>e;4O|R5CN&A!}+e=l^coe9>2>o&WDw=l?5K zf!>dB@R!W|$NB#pm4ov?1#sQ`U`Ei|s`kPyG)Ul_s`5)X&3=y;Ma32M2J)E^{))*y zn0DZ`LwvFwU@PUd;4)s7y+FVk!+itX3f!>Os27YV*C!}vh(RX_`R-teZ!eN0WD0}s z5ffD+Q$p*oVB`^dU+h+gK=z==gKjD+tUHiddzWdAap7Yv=U`w1C#vn!vW?>H0yene zbjSn~|{U<@%r4jzpC;rkj zf9aLm`=H>HDI%3a3^OT|EJTY`sQUoS%-d=<$w9f4C zmnq|~0FJJ>|vDBVx27ooSkb?kl?^Pf#8u z0+g7XD)F0Si680`Ztv$Ue0 zG5>Cre0I2!OyOKIgv%YL`YFQBd_SKCEn>#*MIkby@2945Mi=77Eq2{ondX3I^$sgV z6b>~r$43vI9X?LAS4UT)2hWVmmbT3JIMv?t$-#KN3dAn6K1DFdlvbS}F`4Yn0ZwyG zs<}^St|_fK_5KOGAI1v8XrRgX-XNKK8vn%jUQY8Z#`nSR6T3R|=tv}6IRRv!>1XZ< zDljh7SauEWSu`B4be6PPy(UL&-K}a^2 z>!H*dlx4q>LAT?%OI`HiNaeAYzPr#RHCQ`pvrP;0j)7~Q@sb&%JXOyX5|g9_?<3Zk zfk>r|y3%XXD=qEqUaRpbyv7b)Saou;RIPeQ_0n7EsZ;AHU2E>qYV9@Nld01!sM2$J(* z!&Y=t<-ZYzC~|I9`ST*%k6`U;iTKn$k)D~Yb@D9#J?G{@wrw`)e)L;a)<*;v@$9K> zlr6GSKHL9#pYg+%Auo3kd9P0+qV(9kQblLh=)GciQN#8^)_`TPi`1&vZxuThdr{hs zJ(15}Y2(Ky3&5#@%8C0*)B~7`{q|5r@}6|OH5o;;qHjiIAC{@m-x3vOJtc28mi29{ zDhGAV$*gaR?C}wtDx8lrR3<5QZd>P7KI^)CU-@-;kqhEEC;DPz^SdqA(6%&5d-h2p z-``Icuwy`-a)Q`CoF<*XJ^gb&24WZbmxyIZw+YPdVfI(>^x z#xaf_EtxepSvV(|GANlcESb{BN61XQ-Sm8{@7TrA{Z^f91V7~d_<**cyk#M_zLn96 zOy+|~J3f5qWkSdjK3mIw=x;y%U6z&IY_&DNJ)rq5JsVp_ujajDKsNT9O^L{MH47K2 zzeQ>;{JP|e$&!O9IXYRY^IP&&Rr%I{(Nc5Apw2(zbMDH^=kW$*Sorxw=4( zQ$W8B({FvU+XC@A+4X`YF6-W}%U#)9jOAt)SDdM}9Njj03(xj|?DlxhKUC%I@}8S5 zKf7{9tG7Y=ZJ2)Rlf61Hca6eh286fs>TdZk<2aswyiK|?nbf^kRh4aE8iYCqSH!gYk-YQfklZNCMqoWc;soB?Ynt}U+p zDn9D_f=n-`IDwcER_7UYzlA3gJX|e1c4Ck6em3G>)J0ZB8%=1>n(p}vSOldyiSSvk zhi6*Zp1zTYx(i)QSjXkqXB?;y?(_yr9ihtA`bMs>=F3u)*Qo{ZCke~yp-G(7OmkR~kgWxh-~ROp5-CZQ5|w>S zkyH+k3PHcJkC9v&twvU#My8at=LD<@LZT!v z$%|hMYq3sPizD(BgR8XrbEIEYxw8Kaj}XiH*J@u-epNCq`h9!4+n*wjLUuIOT2zpN zkohu8@}E$yM$!}G^B`SQzrh{ARq@J9Ya`4Nw*9LyF5XauNk;8^?E7DGo+b*TsKZ6~ zi;Pp$v)JH`UzChd{RnkJd%4{Vo(%HqmPVMt(OZpW{nQD^nBU0MMh}$FIS04kI=j@o zvCWLKzIm8s@`pf%=zr*P$dZ2U`alc;=X9r@Cz^&nIzeFR0 z#f?jw;nR6 zb3c8`%MO|rKJA?*2!qOS7M1LYKcU_XFub!FdAO-Mw7kzou^gtuw3Kl zBqk%~=2u7=u22n7B@Jac4VlQZmdfm);*rJRU@;{ZJLMxmIxp<99bnWi@PvQL}MDEfcA##^Wh}_iur%}_& z6FZHeGME}2BlnT+7`f{HQ()~%0tm4X&i$u|qPhQcBqq7>30Ov^-+#J|R7Ue3+<*FW zu>`dTJNKXdj~Zq7{ik~JV_z}r_B|KK)FD}A{vVY2m&JXUCzzyWAu{LzvSrpoWp;Zh zv#J>5cHSr2i~3+q6O89hlnekR;dAZ#Bu%|Yh^e2-m4Wesk-yXDzhe8+Pb*TU)k>bE z&Nl!Byu3hLseo9qAPKkdrn2t#F#goRFlI;kwpMa@SGR3>os*ZQcWL*T$8Rs{kc}r0 zW99ziF=ylXF?E|Xop2gYnO0<({qEKty6CV-TCVNwcq!gj8x=PR%=~r9#W&#ocr654&~PoC;d>* z1k6=>Wyq2QU)^eqa+9SzpV$7yN5oZ6NVkuPo7GxXvKb4Pb+pBb4&lP{3@)j0%BJ^O_scB6BFiN7v-)to`}^t$AE+^|;FDs=Xa%yUO|m-qP@weBygP zk95sn%6y1E;m0{q;~JtS%Y0Ny=%lm+YfaC0&Y-@!HN8rC4ly5esRxK zQ{-gAWMo%aX9uj9T6GM;IUIng2;OO5Pds{m{AQ@FusY$9%)hZLv%($DtLPWb!MHnX zDW}Hp892cEmS$cOAMzLbOo~W$&;LgLu9jmkja0?XW;uQinNZS%Sv$dVn+a69+hN;< zX)mkj8`&qOc<~VTyRE=D)(Y(o#=mn7cf%3cZ6~pO0wqnpRfCx7fTy)~1{cx~GV2bw z%=jegB7;%M0~g3s0Q%@ZML-`~CHh4CM+*&x;B71efnwQ8GDNS0&@21Tt36-Bi<@!Z zc??QIs1l{8l81P~$q6q`F*|%Kh#&%<*l4$Xr24bO+c@*QPQ}Uyag(pu7=C<+-0{#7 zU%dJ}`}e0E?CuxAc;$;?qI;b+h`?lL;RSFJ@Fu_}KoWSiCbP z^i>hiiMJN|n6oFVk_@*tjBq(P8W0a#2BU)@8uLYnVeiWq0l|b;uJ+C?dD6?^B`VMy zKdl^e)nbVrTGF#FBEBD1*L2ffqU+f$_5AAzRgX+G(fFN=vv|vX!Em;5aBrQ1Ap#{q|E%-#!0v|{o zTCiNvf(4+gG+K~|`@X2#pK09t2h!0g7!5vfU^gXDNbqnLY0hq8|o*)6C_@jas z0u~oeC}J>AVMB<4QTH@?0-o0eH@;%jJ)z6GYJbeh+i&gH$nl`>MF%NK#;ZAXf**yl zjI_4VGqd?^u;RAl`UEt#7lQJsab_^zmSB)6Unt3XTfOp5B_G&klA%kp%b3GZ(br^R8T`Y7ZvDzQ^ z+GFE6USnAnjO@P{htFEQZ->-^k5pSMzs}Fx*6#py(h!2718!=M9!N*OxkNDNoUbwK z$L#B!VAg#OW>xZ#vWh-}TES(Zo%SF8tWfJdP;18LUO}yF@uQi3)8NK>tzdT%_)}ex0L5T{rChUhL)tbO%C7>}ut%;s!>?=^~ zV|^8B-6klp{ZWMyr6aJ9Nz}TkXI)1@tyk)L_DMaBx*nNmrYVV9clNC3XsGqUp9pHr zrMe_)JylTaO|NUzx=SXx8?`D83@CAORqR4=;ucVtaA_(|v$X|gO}I2D=nK zc5r6qaL-{LQNuZ!zZ-AmzY4+)Ul@q{zVdi~GIt?_`}xWrReA%%C$H!G%O4dXPxx%M zY?WtQ?Vsd8R_yo~r;hzfp6n9oMxn?#+#LAH6^tP@@7$T{xqjgMuIL72Sh*vaR_^@^ zlXPQ*L?&lz0q-ye2tn+Da?H0TtWxUgePETk=j8a19XZ3a<_V$~Piq43qVIe_y$WKB zdo%6J->Z-#)_RJ_eXfgGMlcQzHV&d8VEsP+CBQ$sVXelNRb)r@iFv$Q@OWr9jFw!~ zxtN0Xh(9VE#8K-z_v}?TXrF_FUexSeOAq!AUn~DU*{-|6LDy0sg@d?pk7#7V-UY0L zuy>ymh*sFULuu^Yl3pZn6Kb)q$@XPr zE8MhGaLTy|OIrMWMXKS~cuv^9)}D181vjn8QuQRHo(~Yzv=Bm5>e-gUO}l&6b2Qwv zuR(CrtyGu9O(O(1wY|#Z&Rr|Qo9mG?_1IzRysqHjYE)6)peUR`3vxO=2*#1{pz(sM zpF)OMixC`R)q>PEu8|!)8JV4zFl|~^aC=d;z}G~|yuRFv915+?Mg?&y%>E{|PsQH1 z)czNNNagrXB>_Y=SHmVP|r~2?s$s6}`{WBXXy?^n7 z|01_I*CqZ}H?0JIh&ro#^mWfChxK(61;k-|BKkum_wAlxXVuhF=>T{r;$(h5VN5s4 zG9s%%nkx6B5c$Tm%9Z_&X`L#v`ZGj`&8ox^N!i=qQd0U8s>=VOkoQ2#60DtQ_Utjn z>>;i-u49CPKog-VQX*Qaw{Y)tT+zG3vWfmuEq+owB+FDRi#SCsnBB?MZAx>g2ViF`JeW?e>eB>~hjBV@!bU}M6SO3s($eok^VJ#KZG zoiZ;0lziC$v1`ge~S4gyd_?5@bnj(=jJFseiz;6PH-{%g3}KiKt~a z+yCr31T=Q3S>pQAu3&aoD1M7eykp(OcZr=4h+PGJyibF+l^GDNHeDgsmKhsl#xBE= zHp~W*``;`h=y^ZF6{YXVt!$eWANmh_gX{^(Logi4#+Q(_*8U602n)F|Q&Wn~_GQ=0 zxre(Z*Oqpl0wK?t7Ba!+mJYT<-7YM++Qg)3 z3t6|y_29;J8;p?~^)N&H?%x+#O2X52TY#JA%tJ^Vkm^t_J3|4^b@sr+=+>#0`FqbSg@rEV|&`l^chrf!q zFDF9GFRR*7k>(dsP1qg6MH^Rb@Q3LN8v##KnA--3hr??GL;!H%o}J*%wb*g8JA<)N z!PuRo`U}nBky386#gDNoOJ2qzp^WjjT#Gg<%MGB zi#xr>?zf9U3y}nS>_Ld>z-OAl)32=VC7fql2z;_1!CyV>3HLkpgzU<%uqP}{SqILQ z>k!4BFgQoq6P}Qq>HTv|FpiiN9>%?hWb3I>w}kJkmSO&08ug32TsbW1i*PN7HV7asZnpK44dq4 z>_fvAyO>QRUNQtA8x+J}S)IrcWcd=8)56s*GrQf4ap7(3YIndQEHNy}nJ)?xV6~)} zk`qnqc-cgQNtv2ocS!LgDn;sGkK>gp{I|JLCKhi8=|LT_nXeL$%gS~Y1Coiwi*|6YxtqiQo&V#aRE zi-$_>4p5dElELvGtjF9Fey zkAsyvoqo}n456|V8)pnYD$9gKv?9>N6Va;7!(+p)n{!B}_{pYZ)u~<=+oRL#P49JV zNxRCvWV`$jJR%JWu^*hTzDjazzRD3_u#1eoKV|w6kYbu(LwOj;l0vW(KcbvBzXF;x zi<=HjDh2LVQ;dmzbQ<#|sMJdN7C?2mN;U-l z&7psRl2(W*Zm?>MFDnM1Ra7M&d)iq^A^{z*YZ?K0w40g$6j9DTDcy-r;d;LJb`d{e zf9D0TYp1U=L{{VB(ua%p!#!pu?>9G49&v$WvvKcI%5^>~2gm;QRH=-pi5Qm#TE`Zu z?!{)ixfL2No%=?=bk&XtShJbNZT78yCvSWLH6F}x;lNv{@9esi8`BS9(t?JEP*MX0 z55cCM^65dYW=s@3F^z*Y8nZn642lP0(;(xs;UYHK*P^fvwDzGhikAjMn!?9c3t3mo zC9L)JYwY^h#oS=iYiX>tTEt%V#4ks^B6sR#KmGVC(&yZ=_q?nYAd$wmQhx3SQCbI= z&X|?LrJz;}x53J4;pK!4SL!7jOOJ<-T6{JB{-qtGQ5*fclLM_;;) zuQ9n+2fA(}Y`c%{*7|zMMCgqcGdhno7w9r#(9gyg>`gfCy zRX{z-Z;OAMs4AE9-s+@p*6GVxo6vH^UPJAP1Lf$(T_{1J!R@5&v)7WV$7($Y|76D4 zA6JX1yjm^)Q!V}_7|e&Bvai{qMsN!AYl`r5f|j43t5zx`(#hn0INCz}a;nVgKtkn; zn94s-o3`|A@$X~I6Gl3sDiNK9;D3)WtWy>oSSBU=1JrMje4URAgJYgG4T zt@Q54RClDAq{ffaJGkv@)c6Ng)Wo9okf|wn0!q{U z4ffwd>7)1?tlq2^X4Xz=fITEzJKaVv37?m_Wk<_aK&}|zII=pqU_^HDfwfkTkbCdq z@(2PW(ovgT^O5TOInsF*LMB6gHR7)n#EnR9dM;ZGjRh^b4ohRau zvLkSB%r_#XBhp(6JXc1)gbEa@x{^IfBfj(@+5R9!G2ltnHl|pA876!Y#nR;!sqwD) zAbq@2xn<}vtKt4PpJj-8{eu>SYzq(&;#_J^{zwEX1GF$jRGVsu0xR^07d>L?Em|l~S`N zlD^i9A>{(y7b_;VrLXYW2>%iV@7$4uYz;8U{WMHCdaOq`+P|RSbH$2l*{JqIN3m2c z^U6|pbRzcFMb+PAc}AcBIYaZ0t6Mjn81X{^(0V#Wu81mjyF9MT@lzI&QV^K6#kHx&Qp~*WP9{3$s=%0 z?Sh!BHdVnM)uH<7@PuYOzKed@e|Sn@;Bmzs%OPr&FpO4f`XMT{4QJ-pC3*;Tt%fG* zNI}=gTaaKfOYw(Pay%|S_M?yXgtA*Z94JHhqjG3KyPRY?6_p~GVk2kwPk|BSUkL9T zw$&iDf}tsDU)jSYyX9x19ne0rd;i2I)KIF%PW+s8Q){-FsHxU#SXMh}?&3Qw*+5NAxaYz4eo`OULh|PnNIPG7HO1 zw^3g$`#DMT;%u(EnQm7tg8It57RfoT*z&nOzQXVnN)eyZn;G=@ijDam%3;nPjQI+q z2m6PoL=O%`U15!5Rw~^APuo-wn~wu+C1C(62|mByskCuOUP~2cqs}3SXg46EMpr2= zsd@G<4+xAT+lwqT6N<_s8<;43#F@`S|3$6>MATfrCOY$+jIh^Sl~JVRw_>xMEE+cK zOY^uQi~FZc<2S9f@1}kFz2h`xKTeL$$I`x>!U!V6>;fs-Kg=0fIaf&r`%coLGe>0@ z^%4Li>2KBD-jnvuzS3T}6KlxboeL2^%--RJlM!LhkbO$n6PcBiP~^5EZXnBVgp(ml znSD-TCZH$2jrnq8aQ1&T-!}<|x6(YGYo1gy;dTtm04|f?=qeqmS1YiA1hclxM~2lnw)7EJNZ6Rhej) zXUabDPkeq5W9Sg#uJ5;EQ&rn%X0WL^!dFo-oqPqvrmH+&Q%1=%`BP9%yx>o-G9Ri? zD?u}qeH>pC1qW&*z2GOQ&x`pikx-Mp8yd6_kE)UZ||C%@a1*?LKFD!dsGzN3@xyK{+2!`Zkn3rQL%ST zR(M?9zX+&`tU$Z9QrLNt%ZnV;9UE}e3{)K4nYO>4Kfj-?TLc(et>(7 z01k>DI089lIY(pY%rVch(VL`?pX`#ofQ~#gLlFBF&#D8Wz>*RHiHDCpd;MYZAN-S! z0)M}|?f(z_t;93tsPOmnm&mb>0e^Ovg1^)Lo`k=PJJR9ruIm*1^-p~+=JQeD?{QUC z68`3#^#2_G{u{`6$v$DHhQIL~KgBY~Z1I<690~p=)E*1|e%UVtf0M6I!rwBU{&V=t zP<^a@vj_aW^5-MK-=UV?@P`^^GPv%7Thlo!AKVS>i|4XpvE^k$T~;X4GsUpXlzQvd zP8J2ma>2Olr83+9gh#84WKD9^qHEZ_3yo?X}#0l%ahaE%arPA6Alb(w`4#x+K{Je^=0YTSVotP@8Fe z!;Ifq!)=`=_netAf4jo;v$g}DRb?}VMMg-PSw7J{wSQGilD)3Zfvx`SY;(|YJCak$ z7T!@+cK5JIAJg-F_tfv3E0R~Fn&kwGuD=u9Z4xUHd%_hf6&?Na??k=BJ$)cgC<5v) zE~WyHiv9#_OKeR7cP>xg2saO`>+$>wBJsA5zG55w6X_23w_gTC6XFEoVVlSF# z8WXL^!e1Or*KWrfWGBu>7c;9#Ol^YJzM%CZ8@u~mL2FjKk`(;7hrELDh5-cV0izOQ zLQV>GGs_gu%cC{3RO}8t`+|gix6gh-SrrYz3TJ9xWgyWhVGulrQ1&<5r{YJ0a_$;e zXCJOMa*nRyUtz%6Rc`67(=b<8Tt`bS7(&w08hh>Ek}ZAO zqoq$%EpdI)J}F##E*GYAYkO-_X60NGGiSf3E7HW!FMyL?3cxR%`MT^Pe_PNqWr|V% zIID`Iu{U6yB1Z>V`_Wrt6Ik|*Wz_%!@pefHme;ta_EX6{paE#gAY1tLvde&lpyvkn z)Jx43I9tnqeFDHj_(qADX~rh3SXoR{_V1qp4uY{7w@AuV*t3a8h5=DM+^|YuAcXbC zOZK~elw-tEu791enq6<#%HNlQ2=s!GG)&_0EfP_GX0&X0B!GWuDj{fH<|3+wI`48^ z)9C>#FOa=K>?Ka-fD}D=L3nWdl6EZhr{zWux+Qi|Q|H#DnQKNh^$?H|KQa&_=2dKJ zVYe+!%9OX|CI=1FE5lj*;!Um)YLvYMmsJc_fUkN)tIaOcK#ramf23IDBK|E7=<6}C za81fT1m4SXvarnsFHN=|pC@yKe5Fe4gNbK|c^v2O84{~~vV!)o7=T7;(Xl@RhfNOD zB?RFA{?!0~!E*`>vClm;HP>fx3-?jL9eJjb)P#R6ZOQ0-(OH1}4FD$~KTCuB1VCOC z#!h!k-3NejQabFntxPuhXAPMx`*jpz z3j-o&dTSfEX(N%NB(V82HE=$-5?t1Iv75>OvZ!cAN#wP!sPj$hzM_SaAIa7E%qe0b zpE3Z%ewzqtswPKVR3%DxpJ?5WOO>)R6QV4=PeGIHiJbecn^2-z9fws#9k7UEv&M z#oxRe&~bQrivz`e)$iQxHzXN4BVg?b#zGHss1Sq1Qi<`&iJ)33iv;k+1_H_>Vq~So zQ(lQV75ySyrrq4xr4qTNdJxtrTollcgZx4F^dW&2$s4%2p}O6ecPAg53kYy?6rU)g zUgFD)YJ%Kpc#j@D-KZZ*nyTqI^-vr>mFmL%F*b`HB$|kSEn#DE`8lC}Yh-iB`%o{r zulsF&0|~;kF6)Dg;4@?ddjN)DNi$neoe%s=AVsVAhtgyV=zNK7%#kUMPgnx2S%L>% zt1ARqL9?}l-_1dM0{Pt;v~FG%%Km4_voY)mm244e)E$2U#d;>P75r1YZcN~!2Z#BL zi`yz2^9KcR!1rv7yeY+1{orhff0=2?9m6VcjwzJJXqcszgC1C7j6Q*$eD1$W*9#0sCMXIfeGu20Z_(=<6m96c|Vk z4tm~8wa;_1eWT$E8CE$8Xrq3QfIFdn(R;A7HbHKZ_)(TC7{4d+X>Yd-LaF^&p5)2Pn0GF|fLc+Hzhg;CgKXS; zA|Db3hpqx&LAI%6zZ~7*UcUy>ZQrCAG%h+gV zM7ZElWPjN!1*O@Co`mEoV`nUrzNH`@N8p+~{^g@Rzj33N&)}AUTUzAFbcx>v@MgM9 z)U;|2MVqJ`GrtYpMXJHw zF>ZQ-KeZ-3sYt`QRFSsUM#FFsqa3#0M#F&a^y<8hF9~x(2tA`ATkV6(m{|Z2N5LRw zK4*td(fCO)&6_y_%}s(S-N0`~#n}-X?`T;H!a!(Tvl&MfaR%8*-#6R8y&FWcvP_og z>L+Bvz?fo|&Pw?Yo3MTxWPLDtypCCtZ5q!#dz~aI_(p`|7uR8N*G&iCYx$5Uxadj%F?w)#WHQ)Y;dUg* ztb=_arst?#R=Q;*@yB~Cy-|M-jU6_c8`n$MnVau%h|6tQD{nnOprfAM9X&Y0Xy`b6 z;xR<77!f{EX8kc}0kaMR*gf$hBJW1;${Z0nFHqOSZPm_tkcC3;DSlB({#=*r`91P( z=i0*-4dSqqfA~GIXnSU;N#<$!c|u|$L+sgT-vrv@1?K|G_NBb)Rh|2o%*FQPsv7le z%+O(TF{drLjI0!hjS0DOjh>$PokS)~Nw9+Pn>T}Zce{c{<;@t<&)OMK>S6$PPKXoC zd~qc+F)b3?4B-x^;$<}3TBXO{4xyRy=5}uiqLzJ+MM-rZWdC%0Io2FbuUrB(^5jI~oSTdJz1# z*m0Q^XBiFm%24BhOb0Z7!x2wbVBhN<^?V^df)Ef+qwDR7ukZ;p=_cLY_KOtMmMMd; znRMo`mHJYlDnVMWs|E5&s8)6?0U$&ek-}dctylp-lq*Ui*${m8h%`7<_eD2&OLv2^ z;f?zKM{4k|sRr+M8q_|hY_<;)uh?k^OfBsc>N0;ym3h=DlUVKa zt);t+)3cPe8KzE{PG4Gp|@$~eh@w7_eQg4u`!x`lZ`JTI0 zAgl*x#4g*@q@aJZ-L_lp7-kW}v3O{Kz57)K{Lvd^lktA*@AV#Api6vg|6EFlL`m)C z&~p1(U1Gd0vD`l2DRFYLjhlM6QKw6slx!ncO4u*_DQ&MPeZJ_gan(pg0E}~=wXoN7 zKai6cyJqzj&aP=F&JuuPsznnd@<_4Gv>snbvVZi4-0def2)fPK{rcby_G`C4_?BSw zhDXRFj2m$9jp3xkf4hqrlUvtNiMu^!A+oIFfwuTPMJTF^iulBF2NQ;;XB|k?ZO%j! zC5Mk1;0I0g=Y;Nl5JqrT4aXuFnFuP8LwzIYg_yB|VJ|?6y+|wtxn4Y!hU5MkKe3$& z2657b++%lPr@>zss!26w_M2vWR*i3|TlEfo+(L1OYR8ih`KLGEf zQX}uH?$phiA$@70AE6oop$1FVhf1(rpEX6995+K}A+24K*I!RAf2byqy*^NK2*G4X z9Yu-SbB=xYVxTBCYYL$YiwLVGY+iAC{fsptW8D-jA8ynOVO032K_)R6d!~yYv$bJA zKgu{$rDM0*5Y^w6T%xt%5$C%$<8n+*t^p#j)6EgG7*{T6tyRastNyR;P*XBtdY(8D9Y-f{)0XUN)-B%8xxvmpw8R zP*$Ko${O>|;DDps-bEU1%a6U|bk@j_vya|@B9u@YiysY}iA-bOyP&&3oJb?_i(weo zX&$^akl-*e!CBc?1vH##4&TmY=^(+n%`S}#)$E&fFG!6d9a8V`zN5F=i=UDG*CmA9 z{7?5o4OqZlwOXXBdyR%w0x)8=-OxmH8fMygO51=& zoaw*hEscHNe&YzR^Z1*BeVm+L5%)1c(rh}yP_?B_$4A+YV+S#kCz=(Q^%`o6ngT%> z+httc+WN1D!Tt13|4JKy|xKC1%{Wd9`oRiC6|9ZgiH^CR7 z&t;BO9*U5!%~8pnqE&K6{oSxG>1sLD1x=kB*}+msSJWQD!(3MQ{!Ce6c)lJ?mYQ&; z_o}a+-t&7;?^!av;0isxrye%Fk$ms6%+CJK>@u-wGgHfA;W(m3)`Lzb#brp&9Azyg znm~o!@PepmCr$B1@4<^HJiy0tVFr4uOrNt&)IyypTg0&r=Ts5UCQc}uS|no{cRYfU z+Md}&-heRDQ;j+3Z)uA-!1(MJMi2B4Plz5E7_LTT{iG=vc}|lrdoSSr$lHeWuCl(?){<==e7i z2{8agTGLwlj^gG!uNDJ7O?nvNz_-C3E?N7B2RRm>svdhbiPGGtjBt4p zel=2Iw!#DLk6@or=Dd$G=e_in^ON?a7f?YUky9jdpPu2Oj!&_Z2f)JT1eiTJ#W??D7pp{R^_Jim>itrh~B;x&-rev+`AqFUSWU zdQp+J%&=eDE;K7%uy(1Jy(TF?Sqn9l;Bveq3jS6u=>;#OKHnyvlLqOM|FwN83a`Vv zYx>zFtvZ}Wf05?Ez5n{vBhb%D+cfvC`IwX$nr23hMKX)~vomgcPDthp3#G;GBS|-p z{U4FcfApi~LAvI4U9;4aelAdRb=^Cf;_sI{X>@s)ydSIk)1{H8S89Mr>Z<~Ybpg*C z#=Vmmo8XirvLgCJrN2h5GAS1M%617Eh%9iEnOINs2jkweocs_ixV`m)K#gTXxUdh}$W@`vi}+&id$b~>rT#neoY6TkXzdNuZ9HL1Hul56LipeK@vsb>U7DpR5vlq=@%kKO#GztI|l^gC!GWDr*fiyHUA_1t7_J% z-Dy^Kv{xip$_7KR&c(|7;&%3qwC0%l(6=5oMnP+8DKgi9XRp$MZa{R14s=M+vp3E1 zhqt5_G>q!?8kZ>TiWv-sM(U*Rm|y%%SsED)>xD}6wl-2@c6!m<;OGjcS<`bAgCnCM zLY-=mK~Jes|6i(wX>PR1h04h0Jf(XVuE0dNU!t^3+2KiBxNXIGGR<0oe>R4j{Ov$V6ku z1&S!{CcC&mksDULZa#s4)p0}V^{jSmy>- zZ(juV+VTLCLG)@c>J*-;tOtJ4ll#d34`yG_Y0S!c+#IKtzu#I>|_E~U_4qQ8s z1vM+mh@2p7TKmhrKgxR6LXmpdfH@SYhYgr9KLbUw(CCt94|1J^9NJ|Mr|oSHV2dQh zIV%vy(m5v_3$LxuVf+96uLp@Wi}X#n_cY3BH2g?KlqMva!x@MJ3#zZWcF2QLeckYT zFXxplUnJ}&NfY*cCpDVZiwjkEuA7`P51(NV+^We}h%%adZG1uShYHLO`TBB{q!(P6 z`uw!|%(he1?M?mp{M6^Te2(jbg2M1$bV1$h_cqfxC%M=8LBR8=O`3|y!9ojSw!m6z z9xp@ffuyv^nD=M-awOI0qkKpd6rGP{tj5)Cl+-J;UFv9U*u{@vT~BKrxk(8YCkJaj8r)JL0&di@oY>ynNs?p3=lA(n|73EVY417xQDE zzg3g;&5Zjnf!t4+D>(%>Nr5z)C?$_c6U9{2e&o;U6ud$Tv^GdRn(#^uRPm5>J-uet zwPQi$DN^%=y5?T<)uN_HYTo74Y|L9MP^y@8nS^8ZyOm7#u0L@${xJph`q`xE_1iC1 zv^FR?t6o3(#`-n#!}>j-95UKEnEKAW=jbD(8>xQ2Q&c`ck7_tcPSA8qEJ9u?E#FNmIw1 zrNs=+er_qVbhi{l?rzN6BTC-*6=;f6MymySf6T#j0OfMie&yjkO}txXOW9SFNECcN znvIeu_+S0=AwMrA3f|LiJN3_Yow!B6ZO}h!^v~b)w`cX+AN9{u`e%{;_Nab)Kz{5T zT9!Zn6=Re|e1nVewlrk$mtj}o&Ze#z$@N!y;aRHkXQUES{up7-o>BWgB4Y5+m?-#u zDOtG;I#IA#o~*d2L&S!!U%e1FZaWuDF?X$~O}bSn*uz=W>uKyKti;wI;w*i_d>09B*Dibg`#kFecYr&icsx{AX#Gtx>p z%KgE3#KmbQX!s)%FVmPmv5!n17Ar=p zrYJaL{)6RW@&yOIUQz}+c2}dB2O+f#LV(| zd=nCbecHpmx30f|0gqJ7BNh`SDCi};DS=dtdmm+MD{xVolwj=HMZgRcR!EfQHWu;( zjrPO2qbqIoPnKjICL$iHwx|9~2(zCEVg8z8zDSOdQo@xReZs5wDc8Vz)srd4J-I*O z8S@^myTx0~(Be|RGDF2lFdkpZo4vD5;W2yqx+Bo#Q7xLUYLmv&_$n!ROv)>U&gig( zuX?sg3bZyzJ$j^41654W(Tp5EzxtSUHnWuW2aBc7?g?t~OBkbvWE#^uDT6&`h0~?N zUs7SfLRu;TUuD&}br3n@B}z2b4K&J5e6mUe%}$XWm6e2@#pfy5Ddz|6)e|v+oh|{m zT(%DTXSv3KSz({xK>R7?-ed^PC=Es00RLNJ6AQ*gx<<^Dbok=PEd`YAy=Ui{pHFsF=#=@KOQG6=DzAt_PL0C=`{(&Pi`fDrEj{Lpiv61%cuEf4x1)ENyKWcjAej20Rf4HQqFzA~+Hu)Id41WQO)~9FpdDm! zqx6aI*v+h?R{QPW;;AcCQB9-IXofOM%;Mo((OATBRZpTySKD+zGF{n2Pij;cfDL|z zGuNtc%9f`K_lKF-QTK|MA++7X`WfhgbJ~12yhQx5BH=)~y&q0oNyJ-dI$g1j zEA`Kx_0J#l&wtAgEYQz>;T5i_OGY*kk>^6SRUeXfu=IXA{1>)rykOvk!YT2-_g>+w ze)?0j!kj+i!XVnGNJ;HuFj4(8Kv|h8?u9mYjsK(}yCY zVefJ+vPiC~m0;{PEuR-!Q|@w zs{`$g1jxHZB#>-*6Z;WWX37I^Osc7)2*e^o1D+4VgHa$-rQ@M~;^+@Mb4Gt?y&=O9 zsf_p{^(5CJ$aNr{TyJMx#klRE-@swTmp92WCw()SapoEhc(c+EoUQc(ELgSn&(t4L z6dVU9IgtscXj@WYuq~-D_?~;}q;97??Vx$T`zF9?@icDihl@Cth>$%)*n0G7?#}{`qGr+iTHI)}x z_cV{w1#qwrYmd__50e3hlHI^7q=(1p<+RK6iRf8mz;PuE_(v!OKV~i2298n2 zpm8M4GGL^J3SUyyI13TM8p*yp81s-jkJ^guX;Rza^G{gxk-^xH5&HhvbxT!jPN6hU z^{sdk?}mqFx9>JB{5-yaOE5C%Kzz0rK6t(;$8R^S^CeEHLPVpK16EQWqoPcR&Vd`y zs|A&91eIt@fIUw-(T_NEPGi{#yEcsxi2H~Et)8#!*+cV*K}CvxfpUR~g;)?iC4($E z@xvy}2bs^eS6$k(g$2nLcBmHV{(O5TX+olhDiVE`CeidODPgR2q$fQbFQyN-D=A0Q zPjc8$Tf*aiYU&UH4(eLc@h;lTM8Q+vRQofeZupruRaWh>A|YgmA(~i{9@}#;dwpT= z`*xg2B|8EVBMmd%F1bt>ZpWJp8}`8y!s5b0eZ8<@=ZVs^@d>(4WZdTWa?I?{%;w!W zW(*%UlvBdh==f5=lQ3)?pL86wf1bur_%9i+?k-oafO(^(Qs?r8|J#6hyC0XjQmv=c zUsGIq>zZAhjuLJ@2%2^4Swix!{sUNuQU5}l7)5daruoV)6b{DxKgqmvYo#DQs4+2_ z2M`|ig|?uzMr=*IcmuqGBguHw_d_nSe>Q@97TBd`Y&KYYECqxgWdR8pzs9IPU2RL5 ztyQU5`7b0x=%@R?8_TK(p~W{jf`bu86UVDx&{(oLIC=wL26sOm-~BkG`>~+=@r3Tj zq0XcHgof`3H2*6nn0;Mg$QlsDfw5m8#+AX9d7aY(Dzu!JOK-=xA|rzqu7B;}(}EUe z-!ZPK@DYR-y8~iP$Ff40ga=~*9;^9C;qL~yFJTb=>3o;+;Y&$~>O zLvkdpmrz)4mf+rSyq?%Qo{dIBCad8<6f-WI2~g`?0CGLXDua*Nlg_{5{zJ)<~%17xLbw(CXC!&d1gtu*__C+{}NAKlmSTTWqd1YcAc2s_xc5H#AT}U#4@7yI+P4vr z%vy5|AhX5V;)}k0QSSV%0P+dgaXTuwZ$jOl~o^HPJGma{aoGiy|nxO6>0 zuDJ)*5c7PEE{rleZ)c1ftku5gTNgFkjB$Mwiw_y2kC%`>jL2e3cxD22a z>yo;)-fOTclacKpumMATU}SQrcXRAX;v71Ozp%HxqTh6=c6EEFo3|$`a@E`KItTwb z;fwC~-NT)O`^V17AqVocK&HC*dwM^9n%>UITD>OjlOnwTPQNe3`N4M&o*iT7WXFB$ zb)srg;2Y4sUF5-n*;01@bsyBgmi=RR>TChydH{8ZX?+h=jJ4YUP?E!Xnens!`hXW? z1&m%=D3`!WpoYE#@+iL6XxPeHAT-Q2V#Ot>kFMrJ3UJ#(qsJ%S~jiK*BGf-sO7WX&wJdeHcv| z^FBjxjz1aV0~K;6?{+!HURzY7&#tD^{m?=ibvX(NG2&N1BdB zy`~BG-0VR1%iK>RhET@5hY^=0bfYB#YSb`bR}6^6DV2t z920`u-)cmm?LB4zLr}u#via78N*FTNnQXD&5Wb&D0IjL&1J*x;z4|q^b-X7k1X<@d zX)YH zlc`sv_d`H3Qr;s40Gt^4cCVzYQeujx^*?$~arU)g+_SLEe!un^{uuRVNc*0TBBq+n zk*YUpHo+=AX4BaZN1Duq)AVF^EMW!H8yrK6S)+`GdNxeZdN)||o^S8kY@^{>k&QHe zkhMYq?!I>dhPO#H7N7o1c$n>?v~a6>lA8e6mQuKRk?fpv%R-DAvh0V&!*E%b98~X9 zk4?8U@5;MnK-Vo}V&~2bB(OVd$stxi?Ur%z{G04Ys5+<};EFjdj*p*vqg>qVc{6zU^K z*5ZI|e8}ncw<0pt(*lNaQeShCl*x23PqAh!<$nm@{3!B)r!?0YY{Hdj-Lvo^&&`WcK@ur}|6xKHy+ z=lmMKG|S${z}5O}wm(phO)SrVuIBgh0$c}aWAex6res1NyEU1>^8JSMd!Vj0FXVZz z_RlQeGJD4Z(t4MI47n3r4*bLs{`G$8{B&2y^I7c=1A0c0Z+yj!21`D}wkd5!U*U)m z)HA9~yA&Rf_{7X1H-w7b;yxN**zr4d?IHT}%c;-)9-lvZUX}i1>hrhdv%QI#Oj1_;tHcmW^{K9O zDJ7x_!4hFkU68k+hY*PWp#KteC_u;|Oh7%`jrotteiojc+vlN^K2C{PDJA0%^ z#4eGO3pRR}2o*}qh}M^rostxwQ$bK5_wbG*r90@Nx_W($bk{4b^}GVFd#S)`W4H%) zZ!lJBTHoa~Xw+XO%!E2#!N72AQXK#FOw~wHGpmdzvYW#{>Xv_UaHaTYb@(PSF&DC6 z{@|GY9yv1ce%Z?mY4rlaP?rgC#HKRY8wuB2s^uJ03+?~mBU(kkKJqv`kf}1-3smZ* zH0aa4Q6acbOFyqkeDy*qwQp2;Q}N_Wb!teZUajT%XHheJc&fjJM~I|6Jt%!Wfnv{1 zRDGS!ylp1Xc(Ly5beDbLr_$Fixi8Xacv+E3bqZIfR5gPFZR&u5to_Qt`W&9zMT%ck zSL?}gjNWU?YJ5W``BqsfUanwrJdSX~Vx^DK-wUL_x6q~MYUnS50s1R*tNQD0oa(Xz zs=qr~@yM@4BuN`$k4O)%ql14L)T4vmE3VSFO$MzyU8$Q8=SV;uYmbO(Ws4uL;095t zY2C_xX1ubYt3&Y$?DB{!x&bxuE7QNL!eFnFn_)`iTA1lLW8|DJKH{EsC=NQ~%1rYD zbtwyhs!XnVX*2G9kwJ7GXNqV|{)=*^8)4UdAIgLNihwLLMwoTGcOgsK-#J8*2Fh-^ zQNCOI#coi-G=#*-Ja%27ESwkw`b-Ju_KJO-NG^L^1!IlduWW5fcF-9f^;IyOOE=ob z$GHl|NEAHiQZk`eZMTwpUZ_HTDtyBDMUY>u*ZMkcQe1#X&P(i=ce8ACn zg6}Gyl6?fM{c3mX;0ikkKh43O2vLNl7K&matsz7{VP+Y_YG(b?_?hPiJ^QC$&Jk{U z$Z+*#Jrp*$RAGalc*(cwSol?qeNz&6j#4TVZNNH5-;MJsXtC733JGG6E0#LmWrn%e zC+OKT{R*Gq%A`tu0;A(GVIqV~o)a#TCF5uMPdz%X;3ACzF51Y zPHu%N?A@lAfzGGRZo^w=piu5}?H@^R2zOR3VvQOF!^y)xxAgcXaV?kq`qZ@55`2!D zsE4RRq*L+S#~QtCF2L$C!a%7AD=ZejZvL@hMIu2gGM=^vt!b>uP0cm4 zS9gAA8Y0%QZqes@wof}=IDb>wX^wZ<`+jvG!8MBNw8W*L%;UD(xONDVh$u@{7PQ6| zDqG<3(vWW@8!&^=XJQ0oT}2Km`Q&oh1lwtZ$eP>3=O^_^n3k2Sc6gQ_P_3C5UzjSl z(SE*1u?PZ!swn>w&XdV2a2&iSd-YeL&7M zcc_En!%7<-Um!pB=kPG5rJfbWvVR{Fbo%fk0x?eWpuXSNBIsGb>yw_+|L`j=jO69C8=tqT{>W?t3m)A>gaCo zH>&1jds4l1X_;=cQGNP%h}bt}=$A>c){EV$QHOxFaB+s}H<*9r0Q#JYSN^=}FGgyz zmPjbphdt0D;B`xqydRNVep_1FJzw8zAu()-lpm{fvtzb?lLaUZe|5jUsjWZh=6%4i115izpLsO5-9{8OOVPM zfs2+(6Z=?tJ;tN^bH6GmKq?nE5a1~Vq(^3t z9;6-V)^F~W)vBDqD}AbyT6DK2(~T=qgBmCLn2HWm6?v5dB7cfA&^Ei<=(xtpg4n&zk!0tt0~|E> z>sD3!Vs1#dIx#m~liXL1x#2Y!u3;pm4cElna9AD-Agj|@kL{YVjPpwnvjH^6yC({& zf2?ScOjjKjOv;^e`kFvlFNfdYP=fUW!IWljTjE3&U}UnZ`wlU0W3g%7FF4km+blnJ zJF#d?>t2-<|LJ1+5~CfRfUdxd{c({bT0fU>_BrbE^n1JW=_i$MspKoaV{&-9!`05N zF}a!CvolQG3Ygm7q~b(AMY!Q&JlPb7DrlMhDYWcP^N&p7=c#oX!u9=8V{24bR1AyNkurDgKnLFIi>f81?(RZZ#yuz-r4xgNvAlY{ zF$k!1#LJiyBOy3kzc0e{+e=`v#3WV>Pu$Y0vI{a)JLqjzDv?tq;TIFGDx@B4sVYn+ zUqMFZwOuz>WKfWekW)n`F!2DeajQ%RYzv?kUyq)E?ag%ndkIPcb{=!xmYnFc`38WJ@R2UhXLjzYA<&i2vb&)p1Y`gmKL9$SKu(7AS9ZV5 zhXWtQF5#)b~8H$pJKqk;Z-a18{b})ay zKm*~V7>jNb>b9cx2RPPa7t!Kx)_|-)IA9_F_pidVJyBh#1b^I^XieZ`nevbgtx8k* zA1x%_wk!b64$J|{l4c@K!!7<*oG6h~ioJ-A$$m-@V2Sx3mQy7=n(1k?KT^@Ty2L6T zxk=<nW;bE2A;LPE8QI(0%GHrMWX;Z^9mgf$cDIO{QRp_NI=+84&9nCHN)zl!N zi*cvB)mS#GiLW=W()h(1KSh0WiR~b#P3N`7Y;Bg)6qex8iafEEt~-z&Ii>2m?ug6# z-5Eqzt@`eatVm9pX?S>csx%En{zq%}mPr2?M&)q%rS_hvI2gNQifoVL0#+a8XU32d zu7%iUYOgaf2E`6TSxD5Vqr+oG;!wc$5)eqYkN`-3stN1EbG-2Op@e;1Ez(TPnp;jK z!D=UMr~TTU%AiADp0qDmq~wq<4i+gU?@wN*%>ZZV8dljaamCz1&WBji@cB5MeL*t& z6v?jJ%+@7#+V4yKw0U`|&4hhRdYkK?RBc|8tfYiWQV_59(-Gi(k($Qb&-$j|Js?Lv zZ5!y{DT1BIa{he`XG2b#RGTg)KYKb6fgb_zP(jNE;Jfv0&-$f;u)70#xi6a7KVHdpf0EtvH&=d*ZZr+9fnh9Wyf?@(yG zI23h+fb`F=We2l+bMXL>xE?t3Boc^2L?81}W@N3gY{Fu6*i9Wd(YLaVW&Wp{c4cL? zHHQ9REDQZkDM7P}45iy`^grG7R-dfU?;AtU(1kzv;?uI7^E5UZrsoP*7?***jaeqq zkj3$s_BYy7h#E^{rZl#V1;X@gxt>L_F)|a#ndOI2(SSz7R-<7F#|?2HsYg+s!5pZ8 zPc2HHZ(?3Er#VKQmkDlRdNK|*Rpiv#%)?XM?V#adaCltlHtr% zo=numn4ozNwMt%3%RSstKvY=9qP%y%?hOu~e{qox=KRCEgo)4?X;VlO{9OV%bJs4C zX;qRQs3-if{m08RI{D+>UX74u;R+_`1cQQ5tG!C@uZ$OXk5kyE)jkcm;zE1J4QUc0 z#gC;4)dQ_w7p(x$+m$RI&H!@-A^jP+V<*GaBwC{t-xZ`SQuj_)Qpx$_IdjY{w(y~4 zFmJdpO`oYG>R8X$P8}-B6N^L2|6%P*;G?LL{}V_^M8d=)8bu{&)F`M?Jc3b~Kn8kb z2D553>Vl&P8(mQrG7wZGnv7&@N2BY(x*pkGcR|+!U5|hV5pV(`5RVlUmAImGj7K~P zpv?dKt=HYtlY>P5KR<@<>7%+{)qC~odi9zakeK==$$7XG+kpI4 z%#?$Rs&=4^^b35<_1d@?iq$R<)5G;UruXKl9oIp=1`#Vve16Wi< zY(*kT8S+B`zffy!o(+< z>x4b2uO?aZCNe<3Q|i+;WXBZgA2U6+XgQ}$%ssK%N!w5eQ{0Qxn6iuY7EDlg{)F42 zFQI1Z4D6PxZ!C(HAO zwi$;8@G(zKj0@Hh?0%_BfV^d=-S1j(yAWut@#hLSN}GzX;lLf)=ueQ5=u?xnFV%40 zm|4WJ-j4aYiOdK9moiua3;yH=j|Vi3lO>))jd6&zUYCPX))Ehjj)VIzJTV{FP}BW7 zx9S?Xga%7rOy_Y00K|Q-0H|#s;vd^bbAOMY7@|6ch76L1w;@zhaR|ibHrhELS}8J& zR~q@3GqZRe^0kCAv630ySFDc7yo5;@$q-glqK}3T%6<&msjFrrm64aPzHU~<71vFf zsx6;Bwc?7auBf=eehOw4!S2W9YoSXaLlw81pg?U*C()WbTi9!uVID8JkG^fEN1MGaAw62jPa_A~dFuka6+0i+N5A0wJ>c~FI8K+? zI9(9OsT_(k*wNP`WkuNOd$#l;}j*ij5(4;c}I{k)OM0mxJJ^71Y( z?>gK0a%UMTHvef{<^qy$bCA3z^R$4?FrJtp`pdC&><#uHU=>jt-}JbE3+zrKyYC)K zc1N<_p6RAC(_}1>)mLU`_|Fk?H{-H?klu3(ER$wW@_7m5vn(akQxD&DF;rMYbOSpE)Y$gxl!%VG?#PlUpWFJ7M)g(zZv+eq(EQsoe1=thFQ`#N~lPk8#e#O6cft zg}k7F5;wKzT?+?*A~@Ewm+7e!W>D(Y!kyy58Qdv%L_K#}yp6GJT(jvOsk8kfFhXjf zxDE)Og6#2l{t8Ty6l5V{IsHJjoPI#?D~Hb{E`BNwLrKce+h`^ih8}%%5;lU|Z(R9* zl3Vk^YlZ4!px9ud+Ne-%zMiNq2C8r345&UC^*r4zs-`_@`E!8p;{PvvkC3&v7n=xI zU@joS*J8DA>&>t;6~?Q9@g@`F7KQOKg7Io#oTD&)E9zO_EylDlK!q))49hi>U8Ip)^!^}#EmaxZ&dcN!yNhg8^5bPH`ist8; z{epvWbSIxVCON@N=HNIm!fNJf^hC1!6ceM0B2e%w8>4h!l5Jv?qcEB)7^O!&1AE0N z{WoK@)fLJ!F{(dO(WtWM`Q+9okW;B>ln0CoOpM$LqZ1uJN8R{fIwFjlIS>f$Yah; z)LUFNE>Zc zt{P7_fMTaQ0d>}WpmkP}ZP;><8YknFah0=2{fDhEp7?|4Kbq)2XDR)MTF4&sAG62Q z9i$YXq-!9TB;5Nn97|A%E<}(Gzw?Z5XqHE^uK%S}9>_D!)06`!)qEw-xKX{5we4yP z$kn{UFm9eeV&A+UyB<*0T5ms8Y`)fFUdb~~v0lTsO$0ADUwgoQEyH~6S^KqJHRjji zujQGq1?<<}=R^4Zt@dlHy1w?ENsi;}*B&)rJI{VC()G1v=4;=VTLdUKUpvfx?V_%) zRhzF(v0pn`y$0fwWFrq$`sZfYkH(G@`l5f*KTuCGp{G9FZt0)!4=DZ9vu)(&Vtp6g z1FwlN2?yyNK!p;lah|jh9*ixulbY}VQ;{rRfiE%(t9V^^x@ciBe#?>F*0Rv`aBZ3UWKn+flnA~g75`6T2uf_5I_n7wAd-oV#fx^X+Y3i`;CPbI|Zgkbrrv(E|+ujtdCG80fWckl`u0r zO1B{}U_2-l7=n-k6Uy-vmT;pu2~B43Zi_fCnow?OqcIcDdG&b^sZ9kw{S5DNOWpO2 znh)W6IC>BlcB3%XawS^7K8Z~zgGX&VLM|7jGhbSkV~&G42~%=j0ASS1EkHN%FF&U={r#1UrZLR~IkmK9`ecbdE$`;wUA!QcXwB(L z64wLsJxF3&qU($_l zxky+1wk66hcq!zpwN%A)49XzAZW6~99fQ=zWQg^})ZCZg5=_mY0z^CVhR;kpk~M3T zV-RW{M;Bb~(Be?xSlN3|8INZ|hDxJ6RnUd&zy#V03n?V@)Jw0VMOFou*@ZZ(_0&W?Axq*W*p4dx?y$$8 z(V*JeNaPszU_b6F4}4Xm$NPZ8oH&>U<=`2Rfl>My zPN(5K7Z@A^Ee=^q1XF_t;p@DR3mNF_Y!TXs>Y3wEJ-hdIzKMs8Q?TJ*>*F}HTcxap z`*BHirh2euiD@i1D8zn8#60!DYl7hAc`WMrR~!OlhvkW|@_`)vsUG|q&>O$tkLaFX z^oN?gUPi=d&`_%I$FjcNBIbayI1m-2Kh#s!HWuYrEDOOm>PAdr$H^oHM-7Exo|?vv zIgW$e3JmpNA*k2CB$1f_P{W-G>i8n3&G@}r6i`e5M6i+i zZjt_8JU~_jRiqAo3%j2UQKj{w{z5?5bUK!ff`@JuAgjVm_%5`iI&U=;*$YRm!G4EQ zowDf6;=#(FmZ;wb^JxrXL<+XRA|5O={loF#9Q49K+e9#<3Z5*@{)b~ zJIQ$MOc5tY`Rf6o((e=Cp~E#Be!CaN(0ujK3D&oU0I314(AAJ{>U-DWDL^nTQn-cA!yO@jvI1hcan-^y1FDIB zBsH@XZ;Ez-VWVVcqIOYSI}IkmG?)O&k*!RCrwB1YyGT=jWMqtk2@rQ=0|HEdaWDa< z!34Oiir>K>E{h59BXT2Pj3|e8z>H2}z*1?G9hz_s+s3$a4E+HUVF#G13WAv8a6%@y zsjSds_yZrqz!5WY2DOtTsD4;iR5%J+1{9JjDyGi7`ig74uUYX*`zfWGV;7tAJruT|a9)dPA5;Ia zaq?TrhpDgG@kFJ6q}c(*2uv7fKv5Ck-*bS^37zrDaN@(5>rMDHs+9s?J+%_&^j89- zKPikx0HYJS!^j!mRQSXLoWH^q*A<_&pMW6`LwK9>K~7f%OqL~!0@j5gd(yum-G1-J zZ}7bnI)4uxBF+zJHXD@&P_7A>h4J@UAF-1fTnMUf!3N@u81GAOq$w+AgV#{z^>sb-?tc-&Q#K%k* zeZCRHqkr&3GaPV;9S(5utlybq`Z3L;J5`=_c1>v@V_)|5Vo`%wR>k|64@CM@uf(@I zrQ%>Od$zBW%JlruJ*iC0#)sC1ny+W5I;VZpo7(%vD2fZf; z!s7yA2q3@-Aez_wWBR0dWo(BjXk;AVbD!zX+uc-D_ z8qXFJDWv1^!X3E_0n&JCIm%n%!M}ZPB6>$|1Fwhptode+v2CW%qWp7<7MkE{`Dd~( z231-F!_?fq;5;5UW4$$TiDVsbV_hW(MpDzASnnDuSR(}`j&;*(3hO4n**p{L4Sd$d z`ecRmb6YK}?}5*dI6MEtdUXf((>_d~xYXa9*(ZtLr$_=UJAt7p%{ ztiK;}hh)X9+D64V!+hgB>kX6oL*+V`$x7RV@;t<6WH49PT73qJNN|{@t8X(}(sCqKvWJA@X143)p`R7j5*P#vld2lWg=|ozNHmo|M()3aZGHxeSh@HO&~#7{l*x zGFv0nwtZ^JW+ZhEzZga}=SXU$I?cyvP@NXo4GySTK&m7Jv*F;k7Bta8UT`WCx`?(v z-T2qf9q^Ac<9c4UxZiF6J6r@mArdL6;3|HN{RGTf^9aVy%c0umN1k$rEA#*e4qe!| z@I=whL-cYZ9Bs>f(F7yHmH2E>5wP!b`U;M$0S( zvj!kETa1gvwWq4(8|();#urzMD9$>40thcx9xGMC*``6MV54pxJW1I8)w$Nwv+*=4 zJJ{PPBI6zv2Lw>t@8#JaVJWK%=i*sd*K1H)RbiIk6YjIO)AB(q;L+@sZitl$Od+2zJ7=ir*GZ$M9vaOyIa zE>+U=mam8>FE8fhd-$Y!EzkIg13!{Adkf``KhL;$xcD%z^91JNg{WL)$so!f3@y~X zaR{NI|Lr7%%vmen)KLpYu3?D;jsKLGP6X56B|~$NH8eR_5BvdRlSIbAmNl7THcQ$l zEaeJ7sopL2Ecco}e7qZbXCZ=sVSsE?zN9itX(J~G|AcZscxt|er=FIlf|L0G)>&zA_hJ^SO}G6EdW#^R%T?Jt-4Gr zuo2#K2a4LWte(IT_~kXy75@0KH3dz8!_Q(r>s?~RS^UMMhn#-d3?u(0sk2kHW7M4N z$bnVhD^|$xRwSjQy0N)xNB+Feut+d(r433>P*1>4^4|20-Hob*@*kM}$BmtYGQR&n zhAny!3=3j!A|V>KsLhrXgk0_K3aRPP6pZC)tgN(Ve=c8-IS1r`95L;9oHIF}wu*5L zs-t0CTu7zbk)Yu2!+?I^P0E>l#_xWmYvg03-s& zaZ^RK(*1zndB)WczIfov&58ke#+%2gB!qPPm7lLleC2fY%1ibu58xG{uZ&mLkO^RV zo%6OyU|I}jJp?BetA*+&$w34O zJKKuF56*_(-ld^hyrEX7&aB#*f79VrJK3QJAs)0Mg1t~0n?V3{Yu-eMw%Q#!1now9 zg|(VTv9`dNh;53{97Y|ay?1gkUnI+ABmeEus=e!qtyhM0dgU_p%10kqBzgs}#M`SE zWe+dPj1MY`=1f&HXbKc=>@oA5C)7AM1HBuv6Vj0dGFWbnCD>4M4Fxgsyu%yWP4ZEK z^Gx`{W~UeFJBo&P4BzSP->gm90=3<%ziE`r?g3a_F~? zq~;c(Vc}$y!I80ClnF$_MQ~aa$pV8~)^;mG9J~l=)kW@zmTg2c@g2*}he$uy6R{+S z`U(+M^<-2%kXM#j^+3vmryGphMKc!+5whPyJrGz|JB*v`_XFnp=l1$O(i5yw014|= zS|G}Dlp>q4-t2u)*!1s~5;x;(7v>CA)-ea`JuzcpvBEgGAv0p5-PlsgRn#<|o5<0b zQRLbWdq#)nK!a74#ENQBk1;$Rftoo5_;aIJiyG(4ach3AyC zp%l_?J1c&M_f;!JfiB8v@TnmU7b&^iLVhDN#Fww_yvjm{*Tx2ru%hDeRLkqq0I$nx zG#d^fPcyx&(~#v_DeEbqZFJIUkx|hAw@Pv_TP0bh=utZ!9*>2(YAygkPt8_W&8axC zrUBAD9@;SX7J}?H4jO@R1(%zf&ajdr1sBM;lSs_WR1Jg6h3d?i8589U>ttWbxB#cv z`VYGc9cjTwuS6_UwZsf9PQ#U)N(4#>o6`fy)bO1-Ltr>zhEUtSK%6;di0<83gFrLm zOE>gAG$fy2llUd(vz(;(jAOxb_X=-i3gA6x!iy6|=0_s>C=|CJ*p)P9fF6l}gizA6 z37j%ajQNw=gAX|wx7$NAn-E(WPj9GKjE_|RDX5B<+X9%=7J))jEVby3u zf>e!_$h0y0yAmY(3VqBm&KN-+=0X)CfM5D3{9v8}qXdWG93J!I(FcY@DKz`*+X)nK z-HL20E5W&UQL`2wH|9gJZyk=;)B-J6XlSoE)_`F)j`M|k3dbPMZ5-_>A<$jEGaME> z_qD?+r^8fohA~{?+iAsiaBzoDU5=!nSk`29xL6%Z)WNF`V{pJ$rG-4~nZBzrjoP@c z#1D(UOL1=FZqxU5Bn>%wn3aj_q-{^G@26j*qMuX9t=HBY+1SQW<|-0hWZw#$a6B!; zk!cl))g?DXor39oiesep4n zn~sJ54OS*AHIzN1MPytGL(-`12PG4l>Z|9t#Y%A-)n%qCi+PZ$`%2}M2uand@<^wX2!xS+(5so_^-shnMa@MN!W) zJuEj}grO5(Zn_IrMZ(ajIR?yQ$8zB)gTb>1b!J|&fG>0NOA-GfBjqR&)bja!^Yf!| zgcv#wlu+u>Npc23otb*7oN}|pd=qdt3uVkg5uxkWa0wgLEd=&&Sz zj8mDOI=PTR^lcEqWjI3+y)Ekb8XulGLtLnVxbD+={n9o}rIL@eeh>M55>M|=r)4;K zz46dtaKonA_z8c|>+J5)Ot*L9u)7#@Psc29 zFW$0d0eS^h=Sc%u4mLkOl;mmhq^ZyE+bu;H&o}D{p%`u7;jgioUAs+PFTA<`!M9cHOQ=EsKci?V1oIO2g7%o>Pf}R zV=Un3l-yh(EZ%%sARIIo2pu{3~h z7~_GKGbQ+NpFX~98Iss=b+vIgbZFR_pPb=_cpZQO%BWjZLCc2$BLpBM>et=i@klKztxOJ1vcv)ZhuSMNlz(>z&tkrY5Yn zaGIpofNoszCuPtDDa+slRzSD8XTrXUo@H!2nS*YF;W`=&fzgwVi;C-F z^qBHnj2=DpP2qY6*az)PwB!f8AaI_|+Bp?_}K%Px?Gj6EYS|NpcLtcH4Iymyk+T?THqpDuIwfw-#r zKsH8v9#k*%Hcvh$DX@MYX`Ba6q|_w#bkCtt&ya3AfphF@8$ zi|@QnzSowWX?8iqc0~@8?V!hwk&4+I`rqOlL;pyudpRnR?J?wzIV_&OkNgo(zKxSl z1l!T#e75-iZ`6N=Zfksc!p_)ph?Z|K9ynE4J`7hC%L~A24T>FEUP6{P%sx4ZV;wQu zGrMK8oxkkRPvAND4a>P*H6>uKlvg|1;<9InD&*J*JXRBrqR2&Xllzw#j~y)f^%C4@ zJW?UL+LY@boMbV0i=2rgWGhbT2q~_eabyA~RVz(`n$3iGFRrb~JrX+B5;0dvq%j}w zCG+NCmM|(tP}%Or>sY$lsc$dobrLw8(2fykL7Oa5&k}HDgK_g0u^3X5!s9e9%jX&# z#m_R3sodn}48_k=gr8+m&!v6lXW4J$Czs%PYQA>W>;{8Oq6bhk%7Chv(&f^@ZJo?RXk*}wcm*rThrxC*qVV;#n$pYvQ=6uY`vCj<*G5dc}TNsHiNG| zq#+a_e?4>N{)jKp7o4Na>_K;99Tbb3B@Q}1UzzYc0J04q)v4#>?Slpo5axUeby=8G zQuIP{>+@iTVooJCx2H*<_!FulvGCV0d!(?aGU~aZ2Npqpa*Ef=-^d?&h{bQRpFQ4c zkt&WAlMB&b>J@Xa8!`r5E!GFifUCuwg^D$vdXqEdBP`BbCuhQ$SvXak3G9(G(n#UV zRWjgeZN|L)!CnryLqSQS|8X2}S9N8ar(XERJrZH<;&W)+F?W$`@n%OowZgI!KQmcY zMhAYfMJ7w{#1sh$Y3iL?gQZSOBm`{NlGqkEJ6Y&Mvn?1yT>kVT-&EPRxZjK3$8CR% zk$JEp=kqm(hTbozD)sgqA?sy~G06}I5>|aD3CKIVAHSw|@_vNgbADb7#&s+~Zrc&& z7R#p>`kb$C!6{;Upns6$8{ zZdQjm>M%ncuEyalWAiae_kDMXS=;kjG*YD2VmUzw>`|Pw9SpjId9NeP2jO5mmPJm` z^om>_=#ocVai#JRf)06j*(~XI?GLC#Y_HtvYH>y+Wdg3kmv$DyW>&M_8h7`lJ+NdvwTsvAnIq}zlXz+dT90ngH?QFYKuq)+zK};qX`Q`>34zox zP+P1hD*ZKcpQe>-x|76lI2UuK_m%jH5A&Wfai6efNpV);QH*KJS+(w1<*a%!wFzgn z^i_QYzIW%Vs=>s50_qPI~Ti}W_$KUjpb zIBkZj1}ry)bAM1!nK}E&nX+;-a4uFZY#UyOq^6ylgwtB>_^5lh`MoBPVxvhCaT4mO z%Z?#QnxN=DkF#3O+NkF(hK_8XlbI>)%Oy)?5rW(tvgMz)m+&B0HM~#o2k9iKl6`RsbKx&Ku-Rte5$6N|!|lXJJ^Z zFJ|yst#)eEeVUV%W~+sjY;_i%Vym0b>iuwzR=kF{aXy|k z?EiwZT#s$!0Temg4vidvzi^zKWUQKZ6k{=`i?iP`V!KRx!nU~2KMnpwr_W!xjelB( zRXB{?IC_vW{ndx`)Vp#yEZBR(I0GI39rZi~b}Aoo$fTU%^~0c)ZT}6tjM!tGVl}KWYhP{foco>~FT?efn2OH-tMlHT`jG(r!np zl?wG4Us{tkO=~mMH=apQI}f!d?ZK*7^=;C=9}p8K?aX1$N!#*FC)SpojDgI(2ca9U z`B#Eh`eiG?N3S%K37iTqT+;CziDq>97PC(ol;e8pKKOJPSx_&f_Qx5z{CiQ)`*8@4 zF5k_1|7Pj=s2>qch%XJoP;ETZ*Dn@C|L^EIz61?%gYhJ?M{I=CTMOXwSL1UDkZm+& zlejX_MV3T84HOZu`ZpL?A}h8I7K!)+T(|y*-A_aW?)G9J+>d9C{SRYzww(K|uOZvW z{z+jGys9@utd}j@p!58;1oK;5P=11lhf`3xLRCcB0+QZ(7BGlq^?wv&t+y|mBzR_x zg9O-~rc3jC$_IGl5f13gA*8?tBmJLhKwl1ho%Oays`{|E6Fm?eA)p3TN@4Rh=YYNl zm3)v1$>Oq75y;f+`EteY5?}m#!i(Ju=ypc@+o73rU-TJq9X=s&G~-DOg@iILL}y@7o0k;J_Fu3kYT~yVR=56R!tQ;8;HpFy35Yt{(`f)!eAn zZCB;N0s_`e;Hvp^)GGEtN4S%WKf~TZR~pVwBaEfLAFnz9D;>42;>E!0jT=(1`Ql8P zHvu>cHJ1lPy|7&W{E=(eU(NakW6mr-uG{(sefdU}aS*>TSiZrniZ?b%zr2vEG$r8> zX~zNSosNO2n_gG%d>r)+%Ok7a|X{U4$u&+2XX3WD-14^A_mnv|*;ex#A#s~c+hvoQ z9(EtX>7fxCZU@e4J*%RgH>AUNPCam%agAce^|XFp?6>X~A-ig>#Gs+W?@+8>NC=4B}_ zT#4-_!za)KtwKOHyqsR)t)c3F0^kv=shCNj`X7O77G;HQYJxSr`OZQ}X8*CKHVodl z+l%>f@p)~)&x!LI%OGtqauKm>ea6AaZa&vwdl<+^G&IlIx4IY}%vg4QIPz0>AHEUZ zjMmdTe^_ZfW;^xNfr^!^ztkV6@vtM=m_z(iEH)NUgt>0rihd;$tS@=fjJO)l9RL&L zDJ7C9rKJ)yOppgHf#hkyfNMAPu?{uh{&X-0Tnq5}BhH|YZH;=qa8gBw5+|!JyV1v5 zEPZTG^}KqlpWzBU;Y3#Kk>+@1SvAf&(Q(B=G9*aHmvPz+9R~qfXlZ60tC{C^L&Ki3 zUUu9khROHp(1rs{k*z!!7wxaQ^~8suxgcNB(p(Bvq1YjyKOJ>$N)JuxEi$}vcLQpFCC28H&+k~S$Og#!Ch*08=0 z?{2)8#PH%>d`wnjK80zq54EH+j{XN!sj(j%tbl*vK0#!BaL!y!BUi7 z;h|T?37*FyWhZe6gm^Pcm1CW5r3qTR1*qEs}_E_1qXNS%K}IL^J-o+ zVe7O?dxiZm9wO}902|;M`A$4;K{9rKq+gjjTrJxdqf_fta9Ru#w zSjN=)c8K=O$a~O7Wh_{@*2qGG%=T0X9&3&N4eHvSi|V>-Pfz)LZk5m1CY7Flz$xu8IQH*R^w z?K`La)nV*J?FMBVVHdRZ#>?=G)^S2Ckzr@$v=o>^2vUFMA!sKyO~SUcPTS}oK*N}{ zFKnZgg`c?YNC7cn5@E#5OJB-9XPgZwDs_yZ57SX~lOH+h*c%>9K1d9*Na|~uZiub^ z+zXuj8TQS!t1;N9exYwCJ-x%xx4-<9#=gil95&(WqB+WFzy;}^T}BBDrxx8Qmd_S; zZN$R$7NH;31DUo>hh^Jz(6-t9Q-`#}UZNo>ndcyH3wfBx%5P+RdUjx1g#vaMe0fjKCRdx;*{1wbhT=3T=9|sHnp!zu${&l;HhO4Fw zfF&v544jy{b(v%ZT!kX>uuUX?qzHN?Xu&1zhyJK2jvSNX-0~v@Ej)D+PGGqB2Dwec z<$O7l+<=R5+9@{xZ9;TdH44FF4iv8aL$hd(zyyZIMT)(`VhY`Lx88hYO;GiWZ_<@H zqVa3;5oqZJ=w%nuDkKFuTI7E3cb54&!Ep@ zq?tTh+$+ycCbZK8TAUhD&tl=(*~n<;D5E%cBjxQGE8wJ(>YGA~al>TW5}cBf)0*Vw z6}@pzf#`$CRLsMWi!-lToUSckk_0ByfNM6s`9_!ro7dA~GS4uXcT}3iyyN6dn0F#h z74v!>a95Cd%{KGyeSR;Qw+7TQqW#Id?gpIUWL|Tx%)6D)Dh1j+n;KD1voNpfWyQRY z$UF=i`a7>!gSySFD)z7^F4gl_%172i1)p<6YLW4~2wuka&s z8XWtrx@&{jaP_0OB~h$QiS2+R@jEk`6E`P3SOYb6BmTCSwrJ-NOOuiIxL6RLCTq(L zIosGT=ETlXbU|T4^x03n3H-SwxRZh2NWTa!m$j>BFa53 z(~oWZyiID;)gtb?>cy_BxQG?4);@ku1E3w}mRL#&MhIZhMmYRd3`oEJBl=?|=KO9q zT#XvbTWK3`V_4H2-D#6PSBhHy`abRC=N32uxarz!R_S6!Kqg^M^uB7ln=NoE0$q6wZ6>Otttl#jHYceO)kKl2Ts5pK4DIir}lT7_QaWTrUD`7;9LSBdPX5mRWjRY zICC!AQaLClIhON_*q=2v8su06a%{s{Et7Vhfoqn5lCJ7sB;Qk;1E*X>#QFq1Jr2%#ZEE(TSnm;&G3`@OC=m`AmG;VEl3)!Vi?fCc`>^4l1hpT%;6D*gI$Y>;URM)l&+{eL z)55pN^|TO%m@*HovHWifG5B0Beh(L%7KxN`B>wzY$%u|{+eM?*{E^KcADKTY`C|ir zs9nu%A569`JLGSi|dY);G&%q?fbmW`^`Au{T3YXzQK$5i^}yRDkZgZ z#c}y7Eje)gRapUs!o1b5%G$o*V4UTl-zT|hK0KIXa=mf*B538OaLM>7n`?icdn6o| zIOO1On5Jr!4VmwBSyEpQ-2<9XE7=dnkw4obM`$DX zJKtdXt-)EX=l4<1q+SiEGB`%4h#aS{pH|nM{nSG`{U6YaWnss7oCr#=Ea{>M(8eq$ z@$7tz5@YNZ>L7dqHv>oFraW~L$(5NJ#4d>{ALB+j6KlN+r?l1`CC&2rl3O(z{!M;E zPrY{+S`DW*njOI@jI2{($DRhk!q3r~AuHZ_Oy(AB&nWtWPm-H~oFywY@= zspi{mGd=aMJIVG+wEsSw)p~AzT0>~3!|0DQO8+r&gqoIfKZ?~PmcBc9wmP-!)6ZC>E`RN0t zgY?AzL&0{MA05O+B+_a$YZEx!;^4l2wV`bm^J6vcY%+P@V)A|-HW*OjzFN+N_q90f z3-6zVd@#rTKXK~dy$2y_bJ%aL-%HkS2dRyW_U>69L9>4MRELzy+6PK2e5T_A|4F8Z z2j|A&RmC}Rfiy{lFq3nfWfbRr`k9>L6X4ue_)!~r1wW#pSMhJRoMSza_aN z)4nk92MltPfnVX&$-sJ>frmc2mkc}`*1zHVrh5kJr42H6O$)TX*P;6}-R8T$mZ58t zDC((~kvjm&54(U5aSrky&no_J0!tvZsZ5ysZ^x;y$B zY!bWRc@v|Aqu=d-}n`t zGS`b3MVzshV8$j@%OD|hNY`(yjvDH~he6kLTrlaH$$Pkpy;LDS!tw;@`WSxHhJL|~ zXy{k`+bvz4gGwNisK;|&?7KcxaW!Z;EUCgvKjk-Uw!hstLT##=btte zILv?}wkrNfCn@Cvv}pF!Kap?Py?zn866&vwym%76!{%LrJ2M!l2r9g7MQ}cPpvaS# zQY&%FbVF)_r-NeVZ1C_x5WBSvI&>^+>2&cKJf{x-R)@#b;bC>SUmfnk;Vo+9*WpE{ zMy}9P`2_btty6?$$RE@!$DyAh>_>=CL_-w7iCG2-`k6ch`Q9&h6r?&U zyhvS_o`{BSz}0x4bqo&Yun=IsjjeX|XnW-{bVjERX&YLV#)of{ zvAo|^)gJt%#n}VpOgMW8PW!@HX=t3Y{DL*CW)ntYYPc>`%v~I3?h>21QcWYoC!(PT@o%rp6=1)Oxd#9)^=Jt(amen; zjQ(YV;%*7$Ul%j_M8o3msd6U#9fi}r@K@UE-){E)8w59A z-Ktm}Ao}7WfSgcf?+VO=rW)P)BUCrVoCXjFBX2bh=E!Ttsf;{TLMg;2qM>E@w^!x} zu;0cUB~YOx#|3H+R?d~{MWA+PQVOxW^woc4h&s+DoJI82+Qd-rnG9Sfbw zIOVgRMqP_jGhW@RX52zOd+YxQEpGiqJ*&Zv^~P5ZDy~v9ZaqA%7lU13tAT^b)^?mK zwkm`wB~q0;@~p1owuLo_n}@@e;sp+fobBT6s44|8c;HEvx+;!$*jI!FU3#=zAiEH_?K zgjK?fPeemI@o%?;biy46XiIm?8w$|1LVA+wIlSHaZ#-+I zp0MnUB2s}Ol7<5aPI{H#lthBIdo$o-LgzEEA7sI9r z&Pr5w@BOKhx~q^iRV|?UF8V5!TzWp&;2Z|@DUhclL1k0leJTRFvbdI(P+SXiCxPdC zxUJcGKqPBWeO zch!-ok^2gGX}G#XhZQbKq#;{fq9+8GB$kkhOIGelp7DUxDu_hn)|Y=3_D1B@kIf$i z1l?@@DC3Wn_<@|0g*a!<$*Sj6aE!sM9)n}CtQW2j8{lbmSfmd1I3RrZ7xn8NbSA)l(FV{k6Hn}1qkS^MnLZY1j+gZ z$5)NIIykUuZt_*Ig;vJHcPBYNnBT(}nv75rgu^q^drKF@gKw$azHqG*|AhFP$}3sQt(E!z6_o~=sMb*5-bCLfHxJ}1$Kppde=^PShgEyXixOrW*i+wQquW} zA4&~kP1V{s!h^d-I8zbys=8Q=y-)&-3rOO>hh<61!AuB88e(_LBA!Hpjd36D zh{c);cf0Pm7BOz53~j-p>Wx?)0g*9j`_d{tbHpM$L@CQ7=CP$raXNV;CYo?s)A;m3 zcuvOF_)I1f&&ko6)NV#@)a=*7=fQb4rvQJlo6-7z+4)VH+RdnLivYp{8vaV~SBAd; z{>t$;13)U<_K9T;n*=_LgkV;LmLk-_L7?R#l3^DnIDZJ4&G$p?!g`dvWLNdA7G9R7 zqI_cJM4_k7$A{57IZagJ)b_KQ)5KfG&$S5(i$NK+=ryt$Dxf`6N)2e+9kTh?pUyY}IRBHTFdNPO1#w1Igv6+!7;78k)_=q4r? zam=rnJ7X&5_fs)~WqyClID7B0TXrc)HG)D(-Bj;rz->%78i_^qB6%8Af zHu?3aaUM!haPUB%$U~pzwxYQ>mK39K-v}SNv+G3++1l}yzR381)nS)iB6)Y^+VJxN z#ja;6a&zV1JXC4Z3SW1H>LB5~SOkY`)RhH3eWWw9W-Kym{zeHXONBs!0+7U9O?urw zIKI>dBVPTYbe}3V;#I{)yr>fr=mr`+DFV%0f>TfgO(@$KmH=#`0;Z)aU|6ba?&4sU zP+8=VIz5ex%Pt{#*ZsF^%9=B&HfpaeRn?bfV_jDiyYh8#IVHEjJdj}Ei8iVM3Hi9# z>l697vL$O%AF%i@s&l_(jK{lH*3iEnSBeo8haMFpbjz1Fi+Y`AT&ngjElpDj&R@4f z&x&Lnc8#Ur{PKb*I2qqhLqE=Z7|IK7pJ2UxSmN80)Z3q2ZN2@PdOK@`^+Fr6)}dfo zpBtfGc*=euf*0cI(OdR}8?$6W0AP=^AZ4Fke4Z3vI4Afk_i`pAS# z<9SFaS+|KP$~gEv(rb$riUqf@!b(0Dtg0RR*mtsJQ^1R?{a~uU%8{L&cX%6+HOv2o zdJCIf3m6vn=~txth7a?;{tH&HdNZ}*F75RlIDK1t`%AChs109%k>*<9Vy}#xI?!9V zeO9Vh-`=*5x3Jx{fUyW)2@_)qP}2--_!X@&2)7Dzcb-J1?_dzb!OZ4!7qH;3Hb3Ql?7#@xC=d%bnEum29D zDv~SeruH`02(QpyH%4pyn>GDS?d?|fsNt_`h0SyJ)gp)OrxkvpxyF1#l0j>Fml>MJ zr|g1Igq{t;dL!eL(K1NJ_r1e6RvhV#47zP(qf?*M!bKh7WG&(yq*Z^J9Bhx1mrPm# ztEJ8dZA_1Pb!IJFl(~HJWvzGj+Z8i>q>AG|vp-hE-RhCMxEEVcV-Leu*|Inwm z8qeQ`VdalZ%^BI~4X5OKfh{(?zA?wE4@KrE@n!Y3 zd7C2V6&T6*ma5IV$!XKaQqE$= z(+`mz9VAc}kOKtdInW9nG$MBG-dI$DRWy2IxzOlw(r6xNgbpRFvp(X*M<4e=ZvW?#XoQjJ;a1{$|k>^}>456+*V8d5s ziTMo*#RBU0@}U`!encGas1N-~K4kOL{N4qaBg`rZ*sR_z8PRQ(gmWkl|FaI*u_I{V zS$Uv>)-*Ps9w>M1tZd_c+~n-@H&q=#cDl7uj%CG4ARyI$L?-hhB?+-E{5wrYda*Ur z4I!aN%1jr>cS1JiJmXY;K3@pG);N}*OPKHU!RAfwSPtntxwSu@!6*4WbewA`Z?I{s zDT5Cg`L*@!Fd8G@y-LM{bx;O#Y@dlUk;J+GEt@!hOeD@9vyHj9X<`fd3|2&xDhm3w zz!t=E6XnZWOYmSU>z(s#Vww2=HhL-j;9jJ%+WNuvwKfLmZPX8dMvf5Erq{c82H&&v zkGrenwyG_HS{mN+-g?O#5+cGcHI1#r%PUXu3n68c2CCOhyIusY7Hu z8}GhJ8m+a*GiY>Pj=I$#w=RaRfDwblGgoiO4k&LacGv2&q7xaw-VJKm9 z6>Od8=D-PXP@=F1rXbGp!`~FOu<(Of1GGrWhiyf(i@h+epqW4$>FBQ&ZkoNnTDQ+S z2X7g(;TdilrVamqV<##s?_U{Q9q& zesgB^{Pc|AAG~@>u0K2?P1EOND6}S+?$rljZcTAf3>0n&KI^S+LK}%haDh*R z7)EG-f~|yOr<`)WXmXL%U^k{eo2cHrkMroff zx7-KS2INI?LFhg32vZHGZiKF|RXIj;Fh??tseoOmxOOVK^UO?Y5(jxl&BzR9dPn^! zGdNJgzpk1*_TqA6!wJ_i4wuL@P)*Q#$OE}DLjPag+cKEjV0_YK@> zR!cB(^J9}lx_*&-jcDY4{!Cvukf}Af)v&_H*!A^N%oQu7(nv@0%wZ_=lMHo*4gw6j zo%9QMu=+bC{c<$Ulhg)xSTPc{h+`yU`})yIo{^13krHUT{v_jv50Tj=2`K?Z9sdl4 zLBPZSiTw!}u&-c*Z1h&oXM?=@!G0a~Lc||1n)b0;(_+GESFl=4SkQtJV4*ebXiY~q zt!W49Emmt;IvS(j*b$rNx;}Nz z#iNtZKRqQ;j~ko@T_}l7a4mfRce8+NU!}n1nc&)^o)&_ubb<@?0o+Lf?r$cz4`BWg zyBSeWfZ)_TVPc01w!^n4*GtQIHuiiI-0dc~%&3Rm`aX^!LGTPtJGzXIJ^4}j_GBcvGGrI zl2_#B!_+`8ghIv1$BoG*;%_lp8#uGiYv&ZEwM_?y3LFggS#TZR@M30EVO*hxlPo?0UUOP(!rCA17P8NPWH zE7DCeAcZ=8n4$?EUh7sLHh(@egCC{`7t>G)|0y#++TZ@@(biNhAARs82RZqvwp4z# z#0Q@L~uD16ul1sFWLR(*4SUwF9nO#!A_TSmVH zTRTiX46_?ZYW%Qz2pbB21!J_4Y1Oy(|R1`v)+2GfUH-J7+ z3`UL7T%mIjaKNt;{3>yU&Qib1@T<%fIuXB+RNyUKGxH5EbUnRD!>Cz;Bgo@vz_AR+ z##7eR`d6Rw4lS0UUVW9NpFu%s8mLw7Ug3HXuCkRgzr|DBXyKRDqh+IoHHc|+;2gUv zuq;I-y=<-*J?n~IE?|!ettoPOR@Qpfkxl_kKc6?(YoT}4<@F4Wm-``!ae0G3gvIN8 z8qGVGSDMjYb*0&>e}r*HO?Q8~)KJ58a=CZ-pp2{po}mqH~S6Y%O|@NOfu+uMFX#Cr^)Y{_G4QwD1NH-h$Xip>-d0R^In z>@56Y)+jdLogkmQdI_Mpfg#8ZX#WH>0NZbDZOUL@|Lp*V7iXf59^Ht7&nO}TU?-dQ z9=kn&XbvC&69_OGtO*djF!MbEf#_hP+z32COMXu)Ts!Mjr@zdvdw>rqgVwEZ-Iisx zt{-6SqxIiF8D6*+t%F=e9HT&j6**Y{nU6kRXFQC2a!me^(a>Bt78{f|@QHrfs3HUx zY8dkf`yu3}rY{Yk#~26e%H0+Aq>H-Z&crkfjWGaGF})6Q4}U1?17L3GfSEqm*l*!> zsdwmzh2OaraCxg$|3HJdpEblAo}E+Fkcm%t_5ZT0f$?8B)>{9!lhMOeE{wyQ@%b<8cAZp@r-8u(;0#OG1IdM(Eb?ark+)Zhl+s5EV zENd>H)fs<%jBe`B{~=L}tfy8oY9fl9F$_9loff&To(!VE4SXV@lTS++{J`%OaL&~k zmjVDD%Xkh3tkGPp;wNu7;Cz79Hx4*SMz(_U7X>HDxIy4Nhx9JfKSL7;ZY(&3o&Mm+ zwYeX_a%u)Te)@C2_v)E6tUtgqU#~s@UR3$lolcuMd|kS4)O8pk?;#4QEvNN^|6nH$ z(Ddx$@N}%uo$k^i7i6L(X~z4v{fc2WHV2~WV0e}D-~)wQ`C69ezBV^+X+Az_ytY7f zxiAJC`UOzLFg?f@E}iey5A_y)h<%7T81-3set5q2qtl3C?(@-kTe$ z>ep%kR5YiHX84hU8D${dKqr zP>XTMoQcNC1;0vQ0zmV+Uzdy~z^uoEfXRa^6f|KTZNe0fLFE1=xCxl6aZoUM0Wf(0 zO!GQm%5{A~Bd!A`53bPhCd{`VRCpe$@NC9Sz%+1BFnPfnxl0b!%gyUvT`mC67Tg9* z9?*9DYgCy4*Wd?9Yq={@wNVJ>x@yuPS2ZYkWTEU}kLQvU<5F+4B;pp>bK!B27USUg zz93Vi*yb9tegeeDL=2t@c{t`#XU(GnBi$c9hNB+F_7(yZcQd{8`UQ{-{k3pEO+P?f zmh>j*!RxiyL>%F~y%(yO?VntLA3psmc9_!nZJEGdPSW@<8>4UW7VdO~8YQWxiEU1`jJXO}0PR-KS3N=2QOg z8UFCi>FSH-*SxV+>QiQXA@~SB_7Vax%Q5vqn+a}^aLhB%5K-%5I${$3nEL)F5MBPz z)?h+72HX2U@{hw`njcdv`aukh0Wm$8eu8tnG4u@`f8jG26a?b{^IHu_X<_67faB7O zd|~vavvTR?$FljM@FZp%vtG12$OdB?erWnGIvcl`y$0o{jq`9BbA{h!c;o@}uj-rA zlUk2K*>VOuGC8_#S;bKlH#TG^z@uT28e?xx2sOi-Yx}=Z|61Y$rneEXNJv-5ej*>c zt$aMlT7&X9Ph!NEB6xzd$|>l3-s*-K%?_1&$H;F5}OMQ)Yuh)4ux z|A7qJus(Sk7_&P(RNvf?Ldm@SGjG!>ie|6Ny^89>@E1S|yf6emTtkz>Cr67?FtWq) zbah*D@M}Uqply7*?rO-y*R<`QBEIK$xqoB`vh8`2auY$gkn^GH!)o^zCh;`{J}<}c zf0c;)bc9H-VWXGf7J3d{HFtoXMX%7=g}lJypW{@R@x!w?z@tbPTnYR`WibBWgKFe5 zhX4W0ptVzpw3YxS29&tu%II*gPSGHI3us`?7@k@w*{i%r3-Qombk!wM&q6w~8t{8H zem8RuAiw^ULUGx!f?BmE-cm? zA<|Ne)9))xD$)mxi5BOl;L)wnKQqTPrL@41Nm|O+jqj_-n$?`dBv&jwoF8?k2#MD7 z>2t%rmULRsIf@(-wd3ZN4jjGJzhurl(ThwTs9d({l0}81lj_2<+8c~p{{zN2+RSu} z6622J*_G*Ot=Ny|UtTMk1?A+U)2Zv3Ro`FY)EiO#9XTHWHw%8@t_9eZzf6`vGns}p zL{K?OTlkRzW6^&_ammwE)<%Jmey=q$G<}s8F3U;KGs^!4HG}yjuH$AjxQ?q_tm&z5 zoox+>?SAT=3`#S`CPb;o&5KOTHXfSqU^XP}(n`|$Ho59~lsyvW?rLMl5(eBm+Td^9 zEgA^xf}btCJhBLZW#x?3^!W zA6%JdUtP=|yIRF3efq3SS6=GTmm#h7IB?sQm$Azef8#_at!}46=S-6+o#JY481zIzVs(+Y5)x zYGWU?7hBo*!mnwd#}Dwqk1IzyJgPPFeB!k@_vQNJ`V5?VswF#2i`*$)b?xkq81K!l zz~DOzJva$RpBz2aJh<|r#w+&}qUiuxCjS=m+SAsx3tbmC$z?48@JtIZ7MfwJ6Id*x zalFt1dA0Sr0tv!JjmxZS1s2GX1du~5kT(Gm?RVl@Vjj!*1wwIIP>KaBft+kzgF99s zdujsYH-a6prrSzDKTf7g)A5gyyo3YlwlZ9V9rP$k{d5`q?&c+k+h<8}6)d(4N5ln0 zVS0>nhp8|v!o2nj(Nsd~y_?8E7LdY|n5+N@T~149e-A!G$*YBtQ|3n>!YN#!*Va|mp6lMl`1ew}!q{tOcN!wc9HA0C5DPWBeQUNH=@ z0@&iv^6%m;Z}`A;e}py}{-;AG_&=|HSgv;zqEN1y2LKuJa}jY=?HGi1aDP58+JQGZ zm$0H~mqXJ|g5&$pusjH}trh=!n)8T?|CtefPRXyxW&d{i`f{K#P%M!r5KCo6uDn_8 z_~*tJ$Hu%&K)^I|FYG_#x!KA(8j5{-A*VJPuf3(@6kMtPmy9H?e2iq>GFI%Xmy9d# zQkiLGe0R3_?!R9$-@P^A-Br!3O<7TOWu})eF^tt{>V5OS)L|uVPnOi zh$(ti1Odhy{Z?prlkw8Rj+lz|9pNqfq~bcSy`L}mabqSjxKM}=2Hw2wZR5G)-Wcd{ z+kB&@f9tA=vK=h2D4G6Kmn#(a7ZjLV>4A3xDmim2wRGSJRhH@+x-Yw~7w+nZy^-Y$ zg&JpQ4anAQV;9VJ?UNIeC#PR_E#n{E#zqx2PGtfNCkv9X(OPh?dxmmmx!-$Zt zAXkCCY%=~1k(SN-l+&C4V0M@9WYT>ow}l_OWfeKlNo%|Q956akVa-j#KbfDPeay&4 z#!-$#Ut7GGL++NZ@*$itQLV;A)c}qjb%x2&5EoGS!hTH@I8V0BS>Hk5&DZo$E$$&Y zS5H**SL@{0tF`#0xY>YKBlLx-9j$0E7NH7mT#Lb1WD1(0>7Z&b;D;26X~_4hx%2?4 zMrbf6pBg|T^vN(nrsm;qb@h$uE?4M4JcM7(_}jFM(hQ$yHr_jm2;qO4)*jw0z@K|* z4jwSZRyuneTy8g(B~|2LaW=}NT!86lz47_6YC5uh|MwEoUC>;@nUWTchY}A;kKLo7 z>Cek+Js6j(I|jN!6jk`9Va6rewd(oqqzd>L$3xjjV)s2kB`Il{`tQ<1@32Su+uQcV zCcg;1?_m0rC7D(SKWIzg!>A<#_9QK3timXHf@WX~+GptJY2kGJypph%f;yz^n)>u+ zr%~$x!fBus`gSuICBs$KsRks|upKeSG|;3Bj?+FXZ4uix7NmXVZ>MbwO9^%@oLjmd zR_%$n1ZzfKBtU;Sh|z&8~8NIHI3^64X(OL*~(ma4J5`aZ&`YFTp z&A40~uHPhg>sxTpnyTm};D6Dob{=rQo%2Pwz5@r`mr5GAfm5mFs!lVh_2NG~o{dx7 zT%s=UyEE{I>A$MMzEod@Q^4d{z>P*6_#dv+sl!4XaAP&E;y>J|SBJ%N2;>7Kx^BRY zKMj8+_$$L-0Dt9e>3$XLDlckEW8?Ml*+rO7vCc_M8SnNloHJu}V>&#eGD9A?7+iry zg*5eiWXPstUB{=t8-BDI*NPxRBPmcW zB;;1>*FU1w0-UBUG-Ghcj6%d59U8w8(xNXL4mh{+${vP+IVp!O`{643QfvI@a%y#m z#9)<&aobQ(LZ7tIha8arowD*S+lmxhuMRJXmaQM+EnHD?axsKHfHSCYs1KKm^g(yS z1CChyTJCQXTY=o;nO|B1>CGTw86M28{&er~)s9@2PB|=0o4xIASZ>H2xy&C)sq*Pl z>->eERUDymKH%d`$z|3@5eSy zaSxxUp0^qvpBi~s0-DEwzGiH5Nc=QYP9X%VE8W23bv9pj=PRskiUXy7t+`IzaKqWb zLRa4FuITHft`nPXI4O97`t<~V4GRuczheA#KyW`;1RI_ijb4NV0fE5q8gf#w#g)JC z-3k{-I?!9aBGboIl{R!jy0mqKSlJ=&%iRreF{z3j!Ywbd^PKNPwz8?)jl*`suJ=OVpuD1XDcWQ!%-&&@tH-zC9D-2-B?SeQWIb#iw5nh?CIpm6G_H zj8Qf69deo})#|#VHy5M?wH3~@$*4LtEEOx*jn*&Ht zFXb-u8@OS;!{18iidIrK{P_lwvO9_t3+@C9V7V+|&v5Nmk*lG}#iL-4-F7a3wN7I% z&{q=Ik!u87H69KOdkf#6mF6wn=yQ$#UP6zn6R>4#YP_(L5%h#Wh9Waz&!YqIT(|uP zbI^oH%4``Og&6#O9UJ>B>f6}x6}HbBdaj=Goug}Cm9fXMQRTSZ{n+@6uD&0;hxcXoprF+zph*Pf;Q7!hXsauYTGT25EBSu^d##yF z0$BI{-s`)*>-xCJTF*S|Io!|be(vW!J$;oi3_^rPU%fA9s?hx_g->CG`ip8`1ak5L z5y-64;hkiSNKIKoXTgqwBgcFTwT-uB;M4Mthn6L1xfr~Dg^m=iKpM&G#X;Z0qSKkL zYTxDier(%buKD(t?@noru(V1wrGC6hn{1ufp3P%WQ1tnU{bK9M^1?;Vb6&ZVzEx{H zp1yUBz1mjtf)UmvrXj`P80>E^Xt|=^mueLqqvAd5olB!!p@uh?QFY8Wuf+3k-J9!3ZrkZqh>FXUWdnaAA zjEeJO`A@OS*T>T{%aJle^vx<`kJJ2^)DHO}%icp6M%0#Cu1br*}{>e5t zCi;gz+22HG{Ms3k)f(tUY*lpdDhd8O``K~2Ld$=1Fn!SZWuO#;taUjXg#$9RtI%ig)4D9$sh z`siV9?B=Yac~|KD@?Lph(5!K?V=I#*jqUo_wtm@&*`C;uV0S3dM2x4)Y$7J||IEbp zdfS+kq2)JeQJ}M_k}Us_v5Hr}zu+iaF2eNU@cw4w;Bx6ZHBqs%xkQFa@Q9%E=q{u2 zV##-r7pRuL34?HF0nMx_TVrmE4I9W|a}EG6JDq(PQ@!lIVj3fKpyFDO7D`ASU?w(8qc* zkvh8xwsH=D=x99QrD4!TyO#@Tf~nX}#eE0}IwQ%J6B|QL)7=f4XG@EKV{b&!@ByLQ zME>6(LNJ9YZB)4a+PFP|#h9XG*dc3Va5|?pWVVyh5@1+Y^ zAU)n_py(?^+XcjM9WoIzUA#7{hyy>h4)V~^=8~2a z$Mh;q68K9sESgS~cx_i!a{v`bwXP$F5gAWe5+`t}4=;1D*cfbDxSBiZn0V@b9Z*T# zkty)26c~)Wvk!mMcsTbfZBQ}_3C*WTgDiqoALfoba|AY~;y6rT6IyXO)kwoE?FWY)W6o?JE zcloBQz04M``yLe+h-XXHuN2_@C$TFDZ5>+7F&PQ(oqP|3xm&!YxkXg^MQruHMXbQ0 zlqOS6(e~eH4D}6f3r^$7#r*q%Nz|cky2$3AdsOOJL1l9Fc)dRm$+BWT z9~16l$=@qg-hwat>r+;ch}+yB==0Q6QJd(;6-t8L$F)1CV{NuM#u6Ww<%oBx+@TzC zc!NK;*t8a~>Azm%^TfrKgeT4xd|gDMy8ZITFUIcWgD;?kG%)UM|Mh3RV3%KUJe<(v zrEo$$osJcCo}!wF;>WlzuM!vBY$Lquf9vZPMHqSQn~wM3I%9@cP4wk`j#mN$QP~d5 z$u@PLY)kxXBeL0cz+h9hUH>*%+oAhpi}~3$R%B}XS&%LAuY=j1eMK$wqq^YescZh=XI-VNJAduBQ9nr6udEaOtiSZLT9g}P zJ;rZmhqC@Q$f_S?m12YU-hsy_qqy-|{fTR&pN8yLHuS!=a`J7Iwsyd4 zcicV5Q8?=R;?Nb}5bt_v*=l-28>WeXKl-kiXD{|0bjmBS6j(ovA^M;cctQ%TWwXff zg}~_97kJ+Q5I4W8wnQS}jImS5_h2O%uW|MefTBBu&Kd$%xOkCMIz&3wvpHhfG!l)6 zzIbvsm;Op0I}&Jdqi?>&TlR!>=n63M;z(jjZ&I6wsWU9yH{TLgqI{7<_1b|VLP@7) z*kge%V-E5+g#btq|H9u6ROq>9`!cWjE<>JDt|b2qr=oX|9C3EN^N+Ta{gyh`JDO5K zZ@oKAhv1$g4Yl0K3+?Z@Vroiv;A#-kb%W*0u!#MP8X}qij5h8-=({F$w{LMk|2a{q1uO$+WknkzJ*EWIxrLJ5aIm$SAIMoelL14(otO_xo`5Y(wIBDk(GXFI>umRr_X!lQ$HOlwI6Y-v4?-!|$I8 zx?A2zxL1PUk-%2}A++=^QqNl%q%Ulth4^OB1mc16x3d49)48-t8l-}Lf#lMWL4rqe zX(zOFH&mG9(h+vTcI4741%)rwn{o+zOCXnaa^%wVKHa%8E132PxW_`vz75d`X#lGe^$Y-M0jLHrV!1IO>Y#m(`P?985|^gqAO%ks;mxsC5Nk zRoVWp?hh^9%U9D;da?OS=CmTYz5p^Z?A^|=GY47@w>@1st6yySBL?Js5WL9kA%P_7 z#AsnUz;GTMpvFL&y~W#khgM4f!@^~L)jp}sqGVQBwGb!M3RCTp;49=>C@aSgNb43W zN`ltb1`=|?a2+~9^hoXGb;`M5Mn>OHD!0tYRJ*U504YMRxb4bC{8_1jPAC%PbX%2C zRLLfsXbH^TOBqj!wj(h!A9_)SK~O@|!chARQ!cgt`t2fvrj_6oL`F9YCItN(5J2ab zoRunCFY0F+oTQFx-;BCuw1#@P*uA$QE84fr+x;>Tss2{@JmyMX9a{P;3)}f*T{%E| z-@QoWd5@Oo_`sSSMFjMY7jYR(SzfpN{OY^|>ZSdTlPZE%?z$j`!NLqlV5b~k)%$Vrb%zOzwa7a6m=OMU_j9B^v=fh+-{fi>bOY*m}Y%X0G z9H$a4H$|p(MnOC{y!Y-)Tkn;liRQPIdwAqnqFLjVK0SK3oaTM)$YZn*kNKQlsl*yi z=2ZjZzIqsFw^nR|XmU$IEml_baHZg5A~Re|k~IV4j#LtcagB4CQvjkEvnKN+edi(| zOwAhe3sSBf7}rcnWL+nes)o9?{!%aPu2VPD|B~KN-t&i29+(ru!&Ss%aH?h@-_*GY z`VlMH->%{XKw$$2HKTjnM7i5pcI=dcq?B3LA9qpz>}ZDGt$WdNnG z`lz#@o*%T$Guyv8#DLfF53PdZ4fMrIa?aVftE)UJ=ojnSDZs{Y>WZnf)lE@AXFee)2E!o+R4xNB%+n zpYAVz#JkO+(>v){9gp9ctBv8uW%Z&ZTOSiinWaK~MX{?n0eh)>Us3GD?`jauxYYaZ z|MX8+9X3RXd%SJjI>M?u?~6LC@cWdjlnMH^)J$i@PcD?BDLGd`xl7V@_j&}`lbz0i z0x$mt>4v~>5W(u!utywWKC*hePv&#vNx0Y+vV%*mrfs%C4mP5fTzX0Go{4*NJUE%3 ziu9OeCj<3s=j3WG1?Q#Y+vPcWE%>2A)w~D}(T;+Qq1RUfL$3v=GpoG|W@Wd|VpiL6 zPICKpC*^Q%z@5&(xW^6&Y`_jyMDOvWW@FJe@0f36$s~BtnmT zA;*eX^|l3LW~2*Zc)V)!i#U;K=fj5gJbZ!9&WjOOJvq*zq-jDg! zeq7eh)IuG9JEx}@g!^%Qr?W>C$K03E++YVmUGA08ijP4U@vGjjW@qxW{@qOWz?|fY zRX>SeH(@sSJjPPgR0qGDbQ6R5CWASRy>@BYN-FCs!{VZOoYamkRa&%!GhYspwy6)2 zowO5Iy{jtY`R~Tk%lyhEJ>z73kDx}c5UP4_p>~X4SX9DYNDo5z@73jCdyP;NKUo4d zHn5o#=CpQON&X;`qUH6zd9n-Ouu$gn%S`KHv-f3E$6C8`Qj@0Tbtm7p~VgZ@c95L8$Faf=6J;+)^anTwpSH6NXo*ZNZ{I%ID3Cfw2f zV4?$)oh#_T44DefRZsf>?y=D*(Y_UPo&I=5XDl7@Pu{4rb;@Y&Z%OgOzwTUxQm$pn z-yBPwgIl|zNxZ``_i<)&WDqx9#M*O4v-Z4)u9m^z(rbK2C)uez%%9z$W;*`tUbAk; z@z(zR*>w&evDm*uyUsl@k~35NvwF1ae@R?bLv6!7+TnPxsOyxDL3t_k^iHQc+MkDV zw$4iF7~O_rySIiqw(GqNoOmF|b|t6d*zP)Y%aczUnLF}<+rZnY5k`?}*NK+!R~iaW z#Y+ZeyWz7+>{E>BsU=SL)KZ^Dom%KlEl)+u-Ki5((TVQVN{Mx*PD({5xl=g^RJl{9 zq@q*YsgYDP;!dqiMQh!uGyv8S#mC*L^{HsRJ9SnnI?J8fkcu|AQ|G3lbE&eC?+ERp zivXcfzX74i2Z89RO@Oc{0HM)sTf%UqTJ?0>mReX(w@v6F)vBl4cAJIubWPfwYSnsn z+rDSgb)zfX0p>V2IPq*z}3+ovwZv6?bc&hb3{nt80hT9Ywd<%td)wfV_ z%1_d!m($&5DGAoL`>8MJaN9choodz7ZF}6pdb({-SXfWD?I{cE>9%dNu%2$4JW-}v z^#t;lc(u3c>9)OWAM|wFUbV2EK=(Q?Ab;O~?NMa7O_9MjAlEnR=aiqSO)r4A!~_9e z8QivmMyPf@-L_E{*3-3Xc~h;2SXc_Gsa8GRw!gl!}Wgql( z+eB)nTJ;3FFYy9$d3oYht;lejB7<*0u5Ui%eyTRTfZP)MkSl}RCKvmuRz2M|-K3go z)zfX03;tBAo^IPY7S_{kn`vP^-L?xXtS69P#H+nkPq%HZebCcwYqYSQKzBJWKyLP5 zHz_jQrpVwMkn5Wdxu2>{FCe$XKIF>4+~%2T)swkxVLh4K7S@xwZDBo`+ZNW-ZM(<9 zdII^6d9}Cd$=tRNdb(|L{hMml6X@>e1?0c=Uymp<+@{Fj8<6Xp54oSJO)ns~#6IN8 zz})7UYSojuZDBo`+ZNW7xou%RncEiD(`|dn!g>PvA9=O6>dD-;4|=+7uUlA8pnH=S zkbmUA_9`;mrpVwMkn0;O)KAi;7hqdTA8e&&VzY~;TJ>aNTUbxGO;*uNYzrT5VLh4H z7S_{klL>XIRZqY^npbL+Q_iEcuk zMCre3@9?WxVVemx{op5xlc=QKD(kewRAw82DzjZcmDv`c$_)RjGDH4WnPGlaW@z6k z6S@y7GyJd0Ue8o^lvQTvTP+jTPN_1XY-^ceZB=F{Ta_JYpVTr#)~f6%i&D#kp@Yf{ zWvenFT5H+=I!WDV7*~}Ux>aR{Yt=GCw5rUotSU1UYb`VUs>*=mAl(XDW&WcKl*OM_8wh4eU z^dsPeHw?IqC#WY3fe1Lm9sa&Y2spzS2AmK@yMQxXQFA(T%n-$LA5oxM zhCa3&OCfi#gKFU4Gd(iD4cx%d78+Qnp%y5*Ys!E0!_S|2N=J9iL}Qc0iANIt>`zt|vN>#;kjH5fpvRp=M1)z_ZX z%1b4+?7EX$)IqVf(o#vE4oGI`fc9h%Z!0gUCDoqPa!Mt&mb#N#e?diBfeLmfwR}}9 zjnWdc@2R9#6?4N@O)BZ|i|_S{Bt?5B-d0gk%cDK1rIAW%UC;wOgNn48{ED;`RZ)A= zUo0E6M0~IL8E(*^KV0KLRyyf9{aD|8E`JXP&V1iHY*$2#43_lR2!GGPk>KYhZzfK9 zR_#p$1nl$@7<2F`>8U(wj0qVax3=sN@z^?a05 zQ7|Mzqdt}6zU;WWyRx7t-d&XZ5qo+>VBA>$g9Iz^n=<^ z@y#?keEOvE2o>EcX!{kViR!mPOEq1?B`dR4s zmZrK;c`rZSnawDg8(boG67kW`h*-8nT^K6g5Dj&0P~OJO5ArVC$wwTEt?=w!yev#Z z-4%*W*@e_Gy!}-C0oQ~FrT(>%2Kq9WeH4nn)Woz+EuT*cq%;j=hn0%!mH$NAbqYRq zaGpV*)!l{?Q?QS#Xhpo&}o~e9?mDd*NAvbIatC zVQ$$Zi$;^ExNa-Kc-iFyF`uyLM#79VVRJ~zui3xT4^j5|v6dgRRpjj7Fu-AJxkkF~ zG5t)BrBn1X(W9SttB>?^_LJ#3Bg8g^`KppM`~|ncLZ9N#)3{sK6T=}=73OXivp{w4 zP8enPvI2w(5w03><&wI@c)j1I%ux7d4gAfFdby2of-8K=@77=h{8qrctboTU{9Rob zDu4ci(44KI^2c~}eh_LP_!Pke9ni3izh`LC5ux%|iM#k&Kbg9(;l&^wz1r{+e;3o! z#TQZVoR<4|T)}8G{Efgj8K8y_`DIn z4L2ADz~=-2kyI);>*#AA0OEia07wWF#g`T++28bdlXwGwQ33!GyiWqIXGm^9QM21k0a;AnZpJ2fT!IJSpzzgvW0>FfNg3!V7F4Trac zd2hMlkd{K;-8UT6Tq6fdVXP~fC!2l;Wy;0K-1QX7L<~FXg1LCJE+zyrDAdmmeqz#@ z?4Y`?mM4iH)^I~kF&$&^rlBP$@nb#O$x~8e+j%t%tVh1mfEqRUsx(%C0Zacu?nYac zx)7(W&P*t7DszPD`bJuLweC5QsI+}<{|O~V*XC{fQFYzPuf)?f{e$@!bvu6;-PK>W z^p%!F#mOiMAYr* z^d{8icO*Y9y7pJmu7i*TFD^wZBJT1$t{c z%3A$aX5X3X%mZZgOPD%?nP+4jK%$%wIDniDkbS?A-bKj!x=M3{yl8suaZ-;MJgH?q zxc3U&1fFWxgxLO%k0awBdFO&N(RMC4j!Q>xB{*+ts`j`79O@i53Wy9v2TC!xJY6!S zDz9ai)Aw4{zJi4x&VNaAQ-4fF_x;BVIXRz@*T;21 z$mip}a;wAy+9cD;@BQEwB)P6%r0)o5VhWE=hNqn5BWjQ|IPABnFW}_qT*`GvnTsbh zL6pR(t-vX?fipRmWE+qo&ceLZ3-o5(_`d}B3&iR0akXl|O zSW?T!`!50MbT6OCOZ~$K!J1k=g=hEjNDwVoN{>-FxO{mDae7-v5&x?o-ulEGDlIQ0 z$>2ne`@S$8_m0(SY6VpAu$gTWxJyvepKKeUIaYe67Mfu_t~NM)_4}V#>te+!kKf@| zLXk=k5Q?=o#5t-)AC?%UwzsRA_$;0?>eL1uds8w03@+e?Fr?5(s^->_T?MXE^ePp=`46-{!_ zh|mhn2i*{gT7&5OePK~D?iKyi0kSl;@$~PvT4~cMY_yCmnQ|i*BJ{tbgLtRn4sA&X zsw1@g7HmK{VX)P62xFU%p)8wI5EiLAjsJ8>h9o(+36i9F@yDnZpHrAXq}{o@AmNTL zGpxyhIaaYL$66{dhI~2((i9A44Y@T@z45w`uX|FoAx5o*ee)Jvt`0$A1BDw|Q0Aan zCS$yMqko4=1Y>I{Otfvs)cLE4ijB?3A>GG?fYCp(6mDH2{re8AsZr2HEv zIVNcMFT9WA-OGD2?{`DRztqtqRD8|Hh0y`IcUSlL#ta2@?w{k;+e2-iw?jOqUH6-X zkbB$F)r-0Vb(3#yTrh2=yM?L4G#%gL=2wquIl<84`5Z@(Lp)hy$K=neJENho-B{)( zZH02u`MHqXKzFqI=EiFu_KT}uFnyk1Uc>&&yJt9NfzBFAl0 zA}2MzXP`|HgS*7SV^jIT_KYdJg}Ulwci&|GEUtYt>ztIs6j=t{Xn@K{2(aRnFoM!Hc$%0 z3W0dMK+Nd-0AEJ`B%TA~Tk834_|xiS_&b*$3`fUjCe*pRYA0J|K5EkLegAl-u>yCO z1c7^lBX-z~sdCQKXzES@hZL06$vw4Hb65#C^^fIwc|WK>+}saR4`0(?1U;qG`kcp@ zz))Zu+Mtz$99WxkHtRyq2LT@Rguf+*%xU<=&iZ2f9cimW+ zP=$R*KwtHvcVowzfZ`5?zv{TIKcNe-5iQsa+Izk>)b;$&3|A)Tar4eaF`N$cM#31zQ-Myc)#Rp2E)jB_ z^O7Fh^w^;XH#U@i0H?_akM{{2N3mg0*hiBUcrO4PhcdgtSzWc&zt+49wH?b*-Kh9r z&t%_Qr4_U9`r@*#UX0qe`Il;G=4wqJVCMeI#sB^FB}C#T4XdQhGM)1p#|*4b1(_C^ zdxrc}nN0^SFDk&jI9W=Wqf7IzQGpQ)7tUs_6S_M=#se9*kppv$N7g_!<}xG5&pPAs z^Ve{y1@p1QH<`-&3dk@8r!%8PeceU2pJRfDTIF&pB2@%@e$XZ8d(XsW5m?`kO&jl3 zDzl|$yG4hd?G~^|v1H%k{k9jVxRk{_4y56Olk)>JF!(+x;9y3?-xab}pm$mcwxwzE4e=ROG z?}x>u&NX+tg!^c`pVlJ#_ui@T)%da;aq-hj1FeAzOLV-hzOXd3bey2Ut`LRGX8FS4 zQkvMKnNy({b{T%1<9_f69Lk*EC>6S0X#Ul@ql7ziuc(#Rny-1Wg&E3fw60)2WRZSm zat+I}exQe)g~PEsolW|0*$ahABmYuHImfV2k%O>zkTUbP-5QD4!fCHJ4rK%G%_r0C( zq<>M?&`<8xw^tWxevVB2IU@yF3B?J`6~jDTj)dQfPyUG(L}=-Dp0!m!Sz|w*;pw=o zs}zSfvZmVh%gdSrN5LmM$#tvw5O&gcYBOa@Ht7NY`(b-;ysX(fp_-kSFXSv}#^^%D zz=0U~*5#5laqr$NTy=fr^u4;+Ob*W)#M5;Y?Wi&*mbRT*#v6?i#&}1UX>Q6$UzQHA zdk|wtw3Ewekf|rq9Xt8?=AOC-yy%ab+qcZwZO(j`FQGIiE&gXijT2A(u51;3RGYeg z33I2m{r;uAz~eQJFy8G;Nld~SaiVw-wOpID^42R=J$4Nl56UQDbAKFq>#1cb%Px|$ z{z$7#@2J!05&Kfxe&0w%<#bCVFX)!LmDMYrvUh-%S2FdX561ioBPVqr1jbCqzkSO3 zQ%t6hCJ!d%Go~1%BhTi6Ghp-;Q9w57rlCovWRhNXnd~BlBwaNm>0MGP$fT~@H}$oo zc57zEUB5GvUcOF2H?Wo0;7fSsB)M@rv6Ib*9Wsov0AU>F1XBCH^Kx3cwkl|8V5i}3 zG3dQ;4m>pOy-YGnukw>-TlwdzAsy0?g?n66!2^bm78uW#f-0ugpG2h}l& zub(L{kU=d-YYpaM{k)oz;*&3HT5vc$J2$#k@MxB8XLiIV|5O?a3&uI=yCmt2u2q%# zy59dPsj+>P>^JIfoP52{|0+SheU&6RTdlX;|0?YQ``Tz@z90B{ZH-MxQ5WHKu+*t= zN}RPvygXz6Nk4g{K%2}U(^QwU=Re(ioU@kwME|&bU~6c_^~_3NGCBQC@qZ zeF5l>k?vIu(UtU;_mE zdFKE>%u}J0-=87+%y$Upq_NP{4q4&cKhr<2d{y^Yq!*#WF1ign%-2P6LH{t9kNM;i zcEfJddJqltLr5%{K<-sXfYfhZ84W$qRm)a6g`>v06POVpr?b88*~rNQzVxG(&2tjp z>O!$s?=w+|AL>-4mk89V4Oxol$p#L?W2x<%mSaM;;s$i71iDL|!zR z$T0_!iA1?tib1{hmy(M_2iOl2TSY>vYq5-;#I7+*Tl&LGG<&Nb)-KaLyVj)<_^MQ7 z9v0OiWz$92Mqyu69St`h%%$MTXkkI0S(TH0t2YX#D7a%quvVZ8L{%#CnOcmn{6bsS zQYB(?8%KY94s6yDTKZR3qT_an&cb_EL|gTu8E)-cg)=4>ASO@o+4r;ig$eSryVGoL z{sy#x?QwARhVMkWsg!rQlQOrIsWmSuS!&I8OFi7jZfcD!g4CLRt%dG?;9@tmW|)Uv zDq;#Z<$BnqswIAn>f9U;yL=EK!|NXZLk}W&h0HRORkG`!8X$*C%`|JjryLo*7r~5KLFa_U#~xyCbB5AUKN_JMG~3e z-ozMHOnHk%caS>}2Fs6?_rY#(La_2K zcwzTIt=laJ-B@RB@g^LnQxq#Nk$QBi-;SziK34lUUyQo9WITDj#VWVryU+29FBdoB zpWsFmX88j?F9IZjRbC9qFzk}I`#{ZI_%lG#zHeDK24ziDSzl3EL*)0LR$d7zNKH<~ zjQK;)sJSPE=J@{V9R1&ezp2)Jv(|lAp5Qoxvi7*@xtm4U9dP^(vUPJR8>*0)SXJ{@ zPIafOi*>$*%RcK_-;wuLry$~nP+UX_loAL;OJO?jp8l(m}-gArA#<4Dpx{t?E zPCz9L4-w(_VU89o;aOaen(EdrDMS(p%NDDDzLxC&YuueVUtJZe*!U?ug>U_{o8HG` zVnLfbB|LKr5 z6bLMxCK}w@5rx1;cO3z^2MNS%w*~E@+k$p|_HO%cK~)${KAsOh1+^C7jN2U?!( z{qrvL(g3we$JWMpMPID*ll-Xr6s+y`DE_}Qd=~Z)?o-++`}TjCA>7t4zRBQyO8pas zaAZ}Py168pyczcz<3S;{tOeW&B^b(rXPi{Qwt=o_bxZi#ztqv1Z^_>AOjD$A5OE}T z^h?YUT=ob{r1Ln(y$CNss9g>o8=u?Eu~Ggok)%frlC)7_(0c#QUMExPh&IR8$Fxxm znk(wgjd2a_(hhoa}BKUeL9ELGvl7 zF{dEbK#zByxNpWOVTsfWwKhl z_;<4hih6H6*6o~+(M^ICQcLPux2JVSUfz<$%v7E&qyJ-IU~yiH`BC7cqqAqnX=mn9 zR(a+;^^9hYj%2SLuOm4G^q3FvL6v*%i{z%?qVyVl?|+dYlZ;$j$fbliXWC5BOG%l$ zvFadBh-EDo>O?=0$BarIhleig2wnKZ`|#@ddm?n<)ANXVKQw3DNuNh|3x>%=B4Fr; zXOxpp5tV!$Q_NRBNOS5SKS6O#ZZogvi0y+d4PDwNSiFzRHBoQ#$A)Ej=y-owuGUz! zKBhs`6*xL;>7UkDp_W$In2d4P>_+89tHLZxW9u?I35p}A6ZwlP*9h3e$F~{;F?R4y z2#BVA&sTx;*cHuaiQHAnvd=k8=^~DsG%~m%De5UJK`w{Y-a&+)e{F953=3Tn=mlSg zwMm-jKu4`Ola|M+aED~b+Au4_s3^{PlypX+ycyNN`Sx!YVD+B@VV9#XhffW<;d$>d zAvx-rqp< zGv{q|ojn8(1b3qHjB4Q?g8h7s7NGJPk%*&%fU}kWKaQ_oO<)^=2B}9kw)0>)@nmRu zPANl{5&lM@p5K`W7y1thT|Y$gJlk*@(U zGZLsd(J~%r0L_W&>zf3wpG1=Hu!0)41BeNdy95oj&sC{Xwz<9vag#}~ltw}^gZwF~ zLW{^3ks%rj&E2jT$#cTdN%3@v0kG%vdP%8$R@NUsvgG5zpxODIfRC zBh5PoJ;nWr;x21fN+!o#>QpNq=TE}+1}SK%WX77%7QnvoMQd&-><|vZNP|?+8u7?h%JEQFZD2LaIawAX?y#Y$lkB7NL*$ zEkg5f2;CJu9Bt=aCf!|(p8joQnzzz#@zl^@i?bxce@4`l7bPfuO@3O`X5WumYCHrJ zKT}Bu^t+C~JnxyP_W9&|e$=KayOY{WwSPHiD!^}HAME7<=ZEr$_TE~ydmshn+a>Yh zLbSIQz@!2&`jnoELJMFjK<`L@WF=+zK;C=Uet<0cj6gyuFN(Uj-j0CC#`ZYXFE=0M z9+b-0<}Gh`(x`=4#rigQ*Yd`(yS4>Nn2(Z2cKk zXV=jYP*(2PZTkiF*T)P8)iPwsv05%!H&A;+09K0tME&Tbzh`gnc?3sEKQ1q{bPJ!l zr<)wYzxi);L}NLv_yT&qEh^W|VMu{+=N(BvIVgPN+>iETK2QN_p|C z-2YYS|EltTQ9wrVV>*nMlJ5L5K%fcy{0y7GHB8`V2&QU^LJy35icot^xT~f(4>~~Y z$dHD^R5j|)v?-{n<>3)Nju?roQ{UGH>bg&P*F342)?GV!ad^RTp$V*rtxV+-3{O3?GWsrdJ%jABA<95Gg0@xH^PyD%<4=KLUaq-rYzDs%^ zA`C0ND+~JZKBnBorVS!p%Sfo$HT6N_>xq}Xj^Z1MmpY;?a;}o$B(e1@Fv&AIj-at^ z$YRN&g0hy1C5uLuwS3t}0g^bV2Y*3YLjiQ$YQpW&qORx|s7T*EX*upm;RNVMoBO8HlV_FSZ$Dsz5)LI8{3^!P5;^H ziPetV*Y_nIT*rzjb-R+fFDB9xM?0?92Znx)@R^PP5#i0F5`Uqo>eP*a6#~xscZxnN z$JD4a0XsyQ_$fhashk0=0jCL(OJSNtt?#_ z;M}q`sBgr{rvO)gsPV_CA?nhpMUj|0im@+f7hk6KZq6X>;>+A!n7}=e0iDtK8^Zef zVvyUe*Km!e^L=bxT;=_KVO^@QF8z%W=cLD8&ZR62_kXvVqchnLR8M1pZhaBI0V^=- zgef!ja<%8qY0$v5_<-a~Ry*Wg#CH+d> zx_p5SH<}4f#b!%BRE2?V3EbUxWegkx^^OJbGLQfa@-hy7)OZ=2y+x;qQ?u-y=Ck7! z?@(s!fc}mjA6Di!DHF#`gJu5q5i67Xcqvod5ZgwQkJab0LcGz(!rSn+>A4SoBjdli z_3iD@N1V4`e=K|6-fFDS-bbF|A6HkoZ(_Q+DB%{y++t z6q0Z?8mfI8&LJ1x`JL?0$xjUHJO^BZg2%b>u{ zT<>$z;3-K}c*|yH$m&f|Hp6MNaNx+~-%t<~-12|n{Om<)z#}#HG2BqvvRoU{(SYE% zXTeiFWPhatG(6E|{p17fYacI{E=tuQf|x)=N-5e^zfYy?s(go_zLOvGAT27nll^4y zFOKkp-0QvY?{!(LEqz~oMVc#d?JwD@Dh{NYm3T<%E5AQ=x7ag_e)Pj1p27PjdoL|p z0u%~z4;>Q&qlfC6aP#L>alM#dS3M+ga!sLDfiEK@daLH%YyW#-z&q=_OxJCX&~-ET zxzdMsJIZdtK3ay7Zm(fS)qTTSsQ%pwpX$oo=eNlJBFONnt*SnQPN1jcQE`Zt&O*FI z!)oY(g;3u6+}C#Ffb)WNw0h`2@e{bNbg0er{C0Q@RgC3lGMJY5oC{Q)isE5v@_*4G zZyQa{NT)FmenR71Ne7F4R;715eN`n_p$O5jQrJTibVkphn?r=G+dwnsI?>7JqNTmp z9R_8y7@2KrEQLbo)eEkIM;#u_k-O_U)q8w3`^vyOc*U0)wJN7#Z}Umu`o+51gc%1+ z>|zkSlCY(;t)2BZv?>pZr56=p*Zsl$@%;6PR9zv*(>hTQag0()o24N{K72w8Aa%18 z15p!N>2Qs&k^SO^!Q`HljP&&?0=43EEq;P?j#-Sh*#&ArJ| zT>b;4xZF~V{Q<$T4~EL$<|y9hvmm5bYlm@^=*0~Yj|1+(oV_}r!^oJ+tz305SGI)4 zZe(EgtWcsM+c15=<+BWv#(F3>|9MlO@PqShv;aOsZBn? zOh7U`rIn&tp(6QDdfy36rw_t#egp?Ti`1`&=NwfTKW0 z9y8YtK6h$>ObeeleTalkdNwE&E(wrE6iaHZIkmz{h@D$jt5_#=(&JV}C|pkLHC!4n z&|$iZU7@zK)l2YXJVxX-{=}wwg}*<+IiWMev}yRGP~(Xk79PrKc^XL0eWp)#ao+cj zFk=qWo*ws2b~_dmt_2e9(&a#oee*s3t*Qwyu$i0WE(2Xow@f<%5|Var`lUid{_UtV zC9%r80{4+C16ymX8k=Vi>VLi#eU!5SyY3R6dG0Atd<*PqiS*cZOkj&pr?4WPrU)l} zQGuzR=gC|@<^$0eC=mxv|ce zi)6z9DK}m2Y}pCsd!v3j=phnm<8KA&+36`9j2{uHM|ySAB37?|-(TV3A}J7QaZ1yn z1ieY=fzGEFmt?hg7NcemTJaw`7$Kpl00H%L^TN*SN)zcR55%kYuq9NW?TPRPU72FJ z&n~DIcum}xyd?S7gau)Di|Kkjvwff^dQ9yDtU-*~(P3`4o(U~I9u%&*_Qh|lKSLx< zt?i3;)knSXWTV;<=YZ91W2a%z0jfTSpB!~tkkL7ve;Mg+PVSfx)E8Y=@O^y4Yd6jr zE%wiHA~^rrNgW2>%Xt67uQ{V~UmJIA$%4n$458hGSRe5Av>fCoz^aZT4sGCmh~~32 zbZBZBOkd5?W7u4!$Hth(lfKX6rtcS!xq;&iL@sycJ=Vgk*P`?bSHUc?P&q8qIWPFE zUr>cv4j9L=hacN)J*>|t->;YQ{d%t*o?$d}Qs)8)HrX$rdXMQ*rtmod^i%+M)vrZB zREw|GaR!lSROih`$vrh+(qrxTt&H#r#1mOX znY9yI_72kMxNDmuiZAU>RxTf}_R#cjXRp)^V62W|ryh)@=PtdUGdaS8ezHn}9?w&D{iqPQ{kEyCr~gefETvD@_H? zsNg&_*sllSQ>+i)JmJle0Mu8!51@i^lYnRdQ0m)nB|eOEr4%a0>I42diMyNI!LHoT z;xK=;Vr+|rCX;$EQL7cj2Fd!-ql`(p(~Cy69*zcgui?>XyM_q>xd0tzy315+hLhp#QtKgOwmiPY_N9E_c7@uUedbZV3UF5(xhMhl^~ z`>!|{K{b)ZPo(6QviCx;SSWn5Q}K+$tsKztrMWath9_WItf-m)APA zpPtIL|2=Bkr~M^4?QitkZyPl2Z&Lf~L&rlaY6=h1cR_!Y1pP5z{oxJmj|ri0HT}Vt z>%!`kpBJiArcB_-&^#gBccD5%gR9}!K(8XKfo999*bl5=)szc#}*ha$~Bz2#6HC!xt1%WegJ*5aGsqD<0A3EPv4*Nb? zo$61TS)CjDej2afmWNGT)Z$GhKi+wOq`2VdzTd{HUklywD}&RAKIXm}gP(;Jth>Q0 z@(4jJ%}s`ZZ)_= zyfa-xz(%(1V+e=1y9uQxF16i(<$ZTNe>2v0w^RwX5yG3>;3TYf@;eO0b}aZDNVX%u zT&$^BvI7<)_ooQgEqh||QzkT#HbtPj36&2@GA&HG@!qt6yx1ro8VK(GY(UfB}s)t$n6TJ?As2;K1q3p^3J z!?!;Bosk&K7MSZg5;fW^XM5S=JzroGeUv78BE87N;FgI|SE4qY&3r$y^U6w(j|sGY6;sEtD&D%0`jS^CkPyGLGo(kqtI4lpQ8$S19YSMA1RTfYPO z)~sn>B0bG>(&y7IsPgHaiUHRA4U}|Nm~~NN=PyNTJs1YmdWb55sqCjGag1}V*Rt7P z8Zh3pC};s?RmdYi3=GL2_IS&wxVO+>B-tcXV`;QpzGqb>dnx0&Yz6U($Nf4ep_US? zhs2!m+nfmZ{+6kj-F*UtYYk^FX6kYqyzQ{F%Ggt%_x|t^v$u^b0n*IUOTIp&-7J%P z>18D0aydmm>&@7DyJN}z($MXOL(@&KX%DH4aX#YmasT|}q#w+K9)l~_ywFL1JM6fB zbgJKNzB;qNXeV_y0sd$vOc&RZ2&=wev*Ri6vV*jbe7$cH-)q29HNrw&3y#e>-};?z zY)nsck7M#lT?>0d#b4ES@8DhRUa74n-{k}*RRJBo7HQY06iIHIpSu-hS(^)ILaE1+ z12m|N9W~+Z;=(bGNxA!BEZMc)Nk61Etu3{+vojWocf~6JZ+@wY9Mmi^dAoyrsD1mZR$npNic=f5ZxY=%gn?Bf{NW zLZMptnqPt~Z^6+y(8Ey4ppwU1j@C>&&XBQiQ5G4;SRuijdtmsSdvot;L+9K#Y|j10 zuxK#t){}^jB7Yv`f9TJ_!MXQ3N)*|-H$AgHf+;p^{yiXtiv!KSANn7& z^AD>3z}LJ+GPm`XW@x{QR0;Ty}&srXR4&~H9DEib`sK<*24kCa<}N`#n)+)6Y4M9`cP-C=Rq znn1zzzC?dv(!MxiCB~RY6*95&{+UGa3UI)4ln2El#>)Ab!VD)os9)n$KIFMg-T9YTqc+Y;^=8U zJ{0~ui}BoW&Z_lsPO`HkRIJrouR&?q?DxOXAOH2t{s1#Cn!hIb`+vD|^lnceH^xA*m+y+LF1k)X(; z3?r9Gi08tH9dGb4ekpTDZ6Xo^Qz)Nbpm*GymeRC7=GZ~O_W zy|A-C(+khj3!&StF{BTG`}D+~n7a|wlwI4sza{IFxUTxXYidmhNoZqNIt%zhr+pZDkQavt8_ z{dt&>#H5bN<#`i_U7ojuO7S~e1ZIB0yN?1g75;zW{=DCe{jcAjS9p(5%h%z#kZ82ei+{)4G%U`8cdfXt1g8pT=?R)V@>L|8f`v#|+9}0)p2? z&1t{)^!D-XP<{x_;`}E4yr$&Dr@{j}U zWVL+o0E=YezkGhxQI+<08COJ|z+P`cY+zTT=d(*k)Cpbc1jxK>l#Mt3ROCigR}Vw! znRE>l59fmJc+Yuww*L>Ub1nuI5iH#0R2(+c@NZWyG+}HT8W2y)SzSCII_qpWW`{`x zJIua35Ltm45uI_tFcSLl#rToOm&vQ5JOH0PYqJ-P>Xw#%@w?{FNEclW4b?9GM#Zzu z$I#hJfyK_xqv^>JviQMp$b2Ah9jF&~rxiNxk;wl<+rRwR)9gA>J4e8a-qGnS zb)VlcfCmJ~A^Z;FWV{&PDF|zy9qf&7zoUk3QE%8G&UjrH5}Df@7g}#9Q8|f%-msLB zeR_k=x=GhAKdULB&BnXNdc$Dx0n>sS(i`GyXRt@sJ~k_#UK;@sdJEoU^Q+j7c6RL# zvf9~|e8CP{NXFfW=ymW^rWIm(zij9kyQ^wXy{joik_+nvlwtK>~-M%b6vpH!c$&xQWu7;+6xPv z)EAr-7kKO9U>I`lc}%FYXvfr&Sn9%3{`4-7rD}N3;P*_vpBEub6=^E@7U8doKf<^b zNzEWUGr~Eq#)+jaYT&OCNy1deVhEkpKxhW>7dAxOFLYwvToDY=6uO8)n<#WX-xl%L z#2?`r{_sYUn#uRJC6@HN>V=qlYr9^lAK9Ubx06+L_v zX|BTRptIDw@X=iZD^piTq&7wuIjO4~xaG>aAkuy{Kj&k7$j}ewO#fQ2J1Ne!-=eH< zg`M=nt1RXuC-rS&5No7+Nz2qsEOLqTgOox4C9xR3zd{~fri??gNjA59>3}TfKSVTD8(VQNneEfx#T~G9FrFTZLfSQ5V z)hFcoV`jPU40UHlwX0-*cY%E=29B6DdiQ`WK*q7Al)rMA2DXTLd&Brh8Tat5rkg%k zpBoE%N0SRxxkBmHooce#--DwE-0q#B&YD8}A+{XlxcQVc5GLlvqU6Ac76h;sQ_ub` zVQ#Qc13clhUSFsIS-{tWdp~;SwA{%?8htmkWZ$3P_d8p+@9MyDKQC0RJDkL!)%2`% z-0yJoeYJT)mi_=3shk2J6uznKbMD~4H+sQrBxeh$B?6QA7;{`hJ{kYKpLRXn zVs%$%0h24``-V%IZ#aGleSsh5dovHyRG-;sMoK3z>CG|frxp4Y6?%;dWoD;t%)vT0 zIvNR|8`k?X2%dp)Pp;S8 z=241zs9zxSz_XBYAK z{Vd|piW68gYM`rH_KWz^<{`t|h)-B2ZSFa|NBywStM@Al&uH@gLxD`sesx&S?!WRi z6rjovv&x4ebc$k*V{WEFD*ZdTHe6lFzEGvDk$r*gp8=YAqWN^ngR86_ z>Hk!;HbEub?3ctIaW#9y)g>C|h*sRiT%_nN8#a0OH-BSJrq+hfQfrH99c{HTt5P@C z+e~w3*nkT5$Y&|#B$d)RLcMTfC4W`?MVR&_-X9<%HGc=^>mkIT{~NR=XZ@u|E$|YobqX(%25Ozmpl{Jo7jGfcSi)f_6H#A zO`K&IWpDUeY*@}`1hNX|fz8`KzPIKi=^T36>lvUkLl3|Z!9kl0(T;mow0G9nw9))H z`A&X>l7jsrd4n7=iwR!h`ad6f5K`b=5JAwlo1V66=d0S$LA6!h z-Q$C5u`h~qtbDH2sy#obw$wW{s5YqYi~H8+x3>g~^xW#^=2UkN7rCnVD(|0$RX5MC z?yc|ott|DrUkzHxiRtr)oHS=mUUnHl>akr^dH&-?d`WVRJKSL^&Iu$sp zl+Gn{i-`dpP;uyfTmyub{t>VOCdPgLs(sQpFOz?#;3n@sAJfY4{WU`5-!DKe?vUOn zMB5hcT8x8(;9C!vvE&_Uk>>J=JvS7!90I-?cg1aI;AmW-iwI%X#HA|5KTtZ}v$r#h zmE6%HhKZBiMECkaenYbGqb&J)qzVq zkR|qpn=~uFM!`XWE2&_WDiG>g^G!R}D5gW+***M5(K*A;P7 z`H8-%vO?gL%8VPzjQRSU<6xF83 ztw{@Q^83!0U>g&0YJfd3Ovs1O>Uf+b&dSRXQroi&lTsa-jgsr9?t2 zrU@D_>zaTV;aX=HU`up+-@b|eLZSOfEJsd3;&LYy1)0?}aOdn00P)@tj^%F~1n}=Z zfDNuwGTA9_K0*Zy_HOb&_6lDmc4{G8tP9?u}Nb)EB zBC5@}o1!2cGkR`NS3prB57^{9AtVzor7%w~{x zJeFpaQ_`z@)MKr0ODPzS2y5}Dh_l4wBXX4J$Wh|TMeJ3)@6ioCyjL~&@70d~UQ^}2 z*Ov2U@}ILfGx_W5L^8c@JpUm}pqdL8xIP{m@Q<)x4WAxguI(Uvy0@DBZXuZ5*2Fmt z-YbMf%Up1PHSt{v%3Tvb4`tRw>j>7wP5eyHv^DYDL$oHQvnCwYgu|NHSm!QcO)O$f z44raOt}Gm~CU%q8?P}ed7p04qUILAAdfqezf5!w~o5xC?hgYg)EBNJKW*6xI1N%0kE}`R`I>_Y(O$dnFVjq^0%LlTV&b zb}gK|yc=reP0yr;rLfr+iHT{xDumt+$)LBsLv+Y0^;UVd3CSk8(p=8#fmjc9K&~>- zzO(sXc9~i>{2b%>&zqB4eB9l@sUz@lr%%^@6+;RRYgx0~ z&-)wg5a&Xn6+gwjnAo~Uzt7@v8Re1ef^7EY&CDYH#%8DpIfJu^H-ZTDn?*cr5pykz zQmX6h!@A&uvg$)==EJJsgNo1xbun}9E+ydoYn9+T@O(PQRvWu({16<#OnV2%5%W`U zq13F$J@6yhxu3Lc!Aahi#$@KDo|P40S6>k=QJ*n@Y!&w9E`ZK2So1ZqQvU@H{XBta-Q?zpapU>Xs3^Rb*y}#%A`^cPg_Fnsa?X}lld+oK%g5Y8q zR!KfX5G;e@=Kd#u;<(`2J`7f%NZKtufImL>FaRbjXu6`P9#HV~2S1%iyOw#(U@v@F_+Zp#I-}dll2YOj z=zaG1e@pbLHvBI{?={q%MDKhuk#ck*avi1m77Rvv*$#)DRIDR(m!m*i)G?M*dj@%Q zmNyZv(Jw~^D~*2$zT>#&_~j6l$6{9VxyVL<2mJZWQX~inqpg}q67YK%UR{oC0)CFD zR$VFH$B1`ss{?)xFEBKJ@P88Vrd08wbfci-6s81o@yT7|(U+<79>cazZl_?5L`n#} zlnuBj8}Kgh1WFf))k-jQ=Rbq-4U}#(_g~E>d<(*WjV>Eo43nI@pT)d7-(^?M_on0X zxktrkcB9LIO2sw0@(Bm|9{6HxsdMr&rO7NX`%T8yW-?HD={zS5oygS|!C)sLa9+Pv z?n+xsF}N#E?jfU0XGC_T=3*JMD^;rRMz0t@f7^+p&b(?RU53)p`XP7#D~}!T;GM!1ZfzG%WWwpSJC9G}Io_ zov8iI$mspe7e9;rO(FL;-eppYgseNZIFR>e-pf_^{${L&d7JPvoQvq_Mfe%F06(|X z;%7=Ze*PmY55wJNF_`ukLnA!fNxnmvMM=Wr14sb$LsHaQXuR81Y?j7A!BDV_zxKcw z>8Uekamzs-a{OAkMfsL4xDirl)U->|B$K!!NzONuH14vJjBS_XF`4A#NRk6hvXn<7 zNzQ7Qe6x)`IWRgXZB(-LehfKkCq48e3B)@eR&7T!Xas!e? zZMnqx4D~ytkU*$*;83PT)h~Qw;6Y$F^`WBWbzriwnr$>ba)Ee`$+${ck`Mn7D-ZkY zTl}qkr=P6Ohtgfr4>jS#FtiQ9M8|bM5)Li*A5K>0@LIG8d*vI!M?+%( z08h)0JlKTA*TeV$WYRW|t7TnyRQUG>VidT<{}dmv}WQY7=p>Ja_D zj5c%a*&+S~#E0&7R37lT{f85$=8IB#oApAzd5NJ>jLm|pfvM+;*frf^>o6f{qFDzC z-xrKf(seJ671bhBG)le?rzNx`6(7|47{pzSgDJomiPI$Ne@v=8q;yhrMb>UU&7-D_Won6*ixORT+bF$6z?5sTUQ7E&g+A`ap+ zkABYFGHeY3d)p*H-{JjO5}@fw9lhIK7H91;9{CYjJ%mqF0`v(ef|LM7cDqjOcAbA@ zx4Ro@wKe`DU3^(XhYp3A%~K!)I;d1R5l%_)ix9>J2bv!}F2l!p;v*s<5@$t9^?9hR zvI1uoqtZOOx6mm}PF2<4cLHSp7b0YoQ#hbp8n^E6Ij&2#V^8TkxUC9q8{GAlek&}? zJ$dkut8#m3cS!S+Xuae#=YQh$!fa9)Ydf|>Y_C? z7=03&Anxihb*XbrypTkvxa?T=)3NMl@^IjtbYi{kwHv)RU@`_=cEqHg%0NK$!4v2- z>IZNF!U#aGYw!w=9p2Cv_qrPIHEP-#$Ek6mU8HrH#=bZyOR}r}S()4^kA=>hD_urj z^s^9Gj}@dd)2Q8tGWD_9GV&5k_*!G%5!(Gln12>7L?L-L`HQ^>#fmdlE;#1mjF{uB zH#|5p-r0?1Fi;9M+NHA1Yh2kFMBbslMNNb@Y;tDgOMjSxp1_#o3|1-I7}<-&4F_yE zAHPM2vlfL@|AIHxB{P~)uphTB)hOENkGixM_hDZWEso@Bs3t_MhX3JcKrDC^Y2PyH z*J@sI1bXFSxf*gRVl{+*;k^!PWrJ=qmbFW770X(GJh-ea#-zdUXB%IK<;Y+xfDGrs zzB*zTP7`7@yAfC^7n@V|o8XIMz*`dp_F^CmjrR95r@xwefVKl)mr7DUqB%!eRD!0?Sw?ynXuWV6+`+~Y>yR4 zpBO878-*rh6jPgyx=saUp|$X-T5*KgC{;gWK12wP z!?+*Uvue@fc|w59Bmcn$LZDH>nd>mJ@CAaR%C8R{SnhG&8*lgz3qk{mGOJh+8gLy= zh8Lln+{Mw88!^WrG<`{EMtzBC(C8{c{YXBAM(P@uDu|7P#0F>YkKF?t59ISQC}oQX zjL@7Rtf6Xbw{bFoZ49R_oFFDdQ#kbi-`aZGTwXp#sir!D)-qr_y6tMzy#V6@vt;@x zKow#(#QeaJzlK-kd^z=X zv)Cv(%5NR$l{?|%HtxNbi6$n!0%aUo6ntDL#Vsioq|-Z@toz^I=!{t1uUZ5P*6+kI z#k1dvUdS|@ze*aF$?nNC=736I+!Lls{x;M23VQ)!Ld8}yfju_CD4Af(JywD@%>>OM zGr>;WgF+4Zd z(8o-$>=QGACpLjD6Pyr9@cnzT(GOY)PLEA6UMBdW#A@_1Gr_z2%o4uE6|ksAXUPPw zL=rrR1Z@oc(dq3g8O4y=)h$TDRG9WQrR&zPx~1!Y^d>;R~!VgB^9yn|6mYzYYg5-y^+V-7*q> zW?FkI)jPqltMlOoeeU>g=>~m6c-H_}uOcnJFU_d__4jaPz3)WO_b`rg(U4LRQu>3C zD^)E*W>CGT$Akay+GM`wQ)&ED6=&TDFjmYFlyr89sz1g6SSlr;+y6T*;y<$5qrJ^g zH;zMau$qq4BlN{?)=T1{8mCm!=Ap6#2P}16unpkBQDr%T+=1DXU6p&3 z$`Fp1-1^vf-j|IQbF{Nws#LFsqb6P>{B&DuIQTYF3H38=I_}SZ={rZ-TaYzZwVp=G zXXKRV8MCxPs-b;Z+ANX6sr?c0mWMv5~p@n_D zlobV&a~euvJm|{Ma3{WsbDCxj=3FZjNA{L<_eASR3y1KNoKUa{-6!-1jrTvqs$qrQ ziabjPApeq%IrNIkA@paNxJD)pff4>_(%|WnVb}=z>s2t7?P}##e9&M>^?E`*oLA|z zolxy@h6{?_fg8a~Jw}8Oi=|YG5{Pr$_434C=-0lVLNZM>2*!2gIC9~Fk94Bz8fc+` zdH4x|lVMB|s8uHQ5Y=?J^TZ(>{DW0(hYT3x{x4r+rlr&o#gwW>gh?FV#CkPWHRHj5 zcs0yd)6c5Bujvlg=avsih%3c`0qi#FOlCCBJ_v~rn&)4Y4!tFj6&zel6RN|e0&LGH zO=O|_LRA3@*mP$r{Fn7nss|>sRZYfVc!z=}GDrohk(b75D0Y!6gbIpXXB}~)2YWA3 zN5-!a(Q(0pg8O@nRc9wFbM`WTeh@@WkK56Ua5`+%eS+!nDiWIWZH@0#qw)ufQeD0W z{pb4ea5(r^fQas&4w)^x9-;%`VO#{>92K|^RTP2VsK6Ek28Wq>a3!lQtd-ONv;}JShj(=U92wT*IhgyyDhS%EE!Kc9W$>Qxe{}gsLam1PT zg*)eD-)YoO9VCr=fU`p}G~rQTOAGblyc@*Y4b?de$V3=8yAcd~CGMN-6?;0xc)F2S zGoiAhDQ@V$RBm9nJ_`OoHY=44_&}N6@dsIYE?9D?nRNky(r_C92dPc&oCc+m*Dpgm z@apR?=pmrv0U0MCX{VH%`Vy zCx7)Z#;7HqMuz4!6E+LGa@dembAFiCLs~hjzbYK2;^z`*uv_~Pk@iKVjUC@&j_;Ka zISYWtKQhM`6zqv@%zbe0jL0aq@TxjTQO$XRMPnhwNETxxRev?1?Q#T>=Lg0(oZhI~ z5|N1*#2Mxw_C>9{TE7ff*zjik0{aiJoPWf+(kTqF)k1kNxR|A5p);>^Qkx-bo4OR4 z@ZW6C@SM+Zs}t(qzlw`ZxYf}XufW>TbhvV_f8abx&!}k+E1RH;SI@w8&W4vUP9%)N zQq|@V_G9&2y1w|=<#F#aJ6M3Mh1{oH4ct&;-scpzYnyPBm^YEN4~;`B#eL3MHKKT2 zzw(wF|3rF^Hczx#OU?jx`rtTV6ig>>_FX`%w8q24PP>Vnw?$)T>285K?fEjWYmfhl z1Q^I+9^jI5;*P1vk0qn(GO=8khqw-Wm|dgH?Tao8UWgwe{Mo$c8insYpdDh`YQpIc zs@hPxi>CbqmQO_@_|_2(ibnJW*riBB7b718%7u-BeHL=xx)aEqhR>jvrLxMggwIW0 zhBW7-Eo3DfmmGk-mdT)iZtbCR4t>^$l4DRZ7(1TUQ~SuRk0>$vYKOzTjn)WlC6Q(Q zW@bsmo^%m*_R6)}fAlC9Y^Ra~?u7}ES2qd82$Y5@ERY|Y#K$A@qh5T>l^;+b=>N%# zlS_N!`TmR(N|W*Ya7NeCL>!l3LYUeVcoEK4AsZK#{MYhK|L7_r%NGfy2{;RZ(gaik zzCrrcMm<8M!o+IhHSyjA7974+@w1gb!quwq=em)f@X<;afp~=iM?N1o7U08^;h_s` z_uy+vd?(}9!vTyq=rD|RuM*A@l)M&q&g1NA-`VV$(~!|sHm1BfnZLR8xSDcRZ?}I~ zSz71>L77E&KU;km-TXkA+rJOCCpC0Bg!D?K8_S4Sn^Xeo?auljcIa?<0%l&Q{Ug?) z7F-vxCj6(Q74w#v6P_TEJKV>Z@H~{5CMSIKHEucKP5w4{oOyryrfHb)n_e_0{1Zs3 zV#0qZC;Yy@W5SCwj-yR@SX=|^&uXTDE2-B50D|2tboC)5|iSxg#PxoPcI;2$AfzG>QA`Sok<)ca7P(Zxef(r`ADEwUAEF+aRQkq6B$4EM zc-J)bnt<<;`}iDT00H`2+((Lu_QI&`1}t2^z_r=$GkTQTAn0`P*j~(M`JK;i#J_LG ztKwKc=UV$8;#c%a$*)L*tmk0p#H5hkEfnMX<*^LQ9Q2sUu=wr+YIJXpACL~U;fL>< zP%|;%{3xQ`8$|oKOp5PJZv3JUV1r?B;frBVUVw)zXcPww zJW4gO`Q!)1Q-h2OaeR{6ClU>))mh6*n z+Lv~cO!jCbna@miR#dWobx5`&Bt&92M3N0PlZEQrO1rH?vKM5sb0f*Rn#taZN|xOr z*yT{ix1vj~iX^)L$v%Lr=I`5Vao26P#rP|G!QKCU?-;H(oL-qY64L*_47xr#T05i zx_+_YxC;jp<_@tKI5QjrEYx|^4cKssh)zQz|_ES&Xy7;#RD`J$Xf4TwwN*F!I z#GN2!ASdaAdjztL!FCUmHr@C@97m*j$4Lx@g&!=~z{b>fKO)XB$#w0LJSmf$7D;mW z-!e(75JNM`x$Tlnl1aX~-YTULNj`WkWQ*(UuT8p(`e=Ds|)w=L4OJ3r%!#ebZ6V{bDSk;IQnef4NplS$ieT04_Yb#zZTu zd#!lawjEu?{d!~(jaE&~7Fzvl3$l6=pQeiY8zAN#RNPB&$X0TE75Dd%RvuERg{pR4 zEBtK*?b2zmKbW9YmI1jdg1_UG+BexBO!ayFhb~j9jv$mL97f*zT)gR%?-2(W3#mt~ zQKJw+LTM0-w)Hf_Qv_&`r&%J8Fm9L;DjTVS&m&Z71)}*fey4~ZFLWXaN5y%OaE%#3 z^+!geSrMaeukik$gp}%|GR_R<2>b8HxMc3EQ3&wsO7<C79%$Jl-YX0m6_LomFg}S zE#9Yj(Yk!|V*74p$Hb<28a>)EjU1vBq08AZ4K?XHrr`*)f_$23q7KN8baFtpwT;NU zBO27kaWI1@j$@aQw|KuHyK&d!lHI6B60jTM2G3Dh4M~5*nc0_^7dUTfG>!2gueuq@4thGQFUp zbfi>S<9`DIxPh|X81;E43t&gwR1>0b^EeA&92ow{0=W5+qc4CrY_e7}?Tgq2aQ!ZU zC7v~x(9<%>L4mhi0MBWcydr`VWMe_7MziMH_#$AMeNFukuk&^g_7eGYg|0TMvw?#iz+%@t#9F zjB;sza3OphX|)Zw>-7wlv1;C`S1P$~R0QJ|;P+4^5KO85j->CF2Iz8Db}RqY21S$y ztH`@|xMd^n-9h1}m>&2LbD*Ap84H&yJ4 ziz}a9afrW4)mALlFF|gLK3k7hIr<&hKEB~6d@`tnhr%<3&NqUnga;GT&gGi}OkvC>4%J1Ew{7r}w z?KjKk_tDDViZQaZ{O`8Hj#=QvkC8)u;6-K>e4e8!2H9-ywToETDj}k` z7toV&r#*c~TS-)eGTubivZZM($uCN}?XCR4ZHt1As4|%O-jl@o-ATTsX`=SN6fCpg zYEtGkvyN0RmpqG8nXpnu;U<(7y$ht?!qYX*-{XUuA^~MMyjgEdJ9>Gi$nxys#$8JF zdo1o@B)3>388W+FhUfg@4C|SpgBi+uRMjHjB9Y&E;|o}I@4SOclV!z{P_Yoyim$`0 z6nCO+fOm3KoNw``F8CGb0poBoi^jIsfn9-;OdVKfpnL~w^Cl8h97=ySE^hjGpBrQa zZ@z4QFwu9K|4_10^*1v^RfCPUif^|ghtPepbP@1(2273$I0M5Ix;84{IzkMq2xc?q ziz9KXxZO=i;~dr7Ci<67#DUQ4M*fV?7- zC1w!C=XJr=2hgmYj<;a-VI17n|S{ ztjg#y;2R})p#^?1z(1H&d+sl`xV;DPhvy_bFKD&J-H*R_4%*_b!QZKPUyr}Thiq|i zJ!1dG$A0$c((XH<-FISAY(Ur8&*Oe|v-RlFJ!->j@{{mS*irvSS!r=4U9AZ5oD4id(C#F6K&^bSSzeC$;t!@Pm7gQte+W9Nmx|Q{`{T10 zi$z1&3+0Z-IMEDPD0&D1@n%4s70~jwOk(W-jh$uy?-7YSHkbkLSpmz;fCW~-D`o%= zre%_Um;v=xz+cUP=dFPI%z(G7fXQaSY6Ju)g4T$#w;)ss#>&*J;gflW+x`k#4o(Be z%D~*&ihu1n->v=rHbuOhkaelzN!~?6to~(P*ctr2f-z`Uz+}d=TTRR1s4r%Y zwE3tsF%=u8tMq}3-GS*?C@BEQ%u>_*hq^w1&yB{#IL>V&1LjCai4}gs(RUXNQRMzI z-Nq8kDEN>uQy51P{mPFD*3|nxIIQ^zY zlqj9!QOIBRsAUl)Mx^qJTx!qbQhR!pTxu7HVYco_bW}V3hd9>ob~D!DW()+hW4mEJ zU121DBvw4#CDzjw#$6A~_4K!8Vu9>t{38bZi!B0tf(3r13I4@PCiopO;IB#Wi!5-v z3I3V|J~Re=wgiu}z<1Tk%FKJw%>9HI@Inc`Ip3`NnLWK$ot zz|W2Wzg2?o%`=}4c^b3u5v7V26y^S?k zf%jvv27}tk3+Ao0Sc6-cRWUwI)}WdtfF%7dwqc$l144O0U(oOBLJ%dTvKg}rjJrEOxSFr&vYRtP^FyUX7;;~6QF;ObD`rMz#8SRKu*w) zsYqmRepPTI!c1N8WQ0oLKslO0>U|RA|J-CjKKC5GDE9)E;az9E2e!w|D);S8ovS;n(qACB+0Zfv3Wroh{1TG@S{2t~UIN zMP-##MA?R$Cud&?RE8F_13iTsB}4k*Du&a)p-Vn&;AG?4kTAE$ySF%la)eVe7$3Q$ zqUx7!zk=y~Q8!oe^$KAZ3D;TV-4)npMJkkak${DU0tRPMqpJ>`g+79Mt;qVb^O3b2 z!4gm41-25JuQhn!XdBn_O5#v2o2b_SSV3@QgRgLC-a4%z|B5?4qJu`I|nZi^d2?AEbe4oC?7h7#3(h}V$tq9=8$Lq0jHrkxIsBf*nnOh3_`^TqTe z=)Q(}soGEOtY1P&%dr~;cM5gbpDOrFI3=}4jg5%CxClWjSiu{yaw3s z-(bfiE2Mq`iZE`uSlD@>c?cL-%o%R?od`8lyw@Ht9xw1Vy5?Zkvji7_!mwcCLdSgL4A@&;uS6;8wcK(s~<)WWOL9uv2rgRA{NVR z3~7pj+u*D?GUhony&AXCv7AlDuRoZrR9+!o;+4v?t(R}mLlwad&w^(d;6F4pz*p2*zi++|JanbfA+60v5 ze0~|(w4cv%b;5DPtQGi!b5!yduN$v>iOM6PT|M@7W940fxqt&r-pinAO37Tjeq6%C zdz;4D&x5(3T$Zge_x?2DgpIH&+KSayo^C@M&h_FX<@$QC72SgJdL>YH%kzRC=@$GI z-5|Qg@j?u4LR2l2P#6qFrvPz{J}21OZao9|4^6GDWX2vtRYYOm220a?gaxwqeXa{ta(9Z zC{KLb@NI%*gtA4@FVBg_6=b72GtMkM-S~L9RgHI8jmJ={#sW-Dnj{ka7m>?$B9@Ig z;#5ui0D5$0J=45Tzn^=>{nI3|<$MLP?NlUd65bnOPCcBu^&ClPC!mhNn2m;BFA42N zfj=8p3sPA4XF;r9H!k)|Lc8L16MRAp_yP&u*8=Zif-m@o34T!w_&pN*$IHyzKbj+R zzsCZPiviD-;Hxa~=S}cj3w-m6=(?XI!5_82OHJ^5-!v=pYz+9GRidf4THwO~PKwC= zQ5vnl6ocHI*Uuz(LJ!TNcShN>v>x3}Ai@s3YxRKwh;bl2ryUK)Va=Hi1}>+5`e3e; ze8cJbf8MhYB=8y#q*8oZ_U}u<4QWqhlw%x0)r;X^N>9BCU{c}ASS}hG(b3A3b${tn zb|jUy0u_-(MXV>R`;@Hcx(h;Wtat{9ykb+;meTW#vm^C+hV|JKU7sg>s1NEfZq z)Ui)ko$}GL*iJcVr5Mmh2U?xtE0^eXRwT)Sc1fBWM3S2#Nt|Yq{f}Fv+}SS4t1?Od zNRkuGB=1F%T;49p44LHD0anGf&z2PnM3QuCm!v=@X^JFSh$QBE?cbM)i)8NGH&MiG zT|Z63E(^E%U@|+a&0IDPiW+#}=wF=~9Q&_UIMMjDFQ$L&KjJ&s{4ti31up48bU2Ih zH%NcR=xl@ydn8A)jEcJ-H2*$UMaGhDD2BM=Pg$R5sY)5SwiH`^yI{;N^X+} zHvF-*x)?}ViXE8K;n8ex{LUSiGhOVgoJDeH<;Bjb2knl5;lh<{xwitxKc|KW#fGjf zq-QnxkN&1%hq}$_kE8aY4MrmtAl%uzgsziO7> zuS5CRRvEb);J3t&3!q5-{ZT6*9F~oavL+1AslrXdZb)?4X>hWg)#QHXIj#RY#vZO^OMpnJd{a>%_?4iv#Rv0EQj#P4*c=8ba(PH<|j zL}y@FBAzxpZFnZ*nT)3$PdlEy@$8Lf8lKSkaGinY8F;4SiELaMcxK?4iDxFB{qXFE zXEvVMcn-vKAg~tZvxf~DP>)L+D*g)LM$R=zgyGFg|92x0?t;fV>`F1N&KlPsn(!^d zSpb9`*j;YK4j7j|OS>5p!PkcR;tr^B8g@!_7lHHXjb645z`W(s1>xADucy^@ipDn@ zC8M~^uK|K)M_G+uWvKo(ub`cbx5G^a`>;pb<UmB`+FE2 zM8BmJUbtaN483+nh6*LKer_#{8}>?NHB(4Ln#f+RXl!PPHS4}C-5t8ktsTS+;%)qL z#7XcC#-##$O*2C*@SUZ*J%RVk;z%{&V?5IhM_E}1)d~Shdo{ZBFa9&e*D8xWZIb$U47|p>)Iy<*bUfp%fJ4X#TvjJ#fg$8QdLn)tmJL$Q;J30cKN@)OWE~ z@?ST|Xq3vI&<2lQh6(BB=-{*nlB3P)W+cZ1T&d|K4Uy zK(9V2onBhgJz8Z(IdXSun0T0n4lxgLgCz~p8gD>Nb8D&{PdiS8Y>HL9%TH1vKjh(6L_w~m3X$AWN30gr*ATLoX_&Jbg(+XMxdC6MAZ-G3! z)-90NTPsL}t4#Xy%{xOYNQO5-9JK}VGPHu;@G7Vkqy_T&X$5D%Ri-vFJun>Jk*UC4G(w{ zwxMTQh6l!^HIKxXq2{bFt)o8);N{A;m0m8`5&w_I?zhMtCOyKls%Yn}fxL-owEtF& zonQK5We)Vjx)R=2HH^^~!RXNKD)t3|QR%q&31=xz8(gHOi6}RMuTBFKl+NDBuc1?) ztD#)u09jG9y@A3(_~SFv9dP2$o$U^c;)>&Rcmtyf@dtyVb_e!-2w@*%NlI}eys!{m zTqL`=(D5UIit(G`H4DX~d;uQbfC$8cfp{>`9jK6xfPf4sd{w&l+r|A0{ z_~u3z;}6n&CyXLE9e5TZTJ&O#)6wWG7Q6XI=R`gO&N~oUB7y?WGPSXy93{xliWV@mMIo7Rd*jgur_FV3Y90w#ZtmsI|mR{t9|#I-tD|=yEC-uM|qG&jR~= ze1??i?Yw7|F8qi7ApD2=MVWN4q9IQ!!_B0?7KiK6x~g>+lPG+r(;*A(iFDuxr)(*T z>`Q>hVqemkyU>P*TZK#3t}2!V{MktZ2XQh@fT$uXRqRznea-fsO4TG@Sq+H#;#|n` zcM78t@E6MZT8p*iFVtdn$c_r936UyCaW!yq+RQ9XV?JEBj#}%UX01DSa$4HE-43gh z{`O6>eBOw@K9PqchHqsIHxJ)+*Py-}k}SG{Y>w2e6X%%I(`m+KYVEPQbH_=tVitWH zRY>VAZN*#&#$XUdgI4Q1E8#4bU`Gis5Tl~2XedVTxNGtT0ZB;z!l`9u8Ex1~dMyUBDdk4b@R?%Z*IWi^xzUd+El(|y`OOJfH%8T@t^j%7w-Z-^Qaue$xa**NOE~Fl~ zQXnS_7>2@#(?_5Sj*`P&EdP+1sE+Z(-NHYlM~IRlp#E^81=W>M_edz=MG{l6qZdg7 z#~a3Q0d-U_lG*tK@|--i1M?i^MH15z3@EsHQ~$^fr4Q4KB#=-{`TxR;)IehW`okqj)xIA#0>b(tsN43r_XT$ zS?s8}BV(d_@MP6D5-YUo)(Z!jzE@!X8LkAeUnv&u1cmDrPsT*!$enOQfKa4NoCubf z=a?Qn>HLA3H}M;gQpZKm6WdGhybTwaHlH$yBw{Izekth zT*|&Si+T3qsA3*NF*ubOUaa*0Va8dd=}P~5C(bynls+o+CM*3LX-tFfcksQ7?>fFu z^ys}l$>(_!WHMt|T~&ZM>w2RUgyKvY?LgS@$r$x)v+PU(?-B7dtX)LW4&#jUJAV&b zfXF+3z!j`(rn3&B5VUtIE6#b+dPf@^e2XR%2=EnS;LJq8T7Vm40n<#tG6>dU0skEf zm|+55*#U4C0MVdf*(evX{YLu5LzStY9~ZhXs`7hqs>NKKrt-i>)`^hV_r)2PndNaJ zpyn@{!0bbZOhItAHCYrme%ipOyi0J%$Gi!i9|Mj~^=0H6pH88U;)4Q9c@FT+1XE`W z<>4G4y-hV6(tk?+WAJ}$v^Yp#D11Uy?3<4v!dzI0>qWd&H)0H_-BHZa;PF@Pfc^bYTT81`C&nQ;L(nf(qOUgei(?)&N1iGYv zCs0>CZFL3U-XJh`lT!ICa)ZqyrFvBgUi2YfFnhHkObw!`urf6AJT+&dGWTV~8lR0N zO=_Zvqsmt(@$=W8r}~?l)c`mQy*K)+2^#*mWds&(qw%r{jffCDz^#TD$gTGt!d@#D zqL`sL1m%WVP2@8sLy4rGV^nPR5OXVX zYyT46l(S8#j0bXiw6Hg;)!h(I@F0!DL+k9qeoMYKz?*Y$>M6!g&spaehyIDBU^PCW z4F)P@R|n_WN_!hyA^>s!0>C5B6aId%sQ1F$;St{y_llRLjhG9f^^0K*SPrtj0KMqe z8rv%=!_r^QN|b+ZB>T-Qe;~5Y51=m_lPU7SeohwU!6Jz2qq%whAuVyGa6Shwj^T=8 zAe0584Nvs%QnUuYfg@cO>u-(sje@ZFOruw%6pf{9z^DI~#1@%hII#uz0~J=_P@UD7 z_Vvw+AJdW;d>FYxF63Tnfno2V9{gU7!rPVMro8yJ90foy8eo&2I2O!OIFx&woHpgf z_m0%8(|k_Mi_dRKl+xny8AVFfImp-x(G~ay$Q|#8NyuAU<(X1n1Qo4?o&-#okv1>TQsCzt5V?twhyP zEo?s1R2_G+*jNZ3M!@YjD+jir*PA^L!7|}0r#@EDiu=c19v6bh6P+^=9TQkVDyKmV z9w+z;4cu*~@~4Ucar+-AjPs2{Z`W!!CR#bS!42`3R0zl%n`~JjIprO@y z{%FVS66r&ii>+H*P68#k<(!#7*~&){OqI8yoIXm`efY?SB+lt?R`LU`N^b9zszF>l z0D`gHhQjP}T(e-H@Tk)@a1srU_eFNvx}#u!a1I9{&j#fye-5ld{ftubQ8ATt%&9eb z^klb3Nci)h6?jICGrTGv6GRn)OIWXiE5oCg4|J-{DNI!SHLyULrzQRs0%Qj$^#U{= zjL4W88#EM(9;cWEpPrgTem*o`ekRuNYc3@+cu8@IUoS!6me-3_B{fgW|0__U8=nx; z7Qn_|V=`1!-TwEJ^K;-bGG#%mR=VG4akcjX7toceHB%^hY7s2I6b(CtJw(H%RiWc9!Zz=dHl zh_{c%;Y1HWwIs2I!YUUS=^8Y^C7P9@<*`v(UZhFd*mD1@%J|X~Sj(K%rP$oxXbX|z zCCgkpWSDGb2*Yacr?Ia(X6g*D&d=Gc%t=EZfsK(nH>v{o8*%E^s#HxCdrgoyC}}Pd zWK{L9v4vNWJi-p7QWX!&USL2diUJKRB@F}s#=NGy>?VZlL01W$-FSXDm&$%FD3Ei2&19V&N)h-iaEEjkb*tVPPHN5()b5~I0r|PBKJUQWMGk6T* z->9fLho)tdG2?{dzj6%Lc_aZjUO{w~%AE*R^%5+ndz&GNX$@UocQS)=T5+}tMrCBY z3LRhaHwq43!QV6}b2-AHrF8w&!}!sIj3S&IiVw^(z>Bm%;Vc2i?@CHnD1UVqZzJql zl7cs!yusr)!zSVIP1Q%7D;!;JHJXYqkIP+?h}F0JALtW(ET;0T7GVN^8!J5np+LK_ zK)E(o=ZJ}DOdrkD^JiVKb2Ns}CRM_U=hjNGewAYVIszt&7R|B_n*1Il$v#5b{Oh%*yxmW99gtb=B|nJ5{F*1(>g zaU%+;B?s#8fL}phAVbkM3MovHklCZNTh**a;7%*;2T$u3POXj?d-09Nfmu{?rD*O! zK}r&&0|ae-*dCmL5U=(?dz3~-t!`z`owx#URFrn>)7>UY->^;1IXG>GsvS8tN>9GZ z?D~ToIlTy7{}sAE?+>B$K5!xyO7~$#FrJN0-hq7#W@f2G>CB{}M~Tu2N@lMK;%zuC zM=H zFF2G1UP6~c2r887e<3W;wasmY5QmING+M?(8q#%5K8yziX8^`{<_VI#CTR6s`!Htv zv-p&};Pa{&L&>DA?}FQE7L$gR(P99>q(w1+i1^Sb{*G2zy*7__53n0kA$D`oacRRX zgwU00!sps{XJ7(WlnFMAPm5+{$h9cBf)W052D$?L3^X#pr!SE%^fdGnEI!%Y#wR0U zqw&Svt=Lyc)>v@L@YEvLbFj&?YDm>)?4u1v5a8gOSU#QF3Bb$Y{$M=SGvOkN>X{Sr zwUH%G-5DP!D1pGN=0P|pyBuLY8RkP+22dt+F2c%WSQ*078FnJVX3DUc2s;B|@5G_` zSYZ;43Cmi;fv(_>>?2C}dyS936UrK0>>#pF_DM7O`&zmAxwsN9jV?;OMD+3+zPJ?o z+y~8b}vj7*gt^Z zUxIvyCqXvg36O_q<^#D)`z#Z3dVT#hFa+ehAW2-P>wR!HpXP zj0G3u-DbS{q)-{`pDc7(w;4*2)aC1Cfe(oRe?WqVdz#?Q*Glkz|JBUBR}A<_3BJh! zf5Qa7TQ|YKd^EZ;=@R@I3w(|VZnwZ+j{*N-zNq_D3w*Q*z8TX?G_^bie5C}>v%oV5 zZtR%AzUsdm;85fCtIsR^tE#PfvafE$i}Qle$5La6Y^ZEU~I+YTE za08aFZOR|8B|mEmtx{&IDEneSdK7h=v*A!5r+->zNUQl}|bkwmK?dqYjQxx?;;2 zUwVdPNxZJYqhL>Wcol(^*X#4MHZjikC*f1jdC=J9ws9arY>@> zNwBqBJDWT<}`$CA4d z`HiJJh-h$W|LY*<9^fFqHMKQ7Nx3^|A2vSN&I#;;lMR#wF4Se1?zs*mq27V~UWOHB zUH0p>2la0;uJ|YG?`?&D*q?@SQkR5Nug9Cj4#?hxu;?AIxroGNN8_Ku(z6h9L&A3J z0yD~6Yn;^2LMq5onXH5(Rt){d$;&wlu`UfAiORyPd%d{Z^Y4kM+lshzA@xG`VAP6~ z#a)K<@|`%OhwlV<`{@DH7a^tJ%ZS7wV)m~LwYUQSmg@tf(tU|T#O$}CmLs3(-IeFo zD09w+oIqY0RP|onKt{uDVO!n6HMfS5m4n1<81UvL?($ z2Oeug7<%+EW+XdyA|?Wng7HxsRh_A$IPcCc4hBGRjAu*8z2it1EG@b+zO7pt*kcG= zo&st*{ZGnsTkk#982zBdO~+S)o6f*za5|*C<%iEws)n&t{l0j2U{=wfQ+y+^##;To zJRW_Ugub16f*NjMzU70@^7RYtHR2;VPKOBB*aGwZ*yc7n>m>T5Rx#8wPVn5Kg1wYV zxN!;(=>erfJZV%d#P4K?fAN&mwGdSSDJzzb$#`UK%m*nHUY!_e1k;cu3POL1??Z#h z8b3zR=$>TUaeMMgNMDU2Fs1G=5aXyF$v!v-eQEa# za}fqHOCshP6!?BScC}Auu_qg2BE@!LvFG43bTW1Z{`zlmgj9{Y;Kn_}e}^#6RRmw| z;e@F#G22PCog-FMdwvaA?RlvJ8GnG!U}|)Gme1uR>}R%T6!-J(+A|bk|809JBgJ0A zV#ngsY|nRAd!D)Ke`!xvB;(J@k@0UhgAC#_F~)~{D#qteqCMk(l;blQ$ZobL(HfsI z2t#|4{+sc6OPqCbvwJg(t-`0-9w@ZS@!1U54gdZ4jEiL4of-FIdrEO9H`1QDRUDrO ze~|5&jaIgA&lH6Hx9!;j?*S6c|27-NzKu__JwI9PiT|J4qeU_v%#6q5Gf30;k@@pI z$Xht|y%yP?$1$tg%R;vrdykZ`CpJ^;nzzDgN(T=sWs&F zJCw!U+K7K6iT|vkd}aBco#jV*O+PzddG5fyXBwj;<;Jtz416-*;Kj@g$4O8d&1^x6 z3t>q>JBXL8(qvVi4ppTi+=UH7A^k=y+*x`-q@!;bj|E-Z7*5R;buG0!8$p=rXRG=H z2|+3cGKm{WCP$L=x03wwJ)2iLLL@1l&2me-$q&e+8xyzyp;c}WyxWzkN@N!4pYO+U zeBTloC{?!$s^6FtQXj?M7;ff0 z{YG9q7z7;+p=d^JrXp%*3^Jaw@~#(o(_vSARNmtIN2REq2Up-&{yBrK&I$5$97(^X}^dRNWL@dGFVZ#l?!x_zQ@yeW8SpDQC zh|)iOY%OJNz0udfUI*Z8=ySh?@U^7WFXJ=#^Dl^Kh(uh;h`%vnJ0liGA`Xyb-N%TP zjF=aRc!3ecjChF=(;^XL7*W88T1MOuiRj6Q{*0K82nfn+A+Mb8hFkPXC)OXQf7V0@ zEa{qwM^>sj7~HT@bqcV`NQ-20E-U&OKEVS%i}%iW!@tXLJ5qx0O%dFoc*!7!UVCg7 z5jW0o;58Y7WuJN}M6{Uae~kC+g~iP{cTy`PbKZ&c(cVQL6`!!l z85ld!+C`LMr%=Otb3IsInPD7+LZ8%>S%|1Qm*$#Ck#nJ%g*`^Bu1(C5#Jb(qg)DNle!@i!hdHXPP!8CJ}KaY z93<&52y~6}1bD0hE}{dmnJdRN9Hnvw7vd~l;z`h&oS6OgHUV2BPoSWXfy-b`#x)ap zu9}|#0|NQD#?a6Vf;xs7H5maH&n>)*)GY5p-1SM&)-t2?NJeH3z0DjlnM1nFVeCR? zpo$ErWrVsFQ~kK%Fcc|(vmEj(&5U+iRat+FtO}$)!qg3v8a-Jn;nO=|gr4|5Is&z6 zGJeWut&ktIkrsL}OxK~&b?&Tsp*^Da7JzP8Ux_|(@@kG&f<&D-rGA6WGIf9}QLKe? zt^qtFs}uQ$68MFxl(CenQA*9xOA))TcBLrQJ;jpTWb};`f!t6)jqDJJt4ETAl$aw0 zH7>K6$320(b}zU3Yj3uyE_T*Fq0GDI}<0Ehs0Y#_wDzrN$Hxb|y7$FE9?LF4!{^dwD&z z8H=~7>)d!6V`dA%k=UUkjDi}Y7WXg#mU3V;!9>u0rxf^}Gg>4SVYfTMj_9fXcd!kt ziC`Wcg=sV=+cJ#CQ=W*VMn#;iDJj)Qu5Chi}MfPM3u~^$T;u_bju-N22n1 z@qy^d0%$L9_35d%S&39L(WIyrPK`+aW0D7x8&tJ(n(c++M_i(2~}DI~L;s-K(kv0{1?L09Nof9{r{wXB`%5klo(U4Cqxh zl{9u8Mu9u#ak=!x?r>%n!Kg#TxEv5@O*-S2Lx*`8DF(m;`0e7HXqFRM*RiEfoU1 z_BAdvEHmk*`^Yf3cmmwj##e7PSN8M04*V4&SEeq8oQa7_@KaTetUZCMT0Fp?S_A>`; zhaWhop*ZsOyd;eD(0i^xZzgAiQ^$QJyKx&vVd))MaEwc{NSj-@I)WC|`^o}oHARVP zU_MW&@JN;qVRt?-pO*F!$djkQd|`a9v7F~dV7;$I_#heWkPoWyB9JFHf%!bmX)LEl zmF>z}huT~EN4YJPMk7Q%Zg%t?qzH&whmAp%Y0Rr6I$J(83l#Xr1Qj6K0`e18J-~uB*D61YTwkj8{w1?LqUJdgT{AFguiC}8pzhkAEkBWY?~(( zt+8n+GtN7Y60NbdLYyVdi3v6!vVe3h7CcCeVr_hD*qBsi@!T`-2FLp6>9pFPj`G45{Ma3M=*mky2m;H6LNe`nekoMQ_`83 z0fs`U+y~jG(9bp%Gj`yciW&FIko{_U0uXXWtQCDml?Cp{+|ZJOR@8=A~_hrTTpb&f;Jkp45uFYLiQ+a;+P1I z4m9SGygpM>|{3WLNefIzlczz-M*dt|{oFM0^IaMQ_#B^8i3KSvbXeKe8 zfRy3XkGIPXAOe^jkZ?34StdIGa?j4GptyH&)S-^FKT`L)+u8nm*nXV4{a5WrBD4L> z;|YA4?S}wKqRUsXvu>eF_o)kmSBQf>o{^aCzZogf{?Gq^Z-1ojb(7it61E@5hW}Oj zk;rU6^LPTEX8XU3wEyC^_9w9YC?aM8OhQVu|1-9~^j#5@66LSb{q5lYH%0vs2I` zrxxf#R-j8<`fOvEKBO$tDPKi8#aR&+mnr;LW1L{N5u$Uj;3Mp6)(IW;3axE9fkeB!9(IS~r*`vbuf}KSR_8LR0vw+vzK;{iHzOGoGXp;}kW0w#)|}Yb zKW0u0*e(^C!_fG`p2h`Pu0I9)!XQ1&8#hPt+r<0^;L{yW&Is;L!rJSKMBdBDlkpkc ziijA-W*efysZ+N~tXhWX<6+g4fU&U3IuGhN-=Ov4sF|6Oj^XA_0EuUr5?*54z{LXF zrUBaqmb77;uqoY!a=cnZ{W$*`XdhEdqzwbUb%n?*2{x3bVZXG&I0MTD3ds=OF7|`{ zCqhk!Of!a~J^ZF4b@{jn*mF&@Vg7ZJJpD3^r@!H_p4^1gqNMCuhBM&Z6B;`6w4>8p0dcxmm(BXL?W{ygC~_NQ zytqvgh&+sM43F^aEgaWHABl0DY+^6@gD9F9StEF5T@ZL8WUP)&+Zu7~$~Fh52yPqo z0HO)u%-Ny}7m6wkVdfe6!P~4{USKXw_zb0j`-f$BlbcIDzm0NtnfiYmg#p{0;Web$b6!Q4 zDvLo7gMY$NqVZBBxBbP)Z3aGNY#d@$J@+u#!cZcKc|K+{M}5$o&vw=!F8`(4QS~pJCZEu^Q&bN&e`J ze~>>KXXs}XMTqlWiqncB<3loQM`5_v_<)9j<`r?zm^Dx3qoeAy#Sy4EpHDl1o(2S< z@fs$QAGaIhe1pyLQ1vI61+#zSTVy5gU!ERLJ$(a(+;>j0Mna6|72;E0K!k*7d*`1h z$$Kipjv1z8nv&Lv)fBw8S(y_Kc!y#fK{MwY4^9@MVcZH4qN)$?5Q5;G+d4-!y7iIAW|PJ%U?f$F`n?3upg>^`t@2 zuI2%lUzJr?)j)su6dcneywAHG?kQ`;D=t_R3Y$v))#)62npE1h9w^lAANxBMK*0%OVkDpr$dbJi0E!~RoyDnz@q(!FPWu04O za{LjCOqX(qnunQ{cQ@=!@+KTq8@^6*C+znGuJ8oFy#;X1Q&c@_h%Pm&9T_FoKV8`8 z<=Kc0hFpd5F527BK7*wuNUG!8&g0w%vH0=09M&wX<8t0Jo5Uqdiuem*Qq+TkR=T#* zdKx=k1NS71Q%WnN>p2~YL{Cn*aYFESX!=F!!k4zHL|YNTtbjdAkM={PM%LvK)Ck=S z!xCL-+d&wUZKZj~eALLJHS^E`H!;b}BKS|lu0NR;JKtPH1d~JFhG)CI+K1xu94!8A zum;?D1Ds7x7#F+<3rI|DrG2HN_Me!rS%cAENybUppnRQn(e3bJbc`}m zZ5DAiO&_gJSqFn?^7`z>(6i(9*=a)|9x&cbA-$$`5ZFD4whZE5oe3PyYyuAREVMfs znil;Xk)k}<2%fU3 z&B)vFj8AXNYlZRY>zVZjR{GmF$vPeuw~Et_m&Icui&I1vF(V9Xi`FTTQu$;Y7CMdF ziU95bI1&T7unO$3VHb=?av&ErfgN_3oyMbgAQu*a9ch8wG(64-ly z7uJ9snE`mM)ExZ+xv&N7$PVOY<1sLhJCI&~atFbFHE3@xtpGbzZVoQ9 zzy`3xv;piG#FML{Rl$4U8G`p!VEe@uduL_xd>oGoC7)v%;DJG&`Q$QS$X7HuD@A?R zGA}~oH3zX89ac93i>;{--TbxOY&p;`uWSml16W!}x)yER93N2198-rh7W+6x_an z5gldDelX%_$E7{vgjFxF(@N$MVN+^gzVz=5MNj~o$@{|y$N8~n6kZVjl?YL>$?{^C z&*8AO;XpgAQ7Yd?uao5Ki4M0uqyo8~LM5zhip29SdR(4(&!@dU0TyF;x5U_a%mFJN~|d8s!&w?!j{h zPxbn*n%)z$YYS>J>Z4Gy0+Ku}{qi{U(k6~>s<#jd0KzZ>m}po-sKJauZ+SuP#UzWF zGJ??_a3_{%DsWs6D~nLEB*w$=NxJU_iU%U{3RTY*#rQ5KQavq2*OW%ni90a}gQJhrC@l4LJ$UrP9fxNSi+VFjn z6xl$jf@2#HUeUOQPj+iNsl`-4Q{`w+k@3^(yuQ-H$RdxPNOXuBp$~z+!?GGyMB7P= zK9e!QrTMB~#NOp2@;k*LnCGD$8Mbdlger-cV3#`OwxH80wf ziOx|f>4$(Ac4pDWsGC!yqe9l|(e|s2t}>1Rc_oJ!p2+w(wbD3rLBqF6+6MowK4wwQ zs>H{YDti5n9xd8zKmchas+bOH@i}bTKr0(V^5{HhU@DnE07WrP@pcGrm=CzqO7w^A zy+NXMj|L2O=j`xZ#c|X0a#5{|BlXcp;M_plfsf;7=HrP-T$KMfWEJ&^ZWv10DGQL9 zGh<9CCG%6@`lphR;ZAbVCY0ZVd2wA6J~j*dUy1uzl-`Y68L}yvD~+-WhWB;x71jTT3ZAh+m1@fzHV94A4pQu@*RJDN9^Jrq_Vp_pijvu@Km-8qMRIRXdx` zJiJifBZyhGX(xnJQk(^E41I7l z7hulaXbnBDHX8-SnD%&O8MrmhqSH|VFIkg4!O(Vo$r@NWZhm{kIY|dXJ${Ym$vMB% ztX+(_bqgb5-C>s9O@p^m*%Zen%G^^qS+MVRsLMc<`48q-zEG-PMmTzwWI=Ur#&+j@ z>UTmM4vpa7Lp?zU;B4_%kCOZA0I2(~^$kX&KM@0O?KeBKZ+kWOYuUJH<_=uu#^wxv z$mVyY`Z5#;vh_Q2u&llG!|gO_?S%(4#xF_W;=#g$ONz3fb4oaM@_Xn*4hdWyZ!|U# zOvB}k%iMY*RPC|n(a-pT`I24<^T)uQ4aSC3p`QqHq+%ir;0Dn_3rfWELTg(F^2Qz0 zRd!8(jRkcq19o5< zIE&yJA!_}BIX->14Hj;7H%#OI7I6M1L{u0D)DL$3L0GT}$JTL`v8xZSiocw0T@@F6 zJI5be-#aLDfK&P?p~J;uJ3h+phF~RYEB2CfGa^voRrFB=3lvYz`$}~(u|r#j(WfU7 zs7%wRgsS&TapxE?ss^iO2Yi>|5$q$ z_$Z6(|38pKqJo3%)OAs7YO;>eoK4t}$L zSdoF@k$o2p6gEDp4U{(>us`RNy)A%ue+;quc=qQV?9 zXNuLfyvN_9H>sQ>`||ZrPoA((PBWBF_~1ya39Lbiw7|o!7O?pzzxm|`$br*rL>z?l z$<`u^Hy$K53t8Uq@!iC3LC3HuVldi(_RH~-yrElrIL@thrpCPj6EEh;*s?Jz%SY>f z4BXw;8%rHlKtxwg77dLd@+7ZCgtBEs&fAbnk3IIaq6PX7L-MCc>%TRp2g8UEAfjwf zUxtB1R)vEePn8fzWJ@A4aZB92w?rnCF;Bt)?6)sz{!iaQIW~eU;gcGOo35$a%DFms)iNFV$a3V(!$-lwRHTl;J z$v-5X2uMIUkz>>0M3hq#4}RecxoKL3<}s{L@kG={Cg;4EM{ssLwjUAhcY>jg4jF5t zU0|``y4G154&87AgCV(XW4JG8#>9}%#ml;h2Ww}|nSpF>#5jDtxMw)i*_Y{~SoTJO zdmxy5dhm|fjPJ6cK~4q=&wZFl;@^B2C_4=ElO^fyE%c_z|cCbacpc_`dt zkA~Y`y8}e@6zl$&Rc*BuFhPurVm`e;Bsg1$c_IFETl|T%uQ#}-U^Lribwz~1NY5a1D&-E23>Q@kdb{CmE4vtNmUW>y`c+dDBT_&X{blD^L(0&QX!xx2D z;r9tInjhoi7^b$Q;6C<|6gk3izmykuqo&jtCG%y|vq72nQD&#(?Wgti>*m>)^ZXy0 zijeaLXcmr<(5(Bz%ptH`NcJFU9tO!y4v_4wli0_77!pvW2y`3!ra+6Kgy)mc52(AmVQwx0aF5$G0Z! z@5P@JQO(JAP@FR}(5z<=xB=OSAbS!XNexSs{QK4+uo45KnVgE+33-B;ms#cTY3^xG z_iH(^><=7w4y($mT++--1u82UzeIleH$5aU?JqD{dws3P#Q{@RWkk#WM$jl6FkvzB zuc@xVqIUYYY(6NVQh&~)We_H?yJ=9&Byau4}miHM_Ps9bJm(kZ2i6S zi_=AMy!Vrf`mBmd*`kVqqIL^Y@&1EpNLY9T{ZHjyI~nwX6=YVobPI3%lfEK!dCCB> zch$o?E&sR+e{N|eYSlZ1IH$Y?(-CR?ojT(E?;XN7G&bxw&o43^DOV@h!e?$SccE61 zcI_n9m+mr=_HPpea#E2%Qq@srJygHk^Z*KVi>S9RR3%_dMhq0=j&iqRpP>j9`z=%K zgXVMhLDNR}K~qXVA7ZX7;BKl{!I0UQhuU zq;L3Y{?WMY1CMHus#6oU`Z?QJ@KfhHK0z43y>rX`1sBnT)VW3edh~0o%$600=pfXQ zqE$?J@7KsQPLq^oh&%ynZ#9GBxCFppMG*cr(P5|Q@{IL70yAW2Gg_!=4RFmwd_Up?*NKr`)`Yui(m zZcm+s&n97>9lA*sX56MY>4ppijL8}_q-dByoAbq>5hvJ2RM3Db{*XaTDc%)1jch^; z#U;IOPtC&qtogTtD4MZ;q;e0Mlo1c-v(v(OIJQF@{VsD1N}EttCZW9ixrzQ*PA!$& zGf^~aJ2VU1j(}=iOO?Xk16cfRcpWphdGg(1ihH_hTGX6GM8PI9?|4x}&IESxBJ({>tXkCVKHD%t>MGE0Y7Bbl}`T5 z^#mZR&&kr+#MbX26-G)xK+6g$Gah9WGBQgw@8%`(=A$*>ZPum!`zo@=`&g}sEch(t zXg^S{4=JFER7WSps78)`tYix*>cG~LP4?o(k}i93Ysq4JaaYMgdvR}x<{O#sFKM5PHK|6yBgter0rOtm=`p0V|1X$9oHeT9--`#DmIeu zEmU%BwRxnvBgZ1k<#|`|yh;yh{aX_vy65K0X*q(`CgM;`qbM9x!bQmGU; z)g>j7()C=hhmtT`g6x;|^Nv0sT`j4$F8*fn)os?b&%^h0@iaem2*m52=kI+4vhz;~~e{MoJd{teaN!M4<^-WD}!r*~5l{4}q z^MA!chb{~pgGI29A!?W`& z&T})xT2^U}M=y~*ND%Z!^rTqvwbJL2uPj*%F{std@^Wh)2o53FR4EiFyO4ez8D>$K zwoqF~xcHO?gNQ44psGrwCJ!j8^jP=+tFOQ*OHBpd>bA)*??!#Xkx<}>Rdd37-2|;b z{nzPuhu|X_rj_6k9-aggcclxFjtn2GB1>5F)AE}#6ucFx1cJXd(snpgFp;V$jV0$= zzwa#3-HEd9AU}>aCq|Zx&MJGRX%zODZR?ue!b`(`y|1Z%kfgSk1d%mu>hA~}h^OXX zup@5GV#%ygw5|1*7Guvz^VuFS{}Pq&HI9+gGr0xOwnl+!@gwM3TR_1XsmxY$Ll zQP8fl&IEDJ=lZ6=^)3pzf_9yA<~bU;f}7-3x5h&dOS`Ho%bSWE4618vv&(5V@I1@B zbi7VAy1MdY;?EG~BD@vpMr zh!1JT7CGDa2b%4o4E-#!_+iwB!{^#lVAlR@2sF})bL2F4qpwNrdjkKPN zixS_|iyKR*&Ac#Y`1PVj9;Nw0N8%H#+`@xXx}xLT1>xDnoiXor!L>S7MVoR~obBeU zfST7-n)fsR7V`|)<8EQ3zc~2DC+?j15SEbMeu%l%2?3m1l^2 z2)fT1=)O2X*0o+@6KJAJipC+}FstEP)ERVo%T zqGHGY{dBokhzhhCv(KGuTmWg>2}9lM^Z6^%jMYTcjAbIm-MMV`s?27ux}(BhI38o> z6a*N;Vd6V5a_rwKtkZkDqddXvC}lU19>7AQ#v%5OX}VS0&bi2+dAI~%*Hc4{sX<;D zOdsh>WPXo$W^GQvt4}Ga$UlandT-;4fx>$i8ingmZSo@$v^$8Pg7f~4cX4yP>|Mo8 zsCFOL7;_M(u{xGIXGG|6hj=?wxz_*1VPf~p@Ja_KA$$#|A*ddTT9~MilI>zyaD6JKX;iJ208k!Gw^!^p9%1czqCj65Atd$4f7p|3ySIi-y0pt9Iwp&;1G@4W2l@r%X8G>-M}J}tCnuc_c9Ks_Umq>1+n z?fZG@_f2|Vm41J(eSc~CeXiaY^FHpekP$eoV-s0oWgTltc9%dWKO8ZqmP}&7l)bFO zEb_Zas+F&le11CLmOYg>d*lEi9Xd+YWmBT2%CI%hJ{}U0-`qh-hBV6tqI!7JOqn9@ zvC2#HB5mE6HE2KBzPIq@tOi4@d#cK*C(ExsL_-b}e-^xpQ}KxCj(_3nppR|NM}q;jtH8q)p-i|F2$ zD$p>vpB>!iL?M4F&3(ZxUcfFnPlOmHrClf8*Vf2xksdRQq1hS<{#@Kxl5a0=H9R6u?lR0I7x$Wd6lPri z;O2g_mlD%`LOuIgp8UR~OGCtyQ{PxAS1*!3$GtLy!~~Ww16`Kd<0wZKjD$vOqz4ya zF$WCNkVSZ3vj|7p{zNMu5q$k${!=q{t48fK!d36paaN9NT%9=X0u7jJJos}X;JU_x zKQ|gG5{(pLWj=^`7SN*oQEx+VhNjwa$Dsj)u<0MlLk9&zuwY-v%50d-gtu1lh4NUX z&pK6%Texa#Z87Tzlf4+S-|7G03x*k7h^syEwVlCA{h3&DfSq2KoCU&2MkcYa6Mfq-LGirNeo}21me#tXo>d zm`UG+8Y9;I_L=eQcWS&3V%uJ;c9)393z2awrNx;q0Qs|q9J9^OKcx${HoBF+eq-TK zWNhc&6q~coGedx5_qh85jY7=3O=BNtFDvh9egU1+ai!`E^kkuc${0UM4oFj$+A}qp zNvp8rghXbTu5+iY(AsP>WB~ULCJRIY6l|R=X9|9dmQ4-KBy@++C{P za3>nTosfzpeE z#^?qk$(V+NIk_-Bn8#@_OEs9me08tcN}%?B07bVj28!81eO=^h<1mA&cBBV&0&NZl zCbO}79G}R7<;?os8!X^vH26njq1K>YxmpW@3V#%w|BR>Gi#w$r5R3s1+x)88q$QtF zVeD>l7h!OlxD#32jH}-Y`Es0xUq_E zQ=cXhZ*A*4{Kg5mp3{ac8IH{yNumn z{#6SjrC1f_Uv{qy2$3puOPD}v1TRk-BWUhk2m}wZipD@%QkJinm%&%;p$l+As4{tD z#4{fueApBzU9AUvh9zR@233bb=_K?tke@VQa7eObf^v=wAc=Jhqja5vYqVqC%iYFJ?M$6aFv3;6^W{_p2Sje zoqnFt&-41}rd^%9e=@SB>sgA=?}|poKE=&3x=~0NLcg#v_Y5+?NluIun9(dSqiLSL z%h*S!5pSa~nQ3+)WR)5V3?c5V<=DwU;oonCF-8n! z7kDo0vd=}x2$Y7b0Rkw?EFgdqahCu}?3DyiRitsx@*8|>nS;1znOvCd#bUNEF-y0N zNRz>AD+IGYfBOfp*i|~dRfTAoxrpsqXS3kyb#y4f%%$}wRO6IADGg5@I)+e-gPNz_ zfWzfI7T%g9jlETD_JUB zPUj=g69mJ>1SAjXgIz-Qe@QIKW|6EfxusPd4Y-F}WR_ER(P#z-XKoUjWZ}t&7jhBT z(=5q}9`rP8_+E^}xRRT-^-n*2I{CGvWMzG?x(`k8OQs80KRPh4hdm?C5JRK}H89&i z$eUl!jhoa*v~>PO+$lPDE^dt>GLeF$O7`X(g-dcpo|{yigHg#?k+KKlv>4803elk0 z8hP17XD>ori|n$ea&CQO{yrd$M3=>qT$W4u!3Ia80kYLQ*aTdX4t68`vc_{pFrIO* z3i#H}kkw-AZ=uDpvP}*=su|t10!uFgPdqI3t%fLFSMPEyI}8Z^$e8s`$YS&efQ;|!k*dj|yJ z?KEpjjV;JKX1OS4e`;L>?*C$X{I3uA2e^WOe-Hw2Cj=nT;FDA`M3lNVxf zNvdq(*rb+(+;t?wdI;oQ1Mjr{y<%|X&(8D@=L$bO2W44+GTCz*Xm~+VEva@NQcGCG zkkVa{7ci#7qQM1k3k|9}t}Dvn7&nC~4%y+vA!{7nlT;r8Y*wFRuX&x-H^E*b;S$8# zujC=>1%rndk)LNb&EQ$&#Ep>jQL@+%-qzcl=&SS8g&0%`y`CO1m(f z^!9I>w7{!2-xMSTD#pnZ0EO`rYNg=3du|eX1 zX4>vR&V-sGqr&VNV7Ae}4eFN%<>uyyXRJ;FzsExhLKJ8i-PL$Iup%o>ltqhW7nDs{ z@=ROLNb64OAb75!_p#~y($~eZuPLssxKG;o#v*f4Y=hs8e?I9DVyW2;169R%0N^6- z86y|j_IWoolRfIa87Mh-H7afV8uHZG^k;1Oo2n~*VTwOMn}^Hf`_F@Rz8sW%Nm#Om z!4ymt6kP4C7oFX;?0DsqGw)T4F2T#jIdv?qrsMp^N@HcQ;^DvH$kk}5NnZ|r?tp%_ z(__3id(Lj|nA`Tz#NL+~T^eks_w~L+scARM-z0--c0AwIyb7p)Qsp)hXTtkyZ2G$v zAm0VxzcLW{nk0_i)2QH#X`>qEIi>Iooxm3<)IRJIk28Xp`uy2gp#>Vzv1^l$`V8ej zQ$f7)t4`Ct)$V-V$K9_xnrph)B2c<~s|564cXZiKS z^mS@(JbPnJ#m`M^FEQG#Ax({WEn!pR?&#y9l6qy2ug#zR`A)Ug!!A5$ZFOa*TBpX= znZ`ET#@4H`11l`BJ*_!GZPD5`J{n}SH2LLuRuHw zn3b`ZVDiS4Ggf)#_;T;>^7=!2yj}EF&!ex}LRZjN-F8bTgF8qEHQi|s8?U*Eo2;Pz zTYrX5yEV6Kp*Dj0m-doKZ8H*q7m*ROy4L0OWbaK`a!?1U@)@o3q8OjnLFb}z-8XpAT9_BzYYB^9=|$_^=#{#! z*Zo{CI@OKN)%{f6U*|=?=|->9{WrO9X{Hxmw9z#edfJGb0lC^UO+R2GbpiHcsFFDG zG-g7VE)ys~bED?6W*bj0=e!M1(Ph;K_bj89w%2VZG=B2e0WAyC@g*LRT4Cm5C8-M+J9 z8^dwggKCTphNwYpvp`}Rx|~McM6`svW0klJ)r7O1VfC=khGCO#ZRaX6;6MP?0yxu|=AK23CgUR+=JbK4c5Sc`;J7Z{&)iz8v?C zqL;z+nDVSa)SmS8cp_WVW2*#a#P_{D?4aZRKo}as1t@I}L)*?N$rNkEQs}H!nfw0#q%rIT?bxYZ@?z;0XHmG;qE)I|DctGhU9gePl?_MR2lZAK~aAJK!vLjX#@{v)klG z!e4`F2@ghqM@H#>+m!u3C|$ zKL+ukV=ISP2o9soIHBDrTAuRn%GNM8-EI8(N4>wO^yJ+9tl39e{1L6Mf`b^nHtv46 zY5*hZng)^f*EM63rU|(Iy_;GYg{$ue$faX+E-O-6*b>2}xb*Pvb7Ch_&>}`JQs9br zj1=4~_BB#)=Qz`Y4;m{`BrVr0NdCPa$=fci-_6PX)eB7PH~24)RO=H5X>U03Igk&| zOB+h|hFfS-rXmJ4d1*1y)>Ps-e;a3}IuV`*SYPouq^zmJM{c(+bIScYk?3{$U+QB+ z>3H}PsAHncD01An#eubx{H`y`V_LFuY@$8_VXloFJ9jDEe$^s=oI6-ckl_Um*qdn! zhc3dIUt#FjH&HF8a-ZH8yB$$Hlzz>>-7yelP82C_B;sN8e(!IlB?0;Ch^j3JgIIy? zzybo#9*VtD&-`naLBvA6gj=s!9P`dCj+LE@+Bj_&Y=oE@M!~6^^SpjMCo=6T{DaB? zS?c1okl(dBU{kiWCe_I4^T$I)K<4_gZYlTZ{JsDUw~;}Uit%0bY>VE;^yE0*+rC_={Kd{ zpLOESfxgdS$rdZ?Zaf6!Y^7dlSBh)gdi1ni#Bb(U2Hs!TiLNw4$Vi*co5xZQ*F$#M z4CFcE_p;HSnb={`i4MPFqqqlTQUWe^6Xh}V2zjybIVFnJV31^n|L%z@L%#Gl?Ti{( zTvu$oVV-v{bD`h*v?+73851nxP&9D-KIUBt8krsM)RGEolu&tTaisNlN=u~L1yL!3 zV`bQi)GS3Rl|Sa>AEFyc_ZQTW8+RC;8HV47=f+Yg=8ZZ#H6b|B@-e(eP6uMeoJTzc zsjhw$HxC2_y@YcHO-oTcBr2V}#&J`;TlcDmcty1?j+VQK{2bSO74@oJ^BGJVfCZK- zM@N$%=FMb5xLvS}Ro*VM+#2uwMvVD5f%i8~?Ik+Avt~HiT@JZ0SN(lzT9yY7aosZ6RgGJwPV>YXnPFQc*AD#sCx@iZ z-y%UDVnYe|?D1&I3r>JjqZ+Bu5Dx=luxXaJe@QlI*UJ($N|;viP3@8M0>)=q@q1B0U7sTpd<6o z4AzcX&PfQJ4QdPsPe6(=SKHp?vZ!J)*-lP)ZuGZ&tdH=su1MpRTN@7~*i2`l ztcULA=r|_(!0T6o_Nj}zp2(v+#{Q90cg)%;oGas$?rzO-yaQxxxQTkx_(6wpT6Xe(l{Ba%yYfC)Q7CfLxD{%}O*q$Z-wpCVOE!I~NX7=5jLEr6Y z_{}PTgHZzc#~;x;mWE&EW*EGil_9d0l|g6TOuL;}8I=a$9j@K0!Zr19DF73UdVj18 zw6x|OGH^J=HvDPdrA{aCbilg$#zq9esk=(F&c(b7A&#@4H`h8$v{_sExpoU8`$-7z zOQ&>Y98u4(56shk%bpLL!Mb?Tf?!>Q+SWvtAmZ?KB9WEI@z+l_D>IiOar~HV+)i1q zJSC>IjtElOO$WeyvtTzIh*82pe>JT7(dK)Ha9k#^uC!Z3C!$dkl(*i@9!tLo5RP8&g#2l*s|B*rrUZS4*PlxWe=Nm=U~><`4wUI{>|#^ ztf}<3ZrIPx#SQt;8dmd3^Rgzjs!?GY9gTv%g@GSB8b4vof^QkQ^l-FN0QsvV8*#p| zSF%5M&b3V8|Ed09z`JpN$K!jWig4xRTe-$eMj15WC3wy$oL-b`bqZE_;VEvt}Rc zq;7eci|A6-7G~LgpvmIsnaMJat01IjP{m(t7D?)CmY;GFgy9adJY=){LC`U!{G6+y zgVbrWG^VrEn=H9}5w_(jo8^OamcN@U#%MIC=xmea+M=x4S5~`^*E0rd+P&B8@r%5|zfwoZ{H>Q1H$wEw2l^N~xpXf<=rS+~CY3QWFQFuDSIq z@hGO^p(Kfb$d05J=;qw`^=AnnIEE^#XxFfvChCX*s) z<>5coIqH?EFLO$1y?^_Y|T5|VprarQ!K}0%hQ`j+n^zbN+Ye$ z0!DmcAw3R!!0pohU4b{rtIoSlpo{vWA|b%u&j(;@&FzrR@A@&k_jxedt9>?feRy!v z0hiH6x*p3$?E57wvVr zNX{&lIov!hdIU;_e(+F+_(k0=?!pqSX0fj4-Wvd3~c9_IcXgEO~9) zfE|%CMnvwZz!;a4QD&6FXYS;@I3|{E6JmFxn~8ZpQ)RIpb}_J1l`9)Bbjmh!3O_fT zdl(zzZ=)*@A2_I9*7_%Gg;!>-ecsHqdgj_?EUmc<9{3bGts<+L5 z^i=>Qy@hSZ*($YZY23S*Q_u!X&^MqL&&#WJkKYgRgk%#j23la^-Ka?0b4VPjz3b

ZZlqaG+~>JazSqMCu7i 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

DoWH|B7a2idFLyx1!?$ce8SywlBvKS;ZiKN~ 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�z{5kdayb`F=RqnV4u=n~2=66>Rod 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�Un-j!q;7=qA5 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%0Dk3b1jQ=u`+rv`U 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

faMe55RUz;wNhDBgS$%D{zFnZ zvExIvafeuaS3|cJ5KRXev z^T86l%hcz~;VRr945AIrOI6?|wA4%EWmqQSWzYZ!?3_)FJQ@4&ZY zulS}SEG&Kkz83g$u|pp3#@DLcQ|fcmz&<7~biH$G+9?%ZJoWv0I8wn_=c;*)oCSZz z{#V>N>QLmSTC$m&Fy#l+ioXWVG%#ymEDeQAuzSz|q5Mn9#UAa#2Gu_awx9Rc(Xwqz{;S-4@_L!A!1+stdCvaB&%S=M0WO|rRG1nF*Q zooj_TJ0P?=6*t6XH7~BANXv!`@*b;c$dAf>&9PW%*pVg%3Psjxr1aK~%bIR2IRW`A zxdG4}r?MvEM(OuFedJvPSgML+HQzj5^Y(_p8z-hHcHgAL=J&yjUD~px1QPcJpM;i= zq~txYXUKSGRhyQm1_Msjv{n_F$>1}f#d#Z8I1|9XwI*1%!tlM{s*WtSbn(B*XD1b|qyj05z z*DScXNM6VkIKqFSf{Glei)9=`YHtjFN zOZCnoruMKc!gngvfD;bM&^$FVPmxfktBkB3(D86knaoeL6gfSdOWjE5VKdd~G9#M@ zWI9gX66rjkiBGZMC3kEcR5%=<0aC(5NM*W6cRpz-({jL_jZ}X^C>kO^Lc!S_GXeTK zzF~9qarRycBm|p>@>c*C0@Q=~L1J{b$t7>qw( z^*g@j5i<^tJ$LppjA%x&6skFYAX%gowupC9HMQY8cwMr{=WDyhNVt zsH8-0zo!TS*~WB82#E3%fArLoKZ2e)m)~&`n-%9nktNI}8VLbC!pJwo-$&*?XP!gu z^VG{C@c{D0P{hmQtUS=2kI1}QfKD6q$wu*GUX;8fiVs9_;92~{O9Y-d^Xr{n^nEU= zMs#SH)H#ZdqC;1S8aKSOE#SM4{`DZslzpo({}5Aud+Tt(qs^`nkl9WxaP70;f$#*f zx%>|#@<0s+Pi78R>kh}NS(B_-!};KJJvuRwyB=b3w@J@`c3VKpNuo^yOej^}=aDUQ z4pF5{^xaA3l#jNd$l-RaRVY!uJ8drQA<=euU0(3%v+`*JR4jDM<-5f0yBjRAK@A-M za7UTs^CRdZFteQl0OCCW9GA7(63Yt)8*C$T8E&$TaeN%)5MUc!Q9P1ugwg^fnT+EZ zlmg?p>SEbcyNu(|8Ig>m5^GKnR|MnWN}MSFJF$#jj~_kDD8N#MED$MGhGufKWEnH@ zjaqRL5b0%@JWVp}w+Z?=Hk_ZR!99_}gYrk8^|YD70~G!xg4$55;1UsW*e$2NVatoZedMUQRzTvQA-qHTQ8OHt>W-7xI`uKw_Hl>TsUNPlQN zD*fRJ>JMd{{&A%d`op+m(;xozCgw@%56~f?Kira!ze4;K;cvRBC0t9BP>9^`&M?S5 z6+LLHCFJvQIJx&h@knxSqb0nKG9dQbXoW&U?Gn57v`Au~4;x%Gu`fc8es?Wl&?84r z@^@_sl6>~*95YG&A$&8*w0$ihJoFf}xnSIXLqEuRB~m{a{^ozAA6WWD>IbPszePXj z29~}-zyGiQp?@x#wa{os5ouz_K}Nk6zi)c6u=4Cx2kmt*Fk zAIyF&T0eMh!LjQH*-v($AN&F7G1}1&7A1D3AIy?ZJJS!wO+S);Fa&@LV;H&V2E%Ay zKRBC@!x_d`=SMS)cJzapCpNR}}bOW$ag@jL4W-}{fAS>(PSWERJ# zakOL>*W;V1ANb#c8MXz7Z`QlvF<72EV%WyRl|Z;0`Yv)WdCU{$c_S3op-9h&_Ol_Gn-D02Qp@ zs$W0*Hqa_0>IhmFU^#5mw*<%)S}EIq0{zSyD(NR%V%Ptq8l;+v(rsmX1s{i#Y8Hwg zLALKi88r0gb7eyjvRx!AhGk*cz(_)U8>_@M+~$ob>Z zlk2>7L2|uu5XVe%eHGtK5|gssW>^5S4GRGABSOC0^p&GUtDbChMr~*PkI8b{%=N!5 zxc;|At^aZGYiRv%(%`JP?xw1Kbv zXX}4a=2`Ki7tJ)xIT|eMANR?Zq(pj$NRQ`r2pcR*FCj5r|ZO3cT_omfk-W z9Z9rqrEMvsi?^I)&};jm^#eW*r&kTdBk8pr(R$hdVsHE|nC04tR+D09^^c_3Zg@GG zVhz#i{hera-t42N)s}aIv|4i_M@w4mN@y8N?{nV>iPooANzpp+g$U7_@Nk%*x)}j> znEIBp4GFm6zP1u@UrkT~KDyYDfTN7Mdpv<&2+?ZOUwJ54u~+XYD}F>)?A7mTr{V>n zim!UzsJQtZ+37cMp0ruzevUBgSJ8kNf6?DDi6Ohbxenh>BT?xF2aD{>w9ELlLstwANRh5J~w~yc|vWi_oLrT~^PVbqw@h7oz_@9J8Q*LM*~s z-&R&vU}VtF!tM1oJvsZoA+KM2I#OOg|M&k$UKbrlc|9g5udDNai@d%U7_mYBTI%G- zF0Zph@t2L_$1JaZ#f)swZ%1*;>%YNH@>}Kg-$jilp~ld9Ja;iL0MdEiU&7?Iu-C^u zPkFt@kk==i7%i_IHyue{pMv#&7|mv-7&P0yyiVuiaGL!XLyn}`cI5RmlmgYBO@mTL z*0Zg>BB}N&Skt1Z_IH-odmcD?dd+$#NUw>#Ia<=|M0_*l^{kgE_vBLe+vQU9-Tn;j zg_gpT<^;v6O@H$ZA^oy440(N0Nn3fHix3>cRQ~xQL##ex)P3!r(F;RfAD$ho*sEVJ zEB@?sQL$HFb64AnzgZfr`0pzhOJnn&6ndB5F9d0hy;tq;1^kk?p0VMTn2Sdty}e*4O2Fm8s4H{2Hi*4m{HXn!6_pTC&$_?Y(3 zn_?pE-e1)C zC)5~{$IBLB<{^&@o{E;ouVejuto!GwLV_RnvSPdl@Z zpMCw2l!9acE{tKEmTWML_LTyKkHZ;8J#0#m45J;T;Chq-%ji!_R7WghWw%I{;e;8k z1Et{i+CSeq?dX}sY0HAl;)m`WEt!Qq31c!A@wfez!c{5-A1#qe!Ie+oUPvhz^pH$(bB zBBMEv=zsSS^#QuZ=*q-!eLx-)du%$vM^9p|kah>_d@SViv5+s69(uR%cM)`j>BwSG zhQ{E6C!DAnL>5Q+lIgIwNIs`i6<(v|-&8Jk(>xVYE`CllcttASX{%g(&d1@r;z<;b z?JlZvqQ=EvGqdCPQ^yqh2E}ktudVaAF`n;iBtV!UQ$uD{m zViAk}Xyw8<-@NR?pnu)~n`rbm>KAW46scb;Gb7^5V6Q%{&|bMzeT_JBamT( z{%fURUdOIqj1k3G8pV%Uzep0rA3$-g_m{yk^IP?cH!-~%^ueexq+d*&kI9FA(e<%t z{UUDRvFjJL_jaIP?D?=={UWuwGyS5AeA=0Qu_^CJ`o+sMX@z)3eVoBF+Sf0Z@NqcL zC_wQ@p3#ne5fe`eihmQJvKJO``;ZJd>`o(|8-XQh|mUzPTi;}Ek(=Dbxf_Z|yq3V`GQytiPyrj2miH$85 zgS6XM2R`8AaMIRLJd(8Ar~?@>MD_UHFc@}7*cFHS8ixxzg~xspUXCX0{}pxM(VLH+ zy!SwpH`IaG1AR$pAnz`O*b&r$sQr4co}BUD&<9?e9jOmI55L0yKp!ajE>a(;R)32= za4)a{_Wv3Gp+1l$ioa|WKW2U4SIh?N|0pi(|H^OI2mUTW|D=wE6 z$C(v>dDT(s1FyzK>I3x0L#7uI@Au#H$3tQbGu%&&9Vf#55M?96{f^Ne57`}q@qTx} zT%c;pr9U3x{VojI8~)h-{==Hcc)zP@Z>U1RjlR$cS~Y_Gggf5Workf*2zNY>aK{sN ztdQoObkLyG_Qm^82cjtTC78h?DYcDwccDtqX%`yIqV0mFbI)J*MbhaI*a@TQ^nXRX zzkb8fQ)}Y0LGk|Kev?|$B*f;i_d*wQwq5NzqW1T_`jFKBhJ0WDK%{(cfN$Y{Am6K- zgYq45Usio-_HU8zPXZk_=t)xNKlb(h)uQ3C<8S6P5TM& zVS+d47otWx9P)5@Gad4#R*_F`)Ke-*Y;$P&QyIm+QNL>*Hu#Zg7jGfwxHet}fQuCsv_$H?T`e*61!2NK|xxHV>BvJT!InlCf#rwyCEvks4P(w z<0u*-fv7|Rok)7FEjWrWGb+q{6AOs_N7^r_MQb>QuyryiHpD?*UvLCU)dOOhoL+`)-3V!{d3LJUJRW z@-EwH%E57(f$m-ny({g_(Bwq zmK*KN@aFG?NqJuxAR8UC+_4ViHO zzl<6F9DjI*pFLkrmR)8>&F}{&M$GUx&l3~zdtLMy{_UGF!z-$gKZd5Tdv0ikpI)lZ z@M${iqXnc~Im6En15Veze^vl~Oae~V#f_<7Dnmh`|-BW85L&sy$5w>w?eM9 zT@q;E>oEQMFPM$u(ahdPNk};)Sp6gT@7l1s5eHbhKbqAO@NsKaUxXI@*Ovt5+{Xp#3pPTV(^n*u1 z39$bs{Zjj16n|YW{*Z>sz)O+Ch8q2H!NC-2S(nOgngi?ya!ESoXCpFxuA+7V>qZz_gCcp#NX)*T3tQQx_J?#AGh*|7Js2Y{f4_JNT)L zv#f6a&(ZDwVmynm|HnmW2Uq#UB)%+o8SVOPZT=1I*#8wF?O+^13Hx7%y)!?o9Xt{S z4Ez5{0eGwg4Ew(w!1-ao7l?M#{(nlh|04ifBLRCQ;5Y;D7b8y9{{Qy>u6{5W`|l$2 z{d7Z+fu8Rt_mtudE&_lR1;YNnDpEf%mo;L7{CR5vZ#;TJ9l=rYYBgZu(jYIN%L~(c zBeI}{cfMDd!U=cG0gOA5|JV0wvV6$&F?g3MFH94HPeiu!o?e@Ln2n1P@aE#8hcW0c z^5oa~xEKo-=h0IZmOa;My6mx{C2f_J{(K!Nd;SBLVYKXNqpVCr8AzUVeA%Jo+5Sbe zMKX!M*Fq;%J&#v3u-K|b9d=f1+F2KjFrN)2RoAIXS)a6BI zp8_WNdJqI%|AG}i>UWk#y9S|Ct5$)@$fIw z4;D2<>j%{r{u=$@70|h~h7zIQ4@M;6eMf`oVuN!kaZW zAcpmWsSip0;CJ`8)(`G}{^$EM_T1Qke$eIhcJ%{W^@;R@^X1zU=?4b}oJ>D>7l?}x z8(;3y#YX%3K|Nnbij5~wJX&nDqaU32p%5JZ*>?iLQL-~yaKz)|)`H`|tRMW*dFmqL zOEK#T{ot+t7$PHv*wXcbOA9&AN`JT2Q!0RJ?K{7;o;9Vw;t3`t0x)4 zRZn7EJ8+js{kbxn!g#G~Wkd?&wK9b9nl9^+uz*2Zd zIKNPV$S%fNO zy}8JBAd?tZ$1<)x??f;+JAJ*kVxQM@2BM{%*tQC!U&#nn+ciqU}t z=JXahiVI|p;+Lay6eA%J&Q3v&;zY0}Tco{c*Lhy{{6t;WzJYqqj^zcDsy+}r56mVK zbuPIoDWf9t^dv`qR*sES z5c0HT_ZbR;O;1n+lE}4yUXtl%s)b)l_88&`Nx@}~;zh*3^t#5N+kdYG`yhDFQ*i&( zPpAoUxgAM{^)$tNeF}+!ydaFt+IOSnJf9nxrr350#T}yfGQD_lWK!Y0Qz#xUicdpv zstHTJlxjjjtuqg8pSOTrVBX|wWaj14Q|r=F4Dx2}d;s-LL#CqPV7?^xy}f~~E!vNF zQBzn#WXbWj8An}=#IXg6((0&-LC!w$g_^7D*lHpNTgmk$$PzNYQ9_jbgpsUgg8Yq`us@!@JMm& zQI1WU)dY>kTVmt+k$wnDI*Yhxkqdsg}5NRWfxK2cUsOyo2*`^Iz9#(_qNGe3ohyJpUe5q?e zQaAA>`w9?#;@`vJ#0fIm@1z=}K&wF-X3jg}B$=^x9>|2FWa4Y#)QpgiySM4`Fl0 ztm{r)Hhv(K0U;azXR9F_58)T|AtB|#F=yXT)xy6BgQPuCB(;mqGBH5CP|7?n#j;nI9V`z?Txvg*y1dBMs#xPkSZ|+om1C z-ZwO9nuKlBa@&DDD-3%GXIg#A*iKzC^fYc=lM{&-icA;9*|e5 zZD3)B;vXwAi{xFzj#0c50=%cUTD~LZu}ss5i@r?57l!Yp0?tjcG~_lnKKylyE< zwCKO?dvVDe62@T{Ckz{V0j7tpE&l#pAvl20O8h#p@1<1~N#HxFR6#>PqNTP=&;b-A*hy2n3mkm{5YsZOPzfQo-QeW0*k6=iz2fcU`(-RmM44wCpMD6|YDdHuH5j+Y;v{P~WT zdlA^%?!gaF{Uxk$L>&AO_}{R`(e~hnf6BKfa=c7E_hgQj(ZF4V%$W3!E;FJv4nt<# z!q<^9BN4@;Wk!U?VMvXaQ3_JyPWoRuk{WS!(Ng0{I4xRBjsLRarT3M(qHzjm#Y_@P zfpENByU~yr75HU1UjB8Ln5rr9HR~ifRWG^)&%%xu-*q7^BU}3#+ulHblRnZNFC#B% z>v$>VP8X?VBoPz?N!C9gVb2|As2JH=dKhrJ#{F~v+)DyZ*S5;- z@HG*DcVvcIoUUCf0k8T{v^ZUR9)NY_q67a+^!ZVDZHv|~;D7nlI6tZ#*USG437*CI zQEXBlHk0_yO8*C<*x@IZH7YDYP%NEl8g51r>@VrlG7&9Wg zFG~Lw-TM;G@Vo{9RuqstJZD5|7=^=so_4V=7Xuc~G|3DW$XF5DZF)BxoDuw9Qmga3 z6*afj5hn6=1iugNi{ftI^d7d*!!|m?N|XV&PoX2GHMa{746;L?xjvfPUxX#wn%ftl zMgMgj;R2ZlBBUdnpr_g+4~2AuVH*sde-^(^tRu9$KJ&u9-$GN!bVq9n*W~^pO~JH0 zT2ru|_G>hSZUIj9)3bh|rmzX*g!3Qt;y+tccv2KUK2&N7SHtu7Yc+*y1;p0?(Kp37 zAL@e~O51wvi5rh2|MN1Tw2K2q)9tI{VLITD>q*zc?~>8l@AA=8DA=7xjAjI!>99)Z zcYz-Veiy$7p>Zv$kCIQSY{R#q*?37R}BEDN5% zYM!6eVWYC68U^VU-KaN4{kldagc~(%kI^Xj1%KWlTIXETfi5-lkL~JGkG*svU23d+ z8`7n&gIF(2fn$9={5Qhtg8wEp>15he=l7zdYrh&@y0))PCGd4fkh=YYtKgc6magq+ zQ@5iOUQscSFgJ)rFDsx~+H_6ssyi+JW{od2HDU-FW(sS|HkTw-?>q^g5 z9rjQhLndG&r1#S+LV(jXrvzNPT~~S*_iGDy>zEMWr#LxNo9e3rZsO78Y%~D-A_0F5 zBaix@0eB<;hqWo3*M76&{n{F^XPZo=L-3&~r>`ksAI-ag)d731c&zRW*vIf!VCGzK zvHbO{{>$OFbyj>c58~E0vjzWGX4aVClGM(-Xj?Ggwc;oK4XO2}@K>$3lo!Rj-YQOx zcdH-f+;Xe^R+s-(M?Qh#XKBjp{Q^l zWn=N`4tPiVG$?9To_P1Le5c-!@9|Br*#8|A_r2=Wp;&oXn?2YBNoqG|tq0Y^YJN1? zG8xNCr#pD^nLA~)b`6XjE*8}~;zpYQ1jl|m)VK<}w*~sxU(k5-GDk{|8{g(Q%d2Z0 zDWflTstqeH!^1S+=XFYk751y!Tj4(b@j&biQ6vV}C2gUeVJPtZ}3@;7wt2<-HRpPCVMA zzEg9olUh@w^^2`@X0D&S(vCCH9qf*}dJnLL!{DBU6GnYO!wn~aY=>G8xoCA^E_k$G zV~|_?A=B~hmR@+CiZda*kM3)-i_DTP+Drk1uhIKkZtjZ-OLQ3vKdcu$2W)<6(u&V* z4C-(3?NEG+xA=~QwL9<0dk-Ek6PNCT3%n*%QFnE1 zb60V0d~>IP)j+>ZG@E6{piFOB=5$fUTowdCQLeDlz-`d=9YFfI$Z8cH3#<`yFyttp zNgN1m*E!+gLWv)dwTd5cR2|Xd^#;Dw@kTQDUW=6v12{_l{-(a7WHk8cvXEPq14yK! z@aWcso$VGLg2Ha~?&V<@Y9ivMnX=0*p_-Tq7>rk^mji!-mT(xULc7nMl z&NbE7q#P-iaT-i*tsRZJ>ujkV;TB>SItC>LbE+UvAeGBrB&-lQwcU@Zehs=R0Gdav)zR!c2r6^q zcvVa#>diYhop!1H-@3Ye&l;%Pm9Evqt;FsI%##1e#MpOV3w66P z;9RO}K-G%RQ@x7Bq^`4933}Q%(QbAHCiRyd!ldb7J`hd zxtm_|xN@irvSw12UNf{JS@ZU5S@W=BoJtQ`j316>sy$#}c&e2^HAzX@pGvU0^tu>R z(NUkX4&6C#kN|2Ni`-=SP;4P+Lr$O52WmbRztlBM7W{KAi{p&YMk-w zRzE>Mc1WZg5c4na@spz7UZAAip0CvW5Fb9uD@=x}^KfS4)B#uzII8sD>QFbiaE>`N z7#B|yS4ZV*y?)?Xex9SmSobCcX}OBq;g zE_)R?b)tFxBtJGlI@C{^dl~1|%a80UiFMiN-58ymeIq9H$i!d1mhFq~u0L^$i*!UYJhIos$p+x0ia7Bn&b;3Es4C!G&L-+8 zK=*Ti22W6%$YwNghn1{nc`FbP&M|sP5OO+egNojvdJI&wLUm9({x0hwA-7*o?UKlP zD9YPG`5S|c{&ZN+bF8O%Li?4>9Am_curru!+N;EU@=7jeCGA(SjZuDLTv&y0k4UP6 zZ6r{>TRXfNrPZ7RS;6BB8O?;v_YeE0m( zcK8lpo57Zzqgc9&t#(x!AYA?Hf@^&_2N036+uSp*M##i{u3)Xp8?d%wQ?=Tic@P}= z!}Q)J^Q@vDdHl#dI|TE}K10}h_JPXwN-FDroiQqV1J2zXI(_sHpv$`%2NlB}%d%!e z@bncT0)lB=wxW*ARnj&o!sdY4F;O|%q||(meymk$v>}MSDc@!;>nTLVLFmzcM#JQ^ z$#d%rc_HCP@^Rci@Yg`9a1m@wA##t=dRKSMVNNz%r)(92MdC`Qz}7tX&b7uzRnkmyF4r-Ns&&5o-*-@bQ!PnY_{LgS z)Hz(y3NpUWgK>AZswpW?)I{x~3i7f|B`#Lde0TdbJnuAGN&J!0+g6Ym9AtddaaTUu zh*}_Z2U>{EWHDU5AazIRDpISiB{d6}Y;!7B%@kkzR5DiKlI2K+ZUH^Y50+MZ*- zMe)CuVuNUbwowgISJe1hmm5Bmr6}o9HP{wVI0i!M#cyIuV7}x-NiU%4DKu2*!&Kh$ zwe?rPfbrjKp-UuRoBGLCXcKjcnr(5bwqzGvC24CFZ%f?d^A-QlIK^kjv|Quzwg^{B zOd!s3*(_Kvv!&p=fSQxlchxa55Zp)LyE}I3VU(z8rh@_0gN_$whj@8$$rxf@ZvJ19AtDL zY}O3LJ3S@aqL{Pz+ke$VSAhiKBr`h?!c%MQdtobffY^ zZiA^bTMKA8`xDos=`4yTKw3UET@S$1yhS&_9GpDYuNQ0z*IE=gW}E^!+Fv6%zLko_ zFu+#;K0G=g$qW+tA^}xDzqH~MfPVcdfsP|k)lY7x_^A4^7sUppfqk4^gooZScAchK z;7HbZ-gH=g&>f+hD%C8l#-IIG$W-wVsgxYffkzy^qWLhJ3xub&2Oz5>ijB#^AMd|} zQpE`^D`3bJhdML?!mWx}dvL&U-KK-o_m;9E?<$&TmdRZdRXkAtB1|R!;2Q@T)X@@6 z8NGGNaPBh*!}+!1FWTLFkxmxQeZH}~1yR5d`e7l7;vgg{6eCF!p1p!3#JQ^@5=f^5 z_4&HW5ZUiSkqSt9_}-ugXCUCLq9Wyyx+A(EdsVp>w9xb>2t~@Wg>GNb62w0*m$7w4 z3l;B54vES9#5l5|cO|=MD$0eRtHQVS_;v@sU1`PtAZMzyq@G|e;1O>SAccqcq93ki zOZ?xipwq?ljoFg87(c%;_f#ykHm+_stEw;_rsgvg?^mTl9a^&s%fVH2W%^3y>v5!K z0c-*rvg6fjs6TDDST`fvljpD6tf#~ly?H=vG z1>2D$FWlE!=R&lwGrG0VY#B-Uy~ORC3i&-u%J0r3?W2*Ty*r|kKJ8R8wF}N+_$Nu* zi@F%3wQ9LsdOc9<+-Qpks%B?70=I*7HFgvl3UQ5DWk=Msz+h~j&SLi|{n zdDop&?z#HPOB7$Pgjz>Jf=S;EA+&aXVnezyX@ZeF3$>RKfC!6up`t!RvQkv_Wn8rL zF8DFne4*RVDcrfxm04YQwo7erd5gKg;ZiLg)rRRDewZ}hVf=Se?rFF8h0|ryXtpniZI&9cv1`tS3!vJhExe5tkbP7ErFJk4*i;caOl(f zi%}Aq*0V>Ys01Q~hJ{Fah|0~I6|CH1vl7>+gpx%ung3U+SoqR>Q9-5oqT-h!Ex&%< zkd{ZK58JIaNgVGmd>CJVWrr4kUm;o4+CftR9D!r=7IC^i*77~O>7#d;Iw=-)=SVo-;zxHqa5 zlw+-1QLP!e!+zn2BE7@eeto~7mARS@m+c$EM^s(#dG-@-3WvZx+ z{vpACMxE~>x5=d#TSA!=L@gKOXiC_pyHlIQ3QPa3lMPakyp%@ z9Svi#HPU9nu@G*I;Svzr&~D#CbQ{A>0$;8Z_Nqp!gRGGm}dhk0rZcrZFs`yIY-Nae0q-E;`GDjkf-z@o22}=1;v$<#5ysx|4V} z3Y>%eTW6-C#`0Zmv-2~%_juy8vki@Tp3s=>7uQxepLP37W;b7DsLb;)f6TViyu)&l zR{QKva4$mX_smg9clZa3xPP6idp#wkUH#ap*1FX97*CLZwhRrKdd~UwDt+m!j(`ZW6ISt#eIgV6uv97U8F;!4ox zd`Oqs+BM5aKj0zkvBYF3nMZHqCU{&tX|;xbqJ#F?Wc!NtG>>V^KX4I1**N`o9kp+6 zRQsa%N49VN+j{%RL=IFXC$$?}F;FEZRxSx)5DXlEfW#PIC+gtLNgRabNN8vWvJUDq zxqu%M*)Uk$gO)3J6cXChlqj?L(2&`BnP{1P=Wau0w{FZsRFZ|5WMhmD%gIOf_@#g8 zttp6XjpD7!!+qPf@Tt)jy+m|d-v79xwj2(56xo*EBut^{3B(BM=*_lxOJYrL(OOSbjCv72NC19u_+z#KTapd&j` zOAQuo6QuPZw5?tcde|8a6s=+0fy18_>-HzDA9OY_lG07Kbq8AM{K7S%M+)ck2**4Y zLu>URTukP883@!-HM20iT1HoO7MyVSB2&Om5FVZL2`GGz~M zxULhqP!I(Z6WI3?sm=+|0q0^v$7rWLZ7R(+Diu1AQK=lMlT`ZA?8r*nTaMO|(5BK| zOVLw_!SIyff{PJBy^a(ZD|P0ww}EpxC~>g!V~XIEj!|6+k*MhDY>kKCBdPN*!NXon zVUwDK$W{-F@#oT(TRj|(4+#0A;gz)_`0J-4WcK#Q{}D5#;bc0h*>bn*N+|}_c~l9k z6OQlTy3*^C5z#>}Y{=L4cF5QEFU4Q7IP7bC+c$Qx;cJ`or0#(AED0^ZEKzqkgvol8 z9@t&q_7ZMk;tmMx(b=w!?hHgh?dZ`Umh^=-)8T?&tKr$JUAKfHfGei87BL{MG(ZM> z#3`8v&9ivZDO#}fG7lU30W8?xS%(lIMi>#T!8$hI`$H$ zNc!&^i9H+g0sf}go8vnf_I4c#V-LOg4e0;1Xzb+@dzgb-(f`10#2@rSENXDs_U(C2Bm%2$`i&8I+U%1d@b&`+0?YIc z{dyc${xcGX5<#vs2|t9%Z*@sbN_;Y9sg6q;mx3OJffP-T=beBab1o3*T#EqIFg+F^ zAKhVRXtq{d#oX_i{8ki6f$u@Y|qM@2{NG!rEJCx`Q4Eckom%Cn#D^ zOQ3Vfl{w)`-y72C4lhQnYEFP^YRB-Z<3#6G``DDy-su>dOqFzT@s(oXzS z009^~LID_GDC*cbN^l)DUMS1+m6>Zzpadx1FyW&VU?sD06>wq->AVjA4M^{mwD~dw zPS5J}onbOj^DP2c=WdCOmo0`-u^Y>35!e8#u;Qa)iR6oaa12z>S+p#QcVlfpeLh7v z1ZJ+M!r7rcVZ>u_JynDr=fR4opJ!MR2eFQd7;l%q82kT^2ltOoGHTji+k zVY~NpG0&}bf!e)CThrUH!K?AEWD8nYCw&CW*Cc%ebpdC!jBqo{nAmD29_Ymmm9Apj zO@+5d!S_G29uJKw($4Itik(+7PLFOfRw4aZkyX5by>F=E+jgtaBC4oM>Zpq6gl%9{ zL07L^jjUp%tm5-_t9UP>itjq?#o;F+5k>POx{Bt%qZe*}7GfC?lauuM>7W(hFQq4U z17_tbnOOyeSAeCSVPavQXHUSXVGYNGeMmyx$N%HDqNqc)an*Yd%NAR3xR~E7=T`!~ zH%S7m#|tcbGtQGX6u~ODM1xf`_)^+b0<2g}7hun0Y456Rd|)cPQt>|{ECRo$S_`a3 zxQ;*3!fIp_rJqelr6@fmkvkM*MDzR)LEzr?c~L80(nb#LS1?w;LPY)jA45bf;sd^S zt4*k_TGCd75mETDqW)P(uCzbDjE2HGj&p@#C|!boX&pOM=X-Y8$HTz#jjoVrVO*t< zD~>JnNa9tfgs1;@clQRjFQ*aq1x(xb!eE=@_$gu))FU`oO;oGSmW`n09Jh)_vi;u- z)u$KrYg~~AK=&`lou;}^i?ZE>&cBD4w5#h8xomc=gT1_8^)%Qs>n7)6Lr76)JA*|} z!~YR2YL9JXSB838bptaW%=|~+?YJktvF`zDxFe#WY7K-YU6elOkYrN+K~qMNN0Hrsi%D<qm*d0ZL@(dAm z7~P=<3a*bmZl7}x#;lS=FwtRlQOw@6U+?H1qobcKLiGlNOx-DG0HLlJjH0Jo3;UAz zi_x)IbX4n_u1GqL_?qy2r{2-`+xkS`|IHeGzxH?0_p>gJzQ5_R==<}ph`#^ks_6T* zgQD*z4~f3NDJ%N^is9m(`s=OSBdX|O%RvN%9a7Az>qM{#V#T)afoI!1+e<;^ABwOQ zY`}&yIzj0k;AdEZ;W>&n1jKEJx-l|Y@%I{{eeVANB5F9kejM>*!%$$DD z2aYawIAthRMjBLQwUHe)(%)`gmfh1~UZx-}aa_84AmVnqy3I@K-2>mjo72NT&(MGJ z;_1KBRr47#mX1sIV1XrbQ&Cr!FV^MDN@y-};iN~%Zi^#xsHJFtTRq(kul;#$Rbh@) zw`x!D_~2)_2~ixKJieg`ZXet{KJGz9;S6`?JB7f`O$jVrI10B#humU^YBx9hK`viU zH-e#DKJ1qqfuc9!&xTtp^B`Dolev5VSX5EjYsAB)yRmi5#{FXoWV3brIyUBH?P!K~ zCeem`G1?RF^x{Tej9e;&C~&*hh26Op#KR;j>WCJXxB5aFe?~CR>1YF@MHuAiU7y;N z)MP30N~ep+pWLM1cA3RK+U0^a?08OL?G3-OvMCd9({u6NaZ-q{_y z*X^5_;PUslUh$0twQm4P*uom`9qWQgC0+*59N4=xxLI4F;s3@zxt|;xIJH0ajJM)1m0`MMRl%T5rS(U^GZV z9Y{)BMt<+2D;;XL(0UzTI|eD%Dc$&q0@2ib8p1}Y7J~AtF$J;g+S%yo3L1-R;!)uKAY9$%TL8$I{q?TzGRm#7eXo5GSQCo zx|lL8Xo2}6`sCzp(|T>kr(2;)RJ;5(U|>v29%WWOB~<|skv)E$cH|3#B*NnhS}?== z0sF@XZ|^a!Q`)xRk##YJi7Ru_6*`9({lxJVvj-xODe`ps$hj5K?cT3ZPkdR0u64r8 zZ?z9eL!Q3PQF2rw2#7=eXFY@$OD-XjYd3`VG3^pr*;W0CqD|Vn zXPZnI?DDhWt%Dz?UP&7ppvk80!lBs-l~5l{%F)kUX4`sb4hb&vP|V_W+VW#)F&Z>b z@j<&|U*pUE2ah1TtXO=~O1HzlTenh_MhBOIo}0S`lQMv+%`P?Q@~vqAV0)l5Eop4L zfKWxXnI9L9pQ~VYb3j-pXtPj>8tdzVdIqRjHJBlRU7y zPP_jC4WK| z3zj{A{60dKWu6BMJ4>?4 zD}q&cP<-0Qu7AJ!iuiXiGd>+{R<Y;cK#1tK1lHP#JHw*?3W(aI+sned^ z(F+q1l-H3;+I~^-K2fo;PZI{$O-jwDV2avSq&pR)3lBn=bYB9hK)Uc3vRUwXE@Epj zsfX3S(9|R8m772Z!Qa@1aIqUL8@p5yD!mkJjj4NMDG(@ftGe3h!*6CPMGiM1Muvp3LI|H8--3+i=&kuxhF&s?BmK;Iz*tb-7 z=8?jlE?;LXSHt*2vzm6J;iR}!eJhrt`H(eJqzw`6Zld1=%^66t^A66!MKq^B@7Ww% zSjjI($Ry>h8)olIhXU zlt7ILgD~4_NQAq-*%riVAIidRuAA%YS#cvY0iXET+Zwr9M>zUrKd{fN)Pxi+c5o>^ovdl#|y z>TsN^0FHPDHxBi<>%QIWkSlg9a9TUU(U1I)@>nJ!~ubg z@QrDKnag<%eodh=duwb05w6UmZaPNHvwjfkh=N)eyOHLGJEG=Tth&+e^H?f5w$KWo z3%cYsPKa3`zFzBfC~^P-asVDi8${*4vDni(ItA_^YAol)&)D-5w&;<&5z!w8PmzG!s`@t2gWh=o|aS4d-7SFsM`UHNm2b2^R!)lLfc91jZQN>qu7Sa5`Z8U@r!g3gZS!N;( zpvAB-mgBFAHv#@{2kx+4`#^Bdck%d1YbPkp=&x3xQXl@qVvo;enFxb9CI+zZNl_PY z3|g>Q+u0IidS&NPx->xhNAdKi_CLoy4+^&i6vU(2OZ$m2&knjIT(BMX%D{|ROx+vM zJD@M5$oFn%o1A&}+X4rGqW40y84#-o(J8EvG_HNL2eDn#;9jjKpb-x`L=gJe#Uu+* zQppnP<;m0^f!B&z((#06bUfiJZY30CQ+*0#bNRzM*(}-@YQ7i*`r}SxE;a~6Fw2&p zMQAy2Y{^F$KR)6pe{nu%(NOTG)um1WGd`BChkk~27NMrl5n{!TE;>+?oYZqSxk6^xQGdFH1Abco^BRWcAkS~f%$_;=?@{-UV{*NYEg!gRs?BrJT}v* zn9KZVxzDL!^s`+UefW@U8O6Pe&Ki_$odT~XoH_V^9h^9&#l201O{GX9P;^b^jn>Im zxHD@CFLnFvsoXhj9Ze&^ClYr&d01MJpv`ZpE_o13% zh29Gju@h!~T_3I6cOcjtFW({F^GssyU2QTH-?Hk$q5OR{=3Y5Vs5u!*W{$0}8yxB| zi!&0MPop-(exz$NJ^@$wlPYxx=>kI08mhY2Drv{z!TnL_v_TW#ai3@4LPc$(({6oG z(AN&K``~8s*%&ygFq;%Zv9&RQSjc-K{Y}zUCtPMZ;az_Zq-=x?Iw+Vi{-+{zin^>5 zH69aF6dGE8x*(d}xCo-D;(dr{KxJ5d+Djd_i1G*9zl9nE#8C^)xDpN#=?*}=^)td} zqT6Z-A+su90>PnZ5MREceh7WkqcsKk=}YLMEs%vvK+Gj`z>j-{VFMY^PwJrRBsgm( z%|`y1qn`55&1HXsK$dV9V~1_hZ7^RU_HvfjIu~=n3^MScclcmOtup{FE7?oWn%kW9 zgR&CX;J;GW8tP2=H)EoC%6}5L4{V1!bMLgvkzQf3?uZ);roLx6T|^L!5F77fg~DDN zhoAzrs0xi)-t;*@c{0B=&wdjva;e`c-YsTV=8>sgU0BHV552H?2&QsnYm*D}9i&-i zOZW|_KW-30J{9xOgIHvWQJ{B_C@z7U`$DjR`H8y$lXLae%OJDKzps;j{kd2O_-v2j z%W7%vNmQqq#u`EB18mc_8slBA>Z7uT^QFKE%r++O`W_ zj;TyIv4MkPb*m-t$W7Yq$^2>BU?2@SNPZ#>jSWBq@92?QeL15=>Fv!ZzGfxzR_deYHm;LV+>O@&}QZtUzaK~cbB5Kwc@+d69g2slxw z$r#~}y9fvedRuUsRtUX_X3)_aj~bg-N(^rQR|E#pM0giP4@T3j-lTm{r}u$p^`zdcETs+ z1Q8x5KJmlnoG*yXgWV>sfKzNu7fCK$-XASfl03e9EDpaNhI<27at5HW&2C!N$cX{v zcq&dVt8MNg6JlU#nZ5#lHWE<0tL1IoN-fYt2vlF;Sob7*AkEM{#4!QE9|oYB>Fu+M z_QC1y%y9ef3FtianTHuW)}SkBS_Z9JZtR+JrpH&3j!e52Zo1-9(gHwgcES~)H)|T~ zzJmxpKeLkQI^5s_7dCT=Pd7G*W?2cs<15PW_=lsp@3B2@wnwIH^x6_^&DcEVTnw9) z?@q^tK@yokU~C{9i-O=oE-+nnh;o5VyM}|j{R<2da6b7eku)TlM>-nc-`&UYUBIF$ zMHek*MsGu6XP|Qe7;(KJ%8votrp1+pRjRNb>6ls)Jvn&G*SDs0gTxw(YmADc_C%s0gb{X)_83+C29VvRZPLTYO}p>fXDy!Z_d z2}SRT=95JLsHpL;KNK;aAVTbz^oji84KNbZKtP?PA5Ht|Q_jiXLFr)dC?w8;mGr-*u1&$p#ACN-+t=90m zXkTri!p?=UClpQtGk>BDJgvXOcNsL0z1R!MX6Ed5f(ra2n z+O%XB)Gst;Pj~jDUTdKp0aRrmoXXdN$f zf{qb|8?=F_l1@-J?pH9ItoF$gA@Rh#vK2^Y#-3QZ6@6J4{VXgPW?Au91J@TUAQsE_W`Md`?Px+8rNnC`@e`X$R)m?piXZ(2J6f`c*R+%pMeY#%!@n&SsT&S~>p=n1;dm1Z4W z<0*i132>`+Z3|ve4HULeuj;#0@^L9p06w-suL|i@V-V$_UALYgMo+8@#gmA9JeX4p zFsBwer7kk9X{lv2*8NG@oyB~YhYPWvWaGVGeB)MMB5cLG znm}pxZFZ~WqMpq7RD5SH{{ZdQcEX`Z&0-^N0P$Q2@iGJAX}mXrFQ6J9l=P7e8!^wm zT55X_z}f7Zlwa%2#*q-K8&F+sIYZ-3>KzIe=3kwJRAItb<@ad8r1iJUqh)Mh+=zp_ z^65UpN#L*ZHTCd31&4d0_}#L2kG#;sh@)l3h$SJM$Bt6?w(65O6kfvXbs4 zK)xf_I9jHBE}p|B3&bzNFSqY?swB3GxA`2QPB!k)5GQy+)hREnKXMRORnrzq;%i|{|+EzLI;^iY-oRu#heUm76g;-y^VMw+TX@6;MD^( zMx5x`X)@dx_D+x^c@PiTx*Tz4ue|SWCPom+!8#eq!8l-$8qNKUv%26Bgzr!N8f}*C zcdM%fYGGx2#42S}b(sgJ!8sClnyhWCQ5$~5?u7C{7dymNIt-uMxN}X-7t$$jg?yru zj}@JdiWIe+V?}y`k5kmvrc*JK`=V3yibr=!p8Xzu?mN$Tl_C&nCQ-+l=B+_^fz4%2 zs72Cxfs}>*Qg$CJ;lb*x((5`S+(@jS;z*o7mx3GJI2;F)ZUIKG0w2=R;5KJ%iEf-* zeOo{QCN6b#fC((E=$QCjrSMt+75&6&CE6*g%+}6AGxeHSDQh#&dV%!{*TzX#-3NeQ zpyq7RUWC@zd~b9sF~4+~JP;^^(~l^O9w~bzH?u=jbpMu)v`yNK<(yx-7*xWyppt!u z`{;;;$p^&V^A!efW=Wnft*%s^dA{-n0VfA^P?9eu4;&g(t@!Nz zXIjeA%>FWJ1t~R$A~-KA2Khsw!DMy9)jn{W!#~tQw!|rd`M1*H`CzsA4pd>e%J(HF zx^cCvt^fsM^@4G23J!=YC<_##K)ha{bDILkZ;7Z$7AS^uqD$fBDAq+Ume8hHplz|~ z5RBY61R0OzbAe+F^NWum7EG=}`ytDKa`y43GE+3inG0LJYZx_syy652->^bMR7l8J;i%WIB;%61J)Z2=*!hCk9v0s zTELjH7BsUT-7x3K7Hro301))@t9~(wLut?!OQnG`eWda)GJZsPWTgHdoxKlXDU3Qm zSPFGjHU5fmAU6?~@-px#;z?l$d_q;hCiDd*Ks+O2z@EVCid6hhTfdE#7SRgIKNG0G z7pquqE`h+9tJ5xc6a8kW2_k8kkARM4SP)_*D+nhZUTBwZU|gxW>=p2+pl(FCq%tLJ z2CLy}POAJccP%jhcQFG((q*Uwyo6=Xq5nATZRI z*-*WNz=wF4$22;O?AQ+EfY7i33XNd$^{qs&znt$eHRSO#xZ%vttcBPWh0IyCr5OXv z<_LYLDT)1l)}Y<;CPZY}Rs0Rayuhz8v$G7;G(K(4R}90XaVi$F z8WF_i{Xx1`rMYo)2-y9rDEs$7Ghs=iZl8e4X;jPrb=s%!iRU75bUP-;8F&d$6-`m2yPlVEoTcBXc>^7f=-32!AF; zff@I7_+X;U)fPd`p`CNE8LEbOGHwT-L^?3sj4TrGwtb9o^v}!ZV2B5Abb}qL{RJ2@ z9(z}p8VD4h0fBDd7ZB(1MdX;u_n}#*{W1Lng|yq>g|rNm7vneo;U{5H4Ahnr3Ode2 z-Y{o)L}qU2E~K}QW^?njPmi+w2%HHfE%6AweNR&tlov7_N|a5T3nhy9NEZ0OgHa!} zj}E+A|B=8(DgcPGfA30UJf#U_h^OAwHoO$nB<_KXA;1-p!55Lpknc}|j9uue=GiQe zLGi$UKn7t+WDp9F;na^MpPpzlZVXf;V#}3B(Hf7i?Vjvl(m&ipgqY2PNr!mj4Inn* zxVgOS7O zc4`IiE(!3n@nL{9uL7WU+go&TOh{)sc31&jg|Z-z${U9fiU>}?`_TR>D92LBoB$)Vi~kH%Sv!i zVE_(J)9w+_lG|zAwCmU~kAy^9g$)yHy|uA2zjxxwJU)fZbRoZ@?q+P|!Vb5;fVy@6 zF;;P~b*ue&kZJ)Ue&5Zy66qWO4H75L^TZnbEx}TpouMq%^Ms+aL^qVM*iom=9n9ks zTbg4%>Q8WyAXj?H4(i;ES3tiNF=@u)-h6m;79&cCK~PLIP_&SWK7JTj$k3Mv4E;QMy%U4|!y7`*^pY@A3>b0k!mvfIzxqd6x!$!>0(h%M zG-4etq7natA8i{EUEap>kFvaXhQ(Ak3YTal zUb95hl=-ndzEx3iw8B~&&7Hd+oFNIa1wj*LV=TZgh?W_yzn%S+C>khtj9B& z;i_i$Fh_&=fLCP_=afZYF zr+*h)&>=;`|1hmsA||*Js11?R6ZWeQG8JAZCO6p3=Yp*cp-QNfN!wU8v}!ok1N<4x zOSqzXotzKpm4tI2PDXozU$JR7&84)(f6;Ndpt07wkoEYC2Pog6=F{L8(;-;nkXDa< zu2Ase&ti9dod@nyd=KX0FAsn4kdK2evKm{66yN<2Kyq@iRiuefQmpiIyRJX}2dsL~ zT((k|v})JA0~`gixT*-5@tBOUKc^zLHY)~5iywTm@wJH2EZ=1=`!l~}geN05Z|-mk zqyoihFmmVfO`HNp(0dTkLQH?4aI9SKE_zeOb_%^rgzN5!SXS(4NpO}^klH5gP>mRS zcxG@0592BG81e~6QRuK+410vW;(M7r!KlV-%TP3=8(i8-H)wY@zn@*1!D4}|U#AzG zM@UymNUik(sV)VRUUZ1bKf3)cMK=Ce^)G7tS{D0F8ec3Sb=3GzvW&(@wEyX)f{b?R zW`yb!u^=bY@0do6=;|zL^l||CPYHMlPRyiU0s?{Rir%RY=9|!ue;a({OGq8zW9!fe ze30LzzRS2>)knpi!-}Pl+i;Luq8nZow;H=rL#MP%6=LMRGx!_qg?Vq2wpkMWoa9#J z%5MG$vr_Cz;zf&<xlMl%_3^h+-x$4I3!kB#>3Tcw7PDaN z%50WrAJNBLXlZO~Da+m}%ASF8U5s)XMjK}5oJPG)12^g7 z&`G_I{bXAs`?ypuSErXV+FGo)wVL(q^%-roq0Y`morQYY%2suLjd_-BwX*E1qAc4Q zZ>AR*~Gzg+llMrEHE;{T!)Akqqq-;QfW`?%O&E2EY4M@sLK!8Y*Z@V5P|^VCA@-AE6 zdF7ohgNwx7&z3pYv)FGUgTGxVAXzY87;!oGixY#PDK*ro4SY{Ar;e6(@(T#<6 z6{(?wb~T_WzA4aUr$CpTlFylKGIF+vbI%f2vQj=W^E2pl@Y+Q?M;^~KSROm56c4v1 ztaX-cEb8qXh$Ebmc6}gLo8jYtLZvhnCvOX46&6vS{`gCp2jHB^lvI;_1%xNM_6`=j ztabRQy>SL=!}k%?1pgHGmmlY<0}tl~W|)NsJ`6WIvA5$ktYftG>P_A&^3 zXyF;O?L{Q@TW`blij^JM@*fknRq;M<6?qhqH3?g5mBC_dJcV0fAC+qQ>H1b!EeY0= zz7Lj?5OMzF6J$L*y%F_b#jj4g0rjwwT44l;+yc4@hMX2#D&NyXysEH?y&l~J8_Tl* z)%dQ!B4WR>_c<27DxB+To$FyEpm{tZ{ImOEn;^`g3WRB1hP6UG-L3gA;uc3Fje;xp z0Hd-Ib+}va%6ZIpf}@`iod6?hyXefQI8B+4&UC4DWW&EJK)hlpaD`z z)7wH_`1uF$We|e)3X1b!zfWPpGQLb4z^D9zqxYIJ2<{GmQ=h6PCgJC|`YQ6E(HU{F zMv8m04fI^61^-3*<~}*!OvcRG;lN-a$DpMwHMQ@=x#~NLTFQ66UKLac@HTTUUrzo) zeS)>veZwu`4Z(^I`6WPh`GzOk)#FZezjM$ui}{Jy@HJiJHix?R27jNsm7346`R@tR zzFHPb#RmkM?ojI(*{*)TwZ4x*5l9-DJi-_EiK0HoPnFp1E_HbF2({0i2r|9YCqk23 zk*bVbz89{?=*VRWpvNBH3Jnk)u@9uA2LtxZ8HifR!%`o(#wF4w?03!FAnKg(6sIa< z*R#>d>bHnKxXj2`_@9E_de`tvlldt(_!8@)k}cMjO14NR`<)q-T0s>Lzn&6IeD-!~4 zf8093W91tkISuGb&?bTjo1`J#W0RIESRXsJT@xI=+{%4*qA3#4VY}Hfx|ed;JZ5x^ z!W(xl2X5Rk4&FF=*>K~Cv5ipU(v)~^dRGEyROt|huOI<`bVMS>LFo`&t#|>?VXA(c z&Rcwv5wKmyM+h&m^}zp>KKNhuCFnAiD)5QRyCES{VA1^Kxfl(%|9?3KlBVsxQP$8f zL?1!V1!CZ&h&yHv);cq% zStn!Dk4SKW9m})r?=yN~2SmzZt()>bSAXVcJ;P7uXk|nB6hS)L#i7T%8{Y{rr|NI>$a>oYJzbJ0eubY z>yO|kJ*`4SaMMr(G(x`4Wyj8Zc1IAQM8iQX$WoGxpQAuUJ>4mz`4rTJr@8G$@O+4{ z7rV?6g8-0h0^5mZvKYXiSRR1^41nFur@7*3e!IX%t%?MeM_^CtzyJoo3J45f0IZO} z^2O8Qc7c6U90{y|z=r6++@hGR-D1x?&0=5_AZIipYEUdeFE&OLbF^FRy}6OaL^S)> zxfreqv&#Ugyt)`VOM@^3W1pkwj7WwN@Rf_q1JTpA|L+)B?G88wRq+~eYs&L zfqF7_GzW2>D36wo{NoP93Kym@DhK`l0L3VU}kn@N4iPa33i zHG@h4Nc$j(6vr{+Led^T4%^b@`JxaViq+w>B_o%pB}&P8IRhd91U?rP^0-mEy3+}% zDmEQG@EG74`ph#|aVrTHlMvp_JScf~-}t!7TXJ%8jy9{`*Bs~<`@J1$uw-x;(htdy z4{RJ^hzT=!K`_*5`(6h}0%V%vgYz;s0s8C8Tk#0u6(JCb=b{pa8o)VmBID#kplJzHNBSS{6q3(Su40kgV>aIh;u?wZ71+jY(!8k2KkB$I!9ObKQ{s>z z&85!aSEy@eLa^2wh_z={gR))Y zE$tQW5?wr_Rq?vVL&Y(Hx2?VIwW!*U4UDec7cO3456q@ahr`8W=cZ0HZ#CyDmw#HZ zBV$^;dDfHSuIgWW2TIFF9I5yqupR>+oa;2|cZrlyaM;&rN_72?pnj(s2=%_JUccfy zH_(Md3ki>fnglE_#M#Zuobis#gUqs$_xRr&>PvfAv22ud-wL7r682%ug{*|~;u!R{ zhHuPIr2xII3EcDE;8eeaxVY*j~$IIxs{OIOh{L+H|W%ZzX(%xs7u?p0zF@_)VZKB!q}m9S+L9eujexL+$S_$8-3~{_!@Y|x6ItuU<3V<7 zNq7CFDh{fkb{htEO{;DfM|Zne8}y>=HYS)!FQeDa*G|ys zOVpdOqKn#oW}hvgJ|6;68hvg-pG~sQRfVF@mQ(0+IOS}sK97Gg+-HBz%i6-8s7jJ^ zdjp8R^!g=z=@shB1rdG05_pkC_T}&t(U)GQ&=*TbI-Qy1%tDcgM$R#IZL$- z7L%#zNrtpSDF?T5Cou+PU=TAq*maZ0B6EoyX`w?M>?U8erB8la*l5dmq<2vg=+i!E zSTwg5w&B*xAbyM?gi2CkmEHbvGP-S7N0ME^o2mFq#~*kVA3;}O&S1f=EYeZG|MG`$ zzhO}gv!LUp?08v-dy(J=TXYQO?TXNXQmybWh}2B2g%LJJ6scg5C!?{W<3=#=0N|zv z^Aj1g+#z~I=AA~tzNbm_^q3wG3ETXD&cs%#ZMy72pG(puHugU(u|Y1z=h5;jj1X9S z$)KF{j_{%SLih+F0Lm41GU*6tD#siS98@$-!w=BPa7gn>mF)k&qx+9m=mKn$Bcq^q z(Ix7w7?hLpGQTa96M&Fk!xKuTgo3M)KN_YAk{wZ()sc{a{@5fEnhMAXquL7aFait# zZtDmGKJ1k>BpEg@Y8!FFExQRZJ*k@AT#w8RJ*2RIp$XbBq#jPA(Eh4_N4ZwV?>6H* zi~O!A^j)3yi2fZ|?17YgeCSAd0AKc!U*2GRIU1=SN8;0_B+Rg=Uy#{c!hQC{Xub+u z7}9rt9=>~Vz7XtKMQsoNIC)lyU-+#Inois=r2A9Hy#m~4OWaR-h`1Nr*b(s=xXeeNXt&DFk}FWFD$z6C_f^U-KANKdfe<%0VhX!ptKPcUG_{5ed_ zpQ7h4f#Qvx=c4C%vgcDC6g_V{f3~H%ypDQ)#uIIOPQF`U^t>q%`Z_wlpeab*HcAe+ z=Cmv9U^N;4bMpR1@LN|QaKLbdZ5ZwqP@&QFe004)cD)!GG$DgeiQ@`7>ib#cp}vE6 z76qJt7e1;;0$60Ap_v4*Nc(o)wxB(@0mn8tGGC`XAS{RoYX+!mFh9BfF!}QZS}@84 zmF8Rr-l{U_V$iAO8W>YM!d~?Y!^c;?2gSVds4DYQIk260l8-Prwp`9lHq9%tK^NMj z2ZVl0b9IU@z19|I@+}n}Ip5L*(oLY$f{W-`pfp+hgo|~lRlZ9Jzq=&#?n?O%u5hCq zpo)LKr3!upN*N#U|L}G#a8(!C9~F{HyO@$zR#cRlm6TSPRv@64#H4&-nvz;kwi}yZ zlvW^6+^*N?p}Ey=Y%guAUAHG`4}2t4u2H#3*%rM=t&OaV+U)+n=giFSH^1NgT?AtP zem;2bo!@WHoH?&KbLPwpf!vK;q7SpxWUdE}Aw$}`Trr@-GtG>6y=c&UGeQsY@Jv{j zX@2}SG1E8gUEj2=WbM*?(>7yyN245gnlKJLEwL@Pu`TB~1aPP?x6v%O(0rQFEZ1m4 zPs;}a5I%#{O?=)p8lP%^U3xsyoLFIxQRhQvjx0>N@c?}?U5j>aMd?lOh!4mdwJ_;M zbnjdLsBe80d`eXCCLDZx(_sJlaF1X(u#Om@SpKE!B-K0qq)$@C$sY}rBHj<@g#`NG zY-7w#aklYyL{uE5T2AcC3~nfAXfX>eC2_l`N8{=DA$H@qgH@XZUS02eofi|8?{O3{YP)3?s_<%7T zHiXzsBgJ0^Ka*UFPddIEA7*$`#6qR25u`-G$LqVNp z$Tp&uYX<44CABgEnZJ~a{Vk!C6i$5VD5SX~&G#g10?Y}_OHSIHb$`s}tUF*G=~ zoOl)BR`Whd+E|Q&KcIjHUioW2{R+bC>oEZJFjMAtCQxbFe^ZEBORmSbg$y|wEAp|d zHIEs9J(Y9{(f6nDA#E%=39!7iHYwSAzUSc{}(;@jE=D>>vChbn%OJN#IwS{NOa)L@|Vyl=8QKXvG7O4)^Oc+KvN2p0up_)NelYf^Z zVTo!Up=uJ&y5_s5s+v`*=7p*z|JF5|@0V>-->K&5X!ENkg>9~?*`I0x2}kk~wfmr| z?Kj%}@ZYL-sjB_nWmJ1wDV4^;BB=2aS_d?LjuiG6{)lJ|}C2;<+ZJxolfWF+vta zBHd7sZvBU<3ndEF2lLQ{`O{iu8WO?zy@az|vL3lU@_3CSN zNvvNymMR7D2bVVx9Lgb5a3wMK1NRYv8>`@sR&eW3xS5p`{9C?S!%g8VCq6yF*xloK z!0d%$4V+5CRSc21)-cR!{7*2YC|bDEetrv4wI-d7G-&GzE7~;t#SydwoTuPcE4ZZu z7dA$ksEhlPJtaemrKcJS6d@_#wIVuPtlB>^q4)%>J+Hx|)&2lRN7^bDh(}HZ1(X5_ zR+Z8l?~f^(M-_24{{&QwFCN%tMKadn!*gJC(JIc}0H!WOzB7>wJX`Tw4jW-xacSls zBDDR%P$P*L78O3dN@i@+7@{(^9Ve$?F{Acbq%G4bUZ@(C#6O08K;n%^*@QZ=trjj| zC~?YA&eg6HXI=-t66YzP?Ay1=&WF}eohNUDN&r+M*4DYI1a%@6Yfu3R>L3kjH-dV4 zxelkCV9{Jf!rxeiN_1RUUlhJFJKpQD``Gon4oxrp_`K5B zTkyCPtsqd)4X<>^D?RWEuD!=aa;@+$vJoXkD)tO)S0mBu`!X|p%MfBX6=Wg^xh38A z{9E$pcYJ4P;uF^MWO^>2ZI{ogt!MG}v+?p->`5B#R|xc3?B9ZOTPR1KGV`%Eo<4w5 zm#Vt?`lKhJBn2g$vsT4Fb8yuEWE9WC-_=OTxEt@{<9>Vu${yw)>1lWdjZ9yR2W%k% z=|zEb6yyiWD)>dRA9%057d7Jrfc$ zwhG87D1ow4AYH|hfHI5t7JYRymVmO)n~noC(hJvO`Tzr*j&NN!eDp#Y)@9TC;d_A< z-@%QItvT3Pf|Vm&%#8b3ToAQA<6WF5tK8#37Z^#*U(Cd)kBvk|67zL;kvT1=)KSm+ z&u=BqK_y;4O7*YoOWe}w%V$NYpQ747>rGid7j?wt+Ax{{%Y`?>zjibKKE&p{{G{x_XpGa zheUsWk?Z|bdjG>v1pb`OfGkmHcwGGeHPPjncQa1j#}$4&9Hrn+#NlCa!ATHmn&JOb zd`D>qbba(3`iu9Kwd9EKNY zpf;LJ!wcw2lCR=AxLg*3bc9+Vr>2N622szK^T=Mg(pkH^Y_!H%`qe>jjzdq97a&{W zQ>sC?ckm#4?j;EK@wGj*Nq9r%^WrKWb%#%XxSAA*2I~=bsw+B)c4!W!yqD@gNo!hF z$uDxnxfd3l10`4(NK5k5-9DdCK&y+f>40r2KJvzxn-wuk@j0#z0VE~6W^RjnI8jBO%KFkx-ls>y%zL=z@rUMXN+(O75Vb6-lOy z^kKsA)GXMg@=Yb_Gdb}{8PznpTaz#EB?Ub((NxfuoZwG}g6@KXK8YSce`uHbMUy+L zplQ8HL7xh+f*zps^IzgZrq0A9($60zbr$%i(4#G43V@Ro6yms;G)ZQf@_{P<3@6sa z51?BuGqoV$D0GzGhSKc01Ci?`1qn(KAxK-RoPu;b3DU9V{Y+_9seuw4l!%R|Btf`r z1`?EAUhm(Z_&fyA=_5xc-!z5OfczvrnKZRKMoCGJ4}m6*^bIFA_k^sBiYe|1;Tjva zJB~gM;MvkY#nR*$NJSt6o4_{5r;i$)y!a)V)`Rs62nLe?p-q}W{)Gl^5(vsg(>J7~ z;YMdz>s$!K;e9P(NaIw>_p~s8ML&xN(GuJ0H^jJ$B)3v+Tg`_(m=ktyTYUzUeT!Ii zD-KKcJ;$N|*xSWef*rz%5fFu47j_nS6Le~eI3K{FY)T5ijd0=v2hi+tYEO!p%{U%5 zHUkNUZ&HcK!B4!M6UgvuLx>8$M+KBB8_Y0f$f9}1TYgz&*;iCNLl#*^6-CE!(Osrd zMQJZtDlI9JWk6b#?v0~%@2bIXqn&0d#dw%TT-Df{P;MgTWVb(TY-L zK&&pEjZ!GxRMKs6#IX>dTPox;E)_jdjbZwELkIAq}xNN=sj+ zpVTfbHs%#2TCY{3IGnh%$AFmKZbh2wj3 zaUMVNfABSZg0J#I`E^X5uX3#XnvvwI9EGn`o3CL+-A7TE^7xBme5alf7&aj0hVDgu z@pbCM17m!*4ae-)S9uElpAfoH56)wYmCQksJU^U(hjcQTE=5~s z%cAZ^(I8pW!zk(}i&Se2tD7u}Gv4}7HwJ%zQM5xA^)!kaP_&MQt<;&xBNis}_#qz? z^>BR@uzDEpgg5%0%S;|Is%i1Zke;4=iYc$Jh^sYo7*&zpiTKDS9yy8$RY*-_|E4B}a}$r0V)U;i1Ct$EPHN4}`Z3%eF3F$hH|bGoZ3%sI zUQr1r7Dp1Uha)Od0EFCJ_!^0mac&}cs3+?ynFCnZ!y-hlZ)mEzk+(sU^-7)w)eR+{ zfY-@Y!3ESGQLa0w;Dpd4(vTo143{Bi)W=0*>0Cr$lA9gum7E>GRg_d?GdaLR{h{ky zbAqqu;D`}IQ~Wv}kmvW8iyLU^&Ltc(mhXpY!+i;DxPSarLP*x3xpuv)+6<}|{4jka z9|wKYvHrOm{qq}2vU~KR8%ZF$B7lo{!yD5_F`X8FWRbB3STGsa{7PgD(QhU(E=-`q zgsdAnTZs_g-9&=Y#9lq(;PS?_+P z#9bNHRCGBu$qrzH1`}i+BF1Y<5nKEdp$N2NHugr+tp(OOFWBqtOX!KiUy#L-;OjF! z!5_E|565wUdvi}TYFkdV*jC2~Tb9%N2t!_MyJs;a+aTAUuRX$9Eu{QeqaNXoFFhRT zVU~~+P!^3h{>!4ljo@{EEq{wDAF*hHYz20CBsQ&+w!*r;UD=9iq{fkuFeIo*>qTrU z9>eQ&ef#yWPLiK&GHPPjWHjJIiA+A3j0s9)@*_$xW_@>B% zEPDtJ&ctR5ayalIxg!uHJeA&14kajTNa)3zh9ab!i3%_$p5Jx!Q6hA;5JV-oDk@!p? zK_r&Ay&;Z^gzz*$VDdJijhlw*`{qGkxxvyP@0Yt3dFj=~A6VpV#!n{iudPg8`Yp*@ zO5dUi^I6y1tB@QrRpTX8#5yyOeP3S-e$aX(-3{0oPX{cklmgJaoW=Np%RTG%T2jg{<#!Ju;Xv~=?MB@piL}D!0!8}}28cAW(IuK|vb`0QN z*`J$H)?s^zCv~-Ts5*$2PkOGEn7tulBOxp&2rRxtlABJk*3*c-S2j>hgS_?FHp3!J zFE9Q8-ATX~WhQU|B28p=d`}eal}x*sQt3Z!gW=mX*}h#9&N?Fpxry}3R}3=4^P_FO zp~SZil!P9GF;2RBmrkW!SQr#@a8yEheLNhcC-71Zpp)+$^GP^tVJG)Rwkn=N}h0jX*1LH8ta-kd&aMDpT~{J{`QEkaABexQOdav@FB zk^9IK^|DPgZ#Q!vL50nC(_&NaH}~|95$E5?$;H0GVA8Db`lB4_`ia|+#36>sNB9|s zT&Qs3c088TaimQiif98k(+H8x3n!io_Ez&u1U@iM72$Q-DNT6T7*6a@4=Lf;&zI61 z^(F<+0yBFz>N4v9<1MJrg!mmQpou~JURD#1tW2xVqD)!zYpaC$G;puxT!qRylv9pk zF6OW}k%F_YHghRmN0SoM57qi)tqj6$txrB~boZiT(Jl^KiJ1VkO~iLhC=zl;Wu?(A zG--}oXcB0`fY}1wLenB|p&9JFg{B5sL@VhQn%>C4Axy-3m(VGMy0_80DN_DKDIS!n z`71huZ=hoiNQ?v?#vXLfx(kd7aoVK#c*VN}mk7Q_Y`UA%L$Z2O8V7!#I0^YcsPN34 z%-J7Wz}dn@%vqF<{eajvfLlp?j9yW=o>I*xCN3w$8P3%b?$-w>xLe^v65M`9rPkXW zl~#(gWTjeJX{GohDyj7fvZj2W11(yVeN{v41mk}H3l4;&*il7tHA*626u;D|+t0@{rL2)xA<{j3kgdlAZKNhNRXAq}}66_U#ovqGe zJ-gGu2Q%<{0o-1-;H8OgzUi;yO`&P&T=W5ou!&f$VPJWaOE=St*wLC^-Wu<_wGRXw zq<-(E#&B@yl6hl6qaLq^KlaZ(nyIL^f`95t)82Ir5vM_}mqDOUqiO9hESB{GtSQw9 zlwn!Rw%>tV+^2>GG){=XipPJ*8q$hK!Twe}{(*)@o{QA+;79iSEgN@J^mxM`>_%C$ z!GDDl!u50>>!@=Vf9?-1W$sec`*R+^?@t!Q|FTUa26{`q)x81q%<0x(B6qN>duLMj zMyT$cdAsUfWdG!<4rY$%<1XDtUe!ryV^Q#*zo$O>mZd>osGrr|{To32+j%6tq?t3= z6Z;8(XEFx|s_a1OqGZm>Wl%)T55hN4(hGmIo{7ayYdsUZK`5O@x#)|Ti3;y33f1nP zKZ6Ig%2yh}E-H)9C=qro2#eYwJ?Jnj1 z&Zi2xze%3`{nORX{tl)74pIDSTI%E%u}d#Kf2q;WCG`DmpnnybAoTx@(;0!jC&C+( z7~!?_N+_{`+J)UJ6gOcrCam#f?3HFa_A>3I4kez~jjS~pwqxLAZW%siSj?dr!(tlo zSDF?1SDiUbn`e&q>+?0SiQzq1qg*6HAil;M2q*OlWT@3`6ykjU-84{58elECP|PER zQlV!1!zcW>3)a^8k1UrPKDMj8Def}i)5wlO2e7{~Ft7TtRDY6LAKoU_4<{C*67Wl~ z@Czr-kwr7%UU>zoltke*+*h3a!K`TKc(Xx|~$Ty1q zEsN}>Do0me!Bb;3&iRhW+hib|Jpe zEOVLpV_5{=D=`lzZk0tvM$tN1RALmZmPJ^Mwkj^?qPt2VYDVeJvb2IrErhS6QoZav zZ#3ox<(u@fv!$dYFNlTWJZ-fQorKJ;?4aP&cHhFjNo2HSg~s*@Cmz9#U}LW?I8YW0 zkOlGK#MUq1%>+NpOfBxV@Kh_F^o~-4@(qwf+=z@IK#%R=#5eFV4mar*-iUQAT)WC> zho5xtD6tF5Y3EeU@o;}5&J z3z2_XIAZtJvf1TE{h}$Tmxp@0gD;RjBTCGN2;TNS9uFCQ0LiL_3A+cqK*}s~&G#@c z_WrbTAT~Dvk3hUUjxab89@^{z+*3{y5?q(9ZYRsd62`$fd;}fJ!l*mV5;a_)h+rq3 z^^Mi!O-Z!g3p1VjImu|;bn0Fx@v0aM9!xciAZg;?2o+k=Vds;=OMMudZ3?kNB2g#yj zt4LZ?K7Lc7{pF_`ZHq$t#eWf`!JyC8`01ukIB^*Oqf}*>vC1rxMZi#+C-kF07GaoE zMUfb0xiLg8(O~3B7mcI;jw=7Td+{{fyoeoz$m|R!9){NuZ}EfkgE#7gNG$Y+6My*x z>ij%(?}ae7Utd0|0k^Wsmq23RiopT#19}Nd*{P$$#c>Ex!@Hq(EaKn`(TDR7WRhDU zCX4C+vBseSOb=UV^9arYryvjZQD%k4ak2sI7WSSLQwy|(5qI;YqzAvD#FI4t+|1-8 zTv~sauTRgMz|GdOPgT#I-ADj}jhHr_Xzl36{dA4KTQ6qOKq{(ut^TbrI*kUdhF?0j zjwBP}i5VOkj75W46?<_hAG%3zVR0h(o|rO+*6Ug_b)@Qf%zxO)& z%&N8}g!M-s)%(#B9M$_iAJzMlm;+yU@5XLLz1QXu z?!YXD`$qmLI#>=D6_UpFDaYBCua9xWEe9hqlS#h5#psuV4ZX02esSZI>~Q0&vZO`G zNyIH|eqRPAy*Tp#w}JL3?khK9CHN3Ct54@!NlxVY)~n^=*kVMS5Z_I_0Z5C#@LR=k zxZi#E6bcf?L5L7`to*tt14MXtC9bO?o6N`X^7*@nWbv`P`sh1$%C`HFc|GJs+&lgp zVpxP5+56o+aCbc46*mH@R^5n{&g)2KKome;`|{3NWCqBS`{!(VZM-E9C)1b;d8l#8 zgXRd3eXrELe;V}lhptY30RbP5O$Os`+@)xog@Z2lV1wERccP&DoUiafH~q$K;oth; z-s~XmSA2~wuB78iv!0h@>B%P(E|@@q6clk!W_fho`2&P<3n{#a>vv}-;8Zy*n_hAc zj)8dqQ#oJ7wNPtqAO;iRaYGJ`M)b-|9LfuOkwUB+EH?a|Pn(pjm6za#oiuPSQ{p|D z@P-g1j-cNme;RJ6$&)wKq~V4dBwxgxgeS$l#q;O!)kqb0fq*#bj9}#ckuD>fuw8^H z53{^Po>q*aGky<`l?KmL?pfBY==-Y8S%1fUep7Bmja6bepz#a%b*mUkzk*Y~F~VXK zAQIM+b+m1l*L+M~_s5rTnEDNox?p>FEpNev1iZneAk4{FrVWRK8*vxVIKB($NLt5% zbDV&Z*}cmD%hv#L3ArE>&LZ=%?=&ecNn}0csi2g-Ovjjp68-mrFLcpNPxPC1DPDsW zX&KP$FUpZNS}lLPBEGQp8E5d)Sc1l=(P5G$iFJzfqPny$% z5614ZmRD6m!31yCzc(E+h+}}U#h)_8 z{h9D-5EVF+Z;ZimB#88?bzu^S1lxrRlTb3hSNT3BQeP^$2t?v5W-h1^k3RO5YCjbB z;AX=3fb_kap{Zzw^1}VFVyl%EJDc&=2F#=X@UXH4`Gn^oRRWs*7VaQw)fx|@lio_3 zF3fvorcs8(Co^!oL!Cd6A@GMtO-3tbTr0)UYnYC`7%R|mbGM>CYa0odP|%OQioc?s zrXv*?bVPjMBbUeHfv@D(@XNTJhhH`M#eEJ1iR@yG(T?PUjx?AKgM(k!*Z70e(Vebj zR-^c7mCdXlHhD9vL@_ILF%d^IOZhYLk@DIkCS3#b5*oio{45E6A4ArHDjp9(K738aAkLGJg3#u%OxYlcSGu0Sm z)G$SRL9g;(o!5X(Yh){Q3Qj7lHBQO*l)vdDe{-gTRQ2Pir;x3<`!<5I_2U|8N8{#k zwNQzkq!LAktS#jiCax4IRDZo|^u?e|8bw+|<9qrn+~jcA2M!60B7cqI_(#Fj zP+T%KtL()gGRrPBzDB&7X9;-*gvyq@DDYZDMghz7whbmc_C!MC>qM~uudWSvbdbn< z;<~vEtI7eZn#nM}N(?bzRhh8Jh(*Qk9jR|4448f7;%F#XKw|bbZ?TeMMg?xj(nLmq zzec?CFw=9}db9s4CC;Uy*an_aYC`saNA?VPebSzZ_SiFQq;C+1q6xNVu+|yP_!D4n zmPUsqDOaL{`!A>3>}@d62`5f|-yuG2(DPE}(PwpbfBUSh;Rb>wM9(F58|74BG$TpL z|9kYG>|={~Czs(@81N5~EB2xB)#3yjcm_tzsPZZ0>G|mlE7gG2M;>1i3Z@XQ?@qDk zQBDOWL<3oTje@TbwrIL9o#SjA)%z)i@ z!c^gRH3hYB2`G=|WCU@Q$Av9yp-yA*!V;qPi9JS0->r|LHIk|qv1lU6umbbz@YjI9MmGQVUC4dC|7Art9&hQ!Cycjr z_K`T7_ieG~P)-H1$J*x2hRLhhZp*B5JcMX;wewOZcGlSA;pZdGN*@s6ml3}o6%815qeSeFBH;v)>4S0Rlmhgl=Sc63`@da;y zlD3Wt+)`xAd=z|k-YpwlX*ZDJu+dTAHH(eX=HG3=>mySnL%}@K(bH{^ z3i3i4YYdr}w({9B{ z7$t&H_}L=LrA?pb0LyAe<3pSQwyp62h7l@5^QYmG-u=AcJv-4FAlfnB^uLN}+wg+f z_h2Kee+k6Yo;8}W+ zXu$K*SBF0cqX(A`K@$q(yoQUjBf}=%m%Gscnxwj`&Syssk%svQoXl?pfMz}W9pA9O z+3!RGF;9YMg3J7uXF#I*jAn8$;atKslwp@c)>OnO^Jk1~|WG#$VP{%JXYQRKZ! z48Mo@F@hSi;$wAE-r2u+JKL7`4*M5PV)$(4&$g#c_%#wfxf9}A1Ad473n8ACesYlk z|B$sd|83yz`6ZUN&8P@P_Bbpuy@ghhWFQX$&OwrPM>|L(g43Fnr9{#L#XZ```K$b( zbN#p`kcQ$O4?RWPAIIF^jA)1*_mJG5xLTxA4O)EihsJ^X6!*~4jz`|GI4@0}2mi@l zH0t?ub9-hhJfGe$PT7k_%%$a=Iu!TAKNNe}OyqMH#@C7!cvr;)Gir_D1M6ch1U>MR z^WBYkEI)Va1~5K3;}fUbZM0#Jo%5eY%zs)rP8;0CvD+LR)2dmX)-IM?v0Dx*(quCf z_syEakrsYH+TK^YakQ3I6Cqna(F3!dTgMVPj9HI09O?O~Yrc}keP0Q%S~rccc_c%V zHrO#X6I5q^X}*X4c4hptPW*HyEQbuc#r^PiLNWS$FO=o#xf4H_=B~zXjhJrWHzf*w zY$(8)uQOfvMU}@Mk|(hYP={sfSm5P+>_G;_Z0XE=?7O?z9zXmyljqe^p{hid4cs{` zaM1GwX-B6wcP-0Tiv#YkS>By7jAVHY;R=%8n_-gFMNc^&zg5o1Yo9dxS|Ixh{xJY4 z-)jux!Aj$Tr{^oUf3TYAH_rjHRKi>-;tZIk-{RIk4X;Ja&0-zwXTa;Tww2)plW6>U zY7F&L@|z0Wm`WXwg0B#Br}2ESNnACF8+!Z+n;3oMVvkz*$Tk`(bTwLDM3<)c%)0^l(x87^h2pASXUr!@a>Fk3j^ntu& zG8;eptI0-FUY0PNPRdKO_*Bxr!hmo1J15w{-TsdAK4Ue%ZxlTyGrl9d;r;78TRvc< z_bVTbB17W$*<)t^S2IK8`rQ&6WO;-bOJ%|TF8WG)v0cKha=@;Wu*o$QCmOJ+z{J=B z&0k#bwZ1oturmAm4_Wm$)O7xM1GLFaOrAd0UKy*wd{hGqC0ni9hR|BQT7RVwaoS( zBk8Z{Qzv>z;IRx`$7HLR2Z%2{a*jtMcIF8@@iL^vQjJg$+5PnHn{TWu{L6; zi=R5Qk0oyDgl9MJZ~Ao!O}{=L4g6skDXi>cN6j3yvLv%O~@Mt9X*e{%-S z_9Eu`=i7MdxjrYUgcECDGAS!@cH!Fzec)t}e~kp1$VTwght^w|RX;tXSjA)SO7773 zQgJU;l@jC_io%KU?Z>wxOLH{H5NVI4hU+r~lU6OzZ3d-zO-`AE@%zn1U~}+pDtCW1 zz>&xhi)11~Ms1Avsgk?@^MiKxosrI!R9l$?S7ZbGLtb<+&BZS*zs=$<*~;Cz6^_rA z5-yaLbB5i7a}CS|PmQ1HY{2{uSXB~Mwb*%u5bR|%+DtRQLp)VDv~o`Bm({Ez@6zNC!+Mv-H+;a-i+;I^eyh%iNZQ|N0_3uf znm-Mqd>qg3SBuwgW`ewNzs)EoL9S$&o&<@ozZ$*}$4mGP;wlM$z5(Azmgr>zcMcRv z!d&>v@nYK9JYEd&2KmBiL<1>Xj=4U8bivd3)&gIKx#>QW40S|SmCrE82HWxYnGk)) zs(8w->zLj%jE0Qh=`SfZ@->EKRpf|MR@ue7?}~CaAMihhK{-M<9x$a3z>uis1>y~WccDQ46{jC zXZF>D|5Bdn7c;yD%5#r|cV!3QX?a3Eg@jq;fLX}$1S^ziz+7$O=$?O3|JC|W>u+BF z5vnD%{?oX>sVA@eU3Dt4c3d-1ry0RRwAG`2oRE31jUbrLdoAD>Caw{wR70)*AQ)lK z-@}QI{KMd_!H>4$6P?TlMv8fd@`0Q5lzd{{{^(Lb?)*ikpqHVEH6TVK(*|o~k|=dC zqWA`usD<~CMCm!{Y9`R_6kHPhsJ1lfw^Bj0^x&d3PJ+4gLCYJ~8`G72xorVA{ofU) zFqd-EaLn&Nnc9tF9HZOECh^eq4EAAfuvyW-y729UeaRo4>Oqo z>v*L#UjH!I=6RdrHIIiq<=7u@z;Z6pJZgh$gV!Wa&iMvHrCq&0rA|yQw&^|HA+^J>`&uO)HNu9BKA2B-xQP7d)wtKc2#{YVR<0 zXN|NboNG1J2G_>gek46H)tQd;gsz^y`GBa`{5M}wan*?~DiUV$pR51cezb`1uoE3R z{!Fz=gE~nAUemaUfy!w?^fiqr@DV?f@FzRqn-+V|36=_!yDYXw9-mR*w}_2WC%(Vk z#^121%WdFJn;He45R=YUH{j9H0DIG0%G>kG{yRYWnbz=>cP3keaIS?C zNEg1&@wI)?`ahx}GNonIj`rb=!L?)YNuCazDM2*=G6~T&%fJL9L}^b4SkEZ|IM(PS ztd6Ci;lyiKS%Y(Ae@R|DzFy1mfjf`)hz~T08FFlUF{I>%JqbD<5}rgnc@h_+p7tcD zz=7XTz_nvfCprilx_q<8;eY|BK@v<22!8?XU8b61GWE_fPWA%;u)a<>7q&)OI% zCj*Fwr`ur5si0l>{swv8kmM=P^UvVEe|4M9JSU#Fp`Mm!7oOq7A0BeC&_xfYy&-us zR|h@ijTbNysZlHxc-b4VQldQ4fpW7{k5nS<_G4_6slXsD?niT=?84XPU-<~K=W*Kt zrcC5=BjX!HvE4#Og8@FeJUlJOvkC*A(+4}w2HA!W=E7IW?@;F9UK8)$m8UIR6gu%Hg1_@|%mRh`f>hT_F(~{#|cIeE8kiHEui}`DMQwso$>;wEIm32Jdk{R88CZYwN>;)0BU6@tNGp%QlIp2Qb)q23V(lbhjb5Uq5X8@0!DdRICBt$d7sCNQ+2L9y;}b z<~v=i56$90GG|I3F01s`2lj)Y5BrWFJlmxY1>E0$3@~E8^DM*J|9r=$--2Px|2lF0 zr3`pog*X2Vz>bNj(lMnEI-cj)&)Sg`k``zmIi+764y~a5teiJO8yK+VpxGaUtD?3- zG`TXwz2gNn3f}#I2PoLIfc>li-Wj__?~JW;LGm2FcxUWX31tl+V95|WWN8n6+2u^Q zCFP26tf{NnipYpd64jEsA`A&fP>N3jpq;U|-0xCXw|$Z0!4;DC19VHywf7eW*s|W< z^$+YX?92MOX^G8tXMAgp4c5Ibrg%>uE_EiS%z<2QzxFm6?nq0faj~nEZ_^sJ03oQh~$7zJ0IBGZ(&E zzgonn$8sa{bR+EFHp@oXsp)Ps;&N)D)7OUI<3xrZYrr=)l&_w1S@Ys`1FR2zDPN7^u|&J?jRxzO zs!scl;l1na|CKZ{Y5RXO(IC*qF|+5&n{56Y^T&g1JYDn0l6y?fOC@mfs}%e~;I}LHkE{_d z5@M)Jy~0EX_%{y)><83{r)D$Po?dKo&FQdR2msnD$|Wo#YV+c9$vY2x$sa_1w`^yPIA69i zUbn-_%k&K)TkoqrRwIsVJx!J<@Yjg%q`m!qkwTyCZL74mNo3UTv>}&Mf!i|37F_T< zp&yr%8*>6RhQt@o`EKh8O!AfDyje{0G>tQR5NjmP6!H)sCRo&P$DPB8*>{8FPW`BZ zel&G`y!n9}yyMMz%8H%EXc|^bb1OoAJ3&t#&;R9PdV1$W`wwE%_|x^#B=;Vwt;X{R z$?blZX?0xu*W>LJnLz&@Hk{QFZ}D zm8Z_xLmtAGpz(g--W$JcVo=hk7 zlU_EzT~4S?4lno}A0L<=*P^`$dNhgM@yx{g7e=GU*#@2w^mydiN8>zYt zriEz--#yr-1sO(f+f8JNLhm~9&XL^4wqn%}ZiD6qaQaio)?RD0K?UAzxZpeOS^L&s zdLWoXV?;M<(0lzw=B5A~j&ZWX`Q9_#XV3=%_tZfE7aC7F;*BVx1sIv1l7ak`%40C( z1Si$#oR{%c23*g1FZ&F$7^Y6cph23z*2tYGRWagklBhQqnZg0*hltuj!K$MOfU>+) zU=S7eV~1SA5uJalMc*TsfBke*%)c1f)Bxh&QwQ2jQGwA^+xkNOi4Z*wVEE50u;s(p z&o;#d?sQ9B^3XYZ#OJN-iTBjM`FZRk4AgkRM=w9ogzWMM+T(tw4tYvmbm38dy{ z+ThBmz=5J6EfMxv!XGDTooc|>NjEr)<-Ito|B)eR7rt6Pa30eUOy4T;ej+2k;~JX~ zPC>ukh94>DF8C7P>v}QBDhJ3qDI0mjvJ(xERM2jEX#8=$kc`hIJK8YiZ$qp_miEWz zG<@XiAFd`LYcFI2v+nmMeayjky3tU?;On9f!SAI1v8RWp{X6(zru9IL9?y|XJF*t_ z^bq5+BjLmoZgmYY9{9@n>2Tb&02zPgcP1Ik@#P|;odHpK8U;S`NhCifJK&o#v!}b= zkLWVv0iWoN%_^@Iore*=r9Cli>HnfV_V=3kEK)jSnewzpN!fnlYDEX8cdeA|e3I?+ z4Lqs9knM2dvz6_mceTin_B&Iz!{a%|BrF6*0ZuK{mSO5nk_|OH7QT(34lY zNT1!SU7o%=)AOlc-;(siS{L%h=uD(g+~);0j>hnR3*OcAL=4=B<9%OdVi!SAd;A#Q zm-VYb{46Jki*!q@$fo~txZPOf!S){gC;e>}?;OhTYsC@cSv!t2;2X}ti~H=Jw6Q*^ z^QGnZ{o}7>X5t#IF!jM4Q!clmcI>=ir@XaqKKK%(oF;JJ{(`QwH6Mhzam)ujW#L)^ z^(cXgHW$3U4^y^U6!I6DFaJz7Q~BA;ZFzB~4NW4DY9{9z{=$hb->jv^gP)!B2R`|) zl4k_`t@Hnz#D5WU1Mhk{5cSJ(qmg{kzoMQ-lnNZ;ooFGd#t;vDN&evf|H3lz@MWfq znDOK>MmtGSZKeypl)o#aui-af8_K!!XR8BF-#m)_C47vvcg`P>@sA%p^?j7`|23ZM7*tEgph~=iN_rqO z%|GHFitJd|H0CZ(3mae*r45mc=Y~j``?-KBEH>=zIf#0b}S#8 zmrEWcP}2T4fK-lTY%x+sx?az>#nRsMoIPsn99YP$HzH>9!Ow7}*K!%MR zkT|;uXAX!5yiSfE5B}gGPb(^dg*1R9#Q35j_euN^bp=KD>4wvDRg(k~g^wjz;Q{CD%zOaJEQFGDGv++v>9YR)bFv7bsuLEPCUJf@nwQep%%4o8j4#slL;!%cEXWV8coBCIo`(6;l+d#?Z0dw7(br+);V4EELP*oqlFGF-u};4@e&PN`LlvIgW0-SkZy)aj6vlm7>^g#F3Qa9^a*Z zGH4IuT;+h3FJaY+AqFgLfU_o-jHC;{&g##r-+(C5@+$_zj6v&nPPbX^JZkG!s;vgN zTsKMgTx*DDME{k2>!`jbN_@TdKctRk5gqBk*Bp|z|HsBRVn`bEzrgo0YEkYFY5`x# zdRodZ8ul`M19>KW%@E-r1K)^v)t!H6gT9^9f7Y+3zV^`nQn6znBm2QL6Is*Gy8-pI zFhm4vJ})$pg#>qz{KiqExOm92sV03(b~4IC94ObZddZ`G>%X#5&U4G}=?;`#_-g;R zK`iLT^SM&7R!(%+O|=a}A9>rNTEm@gwB{mE1U-HO|Mu+m;NNO-q(pC^MvsG|<~(IB z>S_MD<|&B(U(*r(wJ%;n_k2^3C7l}9W1_)7j@s$--OTlS&v*^5v+vzS;=s%W#6~ng z8fP!xAC}4%qW=_Ah)FR~X)pvpJWBwSMWX`4?1mGQes2@OnJ-5Ble>8TLxVUx{H|(0 z6nEKV!Z^}d%_rO`|8*zft)10K{nGM^^Mik2rRc{1bxx&eB%fkX(qDBMNqcy7>#v57 z{YKIserA%b28N$7#Rl$NgN&kIfcGn?Kv#>cmBGdt24JT*_mi-B=dzZb`bFb8){~@2 z#2R3YAjBg!Oh*tRdjETT%JhBaBJchi@Jv6+4Nt|l&R}sZaKK`g(^+5#8n7b#1BZO- z`BWE+XtOx%GZH^eJd4|Kp|^DL?hnCmw9Taz-dNe{K<@jkWJK@I^lIS1j+F zCPt&l9HWisH1Wj$`7arEfdjU=zHop6+qGuhHoYZ%ZvBSg$2;KDsDa_YPyBrJGn+nC z&|!YoiH$#U8xLP#(r2}7qmbGdW3)j9-fg()({cZq_2plmvcAxeN3Q)Lgq1nuTKba9 zFO0|ja;l*w^bH1X;lw^yMAsKB&$utG`XyY5P zqfhPLbKmdc9TK_&TqGCk!;ev4@7xRUKEPVNd#|BAnGWL#%1Q}E?%bojfT6g5j#q5u zC{Upkn$_a>^k(#XjJD4+Bu6sYCEp}J9gkPa_;<61|BL+F?^zB9IuNdw2qXTDN?OXz zaT)P%iK`cX^q|#|{h9i{(Hz1u>i$f+Z?s)2*1W4ShLAV+X3_?bp{KBfo_xN|Am`-$ z^^YtbmD`hdXu7qlGG(sKCJ+8d|7pSZ?4LD>+vH%gF56ag!||KRt;x&-lfYWVyNbRo zO5(rzur2!1RbX!VdTUUPf_FdQIcOZjA==PI;#3Frze*_1{jYB|vt%yuo18LNVw0$r z+W%^=#G0JCw&VnN z<=_^t;KlL&;Ftve(2f4}t+D>{)*ikk-Fr}-jCg-#T~TaHI1O(c><{G7#a%Pv3GKA3 z;h$v&<|QZPgnFNF*RYtJP~3A@4T~B6wm92R4`100n#mPisfaSyaO~?lukh6oApg$P{tj^^G7bNfvSLodU>Rqnx+WB{K*LGY< zUCRz`73aJpdzXpcb?1&@YGQQESNRUH9w_FzI_Il=!FaOsG5pZ2JaY%PQf#%d{YBZz zY1~4YqlMyPkM3P6%XUvy^zwst*tn9De43bs81v?_x!ojAUi1Q{-t^)wfD=8!x$%l< zgDs+A=u9G!$OF*^6VdW@cM@fH9)-X`9u8K0ITI9%rENOb8DcP>u*zpj;j#~TQO7i^ z3{9W!4_%Nq0h931v2_iqWl&XkJQQ z4g{0Xx|<)-E2Z?xYe)w}wQK)y3RmN@`n7#yoca#^l)A~WqF~&8^DNzzwideSp_tu# zOK_1Z`d}z#PH;GhZi-gS)ZyX4Vphv#x3g3obA^`OGT=e%%OTBV$@&5)tNz$b@m0P_ z#b6Ay9r~$>>8pI+EYFSKNmpyA#-_{0p1NE&)=xI(t3W&!z;fd!1jiwqlmT5y0rn3k{`|2O!9G4!NJlwzM*vClv1!lY{t%pTQH6zdOO4-va5fyC#G z2!xB7`9Ri-`P>IEA9Q2p6Mc#K)lW#~69>TjBrrc!F`pT~@?6Py@@7QFUN6SeBhoQH z=D*DK#n%wmsbE`e-R|DCJF z_LArS2ljnikXu=9wesV0U1#5~L#*xp*S?=2yR#Vr2YDE(`Z8MCcV9&*^ujhL#YL7q zHwWZdRw=Cfg&3}2<$0*bu%DBBx~Mrzi2|GYh%r82YrAZSy$93StKllu9IjGmxGI35 zOeIAs)Wg-~w=s8qyp+2$^I6Fn8m{2}>?m4nbfu7x#(#!YES_nVp(7K~krLIB0_wR36-zcIxHOqmn#|UFtEAZ?rH?jdO*mVct^~Xzs=oCyI`qho zF>58ji^NaZdcAy=9J9Er?=vtxroEBl6-0n*(TSJi}_9cI&>p>%Y$?m=-uTfj( zkfm%*iZx`_XC@~B3O3h@p~~h$&dL*eb;$#xX#M z*uqDoh!L;7M#jCVQoJbMCWd_DC0_K1q(5K0@Da<_oB}yA=8Lueu*Wo0zU=vm8qaQ> zVaeG3$FqixjAzBSFe46_#f+E_g#K6K*^blypU1O%E4gb!p`UWT5?UjB*QN87SlP;} zGj%J2R4ZLEUs-k9|Mz%ySp^eqF9Z(b*^IwSilwUYtZ0#8Xs#iX0=wdzwobQ7p_)04 z8OsYtm@}6DnadG9IpD%B_mk> zzwCbmTX2Rkf^FXAWnvs7*rXk7Wqz4!j9?c&X&V~lL>u-7agjPQQo*=mrdf7|(nPX@ zt$we840A6m_M?I^_iAe(OIX6}_{($_ssn(GG%^#_)T@$!$q~(vuWPL#%bIo-v!|p+ z9P*SVCgkX0Y{md<7{h$nF*B0!kdDlZsQ2VzEPOyRs1Cnj{}V7X8jP6{&x$T)#^fZI zh?Jd?T$!9)LRQ}|HonLFxO$GB4{ds!m|@W0h)*@sUfp2aJyR?`G@+!8_*5_7lDLEj zR*a(KMAEcR;Wy$_m8Hyz!}5p~w6I?SY=|4#C>Tb>O%b=8 zOa?NA13Lb;+!t%yH{i1SqDFo*uHz1dJ(IkK`$%rg{mCR6x{GJYE;dZ1E>cMBq`yjP zo)2oukQlP}9fU;65D2-H!MJRvuX2m?;ZBN@>9+2>iOD(BYU}04WLsx&_<~kqOoo*) zDCz4Meg2)IM1bx0 z43r_dm_#9(e8?sT$_jM%zPgdScOxWUlJcX~vU@aIQ>@HaK@l3Wi|=w5c^cywgM5`Q z8c%jUfgie+sj`*+Rx8)5R^(`1;b@__#G{+@6al9zVa$gx;*X|jKMeu(ZYc!}md66m zfUFW`N2r$t5f9vSvuA9eTME$)gOZ%FmFONlvzY0YHCfYb6=p@G&_p+ywD~GXC$on&m@;pW5F4I(qU>?cWuEUCSa`9waXv1 zb(o@Tz6xX2$(l=Kt!5l&hItV3j5yC&+ka#UNtNm{vQp%oNsCbFI>HY5{Slkl6#%9wbORifxk zR^2zJw8D(oWGy87nF|Y0LatYyCTP)hOwc&1lUF<_2|BLqg7{J*Sz9JFFM^=jgwhj- z3Ei=f8@m4jP0e57{1bwmHlevtdYK@dlYEv~bUcxfmUY>LLQ_4K1A$cp0ojCdM;z2E zuj0;I1bmu^L84hl<-z;-F{HBrKQ%E2$v)Oj(0x2Y^>G4-$sBLXoD!r6dTPB_4;=zp zRm>#KwwimqrVI3*`xjb4fff?bRB`NaMA zvH{$`(25d8;*sLzBqH%jO=8Bxi^LK|ZxZXiIZ3>ldTg74r)%(=NZd^2!Tb0zNG$ME zllamFOyWJ~>poBZvq54+q1z-eL5fOZ_0U1$4cBsW`CJ8g3cyF_ev4BwwLM>MF1!k zv1^%(MNo_&+H%LN6J)SxCEgK#Y>Es^+?`C1{Gp}E`9M{i_!u-i?}TLJ{_M( znu@h~J37=Y%Zf@6izftI{K5Be_o-++miU2RhzC*Be`te${ZGiA`6EKRQEf~2Z{Su(^7F)P&%ATKVFbN0K;RBD3WJiA<76 zW@J40*G*$0!zQ-;7oHeJ{;}fMLH^}B`M3FhAp8&B7L|X`57WYb$+kB5*RqNE_s0pE zf8Va~;2#+ePP&VMr2!*1q*>xm)^h>{m*2-isrU;&M~Vg*8l04njcZ2N{|xi-GmH0q6H$m# zt!B?+v0ZbjwBprhOT6=TBq#2c({5NIznHs`nb9jpGQ%(CEtmN=8wMHqHla454%zvnvj@#%EpZd837QDx}kHz#X--1k;AeY|S}_h+=iBuU(T zH(_G6zsS}8T;{B!{aC{uJaenj{;f*BQ^k!@+wUvefAM^65BhQYBxUgs>B&l{X{dxy ze|?T6)Yi(Z_v$}{`4To=k&7m&n3b{^o0+6LkTQr&(yO605ahS+VnOb*Owz4JCTV(N z*R0G&NdWMpcbouVWs=6ouHA7ScWv*TvTKwyBV*>IW41>olV)<+;ghAD;lfKnTndMY zl4epS1i4qp_oQ6U`TbO{ay@6ls2Snovdf@As(gmQhPM(e$MZB~6@pV6Aei9PAl04U zvSymA(i!qZ<-T1;mS-o{OqnUEW-p?o{>(?ZB6{%)1RA}#^bX0C&aaswhlvwR3dH(f zR3Exz&Ggf9UaNO;t9IHxGJvfAbX-gl<&ihC(TV$Jq^13JD8V`%+~LT?pElM@ZPhojW7Z(M5Ulva zXlBK`w@X%xyNMbeLJN}<*%XeDO4@+si(=ykJ~;TLWmJD4LyX>Iw{X%T=~ zNl;9FwUtRqy(jN$>=HRgA^N!2OV3xFDaA9f?+q``&?C~`ToHPa*>YxA8 zK z5&3kHi&^d5oneltU-$lh8dD9k@fZ>X(Z92y5a{0nG!a7o$bx$()$vGY=T>mmiyHkn z>jeWUTX4S!?^PC@$I^(s2B_q+KITYTi+}@|v{c4}U?h&cNg4_AdcBhB%9NoXB@)}} zBL(elwQP;0Uoo$iWvzF*l(hnJ8KyT%zV!T?tPy;*^bwY1)uDv5TX+Ie_$HYQ*lu_H z0`s>6S;9W_um2SBi>7wV+EK`C1TX#uVFoYy(v%ClNH3q5BzGI!Mkqy?@#|z`xh6rQK8cmrkw(hzvq&%c~*@rPJ%+t1Q%QTWsG_(+P= zemo;jcw2`_Zg<&Pop*cF1)2Z^gA{s z3jL~i-sWu|Iyip2=y&F!T~EIaB~j^jvqirfH?%>&gr}K)FO1Uk>r>et`h9$A6#6wr zqhH7UA6I;AZ$j78Z^?C0>DS-V-*eWtLBGa-F#WDSThs3?%vtuYzkfL;3jGQXApQPd z$lr7S1OIW%!l?8+%c9@DSK6Ro^%`maMr!)qfoX*Y{SY%z^D$)sXP<0QuogD4tMXTK zk-~_D?U#GHS?;B8Y>@VYDKMFC$wI-I+L) zHS!ruDD+gvds{VTDCR!3h^bDhHPz|2>$gmGFwn)&REK1r^zY0+0JG@9s#}kh&NR7- zV%OS8ExcQ<7b7rLO0Qh^IO}542+~DWR(zuj_rK$l;eLko=Qd%jBv?ZwtZl<3EG`=Y zSjx^i<6U*A0S_~LqNUxnDCsKu+JeMAaIDs1u=js}8dG|6El5 zODwhwv-rjk(`8RXp{nGDKZKe66wf^ErDPO8A|)#jnGdsgeSNYN?*fs9=?TU- zGyX*JEsSo*CRvhIhY~wJSWP*9QRZKrj1TTZwjUU>48n{l#dpP$A&3w9e{*~gi-)FD z_D(m`DT|gr1p)S&SD@I;pCYo5TQj==_`3<4GV&fJaZE)p5HdWr3Gh`mQ;#smkZNOl>%Pj(<`c{@p2KgW$x~&Mw^~i^ zT)<8GD&FAUMjjP&jPICIz=(;=TWM>y(VZ@EYkRT*+`YYXrT5vvS@D>xMH(D?vSD=W zC_mHkZ^y8F_m#bB!{D%>*=rGOaFpoZE&_>4p2?!-^5A>ouTaeTXZPOvA<0M z8qR=JSruSO{jkR8`A0hagW-pgEIRyyZiavG@H_~Z_79)$rpM>s5k8*&VGoJM6N9vW z5X(52`e~n6P|Z>sxBUo9N2{2ohyr+@uZ9TVTkO!Zp zadCw%Z^}L{j-SAcQdY4=H>CPOBr>dq9-%1^CH-w=X^ga?NBWNGp#4FOL-wP`xhVM_aSbkmpXNL+ZuEP~ z>&&MKP=v)qB`=GqU|C1+kT#RWoRu#vCh2>$T=ZRRT$U!2l@-1J>SgcP03(pW!H0YA zWy6_qJQ*5Qwi2@mvYmT>#p#bIWLWDT11wsHl4s6oAmsCjDH6!9$4MYuHVHsfRKx!8 z^8XIAtX3Uh+5TU`f1|9QA-}z|{$Cn1df5PG^mp^M9h+G2oBh8+r~g;pV%f1a;>u~> z{712;|2GTxdi#HwitDAsjsB~>xK59h|F=^5f5*zPC0DG5>u>viw7%&&x%0+;7LSrx z_SDECMjwn#C&8BN;1q;KCnWfXzOIwQeM`9h2{Z8 zmmoJ0iufOhgo^(HGvy1WI()%syQ|@1I;MoaO1(9ZpTLOG25ZA*I!-pZ$ZGQ6S8|iS zicO?-9>)fDFyt(qKzr8dVakA-w<%LNXNP8Wqg06O9y|_!n%3--&qPhpes!wRu|7zQ z1T7y-WLfVidquurs&`%r9Lk7bEte^y=2xe&q=+lFnK8WxqlQXeMoq!W4vp>ZN353Q zh-}(zGo(Nyf_Yp6_rbi^$`C{vG7VPVemV%ux-n>E@ zvQvJRhK!-KKHL_R5>X|goTi|Zhyb7{6K48fj`PT7^szKV03T#gUJClQmQOQTGV zJein-WJECW-+i@0oCjQp{S(>wGG|BR;F`lag^Fo*B>8I2j{a;ufkrH&-x%i(X$ey* z4)Xf_!No}P$8ne0!G!~|1G5HL4eeEf*jQdKIm#czy2@5{tio8%5I#_qA-{z|d5ztc zh}dWqbIeZ*N#qjC0)$!kto6ua%?6EPBGn!$iL_N5ak(VYSR#^4Zl+ZylR8f-8nA|0 zGaz5(a}o~&UEE^#N%(8wkuj(#*$BGL|RFwm4C}B23BmI zDp^q{S>ZUZ=&yT-4YVFnS`*0wYdxax9n63i50?z^i+*#70oq^E<1yu3BWCt>FN*`# zdM~0eJ0lGa)_eCw8k~rew8NR|6x|)jrUetO_AwLQnj@KzMxmJO(9OT`Ankt|+aJb! zW;sZ|X`&Y;JOZt;wm->@y>2UrV>pB{ zNW_K2+;K1~z+Re6IP7cJE&E;GZ0UBVCqI^vB@)nhcj<-F$P$q--Z_ly4__M#fCKLH zVs9ydfgQ$dC&;|Lu%9%wx#F=)ES?zSopC;#imzSQ)8b1N2+uxV)cD#hym}GI8Zt~W z25!XHE<+A3ShE+5hi#exe26t;+7V#ObZ~jxUJ8lKX=3@m zcZbvU5!d+?%87{K!7xQYG_!`hPiFJuWH$0^3$%T=0(lq7{(K6Vll{q}i4vs3Ph^vk zykdsO(4)&jaGoysskKJRr?AChBmJ5 zZrR&h*xNSFE0q(N;fYJ=8vt z8Shy`VH@VwVz~j?%z=q8w^#s(a$n35vTKj`pstZ$*jx3kOV3}fKnfrTm}RxH3R57m zPSV<+to5#y(tiW6a3)<`O`M$Bn4V z7&K(?GKMu|93y+NrW^MnQT3wpdx`U{^OuY3R38dGmoYG^cv&np*jN^el$boZd&WtN zMQR>x8RMPLrNv6XJ7Vk|UKWcUS-$o=Wo)q)A7ogpw=gF#jSaqA>$i{ZI~BMf7g*)@ z-PJ;i4UY9&bN}jRV<8fH{dU^Ngd6Q&eX<&ed9L4PNPNCJP&%1OB9oDE&*x*P55c&j zG&U8yUC**~;)CzP;b`&o_o!}Ue7zUq>m2n{@%1!g3a}3;e~|NK;ZsS@zq?4vIdZL> z!S&AV#Y}TrzOwCIV)^zH`nKI^qnn4xZm#;3yV*;1GkWNoomwjhSR9e3td-d>u6{`= zLT6I0bm+TY*!U&{%uuY9}c6x{0g(HQ_3=!S1!zc&Ei%4n>|FW;F|UPjTtoIs$43WMEz z)9U7^*Qt^TJ((s|)qX&48B$VFE z#V6j&#|Pdkz=wK|9^kz~e9(I(_{4iv_`rMB_)zcB1H88qAM{=gKJnffeBixWe5m*6 z0p6>_2ff#TPrTQJ54_im5A_~Bz6p;P^=zcV z^n85nC%+cr>wE9APLzUl__c8v%TP7_sxKq{(LWf?v+;qDOQBMOhqe-|%)<-oGfLW%Biw0dW}CaaSMlf>gM7k_!EnXhWL zzAkI#qh^6!Gw_D23B$0_wm+w%6T==Onv(rFhrclg=KPDu&YgUPOT9b!_`^qf7@@>R zWvOQ;sW8FcY=ITfGY6+YBp>2>`zH38_p~Wj+)5u-M-_i%5aL+qT?=*bfE=zHs zbT)?3Zi=lJ4wC$Hn)@AtEqOrXEp32$IkrL4ZUEj+vSr{^F6O}j1Rsn)VnpgjIp5=3 zkcXp}q@~$FWLBhh&LQX(hm#Tq)-lC{T1hh}&@&=pIkzHJckczV1{DR?)!=_yt?!+vYi#uODPK*` z0_$q&qrSWjA7q%)s@Bm1d^F&LmO)d<1k5({;cRr_7^tY!hbjDxh38KBH5bpvz0Is5 zIoh_2UQNeo%GvPyjlpd9EneJuDIiNd^}cS4F7MHtdR?b z!x(6D@l{aPa3~9uhU2LYeoselF0a)cpU2<0<7M(I3Fe>WSE9i~@+;9G^(|H)#s9VZ zpsbk)Z1Ml7zC`YfT$}krS5Z@$hvx6`z<-t|B_j1K4T}Hj!5aBC%ST{co&4n%3T<4X((A*JR^$)(8`JAO z`IYGPuKY^$dPjaGdc`-I^!k|}xac)uvYTG(>b>YSp+S?uqSu(E(l9ycHIQ3jdVxBn zvcF7=dR8z+9rd6_J||rPW!pom|0C{O;B2hc|J?>rnL4?4o319EYEqb-Xqdq!GKvfp zQ;CVxBrwUKqKiR*%{l11}0Vu$7_7)foRl8$qtmFPRX=F5<;Rlpr zagJ!K*Tv;2Q!3ABd~3z$84>d|nuAIp11W2;{tu&xeYHl)xNQ`38MrDlU)bQf?w0`LX}oPLW3Z-)Eoz!?!}R{5ougD5u#5@iO7GTkG}ePeB+T$wAa<%x21iB*)X*Jx2D`IO%)xSU5!sq7=2Ne%eDqi9B; z^X7NVU*Bsqe|Lcbf4zld*$&tQ{#dq~q&3*T*S7MvODS-9{Oy0k&flBDAH`(TzrS*o z@M-w>C$APjP5U4*ac5R~pid`0RJ3h0xCd<|u& z93LHTa4&{bvzDM~a|(|Bus{FdBkdOVgK85?jcqZZHVkXeP2Ar`=c@sKUVXagv)7+5 zRjnlTSS9uKABsK1(v=MYQoo&U=UV&6alT3``9xV{`r-oq+?g-i_cfpD`8ERuHE1g& zBRpZFW8b5sHQ2td94&_Bo%*rIrL{bLANHtK-&>E6uiNZA=cjx~&2n3i7nU8Gv zS~I>56d3~39xSDyHyJtc6}M{3$t24$5;#gakedWF)4jeMM6-PI8_nrVP~ddB zkj&|uLNcezgk(-vfz**Ydjt4Zk-Fu#;2V*;bS&pQ{2%c?1%MdR3EUXdKAjp9=uAK zty*37)T6TKpJ`8YyKwfzYR!Qsm5eM+85w_0f8Uuu+t*EJ>iG`_1@H$7$>28*u#zjS z!K{3wOu@^_3!`L$<=IyuqHoapsI>}5u6XkP>4Jn2Pr9GsAi@07AD2GU9UF7_WqEBG zrujXe?3yH#K#gtJL0+t3(}$xqIB4$4lDl}BTspF1OePGGsT)D_$WZsxktev;ue7}x zbIlcczITCYlSPeF--outuE;*nfdE3KSeU+B(XP7GHt`mhg_$^uEU2o(jSOx&DO841 zs8lM*OnIpq`mTPDZOcznLV@7;1MueF_g|<~MC{ zGwr3*!{;}Sy|91ydWD|meo&ZZllL%Vo@Nc18@swu(i-d^=9A3@ySmZJpcwBU$&gMZ zD4p7c`eTrPxEvKlPrjK82;fLnz*BS7XM(+=k`3W74f`Ta0%=v8Vbqrr=E~( zj#W#bsVsN;6oU>#9SXV}ktp!wU4)>k?c~Tz9x|n2ma26);U)ujRf0kRM90tk6=K=J zS*as0_HXqO&N&{{1%-O#J*%NWtade|HF&*#yq8T##dk_8>At%pd4#6PNE;=|sl>X= z-nb^2NcNVbyhXfNg)?8)uhlPWm{)?re0K`T^PRg2Q|I;RIj=wt!Rymx>(qb0!#efW z_Ni}2bG6E>jY0D!ZPaVj3ttk>jWz00G|QUC!{1X=HGd00!G7KllI^E-CHP}AKc_Ru z;LtM&!NYWJt&~-jXFpdxCNnld&sS*n*iY3da;0HEucA4yUUT^4_;iR?zmos_4howL z2j62(WJyyPlQN$#fkBY#MvCTk-F4^L5~04ZWsygacVLziNV$?oxjg%x)P~qk|I%(r zQl@et+mvI-q~M(uh)Gw{j05T#-mkkHy2F1n;{U~En*Y~8wP8|0>N` zKTuHIyM<)MeNaeN+^WJZ$ESH{b;qaHaqxUPK0SmWVaBH~R`SgvjZdt9Uz7HT{_O_^ z{Ts3z`UkWNW3DIZlm2nMCJ}Jz;Ss?zui5nP>xg%~c;7vQ{!LW7Uxxnu&k12AF7*o3 z@7SLoa_X z02?0rm_SuRkU%^LF#&Ak420KR#MdW zko0Y2ujp)JJa(1%>_D}mWCQz9(``RiDsH>ZS;^_NrpWZs0S(UelJZ8^A{J+~pdWS!UQf=hF!^7K9pQG|J6rLnH-~(ZU~{$(g#fZQ_ZXT8#Pf)EmPEweeBhO`^0;-RfaF`NIHsCtFY~t#q4M`fEUcbe<+D zUVZ7)^)kPB`WDSwC(D=7eFI=x>p6Vh;+8Kpu$@7{A9oaz{c(FC8RO@LWKG)mHgf{? zp-)Z!%VS7QJAWB_M=BlcZ!FGO&9dHhzQ**#WoV@YI)7w3)$Dct|I!z7aRxi*0_|c) z?&MaTZBx49^{Bz?fdMqP&v)^cSP-9r0)IaW$^2FSiuOFK7*7xOj(L>}7Z&V8F%1t^EAAM52ul zh5g*pr;vt%NvbclfJA37xGG8E2|=_pXDfY@D2Ovl)W1Xe{rpd9&VfKbIt=&&{)h9q zzDG3d_kjZJ1BGPRCoF&|FxEv)KnCY?SKecDLdW`raYC+q?k@7!mV9mwnmzf=$nWJ! zqkb^zuwy`Ean2ga2_TNYWqy{NrPG>4puq1!A-RA0o5CcK=bg=$hIGBn?zVAVqk>!y zKu8G6VvC(f;bgJR>hOJnvbs63a(h}sFxTuLxisN9ku4B7{B!*5`+%1BU7!$eUY_qT zJprvDnNGW3u=YB>KUJ&MOGgrKjtmqD8}W1IAV3y1?U2ix{H0{rgA({BH zpN)z8Xe8x_E6xXBS>b$)&kHw3X^!1oGbz%s!)_~NI+68-3r@{Cqt%|8Ev;))z7J`q zhFP%ApOk|$vqbvCMi7~xE}A?sNmMMA#OgW_xDU-RL7lhxDYIr}H1f8NQ{={2&^r3Y z{$=h%+TPZK!v5t>A>*jO@#~OU0+Hur@}+H(DAXnfLha&Qo3OIRX<;SBs=)OOR#_>P zV~GjZxq#UZ=&2>esVgtRN;9Q$99_56ntL1#dT`~`^TKT6V!xJVFbm}W83o7i|I3B z5izK(r!BJeAnREXICx86%A~(6+W*U@iGfE)o-D6ATeZKt3KZnoL`d%6{u<=TtJ3$- z8qy06>uuw+gHqG-6tV?kevm@?RVv_;>dKGVRDn+-XD;&Sr-!GwPDEhqrRfp4W z(HN4`6=&Kwy^p>WvA;Kquq-b}5tYkutD6LYlw9RmgZt2LJ!<$TvGkV+a| z+D}@8_tXCBX_LohrH@voXwC`BORR+73DUd=)3rDqe=_nl;m+_U*VDumcWk5H^D5If zX#Q4$0)NYeWcwQaGWg@DU350M4qnQhYvpgh+C?mnzb<()Yop%xESf#}@JCdew^-Ju z^$vet|H1LAzEi)d3kv+b{F1}eLF-c;Pme`&z;q#B< z|E&e{9w{HKW7(e=nP-sLaKW}$Qb@o)ok8Q6LuUuLd*52F=pw2BlV zy$fCC4}#abTwh(~II{OZfuChUGCv!H1V11(Kfk{S?&fjaqWvl9lNI8!VrryCZlfUX z(%-Rh*GO?!5!T%G)wbkNL)BNmLZ4pM7V#{N1*pfLG)~t3d@v}$uv18ep$52Z!~SGe zJHFI%etiCIHq{)h6t+Bj8;pJYAb)a!N_t$8?2eoGK0%S}(ze?3Ad&_A3D5sRY=W@= zze=`4IMZz_WIB`i z1UN}cJ4y?gYa``v?b$_f2SJZ~ODS)Xc)cDJSp8o zh3*yO{21!&LGo>%qrIdPFaCw4LXdoqs)SIjv>6`yOLxM)hu;?|trdP>00n;63d#Jo zm<4`WpHHXc-Kx)DrrP*jptQU^NxzUL@-ifSi}KVief~)0a7KK5_g=ZZ;y0kr9REAe z3SIcS3l#VpA|&(I^Lg;cs{ORI25%kz)z!w|W~JZd@wXDuHAtQhf^AQHd_Kb(ABU=H zge@D?Em5uI3H89~!k1x`YXV1$9d{C_&+>e?zp3R_ zcLCfZOXlEoXTBYzHF&;bYT4!+TfzBe)0rxE`o?^(rP%})2IhK)=R5r@Z9nTl0pGTP z`L;M4PA_=AAD?EMZ@S{5JbdF&4Go&_5j3;WINIRaf8%=G>J&ZS%Ot&E%kC{CJFyAR z0_sd6XSL@`?e)0$Dz@3TtS7D3*;5SRnt`nzH#3pHmr^;EtiV-|`|e*d99e;`C=|7k zD~;g%4kb{IoILu!g~ky7cE*h&3F7SKXTT)$`(i7!20QKcm1Rh;v8UCQ)<`*A+Ct`S za9G*l&?Ya|uPtk}J?sYs|Ml(Dn13Sm-z2A)jQzUPmf1YjBdXQqsdlUpy^kd}T}8x> zbg#gYF^9ei1z2K3VN8x0B@Rx^cUd|Sv=S)cxkR=Ym!IANRc-hV`gcBkf6 zw5Q!5!@2aSq^Iz2=u>{0!@q0)lWnQWCmxG`iV``7<$%*D`13S+A_ zaU&ayr^v>QoUm5tJOt~{iF@>XFT0m1tSnxhim7uF+Co}`i=g94T0A|k{-^eq){4)V zD=`Fknu?*T@8$tgDyPx7>492wDos-xu%lmy2Yx;O-Jr0){_PZJ{`G$ZSHbh&qw-zv z{O76ax^@19t9yUF^A9prV}HFB&BG-(AAKv0&dsK)L)pGS{>bxR{eqtVN>G^p#ew-B zlGfn)Uv8bhU$s_b{_m=TRL1;&cMejO@F?ZX|4>!!KVz!FQ*u1MXEN~jvHnPF8f{{D zpI5J5NsP^lf01gn&Y#poXFF+#FG2CG7tKat&z52MBYxhcPE9@El~3^`VU*O~6YU|3 z;QIWaceWF2IJdJ-m>Vl@qBLVqom=m?c=Y|3SGB(E2Zem%;3VM9`C5Id@sSnld_q~( z5$pMkX~m+cbmLh1Ye0W+C%1c{x6xaXFoLm%w^GC`|NPA$g)# z3(4ull|r(+i3cZIC{57;q0os1-kG3cP8U4$pPZ^#dvp;qY}Tog7IQ03Ah^$G+&_XR zmD13AT;UP4suB%9@arvGIr#JWu@^gO{9gct{gfevz@LNIA+*|q*ho6yz^HkZXg?jx z;MR(3kS<=k;#6Wsk&_XpK0$M+e2?q#7v8G*xeS!-e?JL+ICMRZ){voVV;37s6T3#s z5~(10eWxD3CRNxn>hZUBlkp{ub>ze6g_mS$es&c&LfMH%yHKhRw{eh4-%tu3xm=hD z`U^TQ%>KTGv)*c^R#w#5RHll2Q(A-b&Ce-^2v#0{xb*hXOW%n<@(kSFKT=G9hAfyAsLI| zc@RCT?mvt8Qp6~th)PAJr3dbTp{Q_m8=^f=xUX$lY*mCOW)8T;ojM7DnZM| zb7V1BQ0_Pg#1>~{?e>~~F=0DhVE@1<22fdV_`SJFx{nBQZqrPZqB zE`Il8ts0ct%%+98%-*TbPFp8@CXqGy0=e=(jr}h7^ZyUhymL#nNN0kANZ%HcHT_*7 znZ*x4YE9oKpRl)57&Cf2^d5)s=$yw!9(3#uwt`ZqKT)jv^lPB>Rx~-XCuab!2X46y zc^rAa7+)GVF1ZQ)5{{jh4C-Wv{tdQY4pi;2yU+I99Td2_TS(@rkC4pO9UwJV!{n3N zKbjz)N_a+vG0%+ykLm#BE7IpZKza3U@W)>dXu$pS@(tb);#Pf(UY`bCxrzHYHIY}W z73AP%g3UZS9Kc`XCUwBEKz}iXP6#MVrZbLZbOjB;ha2gP<6-(ooq<#xmEd!{nT&vF z>ci1bcw9!V);6YqTn!-^xoSc(a+N`9H*%+(-}nyYd0Npba} zd@A7?6~^S}fJbmu7_&n9%DB&YUE2jg{JjUc*_9y;yfbfZEtt5A=Wf@6TX2e3&@d8J zWg~X`7z2T@lt+OA9-j!wczi4*! zKfyxsKJ!~s-ft=$=Mhcg@Hsl}#-kQAz>ddkmv-3kF!jAV&Tcajy+Hwqozht#s|91e1BuE0xD!ixC@8^0NZ=tP<1rtkgNJ-l zcuapB2q-+hkv`bJlimIEYZHNi6oEsz|5dK&rXzsYO9%7A@$Ic2cueN!Jy76hnUKuS zVj-EIe}mNgtd~!UpVjh7@w04PBEdf$B<-n3dL7eDY+7}EgH4lp|PKmncWgk*G*gk*HO zfYj)8l}`$thvicV-?uQPKt3sNUpN|AVNP@o11@?j8v(^PHW2=g?BT&9zzbiJnEomr z|Hy5~O{F=^A^#VMZ#UwZ2tmM>?>PA>uOFxP&}#4+DAdyrj^e3dDRxL&gX@LIyV=%{ z8MjKSH7VuBpz@VF&+abyr?H6q3C)3`gJ=F*9@1`VGbjkEsmwo}_`609JzLhl3AUtq z-gOmAs$=PF0WS%RMZ~o<2el;7>j?TcmHyHKO9W^Bygr!lu%3S*D9nGVkgR9}MnV*< zXy*+Gu^(RB%F3>$6=P+y+A1s^-umQ6Xw{(b``#wQfq27)lOZ_z%KoAQ9Uzdf z(GC>+#o8?90;S7RX$`iw{@>gDMb_ak{({UVRJ|zyM;n5cGO)LEX! zhE|q>yaQOA``p=lZEnMCl8AovS})lCg()eyg_fBkuVk9-lA}Bxv$-A=)Uwtwu*qs! zL%2bBDU7)Y9b?Pr=5%x)!P9+o|K%&i(!JHTp;uST(e#6F4f2_Fuh;IwDMal3Qv!ie zi1^Q6qAXN)<50qG)w3^2pEK#N{Fi*ux3i0gM|ujNnEv6PRiJ-lLoH8rlu!%xZ=`<$ zt{XNHtWVtt$d3UX1ASD`WqmsBxC3-`kW$E__kaz95+OCB{VnO^M<{9G$JGG}{LSQD zhb);uAz&$lD6wBEpiixEW zGjd3whGl*mqFh%7?)!I}G}C(_Wr~rGEMI3TD?`zZ~V~ zOGDQ$e?z~x{jm8w@24z5F@%{}1PV#~#h4miJ^2e-Lz+ect+&_+ydHk1YGuQ$m|f^C zMKU7y{@cU!4qD58%3d_<4BulfTbeUC%+F>}P`g_*VJ~UaD*cv2>wjEovzLwZ=5*%I z%89FJp4ChyY9z%s&>WPH(Ef=2O?4SN>6q59Zhl%*`f~n^9debgpyO8GiM775e^!dE zRB1?q&IN4_`*PMc?s(-!Um=r+FC0F&W5Gs$Ld+*8=q)T|q(rn1O!jk3+K{}JR(H2; z)I;4|T;5O@^H961VW<){)J7Sqn17;;erV@J-7b0cqh5U z=3Hk&HHuYyvn;w9{aQ(B@?pLWWuXV?9WrG!>m8Ui4R&)$xq~gCukv75^33x`Zl&RN z@NhI#2@O^305HQfloiWN9_IV17-k*~Q>=!WLBmYOFbTebf~*r{iseYjFd+s zO_q^X;JX3ma-#0>@e0m>{E7d7{5O_&Cy_tjiP%;`E91LuNZ!cuFLBtPSKd$}|0)=Y zy%Vcai3~L_Ab&k!kNgklIkWtCxNc;Z|2OpZQplff2KgW0+mP`5B(xngYtdSkzguhV zgFUSVyOL*~Pckn}hSt(h#WYlrqe^+@&a0yus;n}Gnn6PqiR4D+`3j~%dTg23lNzLZ z)xbWt!}LRG%;-}Xa78A6r!v z_sFpo897Cb{ADEuVMUyb%;Tt$F-pO-O74;UoOT9`!j8sXW%grb0^y6%r!-=}ZV*@u#!fzw7mm=>gI%as&>Bnf| zr5%)G?jVl2136}jrhO@zp2&7441dbAiSFq(o zthAlZEYO6}#uFat=WjH2eS;X3ZxDmSHG|IeD%_GhJmJ!#Fz8!;jp>OH9Xc(8jD7lM}Niix71fCt`%tW4}k-#9}7F~J8`1! zmd8Wm)r;^tqVW1s;U(fFyhOYra*Y?-7_YvBSA^f#!QT*sE22U@oiwbgJD^z+Zo#PZ z`HMCFDTIg84ke=W9V8p;K-rjq&O<&%=bbSQI_~ock>_Wr%IWR+Q_0!L&u-qxa&AL% z-eJhu?)bT2!Cd9hcqHSE^tYA%DAH4WS0j~FXr#r21dr5OMiPzTpkHwF46S?fjFGG; zBiB281oN3eb19;~c{ED49%XVxMuB%)D5GT42zm53nKU?)W255=e@vxc9z0R^?9ndq zYzp#Ehfm5sbtN#_KM|TYk+ zp7+V*do{HD`CgozuTiuk&t3gq)^kAxcN_1+g01B=e}^eRl9!=X+K+dqu-IOC%&l&L^#z9&Fvs!Ny;iew1`Xf( z2VqorGcTu&vN(W_uZP;m%LKXr5ft4Mdc|GGKTwT z9Qt-~Uf&`%=tLTEDMnNo!{#i-vc@+`{W;jKzg29l z$16z&=t;UE=}&O}R&d)^jS*#dB=Nf{cM3o9xs=#P7D zV!MogRHLSfr|$ee3jdROka(5+KZO5z5ce$}7Pzn0*C_2{*RP@NquWm$&XZj?BmUg_ z(F^*amm5*}AIB!TmTMF6KUeX5+5f;ANHI3%^<7G;<&?iDrk7(|QvW#swVIdLcZT*q zFbas5>wiOo{7=przkhbj=alf=R_0i8#nwl|`EItt75gE&+t-gc0!9AeULUcO|8+G< z;)G~=sk595O%dj6C3jcr_1o?*@d3`sMe<;xw+trSdv7?_Pn+Wn_C{*!2XhCpnifFpP_dXeFt5PUr zlN*vt9EIBapu$(rm*X3drDb2mkj1j^*j^Ri2wSy=-~?atzrQ%X-K*~;9z)+RkpFQ$ zU$Oe#WV#u}Z{7(B&i`=BxBlc?9vG~xC9oeBC4c9K;jc{#c1}62n?;|WT*o?A{3H0= zNc;uqfIsK>XUzO$!FGLfzIP4py%}M*y##zR`$+d1&F&+QleX|Y;%Ocyy`T1u8th9y zTYAubnzNv}x!eT}9M97-Ofg}Dg$ymzX=QWU4DENQ;!;jt0yFL+!%U`OW^j^D!(^+7 zDQ5icpn&c;c)Ih25p38|)l+Zt>s+5KBrsXKEGny7$E+XV6Uu0=yhxF-?B0_l(N2@7IL+SX^@0GtffD%Pu|5jEntl{p} zi+!*X0*5tx5DiBDhMg$ZFl6CN$x+O69K~dp?O79)5j@PLG7P1}$@7$>m`r=OsL1l3 zBCS>n(sIr6L0=W z#b;ANDCN>5U%^)2xRRj{)A6i2XI0`;F?19qr4=7lsY2AkE_^_mZ{*9XomJYlrnloa)!`erZD<`IU!PRXS9L9EK>Yip82pb+O#NT2ryjVp z0XxY!)`U!7LCpTaS6A{~w~ptV?khOxEBNuc6NO#V{2#ncOcYR!IOWnfVxms&6uLdl zwD4h`PgSA{KqV&->BnyxCMS_Nef05l=}Gm`HjJEC{bew?XqZ2;W}tE6gVIRfilslA z*T^{fi>H&x3F><{W%4B{4HNQ5CI-IvD_W~H+($b)Uo&5Eo%syc=e~l?{@3o{N__iR z-<9oa`qmt-Mu%pq3~9!>cP$K%MIim;enU1vH?@=F2AqsVFn%VTCC?5l8~P3~#_```UwIuN_au@# z+gGs8tGf1?CS^OF4(?0;?8#aYDbE3efbYuO1h)sMVznTPpZLPx4*DUmVe&s4zNiG5ZU6mKApj6FtFR&1I=__ z{vbBVFVT@qL8msG8?}7%41jBtKgbmoy5ll>8wCf=WV-nvii*kc5{C!HQd-R|r;5bR)0$J<>RLG{1wvQ91 zzMg>T*t3=Y1pmBw9{z{&>HY?IlLqttc{}hZgoT{k*~=-}BX7OYUuzJn;f{S(sE*_X zHL0r1<81PP-qir%N)g13uvte{>4=_B2>nX*`*>24fUtfI?LjaWy{vWX(G=htNBFYg z)_H|HNHZLKpTQG12EJ+dKAn-yAH<5)z=rXs)uY2WoW3k$+wea+$HP&b++4AkZLeys ziju)q2F)##xVjc^)k@9^aP<`UG`M;K-;c^-=tk)_5U!~iF$m%KFYJ=w&w9(?+cb4!NF8!l4-tpK-JrZb4Nm@C9p$9V6a5L8O zH_fLphtPvJc#5MSS-)WQCOq1n(lDK$%yee+1zPPf^sakZ7@l=N)v!5g=QkL(pd58K zy#Pltl-j?AilHxkj~Lo%u#TZG)0)CjBt@`&xa2o1Jy?E)UDN&DUN)pROQctq9+?8(Px z;t^%`Rw488I$H#6?|S!>Ph_-xl;4=^-9?=(V24}p_M^BOa=lx_$;Z$CH5BCk{sxfW zIZ#9X?!R?Dj(pLJci~+&yp#O*zi8k+PV{``cg!n$sjA;IMInKnf4&iT#}jf~Zg_Y% zdMI<#eyK6ugJS6U&MyQu;9Woii4S`p@6SnT*nrCo&Io7VzIKIfb4w7$mBZE)Dp8~l ziSZpyR=(_)P#AYD1IC9lG{&j4it>7tK)vaL*#sr0Z?5(47<#Zwt$+XJtbae*$BkJ3 zKKnxj*S|3|P=(jOF8}t-9l>(Pv+DkbUN9uj2mDB?$#@S7OTHT@SlXjPCQ+-rr-gp> zl=47n$cHBZ~y8iSc1+Erl#ZhSo4LPAEK3?pre#a zbY%-3xlL)9rGDnxQI|<4M7Q=?OtMOgAayCn|GmP91o^+c^j2{RJ(Kr`Qk2WT693m< zD@tQ3K0;9(|7TghEGr>o{Cl2v1R*OpK59ge^801Q1ZRK(aJbXEC56<%Dvbf zfcO7O0_%igTG2S6c#u03Pr+L-QyM1n`qvrwHoW_i06Z(15`jT!^yPH5GWOXJyCgcq zjQnL$Pm6ssK>nwmb6|@@VL&Z&_FbT1`w>)fI_c6LkRo=n>*mlbNMHR3FTJPtLjGP3 ztD9)n)Tdap&Y<#}Fj>C6-9Ft>9Pvjxh+)!^gU1^wdpiIM zf#LiU+(=svg)sxK_n6+j(&I9{v+xAAVS3+FFm(J*aGi;QfZl}Ic7U(sO^89Rlq2_7 zm0c9jBt#86?&mqBG)&4LM5`Qa__Z-<*mx@JGsK$v=Ceso758Le@hoChss5~ir+RDE z!Ad-H4zveA0ncMXvQ0Ls%>7iTqq@pN5w-xXaSzLPbKz92BH1;Z)y zB9lQbA#}$L7zP9Y)>PA%=SPBo;@?=G^Gy9`JR>%Ox>2B>^&z%~Z1t?Ne+cv^yFRz& zzqbb2G3I#x)7p-|6g$2Rc3clo9%gj@^5u`>oh{m`!p_#e*l&ARwADBZJ;6I$HGKD` zQCahAA8&-Iovp_xzK6_0TRAT4y4|5%)(4-#nuqk!*8Cx@9kj~|r+-`@&YNavU$$t^ z_s|~JzJ&>}+jKGtPU>#1qSVf*;Z+uu@zzKm!1rC%hVtvfbOTtPP3Lw;qH~&e{x>}T zK7Za+5C22&A{Lj{(3ZFO8t_hq5%MYg`vBmbqPnh)UlzkHM!hQm-3@XmGMk{ zbIGUKEy40B?3(32YqBAoPenSr>S*ayjb#ebsVOAajxM`O8zWWN=slLwLz^`k+D+dG zP@a;;i&&$(jFFbq?$Tc%h%Nxm=1%?zNSPIyic8+wV81i@er9d(XSCY0xrvDpimMj_ zWKg2h#1U76vQXlBYb(UnvzHdv+f=u6i%a_lBR(OA8$5|*6ujTE_jaDYEk12MMe)g{ zKfm8>*Pl-c?fO#}3c+sswt)Vm1@vck6OaDP4$_||QFbv(G=0AnrE)g=Lh8@p(?lJ- zm9f>ZY^(kZwdzlEn1Nk?IyH|_e;RTO4>tEkt+l!D*cD2D9{d>kQ@^LypND8=VbdS$ z{+KKUE`QPymE_C6imCtUi0W`aRKEvA)$$7X+ibo%9}8=eYT;RoZw{QWWAi(9iFiC~ z*7;?I%)9~El{ha`KH8f&*M=k!#F8k0x%UI&Asx1PTE;rFXoRU_ftyZW$RrPwr53o> z&8v&gA~{w(kyfa4Ja^g0XTD(j5ZK?I=)f-VFGpa19|*FAd;tm`_RO;xtYnUVwT0yP zx3sZK0xOVRQ~eA5kbp$IM%`E+ort#rFqjdq74BtM=+jP%P@#PY?LiK)GXF*$;#Z9? zLn-tNA3>qpch?F%o63A{g*NaV*1>`=@{6wd2EM9(kX)akWPICz!UCl=NS#TfUk+To znZ$g#q==*>xW0^iZTXI@SW4>h(Dnr3)q0}t`z%ZA1{VbZTrF(<;D@KI9wWg4c+MB0 z0KV}<0KEHF4REVj9)QE=qpAMG6C7BvF5)Pk*g!*i`DJk5iDX|%)G+}aR8Mm9(W`)> zk&hmb#!zQ9Xs`r^&0OcLIWr0aRs0$8G>xR{Kc86(j;AeCSvt0OS`;f2I3?>nOMSJl zOS(UAya(?(xzC837H2qDi1s zsDHurmPXu_(lCzCM>w9e1g&trvhpBl+XNIBg$E6~%PhS8YHY~bF zfd%`$^6<#Wwc~O6MH-JkqiAj6sC{HTQAdUX4smSyw!K#4%#6Mx6rR?d=c#YOhP|%+a7kc!kOnO}U z^DOW)&}w*j04+*H^akq0#sZ1gp8kn3%eSX>Q9=^lp3?md#u|7ifBWv08jpjZ;BQ-8 z06et6P5LKa<32d?mg2_aU&dbH!o%xt$2Sp7y#6);cP!uEX7{UFDbkEJJRWKOn%M>( zNN6!fF<`5yf!mL8XW)B{3>emtidN&916`qAlX!NRK_|3z#0`tfcQSd{N? z)BT6X7u}3NB#3W`cd;bzQ(N|i-C}VN3R6F3@n=Qc+RzgiB~@w;Ev_% zM_Ck@gx8OBzkjqHk2_mvJcfV*9yQMO;IUMCT=~h*iW85$+ z^6`kh?^N4MmVd`60}oz|P-HppUmA}_ps?F}s3Gu3C(Y+PI$e4)1KC9%AY|yrh{OOM zr zAZFlm!;KDaru~d*C17~%C#$vd1>|oe4r@M}9w`_Vh`;k5Gw@LU^=Pt#M+#H$uch^Y zM-okt^Vv-4arxKkK*+#jS(3w^+rQq^mYdD|tvl{pzJGl>3M?w(UuTRk@KE~kYDbO7 zT2RoBCG|Y|QL__}a_L8VAY|ZCxxEVyZ~XnagJ9y-j~zbe3t{!6BnnKz*$aL&*grnY zKxB`2lt$fnR$Rzv016(Zu8_R?n^_m&WT~A}YDq$;oOo~+F#79o~@gaoaNLg-9U|hi_q*G=KbX16^f* z*VFF+3A#-|N&b6|$NsXV$7O%bfv^GQ6xB$4x$Up%Z32WhznO*B^6l@_NP%GEqyNI= zk>zjjsDX!yU%&Oxc>D+9S38Y-wc$~6i0WZ=n zsU0Q(n8L=d{gJ{H9-j>V;h_dTMPiM)^y3DiFE4{a*|z@Kz$cX?pGNi<+Z*_#2k?0m zh#C0Y(339 z2TPyM(0EJ*MMul%xtTM7hc2(j-VZz|y6WBa3xJS;$Lp$*aESHEPQ{!7f zI{}9{0xq8ZtcCZ(QQ!dQQEvQ6^Urw5z(d93?;p^390Y}UyySG?0WU}J#N+h;5$jmO<_H(&xh=u3$xO7Nwt<4Z z%&qOQm-t8c8n^!#uV0|xK0SQVLwuRlUaCJVn0WnZJnmS&y(C0|Nq9Um{8@tyJl0G6 zJ$@nPkg|GAD*8~tFE!@e;QC~Kw8fGNu}s;KR?+e2D;)s zOBajF1SOkoq#cX$;puYyMWR1rke45RzIVnj&Cjzn!H;+|`u!esP-^DvN469Az5Mua znUXqrNE=V*MCk*=>o@tofgXOG7p8pwsOITgP{=Qr)BtxVcDN<8ft$!LCxdu+n-MJ`v(~EQSrL-TUtJkfr3A-5#!OwiToczg>c41>z-)P| z!($WZ6^1+tcDR}_Lpl>~ zJJ%Kljvb0Hw1wkO_OGAq=i#tUuG+tT%n{vWkrSsiizG4pWWLWlvpzgq z3GnCw!!PLIgjnmtXaHuMM>;Hx;m#uw$A~gEooE<|`?vdh*l*!IUe-9Zxoo{=ZN&-x zfo@vS1?+bQI^FhLZylr`Y`>eOqoKuqm*@Ol_AB-5#dmwys*{^1-sg#rG;7(Qkl~CL zl2v`VkX%SxeH^@J1xnjzY~nAYv@NIeuD^%9E{R%#_~?z?pVBamG&Eowhdu;6{34eO zdH}*&asDW>KoL$~760jW{vX?{`OgCd{+|(&`JXBz_&;XyzY?8p{_pni{|xXk`Tqs2 zh^!&`ze5G73cmR$EdNC$Y5(HB2LI2B{I`9q`7Z+n{`U*X{O=VK{2yihWh29Rp6uc+ z{C(H+WY^NqAh}fFARsa!=#EhX5RfWlCFO;Dwrp2qXgL1Mh|hioVnH7QA~>Jx-6T}L zQ1ZYj%NOkD!F}}3CVxGiRv>MtlY3C)bI;FOJ{h3IK80lYOcav0o+b#HPUO=dbGFJD z)&GLv66ii;yNUcyVazhQB#AzW?WSG92*`KDd~f-V@2!4`dj1X`%t=KS?&m(1;QTV~ z$e+*X(mw~}pTqJGe*HRsKL6e|HXd^12e9YI@gz!f;<=r!B-wL^&9DEO8AZxy_wOSA zJFW7c2<~m?O^b*8&GOG8&i(axT5kED#|Y8yDKF*6QaP&nK|%hzg=G0(yo~!P*`oK9 z3CZ&RCrC&BMDEg44P+wF zf&BTb1Jsuw|FCw7rX)#2D*scOlg90$DcoVxltaU#(3JA?9eK^#qrDCJtY8H%jJb7< zmQOk;yl-K&kXh9KGDvZng)yTJK@u~>IErM5LvqPH`XrK=G!QOSzkQ+3D!zr~?F)<1 zK{D_>PhY7-q?SkHDL3s{?bGP9ub*o^7Bzf2Uo`w}Jk7x0s+R{iyb5mpS`FHuKNt{C zK9%%7ce?YbJpia$a6UB*;}AQ+Z@C-z*x!{;6?XCYGtxXv)yd5lQ9ivvGqw;E_75if z4jyF_tT3i#DfmkY_|jXzu~9FtypAtp;X3;Vx2)%;l!o5@gTrWLOO%3=%{1Q3icGd) z^9fcgfB&8a0_sI&y*FwE(m=s84Hl9;(__B@j7*OB^zqye_;TY#Wf!QOGSBMiTGWn1 z@6W2L1C5(Rf9|snzo@dB_w2(5s;ox%ru!t`O@hq$MP+m_%(0n7$jfdsuSSTgc$-l9 z3CB$T8Mhn2E)dmv9Y}E?SON-x;CmrC5PTyf2ZEo4WVma82z*r{aO@!5PZ^I`n&YQ` z_&>VrpK=+;ZgD|3A}#?1yfz8Rczq%y<8@p}#_KPTI&g0OH3VJ{Yyzy|@VXX|hQSMWvf_2islv;e zZx(i;{m|NppWyY)hZlxg-()LXqqk1SpIP-yUToQ%r{&IX|HIy+ zFsAJu4Ydyx%(R`5Y^I%lh5&TD_!2!vy!iQLS&Mk$#hTZoG1Pgdz_!cVZ}64ow#(h~ z)dDB5m-zX2qQ6OqFIxN4cXKQBH+7%ofw__>^fp}l<^03n)j)HRpn2Y2jb=+wu-_I! z#u1uFe*&616XnK3e#nHx#@euG zS19)NEd1B5E?(BSUKxXT8F8*qTUc}ZuOxK3{a14^Z1G=9xYAIP|wBlXYqIHb$jxhzfGZ1qVO%D;~{5> z{=%C{pMv8@%SNH%N4m;^PeJ@J;#n5Y=U69?e%Hx;LKLCRYDSuMye}vy!kt30B8(7{ z^SkPP*f%hyFIS?bY0{f1+3tQ6e@GCr4miG2M4MWgoQCTQw69;cO2lhfaDH(zNn05E zKGxC0Kk}2iYG~fC`~j@F?OWbckkb=V@PS zo~{7}d8P=-^1NS2mS^)lLGr9R8$MgfbF>stv^;;_6-u6?z6vSN{F6zG!pQR~U$8v) zJMz3^caS_&Yw{f3^87iJJjY=i>zbnX{ii^lR)5Xs`O`Xhn5vVjUI={N=~}24gF-$s z{Cn`2gk^eR%w*}I?P6_Zv%#^Egq(Joh{~0OoLQTj%p@cat+Jl5`OJi2k*_1diaDxqMIUF9IBSb!aJo!*?A;x(s)++QY1@c&f^{%6Q#0sEeSH?_O%dl&c%&HrFPXyt#e^77GTrRDqk{z(Q5o7sU;y`q_h z!3PTdzMYWl@7oH=X-rok`5EMXy8zN;9>ZC+tVX}f^^flX*RRu>uIKZu%olFmeId6Z z{H2p$$nc4){5DQ5&fv9$;~<~D-nrO0))6{h)Qci=N)^uTA2Nwu|M@o&kiqMXo&1_1 z>-&GUo|I%g^9kX<>HKSJL%PbyU&WKpyy$ot6#VzxFX6*#n+%UGrc2;zl}PgBp02|fNklmpnF@3DAH+J zj;}Z-a|On=`kX(a)=axR_|E=g|FX(sBIav5uW%shS%__ft`9&SgYEO#8FD^lr*1x0 zdzJn9&s!R5qF$ZasGU}mBv4S3yM$za+*?T2n7%@068Y)&K+wvcUnDy7BKlncyE^|e zRNx1Z8siwX>5uPk%M(!k7#oYuO93||i;`t}-nE^cqQ8LiP%3|?e>ghWoWR$SR~5s? zw`{tPfBX#wo;w7DZ`*4;4}b!m`-NmYXMPS_(??@3>A;usub}D0U7G@7&*KcwnIw(n z7wfA`<15W#{kv!-kORf~PXMD?cH0LTLK<9VOQXMZ8>SychH3eDHczzU+0@7Uup3JN z1w5}3lJV^HnFr5%rN@QmulW`{*F9NLJQq%};n{DheBXuV5y;rYa}eZPKAtO1A)ZTF zKld~@@cdTvvq?vuIpY}*3V2>7B;(msNVfL@LbAPo{~y?U5s#5Sf1V8WIQnyVRVy)~ z9{;djz}{Q566n0=3PvDuSnd5;fMvd0KOG`f`v|hLrH<{C;#j3R^^{H1uxaW`ks(`t z{v-Z$d@}=IHX5yRImv6&gsGvW6Dsn`_*+1{sC0=i!sm==x9maEGG?#;-Rc~QT z&re|T3FMm+>EjGM^TgXx+J(N=UpVr(&^8ZfHiO>(z^#&qz=^BlxkCi5QOJH z&7XLk!N019oHttY-w717spnSkpG5rg`*w=Q@HJGNclht~D;Il>ddLygNZ*R3zXtRd zM}P68PzgR+16}EqGkT3_69#Dd2cX9`;$JPMrW>za<`Zu9xNb8vtATH_R)zp&?ToY(m4U27on zB()OrZIKzUg(QK3hO`or{dr3v+236FF>uP#hF%!6ADyTuhzIX}oyWtxhA?S*nAL?2 za_NK~QW=|aG>)=ZMoJQ1Khpg*6Fg`Py^q){o6OTf}Br(w>F9gL#|@icT4k{%-=i zX*AJv`skOQjDSBlt_0@shp#{7NYTnJ`30Zy3-weEL^p7GnVPtd-4fdhD%&qsKF>F_@dbX5HK?P+ZjRi0rA^_cn}0-Yq9Cace6>2dLKT%DNp zptEL!I8pjmEFq!m=`(??Sx+B|`vOYX4}Hn{eu~_v&?wJ8(DT1n+VOb$S&hdVpnyk> z4?K9JP6tvhJZ|4&iyx}dz@rJ!H1Rl!*7EUq_iw^uM-w|9N5LywPpuh_ejFis3%pVRu$8x-=*A2t9F9Zn`o z4?V7_^Ud))EqGkH&! z#$zui;IVzZ2ank2p*b!*`ZwSfBmX=Ndlg_$^3TBgk0t?86OT09v3xv|PB|WF{&|fJ zJoNhmW@$WngM$AkUFWfv$43yv`1;xGT+ z*^J8#JX8sw+6x+wTA=X$y(RAhk96WJgFH(E>B$V(%LVG#uP46TfMdg=A5!Mx3@p^I zgZ=~ z)hGl%3U!kLA-b(lAQE0b68veGctFAXjf(Kx49DK_B~S>gIOyXEc>s!5=K6gApGofJ zeIHPodhUiD$Ue*7*N$Zoz63(amj4OQPntjPVh=yg`+$xDW#*}h2)O}~b60!xJxO|8 z`dW!1I6gfTVfeO`l^X-H5Zk}VX52Ks>XQ35A(aL{n^!!`>{{_T)@Og!azmhkyo>wSS_df~u z8`fVf+e(qZ|M~fbMAY+`%iqx&xfK+i$J`|(S5v+fl8f{|fRyk=&&Mriso^)_si0Ou z_n=Es7V>C08|jk-s(bmzm;yg@w&@k_H!JXcUgcJnkW}CcL|AwF`#}fEk`6YOkZ! zp5FI}GQAJ)Pm2gC|M&(5eo7x3jnMcdfPy~0w#cH7spvQK@s)=JEf0iOXGRQR1@y64 z!5MTiyenjDM>HpjU|CK+E&ABJzJaIG$6AkRJZpl2KK6Lm)W@6AY3SqaHsc-vGYt7y zp3S&J=;K`Al+w_vkKG_vJ9_J*OuxhHV>avKA9W4nUZc?(zXVXU4OAFY_us%T zgN%#=&lu^+3b@6iiV2SzmIC9*kqf-l=#!am=@?DLvk281{RI|z#Wf^SR!=XHYsk7belYE{3>EGR`+sTCwH~z z`@meybtWk62M-f6iBNe=$W$Vi2+0;ut=QtAYmDQeT(2(MgB;#@4Dc5KWbO_>2XwLA zNGJOul%4Z@r*#s6*2JO*J?zmG4RRGZA2iKB_+uV3XSnu1~$FKsbp7 zQaF7o?2_nT8f$=}&U3Gupg}nZ3hUMF3*aN-NV~D~|3UoMvGafWM9qIAP{RM49{#hX$IbuqHvSbTF8((F zIg|g)eEGJ`9-cnA_vu*qm;Lp{XBr5o_}QsIBj5vt`1#p-_~sYqI+ zv6%C^$6yAagB^yhZ=e4zc=gt|4@e`Qu>b%zdsr6*FE05S@nJH@hXu7gtT-=%9Xm&} z^CBn&)^~;E!1|7myyLZa9{A0oAdyW&@_*EN7#AQWNRa6H1DC{{Cy;8sCQ{8PP0qwu z9Dn);daSYGlIUWCJwHTzTu{s4U&Y66^ECfmK_NbN2C3uYs=3U!tmr)P@fo=+5Fg*H zWX8vZKqqv3d}A(D#2Oz@{sjwmJdiKHaGD1XsP+PsQn;w~(Hw}{oiA@ir#oMsBz1w{ z=QCU3QmbG;Z1Q*I%i`}h)by}bCwG%*>E1WAm}BQNg@|{CkgVoAUjxJ1_1`Q#F4zB( z^75YG-(6KkT*2>d2-FOI|5IX?q&tpmKY_|jiK@&*YY^v$OM1P|(=*T8pNr|+W5J;) z59}TZ{^}mVLSM&0O02Kvz8a*j#Ueu2 z`fjm+7_6_C;Zm!v-?f0q&L43#7~0-&|4QjpUbp^`69-ud-(r1(6jO15%;z7U;SkHx99(rDw7&4u42Hj zQsTk#kF*->00lKTCM3s$TAKh4BT@&X-oH6ZK9$HYue`_*;gy60kQ zqPj>6@Eut;-}V6ypWBd|^5<`){|D0MUq0kMZ0l_0j(m9qx4dxMmMylAIsk;rf2Dr= zXk`OGRli-kS>v}A6zaFn%!a~b1@;qaf6SLjBIV?LtNIFqo=`gWZfT6LEJcx2>R*9` z^FqLH)^CrXmGsYYq@-Q60G5wm^GbI725!;#WrC9W_X{R|-=WjMZ%iKxer?iE6@E(~ zP!qo?kfa^IaZx^wuH(Jkev!8Sar`VYjU74@sgtYTzugpPb=i$&fC7HQgygNlAs}@I zfAo2nDJopfbG_T;l6hofVy0vG=VbyLd&9ReqLz)l%Z^RenX*ZXVoq} z0yvmWcHsEgKcL`7{pA~Vo;`%0#mYogS;!XjqcT^1A+|u>sev18MyuT?{2EP3FRVXh z>-F#X(?Cf5B4w5TYJ`$N;TUGj446I3n?e$&MTB4p`X!t@P+h5t^`4OQC~Di0Z;a`X zyXIBSy!pH9Hf#OFqgD)wU2kE0R7p!CD2M`e%-_zV9> zj0fk7y)jMO`-Y06E79vz5&wqOSH!D74jS@M@#-<)$@)4E6ynuNAvs>vn#@9=EI{H_ z?H>StHY>XmuipBL8;$&E4PLCNRg!mT;;2#^uauELC(vIa{Uy<#k8&jaUbe^2;_zq2 zt6pcTv#f!5wOGm88?TC#tZj0>G`izidVOWc8;;K_QxL zp9sYkw?_NA(&Jk0eKlWn*dxRdZ%QLMLw1f0=r4}`;z>IC{VUJ@%9oh$UrECF_Wb

QxZT^KV=E-9l%@%!u6v)0RZ#P2u#gU8El$hIQSaRhLD3w;dP{G~E(iTtyX{;@$4 z6D=g+@Zjfx^Y$8OsJCCec}%0R78LAdwU9nSW!40!N;)Y%XMo3~Co{leG7vISjjvQ= zh?wBApr?=U{Y?vc_D^nwswL6Ix>i&Fs9a2waT)I?XvM{8HcWqw*ck@&%g8TSdj3{F z5|qLI@QwFF`NJY5)W6Fg%6`Tizae3@pYcXzPScQ2fc=Vcf@fKP6**f5Zq3j5P4>JmeRjglDyI;%eqfQ=`zCEhvY~7e=zV<`O#Eh!1zth z1!y`y`ao>Kl^<=FwA*_ss*}PnO1Nw&JT*3A6vFb)8I8aH9)o|SKL;KCIULZRaXF^` zT!Iprp+6gx9ed*H4a#1l1cdy7PLAqBQ_SS(EKJiLe%I$lj2xD8VdD+wBk{Wp^z{2D zs%q=&1Pbq;=tbSF+*Fc6--;y=^!t2vf?f0Z>UFAONf*b{ zA69lYRk}V(K*H%0zn`SR_XZxSI`_{QjYktuIB(fvEb#ErM0r~}Lwa22E&otks2)5j z-zy*i5AXY0J_e%ZdCTl-;#f2u^sn{2WqK5tC_IdKk;jI0#&-loaJ=ZfDpb6P8z)No zx5W!~`Tj@0H6*0YleMj`C6opV89@&rlSn!fANP2{9O-eLC%g7~f!QOhYAvKOgwc~e z>zw+adP%1Dofxm)sALy7PnHjHn&-(zLV4`gKUV=8$q%uK`G>XtWkrnV<=+^1s{P!v z@#`%dKT<&f&qYEqp0!SA&QRqUAS5SRmyThS#ht1>S9-te8GNbh`Huco@Gz~e(_8~t zn01=d)NkmJx~IFG=gT#DFw=Q{f12QI^A+>PN9jBR`INmr34Pr2wSnIbLY0tc+LmX; z`1wEqzq^EF{Qex}(Z~7Hac0K`pY=hsYG4=7@ zHgb1DKb8K{SPC|9Yfp#>T)V#kkS}~?^*1w@hw?XD)vfxaZ{}v6RwIbKe#e{6OQ!pwj82E6jF@^tcvXAFGP0N2R~PQYxDI?h-&~ z`i&7OqPaG0JtIFdc*5c%>z6%W8VITUvn}3%%=VuI3hS4c5kSbbep!J|BmaC5$QkRG z{Px0E2-A;X{qlo){dIDxnvWEAq4$6Bqyo_j z@Bd28PHquFPgDQ&R;~ZrKw*74_Ytrs`3l7!>7nFN*N5AmDO&6C4}st3^Q=#ocN4w$ z{sz$X7*hu;UZN(_W@M7ujO5Qg8$|6UMi_TAMB&z}@_XL>KQj}f+gyL>vPT)b$ z7c!j?d~687%A_gt`Jr>sW1Jtl;44|GdhohdZ4-ouLo{9jUyloB33hdKAy?`?Tr5r;}(DWPAGp{q-5~- z`8Rt1h2Kqe!yz_Vrr+#zc-8_`5ezW*p;H~S~ zJ+J0|bE&!pt-xEqnX5GfXF0&XA02knIV}>?35yqVLpP+zN|9v`27;|B&l>U}pq zC2D*Qf&xB2^annYJ{QI$+`!kke{br{0t-GPRHGXoAZy~2i96YyY_-WzC`UQ`%lc%) zMgsx0KKZt#MxYE7)+f7!Wb4^^AHa|ZTp06@fAQtU`ee)}7Cfe?B4gz1ldd=uXFBRD z)S)=SS3gud8%U-Yc|%Q1-i~kgzXM;?r~8*0_^SPzodAse`C(9qXUBx(c-Hhr#tx`I zBqXN-{rWNL0<-gg&Wq@Gm8$3XJpt|^956I->$qQp18*3pYqtbSX0mW8CT7QO##7Ph zW_k80`g!>V1HUEW!Irn;=`((nS_3Io%69j9l(IE?45eJ7whTQ^{+t^m+J{g|Tk)1~ zOQk=`U>&_X6M``H?f_ct*v*O%JLS)e^+p0g;y<>|0~Fr(&||d*>B@V6OarQh#L?B2 z2&}D}8?uJE%1eD#K_!CUj}U`#h=t%o#=R8>(XA@O`{zV|yoD+MFwNBMcY~=o5<@&O zbm5~=goHr7?DwIRZSr1ibqg>G!thnEYlK_i#zYphG@hZXk z)=ryDu)Zz-Zp#VZxG#sDl)f4E1AbPn3FhYvI1uJ%U!Nd;^2G1N1;o=F99rIoxkx%} z_OtifQ^1e4-Yn2a+m-o&Hs#tuaX^`v_U z=SdDyAHp~vkeSCa=icNfa1t4$&;6QNn{ghBQkl!khp>&Yc(sAoZt<3Hw9$B#fWq^# zpWVq?frt8NIX+LWOlr$lN=>9dm$v`vAUt|JQTvY47y>w3)Nx}&SW$BByj3#}(lVcy z-HBGpy3f*C10TzyH9Y_7;5iD9}$0zNwJAiSJsp+M|2a_!<6*S@oa4(g04u zu?BE3aN9w_kpC-W61Dy)BxjG8_l6TQ-ba_70z7#*Dc22u*;78+3VBdQ81z26t1+}S zE%^6TQJo0gbU6Lt_}Sn+4+z*lTiTB2&j7UV1^(hxKJW`V-0`y=ST&wB%D`pF2due3 zhGHd(<6V0FX~+|frppRq#Zte2p24?1|MGNHkaC*s{AZ8n(65!tJL0Jv>mIe=}cBF5dCqx7Csb zm?u77j)RH1V#LY1_tDZoVlk^Kf89(h`s3gtEIWz5?4w|*H}S57uuLpBqt%Y(S&?GN zMi&lG$jpzYTK=hc9Y<9i715ur-)$RgBU8!2-(=3R7iUXn*L3FJ; zcIe$h8;VDE3DLm$#9olHc|P%fkT9T^RdR^)iT{c$#R!KdpI17($UsxsZ?#)Anr%VB ze(T@nQOXSIaVh00Sr0e#DCH;Hc&N}2hPL0ike;b?y&yTe&Mk;k=M+9hyn%n;^)5jZ z9B=-7CRDsB{@dbB5$7{qcs_xnFm-ZsMDfRV)1rDC6b|OC6Oy;U?(W7?lM{LJ-UIp` z=Y@xHjcXh1La^ri?o4bd4@|pTuD9_z{--LwY)xh2PXY(KJUG?zclozf9xX%4Bkm;T zp%Z{`_9MUFw0NN*mJ8^ufQ0Vao?0whLBSt=CM5f#gF>>iKO`h)1V=%NunJ@5bcN_R z{h@TeM8wuBjR$u9RF)ralyW@vJKIHU-reGY9o!24LI;SPM|Xa@O)k#x9G%?IU0v*X z|5)bj+-iUS*e3KTBZo@q^<60zc530oD;nFvX`ISVDjatW`55-gxAC9Pm^sD4f0&c1iN*6??R0XfKla40#^e5InL}mM$@x5k7`T6ccI7X6`zPI0k`8{%=ou@ z%foM-T(uSV!JV4tQc&8N^tu_&gl)t7BOFWRGLHPR-sri4O+>yY+ufUiNa&Ypw89Wp zzH3Frw_)G*dR@`~@pdh6R!!eOX)2K!BvZuXkr6Ro8F@`gCdA~YOpylB^faZ%h?q1z zr%6&tltGVCO8L=?)Q@Ts5mF;clDZ-ir6T>;`mVjtJ$v7M?{sf7f1gig-LucR_pI-F z?zPw1hhbaSNDh`)+yam|;E)4jy`qC>VcZue zhmK`{JbgGH&kNa0K+obRQa{}lG%c0c9Ff^Z_CMKy>Tg(RscO<~ z_iMD;g92K23(07m(GrFtscB){WEr7IqU&|%bQKPa)bD+DkUWy-nTVzp6#9PAtW$uk zJrNm*qrfgrop`V#|A3t~ch3qB+?eQ6WvHCn-r!%>%(S3`k`%_h@PLNyc~F3Es*nub zD?+lOt-smjZW15lFYvjW^T!zKl?Sk0?xr@r+G%#DDCWzto}|{lU$x(yb)-a@j zYL-O||JVWy=aA6Zy5?iVT3>7l_N@~6+nq$NVJ7{qN-zC}sAq6}@z;m=TkQ44;SbAq zyJF-&Cse7#IlvJa8)-}=dlS4S6ua?yI$PtF2MTz-bCZEr?Jj(dg;yOVbi>l}6^KWN zR}09;#%mRhx}DQ)<%t(Zpuod3EWADxC%h9_aF(6{;AP)3pnMUTB4}Kz}*1~z&#-(`==2?vVUsa%;ld};RK(58dhNV zr{p-PC56_zM`Oh4pZ>Ukz9af%JEFa9A!!C0OtWD4n2r)}O?qm3%LWA)`U=VV^R$qx zKf^$3{h249l;WInBeZE1f9Z%>YvsHDl~YRTlW5b5j~F4D2Z@r*>drr(Ux&X&_1St# z@>CBV(~~E*0{ZHO{HJ8_GWw$?PdwoAS*wnVUXKv$!s-*>WMI>47La*#l+dZ4qk+5x zR5M2JS|J&|-_w8)&Mtx0&~<#_GMwXUySbs8VRLhVBH3I?vs_%_0W|s%0mxC;KE8%9 zA7z}g_;=@*Y(RnauUasucz1Gd4MP$rz_9lQ7?6&4pJK%F-|bYcZ20fxDgit?|NSHo zw*7Z{FNL0?iSo86b;s?0k{PJkuNXj~pJv*l8l-Qo2QvQthAkNM_cy5bCx`Yow8E)Q zN3!vQa_9$e%_lb%5kH~zzq&(MXjn99Yj*@ll zMC%T_`Td|!2D}ojJ9w3F`|Dtqn9``%p%=zIgmK>{yVvH!B=v-432=8zSh`E25bvnP zR^oC?y{g6FmLl=b`>UnDY;fO)qgEbPJ(%-;*Fwqg1Sfrb69cqul~+G$By%#eezIRr z)M%C>_QwwtCR68Eig;dk%hRPzMBGQ3DwZkV!dBUV>?sC+-t&QPdp%q`MWm_3->_@I zu4KK1aY@q7<(rgUuU0P%S94t1?9%)!HC^J?_C828QUvxY+Vbqe@7 zYHfB3DDN+4&S&L?QT)#x}7|NYwwY4l-}l z|I;65=j;REhCIXgGXYSz`agca>5;RQ;l~n^Bg&rv543pEf}xa-62}7u>QIvlO7c4) z(`dYXDvU+1|9#vqk(lRQRduR<%q|I&hOw;sO%8^M%f3R!2Y>RJb|ItBUb&u5)P;=C zft+2)`0o?yL_LcQv;J2QopLEWEqy|~KJeP;g@0LTncIRu*j|L`N@%eK_KlVJOS=$W??_<5Gv7r==^Y|RUQe1S1dw#9r z#9!)Q7^QF(C(wo#d>`u&;A6j!^=8}{q2@@`zKn~>qeikP-Y;$c^M(?{=d0&WuN|b( zdH@ujM?dXKpp{0^F`ZPTNJcV(CR7#qu7%e9>L6W}KxUAr0?QX**4{7eJxBn7MOH!R zfpixf&0~W@#}~^UI4}fuO&};j^Sy(Qvr}~CdzF+a#^UFY32nVdtQRIuq z#IogZWcy7Gq>eNBYeQTmwBh?>{vN&*{3RisEsX1k0Sb&>K0Nt9F8=Nc@<&%Xd;G>d z6>X=hXnbUTG6UJq8T@$uXdASKdD;mI(S2Bo;g8b94t)M-v}#f?l>CA_P4gNjaV`PM;KRU&EvYoJQ z;BlNPuCO|@xPeD-Kj|7k)!r|s6OOvAxH!5LMY}@$b>}O)**~{>)`CI>_Q!^5DEfnf zYV;A36Td-1W)L|aqh$Oi=7ap9z`5=^N+w;?-`5#0+Htn z&uD#_0SfvuRmd#j|9?XAys^PWfFh4CG)kG9aE`B(ncv2kI}RKzP=uB;Pr;Q=9OfRK zDnzg!W*|^=G~p4N-z~LIv4y)Z`6d_P0s}``ti$38 z<35LmFzbg!6H|!%M@aT(b;bYz24m<2z{YA{Nx%ud^_mU6pqzSpi#(;Aq3bmb!Yk)< z$Hr7=j~wqw{sk5Y#RLs;cEYpFB!f^F6#7q}Pc~E`OGZc)bbPyh98|&VKW$ws2gA(P zNbD)}PjW!B=lM6lVfUYQ0le)IO;`TV2I2=_5TdF_*dFgYqI9QE+_=WvxH=)bH;gqLYJER z%80MjJPY7h`gHw75po!PB7}4sQ1=%EAv5E?ev({IC+h0ihcC*BX)sj{th!>^lC1|v29R~;-HzxM!u zU45JYF&S-C*Sze)?+}i=wSUHN2-ywl@_(ZM zHR#?V+PB*OA>WN}<*6Fq1W>@YrjU$plllg}-7sR|yBQh2h41fRJ{EjusKybqQ~e~g zn?Px^l>fXQB5ZEqTj@3C$c^u|LluB;GIjO`Rz7XvyGJsX#WOX&%Rs>cd?h4%fQ=vr zua&cZkx!N6S%LS@V(bSe@TU>866IjKS^R~AljxJoJF|*8jgxPXxUzjZpORmPzjVYb zOkKU$)OCiS1K)x9EPeHE{`Hc<`{|ErD%rwE3I^jw%rM$D?tH{*Tj5{$Va z|NWmBATQfrv>jyOt@MC`t28cICJU##OBXS|ZXVhZ-(N=UZ&HkV89 z{G7+_YVWsS@=@g+bX}UKKcs~`OIKQ$N2Duu7e;Hw5%J;Q4OD%~!bk0IUU?(mDdSTK z6v`s!odJEyRja);cq;}mxeA)a=zwr(sMPB}`B*2dvL41PGno$dmk-0UJ9dA0)34?G zUAT>p7B?MYBH_pV39ANL=oJyB1j{-Py{&>?5*^%87wGAvG36V+;by+1XM(DW8MwWG zdK;F27_>w($)t2~O)J5&{XUs={Gtv(DQtpddg;paQe61#jneEiJUaeb>qoh)ShJrX zXhQ2Nw>%iOzM_N_W9bj~6iHt4ylid0E&uvasYq<+?<@`0_v(8f7cMiLDr6dw4eLO7 zdcFJ<8S$-`f4)Za&k)|!wQ{iRj8*)Nov}7wFV~aMb;jRv6CbkI%TLGcLrX-z!mO9S z8(pFm5l^002UZTS@YMM$075(xs4@t|Awsf$-FO=C%pvvU{Pj7ESfS}jwZdRP`mCB+ zg@ZJF{o)QasWS7c3nqCG>-?$#z_jzL;R<4x0Zok#)-vpe^Or!6$DH6sdct zDEr~{m(pBA+E_o##GAfY(p76irh5JG5e)d(58tVTXUfg>!%8?!9GnQ1*Idf%H@iQY zd6))V>9ggpk{Rzq{Y}<*>F_3xwF^%LYySR^9APghSbCkW*ehvPoxahRC+?L2*Zxfn zU#O`5kHS{zfnLiI=&>(#Yq%j zycc%6%;T%<7;<5jStS3%??XuMX9}$~u~B-h=C9u=;E&ab zalPoHi+1MN8` zKRLKQm_WFAs?seso+8U9Gf>>e;Ky6P{^VaRqc1>Vc35%}*h?e!xSu8n zTwq<006eriRe1Q;uiqE-HSuVf;lLxfeqC2#k<4+jKo<PXr#)7)H;5$p}3jucg{pl_!k+=_k}tlsgFapIwHl?f$cSanx-i2{B+0**@s~ z4>=b9N*_iYW+AeDj06RL@qA4~ALh!4&tFWr*r5+sUs9$%^ix=v)%QyHem55R2P;A! zG6LC;Sa>LZu?-0YQ$sDoW)g5iODD5W&?g)+w!yzPFM zyL3Y1SRCGeAT}(@@)uIiZQIjAM9nv9ROZx@5lICl^&BC2zR~q~fTQOd-7sR!H%{#D zz^8tJ9E^Ux@ttY_G3Oh;{owU{V>HmT=Nm~XFLuT2S}|fA$^K-1ysx`~Z=WX#yN9tj z$=G%R1?!t9WEvfvBP7r8j;#Th^)&fC8OfCr+3lmT@SdSm>$I_qti7J_JB~shvs|n{ z_D~e+6_MX!PW!8x{Kn@m6_4BSe>&?*2L+zn2+2H85|VkIA!H7bRgPo!rK8Gwswn;g z{wm*7McZ#NaQLm1$88*5_!_w!Z_ArS|FX#@a};oALNn~zV%9Rbzy(^TzoGz*4N?6U z2|wpAT6!jK|ZU;IB7S1s*!TTO}htf4$k2&va?wz$56d z9{|_3zup!Bi-|Gn2CInD4{JVM#D+CH+k!&%+ugrPL(vfw3d{Ej$(5l0#leKQxI{&9 zu2J)UG?0gLeEoKxwSyVyhx77E_>05z+kJyUQijkSp%WGVvD8i6{PVpBW_LFD?=yf{ z82^#x{Y6kPi-|&VkXlg%8j(ZuX|AC%*Q+s#KqXG}CvhG+c03JKD0Y-I%f=-II{T}R zE1fJ)+b8NDHOp>(lbPQo51ah*)b+>Jn%|#~1!w;HNdSZX=Vxl;h~xR0LK$#LZ|AUz zs-H-|(e{T7w&L?wid<@ZqFGA-1yPwnF#mRYbo*%H|!~1~Cjt>bR^Br?wos~yCxWYuuy-~WwNby15pF6#ig`Zkq8i}_D zutyvt?-9r*a>X&wlHB0>(rXyB)|Y-&-prWS%v&z(g~`*RSYHx(*y~G+ASHJ=iHjCD zE52I(6AN=a9wgvG*H7x+#=7Br{zlzI)JCmuCg{(@^rxlx&0OJt!c5s`=izSLL2peK;fad zY#~`c&pTY3WJ2A1zAYeW9*z@y4W^B|!+v#x=_Q}@x4JegnuZali~b@e7wzU3@u=SY zPJJ4HaN^RZwK3g+Pnm-HWa&4rbO#Ev3{{HHXQxCM*GJyV>U0(;Oyn*Sl4bD9A(ny6 z+>9pl44mU@LhmTg?`knrS7~;3$UfxLG2#@%tw#rfTOLKkX`ry9#lOmr4s6ysc-nVN zAwN1-NY0O5`3L;7OwIggBF^!JkwR z`nWhfoPWzZiu=%78R32ob#UI#!Lav}Q(^Z5{pi8><6o#&`myMHtsfN<#+R7LD^y4hB=IO_>EfMtNLi~VJKLSS)ca%KB#+&SWEf5B=+Ef3nwL6K)Zgu)}k06m?^e5-a;)?TeW}Y4ag$H;0fD|WB^`*a{((E==pA=E729xEqBKjngqhGFN?;+Po{qkv`BD<0K z!i6_WT8(k1Vn6dojI$)|ZM^xhQ@^F&Hng1u%Uoft$uiUjTfBE^5Rc#GEdK<5d#Ft)D~BLjX5~U*#qV!3w5EB} zo1UTxq5gKfR*}%^Q^Wq{?{C3RBL_d@1KLdP*#pt|`Pq*_fBcvO4juKFn{cYrX}0fI zLHu;MD^xzMc4~eKeh=X%6N7$!8vn$nJNP*y1Frhg$i5ZCPvL(;`KkAd=I7nrA^fCa z(9h5N;LyR(lApn-i=V}PDu|yYcZTxw&MwW*&%cH6lkh7K`uXVz4jueFgzs_c+s;SJ zfuAt`Eh7+UZ7>y|uj={t{;nAt01EZ|YQm$g=g*Z9Up;@jV#A2e$NVO;((aD_`qy7C z+s(svJ%1gJx?@iAud(??&RX2@2mWMJh5-d!{cI%4>>rQ+HAKFhGKMsvv%@yCYOS z@#ORI&Jg)j+GqR6 z&Ee$JA-sH6_pB)SNPU0hZ3bKM`EN@`e&Ye{A=5x%eWZhs>BM?hAv1~WEF>5Amj478 zdf4E*a04s$ncU$*4Z-Rug?g7W2cDdQ;V**g(+UR5by2 z>Xv6Mg=LKL3=?lM0{d^a@KgETMU{Briet_#pn%_LKLRwJ?-j|2FW=jzX0k^3IY}WI z2DG|>-p==?;;0*o;Xg&~rn~}G zkPNuyYc)Dol>e6ghN>o8UjJL&>YBA=P>A1G3YkWB&_qb~7B>jV@w>`ahC!C=z5a%m zG45M1200lw5EhGzao{%ia zIYP1^KL#m+ER3sp3V+97Jp4}UvRfczeiEO`@w^KF|3?>HFQ=u@5h=$n0T^KilOMt@5RE`M zViq<@@ZcK<382RZ+a`>d1u2b~#Zqz^#>deG54Sz=Zv>X4IqhNb#o_E>O!?(QmObQ= z$O4Vr_cIfCI{O`Vi;t)<{laZcxWUpd_5AT_Je^J=EH;1r&V^mXyNc^e# z$2A6r@%aly>>D967JI1(nC^C({Kn*{eIg4reo&(8R(^J-_n-_yk@82P5;9 zkXb~|+yG?s^E-bFEO`vJ7yWL>L2HtF|J?#bI2Raxzksvaxu89Oqi~732fHl*w4dJ* zxw~O~Tg95Flre059{%vUs|nc9d~{~RaPfC;1;@L>Ryl#7F9U`8 zP{~&iF=7XeWXec(P`O<{R?TccW?%$~mJ+SLTc}hD(5t7J#q)?x|u~iWrLkYwc zxsHiNWM%u0p;uW5Z54!W#A6SYB)JGXwizufU<=MZSn*uq!k zTQ#svF5{a73i#F&lJRZwCGgex)~zz)Yqj})m;>3jN6Nvnk$qKdrfMR47w|Untwq4l z&bOLD*qrDGk#%Y9<0`@*p`(eUuWZkyS6FDS6>YsMo%v=o?*s)j?+}vF{N;1Qw8zVc z&$OQ#>Ok{hrMzXMd6(M5*F>`_FgDPf1>9^j3n5)W(}m)Bf5uim(Cewrc*uATzub-I zw=FfE8$kij4MH-WFReB3yy+G`oiYf|?wesR4=WVb9xfo4jb{~XPi{X^H(za9?z8(3 zft-!!skqbdc*a!(o|2C>zRW^Y`O~_1%$YSb859t0BqSqx%V)Mf&BLJOPk$cl(9`#o z@|KP38+e%5#`V5Y@})jpkA*~ST+h2zo#?araQ?JcEEp^Mcg=4$rC7kKe&nVZd`}GQ z4WN+6z9b}1YJOkCzzU4Uq^1<-_$D=%pq0(*N3L`Se{q;e&3`fIoYZ6r=N!K>+1Marft;JDyeqJj|9Q1-pWISm9mqr#I zYJKU1HX4r_ps=2@U^Vd2)8kYbNe?>t_oW}e#G_>m5wC$qa8d5$yLi}MPk91I-B=8d z#gQmLBH^)UF6U=MFR~C(W$ULg&0@E*3>4hTsqOjZ$wSb-?%}fs7t<%HrA|S2xaVNb8pCUvj?LItVu14o`F^R8?FRn&b$A-9);2sNej-yq zciGgc=u$APO8Berv;1)~-9ez$g$8g~j~e&@-v)#B_$ug*u^!b4;3WmyW1j4YyAJJF z-79q$SIKC=ZRM~Y<>F^x!%%)!z~GsmStTL-REOdF*VjIk&YnIQlF{h##Xn)cpB_2L@#Zu-CV5AiqI z{%=e+r0;Cs9~WKO$J5zJ_RjkUPE5A&Q2uXJFOA1cP~!hq01xf|R`muRe*dRhCymhA zGEUes@Cf?9kv)0X_J7NB2cxq;#5TX?J!*R?#C?}rut`^{xWupjT=~qE)qn~&f|M$L{mWN$k9+fA#%|BazA8T5i%%_ zaDbuhWN1$q&*=Tm~S z3$_8jMKcwRq<@Q+(N71ep6ABv#z7jd3{V=c_VP*LRqF#6UUEthuiBT{c-2A^kQ=XJ zuR+L<*JTib8?VtAb7wEBqw0o^h*uHgwf-CnFI54V`LxDsAt)p%dzS$o&KO9Y#_%7? zXD}|jc_RN~fTO?a$;ahj7<+Zi0_Yf5+Onv!nXPtw&Y;cK$uoFqPZGrANP9lRfE&hR zqk_?n2UfgiAOeMF6Of_x>eaQv)vNQ){{L8?-B;g|Z@x(F)hAgN>_3v0!uRUR;71rB zbiJ`@pDdFT%>4I{Thjl;5 zZ+r0l1p8T#-(ERM3*p5j5Q0Cy9fLuCKG@&|5kyFT{*N-?%5Nt%Er)#2;wPQ)oqU!P z-vMFq-TmIr75u)r^gwmKsUXPl`R|CfuglloY$GVF&ukDfiEQAE_W*wixf*UCZG~zh zEe3f0Y}WID-b__{PLzY>jPz1X!IS($_EODw6#(hPq;!dw?NNBMpS?T*x8!zNbKe#G zj|p`i3*NzkvTd8YuhnOvTl1OQ&z6Hx zvLvGR``hEWuHE9NvPc?V&4X}qX>zOt zcOk4#iVdFe-HtTLvhr6{|3wTUB5T*JTVKKxHn(1-cb)Peq%=7$dA8XWqs6=BiF|6{ zDHd=lpSl!?uqxjG3i;HvLUKOUOGsAkp>q|S#`bjCIKiJ!?dPPz%cs)7tZRF^ISK|x zJ~db&5T$WP%paKHK);hM7*v0t^vf^|bA@3pgRT*hRcYj#;9W1Zekn{tt2{lr_;g1S z(e#ptNd&2Y%yL3&o`+NTO1tLy^`-KCJ|%0b5YECj&N`$>ymrrBrv4C{f|ZSL?UUU2 zP6A+zZ?S;N_`V|~eJ=`$n3&d>;eqXzI~MJk*JAvDRKk z%C>xKMd3R?-i`0sNFW&BBv8n28VSkxu71P7_i>C^`1VAvujK~^T@)+6H(cz(w+>J@ z@Lli3HytYA*57U4R{*|nlWkA5@Ky0;qla%mKxK#6cb0O9UVOP6DWnx&CJc8JE1Hgw zgHgm6V{#F6urmOZ{m5E<+@>48^J0Wg=L-?ybM2aL{JOr#%E0=W4GQ{s3F2y5Pj)nHc`K)bzf7oiVcau!oJs?fr+IUg**)Ns%(+S~ zu8(?U!Ijs}J}FAOiIi{f``L=CoBZ~BsjZ;kjXF;S++z9ke1#a6uW8`K1aYs1AF6+@91P=!BIL)N;caXmbg8yG zM_M*}QBZ;Nc$LbI}c`i@O zKUHryGW=7Q|9NswperSqnEh`nmAuWTL((J2`_FG;03#Sb!o+{-e>=v)L-oIX0$v%9 zFNEu4A{R_C#9t~S{{FXB!n%P+%gqivg8grkz_s1~b}hc!t^3(AV!>`CvVKtiTO|t* z)&KThM`nWYSPTl@d4Z7ZGG3YtXtGG)JkMJpBfe19Of`2K(9}i;Z`e$UrXMNk;%m=+ zf`8xcf9p5UgI1I@IA6IH0NOriQv_I_-57(4DLk$Ggo9Avy2A-(DxlUQAIs8E_6LQ9 zw>}`{J!OS)x4*<_N~|eC^Ba93hqZxn+Fbf1VXb>9dtSLtkZKR;^Xst7_N{GuHoFJo z&NMq-A#fB4QY8Ia#Ni{*;9m=tUBa5|oy{7y>_G+y8n#5pOgh@+MPQQ0XRFvu^=ga@ z`yPj-cQ~@9SxW!HIpLtHwFAbss-1qnrE0vo5ZsWv&jUPc?|Qc#M=`yVB{O=r`p=Fu ztM=D1s2;KcxBewF&`bU?fW~^|-cDNgetrQ4>tC<)?txu|Lvyoa$7fo%Jee zy^^0_3H)s^<;AaSAJ&ZZ1_kY@COoF8_%%jGeDUkV#UfP0DZQ=^(pBN&SM7&H+GhNk zi=%Fz-KR7*2}iOgy#M{6g@=k?<2q|RUIm5z?Z2Lf%ys%wDkHx5^{)!u1|B0e2uKDV z!T9wmP_^UN3HWX|7J&`1Vd0BkmcL!b`o89X1;rqC6@_sZbkR_p4@w#t3gdp70Efa! zGwqthE|veI3$o-icH-h>7w|%z(JXuj>`C)$3H&s!^<2>GY{AU2P}5a$ADfeP+xs&5 z^}w3_ZvIc|rujb&l*j-0F#M;Gk2+1kS#&LkdoayYsxNoM@{aB;*sUD!RE6Km%DBON7#i~5M z0SQ?y=ig2Nazt%$Zu!ICui0lXF3%r%rL4c7gYEnMeJKY0{{CWB&I;+z+$969{*;5K zRh++13+&%(Fy-xMdMzfCoGsi4s#zkDrwNbABQdrVl4luhK}uds&y7C| zi)GJE4xHT;|3{~7kkgjYCvo5{YO~eKbt2&_`ty%U?Z%g3dk(x0#+?9lS$7l;EP}ji z{t+tgC68%rt{D>|?}Pz7=$Cg@obJfiZju3){Whsp4)S*T&)z^nSh*aLJr=;LCxK}Shb2-*A$3}0HZu#VqCIx!@Zm<%c|1=#X zc8-G>*cF{70%2Elk&s+Axl~A=!}J>sezWOekQ}<0ul|pWsuyw({0xP(Oy!4KKx{Ot zC~203^F93>6<(k%zc_mRbjnlu1s~pR!JwYUn2E<88HO>1ic4kKc&#(DjB%J6L4S^#&CaV#{s?%bz0NZ~D~`1mZ&>)PjX@{HPFrF&u+_f3Y5p(%~;^hF7l|3FY7~EPjd@-r z@%d^$i*~RO=BcyT3TJDhl-UqjzkoTF6!XuEa zX6v!YHG+QC+~w4-oj-=tue3@>Vd$b>TE8OLd%s@{HH*(jyrn))JPXHS$pwY?p^YD5 znEvMdi5#KG^mPvPLVg2g@&4LezHoWdV-56Si|=n~*E{x$(mM zqs7k_ULTTj6G}}`!DPI$Kq1ZPAY>LD?JXpG%%?!=hZC9(hkmmU3NFDcms8kqM7Lj? zhscqmBF71M0@GemnV_D_G@oEdh5Y0R231)L$_ry|2(x0C$4AotofdGz1-N-A@-lE6 zKmoXagiNEO$2^Jn!d{{FFsPsP{7NEDfP)aMI!lz*&#$Zkmacxw2CBa7n8yDQ+cY+! z{;)IyRe!QzSS&DfeTvy+7;-=Xh9N>S3{MNmFgzn- zkOdIBJ*%w)m?-TEKDl}(kaawrF%1K5wYlKv=ex@os7*U8pp;`eZjc7*G*AGlmXK^{ z^@U_ZI}@Zfv_$#DRcabroe$*Lrp@wD7db6h9?3<=y_8jCcCi@%hcA!ZmnRO-p;rY* zmo!AuFYN!b-2zSR|1<7s4cb^x0Ig&&%qdOPPj}0RuYUUJRN=#zPj{In2aS56x&Ai= z5ZWd7{W$7Ynm^T~>xhaZDz^FRg-(CX^OK1`T6m}?sB`l*9%q9>ePO}Vz(Y@0GG)Y9 zUuav;vGQ@Aza z1;@X&puqnoA({V;LW2LNn16BW-csS&BY^^^QIZAR&-+gYQ^<|L&qkp+zBN1wFGYz$ zB>yb?Z&m%?;=e%nZ&IM;pAHKAcMy{KZ!aYHe-iv7ka?SLEylQS^R4?g8vO48r#AoN zfST}6>g0U*rZmRdXIcJP>|x(`79Pq&k1W)9%moEJ-Vu`V_&`W58y(NRw-BI*Mtz=3_6E&kR1hBcni{3nBImPMSNYI52b zBVq_%O8;zzBS>v)EeE5Rf)NNA^e>ZaNH_Nm1xC%Shquyzw>z$%5#`EvM7)X^ua%oD zyj1>N7kkLD|40G_eW@oT>x+zISG)7&DErRk17J#+ig@|+9T@lJ&$T~<0(trKwG5`6 zKi9ubboHjQWDj#@)b1t4O!8{OzP7A^qP6Fyaik`(j=*jl};qZvI=2*ZkiN3jB8$ zlKJl2w_;lBW*e*S+m_&;`BIQ~Dvh?D<*<;;Hy8_ML32LGrZPPmPn=Q zBs#kiF`m+f2dR_5E96f24ieDFC$sO8dlbw;M%NVog+~2>^LD^W`Su}iyKJb zCP>fy-qOT#14-({&#sXZlQ2utrLtGxMJV6|Ta(%<b1!PYM?`@0X6ie5q6njm<##>MgMwpCI*fAv)p;;`s8eY?$n==2R=QDU3lF7 zAe;Fq+(7(<&WGxL!S?H_?`Is9Cd-T{QaodQ-oM@eIX-`d==0P`tb+{nPEc@CJA_Q5 zqbKw+lsN81Xu3~{Pf#xd1UJ6GKWT56 zy$wf6unrx~i>5Fn@Et+@dj3}yf~rhZ`6Z2DA}ApERd2v1&3c7#Eo8)BzuwAMSx?rT z_JbS@lRWv*8xINDg^!Mq4lRA1L_0QdR#nn0Q|%SUpPlb*`ZBhpJF>oI28OS*(9-px z$r`P(MB{BrKt8hy8F95M&3P2ie-N}zZcYOZM zIUncxQ0|u&9x6$?;$@A;ouE)3dOinu==#uF8S&MJ8Xqsd-@xOinkpc0zhSUGv=umq z)Q5nv8-q$QU{IDm%;IOxzOcH`ov})5&a44L-ywu9!ej!y{hpz`8B4X55syI`j90fK7D9#oI@YJR!Txv z<=2OuK-1QTyYRbieb^mkZK7;@$P8q!wfI;1@B}Ks9FJy#f<6rEVdz5=3d4T?Fj~zF z4STpi&3(YX`}vW6K+@KS-8kyTqEif5l#NG5AoDW|57mELWxCdfvq7Q%wtsivq5E&g z$cV51_DPlY7vz1qkp8KKhtiKe zGc+E(K|wz{cQf>(R7QOMqUR`K-NYkUhzS=z+5%ZyKLR-F){o{fViMVZW&~2#Sa>M? z=u_8xl+Hoc$FgQS;q_o@kYtGr_ z8zgNVg}lwZzj4|R3P7X9yEo8x?{9puf*c8-e)4n~-%QEiRrE)aH`%Uw#H_V+#ASzT zqi;`&7@wp+YvpPK-#$+gqPGJe#`ZQ)u)dZ;@@%1nkX+sPvNLp0XTalRL@l5E`yFZ- zx=>mIC9(^pUn_9PUpX_^<2F~Wls@E}zDJ~9k?c#o|K%ft-}rpBKhe{;bLKfO$X%h3 zS#)&g!(cRrZj%dr-(bWlm5%;GG{dmBSGLQ+aM^zN{fRmT_(~hEtAEn!=habvh3?sP z)M5p!OP7|%pi5=i>u^%sK)+RPd?(G~+h%;{g2EH+vxQ`QM?PfW`!_}`d@uf7SU2!( z`lB3-9^b=|jE(QtJ3{bn3t`*%&c#u;Pu#XPwwS5(*Q%eO-cYZEfDNrTjQk*6y&)@y zM#yl=Vf{7Ce23YBq*8xJperP{4XFQzI?y& zAz|In_n!{?@CeTT1ZO+n{}vd#F-VI6gGm0huvJzdce%lTpB&=281pXXefs@iIGq%L zW5-!C;mZsbi2GvVW_9{zsd?KG7`V&T)!A5H@na18w+SB_9LDGC{SiG0C(dC3VP)u@ zEHLan)kE*~!JwoX1-f+G^Gt`FPdZBuhG9Ewm!sYsH@JV*QYeAFzH|X@*sU7V*2HEW z5%Ues_cK4R(9`q5dCV;A1C-2vI-34MMtuI_M1X1ei$&@nDOoVz56*uo&*fjT^V@Ye zilRcQONna52#DLCC$l28`kw&>>fwjp(l9)JA9(lI!;}BZgZ_H>b|B(dPnnGGA=!qu zqYT(u4)yRb{x3a{yUb*&1DW~Ur!-U3JAkPa5=|-%NM9lEIq84Z zE;)_rE-~+jl0`~r-132;&t7V>GLY{0y7`)wTS4KWz-%G8lXAtq%HE9)Jcr=~Uqk7H z)yRwW`tQ=W`CDBLr7Pay5vLsA`dCafy67Ise@j2f{PzvESwQf=NczP4J7>RV zfl@3C{j*quau5_i8P*QglSS@C435gzo?P z3{bW6|JJx6x9TkUC`#2S3!n6N-T1uyp2p`3P{5~irh!l55*wcrmpkyOUm7buPeA}S zJ}2RZ-1yXs5g%*51AA(;*n&pc(*^HqXwC-(XwDUq?Ww7dY)_5v4r5O}aE{NO?pg*< zr0uB{pmo{PYZ!6bQ_-qeJaW*Mm?}$O5*JyZD0}L@RD;qL6hOJEt)VZ=WW;AroB!v~ zm*2mNRbQ?GsX=cxr zzMJe=N;&PDB!})Tk8e?8oLahe_KM!N zGCBoO_G9S>8%bc(JER|>^^=2m5X#xF@u^H4%OO5m_p^-erG&$@HF2l!ym`tRHr|l^kqf)W4!-%p21XnzFME_v`RDf04Tg~ zZNcr}QLo+2odb65m#meRs1x-I(<#$+$+dVzbUxId zk+}USl0$;ICiY^sF#s2(&s*3%gT+OJw6$OXxY$GKMFz$oXSRpmdJO zAMfY95DQAoUsd5Rkvv5beZ2W+=EmQ^J8ipzzf4>&^%)m4fesYWj&uRf<3tFz{_W@Z zS<_@CK7X<};;TI!ycv`(Ni>yDJhvd;9+XeK)=Hmh-pYa zsaG(=ycklkGt5f3+&$6g^g(PsFcQ98&mKO@LRYERy=yeOy+O(PS2`d~BM3M-SSTaD zNPYVun3vfpUcXZ0R3O-ETMbCrZ7hovelF8o^S>xziHrx;e`i{FsP~a>`&8qx6%^v* zVIh+Ui%~Zlp0&|ue7gUAq^FcnlXj#>n*pHt@LbA*}kt3_NOJT4LkTXPr_U$(zL+ z%IwtzOONujC$<0W3=0pXAB#6@{Rn^p9*w>O2#m)7Az42zY3|UEty_Qxqa%^6*D3># z%f8`p8;>gZt+MswE*06LO<$aR{Jri}zHQfhIZfrggn?n_Vb;vwcY{>{SGslf?b_HZ#lr{ z_?`Ub$#VZjJ~3j793wk3Boob zkPZrJ&_+nM&pU-=HRvcLucGCrIb7HC827oZ_2SC4LM;79;K*i&?I}Y$l}r$BdV#I> zVL35mfvpV&++nX}G|)xDtFTpSAoEoNEle77NAO)SQbTWmf+SJoNv4krFhIZs*N2Bg z#OC^N5>Au(2VI%ylK;B*W1CP#;%8B2WpV>UUokj}&tFJ(OEi}-dQgX6DW z4+*EywG^z=`A=coAvq<3K8eXUe~3+fFs_klMrE9mUxyEkn6;n3%oFv)7-IxxRg&+m zE`Ji}5AyKAiE<#B|C9_);p23lX~Spn0R2g&KQ7=tj?R%s!VB^*GSGtjlSX;+zs`_< ze+>BL-?zXa|57=~Rj-6_^1otf1;~FDhk>Cl8yv;wZxi|7c?_rREdMM}u>T%Hvi)}z zlI?$(kg)%2p&fJiJG__E?7;ZoWpq%qqru}wK-iGVsM!5IA6*Ts{QED}hMqW{ADQwg$&m>z_jV!j%U*&4k$cWv- zDB$yzkc`jC)qon~bC!^7pW9L$_BjLNKKmSsA`x}Si0i)L2bX>7zGYv09u3SL_PIBX zZw3zjDD3laG{_qDH~0J%`Zsivg|E`TJMk`A_J5h6fNuvO8Q=CoGQQ7T<%{d-TnVU^-QtonC#G;7ik?UNl&;Ncf6d?v9$(EE7nYW+(F1$@pElJPlP zNS?nv(ir%#!Dweg_K9)d{C?hI;N#8jfuB8p8;7I17M(>f<q?3dF@>63W4rygbmu`{@`++BbxzYc#@2@D+97Uh%=PHn?c*h-k;u!*UJ_|%b@eJ z=)7!oUIy(0P4gsgRuq5`9bUI16vRC%x;z>$p^9H+ra2xB55hAydr1%o-|K3$zWI{oUr>pVB{l(Lk^+Oj%D26?XV@FHR)n^uf2M#q z3WpU*Ke!*Y^jQm(H|REr|BF0O#BZUF{MW?{1K}h6s5v;t-;cTyiJ$fSLH+8It3~0Y z$dq*0z7X)(VS9)M&7nSZqER1rd?_Lj0!zkN(CGctA7XF7hSMJu8o%Ebl2hW(8wFjA zPv8_^agNW;+%W=fMpvWKJBgdg^)<_TYVt7#osl*1?bzd*oBw3+|BS&uN)zV+cjo=) zi=Yes{=pOsHcJYYr>00c5ZceMCVZZ-b8b2GGg$VY$NcOXP5gxB3#&(m%NH`#^ziqRXrj179e7%mw`eWxJyWmZ+nE~_}1}4$RdaAk`*uka=_BGc<7sZ z7~yQcGZU8lIvCDeo_TZB6ZS~{XAuX0K-)r#fA#!W4NujCADCI+hTzoq{Ma?ZEF86G zEK`2wee*3pbpI|n7=<75zaWErlAgc*r2xz}>dTixAnxpFZ}c-wj%G&^-)oPu@KevH z9K>GAtUpO-vI7QwR|?5mav4b7406T=a9U=l?=PnmlbA%2rbtOhJFH>g*pVo1R#2GF zrxYVzxSvmHu6BNQX+zrIl$F0{|nKg*x8Mg%60uz*wf)JNYjpR9N#peR8ojQa(o zw96F6&1nE_WBh3f%1X!o(P?p8_*&ol;(qC7Czq=MxFnapXM#NJ>*AN3f%3PbZZFdQ z+`i!9zhEn^(64Xb&_9x0e;1* zeCb9I5B!o7kB$|EM>0t>FmRZG2l9s%;D@o8buKK)pFix!pg(_jU+z6Le`teKolMOv zE{FWVIlt%in&P3MOl9=f3E}#4z*G_i;$)UL1}JcQ>va$H<5R8YxvS$eMBcFLHE++9 z9PfyVPRe%qPsI3}No!nz^+ODfy!E<0o~RPGLJ8G+-JY|dtLA!LJvk+~UN^2K^whUr zw+FIxuh;cd;-pDod9T;~9bIEiM7)-jOZ*s=YHqh#63n*2n`F=ZV2LtsRC``pq*ue)8O6my7QMT<_Kr4^c$`>08 zk1RZxfxvZxEIgiOw&;D97qVy> zk4HdZV$@y8bUHdn$V?(zoXL1l=B7J?3gbSMQMDn{>wOmQVZ;f; z)kgz^vLB28Rp39*;$P)g2RwbK7L@$CBH$u{==OTh1GpFC&7K40v}JUfc$yQkU^%!> z)vKTi;ot0eXLyBpbE&N79)&_g^d~Tr22WYAtPq|D1hkptfwGf z?xjiHs)-XdTCL_+mxHlR8O^G2BEYw+!i#a#?Ta_RAMFCUTc2_WqQI_!1YBtSV=*#H z=X%N1*y~C<1u0veZTYtR^$+Ftc47|CX1*Jg)IWqwqoaF-HFUjb*%7|4mE zzqq6WFTp440`Lb#;*-tAmzQ1<%cM*@i{hBB%nXG1?3r%|RoRRmWoE%tRo(2fTjMbjlfTm8uxeO*W?e4Un(fz z*QS<@UpEX|_&xcR1HYyl$_u~0fRv5jAV|`!dTnA2DG~AG{4cPtuZ5qg58wEw#xD&N z@Vib(t`9c>sq4f4oXo%u<_s*j6nvGO!joBX-B0#}>(=$*{w>9IhqPD!ivi5QFzb_u zyb1uh=eSQmjBfBIzE|GyIGcf6(uaTx&6jRLFPkeKSDIXI`I40%B=h|=;`<3EN~ovB z?bSlO=Ok#pzn)eJgGN0~PzeoFH);qJ|1N#*(92*P`uxxVE%bsDL-e@_gMNMP2R0r1A)Ja+o%%d-Y{lyH&>VxU z_m9)|S#v?I-|bXZGnUk!*$C+Hn9KzlxV>l+;o@u}AOM)AKm=sk}@ zkSDodPK&CNDpQb%`dGyJxUajxQGEVNI!auPt;9;i{&gZK*y9o**&eqF$@aKI$SflN zJdP2NtjKHFj6a6I3dxap+x52^2D$@}p4tXFZ;PkJx+c*RfZ8>QwKy8ANl*foM?AP7 ztQReW5%J^PEHJ;Dg`awV=Gka}#QYx=6;=x4zN&6`uAUf?Ro?>LH`#iV@NHDurmE*? zqnNyq8fDNw|4v)mAt)QaY>3C5J6;qeU=i^`JRjQC!fU(e+u~ETzAXd=eS1ep*0)L3 z0G+Qgl299J#Zm}5#B0=Ug9dshE)___py#U${G)b6GIs`_qjy9KzJBav^Amp-(y$~Iud+PD)G(7m}TAWfsY<@!p>X?*kk z`pWI+3p)mwKdFOs6_#V^Zxa3U*H`X?*h1+#)$D9Qfqb&fqkQiS!!=dFyMKO^i$Q-rd1i008ahAPD+8|iQIp~2 zkWX6tWU}ME?qT95G(VWxHC%qMrNZ-r>_G8D2FUUGpNMx`S4RVV5ESh1u#l{4?^Oo; z;;?Do=(>D5g$z&iZtV-`&8=QGtAl0xwcC^yntttHWs&3n)6%8L&AM_)Sp<%f{~nr$>7qN4ZYp z;rA$HYU6hvki>%;qzE%S`LZ6%xVAC-X{ z4qyC$o+Yr)H=d$##kIY$&Ils&NALf7z~C=F9~HO4xR*Trm=x5H&WBHBD@vm~=J>W- zMttiB`+7N)VubQ#Wh=#5kg6T#eu^OL9?{5}-FgIne%<{B6!7Pp&d_Gk?O*Wj_vcCV zc+l_9rvnj3ec&N{59w=Yy{qff<>1f5Jv`l%WYA=kE4eDzX;@P`@as*yY2t$Xv(u?*++6m3qNHauc-B6e&6!&4wigWevqG}oQ8CZCa zB~N8<7uDDDybKiNxnaLyZ^LE8XKxR8a|rQ(I#{+47eETO5PLya+_KpeZP7lG|B>~` z>Fq5<-j)n_?AaQTVo*S2jgTCjR}0B)X(d8t6FK!SK<1nESH>QGzS8}14N*+eJ!)?q zE1H~%&IdhnJEMvqOPQMPg{Tks?N!K+anz00CDEc4E`FnMG_ajhpAU8nr_U+s=gUE# zt@%_g&!=`}I`5}FI^bOO)}#u%AIw)f@cmfpd9$&f6VF!*_ChiI`OVsqEMtFu({>1? z9y(vGC;LLV@|%&5l|z1G;hVwu7T)c|cX3#Gr!A7@q;imVn0zZIu)nPVa(uqpWZ|E4 z894^}ASkRxTy-7*=BdL8e**qYO0Bc#W1);>2P4AeYQ|{HB&Mi?WQ7T8zIm*&!UTR3 zvlmbLDl5cXgKJB?GEqR4beW`n3LntCPAV5_yo=Isr>FyC$>L{6Z`vq@=@GUwg~`8R zzf0OU6TeKMO*%M+f3AaL=Nx|vg9O*j(Tb=L7Bg zm4m&6(NB8++g%1z@%gHr*#`>8`Z-oqk5_;D{|+A0)O>HDjQHZ~lP5FBR$ow^Q{*6B z#dF(4`jld4Jdtc=~|*l@KC_rzX6Xd;*4{PRWgzj^dSGXcj(7SWz2WNzb~pk0Jqn*7U8Hn z!&tK*N~j{~i@Xn}c54fvF9o4j(Xr166@x-PcIB^(khFe}n5A;rN_Zr|dLPV}uR5Tb zK1~jmovLmF_O?Z>zd)`h0j1GDcyanGQHF#T-Me5aMGIz7->mqJd}PfX29T(?j0ZFf z;@`hOxBU6Yehm8akIq_{5*!*c)%IryNoOs?FhCOmZ+-p{ShUvX=UyC9 zt6jSY@q_U$S2%lqZ1(Mv-*v4*<<|r4Ak1pFogw--7lVHJtrS-u8t+fVsZM?D+Or(= z(J4Q9zx>0u8EnPpbC)JDv=dD&%v$1Q&_hl`hx`OCvA#+l+scTqKW5Z7(pzCfxI4a; zgW=qinQV>#7Iw1P47Wo?@ssFnI_#oKnq{fJnRJ)r2gl%y!ulgDq+fR{0To)`I(S#O z{IgP@%9YCL{oa;7=8=d3vu|&>ST(UFImOmD(h7I$5CW5TlgZkjf;}Kdi*K z)TLHz>Z0>UmwalrbjqhmSbbSr!SWG%@0V^#NcDGaEoLKS2^IZl82JUS^8oF}=6UVU zro*1iU7p9{`mn23;k>p^H(WyLs0`>xCy!z67xpsnW~V&5{wJ)xJXTTmo5l9KtA+D^ zCWXD9Wdq9Xej>z!wtQQD3s&)9G3<-=V=bs=TsiFfgP|(5VQs7`+WzjHDX!nJ;PYq6 z!7%Y4tf~~yZ;G)GL?ERHV~wKY4hgSyT)K2hw3z@YQ&69rc=3K^$v0VOv8oX;e|pjL z&aHqbixizFLDz_rqe+l{r}o!?)5?LS>Tq}WGJ+#y4LB@B6d7IIkAEl1JV>~YJU>?N zzie(Hpx%Gk{&Jn#W`UyS3VQ$L_Y8(L-x-c^YrgZLlBJ+%;vqEu_`F2dwP96|zzZm@t;57sQYTLV`DO0X%6tFsBd z0!0yH6QZO{zQDK1O-qN z{aF>%pHshe_{-g*LTn_#Kzq$(hYI~WCAL7TOF+TJyIN2dd+}~_&^vf4F54Qolxl7a zLCEbNP#>CoodG23Lwg%*UHWDtEYDvbO1_E*o6+n*hu-&rq@$iP9^d2CkB#?L*nB*h zUK$cuf33k*eE#n&XL^1;RkM~0N}I`^uc0Cd{KAnDvl97FVccFhC5b-C699k8{ztr! zk}f848PIS)-MATJDwo#}S)$TgGMH^yBBInQ)mtz|%v#3ZJz~}>9zO~Dc+;mXd{Exl zs4iM7(#+%U3xI_y$gc16W<27LqusQ&Ctf1E)1`a zIth+oe~p?Lz`_3dUZX*~XG4hnZNZ@5{zd~ihy9(0Q=RtL{+^1mKkgUGyxL$YKK}(4 zHN9uFwPvh0C{*wJuLqAAlu7YqXswK71)Xx^Yxyc`{p*F>_Btq-_5Qh1oB;nX zSam*w^B*tW%NQeAW$Rt0JiNAJ#A#NqDaDDhIOz5d`@w%>i+}b0-^UXb2YF4zu1!_z`uu0NNM+{lDL1+zHBwv4P@c z!=8RP>jzSg+kS-wld8up9>cjC!<6s^v_L$2VcY=>81=Ykkmi~7xZXIeT zpPWFV$xnR#R8io!p{LB#TcBX{SFHtmdU-7IF1A}<9@9z0=6pV4#gBQzIg=i1q&v9we~!bjehy6;j$;$8>Tjcxd58KE>#=pZ=t zGuV9|gXry-R)ldY-#UG&WBxN#9Sj4NtBOYO>7Aa6ASt_@U@WABI#CuumqQCt5ns>K zFe(@$;>XEyV19~)-%FxlT`}cl{IWsm`9W{_q}*yB`J~+H{560#An>virOSVkQ`m=# zOHDjzyVR}XvCir(7`e|7=OMA0qb?(89x3r z4PT46PXQHWQ1&6F^vQ)+kBi-S&CAkw-F!b&z^jjt$WMf1yfzETc%A+LpR4ie@NpQt zMm>nrBH{JI%imh)fD1dhNYDU3( z9xAsRpW}bt_dd0|pHZJZ5Zv;Q>;8%KFNyy7`{P|s4<=?SU>vz^t)r{YhQT8v zkbIGahw6{3(p%$k87TC}-TV>oNF{Dqk;XgYQvETepdmekWHcrT$!Y%% zA#;hWwF-uW6xrL~;pWHr3w--KJe*)m0IH4Tal2U83rBgf@|>4{m=Fw;9?`QxD(c^bvJ$ zErlK_|4^K8g_ICd{1DPcQT^AJAlV+>{<~rTZ zlo3j|bw1hxp~1>W55V)I_~c(t`r>JpjlG`K2QqXk*6!%17ka(H>7N#HO*Am{dTw#TtTa+rHlNDgyvfYf2G-*Q+dryshOSs3?`oWdnd$)8s3vGb=- zfr2}K>aB8ql|RuRUwYIaY-s8$~Ws4WbXkw0C5$&4?5`Zxrv*1$7-KJYolowk0Tg66360n6UuzZ#uq;06CR zaJa_mo)1F&*IW$x{a0<7%7yx`Lu!ua>i=(14*tt&FYGTe&o!9xcE8IXp&5G`6#Pa1 z{~7*bw~YAxg=bqKt?og=_pP%!HyLb6$} z7Lv{SGa=cm^Oph!>X5*zy?PWfKEAEsK52$bL{FiwTfpP?6#6q9MJA$mnz|QQ+C3SY zan!8=PtS`*10v>cJSz#bt#9G=ui!OctX73wP{3=Nkc`(`LLy!W$#~uMKI1jGl)po* zhS7TyFg}?5xc&gYY4j(7BC9Km`|CX@qh5chG>*?{ z=39T+H^WgBs)K$;z>`QmC@EcvWw$^m&Fds#s--iYGw^G=ikgC%OG&eIfu~!F3!6pJ zxTZ*WESgK`2UebGA+njJMEh-y*NCKnqNKhs?#FkbZWH;G5wnWq%v_A4Um~a^r;Knw z^Qk%*MZJt_XpDarmBGTjzjrt=bi9_WGX%zxm^EDPcntkC9 z3}9vc;eq<%V(6BC{t*zIefr86bF z@aR&qNcO`1W8&!s2z~kxgR4?C04o<74&&~twZqU2AwACJBUUeF9S}=Dg}VkZ%&1TQYsz(Hini3Cg#_Ee`qaMmGfl zJ{xbMiL5RqI5e1+?)!K$cy&a~W_Po?YaZ4PF&igMzAxl?Yxl{64Nn#6hVpi}J zFfse9rVCK9>NsVCI<`HbGV5%kW%hk>m%MXuE+s7-GF>=!jq4k$(iY>={ zed877kiR+WFUtR)Y_Ju49us%Z{vsfJWD>deO~ZBUlabtDn*VJ-N18vQzZ{I#bp+cG ze*`{u8{#GSdG~bvkLY6s8-!c_m>A7I$pUH+nImB`&zmYP1*I3lKbiyIg1M2=Pd-;p zE2hgO&n-EVr{i*+Ob%Cov+(`oSK=$23GaZTN_fli2gL~%2+AK^f!v(6lEw#AYh2KB*dKfGVZ#CQu2wH~?6 z!(*#(&H2NEH-Lv;kK8RIzV%4wdyQJEw|5zM1lJ??fNOg_@?Lzm+cYv`#KLDEPCOPB zkwyoGo@gPmRLtZ~%+Xjwa%3);LgYXp(})}?B-gXlypaQR{wx@gZ@NwgpTeoW^~mYx z81<~BpRfkmRlwtvvJs9nBk>~dR)t@-5qV!y_|eJE&gOA%#a57V`xgM$swM#!x}H}9 z&6ckHxz;K<#=hF%`8&5f*Rnk4pJ2)JbXsU4AAw59=QaG&-R6|;ugX)fbWO)A za(6$aFxS%w{UkyW-|>i9?8)g5M+ukjDUK}^vAOAZ)@1`)WJz!+{ zWDEQ(pB_T8d>R(R8R@)|j?5L{VQU3C@BJ9vG1e076x9+FCZLmb>6XAzoj7f_J@xeu zNit0*>V2sn1i1FTs)Zip?w-Mc(WZHk;+w2rtUS)bQ#~(rqlc%@fAtOGxp6x1%z;kP zb9Vw}9t*<*^T~T0lZe*$$-%P0yaCNjHkiNTD5bx*dAx$r{3ps@V1X8hWQ( zPrsT*|0uKenya4!Xm(Ec5CrOmvUMyLTo#_$$GY*H+K$r~*1pA{fag*n8P6w*3_SPB zh!4+m+BopsclVLv*&Ppw+1{{m>#%tK2NJdMT#+eRm@5q$6hnB4nEw>EN)04dw(wMw z^6u?5o+ClY{-!Sj#3WLUWWuyaMpA-GIrIm)eM2dmZj*zgObO{SJs%4A?YFJ1#Zk91 z{W)c4ObaqfpR9Tm99g|%i1pC=HIS`Wr0UQjy@SCTkF z_cYxX^K({ic@)tv2MQ0zQ>s_0MG~JsSU70cN%P+s6wN#fF2U+2 z_@I0o=lG_%Z^mOHl&iEbIuDv$dwG3ewzv6+lgd~wuGYUm7{!1Zip7^JE9kqX23JQtuCqm{BK*vmke&TGS zUt>Sc@%3xmPy_mzqx@4I@M~TtM|*S6Ih~0soyvLoQ7C6nAFTMaj5rPKI$-gy`i)wyYqE!`DUP!@0sG#jI~o z&XemTndtQZd8Kku_bZkb(BPCG$mw`v0*2HIaXN|@BaR49@EKuDO1N118*Z)!oNUVOJB%CJw z0xmvEWAp_q;mG`?2TJ!D{KV&v5c&SoMe|g*E2Nl6jQ;f;*h?YyQt4xkjHCtSJ4Z>x z@Q+P}XLgP;%}{u&GZ z(}@3c;y=ARknzQb?P}@D5Ya`t?K0vk(tV;Pga#tdtBF#Wif7o$QgA)E4WPHzgFnMj z@{|r|a87K1MZ$~oi-~_&Xes@v^@v96WKhtb1!GM8krAK%OkcxSS^n{u;JTGRzgP{d zZT;!qQ@(+8Ct`oZxG3#NqD5K$BsDO6kA;VtkN@f6Q6q=%5cBaF&j61k+$`BaZU`Nhqk!1`@M zCehJeLZ%QoR7eh<1*3rt`kd+8IhWWiqdAgDy!t2R!5Qh2MVt=ss2)?&EEDG!=oOq1 z7;)wgpH^u8uqeQ=^xJL0Qd`y!Ydor9NdScmqNb3XcHJl>V{rpWB%1W8S0N)KPkO1% z01D$e$thdt7X_Z@;*g7Kc)p#&zh;-KCcG@FB#tQS|CoChIGd{Xf1DU8X(meOcGOf8 z(THkP>d5VkW;Ak}LQbhnil*Eq!Z0%!$0?#*LZb^Jp(K}Rl-w06M12|&TT(+M*ZiN$ zTKlZM_u6NixqN^BUN6l$d!4h_dfw0dS!=Hia%eeTL2S8#KUi>qg+k18B;Le~>{@t9 zyh*`C{JIzUw(!F|`~|NN!gCK~O2tCwx~%okC!Tx2j>8(OH9yi2M%XJ`{EH(QNB*!e z;%%H;FzT{?k`b+`MU3dmO=QF)+(brnq9&i53j2Zr#0Vm49X-JF5@OKDCt1cVj=k+EzUboEA^M5;G5;?o{@Nq@N;DFk zb>anOOo46hsp8QWFGK|n1@(@0-4pp&@tzpc>kq2GG5;_C>8x-3b_VURuD($?lQ(S_ zKRXNWZ~1+EHE>#L*-@+qzGm__kNJyP>m8#>fR#o6dCXika8mmo6FZnK%soomqFuMG zyGCu!!#!II=BHV<+$@tSud#zIBejE4LBi=f3itentqte@5EztKJ_)-nO24 zEv=^5;6l>cgEfd47)bg*OZve)4>O!T{|{ehz^qlZ1;12X(*s zpGi~!uv*O#0>fg$r8BhOyu%6^!KV9g@LbyC*Nd25ukE)Qqk2+YgkOc~Bcc6&V}vloVYX=AsYMuJIPqce_O78$g~LNU|9ilO z$j|I=s?pA1l!q84JMNZq}Qs9JS zP#8@+9PB~iA+hfPz9<)&RuP)^b@&A0pI+fEFDAxe@y$dxbknakd@244MpdIt)`+i% zT9lu+9AQzt0oJG&2n za{BAt|G4>U&%34OuWj=ghm7m3pU=g|-R86P1BRr`;s*+AcKl+KC!w#kO?mRN)S$jL z1;POM^~yjPP+!xiMQK+KH_wIpN$bdZ$ z`&XdH^P`s}p83=wJXdlP@w|J81q5o%b42S;zhgSi)kp8bCw%h%6WtzO+{p^nnR+(N%{kPeBRB>a-PXMgb z|NK_yX79_zmfCu_Z9Z{0pCdn77){Tw%_puQldl>??6f?;_A;r6C$xN3iN3Bme;}DV zbbD=T|F?y9J{8Z4>HRy=bB%_cYlh&Ik)8)%a?q1Toy}Exh(ZlL^SMJuPn)x4L{IV_ zCx2caD(M-V;h@K$PL-Y+M4^VBru0=1edk`NL1)T{o*}!P^voY7>6tgsK~LpOySyFe zX*-{n>`3>~(lhsT8PPNU2PZvMhf8|)3~D@>Qw1@g(%d}^AC6E=()J8=&7oq=c_D9&prJe{4uCgrDq0FsG+AneN`)O zcb_aH{xsdG;ZKgF=h=P^deW&=rRP7Mwo`xp$;SI=>FIT%jOgjT!%5G|k&>P_`#R_; zpiY&Zp+upEKi%l7T6(7bTSoLu|K3T@*-?_7O)om=i64!fDm{Pjw4MB!PWRE$v+;Nt z(X-_{Cp~x20Zr&nPru-x$4{LqJ^%5vo%GBn(zW!Q`lpQOIs2`Xo}4j~KlPmSY^6?> zo<2mOM&53uuWIS3TUPYc*U*zZR?^cY-NB!6)Tz>QX#l^jq30*=(An!p|1Kl`bldLa z&wD{hPvCh6JtwGBrRNo*P(#m+^i?f?#{5-A^aQs#>4|z((zBwEgPv6CRO$JTr|s0A zA+HeQbo^OVcxz$Ne&NxZW;oc57{5^MQ`Tu9>%QMxt zuR(g8^@X{6-RcW@)5^A}lbrhkF!$ z-t>rupFfC;3O{dp1HWhA&sRWK_57UJvqb#V($D9iF4*+I$xTGA1iy-bf4n&hElOyu<7?uDy*59Y;MZf)Z*uW430H5&^Ul-O z+3*k#NnSo(;!%xSiK{m+_aG>EsVNxsI`{ZPP*mB$gjk@M zAuhTtHH0K&^G^J^T|#E;;+ujf$!ZDfl*)YPQ&_r{jUHzjlbXR z=I`S#y@1Y`EMDcEwLBa@IsSZOjg6y1qK~~LIa)|9;^+}>B1h}yVL$BxdFydvu8c~@ zQ4d9>ynS@t4`deQwv9{z+rA7mh;B_{?*}uGrt|vOz7eTJhov81cWk`zrH%e7yubN^ z_ayx_sYUc(!A+$9c5dRTT6b#7{mqZ?r=_eI&+@1B{Hebmk)qcZgBziDFbAVD_$&A- zX2xswT*NDj?!d00K0%sY3onWN$7Yzcf%?dq&?x+itKPxsXV=0@x$|hxsQHV7)FU?7Q{yvupkz|FO*lg zn8J8H%?V7eb7|{&kvx`w!D00u=`r5;+y<+`q}~3Bgw;;G+wu}|;q?ujg64~s9U(VeSo_*P{5T6d+yH-TD&Z%b|>z9YDa_zt6{ z#CH*YB6NaLEBI4BkO|-Xgg=qFgZD7;CxiP=KB}?3-|<&Mws+4C!k+HH*k87kk;F^l zc@2>~8$e%i=Y9w?ceJCCfiDR1+> zWGKPhpxr*KsijPgOyxt)Jd{7${3l9-(R4Wgsfl;DyZQ5iGOlkeLja6f%WV85#f5n8 zE6HCkwb&kU6Z!i9H<7>hQ&aM{34ao5(VRc6XO8A{B977!!V(0dCi7R2PplxH=Ghgb zDV0j}@!k)ji~=e}qp%EoNqpAFdv}ot>21zc(<8DuVf6=P)M&NThOe;q53iN@rcjIU z9l}k-cPcj#-$~Sz_|D`{a~RPt`BOfB`iei15ei0q&YuYFVAMq&343HZ2tS4>aO)rW zD;Q8Q_J_CH?R}k(Sex*sc6+~)`t0_87~z{;3kSB_`}V|aJ@(H>hCM1?(fF@jV#9ws zL-oXZiNBv(gnw^tBL2O&iTL-Vro{ho{v`09z@PH@ra}Hxz@H|y*C4)|zY;<`ml3Dm z2!BaT$*zT$L{wzjuQ%7>v;lDeEZaAo8GAf(G>gEK?8SgjY4W@Yw=E zi@j)1Y|-0`XqppYj+PvtFMvNf%;!gnd06?4L;F!_u?=sLkJsHK@lK%@;oXg!i1!F? zBHpi3Q{p{^KMB0w;ZONU7rg%}h47|CJa-=2FSzL0On7@t8!>R99q%iqyW_ox`p8Dm zD9oWO!Zf=UUdo+E>^5b*H8EJ`;}i_Aw}xa3?Uu;Lu|vlMBT^*uRpSC4wiAOQXotJ=rf>B@aSG@3vJxcC+k{0?6^L`!i zH@g;I5>+3Q_gzTXNY_aGa_6Dk!R_PVkB-|L--^Ux>-kHLdip{ekfNUO(sl{ttJESO z$8r;a%;hEmIg*+Z$V~nufSk&o1dwa^6UlZks!wvrQLu;u+z4jWx1@R@XK^pS2rHll zyBBX`)x%qHxr%;k0y>xawYkGL0=g0is2)!=%|`M9t-eg%;HEG6C7+Je7n}YT;Cxno zsGU!3I)72CzcWise{J(Y!8hvb=kuuReDdBYtNEac8Pn(M<$nr^DlT=;rWVQnyWB+i zpUF*>{|~7t<$oc667s*BKji}};G5s^Cu9tK>eGhgpG?HMER=Tq4?3!{{G)!dG3mOF zS-Uj%m1shN(^XN|4nRe^??mmbS6OB1K&xrl1eT1-`w;<|BKv2 zSO-#5!kWvU1g!J;(|W$?jfn)LaG9uv@bk3q$%vFQLHu+Mfk<~?5Z?>qzuVE;6!~u& zg@3Vv7^shzIuqCQF@BfXk(g^2ea0xvI5JnO&vnV&==9n1eu>#F=c8X=C$rZHr=^}> zU@#Zn-Xr;KP>cAT{3Bk3#W;BWkekTw+kPU3jpHA-<4;TZ(_sE2_!#=GhHeOiEip3kW3{Rt`3 z**RK%UrZK3$M1ac3{(l+TX=p`*zhz?OXauB@Ao4pXg0@Di}<~go5=4|+(dr&{FN9c z`29YABJB)DZQ@V)$l+jA{R8yPt^8>ee-Z+AOUqCYVdnR14$==o0YsJ6Bnxy0mW5_- z<5&3o@b>)vC+Z{Jr&0J9lM473c*&mMSJ;PrdRbTy*|U>MesA-iXv&Nuv$XP1do2>E zlZW)Oe*QQPr_~9krOHDsxC*T6RaNd78%HgYhafjm9$w=n%EMdKl=glRe-iTWC4Um~ zu!TPfdDzLHggn%0PV#`P2iriwG@RdgDb6Ab9X{KJ)2rs8? zhur1i!Ao#Jis#Wh!c35P@CS8T7tb#jTsl94p|=-Ep0VX!8zV$K-y~Wx;(lroBf4@E z8Sw%)kr6|wDH$=2KM6+6^|r8FxHyr|E0)Tu^Fw z>f;5}1mmW+ZLpqY(&ko^VmgOf1nYa;L|EVECfN&WN?2F(CjsjU{*=!*jk=$JB;7UZ z@8znKP@;OWO_(%;K%_e`h<5~7!|{@Ry>%P)k&mEJ_!pZ9R(*YE9dV6p!d9G@urlst zwc`=l1f`rK{kP43kUY=NvjH#c!!m*c<@r-;5%7z-iNJ5;CIWweniBXz{v?3^jXx12 z!KjLt6UIWGhcSSr2S+KIAKlaQPvmlC>9c< zaQPkX2Thw{p*K2P><2w#(p;N~#Pfzn-9zMife_pen!r8Ee$W9K96VVz{cRH$iTu!c z!?)82_Wh5~g|G^HUh0}MIL`<1NS&_7V?WV~N_8rP$H2QSc*N94Ie{H?X6@?fff_tk zi;FfqmTU27Orw$PgvI0UGQfk+V{0|dhKM-Nu37`B6>-#}{nk%4Aw)93Bxa&z3`Py6 zPTP5GubjFPkg}b}*6s{nblDsl!FgdK$U&A|K56A)gGw#3GOU{sSr#Eo`wvHMGV(jF4m zASUQjq^a>Z4{~M&I3}mzIy;n743NUxpA5s8Vnatz+V3b5h5Gg)waAGL<0d+>Gk21p z`9X=&;N!2YFNd!;PY{Aw;8&Aoundi8@wUWV0p|_{W^L$& z58m%TYoZMi@x1BXe@jGs)M}0q>sJj45xKMfG3v2BZ`w@vyy?UX*-N-sPMvcG5#h%} zLgzpo7Z_U4f%6kz^t%3ggt!U$vFZ0X)bAk^Y(NQXcGLvw%74fj#sg4|xrweOk(+1@ zN5&I;8Bi2KlY#%i)fD;y`ENFdJ2S`}N()z+27qv6UGsGMi5VaEp&o6n)3KfBPyo(It$%jVSj6QxS;y+@tv0MpO>AsZu4X-pU7$W8lXg zcK^ax$mV{|ss zxJ0jS86f6H)o}og)1UrEn{RafbYTjpP0pVFW#vyfpBeC~jbq|`b?r z{5!55RwXd_(O=~qlBVH*T_nJohh!cV6c?I>Sb&nxQu z@sWUyAHpAV9RNey&QuW~LF~Xy6h!W)a>MaBp@let3&Fg;4ScE&Y5*Kf3AXv)pw)F~ti}bo0^IPbi;V zn`;x3&sl9xos(*Nf?6adRm-8TqbZes9qAve)o*5fy|JVJ$Pwv<|g-xhA7n(gK$ z;&+gnh+p=N8vHK20B@z>xAuJtey@_Xv&SKq31ze4*M^v3$8R%Tb;s|!vcNAN)wI

e-~Gj_*JGBow)H-EWtxTpjc-LMtP|}3za@ppUU##&uyXJAL1ee#_}kY!-T#4 z=#Bmr_}74)hvP!b#x1A%KuYF=YpD=$`$fQwr~IVBHJQJN%W3c?B(lBYy-DosxRc(r zq;t#@iU+u`KYD$~Nftuz8AGfJJ)%LPPu$n$UU%pCrgxnv|y>Q)W;ra$rlx+96$)!m2%F7{6&^2 z4}cI4%9kLt3_p9}A1bAGneXukMMJG;YULxC>@!A>u;G)-_`H0P#Agh(2%p*45k8zw z!uci_<9EQBn)rO(oGG;6(?o!#;4_ktwc~Swu9Acx7;!rNxcbw`3ghAI3DG}XPybk= z4YgwoQyBxz+1Fa=&v(-QfR26vibDSk!qiSb;~Ad*mrIp?uQ58)M!&EQo2y9vZ=@FU z{~DqnT}eE^5q}BsUpe3A>t;Io1t<#rLkT%M{V6mO)34)wL4>rU0)*$k-xxj2M!$Gp z^1W3h{dZG~>A#xjCk+MqmvT?4BL7|;{Q?w){;!ErJN=Uh&k+9!W>LA(;gPpAGF?#c zu;p9vp!CL&p%y6UJhYrkB@FYfBHC+$#qz+n(T3(zr}{d*k%WlmyuGUQRc+$5ds#_# zEr;i?&zLjBLX>$P+IP{Cuv65c^?-G?E&81rgWpl@+bqE$i+yXzMC1DmW4Ya z`f3uZSv3h2uB8T}Zmv!O;tTEX`H66{?eEE?-@8}2!J6vSyWwZW5Q*^gWf+qOS?G(- zrc?yZ>$+Uh_!_mECjjA}UPB?7qXl;?LNJ~&sO1tmlT{1A{h95J2*Vb& z5-|D+$Uy6Rx=L(kYYT~r4x`>HBg7~?K0YJkB^y2>9@>0`#OLA~#B_`YCe^Umixlor z$XInZe%F@7-Et3KRQ&-VYxf5!G-k*j=m7X2LI8@SKSNLdb5~0G2T_as;iM}p^iSp< zmHs9=`UNNo{e1{IJN*T8H9Y;7tcpwk!qcB-WDK;?pU3v{vzn6rjnrcLFDLp_K%`Sa z94gns?=<&^#CTPLj(!1(LjNp6&Q8CFMv`{JLyDux7j$CLF+y0-mC%3T@yRe!2iWit z_M>8LiBD~6(R$Xv>K6Oq;~vF+TsusIPs0g(F`WI-uV;NqfY}qzcElFF+r8%V$iydX zJjw6xy|cd!q2(+=7hEL~Dn~7@M{*PM?TfjIhW2J|WU&isRT2p@(mOsV* z8eAC*ZJBxXGaSlZA{#IF*Mtr%eS@HBQOj{)={3YEJ!a2DB3t3)iQh+Bsh8VLo-afBc=)G$nFEv=@eHmSKr#JVDQlc04W5uOgsEy7> zqXlHVOLB+O{x-FU;?`A(HZKUH4|<-vfHrNWg#76rt65bo@#g9^e9_Hcgi?&w!raB9 z`v}Nb^JEzRQ1#0Qut2dF{I})T87S!2JP%Mf_dE2OfIQQ!uX>i1+WM+XehBryJ~sY{ zc=ukiCdi+=+3t9tIlBt+N7nz+xkrij{>#(wXZ$R_2waVUe>K5Td3+rFHxM?-gS!Py zhU5vGq%+26B2mT=KV0ZfGe-Be(VxfiIq_3+qE_nwLn78F(bFRZ;XNTHr>_+uiAA4}<}+SJ>+{cF;WzCigYj$m_aJBT5avhvprX5k%WgnnH$>+`kEB7qLmw0_7~R zf6xU=-6|FY0W9CRYK?h+0Cvr@wx$tYEo!ABN6mqM6DaD?YY?gVbg`cc0V3n4XKcWY zW#IN+hx|t1{-hQpV6gw6njAL=qyDHwFp}@FY}Kjn!QUz;`v2G+tugzinNni9E{q+ zJxXepwVbucB2S%G@ zvSYM}uIe$WA1Ovf;gkBb4WAEK37@<{;`1W4IRCF;!N=ep1)o+wYVesUF1p~OGg^uq zJxENjW3-a4>M_dAk08bq_}Jn*a+FPs5D3dZu@aUFH)4y_Fov6GraE3g2&KcS z3dV>S8IPe}Wp(`}9|iSttLR2T5%v_UYo10wF)eWl4W_k3HwqdfwnTb*Q7Me%CoS|w zXA670=q5??=hOoKf%~fPB0I8R)MMq5Y}yb6TjkL#As&WN4y&xL3 zshPDEnGNUFpCdszfuF>Y8^NgO`78KXC6_=}QU1@rVd>c~qz7-4J8u{M+|-{8Avtiv z0=_Te2%ie!k1o8q?W+hZ2ZI#OzVdm+$6+^?1)n!?5?~kNBtCPfMfiNeO~hv-H6=c0 z&JsQf0q~V8Zy_Z_&={W?BT2gmQ^uzsL8yNcv>c6q@iO6~L!?`zi0Ji+4jwwvT`RwB zh^IPzidoC-D1my1mtQ*1q7zO_m0!W1YIP-lJk%oo)aNGh=Wc3B{&YQ~;mFPl zR(>DNL7wX5H$@CyX7W1@r}aix8^;bX$9{{K96LcRs(AdvP0SePo+RdFfc9tdFEShA zFF02+jp!zk4q8IqJ1K_($qbc1>JjtpC6K84Dz81nTg{S}67Nl*l8c?kRcYRo+OxF5 z>VS^l!S%)Cx8A>vMttw=V#D`mM(cK3e83FCPc6c?KQ|HIHYW&QSua^ZJ+^vDA5kH) zfct~EsDS&m5d0X+`xWO1!DmG}A8 z>BRc~dwj88pOI=qS3FPNmEb~jd+`ceJTxc$Ly&qwO|f3To_kV45!DQ_f^U)6CRehK z!>?lCUrqRjvIqrWaG4y1R3f(7s|Vxgsy>NZQwH)DOinS?6NnF<14}rTJWevuo1gMcm&{vjKu@g-J(_;`Z@DXe~TX-*1X>% zp_o{p3Wn1^l#kR-HavuUw4g;al#d5^Z4TvQ;9nN`IKe%Ndas$M?cjnuK9hdsjgL;5<}@DTfFKcIC;#A7b6NY;dA&trs#+&>%F1gVFe zP$pL^1vPjqdzCMOj>LeD$UTO02~GRPx?5>9JqDg)U=U6omQ6-~*Q$dJ0kNKa{oOci zL?E786c0D$CdR`rauZGSLq`!8w#DZ2qGPCEd1&Z`XE1Ow3x>ZCrFPr-E@2wpc215o z2o|zXlz#B@!*{l~;UUgL8g!4uqkvlUfMUl&k_aWJy5U~@nk}drx(F9?ZGNfQ$9&Nx zF4on_EXDoMev!KfYWseXMRZj!N?#R2lnBMJ^0W};>3BOEe&T$Z?F0QK>o{L!4!q_-=S?tq~!a1dlul0HQQlUQ3ptsWo00P z_^5w>Z$+A|9=yuM1rHDu_}S_`6xgp!0pOhVr>QTw#!(C2k{yhC>M*J0dIU|pr7##( z?g9K})-Jqgy25va^|3(Hi8M||*ccsH&I{3*Jh+wu-}6I-9hS<70o+(o@!Qd=b=4;i)g*zD@*xPKK#+4e>xKMO?}tqn;4I+PqLve z;<1T@DO$^^)FOF2c!=cD3wU6>UamQk2k@An|8X%BYymx2?DU6Uxy55Q5r^%9xRtKz zZQ%Y*5hmW}rJr77>4P>rL_GE#(TaGSVyZD7+i4IUG9L4_AUu?KY(SOq5Zfyir;P}tQ;U{mzCTF%n1^3sL5BXN z)SpH2Y>LL|?V1pz)psQeL9F`=;t7BI{(`BUCEQ$h5&Db9GI_KR-uLi`)-Q%fOUu+0bM&p6v!JDJ=1_|)?0ekw!qq|hNfzYBf~&UYrMi@IUCN`Uujd?BBWiUX)(W0=RziA_4Ed zf9C=k2`sepebf(aVGK$j@Ou3#fY}>WTWaOKZn~TPc}qSW$sfJE(|NQ5TG-em&TFqt zVJXUcJhe#Pn{pH7{RwVjKHrm?yu2TbdWJutbArCX{D~q!*#EGX7+Z*a=7F{A`75~E z#%bE9dc;(^12gpsVw(Q_F5?A5K@4aV{zaEZQBw5pce$>MP?}s`5w@)V>a6gc#Z!*( z`P0l%2P-@e!2xaZr9uI$A9ETE)eyqQ)zu!i^i1(-YrF1T*7Oe&y{E_IC@xH-5 zYP`Qx6XZ5o#uq^#V*~=7D6q4y|9I$rgn&oK{mfz@p!Xkfz+z*|eHPNGw9@|xN%rYI zL~9J>y*1(6C=m;(6E@$Q;b?=$Nrh^!YhIbY6Ohcjk-n;Ril@47DZwd>;rPk*)8kDo zWJPC-=jXQfkffcU7FdU1)D=vnsnWryzE9%UZ1vM6t%%NAmQZU0c?8#D0$2);Q7Oy;Dnz8m?8(y24+Ydh_@k*x_>Hn`kkog^r zUlAD;yg%=0f^0HgG$ml4IDyat+0f9DTrogmP59@5f9lfRVM4(kmd+=xNUXi^n-maC zSZkz$j2DVD2pMgI6xaMAc)J=u@WIovnYkudUuSwz&xFV}oI;yu7!+gki&z5hYr!|6iTS$%0o)1@n zs%_6o!MXW4Y?0uM4)Y7YRc_RLw1s!72q9}msUbuz7NS7I)3&o zo1!ST+lt?0_fjVfzrtIb)=^au`V`45PxI5-rfavBG+@`;Thte$TN4Xjw7++LKb$Ly zMwR}AN<1|E+(cCR?;wFu_xD~fkPyg(TQUMut|ss57vwL00sD3Pd&|*aTEgG^rkI55 z=_UE-4JT7s0zV-idxuDxuN!L8+<}`YA5*xA^09-Ph{Rvil=9K-dl&g=oJr_}*^TJ?SWK!A3xjv;Nt}j|NA#KQmv{UW;!%O!?Q>Uovr8$8Wd59G$%j zu7U!LAv94HMl-JHYNm4&gOQ835(8wtvC0GjU#T}P68da0BH3haTw@boXiwJduVZLq z5A6P?s}%HlA+YhmKUhzKH=waEZ%TZ%r;49SZfiC#osO))9nK!({^U6gZD@+;<9;W2 z5Y1x@6ry?IM8XU`*Joc7ntq@s4L)|{9#}P$Cb>rze%H1oL%uJ>#Uv|een3vjj^==2 zd{Y>e(G1l<1{0_4IY$&t9`r_oWW&giVr7xd*~!3F5Wncx)gZ6>?fMh|DiLh%XSYLL#Zd=JjGN4u$t$O>eV6L;mZUHzX|2 zZg$wmJnB^K<4{6KWA9gThptH7E2R|dqt+hb`f^$W3sL6z4S!FPgdL+6@q5%JqLD=x z>VlK;JL>v!1B&i!{4Osv={)#NL)rP=j;`u;plYOi4ln<3{!x7!9+bGidIc@!p!|P9 zEyCj)ZemdU+(wH%89%WGLZjG|>O%D`*7?A2MDTp9^LG?e+MyXKtUDMUxf;}im|}kv z{w!T3ozboawcJpg;$3)ssd}pgO465Kr%JK9XM;mu3aL}omj-l2qc5*>hfZJaPA*G* zNvLNb%6wnuz0)LNZKy@^(RsZ^U-Gy|*^lwqAuc^ygyN*Q2u{MS2y-p1BHE=PPpmEK z3}S3C85~|;QjEB|Hax`s>3-8C9^Q~$!{d==)V#%php5)AnIZA`f?8}pxQX`T*0ltU zbfw$6S4aDyxYBP2F$xxFW>KnsKK7&H2fFC4EnNk(5V9XDh$#;HL09!~Zir;NV>tYH zJ$}c{76j?MsJ3rO^pdDW=p}L!(R-Sk7})JwLqN(fc`Wyc^OLTj%0@w$iUtrAJDO-e7XPVccY;wjGc#E>BWhgNflfY%uCo>QE2leVxd&?VpUJuMq(; zIs)R#O#ai2npS$u-4q>Y-vav2hp9yz?9NS+|1XJcsi5S3_|kjalNJgkza6NPf1wmb zhZYsz*UCR#wa9-30?#i0!4RZc|M_bqGNBrju=-E{vA3}{)*>O%*|=&85Dj`)O37$y z(F)kFs}V-Ia4BM!OzNjfYY5K@2Q;pykGKf-KrV&-^)?P;Ukdx@9p(lD?*XpGL%kmg zid65%&sg(EZl=L?I3tX%r^1?QCN$;J1Ro8+owOJL{dwHK5dW;pS_*$ezv#$^D>|WW zR6L;$hd(|4dV>x9IWRt;zu!dv7e*g#PtSZ3Vn2}$>#W?P1c8^{suAKkUKLBn@&RG1 zfBtnCalvlCn$fU&TirX-1?uql!1-_2+wc+lQ_sAIM4`T)q890U>(2=vFOY=$Q@ykB zJ8J&Wwm>74hr~trm0LVCfJnB-L+LcK9*F(LNuERTu1h|ZV$`f-!$ZVFm(P}XRHGKf zLwBtrJY+oN;T|O(y3f$yvEeLVwBQknhkhZd?eWl9!dj0-YB8}uJ64o@RQA~L5bO7g zO*}qgs%wHk+`Q5vA4|DMjhAb&s#t=ci)!;lFj_T*V{c2;+V|=v(ETdbf+~4}&V+1@ zG?^@devW4rB`YoTqZ6m^3;mJx69Mg7a1!Z+22J*HmVZ+C+N4W zH=yq`R$gr*J&RpYvk#C6B)v1WXyNHOZf3yMZOae^-Z7!Pi!d0KLEp)m47cHx%7?C? z@K`=KkuVQ$49`s{Z`TXR(q4c%!Js%-Txtp@Q=B?F((mcixmhRQ@Za;1zChHrAL^F# zHCh8pg0UDCBnJw8f!)5qNh5s}_QR*Em}h zc~&icKb!a+=@kaQ%r1oAE&C;Y!=cz$G=A-Ny5KkNR~P(BEPqcgD}DTqkss3HcjZng zfAgOSgP-?N!tc;862E3p;VT-y%XYZnw-8PyDI5L0X=&->_tCXzezo}BY~t5DEew9; z9wGeR-z)Je55>fy@!R&D3w|ER1WO4&pH+VkEGd2bUL?<51b+2X}p;%Zne%ror!7nq~1;2_B$1i@H{aaM}_`O)u z6~7CAkp8#+6JhYnf0*sx9*N&-C=C{k-}tXx@GHE^1-}yO@2rKTkKgTAo(FzM{9*9R zY{&L*x5RHa6!(h8uiX|G{PM1K!7pGrB8~Fp?CIBlQn%)mx?Ll)HokTVrgImG zYml|kt>DJ|6D8Y&0d(0OTvoF^Di1@pmwh>)J$wz~(EYJ4nB-LxAg95ZiaL;C8&Xni zg0ZJ9ft+WKDj&Xrl?TH9yXD!#Q&Kw8b}TKPY|qe7L%+eBNxzXVq>x z=tO>;mrT$l?vV016H=ZKbkx$|_reAj{POC$$Z3i38#%A^@vBzN6~Eagep|YP!Ox#W z_+9k9#P4xPd5Xrb;d&SR#x*D_{94T|ef+k^xZ-!0>7Rp-hQZJCAmO*+TZvyCNO?5) zRYnV$Plhh)@3j{2k^*hO1U(RwSZ}p&^$DnDohTnYVk&$!QLSJliV7B8N& zsbIyvUvh+&!a^e$<4_4}K{P|O6|Zv%t2>&ugQk4-ek2S&<=PNF?{Am*l!uf?gO9C# zwe2elM4|d$L6VDnl{kJmFuUaFIqH9xy2{s16TkYYVerfM5q{5XllZNMl%{C>#;?FOJH_cYy9NuyNmfG7~OC_iR)Hl z`8YYS8jHEG5`iV=zgp2`rhUVc@fd$YejwJ2s$5%qM~!?EkQti0>(cvp;#(9 zXC+w;(UVg75I$BUN6X>S{s$t-qj`C>=Q>6FUJftLQnfVXmDV0~srt#bWq`kJJ8 z`d0D@oO@ z4^6v&EY|H|${fjsX3dp*q6K5X$KW5VAcgSj3oFn4V!Z$$?8WIC>yz{h`JK?aRM7La zk&amk{H_(EcL5>ylMOkjx&wQXVts_1Tsw%)`9!@AxV@*~mdxYK0-;3QzBVfJIMLZC z4!(dBw`-q{zODsyg+niz(7OoHtC$pcDK0s8C=hK8muaN~rmBm5iGq~MOM!JThq19V z7f^;#7Xb)RDow|^4PS#Y+^l=E$C`EH<&JbJ*N=_Gg;3+3_D+qRNL{EWeq&Q}(vyCh zSx@}NX2@g4fzzow2i`Fe6nFXO;c$1!Fmm`V4a8kCjFI9l`)4b6S%7zu%Pw*fV`InR zJe%_!e&2-i5Z9W)P2B9qRi9h!$AtM|?MH{oiv5Td>lq2gH8>-!{rLC+!lf(C2Mx+% z$T&7{HtpA&tE}Vqo#Gh3ykft;yHFYb^Y1wyOfaUma~r=AkN@LFX}=na@p18vOjiL( zMN~C8k!<2B=YUDDeAnzwbU*Du)zGSL6h<{FdPFvgP1eau(IfJql@v@b@2ijx8uJBM zv<vW4pp-P)YAPNdI6&_L>hZ19z3^p)Owmf%_GdxBurkXuyFaZa}QTOTmjZ669a2eXK6PA z=lsR=+~Fd zeJATPRogmQV6G46-ABkJu4DYY#!N_Q-0aifY8hGfN0|WdsXly#k}Olygf`Fg5uq?LI%ksF13?_Zf*}>uDRGwy_$gli z+*V@lfcV6~0Qmb@f-mQ|s5Z8e1xkozzZOAtD_NkVYZ#p3J#=9$+*uC`bYO{6zyf7c zb0f@yP%y;=CeS4g19{&G=cw!f)}H{X3i2 zfYoghgKfRZfi;-_q#7p%9^l2k#umWOjIVu8^_xgt_?1ljN|z?2gcZL)B^1{lsbcD(#(p*Y z#MHf|aEDNRqVO6Q{{uRB2EOSF{Li;~AM8)sWy{t`8{?%mCMaC_>1X1~j8BOx6<}V- zl_nHr498nKqKrNcG`or`z?XKwmo%}-DBehsd;yVk-}MAaq+<_UR_ox11ajx)v&@|n z_}RMaX*F>sDK^8ntF@CY9b#ec8rURb<6Xp%zWHnwea0rpE=;Sa;m6F6UHIX@y43lR z{6FHyrAvq(eKGGTJ$~f(7kW~P{P_K}D?g@elcM2=TTKZGI?UamE^#Qq`+@UfuqLe+QgH@KufSs$;uu+@bPOb)1098U$utv^%W6?Dpfj<&1QJW~i6XJ|w`{b(MedVSEPG`)G2uFpW?(`# zrc5AO4}eolgG$-Uv0N(Cg+hMvj*37~C`4C9D3qQQ_!>i@R1Ssu?mHx%WEfF{8|Zz$ zxN~B#dstCRlcJU`Nt_3}ZJ{1`?;;{`CMG37VpAlM%UPMgCq>};p`TB;QwJI(uCkZu zlp(02RnCUS>mx;=myWW>6*?utgZt^pqJbck33k6AoCakuS<_;1vXZiGun!g}dtxC` zwhj{-psY1gh7nD4HooXDL|JssNcfC0o=JZ#RnGps)efMsTVn7HtP=?`$#>muG{_+` z#Vvr+JL&#RXvt7rKl$o9c`;cKL$5GHAp#AbY)S35U!m0>(}7 z*dCf}8J|gm?ZF=gqRzf=8tfRj5{d_|K6MV3Sqh!;z(vs`-lyM&+Zz(6?CGCW0P{#@ zn;Pc>$Ko*_YGsyf!r0V!2_y5J@-OSg{~o0K7aDDDmK-#NZ^1d&MN6 znwJz?$C%q(Ov0-*eV}3vYe1t5-SY+8g6VS~9mJeRPl3@HTXHLuVP9`d%QQ1=UG5cL zgkVV%<~BAKZ;K-I)=_r)Y4~~g8sx3&^fNZF9BoB`Xn&7Rj<5@1NjLV@BOw~Qn4NyQ zu^%!AtY=&NeLjgm)T-I0_$-7giCFHSaB}*UF8=<)=n)TBg0bBEeVSQFPFMW>4A}Y# z7UH(K$RCjgIB6PSfO11ZR)zgD-{OYHzk9|cMw;v@+qpV-it zx|=914WAe$1{fPVnx=;)e;TdeNUOhbE0Nn}4w0LW`4I3F$>k_u3j9tbH<#`+mhNHa zDljzE0p$99!8bDD`$TazPXVO+cH_n&A`lpdchdy|)ZtWp3Iw>1YB+9zKvJMl60e8Y z0)aiSdltC+9B53V?TN5*`1L8KxHVABaR9Dts1)PkhUx7sOS^BYJ>cbDBWlz*APK8m zNx4h%peHG?go66q8Tcm|;s6ZvnnkbXI@h&{fl4qTs&nB*E_8{DB`S2eMFIjOFp;)M zU=KXhxMJq70%X zzb#tIgYTh)(RE!s=|_lC0it~PCdd)q*vHXQaUk+*<0Tkf7cYrPLA(SdR|s*?<$$yM z=r^DiDp;nIGvlS2YuL}FLznSvW1XMFE{vCu4&y{Dxw@J2IbNb`$B(18bH+=V_(RzL zk!LzQyj3V(`tgKIymU$Qi1(<@UxIk)x~Bg>h?l0``~NatI@3gq4qB#h$VF)xL~D?^ zxkqcDWgM;fAzF(g&W4HrHyA_Z=pewF(M(LWE&-NQvA>hoFZ?PlwUHq0uQO zi8ay(s7bn`PM@w33C`!R0d32lC#<5!OnOS8fJhxU7-tp`P}D5sIl1uwDR)2HtD+)7^s z&VU0_pIG*U+xecD>-8iCQsWYHeQ{<8X-yK#X6O4-U<*(-mgxab=l;r^&d2Lw3q0-; zeSyqmQf!*h`ZgzjJH(RIB^bM}BhF^cVIW~gJY*RrOHF>Rc+<+yzot9(w^UI0`S*T> zpWVew5{#7%-1ym^r*USsS3jC5PT)NW4a~KNZPj5ta20JimbTIO?(~rtiiPq7~==V=T~z_~^^ zFcj^}idO#~<~7J`I{AW~y=oaF-l$Mdb<1uH^6GsATvitg5f%)w9@@+N!S_^w)ZchVV%svih`sDH1j@Zfh`BujZSeofyFKi zXhx$<@2g2NJ9Z|@thlxpQV!Geh3t#^{K(>orr@HLEB^B%G1lit`aLJO6psSprrxHA zS`iZh>af4h|HP1yVN{+U`G&AU`&<8JCs5}8w)`szqG$4?{at;?fe+OSdH<;g;SEH+ zHo-(F2CnedC|}?QqkM)??bfh1_>gt!`H~`48;S@VJ42nd6J+$8%xz2_@dE(_pr65PWAMRJX(-HRgkm06v^!1AE}p69bQBB<8lwuqVGo$AQFjhiaPK zwp#_k?@(!4KVk4#JYh0A=7hnfw7?xvBhi2-24-g1q{LiK_0v_XX>-eW%wbDO<9!9s&ua4hX9e)^}Jq9=@ z7-z3{rN27UZ;n3^(h~E$x_+@9xlLU}0ME+#WRr!LX5y&RqQcIUlVC`SdLqx~N#boI zamI!1O2glSkwQCAQ%MV(!DA_)J9L#7oI1ftOyu%twaH^7JzXM4FUE{h$AmqDxM35X zw!sFPzj!gG@bJ5yGR>c^YEhKk6Jx@rCo}zR21mG&o-~8A5?jPVv7}Ri7!%e~l47qn zo|I!2$F(o5h_(hSfb{KacU%f#^t4!%jl@6~Phy~NLSkSa`gckgW~^XaK+gRokIoiY zoO`9qNEjDPQJi~4$jDG1&F3ZP7lEi>#+v@B5T*sCK6v~Lw@R(vgOe;w3cv$sf%Y+p z^|tv|pMpn3Pk})Gfdo{@PYfijhO&WpNFp(C$!hWsiGi+g87dJ8jn0Y3zRti7LP!)k zg49EzupASkoc!qQ-w6nOny8guJcZ>=$f%`z3Jb6IGrS2e)#|T4N92R&h!S%@m)6@7 zIq-82v{nr=tFy>(Sy*H`I}HKASnJO3$s!{{!~>sUq2=BLi=_N&PQwCKfaXc=_+Od&;Jxi`(}H7cKjGqpcVog%KlV%hR-ek zoQ1%JJ%<6p4-SAJbw{gXIX@3dnd2~lEJ5^We}4A%Zvi3w^AVpeXMd1x9J$&l1!nx1 zS(PBWnnI9|XFSe62v7f&f^FJ5) ziTwFt*dC_JPmLZW&pzz(b8M@t{M>KK&-~h9c(uq;$B36RC}vVX8(a}CbU`0~ z&Ek^)J_wQn#8plAFImREC=ae1J!?9pXksjOAvCGRzmT~%wz^+6H&=%)VfL06BABcy&S#488&*YB)iQ-(G9>W=c9+x7h7$rmZn^&Qb z+a7XssKZT+ z1gX5|=m!gB(K#DXcYr!bJ7BkktTu%n#G>o4kzgi#Pd=Mpi-&p99Ok>7G)#2%ZNydQ zGxN2d9v9K`@=3Wv)9fV*if&;#y66@zE!h&VEuA;Q#MI~H&8-E~KVh@7 z3+OUpF4vhA>_W5RH}WcyN+kwarToTBNMkU>9j4x8WA$)%$uJ(}yHpT&$uPQzyDUpn z9+l6=ySO|mUz6{!dMwUkEI&S918#yAP7_}o9cKC_YkZo123=;MbA1F7p7%*0&UbGE zZOXES7!{r<{Sf2T^}t7ch`M;O3{l%ubK-A?s6SmmEF2kN7J7~UL0-U~f&Z_;Z_!W} z{5(CV!0E&<^5>sZtl*8juJq&khu67+*V+WH>SbZT%PY_FKSqK#6H*2hJiYwAFvJDF zg2&4WzgBQ^U}@(^)z-S=cMy-S2NRKQY>5topT8X8cTujy?{P>fipH+d&fTp@hUgmBEIVIaKb+%`O-eeEa-;kDbW5Nh=I=pYyT(*G?(`}c9j z(#P-BFJ1BbK$L9LjW$)o;P=y6!f)hAiQoUevEpaOrz>6(sEPV{^Ai{$Sn_iP|n0&AISU# zS)%dZk^3Lm531G&IxR4B%VMui+Uo<`^Ie7a+#+c|gBOPpUe9S_*@i4BymcTc(b!KY z#nSpi=rKk=rx^zan3jMm&rs}z#~MyLPjLVXItGf?WLiUIaysP;5&*F;M0t?m`7omar!&8JDFo%Zd@8@fWJ3`J9lgw|zNHFFlh@8c1-cGZ3 z0_N+upZXMyI01*AzYQ&@BnA4$;4XTI)A^i;6iL+Uu>Tgav73k}+(kcn6XVyyJmw3E zsR~8WIqTpvLYLxzZoblUXgYk5qnvw-M#Qk?JDD^SRcuBzv9zS%@_lUr&E#T!5 zc=?RMcL}_Tw}Dj!N?iqd&~|c!B;h$G;VeiptSdZ$i490uf;=^1utLN0hz>B>vVFck zP+{&1Kb!=lKv9QYf|6?F-yulxYd5V3c~K9e<73@u3_SmW*d1C|0(QqEyVHQ(u&&fK z)_e$d)(m3AT|@=4d&&kTErkC$FBJ8d|%>M^=ugY@{X|m8zAwU`T6#xtMzpWt19fuKaDef=X zzR(rFZ{|q(3!VytpXV^!zrGT`Ix8LcnepuDrv+-Fe$}_5qkf~-uNvd*Wc}(-F(26f zcoOELtzS*}jV5!im<;Uy{0t{!jz8Eo{r2GVbsLReoUA;nT$!!nq-24p=9XRqL{V^I>L zz3A~q(p|z*QTfwR3xgZ#YGH7hH)`-JoauQ)(7*+ASmIKVx5L+7@i*iTxLISldY5a$+=WljG3N4(+S851wK;GvHhda? zG5j%8maX-Ya%WxE8{x3T2=`m$0VAv-Tk|HR?=r5N&HR9+KjcR~{E^R#wjdO7$$NL9 zlM&{Ai{5*Q3pIL4m(d5Z5Y=U9@N3r11;6~$Wr$yegwn_F=l5Lk``~Tqa;N?o2EY0R zgx`)diC+WALR9?Bc(Y1Zftq~Y2~Nzjt(U6LJGH>6$#{3RU}l0*6(^&Oci;J$W|Aak z;xXP`gflV64|K7P-)N>|d^O%(^R6=fxpx^1IRD`fxAAY_@i+HmB;fo9>-be{<5!1; zpK$c6<9}|BU)6Q|cmBupo8!L=8G}myqc-~U9OGN)e@CHzlsSIzh%5a({^qAm`mN(v zv5o)EyN>bIe5Zvv{x|0MRb9t_=O?D$9RFR&Sai>O;X@?g(FZ?bYB8kw?9pLMr)I4c zs&#jR3%9Mc(n-CcwN~XB{AXapAvm>Dz;JMC-7#@u$6eXtxOJz*dhL#zPKl+f;Njp= zCp<8p7Q)49&z5*$6-wy3Z7)1>E`%!d<-%rIpszO3hl^t`W99=S;^G)@-~15}4f*cq z96UVB^wrAt&Be;~Lm&|9J5`R2;P?mRhIffxA%-c&`WOTQo#N5&HZHE!TQ76WtFXqr-*KQK!;XPQD z(u^M<@)t%`HDLH-U30=FCJZD`lE{v zInguy`Sc$Mx>ip}e>4M<1g$?B+|gza?|0Nc)aQE^&rs~)pEIRD7-G2D!|FVf&mNcd z@N$}o>5oo#u#TU#baS}W|JPNv@+f8zVnAK0FcdqK{` zzJDnt;I2OrJ|AaWe;9d3=_^mQX|BriZ=MY1w)`4KdHg#FvWvP)<#`OE{)Ap?vBWytUbnxoFWOW;p8kPmjAd>=29MD?8)wP1fP_?x*Pu;5Rl zF$dH6(-AOg$mjGw&xawvpNg~npQvuGhKD({!CVdJp+ZNlK?k}A&AVq{j{+Rh;FWud z)Itk5;^OKo7UOilA}|B2NEH9qYg z5crWU?-lnlU+9ONMEAC23cEMtwa&e@O-2FZBfyMj_BmxtJ>LK1wb-F zmttnx$2|{O?ZXZCpfXzad#Lu|a+sl+FHCw%+UK8sakCG7c@|fTS-|s8Gz)Y5F1GQj zHwo(>CQeqyzuz3co9p<0Z6_3_b&>Y*Z;1Fq>+`by@CC?~}5vhZJ3JTp@=pPKanfCOhK|kPQfH(vTmab4BFqFc(c{<=G0#W!zezQy%QX z*f8DrY%7V)Q;)FNq#G;W4k?e-K8H>qdo{_Fo_x~a6Yy>fr(uR7H#}qvQ*|0fJJ0o<8MZ9s~22~O)XA1DU6zHidQy|QJa_W{( zv!0F+pi$d9k&POH3q~yl_O!*po;KRcHvdiLNhb6elmDmV33ee*QjEB7h$q`RGfz^C zTV|R(G3`l}2d(z3d38kE)tv5mj)zp&%CP{;qAxPglpRb9t_XA9GB zj{hzs6Cr!5JkLHn(bR^8z{Ak~y_oID5>37odHoY*%9<}t*jujDANjfNH8w1o`sb~J zWl;az_d%ake!he^Vc6tHtsiBNSLEk5Q+|?h zGFtiFw~1ylwu6+P{Sfgh<8Nwh9lv?_@hht1A2j7>%Wk*vd+_*|nBzZb9sfbw_+P^7 zn#0jQPN9FcIexP1`1>|8{q0TqA)ZJ2?dQXM(aIFxLMgt-eDFTqI!n%-gLfVI;BjQ1 z<#A+Kjlwl3*LNR4)F;-T)U}znVVf&h_eP*CVBIHUb^+EMU;LO>WF0Go;#4IhpgI;^ z#X1%o7?LiuLoCzWSVtK6lD+s*yzR(W!S*P!FJOC3j#AEAo=$Y4e2e!#zR9H0TVS}J z<@OdBuO%K2y#M^0&ZvagB_Zw3L%|Uin$xicC_3l_e+&Y#!`EQlN;z3))eG$Y7Q(lTDLb78L@ig{vYsS&dkRZ#no)OZ z$cC8qqe=^_{@y@~O&0%WssH1=Wc~kNnhx22oQu|eyt9sGktAjT{tq$&UA`JmAx_lb z=B659j2$Ll1@*~`sQwH4X+d#LwIs#qj)@89s}L5+NE#Myi&y{ks7GAH8(V6dfswp* zF(PHxq!lcKco0TWm|WQJ3iQ=x`i5cR1N7aS)wU)pOC|`7l8Dm_!W;&HUJxb?LOUqW zdIe!*5E>eP*D?))F7}6C>SKR#%gEk!`ss5-kq<-^Ox^rROcA8vHH-18Q%J-8A`MS9 zs#XwbxL=!w`z0CHh!rkl0^@kq>1|^;Vnq?wrQtnaXSFRrwf*H=o!Vj-X6l*n*LZ#n z=}gUJ)Le0`HzX@c0AT9xgI=rt_LvMea*toLa~1tv_lAsLlW|g7{oVH^`@ba9|Gm!s zPn>tX>3-|@HzYXnaW(#^sE$9(9DmDpxAA-M_?MXDKWQERLEHFQ%^c&a_A7g|LjP^% z_{py0@B4!3f6$~KG5~A*x)pgBh+2K0X}R*@O6WZ4_#1Fah0c0ERNRVrp7eCs8wJm6H4qkbZs$hAd?E3s{TsIP zq$jefWWraCPq*q+1-m%GYrUFyQ<%uSNilqoov@N<)??~4HTi@7Gn8M%Q_7>^PvrYy zZRcejxKdclQrr*wMGk|fNiMD<@UR>)GGrGRRjH+k#DJeEZ8i zCVUvAgw8)a%Ey5?&p!nC4kNE3I{y&1zk*z26wUXQ=<=;-EA_|st+Ew{W2xihb5Pl zzCL_3!c`wyzsCM8-RQm9$p}*)%B>_Wyx&slL-|+3;)iH~z2BB#;x`AbgzQPdNtgXb zfZt5|ZMfR6N1opZ`&Qe6J)wteJw}&Pzw*}l5^P66LHs~0efsFMTzb_-kzW#u;Oh*D1 zoiO9iO?L>civ431objI;e^tbp$^3EMt2`HY{&zjhMH_$i;E7x!CIZj@(nQShAGD8u zog@BJ_X}hXRmLA?j-Tv0{=TII#MovGgvZzq!M-(rb(|ORX=78;Q)CY7dS1l(3c$0l zrG4eRi1)gaXx|B{1n%)omzZ7Ub?;!BWA>+}3Y?O>{MN$F&;=Y5pJM%exeTHEDL zBn`JOt;AFTv^I2q{2iqD-AI8B43`|oIzUzm783UVgUz-c>+lWiK?N%Opf(`Y zUyWiaaJe1NbZ{=WrxU-;+`KbxVWVqexgGL+q9M(=QPPmE&GX?$I;$$~qcHKCh(FrJn^wjefB42gd7vi#_<&%2OWN9b=SJ z1DN?f2QTHt(F*w*nMl1JcaUM1O3MG$93wsy8abh9e zWu~}`-#7`Wh0sGY-q>@iHQs4|l_TD;?0-QjWxUf_2sNDl`?*`Z)0Zc4wU`9#f1yd3 z<9D%*-{?Ze`0Dv$6ZMq)`4tXYA@i z`pDO7QQ&RswUtUgg?zpri{c3sP3!Y2(*$JcM%`6T88lPKl^+snPv6C;d5u+>rs$9a zsreA11-58>T@yd6{Z7xrey~ii--9Z->wT+F!V4u%MxH;)LuEY1Rlk?M{l2R&|7>cjQu@&!pi-}w&+2%sG^Vq=Sd7==_ za9d}T__`%*W(2Ff14J7lk$W&%0h0}DtEC=a&ns6Z@ihqy1X-aKA{qJig3XLT+G&tF zAkB|?5ReATL*m(hOpwY@aE&Lw$>;i%;McJ{6d#I$aTovh=ft`S?ay+=j43kSQf^6m zfuKW)8KJ}>UNHj?Jb3UZuvBoc;DWlw`XxDU!oF4@=T;&I(}h=tFh!Uy@EhaZ(gi<- zkD)1q(gp0Xqzh3z%32UOP8Z_DD8)_}@L`b@%&~7b=KOa69(jNVPyuOwv0`jBT?n0@ z<{oH2-Ht%}H;!bW>&uK7rVA8kJ5GU1w;{!+z|mC*web|V3^UYTeoz<~3bh@qhac%P zA8|L4F8EZ|dy(}Sz^*Rth@ML8%5eC|TufBC|6|539xCC(a!CAo9x`!dTi(D+Fr;PL|!QWnD%bP zwN`uAmx?j2_U`YVioJV?Y%s2?tX$+~@7nWx&eWCmt^-X*%`fuF#6~rgGqFEEwY5E3 z!9r(#0ZT3sK0jqY|4s(A@!>WL#7iZ!auqJ4ipfPP%96l&ZGRdN0{5p$&bkvXalJdZ z(8)+MIrGdU7H+tOA@dq_Aa9Y36Mr@M9lhGjGH@=T{B~;x7yKe$AGJMyR!N4>rHJ2a zPr2f^b2$6gbR&5|82k#}BK&gWBz}8eI3N5LU1j2j0hL(qYkwtX^m^ed=6c^a*m(;^ zwhqWUulHra{Ls$AdS5En*~)Ca&kyT;X|Udx_WyLf@53IhJg)LI^EktJX1!}`&q_)&Dd5l&w^!(Gk|DD1;PtNz3mH7FmW69L$R+RRdDdmG?`<>e`n~6U`y(^oJ^TBtXFZ?ix}LRG zG|iK~!&sRk*#ETMgkF9NBbnN~xk=*#Y2Xg`l6LHW(xh{I*E4c7X{TkyV`W*9m_+YW zF1$gaCSdi8bDr~p$G%v3!Q+gdn^Gixu>T1;hh<~k_}MOfROv|uKO6BR zil6b9Y%XDOA^tz_}h&q{iK+x>Twi;Xt;d)9#SB1nLlwriJPkt9nWi`Sgn}y-^yeBK)ZsH_I!fvK0D=z?~yb zn#_VKZ!86sBO2VI1?BB`{PlPv9x_(Ze#Z-ByJ&p+9cy3Cg1HI0gamOp5*P^P|DFAg zSv@eg=t5l|dD-)%;Zgt-F-M}tzx@P2ACUk;;?YM~09TwQ1rQRGk^WG><8Ob|=ah@z zQa&@*Tf!nozU7ZoN@Fn#(9-;RR`CF%Vix${j0l0f7l2ayQPa4W(3i{ zO49$Sk(`WV(b`G>Y#05cYO(pZ>9;fV&kdx%WRm3H&|ivtgZS@ionARB(dZH_b*WS! z7q!5kJXE&!#PadUp-2`geAy|e!@OT`-1YM4RRlU(&{)f$>nB}>4N&zg97Fmt7C~AO9ix82A`#M>LqNpUIe&c zwvsS3@+YmwOeg|nnR1olCr@j`kh^JOGik0&Tf>n4<{1iX-9x35@5fi2`>D45Vu#%E z@hW$9#i;#vA)Ka+8gU~onC2Ce?Nt^}WJ%rHP)aICynUlBDQTE|VP0C{cS&$&}v z{XZH8$^Qc)kXK&}Q2GDlBi=8fua{0I6Q3s5ZjQgCR&@!K)Ma7YwzDj-()_rOX1KGabXJ9;%9CC(m}_Jvm9h*jJ5kCYB+8JzMB`&!Ur3Yn zg@MNy2~gJ8AtJIPbQ+*ou}9Sx+M>~r?s&F(B!(O`KLmd=Kg`T3y$%4jkM28ulL2sy z`T|Ut$9vePT5t%vcw_afYHi_5LRemXzo5GGQS7urp-3)%=$Vq!rupx!vCNsAU0UZr za|T9kEe6IyN=zsi+)A_0n_t?6vm%*bcvfq_hDm)~hB1p> z|MCLCK5KVegt3rTUt%Fo+}}%vgWvxm!$E$_%k&n?1F5M~e_id0Y$Mj+&XWGVx|)6$C;bc;{kg(J z-|i1AaL{imMFIW;>8~9p`8V{}A!G2`Z&e?Dp_&1@vpzh2Fz=D_t?x}esQpH;ZR&fS z^3|^HRB`b;%IE!Ur9D$z)QjF2#@om zp(labhQ8KdY3Nszp+D{sujbm-;i+R8H0_R)pv@Ogb+eThYHaj(cvYwVtli+judToH zuD0~&DIOEq=aFSW`jaGwvY?LEpZYu$9iO}6k8M>9erW=t@yB?%=`}0j6My6%6u$@y zC4SShN;`yA3sssJ_O^-HVuT(hW^=DEsHp8=p+}|;JwjIKQH+j9#H1UJ;?UztN{!+g zdgS?r9*Bbc!cRO_xip6!Y)cS&EDK3Q2815(tHV*s36Ucn_Cq9nL}^M`)E>i#{BJD@ zgRrP`oeVt&{2)UQe#<}UEz!_Jf4xwwyqCW|RDHcre25e!>W!p5RQW_Jc^>CPMn%Ho zf1ZUqV?Wwf|as2alVP)-6pyEZj*3UX-=|=Uvp&wcI_w12!zd& zPY!ZR5Q{)&!6Xk_~XXHm*N=USza6$IfUP6o0|hKAj2 zb25;xd2p^g;W2SwI&KKMln`Fj#?e`rjI;XE)%~-4Uf;IcrI(=WL5K(abdo-z*nJ8Z z6GKL^UY%Bx)KWbgjEsY7#A`N7&E$7ILGOxcrhW<4*+iOr$>&GQm+-Um@Df`;t$P1< zp3#J(_8P_9h$m?G$d2sc^BAv&)UHH|xj3|VH`?%bV;QS94Vr9tR6VK^=2H0~en=z5 zREH(1g~vBOQi^#*(MeXM6Ncljn0N}($Z5M~+UGPj5xqaQ!xB$P)2NtJ=y=RRhYdh>TROC>_ai{$~woesjfx$O~-wkUw_X zPZd%2_``^aBFY%{6WuuF{1=v(vLY-dU{v~F%$2d9Dug?JjhU+$PS{MD+X<^lQ&!1q zKY z=mAuYrs)I}9y6e-5e@(-5+DKUmrQ9zNW^~UC%tr=6>C2IfFHCd3?*pgiwlP{wANRX z(8?Fhk>UiOk6mk*!P7>(!>GO2A4Ba=48T*W#*>fQ-}vF*r}k*av%3s_SZSaP&+3tq z!LUEX_^+2Qq~nxN@Oqnq|{1DX&OEk`|kIX5`82M!1%jZN*5ia4L~W<4a)$S zd|<$DN%0AF$W&W?l~4r0X?L@rWoN7)ZnM&F8DhfjnPT4kTGr=Yi;a!0LC{ zw9_DkTuQVbaO3&l%CBxy`F=px`9Wu{FxY_rgO)vvhCAh`^jj~c)0jz&_qLQ#^ltjy zx!LWd0W$y37cIwm#b^2*Ru5y@-Bm?SS*BQ%<&YhT(a7()3YYvo^T^M!{&|@tzu9U$ zSpU2)NPbtz!TfZf86ykppF9}Le?-q)Zmh>roKg<%x$Nd&&#%;Z%XQIsh)8WZkcvpH z2Ix~*fb*7BJ^ulkY3WO(x2QR0chw=osGiTd7Om&^HP2Ab?;0xYR@YYOH1YeHs`rgU z{xBN7gQ~= zRQi5`w_k}z(jIu!BZMiBdbIB+n2Od~uy#K14A#opO4j0WKf%tI6*tJ=d|XDz-?8Jd zBT^(u60}adB(}@w`pZesT6I6c`}g|6i|XU#GQy(!V20OG`y{-=;(8<>+GTk0l}5n@ z?!WlO;7f)Vz*lANlgbETgFOiW(P+;UTL=wLW+D6s0H(I%RiZY=LlEoeh8RIT3bDko z8;K`qKTliTXat!!mJYNvpJ0PO4pX-8Uiu2{wvhY9hU88-9M~USjdXF z?ylk@II?lLB?)MINpxicW~}#i2J{k2Ffft9faX$H)Nb+#AgcVOFWlf0K+;6hmyCM) z0UBSDY&d#Q2oD>2_vD6W)m*}7Z4rBGajw`jF6{}OoVejQ!kRMxl7PewaPXF2-)Q8Z5G z!!W$Xc?2|7k0Q=}55ovWSXoHGtSq*G7ohVH$Q}8!R+g_@Ng20|f-JH4eT>0Y6nTt~ z8)u1Qr_&rt!9htT(QjDUL^4G?=6h0&Y6LRyl6x|>xLWasF}z(S zR+a`B=tLD*wwNpMWR-TR8d|&wOTZm4Dk}+vvE)2mH!!iOHJKpvhjRFmwkY!T4ri5g z47&?82d_^Zj`7wfP;1+LeRBv1_5Xmb;tbVzN%mPBH_{L3QPVwjAS1oq?;7b(A(t@N zq#rast$2IT7K6<>AQFwY%QsO7x!v0zgMOwXzCSH#ar{H>#0%wA`h?tH-k?M7<-@&m zXhQB@xA6ql_)Sh=rs$14$DTkFZ)XTKYbsxwv@vG9U2p-0rt_uQYA{&;qrv#*OKS)4 zNJi|GBfRPKN%%yMyR=mh|^kX!>24KKp;mzA5j2 zt{zQs3Y7?TwP=g?k`-k4=fSiwsNi~3&D+%h*QWV_*6O^SQ_vm^gZ4Z?iV&c-;<>mD#0KO-I<1CXPDA#QfTb9afdx<&M2qNovkop<@=DeFPxM zGY?u&P6p=MfH`@T_@~fE+fKhn78n6d4#k1SEhmnB$$kz?{Sts^sYBWn=$}+j1U4zl(ACTvCS1zxF%~3wAI}5tg^%<%8ZbLt2JGiyDPq z9o8Kybe7eld8|BF?2zEi6O%8M9{;x$R>MpAFuWyN+om^DkX%F*y2v-|-%f8(&#uKw zY+K;Ar>p4&k%T7S8hcufC(-=|`CkUxQ(5S)bbsi6G#Ua!4}Q6hx$pp zh~5J2%@H&Ev&1|6A|;+9{+-UkGWI(1jniIU^>$2qx%6y|OWW%{JQAvJl@1BAmrdmW zR{X5(WeN|#(68m9U$M?Z->$E7&$x*vAluNNd9lM^L^e73U-E3s`-hhP z!{UEYPw70te?cJslKzTqhJU87;|(1TD}S+nqtOux`FTGYvc)apws%-ZeAoNu5Jn=g zdespU%U*R}`!k^)0!3OWDruL4^glPNq*JbmQ!Cq>#V_{M{tp(S9#*SBceE!$w_gEp z;Q3BMM#NTIW)u#q&0UJ8CN^%3`MD$~c`%a8%(`3g|7D>_m6)xH!@|C%8?mupwuZ-4 zegHR)et{{eQilWj1>U$`>Tx-gRb=1kr^ob>%+xJS;`SrHy>xE(}zHZxWqmRSCa_U3hH8J&ZUNcJ{USf{8|7B2+J|xMJEcj9D zLwz2Jp}%*7lm3i81a3$Fnq9ALVbj0a(BGdQM1Rr^Jdu|f`en#7toU)bi+AnM?Ca4)`v~oZ|%3K7Xg+)-RYEW9Xs|Rno^-seZFRuT1x2xyUUKb*0H|# z0*uk1>rgLJ4R?sV6DsY3K(gUfQwfO?NFK~&WR>k-&kID+U8tNTI{K$?Ks?z$?=XxKj^=h4rD`c)-VP&M^;8S!gSuJvXu-hP_9(kI ztI==YYkSlIi4=87JomO`kA~7){OnO3`Sn-T*9*mQ__}S6w12en@lBr_WpL)>b#EmT z5tn?Nnm}m0NPkq<#F&@kpO23^9Wp>j?~{+0u@Gn-`O@3G5-|Dr%AP#^L%);LpD8{> zmJl?5D*m4SnVCOw4AJ;IyozHBZ#@G!>0$2o9f`hM=-hGZ*`N%j6h_A1=|{ZZC({{x zZ+DC;!!! z#-zXWG>iX4L%%dHkbg;k#U{hQlYT81{U!5a(r<0kUv!<0H|hk^pOGv1H}q#BgYoMR zt-@JE!tiy*N>D_tLk^#1YFLL4`8(ciXK>=O1fOZ$4|fYX31JiVK;Vem`(PMk6Ao!T zG?VK(R-HRc)gFF|h3d{Y2NFdqzOOx9yz+<&Gcrvwb6E8%4lnHfDa4=%py2wwSKmE| zrdqJpSh7}pmSoK=AC0iWrhFQCj-yUBq^EfXZaSgc3HP;gA5BP>;12vp*|@{%c0xD^ zZ!GaU%;#Lb_&K9KXu_N zOVBw^tygRUHgH&)yIyE)L^-V1$zjuavk@zmSD)mg-IdsqaQ0lq-jbPPpCH1Ro^ zIodUsChE;L5lxId2{>`DOUl(hd?4E@0{|8^V4AhnXlaG@x?v5o_AVs|P@FiN%pA30 z7l@2mwhi-CieM4_*i@$J4rHjvrtw5(7@XTiVISCB=v`J zCkgIVVIK0tLk}t*@`(peS7yHE!P$|3$J}C5o%9plgw%^ve(njFU*s|q>G#n~Ne_9O z7P87ENC&e!$auLfo{O9N_-Q3)WV#z~UWED@Iz1+xz z0uYWT|L`tCd@rOCIL$8!Jo)(80bcHh(hE<--;1?9{De*)k5z8 z7^IEC0jg8|WPqx}?W>W_ApuhTbDPJRaNEyY;Y)riGU{C>KqcsqY9u5|)gW;Ba*NHxMDl*OvCV~qxN)+tgoX1`$7K<|wCmO^oqe9Lp{Erp^Q-eRi; z|4jNp{c~15bj?zu8LwkZRy{8VBlN3>LPM&vR>fLRPxH&IUO*Qsmv1tBfT^Dsi?~XQ6iyGI;YHZ9E!bAf#r0oxS>b8sF7#qZ%=sGrfJ@)FlV`JN^7v8h_eQS2{!niCY zYOkiWW+b;-sqNKcCrW#@>lw>lz1=z1TMEUs@-2H;$hQ=V&Uj0pz0&;+DjGbs+-S#k zwprWN{dc$3!wnGKH{VsMiJ5>+ z43RI09;m5rzT2WO#evK{sJTPi*I@0C{6QqOL{xA z4sw&LOZ^T@{U%khOEPy=l`-x{@F&)F@Y8Slh{`WT_*dL;IV8Gmq zN84C<1d)VhZyGJl!C*Lti_d-3Cw#|pnYDnSTnnT6tF(0ZL-EnlL%#3mQnbqgav#js zus#>L3vn0M`;KOAW-2!sD(@X9sl?;HqjnSj?)#1sBs-4+aIo5YDfq{X9ZBsMbyLnn zb4B;NRAd)E%-S!D{!nVaSD>{KqF?<6b8(U4;_z#~NU@lQJn=}O;vp`z-`5V*!8m1W zI2b zt#rN0wE|_WpPz-^V4&j7*BBLzF$}`CXZ?H}Y_{c(hLfMmWIrdL)~3zhH<_n!A~?9I zE7s5LLr6=<$H&^aViNDB4~xGnbRUAhFJ9FK?=mDm#3K1|*{AoVgSW)7EATsUlH>B@ z^Q`AvaGQa>hxHXS=z+{&L+0aSB$>l-<%o6k-EKW1E?ehuhwpgB_-#{R z@@WJ??Y>gy4~NlW3kmF)$3X5%*$AW@J+I&hib-|N`NPi*w)61AD<+xBx~?X@yGM$n z9CHeBIF?fWu|OJ=LQ&M(D+g0fO1g-JuwbDSLP*pBG+MQw1cw&_;a#EK@GqtK&S>_yEkVg8ucKO-g8+bOKKR~g8MmiQW9`h zfycIlZQDYPgpr~~J7y5UBu|0q^B+!SFl(_mYyN6=s z*!cLbgZ5BZ2rEHaJO2hPw3ztmKrVn)0|RjSllYx~^L?p-Rs7cH2kn&dph+`9X`^lmR zUn5n|5wD-evbfR{wMOz?1G6E2k_29246Mz9i z%Ya(MieEkWRY@$-5E~?k#jze7j$b`^`;M6I=8Z3;J(vifiJ2LG7^IH~gCWu49LC^= zc~bl#anYZ3xE?%dqE!#>9rG<=@$=dImdWZZVe!lUIyzF70jp(Soc$*AXB!){9i!s> zE6{(f<(%yh`J}D>AuKl+IXnZ`#uOWoyH>4@k)fIk?t_HF8=A}}D zN>FGHsi@H04qPupA0x!F1h@w5QZX_TOKYq|z-(!71RVAtLktTYocHS>BNqp?hShE- z)oK372qPr@Y9HL;1+kkoOZ)I1y-+pI|Lp+1In{`fgLtPKFNx_dO!VB zGL`-bjjik%J(=`s8S-0ATShtc@`AHHx3nE^%hPzi?I$oBU5is&@=pBCLh)JujE&+q z&SVtd_>xBPn@A({!mMR4qy3T-o;DCJ=Xr=vJXW-lC0P#&0>lobWCmi4=J#=o$L=y_ zGJf&crXPdjvHdSdffQl7#FQ3(0-=v&JeGO}3uMg;QXo0vtX)PRmOPYMVI)Kn_D(Z0 zp|1Ma{;N{^BetMB77BLv3>M4R$O1?#p8Davpc>V&L*3?E*L3k*c%v!2#4sT+0sbZg zA6T8z-u*XFEARe@<0NZO0nb2Ob;X)-U7pknmex8aCf5Flem5v?u>S7TER7fW)%5uN zIIdim^GK59weAxVS|n?~a^5}9OL#ql&&4Gd`oW7nB6x+x`=>L!?tD(dD=d~Hk?_%X zC%zt^`d8tr1kHcI*U8ga2%|8VzXV?&_4)hp_2M#S?F#57@HLZiBB)M0@Ks%N6Bm4) z`F(7BO?}S7*XQTQ#@8*$jIZOL)%d#gS0}#g^ZZoxsO1v|T@vHlRX+FARH|3Pzt9PJ zc7G4{;T%>zcglM#lIH@E(UDY;&*jCtzvugRrTh)C>69{23wYf6d$1rEul}Co zZ!x&w^5G?XQQr8JiDYEfo$Chz`bg$;{Z3;L)R`?o5E3_Sm-*b1d#!x#!I*Cei__#= z-kYVN)EIBkri%YH^@+WYDFmtd#Ne73N^pIm#b)rT_d|E%(=Vw$vHu*fFQ2~t@3)utpa~YN zB}&!`ewM7o!(OiI9#4P#`^MPz^73aad-?1?{8T0Ck1siek@d|C4f0F3MM19XUsnHi zy~)N_n$@*0=)T;d;k1Me%SpD9Ds%d7$;0p8-nN(pau2`^2ez4#4H=SSedh?T{LC?t zUwW=VT8wDiM1Ib^NX32b{_QSbW2pZ9+ZW6w;ZXl};#pqFm<6||8?sp1Kdmj;jI9uh zu{V)Noc5;L-Jbpd`@XuRUtv7j-h91EjsWL>r3TrXrjq=M>5_c1NFnmFf85*8xWCL` zBAJ(bvEJu@T6AUm8MmU_4=OnVpaTLZ$B_t#&;C`rci@`aOi~sj0m#&mvsImN)~;N= z1Ht`_btP-lA7$2RDAwZK&p3R5sf+;Jo}HfuEs4nEs8eaudH-r~KVz%6SW+JWm@=|y zu|*0ij{S@;pl=pvxZTiLjm(6`b{I_%)INeMTC!6v6kTuqEBYC8)?;k20b#1vT1OYD zEvAdrnb#ZPo<;RDyr!Tmg+2=D-o=MbV1sb!RMJS*&p6?SsHx_7#Lmy7{fu+CUYyYF zA)}?!w3cF3ev@}wBcj_Uuw&M-tiT?M ze3bMM+8Iai@mK@UVF=FlJ*-jP8@UQG7pHbcN#$cS{(;J)hRW{mB$dNyXXN>^T6_v` zcD49a+6r*LZdQaREw(9;?EF)*^B(XfO~F};opz?Rc@v-=E!QNDT|-buOH|m^@)h0U z%Acq$uKF1PQrSoWuuauhiZ_#xlVIZ?F~ji*+e~Mzf*<)oYCpQH96S%%r#}p z)Rg5rszQll=h)9NVbk!tCbRB!CUdSKGeMF`EN;m*f_8jVYQhp7$G!3K!C{&!PhA;H?|-$S_gKDd`g#;*#k?$;r1z^9qin#;0WBZ^YY;{VXVbMAmW&=0J3+%NBI^ z6lp>ES%+_AUie&r%nSKlL+M@7^WXGKXkx{&@+EWCOZZt$^^*SfOD^z#2}w=7lgJ~v zUA=^#E!pI<7ce{zlAonCGDlM7JUA(x0Vl*ZX3G z1WA;{)mEeUq@Kq=%i7x8==l+4S*`#sILrFa%gkB^G!hBqv@a!Van7<%&|Gn+ zTczWxLkg|rajomorUyygcE47^4=Kw~@u=K2wi&3kL#wrfV&Bk8-V-B(t}S#0h~78W zMpCI^sN^XshZB!-l5J&MqNgj{^2}FQn|XJVjStAs+wo{LxB>ML2&>vvn zi7(`g(e@gOtO|xlXKTnEG*dF7vWRy#PeD8zO^$_TYs#KBs(Qp*Q#`Dgu*Z5E*9%nO zqeLGf5$Xe?GU2E&TL878~Dimi*p44~Yk6Z9d^SFpUr*pa!du9E z!5?3-LdJAt&VpjPjDJb1%yHPyC-_-qM>saT2AkBB2{NXe1Crvd&x}+t*)0%cwE=ZdeMM<>+=-}JdP(Glnx?U?EI7lVd$?P?WEs1-&3!% z&kL<@)9-T>1uL{Zu%Uhs{lSucBSXJ{>D%=H#}4H7dOXD`$=a9rSL_g(RO)=1OVB+C zj4mHT7^VB&&cR3s-hbVB4}U(#B)b`sZy!nINndI=_3Mp zSUhtStI{^d219euNmwfHR`)r<9(LUE&fOD*-5LeUp*QBhX(A6q}7^|COr zh5f(xn0PBk>xh56g?ibt%IwlV0nLh#>#QP{Yb}h76y&eir9b?-za-xB?ugT&!==wK zYafgv*609>b14f`0g7yg3kpzj*iA(pW#U*JpwK6d0A(iH3Ne8<87l96B&i&BfMONQ z+I9JB3T6mU0?vL+knB7Pz(LRVQsROci_`w!mP*sZfBF7j^gu!=t4A^y7bz~tT5*`= zX=maP$YrfmSj5M@TKj)5vx6*;wZfMUrM5&$OxEhPCDK}vng_)pbH9}qt1kXV^snP* zYv?0WTdLT<`T)|wC+?GR2-lW&tnyeK6AyfFmopx?N_gTC`@WFs7_x~+7ERaj$jaJ5 z@jzcWp4vPf-v7&kG4$KJ=r8#pCjH{KE&5j&`W*u4Z{ElAF@CI$hra!gCd0C~(fyi> z3XPq89bO>D`InX2uQ>-DgMeeJ;S9%Fpf8QAKL0W<`!)AoV*61?;o^`F|MKkDJaMrE zC^wg+%B%tb5YQN@!HB_(i z*{_KT!;ggjpr&vH5I*}gPerFAMDilQ2RoO9A(2Shj(L#u#nBc{l|?I)xrY+4OqYKc zf--vaIQ1T((nqJ^Th1Nfk6#lP|93cBH`CBj2xb=p-C*`iBtOLLC6Za*y*bL_a4_*g zelB_u;1C?aqMjj3yB7SBde|E{aXxVe#UEE5JeCnJ^s|gi2d5LOOIAqcWEiKug)t(# z3#gd=piWrgB50L&Acmji&t{(Mm2vVYw@`H9=>$Uy>V>e(^$!{!5Q)`W*u4Z{8*CUy-qY?>p#!Fxbie z-2NW=j`JUE`WJIF&F4SV2;^VVuWjh}WBQi;RsFSTq{TS@L60Zy`QTaTK7<;)IfT@J z^1((J32DM#mk<8@B$I4sNIr}F1SJ3G^T7@1Q^j1~4)DUHtbI>TWIXc0=FM$C=CLD{ z%m=S~Gj={Wb}VVo_>^)O9#ONppCzG>WIi}$C#zDcky4ey;<0ySKDaB_$_L-B7V9lI z|4+VU?+E!8od1WnL=!>vld(@{=R5VY!mFRQed_myWgpI8r0v7GG$`MC(UJ;g>NYi; zWU=%e8V>2FkAHshjsXAs#D4<(GcwXmmG{ph|Hb$^?oP(nU<`>A6?-l69nSgi&T2u; z)b6($-S+>?Ge7zmv)ODAvpIgLQKS6BbIV1*s?#mcY!gSfeDrG=V6a=x+$xoc-SYe@ zeriA;kuv3p_B$ANJMYqNIUAWpR1FyaNT(9c9%%5NmlY|;@+ED#1fpPn>YO;1=kEug zl1zF{k%gC_$D#zW28d87(fL)3dCb!M9!sJx$4|EZiPl@HNFVgtZ3gALc}BNnMbJvR z$GY+Fd60ww9LSW#N61PLow8+rli!h9H|y-SHPwdvqlO+QGWM^eysY+h^{Z?>Zg72Z zw*0*je#d>9;wSu?73qp^Vb|m0J=H^zc4%BZ8ZW38%2+-0l+f!3K056f?Fbj;Vpa$S&ze7Z!G_8OrEZx8T_9lG8(D+SRPN^*Cx|!UwCw zf3GDe;Q-;q8*w8b1{?_?MK*UH;uH{g_fRC4j|0ifj*P0Q%PUD}gv12gb~{6N4H5SDsnNij^e&tfJNEACq>{goHU>Du}rl|?D&kzi8rsa0{(uA>lyPTume!n70kL!ca;M=e;}#CWaE=)FGh;Yyn8a|7xW60@ zL1Zq&cOdJH*UA@Buq>YQzKEVnWw>0v=!cx1$|7poWL zi3xa-7q3=-_C{bm@vM0%s|oXwgzIiLh^3yR4v{}R7WQg@8i=ihe}LG05YUJn$Tr4d zVXMNTe!dHc#nr^6C%o6GeiiYr-IYRU4}R$?F=HSjG_l+7iH$R>^iOPDjPa4NaM@Ry zj9(M$70_K#%D~nk16z6}Y-KxTWAWK4aZLxtEZ;AkRjngzY%ADUv&vdERMMJkEFR(q z7%#kS%#Ub)vtyJEElrF9>ufBdSqMFJi`X1)ge)RA?ZF~8e+ilZpH4-@#8f4q(Mvai zJ^Rqp79AzX?#FZS^==O~=sDT4Tyf_X2H7chN|5D>!Se}ZXD?ZPz(NT7-(Y-Pbkjlc z@sB*l$5tQ-_{af~82C5}_;}+tjgQ$KfRDR>KP-HV84z!LT+sf=@v$)Dufj*t3x|Y{ z`q>sf7X2OrAJ_iC_}F`g#z$wQEE7eo#WC@r?8d2m4~mQ9`!g=q0ztqq$0&*QFGyn$Jkb!!3TWGyXX(sRy_2m zpqP#Vp(C^v7rSi5(a%XNaG0$682hy9O*bIZT~&3jwlFY%XABH<{EjiOYoNwJCu9~A z#nFol2K?jma**Ox?l3&K+4Q*m+R?J_^56u+!;Rg2Z+B)^!}5OJ`7nqkBhip2)%Z%YXzeI8MRQ zryU~u5*xRs-`g0X*%`YN$DB^~wp)2(xA!X&N8w&^1phU&GP>3+s1GlaU2W1RXof`ypQb;QA$$}6=>1sr z7_ocSf%mq&uVQx&JK(8Go`D>3S}uVgD0VMxM-ZevZ5hA1@Ml&e)_lX@yL*5HUr2m} zq+p_WV1WT&V17uXfxpSUW8-fE@QKhR2mb(n|D~Km;ZGho;lLl6pwoWQCa5+T5MSfh z!@yhW#qq~mm$m=D#aqK!2glo~Z8Y9K_$3H$H*93Q9eaz$+l{Xf-cEk=knz^6XKcJR z?!$Q72v`DdZSZ=Hw`bWq<)D-RMMPQQAeQSjWx2j;!AR=g-->_ZW524e`Ts4R-k))B zJgvM^<7xP|AUxIkit+Sje~qW(=MbKjzh>jf)Q`7zSJ+YghSeU3xxSu)L7Mfgo4?fc z<842AMw3oz@s@wjV4(XBcZU?w+6WAk12^sf9BH`{qqg|fr0d^N&3&8Aue^_t$-x|pOmy&-&zxYMsU)RsA{pvU9kreasvV7p#7j)oR z`R`TXRp4aZ`_-|wP0i3a%qz5bQ}s}_Wqzq+s!ko#vPvI)27j(jBuka@sg|ZPgER^l zg8Bl|v`02QwA>qv$M${}uHM2EADAZNz}+;s(M!wmkKWI6o0_tG@#c@1GIhY3-on%c z9nC;Zrs%MqXYKdCQfir^Bhm~jJ&dl8p54tUzex=|^0WI>`q9wz`s^?xzjJ9Y{_7uK z@JMb`Bf4Gho?P~&_s`< zIEBO<#n1K&X-fR@Gm}IV6FHb^ z^~}cCYUVj%ac47M<#-asSI*WyxUd%KToX15vBcYIT?6y=0)2PPZmjZcp`S_zRSi{p zKNM-b9C5!XaaCVVr7ZxB9^)rMS`q%-Oy1=u9NFa6J8&(A_HHO5S8@qxJ)V$r=d3mK9j3m^rvFwcd_1*BYMfV)KG89 z5xwyiUwfBvt<&BlogdTQ6+CX)n?*b%Qj(T59$$O676~LqKccs`H|u88NNhZm6Z4UT zm#;B+AdQORA^D#H_68mLv-rD*>aV)yIGxpr=f~e!UHdNy1RrPh-ltND@-T|{F3Bg7WCBe ztIvb+k>8F^0rJavl7{5tFDfs;RHyuETo`}(Jv=2)elLBZ<=5ex81mcr5zDWnhnC-_ znI8Gk{J}OAq$GE16N~jd#K(1%qs{l_B|nH4d_cT-&XEY=90`3QF`pxmso9u6l-bCJ z>PWG?I9+l=#}TW8Bo;bklQ@=x3B7`E`tcLTKB8owDMzt|8>TT8p5uszhO;6=^Rh~M z=lwmW5WfyxhpQZ)LS})Yj_)SP9G?tFP>u50k7VFLD{i7}gV%7C@nT%4RGk*l1q@zGP@P3Vgi57l-G4g9kgYl1l zm-9$Qbk_J;heW}`@BFq-`ZJF9;K%NV-Z{adKikk>_<0ch&XWGVYc>5YPWl-x`W0t* z=-c{JVAH?Z&~F(?f9?B{e?xyAG6BKmKez9=RWabB{f^_9;7ZHA)^= zVo`ZHRp+gWydQC38@7x6=CFUl&-NzRt{if{oxO?=Z(IgBH_Q!dg8!)evP3UFH? zFKA8u4tRNJ`1lmqq$;BOT42moV0RtW z`27+F`-E%)n<{vH`v~FPr(Ur53Wa=kyi)WHjdHtpeF9a#O0G{7Vc^bqrSD1ck5~HK z4+;CnD_xX{$QLJn@m61m)IFPfKo?4=!VFCAyu ziz|%1DqRy~FPh4cthid+ixeJ-kNm3Yk+|hoW%!@|@h0lGm8{pLIfXatg!l{Z>H7kO z*G|PZ`J&hA7{c3L&cb^vOABuYg8ZoH_$NJo`nQ^j=F}CDe7saLR7=>m|T3xWyRTXsCVg|ro8?Hi`$}DqAi_dIC?3; zfZJYs$(FX8*2r9)mal|Z=>=UGuf>r+2#dnE7Ewn9?l(pO_| zPr1ZtZ#!qi%ul+|==6HC-M2cne`_To=K2HMn@k{*1m^_U4$ zKv^C^UrM8rS{|*a4!N832nuTJ7LMIAyJWU@50y@yhOatL!Q6Jd2?}F$4dA_gs>bBJ zr(nKcB!S|yBG;b}f>!~`=;dClL|5c;M7{Yep*OFRaLEzJBL{N9h2tAt&zJGEvheHw zX{5H1*+wnjKc0rR)#EtKYS&lsbgGW0(Q^^1tAg58F>JRow`s9T?C=Qw<`y5wB5Ob> z4Rb6*X+-f|8`x2NvS@UiEijK!j4dg1j1tWV#i6H-l5r@_8OoTRIP~%lrCFSY&&3+v z?j(^%;Q_S|l%>!|WEOM94R5f#j=fUKD_7izoXIUOqu&`9IrV$4w|?iSf81l~_Z2)W zUjL*q`Re!D*LgG}TFKEQi**msXbk=NEu8cxC3@_OBmW<1(Lb=#+b$>a9OH_#a{Me}|#J@ZCWE zCH;L@82+8~GhFoNHi^x@O~0|B-!hQ?+E*q2hW975-0UviZ`?y2x0hn9_OQF1v>RJ1x zrb#Pegslg&qX-&ti{>WmYwb{zdz_+<*0tv0I$pYhheh^u+uK2S9y6CmbB-Df`aj1y^l5;L{#D0%@NDbT%tDL) zuH{;v1_sivCh0$)q4lY{lm6E8oct&4z&twZ$+kYF*z{kD@{ip~{`x%T70JJ$UyO{x zvL^#v^k-b>sSnumKXaJHe>X#aU?BZ!lK%6T8vdESoo`Tffp~S(xki^Mor(7Il;;G; ztCj2@EW(RTS6ALIDjY(YF1YnHRfj{)5*Z#-Fr<%CrxBAP6%Un)Bj#ag5Ymj6G;iI?Wy{vErXvvY_gubT~C7h)%qKVCXZ z^83=YyeLDF_P3_BACfA7klDF=g?=#wfURg}pRKQIhmRUv7II{bU?yKrLVcV0Kgtge6+Kym^yK^?`_NpD=F1k^KD6MW82YEU=+9k5&AASLZu_$?HvOYt)c*9; zK>Bl^UwAU3RIy}8g?Z~o*@wQ3Z{%?uaj zOEmd3H#Af7$`{+-@WRN{uZsS|Q+8H!DY8s48cB%*Jytx><4h-hnpXF$FWUa4><$Y* zvzKZ4^`i0k<`)&u@?f60P~&GOG6akM`ZJvLXH<(xzrIbsnW4Yo^&t9#CH+Q*K4mBt z{T?p*)nY&WmH+$? zmh>AL`UOtt{;!DgA4tDqw&Xv}@Q;Yzn*a4po%}anPK!eh`(ekU z^=sQ z9`YjFq#A!%tBDiOK6tY6+!|vu{&@B~8qalTFuwM5#!Mbbwi-#Yn28L;fhVh9Tt)4} zk`1nsF*&+l+~EC3r`%6%F1K$4<3B0lFTf-(Bd!V6sZ?fgFc6KyU34qD%IASeMrs zbVY|XgqQ3TzEsn(9r??a^GqH2hxDy-ZLj9(`4pIt%6AE+XP6#tI+iWxpSh-nri!Kp zd4#n{61}~SpSy0aJ5kcP!_Zk%z;x{Ur&?F$x<4EoaZU1_$7E$JE2y3wxhu6p$vw%w zs)*6}siGRBDdZFENENTU+0jsfQziz7vLc)15+}~>pkq7MEG8{bXJA%;*{hXhDdjXr z$ezQZY&xq$%YR7442wqw%k5AV3AA%rz2&Vrc#Br*=+_Iyb@Jk$7( z^BZ^l`($IuH$n%Z_3uWrImhv>e>dfL;ZW<}op2oKyP?u9DXHS(FXOR(SgE>q5p(sS zx!E>Z+_^*LSebFCdw+Z*;1OK+uE7EupE3=j5GBt8Gp>NZUPo;BBunn?GbD0y#mUG` zbWEV@omzfXSOy8(8W{P>wM?w`(#d362aOZsl*&XZq>)~%zMN=Z_^%zfKjnm~6W{Tbe zoKxsCe;1q(Fn_dh%C|o%9`o1tr30`+(7-sBm{#=)oWC;Vvhu|Pvt!KPsZ)6V-c8o? zcN+2-8-kggdGSD-zjA5*eol%`A)e@V#!X@+ylQr2x7U3gn|SX(YS3Tu0b$-2B~DEc zm`ekZX&H#+==6hu=mFHr)MVi;(nee}=D~?jGsnT*bQPqXpDe-e#_U34g^a-s!)X6;Bqy_!fl%W-kLUM z&Xc@!bPRZk&eM=#G)G}h?JO62gL#TIhA!ql6TYw>D_Br|@qtiwG)!TTOj_k}t0`0{ z!7KgQV_M8!wOH)sY4))1SMv5i2J?1`^+CpMTqXQ<5_gmDQy9JSyFU$nY~9H zqDvfmAAYC0QW5{_-0eQl{s4^jf)L3)DMkxPh!=`k-!r4?6_DdU83a;}|DeEBzT3mD z>jqJ9oDj_M_>}v3gk%$+NFiINW%??bRl#(-dd&3ml&gU0c9Q92W}5akNAa3CmiIP; zX?hKd)+~(OPAu!kV7WI~rZAUTE|y~e*UiP8?-bYk$Kcv?YpQ&U+XCR`XOOG^t~pSvj6W`)yZ0K`HunZ#;$S+F{-|zyD$u+=GcMxC+W* zAUNDNkN$kpM7kBqQ^J+TCetakzGQ0n8AOH)ZoB0;J8j2kUCfNtB!L&Wq{S67^T?~&3vl~%+Ww?2z%0U_ij$u5lNEhL>XRd8PhdgiG>}n8j(Fwi6wT!XdKyU5A&33eN+`;PL(h9|u< zXM)}Q2YK2Wo+PI&Qw%~fVh3yZSny6+cAeaVEaS-^jPrz6F$_oa{211 z=(2@jda*X+JBgAd;QNsFpD^aEfMZD5M!3EIBwh6X;QuUNr9N74xB{R=sBi&gFyPSa zKXL8*({YqBhCPX?98zVdZ6`FfVE+jtFGQ-5CZ6A@TqvR+pG_$Erk}p57wSzYBx2In zm#&eJ3rJQom3<|x5`7={BG10=tRlkTd!oJsU!K^Bzd0f82lF)5(7gC;v&uc={0?{M+!+#+CiW15H@rM5%#J}6#F!Uk`D-(>p*$8w+>zmm)&Kx$|n;^oco3R_7kKE+z1=cxm)k^y9WK{X zXo7+B(_K84gq@we6&PCF4@r1?qO?G697%AB0W<|QBpuU-%f(30|;KUghtsAcuj>L|vGf zZ)IL7Xyb)B9SQWpoPN_COw%=XE$B@V$8|rg)AJh+X%M<3CwVa9$IQB0@&9F^NELcs zAX=vnYBdPC9)2bevu+m z1A8`cWNkwN$F!v$br^MPNLFd5aEHh{vP!&tiSfFAsjI=adm;_OJ0f+BK{lkxVoQIg zJViDn?$Tu0C3-UEoFMt(1EtZ(Dr1mEML=>JhEd7y5Lro!7Ajj`_?a>)VPAI~*0ha( zXIp~D3ONas>5vMMJ5IhD=*AT&_|=u^yg0|obUvTtr_DOkVQ1aHm=!v)4k02P*^VEwym;?dO_ZS)YKw(mCA>l1~b_WnEV48+xIu5sh0xl&5OcQsMD+NS5 zjZbh0we@o_c&yOKTSsVq35^f8lMW`8X3={w&)%0LB&XodMcaq`AW0v|gzl5kEdEi) zN(Yl8KJBbzuj2z+zaW@G)-UfjvVI0nqWN6%H^KSbbpCFvwNJ=esxeN1?TCDim$s5c z#v(Om41u6?s*S*$ifqKy7H4scms_$ib=}&^sS`9P=VpNwJZ-ePbNoc_oSDr6|1RPQ z>v)Wuuyir&S~+3tkLAWvmAc)#&rBBuSMbHSt1vsVL+sed)0G`*Uo#ZxTsQ0NHGIL} zm^}!kw$jL|mBU3Z2DsF{ds&g%i%A*KtS#IrA<+!! z2pzsVcC$2|6G2Pl#C%IwY`llxQlj1x7Ml>%yDXl@zs|?QY_k$x*kgp6izm91>krZB zYh~|z){nQ*cZ0$!crg`Tg^f_(L$e@+nhb@5P{&frLBZ7y9s>m-?HocqC9!c8Z+sO~ zuJ^$wXT%5-cAL`rm7qO6;|B^udCH+Q* zeu0yI4;TIBYdrKF{m)le{NG{d_X?z6ahK%(D8qkyC;z`W`L7rrTmClvlMMY0_XqMX z={GX;3!LFFhJLR=`V~VZ{|C-wQw9AG zIr;z9$^YgS9{k(&xB52yiw*q^V*~k@^cxxa1y1@sT=eIz@Zis3|1vE8e|c8Vf3HCL z6+-f^@54%Q> z#C=}dG;9#@T`#Nrd2M0mdfCtvbv0xf1!F-;7P4Bu{1lH>e#&7!XNd@meocpju-M4q zjq@^~c51$G{?omfFO|IO(u7$r%N)!i+p<@REK{^;0l6S)5Xi zC(-rbqO}C6?eSa>-qw&K^m_naMCh9-v-ykGgO})_mE+|g5oP*|2#;+M(X>$P+Ua5` zBA@l(75^raqJq++M|-7YpS(1A5DO}Ej}%mnm~xdClr0}dMkHa-HX|Qr{UH2NfP8S@ z)pQ#2!D>a(`a!;_AMAZG{`G^C{we3pr+!doAPHX zXOBI${b6;R{tvUXKU#TD5dFTAer-d)pOb!j7yU8YV$v^eVe$W(q2D2p{^r{y|GNzT zi0Ezpe{}I5n|^hh{y0N_<;Xz(CH>llem^Ju_AdHK%SZtn{@9KOikn;fcQf=m1k&F; zQ1bt~;U5uww7zTkqs3c{zLEw<>wR_Kp&|L$(%am7;}|Ezn6T7c zr8I%*p;sw=&ilGs4}t@)BkT&;aIRFMfUbZSpO#VAG|aJhXqZ=*?0rv7@>qh)w@V4; ziqnykxYQ{cPwd_7#PeVdwjBP%)~6OUP#sTv&BLPl*8ZVEc%F1KkLEHp8r=VKi9?@; zyXbd*%cDVW3Ns|78Uo@WUJL&KJ#>s!@4?Xnlc&3F-zn!7Ke@Gzz z{U!f~ei`x~%bpB((QiK2qtCWKpLe#!|E}peo*EfQKS|PG@U!8c>D%#lIZ%cCXvZd_ z%T9luwjkhqmdg9{JZFCSs@9=6=9druL#mRGKcB4TD_?Xd@amAsFE{pMk(F$dQC^=Ic@7K2tS?WVD|l_<=2G=W9VnN=qJth;Mdll z0-OHLhJMRH`fL00WQ;KM*CC>}@H_u&7ylzY^lkj^Ottt=H1rqV8OXn+zi+GI-$_5i zMSt#ynDh&5`irJ%{b?CUf9;Kue?xyABKoL5wBq5HzY5Tw?blMt&?g=~;`5E(EjNxZ zZt?K7%>wmj(Nj8}t1~Eu{!F`pr!4D7tv}O|gaql&@C{D<^ljwHXKeh=JJZ5XHzU81 z`9b(el7m^WMdPPF560-v-Y;GBuZ(%VQ45=XGlSp#cLdR&6z0je%+N1GzG3Ola2Nfi z-gwToAM?(z`2RG@e<1xNNq>Pb{4;&B|7aEPzrXT_^#;i~ShqA?<-Yenm~WUR}L24@c+pOfjbj?mTN!ESGLEYNoWBA7uY{)UBP*v8gnrbY6C8Q zJ5O?fy#su2Wr64JihSn6v?TG}75of5(A^bbwShlRT=y@`mtBo?FgW;vh4v2&Fr z&U7InaV+mF*RBcsrc3BA?S0dkv~M~+yJTo?c4TNcRMI>AH|{Kt@T8!j)Z7;0wO(>k zTA@c5Hu$4YSVu0V^a)=g8;lmi%HJOh`-L8F?rhByk33@AFHbjDevm%k16r6;`Vg|Y z$RrzF2+@Y3z4?-nLNqyokz*tyw^ODAMo8J~f|0~x+8=Di6}ale+AD0VabNo}l$~~{ zp;3$(Dill0n4#znVb5OKA_k1hEW7pxzn;K0}kgBWC)8-}H2&cxq{ z@i+NdX8MS%Fy-%}VOO@yZ+|5%Ge0{C=?`1xX#Bgz8UJ>k8aw{QKu!H;+@m^w+TSlQ z{=H7dzdVX;y8jpXg&qI8=qEMu^jA3I-;*u+R~Y&u1L-G8`U^Ig_}58)?`jwS4|?)P zNBzg9|HC7O|Gt6zcai)X`en!{ErNzpCsuoSa0}u z(%<``lmEdBWAks*zr)bqe?uVu*Gm2k{jwA%|1SEQz2`GK^52sz{+k*4BLnFtN%{-E zF#I!pipP?11dLU`*s)U0gmt8JOp()w!+aH0`h!MfXx}Pcyrdl?oTZg}_+|8!C zH^7gGc}Y_+1ydc}FVCkMxQ{#?awi4*@aopNi$iebrg{cjeNCveQ;s?wElo6-pqvkH zs|ae1!24Xrnp>HfO!Pj1*U4bRP`5Y{L-p@oS^Tg>W1;w^576N0Ug0w)LgL;W2E^H) zOM!&Mn9~6WV~+={aN@D^pE2#>%o8j;Jf%jEE(X#FeAl1u zrLcVZF=jp_g_S3+?CmEkKKUeFeB6w7%eehE=@!m#UfjbQR>?--Y@zV+TVeqDl zyEXAl-}1~~2c2ZGXsQhz4{8l`tg4w4JbJ^c{~nWEt*zL2I=KjtQNZQBr%gmFO+D<( zcvu71O&uR7ol*N<{i)|^>iN!Vs@S5PE|xs0c;||ehxhy->i9rW$H_*)mt+-6>cuI< zHwG{<%0BzQrs7IDfFsPHu-%4F8zL>%@Ix7vFw(wlJ+-8oQ|Bu2u}TA;;p@JD~YN7O%<~}@xQ%(*@6bD z`ycM$VR8S%br_RxyfvvUkLEHp8sxvoAng3dMSty74}C}eSIeT`*w7ytNIyx^U+|%v zjbu^ZNq_HRC;yYMDBF*jZgDCWWbP43YjpX0ZFGB`n^Y5ac6r29MV=ew? z8~P&y=_g703sxHbnZ8wzM#M{g9oqX#xzXNoJmC)U9o`}|u6U@*DjRFj%Sv`OqGc6z zsXe{!u;{NW*b~qN4@nmWn?+lIbm@NG3U=5QYPi806+Ugit zo1#fVZK^KLgipnp@O&2hzcW^mRuA9dhfr+5r7)iBz&YG36TX{F=`3v#;dIUAJ6LZn`)J$xqbk8GBdj zEvLRO>EOvP?RrCN8jrSjtJF}^MI9Q7uf3bmipPq7sX?(v_CG`K&aD4H* z`Enk}`1dq^zOC!P?+0%>={JAgL*Le)>NfpPc}6H+SlJ&O_h9zfHfLp}#UakbgSGD-R!_e;#NPlyNj8D z+J=5Vrth}j(gr8A)T1fpQcl!U)nB+ep5+*MY-1B6es;!F8X7h_RzQOM{Aq@`G$U- zK>9N-mi!y~Gm$>n{LgjrUoq1|-?kr1_gVaZJx1H_(zb#8OZqDo8UCI0Yq{t*A3}+P zW50t#{xe$iteAASV%+K?#**5zrK=g z)>mp3m|9WX)>oSCmCEb0zEZ5FDo=dV+N-rDYZ-D8&(>*gNol2vp~yE#Wlg@)<7Fpa zn%@{xUS)eMyc})t+KUF^tFIL;cmz)@)Ogv6jKiY8evXs=RcmAJ&!}(Hf6d@!!&O1_ z2TS^m4E+Kp{T?p*O*_Zt{|}4*C|-L7(ywSP`Cnl8M^ta~|B{pcC0=`B>q~u`ezz$9 zR|fJg={GX;3!L3K6&FhW=NtYJvD^H==;VLKH8JPEzD@sV zLw`f7K>j8DMuvWYlYS2u{i~*X?4>>bWxFi?KjrES`Kw-m^eZlq{J&}VN5t;5SLJZN z@SJO2P&45^f1;d2Kp%UBwarSN*N*-9_Id3?$C_L@hS5s%k2vsHMI4UvC+_?mGvvR5 zziYJgFZtr!OvuX>YMA{&zEK@8-kRL6z@K3hASM&GK^Je~D$BahLpQw8@ zl|X#v5Bo!oKth$>n}B zQe75}&Sx3D^O}@VNSum9#FCNmFMI#v)bGtt#?-GCG%_6zo}}=C`ghA9{ho9l59Bg6 z5Y+#x1nAcwJrcKmP290R5FeG)FLa{X`gPy<`0Lm46@jvArev2dR$k^OJGGxad@fJf zF|TUVW3Ns|78xpFeF{^g{?9BPOoj7k8`36aZYq0HM+}6#-Sb%&2RJ+Kk#Nh zH;2c5#g8AhNmUOhel!?K>aMzu9>3VD@pkd!>{Q0tx;YZ(`QjX8B2lH+_EO_5hcT0| ze}=J{nRpUCul9+j0`P{I?rJ^)F4kIG0N%#k^nZ=Fckce5#+ye$4Bp(jX%Khltx69T zaahN;Ay=&Lt7OGpN*S(|`ND6wz*)Xy<8=7qED+*GoK==9Nts>;Z#dLgKR)WG3HJkxv%$ekEM^;NhVs3?7{M zN#?WcYkl!h$^0bMnV-D6+ALJXt$uRhcYzXXR;crnZRhz(Oyze)jd{w>dPYhtQ;bGZ z5mhDr$>b+J9(T$wX}Bjpx8+y%ttG!iH6GNzXgt31t2m7Z^Tcd97@Yr$2tO)6?LXN6 z;Qp(B85wS8Z>jq`_qAr7_WFIuq5-F5RmdV(8J{0QB>Ks-9= zy92G>9hZ&=sL|0u2!N@_=;wG|?Ci#t7i^I{$ml=(jl^e&W_|Qh5}X}tG#@IBKB=H+ zdyW^T_T_k=G-7a!`nLo}p7``AOMq zKOlQj_dn!B?|(oiA%v0))qqgOVoVT9V)0NOLtO5Ec+08|Qf?#zPnjF>ea1#6?!Xft zsLU*8QfOxgk4|J&;=C}OfRQFf-eC~$hX|9BI>P`wR?#Q-DUk#S5k(s%B6yxhFC|gg zi1?#GB4QaKqQyV_5J4Z&!1Bb>lNk{MXJ|yc^HXiUVWjCOc?ko*<>#}4-y$2|#c=te z6n>F~K>Uh)O~$^l><{u})30W>XrziyyD5kN zx3#L7O+Ji+WHDr59B@E0MK~z@O5z}(Uv2SViGykQb8$|pp9JY6!a=TB(13Ap({zc0 zT(J--j^)Dw_chdhbicxg?tr3m=Ql* zMkx=;*D$s-sh}AvCBQg{$4yF@G(Q%+>zN_|iZ z*HmOHBwW9Yw1n%07++C>bcy`XmIvrV>RD@iOIt4|f3fNj)u$WTqTtu*H(Gcq+phA+ zKcnuCc=w!{~VUYi>ad) zgZr;-$oF*n5&!lT|pCnzHnD_%oXY}o+e7C+e9OkL_ z*z?U7eQL@3+iC@ve?cqo)wehae(}9p-YXG!2Y&HXH~e-3iFvO5aJ$}=V#6O|;BT)T z1b<>RM*kcGKMz@nTVB>N&*S^+l|;G=%~ zs0_<#7b>JxA+dXCofOIhLVo-zq95HKx)Pps*C6Si$Kjdid74))?fYuB9LKzwF-yuu zrVvOsq*iNt7*+3ibF$HC%Cb8}L`Gys26|3UG}_n!Ao30wEMcSjp81ms!B zBn0F{O2a5*&FE1F_6J4OHc zXfa>@dI$CEqs0RJy6qo~y}LcnZEtq&@c4K8{Q0tvfTNBte#ns)H%*K^CCJ{?kSlp( zhPHP#c_jw^zKL%5n~+UJ**hD4OB??C2L6GQgW%7q!h~#X;LrZXWp8hfg1?gwUb^h9 z4S(5M3;#O}{IP-XYe@KS+->l8!{0Z-jeoa39)DxQZ)wB7z`#FnQXu}7CH@BfY$Ozx zzqvgMev6wu@NIv$>_ZFxEo|HJclpe=3n-j=`RVq0cf|28a)UX=T@nu?$ zuO^yuVb{KZ6vD1u^cAREj{6%gXO;i{#)}_djp$zvOJ_%nv#Z%vua{PC3D_sDuK}@) zYGbzdH+ILda6U9m3P+CEgY+RP|GCqxACKFF8LtPf8_Hhaxsr$H0Dv*l{C3Edbll$oc4Kk zQyXhD>fSrUV-p-krtyh13a#6}3wpZdQJk%anj;btz1GE??0WFvCkGKOwVx{KnkMG0 zSEhySOMw3we7hku`5$xhfY{jYuY(zW^-t6oz9&ly_o<-O|gldw>07jOHGQFVO5wX%f)HVEXVe z6mO5QcJCo>`XT}&7`@Fi_lYfhkU-;K_KkMix42~<`)1qMmb6Ok-=_4}_U%B` zAp16JKQE=VS_=B#k)>GhZ;yh%^Lmecv*9mWVZm=?;ExT2UqixwBTw76nr`^}M!E4H zaDxZFtN-1G{{!=c{QH690`cD`@i*{iBZIK@gEi&eoGtvr3U_iV*~O3TjFov&qfAe;~xcoz{c44zir`vu%DK{v4QYw zNce9|F!(e4X!}dnmg4^r#{L%Ji4*^~E}~`m%u|5<<@`J5>?JrCr@sL847EQ!>Vl)a zKiw1O51eXLvUn-O*yghLnGmJOSJrw9ya}F%GrlizYg)=e{J2EYW9;%YsGoPx2tX>2SlpBzQ%Ke`CH6;2&a@QqG@s`1i_x{@48b^KzSip7!{V zj&-6-VR#{l3VMgDEi9_|pZ5ni0oFB$lBA0dM&wls16rCIjWqjt(_Licvjzni> zyr1aMD_U5tsK1*Q=IU3aPz2O7|L7%!qL74QOq`!k&?^#(Y*B3&3&l%g zq)=pw zxJ{Y=f{_Qwqi`YDQ8*aF_9H3$YhRu~`mxPvUX}#s3G zaasjG4Wn1&)TfdXK2gG2l6fmBnR@mZ5(Xc8%fAOnF_^t*Up4En7rX8PSaT+?s;n;!a^ddf3{6xCF})T0@mdV-zLZ(f4c z>3YihYCUP<*}t(K-~NquaxvS6$;Bj#_Pm(r_=Bt|#JsLvO%mw{gQ`Bw`$e&$L8~B_he}i~gRL^QkYx0%9m4a7uvsz8E zSoIpM#*zPlZuk=~^}x65X`7$5;GbgPKf5Ogeme<&Tdt9RH~c11@CUFkyY{PW_ycYD zgLa+F_5k_l(Q4%6*>v?h8#Q2b)l~W-a5*3!&`f&Hs418iKTWd}B`ZJoyoSkOZoZ z<|lXg8HRE6891#>k@hpQ;>W>K6f(tyuMjKvKckPe`@7}Q=RPf4AG%|4#vk>&Qp;mq zT8ghdSh|@P(OWG7=YNq?So-i_wj2H?TE2V#*oOc4Qx^P01AqR`AowjL{EatjeQ4>1 zUpoqZH@>_pP#?S7@IUEl@DGH)bd$v2z+d)~8~=W8{6FK1uma(K{-lL}vrG+t{*FNW zCH##y8T{SwYe&H!aFCiO1L1eK;a73+4}`z;CyBp-zigQs|GrW9?~4il^Cv9)JN~Zi z@%%pm@t5#7-e~Z5!>=6$zgukh-EH`n8v54_gunDhiNArr40(+$|9#x}H~hhazwM7d zf84_V_b!J2C4u-$_#1C9_`BiPj)FhHtABR?Mt2*2qaB+5bpzoqEt2>f_{)&2*!cH$ z<3F*BCmyijfBu+-{}8r@6pzgRJrI8he`AippW*9xnDUu*jB?))p$N)Qb>e?hw8Ej z>%~TnPe1XzP9&1bK~?z;T=BG5jiaxygPQX_%SLFB zU&2>E`sbNP-d_?%e@Q0#OER5?hf&5wZ8uKtprGNjVyh$pvs$!q#cT7Ac~ z-F%&-ZJKC}ltVdx{NecjtKIrH!0Uf({p(Ka(fR1_mumY{mzLu1|2IngSL=ZPM@C`6 ze=y4pzeY!o{=4ko!xsD@iWJcQ;vo1fB>as7jsCmg*N%d}^E?lHJO1cy!*68Z*A0Zf zbc4j-z+Z-p!p6U+8~=%yd*Ivj|9qi^|0h>y`p^G05Pu1O;{by{!`Jpt_vW9zM|5)UM=U&?dVnd1Mc?=GX>(K4(Zv9tn=%hSv-cm@Z)f&B z(Wc{Ua@Q9#P-1j4drwipWcKC0N!mcX)Kno~9-E}g7eF>(mIF3Pze$&-ncSVYS$J)S zJuYwm*DSV=^_OCkD-Iy=cg%;K_PRk8oDyD`;N)!>Rfo%rxx6NXCtMZA-BnAe28 zicVMf%*!F7@R`q3A_AX@o;0L&T5@oUec5`_lH4`=y5|_LsXy%_l!uZGY#E_s+^&|X z4rfG$C1oH9hHvRri&W5Vwf+X3tibQa9)w?d|yVa;x#ue@n zVJXu~@bhBs&wesZuV{%mqVbn3)9d?6na&YsA(>G!t?i*z->!J2k!1RYQ{PUl&9=}R z527|&%6U{_cYXWuvy3f_QBN?o&|PZ8V^wN&odf2j7O8=27`fT=+&g>7A ze9m;czmKF_Nc@2$z_JDOR})WsnCbRs10MABYuWz160J_h6Hl0Y?xRgX{%n9;Of|Kb zWHFEza)J~0mqV_U_DEM%oFog-P~lMl5{mIi7ZepKu!@^Z;OUpZwx zGb;5O$*4>*^-;|zqhB|5a_d*z+?e{c=sruo8eJyk1?PWhCBE@`oLs}=tK}M!MI~MX z$%m@nw&~tRM~$j0>Z=SRDHKPVU3#z2hlM?Df+lOf;m+=0MsN$>DsOs2=Inm?SS-qw^B_Z$Y#U zPy)!qGn5SBm(Z}EP>G_KQ4Y06+(h)qb_GTwdYWfw*uOkn&>5M4n&(@!+7a~4EQd^k z{?k%O{K+CToh9QIQV_%~sfb&`DsE}hr%i8;UA}1}O+yiWS8UwqXBy~LSXWbS_=v5; zi9JX&RfT2HL&`wd_PdaND-z!(-DqW0{K6@IiP!(3x2%-@FKU1Om*juJ|IGxGk=6Lb zFYhx2X@7qH1~2(c{F1s>`oHeR{~=L|;r|r_G+j8u0cw|N( z{Vp){>+@|4`jxC<`rY46)9;UY9{L&o^kE0Lf7+Qq!syyhuXmvXN8>QBR`#--4 z@=pWgVydadApYaU_{qOsNp$?TgpaWJ$baeY;~DLa-z(Su7vz6>ApfR>O#JtC4F08l zAmzWS=3jGURRQv^J-g~pJ<#6hKnSMH>6bs}P1XT#J?PlP35^cfpNjqvQxBRm7v@UE zXsSu-p*n_)F??}qkZ-{YceBT#OG0y&JB#3ckNV;+SD@(eY@s0Nc%h)jym|p807(M0 z=+2>tTakdf=NpK5wG|1tFyw)r83Y|K6!f_8iXU;-+aGtkd2~*R13il}<%Z&P4L#ep z*Cks+cSpx~tfFIA6KVZvQh?`@Z}bkgpKytEgOuWnFTU`~@$3|OMJ|tOH(=538ENBP6;0rO%?pU>yG?ZIwGkYgkpMv&d)G-50_Uuew~T6}s} zpgm}&>hZav;Bzk>jXz9&mnrx`Cv6YvBY$y|&vX8vh@j*AQ^?TpYnB>aAMPDbV=?^e z!?lThG5f`mwK8BvQfg0h6_W*QzV9pHX1A`&sJZoXt%W2pl~O?xOoWoF#86f%Wk{ij~u z&E{96oSCBkN@m}28IpaO;@W#X>~rcdtuA%@<5~OnM(^+2{&@IQEL8jBj%I)7Vp@}L zzWCWYyqYmr$kil^&u7zWOg!-VC2sh`PWS9@*!7@YQ!MyHYU_OU&GkX>yGi)_FW2z9 zyWzKrf*&`|GatadziGG)e-xW0+F!mn5dLQ?B>o2e=Lr2>{Z8I|`H72-7E!{$U6*u= zk#D}-Eg)Zp15x8TtbF-i^yDHxIumM&{3wE@P=3_54Hd~_C(P_PlAN4!#B~&h@>AqW zS?GticT;imA?dO>ZTPM-K zk$2&FR0i`DGdfg58~uo5)iX>k z<8R=L_9O=$b%ihc*;`&AHV&c_@Wm4koq#8ODVynvfQ9Jwk)PG2R}^`S!=FOD$*MlH z1DP82?3cTx?WK4lp+`^Xx;)=SF%|sfn->~Qr{;XqU+vX&)Shd2cf(qR^T!|=RGOY< zZR0$HK2~T$>()|CKM@PC5@Kr?R(9hs!QIt>Y%2xDx}+5Bt6WO4zB! zL8Mb!u{j(=nG`5=fwmXkdJ&AOwUH+4Mf{BFML1`b+)19Z3W*JWZIY=vPO$le2lypF zaaG?k`&=Xx6dxQIhozy&LGHk(AG~jZjFF$jkBb-9_(>|gqWBX3;CqAxzfss{re7vq{K)t{8`z0ZFe0=7qCebUm`1r*;B`Nn3LEJay{BXX`mj{2~ zrJ;$BE4;=8e5$P^Am-m9g9(U_t^LCF{|TVq!m1n_d+Tkb&o8pw^c#76`P1*ecLdV! z0z<#1t7Fiwa5>ZOhBlghE0D6ppdV*8nE%?+(2s=K*>BAp8E~GcN~!0+7U9Fr{MX$| zg}G5HsC&Dyzb50c3iNrmmDLZ5+;Xg>o{-WV$erVRjnDOkQF<6g|=jW&uVE>0!;2Y1!N$`s=mEf`eL*O0w z#pk)<$3;Bwt62A;rr7X18u;7a4T3-MWk&xT13wQLi3R_rDEOO_W9Ac!ZnyB?(^BUX zg9G8mN%)H|G5EXT7dLm~zp|PKzTGdDV#9ylz~8_=_(#_`Bg3r@Ha)*1!Ybg})6y(ZJunG7$e|5`P0fZ!+QUF_M1OF!G#WlGt5OT?vR-=!Bva8Ac>%d` zl}kn=Bswi+s_kwixfT+gClS@0|4csKq?wz4?WV-k-+{C=Z9n#$r}d{PEymY=tbCDI za-VuRsjpl26*c-@IlNR8wfof5kZ$;g;COL3^)y845;zV~M&DO-T_qK;geYqE zOgMc2T{)*b-+-7Jkq(gP`Muf`0f#^{EbYE~+;WH)!bDzPM)x zLB|UPy;7`_evT%4E;bZqIM6w)Xef%0QMl*&LeC9?ju#4gd@SgrCG@9n>6tPAwK<3S~hVwZmZNpW8vnlzZU-enW3E_zPCB2f$!7It*O#;0bA_Epf2`?{3 zy~TRY5Etq7&=1jiT3YLY0?kX|7tv`PuSUL+bm>rq)<@b)iCoKJ(v&x*Tz>p2Qgge| z+v!}gpwm)j;JFZQcrE&DenmgB4$BfFo@Hxt`uSwd)U#noaQysX*RzZ*S;7dHgd^XE zF>Ae~O~8J2>GO|NcmA=vLiy((JB9{2!y(PIGko@SFX>GF7Fx_i+uBk)!!}5199PJH z)A5A1$En0W+<)BI(9l(x6^r+&{m$t7g|KJL_W}jY*9@8YnqhN4VWVzbmKb+7mnD9t zl!1mT4dpeI%l$%!yq_@aqiEcigBMEQW8P1gs;vz+P54#~Glc&gp_~i~JU)dHQ{d56 z#Ssivm3MH`i1$sn4gz)hd59E-(L@^W)r7w^mFiSTx^n-kUYT%a&S#6Wo@TN5^gJmR z+2U;ECN$z{>Iv3}r*1L7GFohUioY^VePy)Rj0oTH?^Zov#TiDH-1?aG6Z>{=d|LYc zo9O<718UEz9Q#MEy(Lf|yD<5w|EBJ8FYS#!E_sqkc6D>Dk1rr8@X<%zUnnc66{JSq zo?@t20xolJAtqG#91}-1>NEbGSiOZ-aqtE-6{0x!_nEAP{U}jEaj^W(6WCp+AMI0& zIieeC1B;(fTJL#+eDwSQztbdscit-Tqh7hP4f{#8gQ@1?@4ppF+@avvAI;PT#;xag zOyNV}Gugk_*TjSL|bN&%uqj zHn8OO96zP)Im{l`+jD6YZl#J|f0d8K9dk*EU(V=^gup=_HjI$Cq^XU$;kQdL93l^) zEt~9UF}T`1g&1VGI$AIMQ90sl--sWd^3SyxhS_3-7k9dHQ>iOA2ZEhO`je}-80$$a zmegk~PEuHqrAeSo9#2M?8qVshr~3d0fyKb?uZQS zp>gz;{JZ%Ny=m{>Yd!S%MgF{p69D7K2|QL=lB-I7!u1ez*Qw^kXUNb#M|}Fcm*(bF z^K}cE+9#YPEqj`{{=bscI-a-UuQqiIk=^mv!W#nUT>Aa2sPjMfy;lCk!Jh_#R{s6Z z%@onl|NNXE(Nu9T^&uwOH;r`s)f_37M?S+7w?XsctJYRj)APx$BVxJwckTLeds>~Y z4_>O)lO~R*_4w8YA6>wU$xw^IM7&&DjHypXPIJRwd5;IaeV@jv0T%o{DN=~iM8UH` z@Ec0_YtNL#NERt>_*J9ePfYOCw_W(#@ZUD@j}L_Z=zNL4fxieTj*b7RZu|%A^7L!j z^~qJ&TKJDL@Cz0P;xFN^J;UJ7@U{Nve3;|1Nc@3XMu&=EJDmRCn;#?7>QkRYL{#Sc zxTk!3wCj^T_i?}Ty9u29^4E~Rp~GWk=s15RVv)x=qrX(%=s9nFY}$6aqV*uUc@mqurQTN<+{#hdz+`Yal;+i!V0OU2nV_$9KeO`d`Jh@{%a*5 zN0vsF<*JZYZ5YF~PzYey{AP(EVw_ygrtY*NwPA!nraQ*L$!VvX?#gfh-{k6?sG^8H zeftq4RMFE@7x$HdhtUS)X-OPhb;$Zs@Hm~ye$r3y=oO_BIih4P3*PY!se;iSmL#Gq+NxZLrN-6xL-)C{dk` zr+kt`leDDc)zZkWrhkuLMKWv~*`m5qT~hH}?0dvdUFcP~K;3yVbrx$(^E#w4>e=M$ zq|!v|OD6qdB)(6g(U%aOIQp`7XMnySmpr+w`m$x+|5{(p_~n15FHiscKhu|H8Z_&R zC-=_Qs%k1KT#~|L6_UD+W8Kq33T?n~tl~OSXenY49TxftExjTEr7dpp*$fuiF{etQ zaX9>FK6d5SwihHs> z;^Wi@ZaPj$jH*v8ea@2~+w;>Gb;Ck+ed29i7ByK8o{u&8)+gfRY8Ia?SA+gXUX7_w z6d&t`zv;J_@KbE~qYV7*^Mc?{EMRJ!W8mlYBWf7T>D z_}^*Z4-SMMC*d!yY4CT$FRtRozgwr6^iQ$jH!|?IKM;t2MB;DY=k;;p9|b>dx~D$o zlK)H#|4&XM+s^VI2tQ83UtGiB?}lGo*^U3if|&4AZ1|%L{O$J#;(wRK-@wm9D&o7p z-e0dIy8m;=!|Xe}`|C$s-yNv~*K*unKc)*fVQS zSx9v4MI>|mXY5ClcsKu6&Wou(13O#tb7?ItKTT;pzV>tFR9?)@YBA{lyv8NJ&s1{5 zA2yf*Syz48K99M%lLgWEt53p104 z;ecEysTluX9gb9>=fg!P?bcIAB!*jcP5$q(>8(}|M@V;TI=UbaQ}LNO zlok9oW$@VElqsRLAe*^01B-J?Mg3&X--=~$8aKm<^Y8PDAv)HSD-VnJCNuMgBue6k z#rs*Z#paCS6FFq09~C9{#`;RO7$?7SmikJz7>}>Gq*>Yn)h`k@m-ciyM#)xQ%5nhW zZ8e`p5sYo#PfLz?8%0v}roDaCE`%ms@Nhi@20T0;i;M4hjyGIm3g$tp6%sF_Y`j142zw4%+h(sYnJXp{y_dXTAx0xV2Do=<>*sa zIi}gGPcX-&)~9Vvm=~ADF)yB`T&7(03A>x+rB7$2`{`30lU?c4FZXyUZ|l>@iA?-@ z)im)(T_yGDi!GKuEsXh_Iz@=aCwm2A-*U-8kWWMZkKO%)F|f?Ze@&X4x5*%{>W zOa2A_dj0J3-#>k%BiP{YUoSXW``11*y^JvZYbE2E3-=!<>4*832+$uk1LR_=sl{Oa5idsP*B1ZU=#@nCZ{g+t7XR+U zu+JG}OiA0NBV=wJ~WRfHvcKiB@Nn1|l`xlrF5#I=<} z)WhXvm&_-#4FT_mi|W$zCocr7^vD9*jY!X*PJfsKBc*K@VF;e;G9dX^m+?Xswqx$2 zz^}@JKF*ljw*>2R-__OkQ@hOKsda=jba$--k5ydc+QaSNP6}Z39< z`D-Xwur^+<0R0cV0&PF^{=W*659~Gar<{651d~es5Y?J0`HP+hk05!>A?43zpP2`* z8W$f~XLzUg?#gshs4oO)69!;$10#ZU)5TVmV)d{N^y~@TjnGwyKu`SLhyuM%l=|S; z&ZUqbYJWE>tX4BJ(b!syF`06g1&5!qDcNo=)_t-WLqDdBgP5WVinf9M8VfT0g%Xc# zp(HL)WVbdXg)(4&_ucAJC`mQMxV!v>l3vmJazxVYER?UtNs-7A)sb`s*~jADZuwm5 z?N71gGlkZv?PHY_rM*rQ+w+6ubK-5hm~+%(l0_cU5=%dBih|!FHvC1GTJYays&M@y z5PqD5zxWufAC=tji~n@vANNK~|BzzCzth0qJ~a^kTP6Mme%=*s{G;GMx+iA-zUUGQ z{|gNK!GZAOB>cq{4gPNU#k<`2w|g*l{mX{`dy?V*ltBDPOZ*M|JmfGo|D)j780m?x zZ24Psv4#H+PwD%L1_#2AlkgW;F!;OS7w>fA-;g(^UG~|oKc?958#(w-4#a2KK*$E&oyRNgur$ zQ^Zs8$s0d1554nA5uZ%v_~d&E55jR@`;~zZpQy7N)_I|0(HV>AU=73u(LpmTi=u;8 zPGszN_lPIT9i-emLWSNcRKO9so{h;Br;5kkr%<6|nB#;aYH~x9M9c$x2!Lb+jrpTJ zu|?{%hBO!Tu!g1f1-ikDG>gqT#5f*27hEA zHvZe(__z4p1K;jnu4Kc1zp9Q8KDsjye+j>ufj`g<|B5L1aZ^3b7ehD+&Rab zBp$ukE{S`xco^xZG%VIh;s;xRDhM-16H&Y;i5DL$%}^mFOkKwMnIU>bRyte!Fqmav z>TW3m*`f$hKAj}K{hjKU8NAiVQ&hhU z_jLL6N7Bq2mV-mogQPP^#k2(K0agBhy;8DxzR-j%F;a4rZv3SHFWfa9|BgYsC@`nU zSp?SwFppa=BIJ9V4SL}Z9WNC0!)}$FL)8!4B{mR?-##*zh_y{iA(m0{p4eQBqig{RGlH^l9-n|<9UH#Jm;loN3$x=|cO z$Z$=`MiKQZ=X64MpeSts&%FwhoHZBEykRSVr=W{Z`l}zq!fDcizEHp5dR&%{xXrlV zHE3-`xZMl#3mz6y9swRI+~n9=KislO-95PRQ?QS4D{|PEMYx?OnrYm!eN78~*&jFc zRp5rXK*6{{fMhmd4$S^`0^@ck)B(6{zEI+Jq2wEU{)XYVSz>t$aVMAYG6m~v%rjus zDO@mJnk+silOry9OnJ^+-%=yKB@r^8W6#MTh*cf9VU#qKtX2PWu)OiBNQGs0Gw!dE zy#b@*rPCz4CQcjaXQ^V@&KY^+kwcPqh%-6f8duNq&6Ds9j{e5yYM@mLjWk-*8EhA3FC2`K1a;%Ki- zY_9lrxR-ur3v%#vOu3VPlU631&j4nO+oc#8xB{q+ZaFf=T}6Q{p^S|g^Rx4r-w zY(k0?^BhxSoqSWgwUY&?t=C>wi{N<66McvLH2{z8?Fu3q zX+Yh^l7rEEXzCo~$;?HyhqivGmyz}!TK{XAm&X-LUS^4FTe^7}pbyQzH@tM)libI6 zFU#A{fW6dG+7pT|-1;!=CBw^dvnQXN8K@82D$9^9SKO8BC8Mz?b^9|7-`lG7;dG=& zwmx|KdvL+vnqJ|d!P!x;U`PgFINriz3}?iLGR!h*PI7LslR6%eWx7y z<=!SaFTWO_4rgF}o|d^H=7DPQi5uc&gWcjYs~>ZswUC?$i`hsHD3{!^(rWQ}^Ojg& z$rhdDS9WiaU&$7o@fDk&wtra1#Eh@M!7#KCPn`Qbv(KfH3A`=M^ry=1>hOxc&;a=t z^dXULTd8ZO2hep2wodb9LC7 z@7Ep;cZldx#eo-W;}zt^4{5{LixY9khF#rIYFz@6VEihgq8{yB`5!qnWE`G}>Vy4w zMXzXWnd0F-%<;>Ak-W+jk2G`h%C=uo{%G(whG#|ipyQ9K?O>jH{SnSbmeL>jI z4Le%?NMgrMQTd~@^&-l{9~IP>ybSP13*uy8yAU)MZEo`8C%qzmW{LH^n4h<8mi){T zpEeEVrxo8m{FUJ)X@N8EJhdJ^?WcdGkIyK!aQmZ8&lz5pn?JfVSyGdrK{E>Rht`bl zOi3zK{C$I$jK&`oT*EXxf0LwPNK8l4;b*_JJ`@osoPYe%&`^r4o}arhfobT~2NV?Q zA2L2m*6|tcqq@5Upv;w2o9C#^>Zn~wbvIGf+)6c2!!OGzZ#`X+NJSQH%IT7Cjip5^ z!ejgVYUmiL1#|ISw94_a&%TxF!z||D@E^5RTYI+6LG6E{_&5La0RGK8Hh_N!DoV*e zDHwdK7rLG9JL>!+vKsy^y0;u^+M0jw*NMr$%!(HOZofV@|El(6{w@1K^RF6`E=L2S z`8SSrDE_-o4gYfS#PLVd_5}E&;}R!4R;u&I_T`8wKdSe%v0+EcA4wsy{m}zY*&&9f zAZB6{9VuTrj{-hv*fR zvlfC(VpTU*qrn?VjnuPukR>>pB>!gis~`MCX^`p{@3zacUun;~`n(pFtNSS$?a}+y z^RLCqeCzWqK$_y@ti%|pY#4IjDrHz1xI zm#ZJD9=77-xfJ z{~v1ZPV{~=V#;4hfa40m1fTt8YlFq=g=vbuVB~XeL1d7oH>Au6`CJFJ!Q$){C+3yc z7E6;w#@xoR`G>N)hrh*QAsgDm$gcmGkv+eGL{?Sn%QpQ~<+d%q%XF2}4smT?uO8SvH#<7BDm?g=RD~R| z6Vbk@H%H0eM{7(xKx=X2uiEJW@`wDi4D$CZx?mxHmq6She~(iBA?1%ya*Z4-oBS=u zXWUzS&piA;lfOc=yaL&-YZ=*>>lyhYWXmRhg${mdfA7PE^c{DHbZ~Cz_m|H_>n%9)Hl!WmmqKY2 zm$Uw@{pAz(|MEZCU+#cjN8tI@2aIRyx)RTSWq-NJK80f00@~8=FW>kFpN%`u*kUXp05k>Pg)4YD?Vg{pG0hES~*ko>!PFlZ9fMS16MJ z_E;Q-w-EQwQ&^QH43FMq-hVvS=)1}M)1T55(7&&NF00T4dl>@KoJ_ppDcj{Hh>^_6UK1HPh)61pB>)pOdsX=G^$R^se06@3v<&nbPs z1KA>XJ!j%n6-GSm-r@lwy!bDD;j0bj0`3nSBa zGqU3$pNPDFNs`Exb3LWi%c`ze7KadBPw5*M(-t(^ENua)nK-eNR}SrZ$|D!EC|>cN z6vZ6zXd*;W%b%sc<6kwh=hj~icmJ*Z;gvJWUw`Wz6R5w#xfDhE`|TB8x*7c)+?t7Y z^1E7pZ#ltVe~ErYWF{ijHPv0*<)Nh44~|1IJvcVt28r3&b$CA-x&ot{viW^@CS} z3h#v@(^6=K&x%|RD}S~ zOW8|2ar?Vn+qA!XI_xE#(U*%aWa|I2LhH*VNQwOXon>#TzZ68jy#e$qeZMuiRd>A5 zZCd%$@A(6P^qXercVovG^gD0?)9>*@O}~GT68Oj#MuL&F%p97%xxF$TO)d%`hK3?ryFGk4}BIE&Ev-(6}ETtDz^U<4Z> zzkcEE`y>Yg`m=fzOG~s6G!_qE=4GVaFWmfm=H<6hu1NCA5uiBnm)80!)V^6lXWE$T0rq+kwD!XZ@?QxVo zyt%~Cun4F+`Y?^RxqZ$nmWMtZobvyGKHR1kQ6Bp6-QJk`@bOklA7-}oGSb$E`Yo83 zYhKs-&;aR`ZQJPYR{wW0#X^zz9nTq7%F-x}A`8<+td}E(Xp54>itviPXcOLxBh2IY zcVI41P{54T5PpI$aA~Y<2o64EV)&(9#X3t9?1-wM>5(n~)~1#PxlK|ypE`r-DgJ_y zVLfnf8-rH1>n#lFn?Z#O=9Q!n~ewqfGRz4kO^s!e113x+K82q~DV zVs+Z$BS=t|W6ugqagLO}u^R&7lseS`t+#}f3oA~`T;z)5 zko9P}(E4q~3qLM40^zogp}%S5LW#G3{D|i-pMOR9&ljBVXP|LRWVNE?Twl>4oFbqP{T_ZMfPNMJ`nTv;88^YRoTpNaKd3Dp@qpj)Ks;8i+I6_C z?XE!j4Px;l`W?792K{E7%k;bO6-~dH$U(H=sXtA>%}q}$s;PddO|@d4XI``utJD29 z{nUCe|DV?5+bnsOqLx4PER>t}f9NYk6)qJ7%XQ%6+iInq_rF-IChrrR_wj!TccmyS8FMPv+g2)V&K z=m9p=KZH~TUu?u6ge=0;y^b)#VS9Q7hBfm+jw~LK9oCrDk(iBuE&#J{De)o9QoWd! zvL>7n8QQp0{<0L>Dxd>DG9a~vW5YK4NjVrcBD->MP?Rk0;>Qqu)`GxnE(mK?$+W3gkI&H6_;<@dQ8-XWTapJk&k>Ght zGJrVT`4eUsk=ook?~bD#%yr39?b>PL&q1nPn*)O*OloTV4jDpPACS~k{MicP)~5N1 zz(UZRoOPDyeHIH+{EJeMvP2(bOon^D^^xX}8Q!`5bt(!ZzWy44+~WlCu+Osg80}7G zMvgJOD>r}h>2^s)pW?_MuEUbQDY(E(KI5;G8#C=bSR!c`67`WES+t|SYWb&lheM=D z{2z}R`W1pIPCc>kR-#dfH{JpLj%7nu>hp3Rq1O-wzc17cW^v_TY!-1(e3vX)MWn7a z&%WFU9_|n#1Lho-8z944HfqH^!Wc^GE+Kw)o1L}?g#`GhpRr_EbQc`VK7vsq3)K*t zZIdjbA_0sh(NCWTTGmzy`8YfiTmIwa((Dv^MM9n_MxDuwN`784DpQO`8YCHI^QVx0 zArjy95yKz1d{?-FZIhQjM;wn{pI83!z2nzF`L6O45s&2i*_K|)8Tk&K!DQR|td{RK zdo5-H`ojVA3$^~Y=y&GC@~7X6TLbCWHW zHSYAlx97dh78d*;iX=VKM4v$TI~y?kdCy2(h5@aq`(!`<+EMZs@3(}TY~k9GDI3;!+#exE@2JL^mQpEmd-qj38NvNo_k>*pK& zp}q%ezdbu(z5wpBdzgPWR&11v2pusq4Q4OsoXf#n_mpJOtDiZ@7Q?kR_P5)3Y^QRx zT(aAvevzufG4uFUgqOD4y}8|irbVBZ>Zdw6WS7#!yU9$gTb`2CN)zwxkg8+b8%3{& z=LOI!^X>q8!Jn3rUWi9{Bu=tu(zpES)$!**dgbvh7t!mOW-;h>Z#|~hB~NO4-G@Ab zER3-)w?F9Cucb9S`L2CFXxU~&I(DGfAS76}pdmsw_Z65uy z?Mq7=exiYYplJ~NS*J4vS{wMYOKknp`G-sh;|J^2$a#uRKSs6t4#<0@qtCZM$6liI zhH-`d2{$rVJwVJl^3myCj=#Q#h$8-Khb2*MuieDXh`&sJoR~KO8X{|g2^05L95K?w zTJ`{{Z1WW33g|v_L}2PZ^ZR<4^g@5N472Xbbg1Pfbh;wK+z;^rhW#lu0fw!Cp`05w z&W+k|LL!qxOREUV_Zjh1poaU5dSG~?bEqX%yf<3;cW%P))K&4D{^bPq$-{5zwpe%1 zN=B@qL~QDB5;0uVo<&2$q6hgSDR;-q{RmNh29%;MYR@7g*IZP{Raj+H70r_r;+Oqm zW%W(8mf-C)9tTP`H||F)5J}-^87q^V+vgA8xJJgyMPP?`AN z>a_h)QfKw7Ei$I4@Fn2<#0hhhvgf5_Vj+%tjcpikega!wccK=3IO=81=lcy^fDpbr z?`PrLOz8rIug%2Hxz=#LvMJYSqg)qe9bM(pL;0#p9uL9=p?WFjAN*R5Qq z4n9iCr4dUjWUhSxA%V#_x7e7B+#?ysH`PH*=~w7xTfaP3!|0b~i1=i+(Xi5v*ulz>4TVKQ>dHj8ftqoii>y?B)p!(3l$k?U_Q@R)a&qGs`Zu@P(YJtnc~ z327*jptoZBnSO?XUXf9li{**hr?8<|^^i0a{OnXDC(2Ox#A|=tV~j&oe2d|oLG_P^ z0V{U>DA|s0op|l`?&Tk^&Dj9z!Pff3xBI`4sZfr%@(eHSx~Hi4_UDtBYSS0UXemwn zf_#EV=0mR)GXv;_x>Nbn>xypWPp?7W2GXm$p;v>H81#CnCey3$d`+*Hkz&~N((zp( z$z~+JV1}XDay)V7Wmntvf!t7uj_=U3ye(FIH(JGa^HRn^6wSSyi_q8$l|KNPhAq36 z5+B-k*iN6~Ib$8OkK|s?JCdC+arpUGhG~sbONfsTdoqOyH`#HVCkAQI*}hn3`_SBW9Hkjc zai8V3*fz8fTdz}ym&MSdgc?umC#k2faNCzs^%6)R(E^Cac39ZwQ)%t9@LViR_G;kl z6naJ0p0aJxv^wkIm-kC+&(E4{l3P#tBjlzLf2(`UZ>^?p{g}kxx=VeFpZ)NY@f^~D znEdheX-cD2eQfDaPyT4v$98=Iymfsn@iS?Z)5M$gfTC}GteafT{<+e^B#Z966m5^S zeJR4qVPBf+)#UM}oU?!R#wlEL@Xm`u&7n3?GUgsgvQ|aZXu2T1Q^ST{>11qjjP%ab zXe?8}Vri;0vF$*r29A3~x*!2#;Hlyw4ZJ)iMfLeyieqCUh3X3K*QT!?D6n9?6i1FC zs-NyBj`WJsC(OS)f#v7&Ig(?Te^(SGJeEJz{40_C8+@1X55!T2f7`Yz{}6p29cuh% z9Fl*av^1q?OX`{IZmvA>TBX)U)RqL>a@ft4?i=yyixOl)Gbk-(WA4c}L)xr)+Pm$I zY$6vKmRX-lPNqpt5?yV>vS^*;AUKaX!^GOL^_QeG4<3K^sRjy z(|6T9n!a_AT1nrf>D#798D_r(w0%4GJ=zl9i=`hM$bFK}FX z9TWy}=^9E{C@$T~>Oh@7M|fX+a`_FvP5+olPvjvBqQtw~$I^hzz=}oXT3!y=!*B0P zU?yBTQ!*he<{;ysc9=hJw$4Qso)YUT*&?R zV;-_YFuq0>1oK`Lm-H;_@WYTT=x}AMhJFpr8wp3;yrEmBxowU* zF`Vv=p=+ulHJ+D3L`skJN=lCmYn&e0)Ndv9^1z3ZG2`$~G_L8#7Hj|v0I+BPC0mk3$w$m0 zWa3V1d8!!J^T=5g-Cy&`YN+3G7kXr_a8Vb^30~bD-1MvxV8!>GuY|J394%c`FgPPNrK-%VJcQ zdL-E*f%)>?j7aEDmu2HN(hshtoqbjXgCo`Ls_I^% zf&1|9DNH%;|EuODo74YyfN8dMlB8Kkv_X;-rJ(No@#I?#>8$*G?#BQ7`D5M+P}`NC z-}pX>C&^y8svnWnPSA#ZOys;gN#r!K@gtkaZu-7F%8$Nj8~*RpH>EI|zE8iW=_`(n zLEqc|X8NW~)bt&Ll)({VqOWo+C8Q{k_$x;m8W&0R=ktl*i1ptDr*c;wGBk0eM9CSE z4>JnXEhEWdPp9(m0#0erKPf|S6f>C&A(;##nG8oCb2)T{i_MlNv^b=_I)>5(A~Ko# zwr??qi3?U4Amd$W^b!(aNPrytMmhfA^H zcQo*~R}O+daSzkt90Nb^1EPiYcRC(dMX5e|HD=zkniqESKhzJmSJqbTd0~jEC5-4cxmXtkAQ{{gHwlr|W|9aQ4mq(%;-ru0G2#(ul65d4anein za|{c64F6Wc!YWH({S2@bl<`m@YzP06>&ROv4~B&!x1ubJ3ysTdQdsD9EDpttFc}l? zwB@a*NL84DrHfsa{8WKnkyg!-!P4AH67Z#J=mld&1S6daa=VE>(TU;W)vSqCN zO18KZUvVi^v^>pVLl}SjP-8^L;fa&q)!ENyguMA38o&FOCu$o!<_>(0re`iLFQf&lRd8T*o|w=`02 zwp=N^;zt}I_2=ej2|X``AY%bjodt|060{H%2Jh?oMaW^WK(99>Q~xSkX_(=~cKuZOG62gZ2Ef+ekyzvj zN~-nK%5R1aHoCc-a5oze;A ze6pukYskQJv>0-5HIBhcPo)pYc28mP35#P&m^06e))qJp37PS~7C(NxDS#ijd&-?3 zZ=y93{OEiO^J6I`E#=RTgr?=skCbJB{5b15&5s`r#Nfw&e`9{s9;Nv)3@L>Z5B9oI zaY4m{4f}iI!HU-X8?%>UJvts7^`=|_&Ogx#eB;5L+Zp`4krF)4KfO&_YU05SH@M*s z5V6lc+3-&>@W0z11b>)>U&p{7uHbv}AH5KHjGtTQFrNka&)R=2{|Wv7`HyJ(0wiku zs;K;D`0LUiEQDPW2mkiUw=4fCW*JKxE@ce)53&YVxMu8+-oH#{yB^5=IDOPq)Kl7BZ=ymqLRGZQIi7E;bE6StMNw}LZIPiO*P~0)R(xH>I58R))zxGXpS;H`F5rT zZDJ9|8IL7k_i*!1pOY3fx|FZBPM>*I3f?*ryvck01dm=(sFW*C-pYda_E0H!x#AS0 zGAww;zU>?6wr}0~cwU{8>Jn~_z>R;4b7I=}mNxu32L6HFf%tEc_#61M zUv=Xj1%E&f5B_$&W7%R0|1Jjp*g*I-B>Xpq82sJv_g(A8zuP6W8SA>=%C2{`wBaWj z_y_(B#QztGzkxq{xf}l|_)GI+(tp`A7XEK9*YY${nUp^_~XhA9X(W6c&s` z&nF9rY&waJ-)M2ePVgis3)sJj+49)UQY^ya01^w!C3F3`dmCMjQ{|J7`zc{TdJ4kp z^K(Cni`(y|a$I^O`uGCMCnv{)ka2||lF#*PS>||Zww0behc;NS=Thhf*t3Xo9n zo#8`nb!L-Su~UEE>g1>34sCT}3!0r5{!S&56E9GHGut@(G87fk3;MxxZ$et%CxHbO z>*c|K>V^V%Zf_&a`}vG!76f0`9ABes0>9Z2n99R+DWg#H)UWWhfSr(rvZTtuM-ml3;H3t@F7n)!hJ?LnmoDIRIn$} zBnT7&_ziAS9F?-r2iaIMF+T{o)nDR zXo;IF%jmgaYthjP-1UIbd{usH7o7C{qH6-y0`SzlD>|z3UKo> zV4TDlua3f)D;|(^4in8bf8r#v+H zc*L~s;J*P0JfQnkZPcQ0*9M<#NyKB7 zU7=JyErnK0k~sWfNjgFQc8@^0L6I&;G%NNa9b3yZ@y-S&-Aw}}>C(hXqy#Q{t)p*8 z;vep5=v9a(PCa*_oE7ek=RmK-L&kHyo^&i49brySfQZAK4x=Om#s%@**MKbJxdK{M z^zPk=+sKrJ*lC#T^m_9Q#`NlN!JH!es=GhxyL0ViJBT&-uAh-$aNen6-#jE)lRzYJ zPZhgktF#j1un;kGtCu_WRI&QsGK1D!D;bn28X#w}Wt;wP^%qoNlE?43%CM`1@!hNX z|Nr=t&4ai9AME-KKZ)2bJ(95ke(M7YdD@_%yxI!t@=8sQ^u}Yfc{$fIRU6NYx(>Po zMy;W2g0?-k(RcV<>XG&Tzg$EtVyS8Tcs?C;YfU zuPD3>i&5bjDX~o|<|_lkSR* zs$N{9W6XSd;Cx`H>lsrRF{&ptrSvL*eL(u zghnrSF{GnFL!EyV`vT%h^ras8`NwRWf6T%8#~h=H?lAq(-C-P7d8*Y2ocsh7kNx7Q zl({URBrwW5{Pd(GGR{B#=tpD~M&14?6FH@qBr?uFF0zU2?yv08*^jG4!2U6obCC*E4-rU9IU`2RWGIF^#|6m!U|j{N=D#9)Ibo|I&K2zdXn@X~n!&+PrigUKceL(bu`;3oVs8C|UX#%u3^M8RJM>^IhUOvW1PVBy8d z8@(21HXkIUSR+?FzLtf(%T-d?a>Wx!AlT>_dlLz}^)2od&wh`+-?D0^CGXGkTFBlM zYzWe~hH?pOyK8w*;UyUORiohVypTe~!2O=~HvB;b{_%nEAN`O?kYV62LWUvtdlJyn zq4h0QCY@tD8huN~6W&nRkrDaJdq@>NtpW|=bBD`Ohg7W*d^e%}5NW~wbWRKUQ<{Uc z0HJb%HG*#nnCisKBW`zMW%-or-<%VKr2E%rrFaNr8ZkXptUui-!V#U7;#?rsSt&iI zZU&lIfm(fu+T?i>HPprVpp;*erLLk{Sb0WU;<%JE+OoOWSJ&1tk9r#&vp#8S84Mbw zHVCoIKFF|Sx~e$~*Wzc3utL9Rk{6EZQXFnqGIt%322j;uT>9=>kdxBmYDYiXya&K;-q(pR!U_Y(~>wzRx((XP_KB1e#)*_pkjh$r02gi z6>ribFB8er^A|AXwNWl@{UWW+dz0tlJ5)aQ?sx*CRBUIJBiI1q1tp5Q#^c!#4oA4g z6VfybTl?OV(Q*rI=m^!5HJ+y^-GB+b6l+M#`xvXSiS-u#?OjIVBzdWcCKln~B377+ zJE8Ramlxsa|y@8vgF_n8S_=)g6?#2-Sp*Hz9_D+2?q-%7cwd^=UG(F_Jo%3UJ@U7 zXo<%Xn~r!pEroQ840)BQY%xgrWG}th_Ir1}v>IO%=)(1WR)b!V)fg=@-(joq*X2^* zM~kjVf;{>jp13U=yDm*GQ7W$T*+TJf+gyF_Ra;gDz5+1l6>>ol`D8LH><^< z{yU2nW8%waE_TDO(aZzi&gV8yw%|82@Sj~51izhxzb#!7BU!X(_&T4{4J#!?y-0jr zy&By#yf-5PgZGEH`9HKQTwvy7@XjRm#hi!NSnt_kp4yyo0Ht<^8WZ)B#Sf>b*y*T^ zRJ)s$T(umfiF*J1WL@{@5#o@)5aY3`aJkPvP6CGzjieD(oIYTEFyzsBQj!;90b=*Z zev(YDh%i}V^4rq?g(dT{#1y0#EXme>lu8Y*ZDo8_V}Oo5NZ~v_qUEZjvuA>tk@myh zG0420?Z=Oh4e6QMQIZ1_(wVXY+dI)%D%;>v97?es%#y3gC~?x;_8WMp=kagLWSt~I z-eN$mo53Ix^WI`%b4|WFj01n38}5#2Q5eqekmM}h>#+_UvIk6SfJf`a(;7k+Mpdt4 zBF<~gM!2FxXZS@X2^r%e-H2Qw8%vmJT| z5LH7Wz^iE~Bs^q{Z<_#$JJGbN*5+Lx#dkG+T3oQ!PkiYWiEoa0{|y%3+{>i+=7`nP zW%zbxeHp&-SN`}g_$w;>zC(Vf5r0TM8-s5-Mm^e|sQ|81no$Z_pVId1jXDAL3_X&i zn@?j#v@{l9{iW>4QL|$`aW$PYnkHGClxT~9Ckr(q5FLamA#jRJ{)g>g9%Mf~9i7Zp zpn0pWzIfmSI|23>QKL=nNPsN^@9lFWKujXxJ8-8oqR~aBKK=Sq7tr~0r4+6sDSY7r zKl!0oB!#)6&1)=$zqXZ9m@C>MF>xeE{>}K~+UL9d@n`is{@Cs>?@kNV@xVj8EQ$x} z(wcnZfu*nVYI>{HB#UJcS3L0Gf86jl@j=_bdei53Sn#_T`14l>!EYhqZ)~IEftCzk z>kswsFzF)k)%8m9QbG$j66<@9Y#N&+h}Gj`rC249 zn7LaU%*xW9AnAD!M9~^GwPr31<6B0xrnuwYI#WEMQC}@@!>dj zyYUCkGxjtWPn`4My&q8*-1@|a4{)#%tEa26wkwc?E~uOH9HPcz%C4hsPfrjjY*BR=EkTV{^;~MPdd=K(Yt{->sSRn+xOshwhkwvq2q;& zi#x|WxSgYUo{OA-6jb5P`@IdtGYJZMu5V(QtD(Ey2_CDMocl>hM#-H#cdOL<)l%R?*l#%%tv^;jTP15cq93wzj%kLx;t!=eylWrSaRu|^ndb)3E9su# zIZ36Y7uuE7eQ>o)%AZ~rj0&XJqFE$zM6Vr%G3Yhv1*X@z7ioG;p6I1lA zkwnWCZ@%qEG@f}85}8YwXn&0Pq%xLn(qFZ_Y5!J%^c(e$a|{hjn1(uEn08ul zzA%P=H!O~Ytwix-lLef`hVr~@Nmzr?;HdH_)v zOn{=HFgSQT2(Jr+cS<;X%4L{_ZEP(LiLlu~9@;~@EXoK-qMM77V>Y8SIAt6N$U8ka z5#UoA%=CQK-VZ}(sjIPV+b}5=VWPFOsi3PW_s*0SoP$`pAl7^+S^eN=s``NqSZ8!k zb8%Y*g;H6>%~U@~>&Xg@85( zk}p+{UO9>aYghhP*_vPRc`nGP^Ur>FOZ%86=D&s&`R1Q3fsNb>BfKQ9UlCv*!T~z@PB){!T;4j z{3ZO2=NbIn@M}lGAFyUmH2v*-tGf+o2evfBxN?T@Vdd*&I&(iB1} zo%0}>vUcV5=h#p#>-=l<^1}A~1Lni_48W2|H!>P}Ik{Pc7jsXQE4ra0wE=1pO$l#NVL z>o%>YMnCp7bjxQu9(3)}Pg_4)($chkj+&M%gWYbo!SE-UNEO=EEKnkxb1IjbHMLm&trye~kG$@LWmPH1P(K1IGs# z`FgOvTfPR=^3)&g{lL#}wD?;^Ed};}S&)3Skn7mkRP(nbuS44(9S^e~jKm+WR};M- zI3_+I9!Ab8Ywxk*VdR%G9;SLvrm6SL`RSeqc}Ill43&PRA5^O|V+*)`l{pEjKChQIVLkN>pgx26rhi-G^$3qkOQN%(aP{NZl+ zy`tdPc+L~Q*zji$vhd$CRomx2f$(=eEb%|v;E&A2*MG0CYm8(ejHHu~k9(GuwAx!g z$HgK~lQWvQ7Z&pu`dh5}d9taWQ{@MlxvFGz{o%+e8CKn#)=kmyE!Rs)_HnSq!g8=@ zF7cD%af}Ix)yoT+c>T_j#7h&e{8!e^=TDKkKtC#qo{#mFOpzPdeqxAArRgP2%o(7O=*xU(RRR-+88_eOP>j^nm&m z|8tDhuUH}GSF*(n`IQURSF*)Se8oq;lhGfp{dI`U-bUW zv56B_Rw4mBTz?&XAL228D3^KEHodzbrQjW+G;!UxN&z{W@a&L;v;YKF&Gey)!`ScE zx4@|V?x%lOcyqnM1KO0gqCu+?2DaK`PSwrQAyPI9YY36J)S-4}nrYD4|N731X)sXR zGBq{mTwl<+K?KJOsdJs01XJ?2HzhupnBUflC zo~g_9i&|Vvn$LuhZiC0$FCx*XK&=)F-{um68Kbc{}X=3 znqE=VO$C2(=3KVdpCpsLR?kw9QCazR)tbtps(Rec%AR=Ip10SY7O3<6E)%53P7}w| zT72W_N9XVoGI$Bp47mtdg9SfQ!wo;~7!Q0qo?q45f{$5Zz>5N}g2#j4HA_O_h-(j z$3cs?KNb1tt;F(}{>`;N)7V|GdZfcIx;gY{@6SAeWf1wkn{Zbwzi zqrw~c2=!r2OmsNavW6vWkQBn(}zUWv9s2^av8$zpdk)y`d~HC3W!!Ovwa%lWv2d zRO~Lcj+sf}CTPQ4@pq+gq$B>0aAa>>xYfFmwZqE~%Kz%&pNUfz@Q;5YHq`jwV0vU% zV!b@*9%alOkw$mK7xq>Pw<<}TSQ$T;kw1{mI`vElx9XWR{J4z#2H}Yv6B3F~pjpUx z@rk&XXKo^zUr~fnkoffo&GS=pk-|U%W07E-v+x%l$T%uNpHSR+0V9+FAqGM(TnjQ2 zHt`ahgievmveP3W%vM@mmiF+t^vJ68{0^YdhT#`50T7|c%(Ag-exrHEM_;RvMGZ+k zpAkOz-qxRacVLs!1{eXZtZ{CLxv>x~=%s)D`e0Egw*{XV!e0Ff)kbEw~a!EeJLGpA5oZx{!HSt#npMBoB|0O1XfMgqKGWU^u;>(bNEeS>nNTwhH8Ic{9@%f=Di@-ws0TGDDw=*JwMc^AF z0+(qKs5J5fam)P>fr67R1p>t1(JI($vl=rY1L!cczh^T zzmz7ezW)-BQ;%tZ2jAcNfwE<6Hek!H&Xl%{gaG$?`r5KSzmo{kp}eXOM9H7IVCCVv zSokilA%!n29zhNs8w7Exomsz99I( zgkUB-grHTx7r_@N1~onk!Por0-@VV7nS=!J-roDqj}Mu1&VH`F_S$Q&z4qE`yYK-0 zHKX{$&|fC#?}J|m`g`_+6#9EbhHXX|>F-w${I}@uZTKVoSJK~vTmQeMzg^)Y)8Fg+ zEc(+P7>WK)X%Y0d$!XEwsaVb|GhX@LQPbbv^uyENZqO&Dz!i9q|DpK9(BCNXzxyQr z1N434!TYX}-?P~o(B7o`zZUKN+2nmyaN-KuQzrR2VE;w@Z_)p^^fzzjk?HU1_bmE5 z=KhiB@7K+e|Bbik?>AU8fd4Hxg#J?GuYNi6-jtT0ydH!MCx3n4E{N}2c!2m?P_`w1 zeUO-Z2gzR_{ktW9?e2yA^_QQIB!6WLo@g`0MEja3ber+{c`prK9}JPdg64di4cGX9 zJQRIYXj;{n)MqLP>y%L-d2(Lmx=k4Zy0~RWn;YI))Q^DuW}`oFFa>riR@a? zk+R}2%fHc$`_F6LxuOy^nk`ODOw0EvYYa6CQJnY0UydTCyU=5!)I8jsUff+XM%8EL z8V3tsLT^t;?9ANC=virMWO_dAGv-*y?SqqVN=dG2H@XXB_OuVz{qYSRAwy2Ai%np? zhX8BJCoZm59c5yaO1))dUv*eBaDF}%O@nYLL`WBQoFRlI4#SNSo6Ew16V|v=(WFN2 zmUnvS^^o`e=57P(3f@my&ZMJ2S^CcTd*!nR5&`BTa&r-QDN@di!M5v3d>Wn zm=yv-JC_yDoGh0sKRi=5yHwTCkI@_H4$7*%ETy^QQi@v3<=~N<`^x!A3?-YZM%wLa zbXNW+iZjDIO0j*SfI$n1KT+>xDLA`d6oMW}pOp*7%7jrcRG=#ovxl_3p}cogJq!{@ zl3@$DA_WS66l3GVVBUu?3Oh`eQ)Cu_>8J-+_lmx$pktk?WFMsX*}?O1K$Wa~rnWNTzYb<$tT)q;%*{wcYpwoBEpi8dz}i%mG8 za)t6X`GnC)97;bfFtG$h@662QOjL}79yM>fH52A?CJbr5fnZ*js{6!DxNt7CYQ}pv zZHyPRsZp@pDA;clzRT!40;|ijpCyLmZl_q2PPC@7#5P~b(o*tO!T;kq-~0#@EdQm# zeR9YNiTZkY!Boaoa&@Z}j|0wLevoHJ;?i9+HLXvCajPB%z3Iuxx& zZZUUYQW36%=zK{fJicqJId7Qxu2lN}M$KX;gXg3R-Uq~mA+5t(Sao9El#n*o(!X*N z$qyB&u3N@3iK=;_rNH45dLe4FYp*_>3#n7x^hM+Wz&bew(CY5;PwDtal5*5HWxKEWUT8>Ad8eN2GZ;_bx$h+a}oAV%A zhn$5%2YtHuREw)zw~Vv82L00KU<&paQ`No_E~<3YE*2Fgu!EhuE1-PB%rIwmSKJqm z`HP@y_DEGiA-5kd7-^ zptJ!Ky1@e_G>X2p&{9Ot?=a539D6`6BMV{rDTUE<2%34t#~rJj#X@mXWXAp#e?yl zjMd^5Nj&3Tbt#Z#5Skq>LFsmsjzkw?HrbIZ6R)Doy(|;a2ar0`=>9h38@=p0!tv-A z@wnm)>?n9uafbIQ*?@+r0Fg7Csbn*^is2c)uINExrrx7WYCx0FrYNx|MA)od#+O3K z4qq4VC>H5zc8Bzb+$)d}NX!NDfXKHb=au;Kmd$}2cqP%a3TP^&Fs@~+`{Z=U=o{2% zK*e@tNZTYh+bHM;c8*4Kwe3M|W4siMdM8Q6yA}h)W-LCR0)0P2AhEU8x~Znjw#B@( z#>69w4^_|j^-oZQ5CollqYC!3$HdGC%_MxGaTDCPDvjg-eVoh4%iV+yn$JOQN}W~4 zn)9BIFN*~l;&DRzA`?~_HB+7kHtCJ8OGNwK6)Ew!ANhjkF#a0giSx0OlY9oSXU%X*Na$9UpI3ZNKZmpmy1!AGtG$41Ip%v9kX8Kxl&U)_mP z^2{Q-QAD?K+b66<6d{Dq`Kd*83$AadEJ6=2H$EJQb3=q}m{5Qw%7z_eb2wiekJ-cc z)yC3C>%hb%-S~e491x3|IKA>*lNI?K*L|5G(5z}Yq1N+=}4a^9y?jRZIkZ4CYV_1=m>N&stKKCZW9^-P2U}$Vszj1z)q?@z)b2lUV zjR#81eHivqZtBuPf81RS+6HYc6LgyK{f|uAYHol7LZ4WR(KBpRuf}(v;C*e}v-{4p z{ZQ5HrPGvZ*01}9@2_c*wtQbpS}@)o@9-&4boukPGphERt=CmnR{9PY zer>(4ePEPNYilJnUHP=>mAf%nW?_FR|NOtJ(JD>^(<~^qtcPLBd z0Zk$Ow5J&#xo8U>&X6+ww8!xx#v!IyYtKNvRG*Nyj=G4DPL5vuva&QHko>V4*@}IL zkLssTx@bih|206h04)P_$>)M#xFfa@BoorBCkG?%_Hg@=1@>KxTO$E`alfie>xVF# zrZyfFS_%aM*<`i2U0F(u_x+vn+jwIZ3WJ76WKGBIaC9Pz+35;M9C*W2D2D2_oJ#_M zV_>?Kb#hpHE~x#(xB#D*>h?Ter+qYVCA!+0PtsTb2erp+=K=pf(UQH;3G(=Sy>{C#p3G;DW+9R zsiQ18jwEoXVn%NXIVK%^9{{QPqRDDxZ;u)+ z8R+|tNdr4U13RJJ7={LJL7u*~q=B)N?r^MbnS5P3yE@Xmz|fOpdz$m80wbX-C)pb&38DM{joG?~vXPMXM6M z-$~*!yT9gq^^mR~QJ?pxx2ex_eUDqkF;&yaImy9q7gO#-?jEvM+(U;)>H^DnI0y;U zFjW4&$zN3;cjmii+Kg`&9Ak@IbTVG!O7mZM--JHy&rgrH8P{S|V%`~NXQ~IzJI2;~ zA7YI%7Q}yt^7k9vyAtwMMspuXP6!T@g4#ha_mK8kNb6Oj;WY*OwQ=vF)Dal_J@1gQ zdrih3P%5L4sRpt1fUp3Vf(W>*Dy!G|3O#L$3FN@wRCV zQ%BkA_G4cB(Dx#(G>CL_yuL}UxBkuYwP{5}j3(0!cA z?(4RNir?i3|CF3QSlnO#ZFmLW>&XBkmA|VRVF|41yC_)vaZs7|@$l@u zp6q=!hxW0?%_xfsd@HA9@u)xg!`(pK-VnI5)=lny-6doK;b(*CTfy{U!pycBmmzd| zr~P!m5r+7LjN0P8!AP8(Y%7vOsw&HrtUaXF?G6?9FFZS_+s8v@1u9wlD-S} zzCmp}`Fa{k1@|bh^-UzJ!8F_^Bu#YH$3NzBZt-5$#d>O{z!DKUqE1W2U@F_|p=<}A zO)A^7_XvKx)o8eSV_bGkJleP?lUEW_^%VWN{|D zk^~l5gT8$WSr{;`11}gx&kpI^+4|HeCi`aJeqMhI_vpdBgT*`R&xEGi>f7CCn0-4# z@a$^v?03PlVLHTqEm9+&ACHcGWq6+b+XT-ZZ~TG$i!p=(O3EA^-i>IW+?t`!l{0i;H@a|})rH%v>A6f{A6|&E zs zYf2uGFCV{~e7WVSjqyt5=8U%Y$3qW!M__knU>i^b@=Pi2!=orJ_6Cb9LUBRuInekd z^7vnhIr1SlM+JEN3Ook!_$Q}>#Ta({;y%)8cn9~M)&uTcbT)bX1$YII|DELV7p(!0 zZ@|!Gs)I|xP zP~JCBW=n^u_eVh4m%+TRaG3Hin%Lip>@%eH8FDpq&8J!(YY}uyK39BD>Lup$D}B_$ zR$%ep{+2n1qp?CEh0ft7&5amm+E36qw_$ys=$yGJopX+;)9jpl-_dl=7vD_wr=`3G zc758<4AMJogi1Yrj6`k1Cd%CT#xFk-i)60iv22<+3By5IgY746Hu`?HOVEL!(e2zX zVgIL8Q5i)p5DF7S=N1<1_Z8JU>b*&QRDuQ)WX>Y498v@bKoDHK(^p*YsDXNf%NCAy zOR7UPN8}zmU*T}SbgtwcOL_(O@VmWOD(0iSDcd-*SQVjA!+y5pN{YZD4HWQ^s{aIJaU1lx+RgbP&KJfa2d8)b6LEF~If51aR!FMmtoeer+KBoUd5qt9g<1K@xyTWuWLWq4!-{LCJun0q$iV~iuCu2^h4+giU~{t7;;#=0zh$e>QH(rPi9Tf)8VS}B-5u5 zQwYNnoD3Qa?DU1)6~>=GCL@#bQrStuhb(Ok$wkgH*M=1-T;xQM&*UMt9?G2_NM=Un z9O@uPAkbgt5>dkvsIulpw>!{;UIZn8R3UW^N2=v1C0L|t(T_>8OBsh=k*g3TtE`9FTO$0YM@xs*Alo*0HuN`&BK=9dsU}{?=@~9D@&1-uIh;A zRK7IcHfX!Rl1E^=LHcx+;UX((5&?yHH`cZJz%S;+KfY%2!vIc->?zn!4HY&di>h79 z(ox4CiOCA9e9ziepxSluCzuZ-61xx;{Heyw0`^@(_H9m?`fTj~A8(OyNp7Vdvs03= z%;YITL9X$9N^(hC&^G6X^=j<>lXuwNIGF$t&w?e#jnt&v=3W$v)-_m_2lZ0R766ss zky08e2V+YNpy4VnmC18ccrr5B{ajsvrlB|fs#na-Wv~R^VlONV@~AJP^#=FQp%{yaZaUSrILJEGLQ9 zDCVX+^5we8f%OOGtW*W;*aPFS5_{hG`9)jf6b7YGM#F+|7UZ*#dkRCHLR2fHhL($W zHM+QkuwdnbAuJ&X>I>1a{oKpP-UWbgNgxEi*1A9zQdYHi)Nm+%e?k)O6y9O(s%1qn(#Dl|MdSE6C@cfKAPT1_;xjfjS0Qrfh(;i%BCGh3ix zDBnp8ij`au91R-oNhv554cu=jAIue+&XNcS1?0BO`C=YGvPf$d#2|R2{T4zZtxkMo zD9y)<=!RT;Y2f*byG%TEC-Gn{l*k!IOF$sPmE^9q{rYG)!;8*CXn~RrXNTzAe0@ed zGB9SLTV0Ml+Lq-pOo?|lxNa=81=G9Yd)7e)v-M@IgL=-^m%*D!Fx2TFCXWJJ%1S5K zxDnMbt}vL6I4qZf5qy}E>Hc8e0l69(iSM4B0wuW)*b^)WV1vOaQpj1UtoNKeiR8J3 z63I_8S#&X!#)7lWh8RHI0aaNpgZz?Yi+-Q04NOC zAQq9b3L(At*5-@g3{+zVpCW>tBG{1(9xH;U{+5Nnu+&QZ2|CTU)-Fk4hn_`BQu z{XrJS*-6=M7T?$gcfD5o%& z^OdR^_PYm^rnO_a!|@X@HvrZq%*wO{F28oO$6SBT(%e{oUh6IlYZr>6ZIByFsRSv< zwuP{i%3DU_FI9`mUAG(~ViE>zLNbLIeowHGKM`Y6zdDjK^nrRIM;g z*Fx;2Y6t$Dl~EN)3b)WYtCY5DrNX2G8<0V0&i--+jaz6e>0u+PL;CH=wRl<3T(y)U z>+-O^5LQDo96YgTjvmPN*pVO0!BdhSOdq}0<~2tS77szpNmhDm_09A-BK>F_oi?>O zL9QG^+U9`R(ib))zkUnTIQ0Hth5`KHxFpsM*!tL+YVXFBW_XvH9tMV?kHJQ2@vhnn z{L1QYB^IzSmllxzY77aOiklgQ{uXzd8pl#N4oer5k9zw4lvp@ZqeED)7dfD=NuNG!WG6U)Yh7;O)9zw>9fh)Yn?|?+dawjDYZcn4zq>)kOoSJDs{da$}3Z0mD=T( zBQqidS}LPZ^9e;5nB$d&1+V&wkWE<{0?~({OsG!S_o;f;Rphc*KRK^$fwJ5=p#?wl zTO5k#<4=6byoFB1vw<%q6FyPO`xVb-e$39r$47W8UpP_me8!+VTvkFi;s&gQ9(){R z!aL4ls_X3hJpqAl@?`;5bLDR_`Z_M=uBGK>LK!EPOQOr`Gfg5%pH&E8UDWZLN<8Gk zKH;#ryob#NZNjj*#*Ul|hDF81pcppDoUn5l&TIx zP-)0_B!YSvj1t?|S8?qMHhfd{C)2^r9+Mk3!{hhAGDhx8ky-B844?U?ku%3TH zbR86=1j-u*7Yu=aqCa*9^IoSWc9`CQA@f$liNZr5FC-P5lU-Dj--lj)j@lXy^=`}q zI}@E!D&!(Tq5rTa8H?*EI^|K3UQ}at3K?!eo3du74&9ITiJ!b|Tf-1sk+qH14cu??P&?m`mmFZ!P53WdIrlr{GBN?;XJ@gTJ(5Mpxaj`U>3${MIv zZscKM2dCS}P?bTsUasPOK7 z8xz#m9g^QbT`B#|jgrMZ7Lfoa0U2G3pbJ{#q0;GcR4`z-Qj-U2n3n22Pz2;t3 zyQVOty(N^vp}aj(vYb_DwluN5!yeF~L$V zLT)&MdXd^Y!RTLS$dtrEb#M)*rjPKy&kL*YM$@cRLZus9G+ zh~|c(l>nwhn#P}sH-``qk5h{mIqSy3#*Jq7LJ)kP25(U0Bg7$O!f&MZhcL8;)rs&1 zQ~Qxxe0yoF6H|e=w+updJm=AMkegu|;H0d5hazQdO1-JFwomcg(vP28dj?6}M*LLM zip!Fw<^C@eqS%k;roVZKNMxT^IRj_d6c3Iqrf$t2cK7#O8+*sx{XG{bmFmvJZOwlb z{|B>-xHXTdw+ivtJwux0wkLLEH;A0r?oFS~8M}%zHujA}T0OX{+(9dWY=Zso!TZ9P zE3JLu#+1sr0mtl7T0EL(IjVVTr#!*3q4#$Yap?Q^V9KuT zDmt$|#62r-!ajcv>B2!7H7^qqYVEh>bj{7{_*ZOxCLHkKJPxE&*iXc#7iu6%sF9xw z@iuQ9<4MUc&!A%3$rlnQ%XmtZF%yY0JMA!0Lji07cB6&qh3HlDz)<9;xlS&F&;+#d z6>bio{LgCARqZ5_Kq1y+YUBOAW}q09J=002A} zvZ1#H$5*9*4KrT|f+(Nc!T?A>%ma)r!;z9h!VHldjTJB_j~WRgmFE-W0U7;qw^y2y zw_&M^<=qJ#r_1GC^D0an5H$`4xSh5h{SYXK`yr?MTNXb`gN1VNxs2RR++nB1g*+dL zUAS^?&3O3<8K0vbpWx82aNrN^idJBh`!rm1-(^&sFI5_}&-E8AUZFIN!CS-PN6%E6 zzXH8W-Fky*c88@*;L%{L4Wl*=tH2qBQ)!i~mpzIlOoMS>PYgOsJHJ=5Qk zFGxGysRdSWcwop3o97QAPo|naT`b->9MG{9#$UVQ+}>dy!yqB!bL<+nUN#84a|s@J zNjcn_*JWU5yYHCDKspWpJnKZ~g1TVzJ=0;l@(Pm4GU54vuV`->-c(H|8Im!-J4Wn4 zl1zot183TCx`G4^(+MYu%)w(f+-oE+@!&|&x6T6*Xze&rbnslfahh^1STSmSFghmj zF)auM6?PiKdKHAmgJG=)cIGr?vqe6`s^J)%Jr3zS%;nVBdE{W7t|Nq zgZfMu72X6O>av(REvS?{r<{`sF&2#E|p2 zD=^S8SSFU|ZPz{y>JxXOvgrdM{i*?h#gIPdi=fsK(r1Dhh4EJgW)xsmz_egSY!#T% zdOXrW&h0!uB1s%Iicye;;PtTQ&q9gh3r>t_@TBP+fNddtdddK#nRb#fsd|ZEM~BBT z)>KX#xXf;WZw!3`_boCf)UTYwXweNP5ju8*WJQ1jX*RKM1uq$cK^wzj7EBaeaRjug zkq^?8=3PAb8QI{$d_xC~*Id=n{6g&q1#JZzdw-88OX5$=KjPe{W$dEu<17TA#x;F_ z?Hd}i@bH(MfWUNva0}vTS0=P4f-x1@!rJzadGZPTJ$p7LBzDudOHhCxCcV)>xy*tj zTw%_1h&k#(Y=B^D!mJe1f8fB(r2p8BsWznF?9iu}6O%bXMe87)1wae8*pvDR;%UZf zF#dRrNP?B&m2ZQahV>anSf90zXhmNU!{|&G<{9Fh(@}@g`SuHP`Vlh{f=MKAA*vHm zlTnzQh9n&X3`Fi>w+C|4BSRlWaX=*PE>e&0RS`HeZSYtQ-h<&T7097|H$m2>6$D{ZY1@jRx2yc9M!f zralV>Hzj1VWHIb}P7z1Z_q0A@^PjhxpN(Fc@_*QT)@#zje~0qf`b5jE7N3Mh35o|k z1V40GWH3b!6AnWa3UXq)eVSQq^{hr-Bju;{-+Wt5R(U3g%-xi zPP;dxXFZn%{uN5!2=3wV=iO8u0v8Ekh7IZ0**Ru?p9b~drzQ`%>t=UNyZpTQp{z8fF;2|WE4l0MaFxOjZuPqAj?sb5h=v(CNU9%#H58U@P81IIYLdM zk~jqZVn`{5Y!K%%M6D=?yDmvQS~z^4I806#*O(K=)toWhC zFIp7VOYJ^k=G>sY;)|sp9F@}zw^6>>D7=*l4&Q~&0EegI!2>prgB=sN0D%QC_`E*V zTXXP>gIHMmH0R7r5*h#PV6*+v$H2j@23Tu)=G?sI?1M^47J(co7A?6(<^%ajH zp3;$cj7;lA+82>_ED9SC>HSRa#ni=V03EB%`t&G^|Mc+1OK?((@6={}fud2#=p#dq z6J<<3r~#wVST>*|(b$yI*K4!vvUG^lN5+kPaM8r0z>ON|bP+#;aU(}mJ^Gvq<9w=N zJjI{ajKfKRt06+XT3bg~M=&kS!;!2B?`fA}sIZra&?7^Gw8$|$KpikVVlhLp8R<)_ zTP~{~v|dgx-q4_=5WN_E^Bi*D%BuUo2C;{y57Q8!Z!5lVb5&8q^m#L?GVE zvkKZo+EPKprI2MHz(8;jG(3y?B^`&Iun|zrl{CcEYO#{`YdtgxScFX}LBV>KcrXm2 zD~&SPvV-q2Li>@eIk7WJ+d(wKF9|tdj+w z5&Q>3f?;4VTqbvDHeVFq*(c)`sF1IV{SO8mzH z5+R0AX4r~cl!eAnmR^CIN3t04{P2f!zc*69vD7;!Z-o0K|ea%=}>o>l}^jzzjjwOw@7J)3l4@3`zADL{DPyb)yeWHbT!VFl6eAf`XyG^{Kt-1eW*nvU8NX%)9s)_Uj z>VcD^rI|zEPN5aT8;m^Xm9#Ph(cF4dn$v`99XrH(_(kH_aQKR!QzCn)e8LL4BG~@6 zJq+EP1JkrW&j@JmuvdLw1og|l5Q8OX2MvaGAJs2{ypjah4m^H6f3kAGprMIhJG5h-4{UNiz>f>zu#X{rn1nbXegv+xZoCyT6o?^0@+Cq(-@q*a0q`J%qyXj~3V@k@Bt(sb zkSQaSGYC>eAx|5(Gr(72lz5pRB zL0dG}DZ#g>S(}X+H7yy26do}oM0g0>g3?G62gV#S98Li@)@B%Mze#sY8JGTXJSu^* zPwbYNV_=Z)R{|*D6Z?VmD7(uDVSIb{$I@y~2fg9NUU!^P#RB2ZMwEmBw4mcjcC=A? zNI1%i?1P<4SEWReaFVc{n++~weTKk!p~Q*FZ&JJBFjsjt`>gQjMMfW~$+{k#a5$v(uii(6=(wUHy zVru$K5B<4Z&xC2W;vG9W^!oyKQw|b<&p~m|2;j&5bS-yHupyT`pCwdQ)#BpFJ?O0~ za!C?_F8GgvaYc75u=6{|0$%z3U|RcunT12)9$28w`gFMl?hvTs|F?bXX^gF_A>66ozSzQU<)rKt&Jp)IZW zgXS!Zzd$Q@JU1Ix;3$X|Xa$^peRi538i*lqrUXBo0=^b#JE}YzQu6f8g!NDfEEup~ ztfeD+N}~oN2YY|^)W`%{RUIxk+1h8(cgv5LeTU_H4~HPfb84=#onm|pX@)-A)kS=eZ!_e3~Jqa#6VdWhQ}F!c&!XCn;x7;#S&{+k?jDG%yIRvz> z4f7yKEf(mWB57hr&U2W!vknuNf0(!_BgHLa4}#Qo4ohk#>FgXzYK9~!hJ)0M1gVinps+4UYPX*t zJg$S($i^0_+SBd^3|X+V3iH_g5PODxs$m-UIblbjY8fTJIo-5put8!0cLv$Pff8&s zp#R6go~!Ts=GPFN zicisFCO#3)ocR)PxFhk3THIRCAA{zD-O7;p;QX&K zAN+-xN0<*Rp~GCz$%&y1Q&56yMxNy~kyd*J*yq2TMJD(Fr=vpDlTtB4rjEo~5$7E# zZcv&2L&~IA-qa+ChN8^SNO7qd9w7z?u{p?f6k@wtm01O;H+2XN4=0%cv z6?~q6ze$j0CQE6?>wq`1kap2mS;vF@CAoar8c@aoUwns8d(BsL4UD~S!>}AA4{sJO zrl(*HanrLXG!_eNyO{Op0i0eB>_E_N{Ov_uAF?j(;*?(DIr{LkD4u8AWw;+J2ZTX3 zdKNrGTgp)Y*itg-0;psP3QvbmK@sZkDJbe3E`?wF84Izbf?rVBA(+NuaY7qShm5de zSb+oV47?SQLuA{%$#4i9d#$3&Vlq4?IpsJ71i@n?!2ObC)Z(K@QJgYtT~f(`$RTx2 zl4UX+bxlgt6_??0S=X<}ll$ulchdPd+IKinS_sugqQ_+*Uw9ytJ|fS-Vn7>9o*LK& z15Q}V?}!COFxoOvign_(X&4pc*Q<2>78 zBA4z2NQa9z4jWHjBtC|_W}Y$c5Gox-E` zV!#W0_!{t1n+;c(!eutxelEnVW{}Mbd0nc%iAtJYXa6pPa z$`eRBEd@!%0L_mW*g|_qU&fgT=-q{u0Nfv1;Qp_|D{8;SW7Ve(r0g&KZ{R1O9Z0k% zs7-VWTs5X3NNIWx?U(C|Nl@~_0#%_4MyMkuNp(a3M`cn7Lob^|+?k{_DB@cqMNA$k z0*jO3i-I56;UkV4DdL2YBEFFl(YFYguQhx6Ux@Fax)BRKs0rF2=tl1K#XEzM4Gv%A zD{%K3aQA?=*SD@3xDV-nTE&O9_?%#5>IER+o6tW#9324X8ie0emHJ3+7E{R zw1BpQp)V1`+QZ#=q>N{uKH)oR`U?Rq>qS_cZ}g>i`RIk%+1_(ZL3{fiXF(S~k4f*+ z?a#AT`JIu@;2yjD%9dXz7IeXJqOaW;?N4tHV6FDupmxQJ4sDdOrVHi%3kp^B%Yl^M zw7Ng|;_LmzFDgqeg8JKkI1)_%9C*vyoy1P_d%$Jyf1xR0JH!iY@>BJt+E;4(Ub~vU zj)+p$WWq0WW`e-Ea?eZ|s&HB7FS?}u@}$0%YWLX=nW6D^h-GQETaLx)!bX$>*#XD8 z^|Dx>Q?oa++*TyO6o@i0>9Jf$3%E*SQcWv{q93jvl_fWDcTWqSqX{_ygg1raZh~J5 z|9DG#P|PgN-iD&K8AWi4C2m4lN6CVDYj#1<`AwP>bP%w2SZQsyl)m;3mDUaJZ6r{2zun8K2t(n5|MCYl{WCrb>CN z8?x9={Plo|7?j6?T0=GEUf=|$Cp>WKr+o-zd!n;&l!fwqYdmKS%S;jJI~WXu9S)fV@| zuvuHmZ58G))IrfsYbwo2TMS)qW;A0e6}N)4#&*kaL=r zRR}<4X*U)+v`MM>qGH+tXQ(D35&na#S5-!@PPT&shWj5@g2?Bil{H~0 z;uwyR*pnEEROzFzHo0!PK20pz&5H#igYQ85@`*y*F{=t~PW)NVZ{XdFKQ5pSSwGQF zFMJcO#adpDY-or-f+}&&mpNF@FWxQoCiY@AT_}esSJ~L13&2x7=6VcM49UTJ6T7kh zh0H@KU^g&F7G&w7cBG=ajI@(X;RIT-m_JMk*AY|XA29`0`iHAU)x=JT3NyxU`X$(e z(${dYtv1uRd^gq@8HV--`S&AYh0f{b9SkGwPBwt)lqM>>A=1J|A8tuk6B+B8o?fxMZY==_wJtk6}1-C*nWI0w}p^{e$?CKBqr{1Wwf!)Q1StDG`Gg znpQ-j7)&H&^;S4a8obGvh`_-Kc{rk8Oxj|fiPUj2sDlK_LQLwI@;azvv~kmGIMK&p zgyDN&SYGg<9NSQ`4Bn$Obt?=9FMuckI>KaMX6kXo6hGRy`b+4YsY5YmWfycP*!oV~ zX*Sq7vpN0;&CeM7)_ogdcjzEgd2)mQp5mx! z*jB)U8HgbW7b4W{0Lph0 z<=V-qgi8tNiFnT650K#|m70`*o&c(!Aa&`#pw2Rpi=!qbPOvI#GdML)TS}$|j3sh% z+_QtN+-&{BOjLiCB|nMwFXdn`QSby2x)fJcQruwLn%6*DC?PCVj)&~cKP$&WZ0L9} zrBQ}sJnTq}hcz<&8aX$HKf`#y^2%R)UB0s95zNOvZ9h=%RhFI#lvgg(aMwqPs%jId zK(^3*!Qs#igM?u)5YL&mA0$2HwJgdwD*ki(~}m`-z^!){~E$39t6U0KO!)+q(`6&WM5i;`k?+SDNm*6 zqIV=cm)5))xuZh#y*Fh&3bUJ%s?_ucF++;w&cceC9{BtEq771_rO zN8c-nzBhU2hqCW48{i%s{L@pRI?T-$N&Ru40O#*t@kepnX}iDZSY_$Ifi?o#Cg>{z z%DVX{L7Vy_mdTO#PF0!)P*~(WyVBGqUa;5NC|+`EOCq0*svS3@Wxmbsi`#ms@zYgE znO(T141KOd4k96T$hC~Wewt&O7WJpumDL%4;CqWd4J&_}z4t{V8JuZ@m8m`@(~kya zq7x%s9i39sJyxdgB{Hqan1}aDR_j2uv+&WkKvzLyCVaPCEnu6JlH-I#4giS+?}-ZDVFcPW7FkCJG>2HhAEzw&gCMH*X`Ox`gej4}nzyc1={aWGNZ>3*3!@C?mY72grEdqt(xx7j~SCq@=N>x5r z70PF;2TxVY*xg{+S&*3ql+^~jzch%es`k)f9xW>JZly&QdBGR%+o!fi%U<+&WJ zeI;5$_1P-w&z@}K2XAova(4^|DcX=xB;qN4CZd7}7p^=4oWpJzmtrc;APfa~yQdGv z0=V7N8N|JyxEs{z^Wxi!?^1l1;=2Oh6{^0h0cGH`8t0(;6=zg@W{*{zjT9w#I0}I) z#OtLlRcl;@S6&FLtZr<@Ys<7kUuOg1u^Cmi&2g>Y`0-m^ac#i(H$Ha4r%gPkWZ}pfiA<#BIXy_cr4obcg6>*jEHKoXdqlw{dzl zm59s-uibVGRTu#a1LxHkbXX`}2}E$7StqjY4;0a1%F??KiEHcH;XxE>{(?s(_(O?$ zsW!FWug!+;avRiGN;5|fjU!x%E3T3J8z|EF5z6z!p^Bd4H*1*B8k*i$nn$DXf>(;@^j&X!j7pj$7AO4AP-KyxLPMQ_g!}2t@iiqH*7kuco(E7J*WHEbZ@%N zupqqC3phO{obwSA@6a-fch)@0X@g#x^qgzVd>11YtR8BI7C)vG#7ynSdS}T} zFadnbHj|xzWPV71q6;6Qj|)9#x*7L*4txJ?f6;Yth0psPg*q%1zYwmb^dQH%W{!=_ zfju|`ecKFLjUag!3*70WjHLcf>>f|-*CHIL5!}QH7cv(erz*C-b0Y(G@ihj8^nHu2 zIv97t&4|mv%V!_uAVUV$_rF~Rf>HtlnkMu}*Z&z8!RnaJHL*1uf|D_z)D_a8@ymG) zx!5^wK$NVs+OI{#2Cq2KmJ>G<#U}vl_yG|G$24(e>FLn?3Itg5v8qKVMB%u?gjVId zFH{DV+q+TCcC&0M@)yAG-J&&V*OKEGy%)+6VI z4`geuJfxZ(y|;>LGU{$Mt3mR~W)+h~6-7_6$;#5pkuaq{MSJ|pIy;GdoSEaF$6?6C zF=V1GEiDK3iXn4y@j*d~AN5Nhwj)hERxC=bS=0MDMg}@fY5thwN4uA3qC0EJV_U&C zxkEwr+0AFtlTPw}y;dXqAl&GHWl_bm)1af4Wol%R^qT{Q-3AbUYF2+ass}qM>!+_9 z%U{?|8ap?BMmfD^`0EJ%34N9EpC7_Nh-yv=P(PV|XJ9A5F6&M$4l1N06!%9KH#I!=3l{X0~OR~hFnZ+%L?lq$y6w+?a$L8l<_>>YeJn#Mo$PP*0HRFDSI1JQ$ zF;II!i->#EjJq6ha-d>8LyzEMJp(RN$nhy}!Lu26?~liEPSm-S;|)p=3=Dog%%MW! z-37%5){Qxjo27mMP9Kmf4^e4QR{ES7{W_vKuvfEpm8BCA8`Q*d10sFDT*upt6Hw`p zavx>6gJpU7jD$SCAhLQ;pOBN8_Z${K10uTvthT52amk|BTjK0!@ zi1GE;n-H0N$xn<(98Hiox`J4HK_ClQlgP>!$Rf%x(H)AifLYP|7#ReR71cZdl-*`V z`~wmAY&JiiV>(=(CFx>`k)--t%oM+s8La&G;WM#LEMamzr`k-q2yvi#r|64MGet!= znsM_HSI`y>G!>ONm8D&XgqXT}nu5o;RpOEJck%e<@woB;>rEK`m%v5NS=e_A*j8ea z`sTHFVfxTs3@U-{l`sR?jF*io;SqmxSP5)ei4{%m>+OKn%q<`R=P7caOfcd68=^T-{>}u-(oaeC%IdlX+=|qL5EUYjv?R9~y|5`l z=iC_rj%Cl?ql#D3_XB?M%HI2(SG>NB*C%MQr+oK)ysjw}ulw=(EETHCcjKS`}y(g1o=Ur zA0c5#nrad{Fc8$;?iREVFZa0{4=B0_=w;t z7Z1{BYImBvW&Tb(8X|@QX4{>}?J;v3@I3(8P~@)Jiii?3VjCjxS!#Z^F&zeh?DHkr zQs|my#{LGe%Id`p-X>h%_z(~i&;kxYI``lM#hhU#{0S10bm|=S*DsUXrNQ)Px{*i< zq$ir`E@L`K!1bP#{bo?R1K=-5d5^s-k#h#YqGv;wKtREIo0)POQldF^W#Ep*^)rcA@*+5VrK18rd_oIG zG{1$IMaYB}kR5s-laRo(#h}-i<=uhuz-@|a)|w!#HX|wtQe<&1z-hL?xh(pFUPCYuF*2xsnt;Q5gm@iHO+j|=bwFtYJVnb^<qm)i;a$80zX;^_^2LMRPR|OV+iRJ{ft+M%_m_W@$R`yec=%*{O=z)_I z0g#_Ek`x3m5T&qW4a6>MAf^gU)^O}Li|)tlD%$&BCb(8V?mz^WnF3VWGR>zRM$d_v z8P_0Q!##AIr@0m_E^%U(E-DtY^jPu8QN-h$)w30>Pp{;86+PzxGyg*5$LDhMvkIS- z^j8Vd+`P_rd5UO0lAFwu>*ywPEfgZErgNs^0fUoT$3j@Z9qZ6O!H%Ld>0CFUc&2yb zXJ#9I=B&ccRV(oGgJt-+p#eXCt!9@fo~J7COmW4VatSBy--Le^D7Tig4O)i(N2Y43 z$=w5Yjsa@caN8n}hu0n(;2Ds+#cl6@8Dq@ZFxD1q{K^JFLW#6;RUZADdznCm^y{sh z@i%t^z6;{Y8Be>bMFlTHP1fYDz&l>j}`^Z-S+=+nZJx3}eK_doDyT#D@zkavXAhpM9)c;Z{52oeJHOoZ=yDTjoT z@xP)lf=;|@cMhX}OL+v(KTs6G^RK4-{1gQcN)zdKoo)igy=`z%VoO9g^&Y52x1n(|7M9gPrDnK4-9INm6^g9{x(uXEcti$u z#ibwV@UaTJXSTx|VsKR5>iN~TGk3~x!NnI?46vt8;@TC1&b)sVJd8_9o40=x1 z8_=3P0V3886g@>i>hsL?X`~8YAdJySL1t!eA;?Wg3VqgJnY8AWL}}XdNZIo`%K8Bk zpiQNSXWa`1CwYlUyhu{?6jRink(fU;t(;l(8BlEFBy-k5V;)sISko|J&F;bFJjQYc zFaie$Kg{4g2v#+7NNO0i7&T-l8~-X!EOEd~H#f$bHG|F@Ig|dlxr%U5)9zJq@2+;R z;C-CTmUkKALXzv9YRs356^_l@at1WD=0QCkCjLyR&w^6c*iyO`)*m+`Y)KBqB zd+kc>j6)3qb^K^$U6v=(i>;FfDUbAG>*PG~f~^y7cSL$~YHy7k998=*X0$TF8BpT< z{5Ip|Q{V*n8RUYoom183Lj5mpbcY(N<}^6c!9`3Z2!|^}S!ZU#$#_2 zGxE?H5DY|)oAPRo?Mc4(F8G>7-e?s`i7K_oU9VV0W(`;5=$Z=v<>;YM!UZL4iO_AN zztt!Lt3PAiy0Ny->7#AEw7&$j4 zSd@Jp!RC8k`5~AcElNK;%%AO&Fpo81?wg20-$CG$qES>@iw&A>#;5(UxEg;>E&h>H zX?{g4$FX&rxG)^2S*vi$$UBVxgTekE=C-QPH5iYr294+SU_!g)y2ON*j~MJ0(WQLz z#<~pM7w@|rJA0V5yokXmO~&JNQNFS08D!W0=B{R0XSnEM01G;CiV^E>fgvCTS>hmm zxR6kB(juNyUBOKnnBU;ABknp778uR1wqo>RKHsLOaPNeTCyWjZO4dkAfxF!TDh$i> zR*7Lr@E4fQC$IyF8#Cs%DcKloJ`78EgwonmyepXgTi`tk+xBqgpLU{G!)p+Ttu{LbkxNxtJHpSiPx4Ui4`)j8K;l}}sMXsq6`e5yI z_4;jGCadYs!y=|QR+q!W6X*gr+!))9l_(0L%f(nwzEShSd2JyaiDn%<8qI1|&4h(L z!Ef}$%0G#oU<2s{0U7xb|di6#Q&r8@J6D z9ZmhQaRRD@@Q)o#6u2s_?{2Y?Z2qWlHrsSIcz|$)LF>AFa#ni3SM_;?Jml#uct6=b zRo7aO+PJpyMM#{Q%J*{l&JAQEB;P4T7+(3_!uKiSeWq&U$rp!lDqpnY1PeSD{{9Vm zIyY6%6XA_x0KiWU=5>K(;B{bl$3x zmNy@=G3^mCAz8l5X^RMNFCpzc*dPYiKJ@zfCp!HpvH5Ll-X!Hi{EtHD@qK zuy~uaATTyR3PR(;uMFwoQGBu*dAA3bMhx_w9>#9QN!$qf9n;Vnx=F}xq?kp03hsK~ z3wam2J9zzTqOSBe7!2JXHb{fom%+R*YER;vQSU(cCaxJLj(5Ckop0W3RD$7#wMw-6 ztDtsru=usw(-QYb@W``qKZizROjIJvL87`hMG4qX-)6W`!m^+?o~9MwLvT>L(qSl~ z*wGTbU23b<4d{a*Sib%RS+v{w4m`{_=h+laCI=)@$QFu==Z<81DKU~&S%f|-+ML9VHjl<10t6y?I)W9?|8 z0$5RI6x;yqE_?~;8Rv>Ou=&PzO7HO;^-AbJm>kpr^5DJpZK7TrGQ5^?JYD_+726>h z??6YQM(ssri2m=iM2KEd1UH!TF@|6gk#iSvAm#KbrcB2utU{@_*z{^XC>sHMbtw44 z-r^8>Fmb3Ca$(T)62T#e;bL;%DcG~a z_~`H8m7OzkYId)dgj3;S&NCjV2l``pV=o?&Ak zYJzXTrHc?z0J>P$!i>>BEyKgtvW~$)ef4rYlQd&;&pBE z(IpZ;+>M9XZN+NzR)-!gGEVt5Mqw2Hy&x8^vohw*O~ag=j`rlEJ)MvkrR4A$1RIQl zSswKVm%%eQp6Q#!J|IM$c+Qnq0Qs;`@Nk%5E>EMO5~indA&nS-#f&fRM7M@OP)KoN zGR1hLcoKjiJJaAwBh;YUFOB)nRWZ12;pm^L5bf(+S}jw}!XP@BR&x@5g_wOoFqX-f z%Gl_!w%+?hN$t|T5|SwJ+1HCb%rq6oNRU7vHR!&{YH_==^j=x1aqP4w!`!qm{ADv9`YAcupe-Z41Fa$$0M(GOxj@Y)F+eD4+c_RDobMdNHpyI^%}| zg`ISn1M=b(o;Tomi<+vz=rDf%Bzk`fhJ+N5LJ*MfmrEa!*=dUNQl|(HB5)d(DbvI< z#ovNRp9|?A`S=PI=QJ0;ks8)7L4-}ieZkXsUn=fnLfqVWwgA>hnvYhI0&G z75=IbT#n#!|UpjU4Tv zXyZ!xSS3?2(2P@@cQH=Mj>;rU_)ud@L`uB+Tb3}jsx4{dBPtATP-`2$S{nI_S~u{K z-6$TS)}07It%iK`%Tx?RD)DgM#W>U|lPuu_wThH@MXgMRS_k-uHu8a5al#3;@)xz@ zMj)0a9-`J<1fW)rd~m^tR18Ea@o?V7IMgbWEa3ySij=ZeCPS@-d_)`hK&@UpS{nI_ z^89>cH;RX-wHyJcwMsrXLXe7qNF^T5yBLRBWs)U)pjMGm*2-k4brB!YMn2fDc%WbT zfqvx!{mO^zSG=)bscQKCribp8Agb(&B17)pD#(w1k{mKaRD<0@q zexP6ZK)>=K`xS5OSNZ5?xO2%)KG3h?>n_HzU-3Y#e6U{`C~IXh_A4LgSNTOfAHKvx zTjG#k;-M`O{)3{8(v8rd1&TF1F%S~Uf)-ey`CJIWV8b9poh{`qXNap}V63s4fg)!)-X!HB zb`fLIPWiZ-i6pHca3urLP6mpc%kd_u53#L`jS4!zV+#|>{>GQ=;YO>6(N2+*6ol9T z@xgvYWAWS4$X<;$W{G$9X|!=^~A%qS?#rm2CjF*Qg zXuwFGr(6~j9+Ib2SmJ;SE`YjQXfsX28dKiHO;xb3Nw?MEGBX^qxZAw~E&3@?N^#;)5^U=p}(W@i|N$J(?Va0ODv|#5T4${f*v8aM`d+G()u6SopVl;yDXa3ZKsRrdR8( zrI;d!k2)uDtrV7+0?MR~&PW>p7tf~9x@t2w0w9>(?QUc1urwXVNw{$X(N7nZ;tr~W z6fs0bfWha3ii$_V|EsEv;hcQ~R(5cY*kQ~Oj!=(D5!$sm zPBm}4df>go%kIN10KY-Oeb1(@I0RV8p7hrkolapLPF>?UrL)A+PQXLK%PBL&AY@9&&b6ng+Jj;Q!9FsF0(jPoo8nJ4FdaVbKn)@7&Tiy`haCC1M?9dufhP;E z!YnBNIMPaaHxjXlUu{Ga_p7lx zSp)~E8ePL->up&h%F!NJ#^S897xCjrWk-;RW&Z|cqqr94iQUO^SOH2FrDzXSFv2QX z<;RgqJ_CtZvMNh1XP(%dEXOQal%hT0WrS6-haX2Oc^e>O$scqHmWiJ)YRUthuyKVq)M)A-&e=t_NN3&vlN!xd|s z+r`UVmw*ourcWjDu4yyJ9;{ag;9ix(-g#z6r7^5)}OXB?~?>>*OHa^4h^l|$VD z{q*3~qs*Vn^{Gqj)9H`9^GT%Oz=9)Z+;_Rjft%Y<9<*&zPcL|Fv%s`qwR$OQi**2R z7$F^!%ccn~yF=A=CNvtW!DLnaetsaVfnm@5hd3i~zn~40z=cGpCNf|?Na&BaV23N$ z0cuGiZDPS*pBc}ozm$B;=LlD& z2uOv|kHQ{S0m+%pWP5~6^X=Xj< zEF*A&#lJ9C#I**-8~wb1530&4u@2XE?DuCa8m%<%VIB?Z&5TEHA!%+kT_!>WnlBVS z^-Q4OFPjo>FdjRX?XYk!TqvG513Aqkk!RRIn#7ANA?>&jm{};@JfsEMr(PM5+@C;% zoN)x^j-sQUSBZ#Ao)g$iHy4_lxfaEg=`|`p6Yacz5y4JDv%t-f(R{Ngea{9-1}Dyy zXs$+KodUhU(EZDY6y3n@BNshE6ulHhgDTsY2eaf}2npOW=NL)49(aqpT_!=TKuTl9 zn;`A{8f2c0wtIEpu-dc2b><+;hg4+6rrc z0lbv1#7i4q%9nGS`9bbdzZY{=9>%ksrHIJYu&ncFXW}PC=ch>Q`(G zOGov8VD;D<{siH_<$fKWe-PX408MPf0|dl>#wz~FpY4ig1D~`doVN$bH3ADr+8J;V zKlA(X^%7utjv=_iYhDLK-{TK1eDmzU&6jI|Yu)cPZcQu<+GE ze03O$ek))f=Z3~dkRs+jRDRl7_(lo1s_dFBtc^S$DV|ZhB@>Ba$>8K?G~oY zc#1;V8;U1pX4!0JnTY6LiHZ_M%j6hLuuLll^w}4pHGeY!%wC8ab8zJ|FoydF(ULi< zkZKn{XHUTA%r?GWmy6dQKwnNZ6ARtA|cTlh5Z%ee3y)MfTdP{6wH%Z(Jm# z6MxoO%mw?kTpu}j#`eo)RfVwNUxDIrGHE5N5epnq{KAWwu*@s+84udY5=t+9YuX=@o5#By***QKn<$j2Mp z(6~DTr-MerUKpvmxDn{0Sn`AOwvr2$6$*YYFZ&H6=7@9tl4+buK3yjoQC4mWj+7e0 z-lNDqU1a||vWulpxPlD*_{#@oyX{Xs9~UGe&7wmncLm#nr_irp zg-ydLH5QX1WGuN}pHVnP+$?>cOo5V@A*FF%CB-$(T=U}GT+_SkBoxGG(VMIQd*Q4g z82O6gO$XNHN;54vOkh?qEfm?xl7$p_v1gBtiL1&qT-o@jD2X|--hWG7N67H+4z>6z z<<4159*H||Dc}xs8;glaYb(n1xBwuC@r`X4se~}T{~xfbXqw9EY<*Y+Llo~)uqU}t z!RFgqoIk^z={^MKYeUsVCBo~~AiN_kI7J@z)%WD^)PGOAk zEuanzwKNzl!O74}wEjLxX%sJS5UUIc>{0Lx1^jc1(fDLnyzgA7n`+O(g}j(LFed$= zzY2^Vzt-d~$5U>f8Kf;Y->;^;xur)6 z)=Vse>oDlYdJEngtt(grn=74ol$kfX+km}BJC`{!(;B8=cEX&%{Eq_|)C{mxfru!? zZGRyX6AY_!9(hscIIAL%W3-*)_CStbFGP-_K#oE?$F+eRch$ohH8c`sFLpFh`_gs9 zc8*AOpVii#)vlz(4fhITec)F5LzFzX@2J(J$c3;i8Onle6l8jg!M{?R4jjso@sLSmW@jI-C28ei$V0ux zuEV3Yy4JuFFf6mQT|ycBw$F$0#biEfN|9P>^9A4b@Y`kaZKwmyZ{#-)Qsvkz1wzJX z^izzN^#+8UOR;mWYS}`FsoPMCT5Fo#RO`}rWx{|x!i%la%TJ~{Gk-BSn;)z-J+^R# zjHeEt33ARqX%;laVqk4!S&vyM*=6Y_?U>n{N{r64YO<6wna6q=FKEn8;NdYUg(BHo zN{(>%-QrO+Kq*1;$iy~uAUc`A*>ZC}KO?o6U}k(siy;QR%6xG-)E1p|9%~5XPC-Xn zN4EtD0f;Z)P?u^z3ISd5G{gt&1t(Ib2ta}V@l%v4=KMXZ)3+iC1;q-$ci(E>z?tBbct;nZiz8)3ild8KBv(U{Gz^nH(fW93Er~}#YYC8B z(ezT(4WM50^)$*C#@(Of#tS8ss~Sge5J`dJMr4i4oGKD6#|uRqDhK}<@ch_lee)(M z{Z3%uiYVhC---kt+E*~##$lKu00SDa$G~*ZXe~yDK<~wug!JCt8`O)?s7b#F9Y4a0 z+t^^G;YcUQu!pprbODGsXdOXM%gwq?7OQiPJO-;FtSC>ffSo1iZ>3L%dW<1BfG1b) z>_+&7s-1)OmgP+34tw+oH&lR@*(N4 zyh%Jch2UYoU^b_|UYS844PqOk-vl0A_(F{ZCqxrZ*y5z~x8yPskHK4YWhT>?CicKf zRpk)8)K{L4zwAr`%UvdLG$o$jE0ffG0u3F*Qf*MRk3NR`pvl%zFA1tN9dIspxw6-ncEJL#4Sn=n)l#nc zSY9{=X^i`(Ov1Ky?&1Xs0$#&*%OQ>)x@SDudrBU08B3Vi)pwI?)vwUiaq7`yY_h#( z=kGxp`Qb}1&t$-h@Nie(Ph6{h$N5Q^g0MTJs(PZsI-XteR4-wV#^}wws*K<%@Ut=p zr$eh@)IimV=lvX|6LG3CvJ*=-g?8dKc+;KuO5){snOH5om{+xAD4S*Xq5#r0SwH=Q zUc4MFu>~TplTDmuo!`QkLX-^YSjU_%Aa&q3YkGHD-g~yf zp1ji*;ybM&_yCWOn@{+4_`X1$ zKXV(mbBg1c@X?)P%DP>dqztp@2Wv9=>^oxD}nsI=w@%xTiZ3N%M`3hPV6(W=7N9NfR^LW=MZ0w>lw z(kshZybI#xq?-b%i?R$JSb}V&cXPv$eoyF_Tlgi&0^nJm%No>lXEO z3%>5eBP=&N!Q9Mi%|KZMQ{lzM<9${eMD50(LB4%$N_%PTMAGzUr1fH2hi1fdtRyTb zAN*(Cf0{dMXjE44&Kp6!eH-1BfW~}EVSDU8`1v|SQuFdM~ZGRDIMp1;6R@u;{m&M4=E#oJQhzf>uZjE7PP5G&DD``W@SR;{e$ zHbo2<)D#f1x41;e?kMdE-6R!-Jbl-=S%_QtO3)5LSYS+b_WXfEl=;R_p6Vxef5Gi5n`l&Pzd3kOb`M&h$; z4uyPW4j8;1!wckVDc?fuD94RV8mv~2tV!AFPQkJuPy(D0&T$74!3RJ&uZ8>{Tk9Q!pX0n>o8SRHoyH^j)5cKV%KOTe7Jxh3Ou*?C$>1?pNVV{lgegg$k=oCl-7uy52s5F*C)=8u?9Kjj${}9kYj5AL znsJn3m)q=gD%3fsu-3nfj@Wy}5rJ)V+3t?F5oV_ouv6&myVh-X8|;qXX2szv6bse^ zu5UhCj+9VQPSy5irHvrjI&AoQNFX#+3m~*p>Fu8CBIxZoN^fU_=1aRmR%6nP18H(6 z;|Q{K9@P7mJyI_S#<}D&RM7Gk5Y1yeR|i&c_k9z#w|0(-3wxkyz1H%rXhf1Iyo4%^oW zuqOHb>aI+1Vt*SMa8ex*a8i8@;jp-5xUmdGrg8MTBvv!+1h?<&oiH)&qn+N>d>CC^ z9M&l0@*qH*e2bUJ;tC;!uB&>9pljd);w|jZ{A!#>N$k1W88@stp+5vkcRWrUR-M;B zVOV{_2^4|Scs&p@e$(Jsgr# z%c<@j1HSA?cuwV;`HITd8TojL>7=lAlLzg9cZ)!pjsi6y;>TX47qfE?#20CBbhl3X zFIMSBCma+d-VBIx8Xz5s`%kU{!>g@YN15rjkRHfbE`_RuRrx9eV0^!RI047wpI zs?fJi<$F)^HR8Tkzq4a++l)0Dsn%;qI%tCZ29u)I;mJn7xAM!M4Ohht!KebmPzb<^{H+iE|2PaZtgQgAb$!3-*|5Gp>{TKV*7x1M zk2Xd^yZXf?g7s^!Dy+K#>nOx*v~E@Tj5k!i=I5ACb@kE5*K~Nfs-9=Qn}G z)R&R?5)xw)_;}QD&`k0XmP^)`kI|TdUUA`!O!&z9yTrZWnK0rmC##2xns$^naGT#? zUHh^S@pwHBHa)waM&>dvLwBvyqLf1|=9RE0Ndk$m(1 zD*WGzif=fbh|pB~sLIRfK+^ab6tbTEk6P zj}o54l`k>T9PWVX$4WisbAp1IfOBtePC4I=3x{0U+oyUx+09dPU=wN{F4DNEJ5@{P znyO zoHklpIPYN&)RXyug%k%-l%Rzw-;Gcxs1tQSzL=7FI`YzHycoz>n=fkc=Pm=jz{`2s zlPtd3dipclPFJj2QjQ;OY^}m0xsa^49CI&?t;}U4zKpl(%4tkTOlG`PRZhoCedP@N zwHF>dFX*q=yyp9>tz+(Nse5=bn2pttO7fG?%ay%)3U2v2GnveGs4M%OsflE^Lp;V0 zHpd|L&%oSewES7?X4>q6wh@H&0>0>Hcl@Ss#+ff^f;oq3PAu*bKu>4c+>;UH9%}7a zXpmd^8(44zCUK$fIZa57P;}A3?AxC>*CIZrC@_uI7}+R~(zhE_zK``Re-iS=?Au!8 zg|VWNvQQi{x?}kTmL@KCmv3kbCT$Q~iNalSvrp?~F$H{s*6+U~ji1F*+v@e8lE&nd z&_N`fdZ0mc10j6$fX#h1gwar0iyv(zUWiAV`#hLH$$iXaBo4=0b>#x4zmj-5ULg1$ z#9Mvk!}uFyznn1sYvY(ZhpFc9&fq^*1pXsHk2$25C;K_)<9>RYF zVGY0+5S`E9KX>1~Bg}56f(@-6k|2nS;M^|<3aIo`Z4P8lYWc+#XLJtK-JO99*2Z1P z6`cc1FfoGzU()mRJCDVXE@!KJ7wLS@AYTLr!hJ?`=|-y;@&d<{AZDe6?ZDiTG zL>pPY#)C4le1<1&WPuhzNFg@8Wh(*>v+Nry^D8EA4^v9DSoruU>6GCJxJ*$#^ig(7 zl)b?vDqlUSWxnpn7uG4dKW;;|fVBT?jCx5S4)4lK$XM6A)e7|knBYDF)vSRFsOVgi zR_LDfW)(mpN+3E(oDm!q<1rzML&E-4V)`V=sRB6ce96hpbk5KX%KuOF2CYCgia4o| zK4)6Q6_euHywLO~%KFz*b1pV!am&J!y>s$FoWE{*7`vW+XWWsZqx^b={QRJPn$^#j z_<`c`G2gU)#{HCleg;)M74K&=WVWw9VSl_uHVf{D!Q$3V&J%D?ja0S<W+&MkEQ=rVDOpxOa{hh#CB09EZ$|Rtc&j!unf^-h19+KOZ4Tkv(&XFm zR%H&wOMT@T_zOUC&Oya*;#q=TqWkS|RL*9qIgGj=Yvr0$ei8=R(=l|vJ)Dl;3!RSl zQi1ys)A12XfwNAVs>Pu+79gx+@r4b?vrNZpynU(1^>W3(XSI{GN~Q&bp+sqbBc5&h zqk&vT^pOK?VVDAfXp zFRFYGB460Z^TMf!0J^Gtuj_oJ$k);`CFf}LSpED7vO~}?{&v)lWTsHps%xi<3qaLc*}pjUvjzgdp1*RS4Q%A@H_>1mt}iuzv{qy}4MiRsMru zE0xV_oB<92kCCfZARGH3$?gYz-e^yFi({ReY)Aa9X?Kba7zY^q2f0FU6fyPUl_9JG zql|R4u0ULJf*l>Jf+w7;;4oCc15M|osgo?J00zT3{t|Sfjk`XAvzYG(27R`Ge*F%` zh*kuUEv*BRC_tuaAaoZBZRDQT0jcZ8Mh*lJY@B2e23#ZWnxMl_Vs>!<--V&HjJ@b_ z>&xI&t^6d5;WGWek=jQt5B^Sw=oRpb!wi#?Fp~CxJFvPd$@cs0B-`9c zU|8R@42IGsSD5;gX6OnC!AR(hXr7a4)z?CLn(B0JDr8YHRrQTD#)R=Wajqr2O@ zF2zGN1S91x6yb6olF|8o%-d9K@2(Yn(#FcrXsQ{qhKj z3L+}+e1`w;{AS5{hhI+48<$oLw$rgdzEED8mt4HY8u1hA3VPVn zLIST^?5crZ#)x0-tZ&QFNFH(`-&}rpDBr-nUPXm4awd6=6Swf*Pf<=_iMDyCAmF~0 z2U^Mb^tRM=gkLCEf*oB4FfykY@s$Nek1%)KlVX6%Kx zpUCz`>kyW}g8!vWV7G8pULpI`(koZjI(09*rF@Qixok5qbTt=#&~9rJlR~PCY-~FAeUb>lq!Ro(;^V z)_Z~W^!+>a7^;0=}1fkY6=+7DZur=;1nS8KlDCv zxFgr%TwoDs%6QZTq^*%SzN?-E^5JkQ5kcWNnki1K+P~h_1D9}Y^&k+SIVPPGEgDQs z0WYSv(Hf0IENEw0dOq$waLiu9Yre9|5WDsnc~Vy@%zhXz9&;syIo+oV!&XvmahWcw z^_WxTj8=iD!JDjCF|A^#tbRcC=n;4Dbxb2JMcYZ)KBf^fEsQITRt+;6+(y0)d9Ckj z@H(qO%kBs8iP5xn@GCMI@A#dLcJ?4XiDRrzl0vqPJ?51NmlbeSXterC4GfF`6@F_Y zgNTRtYioQvD16V<_+Cw@QSse*FH@W^Xco$itX{cCG+N7;4;2>0sBnRT^V$81K)>G3 z>>vb6T`kHFB;CmhZ#zQ3uc?Dr35?C@yBkDJtV`J^8#p zkF<$`(MaaQNZY$MddvDLIDQT1cEX8@S)$6gRA-zh72*WN{Oyq3e&=m%Y^uL}Cj`$~ zNFKD#z+GOs{@g5+c^q>NgOHq96S!}v+xEaZF5kkXnEUXb=^^^J*RnSD74>_J1)-c| zt=uF+c}w65HfYQ_DU^Z}WcnrRUXq4xuQz0t8Uu|P)}oWds^U!wS)N2Ssa$RKs(=Lw z2T8m=aIQL)7KJJn8>3d){S_SRKydn4@68f8e%{)|)?*K5@)3HO(ex{vCjHKA3}S3F z55~_1pnW%lCL7WTm`CkOALgfM%=K?h)TVQ-sf6W*TVs?T#(cK5de`dc{Lo7QJ3&kE zTL>&FKm06{mh;K^s@C(R)*wI3^e0md1YR4E!#Y(ZYsZ{(u^*-q=hh(ch*%ik!8*Xa zSuv2kLE&(x#^LSi7%g`T9G|@`7MGV=?0iBsg7crYQn?Lrd5K2h4yv9Dbv;+ds^>GA z@51ZJ{2TTBMz{K|!$Lr#!jRNnXz&(_o-I9#r81-TuA{Ym_V-{r)bT;o&59Io7n4;~|7pL8@9mn8@tUp-x34av`7k`ekFGAYIT=ql zwqKXh9FKBg4)SACL|V*xDc~A^Ge%s0&v^x0K<)yU%Twrlq_lTN~yKE9li~j%x49{&5OUnSbK)t;deT2UCt` z$YD6Ug72**XJadYjx+J_N(c?M+I+Gr`$L>T{}55H0zR;~6jldn{Q=pV-=K$UN9zW{ zF!nXayW!?qjmoRb@H-wZCvZ}h1OGQ%+>s8|Yax%%baY8Lp+4bMlo+4FQ|QKwBv;>t z2zUR@xy#ToKnTJXrkPCZjvgXy$0*@9pr!DO?%#e=Cs@n3O^24B{kzMN|0&R7s8+BM zE+ZMVH_zBa&uAAguF~w3>sXYpjwE%Zk!6~7!iVe7Ki(?F;&u&sn>SO8FVD@A$;L6~ zAnVST+7-d`e*Ee&6aHk=Jn`j8_(cToQb(>4hd_1oA*vo< zj{97(l$5IH)p1wQTg4i2wmk&4QAOCU>|aZs5xm3|UQ2hl!cVq&YS7yrb3%Y=CPXrg z$0*B$4_5L@#W!V^C;J!2oJyeQ#@%W@Tq6(+@SnYp{?hw`oMrn<`@1ibkOhu2_rY)% z;FS{tys{mK49IJ4m*zG6qH9AUkRPfTDV-UNJVf6YYPOr^?gD zAvzGa={5*#cr7HHY9tzXtj;@?cZtu&V^!X%ozARJI0Xg4U(?|%P6$Y4U-xc!?^po8$6$Fui8ed8wwH0*I#QfQ-V~u&qAg~=MoKc47c5*&Xns_ z#!{W}L}ZMpRu`qx2!7~8?&O#$QZ3juP6X<8bA*=31P2|F$sR>uwQJ|;i@WV z2Y<|p)rt}UzR5abdGsDSPgTZ3B=sx#giv&J~7F>HY>^sqRCn$G() z0C&uqR;r9HoiR0LP4^&UG{Vi4xte;_Xuz;OErlKR)4}=Ofxz!lWd{8wdB1)>)ifTddBc%HDtr7&fSpS)*rc=X|Cd)p;?H7J74TXpx1qvKhYpC%_eI*^BCL7 zG#_GWUFsS6gw5U2pv~hB=W^oxcotCE^Ott+?+m@8zwlH~SO#`H|5oz$M(d5~^xD8#0k8S81bGPCZX|o<=vWMCv&rVTg9MGG zp&Izsy0a3}92JkCvw1FP|5F2Pa;#DO&rIjX)k^A~4g_M>xtNnCRZVQt+4ZVA2mGx% zC&}dNoTckrck_Pg91^q671%tF-p+s@gKFga;{Phsu+ypQ9K$*TTctK(MHO$f8j%;V z33im`3BT)uwq`dq)}SxhxAZ7Kj}}p(QhrWWQK4?RfzAV98vue#>H8icHMhl0Y4gc| zyge-(&=iE1!i{Rd@KOyBiU=>Y$vQ;=@(Up3dOsXcLj<5(kOc>Wf`Dc!K%1@aip8CQ zhXgRh&g7o3i$SEr@CrDx#PYi6PjJ?M6f78A04fKh>cMEUJYF0i)d3-Wg<-V8x&V;G z){n)Tfy3K00xADMFD9D<0;v@shXM$uHQZ-}xC5YXeSRb5RSp-2fQE>>t)TcAf+EG& zUQhY#b#cQxT_)BC(-vc_@%}>DvzWD(TNuHpRO8oJ1>3+k)~y%tYMa4@d>)D~@PEOV z8tY7a*LY`|V6F=9gFQN7Cv z7ww+D7~8AS;!(ZC47k62x)K!K0F2v_^U^Z8%A%?MnE%-#(MW+v{9&q{gExIj4*z#{ zj;oksOCU#%o#W#`j(AjLJ&zn=D2ww$qjkJs8_SW|6Uc0Y1ym;1Pe&|na&3u8&8;^Mv0$e&@ zEmM=h3scx75gsa@>KXslL^wvZ<1L-NA~L(q_8X@rXn&7B&yDlV*4fXqH#S?x_T%r| zNiu;&Lc_p=%(RjO`p# zVcAAwd1+Y$JvD(oz?|0%zaQOPn<9mv2+mW0A_btxr_ygB{vQkgM^Ze1(jdjRx{^Oi zqgPVOY@qs4&qa`;U`kJ!b~am|c`%`c(4ZhX4IbtSfYJI}MT0*u(E+^)8olu`(A&mr zK<~M8V)XdS3eH!vRF6Ajz%ezPlb?-fX3CUfwf#q|U6nY(7~0m9=xu!wYHaJ?)ltgb|2aVqnU-{xI)z<&)*zZN1us>XbQVH>|u4>zS9iGT6h7AeZ6lf$5zwAbk6JIx4C$ z#&Eq{PhK47rE!fnWqFOEE;I2m;OH@X55*6IKpZ(jf|F^xry=B0Ttw*PrMUSkU1t6w>OXKS$X|q8agR;yKQyoEiX?;r z%wN=;DhK+(G$2NDA0VX;^dr%`$jSx#D`YlnWImOk75ST$*ShypPh_}?D1%@!6)UW4|09jdo&ZiU`vHBtGyaH4YFy>nkO+_rAX z|Fk}TGx!$d2~h(VwF2CI0`3qEZkPtQvOa$i!C~4dwqh!?kAYJh~3eM zGDUFhL&5EC1-RcWHuhS83vu~Wvl=f!YP}Tr7bjcOIqEt!YK`ln_e#9X$pPn5)>JZ4 zY6*A~)hEPbmUkWwNSw)X3CWIlVY`{4-(Qt^)7zh_aL+8|08|H*mHX%99Jg_^E8zc= zI}VEQS#JgOq89!?v%cNQ<{F7t@75~NY>9mAHk#a**I~RBiUZL1Ji%P#GUlb_PzmA2 z0tOPpoy=W9)2EsI;tTbDWA>~eg;}_3c9nl;?g}hI6I7lCz<06L1@8U}OBq5Y=V8Z2u>?n3DB%I_>9 zqHZn)U1`~8bsxMJx&Tj!5VQKYnehbqchV$JLFT>>{W8E>i>NHLMjeaAv2~p%>~^gk(@9B)G5*zDBy~fUCV1zascFfakKk$a?EB zOiPgA#euGHQNu;Q6@*b+Q@NS5oay}IW#2f z+xMwWs>_(T4vDB7o5QI55!~O4EuMn7DYz4P9B#!p(~;tNLY1ovl=~OU-GOpAPvgn{ z0`_6#og~lCe~?u?8o4gkt+-v~Db!W$nHZf2lVVg+ zpo(Yd;xEJ~-X})!E~@wu#4s)fhTmN)MCh)o7#X9AdS;8l^v|o}zvwB-5u^Cr7{#ww z#kZq)^QFFgs80vsDHw=IGVJ{dY>~H z?LgI65nC9sd7&OjcaS z^Rwdm;=c#~Lv5@%xVCLHFR3p-4GJvwMn88MO$c7e>Y<=vewT>3sGo)lK^@)AR$~0)|%jeZVd#!Ic`ViK@Vem$YZy5}N<4Iw^@zQfet;~7hgXqy#u^kRDVDMU(5P<1?S));RX(-=O zyTe-GeZAo|NagMEqL9qGTk=Mni36EBAscs@)462_bzAn{(68K#OvQZy8M)(d>6rDz z3cW&Uu|6@MO{-Hk`pMB@BXRZTdYvL+7I*^;^*}5WiqKT>Zs2@^%NVTAC(PeMBA~B! z-y=s9 zF1I;8lTJ|53G1yRMJ;en*UQ1_MI`Bb(WQMWsC-gQkarwPD;Xl9mv8 zU>WfkHK0%K1)%Uym@9UoO>S;??d#~MI39#_AyhBh>04pphs{^-Tw98Lq;fI7D-(%X zhet%%?I>=69&-tkT(Uuohw?mg7-Ee!PnqU6KDJ#0`_eVgJX2f)?>`pOi>`r7(Q_WS zYf1F3>fz9kQCah8?(FSu$C=xs`v;c7pQ`y)Zk{=;a{&mpBvlL%Fd6xrsCcTMt0P9$ z4^f_b4cLst_B8Ai<={2{8aQ|jgNN5p1fr?I3!`8TO+pmResQ@g;$SH3^btQ-|mFxQ} z$>AFd(?c%ybA8k6i$RC8@v7*MgC{uR*1|xS?sv9-H#x2**RlM&q&!S1MfSaB*cwKh zYrk{PJ4nWsWv%OS7fgDI3$c&}b&_lCZ}x3t$q%ByLcjAYz(c+`$(O$nJD(|_EABI6 z5E4irIHwTq!mZ3UKZSD~%2|zXfTpuHmW!essO_}<*Jf47Zi;s??gs{*0E7lTEEtCl zNHr1>-FhKzCqSj496&)N@9-6w795G_Oiy)X9WcfZ`_Qd#3o6RBqtmh*+}ZVxId?J_ z{7Dd<7CQ!0Fb%hePKyhiRCHPoqSLy~V07A30^XMGh#SPpj$V5BZjj*{9-X#`o8!}( zkKzFBW-Ufm9imnzz%sqhQ@w(yxoq^85PgK6-iaT$&CuR_-@uM>!x|D!J*jlUv|;sm zrzU`9Hs)Y#usgu$r&NoUhOMx{X;r+lm^OM-ev^FTsOkjrSX3>Xn11o-~Km|Go3?dCd+85k|j}BoT zA>5%Mq}w>?=orFxK?qTga*VM?p|l4!w=ck3AbhbjoilkM_KB!`;Q;sQBpHJ0k_u1; zU7a-f7(Hs6Zjd+{cabIi&Uxym54cW~JF zJ!=ccuWw`Y;X8n-_E7bhr#F3`433^2d-ztN0ETZa^1<{UbNDuGWH!~=9KIc1!|?TO z>=vjhb{*D6+2Y}#ePA=8aL_j4sm5(Pv)#h$^^|*-Toz2L=spLyDE8Pb4vt;K@~A`K z^B*3`JN$=%hDhFUAK&i)_Ga&y($$MeZ<#7(hnH@}06v!pVgMg;WZ3*0K7gkQAK3$V z_Yr{stP^ygX<_jF4B+ipp%{q;6C~L5shDQnc;qyDDuPYto!XA$xh=*s2V>ZHCf{4n z*2#Eo6P&%ke;B>F%fMMAvKk#6!&@yih6CeAkHCoW6MY22(t{y9#4AI8@EV9WdfG&5@yMkrDmQ&(zO{_<`$9 zh?Ynt#RacwY|52WlxB<&OlnAWJezmJnb59&hWSjeD9?(&PUwDICKLW%Vl z*Ft~I7yfz!g~ex;`+b+15n3!z6A7^dWeEV^`K?uhSh-A^;0|zg;8*_))9v7sak=3vv$H0cmNR51+2L9kaXh z5P~sh3wX;&^8MPjEWwZKbbY_Zm&E7t=ASxTfA>wBvM+ecWl`l0$Lyz}cZ78zqh7eg z`*yQ+gF@tfjmX=hq$hX|diOfWCh3&%NVJwAB?d80A`F@F-Z3J2!{!!tNjp{5Il8JV zS=9j-MO!ZvLUq)I2FAwXzsyOMw{!;8yeU&7+AMUhP~Z;H;J!GoH8^-xq54Y|i$9M- zF(`2yat_*2{19(S`(($3p~m$EMif-T&DQ5*rMZvks)n@+zvon; z(~1;+ommJS$4)%6!R|yCKw3YZtCDc;fUjTbSLW;y$octj+W!MNle^V|0ev~Q;gwBxQ~PW{WAb=M!6s(c!0cjgHojSm*=!- zRj8mHa{*E1{#wwrSR|cWJib~d=~4*9boSAmb3@B2ZJE03e7Jn!UIWZ8`G`S1`y~1q zg-$(Mw7-FTfcW*rs=JQ{L=ZIBcn{}+1GIT+JcyeRyRsVzL}b>{bAw%`4TIob&5!4) zx*h;D)M33el2sqbkkeBYI$sx>i9#`W=SNO_F=dvm<|Zyd$+W0tL3d!Z_HISc8=-@D3g{6kcNTsp~g&f#lTNX}~mIZwsq=~k~m&O+vN;5A0$ zXLHI8ZG719((HB#Gl_sYc`U%yji7+qo0l~uY0Bw?c8I^At$uWi_x%=M(gUKz@7z*n zqkk+m$*pP>qc5RvjS@wBO5Vbl{jpF9o_{kn{M?`|1$N5p6-D8sz*?iHHq*Hg6tvO= zHzhnT*TR$g?jiCsz9dq9o)AFvMl5Tsoo5S84kSNq(K#0N5|gJ;ETRRWqVotrG>Yi# zO#4nNmBei_`#GP~%yLT0Ds7@YgPdA)YNv_vFx8Yc?AF$LiK;b6*IMUp(NMeAlVzff z(#Srss@}g2Vb15h@7?s8mva3q7WAz!N6VLndLZ zwBG7T=m-i)DquHlW>>YFR>Q8JwU#>=VY_M1KhE7W>v(K_Sa+Vl=a1xhjy!LX=bP{x z+%Z%4D`V%XxQDBHT55voZz#xZcAgWd3XE2C5a64)SzoznQIszk1BB^mZyKB}eo+a}D zaH<^bqi;rz^+y+MrQsS|oRY##j$5&-Hg+rDN2d+O`)av>ora~=KG+|;)8Xp~4k59{V1 z9T)TFOQ~w?IzHhJ%CWx=+`(#2%8(o>h$H1lUyCB6)AD|Fi~|}eCy!?vN7v)A=ZkOj zj&t{5mpyL;k|Cmy9XMt15d|=;0WbxMUSNRaG+z-+=kJ#3zE^&cHV` ze_Z1H;J3a)q;ZK;f}a=xMruM0g{YxE|Jk^vw@{;9&BS2dKsDzFzXhrp9{grkb3*V_ z4?F6Dvt2&K2<>rA7>9gVN)iM<8RKV>B)w?f+rPNPbE_M19(XPal+I^HbswVpS`w_lJqKHzte}b&fTZXZ*nhz;U!E zU~CSMB1+fv%(o!4aOTu)e3HAjp-pLCuJ7x=#M~ZYy9Tfj%XKUv`}hh9+3u$``Wt*~ z4{Lih34g4&vmhF)eTDc)?K{Tug#LP;9juNUHpyNN-jZipi<*W>h3(+*S#R|?nGCf7cS1l}w|;SR4m!LRdU8 z3w2^F6u|^M5RVh_Odg*I1Mp@TfO%;x7@U<}InM8&U00fzGZ2yLbC$LNleaC+1(W|7 zWb%O$pCz2hqnmaeF!ou4Pet%>b)9C;?7gK|N6-d5tncK@usXPeL{H}^a$lW8a?|2D z4_~Z{04~D7=f!Ewz85;(x_S{M|9{QhpR! zji1(IGfGCg=`FWjt>DnuvmcBvKwZFZ-x&(yWoHoM(1UOK_Qn1x-!h%AM)F0$y*=__ zCuYookR5Grc`KOy{8!2JjVCMD<+w)W^Iub+Uyc@FH}G$Zr$hlb6#&Uzmkg>S*IXw8 zR9$hT1t^2HbU?EZtOXoqBqrh+Ik8if_}5TIYe~BXtadF~Eg_86{utYW)e?l&eh(tt zdRBWJ?(o*S!HxcwJSO51rbEio4C{$}>9N~@8--cBp*D|QgD=)Er`xaje6{2?N~>5Y?U4+2pn;-HCm7ij_7x-=&f-3L9=eliewz>!jU+3$Qv4 zPhq6Q&ck9Woi;!dHF19f#rFS?q%Y-h z=7(Y9rO%855x9Y~s_9HZn?zqbEe3%fQTeuOX1;JL zn;8ZDbmZf7dJ*sZSifF`D7rWx=ZwUM0fHh99B?llMODKfHSvr=IuXopC8yG)FzNTg zc`c^Wq|(!a%-VWkI3BAhtKuXzjb0m}_`nZU+#g}9Wj`_7^S!GQ2DOb`FRe)c(O|Gy$;gNPnDZ^D$TCSP^^busjvl_Mj1p!Gw1JBRoqeGZcR zPre;S{(H;zL;lk^tD4SXgBAH77#M^6hpK#s=zNnUUldXCO_ojmoLvV^{*!Qt@CNIV zbfw6ig$->evf(oLQ5Yz+41NHQwhX=l&jA@6CVvNb54tzbhUBxl02{1Z9JA}}!O%kc zwBuC=*Avi54&N%BVe6kAOZU?m&v8mMou3R;ozZzfjLxW3`JUAIc4aVMl+GBBd>9MV z(q8;h&;UXU@f0Rk!fkDd*8r+ec4^`SJc63a))q$1FGfUA^Y2KPkx#RG>yFn1WndT^ zp)d`H^sLAIO&M7KGfbRmn*iS29LC^FOZG$4v7F~k=ZgarO_%qNLDK;$-%UE-osusK zO*j_g_-o zl}4(Y+#uqn)>HdBKy!akOwOS(2SDk`d+_Jxo%xRRVO#KLL>>N&T8uvz)#A^;5sgJ( zOCn(j7FPo;>zhM_J(ACUs!yENdvAw0-|0i~=yy~u{0c)RJ+bLA7}dLo>_GgEnuh#Z zoCG-o`l5BYq-4 zu3Lywr3&OmK4%c*zZA%K`Qa7;*@#DAnWjJv3xG^69LD=$y)}8&Wwjbjlf_aM%scq} z(NBQc^rhc#JzW*HzsGo0VfV84!|Lbk9lLU{iiAdNg55tAFR&`# zln(ceAJ9{7V+&SzIoA5?m}$FLnSH(H5}szlQH0>FXN3x;`$Jfc#`Zc#Q{HFsBtJz)={v8>}~vfw>iy z+-onV`8X7L1920H_+v7^(yUqy0bnH%aWnB}*kja&iJADlel7rAw)>qOABDFo2?x!A zaa(90m3_$^zw>yeaT%4PkABdu12~<4vHob@!5!4<(Vd2Hy1-uM*(ie=<6l-a76KyT zc2?&DrHgyO(t*|ckY;dE3!D=Ks@i{%P_jF z-fd-fqU=(~(nHMLcZLj{+R^2Bqt4}ctf9nU%f@v zb=OEp+K4a>(jQ$h6|=*Yjdrk#eqPjy4!`U%cKEwTD^;cwR<*Rr71!q%p(THxf4T~| zN`M1VX7+~*2f5`dG%k!^>Er=kg=<2iRS4|>dla@Cg$k+Jhz?QVEjI;*j@$$o3|mQw zOXg$+-Kb%h&Yq}{Aj?>v63ud-C$`!|GJl6jDvZ&FDE5iXXx6Q=;{pxE@0`mX6=r@y z`qnH5k`&SHe(Zp1A57a$kuhs6B}bUw!6~y*tvD6Pc}x2~z|nFapzqsah?$F?(qe{- zDV*w2=PEr$4lZdr5uzpbJ%DO`6TAYD+a#F(b*Pq9E9+`u8jiN$$(YvNemEQ~yTMx4 zlbxx8xP-|j#BYHo6NXf#b+^pW&fa|${eQ-mEm25~dIjK>Dzo)3mAP@hnNO3GbqbW$tE~P>qu3LuJW^^*Bqww6OT%h&?nL*{@F$X35d8T#>LeoH}L$oJoLVnDln= zHMJ={g@4lc=TP6TZOR6^jBU*H(q(>sb8r1}N&)sJd+3+3!|{SmH_68Mckt;7@;Z*2 z9LE_V+P!C?#I|wot8mZLxX0vV0MMqNEp$Qb@=#AY}b=1|GIlNrWR$#{QUbQ{t_9zPR z&xsjt^4YZ7-((&yYKK8-B>whDTKUw2AFp0ipLY{?w0~*BC2a0h`;vHYXq9z_C%(>`-8lI~_f;SCz|`iB-{CbY z3CL|A>iBx={v1r9>M~_)9y6iYJ>@KyF(QSa1t7xDCNUTqpt<6=c(UJ`awuJDK!L4< zupk$#<@EM#^cZXK2}oJnhM{TI!;%JJ(t~>sLPIe;Td~_P>E4i)o9dX8jtw?A>N%E9 zhu_Om`1NRi!rb(cxJ;csJw>?d9J%?gzA}$bE>pe`W~zNU(|I_2AbI|yOSg@Fp7s3z zIaNuhJ-Gfn@%4W2d#M%(FfuO2TUF(7WU8;^{%M?CqXV&7V>!4op^F(_{LU^5C{5?r zNxj|$)__W~67#)+jf)yta8;HwwLv_^2n&x3@I#-Ai4Br?Ef~hE!#mC%mE#9(#j#Iw zCmyZ-^EMKqU=|jePpyCFv(0wiw%L#C89q^L~P0zEz#vt3DmGRZh`OJfZ(F7~!^W`0SlW&^3=@Eku zci3c0zn68gO0Wc~tSgJBo9nDKGRzn(=|$md#3gskcA=JBOgM1i0Rue=8yy&p=YPRy z3+IP3nu>4Dd?UFrqnca`R8*4};|Wb(hM#cWq5g=;HnP1eX}!A=?G17wzkw4G?B0w6 zX4Vtc8=>OJ=vVB*uVj}~$S$wEBkaO&jxJyqIU7rk0UC1pt)a39(*U%-lDWvW0(S;V zk_`me5UyhV2WA6U3#}c_5H{!saLt1tMMQqZZ;sl2*gHbTkM&KQ3|rBKtnXmhV;HJp zo=YhTX>njR&A1fPg7@9HjWH0J(9Pb`G3Z=IM^`*z)#1{cqm)9vH4O^+-B_r?39Br= zKK>GD$;}Ne^Xydnk{0K0li-|vDG+f%Y)%RnUvD8AImOqVohiOpy{qg-E-NPamUY6M zo>1~{-!k6ulvs8d!tnRN6AydEmnG+!xrpWMd5bM!*gl1F%tB{pjmw-=n&|S2LuXAn`k15(h2VWnL&$xVY@%Tt7KFj6 z7OSqYZQQ=s+b=|xIF}<2@f>RE@JNhgLIFk$`)4Mu=mj4V= zvwg2;T1buaIP!i3C~{^?P!&N?ATcIjD7tLmO+jF8^J2j(ow&Old7l7SPE=q|j1Axg z(HI1FQVe?O!=H26UIv4!Ml+y^V=gY~Dd z6ynf{0y3*Xq_fgPjNDXD_D)B|++U!rz|))|rSCxJ2V%TT=YgkC6Q(%<4s;?u&Ps6` zi2rvi)^VnU2cn1FBn+&QW7P`a&LgP#M%jnyz%pPg?q}l8V0ZRI>?z0WS7=W&ooA!G z%o}<3Ur~_o2OqAGzt>P%n$3;?VMnBd+;9bVM&G{9j*7uO$tSiR?E&@Cbs3$d>qZ9y zW@=@m4&N=>M=^bm%7LQ74;+auYx;K*B1beBYtcs7)uLCp=BStznu&9d0ZC-U!UZ)I zT4Ju6dZgZ4u^K|Xca@{gu&UdHRy{aI)ec96D{9r8j36M6ic&T8FR9w0tL95s)pI0V zgUYT``Z*LCi?A7a|H~UaW#d~nyZ^>N<8P2LdKRTk>s2UozqWD9y z97AVER^2VM>a${0o$RQ%C~DQ>t7j(O5?QrYafIN<>Z&=|!U%rfHzBRw@D^IFR5;GT zE?4#f7QncCu@}Z==Y4FD3mEPm!xC+R!}(EcR)z@+#)GAdIJ}pvRDVEuntpET z9z!mC-xF@+r}&*W)X1^>tJTlt{PEgyCsZCX{5e#Mj{0xFeP1)?Qc2?1=!5ru?y%ndIh9bUmVhaV1h^rh$nkNrv#WR z@ZgMU%PTD3)e<4M5I9y>){UAxfaP3u-)tfn#>E+KnvHb;? ziOMjn43`I5CO(QVLDp*>Y@})lwLt>*z}bCY$UF@sB@fRHP{1Q#tZBLk27^? z;zGPtRX&NA`pW;}FHprCD0tTLP4FC}@g&5M9Sc+C2plzwzB+D0JiE3E&*bqTcqZT_ zi08g>E$~!xW(2BF4^t#PC{)Koh+C7AY?79WfkY2r}4RaHKXm-@x)trB5EQ1!P=XqX8Msedbudsp0WV-kO7i;3IT|~ePa}wV zyvFXJy8CAgS?kNh1Ix8K&ZO`k?xEz`F^&VtwcAl3AlEKTwq%eu5mbylyx~kQf zH=P$dRkcrdCKgBuogJ{G#+giSx!&#Ut}y-mVyp_G0!(EQPCzjwFz4d{ri(k-nDzpu z2Q7i4DDF@r{{kGKshbr!2D(n_4WI}98<>VbD=GCCD%O;O%&2RFm2!r6? zk@QVa@T{%zQ5vr$JsC|&`gg{JFzj1+(F}{R^#%~Jr3t|ZAmcNZiQg(qoWb5 z4zyGR%gX!*1iP~%ntMUqKOoozgx~~(76j`+6oVTkoExtl9Wr|_O`M3=Dp4ToE31)P zrw2P4(-Wc|>c_3J=hZ#BT1W5bRz_EXONGMyPHPrEj}B zDwcs~TJ|lpLJE}CU0U{SV29{hthy*-cOtLdXr;fXz8!zcKj_=_;8^SCzfi-$%9I*H z$O42GeTx=HQg7^eVbnVhubO(0&BO6lB??-7rGc{G-Ij)}ZjOp8(Jd`Wi8Uxmd3#C( zDYboTCz7pWWsw$1O6pdMl!u=D4@h|%WT=(#=RY9jC_?z(A5lmNxgAN$iRT7MX(Sfm z&1S=S$jnhfqp8g>GD;r9{Uit7&nuu8TIWVXPO1xz;pM4Pz3BB;E&P}D>OhYvVR@DN zXk^5If3|?me9(iFU&PbIYF7$Qs6U0rD%YX)IbGQl+Hb>}vK@DI9CTBD#pb#-=XWSz zzSk^tJ`Arv^DoZ{gbx1%HYC_EwV8Wa*|o*>qW?zaPgn$3p&MKBCsh;hXZy}A`IBP2 z4#`%<;cBS!#cr;77qx4}pCtpypE`5zW&c2%`V(!le7{i#rG?9=sbVF*Z`!h=LRS`M zqyM49UDaKfp}=F*>3vVw26F2YQh-pH$plB%dF9f8L#PNl=X69Pq2%5f&kD?1G$&v+ z>EMBVMvNwK9B8!s9i_yVkfVGpk`nt zSPJg?yL9`tgHWNPM&ZH(qR_|!F{v=`{S)iqv)KPg9tk)6t zQS7U5y9qukFeirj(ZRjB61*tx&HIa#Nt-2|=r$(_rIIw78G>fW4vTH8{4eu`T0d<7 zwiTytbW@LCt`C91fP?*jOXtyUq3+d3-PVuTTHD}AS~0)($*`{k*r@O-K6mQa9`kAeMW~iSj>gRg=z%OEw`ngp7T&R9VsUMH}$;S^s z4^?lcs-Fz?(?|Uriyve;QvGyOKgs;zo|t(1;<851pWWbIQI~5LKniZQ=F1SHQJM|4 z?#YeawWqa{E?b|Zy5fPqxQQO-k*vD*P?hfioo_PoMdiJ368}M$nZ$PCPwcV~e^rdL zo)Gb^8D|U;!cEjGfCYqkvc~q!KVx7!g!#0~i`vL6J*??#2_O8_R3ZGM{83=TQMwhl zMnx&YjgRPTOAvH!Yp;lW3eiEZMBEAJGH?}QLK;blaq%4U874jG=&#qgQ5{X7i(Tl^ z1lw(Iyqr5o{|J+*H4wo|H&{o>b9echB7Zx|-vs&l7mvbQ`|#KH@S}G_YJ`9Oor=bw0LPH>xr35dl)S&Fgu z0R|ggX*zk#lfFN(b6n0qfAdLrUeO=VuOLLy-DwgSsPgU7L*b_aCwgzW^|&sS0G0n2 zrObf}Q0vygTU`8=!W``484yJ_otVp7dOy`Eb3R|tyjrxcv%rvV1;U7^cYz*)RI&sm6qg+R@?F$SubJ^g&G=U^8!mx!h$0aAzYglQ&JtR)z2uisW@j z)g<4-NAXvbk10^>yO{hqXfJ}*rNC8DuG`J2%3uxMT;>YqW2m0y3=Ir5G4m2KGE{N$ zA{FVJswH*&f)e;)#1%n}f9QYljkfE$tdw6dQq1|a%p9bHyo0rcWDprQaqcvogS4dE zv5&(mWD2*h^*j&xY7i+Xp>!f51^uq73z=Cpdl09PnKc%B%md?Zu>SfV>Tc1%`bq+c zlc+@98I?#k%_N1af8n-2;?btm$*^2@S`O1XBaO;<0qoC7HVb4oI%fZg)cupfTKxfB zEVm(_aM;IeMobPnst3VU)-qF&vg$o5hk2pgM&mHElj5+hJnhe>6b3kK;r&U^t zr0urT*e0u+PD>K5_{C1kVcNc@==2Dm1^29m1^56wJ{AR&=r{k|8uZ6-!Zn@uXuWhP z3vmwGW<8@Gk=WsnZgJLwcnv#9!S zM;~$ScBI_eP2S7`;EJ>~l~yEgw+>cm#dt%o>|En#B|?oV`q3G=MRMKKg?M%uH%^*} zUHSgGh#Q*Sw(Ky>aacuQx_HN0y+QnS6Bf5=Zac7Uc3oL-7X#EbBoUtimvO5NEPIb& zShB3i51zo`!)xxwNx?qi6vLO(gu#qAc7whq7@ z>B88sYfyqBEfv|2wo|1MGoHUN09!Vb>NMFcwhpxYXZDakt0_jyu-~B_N{?StYuSqt3lbF6am|iI9 zp9IofOkWgCA1CQ=1k%%)emm0HxFWm$hXd(JOus%@{t78SGmviGiu7}W>10U6M-8Mm zGQEE={TfLh8c1Krbce3L*si}#zf{Wqb!DLaOy3+#pC;*_1kznhUldHA zF6nPD-E=-8%hFBO?MM$323iKR=fupBZ&VavIK$Jkaurk?HwUx0R;^@n^Nj0@B#y^R zpgrG#UNxlllKrs;apYdZ7srIM4^br!F@)ITa8w489w-BA)C$CAhY+48qZdrG;o9M36e;*e3;@f<*&XU;(u?`WZ)7G~gE@ z>Sda!cOpPn@Q9-d-YjPvJ0M>TY!XyVsaQKI?!|;F2SSy#FrZvRm1T-=^$9M+y-)Pp zx_xkPJ=!tn5+wMY!!e#Clxpc?+#5iQ9+9cpS(ues%2mKL-!xu6`8)OleF*aEnEgGTj34Y<>U_(n2g4I_64rEn=jaKbKpy&W67Q`` z=Dl?|ZM6=j3>V`O$o+De%mdFjd!e=mD{|BnT&U%lvm^{OzUiCmOca5^dbs3larG6} z+5&j@Wz3~lO$dbRKv-^ETo+fs76q!C6vbGiD%Q~g{D z%LKL1ysGB}iaDQX1N(CPSnd1c8Mo|37j92+Ry3VAwNYH(@msux8aX{WTIVd4@4O$n z0a&B;d2&nD2$jdP+>SL(?R%@DgsJ?pv=@~fZG+|>zE>iiHBWyuN3JW1&V)eh@-oUv{fVV|5vJ5h)gaClR| z3P`Kd?NDZ$Mk9~k`R%2l<4i7?YcbBYFi!~MSHT2ufN|DaMo{7>lbN%{IAgcTK$~+( z_&|HoBLl4*lV(VLJtFIi7-&VZLBoO8516WfHk~*J*W0lM+5jtLprzwwe*;Zjm&gvZ zyrX2CAMA21mXtq zs4K;B-w3@DHN94RPI@(hWPa!O7hn<8S4Y;zQ~9lJ=_YF_;lS?j zi>mLiSoPf&v%aCR>XShS=Fsb|vaAj5GH_ zsBpL+NBs;^KPRf6-s-29`Z-Mfq^O?`>ZdJ!us{C$Sp4W(KWVB3c&q3=*-VY2puuM9 zs;5;DAuc=-M2Op)VL^nxXWUS0#~aujwYKpu|8aj5S9x5M1|x838ty1Uc->q(u23pM znoI-XJ;vuQ9>90ux*_8o?&;#<@L?%9A)NvnPp0)g9mz~*6=byxIJvRH8h~pIT%H4<5vr=5FNsgV^eC9tm!H5?hxvP6S|&+sG-7;@ zw#WBHSixGW138A+IW`A!WHCo=AP4nbf$>}*$2*Yc)=cDxKv|YodpWH}!}4R9Z=LU< zFk3Y=P{WCK4I=_I+{YS@ic!Pev1+(k)$q8k;iHdjI%L>2G>x+9a3yP4jvUe2FfdjP zhpQTH(ly)^sDY+@q0-zy4JWgP!WcDd!IX=A?Vw0(S5gu+E>R$ugYIma{O@96)7eR5 z@e}s*r4{5H+(CwJpmB<`M2-vQ6qnL`V8BCEs#^doipT!Nli)?dk%T+oK@fMzs=IUyDtJH;Wxn69s=KF?Ot@sf?{k;*bXWE3I)3%) z)vNbj+0NgZlClOy08$c*|HF902*7hTw)}av=Nzf`$%ZJkLJGN_TDh_1-)hLVMm&$9 z8ADPbs*TxU6aD$#e}%T6M}%sr|ybPvKzMXPi6i#0*`Sf8%|+UA#etWO_36NG(QV_PaX5PPRDfD#5g zOVvQZa+tYZ`fV>9bk!p+1$rtseou7c^JryX%888Dq;1xFyh-i~Cw+HKR@{mB>0gS5 zTW;B0Ii{Y6#Rym_Xa+qmvCFZkk00;#OTP2QJ8r$SpDN9+9FPP(FEuBNB^OqNsByPW zUz>6fc7^>f>F)x^vVkqkiJeqHP;8_65w&B6wMSorCJBy_9fWU==?p8*-U5#g^)&Wn zJ!M8mEs%7|3_1(i($V}2P_1XIYQ;?Lk7~uBS_@F@GP7D`@AdnW&5(>qMvX8Tu|`kr zFl&SmDE>12YXDBxXs1zvv%8MqPITj3Kt~n4PHWKC<3X zoYiqop)^jytWE|2xC{P$5fV8P!BQ+6JO9oj7>T7+S*qR#R{{Cdm0e8TKHn%bMTZ8o9Inqh_@I9C+mz$}fGDcgTxZUA?c}*JMx02OAaGv6rv zA@VVtT_nlwH%`OB#1}so&25}TrjPy9n4BX?c5CqpchaYJYcJUeE8&+V&8gdD7j^|P zZo*n}U7wMrJX3rJq_%GmYM<$rRJVVGnSL|V*Ba@TOt;NS4>dqqc?Ic_v7dj1^{FZRRNoFhwEz_GiBhhfaGYZ)Kc!q(r5C)~1%4O! zqonSp_u23pol*K!+?(x+hnId1-8)XtM27JPTb0W#%QeC%*K=Epa^VEz|61kh#d4J~ zsr5=lOdBDXT(vUP?KJhi!wR%)6AHAn*Fv)#*ebjE4D%c91=?H+w39er<#9)PhLVcm zsib09LbP?sHC)p)kkijQug!2@?;2${ZY|ygGV$4?&cuRn6~(b^%4(@zZMRSR2CKKC zOR!(Lm+M8jutPaTQ;K%ua?TgL2XZA?+a^6mmcO^rd^c}q^Vy8~A$~!y7V(1MU{a@V zX<&WL!wQ$2E`3JM6|dRN^=yX~KEqeQDu#E#R8u?)p|DGvDBsyjWt1jgP)`gRt@&v^ z-^6mjULZ(kU}RCcD)aU+^1dwda`ots3njjHxe5RBWr+Hw*-{;$#HXy(+nIWYEj0o5 zFIK9LsaM)kouR~BD|Ox{K-Kvo)mC-We01?vY+HRHD#}<-5Hi#BPY~F_r$OMgb%?P# z(q|w)khJVGiKK0th)SEJ<3}JH_CU7GcaM?p4dlaPM9707@7GyotuNSwvOO-+B9tuw zG%%Zu#sZ77jd|!n+7ZlW*J4nu*VnDa{zh;XhJbw`sLcJFn0zs;+D`MfxfiJ)6MAKs zYEj`YK9v>LH{#Z^CKsn82{Vq*Sn2C!URPgKC>_KwlPxZ$>2&53sxwTqfB7qU z$f`*;{mAtz_4;$#jxMPmX%*kSco&9i{I^$zhnQd6BSx8@-PdGpPOHJh{QwVZwr2xNZ0jS_(sh!|x53D_2Kidy!CdTNFo=RLE--DNHY@u)r_EsEsYYqy+Lp!~EHjx8 zgw6mVsQF}rzKBJpaOH_WSj@+;7yekb;;ZY~I<0ia*cw9f_LBuDGx8OSe6~>)##x=d zmlIbo(abv*d0X|2S=f!pcZ|(;3Yf=wJ-C9+W{n&bv7+W~p+4_$;hoK9^~sX{yhYaj zAL}|OX$teT`Ou$_=0jg`J_{y3Wqc^BqYu3=rd^BA!DzU{o~w`~_ir}vk5FF`dv21< zx53D_M&z^g9EZ7y{UI`Myiv@jkvC$`^+LX5?717kTG#6zS4qInjOhUIZ*nFKCTd2h zdv;Wk2gHoILBBu{vKo%zAv%KmSV=m^AYHkpgN7R@^F3BC8@Ph`tQC#fYR0lAR_5Jh zCf;t8^u4+cN-F1L``DU#Z^VyS zGm=IdW;iB&ZRjd}gL74-8?AA8nIA`cd&aD%+oY{EG9ULAFjbENy zMBXl~x~F@MCl4Mz{=41pQN6P)YV8x5o(r~nv|9JR`qHW_#am^@k8^8Pf8Dp=Q?k9F z3tWWa8R7n9_gm4y>@;_I4{xa29a^EhUY#|d3Mu)gR^B#o;>3MT+S=;>%;K*LRC@&k5;5)p+5VIHlXG4E@Z|=$hwSNqYsnu&sOk!q_(Lv4jexvdp(i6#6(ap)EsUHcIW{ziSD8PCF_f?^K-Ys~-80A&s&czn?uHo~jpp?M4#u?DUs}we= zg%^(q#+?sMAewPp5ye9&;P4}M8v@lrDVIl+&TpQAhgwbCY3K_|SrIFb6mMJVJF{Hv4&U1Ss#k6IU0^DjYhDlN@q^wiU#nT$qxmf%~9jPiIE zO{|S`oX5{EGBlC^5H*rR$8|G2NTuW6)m90r@b!B9Ymg-m=gWgts%-LfWYak(tv~L6kH$i`*5ge22I|#oJXIL^ zXavgU2B}4dCAA(5L{FEbmhgCcNoo;EEwqy=IxMMjlG2xnQdNM|LP@HKq;l<~us?Gc z^Oh`d>FZfof;8zea!<#9Y)k?`jpzF8H zwEZw>BFiE)Dbc#ftH7|ZfW=q>&!Synqppa>Sa3`#)ZH$j?oNfeJ42+sg%BCCj7K`s zWnq0mPZh{Da4QGDf;g3{c-BHeyhv0e38zo7BpA*|i;j6M(6P-p zdj-qV4SL0UYajz*KN3&VvI4W<=vIX>@4yHJkGmBt?v7NLdy0O{5nYBh)_ocl! zFSA7{dlV(|7KfbEPV)t3CAsC6S)d@!slvyZBL9!oHxbQE)=|~HpKXZB-wOLr94u`VXvj~hi3+Am@dvoQVmEr1BaITaOm^wH+d0JPdLsD=ycdPX*7PzJQ zC5n0TKhMf=_bG_ayefIx47Kv1uQK@mSm^g1O3Aax>w|qkF5RjpEmKi={rS0FqADPy zs{u7ReGLj%r1Wrsb;2O8hbtp1c(+pSM^(T?XW%l!iLf)UOz@>lLY75Jf7U}Fmz|RN z1S@~515M+cn$9-yYO73B!ISBm;742w*b1(K8!tcz=Y+B!Q3wXv?fZ@}SdEn@jG$Yc znDIO=WCAG|H;TY1Ifn(liikSSepwCm?p<4R;fh87mHzg}`hD(`S zyqD{QppfMtD#it*>Yu`1hpPWj;?EZgTaxeOWv9F}%F8x+*&;9NfbPp(x^Jkv>am zUk<8gF!v&T$75Zh+U-Z6@1{VPi4JsJGuC~LTD;5U(|*7yXz6<)8Axwp%;R@E)mnEF zS+}eFe2Y73w>woh%2a<7tHyqcfv-$Y09y5|GdI997q%p&-zp{NVmz7WiQv=&sVags zd6x1~LRwZifTL#E@&v}xh>mJ{5=6wFF0PO_@KFJ)CK}M-{kW+(^35Hm z23o%lVdbpb@-smqE~-fw=+P1vlLbYVnXmVXdXK-G(n(|hgU26&&J>f5(=3WXXMjbg zS=I`4I!(O@<>}P6JZkV%hr1H82l_LyC*Gq_cM8@qHN!eZH7%9pI`DtJqMH6ieS4gV<5t53JYQ9Uf6;n~sCy@Fce>eMOEjtO4hc4Y62FY21WT&X+ zQ$Z<*ltl4i(U43x8|V{nTaDEkT&yyGR_1PJ@CS4tMAJO#-De0L`*@rWC2;E+1$ZW_ zni~s_1|Lpf%3LvZl9y4Xsm;SEPNT_K4==1EGFQS10dtWNak`6FyT|F%R;rl?z@2No zv1|1M4+}TeKd6~IU?~MwkS686(IX5hvn&tPH)yD;)mJbyGKB@0d2=-pqqj zpJo4XfsBqqS+R^@Yo)r!uT-^_&0nL?MtSp7oMUCjk+0DD;|>*cCkbD~vxV;-0#U#p zQNOK1^a-311qRYcHG|DRVP*RE!Ow7`diweH_(5gd+g7!N22$;Y9S6M}i)j%6BeXJ8 zyfAf}ET^5A(V#S}5!)n=_8T=Q>NW%x@c~sX{!!h*D^vA(GpRIaQ3E9@b!bO5fd9KN zOS_yC5tAVrj1q#T$}@|$AvtUCN5b7|-g?})wOYJYgXFYs3##8-$-T z9cn4!Q#=obDM&nlA6noVs1rK9F^RE@TOwYO;`_Dx;2U zjH~)6CAH*)n(Dw!L2u!on(1~HpcgSxypE!K`b6b_i<_oZ$R`{SWC4BJOQa{xpSlMH z%hIO77-&jLoLAe&A%OX0CWb(kD3~8o(?S+p1^kElw2DUjHrwB?o$LqrIR*}a|0@mr z`y~E_tGhRI@6>0*Ek{8OGXn()FoaF4e?iW~3h~f4cvAATi;X0RXqRvxuJUWUyl83J zFje_)Q$!3-Vil;9Vm~xph=#^|!!-+<3HT80n*RzLrl6}Y^Uujj@o;u&CG<4>uai1B zD+Ow%IJPT~nB(`e3ErG#sUV`)&46g<3rxavp8<;=6dK|iaEs<;CdG+5DE;wAh;U%h zV)>&NR8VP0yXt_1N>jby)5gs@af3eVQFJd#*2g|RSMbCqZL{dhJpvXbO~~F1E3aQv zZGxj{Cf>Nn><<^Pvh-%+c-vvPY*WfkAic>4a@4?6Ddm8LcTPx{=?%fw)Y;z5P0G9`07!pw zI#?Z@i9Qi9KHwwVx--4?iIMOTxk{Ry@Fukxu;b@C~T;23-&{TKX1VI}RgB)*SxLxDsuuT)olRaK@)!x}ltbYNTKJ6ZdZ@^%0bqL+$b*clp ztJVAQbF;en8=mJ$v9L}ldsX21)UN1(Y4Kj|U(H>-nGH(WV}in0-s-O*EZ>ka$vfv) zF)S{ip()12dS%|-$f6fdGsXp@R;WSyxPW;GAl`fqrl$Nvu3^VAF9!pBkC<|TIRbDm zKLWN@-59UN)-q43m@v4lHehT1xoS{N5=so{E^%IBz`Yy)FnXdPR3?j@YS4>W_nYW~ z2AqWr?49Pz+@7E13yw|l2S++5Rv@~1th;=u?$xex_ycZ-SL@;rUalv{3lketywXqE=X>ByvxSO{}RbU%c$od!v!R~AHMpE`0pGJ2{Ps{y_}*{^^M4ysLG(|k4=YcDd^6PQ(M|CrDveU02@0+2`_ z^L;ehGE1Q6ll&ww{$j*(YGDZiFkE&e2&C+S$03;6Nj?k)aHD^fP$JMe`4IwSq?}vo zB2_)u>uR<7%a~Rj+?EYpV6dTy&$EwD8ySq7t_Bl|B^Qe8D>@mXe0ZOYEU5Y{c5%AK zF8+;w?f)IBe`P1Wf>DhA{qE5HTm5THM;%=KOUxm9Son+v+x750;T~Syu7}UFdiZMg z@aVgY9==q()TW1<&t(6e$o?I`j7I;q?On9xEk?)w5gof)gzS!8iT>RszF+J5$+-S1 zu0aM;=r*>==>XL(~*&_o_#W2JouX(s)k}Ar<6-oG6 z&LqKovAY>q$UCsz9B*wA^9mWFd?B+BQ+kxd%)pP4fg57V`3G#*S;Qw+5+11Kxbwx7 zdjmP;-db0ML4nyYju!egb+K2=UWDYu_{ZzQkpW-KLT^xAGBPkaX3>=apL4M{bDdI( zu(}Y7Pffvm?r1e#uIH+HAhbP6m}a=1LisW9la(IP=wv5W*vYEXq*tJ9EGNL^Xwm}NAVOVzH1(4|7?%7y@z%_{^hw+o`HH{gZbbyc>k7nz`3 zpVN*~PX8`UYE6E4t)P>&{X&bUKlTCSe5of6&et&l^tpVZ2Io_kE-NF}^3VYV?nyHC z3B`W$%i6<=WKZoJ|PEN_t)`tRXRM1&747tz!M%jrFghspAiDlcjB zk|8fHc~Rvh8<(209Q*~7FU!T18iXR;*3z7uoFAgqQ{ss)km(D|bSz85bN!^rU&IhFd`JET%^L{u_ZmIpeZf|gheD!43>mr7hjqnA~YdTm)fE~1*XWerRN zwTZPNv1^pO@-o~)3HkjCRBFRGNRO{SNF{b>^=35=Vk}QfPgb!kObaE>{R1r}eNYO~ zhe&LRLCai~-yNo<#zsM%8_p-j%e7g9lPSNdS{Y#>2+pY%KU>p1=Sb;>>C~1ChGsd6 zCQ_?7{!u^Qf_KkOH4<@eZASTO7Ve$rSgL%*XKPt9d*(<&sAbshtK zqLTFIw4yJcTJ&$R(RXr7Az9VXS$nV?Qc8+R0U}EpVhkdd#EyIf%3r6?;Zt)3&Sg<} zJw$K*IHreQk7xA(U)>LPnl|)*A8;15iNT%s`VTQ_##j4HL_H*lWwO zZUd`y=^u631U@?onXsS#M;xhRV|MDbQE#!xCF&PCy5inzDoOKR;fHVLpV*PC2! zf>e?qbuQ2I4M)s~Na=J^`h%q8G$;vni^VPrP0?u{Fxz?p6#W_Y7dDXdFvlDfudK%) zRSSqw87{!75vrn;J%g86h=qSe!+ncEY>r%TRStJG@H&UJtNeA6(|ZWrV%b8bXgLm7 z#^gQ)f0X*11>#|FJ}-LHh}JkA4D!sJkLblBhrp`d505cui|pjigP@84?!g7(X>dL- z`hJ6+iOZ&iHhRqQ9#ix!cno@zBGMC2gY$XOUv5M1uXcLOA?eK}z2JNoU-|4i(w?76 z+8F76Ra=n3-(pR)+mwPLx3X}sLMvZDdV$vkjlk<^d_C~Gpc0(#P(}XQIy43Qbkzd!wMG&MK9k2wZ5hdtGpoT16QCDB$8z$7&{%}6 zQOYUm&Dq!?d;4VZJNzgsIG0bd0wpKseyC!*5e>cJKk!Xe!OPBv!=yDW1~B`*0V!EmFIhKR3W z8`)c2#E%R_r%Nm2?^La+7=vtfHQEh^vPmcl}GmeyHJq@F6n zFB7}GW3deYvnJPNY^*U=XzIoKs9ZwOuws${)cjS{quZnMU;%6o130~NC~;UH3e@jB zju<)GJTWbTA{Qf5`-rZuLwWVR6JRrkrg~+|UsCf;a0t?-p@D z@>3vz_ew#)P<6msp?=BSKP^qI-U%HC*3vuF%!BzSoBCdq-J$QRk@^G`3bF6Jm>3+* znbQY*;V*)9IM&`R@oHwv^b@5N0M81jRldgI*3BoW1NQsT;dJ!ds7L>dHiQbr;nr5; zGTJlvPKPq@A2{$xU2ZP;m9Zhtn&I`2R)_Ug^;dD;*uT{iYM5^G)arl7dt(z)w4PW% zs1E8d?70QGy-p#*wrOLn; zTkp?YJ59mj%?mYLv6p-7&10sI@9z$92yR3&(eo1zPv{j9YoeY;y*iC@`SgHKWBErhuxow8FYCl7OI2}^vzbG=af zIDZ_fI7csz<7Lod{=H$bLrMM82h);C(9>OeQ=F1o!yhp}Dmjfx>N@@&;lRzm@hj)1 z1SR!5KDynhq^{tPp}ml%n;DaE)5MIopUT9k)CFF9bqb#Tz+cy;;@6K%pL#AzllG(1 zo4Q1_h0+gMnkBp}dj5C3{4b+b~lc?^D!saI0BDK*<( z!S8XOV0L!k#AJ6L58@GH542k7tDuc^K|k48c%?FMRpC(HCMyH=LYFddbzwShQu))bgV;iO!x_TFuc-V<}T5NgT zgv>+np;d)B{MzNb#fMfGdik}Bd5aI#6kfuwp$VKr@uBL%0sLAY-r_?m3aLpg?8@6T zW#G!fZffSo`3`NwpeE^K07s-O02FL+B`Y}t`?b`Mpbdo*wy|)mSxL93q-s{uEh;(K ztfX61@*K00Zc)ioj7nacR_Mf@QwG>2x&eDSU7EWXU-df0E{-NPx9-4K*|e()Z$^!k zveRIw#Ydvn*{C(P8H`7w=9i-8N?8kflet9gQ35Dq|6@E7Ezlb+pp$k z%12VX{C}J}c(?;*VM6OZtH>7^SH4WFO}-lkJr>j%o+{`wT&HUOx`3LJzJ|eHng)81eEQI-w0-cq{`S+3-?lJOW;7Sprz+y<r3KVMY9I+x1{M)HPVShd(EyISrfJ5mDa3(Ix_cTe-@t*vnFVuoYx64rM7-|~ zmGKw!c+-8sK|)3B)#6gzfdsgA!s>&3Z-l@s&LKx_qA(zHdF_CAld&F(Z7V%)!QO7_ zH_Uf?FN3`gb+%{QN{=ZiH!xQRY+LD(k29!(%P9s69z7Ba@neha4#qfQ2LhLk92BeM zpb*RmgJLxYMP5n-Cc0KIQ8(U|O!Q(B5PVUv6ZF0=aW0_IhkUV@b~Su66Q;A_0;9|0 zn)(UM`(Y_L4nm9Ike63r_*a1{_ox~R`5(QLP!25X10#2W*RvMcR@seHL!uATxS_JqlmTH~Lu9fgZ2TOi6 zIwd!d4Tcp^u?J+qOPW^t7n85GL)ebIFv8s0f?Rwgkev!}@t3`Auq}aB@&s<^6bF3e z34E!j?}*^3i_x20B+)Vok{^NV_?p^9Prax%r_5OVQ_+HT+~TV)?2FrBaeRil*A?PV zb>RuPW!;B47(eP_1eeJ_K~qzkHldYpZ=?RoS2pSw;k7VzP6}4T+P>iA7YeN}OrO%W zc~1~sKWm8;#w*>yG108Zm9ZN!0x=&rV`Uo;bGQR8w8NxSZy?PZ$aCPIb0Y4OAj4N$ zZ7eiRByj&-ly2wGV8g0xSpJeD)z=BTZE|pjTh{@JFdJqw_{&90US_N^_dcuucz#=I zSPDh1(IVGqcjo1eY2A3T8#V{OZMqX8Ec`lLbWVC?ytFvwx&;=eIc_C&+HU-r*=Rd` ziHagUX)3khCyKub;%_JZ75~Zg5IEH&Xi@W$s1L}6E*gCT-DwlG(pXNbmFk=o@(2l6 zC7uD({na`qrYZeh4Y<+uo>w9wdq~?i_ z7#TygnIgy3e~Ffrrh%|aDk5q4ZW)#u6yTGfDprH9rMPI7GG|v6q!29lKJRHP_)59T zQiXvlZ8`Bi>=@Q?j~FG()*omRr(?1Up?ut%m5|#>DScbe@MOqG-Bdh!Ry^v2fOKgW zagob4NGKata1Gp;b%`;y5_!bxtuzhasM! zwCa?8Lt^sLBA$iN7jl2@Bt|%zp=wTFrl-oM48@-TE1ECZTOC($2C`MCaJ7Q|p*OST zAse18_T3zXOupFa=B{*^O{4QT^pRU&D;Es1Sh@of6*T3BD`R#j@oWdz-j6d8@%&X> z=zk#YeGDz#m;E^N31viv@Szd3DL@`(0lK0q7oda6+M0TY+YLdL z*;M+_;@z1vLE}!5aNF<4__&_3%~M*M(L2^E?@i=vn9|(AA~6C{j%+NuWI8Rx(J7!W^FT zQ-XANkTzNa)amH!J<5!t_Z&Z4qS>{j5wLr^)h6_w7CO1VX45~vvbnEXkY z3ymR*Dv~U!h}G8OFIG$z#c#>&Et5sL-@ue+u&AAwpi#BfEb42)ddZ@)!L<^}qBe_1 zu{=lNd~`Tj6kKCkvna-i4i7c5sHVjK|FNiB?`*@ON@7u=|F>9FUksP^`onWOz;d}R zuq^rvSl)Jx;VObo#l)TL)n=w*$_APR7}JQC$KeuWfbo&%1Q-R3{`I0A(p4`ANV|KR zU_AY13(_L{m0>Dh2Lu&Cd|@jp_ev@UPBN)%zsUq6AZgB*HdDr2An_jw1`>fW+G)Z{ zIu)y!;2Ts3^EeYT_BV{}yZf~}ox(YJ9utEeuqar!qfIhvVS(SG#_lh=?7aMwr2P=g zV@k#om!VB~3RBAg*p2#Erpty4I%ZREC93>}A!*H5P(^nF{0vsp7+*Jn6;`8= zO^|(I>A>9QOh&8ANgU-6Ca+Ua4jTK3fF_GUttKurDt$ZH&8;zLr{YTsaN!i0I0ip_ zTKsrE7SvutoDB>wm>+ib1}4CcU;_5iVO`LpGes|4uY_EdBV;p%2{Z${D043tZ3GJ) zl<5d&(fcqS*6ZKRt_?LM@J;Q~&!bU>aBFF+y#rRGN0hm}m`;Yy_VfkMe3luDFMR_S zIvt+*Fn+WtG8~Hsie~mweOohqwiPq-=jkZj&+TJI=K8?UA+f-TC2a3PGR>}zVnpJ6 zIrrIWX7%*@nm-IBz8ZrHQJCqj_aZH=LA)K4zTF$>>xC+}{f%rL#C56w9d5Y9a^Wx zZbZJK`{J^r3QkfpH!3AhvVNg8=F|Ld)Bzj4JjigaNT?PZKNdy?u!fkKgvfu&T&^=P z7`>S-5G)ZO6`Sowkv~;qaojk3gU%uo4nwp%-@qnfYltdy>5{;G(KfpcN*M$EHGPaf ztv~Mza%&gO1N8l-T0VN%Cs4|$tHTzm*!UE~ySIu$yDOb|E+S#9)Bk{lQZp>qVEtXE z0G%A$yKQ584+8FE?p&v5qfga9ED5NAX-PiegNZq@PX7eDL(xg1yM(LaAmP3V6TsHu z>mArXff=oI>EZrKY!q>d<;>LkxB&wu|DePKW`a$K)$$ODJ~xeBa?z>!bsY(TD*!h#zN3M-hv<9WCd;c$(WSE{Nd zY{RfA$ke(`is>J9tE$DFNfnatQ^QT2mJllUT|w_tq;%egZ}KVm=qel+O)I8u!39snnc)SgQL zwbiJy@@^?hx$KW91>{n-x?JANC>2|>AZqU0R=OQgD%L?*XI3>>dN(dUMXjnn(6{)j z=+H`YzsRjsi})2=!tpEmxZjlVE4VR*oD5%4$M6+N5yDp#ALusqeRp|=D0yi%KNk2f zS6)P5ZleTp27~`bsJ3WGMpVJRulE;*U<`Xpv zCVu+_!~t|d@NYt(cwAJ?zMx^@4ll%?^;-gFm4){Z*)RwW3ON&y!zW>brk@eAd%27K!p(JY(vi{`RvTLq_*=feL3CWY7!uj0V4r>l&;$Aw~@{s6PI z4MBtFQ}JAI$4O#xH6yd31czM$FF(L$K7R&8h1B>Fr}NxP$Xz%e^E`;{N`GHUE}mZ? zeq&va=hqD6^9NIkSWRsK$37J%_}10X$8OR)ea9wW>JsByD4ps2RRN~y3oe(HgI~Z0 z=B}tPc3wrx8ft|$snrJ%6gbiIS7K--jiS}qhN9&;pa!2V`hn^{7qJ1MBKpn*kII}-k2&Gy+f*Th9Nt_+k+aJ8kX@>Iml=J;NQP|Ve%zr8+_mQ-; zFHhVIDy+oA@*7b5od7#<>m%KGs4&-iH$ozm}bzj zST^3~1K}1!gTxqBshJ&au3vsKo6E`OdKF0#zKr;1{Ia%Gd`5eQU&i)${tQt4+RIpa zoAf+MRW?xZ&nDS#VL73Xw$j)@6RpI0CSDv)L<4z|7_kJ4=7|%Yj3UVMMJb-wt~tVYZNv`!F75x!if$MMVBQt=t> z8GeSXa}R{B#5JmHo~tBT**v#ct-kRjw7`W{8k=XhmG}k|lfsE;o^y~Gu?TZY57#^s zm_rlBAJhq|DDYyo3x-7+j!;rcF2$WMI8mkLM25h>SA#jhfEy56z4|~rDs!sQMkTXI z3Ssi@OQ{D!VbD$M0}Q}AeSZm(aBlbGY|T3TI+0Tj&4+$4TXPjs^~;bHu`2I^1WDIL zbFerr$=JG>`Zt-Qpua?`mRGFt@{~M;jP>OESU$~d;Q}<@F{sew`u_E=t z9|mJP|L!-FnW0!_(0Yav^Y$e0y-q{&@-Hu*>4++b8#1w=>zf0a?FMAiMmeA!r3EMa zqnNkoPZJAH)uzS4vouj=yU?J9V{G~%2lxm^$v+Do69!6X7jN;9l-7)7R56>l2EH|W zmD0Jr z^mz}^VpDFGZ6wFv*Vd=5=!qfrj+MsoS8FAn&%}k{M2x>zti)bSoEc6;z}KLaxbH+H zjt?ioge=cW{G5sIaAL1e;wU7Fj%qV4ygCQ%Bc}zW^gQ$vrv?fnsZHDWqroAcU^it7 zg%q5}Vw$7_V&6bJBB$03XoOx5qd_;_!#=;Cu?aq7SOSdM%borpq-CIfC_beBb9`+` z+pT}bON+jICIZ+56O-{SRuo!;{tyTtFK5~JzY~4+=6U+ELiuoODDg$>;S0t?0PNmK%;vy`;t;A_>(p_gl(<8_aeG#TQLtg>c z;bhx+9g8#MdSwxWLfF}X0ma|;3q(6Elf{|^G0f3KG%>@M^tWIwiYP1y-%RNRA@P!x zc}rl_;SD~`R#e9BmGXe*N*$pMYIHA0F2u`QMX3&u-k@*6_L0zPCps&7f#gO#cLo~< zW620F+uIDtx>d|~5yZWZkRW8XTp_bvV60|QbxUT89Q`X3CDn`WG(tS_5DbW48D#R| zmD01&qf!R%e}h;oO+$y=IbW9aUD;b08n9yr{=YTH;rUMV*g{+CkWk{wR%%bC-fK&B zg%UN98li4qau#b}s`tfa)kgi%>#b6K@sKQ4vW+rIb-wl8Cl!1*#+Hgw^|VrFG4<=| z0+gagDAmuqSfdD~@EB?GVfg zP;E*02XPaD@Sh_P=6dpBgYe5YTP6OBLHI>G;lFl7*cpK^EXorz48qxA!XAUL-%i-o z5#gnrX4^D{1B7>AT(Bwj-DH*cC+xEj%s<_2Yl@xXCPGt;k3g7G{XB#4-vnVub8SA3 zc;ksT8F}uNAHN-sW*Z+bw152ejz0cxPKUw7tBse2+F!b`qnBP2b7-5Yu)>cb!5vy< z&exfkujfu^;S_9Xg&H#r0TdE|6hNoBu=%A5%N3gxIu4#I>oH_Z{kkDa(ecKojc}+R znR*Eyg0pDVKJ6-}e*hG#&_Mm--G?Q^Hn=Eyt6SjFTP0n#tNfYu)4Gog#$637Yj}`e z>1dud{ccqR6|13{wQw4W3A_3FGPg)0Yq+Fup|JYcN*GyR<{wa>e~~xn?v=j9uy09U z1NTY#;A5*M8m@^>cc6#2xEc~+b_4!32C{W8-E6n|@KM^7!pRGJ7)r@g81%Hyy&2Ym zT5p&jxe)#;&ilhq7NVNG}6`Ebf*ZvPb0pN2)+Upy%B#!%^c=XN^gT$OF0kA57VE*^ddF%Zxn5h zq(43v{js0@u^ER8Md}WCe~)xD-!T0;vE^M8I5dt(9j& zPjuIIvN?u+b~{!?Vux(k<8TZ$3hI>(oY|a@AhG=UE6$}pEL^Z_m}EFxVz$CABmxjg z-_VfLcz1;97m6AV%F>$gzssHO_oGl98sEN!S}9}U3Vj83HR^46LTtG#ZD`y?<<1d~ ziEic2s)@=?brY3?n|*_CPs(?A@Uht94biwuhDYk)+f%J)G1@xtgW~;;X{Ugv4W6k#t zA%vZl9p=NmljK9JR=<)DQGi>|gcSM|XhbY_PZR*q0>jD}JU)5)J(m692E84! zTk+&Z(yO;_Zz8>F+(xWhhAdTogUVm6*G?go2dvv7YJBv|iDrv9uEW_&A6vHt{OBs&V)M6jE1EH4tE9^+q!`p5vtEDiT2L#sZU>Uu zblgUy^6ed>A^tU6HpCUyYx$&dnRUAd8T7P{sJtYpEHtP%tk=#XmHoGx6@80TzQJwN zL83!;(uvzU=%lM8)u9H}H!U&^IiUKyb?Yb9$K)+LsrvH{2u4YQd+wK&z0smjMuJyc zw{avmEKD%3BZ99_5v{k#An3FxTttG=*6sVqp#N}-Xa<(BF9}A1(RdIvVN?foHMmBM zQt|@E6o50>_{__a5S|Rc>Rx}sy1jv)(Qq5Ft7Bwgf1D+2f3x-4f0lsCXzTW5Qt@;| zek|wE~ zZcusHdaWm^%(ZSulghM?sC>f-Ett6dKG`lKt=BfZ4k|;e+Y?FUj~!8YK~nkIpb{@% zgYD0tP-0p`2Y|dwzEp3#R1cGYh+Q{a=BogzI1MdkKAR>wE(LF){q(-bhoGz7dWQp+1E?jK{zTS_ZTtU5i`jj;(?2caU4ia?CkMaVtGsI)BQhej1zi%_TOABe9<$mU@WMn#_S|ixNR0{jd=QYSA`~ zC@^&_qC{**6ai8ZHZg%`lJK+q89_!{5JhUVK|vpi^@5Fb#0VI9Bzp?Ts)1)(L=Rw@ zS6fCpq+k9F`_PCYfVIiB)WQYgE{POZ;P2ek5pe~kZAGr2Ev`VZj3)3Fo`(`I1Shk# z4&s4~86|v4(%3U|cGa^ETKq%*Ha9k^L=j*$vEMY*w)>KF#~uYBLdy&WveC90?j)-O z85(B)L_6m8R@viNN1k3#T7(bKDtnZkARI@y+gBr={(tH?!eZ&0T--hZ+Mx-C`C=&X zyHDA;k24Vt7YlI_jw8Hp?_^+k7%-mzhT&nr?6w`4QzO_C((*2V!L?pLFuDV)?0#Z< zG+0Gq7$U>^3zH>w-~`w!Nn7kiNYuMPLu%M!Z=B9`X0V8lufE4_i#>?DAHl?Tn))Gw z5AFqzUr1YQBX12BCkBb@ZxAE|Wu+B~J=~0dykwEM8YEhQ4L6bTcG`}P@fLOr$kYFZ zPyxUjfz?-R{YSF+w;5WiMArWQ2xNilVDY4Ogeu)|M>-uoMU{p-QX+mYl-@{<^hRo= zH`4j^MuIxUv&8U5!u~uxlbpEJb?A(A0$WwpXZ^{Js63qa`7sfNEk6~81Gz*Kes_!| zI8h2DT@+y_uOl3}KO>Ibx;i3`^7PMz^_YdD1823z5lg-jix>j}<@sRHV_~`ZWX;m+Xc2mK!WY`{-*&0Pm4J2BQRzOHdWL2Y6k-ai?o`6=Y_#j z5%QuB_fHM|UzXO0aHes-*ylK*xe=EGd#9nqJL=J_V)?Qh1~>Xy*Vlxyw1aM_2smS| zB=_mdk4A;+z=pDLC`u{at`YsDQVkT;;a|N!_zoGnxA;RceCO28eoa2m-XYr$AE`o1 zmoi4?;#ob?Sn{BA8Z@W{b*3FJ4E6n$`sfQ_$a}e}{Yx!g2SeV5=?L7~(A-TeJ|GWO zfvGc$_(t(il}f!h6HOT~i!%;>UY8@RsSq1Ffewzqsx00VoxZpEbQHP)pVmG5J>%@BB^G z#_Sf5Gmd*|uyL-)d&ke>`+631C};uQEKrT7Aqq63^Dimhc@Q+~1rz>lrp08yOvbW}DVbP{}UVxXW=LL{kk~!3&%>7=lM1KqUVS0)b85-Csb5<4M z5)R8r4gEP7c@?3=GjLh2dom0=W$gcF1zbr++-qr+2@HC)-RW!KC=z&31d<;-B2JmN zfWnCIlAqKF-_r&+B9R1U)EEC3Q3Z4BJX#|o@wkh>rYG^GFXVQM%7U}$!XLA6ko1c! z3A|IwaawcS!r2R7Mc5PPpjQzf;O!JPsa7H{b#wk56;(8Q&VK$a==?GqSE33g!2{o| zjK-eAdDYliycR4WLzts%(4QI$SR1EvFWF$0_GFf44wAUzXq5I5EA`j!k$SV4DodM> z)Mf>QC*RF=zy^I7($lwpgeHvgAU3h7Kf_8sf6}xoyxM&`;1(Xr&vF;fj*FVk&Cb7r zEZ^)RDJQ%xn&A}dv!(p(u4`nWUYAYy+j`@(amHuYBRzI+Xr;S!Z^5G?h8v`E_Xq6C ztidqwRZ4zCiQL5pp<-b~2&K3Re@AM*eQA(^m6A6_DvG4cdkH^jIvq?r0bf>QtI!x( z)d_5pY6ng}uf@MjKPu$tryzMJz2! z9YWRzHZifKL@6ai4RQ5NMIBa68wjms;?ZnKSBXjZ4p5e?&jdYI>s8Sk!F6Wg_kD|k zjF*WfMDDUuw=vaarb>uhWu?B))P4qG+0BEj#J@2y-gwpM=98?{BBt&fZGb=$ZdnTu zB%si}@4^yuEfUR1!W(>?bH-HI8i^l%t(0>GQI>uK4DTfO$bwrp+bC3>MJqq3e9txb ziaYblIAv}U42`msR2<8Ozrs)&q5%(O&+}<7q!i&z9?MWJu5U~8IPEnVZ(e&UrHaqz ztXhPNWO(M*mk`Ck-^Pq3cf;-%hH1C^?(7Bc@NdE2u>Hd0qibD@@n%%5Yl*xp!oXf$ z>w19~gb1n38hkr=-xAb{ypMhwV10050MDz(Sy^?0dBtItPcdTPVDM9-N%Awu0@A1T!qy2{z?%H7?D`?_lfNBw?+cEGzvGUcp_es2ljbsM|e!$e&gdgc5JXGi-FGh!yr-z|L!!7kvmN znN9P{9BwD%(nF_$HRRzDSTj#BV{Z}=)_!QR*t8QXWlm(;etpkxt3wqySSBzWX~Pk; zV>srT;Tibn!aucqcs9*eSxhx^cv^lBDVz-O#o$ZBQJ z?q_nx*o(;Pn$GfU{`GL}!>KvDO?ePSwN9@YX*N<1!>>U$(iJEVD-nL_M56|uST$(< z#*{f6D_j=9g*Dgumcp+rvfdG0fmHdG47_93T2|N!$BOu%a^F_E0}9w^@v}FFcWnVA zzlNxEyU8rDJ)25+wGdty^E31h4xmwB_bARI4BVQEYa0G#;2+`;-l}Gm--^n8%+*ka zJ|CHlvjdO`vn7^L0Fx&zpM7UYyH6lckXq~kphV4)2et4g>-_*IvC755PWOP4Ppk7m zEZL2+(Bc?8clj-%qGM%H(lmsLwW(ypa;Z%Of29mfgSYGS5)V(2ybUp+hs&U(o$)a% zx+$FkPcS{_Kpg>D5i6C^Tg^DB!${;ZLF8r-kq&;0Y^tqRF%1;qGn7(;eZ*>u?JSrz z)maRD8mtq-={#J*V}rkZ5DBrg03P8-2RyoP@(ID1^$Wqc7e~@1;~xfVAqHz925X@U z|5R6bq1o)o`eH~LY(?;(4Y{I)U}6AXhUiA9A!2%3r+h`ISYK9bViu+QX)qMVxngiN z6dqrzT=K|`&9$~d%XqU|42)U=(O7CB>?}eG)}eQ6s~{jC6gdu*Lf~$k1t$0_Hq(b? z#6`m&4c<}oYcMRr6XB`2 zpLkBwm$$5@Gc@96a@HQZ20viTAa3(&N>YlDJ&N>1@R#&0d?{N$`A(7rPt6>z;t(q` zcn;p;7xB1wxGPWcQ9R?|&Cs7L6+MRY5Gc+TFy17Xd>(^N_M$xw{6O`8@YR)ghVxfw zF)%|NunEm1;>)FYrLhp!p4O=klegrt2aRqwR&}%C2@01}=?SWoHKOc9%;ceTmcs-i zTzthLeE2?&6*`y?MdE}c1k%+;?k1cvVV7bx#%aWz+iW#at@ zQx>t#7^OQC5q2!(qCJ>G~52tc>7CE`2|TZP9Xvh3f4q2-PqC#QOPr6Q-`7Vlp8-4X@Q! z{HqGjmHuywlh?q2BJ*{EP+<0KoC z@iLDJ9wsvzPU6Rlnf)?^B|R2qrdAOl?}_)r%Vl_DXo%I2 zB~XokZ*~P)fe@(j?QEzg_rKTa3!(h5%}>XN5jBe1Z_-a0%;q;4(Q%WfR%L+f@nS)R zBz8Xw?6`lyi z*fwfuRJpu=RW~ul&?Z7BAkiTJR)JRlutm54nIfKBsy+j+2ux5tusxNZu?yAN#Lz96 zDQrSDo&iG;s_!c>FeLg47@A>Vh+nceQH_`jEs5trxq0yWS6$8g2oQAn1>!^p!9u`0U zd7Jndi}&HQagEe7o(m--q6V7kl!)rVi&%|hyygucl7rzC;;!k0R(ep#PlRD!ykKwy znh2^z#b7=^X#3C9Pl==Bf>TmBX&T5}^S(7{3RLd#1+XONtl9g&CMF}ynh5FYDHBJ@ z&02suIlKc-!tP7ZU#4fTi$?iol`--Joc+}SpZlPkLwC>Qk|G$FsRlgrRm$iA&oh>I zzg2I@6`1swQ7Z&*F^K9=G9JEh%im(-{xXoA({=*BCzcZn3maECx766oYBkZ z5OM;qh-t-U1Tc=<8M{+70$UYgm z^2w;VAq<>CJuetco&F>kvlIsUgcAR<1eK-~fg~vtymr@-@bkS3NW?<)apULzHc&nN zT!O~r=J;5cnd0@aiP*fyt==pm$lB7Wv5xcKG)Eab6p@xHGU+YjS?6Wc>f zY!`p|>*0HOEZ+16&I2z;!2LVX%V8e=TF60_aVs9a(&IDEe!wBh^Rf3(H-dT6;TEOUmAwj&J@A_8{f$#LU4vp`b|2%4ZmqXT#z`v`n?*QM3 z0?}(Vn9C9H?^$Ob4&U1!u;Kf&SK8ux*Po9B-xoddzs2{vXZ;WGeItn;M|}4Xg*+Di zJ>g~Id-ItQ@!fKG{=EQic7X3)``hDt_u@m~d(@Ic z91haCO{QoV!KRe@pfbTgZdK~e6z9{6e;CuFq#P^+xHA2*$$cM zQQG(H`~%B)EL-9iK1-~;Oqpd#|xbAC9#A@56-Sn5uEplw_iak0{~M1N6^-B|x_) zvVIbvmwj_sfVRQsBFyKxaz1}zk%`ajHuHHEU?Au7D$M6qaz6jqEAhEoo~r6;H0E>W zqy>tTlYMfHhe60ZRmR+%1v_TU;@BGY6!Awk=HV*6e61axx%v!oFX8Dg(*G=O4RkKj zufwfCXM>5(3}7`#4KuKc^%Rj?XQs7BZlhj)Mw@xRkrU#HGwjI4BRTI67%P#BLz_)= z^MYi~zQ%cH*iV}=yET7JJ&u$AuRR5Pr5%DX`6KN8kxl*`!uLf`Jp_EQ&vQh^=3?@{ zPLyyAOdMc)VA$`X^$t7vzw#Ht_f+w=Kb!l#MLPw2iO0y3zr|li8~(|VNEZXaITFDQ zPn!s~B+@UXL|O$n__Pm+igto&*Wt&H(SB5GM{>6Qf8svOX#Xbe0p(AGU^*YS6+RKG zxIKRz+7_ikI-OErN2w*9mX1CYf87cbzyFm0aD9*8!CyO+PUAuK5CA2#TsB|Lim z+T}3?xPmwfm7ED2ZGVR>|{qnrlcO*8nei+ne`#*<6F ztCPu!)sx`6SUpL;O9s5iWWc)Kc{RPqb{p%dTz%gv1IAoG73sRT1&VpQNZ%%I4G>r9 zYjFz@<0PPVLV{EOuwNTi>m;jv304Z>B^Dk@R$FzI1hGn1niA|wkth;xo3 zm;FokS{zmYUx-<0__k7l?FjTlK?Xm5*bUweLF@w6Lx9+IG+g$lZUV%qHVZF58t$-M zHtS)6_+7kRK_}0&qjKWAgv!Kw@h)o7+KDen_>yO@|F;+tgmuZd$#9Pmx@r__U`^?R-JRaID(z$>%lFYF|5S$MsvfT+nr{0+&??B z7Ifw|JFd7oSzmB5u>@v=CfD!%kjw`?x5eovj=#lk5~~4GL#~0>Tr7zt;oXamYNmtNA$_&erMq z=L?)2jVt~87*K4-!JS0lM4S$7I@6c;Rl~-zFeW@qr`|^@KgP2+#)F28pblHvqq4aD z6N&sEhdHJQBy~^<}%n@O80!KJ{UTg6aD#G2W zr2cqB-THBy+0M3ZeQ1!aTkn4F(B1m5or2k|K2Q)W867(cKmuDn(O}Da1kaH`0yjp6 zb^3>CN8PP8Mz`J+cZhCHQ(JXwWZ&;%gHjSG{hqG%uxme#Jw(@@)!-15P9Ao5*m1%g z4FmS9GSS0*)!{r1+P4pqa(C4!-7}%-Scuy)7 zXy_p?U2(D7A6FnN#`?4ejjk^d?l1@kBZm7g#=MtDMn1!bcupjZrBR#tFUp1j(S>6E z!zkotA6C3#T#9YHG(GQK;sIi~xX;#eabIDI3mf#iaXL+fHLYR99X`6rYLtoX^I}x{ z?y|Tk1Oz)vjy!guu@;nW0HyXE)#eF7MsTR9Rs>2p2~^s2Iydq;RLPld`vjaBVSjOJ zb=Kr!(OI|1%Q#%bkPVMlqrX-@@O%2}k0H1`nDUC%Upp~`BJ@|)+pYU+3GOShP>)6w zJltc6x97_tAN-fG={yWd3rfkQskrUP4!y#xRF+wtnauYNrq9r!e;9HIli zt8d?dKg<>#*eow!<6`eXpZ102v9SoS2gh`mSv|NAPwX7i8yHpT4-BjF2S(Pl1u$pG%iZ#FyS&_ti;V%9c$F41b9PmM z8qoUTTnnw0cw$DdGtjySXk84nE>RIjGnpL`m|WS8ADzB05@NTXWk)Qff*fNZE?}CW zzw(-Zse!p1{RwezN_8{z2XGIm&M?d(4$FTQI5gV#i26LyK+lG~5{Kb+a`|aiPaTn9 zw*}3^-YN#Aw!P&wbts^8cwrMZ--6O$L8&dG4Imm3pbzbeaU~1%!_S0sYY8PF3~C(y(0Z-t(?LV=#&ri;s7dHEg}gXeUB zAOHQoA3tyW5D7n%vC(o!{9LlQHGa+!_pR{L8;_)LL<9-ps5OSBA3KId{&2i76b(xM z4|8t>Ji^8!fsDK(6Nm~DU{RGUNxE-;<%*H{#1sZIKAi3iWtKJ^qacWT>tDY*+fH$JJr^*}M<^ zlf5_nb7f0B`5EF;@*}-eHYKTq`Ui75+N}Ed;b{3OvA&S7EkCp$t#=TmI5HEr$kbi@7{D_xs+{b>#L)z1HwbUg@6{~PI=D470o|JEC5;z<|lpZ(hfD@D4t zBN(HhE|??IHAy|jsYf0jG5uS_eiwXZ%D)$cB`i)47q;JN5orlqMq8d$+RifS@^w5( zt2<~PnyT`_Xi1xCl}gx_vqG$a1~)nApM|9~)JIv<$+ zngrddG4&Hne?@}MB0)`G#+M+wk8{Jzo;SttP5&7va5|A=$ zepr4IgteH>!crd0W?=~;Mu4TTsViVp!?b-oy%Z_(g0q%Tf-2Rp-xRe!WE5 zeEu`z#e1#4stxV&;yJ(+BkD3i`$uHm9xv`EnEr}3l=0&0pSPED3Y4u4d%qmtTI)Sa z#HpKlB&)}7mufj`H@|SoE@aG~7i+ z)?@s)FRNb9+tu79En2&Q+ONmh{7DoBnN-3|{NI6r_eHoO3qaUqK{;;u!cHEuB4f_M ze|YNNUXk(WC+({_s&Znc|Kc8BCMz<|2bMOK6PA^ZoPj1QG6n)kdpXf7GG^mu7Obv` ztjL&mu~hDC^_YoAOywfL^+~C0cuu*>gbR|Q7m#5&8_r)m1FUYldTi4GVW+wY0Y}&G z`zC}#*mF((7_6){f~e&n&W8$)?5~!YmaW3wCar02%xFWR$RF?Cfs-lYim>$ML;7T= z@i(I0SqhBEw98zG-ege<&Vau>A_ZkwK`@I}wz^Ow!#ZsV{p7e|qRBAVS%q6Ohb9q=hmLf(DZ*9?2FkqO_QIgxDfVM?_0VT zuwu(TY~M46C)+!+hD;U@p9(BS)O4*l^Yz*QD6pHK7X?OUX>Q(rkw|z54-su!Uxn{T z+%+pKG$q1Li+2l%7Z9BE$8z#MbT2rMza1w}qD8G1+_|m&?jZkKl)9n@!nyvKOgRJV zNVEo;&>juW^>tdVoJPb}dj`g@U3qTF&i%k>$gQWzDuY zET@ct--DhLep3{~9mb&-3daw`L-Yq!2baUTgp*v5$HjR2>xHL1Y}F05ggZ&Nss^50 zw6?X@ZQa2PiH+7tqKew%>q9-1VD}{LkySw(wMPcT`o0OZ8=W^!>_%D8(B8X5i-pJG zaV%H&^WcbN+#zP&`B7p*rDHkP-{P`o7q&^@gh#FvgsGhgU_kRIx*=GzS%fX;T!MM= z0yIDz_m-j7y~{Fu9>$86f{V0h)A;rx#ROY z)&m#?;^j3fgD>Xz7ovAe-QR(={3Yk3im)EHz7^NHrW}glDL2|ZRqweU=x|4=eZ1u2 zjvX&KSkT=KbeIftP&`_n7V#iUImT$aw}th(H~vqa8HfKA8mWS}Km4Or@X7q&se*1C z3&pL1_x};63Q}LNt6S8 z|Hs+qF?@&?(4tzvyVx{t3|nOcr3HKlZ-ilDeh<2F{6BO>xU4B#bw#+)7P9TOU|?bs z2N>6){#)+iZUJ`t9xN`xdJb z*HlsUHCT^aCH4K3bu?d0T$U5HS@f0;sJ?3^v%Yt3R`q=(2Boa;`|CZoi0YI29{C6A z`)I*;Kk$(c8Bukuj&?NC4|gW0Kg$gn6l3I`A8rUoo9qqA42K8Q;Z7PXPvU9I*zB>0dntoS z5`p?b%;ge;fd`$XlOgpuWE-bguX0QOg^ig;)|w)COW|5m;~^k)rhRqk+qAD@_g0jxbmO9_;%AsW&`*Zi5q7qwt(q89-9itJ!^I#? z(Zfqex6pi=%hO=XR`w^Jol!Ls&3wGGJo9x?L?Qo79>FO*vH!3iQZKNi@raIhq6D) z&O9{QWgR2E`daIT+h8l}6G`5ur4?b?)ac!`ZSMQavAysRIG_22G?ZR>=J&oK-$J}o zjUl+vZFh?C5`=>Px)@n29p!Ja8HEbbEWBvaYmB;|aP`{;V*|if5+bW{J}##p*wvf$ zp4TzrJtKIJT6c>vB?N5pYmvc$x9qd+zND7C(6t!4;T}`|VCYt!UWzPCCoTV@Hzz`n zdCtHjnGE-e%tZ z*%-Y*u(ddAC9=}0!G0H8EI5Wldqh*@#*9D1pY?x)d=B05lFgyN&Yul`i9Z8nHD%--bCV{h-9L;oEV zmqV{2I+jC2FOScmB5baq4E=Tfto=*;`4u%~55D8_hi?B;WI@i1UB7S6yhMLc`_}ak zqGLJJ`?C0)Id6q6JO3O0touv+c~3S$bxeN9qN_W=q9ybrwP(?Fh>m5^&P(I7=wxiv z(F*AQZ~1u{wbfzyaddz=SJ5@po;epGI+i&bG0hoIJ0I{um^uFk+Sfg@r|Ng)C%S#j zUbpY|HHkj2_Wa33bS!_K!L(dF{`~y>|0VuhjoRwC{B(dnS@c}B=TAD_>oI-TZ5PMq z&%4+)qZ`-%0r{CMd$2kvKTo~2Z}~Y8rhXj$BqKVOKXYcp=g*7SrSgA=Kc_&NJ1jqA zJHVe`IQQ9Jem+5TEPu|P9-lvVVb{+89sUfIJz*V`AIDG*1ApIo-kKJdKdTTO%b(*f ziqD^g*clVeAB)`{iIAY+Tq9N;rI<_+284c{T{HEX>;eu3pa-nu<0)N*y!=@=Sd zjFIXcvKC+4Uo!ogzJ9usk@b$FyfY@LeW435DjDtE8-%&W*nsm?ahqkGk=4Xe$|=3P zS-)bG@~a+XVSD>p>#?q1+9H^pH|qz#8lqrg>FRV`JFjn3Gxb7oj1)2q1gc?`$OxVD z=gVlKU>vg)PkQixl=9{aKBv|faVNFeEj*Sv2zm@tzZ}cFFSE8PnG9#n!EgpcmdIlg$u{@+m6P3v zb^M%U7+X0<;7e@fJaoQYIfXHm<9jlya!^ZqYbx#zkH`O-J^ZF@dg_2aG1Oq{o;CaK zk}7(|RVh~@8cd2BkZ+r2GfDhQ;Q{%PPlTEDyYic@m=xA0#!LVHm;5^lz6jALKYQz1 zle}p1qEFz#7kxrc#g99Tx}TFGm)3h%j933syjdF@;+~ zCyvDr0S4||cu>CcX07r$Mz-W-edAahLiFg+3GrE`N3SznW_D^$@Qe)V zsS0Td(LR@7nxUt-tB88)#Gb5T<=K&@5O%v9h%c2~BZL`)3w+=_JTg{&b1T*nz~@S4 zHX1eIYHC{xxJl(~qwb^Rm?eH*)7b4BQs)h2!-Kf{;Q5(8vyPra_v>`E9XvYJ{UW38 z!(=0Atq~lXYJ|EE!V~TzdU~>>TVHEhz(c?HkB>pVtUBy^*;o7XnZ11Gn!F)vykXJu zQnYs9aBhfJr?#TC249tEb&3`(C6)hzPYj|}i|SQf6}b@?qMc~nAR>|6%PXQ~K(xFR zEjY9&ar1nk6W&0DiFRVmd2I>9wEB@=N|*;JtzSY~!no$p2*pZRDd3vZ^C)2)_^xMK zC1LUf5=Px8aseT8jSeL*@`X-W=?%>n|8<5ovM^!4-g@M=jhF}!Z(c-%40D%u+ldHW z&-ra&igMeb6SOcD(O!Pe-G%e8_9{P7tk&|A^tI>nSkm?N!PeWTb zVQZQ(lEU-iqZFQUYG%wRP4zkO5!tacwM}3u6gq+9=ucWqn%=fAcmfqjgX(=)tX;u9PHYm_c+g*94;p zA6HuU;R}?}AS1A~$nP`frFyeIP#L>*5K+9-XLdGBva+3O`m>@{^$JDnG*L~V zzUz%3?!63kKivo-7p$jhr5*uzG_CZ8H#hTL4PjO9YNLL(F z`lW~|y~$C&6%`SqpW;AB*T+sVY)TJ=DIL$@KdH6Zwx%=MSZ}aPMMXp$k{`e$y{`ew zi~F&*+qwH6M0BMu+PXNTAij06`k^TP%2W&2N%oidmK;v$$-+6zfb1w9CF6qV`9L3U zZKO&6mQ{x-5ySk&Fmd_fSeG>-e?#kwGr>DfHB`M+-&%SVW(?Oy&BmCQ;mA77V?|HN z{O|Jr7G3&_hR#3jkK~V~hL=%)72)JOJ^z?3jKC&*!yK&6p5sNUo>ZCf?2lPli17wo z#O$(6SA8ptmf%g)38u%%gVK_+E9N?P9M%a9I+X8XZ!#UJjI3fzt}<;Q(*}n%j7-H# zLOssP+kw6H3HKb9^6`_3}VYtj7IF;M(BFdkh5s{@l^Jm3e?LX+ejpScYN zfsxg(cz=%X%te4{!quCcwm;b2uJ z4i%W*vD_E{VJD&GtBZQDh*`n8sXIo+lw(IGf*etBDO-_7!Hv`?gEQB$e9-_;d27*N zmWV_-0`CZVOth}&VT8pvQjT=j3B_MDr^ATa%X~B@h4p;2LUc0`g(e86e;GvDORnYN z@FW!TYN*(Z?9BNCiciFSu_&TMvYhKB?Sihz*vUlAJq>dw*K2@iP<=Xqir&i3EFOR( zx#Fe(PUj)v8 z=)>URP1>GHOY*Z9>RVrQv(Ul0E)3VPTs4EcMpzzeH9qq2+(2vb15vG68ggseu&kIF zT(;+^_9U#v`EF%j=G(^^vPrQiaebs4hveph^RQ^&%FXl-D877Gj>Fl1#*DChOR8NC zXZAqHF)J4yUVIqd4Hr}8Cp(T=v#@7zcLuUk9mi&;H{*9hbCToO&5nQ6K~lR3ZpwFa zPp-~mwffLb%miju^q?p6$^pe5!YA;@i#+NU9$GBuvy&yt#VAK{4+e75bC63aGiY@D zqqe-Zct2mTYi`Ay)aFZ#8hiL;3_l~4O9U{`p(@W zsyw;{WU&D2woUxN{>Gkf#5BXBZL z!sZ;)*ghiYOW5uW85VLXUY3VpI#(d9wf^=#yX}?ih$pSY`HNg;0eXB`*$c-p z)9o9w0i>l4YnARM+#bEAtQhi|*}J{L5?s%liO25I!S2q{!Ev2ZK|3tkBxH-B>dOA! zthL2hlK^y){BQgWmS;GB2~H@E4>)|=9vc4IK9CFdro<_#Xll=Z&%qIpd*V0rV{HZNt z$f;Puq#%6>iU2NVSAcIz@K=ey3Xq>#3DQ&XHZGA#mLX|1k}bvOYWyw3-%=z?T*hR0 z8<$uO-WW9_D}1Rn0H`I7TD&y!r4cVpe8HhW21ZtE9f1>(zhMqc_nNPVYeV;6VsDCu zl&-;rWxcP2T_Qn@Ik4zw1lZJq2dvFEfE;e{R5}*Gx4K`DVkJFVM$+b@*+z{$HZ-y} z&!0yrr~FcD?vxW}JHsO~$q1f-Zgw}u$58)`7>_uy2Fzh-$Y83W4>j&o3^-67oB<^m0nvOCmc9YGpm% zbLmS_L8xS&p@mcSS7Z4&mX&)OYQeBpZ)@#{(o+%=ihtlT_z-u@1}DmH#d7WFb*jw? z91=FLe?UpsS`VYPE4f|~1fl0w_s|2l14|+24CB!2lc(6pV;3A(8;&XmGvpLrXo%Q< z(x2c6UL(AL;+emNiwRf8PaI&Ok}zCtL@~MDy(v=M0=u{~b#W`(mAAmUvp~wLkNbJ) zB5GQ$ug4%2PZxdIwLqC??x#6WKo0!f<^XJ`C=TG;KF_rGA5RW^^rYf|Y;5qLyXJYs zOOX*yN-V{LM-nUfMQOCpyJvr((rVaN{UM}{a0HHrAK*|7 zON*gC-^(+9Z60Ho-O*GNWDiCkS+AJ2rRaFWoRrF_Vyy2Rlv963Y6877?JUxWlX|7k z{Md(~U!>^`$Hfuluc3fyzm>h{c?B$*1gmTzxrx>+)dI*Q*H|6tS%9ap`^<$ z!*NtyGrYTX#s=&bN;JCFF$%jY3LsI}WI85ngbAwBz0-^$u2-{JW!sUokx4fo=|)FJ z<1WY4HI8G~iizeZe;pJcW~KG~&8Z2)(Au0m4#rs_j$`ZQ?7zz~xehOLdl($*@Lwsk z18@zkHInL9q$0w|sxus;Ft++>?f?URAz1uK9y;YWre-XB=opV+=Ikx&elJ%eM=AoF zz|Gt>P#IIe-j&7O!mC%C4>QcZaE*<@Dg6dc6o#YG$a=j9)su~shO_uF=DAln23j&6au)?DP!#B*%Qy2y84G>J7JmSbJiGV|j9-F>JTj@zhU7E9NEF z%=uEe*~RvSZ{51{n9rb^C^`Y0{NfFE@l;%#x??aZB4TuVMgB4o=M7yh?GqmVi_$Zd z@tstXn!x)=Ab$`eDBf)Fu@L5YVTQw*#Gu1D8Ur^2Q5WJ=wvp;owj?wINGbZ-4vMMQ zoT9{Zs}j>q6w|dLrYrX)rio}fBBniWvc8LXM+-V`X8RFbVD z92wB+SbmRR_FxeC5vg8?x;MCg9(wJ(AgXc>G*}+Uw2Aha-686E3B{d#l;_?)*tqJo zyKi_dMH^$UI>4TsQ$H#-k<%1VXMXnECG49@*?6P9kSihh)@%rV&nuPS>uyi%M|7ju z(2O~ITvjA;= zqj!a^1oGgQI3&{fVLdtezU1EC*4KT*8qxi&&db^~=Sw}xU2i>g6kEEH%DJ;%Mz9;r zJP=8zA#RG0TO5LrC;EcjDzF7w6}6C+ zG?Nx6B}+#6<8RiZ$~O90XlTy_pE)L#^6DP;6-*Z};q9EvO9m8A$TRy(G|PnnRdQZv zWU_BaEy`s37ahx;P|@8JhHQXdXsr#bF8(U8aY0vN$-@Hph+ieo+yIM=Xp0`t$-Gop zJi>*8EWN;sP9AvcQ2&nQy+q{?X(GP5KrQi=#N#L00(^HgwKP9Zo%4tJ`E`)|Y$8AV z#PBohX9H8iu9JjN%urn#Eyu(MMDZgxn3&UA%ktn$@i)@`fOPJ0kK=eg&*BM~ID00MllVNS#AC^UerMMGcXc))CEany}W zE!&+~d?2-{xwh4bn5(*%wI&wtr(^OVDXN)ZlYB(i@Qv~TOMym;8{R3!EIc(z?qN?YpC0cd|1z< z)^i8~OOnLDD#X{vC4O%AvOTfHi*|-q)B~!hLa6aO28h(Ui6kdvWLn4j$y)pet=LvX z&sicqif$+qzlO~PmLKF|enT_C$4y2Nqur0qJJ{4H8`uW>f|sP`gz^k)<7|rB?si#t zgP15oEzO3N_P(S1In<%|<(ogw*4d>1T8R|g?XFKI^!2Hsy z)AJLGXXOo_k?JVFg;>nfWc`Bd9$Ud#3~LN%u#IN3ThL%X44dA_u$E2Wkmxich^c|# zwJ7}=u(H*@GuwIS#yo)x4oQS{1JakR%plEyNvIfD_r4IiL$5h0(`(Mk_L_4IulaF! zslZC>do-L%@-QC%GpuK>_#^z6tx0axK2VdY8pX&EZOI~?A0J^C@ma06j#w?jTP-Hi z8|Vs-Phao&==LrjlnOe+AZEi_gTsyB0^7dGXF zk(nGWG$dgRaXMznQbQA*)~iRYVVjT+D-*iAUGtRosr>nraoli(W``}d*nAX3t257r zf1*#(u~da_%az69MIUKn=4p{_vp)DTF^7#qHjqj=I>bl8^&c^lZQxmC=o;xNU~wJK z+%HAL|H(V#Ya!x$Ap#ThLP*(f$#c9$4I4H7oo-~c%s+?IfM{KAtAfR}qKU zZMbwExO4#gLP=CT(P%x;{VP6@+!3OjT{+t*QIm*{iYHW@=upra1coU*z z;`*~>dj-qT@Cue{e6)to0&!5&J)>8zG!JY|d;AdiFt~UHHp)7yHfM%0^&KN$@2j>4k9q08rdU=X_rXQe6&X6>aw6Hm>StppxIm+ed} zhD^bYrW^({S+%rMvbo)Vr4uNP@+HGjk*iz z(M+&2Ja*{0=+5hoo=Pgwy69REyZ2ULZ6qnGy|K_*o*c{J?0dI@t&XZmx4R&G^5)st z-gi!F(TV8$P-|>}_n*uL2rX<*g4{s+hIg*7z9u$veAZ1cN?@q6Sbpe_%gBBx9ob{2 zw!A`6zJ>3|T5}eUTL~4rFnZ1l9+4NEfnm%HAe@?E44LYJXr@5S9p$|3CoDhMnz-4q zn5$G|jJMAE4muybm6wuU_i+k5r92f#))sipK|b@^3={w~*mA%xZf{m=(Ls9E=_Wb@ zxOr36bAt;Xi$9h_1Z5gw?nHcoyP06HmzR8|)goQ$RNAxn+U=Fi7Iro(9q#2WI37VLEuIw=t3p3GnDCL zH4BaTih&G-d5@F8aRc@IyMR_$Pba zH=q{s;6Sr7WQMDoT8ttE?~GhkiQ}a&(dlV+u_KzaZCNKwJKXuWd$oNPM zl(kmz%Z+R;aOZ6+{xYh3IPa6)IPL5Gc2vHO8j0d}7~f&2uuN+MiY&XD3-|(;cJ+9% z+x$d|UCrofNnMn2Ed1H9WA{sqVS(K7Z`|=`S1z7W@YM_HfBagme@v? zNP02FDAzSaEwMdJFOhuf4pk($O`%BHeTrU3xu&9ACm#?lmtBM%cgL1z$1kzrsQU0q zyJ&YbT0Hg+Bzto-Et~6UoWsh_6o36Iq{le8|i;uDo#;c*o z7aa7$|1eV-Y4Byi3W43M)=w1=rYGHp<>az9*T0y-)?%J+^+N8lmI@1(=RpDe z*9e}3+D3pbZVpxwthaEs0b2^N(hgK36|u(kE#z9B?D;NI;8K>j*tJ`%Zc}mQNoc+c z25x9BjD#Ps_QjM#PsXZ+sP)#8SC~mp`wWz_kG9(#TYS-ZREtjj-zhrB7{M#h^sc~! zEm~n`ob|zm2rnmX*)!lJKE{g#_;VT|ER7G%&Gdl?tlC>=Ejp341|tYYKOoqI0fi?Z z!)P7LN9F4Q2?iq4PmhAMj)ZA23KBcA5Kl-gM=HUQc#*-JXkyI!V*S(pF_nnvr9{Uu zog6oQhe9|4U*i{1IasSSBH3{xr~4g&Ejlt4k*SUwIS@dHrz5)~vb*EP=Oywf9qB}* z({bZciM&fk_C;i0$Bm{$26SY9MD|~}u(*V|Vm;G{feSA$p2Ywb(~NK}EG(YN0G82= zNMCqP@mUOHAds=}jN)7dh9WR@;qc;<8E_-uUO2S)CWpU40_Y?dSxo$u<8}RXkPe5>*2=*PX1o$0>nFfyQDwf*70p( z2IiY4zQdnY{8@)N%_e;4Rc_CtBVvQ&nAhib^I%34U(VXt+})A!y7dU$jk%5ttQN|s zB|txd*D?d(L*#0PG5uN41XpA<5~e=ub%o@7g#_Ox{s5Sjgju=E8e6NU9XbF+)IA#-gmUb)BFYE-5X~r64hpF6*IwYO=A!%vg&pH%yH~vsZ zScBH7=rEnKktrP$f5M;Q7Qt2{VQq6)QleRS%r3z6z+BtgM79av-vvqEqqz0fA~+U7 z{>WtO61<@}j&Uj8Oish4tU0|$!n|XFXDTad>IX<)hrhMfS%g8%9{zj=Xe`vqXu#i_ z&Am|0-{=xT3zw)y>oBB7mJkPD=$`aie1Z3kf-tuQKUZz{I5I{y;b(L$e$J`J&!naJ zxv&yHvq}L;5dwu!fRivG_HnE^sMeoc_vLorHO!R#2k5mK<#IbIW~*e7xuqW7($E5c zW1)M>;X}KFhSjb4{n=hH`pVeBX2=~(j`FiHq;xn_il6NRCuX_O3qNKLhT+Pz?>bG) zSE)0L6EHC=@dt5eSd4^_`|TnP#E2*3sTr+xA_3D>!z=KDhU2d-PiYQZUp z=t8hcS{++zy@+jCm0YVGN<01OJ}@_KN?(d(R;Q=McPNX1W?G+M-y~8@KjcuP@TJeR zJa9|GYKYi-(lw7aLYJjK2E|5ik@C3Kdm7*z_N?~>^WKq32+uaIi!R=Vzt8cvlP913 z$RE^8aXYL78xVEY4d2W$sx>vR0Ew#^t> z*E4|DJI2quAuQ-DV9f76*s*vWnb?ESC=m*-3T5VXu`%`QD5i2^T6trAtHz@EWKP*B zgOlro)7SjSamoHD_*$z5_l;p-BI7n3y@hl<#cjyiSf5DU&v1y~fGI9xYcghS^wYG^ zH@nImvG6jXMDQ7?63y$fovj zXcTSvDU+1)1>XYZkH+(!Zb%o5w=Z4L3Q#XE^wsLc1J!})q;Klct|4q_)H1Co;)V$@ ztn#LR3A@K(Ve!X6WuS%2Zy_W6{3&4-mHL9kmH1ndL&5W&8(;7$A$UtEc)1mv+A@=% z$F`h=sWdb!Op#HQZH7Ci8c6zE$%4dFLlu-RG_{|H8+uoG9Ma^$9G zzecw=89X>@LJrO*I9M?ur{cPEk}hgWt_)^%f}{M(PT&=qtjo&gQ4I2SL#h4t-sSe& zM;F>}8DOtUcbdzNE62tV6}Rvpyg@aBI;dS#M1luRA(VD5iVvkrMk>PjhN0HhqNAc{ z9u$XW?0=AQJ^Ue64P;m1wV()@#FK+v`({quOhwYOi-Aj^vfFnT^2N zj1?ViW^bb?)?|Q-ENICtC9Xo^%H`q^e@Br8iOd0H3J;fWP|R4P26*Bqr@_oYPriXI zar?7PC4Or+TWpC_36Xcf|D@se=&Bp;)i>!mxFkN(BZC2zO&*uU(KC9l@HiMN@B(t4oV z!^c|d>lrc2U+n%R&iJqNZ$}w&W?u0SBXnkBYub)3-MNLS;stPa_^52h4NsEA7dD}z zHw-hmX~$B8Up$tPScLQzGD3qac82mNGyIAQ7oq!}nK*3g@M+oeu9Wi!M;X}NE6bP! z_Du5x3=ZnCJ7}E+*En!B5=~D*v(B1lN3AwOIfQiPPp@a?EEwPbG~RYEfM{;vKrLv?tlv z;Hhxn34<){%h8SmGv#aiLS2IuQTv|b#BFF>DS_b=N{kG^x-L|dDYxv;s?;{ zoR;=G278w3##W2vxlGYSMZ7(?;_?=w^}15z;4@dq1Ec?$;W>vzhS?*fGe~EzyL&&! z^);9X^_vwC6!Y| z8px6$UTu~v!aG?4isqyFfF-o3|Naq=D5#ClHfQpmrOhR@-F96pi+V({2*Q{0^JIs* zD$#GI{D5~OJ@?O2cYQKB_g!f$b=Ywou0T?k z3?|814N#Y$_*epxuI9phIq%(&1CL*1|EoxR2G=W6tPQNuNTz5P z>_1C-LlQ|JZj}CT`li(EQ9E_<+^U%pDowUPAu2?i)cA;N5&w| zzehK9YB{@kv36#t;U@}erd)t`k)0P(CgD|d9^~jOyhDzzMWrojTi{5g{npa9(t@yd zu?>QnC#ufg$p5ot>my|gTwC9&j5Tb8?IL%pK?S{5Ktpd@hGAZXX^pF}g8pvSRg{hs zO0`~@0UhceiLPF^*awEG$_99V-gefRD-ZjDLn$|&=>TF19M^xI{AX#OkjQ#jeGPcT zWv$I8(uQ&yp>TE?ygp>6WDJen7r7$yi2>+$E{I=iUAtVep0Zg?E{>zHl7Bl#N&_7S zmm-MpTC2jc4KF#W7^%%X>kpY-T2sf2mmG`ff+hY`6u=j}d@~p;9UIWs!lHDPKOhON zX*9Cd7fs@k$Jifij&7l~iD{WWv^Ap#WSpJgj8cdvIdh2lcffOY;?b*_!K@bi?e<{- z1*gqJBP|2#?Vpm&%<)aiaNQo&y`;q%w$2}Eod;x^(ppg61QWVOx~LPRi^^LXg<@~L z!+ovYP;pLRLiSD?i$(c#XK9n;x>dA5!pps;PMWgP`aAa7V8vG(d*$(TZX+{r{|o?N zs=UGeei&S+fl?_uw)?ceTJf1bany(Hd(S5zq0fAR%N#{RiZpvlwUWv!wSJz?K?Fx< zrD)QXy;%nho+VmKoiI|g6uPXx;cW&c5$i|xhAihTRfv|-l9`WTuvjvJ)mlc3K@UHr z_^QRo@xaKz!u|xu3!|Mgu-(M5{G8qu`Mqtv#@IRao|Xhf9%SXch2$C5E!it`7SX&h z(+2)_7#7FB?zsM9Oq^hYf>E}JTONFHlZ8@t{)&%fr?%qZG#n#SwlU0wplli1%rP6n zCQhN%8N0{>=43&-dJqgo3eO*hZ32vZOWKlCBYkKn?c^uf!q!^n zOiIP>^B!Oi#y2<}2@1l+By5XF0>@fTC?A_uFoLp%Va2eni(#vcAclFtyd|yKKGwPqp8>a;eV&f5n5 zR9O%Hm1VuPBy3{DC#D1hu)88LSF|PO+~gQ)a{oLvxBfzElJ-T-*I5y2KEXRW&j@SI zO^u;u`DuTeH%UTG@q9Kj54r-6Rn!MN)ts~}w!O=az_Z=o?1a=IstGl*+1kAV8(o#B zBdYVf{w(fd8H;52D)9Pf*GgPl_I&_9uyXV+Oc5^W~nM7-*+a6(Qf#j}iqVpO?x z;jw>OwB0|G!T+3xo7c)lxzSCchqUvN9#YIH7uwU?kM>~?dGfVvzZ-D6P=>Yk36vRr z2n;P3p)89~mU}x=79JH8f;zo>NW=>0A6vL`_{Wqy!wQ)D=gXJ>6U+B{v0c8CsMu)+ z*!jg4vIqUap_H?)5i>vvIqyj@*ZXRCNtii>PMD&Fum<3N*~T;7)>_wXk2M3}G{~d( zh2A(>#IbjOY5e|wH${N`KPVTMw|2UC@|!y$jE#C?1>7&muEAvD`l5-n0{)Z@@L&-n zIykolf4ke@&7yf>qyC9 zue`4X`#Nray*nq&`&v-l^k?j^K|hf9mB2*aH)6!ezNxz2vlJ@pE$f|QX##~xDR{8W zHlKk3)pe_AV#V5It>=kN7Ugadf1Fd+uSVv3Dq)}b+4Rkn!)d0_KJ&~}OW8472m|E` zxaO$!vhjYYe$S_FZA~ltwp&6a4F@2g#XyBoK$9W6HSKc>TN&_)CuKOv3DQHbw2^i#ZHOkB!3yk13wLzHJp|m^ipswXbtDi4K`9o>DcZu1Q z`kgYH(kz61X395=MsIM|_2d#E#{$xNMgdI6un0bw6UHYM?VCorN(-NPVkcSBaxQ1aq7^V|DYioUu z5%?MMdh_u=)Fl@mhGbw5rZ!g>^}7XVbrb7saoapUv)? z0$A6DEOfoc0AKCO4E|0nT94et3WC|#n)YA|>ywgF$2T)?CPnt}T;+SF*r|zVto?~I zeWcbiMa>^Q4!MGw!O9CIuth&>fep~fiCH9Uzktl5()6u*W{xXr>KN;?AygR#WATFX zgG6A_0bxSKa;#+^9!gmx!iT!C< zfzfV{aGWjZJ#GTPvevY%0092mF+@gdTLwlugV&%c(?;A*F^937C})gr!q!=i6fmBY zxfBR?$s!T#XS!O0=1D`isk)xV&$k8* zQ`7h}C9O9JjlGIk4D(*~cwQVEWqZh$O*rnsI&TbgWg^|sh{QP;p>q>EFmHM@L|5ib zf4fXJsX;VY&3mt3>!E+JX7Z|A)BgFDGyq6XE#4qgl(gx4ex(MlCaq`=`{$_UK%s6s z6%(z!)qK4y&Gd6|AJ=?`(kj1}>R*b7RDUVMwi5KzZ`=RYLY-wRb@uT0z$5*y8#6ei!?CdM zpCC{AAa)~guvoAA!kM6_oS&^GtkQOtuxziC;Q*n{#VAZ%GTMPM}v#Be)pzmwpSc_F1M z9y8!&!C*BJuN9tu)_Wcl zDq3VliO8r}FaoOvYFR`#TU@pUXJ>1rXBd`qE$_nUY_!f=>#b7~VYIY~EXaXd)tnDZ zaIIo?cSw{xN1U(<35Ey5M!|#Opcr} zo`Bl9{}iQmD13YAh3Tk|me=ss*U;nXg&SL2YnC1ZrM>?MXw@OxIVV|(uw(Gc>7{sL z!D4y3U%lLvUWgZ%n6H1UMLdvyG_^XVycnfT+j28IzK|2E9IQ{V*$Tz3Vt^ZZzW-5r zX7zD%y11f52(q!ui6?dBJ9>E_AG3Shjlm{`2`f9Mi@?CmBa@OYN{<_{*+^Q*q<)>$ zk4Qu;3Y0=(Rch&r7_}5pxfKsnQ3I@$V8b<7CBP7|2qLX=sAixRu}zL%ffhFCh5!%J zz#+PP;?=n`skaV0vxr0kni#EAag7ftP%{& z?X*LggIPrcQQ{kt1QB%;f8zA&(?QnN)8Q%)d0JQ`HtT`QT3cTQHb}{+RI|Vh)2lB` zFRsv-2Yy4Wt|u!{LWk|J>1LBe_`Yyztf zk%&sJViH(|D27lvV2V74BsU?jmhmoVa;8>K$-3G?p=48sER zsD_aQcPW@>6^x%S^CK_}3(Q;%BMD{*%=l7#DYRCIbYN6PiGExKT9h* zk;QMZW;mr!szao)3Ulj_#_x_6mQ*s^1ZE3qEIdl2k#S&P;i32xIKZyD7Hh>i5d(?8 z_bn}1gl{@nO796u>8ly_L@7`zX=GSPTs=sO4ins?VBS|`G%;!cVL-;yf~SgcAft(7 z>=|H_QD_~n$dLH`H5mf$RVaHOBPDAg$|H!9qM~qRABMQzu-R;B{0#8OL*m!GsmK$+ z-v&vME`1TBqEN^WePg|g!Aqr*(0qp1FbqyUd938;X54Zex2HmNA&mPc<2c!S+(+Hj zR6Is`0iqPk(g%%*cZfAHfL5nGAeE~PMGzyb%Rmstnu)AwI*`x6**f57z=MDoX#pp- zPD8+j2MW*E47^fXHpsWU;-cyGfxd`S-jXT-U~71KfH=jgm|m3Q$ueOVk^~XuxHo^@ z7ay~GpIoSIv4ERs8UopPXhICUDnj_}oY|Mnt`D4mH%*8DkdO>b2-8OsA_?|Q$oWFZ zrfD`I`9#wYD8xe(G83x2wAp$@`?uUbz-38M}6Cw%rO~~et$dNO{ zgrIRs)!>0Tld8e1>d1DF>w%7pDbSJaM4%$j7lHZ!51>v!ONNJstL!)9uZhxvXwefx z4$!s62-?qftuefB8cz@!AHgOlB|h1haYE;wj|X^GfCuTT4=^4UNWi7OyVdv1@OQ@Z zdnH-b5Lk+bX7)0?DrWQB^ec)luMgagH>P%zNXQ5t`ymFe240z(4W|YZ@mRwmslb(| z5v&MgB0+s%IDQjyVRx}jkv6+c34I|&20BA1Jc zRmaY_3m9h?k(lfv5)0G@0U-#L@_?{@o1@eQBdilOK}=+2=s*(#2kJlz13kl}`mqAc z+PN@HYCgl;7zU~T*dV038Mju)jaH;O8TSI?Y*LBICY4yI;TQ#(l?O;2rAcLkb>jfZ zB*aA4H9C;bfL{mv3|xqS<|>1^5mK8NK0%Z9-eA$n)r@oLxSBG>RmOE^91V5~P77je zQi+9JWfZt750L5`qq&L*Yg>OsDic{7b%21@8#>U!Kn()$iIzh03axHy*wyIXdJiq4 z(D)YBTUWyjP1*(iPCG(~cA|^6W-TCrp_FciGOmho5V`8Z@TsM@-GjAQ>FmvPJPs}r zxfJ*;$vmz4Iw>>HcCq>sWljy73@|cE`sL&LDKJTstiU{ql6-=FSfVHiUQbk2j6;sD zbbOi-rlioq4t`Q1@z-*Yi-5pC-B0?`g$kvgC~qc8;9>yDDv4|1Yj&whtuYFh#2>G5 z3E*^vYvWih76?@m*9hWjuNe7FntX3)PSPTY4_EO2d|S0S!gmsQ_y>B)xUZ_(2HYau z4|vN|U+yo3xK*ZU}O^gdM&XIBI^Lu(y zwc#!mh@l%8Y%z4=9b!lX;1gk_Fwev5%)$tg0?@<&6Ir8mfPmI%IzWupaYDKl!*Y=q zEr#<|phbz{VBEdeiredO&H=91vW{v+p4d(};fJ#3L`OL$m_b6?%ZEu}^NF}|9`c8X zo>0ZYRxu9LBpi-Uc}}}BTdeC=iC{?l^p#pL2)`svc-mu;h^U`Y#YCy>MutT`Z|$pK zB*8@r=3zxfC1G+j8T*xrd@>GX_(?{+!zQE9`Wac<@gKadPzro6h4Nj6vYIHrE*8#K zF#wqD#P#mWHm*|ZNrg+|Z_~I0@QuDwq#IO`nuzP4#H9ut3`;ex)1oB_ZdEYXJB70? zgt>w+kPGYy;f_O`7z-QL27cghCD4*`oB|%NfSu?)t>fYV^MmAkkp`BO{S${@%IrD=6AE|*Q<-2{PsJ}RrKoIzaIKcTf@E6#qMrmb)b*}=R#{~qaD@H9Ou;LTL zlHm~!1tSSAQ84Ezm`cK&5hp`_5a0zmLrFPQ0Uxb^s|mbc9AJJB;8QfPq}!Jt@!vf>f zFp}UL1#`QCaTCTJfniu+-s_=glLQAV7{7waC(N&N!sTIDV3uhZNzmL&c;Hhoe!?_H zU>FvdA`K%6UQjSr4-t_{!rUH#VOU^l_gAz@f-(j3-POXkYQhvoU>Fvd?m8byFjm2A zS1?V48A=${a2OVtR9MoYJelA?1+z-Qv@mM-m0=i$1?E4v08?}<6MXIz9xPKZPB@sY zRS_751!k#+kp#~wn41)gn=qAxp+~x39=o9`Mhf7?8c1tzwHyy&7 zR}@S&qaGtn8zsgM0{os!0ZYnT6mX>iZX)nyae(yV2^kicM>UKj_@bwj@IVFQCQL&FhGBu3t6?O;as~6_ zLg8dSVg4S0VOU^J*D#XcdIhsd!T1R?Eds-^z;x3vl3#&-0XwlM)H+)Ob9Oyr8_oql3*rX>4rpLWnW=zxED-Ly37i(8 zmSKUZgZWL#kOavJ<_!gtPnZuc4|9cKfeC3CNzl|?xblF4@e}5W2n@plGf~4xf_oIq zH43JZFbg6u3=7QR8b%V#R4@}2Of_LV5g3LA=9@06Jd)r91#_Z;X(CLo2n@pl^NNO% z1PKb}e0U7mbrI(M%i`3S4eUHf*BDc->?X`OMFBf|B5G+IV1AICHw{$4lJW)x+)n|! z34Eajj;?Ng5a2sBu%z@V;PXmUVDsgt;*S!?3{2uzNKoSfF6mD3~Tj zog0B+SYVFVFp|KdU>;F0ErdBV0>iMt?7^|Uq70d!mx8%o!N3-T{d;Mc2Mi0$8Vw@} z-rrAnFhjw(3G-qEhGBuZL&Hdd#}v$&3MQX0H$-3<7MKe(j3g*lFvlnuKVi;}z%VQ@ z$7mQykfUIFE0{{c42r-oEHFRY-4_$|P%uBtQ}x5BFD?o5pxTD1*D#E*wxkLV-c>M7 zj9MOnVOa9HO~XinhZW3n1=B*9>mx7>3(QmvBMGilFt;ffrxP$^A}|aK%uyOf5}XPc z!WVDbrbR|JM(fjL9NNP?h(>8fD-gqa~QvV{X#F-pK* zv(*vPoUOo`i-aMSj5?NJYAD69z-&!ab94Rn&CW6U?53xnqb3q+?6V>iE)Q3qH%;EIIX=*bmU-4-i4VbC*H|v zBn8og5TbXwHK&Q<+ayIa6Iq|?00FJdI^bqtEdn4qQxT2bOIY7`QJCmThL85gFPsBC(PhD>G@m@E&p>idt@Oh$w?LQ};=)`>bmKr2HBsu?&C z0mV>vUj%=>FifkH;V&5mtBwDq zfZDT;(%dEd?VTi_kYun}2ZVx!IzWup z;)4eQ6Hdn#O44HvI% z6LB@44_s}=DEuG|wB`J)0G7fNy4g6s*ZG181?FzV90Xx$W zb!8l2eo*>E153&Y3OHK?57Z>^~26cAS`5D662tym;hyBoK$AB9>YtbuYX%5 z9ATp7alm>sNVYN5O%-;e)%6psOk+L4IAB%isu(9&t29@DQxXYV*G?TfiP{FEk6kG;@=doq&z?YZ&JXO1pW~>3}IG= z9tDO4=I@vlVN;g`pZzLCj`~?LtR~D#!f=I6kGi>-rp5$4j!44f{1*Iepf0izb=8>* z)V&JP*Gh*r5z)d(<_t^b`|Hdl!6gdj0!$f!o)*HKp)+r@D1hGt{*GT&fhF-^1%IQ; z(}{!btj>`<85Wp-rl7&0T0D00M;#|3J9#Khhc#^L2F`3FiOFc{w5r%Busjo4EaHT=WB%}DZ47* ze=Fc>0)IY<8OrPn!va&5tk@$7-u_wGbFzYIBFwXdX(NFAAiy_ZE1&cmOnIjQK2Hf? z3!~;qh9ZCr3(VPCZY05U1@plr()^tL0W%^_hWsGFX*xqmnW2DJC}1~%Qz98MEHEEx zp^*gN{UoZyQ4Yr%KBp!BD!k1naN~I_YCDPNH$l|@XWdqr_}@ST`2YMO@P0;B5MI}( z4U?Xv*eeO@uIX?)cS7@yw zDH9d&UAj^U{K3R9rA;=BJ>Fx4_112dPWN`Me^Hfd`>c-&=-%!P%kJ&0Gq)jgb2Cnw zDt`w{WWbxk&LZnAM0go%<>bSH}n|Rl#@_8E!^>TA;{y_+sLzVjOZP9E?wwhRGB&lw6jnAhLJ1ST6K!HEi{vx2E4Oz#K`!>azZ7Lf#r3g%m_2nh4R1mvR? zferKGPb!~kCV1-yDd%UKq_b^e)V~O$Xk%FN>1^ALOmL@yxpszBQ46EyMPL{fn2mP( zXM*Vp=7S?8ALjvx8WDkESYYncFp}Unz^IWUJ#f-zXEFi*q?0aQIFp+hS4iM0~MF%Pw zxE=wJSEjP9X4Euht60gf6!9gkr6j=^1v5>-G!bS<1cqUOS*&3s!2t>;OTn}d=Ew2K zM^!V!0<-ByRn3y%v+snqJ_^QpAYfJ!M$yKwz`UlFm?U^c!8Bi_*hrXLA~0?n=B1xh zK8&!gRWJ<-CZAE0A}|a~K3!TAj3hWy!JPiAh=!jqM@C>6R^@@cEzN@o_E#{oRX&xB z+BGg*9)<KrX={!w;~Z~ii{S*JWUvoG5A8_sbU<+ zs3sXFg~=$iE>&bm{1{D!z+b0Oo~cke2Lf&?Q34kOz~vf(xHIpH=*&S1m&A9{xCHP- zh3m-+l<*N(Z{kt{>lSoqr>AKlX9UV8MY>VJGrE0`k`Of_LfL|_;em@71l zBsfmN>``4|6JdHrU>Fvd7r#`rNrK;6q&#mcm=?mkdlt&0M%D}q%ncew60BA*$L|yi z$9WK79wCf21~Wd8WBaQ3L4YS}OHxwaq<{~4N?Na*z?Z}U<_7^DsDUNrSOvWOYh{}e zc&G-Bo;J(3fwyV>#0aam0!~sz^)qT`etWX{L2^D+JB20Xe|HL>J}4CVswD6;ae(>I;y<`ssXeB(dZ{AZFhT0j*0HyZl z2|AdHU7@?kDoODES5oXj+A=51i-Z9ghfWiA9KeipEDC(X&{ISh=nU|E)imM)LQ;o7O z5{p0Z1b%Ro4+o^$kdRNo$L|-2+Aoej9Ae3A2 z#CdqIVaOx2l-{PJKSm7!F?TH1BElDZqDehA9h$jY2ufYTxB04 z!K~-c69!fhDdeEVx*Z(FK>@^K;5I^>OtZ~rK1^iZtY6iAPvI zkoEgKRlUJJ#7}QaT!d5A8|+in9gCr1z~uGTM?<->_7#!`3LNEkAs!?&Y7!>kpvFIX zKHx1t!SewZ19hD90litPcs^hiIcN-dM;#3mrdA&f6hrO&Y*LyjlvdRcj5}8JUJT*o zzV~8W{}lIPd^bc6La3rJ2oiO&P)I5}f+YS<&S$vy;Td31BIYNKhCnGE_`uf+yi&x> zl$mF9gDF#B2g)=ADgs3a)CY?3i<8T7OKp|FQwX+w&L(135j>hGNw6=X4kA$pfhcum za~7`HEjj>dqJ=CA+)UYN@bl0dBPZ#HW*0Z1%9RD&g?h*3ls^3_Mc%lc+iSj`i~HMn z49wv?t3l4APBbgo>UiiyXByi{@A863Z<&=?{1G+G8kUtucm^t2jE2BcJap4r#%}=T z?wo&pubLiHq3Jz{Ae!D1gz5u#;g?NMFu)`4BEPpqH9bVI>8ZzNJf!L2iKd5NHoZKJvA&}PHgKe>> zCXR+cEgo7d8u6;c;;ej%1yevQ30t*qS4_t*`)X?l6r%jQQ5<<01;|%!mfGFS`Zh3VK4pj4lQm;+&%B}CA z?RZ6Xx2VT%Jn91pC>OVYH7Ry&V|gV%96Qw1K&<1JMAdv=X$P`# zNjA6XY}ULW*?21JJ*6zi5{kvAM2)FAzF(rUi9S*^udoBztiVYnZ(2i;4Q$=K4C_|G ziIY3~D}=Cz!pEWHLD%o|G?bZw@ZEGl$Zp|uK@{RS7d&pm{Zkj1u=k|%$P65}fy)-= zX5-K+12b0bE^p#R4AXL^=1j?%-0nUVbsmShPv!CS+TS2MI6wyN8K-Mp^pt(NhFj|N zC)}Nqn|Yiga6MQh%7_|0SX^NrA(In2*TrE^iSk+r-`om+TKFWHG0#E$`*5n6w`{j_PH%5(tvUcz@b|jW-XopB zW{2(2cwj#UU;E?LR)?1`ujMJ162BZZQ6IqUrBZ+g6{w?P+|Yi+qO~7iabS!~sXkA( zK9D0H%Fk0+@9{&?dE{&wr8#iAFYuWu-B=jU5@eRb%slthd+voIV`fnEOCS|4%iJca zVtlno!*S{ipY%`jSg_;Mnhigbd^udR9hm37T2RZ<6H~{Ir zdd~+;TZ1%>s;r(SUC@-kDA{uDsWDTo$7|42Tklx~VH67Np|DU9LS`YH>-YBWHO2nIc*Af+8Za;zYE zKqDdB1&JO~6viTn-`+k&B5N8jC~+!95EWTT&;~JzRYfu$%*W|+oK2Z2C;jrvi!S_7 z4Hj5;?WfdW0Y75J3Nc^+sukgP9{VV*pYf)S2Ji6=UMq~=_1Qd~SH>~ai0qA*lC1s~ z9anPFU4*;Hsso%!`zLE>@gR=>qUpt%(*@vc)e;tvNVNgO@^t|1s}B&Z8)%^i#2CxE zmxGd`fiRRvGZn$D*P)&BT&tiYp^YnzNwr^e@(I>`g}VKEc0-y|Q-xVLSewt9vuDpP z8Z-N%={VkScfCg+?l68gxI(>V^_JB>CQfc9{rX_q-5nr4QHY;=5Q+B`;sofKIAjxJ z9cGHb^1G!Z+f(Ro?gN5VEDWu@0;^@3P}{-7!@`GxxuqYtP|w9|W{u8x4S8YF9N)iq zmHAfHkZVyjp}4qDo8g3|tcgbkDwFDiCzVN64P^DgY-S^@-o#}qP-H`5n86%8WT!F*X}Q51%z!!Qw(s8xANtt#{51pTuK9mO z{ap8DC1>KylsOOE7GJ5DfLoLX%!dg9)mMlIHkR#RQD%~r~#O^g8&;O6MH-V3$ zNZ-c;WF%b9fQ$x386_@Z@d)Ap1~q{U^vI0FBXS6c3W|yvAwfWqKp4o_j-qP>U2)@j zp{q;$Du)M}a7+RsghL795%0$68bl?CGQa0}t9zy=B;xV^^C8n+T~%+r_10VO`_@|* z)F*za@-iSKvf2tZUX7^ej>j&dmdil-591B$@oZRQVZ4@j&y9G`gEb~@x^NzPVVGqZ zKfkLCGEEx6G{`b+jnKS;xWa|J7k0B0L^-erO*nQj?G28JEb}8}Qe@ho3z67c7V(yY0OBTPqo8{$Dq45)kv`$itOa|4F9olWLJ9AH@K< zB0NlYQwd&8k~lJf5oXksD{iIZY=t0obtE_wzi|Ww4pixQ<9;~MA!FkHI1@ohabyHj z1;Klcvk+W}Vt^net2t~~idPH4=eOGYVJjR@B3NR&!yZxiu?eXt2uASx4t{guM=*BT zEh&zS-}FaGz^{)r@$=?_y~krO9+31-ve4?O(DLT$4i8>K-jQJN5n?mO!bY59~n#Z!_Rg+WcPIxKUQ3`x zVpYLvgo&yQ=+#hdGZ#L?Ps#$p3V2{M316Akv}o6ChWAkphpomNE!wP-{4P1+A>3sp zIR*K(un*Z+nA48Dq&PAI_!p7VZysYYKn?mx9kIpJun2t78X>T^Mt2Ovs~R?)i#HCN zzy+t{wZ!{T#QQO&uDbz#A}x#|k0AK(?Sf#QVP}Gx-@ybgJxtVkTBs?HXlQwzAQ$t7 znj-`mbsN*ThFN(=K}@DRE}q(?>)dyQu6m~sUg$De*{K+BAaGabicT}}TB02r$vRG| za;j9t^qo?4?%1ZtZ4j=_tgK=9$mIU8lyw^3#p0D3c3b5ShN+UmNaw4gyaVnjVisV4j3D6T&-}+Q=VjV zh}-Zx_~RtOYT?lq(OimX9z0BqnT}Try{rwY`!bd8I3J;qa;UCw^hKZ~h~4_=%Q!8- z((3|GTK8U4dlH_Ve3IhG>)K3i=fif_8(350+s-Xp>8 z_)YSyD&J{Ti0z3bcle?haF3}r2`K?ZhL4QmwuMA7$3oHTLJNDO4^(;6EfSunF!Q=} z$MHnVn~E0hiZ`@yceHQ^yq0)Rig=Omn6AX&AHQPfJVEWbju!PASR)8P z409;b@F0G0PvSd=4>c;jjt|V!;i2OBo$(7*L>V4te_v{*(N+zB(e~ z;9~qTQwE-ZmW79D_G@^x2=mxkszWjrNK%R*?414xMS|z!7j2{_w;(e;*x6cxZ*;rh zfo>|Wh0k*Sr)Jy;TN=?i0FvP&H)5yz*@&|{C^sW(Wd|aq9T`aVeFSp83B+gugqZ&h zOo|1_kL?vEY$H2QHvB#y7YdMa08xTEgS{`bJd2O`8Jw2pW317J%ceu(AZKggQ)g0N zr8YHRG($NjS9EgprAHFS{C9@TjN%^~gV3ch_HR})Q{xw#aUm&=Ovj=y>G*v+dNX8% zk4evwAOtS4fp#2ECtMyEL=;P8e!aN;@fn6%SVKDF27iJhu9=G;GUPf4@Dxt*rz5Tn zA!k@FfSq3u|8QWj@!@|^1AS}}omkm$VwJ?4Slg$F6U&1S;>0TQV_M4JXRWWY5eqah znStfEQP9*HuH&jEn74oCX2RR=B{@FBDUg_taGZcaD~9~=7(L5yhJ)g#a$(X9eyWWRT7D{?OzYS8;^cmw zS(>G~0Cih78rcJi@!jac<^z34qy5sfywh%VdN#l7soX+1{>_kDY>o-fGk8k z6llJ2s;CHqP&AFKM3bV7|8j{k1fojd7(P&ZJHaw$ZTbGsV7Y)6M^}YpogJ*f6Q|zS z;h}1QHmx~I`nU2o`}869S^OdDvI_aC*u27Iaq#7WYcZLl=Jk)l0H?^TjnM*;L*fF17@_!cDTz{xSChK$_7RD~OP^t*vR#s} z*x+cab}4$T9(4s~0_(@WsdYchDhz1O-7wO|fX%z+aC8CAt8iGtunwgFp$0rmh17^w zOCkLS11CBzmN-iF!3ZrJDyTzT=F%KCoaUpde!7e zlqB%Z!v(oNrv^NMG zW(o|tFGS$_P|KpP)YcD1R}v3@C)^52p^XUK(m$)zoo2|=}2L(fuuQ74f?PK zJ6c=poJ8ixhLXRSoF*uG8n?W5$ua-lI4Nin~$JV!LlP4hsjNWPlN`lDVUX^J;|}f!I-#G)F@1I%G0B#!(|Ls1*ukJNCyH)s7y<-ByTp zOv4*7Ng*cuYGRUOVZv`VB1xJfVX_OEjJZh`k+N7D$QnG%S%i^zRSnpEBO8z@K(J#F z0Ksw)iUfz?mzd!m#!`V`V)pzSibjNC$4t^32{YU(oMaeLOYDp%40K97Ow6X^Rbh6I zj7ymUn9V@|m`y+^61*P2zzjBCsQ@q$>ue%M5O%~Q&5;m$1|W^$F~o{U_9|IX3n9+e z#rQ(R=ylkyMt?H(0puEF+@}^HuW)?Mp?CU@jfq&+(;tg+U#_m6=Ji)vbhCG3;QArD;gwHUT{Q|m>IMhMFoaI&&pSdhK-1eG|SwX}d{N)cP{^Iz6SVeoreHDiM{ zehM{HbYYTnp4jL5iTBU$$?A$>hI6W1LnfR^iHk9t0e_|Co3b3sdUF+ghD}j8Y00L z@C%M|KRXLU7;ND|$hfY2T{IDK8Q(Iq@s-@TgEb)t*wL2qkBqiQ(0=e|3+)OrCM)0ol0&Q||t@Md?4B-|Ngi3-D1R}vI{IX9Z;Yrb8%v%bPn?QF#pMZ>X z6MdE<=$pP8!Q;s2Uo(qT-+qAmy08`JJgv`u4Gll%5XTo&(2XL!G(BNk%CxpocOT}` z^!Lc;izKflwpx}~#)WA-0xD1!bq}0L!9{5}8gFn8gz1qmR{xXr4QKH^o9}w547+V( zWQtguRoYTF*CC=d8NW8Jmr?#X7%|h}%|PaeT*|`Ii;VC+a$R4zngwR5!pr%-?olax zDGRd|zL4P~lk{jQya*CI!MXlC>&a3;>@}53Gb;n_V=pM^fQWe*N@kXF&M9$r${bjeE#_eb#H4 zYn^k)z>femcL(Aj85iIolJN$HDUnQBNK8g-fS8sQYnO!6`n<(TY2oEXc!YzaYsFifzRW|@PV?!9v{i`Xzas1r1E*IT>(;h~)2E`KuNKblr4@f!r-g0zM3iB>xThr7GwK%%SOPc)xCOqhrco zlw-y=+w|o|k$4W{nfj>-PXX_^f z@H_g+m($rvNB*cf>B0pasFb8m5y6qTRuB{$nWWKx96uNjJx^~_gKGFPNwTC|J=mUF zcy$sm_3JOH$Ldsse8o|h&pG&4tf6Eze3>6P7c4>*&=r_RSf%)&YwAf@K}lHIt6T&{ zwHPkLo3Z`fwn_EaIf4@xs=+^zJ6wJpD{vc+U3Dy?aiemBkM|Rssas(K7g~rpO@LV8 z%7Xmi!MMa2EnjWi35f6#Y=#S7(&?o|?6&ZR0YT$CY?h6)Hqc~in<|C;K#X-qyW>U8 zGrZD~gaFk%Ln|CVbi?R5I3IyXZ~=Zfdd4plOOZTOF(b=ObC}=Qh~|J$(!_;b^G=qV zFu`R!yf3Ev2t$b$Q)SoU3lZfCfXCnBI;}GNhGa=YB)ADNB2{{(E2)x!ikngeIk;7- z0x2M1Jd98a*RteQ{CT-}6;B49@MPeZ3|oYUNiNg7W08x)hm7vZa9}FPQG`NjMaxRZ z$q0aa_aY_|ybr%g>Li0AyrETygYhcNQyA%gmgm1OB+pOy-l7;mvqz~Lurbgx+HCBEgoWystR%*M4q&1yE2TwF-(OaK{`k=3_==2LdVaG?wNVnRVFZs<%JhkF4 zRpNB1#J~31D`BG6L1AfCg9IObLY&~>Q4K*5xdaKpqXQAbcntxJ*YJyxrOb83nN+C0 z_T|5X@LdI@`u`fJkuiC%=^1`~e2Opg2WM~$3}@Wl1N6&SJpNS$VQtAjnd#>nMCEus z`9b3gp1JY?x1Q%~b1IXe zNN^c`n{+Z0biBWEg(Oq>aHZMtIFOP+Q37|DPJDBT#A5K&zj(HIQQ^LKx#98OAvHZPE&6 z{=-^9dRjz;8kx}X&1&k|Q8mud+wiDGL*P;89K8qS1P5=IOV|>1|i4HNx zAVt9PcNhX6=CgYa|CX(VaTqgE5t%^Bejkv<0;D~GfGrx4$<7va1Y!;b&y{n6^wL^> zvuV5vhL5E2?m$mBo`PpZI3`y(#xESBk-BRz8g!mfr@D5n>e@Bz+D_zCoKweQ;MK>& z?Ak<@od{jK4iD+t6?j3{rT{=T$Q$V=4<@wh_$ zW4!akt>m3!>i-h&j1eH4zgE0MV%vF#xPy22Fn*Tva^n2uoO>=rf)YJ-DjgrjHl*8g z0;2rkX=&Fxd(6W}1oR8q<@dt)?`oVj5G}g1TTu z8H~=aPm8)=zZq_lsQVQ>HlZ7-WN;{ltC7N3kF(NM6BH4t7Dfs;aFK41DPV<-lXbe* zNZ~Rr)wPcl{*U9B3M4fSd`q^ih}&ZeSz^!iO$5H>Lq`@HQCf1(d~*{!?YOU+F(3~c z;H;{&p}h=&_yFfggc8seOV@oXMnM+(kJdMb{)BaZ3H{Rr{eOLFO#xuZ3tca=9>pBI zZ3FSduSIHo0l^7`viN=@-{IH7yKs|9IMt#@+&1v?jU?QuD4DBQ#$o_1ek}llUkkr7 z%AInKFFXR*ny(^qnRCo?HvG4M;L@59bvVv(lPQ_+W0nL#B|f4HD?|DTh<=>tH+I9Yc#wAd(AkX zzpt@o8a;NI&R>bB`>Ir#%2;UJ!=Mbz-FwEkQ#gtbGLr%FqoCUT>L)hPJ5rk7vOMx#{2oudTC?L0te z$mhT_G!;IU!Qx|yv;nKE&EVRo|5K%4)R84y{QmR2{QJAMe~(uAGsOEEt zy-ch8G@0&-IX_#z+%@oUC2aE}7hHV@f6k1M03Crz7f>+@#R?5#RsMH+MyMy|l-MVl;+OrPHjA8eJU6d4< zG!e*{pVw_g&59eLB0B?96|dRipJKf3_VQD74albuC{rcV#sUJWS=GAo%r(xr+b|5* z`m7;bAEr->#9173(hlhG#0x+ka z2b3uGH(g?z{Q7Y0WqjA@WC1E{2OO`yp%><<@Ny+yfGAH>!nV^!=e&=wjGsf{T;Rr` z@JK%SA>aHkU3~~v@QHtF3k%;gVO?v$>`%+(a5>-XwT3?zY7YjE^UaI1iuc@DFsXP? zyMmL7_p~Z-6(4Bj4E~6M97G^&3jhz)ot7pBuRzs%wJu|UzUPsC{Amc`B{xGU&Fi0xAP2izA*J!p^>2 zcq~3Vj|737q$8{Em~XzwEg;%^5920NFYy#qSP3ikze0Wrbao3f-x~f8s9J??(~C`X9zg*zU+b`A#;bN8++W8 zPplycNgm=Ee~O?DV2I+k#^V>f+>ec-FPMaoj?utSP@`)#o-h-K{&6Z`PS&rt2QJqD zB^woHKKvJ`0NV-n?}xYosCX!-&^uQ5bWSso0Q-&>0$lNh5Wp86o^BYph?-uuEKM(w z%5@e3=o)4UlDFz527uxVTx9m@LRJ5fMvql@3J|bWS1)Z+UDLd3(&#POrB{q+uZeu{ z8#QjFYJBbI@f!bhjAedHF^XZ)thB_*eH_~;eho~VIw=x-3So*(+JGWSGT>+_!@HOk zvSidx3BrS-AeJdtKKl%-9`^i;EF&F9AG??u`?SS8v2s|3*0Wk`vq3BkJ!d1hZE#A# z37Xz@Blyl$&{fM^Q_vAzmTc%M+*=Pj0cUK91%#O{=RA6~U>N=M@1t@4J+43CRZV{Y zxgkW(l4pAs^H9+(#_d7Cq|$)v6tHgsY%9qMTpfV)s;A<>QueifXW3vp4H#hMb0v>^ z_E=HmB#`mXf-Q*Yh)%a1fJdb;9ug|va#gZF7I1Bd#0_I zazTeBt2C5~!k_yj&bSwt$FWM?8gio1dOv9RRTC%oyeo4pc0@Llw#bSB2^stajc44k4{tzX6;~DG_M$}#{Dz(r5+pw z3~cqCa{phb@4M|#-}3it^@ZWes>bwSeOsxo|D#xaKk3wrQs8vEO)22Ksbjd_qKpi@ z!f`ADC88Z7!Kd+we%T}lN2?m@3^o%+Dk7*@%xUUym?@1jSGHwWpi_YE0CP!32449o z3(ttGdWUF^Yv{zL=(<&#v!+3nUV#UU(;D@t#lu%s!47HK!|;0!DjL`t>o*`Fnb_EP zH)T6raGiFJfZV1ttkL0|`>zyq+i<6s`K|bZwRpJv&cU6YWEk2eLuwUvIJ;oAf()<~ zBRS?GfpY~B*Na&b))$Q7niQ;0(PSSOMIT07)367svA&a5993%#)Npe|Y^_1*n=(UO#$qiLg)jk} z3m~gZstqTg+sur7k)arZr-LWpfh3C*xVfqk!r^J`;lzG0MtRhJFbJj^P?bDooX4IV z)84tT9gO6VDC~BZ;;?y1n8bu9ZTt&;?n2DV8Uwc{kY8C=psAgxy5pz=U93*D((!9! z7kUV3W1&m!MF=ZR5x`1Q{Koo{snCaPDQ1j=TADZ?xKOF5pHalx-l_!@Z1=u`H2 zFun25Uul3z#{v;Gd@AS$+T`Pfg#6_kkg8as^XrepkX1#Hl(esmju4#HlANME1LM>q%@%cm^AkBo2v`ZPG2cyPEl znw$%GGYCh&yWsi&2CNM*aL(hQ7(ijMi9(()d^ZgD;SF5Xl&R^*@gyd@L#c@e%emlQ z0gUk%eJY_l8t?}z@H|w(qlJeWzRW5)2AeeY^?8rSU>_0J0Vb}ei<>5XK#l3kS42I+ zi0(%WdW~;tnoJY@5rI%i2+sq;VYbHMQ@4))drWP7Dg!xn#|sE0PTk5%ygJap>Pcz~ zl?ka45edSbDUHisiV1f*Q%z=d;Z@{4o)OuLam49C#~bJ|n9T_iJ4^;FM-Y8xDMKq9 z&mojBJ!qY=DIylEE6DVHP_4+I{Qbkj>)R+auHHiD#9@6$h=RUTfs2e|eTS#nsfbwL zse$pTjC2mNIabnico|Jac-eEx|DMW{Cf-guiwD}+lh3YMN($T2R=|(ILvOJamTo3r zFK-|K%w6GO&RyY+kf{vpkSpZ#5g<<{IqmidH|P9zh={uH&6Vl0pnBY` z9(SlmzIxoK9@p|=%v+8L0OM}_E;LHcf{d_c9LkIhKgk+lckd+HlYw$0^*zoqxGR_O zVikl_80HR&(lQ`vblYJD-93=Q`1)NdmQ^qgZfE9FDotcAGyXF(Hbqgv_gAQRh3e&vv?9E~13mCcn2G(?VLfF&x&(G3)A*iVG$5%k15NQ0 z1QwXFhFyL19@?Kc_67l}x0|j~JSUL>XnU;DOcl~+joKZhcYyXvAj7DXy{2Jzw^DIb zNcv7TU?^ZbO_Bp=+5rBtU>#uaL~m{Z0xl}esW?-rna_8_d(h11MgN8|SPo;(?U>a8 zNMGVI9&%QrB^yh;ynTaxA(^D*4Ky=3V4^H0~#mV>*hh-NWrC3*#x!h(6X!z ztLHWwpY7TWrWdoE8L#;I5FIvQf$!ct46S9h$Jf_xK|+vNl`srDBY{ZW5V@5|3a#FA zDDG^r$S5%%!4`?RVG?4}u>Ps}nB!k=DJJ6yu%@DB8M+!)W0&JW;&RD9f)#jx6&j3b z+`Nn1)RJ*KuyY=+TTRN=f8q9vN!a~Ef7#2Vzy87X3o$HrVYy9mDwL@=NzX}533*fe zVK3mACy4>vv-u>TTC1IjgNB14l*=LWBv6HA8{R^G$Wx`)o(s`--4-pBf*A~)ZZo<< z)?JviH^)K!kb}`&r_oGwS2H@L`RE@Dl9HlT@SIPoPt~;y^rc)igg5aiMLcD5@!F0g z0|c{kF0^fQ&uhe7T2t`u^zm1!3#r>lbXA*`r$905zhoEBN=|alUw|yJ^)H+V>zHLy z?d%eLOi79~$>>Nkl^6~zoaqr~q#_Tog?0OyuS`0UUGKbgt#foWlJTHkkQP5`P}N?l znw>c-dCFWg3eiRsyOYs_wG6v!evC_x?q8r&U^wc5^su(hqgR)fvEC*}Yv8bjR^VW< zj33BF4T_7B&>v9s6jYrni2Ff(u4bt+Ul~wi!+yIl@Y&~u2Su^f;0$Yhkfskw z(K{~og}dI55(v@g&F&Xn%M9U*ajnI!Dev>igk4Lr_2fnSYtS>nN{XK(&%0B=pV4(N zxm{?#6hAHn3{uTc#}y|KA4O6d_g6Ma*Yoq{D^74$UC;bKTg6+W;vn9WKg5amF>ecM zO1#(ZvXO2UE?A0@u3|3b%R5G6yQ=6sbgDEd%6ZNnqOHRB z%3UTV<7}BDB)d0TWS=OQ7n*~BQli&#f0WW_)pnxk3Pz5t=_a)RqvX*zA?Mj)3{@~v zZ7|YWfZ?*i$g;y|0~n?-&1bve*fJ7} zz+R)ua36dq-q<6E&f&c#cZRLk3mon~jK&Azr0d>14EI2rQ0i}oad4Kv*kprI`%yFXLpkdnj+gU;y@o3R!`7G3 zJz$KmJ8>+;N1xILJ}Q4^S3>hheS|qSZAN#Jdt=d^zC=W}{)4ke7L?6ACWEE?GW!$u zybT$UcCK^&^9b1EFV=I;P0_or(keeo_O%(CfezHB`R=u5vUIP(E%dG@&FB_7*E}=2 zWAnf#A{v+34$_m)<@%Dj6VcJ6|KZ{`tN-Ei8Mgj+--B^#UjJdU6i?`X4}wKws>gfR zZ}z{R!0565cK~T){clrm%#pQ03kCFF%t@$sjH=r=LWyI!1ay-xJS$%d&8qN)mzRUq z#TT}A&hH6h!yLcKg=@w%Lk%hCf2$ap#>ko~rB7|2mhlq?mU^Bi>i%?K2bdMBzX8xB zZcTKT&JzJNo|%Ixr4J`9BHEZ{W(>P|R)KMY0zJ|O`U*3Hj(z?mfDCwETl6_9T0b`G zzE;Kdv&9~#;Ayr`$@0lk(z(QG>&<9Wz1A4Dt4h^kyD{!Rij<=IDrc&IB%Yuy(|!8B zc%weB8}VKmj22jtfcF&GWWy}LXkLmvxv(XPwC7(f#e57mar4lAe287n{rIPGDfa#Q zK##^wi&AXihc-;N&yeO_I3O;s%A13LQrcV<*DRYpvcb4t!O+5SB28`q#=W-QQDTQN zOu^`GgOT0>4A;VVIXQM1Z2`lSS1!~Z!iq$o3Cx8>2rkA01F0HgiElUC&>B18__08~ zX&WC69=RTKGr=NotY2SBF$G&-=zz0NbIyMU0kM~%|4&O9BnCiNpQg9f!rkF6UyHGl zOA45LEtw2~%)FXH+#<QC5GiQ-InTwL{(;(N7z~|( zxLE3JH8?gV)bj5T7Q4pQw1F025LXMvC_9YP07K5jXucnOh`xjJK;nMyh|f>e`Y4Ul zZ03Rg8vsHAwA3Fd6E|LmhojWUY2rNYCO6HzNkY7Tc?Vf%Kf~JoENejR4YR@zi{=}p{;14iYAp^ z7qV6MI23yrKL|O$eSm!A{=WrrGQ1COWMY%m90f+$eya^&q(De8{KI&YJ;`kGO9?S( zV`DPst5a<`?^QX!uoZYCbH>rn!0_A1>u&SWjZ}HsofdEAbC?Hh<&Z|O+DfuMY9Cvk zsItzt75DRwruCC-$Jnv_aw_Xr$_T3#{oqmprB1U!Dkr2k;ziP5PN2M~VI#60x4@Hv zcZs@G4p%Wbe4doxKBrH-PS+3|>a@3njge5N$elJ4`c&5cn;&npzcpW{i>BDJbve9F zSEF;IP9trQKG=SEovM#dsM8~;hgGLp9$Pz=PZ6%T=I`-3g$WLI`c{fasMGf|ZO9d> ztRDsAb-IjM6GVql^yb@b*)Ei93GJl!lse6`K}u<+PCs-@sMC7X!>ZGBJ#2OQ;C87~ zxOcoxuWnOydR2-@sMAUIIz6GXwzpw&H?tmIr$u&gc#~vHsFV2Pn)*ScZ=DVg)$35i z7$Cf3B;Bwviqkgc--!>__yNuPZgHHbzitHrvDrYHaaOJO-DIQdm-$lb+jhnK_ga;6 z0?LXrr||Wz+iW>sP&pm*;$?=IGoD9`z(OV5lz(Kp%F{bNPUAf00pH{a9E--1^|k4? z;x15GpRrZ(cxF{M(wg;?Z2jz59wpgI8DZ7`a&YxwGE(Zd;a;Vq1@DKba!vw>uEN75BBh2n$^Js`d(yN#Do3-{)Y5tT7a8_3?7fqQM=Kif4G> zDBX$mWH7wWc@9e%;ZDEcf;&2(@*}pvKFm(n^nnfF!voL6+qZB_0#694*Boo>cN1<^ za~I!?X4#m#@M8KS4=b_XF?v@f%v?OW^-#1bnAH}@;$I|~!#7N3@{7!2a>9ldh}$(1 zHUZXS)M5({ZtbY8E?7;(t!IvGc6}h9OBVYeLHaOVltxiB(|B zLREo9_sDj4#AiFtT;p5>bK2dc==zFT4yDe*VTd_`eZ6_zzc`VAreDHTHAvdUd+;uq)o$^qN@s z1UM{Wh3~(a^@LG;-#JovO=97z@>Jnj@xs^N5-(pQ#FOFgmNkvE0Vq<}d%C3SawA@lnV@8>sy}8v^MT0*xjDKbQzKw1mL*b_5RG zB(40Y4dQ!mqe{3Yx26f=w_?I2hIpmq3nUpM&lajR>1}KFDa6|g;?iVaO^#D-DvMx~ z(c#1Q z=4oP;`}{_BA?LgoAjZL?;{6 zaQakLaFQzclg06ZZ?OulHVa;77F^L%!TNMt!52!w;UcIDV_SxBC*Ko`KY#@?!XJyI z-WS`7{~x@5?1btpAL)ln<^h00qLi>&!lR8Hj}_NjdaLLn2-1ARE68~B6EXSfJB7*q zhozsKjFJQS`K*yJ}dfSrBgHbdw{_BqE?$_~KXX1M+3dlZa+sOifW7R8C_F>BLo z@7_1bMz^DYFMBsnZUnv_qx4MS7*8U;vtL$a4F$eREwg%u37y3ul`Ki2v={eVS&S8q zn2eQvhFM{k9;n2_daB9|VSX2aY+(V}!&b~C8FC`Wd0 zF$(93On=6PN^299W~uY;4Yo3j304`+S|JC%Rn_e*W%zO2-H0V2gNjtS;8b z0xZgHesRgKU}?%bF+eKJ%`=kcWdtyLs0?I}ESSjp5p#9Bk-853!1(?N+J^dPOreZk zt}6*Gp`B@2oiKJU(FfMON!#DAPfnY@P=AkGsh)XyV>Aax&FKd@%^<5Z&G{WJ2+HD5 zfBt0f2U`-xaBE(ekaP4Z1!AyJ+p<>0X3AIxB4Syk8s_A|KvtO6UV?VhgTz`J;4LZa z87CjV8LMFB!ltGz9UhJ}p*B)Wf%(m~pk}lRhbubgj;HUFi%1T2an9|B0H#yTMF<>4 zc>I}l&bbH00V-n!t4tjry%j~%dEiO546#Onr`=m^+P`ouP>-V}EpSbHn>{#zc!b@n zFv38!%4wWuGY_oRzP-e5=Qp+_qlRq2d<>#)Wf5_^{kz3j92xFZzM~6TqXL`jfQA|t z6;|3z_{M9btmnGL$0zTuQDqe(YZEljw-1z8tE}_$ydJ`!;OgD1-cEoO2S#WR0@7?|X1l!t7JyJE(2(Y){g(PS|RlhB|Q$ss84o z*(pf{H~DqBIlvd)&~%(H#ohelmgvHM+j7E#ura*a7;`BWpVb0{wEq9buZs$11Q>N6 z*ONWH8toADVj8OM1tN~%h!kT7-(x1VOaVOsP>T3c(7$g1mzi)M23!cxN$eL`LXIQR zAvTKpx5BQEYQ39tSr2twGY6dJyo5NoahM(`#D9X6IOzX5X)C%CHfWE)qITuI{;8N7 zBiw!OiZ_D0QZ<6ov3rn!UVYjGa!^a4o+;8@p_gpe*?KBN0s5u z*&;$z%E&Okt-4JrE^xY=-_le%Y1I@HKbOL<4D>X*0zWFdbQrWOKolQj4go`?5LUc- zg@;d(eRXDot{oMu0#4V8=$)cS0xB8xUxC2552_(sl9@9=ZrYFeD&txkoM&@2kBS)XuV=A z-Rk7&rhcA>WvQ+?pYjNj0Z-)w_IFT{pq%8HZN>;;&O!`qkqV>t1@v#20(9P6GO40Y zp7|GMn>b}D{RrajqN`a4wQP*a!np4$GXWfXXhz3{wgi)y;1(+Zif4j}qvH@3GJ)Sp z0Pi&ud^0YdU=>p>)g1{pGDUG%kdz=GKP6iq3_4&T%k6OuVP7CKD{-kWG_)SL95>BOIw_Pje+>rz||49^?Ao_o; zQVS1$d`J3$tR3(@E7GFN=J=;``ANrF1UT#ertXv??hdx-}zNr6_CU?!=)WsjUfh%pesmj9x{@}A6PVZ(W1GF77fmLfOKIp zbab=6`Iv@=Jrw-1FLH%TnH#hfk(Kv4ifG2P`PEC*;0w$Y^Ts*vvkZRFP+-8tDYQud zL^T3H(t=}#Fy36cs}4ezT`~z&eKw+~y39t^eNV?p*y{u#VTvt!hZPMHrl{ygY|+aZ z9h;{ULe0IHnA95WSH-C6yhjl-gH)X&b^vHZ#&g4oy+=bI)WRd-KfQ}5f^RWCmfAPa zx>AOs%^Bf`=s;h|n#BI<4n9d{z*!Ch_t6*0^svm421Ifs38L<6tTff%i@$Ql17iP3 z6TkbaU}mv}n9G$(N_0trbtA=x`t*sk#oV3G7fmG!;OqO95B2W^r)I)fz3ccHts-gW zBX^uU0OKS)o>t`veGxM6zn><;@F)>>`;-5MD`>g`Pg{r*y`%~9#V{Z zX@&F*Ddv||$eO)sqp(Oq&MqTtIlrKK#J+^L<2lzbXB_DUR%-KbOGyy8g>mimHc0@|0A^OV42*r6cXxZW*J-GyG;`sBAadvUQT`a%+NB zS1E19WwvYwpfeF~DrsrzAt|Dy+uEwXcBQI5yQkHRTP|s?`nx9Ds`8iscXyf+ul|f? zAO)L+biWn+vAYVBqZmE-I!>IS5PY89b>~GRporumh;CI$O&IVt?A^nH(xt@ z-Va~~fDyvByst7ZxbMa{$n+LnrP!0k*@}HaW!<(R-imiKYriN(A|;~b*iV4*{FOEs zV*w+F2i9Y=_jDXmhXQ4jijdI{0-S8010C3GGj!rc0>%;w_qPL z#&oj}a7ld*btqvb?(n&3r;b353%Kzm;V{2$z zhVN3=lEF4VMb;JTF#VP(P^YZm*nLP!X1;5R-VaTt2(iS+<_kBV2&3|A?CT^(dC@5pz^64;e(mTlMp)arVXfz($OVh`)5j z(pMDzimzm7E;w9p5$h`Yi{XL}N_Sy2RPU!5A;-%5QjCe5pj2nCOp-z1m_F=w7NZEP zy`|j7*x%H8vT#HiXVf5CO`-~US3Byl;5&#=aL^=8UnNQf>l<-Zh;!aVv@8^hrtgo} zX9yNHX*fH|$GC7_g+TbCKLXU%{p9PFv4(o#WovQoYsXO)sOCF%9#G?HZNV+5Wn7OJ zA%V2x#BYgFcqGWF4M-_GK?~o{1GrH`;os}QvRE4(d;qz|vMc4R>E3pCNy(#PJ9sJbGs$}J*Y@@e?pr9dXs_*9w zEM4}jfK$Xu_9&9EFA86T5kQa2)@5_3teSf5S9qC740bbLn@ym3o$<6%2YGcu{i>BP z88Fd|#b?62IJ!&YZ1Zqr_3Qh2Sk-isqn`l9fJSV;4s0L7)%4^H9P|b2vj_?3nkl?m z*5`r$Jg}W$I>1KY1S>}7`NsV7IrGb7-RM8+PBu^xtIym8RN*?>WL$Ouz=qnOW&~+W z&ETjd2EO1KNExpE4FF6^HZYdubhp5Zgvy3yVHKgsiZ@_&^K8aK7pIopKaRkah_s;N z{K)=zHtgrkM$&Z~WX1et$U_Wj2C`zD8}>j%ugMd|Py?1Sj(tgJZcR7J%zbN9fJp*} zSR0P}B#-;!u5s2q*hkJMS~to(pNKo;B>$jgVuxI{O2oN9Syql>nl4k5#Op6n(o&Kw zhLr#WZ=4!OuuyV3(`|E5k}q(%E#G*RZ^PPni5D;*bkB?OEunt@HtiQF@>FDv4Na5N z(100MJ$}AfwQUwQay16RVx7y8F9Fzxj?dSyFt_)SE+Fw1<3)r0l*a|jhO0{^*Mi{; zFlCMLAcP9|8sepdZ$2D53GsD#3UZCeq*#UD1mZ^-abMtzrk4sUw&7Wy4Q75FH^3+G zr8Ah0p%2fmoK8ki{E6*t{osnt9`Lwmkh`w8@yGl+uwPUC;a--&03t6d7t-y?opJ+G z3Qh!OLaBoRG!8DY(dQF1y492y>bv`N6Y9X2Yiv8y1*3&sC|Ywt&@!p}Y1sS7?UXs_ zF@C*HO!Kh&+{>k@MV8(3Uxf+-C{)J!)2LWT8!GD=fDFoiUn!Koyo>On#N5_fcrgQ= z0yZ&^_Av9WctLn^%W~liN!ydf#Ma;03mf3K71oi}z}j;uOqIXqMd7JV{xe{DhaFx# zOgU^7cZ11VQqV@f5W+cca4SeuwH=d2J(gI6#9zmC#4c7AS4ZLz&c)qz0~S!cPn!t+ zyC4N`dPm3*?6*9-gyY}L?+f}{J_H#b{3PrmDLEHVYwlT4Ye0Y%!5e##2*ZTvT3vv% z>7Ee2LH)kHF5cJLv3{r#AzL(GKEBDKNokh*&B22(#;3!CQu}Pv$8W*uNk~#Vv-LWF z`44yWIm{t|>i>Ym))uU92Kg9}dfwMPg3QpkICwZ0AIrdk#;ee^InHzmVB@uHB1AY? zj!1-qNz`QNt1A$6_FnChkQ`X!?7iHB5a2YBK694i0?Tyq?jct>J^`p??j5d>P*5`W zmdlh8$IK|NPUvJ!s4$=L(`B+?9Oq4BFcQmc@SyVruNq$A(crQl$Cq_NGNC_!Cddr!zh$9|ACkc<31!1jxEd#2C%g&blE^Y?J zPKTq|2UE)yin`-eghGNL(Cv;uNpPT`djZiU^@%8{E-3b1-9SuxFK-#CJH>q0OGy^{ zkq$z**!c%jnm^KkS1B6p?zNptZS9AY3SV?RMfXq~nl{u`a5efKNKO3E3PcZ?`DzeF zyyApSMh=E>40yQR-lNV-YqgqEL+K98034sA!~@eB-)gW=iihIpvpx`Sk_#T<0J^rQ zh)(O@z*I`u@wa~f1g9#t7_YCPD7qw{{WsTG(hEm{a*Du-xg18~u|t09PG_*36b9)a-P>6reafkNYj zc1hggYMgq!m|A;o*bg(ty{8ino`~lP%O#FdYmDmxJgX5}mv+mfr@0vl+kJC0s658A zaBzoF_6;cC?xc>Y2KJ+bJKi0gjuaV zCk*nzh2p01q?>LUnnzM*Pb`W9YIoVJu!V3lg3<|A%3c4naocQx?@k{aug)0eNtg?e zcFN1Mjr%l}t(7g?sZx}_6GBL|hOy&3>f?$gr5|kv(@KG9Urzp1wEF0oW=r3R1(0MJ zp}=?m>(iUo|d1XV~_gMoA;m<98vRm^s?`oAQ&=vvcl z!$xim&mNJYU@^`CGzKJ@L4Te#m5n2LvG@N4j1=@sW9%m!a59d3h_T;`{3PtR51kI% z4Fmd*fj&P7zth&9Kp(AIhk0=*`8>4r@x$Y-_6*#eww4x$#DnB+i)f`eV&e>XjYMb}d?31(VoaD%FL5n}kIjsJJOkjXyfpxtROO|?%3y;EHkv^`5Q{+)6=$FZL%Rlu zA~LzSjh_4AP&A;wS%hfW)U!GtDB;A;R#@^o9k0Hyx0Nq6pYa?o;tOU+$YlsE#K+&M zcdno=%0f2kq9%62!`XHvybvK%39oc4KmaFMQ42#Q--%F3@InM4!He)qE5nO5BAvZ; zy0x@80neXQANth*DiHOn5azXD?JJ6 z3%2#Yv>Pr_$sFaGdXu&)PyKUf1BSvKQjkgl%qqhw>ZNM(0LpLkFK>g#LnA%?HfSLY zhh=B@L-{HAb6p?8p_rk-Qmm~aVlW^`Iwg_#Mt6SFjgTZP98093EWuP>XdGTpV9{IV zXU(;+m_A{L;hnx5&4G!h8;9D`>8F=c<=c%7CX64p)Pk|`Ev3j~#hj&AR)oEIrM*@A znP!D%HYLmoMqb7<%A_1+d~{@`s$#|mt-*?mR4X%;?syHMP_P#7k>CgTm8NWcs?GX!TO0Mw90BpN=-Qw`eCbviT-u`huFA{xe!^)EkZm(xF)%e`r>E ztWgjAY&NPtG(Dk7abYH!5J`WlQTyDG*r+(#%*Bm!Y*Zl^8W<*3d=)9$mGtD@p|N)T z+fis&9EC}m+mD@>Rxw5XSqAmcpJ=(uo3xy1$6ID2TkgNFsMF<$FnZy$2$q;lx65ie zTG8Ho?1Kz>rzbXAlU{g!g1`4q_QzYA_Qz+WKXMNzPOZ(4HQvAjzuhC@-TJN8yJcdN z);qlAy!obOtC|hMlI>>t&^H@5C#x>Wrn7fRX}TlX|JQ)HM!O<($xP891!+JwACR1# zk3zeIDU3n(OJMg#AYMe7)MJ^yq)~Hba7NwFvGN>0R z`}ucKHf~UW%B0yUiWa`gNF%NG_q32q&lb96TX^7Q=(I(q|FVeslP-Je0be*T87`v~BW-pSlw5-HyrwtuR(V;9r5+Dg zo;51AmJcXT{E70cv6SazIIeLe{8bPG9@L*?@?(16ADWo2OaN~g+(D51<<_}Wra8c1 z8Gs^Kjt7JJq%kZFc@(-Z%Rnay=yEAUt{a&)bt;iEbnOR>#4Q;a@0{YYRr+hyc z=c@F=Qpw2on)9>@SR|MtKY$bDLv78?x=ZU%iMr2ig_Fjk?lbX#7ZGXb+QT7s^S>k8 z&srM5@FXSBrpjW!F4=lg=qNB-vc+u2+PJKyGR9@h*by21nNqugV~{aBbQBI>Nyd4$ zM7{o4tVRG8%kXYIjGShbnA0UiE+HWbq{ucnxC%u|W$RHSM;WA+F;u20OD&Z*3n3=&)EHN4sF5}cy>k1Vl0mU`i% z>%h|AME-r~R~Swv@|zJl40*WGT11}hav1Xehy2M2$h(_E9{WUE zL_WVc%J=;%$QQz%F=o#sgBLE<1{9WQPA`5!g-gM=wBh{&mb1P6POo|@VGL0!{dB-; zp{LWUp2~zVd#^TNiQwz>s;6Reh$0u7fJcPTD+ehs1`pUj=;0K8&GzuZ@`6s9bkG!{ z#*?1esp()ZGhV7^r!HK&53*r$uddGYFR-He3x*1Mxt!^T5IW>cufodfb@;3BI@AA$ zU43H=rWn(!qceRiQbhI*g#)%%3Sw&!JL*GtBJ1{font=3&&baa+Ro4KVjjI3$v5M} z2F7gU&jv(|tmWHorgM(k?o7wsKB_#H)qrn5GXGlSJA{N|8ksuExUGEKMhFqURUjW0 zhT{tq#z`G`ThN&A5!?Ai8Yz5vdWZQErjc2tj7(6HaZBhQ-n-C*wrAgkpWy;G;%9N z&KYa&XeXNC(lzxdsJ`*vQEdqulL$!r0n>hfm(6_Hj7+-_s9~T6f%gT%S_{HjLRf1| zwjfLbVMdYMqoO3y7J?xZ&};*8W;@TQyraEyL=@mIJy72fkSmQdk=dD!$!g`zxVP^n z90jr)SzH&?wUaxTu$B)r#ypAh%-U(lG$M+>o%q}0Jmc+|tqVMeJ@ql9b*6)H##JIO zkj0O|pW6Bq#^1&GGqxl7u`1abM%MACfj=P3K|~(yOy2|;TZpzZeJ{3*q973I*^zDO z1Ftq7#0${HtMiIZw|M~c%uWrxIwnm!4N%5`dB^QXt&yj~m?23CecX5a`50f{!Qa|? zC$5JE=&ul9(sjlq3Mx{$9FGq{twC?_B9ABpF{|;tbKrA+Y{bV|2DDlQTD+hOK6O6V zRB99g^~a;bVc<^1MrmNIeoYh`<6u2e(IXR}IiZE2&_p;$rq7j`RfZHs2{KuNBU5R? z&L}t2t^`?-VN--xNS+oHAq5CdC!uNe#`#B+w_WGdw*~FyE;|_4isY>Xhdz*Qq7df} zuehF`9;>Y3)I4lAzR@@>I6r?^TSn^r0BL!#sv!G|%IF zI=vq&sLsm-YqcptFvLoXDeTY1Iww)~ZA#@m7u*th+ zL=Nk2MC7@8n` z42zobuyPKA(MAR{4;7@w#_MkztLSYgUYn|AekAu>6af#d&lX+^A(xuA_UmhWxYX3& z1_!}&EeT;7+aj_YPfg1Qw-ub=*Jb&DzYh{Oa$OO<6NcVelBpF1Sg>^xl6er}?^7Yk zWa`Srl-DpNVjEDrntqeR^jIFg7=x}~AAL4g$%U)q?*H? zC9+(F_rc->5M)zVKI2B%Q{(GTsFER4Pkj*X`r@@%mi2MrH&#wvT?XA}JFduRuwCQY z6JCCtd!KlX>(Np7;=S#8Mf3xF5NHw*L|>Nm6cBkBwtDd3Kh%=5y=E=>idynvjQPJq zv0BQ9*Rc%?&}0LNrjJUIdr2>dt)KDhgI$;;%TgftFnaeO$Gwf4%U|n{vT#26db#Ml z05ugb>hrY(3`FXX#zcg#K!gut`-C{T<-=JDktJM6giCe{2EpGX?|NwlKcT`s%CL_V zj_r}S8Mk@vp(8+6B0aQDHQr(>)1l%O3K#MH?V|~+bUNO}{bpVt$dlh~9`Tm04|F%Q z$5m_#Cac?--#XMDE79PnLFP!1AW%J=G=JQogTOP)lk9mZXEnBi_`{E-@hE+tepP>; zJ~hjy->JdWoZ5h&JL@od8eD^)VH{;$UXGuu%J6gDLj2rZgrAr5F%O03>)dnc(?83; zI(uC9*z7U5MfrHFaj)fAY`z2dj0WB5L7k#n$?)|&v-RvsdBJEBd!(D8P zzKGF@n00J|nO|Y{PSitA70muKtSM%T9#RDEWh2gK7WriLkMYCp7BxSb1Zu8lY;2}m zX!2lcB2Bj4D>S*>R&w9NNU8;( zR|MXzF%H79frd3MucZSw#mHPFyG}t2;iF%sSoJ!J_4<}UX8U|6Ua&K1+F96UJwB87j3B@QJ-G3eVQ+y1j9OGl!@U>I~9hHJe+{xXtOY! zNsMc+jbV}%D?A1@#jvlffK$y(#Bfv$!?wh*y#R1$+EVXl9E7!-%$w%g*2OF2+cM}fK9Fqnssvr%%bnF1g)54R}p3~-hLlvdz z4)?xO)HNC2p}1|k-%nZn`#OV9AWm#L?;?14o`t7q86;0q_(~6&W|1-KGL#!aT$T6P zV+aQEJ($Ji*o>)gXJ=dx)M*FaFemA9uIThOUQ4ttSta?$XyLp?6ud{t+E_hrnQg`* zfSA~wH!aD_FVIIf86$2mhhpB9D7>n@LShS%#2C~)o>;7OTq7uW-->uEAysedv=!uq zbParkDczMww+8b`E1kW)J5g7B_wHBMBL&(ra9qUOs}(e%cLA;$_FyS`L2^SBOKkMP zAf)**sz4R%Suc*t7-+Uzt=94u`#)=7;s3s%x`ywTmwI2Y%nSArgQF8H3c2YlKaXfF63q&CL^JXVL}s!SZgi3GDS$FrqilolS9 ziu+%!%ejs@;^kcbKyF?!|Jg)>pW1-GMlIA2H32saHZ*lP7mCvJ+7cLU=d!hS>o5U-rdrZ)hg4z|pu2 zt(R6@SBJ^>#`@H#`%2=#rpDg(w~aTDvc5IfrMA^VLsPUiSdlDeEDXi`**eeFYmHk2 zyftVsmSkGD<_JC-t_4?}RAHv?@&O;cosUO2e9e2*vbfS2OPr0#_fbe;8^`4?i`wSh zYFM_Ojhoum^z!wA8s%$ak2}s~)1|{S(n5W-$}b&Sn;*5xuN-JZp!chWBO|a1pn&@) z?{q0-1<|PcE(k5+Xv&YtX{jT!ugo^l>lV=W2C!QMxB*WZtoM`0AZ38(?by%pQNiCW zdp$g?zi}Lmq3|$|@i+$aq|{FyN_X~!j|xBZ>quu>&#-#@I4*tw7h3$NyHog!JJifyxJjk6DgItAY z`t>gU%$kCe{h0prg|M74J0%cu`Si=+jcXkU4Z^Y%A6|12iOlEwal?COtdBuF^A`-q zhr+#no$>Acx(|=eeq0;x3t`E_#mIaq{<08kL#lvG!B#L;$*~|4C{70exQ%TLmK}#1 z>AM^elloV*aHrN-N@!@k&5NtJ&@|<8VQeiX5uARo_2DgkHpXhI#aT33n=S9tXQxQB z-Rh7m6^?-ui+|3 zut7R{gUJJAB#-aaI3r*rc3ZkX4A#}*7yi{XCE2eta2rUZG zSrp%yjzQbyC{5%}csOQ2S+;c6%$q%h1O57X<5vtza0VKP(8ixxRd6znu|WHuMXvXU zaH%M?XQ;m~q~UQT{?Hv+O#My%%!374*8Up|Q-4Q!9a$cC#X~6HiTs6_gpC!Zg}Oma zvoI|*%vKoc6{93c4K5lVCpBA3%f#jYXK=Cjwm^9vsgq8YL(@nnN4s-{Vg^`F%f9+5 zFdeuvR&evRtPg?d!dPx-Z2w!++tN(=YKc`PO$#Pbl4e+vw5vJfKWnZvi zDV`Hp;Igr*z&0900RBYaUIk%$l9UzGFNyV6*K;S(peM9Pf1`#1fNErfNP@SGWyc>$ zjb!{OHPX{mBj1hrErN}zqw+8QCLQhj#sAtT8T-1j55`1bRiXzfbi-=L#3PbjOrFTVXXt zD}oyezYT7iaTFXPu6q2|1h5W*FbX2sMKiJM?rcEyXnGqT@+%k>CWxd25Ys!XqP8JN zq=?y)(yv1BZ8Cnyz9KtM41w?qX`Wxu9&^5_qi0ZeZ2Zz3O31bfzrF_so|<=*`$;CG z;fU7>Y2&l8;V;8@ARR_k2>&S*a7`SeCMk=My8x@aMLetn&yo~8;U0GU^V{}#avBqh z8ndzZ9}|_kH@M;Ox!;OL^NWP#h?EC!5Yg6Y3cm&@X!Ms2Bd&IFmfY}Sd1ddupFlx zf2*{xcU^P$T_?$X*LmwOMkq6OwZZVrANH1E)Uc41$Te2{S7xX3R*4aOy4+xiB^~kc zP_uUQ6yuW7>#-vlHc4g#cVDtsU@t*&6kDxv)~VX~>BX^G*kVn8JsWpC{ax7NyP@C` zZUUOFga=Hy*wD-L7ABbN)8H+<=|k}rUdM;=?kLPIfFiaw1GJH>%}8VV6YvRUu>I&; zGoC|Qj$-t14IDEx)Z3n+40Upj-GPAi2&JJMbT->K2?(XMOXCc8-3`C(i2Yz=qdgI znrG@!vg8xL&@{52wZJHvf&K*2-eQ(?mT1d%u@?{;$8Fbb8fQpjEysoF6_uaR*Lh?tTfETpSiWZ4W`JQ ziz?@BC@}HyL+6|LELRy4CR?a-7P(WrS%O?*%ISV^6FenYD`DUdMXmvKA zdgpB@?5xliF+iQ?QnEng*ZJy$RWtScJ@rGOvHGR4`L()s#QIdP)xXbC$^u zhw-Nq?3q0v>8=*o6Z&XQ5qoO1LJP@TjB^v(H{SpBz4|@lrHB2@W6>Z;x@-E}N%$i3 zqXRMuF82W#)m3KYl!gJ1N;f?{Zr?3p|I~3zL)Z6>$0@R4GrDwjpD+7p?UdaxQdBRE zbAHXG&`#rlepRXcUWd!tLY{tY*kG*u2~QU|U+eQft@sNh!-eg?Cb^Q5roczCzL$mz+qFK}1YaS8 z;c0E7?iDyE9Zmc$cMP9$1?vI1CrUtUTI_j-^_QiF!14BuyCSms{p9Qo6BDaq^#cP& zd8S>Cl`RS53&=CrKklc`?f_+8kd|&9F~aRCSZIk+c21fH-*b(Zvo}T|;PB0PX5@}j z^r1K+URrzgS<>1gNsjT(bQ-k4>FTxRt?Ivu+oSIr|9*-F=vtbqSH+psvRB_XraaqR zJf;FQ{ZhCjE_D@j;Of%WT5)zt^4dMyAN`t6m=@!EE{HUZclvZx5?87X0;j-w+w&F< z#8hO9{aW~B!{*xsOV3qs487mW)3(ClF*qevp)aM@$orm07ap z&kx!2lZDZK@Yk?8JfbwSDW-k~K2i7bci}BBzB3its9_4mE+^#Z>#NZJApu}gWxzKR zbr0AW2bVMqFPIXweB&b?6B;2`ULl;}b)P4{OeY0g3Ly|lt~ZhhaM)+866g0!#|QvwiC zSkjCAS2}8)J;{Gv64C_PRMx}oAiH2#aZCueqi4!Lkn`ojX1QcD_=)e~@+Mj4EC%YC zl~da@v_X4B+kZfNwS1>hAs%SwvdXonZ{C$k0L}S^m4IRV(r(i*&Pkgd&<{Xq$aU0L zp!4gmq}4GInkpZ-rGsHI3c7GRB6y}V=Ei-+L()C#kM#mB`8q#k# zC>-FCB|*^a80Za2hg8Zaa0?i8{c58M8v&a@@`W$)7{dh;X2@xSP5~sC)|hgmg}e@E zfetu`viN7$l+!rg#N@u^YNVTy!%VxYaVAH6tN$N!-vS>+k^G;K1Ofzi5ms})h#Dmb zVmwg81#|;hn3Y`#VgwZ-p2Fb?8X*Bhf`J4{99QrOzH^=mcfJsnr%Dh=f5RZ)Ki+ol1VI6fCT|E;20=yRJ8^lvHys^cZ!e{>l71v`^db~{b(Lm8ii z+kSNBr)gKklleP@k~0xVzGLmWMjOq8aRm-Ul;BBi;V!H*#05?2FoP!u<~GCGN#x0` z*MPI&3gWcY0|ZyxWtk_$+FnF+7SJf=Ga^}=L)PY>2iBIX%Nsq4ES>g|VCf`$SXipd zH(2ThOSkPXS&HQI1`)45O2(%7AlmaN+JPIuTg?752ZVS#$WOiu0B=u0#7yvIqt=ST zNS$TAE;+f4oJ_z0ViLmA8ymHUrV$2G9|0qz{-dF`FgF55#MQ!Jm{W;*p0$U$5HRXv zsSD5`N{tB#ZCIoIE61oOG)|#OmP`?II&%b3_8m>izUZKPedwU-L9pt;s*j;6^ovl) zl>ZdbNp3`~rRZ<1vvyE;|6IQPr21#!V53Er{`u>@P4v$glLuk_^Yhdu`sY%67~Z!N zwSSHcF(?bG=YGIIQ$Hwr2pg8*w=r&|WDau{ppQP(#+Y!Y=%X3uAD>(Y34gGO4!WpI zLj-@-~6cd5Kxnrw6b8`?)ysN|c_sVR8YGfPCMV7%bJ-fijHrT~f zghN#x)E)58)qeSHZIH8197)>yyLMOtg9`KEaHLh3SHW)x_?Kxj#g4{7Zn!B5W)*?l zWwbsU{{>c-407kwOGG{dUmlX7eOo4YRkVk$JABKX*qL*PiIj*mZ`3Y-lR$F)bq|)$ zgGisWtijr@yTVZG?w_8Aa35xyh&IaEren^31Z(QFl^(ELE!vKX^+>*2xRW&_IygER zH?}sFegG#JSZmAqd29+*_> zA=5A_ryzz^rzHytbL)gt+FJ%&!8kJl8ZF~sTn*$x`#hWN^LM4kbS36Ha7HN=w8uBy z3@4BA2oa0O6>>9f2gJt7aCEo)9gc2OYal+)*BRnd??^k~NaNg0Op4%)j>Sw!ks?$- zRfpW9AzEDJse};uQWfp>BWtPsJULL8nA+f9OsDZL4_ym% z_~L6!?DT_mG~6o;`MT^>9I8Q);VFE1Vx#T=2-pCnpfe|g5S$wAc22BI20+5ZS!8&I z_pux^^L{B}i!36x*c7pk5z@Ab*z!L>#J5eo+W(}>EL9Le|wcZbtq|_~=*2{q9T&OF( zYF+7Vr%dju@*EOMFGE}L3xy7vjymoTmZuCE8{Yxv7zPq9=&Q?^f1&o}ev63FhAyOr zoAZJpVYH!mBo$nR^f!ujS`^$aQ^D;QhBstG_xu40&ak1AuM`4SZB=k}C#~RUL#g0W zfVBw$+ulM2Cv4~^{e*&BZMC6bT(dSbbq(d~2?6ato%-!)NA9@PMP%kWN{ntx=^;nR zQ$0#yKu6UWa?~{o@fQ){4|l&_y!(XQufqMN`}NKjA@}R}n<4kB)gFpYr2FNopy)Jm zzsB6xl>4i!}}DSn*_9Uzg9aU z-LEL}(zB{Lc`3N-gyhAuSIP@C&g{=Z8t1}%aa`d)#r=#>BJkQb{%9vQuIFsUrYB-x z^WZ$&d+o(9g`2cLLTtVf1FBAo|BFRzo)HhF*FIYJ+Kqh9CUS?PI`0en{BhEA6L6i3 z^t|#erRQt`Ev08>hep!VNZ&-*ukY6yaunTuT{PhY?bnf?EcPqs;gFBi9jkY+UoW-R zeRSBbvxPM2E|O`#s-L#CU-gJuQkv}T*Pn6Toz+4ABkkAHD}*%t!S*W;SpO*d)mc!O zd&2hXwv`m4ZI`os(tiD=eGBc^7EA=w;l#s!J-5b?qZBTUsr$t2&r^o*L7DV|zWuwD zqDsu>%HRYo)}5d&x)W4SCunb#2k3YN2bM7~F`&jN!~V~;AWkd^VXaK8Vk_EX;-Ofo zK!RpvFYGDBE}MsN;f2^D$xN!d`3exFAO^7*Yk&~Fe{m@=;Hr+}(To1Y+Bx5e!=_GP z?P59|kA;`54`SkvzB3muvdgfpXU4{xUtJRGLZgAlS3U(ui|`0HS0FI6gEb?@G&&i>HTvF+sQPsfa5gb8>QBV6`>mJIuL!|l z=Bfurz_w-`yTQviFy0f;ILH@{-MNWEzf$Bw4xPO}_t5*scm{mo&;U z^ECn;zQqcbF(n9$69)RcSVN^Q)297kXP^t7pcFOo>jE-TEDiJ&OIXdiKY7Qq;hOc2 zu+zrOVC0{L`24}{U29-%LV!-ly<2&y5TFxw@7ldX0h%tLrGc(bXl$Tc6yLb&T|=Cj zjIR}skuuft_{KHgHx=Kw7b|gwplQcDP=T(;hZ*09`Q9@548_;lB7ws$zH#oPrs5lu zgv}4>s6R5kcIXlzWPfmc?H|C}gpi$3d@WZ{coOlA7ne}VP7~mM5#N{=cOvnP7Rlf0 z6)lp#m|IU&{%XHzO8z>}3HgqDu+#+kyXAL_{1ty=D}UvmMb5pY{++?!@D}sf#IpPY7@+e@A0ZNd92du)2UW2`n!R=dx4<+)8ex zhFdvknIU&0vbckTxsOb&f|n8FDXlDMrv;E>)$j}74kXN6O?8!xM6Q6pCg^(VRk%ug z8>KkzW`j5s9XVTE8*m3*B`oHpPHyE^1&6!$`wPHv&}@?1d>D9mD)KqYuS@DHRwIJ0 z?SMf=^DuE|MGEry7n7E1&vK+x#VlzjaBCU8kSqJejMJD{xTLLomWpRe$?n*~pXr~L z+?VWRy4vYtw-X7{h9OZ4?jF3;SS;6RZ}&#tmh_@CxcpY|9=8kJ=U1vc88K{C0xIO9 zNSf+juC5W8Wylcol3l6u zWRiIn$V@Vykx7=$g!(jQlA&Gx3@!FFrjiA6;e^*}z2)ZZ+#Jh_fFC8z`c(&Bqri;0 zNSvx+aK9zNgn`lV2@T7WXM?JN;T|_1a{gIwS=fXnfs24CbH;WOl>`bHMgN*ts<* zg?nlSq1+*+8dLBbr775KIRY~czLkQswRojF-`+A2ayBGcd++BhkfK2-9g>_~-a8g9 zUplt6MSK0B6MKDhldmJo0JJ!k-sud{bFl@&UDg9T_ek4tOxeiOK`Gw2Ek*-y7dIO4 z`%hbtwa3CC$;?ZO8$+{Ggm@d;9HbKoeW+!l?Bor0WWO49-ICEegv{b&-QvX|X-BASs7qR6H~ll8@tIM9?)5 zC{a;xg{)`<6jCMh0u)jW6%v%m)R8(NSs?H`nmL#_2CWk~_kxQBcyXM)}9Ts8Kpy zsB09-zVascrY*x!5@bqV&{g^}ImqtW%5SPaj~eCjqf(==hoMoNa_2pF-OKr&FjN*1 zcy6&N0$JExE%x6Vf*=jm+t@PR@HPb|kgx-@cZ*!?d#Ope_?*S22*6N13~(B%9P?o# zx#%fcm9PtQSXLA%7um?P$7(nb)M+=tkm!a+h(&wA{67|p1rCc?Y(zfwNr}Y+7*CtD z-_N&-MU!mPDy}ibV#14tSghhVT`amBZq4)vN(GDy(<5|wxX#!@=;j8HnLk!a%`oS6 zT`XqPO^_~($d%5;6)iZJ9|xFZ1?~${$CQo*2<$yr&&+4+*Rq_^(T=k)`4GLC&b~u( z^mVBj;_VUQCcd59^L^3#H@{1x)u@D|pg>(}y=mb#g6zou8JTnGghi3q=DCk-O01Waw z-WF9X0>hov9-cNA!~I3L_l{iq4!tc$ow(P+uWt91zgIyaS;74SzVZO`{j$r%;d6$& z*9&_y=`qoysQzSKM|TGy$iNr-3A*5W4RtSs!wt{RNj>d^o)&rGyEEzjA@|)=uPf^m ze6KX#$M?gg!j=GHM}a~=&`m$^3?&el2fDO_?U`FIX!NO%SKtxz;N{KX-jX9u#W6r0 zpa&^ffu_dz)ej&D;N#?gDV*{MM&UF!q9V7d1P_5l@1*Fx zqrHb)&d^PZaXv-`yNTWZ8NPwCQ5bPw6m+!=fisOEfI)F@Qb{nj5N@JA02DRAF->F9 z_7|ZQIOfH%V|)VI{Td8n#|oze5Q=&TN%4#vkToiU zRUyl~Ph7z{u;NRugB6FeelCsI8RNzT3D5;q3IKR6=^==8>D<0~A)MQvW?;Y0m(stj zzysaC4Y(XPb1Aq^8w`||Juq;8Mq`_Z`Co)TD;vShH~X}XAYM`LgkBnjZC_vVNJBSJ zqA44-U%P`hJW?m~%fcVw&*7!*zU~84&`g{8-e+J&VFG4yxT6-Aatki#j<|X93tQ0e4$Q4+gUJ589=p8tJ&r>&eCmE2 z&*ApIYaG$y?~eVk>%4~=#J-|^%9^8=BU%dEW(>`7ls?72hQ3y?WnuPKN9k+Jx)=2KE4E-nl72Q6KPqp|gKP)tT7LR%aT*2hJ*B21i6nZQW(!0@V*zAz` zUq|Vmpf<6kJe%GS_7!Z@To)Pri^CfljzSKh@?sDRu=q89de%m*>YJ+J@3vyG>B9H| z7p!^x^V z5eE{?rlm^8aTnRx>BEWmT4>|7|JP3QwAQ+JL_6{tZjVZ=b{g(Y0!_EPY+C61E9E^C>fhYChpvR*w`!~Rmhu%~?Y7kIz-02lX#-oabp^PcG z(g;jFk7KG3m^#~X|A`TwDitSKiTD)mn!Fyi0bT9ZE)jY0>NBbHs4Qo$W3VbL(={Z22s0S*BWZ5~(~{+~IyLifY^O&2 zBw^Z9kVx$E6Cso~47tEW;y%&;Fo2RUQj`wHT)~yauW=5gq~A68M&HcU6JNC8Arh4E zXBNi}!0>3VhgBGs9Fk}Wr{H)t8JI#fgTz@c*j$Kxe$@lg(f>dqBPw@}&=Hgm%oAt2 zwGa;@vnDERbptlEcNi!_H6p~-M!hqSEkvz#+Gk%d#x*!y><4XAj-Zmd5%GS;xvodO z;y8?OZ=ekZq^^L-L7dB#mF9!Cp)1mWE6id-CX?mD>rHDw2gR(#9rupXzu+tO!OD|_ zu=961#}S z>yK?a6Vb9P@CErJLqWq4*n?yWH|R~m28v{@{*fKqv_yG$AwO%ioJSW;%`Pj+ zY&jWw*&~8;@LIbwE{=FUqV1U<=~4gcZ6fNQti%mUuZp?I2(m+e;{8DwMBDU1j{y7A z;$0wNWId3Z=Pe1+B;@A#)hg}BeTaL;GDbc;U3Yj9QqF-D<=Isu$kJ@bvdg*-#6oX& zd7&GAPrtM9BfG4qf0btdBvRH0T@x3oGR>$G3ljkA9h+S?J+_q?#wBZTmfDc?EX-+V zSI+1M@6W&x7>a|%jAf1QKeaXxQ)AH1g9-6b@^fq<;{F)tO%OcIV&IS`qkr}*#~FzL!Z5U8SzJ@a;gPab{RN52!B=H%tO=HirWyW zQ$q|8cOoWmz87{F$f}>y_b!C>rJYz%u;a<3+9(m`u}5V>+Jepm%A{jSsVsc z6ge!!5HcjJH0)iR<${rvjg@APS{tqdzc?UL26LxcmnrgE5WzYM4Yf%d-+?Y=Ag~<$ ztkt~%uIX3$4dZw9@dfOErmE@Tv10yiK1TYiK<)r?MGeptFff(>Rcm^hG!-H+h4b*` zp1y!~vD`#YRx)sOW$W_$*-bPmW1GfOLQqDM>3(#2sFgqtO<#h7L(Ti=h-ymk6~ zb4a+FwN5y>x85=9kT@(dim*Ol!576kxrKG2Dvn~G28Q9VlLtHd$XY>5yDN%}2M3Q>9Y0v;IRiL=mN{Hd;IBcEjP|X^LKb%4E2=oQ#{!TN?{p zIp($2oEfB86sV8BB+JW(V^)8TH*-{C zL6)%|qhfhcm)$TF*I7}dg-FJ|!$eS6ZOo>1zPyuYh$)yqLfh~%rHs+W zA^e8L#te&Zh3;vI|1*d3<%p+zJtz-qf&+9HE;?jl7-axy9Jn~)4y>?ngSoj#BIHFE z6|tbFCVcdeDJl{Wp%^TV2vJGb&Rh`^l^jD<@`R}5SCys~qbhJ+Kh5mt&)A@AFbl)6 z`RetSS=%+qTE`9S$bm2-12Jp6O$iRfyz6>&fgvpjZ6J=_9dCqK54g{2LU5Fpfgm}WGC~mi)ptPVFLRv_wl$N2P^J;NgL!3CQ0lj7-!@)(u z&j#^l31rtGfJ2VJ!&b_%KsGQPkv-yFn<%7bg&{pUA17m*n2;X*_crWtfEUeOKI)57 zdUCXm{08Y!!lVa$X*Pps^lVDcN3l|RD%gXNo=dkuJt1JbgTH64qjXp$M@DEwJV}I- zs$y?r(5gBM6E%v!=lJRrU#qi{`MIJP|7d@!1y&pukJ+kHq7{31x*X?oc!G;&I=Y?s zOTk|{{@nP>!CxN!^7%Gib%GB*oYAh^%U)Xt29lm7dO80rIT|-P9_ypY>IYb`A625o z7G&|C)RM!o1-IiMK%Q3{ACnb`@94O(GWfxM+{haLLCMkhiR*WdVp(=Fa#F$ycfTT^ zJ0qVzDsUx7JZ`uLb3qA#dA-0SE6ED3_2L-Stdig29ka5dq?Oi`d%!tm4XRag#xI8Gig7@xvPsD8GT9$-F1v5-b9VC0aOfiQ2bM@gA`I z5R$>_dR?!r+GU&!1>*4*7EEzvfm5yo^%>=ye6F7ES;b&tYg{mpj2i_K%i?j69ZvKd z<&=jk=XeqB1Eriwnd-y1PXuX!GL%^rdo8sbg2Xs6vpfs6?86887uQI1?^Mv6#EB&> ztv@JKRIC!?f&kvO(fxCAre2*kpakxW1+;b}Wwr9M9M>v@Pl1C+O!& zclkYF+CAv%d!X-3`bVZB#EiZ^ynytNl6}1qeeK;TI0(~)SG zfKzauh5i-g@hf@kxRvDnADO%se3fr_PU%pABCM`dcJFg8r^n`ac8x zpGQg%ny_Qy*Nr78qgX$f%TCm#$a+liPwIq0Xa~)y*BU|XG7hVV{J+N!uT4L zNW+Fcr$Vx5BmKPIbmGqD0l3Df#*pSg!YKg-H;V7m9uYMRkTpP5u~5M59Z>~;qKW~D zFpKF>z&sK-1(l?WK_K*-XZ?;Jo4kvBhhz%_{5S#evTFbK(yKGK`1gmoI>~;tdQ*)ZToY z-8dSt_pKcXAYp|)g(AMOfaZX#g1h5Cz&!%X?|ItFZ^+JyT2OIds$%3tR3 ziS;a+*xQS^oL8+h4%`w4QsIh+!`|*Nf|ZAPwG)qb-d+Sd%nh~!kFEnL=no%645s*H z7)@VbB=T(Z1A|0*KdiCL?-%x$edM$Bzf{5yfJE&84_q|_0R18Dt=T=a1z2gc6@hU1 z8eqi_83-t`j-{V#kLvivspCXGBoQ}O#g^gT77COwHoBD)=LbW^rg47(@)ACy&B01a zhe_~Y8BR)3%G={^8u|waK&HjAAK?$Q(lR((3M72P7z{5F;>poch74UQ^bzknftY7%}7$ z-3^m=x6|AGV6UIlV~+P@ODf+hIo!=LCm{iz(E`lfe)YhMURv7f)zy7t)CXrx#fK92 zVeqS!IN3L5#X$U%m2ssb8|k4NwT2+~e?OSYIw%ZJZjxTTzTLwOuU^sRA?s#n=PbuE z?0&()&(5jsVs@|3Qsu7)rr_5yIwr6MD4odP3*nmRzaQb-^S%1pFS4{;f%gD$@069% zw>5Ub;2ikOs)_q|gZq1zV7JXi%`a#}3fFKag&*f&5EMJ#-ah1gHTn?M&9LIA|xq6s~4 zko5>)(^p(NWvhpo9Jo;{!Ta8lJ+Xy*(LGn=H9qW#H+||cRy_bi9`SiUj^Asy1S=dH zwV|ShYL4`h!&4`BVAkPAEmJ%_HbCwCK7IyWohG-7@dm4XPzGz|8-KzZp4mS+9;!qD z$g3Wc^~Vv;sQ((h{@1~zh8WqdIN7c*j)mG)S75a3@$P6>G2YhOm5g=?dL{Cg0c19A z0^Sw$<8{4p{VdIzCMt+*)@|bHvB7HR`r{4JEG7=1S(0C}{tF3hH12M_ z{*Tb&hVzm57wWX*SS~a=ZT}>ramz14wI`O zAoTWKWoh42qK?S+m5Qgw4h(QOlVrzT3+C!ATq8R!5ATQ;wvjE=_qU;{frK{N_po07 zJ~X;v0PoaU^RwQ0=ZIRQP@ZbGZ$~$@Z!O-A+P?2`nxxsj*YG;q_b{2N#wpw_Q=R>% z6tUndh1J^Le*>1bJzPv56HkxrXM1IjKGLYY`FIEIoq@Zbj)n94dO{oR{fACZEZaNm zH?%k48pCJQvDzI+#e)YQO3@!o{{+#hmEfTG?bePuMR?2AN(XUk%fTgB{nLrSt^IJ6 z^w$7s65i0BCJO_PrHVx!@j{>6P0ZonBI|pahaLu8XPNaSvA%g-R`!jVhreR{O~hXX z{x;z6b^P6mzhB<#8`BwoqgVBfx#HcvF>RocV`7t9B_+irCB-N4zl7G}qmB4i{F9i} zHYurHQd0Yn1q!nlGVRo~7gLME?1eNIj-{6>>eUEyTn)Qt!@2mn(sxSg#%cDy{i5IfA^w^!3um>IpQhcK=fv9IZd{ zQg=UL*c+_`6z-m5m>X>!el`?h5-bglR)Dt~#^84r3_@0SWRu|jay;vGkaoq}XNc2L zIuONwYxo@#+rCx%_Hpgo$G7Ky2?^q(wfI;3)24l5`}S?y zw{ItPRLGx~S!PK8%ED|6!i#J(bfXWGA`z@)!r5JKh1i5{%P_kwG*2Wxd6icIz&Cu9_AK~~#{KZ;<9=>G-H(M%D^co;v(QB~5?^qhv046dS3_AX1h<nofsXvalVCiUC#jm^$efEdXVvS@3`s#`Oxk_{*Z7H?EfF(j%=qcYe?{$h>+lAo1*GT=UVuqC1=bpsLr^(;J5BMe~ zRcc~pR^r6H-jd2hZ%IRJ;kGPs1_P7TQv}`zfY(#{tz-7RP@^R?oH363d*B|#xG51hi_$B&Z?}A$cx2(+g!{oYc<~~G9&#B%OXXKZi-(85!$3(+(0#qut+-7 z?@RAPzgzpuQ9409G5V}w6a@vF2Dvo=r>O{1=h9KeI!!`;ms5EU0ng%ImT(7tjAbUL zV`;)I_+I9jS>>4p?5D-s~*;1%tD zoZHQ#+Kdd{PJY~pjpujbIlE#qF7+)16_MT16X~ydcc9|EcgTtt?TcR1S**#Z2Dclc znvYpiJf4G5xpM`dFV|13R$8zabS(zMCT-m=3!|~|QSHdgYltUqzLDHTEm=V)1{C7* zeg^{+G4CRlqM!JRMS@Va)f;C^qp4``;ZhxQ4{@}aPdT4xy{}JCWIO~gQH{I% zvK)`E5h-nAnL#YW=4tO?b^3=k?ab^F2Wr2N*7*=t2Lt>I8ldW^cER;1*MiywNJ8#X&H0Ej z0A^=!YJ|=Hca5bQmOE2R-dhC9%$=$}wUbYEC;H;B0~bw0lQ%Ng9=r+dSj`YpByhJt zj@sQ$Ihy{RkfS*1O2HNYC5h4g890U^5@7dHcGj&Bvcv9`IeJ_u7fIP#xwu~y(bItI z$}=fQvUOYAZeZ7mXO)-RN z_F9WPE)Ag={6k0{gRQM7zKRzp{%WG=4;10r5&KE7VHS5}iff#QLqE>Lc;fxcboHFZTJjm|z*F?wt|H6Dyzgx2&cWdrY0&mifQp%@p@s;P-;697xxX)rywxgSS0sc|S zJV@`r7dR9LvK>xW0|Hj_{5WjJ<49ZMQGdau1^c{fzK_S}5r5n=j$}Xg2Hymv9`zjD z%_&y8-{5mB@MZ-D{JutO6|7V>Z(wv{pzmxHAo7qZK23W#;IJ={j#j!@i)f(PRH zG5vu=2Ik@)@CD-CY8>XABPvDlELl7Y%MG0YgB!8eIb39?}d>W_RB?IM8{a2e(Ay zs!7a~h*W@tqwylkpzuH0s^qv&eK&PEng`xgI?}csaNMxXkyZzY8!GX=?to*&7FZ8_ zeB|i)!IZY*`_KQsF+U7N_0e8uo$u2-|J>VF%1?<1!1HkRa-%&_a^=YTVux-}n zHqgz$Wxr|IYxlxvDh3fJgNo25$udV89QHY8(Y~1|8etUG1zqD=)cCZg8f`63#70%q z^{P?{WB1y@ zJBlQ&mxaDnu)!$ZW|q2Hy3i=aR12lcS!zd%1GEI!XJz(u%qpO}5O8gFNluLc23wH- z>=Dg;M}MzhwD;cTdvMQ#@M zsC%;eOv5n$7#@cl=2Lh0%Ja4~9@iYr9nQ>Ws&{^kPt8rnC9qlQmyY3xRDTnXQD3RV zJ!=lQ zki$8i12p@AL@}P*@LBI!q67n)CHjCKgaKXcp%wovtC9+=ci1QJ*d((nwkmCT6` zWG$zgi@iyfg|5e;{qvQ(lW7Boi9{d;rcD#qfljT*K_eIeFm$dX(<$xa zw!kP-=(XH$F`QM`{iEQvalKvqr0(2;7qu(+lV=oSLcsNDaZI5vFa^JBm{64G4LnQJ zsXfOdw&nG^AM-`{&;ziO^IpEF&17M~bw)?2g1*LCpLh(L8gw1J!O(trtgqTq^o3dE zVbQCWqDmH7Ytv_y$*72ys?S)bs-KM8$Ru& z4GXxQbjS`F8eZpLO{ANq0ckH2sjPE=S^OG{JDbI_&eSM%PDh=b(Ie##$Ff2Ip!jJn zGSOGFMvEuYQ^(OBCgThSsV*TNRshTbi~6X-0t0h8e>6w+mw+ecMcV{sx5P|5I%a`IeKgIA+1V1zB|7G7 zB<2)}nRs-}0?W*`6?jikOU4Q3W^l1`YYq%z!c>MY%S+D?kM&ZNWCv#PNj6Gu!>6_e zlMY<;Ru*)vzMjKtV<_EA3109qo&{aG7_MPcjL>=k^2yXA+9oLQgKJ|8I;^Z9kr0BX zKBW+d77OoqCWzGeBjnfUJ(<&$IWinHyDa{ znop7Li}Afld;ODjSogXs;d{&_LDXy#RVAp@gF);konUt2*m=m~EAHDRrtpw4%a>bQ zUn-Im@_j@ja`2&j^{S-M6d#>J@lNv;J~f;aCg~Jr>lBiTs@X&V(bcoZ#~rO=T*y`5 zPKM>uwXtVb2TLmpJIlCPjrsij^Q$2;32*QL+_`*nL2Rn_*0JA+1U{Zp?#Wlm3#THo zlrNi8jM}vQWwMEE8=6?bXaD6h9AH+7A62vIBItahC&VCHU`#uF-WRCH?*iq` z0X}B)ZD4d$g#2xyn}|>)lYYE~WH#e1+|p}}fzs1NJt7UG!-7N*%L?`;c_;t#~AGPrnJG0Ct57gI!VQG~SvkFzC8z&}qr{YpwkK$mAfM(|750#JXWLQ%O z-_2LF{W@0UMMWHBGZ7u)Aj<=A)oh{wj>pR)Q0KP{^>l&y=PlG#fh~kV&~eC12=c(c zOkrdM*M6eEnB9(xxYtT;vKTLFZ85`}C*wU;5J1Kh`S{vjYuMH;_?^z*e?B0*i?_z4 z@D=gs;Wzb|56eIJ*+esZhm85~ar+1~yT!7CYrF-`)j(q?Wn?#IV4aRUfn~)y&QL5& zRVv*-Kn_}~iK$AUe=7xP_ui7j;%Jbz%TrP?R?6c$R%Lf=g+5uAv6h1zk?9n)7U7o; zOSX5!c8Hu-TCDJT@q$qoKlSxX^E@7XXF?v9jp6tlp#_@hYnKv(TErt-r0VQ;X&ePw zmjpZwJWpc7{4wbzHWLld|tqJ z;gc4@{D*ZV9nXM2S$hocbJE}dP|$UnpS{5O)Gw`&4Y6yREF8k#3%U;bjM8l^-C&fa zh|oEj~Gd;e z$YQ*bY9n%j+1K6ygko$xlejZ@nk}L6DmI*DlSt}zp z>);d2*{tQuS{l%|s73o|s||FGb~TZL^i!G0X@lh=iDi|JMYYEgABBb=KNAdjNr(2^ zLs#J~Z%Bp|%8(B?J}7oFWL@XiTYA5&<(1Y_gmz&ewh^Cdv^>_*n0;OX+cf-AiFAJu z&I8!@h&|HwL<;tOe8`@CyJ=Vhu5~&VpFNiK!u(>WgzO3Ad$abMgnnIzKE)n-4&I7n zUk6vq**8emGCo1FZ_ySTKGkUFvX;i|Ye!%k_U)$$3%J_rqz|)4x(RQQeUI_(Y8x!C zN-W}5rEnmZ4 z*|2XT9@~-r7M}-PJ#^AL+asktCi`-EHnI%^CP*yDk4g5`Vnw(S4K>=JC^TFmp*0

MyQYb^P1N$3Z4=+5@g0lXC{`JGN}dDr=6EfZVGu6up6 zEq}VQmd29rB(M$B57SZxTwnbznSO&k(ye%lUH23Yc(TK?L}GbM$I{6j%Y(uyH)daf zgnm|s{&bT~3u?4$qCj6Rq3_e7=i5U&@m3`BpK!LE`CDl3us174GXGNhTKFO`)`u@|Ji5*jr9m31@q75edab@c$vgfrDJ)*9*ZLi4ToUm(6Gfi^ay)s z+GD%AS4ijwbm%kep&yL`eXoQrFxvm2efy(8_mj{Ab?E2pp-+zj9fWy8yO$r9yw9_T z{)|Q}!q|^Snqo_h{gbkm_m2zLRy(@EwuO`IOyy>6B!O)@JX<22a8#21l0DLMh!kS; zJ?}EN!Ezkt2@JSO$1>U;%MQL}16?VhyXny9+Cx7T1$vf*{_Tit!8bLwY#A8^I$J`2 zsYAbH4}DG)=++W?nGXFod+2)Fu!xQyo7D1-uK+x_yZ(3C@v-)`OtZ6;o3&dBY{T@y z5@`>e^jE8G*>(YuqT_$UF*0^o5+s)6y5x_w$FdVf%nrJm&jT(^hfcGH{znw(atXas zhyJ0;wgtE1tw`oK;Ed9ij=J+@Ey{0_`K9)?9J8}h7%zBi*YH|C$K4P*>6h3eT|}f{ zem*bnw&}t$iKXF?l>CPEwhZ`d6dJCU&>!p2uh>JUMuAR}(68yx6YQbCr)i6j{PAsD z&it1F4?b-?BAMUDzLsJ;1G-teoxnD18!C~Wr<1;9oh{qC6DgQ~fY7Tg{MdZ>h+r9&^VhwdH)x|4*y zPKPeAhyIBsFrwopwP|_BzXo{lXX_!^@u%3=GRMx)V!RO8rprc1r2qO=cG-##Y}xi_ zB1Oj^)$BX|REgzY9m^zpEI-1C+0pO`pJU&u4t<$D^y^WepODa3=+K97qGux)u|~_s zTanB^$Pjr8qYCM=mfVAq`48LI(vGz>o*W#2b+T*t7knOYJ@$)aeqVc}@6fh^`9-_z zng6)Na;J{vV5JQWHQHTKXc#V`N9fSY?V&G?0{tfm{bwC|nmzOZ8nFn;zXussEoJ^& zfCry;{34m(*}j&5ovGZcO(w97Y+aNVIpXWB!*9R>Os3EfYJKK8zC3noW_9wnh2M*HodGonDJNa(M)!wUhi znfA~}X`CWDz8Gs?E$#S~fCqne?w1{ZrhP4s*_l9$7XsUK*%*oRN}cqo_iWjA6_KLj z+k9(3>bgiQP900JJ(eRdVsxvAS>&)|Iwm>h1rR^eBCbOTODuV+& zskYP~^h1#pUtrdcY!+5PM`*7iPKe7hyn*Mr#^(*J=K3I4CXAJe(|v)zIdR5wYPuIu zeZLxy#jINGQ`kGS^_sh7TQ6Tl)@}200d`^>w&?q@H<4rPHTmAyy;5dQ!FzZNNawDO zxKU*#e_FP^`2u&KuJNfke$^w!=mfye<4&b~ksffF*ij^IM{M?x!j-+59MI!Uo{Utd z{Zfx1VQrStlJ=-U&6TTr3ojAP0eO9Jkc^fWNuEK~b{IY6{_@fiH}agb`xGKWaw~W` z7VG|FxV#Z!pGYf4{s+1CJm8SF>`dwkCInq6=|*)QE=P6yRtVyi4?nN{9|I|K){qc$R7@@6-#b`@=8gLvj zP*R-)Sb#ZZWr&<9^tebCx3tCJ*>)H+H8)W-Vp31h2w&i`1VP3&t(zd!(yK;Q6#yg8 zGD?aPvAc9X7`D3&05>h`02zFVIXzKXcN<`FMvi1$@M2LXBu;yGIlJQEpgz63P9EqB zTwDxXgVpS=iT%~iiPZYD&7B*-4L<%GU=!N_{#>Bf6hPVXQrP2Q6;pmQz)&YJ35IenqDa6L3~j`j zTJ3%qQEUs%$L`=OF<48A;=!NZ_@+Ltfh!~iM>gFra}Sg>MNRsMxzoic!x^fj_`q;3 zO)cgp@~%?2{~8Bsf#C5-T+-$&+F&pIr?B3DtB!lzFk0_ghM(5)X!P9oG-BY_>t9A0 zMeFeb5Iv4CCO z5#7j0Y`|3}@Yib3M8n?+XfUKg%l`4Hj#+OZ4ar+h6IW+yaEDm2XiS&Z^C32J9}AAy;SFuYx0 zC!*QhTWQ>Nn;X1Pa1^HVVN^jg_|BW8y^&?9(Ru*PVsnpyt-DXP@Dn)vz|oxf{SGG2 zG{42Nde++y^;*quEO3RJ-(h&!G{1lSF3kJ}7Yi0NYks=}Oqkyn-T+580Lqr5ZfVV% zF~2s_+J*)lYt`S$fjo{C*fDb_&6+gRi{K{9(e<2gm>aRaR(n$z!A8~9XbV^naK(Nv zN7s=zqEwe}kDyi?jsjzJ9Y{4s*X-B9oL8eEJ0CFS==vALK<@W}znUL5l&t>h9#|`j zznXu6QPml&Doa#VWBRK@Q5-%JdVSYX_S^N}LQ{9-`*tIt4An%81fJ{_@|YU&uvWW{ zhBV;1=Ns8&@4Oy`hduaSNl`i!Vh2p(WtYWqI^Vd1YqjIToHeShM*EHh0oPcxgJy4F zwCdioM^LN1hytU_+~*s7-1;i`c;vMxwC4jx65J6ohR(x&JzR{I9@bxm12sU@%!|jV z+P*u_sNybG@r0;CbXC%oIN#DFU?@wchDv=`V&YL|7XO*WH&}}?@wnYA?!@B1Sc{Xe z|H~}Sqce3TiiK406loBLnaN>ra>Q5qkgj_LI1awbUa~BP8;<7$*i;^>$eEV6qzWE2 zrYMIUvwjsjp&E5mt=3n#1Fl=Xl5+7Z5jXDX8m%+lGu-NMAAn=S-Ul$I#MnJW7XkD3 zT5S`pS-`cgUe1YyK<#GxyIJ(SgAD)M9L);p`q!feS9yqXO81 z!3{e5^fUcOzvNLNygaHIJF#c#|oGj36i?kw55q zjAcT1aAO0kN+-ZV6DL7hi3|?|4|97_`E^M>2%}(MHia~ha5pCEtPwjgix!s`EeAWF zTa9ssm)zQa{>=`Az5Y1p8h0+=&jn=w*Z$mrx%nQq(k}@AX3F_ECyHeyMT)qeFFl)^ zHwMRR%BlyWE+o2NgHVenMw>vpjy<6} zrQWIi7lwmfoW+Cpe1VrmF9%$2eJWpn9X2IREQyEII=Xq%9Zt2g`097#X{vmhgQuL- zI=cDu3`Y1qqM}C#<*huFOa^mG#^FnUHEFS8On7;_ZRZbJ%WqFh4u93 zbIc!_DEF0Y;Sij;j=dN*$h*cH!&~O}b2EQ2$i{%auA4rfvD-?V;Em(Ou`8V?4N+LB zH@SI3k^2ItGm4iJ&obV{g55GWT1P)VP5J|Je_Si>kHaX-(RvJmcp#j>)6ddz&ZBs^ zz5R!>3Leb{QMxzTf#bqD#yOk{uHzVtCsUnDwL6)WR*}r>QpZ`w9q_hb;2lk&e2ss0 zU9jX{V1MXg(co%oa~|2rbJDqSp}4Ozefp_F$A_NunK2^bNmiqGZk&O{d$?^Os9PGn zGmZO4Lhn??J4fSK++bzqy-vr26QRx6G^%~#^9*qJ##HCO3Cq7j#-}r3(n{`#}^nB^mPaM8&{6R zBkk~Xkk89KSKwE1#>m2U#ZzNP7RLA5ush+*4J8|5u_w*}-buJhjDg)%3gAl)2OXt6 z0YV8-JY|K)l)zb6`T_$`L$yH9?K@A%8Vb%IJ2PYC$b!KF8DFW?U#Zb1$yW-$RH`e{ zJ=iL&n=5Qw8uM}o9FhRV3xV7sn|w}vL$IMO-|Jqz`(y5JSFqp4AmU3jIMy-iV?i4l z%#+LX#us9%)UVvzNYiXK@2Z^*(#etChu~&Z{M@ zczyRt3N=SK^jeoYr9@YdsFHPg#%4LojwNxve~O~^PgJV$7KuMY!5JABQ+1_dKdhPw zEAG_dd)5V4=7{o*+Hg_HPGxqm5c(YNal?eXBZdA?3il6N{2v~28AH_y|0mV(e@^$q z{PIjf6@~(L&iJ1f5&gDGfLG*;N z!7UytS3VF|Dr1!W4Y^MOqi3P7yl5GY&RiWBb}k&Xh1&92(q}67@Hob0U0D|nm%Id@ z2&hcl!F!YNt;1CDO>wFTGw`iED+R|I^4Zw(tW=z8co)8wWnGwEc28HFQ@9K_yBAyt zv%L^5)@tEmEyPt_SOkdm1cr#6uDCMEG26kMEH!tv(D%AKfft+gv)Z3Y@hO_WPFj{w zt5)WdezvQAW>~w%>g~FV?Mh4dV7qKrT8A3(4W=k9VYB#(3!>6GY?V*3voB%0eCo#2 z|H!8~YQop}R-Tmy9`G4>a9dT@SU7322TifA@KTAkE8bShBGj z-wPY#)Yf2jGml^8b=k4J^NUoA+sAobQFdSumMwDkX!H4|66CZ1N7Q)B&q^h}L|^%> z_)C$JUx!BTl&mTOoATxxY`PKObT$pe*9bOYx&Y=DwE<^hx3R0iq@@Xm;WU?d_EmZI zqn+bzIP)TE3UP*qrj?JG6Bv@Et-FP+IZW0lfe})B2m(1HG5Yde4BY`v(L9`*y`oU; z^c|cc+Iq-Kt;@E0v7+EFzXUhP;G+mF&4A?BX|21}>BB-a8DfSbmiC|xyV%ukP|mKd zLo51h~t_GnMdFh-G(nQml8wWp1)9pV8mwL?4cO>we@ zQ)CSoM>waIHDsk_m)+7$PU#~hsJyk6Pl8Fq_tW0GwNv)*f^`Vz6nO-@s_j>V`=PVs zTk%V>WDxjp74M_reLRZJk^@~$mShETd3$`Fwz|k@nqbq}vT3`z;1i9w;S{0Qn35LFKp}|mLH8@Dn_SGPE!O{*KBnv_8TzoC_{0rjsZ*wS!)ka1GU>Y#x zy67!=Vz0CSm&ysH)dKv9$Ga%1_b|`b*Kad&%!x;Z+Kh*#_u%HMqoIcB|s5(2{9lO72*C9egKRyH=PWqWdIC3Cl?mAFuL@`!q4!qqRnN0(HoZub)(7 z3gItld*&JzNz?^76r58No_L`>3=#!m9=?@%Ua9iD8p*|L7oSwczoQauGAdTo(+qDN zcL74M{_!M+@$gEc&OLtz}S42qJs%t0{? zUoj}EJpYzaG1+C;hE;h2o>1(m^aduOW<}*u*Em?|`ov%kZ0%U^0ctdSaNx)#IV8S1 z&oU%>3vf9kbibJj_-s6ePmPI;|8#ojMX>5T(P9MM zPR9o_KW#$|Y`ajz;~$*OXvAuyioEgu0xJi<9P3$q{^RuCkP&k#py zaGt&(pRx5yZ@`^KA2W};+sAPViX^UeIiuHV%O>$CG4Y?>eC;#L*XE%{%-0G}Gv{kK zwgmSI`_!+b4mjlL^%HHg?l~4YvdbnM;sS3D4|;SeJg(J=lNEc$PD?I44WHilX^z4U z_%bwcT5Ct?+hCY4;6J462}A_cw%T)SkWewpfE&vW6YBixaXqcguU_fr>36H7e;d5d zmwCW3=M&&rfvw&#j9g4Q)mL6v4R5OsmA644blGl?S3Rhd)H;;R1CtXJ^}y~nO6ESr z(SM&3xE`Laf0@>{5QC=NgBl51SmzH6#N~fjU8vC>yrZ>5E{WO>f_C9=k1v1=3rmWS zDCQV|Z)zcsf|mZE1(okX+`@@;mh!?~Afq+N*uLA%L0?h>GS*IMuc$jPVL1&{e1?1O zNX2%oq(D%yolux{pbApKBS^H?pn{fYnHSn8QEONtbt$SrC|%d3AlIDY+3M0Ow11Ry zl)%}Ohp6#F9{(~6n7HLI!Y|-0hx?MK4{sIFMGmDT$oPF=IMkvaO*d8JVndhdC;>oEz%12vtH*}Qt0{)fbH8P%Hk32~eJL2C>;(h~Moordwb98$wm0$0Kqr;}u-YK5qeK*F;sw0QlvX@P&XAz(fCiJ1vDNX3DKX;V z?sKhy=?9S_gD$|KT2RHLV&MY#_*_x(xaE?HKL@AKT9;H{xhi}C6l1!Oj{YjvCLI!I z!TUi}?g9%rn7EQ055^0wf{?^`iVa#k#k*6iq{LcD0oJokN>X%65WkG11R;G7A_IaF zI(^zfK?;{Oz?-QSVocuTlMQ(~IrwJKgRkMdVa|z#H+h;m-{1{g4=y+P5r~SUs2&u> zNQy9V7$ND&#iCJY?HArfv!-K8YYy~=S;A*#OG5ByXA2NqE)XmN0v=FT-&q_`hm|_q zE0PBSax*L#{V6R#_+0`i8ZIe9Ka(JRYEj$*@RtR6vQAHqq{lO_%2P~gMp&tFw*cL6 zfo{W0oj+E14x8o~e40Q|1_b0!Whb3KIpB|*6fL(lu%ZPB*T<7TSLg`uk_bJEt2`A% zx5J9AvIXcS3v^nsq%TEBx24KcNpy#;=;~X5uB$-zB+zj!NoV>1jh3yi;nUhQ?0!10DV(4b&awEHiEK@mPBgCv+ft$Iaq#liSe@XL*|O zQue$FxbMkw8`ozm3vZ7=TC7!P3#2gTMGJ)MQyk%#4N>bnaB&jJA{`m}wdsb63*5_tk=)`~%ESsIo=8s@mjP|>)bKf10!yEXz*?aly{fT>48ywlRluzSoWNR; z`g=Iq*IDcdM@xP7g23BIpM{~GNZ8wn`VZ1)Ym&n>2l7`RF!Y%@fx<<^mI({)>DDK6 zDUPL_gBNRy8vcl>+~rnMfc09F5_95YrK3uOLpha;f!BwCKWB31NJ{>YncT~#hp{G4 zTT^bZCZy^ui~&LLN$MG|SOb-Tzezh1`3v%Qm{#v2h9r>OTC2@pF4U6lkpEe(?pU>& z{gUJPtq}NbUl^ujC2;uc&K~+lj8tuN0fZOZJ@e^1Po?i{Ozo0|0@7)Tu_z#WY%dYp zeZU4u)aP~j(y3J!+QTyVqYV(06wbqX^a4SLrx>;BGfbU~lxE53K~#q)g=u+%CGKXS ze?|MXm4GHoa?I&O_-syZRz5GT`X-Kfwe}vO=7J9)_OrJPB{+4dIjNn znph8q)A}ctE(Yr?9N?yf4gxK{(aFvuVtkLl{N+o4{RFVWD2-qYEzd57Hi9uUAkyQD zN+^b=gvZc&U_sg9WGmXBQeE@TE<-O%k2bIXUlA#`2Gg>IZNeG!@;zam7HMt2k>+VR z)C-258Td3Jjo859S)`NYS!7VP6;EVOuNV=M9~Qu(U_1#5Tbw(2(~YEoObXl zK?!dSQFDteq?iHEsqCzAW@n8vsKLYV&brTO;R|s;g=|h43{KPO!H^9Lc*0DkHE$;C zw0xX}LGywc9>RvYO~4YZ83(mDFRkLBhrgX5VT&!WpsrcqO|-EK0nA;QQ=!F+bt5@0 z29)Gku=$l{k=;*ZH|msB2w2^klr;-Gl(6RrLJAjvjtXfc%Rt8C#SncfCCxXh9kFd0 zFL_dFrDRdFlza;PtUU%;Ech-5C6$trMWm#{phQm10vw;sB2xBGkK7G|hGI zb%ah3w zbr`5(Br1)lQmj-ZHj8RDQJo7^-rzcK$$ErXZ$oTzmYYY$%Y!~nGrWL0&3hTW03Oso z!mHwb3U~oWb`Qh8$Df54@K^b9ll-_&e)#3bK>2Z%{K$|Wm&%We ze3?h>V!Z*HY`O(sUMbyz7|0vl0%6-{uA`|Ba|`rr3j6uxSD}203x3s|0*?bmpDFO_ z*FNDtM=fYFPuS6r}x&&llGPB3b zsqm^FYVG!6XPC&Tcmt^mtMOOeTu#MS;0e#ESdFxXYShe}iZ`0gsdz(sXPAg~qQ*ji z7FJtwDl)DPi@DZ;pq=>Jg`5gRJd4_hoQgfjsR)Xk3O8s$<-5$Bik%>XITdxyhlgk@Bq;byJT!1Dz7*1xfGzk_0Wd0#1}TPU_R85P&(Fyfkn ze@#KvzsU7$c|i?AuoP9StO`H2g2>c_iTe$a#YVfsG7ci;X+E;k7iPUrwSazpBfG3< zzN6>O_f2bG*j7<*p5HJAUDtTwd&VQ((V;hyok%uhzyNtqsm2MH73|jpcqe<0eO$QF#;6e6h)^5)sG4U6{^u zUIT=W3EvNo5dsvX0R7rWu4z?}_?hb{0z$tbAqVSP+G*E-6=uFzV%Yp=d@A#C_5y;F zpL!xt6Z-8nga&$!w*>msAK={j1GhN+<-JoQCOqkw@X$m6vQ}G(w)r{X83?~ePIj;_ z%#4@ebgqJ5Bj!8ZpMq$7FcJ5lgwGgQ{$Y{%a=fIPI`vGwC zc!)y5uMrcTPgs0MI9i--qSf>uUVH=MIdTq>5rO$hg3cpm2Dab?6Acxr#daG1@MpSn)8p@^Eod| ze@?1l-9N6gC`5bzm|1t)y1z=;g+dqWKF-``VTHR?23U-?=P`O0Iv|Brp1JgKpqN8$ z`krP{33sWVPR1MyECnT`)a~2wD5}+B1Rc{MF4frNLqZ@Nq@-G4)1xhKSdiJ;rJ>rg zTj*(3`Jt9(ZNv_2?mCzL71`X-eLIdqV3eh&BBCrvyWQO_=xY0&@UL3QkKeu(zkZP) zKj8yPqn4}WaX^NMip$X@8yigZO^x|dGBBj#?z;UWabD&tLCc+#ik&oNFKKW^P zxIU@(sYiuAxgGkX5P_1gSbUg1`8zI?^3VR(QJQJ!6FNfp$vIvX3VG3j|a)9Nuw&eU?OMempVP+U}EZ+V31mqRW4Rh}_ z)r|j^fZV~C|B06wSpG8!$YgU4DzY*H73F`UEqhsr2oy*$)sl$ZcYNNBUyg6XEBooOKc{N5J~?2iA6%Hx!Wl% zvGYJg5YImH9f-5mB47q%(|PsL8f#q_bPujMhS}B^x?gk=aBLThx;iTH7-xB^cUL0& zf%t1&=3{Fkk@ml*@q1r;4M*0fl47muT3q{#awxO^;d<&{6y~2+Ijo2QNNXKf_w6tX z&l!+}#l3^{2+CSgJKiZWAd3_kEqZum5i+mePTGr*u%bGX4^P>^?R-hot-J;`@%aqGe8#-l0a?*n{pG3cvA%Tzp<}_Y4%O?S zyQpldMXui;k5LbK>MWzVFFX&yg>aW*fUq87pf_}x6Mq?cShf__4b?M@PBCmZ><+_2 zO35uDPqlJY*UXrd?lT^B;t^l|m)i0-o#;XcyW}rAU+D%G05oD5U90I~qY*lWAv{&e0=stUA-$_(6fhj( zJ)(WbC+kbUOTss29fokw<01BIxBLc|9si7^|NcGB3M6M3X#Vi)0ZEKRTjvc8WFy$Z zqOb>2{Ume*pW6EyC;V>1DXT>L@wl)=%BrwMrt?%-p~9RfJHM=cqSmg zu@eZq4FSX3GB%HLhBtt2AAv9Cx*O0c^rj7nnQ8t3pKFI9Jih0ru;)>z*)VXUJIzluU)Y$h89P~;_m;wxw@(AexH%8a>1 z4g;g8P7kGFM_tU>^YMog*n=s@<%(Cb+18FMF>DUBBTPD_9cjyvK^K*7Hs_Rpkc!NHj#rD^tC&@JRdaO~pSGqOLkzpG2JT{)`kHUQ&9YWbi;qeg?SfaT zBolvFS1uiRmS0@M_IpDUup(&+mXjl*Sy04j&ddWw0$JkLle4ki)|0Ok%23E>WtlZ) zno=&K^M*98wf2SP<1bG^tq$*pr(i{Km}lm-ZtBFEsaS#-3sU{LyON+-ZLxS0~ zq-F#vQMkK}DTsJ-%OvaMkIX;xwRZ8V_yeskX~PlecS^+acJkV}gS08{e63AdAxyrVbxt@TH5yxaAA(plz&V3k128?MK=hC!P0>Ba;q7r_wL7 zaYQOs{YqhVp%+-Ik<$NSM1WTFE{O8?*v&pzeIG8GtMA8e60F3zAX?|)c)E4W@6q(B9Y3S#e?o2v^ZzEVkGPGynQ6+{7-&z{s;)^zVn3ez13d_Qha?oA z;z7dyk4!fuBa&;K+;SpMBmokBeOZ(6i}-y$^VksUnFms>lhsan*txP1UB-yLju5@- z_3Hd3HHyw~tGeFI(Zt`%O>&J&OY!twZR+m3eDn3#o7-?5-WGdvJKntOUG?VFtSfPM zpSyIVoE>=}!)`xwa7ovW#EF*uCi)t@Tr^idj9*OB7;XY5 z!EPW?A;v})WUQ>?6Jg||049~b_A_vCXew&hd_gbM2siB3>kTt*EW5nonj3GhC`hw3 z+is)Gqr^6rLgtEZA!nwUH3s{QZy^gjc7u;4&yJZLWR@PsZ8{ z#7uboQJ@Dr=`YDilvvOiDfbG_3_o6toSe^14TqZP{ZS|s1+M3B} zaQ9S9gYLxi=JuZf;el*yYjH1)?S{kmEsSgIGbwlBGKRw|aFu|=Z2Ip}7}xaDUYh<- zY;6QHY?ugR-ZK;mwTRoiv}RH_kj<%#YXvg=;4%SZ7NZ8;c0ZBqLk0!7tpy#)btc{< z)_@q-v3!*Bx&0ZKcA)v@Unfwx6a}XWno50gy9SEQk@>F(^#eAcUTqWV$4IDu3Vj2W z{wV}bNb~_yxQeXu9s|=2Jv=wZ4a_qs=i)Mk9;e|d0X+_!#4XzVGm!fPC~Ia%Q7_2- zKP7S7U-=nrl#qb2y|ob{fK7%;;;x&O0O2cfX+gMIxQECrE|FP!!TrfM0QcJ?Fhl&0 z87#7W{4@lF;PPJ}U`Y=I>_!zc*I+i$>Fp}-CJ0`v_Fx&Y-Us>|52*8U`8TU)0SPr*g&pM7rGjgr?qAIywgka znp=*=jYzt_8MY_g7z@2GLpRQ2=9**d((C?L$`b)<@DeY#0QHt)!>}_e;I$ zeqKUIATX-p28%HM2Ma?`y9Fm-9E+IM@U)Tgy-aN&NI23TPVrovs zTz4=H&0*cRSYofkEHYfF=I!DC;8VD;h z;Tz@7oIL)!;`e?D?ssm`J*$nWhFS%^V_tl2{;kr;pue$ z6X$5yq9ph8RLYUsD;4tiUDuP8dO9JD-;UFu=ikkquQ9??@a55|{&~Zb_*s{H7THSh z**0V;VY&U;_h6q}ihr$DtS-Ws)0}V2*P4@Vrmx#WeR=It)_J zMAG+Q23w}NQq)M(+*)RxM4Om&SA~>?9Dhi$J zMb^lo&|KI!fF_f(#b#jnD4lV$sds}xBf4vT$aQSoe}V=n>($QvzFN&!AHu5&gBYA% zN4^ZqSw*HiMu|P18lcf=k$F6|&7MEoLu<>Sm(wmi%J3Z;zwbpA_~&uXD{dDGqbCa`K-# z9LN{GGmFz2ncGX;(ai1M#H8(d_~~lA<9+rOMI$!F?Z=@<5H#N8-Lp$?`n12cdTryb ze&Hd`ej5r;Xma}-a|?q5NFb|Ut$fo0DUiPof2&|EW2G^KE(~9LSYh}IWPItYgcX}l zU9~DWxu*RV4uEQcFK4%pIDgHdXbxjWjvYs`VLg^q46JfkM5V;my4iVoWA z%a6=S@fnehfe5BA(nkNs%XBQ^q8js@lff>KT?Y9ER85OkSv3JkUxc-9bhBe5rUpop zB4`MtX#-a5f*wGuFpZQ;14xqRX#+JW!CBDrdb8&Zw6_Qhi=`ms_)@MJSS`N5$)+HJ zwUVvv01)AxW+K9{0_EpYcw`}TJRbEv7mzM8$=o)2eWWn-G&Qp3>MQXJe68k{NRLb= zH?k2tGwoCG8qkbE=WK{nH&z}3hRcVUL>uk@*O{+cvm%bJS`>9`d6c4_i&KlD0#qEw zO#EddSPe;Uk?I~)3};5AOK2D3?m<2=jz_=@pXoK;Mbud~)GNlTIj3uHB3`^>96pk* z8$0yCM&QOyCMDY0fqDJIVP0+YdklIK;ye39%2*6A4|zasDl=JCTmaiw$CBcJx#sez zk{%TLST@C?&^08#lWW807n`*QlWTeE@mK2$m!m`1w*iykUE$*L$(==^tKk1wcN%wCONcU(au0+-(+nLY>I?)U5?xHhcbtFB1eUx_J zhbo13dqW<0O)Am;MQDFCwCaIl2uhM`5~dO%OvYq@Xs{lFPa!lBe@+Zar@8O-&5*_* z4PYA(zqm*qc@m-o@Ch!Rio*dwg%$9)OwRRja|BGg`8k$h069Rq(ck6@QHq5AuEjan zcsKgX)bGai!6M@&l3=={&c8gK0w3_qx$|JmoV&Ru&nCX0!<3VS{Eo2Wt896B7*M_*Fw#2!alFIEEDripM zY;HSoLj-Eg8JU1UHPR=n0+LwNHC&tt=+>B5jo@rh00fr7yy979+5RuMHmYc#l4-E) zmrR4vwqzP?yq6x8idadgN)@z(GY1QEZUcxZZ;5)O*qF9#1FMvTSoQR*k@NyPCg|i|6&FN`i*)}wL zx-|ks*&*mCxfex-aY~Q()EFr`P6c7_OltAezp}}9UW?}`b!gxr+5&Kowgm9MNdsm3 z(%#`W%4%lQ351_ky%LZ0(U=!+vgVJG@*GZotTAXqJ&n*MBFaDoDL0dzh(iKfsH(9% zgy3YekdV;Ik_rVU>Lk1jOvIdYwk=fk0_d@06$V5`><`e|6zSpviCu)tE(-4s=+R6r z40xM3MHj)DKfqbgb7!;XF3yB{JdP1);Gu7rUxA%IfZaCAGhpOEQT}@99p)AJ>mwak z_JZ#hk5Ro%LvMjNZm`}n(LTY)MHf>IO>AN>BQfW38-b^Gt;Iy2ifpVHEAYN}{B1;v za^kOm@)O1|Z%OF-2 zs&@L&PHPaC;sY{>4O7%0wgJGvvu!-6DV;E#o_N$A#5;EPJ&6B8u5}LLaS9+u6>J1_pz!ow9CDe=U36*V(af+l$VSTbIJIU!URl_U+W#UR_3ey_ z@sz&TILe#N8}sau70wOuUJy)gD7w7js#(`uK7%Z&*;6ZA08CNoOA@AFG3&c7j%U`^ z5`p+H_Z8#6@HtA!Uz`=kuVdW0mwe1uZi?gA&&X>(#;=J1(qLC;T5+>y66r>9bhfFj zYo9aTgK- zDDJoc&umyGFLok1tUQxmbA}YOnHRDEb8-^R6RhRf9B2qgcy|MzkTR!vFv}>WD*M#V z%T(Q+=2aUJ1~0E2@eOrvFdQ=tXHjw(O);H581c*O)@iw_Ta-3*!&4t^3GstkagX*lnY0&e>X3re}3Y2GX z9GAJ{={Oo3<2W(xxp%E+B20+p2WJ2m;(59nrE$n<#qN}y^1tfNb_i6eJFnr)>dwnJ z?a>|Wr*&r;AZH$m?({LQ8zBZ+Ebj%JTJt)Jvh5* z-?s55eVkEK<_D)GeB3fvv>GW*;P23A0fFa)(?8Yhd71$-0DuI@6!K^Tq85`;0pgyA zeo|X*1ys$8qHSrj93y~i(~%$qz3Yy~(_>c1Nk0Ef})QmS6rlTV=HGz6*IJXtnIQ{hP3Gvg> zG7KFE%L_fle*BP2vTt~FFS3lxaw5JIGHWhSH`mNX>Pc8ZT$l%XvnMyH{V4=9nKusy z<1p7}@b^Xj!t2qz7G94JyHel|xrDb-^oLmpsDDq2ba`X6b>q)`wgESkzW}mlqPO6Y z`1}sKk#fazwwr(gcadRAD6#Be#1KISpd!5k;Ai^^CS`$T(w$Os8-j`xJO;4E>lySI zl#VyfZlV%BQ#ZyqqaK6H_v`X3xE#NDQ0}k9V4XpF)1v28cJBJ3bUGz=m1`C=4BjvtW@x!5hA#6CVOW^uycd z$Eo?^1@QLyjE%_FPRptb)t8zh{zl8H^@OiOi8Fq4v~^Zz=HX0zJQKjrRZgMGJdEva z7s}XX0{qoD4SJ4k_8bTBW1)Yz$YpB(Qp1_4hOCv9`TUaRa{cnlb@txjxOrM6A0 z6qZgb=z>kF6cZB|+G^g9i5AxcMT{%+F#d2{!^+0-rwiMY)$I8d8eoq<#4trFGG+Y7 zD}2f{ulf|ST5pD_=x_#_;)e50uE4V#xRxObBNA_rqJZEw?l3vBz_f4wWiNu>1w8G9 z3Ad}+vn$DMOmQ@Q&=0`bWsU|k5VlX{Q}@1LFYR>8I!$+ANh&r)KM$bhXYojhl~1O~ zc(9Fw+W!-u@q;^Xb`~C+Pu6{O6^iMIz@|yqO|wA{zwk7!^~e_3MmBBQ^M2I7P#AVN zJ^dQpC$##Ta)X-jGQ0~>ILl-fvV2C{&#$(_Z+zDJ2={FmO48X#&GyF*%MLuJ<7pd`!^1q#vQe=GF zkqRHgVelt>B}+;9@aO3ux#CaoOEsv}stQPO18agiVdOi7;n^D8L$x5)Lg{nX!cv<& z>li&eIxhFIM50UXV`nCs+&%Yk$}59nOO){KW6rZzC}mm;3v&^c42$*5jAl-wqD(F- zZ0Wh`7bfW~XiXS0IPA*e>-~Rr8{<`dG|qf zuR4xof*#n<8kH+%mwDT{+*zSA4|&HkWzp?vYSC>=x3Kah2rI{;Jv*%YI}Q<8{Lv=} z%|fhtoEOi(UwYSs*Uf*8kPJ$0!;ys@m=&?{gvSrmmi_5J^wJ|;Hd86+i5n!-*2(4r||mfSpKs{Ufp_=ph{7kH@%#Ct_{?R;<1V zQIqpvAXKt*&#q>NGpXZ3?g^Ol9cWD#lF~A=Airzw@#^7eyC@gLMy&;|4K#cp8}2wd zspA(|Gnom~@)j92V*D<%9HVA2#0C|WXrL_p)CEeQsRQ+_$2kO=RoqBMJ>NKT z1EyIU{?sWu*hx$<{len5`ff!VoDR1>36r8%4Z~IaQB%wiy&e8PJ-7DXM-q~6Q z=4(+CIt`y;qwH2;hC5~Dj*I%A8c=UeVxSWuOVQ(p~cu<A(ph87swkLV()r)Iehn->@l=vcs`zW z(ql4@sWiaRK{hHNZeoZ=jg6P0EZZe+??;My9R>_D{HtEIh7+RsDWm%DnmG15Mc&%K z`j7+!2D&ZEX!fAT#+6w!JwRUUPF@7qOv-Yy_18UObLKiqt4fks)L^6>JC|x*9VCe( zaTfI4*X+5UIy7d+G?^KC7!f0ZMH!?9I5QSGV{F@tBy-C*qKEkUHYV7ZJroNx+mt7^ zu>(|cC;hMcn~z@{EGiv7xyYJ~*d0-A%5qZ*CLN54O+IaoTFOow& z5=JV?@#AsCZYcGLgwU#HP)_E+!dp{y87{E(JI9#SZ9)i{MSBy6_qbo%!+R9Ytl>pV z05~WfS8XFCdIc^BNDR23@(k3nw{FNaPh8qJc%4#d*aB}qx%v_Cracn{FK4ZCFQ{4j z>v1-8SEn3{^B{o>&F;ql`}=~QG)=z%6E;6S2Gdkjuo>qo$j=nWe*sDoh5Y-th=cq+ z*nqiL$Zwc!Lw+63xO{F8$sqZbs_n?db+xo4Jg2T3X_{~=ik_jS85VW!+0IJrq zc^rPe*gT*EW#TNTJDXj!5BG+88_mkmePZ2jmfKi2)2sTPA$|WBu?|`M9FVx*!g-Xm z5be@eC3GGrLrMUuk^z;MROOkJLzEs2vhskC6}6#g8;lF&^-;=#Gh><)ghE^X7Yv1> zCqD>1nFe~ogh-7Y9vyjC5Yynze`&7MXPD7A1)nw==@2J_U<0Y^2HVtR8a{J9SbKrZ z+K)>n^XV1eU!yXrz~=Fzb@9aH+{Jxk`>}7t6O&*$YRnO+#Wst4m-;EgiQc{o*! za~96XIGa7UVb~TTPD5>H>nBdQ&xvo9l}!V8qI|MfFVIcqHE5BVNP^}ThXQ0y|H!s= zoQyNe)`5M;6+PW(ww)dSLCX>r|G~a2dQ1LBOW0RODQzJ`v<1r`h;BvO+t=$ZdHo-F z9q1C}zoHFM@33mxbpSQ(u46;WRZX41ebJgx(>%6GTec7jA(a!kG*+9o>@pVj3<^g7fEnld!=@j*%ExgXI=my!Z2o%y)@KEz+#PUh{S<@O)tMvZmDd<-`R@CKfG zhZo;{$Vz77z7^3IJ=poJCc7_kPvIs5T?qV51)}LjO6`M|CC`JdA$MdUw%N!1lVRei?f&;NQQJ8RPRi9h@4!1ouvPb%&T5O75 zY`$W$O%i^>SS||ovX+l>eNkvJ5~D26@P)6cr*n(XQ8jGkn)p&K3Wt)sOONgqjToaw zU;Y=`@>}sWZ_Ahr_9iBi<9mn6B5}lq-Qe_u$2z^n>r@YJ+MANpUX5pw+(3!*`?xk9 zqP@A*Y`5A@x|fc;{%7@omwiL2qcdEaTwRpm9-+X~F#oT^2T&Y{7qj~OlK4dt@4 zYll-spmmtULm6ogB(LQr3N9z%<+!;*+G)=fBgHRHdpd4z##zuKjvGCk;y-LKrce4! zIQS8Kj?4j=M)6ZAvd(|@;YpQyFqvcu4O|;Pg}SYQ#}rzJrjUio6rzNzCiSf#AxbZ< z)sbleLcUrGJJ1(eg2}Wb1Nc)9EWr#?6Q`IH2l(@nOeYwEFlTln?vd5EjFmYfQM`xy zLUXMMN(r_{PRs9rK6EV8LLh;kJE->V=!rgiK+5_;p9GV^xa6KWCAiTs(dXR1MA7F# z)F<;s520Uk(aXy)Z)j7PM2gUAuA)yw4_}rk4UXY-s9Jv+YdU+6e;X#56QKaTeX zKG}uD09_qG=gz1!)prVswV>$ixaZGS$5YM6P#*do;xv(JU9({?r!${)kgQi_?4tq z2>+n7lvuJ#+V@{L=*(IG*Ze=Uv4+?K^2%gZYZgRoKMODOaa)Xh@TdHhTyyDqvfG#+ zh4}=V|APr@I^}n;{5s@!A6J}!sSkJ%Og-y8GWEa6jg|bxjn5yzjf3RIG8ApH_G6sn z?!n)g`G@Wn@cH_`+I)T&`8-yf{#&>_VgQkG6=-jJ>WYfZd0;(pj6PQpFF!?Mi_zCA zM(-!1M}pQWi_zCvjK1E=jAQu+5}19RIqe0DQspX++}(nQ^-D5zxb10#j?k(o)dz^r zSCpz%2cxIub*8jzfDfz?e_-^B{FthKHC1VfM^A-bfzfxxRwZEK*2t2BM$lrt2cwT= zea-NN=D-l>{$94i-E1z05z*rG(a?2pdYDlZr#}x(wCGlkEI8XSak2ARZxriri__ow z$0)`6cBi6Ppt9&5HvA1;DpS|mleY_YJaT$6dh|ROe|a=xA|$&Gs#*grDlXeLiSE`* zci+P3p}Q83XM{egws<_(7ST3&A8KyLCg(9Cy^}3|JPaU^p$F zR@uxQo`k59(Yp)weUN>#7%#`o4~x0W{4i4Pt)`X152|z*&Mf69ZmZI{W8jZJ7#dQ1 z8rV8>#&&A^$l}x2uA=Ahy)&s<^}aIgn>cm3Q6*Gvb%!yt?*`Q%GYNSxhm_$>%^|S7 z>oA9|qpvd(rQPKc0X#b>@ z4L^{_VP(VRe~9AE%kM^~3VNYdr764-q4(I5tKRhln!F0c(aG#B>7 zT&Q#n!VWC87&9q~0llilx_N=7wvzfSv`wt$jBfH+EA?1Pra!KpzSPwfzb9MikLnaM zHGiKYLIO$n#j_yDAzbz)~kJZPn>=HEWBX5r>zhKntn5-7^)yx zW7P*KNSI);sNPuQy@;W$F+cy7zn{qO`}_qDZ2v2G;J`P@92d(&^Z1J!ZM^Zt8&)KX zQi1!_f8+RLP3?j6$C9`IpYq3ZRQ)de_OQ6AH4OW{PCj>e(rzCAG0j} zc>Um?#veZD_sx{_1{s}hR#hnLGB^6+ZlfCiChoGZ? zcv?L2bCJ*gXFT%cRK+8wLoNMTJo0*jjA-XT8=-_pa*0Shk1RPo$|EP^lss~E$^@JR z$s%9*Q5N}4_D^Jyul<%S^Ppv*+tFw|n?)XD^T+jniQ|vIz|+0($0R9M{PD_n_QM|o zUy?Jv@&$ieOrcO6 zD_7X85dsskiMqK7Eeyo47WYsc&v^~F8?zBxs-r0Kmg*>qJTys5b-dkD9qTRCvC&c; z6LiLUbHw9pzReT68Hm9XBXQp5Hu{y6&iL4?Y>qMyZ&O-hCC%E5`iLrxSD|7RiVjO+ z(JFQfc0Oet_QqL<7u6Nz@6(q5ji0iW#%F>tpgaEqPya2XK zOKG(H?K|fDiY727L51yUFx%LNd3YO?Mzp&(4eDEH$utj72}Wmm0`AMqeQOyyZgyy(7W*rvI@mf@GS%;(j zJca#aWGVkauTW}o2HM#xXFTr!G{^qzH#En~mPh;D+7|6Md$!n89T}!z+4ow-pcrG0 zKV}_9cnhq<3~$+=b(nfPt;4?lia`Qv;;h3!rl@S)y8`((ri7{CWyK(C+znJ88A`3g zp7J_>|GKKQUiiEUZO#6Z}zMNL90xuj?B;BvojX264|WcD?f?GS4#c{ z*9qUb{4Kez;JL>4jITtVhvoq%b!6jsK+mgY)?<1#(kuhqNnv7#BN5Dnc$7wa%bwQY zG+2xm)wkb^<|D>1MbFvc&EKIdpDp$WY!%A3EBp=A3QN|q1~C7B@V&5@t2wL;12`6U>) zTdl8Q-aQ5F!_9cP7e#5eX-hZDIcUpTnzk+Ha~y5C07NuOTYTYCsLxlCw!r)1$SMlW z$b$1}Miy5Ftc{|oLMiv()Y~TZwlhaA-`~DrBp>{)(xmnD)i0~DI` z3uxYImcwF*47dms6tuJ!acAw=#IL4i>sBU!FBq5vXuFSWXA(aU2|S9=X%VaF5n zYASzi6S}HQ<>fGye*{yx2c~jn-mw!TAn>3Q0e8tgeFQI4L_${&4_IAIH3O&*Q47A% z$!rk}P%woQkaRNtLlA~NJ1&l1AcJX^d-p6MG>)F7L_2wp(72uGA8k)*5s0yXtBalm z2B{W}dAvwDCJ;IhYB{K^vPg&wLNTEI{G^KFi7TO95T;WHb`5Gf+yRcW%2f&Q_jl zYPb!yn@WSgY+;3WW|dO#Sh}9_N6cmplldP$rlj-UNBn(Dez(f+M*c#$c?}Ap`PEAp zE3;f4y+VGc@)x(C;_X-EwiiWF38+u|0EC};L0kCg6#ux8<8J=(TqSI{UnW7oe=8Z5 zMb#ml*7YL$G<$9b)Wts@m3{i~kJpEeF#85;vdIbA^=^q zBucLS*{aA@AO7*RuoO}N>h2#0x1t0DmLnNF;{4;K(U^c+@U{K<$IDUwf%(S|Lqq$L zfD#y4Z-D`C0-H#@rY(+kytyUX@t*#1kgHa+8M*}hq5T$1T4DhAw0$QJ)!_{YBy z6Tv3){O>u5DOJTwK>IhLKZWvD|xA(+Pnx2v3&nEKqMV8KRbF*zngXGoI54R6+cI%p(p4ge+I& z>sPb-ANPo#1w-P2dBi^g)#?jj_UjRU*kbG_E{r0~O4QevN8Ckx`6EnqpqagR#5q&& z2M+@13I@E3@{D-I*>@EUaC~=D2%-VHdBpSafdlY}f3_YS|EV7F28+#)TwrxP)w~n+ z_3jaOkstpRMmw9)TWOGbc$lJio-1KriJZQNM|`VDGF!~!_oyiXY&lSmI1@!t`uJ?O zJwb%cTW*0Un_qccl+FJhr;5$riZinLX3vhE%zd6>?nQnxIpZht_FeMYs=NKu0$PI>FQXY zha&`ntNoThAX~}Eu72>Of8{yt!@}T|vP(;R%-l(9(d(E@kcSOzxDz?d0%L0+u(P136F0_hNnSY1!-X{m0+0cAXG#eo7IM7jG8=NQW~ppUh<3ReFE zw+e&zKZ%32X-yj+R-4xBVrdIvqOl!XTmYWzontoNMX*A~kO(1t6trcnDhr>oqK2wP zCU2>(MJ4>FgdSfLJBU4QLUKdtL02N7u%!r5vvKlqQE_;phr`k>q8!BeHADU4U3jVTxK8Vw=|t7ws#$d(9?u%j=*uA-qpb)k--R@3&u$ zKmd!nCi?C3^!&GBf_b}l6U+}VKGFp9`kW|TJqI<>iA{Y;TH%E!9-e!(e@!VV>)B|G zC504bWwIl=XqogVk0*M#x(x@P@hA_v5jJ@U$yP@3oCcNMwTrj%cWTRjho-QqJkbHD zSRKVL$4oR{$ljS|Gt6`Cf0k+`R$I^S)k{0~pHX-uTAfZ2e-1`H`9lQ?woUwS-pd{^-ue4>)gX5qer4soFv{PEO zWe=+YZ>rqB3s+KnyHz|yif^%t7g@zlDZbGzo^BOqNO6f>Ji#hHQi|PnF?Yye%QB_- z1iSbct2j%F54DR2Tg4|z@m|1I8u&F%SV^uFe`FWGYZad^#hdNom#pGEDSpN-eoPgo zp`xLeA+v#Y%F9@)sR~mrLVS~UN}IMUs0t!`?v^JGq+N+pzR}8WU-h@W_I4t6(ON?x&I!)z4138isZ357LQJ=GiFs zh2@+%1&Yl-uUpIPelK+4u9p24(x$)lbs=_R`G$39*^Nl(Zf(hf(l7@Br5ji(8}#tm zyI3FH}|VJ0&ilwl}np& zgI~J1izj^S;%(7Nak2>sr&^`rrnv_J2Cw3YiCa5{XxU9>`<4{s|H*FS^X4J=4lcHR z?a@l!LCMQ_(0S6@JNU&(uK*3^I6PYR>$rXCTD17m?|JsJM>~1P%>%Tmwiq1nZmj#b zi1j+wKQwsa+KyCiOLQd~;nq%R)^1@E5`_u%IJ1~!syc1uJ)Xv8Wf6AMEITG8p|NVH zkfh}W4gw3p938aao#@c5WIJKN^P7XNW}=kvO8Jz8{9Sz*B`3wp%uknY=J*0#(ATN! z0Rn83;~aV%(l%i>%{o!;O^V)QS%#Ex(;xLbXIJ^*6$a0^6^>=6U(Pevi z=IiHMD{X|;+W|zyHdqh^^pC%ZXhuh(e9ruv6fnZnYk1&3I)&@^ka{##*6)cRU_R;> z;7!V!0ldWKRA_!V&M@fQqRI)66Rx^#R27F27r;iTFhV0uqjN_|7D{Y7h(j0?n;1e` zahM3q3WCq1T#rkLQ4NIs>XgfI6|7z(@O%!x3ZCVFC!h*|&V<%eV(;Xm@Pi=DyCDkF zgm^~CP|(eRL?Typ2dHKsZw&uNUCeE=$S*w}~`Fv!=NaLEyVxGSPA0x6&=XYrVNl9W%O!fAE!)Lgi zV~ni+Zex?D8vELs7<$=$YlEEh)2be_OF}%shFn$Gtsi56Vw_os2(r@-*k>1DbD;rLsjIz!(bT4$GqS5RLFO&WS9Dp+L>9|j2l*)=2S zpGZwb*;sddEtdEodE2+yX_9bRBslZN_qHl)hrnAF+}&RXaA9jr85AeE2;rylJ%rW0 zQm4I_bYU>le9qB~uPOEwc!94`X13T_tGN)j`y7@18J0r;x_PsSHTa?X`RzDlX_j_D zGOcDbGuOsy%c}5*cmgcgsZRbDd!={GD8jmy@kU{Ph;f_EJ3fs>Ixc3>`78qBIa%z& z{#PBNqs5r-QtW*j#W~U9LIV?Ivw7kBC{2%*A{iZvk3>c-J<{S``VxgQJ+KZziGoo^ zGP2bGbCx}a^bkm02mK7|&_~@}ipS=h9QBuZja$l5VhpP-;!-)(`2A|uxXx|d!bkP| zZL{8y7mNAguf4_}xw)Qtc-Y%~A@r5~0w3WEZ-WxW!Oj{~PZf~$BtQ?h2whG`&cVOE zn=l9ejLU>Mm?*C-07Xd{U=_fwrrrJq_*8t|{L{yxxFc9yGCjAT8EBKrgM5q~uP|&u zT)e{7c%w(WLY`SH#bF5*fR_Kn8kkp@e;!zrn13G9KtUUR#x>&S!g~B%Qiq?i8vI-b zaVz`DnN&*?v(!h@=V3Y_e4x4x?IR;JQVu>OPPR+IMS^UX2&fA%81aD8mZjn&Vz%i9 zENz)d13_;K_O{?gB>l^BwP5eYxv)BfAEh~B(kr0K=6L?X9B~nERLG4Ex$%*8;~d_& z1UGC81s&~Rfbj86(F335GSi3gm7YJ*HD^A4^*KY>z(7;3$s9I%&SLP8&(QTKzUsz! zmu_5ygyS#I{w2Z)kX~ktOAn996%y<~_N-iPTt6tO<4|S*36IZpKQV~Q!_6!9AjMGN z%jC-ERj3#i+rl2TKKHV9T7deoZcKz-wF#NLzn^=o9-8me1M{&*I`(`R)a)3A+jODF zUIG=)z*eY|pyb~=65b%Y%xQd$v_am|!$+n`vYd@0Up1%0=on4CpHR(a$yg%kO5QYI z_>Osy62D}FPL8e%0k%vyVa$I-UP6Bss3snvW7iq@5d!NoFKM5LJN8R4c+QrcoO*KPZBfgOr%rEyh~z&{d@D;*3$Zu~w%uVY!Xl|7 zah-+hZ0kA~*Lf{t5uoiq&-?q+E&O1YIJN)ZDOpSUp&NR)wHc5x`cA1K$|Iv&ug-_fd;qGxvg zB|6U4$FsYAT=h2ixTyP@GZ1Tl5o%=o@c-C3eiR)ZAmMb3t(xVliW(PCVNxE(fm!M;_{(X|IjetpIhZTkl z_WoxnZ6T#nC~!%p*O;B{H5TMr6lfY&)eQ~I#?1ZOL$R5wFpBt;IR)q=Vh-XmW>_Y{ zs;nTuPVb=c9TKIPha&Y4+`*XPTg;YJ-WlhN%M_D??Si`cY0GLkDs*;Rh>Sc%3?hS| znJp=ZKubYXhq}LVg7>bolB8k%gIN|K=@Cb?vZ1V%Er`1MA-`|f-H$btQ1Zka7pof1 z)*x#wq}^eu&4sD`fQTsSI41rp1(|lDBjm{7NA5-nS&^zCmcx#SSpui9Mlpp2P90;1 z0*EJ0G!uNyC4mghIECt4&aQ95)Il?E&+_vDT5c4-f|eX-f9Wg!d`=lH&F0Q^5pJH8 zIg8ofmlS5r1IZ`{*z84_c9r@8RC%0Kxe`_C#;t11z`MSElGEVMEGh!9RC91ITW22K z8gE(_1hD7{B0NaMGf2c;Zf*5;F9YLX3~nbp^YD6-nqS$EpyHSjIG0eD;mw3hg1mPv zl1}9nvjT4bPRynPY}Re2{7WEj#fkCzvl#g>NIK1m*-`$y(QMhl-t5GNUzIy8MBhv* zTC79QD`Bmrpp34|+V94LHf4;%=O2mxyT*2bCwa8h?*qMkuy>FAoEU!Uci`D!+!@Vlq!(Sd@D? zvFM)n2qe!;pMmusM|)v8tzv>NZ8gGjrpNJDD6kD+`uw*2ztUk$j8V;TqWt2~C|zgq^1nvT^dqChAOL1%}9)sHJPpIlkLO zElr%LzdtfzqL!N9c3KlvR?W3B3R0#iDJ*9x_8$n9NA(Dqpcg`9SfER1F3j~A1umhv zn~t_a()_5T27k4xBEMA;iV`a_7~{n4$1MURY40ePAgUk?1HbB(q`gZ$9zg7#_HOr$ ziD~anh<2q8U$4hsgK9yY)dCbHv;fI^>Wkne%!X&H&R#b)xz1~VCmG4^XE`#FVhmju zc4qDZK}B=bVjnA4R9zen^&YKPhdRv5-=Si3eLaFYBs#CzQ^%^*dY=PMJ2jP69j2;+ zaEm3ZXkN3&&#Kh=9IL9v{kAHDRc(A*TGeI;LN|LFQI$PS>=kXL`>pI%G{ans%5(!F z-!^Z4i&p(5c$la%Ah~QN$$qJ*F%RR4l#T&xbVsEeo(9f>yRf4CFdQjA3$v~OkuHOT z6*meVGA1TkjSdIx)zQ{!%Qmvw9ur$zMq_fX@;O(XMbalsgM5zt57oh~4!=={kvMFU zrjnI5C>Dr@qIFmFXdUv@#9CK*b+lzsrWFszzQ|3}RFa#KT*zl22^9UGPyonX%GukV zu}xU(e}4vZ10h$R4^lej&E#E*0f#|6aQomJxcwnH@)yri`?#e^o=U&Lel0!mwTski zZ(VP{_6%P`Md#Qre5lq;+28q}aYY@L4_$=FJAn4AecKU-NFjya@M>qRJX4&Xwe{R_e@DMzksgLS6YmhhW%0@G? zDehGOY0Ve^+T#OJRV`CD(x|G@Gi7t<-*Ah~krWAXWAg3MvL5dB>!SP_{{Od#3wFLZ zJgpl8C=~D)0b?y=ARlrbR6r$%26LIUcO(1C%E4+7OnT82_eE40eH1g$4x|vUwF`Ze zJGBCvG5E4FiRn;9Z1Llvdx?24FH)YgR(%$W7aDsB-U=iF1JC5@5A$n-C>4S10b{MM zjI{`w#c3Wz2}lt$M2g6DUwYZ4gxD2OicLRqha?P1JiKmlas$cye{0K^N%x>I=C7@o zkGRjAH=*yDontp3A2d=j#5zuHF&jb^RLF?}SC#$|8_~RGMpm;gQ!+>(tZV`qkU6@9 zFyvr;HP(3tx{jWEoNjFAveYNuAk+zMD-tK}JCXDwF2*dy`g!V;#lUEzG>XxPeaAM3 zK0wUa?gK&a#CFQ7@kU<$vHkHp!G3(1`{U6Ql<75IrM=k0_Ds~@Kzk7IjCssiuoTJ# zhP(KZxZ%cl`)D6PazI8KVm$#WxsXyOMgd(!qET~u213rE%mVK>Qfnm}!Lh56^)Pa!~Xr5AC%mq^W4A#CG8b`Et$-$W# zNq?uLN7a{3i*=#9eC)PU6Ns?`X#2hPjQ3!pDX?o`pesdNK2ij$^p(e8uGbbCRm)2L zbxxA6|5|rs7yGlt%-PMEvBf+zJvphJW@BZ>MM;|6(O|^N&;yMKM|Wq=84Mc~_!yk> zc6pG}j`js@9mbn5wIv*#RaS-2;pn%})UX zKsPQ;H3oQ(+o?D0O40kTgPBvST7)XyFC;gzp6VD>wGjR0&leT=|A8On=h_BH~S#E*bOjX=do zH8L$Xn$?ih2rbG(0xiH0q`c{UM+{o8CqnBtyT|Ium3_nPG^;T&BoLTAJoHCkwoi1u z7@P^SY3=_;qfTpV@4#WYw&wjIvo-C-F+&x~6z1&e7*=TfIJr~z@C1l+4U73$c6^I z#ax6Jv~1k#n5nI9YBW>u@L|R;dFxd?MWf*sa~rzUQ7rcd#P0tidSCwq?&s>pFB{tj z?ruVRwp1Kq{sFhe=(xp9<@-)^X{_XrhY?6qsh!TCp#$kkK!kIn0qyH*7VJ1D>G$|M zVkeIH8}|M=NfSOe2etyS4@d0_`=g(afEqxGntY^9Kb>YG{rt-pZ08p9HF!wdkBO(B zOXZGDwi4*)nRu=n0s7z4&sq{Pn|^kE&ac@GNuZyPvU}YL`A?^xO#2a~pG)Plz0=R9 z-|B1jqB(uc-ehTO@3Z%RO+R0PQy@k^=Yo!L_80d;KhHh@`q@W^axp;hR8vvF_fTP! z0-l3*^hE)0db2MW_Dum_U=RKq3J4huxxqJ@>xBSTOzeyJZL^49A6@lW-?fR||C(?; z{X^0L5UwvjjS{Z)c%cu%wE<5l!gchZ-U!!2(fhwUq!+^VTimt?*97=-LAd6{O5RJ` z58-+a;@PYCyW~S0@pstA=Om?ma!ynUu;`cN-^vtG94;=e6Q+6W;XCS}%5*WvnA#nb z=E3W^pEz6?#)a7(Y52|5bGFL130qCQf17U1&d_td();hz^WTD>`+M3r2O~eAZ&1?6 z#*RT4{YZKc7kYR|F6sf>qY~A>1?QQ12%Jb1fS6JRzgb0&G?KzE+K0x8w(w*+z!F$j zjF8I8FT1}LQ*ruy|6lTchkrlsi~KF}y-4~OLaU2O$i+V6W$1Q3BdsXsW$$xW!|uy} zUgXT&(+<7Q+q4f$9-H+h^E_YwPAb`6JO?3tPrKgqeF{x*xCO9zpS4v(Z~j)T3f6uY zC9lA=8}IDn4IN+J+78u5wi{^EmT%^a2s_fSiL*C_p#V7RRBQ))yf=S~b_?Sh&D@n3UgpDIBK6F}{-K}jf+X7IGpe%cz_~k)DT4Bx z&cJ&IpGBrR`%b@+&~H$+C^-|tC$9E3edO@<|I!?s z*s)ERJ)k|tOAinGz25YJBc|8F8SORnE?-U)tQ1PG>Vnb_5Y`Z-!nQI(J-n$bA&> z^!`|YF+SBB9&#RzP9}PQQW+IBF1=)3B>m*`X_BgY4Ava;S}doJ;q#B;qsu4mY1mha za=I8S;LT~&o4N*iMYDv8knGKG(yBhe5F_{-=;Z}^wdzgZ4b-uh$ktB+z-*GnZYj8LG;y!E88N5v&59BCwT)a#735Jc}OWyp=+ATBjkh%Hy z7KUAdE3DRuVpzwBqUzlhhtp~BcRpjAKdkCHG@_TPS}+W`7X3xx6VLO8@ABhw7KQ=; z1igI5^I3EUA^RH9Y}3txW>Yd{PwyA4D;KU@X1#S)imOud9$v8u5E%>4o)>?UFaLXm zXNTK(_LlhuSuJ#W7!0<=A=!&4wvlYS&sYp3+gSlBxzVghBaU_WQ9yEaFkW(!at1!| zCm<2r^j#d2uv;O~sl=c=)(ZxCn?4-KjeA1Vi9JY%Wn+&k5qmnv5__(AgxGW9qw&~d z<&O|jCX|dxhCx;ZZ@%+J{U~1S%eDM08Cq;4k#mf9>t5jrIhwxpI~!N9(+P1!TMn*- z0X==NH-FD;(7QbygS^~W1L8H%?DR8fVk+s06k@=Bw#Gt=7dVpP5+KFDc7YdkbsR^e z_yv(-C7+>#A5KK6t78ba0!O7B`ttL`L&^|IQk1j4sDC3O7aqBftA@scQvAY)1_JgA zQG!v?=xrVei-T#9SAP`rClT~Vt|RD=K0oYOAmNZ<$1iboDrEs|N+3TK7Pd(G z{4oT3$KMI|rysV!&UlObm$fRc0rnZKzOXyjm$Sh$@>MI}BFyzgVOO!1mNX$WDH-NH zy^SZeZq4cPqZCKI24MtPpk7=9%R#ZX#U(BXxOY9lVn3g&D}bRtnZLf&dcNJrpH|+g z=dILw*3u~V8&OXq>S(2Z02S1;b=7k)#g$ddZtoc~_-t=p&-VKLcv+f!dvb|T2fcMd z==S7Noa0k|F2hl65AwEnq}hWSUg-hT?``q(S=9zuF(VN)t}3}4C#+|l9495ScYYQ| z@1iP{1^EEVZj~odFR#%lzg402N?~$PV9B34yygnx9Tcic^jci`l4}8wTD)6l0Yp8s zitjY=hu?Fpk{4IuRBw>C8t_&F-fFboS|woIiRhzv;~>a3Q4}&0T+cG;EFot5$lZGA zi6Eee1F01bB%ON8()(}#e@<#yT4$Yw$Ggm{8i|I11{CRK2JbY0pC##g-q%}N(D{h2 zx!{_{iWT)>J#V%I*5e?R1sbh0R+gcj*~Vwe{=hp{WgpnJ?Ea^Gu8mK$1U|$;)w0Vv zV=b?$XS(=InZY~JCRuH%S5I{EiO`dz5-kDf_ep*fv;-VDg9R&znJjNnPtrk#y7)}@ zx~^1DNbFkZ$!tCtdNNZT#3>beGFM&c>flm`5_J$wEA(W!x++zNdFnv!gvx^I;FrT} z$Sh2GF&hHRY#07Y@u%YtG-o!b(CnG`n}@g97d-@@!t7N1VFRw&*`e84p(krt4UNZB z8Mape2}jAa#0Q`PEF46IVi>a5dXItANm6|45|Xf;n1b)ak}NYPd1PdIX#T+x;uV^Y zm*;2VFB^Y&Xnr34TzZRJPXa=O<`?6#1gszOdt>F9;R)I1MFz+xXlEu$Du&ZN(BcBz zp*MuMVs;)XoR`@FA0lON6u{Id-7P=_Nu!q5U-sOZ9x4FK+Gu``^$uJRMbBcMj1j$v zV~{EX_Phx!&1^_PLs)t;7pP_H&jLdD2NXT732ul58-^z72Q`U@gO>1vanEOrE2r5# zkM2CMU+k}O@#l<|VeH%(og!{iSAVuYOE-pq0YP+mEm91dC~!XUnf$I<@4{SKsv9*W z=p`)s6_*>qQl1+9@G?0ojPCO@#gXn#H73HyIP}|AG^)B$*SJy^zAf1EU5F&sQU@#0 z(Mdx?b#OO{e4^5n@hgJmfLTE(|esQr%F6!lCVo7LXX^Z(Zcm(YqvDPE6X7EceYXvGN#(o>Nfk~CF<^WF+mSB{K4xe%*raI$X%zH2U9Kn&m zg+MJ^Wyrx0Rt|?ZDO0n1CU&>NehJ|)(IUFp;YZ5{V{_np*G9}!9$XhOy3A}IwwY<` zUy2kOt@JDcAemUbpe3gzts!Ot>Y3Q<0!%#Y$;8%&{B|!^qwX#yNTF*aiX(A<1!*$OY5fx+^Nov!DI!x zdC!@xXxPV}xb8!o7PB`6Plq{8a6huIKEEsa4bLd1=Qp!v^Keh@{^? z3Z^V$oKrdFNS)e0T^%2@7x#R~1OUyAxUCxo(Z~F!I$y=}C)N2jKJ%cQZxm|RJ{aJO z>Hl%{d2`Lh^58g^S*cERbA~!8G0Wt{@Z)WBiYlCEj#npnrbnF=n`f(&Qgfs_DK}40 zCo|1sBXyq3^X=-Ka5i62=T4qCsq+k; zKdsJ5V$FxtISH+KmpUifnk&@#HlA0j^Ln1oSLY2pzh0dOaju{@6$LTqS@8pz2sx%5 z=x~Y}-{*fGSwq5u3-wMmE3r5YX^oR{9P$omDg(BcvwF;3YcgtHPAh0 zNsL5%f2IAF)-jyn9q9H|lt0n-o6zOm24@1?>}TT)d4U zlZx`!PpX!|3PjdBpeh%t0;JHclR!&AuVe8t zy|im?IonjFszIzwL7r6&F!aBGD!l{j^!W*7k&qTPAwVam!}An=y=Pu0_)GdVFouruK0oK98TkE^92I1bAIE=$r?G zPBF363Nh+^C^=)<;UYAF^JlCJe>(mkc2aUNE`zl3PKDU2@?NAw5GM>AVG9Eg4`vSu z?28u##D4*EQzq69;BP`^5hB~nIjhi9gmbLX*;SE^2+{V<_1IJ^z4-JPRO9jUJ1j<6 z+Ej;EOpmNan4p^re}LiyoBQeKejeGqF1cdp8qztIEJIzYYG`gUUK}8)kMmpBD`i^l zk`*MNf?21Zq6?{^)M2RpM39oMafdpBR z3?!xfo>qfd8NK1~I9A>GIH$ssb*j=;>L4|MEEk;fdBnB5g+1QJJ1DB*^Wra3iZxsW z3QZ%YMFDE#=l1-GsdFZVCZ>v#YP_nqG>M$I=L1E!HCGeG%Arzamr*bTA`95Tq1cep z+q4Us;uiBfu{$1Q4wq(PVvykDiwO!yZ2VwucQ=5Zp{d*5`HhP+EvGA^D=u)jBaKF3 zT32#m+Fqj|wJ^VN;YXaV#zDTa#?hmE%l2aTFUS$*BafkvWf!Vuqa?#uR=8rX)q3xq zU4>AXthP_&qvApX1_P-D7}Ebzm=&%Y6*ViA7~8{3lRk??0$l^XQn!nacv=h-??F`|HsrBncX#&=NTDY#Pd;Fq(ZRAifL-U4EmiP0MV zuG{8Oa;19#H5G-IQ)1CWPi57yVmgv=9EmXU`?6-@%-C6oeaDLFkfOv;XgpfXAOet( zJRe>XGXp*nw?4sZET@2j^{SvRiw79K+Pxk9j4jxBd|1xbK;u3%F*|&I1o2TceL!Ru zW_lRfhy~nk<2#S>m0P5a#Y63?3Q+|XQ#Tn)$=!MVY&f*;Vek)Xjjg5 z$hgZXY(dDNg&lc@h79vTqY5uc_LVuHr$9dU8WVEIhmWl0{n3H5hbL7o9^K*?j<-Mn zCb$YiL!547pgZI^$Q>DotvFoXvLR5z#_EM3N6>Bj?oN4dc@PIFi7aP{JF@(C9t^oM zTHX1}Yj~{{Zg7XJcUaYw418oBwu$c_a;$Ji#%6R(_ZVX{+{T6$2V0IBwtA`?7oW&4 zdkp#Vyx97W$lAhDsan<3crb#%$wr4ezjYxTSyNod3?YM4h6Owm!j2j@c7TsGyNw}- z<_uZp4yC%qFa@6sRvEkrjk-{*Re^o|Dwnv!u1J3K!nxM?%9y(Y|A|!23%oE11HP~F zMt5Lua^*D`06nsyaMYEz7FSMHlRv*{kybd$S5;g&PD1vY7JdcUfrIM}|BkXTy+-C4 z5V+bO!=&5uHrf@s{b^}xq`7@MsFZxq`gTW(w96CLBksU={j^*6pr^<@o2=b>AAy5b zY1PaU6nOq=ADgCC-zw#M(XC}T^OiNDeN}qpJa^a~d5#d(%eo-6F8Y;rv@6LdytCMD zT`^l%h}PW!3lEl5e^R%aTF&l1(#` zEiF2f@QJUfW#LzBkApQaDXg@_EwAUZC0g}Z)Q>8(>T_{oS0hzu)j2F;5NFH6&sh!V zPEvaluL;KnMy!4nGWFwmdKS2?ur@kPK;a8Ik=jLRtg9cq1% z2yTHuz6jEo)Gq^W znSHGKPzWmY%##NC3`HM(h9a9fe6l2@I_?W$g_=!z3#Mg+NwFDTee6Ooou%tZ(cPC# zTc@yHqyfQp$|DNMq%Ib=10-xYC!^!>fFVz2H5M#~Gk7iY_S>|=I0>{oUyl&>LRI;s8t@HH~U zxPRa$&I_kl+so0jTZX9Y?Jy@p6oXC7oxwx(tBYaHUrPCHjIpo=>;$Gjt6+Ti^p$*u zYZxFLS7ep?LRVtrx%{&SXyHk~Pj4C4;${iAko|-L93yYpFfOvo3!Gg8Y~o1Zs$4G{ z=L`)CV)0#n@+uU~^o556ePKs1?6^Rcz!E%6*Pa=IztR2N`7c)<<_;lTbhJZzrqLa8 zJ0b!MxGN5dZn%VgAuZp?|M8(i-X)I)5*g|15dQ9a-y*G!^Dwn6dCrdf5VJ zbws<3!IsPtpsb?#&#gx{7DK}`D1)2Yed{735r*W3zUO1F=7J5a)qLq*%Ax^26?(1} zzZhc?IILIUmmgM*`CW!Rzrqji!UNcgHvh>FaU#`s;l!**C8~P4q3`*`u70|zo==6I zH1Uh-$?{Q)!9rC3bX7_c1Zbb}92?;??qxZ$)ZDfNN6*N2UgU@r8CwdC-G#=RMpOP* ziy-;zEeaPPN(S*Q6CE;NA#!8W3`eSaRN+C6$^q_3a>Rk<04yv_b+|`44yqgw>F16( zMggk{!9XM2NoyU2`E3i=c?0WGBhB7Glf!5&%w|os6Sr*{=8ieb! z^=&v%;V{3&f>|8_D-X*v9{YhJr`&xDchNiagIyX11RNQ`R**+0spXPJlRF>fAES>i zk`8&o6Z8joKE z^AKU7(1)HVK}VJVmkjsbP_i$7?Gji+F`bNY^DvVjC?fD&9&@)i`Vs8y-%_1bWuqew zXZuIEhL^~Y7C;ak2&rw+anK(L4!x`?aQ3oD#SjQ|kw!06rOu9lD1;!oj1v>2E5N~Z z8@_%JrllTU7nM0cKw2053iWiVdZyR(QPYvj1TcjMJ4QK1Xw`qj<95|VpZKbIZC8Cl ztch0qMxXTq&WndyEfpBY8XDhWtD${VGh~@y83fzrRIgxJt9I)M5DYiCRp2FHUW=gG zHtp80vHrpb<)oZU6;zv%?8Vdxl@Z%sPbB|JasvY&zXPMY(q}wL_+w3Sxo%ts`QW0xMLC@c z{|byD1Hf)l+(tj9l+0=MmOi( zVk_>be0A96tbjX=4j)@u83-ld~}qYSNhlzLMDmdu#6x*8_+kZ;5T39=0>&n6APO1<6AMBXX!0y7WE4O|8CNXish~Jg0GrH9df5=zxeH1P zL#GE7{V&^Gy;}yJ^Bx0F3d4ctB_?jrjnKGoe;F__iTR8R%ONS`>18iNl7SR(nz!u4 ze<1GdQM`~;5IFmnNieZfHw9ipH{H?RjPkJKOiLgtG!_Pb2Dp58_608gA_cDh!xI*` z&|yNVFtiXj(<`Vzu?L`UNfxX?%Ry}gSm&1^U>lGMofr)4gWUZZsF1M$mSdq2oT-KR zUuxAmL=6C$@PP;cFd!WyN5x{F%63n?EN<-~#a8By`xx2=WLAl*R?&!8V!JA&=76>V zzS~u3{M#o+0IlkAJSvhY7E+Gx_Va{G`W5AD@h5mM9BN}DA zg<#<4bKdy60QE2Pgk8z}hGP)kf=R~f&;y?)SAO6&K6g{~xrG6Fc+u zuW)^$uZ3YxKRpL_wsF$c!tfBQucupmbw%?F!L+dt4aaA-Qwj&~oihO6#F0fqmZ1mk zz1k^Fb5c<1-Aglw{j4KR3LR%=dNws$ zqZ^5Lt#5;~H90vHgrQbFhE|dMEdZnkfOLCC?xxQ-=QYS7PrAd75q7OV)=Jcf84r1P z%dAcA{-1l1T1%^blvrGqOnE)H_mB z^isg>B;>jluoc2%5FQfn~a7L5+BLmI_uf|x3s{$7#*Xf(0Dm#tvBc0K$m0IwaC~G&8|EN13_$aDt@h4=1s|IIL&{%mjt*J&sZ7Ntp7i*U6!Yu4!6sYlk zS`=f|HiiUa6-n3xv%RdwDoR_mwAGfjTCs`-6-_{rC<;MEV_P+9tAoLcS|$Etf8TRw zX0r(aZ2S6q@9`l!cV_O~Kj)rv?z!ijdv4*!GZLPqYP0>hCyQ(-k_2D3W!Ao><*xGr z=LXI}?n06#2dbU_C*7w<1fLF~?_i4{P-$4T?-4_Y zK3CAAKYN4F#m*O_Q+Ou$a3C%GpTLJ30nA{0nD_q!ALf7YpTGrepUX>+-;|0>_Rx`z z4Wlu?nV!fte=!aqV~Zz^?Fx!tjJUo_cn5we9N%A}Qpphk#p6cS?$pP#N#K!RoxCm? zMYFD*X=E}sC5UiEIQE&G@YP{H^p&H&-1yg9-`gl|4_eS}db{Q;;fL-M{Nm49-%K$c zz)UcqJ8azZj7Ty5r>nPzRa{zV9`&S|^+Z?&s+g#|yixU?im?ALHM1jXa@T2qw55x0W|$N zVuW6oud6496LSb6(%~8zb!?ZYTEO0k4#<$HxBtim`z6Qz?NBU(;x#n;Mu}ZJtuErP zs4$vPRcEYO!H-p3AyQIL%0c$K+J~$J4~9xS7)!JVV@HV>zpau2p5ZT6qFop}N(!LH z>~n9x*d;!Um+&8T*(Fu{)tT|%*Hbtb4X60;TkJa#Q2Ov8dkM$Y`pMtIB})Q|LF9~@ zHR2jM0B^m-uqlvTR_neh9&h47tCnhv5GCnn^Q5`A=37#r9rrBVNeT1Yvny=#TcvgH zD$H-9+piR;7g_J#uPtuX$JiFPBJ1?|LxO=Ij|pB4kDp)ouM~dPQ+rrhf}d=18ib!E zHhuyMK~mc{-Nw&A@wfuP&#ls$5-ZC;fS)CTpZp+1?g2k#HHw=2bKvKue;Yqb2Jmyf z#?KDx^y)p}=Z7wSe#qgO{{nu7#yI$Se@i-kRzQGjT7j~){MsG$kI9YNo)ay zwYPrB<=o3Jb2;~(@$q|y{kP)dtP}qa;o~na{SV>evV$Ca^r&=v+$H$9O7PJ-V-P+X zjj|w2@$1heQ(PX`h{vW06Jdf$w6wzZlr!PSmsBES@JeJ1&8|CR!mjNMb!hmsUpY_6 z`}-C4WhIxr;cs*8VEi?|GK}OAJ8xh3d**T%e@|LD7=N!|D=PTg|3w#nd%m|9{MD^i z*}of;!e8m3!%xvc>HSd!8m4%!=uHf)+(ivkIUsPj^Am#c)Z)nlf^nJkqZ6dJGqhk_ zCXAIIg1+o7c<8OY5=0Hbczn8GT#~l_`sd_hQKjdJkQ|Mu{4UYwn7hlzWdrhuD<3~| zv5U`tslljV%f}Se=M@cGp6rSE7le;jFL8E)e*=SU3-B9VGQOW{73_p}QaELqW;QtIh zeY5EQ9zHF;=s$r^b^AN`^d`dGP<*Ol6s#vtABse7aT7-?!%PnLky_k{^ClWtHgz zlUQIo_|yWw0-r|by7=@iE0BHTlV*)7`=L=OeERQLKm4lje@I?C{a?}leAmUFR|e)c z)INRt+1j5!|0~nmHjjfo0hpdN&XXZ3j|{COU+40hM-6kIx3zOs%OM!q^qrrNz~c0Rh!M!ZVvh1&OtqHkP`*6%-}Z>$~R;M`xYNyj-cQm?7t z$Lg9f80Sh|ocnzG#yVfUm#AKR+^X*Gt$d>0;J7bqz26hs4 z=;s;x)F)c=z_Wi+pE&z+`aejY_{=MN)+at-zuUV$vEkHxk;)meaz`|%uulAmLn@9w zv6cgyA(anBgG7cr>-n>7QrRP-@(8vFJed23q^@gR7e^;Nl^;3sF zf>)-~$D<(Tno54Gf~kY(qlR-;+x`iq;e~Z6{_L>l_$3v6_(P&Qtf%~8^@rXI1~cle zLxy40S-X_ks`s0fa}C8)mZ z4Xd8O&c6io?h!f0k$`W{zCob2aN#$@ib#ju;b-59vQZ>*R9hhS@d4FU{9Z8M8+aH? zc}CxN0}UTrI0?uDE*X8N@xXVC{QzgfjJ^^ctl(s2$&oD&zQ%)+DTaQ4%TGq%7kN;B z^K$)QKY1{U2N|z^kbMN+7v+RzKtT?HefD^J60gRP`YaefUi2%0VgE zlCAI3)-w-#a7(I$QM}sGgQE+tPHTNO`dwe@)kt3D;xj9+zR`MQ6A*OUoE^BN{Z@JY z#nz`8($w=To_{FMN79mz+KPK?tv8@L#ev4ahd)r?UKDK3DM*e~BLj*pI8T|+z822v zHvP}qP6oJ4#PydfyQ zO9CPlZk8B#Sx-vwqjd3MwM8;uGS}*|OGVWs5lk^sm$-_o^|bpC%)6iXzm@Sie_j0D z&0n0qOZbcO_ci{60)t}P*Fha;iC2K^Zp1M+I+xI%_`TW2tPmk0)r;2U*Atfe8Mc-f z%Qz2(J-LkJ8S42^)7#e^8&R7XW9kj4{S#9%{ad2Akr}71OSUsWsk2xul_!1ex7mN%ZyY+G1-+cex*f$NfSpJ`oLqQWb+Q*lu{_3 zgvprPCu2A9Yrn%WUkUjb!H&3osS9wu60x1nC~=$;OOjcRPohallkSr;7R(~DhLot} z4xje8R)_nwj=Xkc{Jym6)#PS76!8;J;RB|F62J0{n_9LZnY4?%;%=NKV;vrR6^y0F z>?ERkc!!Ez%{}hLHQKdUUdH9b^dQS#I( zAiJH{j6W<-beEwB{AE>4e~7zmQnyB098x&&i>Ll}V`+|f>Y-1sb5Te8qzjJb5j|7G zqfBsf`rL?D{Fck5q>h09gR23dYLUtkDo@&GJOGvx#namMw=A#;6mxt?&&P{2b%cef zh@4jL3&zbnlhYN`J!=vxE8$se60TqtGLEfkHIA)Y88nV9SxYnV9SHT_T!m z-ABnSb}aNnLdeJZg*-76*F8l>wnesjm`bfboW?jNmUL@B*^rmb5pi$q(Sjo(=GweK zePBPbr|=oPfXr$0d-7zbQSf_&ok9^D@j-f zRjnt#Ji}zaD1DKLPz2Xm{;Y;Zz4i0w7`a4<4ORMi*_JHMh<-GK4+0W6 zoJM>muZ8o=cSXD}+?iajHuB=xH;E?tYTDNa^A;nA4Z50qN1jSof@+BXLN?qzZLPnL`Z@HCvadA zo0uLN*cYL>WmH5+Y~y;VzUpBmRnpn?SKdo15PQsq_9>yJ4~@nj^Nbk90kzBC55azH z0YCegg}}RaKEr;VaJMw*$M?%fpN$70XTJ9Io%2wRe42=sS*=en(3B>zE~F&kt10`| zu;l?Z1{#nq?3ST$3YB17W!3@sPN=3Hn#+a-9dpk{PSQoPAG}fBFOPKsY3E8WWt~0xAl@Q z60h|Mu&(>nK{80%!Hsx;rOEe#hVR55U9^9OBu-xQpid{h>P4|9455PgPJI%;P4My5 zx#MmRvPKMs)%CL4oH;k=C$a@+zbR_=Ph`vev!^D;u&cbiaGmV>pG#CFwM?i^9MI=* zCz(f1QJx#fyFN0vR~UO;Bpz*z`d>8?6UfoGztpEY&M2;;lBvqGBFNdWv5&KjrXwJ~ z(uAi3zy1gT6RHBngJZ({1jFn~dbZ|3;p6`G#)Io>M}~|CYr>wO@nCOs?o(nfD`U5} zKw|2o@jo&WJA=o&>egxsS~KXgb>x%y@`^*!@Q0 zUj6akgT_6745=3F@?vAKFrH3{!>6`>Z zN;?L9;MNc+@fZ(0Gw4J3W?<5|W~wY1^oeXbX#4`Ku8{#dm@6V$sT$K#syxj>wa(ui zG@@+`Mz1lmJ3i;H=G=~;8q*Ni`AoQB{rxlxKW^lul5nEbqfEBzZK*xN@2fo^=*Jhi z@kyF3kGwqM9gl8pZ+yaNdWh%vjGNg@b%xE=kH?ZDjM&fQPHi?X-Ym~K!z9%Eo;dIy zJ~cl3aBs3Ru0f=h2{;_63!1$v%}`rGLi6G-`I4r!NtUb^je9g+1qweE`xQxanio09Mx%2azpsE`c{YF#MH(-4Yhu?I1#3A`_}_8EI@K&owTP&@~u zOLI#*Re!um1}%s~e~1X+OMbyyT&>NEyLB_No=y2{29jO+g>IkhjX0dRY+NIU<4-f) zM=E$YUNuwl^fP>GrWfgFc-Tx~!A3s(Y^Im#XL#F8snE~xSeRY~h)#cej`waJ5MR;SGlQsbYL&a-2+am2^|cD9)3AA*kLL76sSR4b_|+E_4p+m%qLjF^=n{i`gsg^<`K$qQDFq1#RJm zPE9-NLe7$=ezjVtO-`u)6Z?1bQQN#{8ppN07cj~<@N?ed)|q^16!gnYf513nmrTz( zT#8L&DvV1P5R@m=q0h_|eP*WUGc!e>nJN0rOwng%ias+3=rgmP+SBMWa~S%3(xuOJ zd%!=mKhVKbP~o=u{4}%^{WqzBVLdlZ24ROlfz4D+PazBKHdO7_AIRkbYR7v<`7YV+ z+6fxIY%KmEco$^$XFg-t_1t2!J$s<$1&y!0uz<<6-~~ikxqBsGOx+MvmOULNJAw!! zC9?ls;|+Ku1QGP_e3(myvG^fc?9iht%Nb2~@(OA3Gs4-3v`o~SUM?)feux+sh+ivr zvKI3NI(0ga{6iLF?&eEpOX`gm$eOIjDUe0kvCe8NtZoqrQ9NkYhO(LFuGcXkCBKt7 z9RInNAwf?qOvWcS6KzM@)prO{Z)C(=k$NF<@z^b;)(UaRnsq8yIifdw@dld@*i@9& z?@(t%-MNA+DSm(?6AWZ+3bRQ{Q^%O*0JuN#VAi{Vo!tS|WrR1i3i5LhKm>J9W1}E` zAofVUEd`HldM03)J7CU;xcB@Pe)k)iXFo(rB{o*Hp7SCoV15oulBYLhWo&CAhYn+E zJ<9EbKR0v;{;(CU`sBbPy7I5RevtT|_12EZ2i6atI_n3!J9hum784uDO1!r( zwhX&|mnNr?IP;JRtGiuvRL$&CL4bvE3Hh9c}&8s92jo<9dn8n zP({wE#COVQJe79aYl#e_aSAsfb-|KP2gc=UEw;T61Jr^*sPJ`?cear+sFG>>$s#Ht z;}cdl$Z#NUPDBX(W3bS(m~@8PvGe&rY>fkY!X}B$j@)1Mqj(Z#K_QgZvCK0r|bI-#Yc^IPiZb(>hbMDU zAgQa#NnFz~uZ45QU#Wlnlo5Y!e`lm<^4dng0zzJYSMBsH;+=$uKAcvw!$Pcix^5U| zG>7S&x;a=z>h7|B8gS~Kuj`IdcP)(xWi*e=bSvfvre+&b+difzd+p_?gniU(X}4Y$ zxi#&-TQ5tRC+f{&`C^&&We2vZqOu8$y$R7U*g`ZVg< zYd%?!8cUbHizdif;v0>kYt&867L0|=ujPT-kw&lJo+wDr@k}IUn~iS_zzjWY>|wO) z&XY0dm+XTuZL@XPDb8p&k;TTeg$||#oiUI&MzZgCNr=ybg`xXH>U!Y^YR>(_f}i?@ zaA#XZVKi}i7>uYk$5x4y{Yq#;PbAV8nIBO8i)dUjRNuf{IMMTY`?K=gJ>k?}zUB01 zHCgQbxRm4KluXoGCDJ4v3Ke!xb$9)1iv-65&0|Ie+O7SZM}fpl_Jo1@V=@On9Wm@v zV%QDjP0aMjZLnE_;@SGOS6|yM?t+4es08#4t0x|kg=H8E!8|31&7NIoW{`uw!u#QN9}?0jBD0e^C+ zmGq#hM>;ic7pU)6^RLs2`Kg`O#b0Nq-I^Dry_%o)$whWr*L=35u~*pp+do5U8E6ON zImgS;PrFTzQwbNqIu3w}c;Wz5qFrpX?qCdoXK>)-bod=TY%h9a1Mqv!PU~KD*=e^I zYtmlbo%YEu?6mI1GSY*pcHwuIpxAEko0nG1S$102Jkw6QHJ_69YC_s4$Jl9I^AVEP z@Y~J`Jq><;WZ^4xa{x9ZkUWdaKnn%3IlO$E8IYH6aGB5+51D~UQ!9)mufr=Gd1T-d z466avxJ2TJM&b*5YS9K;n`B_l6}*h6u<}QX2cUY5oz{J;w$pCk=BB+mBkhwJc3SuC z6w;-!M;?_rGuHU{!S+cow*!qO<42@-r*?lLY6YY*-wnhj=Vx?=ipiYe&`E#8K#R89 zY2Bh;JMFe;OWLaqX`igI)4D}>lO6!cG~(@xbgyD}nac z?YGAbdTXi>YP|<$xBAFo*g3phREXGIg5Z7-eDTqUQGK3BVy;j2(iF2NCp77r3ydY- z%N$gb0xHa38r5Hyu{}=@N<37eF{{+NeUXOm6yZQWw$lMgFR{}lngf?uSERkVB<+*) z?R2SpGK;jvbt;6xJQ{fW z)4Jg=+G*X2r%4Y~3#e~;v~mm;?PsmOMUTZJT!xI&Z|yg~9C$;2>`y)V(`GwE0~aC* zhWtQ!@y(35cp{W&BdMuH3xZD!2o|=x57vgqZCh!XPuok=4>V1zl<<`pO#2x&0P-ozgr zqiLRX8cD>f7Hj1n#AsTI(UjwtlvB0D!HwH zLrkXmj>)tDCYCap_FDCn>zYiF;x3n4tjmM!rPoXpduhzEmv-Cs(uYNO()Q90%xFrK zEddPCD}JTzr4MU+={r;vsP8DjrN+3Y)3KLgXe^;w17=gTl3VMA)6>kRKjntdWAY-R z^u<0%r_8E&Kma08n)jeKoVJMJRPGPGKV>;hT$PzFkF(lpu@4{78Q;FoT{1mJ`59UX z@)ybDmh==ESbiVv%11-iOL=yEQ&;N+6T>DL1!CPM-NNZZ0Anu}V#LgYO^b3N=D=$| z>+d&dq<)hN+wsQByoSG#aorBgXE23;B9ivP<|x5Vv}y028IEc1<)1mGy{}r{jJ|`? z)=&DYSK_y6T$nrY(fH~z4LIGPuu`q`GBP*kUV?UwRI~5Zk+ENhCdL#wrasjqcw$`l zOU6(ZH9wUrd9|gF6`#Cr~*%uRx{xt#C^04 zvq2zbHXwXg{`j=^8V`PpJYCqH)`W-^lh{Zp*br7h4A>BEvuy}ZF#=(+M9ph)Y*Fd< z15xZ?jH<~N`$5i7a{x>$-6XZKdTs0zOj2{@BefA%rU8?{s&u2&dK-q?FtDs#=f16i zOGqqJ<4FXJdp-eZLk$GDeB5U8+L2!po^L8oj2Nu0Vc?nS?Mjc%wl`@RVX>q+rR!Bs zT+?sL+35_|^s>*G3w!mwbF(c|~aF?!ryq>UaJme&ee zy0#DM!R#<16yn%FJ`(%KgrrzN-e6p)G@nY_#OBe)0j^l1rLc(2 z%}@yo0tD4sX)0F8Q*d5tEId>!AU!*uHNrh&0r@0@mkW4v1E7aN1OHH*KDPJ zyI4Q^N&{+%X#WRWY1*v&$mJLa-c2Y`{5tl5c58WB0UcNc`Z@j&Nj>2I%vgLO8O174 zBpZeVC@aM>P;8^74V%4N28vPk>JhOm0~fAz3vG^Byiq(wA;dqAT4RFEF zR7@rXrEIH!9RV2?Pdw%t25{1nWFF9Nm7f78ts!=St0G!i;>;v!iIgiYTPa_yn_cU` z&%Y`zTiTn)s^u#?uNlAH&Y&Brm{4PKkBuOy+t@c+6m;4?AT!H3Op4k-AOkK2f=OH> z@w1_PSDdL?HMv3zI4|x^PyU+u{&*6e1L55Z{MKX&YGv_tn+qZet-X6uKK$J^$N527*p* z1L~Cl8^HuE&5GPR1fM=zISfASPT$XyZEy7bZ7g;|-!cdI3Cfj5rpDqInaUlygP=L3 zY+*CIJWT{y)4#CCrCgDe!<}s)AXb8@A29pdQnAs96smX;2f4Gvf2(sPS+OycgV{uKQ?(+_jx#Qj{Vf|yR4)_1|DWlAb>?rMwCx7H*3a#f%(IPuU*{MO`T?F84J)wk08|-i(gj1XO@nd~d}Y@(vSxjUM*Cu_#0cy=U6J za!aa>6i4%zYEw`doO$Mx*k0oNUm$*>*4HF z?>c*g4imYr>pkPlP45}!aUFe~mu)=(H8rPji8LUtf8{>DB$xZ-*eMhmr1}ujP#D({ z9}+bOuCd6J;BcJ2MkCC?8fHad-zW{(k-?*4@xaC-b(4;!D2K(NFvyc!R@)Z4!E*dl z8xN9WUvAs2;g0ka(dP#viAC%g z*~EcdwNWB}TcLTW*MT)mSNcO~w7OYN4b^?r{X_qe)-w+N68W@1x+Guqoj?c6Z6JJ} zZ!{Rzbi3pB%42r-883U-v=3G2FnCr-y}8?nWu!(-Ivigjzrjh1PIk&}qVHFGfRtTP`rO`yRZ_ zhkxqz8UO&t9$g)6=B8IFb2BLgfs0K(KNkhJ-dSV)C54nD_RzUN^6{ZPTl%uk?V8Ye%I$hnAtjv?PvyF)M7fJ65?8cwUnQb;jg(yTQYUs!eZaF@vOLzH*1tqPR zQfRlpZ3(Kvpr6(*K9ly#mhU!Njkb_8dAgPXCH6hv;sa8A*y#g+6+Pwgj{w=1d7aTF{Ps8 zTNR8iY@P4~Y-CH zr`As%kx~00fG)Nc z9>-2eRa+KOwWi6`hY^QO1(OyF4jN0QAIRJW6J0E4KtDk`>?p2OBl zJi6J4pdTd1E?&#fCFb-y53ILVJc$Rv<~$~T`NEuQdI%&s?iq5$8%OC!18)*H$Q%&A zY1CbkHIWc?msQTje$s8ElVgt(w6;%-PLBOPH!Wr>pUA&OIv6U^hZmnj!z1*MQ>J_o zqm%?3qlod~)9iDna)z-`j-X&30#>m;voG3X-6NghyM7+_Fa)x_BiEXAZgtGKl(>&wd32qW#tpypjb^e4%%Z9>aLl7i?Zg6{D;; ze*M}fYz|^oZL^#$ZT-xYao%CdbALz8S=7NPjQR{$oMKg!>8Ra}0(-ceOv}Nb{bnKY z_U$OJ9OJq_Fq?hydXC>735w(zzM1$+M(OS~J{yhVQ*(pO-%54GX|LUtOY|w(`T*=6 zL11Y|Y+;drQM}hU+53s#2|b1Cnd0hYQkrL+)rOr(1N2e>Xmk}{tspN)-O;1po-E2x zIrI#mS5PZFJeXfc#|mVQD%YKY3Mzvtx>6Vc*ce^GR)m&NVmcf^@VqCgK90oaSUla) z5$X{Q!9~OdubHfaO*b&G!9?8w;xs$qq8#z(4D}cfW`B+JJaLhKAp2;N&7s#iLa!sq z-6>m#`a*%nviVSD=lx`V?2kR<`U0uu&|f-2FG()J`o1Fr;21;FTK$8X@6=rUgYQGR zJsqK5$soOFVDYpR66H{?g#k7j`i#Z5!%jJ3CzG!A>~p*pP`-7Ce|>V>X?$k)w}Q@A z(b>9=Pz6;itCt?emo;-SMmM!^;o%B>Nv!13p`Xb+At>Ip+3&jaJ9#GWy7j|lz50@{ zxOC`e@@|LyE2tRC79;Bx?l@f*+>bs9_L=qR~ z3NaWrvY-cdUS&v7JkRm+$E5Z>99Q0rBx?JK{bm?Ta5z9D`@oECGQ$4%7vPfpzA2d0(H#HG;u=qao+0J%|zfBHmn*;rctl>h|S&)MUe<0ABiZD zs5&Mbd!siTpV}{;+~s|T$uYWybv(HuvL2CVcsITW6QzZhAxYKxB5Ix9{jam?V=&x@LIUWoxoS7)JDk>( zA=n=~hpCncB{(Mn3m?^!)jkK|F$mn+znJomUA>9|jAPffNjd-YXfBk3+D_u^5)@oj zVF{eCLd~W!<-FE%fmLEom-X13x4|Q7X{x6db~s91iLn=yN}z*8H+R-kUtX6Cw1OM* z;+~oM#SVFKA1}l>1M|EPD~>0BrkdCvRtw6){srYVevrD2Ix3LJtd-l_#nEeK9-_%| zqd-?CCvgz;-%KpisMRD{!m+7kWqlw?h|iu6CuW+~OP9%tObQ=Q;j4x9g#9*X8sCye z#cP*qEE_3EHWi!e)Z9qoPJx{nTPtHA6N$b@x8Ej@Q`i>47`(fD`eZi>O898uA1O&~FsCWBDgIAn}n>KqS5( z7dxC?NS8H>LTnHumT9=&)Mvw_1PEw&#+(NgJka!1Ef2!6yQR?%DG9Gqvq_;-+tZxcHeWUxXW1Oe5?1bh;s(4SIZd47eae=NFpLukgU-AK`UbY zS-2DI1g}M`J3gE!19$e(#3!Y9?@qu5fwZiPiO|n_k)(wNO}`eP=M&4n*4*~cKVZ&wX%rqqlj-_K?c>u9EIkv~XY_Ts-+L!hA`yuNU_$F`gaV! zPgw`)-&Xl`{*~yk4f^OJv@H$WS<8Z(*>A7SvsXRtVGi$xiI*>@vA1h|gq)NrXdPr7 zDIx|tJdMU9;cro~$sJ0YR43 zTB?uRwURM0f^~_^SYWD=>f2rdsGBNhOGI61irKz1yz|{i*2kE6F*sr_=nZE*XI&YQ znP}8`SNfQEHc0SwQzEi|88NlRjMe4(stLQ0VJ5Ec0p1Zzxa26d-v6bh?%C{a7i_i( zLr*O!T+xRz3=zlWP=>PA1mUsPeO<7UqW}aUi%m6Ry2|O&B6@)O^&RGUGae|{cb+aZ zR}hPx?SaO8VJq1`Zbml{V6*V3BV_SlH@{MvKX>xb=9lw<(|psaxm7p+ru=#tu=F1A z^*(!W-Tl&o40?dtw@i-DpvfTyK4%9TB=d_oJ|^`*uXV4a6ZZRH{K|9OG@EKfhKvX3 zm-E)ahhY3W7o?uWFRsM-GW*^iYIjvsJ;Y;ayqb2))8D&K^G)@M#8uC#UJj{F6zo@~%2KCQMeJijB85+42(KN*R%p(o{C<~l_7i=DEPiAgW;o%w zjy*)8(i_9UIW-5yKFX{;00GzAhxWFO<7<5Scqq?kIT>mso_(WpNFJciojQP+6ZX-Y z>#J|mM{%wn5%NE0EEYHGs3N*Vi18kSRpj)tu$sbvcq7n4NCmi+@$pSp9;Sn;ih%lI zc{uCJ^6=a#m5>zl_Q81Q?b3E{Kuxc(R@S4_zsEAOb}`xo#yvIp<4ykuwO`^)6l?`- zi+^4a&ga8$&EQioYio`J>SLT=HjQa7$@cA&9Q_a{d^q`gjqD85|I+-?U~Qz3XgE23 zoG$;)(@55bX4Yroz+2lrxWohW%6SqvHLXD6;7||z{)6!gTY}9O-V{>*KvClhPO8W=mV62m zU|3G{qun$l-V8cQjz&=vWgn!hddp;6U4zU z+GLF@=)xXSdlWfta`ZB`N(N6iR5EjJvMncn%N5~$)TV1hLm;6wBXLKIn76$_TL zR+p##^)-b3krPh_W?0tGX%s!Yia<<;*4Mu(a&wmMgW;Qjj)2e|k@#HJFr~S=E8?a$ zhj}YCd$Y}dpJjgng?+(o2;(G zH4c2i$q#nb%NNG+9X}jVvK+HTkGd32>XHKfNoz;&;1}tt;4>W2qN7mCqTqcW;uN@E4y7!zf<>g?hZw3!c z)*fh5MD2Fk+DBZsSXUgC3 ze_~k`7p=@oL_(fhr@he*jn72w(IA}IIF^;|ys&Z229zlE(WbX+Pn5N-$WRIG zlt}r_PWkq|C=;*Vygg|YgjU#J8_$R8@q907uE{?=pf*RSm!+s5!3zVkq>@L(4dMLg7?c>e?e#lN`Pdo>sM-FpoD zSEFl_z>mH6;HU7Kl15}=`;o1OWw}oaq-tPja*;8z?*)dlP_#RRbW5-Ejh+N7|=spZy!U%v*a zm|j$}wI1ZQim?CG3O4bJXk7Rv)n`_J$wYfbzk2njx`a^Uhmhljd7Yl(^E3L660uFN zN|@$H$L-JT+!hdJiUXJT1g)K}Ds6laQ4;c%lT1+@Ph+8$UOIE5P>8OH8ZNtVeq~3n z*yC0tjGKybu5>HHs%Q^DoQj-2?hZrFS=2D(Ovnvp3WBl+P>;SGx|cTq%6Tnv-pvSe zLKmSr0pL2*|9tg!G^`onqnzbP7AHb7@gc%?d860~0NtlGr4d;lh`kleK=Hq*z*mjN zm!#dsP-7CvJ#G50a1Pvil@$#vZ&cX7tA>-e7J2(RAQQm|aj2(Aqj4PxW@;HaK9BNw zB$54y>5tdk64EIcb2`BMi$0c|Q{5{TzTlCJpee zf8cQN-#hHj7T6E?V|_mOe<#xoz`Tpo%QgJPyBZKiSM?Ff%t`7oshQxoPS0jsP}8*l zJD81tP#|tJwc;4icMwvdre7Q1v|)XA-vRbjip4H-T1L%OSA@{U-JX4}t{%@}kgqsW z3<>GQn<$nlQ9a3ms|R#&@LyoBF+DM-$l7v?Xv;1vMi*Hmd%rOd^ooHXs;066+Y~PB z3a{BPbNl1+pCfV2og7I1q}l!v_}Ff?Tc?;=UC?Cag5#ozR>49MSU}gYI3;hRKVz zC;JXD3km3|TV;LHygiBS4i!cS-w{u5L{*f9@w(7JU)Z9q7a+^N9lAeNoGXMF2>->? zxON{feEJ4eN@IQ-PjNZClw-6S->%68Xmv;k^;$&obRnCVvSO=X4R6XCv1BA74AqPxSAm-5k>y>4jYw54PgUP8La|$6ZGDU7NNiz6M$OT3LbEreXF7<`RTYFV zGGhU+kHa*vtyn8>?MzC0j)YOsxlSs+?x!4Qdua zkhZ55&Hex!`LPo|$xpXF)-le=%yE(^1751s$CD zOmqQp3~2Tw*ZI%zRKFfjBgHJcmC`08WBnsajAfl{=%edI`IDir`y8Rqq6RSi=XTfl z!pN_j<{4Y>MU=Pta!n<19eb_sUMKU3E#8^xTx$??SQQoz4A@8w7#vw!h8;7BS)N>;q<<13rwTCEhZSUif>%-Rsa_&tHqM5y$g#)9wX4M20=-Jb7lbW3FqYBo%hrrR8KP@FTz(D+bb9jP5E*?3OA5$k z^m!#k0y*%pUb*5`@>q`~7EEB~TTa5p9|lN?(ltLo$J7t7AwXiQWcWM}B_}H5+KUUS@qMYtm3CYc96Pd4_=|Mh{nfT`) zd$`&wj#|kYU#nj+`;Ox4#dyn7#VW>t%StX22$EZr%g2dC7q`}83gA^0GA|d=RtDpD z*4uY=_NA44JZ!Ts{p0OIs#s`HNXAzwkpT=AM`kMr8LZ8vq1Wc8V?3PxqHfRr1N zr_eKVJOR2&jw%{*)~T7OuO}amcj!~;398f7g)bCzr3?6{zYit?_;QYY_k31+vOwK& z?uI0O!>w%Y1RP`cuW+9C$nzbk=ZEX(nyHw%*2BCEs-BLfO9f&bO+Sze0p;U~3cwlH zfyz3Y+UPC+HTkMKPke1IFU5vg2d}WFy|M}&Vk?@3qsr9EoFjv~Y8{{iCcXsC6+5@*d#?oOckvb(suRXX7$~xwInw$g;{4 z;X5Pajms)e)~_llM(AdS%IORfAU?iyYh@@iBQZVG?ue{26AL_1e|z;^up()n(wz{7 z#GdAOlVHz`gy%Tg~1OEjeccQfymOTY!jBm_35=rmj)6Bjv=` zG@c?Hs%*-0(s{Nca7eY=-Xkrz!l!)_O#7sG_fM7y%%Cp;m^Ft_*#Ia*G~q)zLf|5n zn9^Z0u~tBn;-3T&5!_Xqh|mDORc?^p5S})%tTH6YF+WPRKqhB#c*_f^E_GN~9b~<8 zC7P2CGqK1MO)T&R{5z{xskNF_*c_g@MW9Auu9!WFwmpHrV`Og`EF7GJs!0k87IqRB zQ|MSN6S{Y&j@9LYUaNIo%4Q?B95hpn?~SSpO__@;B89zJtVY&cE*$yNsDMEjQP&vF zr^K9IL0qm1c{buhVNMeJJB!Ht=#XEq-ub`-Tb@&a%~duja(!WXBIl%V7J9u-YYT4? z#n!_^!y+-gkKhM-d@D?lg+6>b_`p83Ou}cv7184Kz)SJ#syQYYui((^?7Bl(rNr^J zZ!<i zzNjkkS>I2#!$TKo@z^9gYhp9Zp$PF)iSf_|nqGE}(7cPLubgRXtlFBVm7v36s3e+j zd>XT(&@ZVn(4T37SQW?+6Oo@gpyF?st-rJX9bitH>NOhI!}CyRt&n}KYhc(J)(yRM zI*vP8a;g{Q7+!Nl623q(APgf3;X{xRW^G+^hzv$TxVd${ofckh&9c)n4_MPA?MxHD zKSvva?P=tAUdVjKEMo~BilwJW8w~V1Gi^08tjQo?y?rny;b<%V3(;0#PnDt&^qao< zUlryx8!oeaKs~rE*$2Ll4cx5l1K+eS6S!ct(~3{y0rb9XZ;>fiD?yiv<$+-4(ze3) zIZ%D1*3Ota-vH;_<)~4TegHt5VB^s=%T(Ri2e8w!rZ*awQ3NW>79y#PRGtIlp3y3J zpf4UA?ctio)yuVrYYtcB`q4hFW4Mmtn$IqM^OxO%zfan0qL&$WPS0ayIlM~~;4 z!?lR(IIa`9j^|p;bu!nz5(LAV+zhDYHpO zeKW7XA?|W|&CY@PjKc#a&mj|McT_M5_=qR+|gRN_a`jM0JO-*JT|}X{_4lh%K1O zK)fLOL>KzNQ#GuhJ*tdlAJ4t);n?EpGg!?SzGiXFz$JTyYN;S4YWglGpR9IbttL-1 zYM+I3OTTR0!hjxMpp#mW9AJ#bfxul%uCUI&t~05Y4f>8|(16jcE;y?vh7)t>PlxMA zt{qo~h}Gh_a?6jQO_8ie8V;Yp=fQ6leqzSnY%}rrZAgmXTFv*J$8bzDe&___v;ENJ z`!nQwEhKNW)*mE}VQQIlP4k(PY(66xoyKSO-~yoaHTLA`sUm0 zVwN=zDZT3RmHvktr1U&W7m>4kg%`ucqNaL2?$D+xTDWYbTXeDA@RrY4^ekQUhEaC! zE8Rkz-j{v8LJrb})Kdt37nGszQk3+)Lz^~PG$m^!6bBZO&1URXyfZsp4{2c9eoRy? z>K9{4+VHft=;7HSCiQ$NTP4KEDyH5hCS5W0igngC_3p*x%v$z=Hkyul`*v@Jb>LPH z-eik;WZQqCNmv-}7~huoehu5}HBx7bz+Z;CU z*iX~#wb519-K(h=HSoz7>#Y>4%*32-ZJwJANw#R--aJ?YQ`v=;{Qb>=r#knKY4Vuh>voMJ|#jW}r#hsvwyMyA?oRx?RE8qm0 zV8u0~UO0uBxLr0ZNR+3O&+bSzwi!*20K&o9JL+3`mO1bcac7Il3dBq5RH={4)v7cv z5U&^D%Na%S`bM4dkdnzjm5w2`RHyPu$=snzCz85Jr@W+=>r^hOTXm{{)C!#{CUu8S z<&avbQ{zb8rBmZctt1D7$Q1oi6Qd$|&tF5xi;4klv z*42Ns2_|Qr?ODX!&2bzwuE_clq9PnRnsP}WOfoE7te0`PB#Y}?;yOX{{XSg?XDk(} zS?jf_=7XPVs6A#-Ive`PKyo1FLzBeL{<_WDx zBp$tr>!F&_v?gsr}-CI<&d*z}0G6Uc5nuL`^G-YuQFLg$PYJK~u#vZ(RF6uuV7KplM=SLA+swE~hx&aEDIh#2Yk0OdA(((DX2Ee7r%E!?elq z22Bk~wR6(Lni|f~3kHV(7*%mMi@6klCems8Alx^^X|5=R{MyyA$U1!q7}(*zPhRZ{@DoepC zLHEgj9)#{CVReZ);4X9?B7}A!Muk|ADIuxyq6)nzUW!}95w6JEK7+RD)O)i@*-n4r z=;!=P`yQp%?%&^)`u>l@f3G;X!OV-qaZ89hG2-+dPqvb;%tbz@f-ZQl?Po%KqmQvE z`gp+3PGj+-df`^yqt3#3S=G&ott%3*V#?~^%VaBzCBxkLI%1Y9Cp@t+Vz^)=D?4Tg*3kCyP_DbEAdg{5yoS=_2kXPW5149n9}SanH@j zFTr>)^V48Fz@G;rH2;H{9`5-IW_n2=--dmhjaa>j#R_n(2u-@Shwd0l>gbhr)B*_6 zL_#*NXn!qk34_;|FCrI-rTHSKkhm#dgd7sL=9k!sJMxR{#9i86%&Ysg>o5VHE&k4d2?lA!4g?Zs4JuknS6 zvCywZ8(^>TfAkLWz3m%-YKI_g_h+h4{E+)f!WZP|NkjkE7Xoyv#bSKmL{2_ucrB9&GwwnV+2~ zOZIuOVf$Y(Zdr$>kFb7n;=lut;hZibM8vU9Bh-Pm%`@MBj!n1TJRGoa^~|fUPZyzQ*}>IGM@W zFw+wr7#Q4!0T}J6=lH9y%PlV8?eZk2eoE5w_2jyMUsqCnhp6)y<9>=uwu2n~!UqEW z>op%({9W;>hWaYS#!{8yig)iIJExJ@luW{Dqp);)k4C)LNMzeYbHK04yfJ)r}>|aT- zh;FvZ^>vd~##J`ntkjTuB!88@-k;y9ulVuGwc+tDF1XR38#ssP2gB{}k$JT;Dk|97 zGSII|Fog_0Qa1`RsfWA)!+Ol?;xk4GklqfG5m56k{&lU;pNKf)s=@%<4JdeMi? zM-b9j#AYn@cQbx}zDQYexa;AXyV%h|>#T#X=%zP!>9_1U5OI!;WJ!;)_+0^F;{4B| zYAYx7LVv!S^yVU&>9iDl){`nGO=H7C8*FhW&SW_y$WcNm>=E}6f91S(y=@(|5A=r< zQ<6%_2YC6k@B4#KQ>CxlXXZ=_&-`Z!Cy;p?=76v-%u+bY0eU+AMqiL#F134k))OX2 zMHT~-R6F+3%TmaF2`hn!zq5MdAgX~piuuF2POP*zXvtTow^fLJ;G5yXznihYeX8|JpSgOW4JaNKpm;#}HlP;b5DLC|HQCaL^p(KFu zw_$)WRWjSa$a8>kgaBh+%f9!MAFpHhg%5Vyt@{G?^ueH>J{Z&o461dy2gj3W z;&hfEJF9;^2={iM;vv61VPKSFsT~YFOc`&T~~U<)XY4vo4#+OlC?`J}KiU-ggl6wYblWKfW8IYDHAlRz?f|5pLh*5so=O zs_JsXs>-J}r|^~Yn2;r&3aH3aG!xpuRXzd3jV;QvT}XMlQTD~lCe;J+RLo@_z~fFY z3x3w)!Hbk_B>-)tv1B>al-!`64*NG%|3=4&B@B_;i9NI|To^KCL8BKk;uEjKISiQU zB;rM$J)dG+)rM<4s$>ffI<`o zzVt(3o25RA%vhDV?G;`0U{`H`mpqiHAs^XZ+R}^%dd0@0yG0vyx9ok{TV-MX4H`KC zk&dbERC^G{u!P!VujHniBBc~CJ6gRc3Pr(Who~kZY&w2nIxaH{O`!Y{2L~}k?Ha_! zVm3X&vz)$;*S3UIUje|nV}|tgiaP0M;|Dn8v&g^7$60Oe20hWTl#7<-`6t9iertZK zbU*fZMcS@N4DA0zT{%)$E_JQS?E7(Y?9FwuFTC|7bcT+;WvF~u2`7af-d>bv(?er^ z8BYlAV#=AW5Cn=nk#rd@o_324``F)6ocqjFSFwS_^<)n};ySTw-{)WG(R|iamjIa0 zG|C?mRZmZNLT2+^+n>kwZ;u-HJeBfq$1sJupjdmh-+IMsKzldOcB#fx8*KOUObl4s zxxEzTi~-B8Da-L|KQi5~{Y#&EQ-1Aq<%`~R$>Ho1BV{wExcYCjj?h6r7=`)tfdBw( z=pxvR^g+$?nfT;=NlP&9d?o(QnK z5w+2+;y|3Z_n(AM-J=-{2Zx^v`IT8SY0QKV?JqeP{*?~UzTt7f!8DB5`+!~jV9A_8CqCSjzw#4`Y1pn~uBhx27dm*`R6-%BZJPDj zQ|P6|PZ{Jz>GY~_^&$?AUszPqyl|p6PqAuNw{`Og&Ztn#x8Lp5QBIGN2t)}yK4ck( z`(;o@Zmjnf*#IT*|KfI?ujv!?hPoWtCcJP3e=GTHqG{_5;pn2aFP@ws+hFEQ#4O!n zt^X-hgHz)QO&N8fcx00?&Kvw)wo! zzLeMEWX3u^BacBV))UJN=CAohQL1((lbO%x$z*hdncky1P%yE6*lFC-)@~iy*e1Ia z&i3_qzZP;a3fuDs^1(&ZC9kXPQJqI zwcdJZi(R4V|HQ43q+6k(&77ieD2n(m%B#s^ij>J{n)rMR*a3N6JX$YubsZB5Eo0-# zw`j?1(NKzyP-vCjFuJe}kAW_kr-;M03gcn(dtNaBtpYZv3PtODC`baZ9b=voePmUd zNn-eI)z^X$)}P*iCrBx>`;mrGGM*0$3uMn8DL_(UeOMzNuQ+{3L&MNtp3Fg7hbi4a zNrC&pxjH~#MD??)U?qCG6%2HXK-y@E(RgP($!3q~r-A@XvxCMI_9`G|;MgqMVf_%4 zML;-$F`j=AV|uVmzeU@gV@jIP#zPm_HKRI1GM9k146@uXn#|RoxMSTc15qBRUj$}N z4-4mW8Ivm!|Hq+r(V`W{PAWNr`~smI6|m-7pJZ^Td#Y)SpH|3lcsq& z{Rn{CLI?AODGgd9zgG3bj!zg*rT1pS%(J%qsy*2`tweH(ix%?7et2L3$Z5WLozrqb z0x=OD3)BVaWE}MTY38!@6Z^D z8+VcQYJWP?{1X=7qRYjO^~<-BWb7^TJ?Mo%8{AkIdNtbYu+b*TL3$W~IAIR4g#Y#m zyo42axy=lsFoQWTgO3Fl+JzZ3T`n`7raJxb31-RU*lT_ON1EFW_4t?^O;e3SBjuKB z>!(V}1FEb-SCg|PsF=3c&5tNy{fQ`_;*DSL&oCNKr*s=u-M~sB{v(`(EFmtH?U^X& zdUX?sZ`TB$1mb(HBlLWR@!)~2->b^VDD0};&v;t|1UQ2w3xd`90G?OGt_51Hbk-PY0!p}yU_ zV$zii3?Uf3fOW$gjNBr9Q(Q)wdSvXg~r z-y-HI)4ojM1JgdCp{+&idUplYl)Ut~QsXarW0CVT zkC8-~pfKysVxjkIiSr;*f3c7uTsmB2{euuq42uks0Ma#E7k>^&1}>90FY~e}IIB`hEyPb?7GU_=?Wl<3h;!|a}#8GVb(p8V?G6^W7rk6QHR6DsdP*%k( z)c4I{-}Cls4ZIzC=Yz1QOwnx4WB8( zY{j;h5z-XHO+*lutND=VOOYYy6eiJk&Gu~*&7;;eyqeToVXR={hNlr>YDWeh+QhZ# ziSWaMD%c-00*UF#nTed-h!N~k?K2aeC=3RL;6uG9Rv$F4C7RWi?9zAh(NpvukSPB! z>fcy<7`CH?)F}8<6i7_j#kII^G>@b57zvqWv>>8jBkQe*DlXg@e)i4Q^}H=yzeY}( zkZ4Hn8*dOB{mfC16mbHUQ9kN%eI4JqL<8man&OGC5UB=Yz_K&lY>k^)= z()z-#)>F8|4>A*@vL?!`ee0I`f6UA<9(&}plASZ@#o8wd+k;tKj0b?q`tY-_hIhV- zisQ;G*tlNdG3f`gBo3`9?{_k(tkdt2w|S5_wIpj}c;}nCH_m57;?PEks{x0vhE}qyHcy91dl7FU z=HYOine~F{f3n&zU&_~A)+MZvu={G(HG{X$TdItWnweMGWsAgKBKEr?yB6DD50U9oK|+GI zh!2t-Sf7UCejkv9{ac)Fhl{|t_~m)g#HIP*#AyYQ_?LqIu-CY5gY-=}Ys2HJEdEQG8s#b}L!`s(>pd8L=_V-4(xYrPP=3tmOj2 z=pqPkHj37V#34#Q2u_+i?wYS6^m!cr7URJwpPGr&N3ts*>1p7u-@bgzCFn05cQuwajrrVR-^sv7G}q1<-@;X?P%bw%-TLPv5+7LY6bOMvrm8_&5cRg z0kRT>j|S)u*XbrnTa4>I;HmN88K2IBZHz((FC9{m7JaZFzT5hq0|#3I{wEe5h4+|N z8_jJGP8z?sCMVg>siFT9q`=fz zdZ5f?FxN6!I9w_s9cw>ffhl>?<=G{(Y!-cHp6Nd`x2D!qrEu7`n(x+M)vuSPMW&im zgV;AM7f_h~X?Y7q*#YvAb*~>Q)tt&Q1F0-d4$)q8WTNz?5NbPn{mRUTh-H?sX1t6- zkbn!Dt>3Y|&|Xxga&-hI@8(gZpWEalDE=C27iW)@`TWw=V0If(c31)jd7F1f=YK^V7w67Oh zZ_#>50wm!g#CsGk@lrh)w5Y8_vFz{r%$(h9LInH%+CR#N?3puX?(@tu&ph*7>O%3FCFy*NV(=n$e4FPuw#Xto=Qw6Q>|1v| z3|W6#&7|TYqu!=FagLfD#4p*Atm}2615&iAc`I-Bl&sp`tcBHo5lv8zJ%xb#%jTR- zXpuP&V|{sU`_Q7}@UVFOD7$3OpNps;skRKKiBExDZw7t;y#9DQN>i~2)thm>f9`Ur zzj~CaTcVcy4bHBo=W>|D9y9 zrlwzp7-CO8EoLcE@j2;GksU*8g<`f7HX~sqO2J^Wj2a1EeRDq$+W%=#A(nf=>x4z&V+*m zw5GeDRgw!-eKyrhuR^!Q_;a3fS$0~Qyc_ioFtA@)%0~wdEM<7lH3DJ)^zqVw;@Y>; zoAM|^f$3jF^VJA-@uf*1ma8)()M`A^>HI@DaF&511?K~TJ>w8#)vXTowfY(7dR1T4 zZFPuN5C3e+PQ>A;u{v9zf5)K|6rZwFMv|o^nv3Ol!C^ z@-+74dnj(O7nfIhyId$^siToNj=6hEVBaOkWxF6#$ zb;Q%RIhjkxZ-YQH~LRQdbo1AHLS2o*5 zW6J%ISz=vh<4$I#ogFCbEyVIej^AnxNt%FlrJWWm+!nB^$W`b}r3jv%aMd3wY(;9- zc;H3+jBdj0@A|?Ht6hAK20b4~0IV|Ofjxzta*`@WY9cd;h2X+o)xMzTeY5sT1XYdt zGub0VAu$i6oezK>BMvszMRSqBrebz8i=0%D89DmpPmH72GP|5@p5sr&ZRUW}Dc_BA zi7$J0u5n!J!Xa~wGg^DHje=IE5iX|6a$ZNkIBvtWL#i_|r?{0%gOIf~u&XO%y--j0 zI*jn9z^+#S2J9FIjBtBk*Q=OV4OobHhF|bKd)<+~&g;GtvUXUz11%pyApA|f8fGtl z+Xcu3zT8vb{Re6yq5#UdEzch22%!4kK^8BIQ#KT z&XMP#D1KZE)-y+bYFxOJzg{V-IcOZe1xq9g7}j$Te?5MyQSd&&_ZDOs1uyh?@JSou zkja>L5&MS3Zt9UK=peT8DC78zm4}m{1tG?lDu?s?rr)@wt>^o6?Iqq`Q*X14<2x&l zH;#X{^5}qZ{O82KQF(xT2^j^Q{+hOoo>SzF_~+$~yl?ar7{|9(^3zgz1bIHL9O-`~ zlLWM;psQzu|B) zKBnyCxA1Eqg>bSUm;-hzybpFYv^;6lao$ovkRBjmnJTa9hA%wZ*IXU#+D9HoXKZHD~ zt07D?M;<~mv5y_HK#dQ)qz3aAKG`K-wm2CP8x~W9d(H`nKSc|_4B6*p#G9kYBxDCI zxRsgpv>8gxeKJ)A346KF{S+Up7o~#PfnE_IQT2aXVw@X1p!ZXwtmRYVn2s1HRJ$ae zlJv{|NsZK`pH8O8J5-SnpULtv4@eX@IhM1E^3rvAf!ej1s`|`+Wo8;;8Yz*57KCd* zgm4H$ILJ1b7xb;2KSMBCf!GLxPxxBY&RMEBq>;idFk%LWQn$q=#_UY6K%y}L?0+?n@4y?XEdx>Eo5K8N%2^h-;H`tC%{o;CXtsBKC_g zi*wPRWL)}6mLkMYfn4dx9nRV6u1^US?3bgz_$=Y*|7|Omecv{%Sfg}2_J};>)Rg7C z$QLtqzp#X47b}-}IpJ>VuU%IGM_6{2K70qiwJP76-~|V)uE!zy$@j6dt}hD-(a-^f_ z#OgsqSV^Q-ut%y(PVu~lh342*rYp>)?4M65K1SKwMFsf61(*&0Q#!(9o3E9j#q}V@ zV4a0iKIE!i0YdGfKsAT;wWZD2q5?>_smbcmcw?iL|tIY@d}e5)VG?%b1}=l zhM%a2-*k%Uul7(^kY=}qUgNJjkLY)~;gxC|g(f+pcMr3rVC+-TNHD`9t5yQSmZ|o& zELa@ninuT`k$S4X8L-WC=e%FA#Av0ui}I_?DyLe5IEhjcr0Mz&C0y8L;=SGUZRPU+ zbL1XHqHaWdOzVtn$lmom!&r6kF`Idl61lO@p;W2a(YT84B6G9Svn#5!tPFUwDA zn@3`m${Gy^P|T-9y^d2O8jK*jQf~xv+F^)GuB60_?%}Tg5--<9%Kozl8RYg%?{Sx0 z@x!(tQsH1Lu7mSrm_gEyZpd+^88e-;-c*Ge-gE?|u<0K5q7w(KT!A|X2s<*gVHzSK zIN*vzNj-_1|G`C~&Zdh_`$nV&Vpquw7pRg#*aueHR&%>wb>osn)WZ2q6*-{j;yFEaYtq9mr6L5dts3467G09+5EF$!x?+bH#nfzdVp)jo!I_ z175Y^Csikh(%(?cB)HNc?yOMFer9D0t#(eJFp5eJrIHMZT~LGmuu->}>XNW0`u^7F zj0iFSEV(Mq4jv8ZrgdgHh&2i2mntmeaT(y7;@;&*0~V!K9Xr6_jIt&*Krv`xiKqkJ z-oZgL&K1XC>m=ywo}Ujg+x`-|hw(AJ)0H8qkM-jN{dkARX00qHhN;GUIxRcRZBKNK z^F4}RF4(|~k9no<3!A=kxO`#_tHiQ&8P}-NVPAB+5Dxg?lHM&{C#W`+pmJ8NQ6fWP zmelJM;uT?ege7T@sX0JsAmD4^jy9>ala~hPybl02d(5`k-;$3F&J(M#mO{kjp(=He zv;D79oZw#hT&R=Zn@Da;av+PZV@}f*lsZG6P~GZOIX>U6D!4Y0`8JhPJ> zmJq@so1A9%B_J;kx-Wit`JKE-F-ox6@BAz^Wz2n1WnAaJlt{K8C9}D$8(?3?b@y{+ zem6T}o`S`!v(CtKcSP15%KIPd#oGjL6KiVRq+iyVl;92m^YP{>#rb+aY;tD&D6t>< zFID>?g!7DY=kn7;@w`j(B?NijCK$##PWHu@;$t4- zO&Sjv<{+LYHG6a`h%9a!s_ZlJs0k9al0uL~*!nxR&cS?2#Ga%!MHXn-%7NIw+7w&ulem>R#N=#FO-c$-MqZ^EO&S+V3Emor zsZOWz_E6*HSI(T$9+Go#nmu*2r!5v*9b0@aR{7WH0_84Rid1EdCKUo!A8G={?a1ir zAIK;!ijToAUjox${K9!|t&3`k@Kc@osla(ue@elVpqgAcBaB?7&1DGiB1+;%j08!Q zcNDr2?>a2{pA1(^xXWpIOXCUlv1pUy0q^j&u1ukoCg(Cv8_VV3ApWU;CP_6?>KUf8 z_d0LCpF~QH&U$bTxu@vdjm}Xjw>{>*43)acndw&6M0t(Q&vf!b63Kgit8v&CU3iys zWWTmuu9G|GxNX}&a(4yqb$;QZweZ|rD-h&f)p+V^zuAIoG~)qwOzu%Vn@r#7c?-~c zLhK$6rJ@i|&$V8Ph@gEYrwO@aoh@)CdOcv6i?-j?SD8yc>+_PFSaLB*r6h1BDs>f( zKjg1%9^>BQj$y*3p7vd`;ucag#Kn{`s+Rg~*9>nP!U+YxAG@{*b~<6C%o(Q(s6S~! ztusb9gSG0{rweIOK=Jhw2&}LF{o5njGl}M)&!w)FN4U)??$?|V(i~bd%x%rCZM5Yi zZtD8Cg)x&M*;iYnP0}8(x}=o$r1)#Xa+g+p%ZMZp>P`-f8k=@ELA?s;^AV2I%2~YZ zM9P9i!m>ruq=ltSSw!rUDmUkF;rkxPWrTj;dMu0Wq$z7`TH4c$Vp>@7H@HKN``%nQ zigMqu+K*n_5PCggFYfHgpBsz55xbyM$Tw@oJSTUe98Y>#LtWt`o-s#ou8(#B5$I@% z#OdXCWu{GT%S2pRk(|xA{f7RXi={%2)S-^>5%_={8EgfgjX=gK)Pc-5SD5exXUt=t zr6-tG6occ>p1(tOad4C>N4hAy6}sr~@Tx9Kgte+$qE*K}uH8Ly;lZk7(hL95yHO!| z9YKxGo^egmXNgVeO0-yZmchEBlyPovMDV$+Yei4#h9&k(G^o`G>>GiGwTznn~M8MA3|$athqrARG0*pQycSY7@7 z0sRuGg#LZ!7SN4saWVt7Zy8b+?WimAQ*~k#DKt@^icaYYpHMMx7#{UKZ`|O6l2#QY zv1Uq28PvlS8cnbu6n^M`A7VVRzx$A%L!JWFd)@<`jz(asQjS|TGsO|ALLTDY(wcS zA9w=|qoEA^BvzlYg&84ndlj*~VeC-x6=V&gm<$ojgaehRfcqbDm=m@}$cMuM4Vl?) z_#1rEGmubI!Puv$piT_nzRJO!IbDsnD552!4wG59CIDRGYlpvNAe-TVOH-~$W6ZhA=zXTp5 zmjT1vE47^VlI%Q^H^~oY@zTcyjGO^r^o+CYR~n4U`L4jIP(e`3M??J$lLUyuwI8Kd zuM}1vZIIhF5hjs2Rl>FXHe_i(>;#yc3SV&PCnDFc)PAwVxZzW2MmYOvX^!d;&7Gv1 z>uaB%75j0v)lM`2@YvwZeDjyOnUC>3rI{kjTilkJzJ!Ka({pOumZr*MFgPEzd^E&g z^Vie-86SdyRyO-H7=mnHN43w>%t)nHeVi0M9qHelaG`-LE*@Kii*c!2^{MXn*m$+V zj*-D3ef?+EKbIpj1LF=6qf?a-J+`i)j_T7qalEkB#<}TK1HcP=>yygI+TJVsQ(?rh zvY+9*>Z@ULl4l4VC+MNkEL=gAq?#jw1TGQ zI(I>nC~hzOb4`zNGE>}MnSI6W?T6Y_E54$Bk$Fy3KisWexdEX1KYXaGPt-nK)&8Jr z9MoX4_Tl@ly>Guf7v11(RfowE4WGIr{`foux_Hs+ec_`(m|lI1PXU*>9Clj6OM8_H z4&yMb7b`MHnT3eOHTS|9{Pw~Fg(E2UOC4k^*nScv#K$~(3cQm3|0oak*O(W-G}!)I zgVrlcKldKRE#X4N^bYKLr{#kz7~OWxfdT9J!cNa~fu*}02D-%@=NPFuaSw`(U3~JN4hdlbM z8Jm<(V*=K;ptUj3vVCOWiWX^SVVB#^x03A)qBWox_V0u|8{F7Q2NrgDwoz=&&sOcT z>4%fXKiNpztM$Y9(6}r;t#U+3U%vw>U6g(uBD{ZfGM|+14v0TP0tfNIqgdHc+len& z7x8DQPB+DT@68I^W$9|X551x_?c2k@2zt6|zZhP57(*{PWT+F>HK5D9K26v!TQzao&cK%m5RnI?_;* zC20C<$P&5y8Iq8W`8{aqxJCJsphd@I=gJFn#nJR-4RKu&~pGHj=y=Xz5`Y zu9aojHy#OmF-f2*F>rvDyAY32LnkX*51sWYg(S+*1D!xQL3;wL)-B@gL_=OxnTCM7rI$?hsV8l(ejo%wOCH7>&frw1I`TQBg zF#!tw>7x8d%BacmX9XD6h&3tS{V+s62rLgxf#qz_W5% z%+J#}RoX#TFj@k;;18e{*}h}JMSB(Nrk+B#lgTqk?&(`t=B~er+E>fp4!fdVR#Ks( z7SgWw`>&(IUKidI%P1$gjCQ@BTt$MjNhzyn*IzyHlr==Ldh656O)#gsgh=SF!Js|* zz(U9Epy$KBCZ|h3n5rot`~-TL;*m%Oc8bFIZa9l4i*3q~b>s;s!+d0^7+7LD-Ba<%K`C)Le1hCaP zaxD#vX$eZ0$Ziqv`cK3PQnq-4BypZ}MGSG8EpHQtR;046@SZ$NU3q~r<)A%U|1R#P zt>@+X;tOGuE^SMbF0t*DnM>D7I2_;H!!U`A5cR53MGfN+JnmLQyxy*a+=a~xv%R>d zFlu2MJ|z+X8RDJAf=y$$>--jyKa4L)F}LYl!Y6p(bkr3Ipfy{a%}bS?{6-?1gyp2FsZ$0tn{ zLo%|F$f$k4bWFggDC}vA_?)VVVe1*^lN-*PFdb)ZpjM|x#B8jCy>faz| zEdVC^Tq5GO)hQjM61fyhl)ro*K~@iJ%63h~jA`p-X0=<$NE@JT;l%QxyyQO!fI z$+XWcmUfz9dr`66S(d6hRF<%;@jPvh#wtOm=`48Tr+3DNIC~J$;ML*PaXyw8-ShW! zJS@`FbDdZ8OA#+c&Sw2$@?ttq>z8s~%AG&!mqolRa_-^9@YV_-MC=D;&Lj5I@-Rl- zD3N??)Nk^L;-=OotNpm#kHk7iIL3KdX*MFvDlouXvpixq$|D;4AM{2go`*yvCPrhe z#FW`|)wkZLAI8!X>w0;zCzXlzSE=SLv8?>c?a;acS*ywxWsv8 zQ^F`(WPG>zSi&wEj=bMuYxQFztUD3TNC|t~Fc%|5;UhL=cajQQQp5ox&8XGd;~%)M<(Mres%-gm2N( z!!;$_QqPkS-}-9q&WXt}C(dliu11OMx|Zy4>{J=_^zF+8*VrRhT!~MeN3YUXru%>& zKXiujPq5wfY8OR*_UQx^(N0GBT|7^Ufq-MeNr=({>8*qPYeM7FA^8FuVPSOD+hteO5mIecI5?5q<@SXCp!zSo3NdwzD$ zdRVdwFl34gWY~HRRFI}dFk!^SC;)Vnpa>Ai(n7WY;na{f96LCQ075jzI9IZ~qck?r zbUYFOe$lk*A(7aG7L0!RHoCzageL{=AY@v|``tj>)NJk_+GVj<$YNh4dt40z!g}}j zt#_bu_Z2|pcYct($agmp7d{j6%wf696b3q5iC8*hJ*lnlGU3g-Tc4)?Oy3*TZ%e(9 zBh)X<=-RK+4^j8i`f5Qun{vCrDez-6CIofBYg*@Jn}vs&ExR#qx~=N$r1YT30WLgW zTEKo)Biv2t$OX0T-nyG=1z`2#RydxJiXS++2OKJ-xuW?1!`tj8Z1+5!{k%w)^20 zBdr-Lqrfr>EX%`20ZSNDXu_N}V++f9ip-HQYN&g6KlK2iDX#pppvSFF{%_?ugSJjF zg^!GssuYi^eaX`BLjmVaQrBU+J2xvod<<<-%mKqOb?`bbRSFfx#HO^@*U_-CM* zdZfa`t#c{oR4kQoaj!&^WbdIfhfGoz*9xp@8Ez^CoR#j8T;*mh{Ie+aFcyqz>PMb_6zGR&G{sgF^J|P+s<+Y=rShqLX_-W-qTTp% zm3AJ#DXdksBGr1-S6K}GtJ3z**%cp-Po^#hNzdhB`|Lc(zFcPy+JEv^%v+JO(|s%D&2-*&-{$d#{T2Q8 zvl?lGP>gHch*c`$r^|Ub54dq_blhr*`<29@-?FTOHx3(WOys@GeV1q0epI?CUU%5Q zK_0Owpp2WP!{Nf4)d)0A)TRs%Fn4ViQT&$OjQ?7*#W@WWW7PeTq$$=8eO<_kjy6%i!P(az5y z8)Qy91sMWa>a1}D^Z*Pcm>SNHt`Mxpe?Oz|$HJpOHyv>cPc$~Sh`(a~{QQ~xm4;*2 zdmrlt|2Pv>F2M~TGj<9kPPvM6&Fe?q`ks}Yb!Ab99 zg9|(HpjyelE*!fM3gyD$aBK<&<&+yJ*@VVfZ99z?(G*QbzlDt+sY0)g%aJ(bQB+)M zcFhy{CVfw;YyvZ(YSq?LWioZ?8($ga6vO|;Ka24; zTu`ZnF4mh>g?;*|fRW$~C!h4DJw4m`K@Ncg3HD|+1dgEb1iBu)yn~cjtkXG`tO`xM zS^eRFdQ{WsQ{PBje5>)2#*il|4=Pm3Coyg! z@JH%yl@mlvifssjKF>KyzhGf}MzM34ektXp)ETK?=J7JmfrufG+JeIN%{4OYhzdxQ zELWoB;k>G&WDg=r9!@(^?hX{T6^<9KR|lWmeaKweCbKB9T|A+ks|o=RXU0%w#9~Wg zL}XWz5s_`9#M^JHQgfw1RLOjZcq#*<oJvFX?YT{|-xcESC|rvJU%BUShLqASR5P5nq&2}7~2s5Z1v4=qM*aGZ#!>UvJmFG0E>-y6siW1_~6lM`W zS0X@(%2U)RX)_=1JF9Qf9e|m4c=+)I??+DR?)kiv^Z9e?e7>b}N7#x<3(X@oD(?}2 z3i{iT9knjTHvDTU7%XoVg%zI(@SW@j_0g?TXnk z{`e zF2W>{tydpY{D5%dOzcp{T5X{lC$D{dS@%EZY$FsXBo6%e(ag$&! zX^De=V)GHS0< zkOOz+-weO?V_f+C`-%bZ`#e+oSPehUix>8X-_sSU_}cJ$$=yl#1%?6O`Q`l0*OB|gw}oG)8U8yTjBN7lmCn0 zbu#Cd{|G)k$?L-F-8T(@*Mm4JJtowWQ-5whcs1%QV*fRqIzx`kF#+&WAh#UIou?>< zl2W4QSAbSIL)TC&B!MCj+SO57rBU%|X1lsjB#EREdVzmzs*>s#s1P8cGDFS>H#^Jcg*)UB-F3gL@j2)E)w_|9_) z-}XMjmvgt=I+UCBA6AX)BYfqU;nJ^r(ZA2^i~f~6r#vBoqY*2=L+IxL_cN-AF8#Z; z?{?-)?lm;Lza~a;HT_FbJzStliGvcq`}Kifj#R+D)p-<7i}Vvxv0gx2Q^2r4(jIF7 z?44WB1_mI1)eRepdmYaD?b-r|bpa>k3m{K-d-Q#~g0@pNeafK|`t&7dbro96Tv70s zYIZXB6t@nBU$@#a!=cnWTi{NuIEXn`KetnY1h0nW}41mve zpy#o90-yDf{_t7yufgZW6$(DttL5yY_Uo?&m6v>fFsM8xYmhzqoU`@^mFP*hT+R`9 z^oPpncPXgcd{6=^@4YA$DhD~QxcKtgVgFWmoO9HF5j_4G7UO>e9`8wW;c@ih0q`jI z-j8()JpLox4<3!W8e;!7n4BRg^6~!pt`vc6iHzok{uAleEv~T@N@BarR0CO@& zt0Z8$0nLxS>#IBl$^*FAg!x*=y39|K5j|;Z-BHW<7B}Z#u z5{aE{Y&ao4m!+)y#zM=3vFcUhH^5Aagz1-eqFH1ty9sR|;}Jv-Fh}XlLDIZQZczER z1c~cn)0)tMiNYqXc%Q<0W!hZhytta3`ZZJ*c#FsUZjOv(@!qqZ$2In{IIP^Jp%YXMDKJR%!c@JI%5Rr{o* zjKmf;TiWRv=d^*5i!dGvjX)O~An@BqLnz31H@G4zSJq`_t zkD1v!G;MjHc1wmDA6!I>)iQe)xFcE~A9JdF#VAp^Img76Q`To3=V1hmEKkJQD;6;} zv6&-hlVM(b%t|tlZiY%1nkTj)9~KnZUf;#943Dw^M$tY0plCgI74(C2HS%b$7mkyR zn!n*;`9RyURomoB0ONGRhpMn_Db8xiKYUU~)v<7`R`VLM(!?6%w|H&f)wH}3U%gb0 zt6%*rZ0$MavzE+iWE1KeRT89sHdNuBrM^bJdI<@BkIYHKt6s#@f&c)ZF;6a4VFKdF zj)9X_IWJty8LsxdT{I6%p2-1vao9cw$oZzCE}|9m|1%jWcNR|G#bAVMzf3o7Sb$_r z#J)%7)~tO}Ku9j*-`6A6DY3DKl^9R#VTZSE6mII8C;ES4rskoF>)m@bO%UMwgagGS&{*zYrzIik1&*Uy^F zY8U&0jS^v3koUcA1Oa<{M#(r1cfKzPtev=IQ4=rii9M-X`=n~E=%&3O5`~w*Qp5<> zaToD(s!XysqDMAj*GoUJeZ%N1C**{kc7}ROo@uR=GE%%<+G;$|$8c3C2RHfp1;Sg- z3suVc-O7eU3ECgBnoQB?*k=h(O9{770>)o!OlwJz$mW#lDJi8u5oW0`my%=k^LRw; zC#B`g-)bJ(ek_os;$oqOh*8pOS`Rl$l0Ni;D&LLuRKyaHGSr;b?(xpYp7q00wzem$ zM7}V}LxYaw?A3FQY3)(-%fyH*ADppf7XQ6 zUi@opCDdTlJx?G~_z|5-ulx=s_7LRM^Q-%;i*LtsSrNdbTxKn?dM{hSBE`&0!;t~t8Gm9DR2vd z9mjIIX`4DMQL%ib;zGWHyD``_EHU9;D*o4I$!#T*Rn#|GN+BmP-g4jZ74s#&hmZJ) znl#b!nk+MhmY101<>IE;^nFn^jj8LvMCR9-vJ21LYs!>3WzSIcaHnjX$mROJFzUqe zF)LD;I4ze2sXVT;SFq2boA6xKQF7bkmy3dO=immly(-|>04tPDg~|jT5(suLgV5@Q zl9oH7@^InH(vdO*K~H@I?S7`>=7(D2sEUQGe~7ao$O91?_FYqM)QLS$bCn2sm6?TI zVGr`>q1EV{gsd&(zy8M%MIr&+;Y_Cpmkf}Bh7>5NnKTqqAZ4XretvQy!70*eS!?Sf z);;c8Ti0)`_08hZ;inQy&ef+)%pdYvTN3L{oH)?-ea{~j&cCQSXJ7O8Axmy^-;(<^ zXO_g0LupQyoYaB+dun6Qdf04JUIW%YS%Xz$0`WG%I|453tE-LrjUs#~6d9u&C52x` zc~Q6!{bz2t^i~DpZyD(2+qltCM32%RfANQSMi`=}N}GVD!z)+IB!P6SXv2Q@fDNDo z=VppAybA9bqZB?jytXWCW0WoE9BQj3O!Gu$*sG+YRU+|7(TZ<~SF$C9#iL$vIe|LK zEHLh?!Z}{NCTdSbCCkm4Een2Df%C?hlo`7Ut8!O$^K^LbVnaGtD6cCKv*C2iJ zRu>qf9$q9x+9ouRE4DnA5s+j`E)TrUmhj08}4%?UkNZ9|Kbp8G8PD6l>Uz+cuVP5kDwm=XhPgHlp<~_ zBC8?%$G*H3#R?b1#hZvr?+AeG7uMgU-Og`*fcQNJjd;5pH-MuipE_r_#}Z(+nQdps zo}p>R4L|#oqnM=*JObR6Cz#++wLZ0t3q_bkttGwT!uEs-FyqELsu3(&EH!Zoi?<}t zVm{7dH(c|HlxpvkCUY~q^fcENvFy?*Mn3V{HGd~RKkn{l?lV4S-bYZ?@i7Bee1!dIqwZiqOmpg#zb~O~?2#w2Ay}wB0*Mpk zOM&#+(`?Od$>wgnh&Shw&p$*DqFD?~7J(Vl#K^uDM#gGrsrW!_3Gdn|W?vyx^{3Ri<2luz+q6JzYM02JJOzAJmkv=~ip>LDMVuRn3AzCOuyS^a z{J3BDNk`zRg8t|*`a?2>u>jple7%MWlV4@JV}V8ZUdoz|T>-FqFh5V+9xMdhBsP?Y zElA{Ihgqdy(Z$N%_Kf%IM$K{^Ze%AU*CY4JsYO?0)^4v!VsV`wVerYB=ry_N3!K+} zwU%?^-_omp93Ps?oJhdesO~GQwJDOLk8tzxb8%4pXkf4#W%Lf+5;9m~s5@ z1$-GbJb({3+=Pk8sXGI4yisn7`nDQ3RKR+WhD5B_Q4-( z_=n<;mBLU+@W*ht>R-)|xr(3C27Xov|AuGdJT;hE5AAdjTYV=73zQ3BorSFTge2oU z`0yG4HP~>EaIpf`8|WBBMD;f~u_Dh{cI5#IR=;-_%nWg)Ir0T?jReMQbpzjg$_-@w zVhNsJ@LOlv-#d>uPB*`Wb7Y}r;0MBm$ua%?w-HgN@mbJ^NT&cd2u&rL=;aO~kF-4n%F;(A949B>gJgjK8%bEHPE$edGQjox* zCdHEiV2#QAz>PXdxKW4mrBhHjER=%@uOSr=r;iDBK*XwdqylTDs>fwSNi&@3rwb$M zT^LcDg%On)h=}UoR}O@8+s(p!jW))|T=K4rhz#`_LI7~R>aS%>e?f|vaFUa%al@}@ zf!I2un<|BUhcv)Ft?ICyweo&u)3zIP;-em5$Ja|-bK#4FLCM-zJGlhX(-Ms zN!#m%s1Vjrn~G<26mMB5Shvdzkts|__Co*c_PBVYB9ScEe#~Z6IAJ!glz0Y6>TuGd za>^X}!Joyyqbi;R0&mi0=ZF$gq6OoA!8FNbjFL1*Q3ft~DFvl$q=S#rac~cvl8fai zg$S&wN!!=3rIQiSqU$rUK_$HcCn-}QZQ5@o8vq68jdHf?#WkYav1-AE>ElapNL&j zC8jYXT_QbW`mM=w-dBl#j5T(*K$WL@nxrH7-sRTpU9O}{DYq?yI4H6zT2ho}VUNbg$qH zq^LtblUxK3|1^3zQznI<2wSvqe79*#X;E6r6qaTj-_Cod8krnij-Gp>QP7Ti);3C6 zD#N6{XyE1zAOtf3Gp+`=0@+?!`mW+P+*iByUXoCM5^{8wk;SJap>ZY03KFgvJmG1N z%Rs5Juj~V{KClHpNbV*cZnA3K1c^ygO%Q{nsZG#XMm~IMvIz(3CUg#-FsCw^aC>Bs zQ4orNCUo&|oAAkGH3|}=*Ut_DsZG#XMxNN$gr9O4amRN*U>3SugU&z03S}1wq;yk0 zv!rZV2%sp)F-BQpzC*qXMIhgMdAhX-Ae8q9%0eX0WOdG;rAp?cMv~g599o-Rd1!5u zTw`X5&$b$MiTFr%gO$&+PzB0L6qGmUO8iZgUiLqs$+0_{v#>I9$2xvlM)K0X6&JXP z@6)aLt|}hZkX|gv-lXNHdn5vVL zjN@ThEI3I#&R990yF~@XoV7jXGi#iO@ zQ{j#J$_#-DlDXq(+)z%8JC;WMS?aSI&tkl71bGcxQ;UjMt!AdGhql$olPiTg${E|( z9rM(06~9C+QZF^?_a=Ugf~?qDJQ7M->dl%S&+h^u38jC1;#Q1173LtvXVWzaSJE!a5## z$0<2H>eV3Y)St2!>XMiq`6eUpF7=_hB#G%ONhce5mM%%=#!dYPN-_%E`B8TVM!`y% zTBG2O3iY^0=Ce)RLBkbe!y4UdjJiRH1Y^`siq+#5Q$2nuqiBr!jlcv#1}Y2O(Hm6b z08Dj7(MRbmyIKS0&(2U&jr(?zBo_CviN%c>3Ktlw4i!LbtN8<6)-B2GZL5*iVTY%W znA3h66;+r*XDKI%0~kFEuXL_GN8hZjrW8e`6)7f>y1U(9?vtEJnqC>r;49#@5b41e9UiOt zrZ@9*)*61!Z{%kVmNB$9GuK7XKF-spNjw-V=P8P$lj9p6vQ?V+8# z057BTHju}g(pyr81c-ZqfpGge`ioBfI<2#$eE#X9%Q^98v68b=@l@9r9qEvB!y}j*93GB$^sJK;tA~PhC(3Dzb|t7T(WAbO zs4*GBLp3k#wu`fcq;pp8X^sb;hO_9>TaAS1x6lV1YGhm2hZ>1zF{(^lbqUzZRf&3M zjml?g@Dq(mxgzK0lZD%7t&{>%PY5dA{tjzHM$@n-W{MnE6l*I>S5b&DF4QS^G|h-P zRLen4+qhASoA#8s?a}Y{tQu$Rd$5fPLN%Dc3w8QWjQbm|%ReJvZHZzP5GIsYI9?}3 zaqHxcH|J?mmu?w_m z!um#%GiEY$LUE)FUweHc5%Yg=#Sa_qxSJ4oFLswY%t<`s*33hV+u0{EZX9uB+>~G5 zgVh;)Wh3uQnLM0N9&3>kC>N^r@-C`yFqYXFZK>K{2SfWeDn2UXR0;vc1T_=GI7y#m z-t@bS)4CUg%~UX}242&wqPYR%M{*(7m5l?>mbnq*`cBtC5Jjmn+@gH?gqB*YoY3T* z=6CXNrk#r4tJLzaJU2IJyaWRYzVf`DEUA`Je2Kf;a*PlPx5{fQLjzNDsXh_@M^ZAu z+6W6OSG4nxp@Q9UTmDWe>7(8NT8ZG%%cI|s+LhnxCf>PcH!C)b%V06(q76pW*YJUS z%k^Uw57U0KTOPGfN?}S)q?BtE6&DNj($n6ErRwXG6N!kN$Zt8TG4WD{tedcs6LHH< z_#MVHkX^$^=btAcCo)@f1o!89Sf?L{Wd(RVlGiN~xvo#flhQjSOK}`aC1PD)4p69)td&wkgh{9fbC&1+8VQX1-$tL$74h_UNtsV z-T?cboydnguk4F#t=xe;TLbyTAfKlhgMSrVvx{iRn_^LQ0w@UcJ$)uG-C+pTea8Lt zGp6syN+hJ+*>i%vpB7^^81zP`k_OQ_Wsk21QyPgd)UWbD4ECZ9qi!vMNa4%$LJ5c9 znmJalx~+SvD_W0mNbx}7kojc^84VE*k-j@uB5Ro#Hp`YFl06enm$=VH0&6PV`P9-~ zcAFYgYPjmM`SaR>#Z0i4LJ^F>vS0SQL`6vL>54p5^naL(G z2AQL?WR8;hvtM(v&M4}eEUf^mCrjjam?w9NL>NR(QJ*kKs8M7=LV5hHQGzG%PV+?) z3@kPxr-&B_*U)++cmKxR!W+Q5x$O~QIt zfNe9gjWe-uH~c~+@hoO($+JkFN?cmbZSdEyIUKR0or$rtl$&tBv#y)Vr`pAS4p69p zbDQN}QyxG~e&j#IG?rIMd-$E=jcxI8E!NJ`jJjV?{P@oT6RYww5ys}lw8t(8BZrX7 zNwDfpxhR};r(7xp@60v|Ugp^TvQYpt>s5+BjGKCBUC~WodjpznH_Hn_@pg2R6(16y^+b?*T|GQe|%Go zOsO83ynZ87+HYh^oo{Vui;s_oZLA-M?T7N$Fdnt>Y@>F)3=Cd4>z^~~unNsxTrfXV zIGXoLic`}U96SCwS0CTbIn%^#f>F={*Du&0_o@8i8dS3QIxBH1idViNLZ?=a-+&j# z3}alF8#lmf z@#L3n+;ljDJbqi)+U!jDvQ4pQMU;8)VP_Xs04YxZ@-;}UuLj5pXS{A%g>Korel4r$ z*Rl%d_hKlMd)&>=eY@M@*h0PG8h7@y#rw$#tZ_{lv%4VZT)if2)#Z264l5TiR_j?V z@(%3VV_s?A$~vrG69Vs9iyK1|v52?;NxJ8isQuVG$j74Gs^<$ILhMjSCillg$``Fm0@D_C`FLWHRye(NzgL3#}INp`|xNrZ8QWaF)A-r6QR| zd5Q${S4^Y64f4D$Hvg1KzYa+cQ8vje+=U^s4AUO{uquPgy8d$0OArD{5%BpXb0fFr z=S*#7?d0UwZcnc|M1F<^+J^|K(&Ht-Xr|#FwOzQ#?6*(kcT1q^qyWJ#2`)GqeAh@o z&#)a*Q|-cE2o#CO4-SK8aR0oV!=NIfQm%_?B z)}_?IWjO^bnZw`UukVha_0{H|ABv3%0SOUio$dN!1fw2;pK;Re&6cd;vfl2XJ&Ro7t#tj#<#;mpd z5D(B=EMOr}D^GFk(GO~yRln4pQ{$8(O39v6lU8*YTNv^=+=g2W+h`Fus)36pkfFcG z;V{FrGCSI8mJ`WD@|M$qrR`F=RN+}hG}3}smlM9!jl0r~t0HcZj$2wIar_I${v?Nz z_NB6E$+sx>?!$JCG7rlpi?UGz$N6ra4*UU7YI)eIDTnL`7uJ;V(8gnpx_1DVKKXbi zkYwsRW)q=1pgpFRMGITR-%?aizD0Vb*5xmVJEUn=-LNLwFl}Ppur)lZkCrhGA6$Jp(K?p!;PN!)t zm6a{Vhy`A8c$)dFJD*_-d83AMnr)0iu4K6|hP4o}PR4iFr+r%W^H$UW=)3z^DKc}( zoo+aiRDEPuw$sww7Pn@(IjA}F*`P6Mc@bF@Em?J(j6Wu%6FB~05%h~CWf^k)l0--~Jk%a__@3tHQ`F=Jri%2O69;YIL(EZgg4ap`8g2b=W&@ z&D5)Sjpj8+o0ErS$tL;|N!7{d8s}ICz8egXCx0b;PdW0>>J%H^&ZT*ZIGBa-eNq@Y zy5?()@DZ&tc`Hv9Ht`HODPkc`itc2mafHW7$ez{cl%UCF&05X+YZO^7R+Ex$sga4a zqHa7>$|j=@aAf23c8D}kl?1bIR%e9O>s*5+3e&zbQ{mH1&a3wNcwMtm-%4*&3zEI7 znYi@6T9NX9R$Qdj)JWPAFQGaW$|EGZlT}hgNOmX-7r8OD_gN*Q3EigR@(Ha{p$UX; zS0T)H)ikP5E}^?ssDO~dSS7`T)_VJW;LaDSB=}eBr=n8tuV4R`c+{TT%oX$np?eDN7uwcd)HmM&$_Fm z?zKKuXXP)g3z%?FYYMD^#!(n%`cXv zcHu?Jg_l}S3D*_LrSwsoyOiX{Q2gC&SBnTLO0Oa$Ma*_M8^Uc_tCrAp8JTI-|B&S- zawJ90yYK3SRJBSL5*b~Iap>$rzp0jzV*ATt=#w6I#m4iTlOO&+i;X|{l#IcVK8-9d zct#;hL>8b6;cu{Gnrc)NlITTWV_3^okTtiWFdMetLlbAe^;RDl1K{jlnBB zTPj=YQ4{l>krIlIzPkJx-U-~4U!eoH<(KQg z?fF6g@#*e-zYg51lq86GNQrF_(7H1+ZDoo3ps=;9n|cKsl}D^&I$*(yliEd5JCx}> z@D0AOpvzh2z(4HToZg5X5Wtl>I0021tbEahtSq&+=DL|=fImTvrfwT5e(guwJBs}&*wEl_FcArSfMqiN&5 zn(b|BH-6rVFXQ~u z`sdi6(t_67pb=^gSnC2ts7-Y{5MLLx(566oV7+m}g=&Y8n-ArBExIaV&1wumjnw^u zN+aU@z$@6L9Nw{uUPcOfDGyuEITt_F1_0kvKuQ>@-g-7N6|kW!RbXWT2JZ2@f%}4P;9=7ZJc$V_ zi11M%5h{wV<7XBu<53rE=I1iu{9g3}Kh<6QEPf4c^Qcg_{6^oE-&v0QUa&)cFWV`< zSN&ant9#{l@t0xW%zSUvMdZ!kZ<=si&&=lMyc~Wm@$&Qi(fm}x(H?c}SjjUvPkyK6 z%kP;5@_XJf@_R{<{C;*s9OwlLfci8|lb|1A>5kJ!#Ws%*mVx``5E%9P%HK z3(B`8Qv6`G&~hedRA$XIl9(PC$)j>=C&x1lj z*WQbJB-~-WpoE7cZ(@VDz$MWGDA7f%3J&4*(r)-OjX}#q4;S?e*(^Y8xvFqdWvU%# z5ofhDqQWpArAN!fme;XmsHB3L94n3oui#rDaHEP8NnBs&pzgX2^+EIfwao! zIX`O=TRMidlY`LAY1ZhEMFVLmkygj}=d3m^WK1^LGIWpDnc_s=0E4fBMEN*~UK2M~ zlsbynR>OOBDL`P10_Qm`C&-3Dh`j*WiZ`;Y-N;2;kL6<=3_=Jh{}G5pibaz$TKKtX znH8pIqoV9SoopPFInLT-Jiw%h+qzQIv&DJhz|1ty;)eKI?mB%hEMVJZZOb(%EQV>; zBv9Jo)#6LLLhL*Iz_b?9uq{q84Kb~ADx%hUHZqh3oGQu@+O1-morA0FbpF|9cqfv!u4U#Gft4tLE{lMDVQXw5cQBtZtsD|A~jSAQHzp9&jm$0&(5w4xm;MLl4i=6u(z|R>y_+60< zWfE8gOk5C=<7o2io>fQD>?WGOhNd^`rpsjtO>c6WUhaH)KbL6mRC+bw!Rq*ZkUGiMIuA4{T!oUSdf51ZT^wBzJ$)(^h8!O_IpvL{7FdRkgY~ zz&@9~5i-~CZTvQ_y5>jhe1-MGOTSbNJ30&zc~sc9*;w`*)95trc3XBaZ>C*F%if`7 zCA~df0r(LzwAV=*RAQ_ine2+FJ!x#B5@1~Wr1~{R2!w0Bs0Zz=E2SaN1#0(jpZF^o zczen}@gry23$ufESv=6vlYx3;xaA!-4)1MBahT0m9bo(DAGK?$W88TgKVjd@9Q_GS zg|S2>d)buUDR$0EdMQ_eqv5@0S^+zpE-zjk&XDkE9rj2#n{XK6PiEi~oRnvFkF3{m25t-XfN;vIOv9aFBv!7i^PFg zq$uT0e9H<*RUX=NJri(~ngHXx4S;ynRi^bi7kH=JIp>F4-tx?_$KDyW>eZl?FbC<$ zrm<0aCflRc9F$nW^qg4ct@gBZ3CaxE(=sF|6JSsCNKnQ9_W7BCcq{Fwyaya) z7H)-b%&<1}!#3la<>191S77QYL~T+x<;#{7vFh@BX})P`p*1-cl{>x`*`sb(+USZ@ zqka8~+#7LSDf^@NZ>65Rh_$cMUvE~ogyNN>y(EvySzs z?nR-?fW?GG;rav*S+vEUxSwOc95xFJg_p@WmM;yR978rMlBNnH2m;ezWlmeuHvwrtbrZjOuY zxLsA)t{iN)18lc0-12UQkYr^F<>iqqXm$79e}S2V_)p+FmfFFoOKnQ;RD1OKR`6i1 zA~SCdu+Rvz3&bBjQnK6qjuZeyKJ0l7`{SiutoZxQ4o^hAy3rezTnEXNv` z>IKgRi~6t`nTLez>7IZch}$`S&}flhE6NxuVU69Up;#U)66}`Rf<7cBEyygfa}ZuQ zQIHe4hZEGeY}yEdg37>F+LA$Z(bk0u zZM_THx>TdB(Z5f0X)m;uQNmEV7%73WWGG#fB}1w4)S2L^wISadl@I;Pc*;xD1WyUI zEqF@smf)!}=hi1Qo+|i%%)JSGR7Dc_pO8etIYAgj1&N9p1vM_HU_>*Lkr|jk6p(lz zQ3P?lvXF4dqJc>u<8u^uz1H=>bMeLtqAm~)lORZfs~Eh9sQB2R;Kk)J|8I4__hu#p zg4y5i|M~IJOwYW2-PP6A)m7D1)dD;!Wqxyfin9nMV9BRk;;#7AB!^EOsP#$aS+uTh zCjDReRJZ3WJ{3IakMpUIo>ea^J~f#4;Zwq4;$r&EQ#%Wv>djwe|2jneBwE=2&Yzz9 zp=JIwSLz%Be|icJ4_iq4-}qBE8>)lwr=8!o%%2ViqW=s0N%ZOekv~Zjt>sVZ-T#?C zIS~B6z@HQ_|BvyfAD8^!~wS0ty%JH~tdto4)sB`N-V{m=z=WBtkZ z_wnY5Wmjc8y_qfP%_FGnUn)mt{JULUyCjMkQkTSG;*|7Pa@O%DThzheOr1}ukI$Hr z=Fj@sHSZ(Y=n%EDwX+F%J*Uel_y9XvL*2@nVP2e=oUrW)87Bg`4~kG7At@vi#5c0L zI{MP_bsgd)>VV@GYmqVtDew5we;oh>_ zatm)k%#O=hi-p%i=?h`4#w@3=MTw1ni?|Pa0uK~3qb)1KQYwVFQ$;lCuACf%@YA9e zl;HM4KbJTgACs3FV(8B#F-vt~=6Lcy9Jt!Q`HY!dX>6xY^)I)RI4V2iV`>gb9(e=k z;I3N;9q0C%ekyRLEAf0?0{w`^d%4z%$M_bNL2P_n4=sY$(T{%tetnW|rkME`KeR0V zxJtc9RX#MeK6r5MNu1n+;1fby2B&dgVfT|{MYZ%2QWi0jv*AvUoM;D|;6}IBe29y$ z93KtKKSSafh?bSd|0E?xZumxVeEN^GPP+D6<98w#WX*^@@kq74nhaJa8N<=6=|E4|H53VMPND~G;(k z7@$&qig7nTV63$O4Hz8)eTc+JIsY2T|4IBtt!Xfxe!Hx0t7K{(3=sDb?mNK0%$~p) z`@0qYadJof{(I&y-gnTIZQ)Duf2#P9wdM^FmrS5$DFK53%=JvQF;XQpJ;lG&rVU&i zaxkti|A~73-&6Dd?&R$X-4+q}{9x_K$D$+v)^hQ3*ECQz7Um{4fp0}qf%yuL?L39kU7G&fkQP5dwTpjc2@ESu&kKYbo1!dl?(~)EK{8> zM!0m@A7pAXqhV(_^1OpHhzvVDCeUfV!lxjzpImXh!Iwq+ncoPDR?a>#UEgu7?zi@5 zjh$5F4HzV^lHfB5l$o3?^Q3wcP<#?c9jBzFRTUc^Qvclt3-Nm9B?-{#42V>wx%mORpYK&wJv+~$QTQ7_=VmTzrdbnZ}+7Lvq&j>%9w(G@X0Ou9B2J^PNNXe$ z>z6*`80nzsNuj|458jqXCAi8;grw*V>V#O+Cc~TgqK07gPsUr);O5G_evUk|%FMEQ z3}pRi_ejz1vG~kD);C3c6%Ql$h!9wr@s#ew$P1GG>nMVrMs{B}K0Lcj_L_RA`IoZKcx%|`2#a%;Sh6%9ksl23Z)nI%^J`_Io zLFj1#t`7R}1_F_TYc-pT8@w?j_DSj5cj?Ls|%V~jns3X1pq#<<*T^s%K`FVl5gOU zR9C5-sLN)TDf{vOf#^*if6R}!C|zAJG(e5o7xtx_1J+hXs)uAtH4!rld?9c+1oRC_ zn^--hJ5!$Keb99ZScbY4-i2BC%)))bNtx%r_Rd4{^MpoZTf_lXDD$UH9aY{3MKXAD zf#9?tHav&$&2OosJneE+)LbAt%Ouzsz9>qp#Q-46#EUx#ZVJBAO2 z(E~0P(=vI^3pl(*70HpU881Q+C-L$$+qgk5flVbWq|!?v42`P_a8x6)41CtfN-|Pz zyuy_b!VP^%%0x;NL*9Q^d6y-)mUO82b74Y4pPJ&fuEoRJ1h-uWO4qG#n^3kU;PS4u z=oz`XgB7RRVkN8RR>Um! z1I^@mu)5C7?n+Yb3l7@Ba0vQ<-7Cw?>L2>N%WwN<2Ql*zUMp{Gl_*=#M> z$&s_Tc<$nn0J>8FYLQ(1Apm-!0`!5ywKrnzQ_36BYgT#dSvsTBVw+=KwCLcu@je;1 zkLJ`iBm0f;cG=)Z<51{?Qz^VP$(Jk#9rw%oa>|=R6F6&U%DQI{pSYEEK6|xn%2Czk zim|KA-}W*?vF9D^=VN?`-)q>z7bpghvf^QD5BHv-{jN2k)h$4a(mXFt z*~mw^_amNcmV{dqtG)H73%97H&I-I_YWW`zK<{Qg(Gk3&ZVI8RcB;I!F$oiha!!P5 zHIcf^Qu1)3#}3vG#GuGP>8Bj(H=%*055>>`l>D)hxMfD|*%K}(AcNwY;;Yg53-LM=JRJ9%-(S=9*9e{5C^2W|)#q z25ZfHVq04?!w;%n+Dk9i4BxEwcgJ~l0SL7nXRSrQpZq=m0gbg^lgh$0Qr>ycmfshN zJZ^lEYwQdlxa&*Svq@}FJfB&+S1nB}QUtJcT7$mFnn7jGE-%8ICpQmhN`EnvR=vi1 zUhyz>&p1((+*WW$#(Z`)c78ElnTU#4BxflyK# z(2{x8cOn=dB}mhxFuhFthzit7J6-KwVxEjHwPrJ3<(uUlt<b3+}RvPg^>= zM73)>ssliaOL)oMLPn?1{C%oxvcAql|Lfn4BlR zzgI$n3>c3A*pV|k{YarDv-3$r0!ADLPOs+1BhC{S<~cYyFTRZ($Llt#e^)r^8QaFif)g^0*C9L-%yQwV&?5^tE+^BH zIy5hnFY&EiZMF7hvf}y!Vq3E?jEEI3Qw>C_2lN)pwCB#z|!m9kt{r;l4D)Gfvt-v&~sCXQaf}s<4F>dy*txwg|-fLsvBTLsRPgp_z5Lq471j zp&Kf-JWa0la7VSocw1fzgzoIUkj8MgOa%ulV^5*Deseg0mDDwNy;x19-BV~cU>u$k zo)j@Ar;2x)z$XVE9-*v>D>_l3{1)<5cR$F{tm$L$aK{_xPe+&(paGLe}3E)yQd<8A{m5h0@9 zs?Q=0w^C2%K?`OXo#YzRz};7d={N4uc)CmDX>XEbIrsu1m^eSzm@7XH4fp?A_>P$U zlQYqTz=3a)*zPeSyGkXZj5O%jONJW4l}0iurn8UoeMfkA&Fvs)N~*-!c%?CFWop)k z#YaK|g}(5`X{41iFEb&`;NZfYjpy90pQ^cYvRdHuDdkV_j}586`MPE2)fHF%E?!poHA=`?h&y7vN;u&ax9 zo*+whs;kSL%B?F9>c>}JC?!aS$*s6anpf9taASe`a;JW>tQfyzwc94opk%>6dzB4h zS*}9fkj%(CAwBK`uca*0HD|qY>V8Uva){SzzJm9472_f2EtB{j0E0gHefDZuvBGyy zOzxdkRk{;n^aGBN;g8yft?PDf+T)Mf zhh6jfE5`Dkxh6^W1Zgd6$Rt-OrY39`g_+_#lCD*-<(3Loo2!yh4j$0IZ8689*gtcZ zoA17$_N2S@S=x$x3^2=u+A_?YoE~tx7y1hfV)RF``pfb|5Psg8D;ri{fYU%c#^k=t z|4aOl)hLT6qbv$I3W~?f9H5}*$1wEqf9?`-v(B*QHs&@ob`*TnUzW=`PKi!(%z2E= zuiR&casOQ;KtGXA+kGeK`DJp+buc}Uw9T&^zzK#M!R(62m9?R0j5=@GZ+>$hv!-`l zKurBza*b;9?_a9vL?F5PEGQMsL9b(`1VQuh@8j{#+GM&c=-H}$azynMk0;LQb%Oo z3}<%yh7;i5Q;rmx2KbBFp;sAGBOcFpC6dU+wRmInY*JG5IeFp8DYij2^W${FK2<(G zrhI}`_MI?>bKfm2oiPIf#!z-P0!D^pkV3Qw-MGCs>n~|VZp*%vwL%s`c4|&mVOsI` zN`BZ?G#p3&K-T)=?!K(5;&y=$9)uUBHo5~MAxnu9{;FcO225dXe8v&J2u5X|`9f*> z(t~^9-N~^z+O=(CPSybTrW5DE)G`;mFk%e)} z3F>^nNdB0ZKn{qgAX1W31r9Lz3w7QNl=Vet>ha_ZoRT@UCpr1kh-)a&>!#vbL>@z; zMk6&ufMPuMXZ0%PsC`I=&rmP-<+X0kYw7wmPrfX-G-Ft|$ePelZr3=*mo+Y<_yajj zH*$N4yf^#b^qFl%yi-0&F0A7RT4>`@}Hq% z7^&m8h`Ibn>RAVC8Rl^kHy3t4ac@uFfUwOu4M_=6Nm7^e{aKeHM;5})FTKNJ=UAQn z#wNdE5;EyCzQ=t@r(czn){@?$TAg(7243R#(op7B=KzM@)7F{~kX#Jd*gQoQ%-6bN zwl8eR-BnU6-RyR=J}5}X$&#KgDl~>qk5LpkKR^wL`58$(bp0eJB`HQppV6a+6P`RY z`Xpa)3x3FJ&Ch=llq1dtz=Kl$B_xzo z2uK*U@0Pz^NSMn-dMqGsz5fJ`3pzd96%y)zI^eCx#C-yljL{8-_bZZ(4MEdPHhyXB z5T2g6VMo#)F0Jj)USaxA_#nrq#X}W_Tj?hpl7oUtX2YuOU^|zmwZ0DEHP;Ny`ii!= zGKyb`z)Y(2pRkVL)zJ;u9P4nBS%ICtprqni4c}b?pZMqO2jcy4Aa;!faj=}phVv6Q zG$z$&)yIIhwkdd?{lOdC0(ik$4GBeqnulpi+gP-b%L)N~_$2nY1}Lyjtk?|?G|KYR zc>$)>MUQO$x(<-q%#VDnY&~5srZUXRb{QEE4uN<)KB8%C{QEOs-1g zH1{T-ea1dtov-#)@)fB7mOVvU=T{P86Mb=Q1V(KjNB^CDx45Xjpo}RET z(R{0#)dQ6DE6hY*R&UBH1&y7wM^&QMY5je$8_i6_1AqgNz4!saqKZ32+{e!n1IIg! z?U2qR?!J7J#xOc{q*duT3CaGioP!G}JjoLWr3iQEiTO%jR4ELb#0Jc9BoBoRwX*CO zM&>oX4j8w?DCempEPdvwi|Z{lb~vm~;mXd%Si1TN>QSFImk{8xyOO(@wwU`kSkA2&jS)iKmaC876$>o(`PZ z%N@hX=4+kg=m@J@BI^s~%r8cIXytmWU><#!QX&+_^_ya#w+@1(AKP!O`Gep~nP>Cl zz4*My<($>t3^{?Q@^X=hTF5*38KwHBRA0C_lj9R)>EHDI+6eBMoaNy*Gb=lqEtwmr zT=OJD7EPr}Q%;^I>ppFL61LN<-;|Wlc#+T0`Kws?glp9|pYCa=+4f5i8uCKmvzY9$ zSmp4P68EMW^A6g<$jKvbiJo>AgoYi&c+&wzU{S-Wn0Ad~x@lG3!$Fl?eVPU_@8lFA zRh=U2WHuss-BsMhA4Oz0R*L!g?iDyEAw)Z<#F)z@5Y8AgD|FMstgHuW^Bx+bDF>BR z-kmb~5}h5H?i|`v=GJa)0>*`TEV&}=Xi1vVxeU6Hebk}yYZVtt()m#NJ#D_eocA<+ z9!4T4eSfGj#O9I+%HPLH1T}52@Wfwtas63@YsZ^gCusX}mB6>#Hln9S-1)bvv{4u9 zkD>ZwFdtZzxF8D7S`l%NoY6MHf`@!UkI?*l;Re2ldtmelqPjUp9^4QSTJKEL1-AHvPE0b3q(;eiQ6aTA*Ri_%f zOuzB*9aaZ#$GnkiztKPTjg$2o3+*>TykQA`B7Zd9Zx*rNREG()ONE8euYq0 zK<2auX~QU4z~4Z)uQHv9c!@9}eh(7F+z}ZY%cf*fy#yHbQmwCmyNW!t73Nm4TqL21 zp;>TgZ)J=`q@42wtT=-9XybPppWd$Ge*2pwY(=0#k}TU$ zoH{XBldUT4UdhiT>W6gsA)t5voobZf+rrYuD?GXamHz;)u9ZE#Nq`I&tG1L~Btez-k*+1kT zkgJV8nu18}|4G*VpXZ!W6pHnDI@Lu2C=m%@J{)s_mH-xN3E&05Q@&;E&3z}xw$F|$ zezYviJ{y87laSZ3y!Os9_Th{fNZQMn3;^jnbmRzh$0WUpp>xBEV6Si|%!CQvum>M# zQI2gEmFg;!!zAU!qx{2=5_0=AD9>2>;;#1QypMW!WHT+2llLSUKlXMpvxk}nVk z_LD015dMo)u^y@7dnHxu5~*Tckw_I)B2{dRxHs}m8p~#{r&Z}WiTA`mmw{LDQ29bd zYDMVxi7=7v>x0!EkCb(u3J8x1itA=oyUH>ckr+hM)$>~GxoAzgl3yzQ$r^S6no!&# zky{|c7bXQ8ekC*+8L!U|xLob5_WpFCe|UnnEUZKq6%;p%UZF{A0|2}GfKByq9!O7; z^p-ZbV+w7Mhvd1+5(OO0a)3y!_4~n$zV9j%8*{Zc?YbLBT~zJu#+L-hqIa;ehbO6u z1ne3p6_#z!y2KAN>p!zp(j2fl78C57TOM)yrbM@b67z3670-miBJR_pPe{6CPE(I` zzfd#s(*pR7lrKvUHvJ$dYM(dtKIsman*n7qJ~mzSHIM%-qEfejH~{Ru6~hS{bZ~9 zZ+g?KFh|8zzh75B(yqRzRu6UKKnwO0P=97Mr2K7$y@f%^ zj{a=z7fOE?h0_-<&y?v7R*3C8P37y6AB+dZ783}c)n;D@6uhly_BeBW@n#C7Sdr2r zAz^tZXwtuwKm3bCxIDEByTRv1^{K1My`Kfbv+5dqPYmUL9vWLG*+)fBUN}+Itv!$% z8u)u!Rjv=nMZ_dVt~GbBPfED3Dj7F4B|=wv^nS*L9ay!zHU1OGbl>TN9WW84wAWO7 zE7caF_a8b|PScK11Cvo? zpZZI7`K-@;GKy0wWX$qw%uqg?AUk<;LqWQ(HTyD@n2}(3h#f=yE_)l4F|-2+YY&Z% z;gND@53OwS_Tsa-dCb883akA#>>doTkrv3yYQMzr@?)jezfsSwXhHvmo`?sz)N*cz zg>efP_r>p2CmP>NqKm1*x3hi5j8tyRE$SO%pT?*q*fo={l#`obsphb8a&Tjv*lfnP zM(((~6z(Mr^x5E>y+vdTTX60!!7^gj)v7GTJ-w!JFJ6tgs*wdL=ePb9TT^qBNbLP} zsy}H*Aas5}yu(8`)1=&Q9$cL+%<8ID5qI}n5S5$!%O0tZh%X}?;gh1HVWQ?yfcjR0 zco`c6POMJ9V%r$$OG?^4m1-R;UrZN!0S+p@OfEN?-d1uBt!#ArjFrJHO6~5jQl%jx zoj=0ERf*<`bxD{D(mI{?YTJZ&#Zo~_?Sls)Z#fVYbU@2pq; z@54L$@-KilxIM#Be;Hfdw2_ErsWv^F?h6kk|H`{l2bs$j%dUhKqmt8zU?q-p4GpBp zfkakkFxh=>VzSj)z0Y`8e%lu21vYhgY?f`P)M*q%-iKOl?5&xmn%RIcI~9J|?^~a7 zPXYzY;J{pCyD)y1_QWW39E_0V)Z+)GKyH_*Fh=HEim5RyTP&w`)`(`v*fsBK=21v_ zj|q8&Zpb6-D_?Z{?D8A3X=;GeRC))u^@UIfz_&jbjdj06>!laC#`rxOW z@Ej@Tgi4Q=i#E)k)eb!jA#BxkBHgZyxDTHsg?ZiSnr4+Ob?EIq?X)+=Zf~V349TQ1 zb(DGNjpaLyon$vwtO{c^oe*;2ilLKcd2nBumkYKE9SFlwelDR~(z46X5VkwOhabK+ zSBY~C_uOA^v0g{NmPo1a3%&D*u|&OIqzEWwSD_`Flq~@5Y%wbN>t3bZX7P*Oxl2?? z+$?UFn?>RhI}NNppHlkvd5ID~C1*n=<|lVyte_@l+2V!TFcQWv(mM%Z(E6%wBr*?= z{Y7jZW&*ziLQ5yw3RQ6p#c&Bl9?s_jd)Iu96TXqf5}dV=;-^wXX9WhaiKa@% z!63gW_;ci#dJVcH&S~={nd^DIi1$L?Q6Njm*U192yswoSS}34}d#NxA)QaWH_M}RW zF?}7#lj=AKZ=Lz~uU14#KPfKqESmO~a^FWBalP3Fg7+>^?Cc)`vtTTwB8(`cDN>~{ z23Z8TVS)Mi3vC$mtOcsx3YAthEHfo1IZt475UbHnnabI#WkzM=6@N}^Uoh#NW~&ZXsmrWIPhkRcyq*ClcQda zLdW~K9A-r(x#-X*`@J7=UwMu25%;V!rDuXkZrqM3HthE1?%-p1X2jifysD7!V`p7q z7!?q=*G=pNE8OS{4%$RXtgG%fDFlp^m3)Zh_SGL%OD~rSo2fCo>V{vJr@=w1?U$a? zFTH5JG)uqqQYPT=(&vrZ(jIn?;uo{l`TBHV2L{M#8u)8}uwZ*xo`-wRSB()3JLnO+ zn_0S>xmGtvNH^@&VfUV_)C6;yde5Clqk7QCO2bH~x1A(}M!bU}xb^0-efb`C_p>`Z zUtSCjI@{`|=MlP_UaA|!pBnRpAMBp)lAb#0p0*CNdwTt9h2F=%w}!C&zcPf=I!zKJ zen{I#Q&Q;Ncb!6Sl6q2Oj+BPO?g6wa{k$&ksS({l+srHN%KbQV)h5zsuG&(##6~Tx zzp=Ce;S+0UktR;G`!1vnbR0T;hbOAjr*)?S@7o+HV@MhbcHX z$!GimiW=})Tybo^E-!@LVW+bzq_eQQ+-~vjy2U=%GBSLj&+0${YVF2{inXmV6P*^{ z?gg=3!wYW~fGP8<7lf14gSw(&ieqB3-!FE;)g_xlf$U6PkjF~esme~rdYPTg_dM%& zB~VpmXD5(GmpsqPhh<>fP=3N=euxw977ilZ(uHb?Bn*KGN@0mgZS??CX zU8C$LPyJO6{$KmW4hVqLvjW9qi=t*o}FdyAU=69AI_^&#J~i}6Gm=3@6BtX|I1%YpWv z$5jJeX+SUb4Og`#m4kFYN%oCDzp53{LKM*qzi~sRlOf)7C4RY%KLGbFz-vWnh>QMN zC6m){HQU%3xB~>jZ;IR|ZYv_FaR)?sbL z{lHlDINy3)ryoCSKc221hpfl1=*M^1k1x}YKeitKO+UWDetfQee8Q=^?11bgl`dlE)v``48cWE#ng74>h0mJH>VXLFmqo=EaMo1$ZVb9zKHg?Y%Rg?j z`NcI)JQuM#tH337W_SdLeVcQ_*=hR3u-1HLDJO^ImMjR8Uy;6!lvXHZ&L}xXygz6E4x^IR0C-J|rt|q{_QPn)}1?P(MMO z#G}!ikZ7)oL#laMDD>gp3s_}QYl+SWa3$9mnBS~In}ks;VQvwPT;@~>TVup7zAZ5; zep6&Nuuz%nmY7HX+m}lWJByhUodD+XJrn|B$97!i)mn!%Oa zV?0Oh`{ad)h5EMgoeh9q!=PQK#udBD1 zeSVy>0THyw>|a+6oJ0eP_`c>g6wT|Ex7Tg#>~?Ami`UCdAmnMV|B=sTwongyX8%0|F64xsp3k$K@~7|RgFqVj zCI@0fIIof8r?C6{+gRGH>9aTJ+a$MB!^57g(i|0-<9Mt%+8% ze83vqUEkWlL7{LGVIJX>A5g{VrDK8fWB4AiU4%w;yi$~*N#+1FBq<0%i)xddc%XVR!u#A zXc$Hi?zCKeubFl@Hq2=$9^+RWR^T9g_BN(0Po+UI7^Bcj_Ut_v?^HCu`wn>tv8_Su zf8ma>7O5KOgX^CAW_cD|nM#n4S*f0@YpS?;P$s9bkF2Q--Ezu>Qa6fi5010GFsH)^ zpw)j_O+*7uLDSQ?>;k`+Y-P--0{LLGtz5u1`AmJgn3EW`d7t%FEOg0O;}+qs%Nv=r z?&_i_4pa&bmDkcmYLM2%X%PBn;YEqHvrK5iaVf~w{sg@xKTP;OO*Ua^)J(3ls9L#h z$)D)ZK+K0TnMVj|>`FyQWp{vtK+$hV_0RBF>hO58Ns|wRHc?)3TdK5ny4--=R>$&mA6n~u~Uw$Ps;)$#M>YJL6d!#_lR_%$$4H9z%2j6bC`4$NV1Aw!Yg z@T*#h=E3*y*uv8HeJ=0VLXT@%#{m)dGq9!dJqNx1IpXY-4v=haRI49+#zfBl=@V;hpy@b zo2}|9K1d21HSO3D<)Jex2c4scyN1fNKl@tgOHyWpCN$)PCYTV}Spys*`;*kNi0pTQ z%c4Y9k`_l~IpQyWX!Lc_rTf!YxaahV(v!uB4+^{a#xFK~y>_vHB=og`Qk3dcGF4BvHP5prFcRj$n&*eW^?c!{?V6kD*X8M^4texhT}FAr_LFJwFB`=k5SE|z}l z=sp|y_J5F*5o{p|LKcndc z!cU8QXXz10Hlm=@j_L;KLuD+EI@(tZp#&W&JpHhJ@t>*J9|| zG_|XE3q+j_I6H6T^!%42wDHF!mY-pX_8qo;$;rxz`wG|G8vzIEHoXrZc*_BJUs1SX zFFom`<9vEc1)N|)y7$l<8n#CSHbG{>Q3{!Djg;S!t0i++ctl4@3uk;_wtrr@#W@KG z07S`z)tjWym%-_|4DM+oDEG9n#~fBT5Q$4fSHZ_y$ES-Wv|DObPO2E8)Q^oPi142- zCQ~8-yr}z#7DNJY8+=$^GN0fs2#wR7)Df@qHxi`Vkh&5|B{wdUCpw>xx-bqc)lm+z z%QJzQXg&SJxGyypX4hm7FpKP^+6+G;Em<(@a?+-p@I}~*-0vT$3Hz|;l29k7@RRD+ zf?tRi_+O-whM(tQY0TX6sSSUj2D?Oml=GpXm)|Yu^|L7SBG3nGQ7iA8uK;s&0reeS zWr6%04oef}gB`3G*RneKHS|V<{xJE_J<0D@Px@KYo>IY+dScusZ#i?DGI=m~N&!#m zY4{Pw9XrDsNAM7sx}{-2aia^tjK{qSyC}m6`4D{b8R1&MT zC>m<1<(>lYxfa0E0BRl|x@BoWT2|{I2IigWXUCA#JfD1*N@l}53KeR_RI9tRbj#9$ zw45PbO3ONf`?oWM43laB+`eVKRsMa5q`r}Rg@v8oKUVl8LKOWH^_w%t1*24LAH*Jl&alKFr zs`cc7YBM6&Nj!cIbgD8;nlhKJR+c)g>mQJO>*l^udJp1BWd3%c0uq89X-K94J7 z%1-{wY>3IPi$VQIve>~PyM zC@95Qk!(<8VhMz=&tw7~`%hnmtQ3+m>dr)q4g`OLom&%^)Vu9~M4us^1s~7jl30z8=9TdIWb!o54X3*_g$o()R@=mj{R20@5p;k-eR7V11bppFI3 zk4-Jq_shABwos4HX7mcduTT;TwHlxi7Cy#qpe@v$xzL#JSg1QATS(DSGqiNJF}e~Tc^;&o7HMZ5nq90X zBVl2KoJWlvd9+JTw0UVH{OfpmbO4!7I=Ecz&`3x!HrZkiS)O}{eaJj!DIu(Qo@m@e z?cn8O5eS)%m=^P5gqP;Uq7l;Knt#i7&9qm0C#j9vo5!%DB7h|uDvEANf=iJGr%Quj z_llD&mOUSg5R>Z7x{iaL6D41IxM#q_420d!uG7=?#ycP|I4GB2WuAJTMgh)!w$u_o z^cwSo_Y{hGC*=tIg-YdxuzRfCM_+|?_hnXl6LfozWJ`Nt_icO%Q=ZBv&E76wX|q=E zbg#ShZjdQ2srf#PW+U$UESY~TKp}K=nJ;SS!@bkQ1!VSWkqTnNmLl#{;f)b@qW;)- zKC;V!^G}Gc>K-LtEJ~$4BW0-U6ykVNwm=z3HtD!Fb-tHZsN|F#^lY>dRasoU`|ZMi zk3ham<9FpdD2v;t6zOV#Q11EWm+TyZYGB0~o~4l_>1c2U!fByFh~1tk9OPY0l*0$A znLv1Qvf=`ge1JFL|J*F=oE4QquW-CbCCP{6{tEHBf@S8LYsMp7g^Ek6yrru7fH9qO z8YKv`i400$rF*zdAXEna0EjRjvHsL@VEx^5rxyBUy~GOraiYGR&-qO`*@t3SSl?QeZd*& z2z8rTz+}tgVi|gqf47TmFG#kDIm>tyFbMNdxdH=5d*wXAkI-+*_ktQ$R)#E42w|mb z@#rN`NyKz*RH}MY=Ms7J`aX=EYKz@$B@^4BceKsc7Q2J(HH{9CrJU1Y82XWlp<5Zc znQuqWJ&+z3JXiF%pBHQYrPKV{f5}zljR5=T%{W!{DG8CB6%gu)F z%B^ZSbv{ycmg81ctLl9{PrRvk;l|sQTNT9ZSPgQQ9|Bn02MSnMSzw9YDsEM^Ro>;a zJ9>9)b3oSOC?8SHxo8eK^_QScab*2Zcnmi1T*9X*|x?cn>X2IcUPX8SIO6~ z`v5Nnko7CjCqqN8{HlxL4fQGti)~`B+e;S*vDr(Sr@CaRQ<^$ zXt+!HA=^Hw?Lw!DOKP%qNzF5N>`@#42dk~2Y+kB{vU`9tl&>jTLwT2?nd@x1XLM#) ze@R{lyXPHi!#lcvTe*_#9fk8Ojq^Dbcu7gVc-EdUVM>|8KJq0}q=0y=0TP~P>G;j? zgD=hphGzJ|7MY0V`N0Yv9grV<0p!i|g9uS!^Oas`dAe~gl_WZYA3U|||0jMhgiO1y3S@oaDit0@ zLrMO~D%awg-bs~v+mw89fot&^k}q~k^pqd&kF2b0NLFLnRK*UT> zRYH4jpA{Z{AmFDammC^w=J&z?a5lmcC8J$B87tdcHVSZnly{iJtDH z4S^AnUlIo@60`BG4n}U(nm-qEFsHf==$y?o=O*m zF1!4Ca^td}g{~)%&XaBZhWI+eCsd6yOiEvtpD)yw(y6L6gkjzNATLMUo-+{ns!My9 z@J$UQJgz$@AWAR8$^CM9EcpSoJK!f`x(p=`w0^N2od*8u3q9Oh>AVuWIE$C)>uju4 zzEBb&p_4*46ne^E5^Q)viv`I!VebX(1&wdWW(*VHMHB9u0xg) z(4DO!&8|@K0(QLfUh`3;YXc4}ULXNJZ>FGCc)l#hdD3F!&d5p0>638S|Dsr8_i0t>)A zA6nfNR7*k@!%SHWBh_LU$zmAHVwkBG!$kIVSqyv&yHEL5RHj;U1qb97{l|1?chqcu z>&Yi{DE;mFcT9h;{L(qW=?8Jv9@(~RIiZKYlh&QfUm!Wy#p<&y;hXzE5`5 zaLQ$PU;B&=eq)W5gA5%Y({hroHD60yt?sMLkVPVv$#kLG40GlUP;`ZGOIa}dlx+?m z`xc~VRmnC}^Tm-@JsPB-DAfx^FQ_}jAQ>v{sMk*Pk+rh!?N};phwtpYfKPMXhay3d zxtlK$cU2$W?o{KJ^?l!h!d6-bF>x+(222 z(DBuHk-VTf+c_Lo)}jz!f0_sYLupwp%ye@^8*nIj6L8y&%Nuj2nhX*1@4QVLVQK_X zvscTk#oeE%@-GxJk-zk}CQ?ODZu0hfKSy%UTLuoFB%;svyeT7)RLKQ7<)gSY59_GR zlvu4Zjgaiqmf;$97F-~8we9*;zLxM+%-2d23pE=`R@o54^$;8eA0#He*j5YvI%qC)z(lap_UL^)%V>zK1eRXZDq8dUBx%R#uGFVY8S8 zvaD+Uh-ZBfmmb^kRAg2qpQajaN^w71*50G{Olt#$Td-@Y?bF&i!+*gn= zvU&sj!Z&O8R9j~)i5u0{Sw+EG(gEYP7!5u^e#6o;#QYV!O{e)kTWj4Fme!3Nab2S2 z%rdJYkoD!%8Ghqa?a5Lom8dKb@W-c$7_C^{o)Dsobx;{tA=e<2&X^gm zkM(lFi^B49S;#w$Z_1w2-n>E@vagD#_t1nIIb*46OWw&5B=W~;c%zwLuF}(-OwHUH zbmKb5!k)xwY}mtY=|$NaTOsQWBA_5X3}P#TxmN5F=DODGPAgS|>5jx_mc?CaU~#{n z8rp#Ymw9r??R(3%xYt`aGPPx*-m*-X%~>YGqw6sf>{Mogddvi-Ox*2AH1h#@r(y+` z(W3qkIKlc;gv7F+(Mrm6Y)oPuu&))Xi*2sr5SqJPHTV6~N)^~6Y-9AT+ICa|4zL|% z$6mpzLavJLLN_p%g`1ubtNl)iTSN*vIfEa~w8?s>+97_>L{=w;`LPX(t4Mm@^09Ru zBTd+1HxZb^xpn4wM{@ZOb(mZ;cmW24x7ECjOXkW>Ny_N!v)jM?IDX?_GWt1cLf_-h zJD22+t|zN8T$1jWWb0FUlBkqqXWj6_#Ndpo#-0@iCysVljWMRuSw-qRn#@*>j-2cME z)6AVO%H9LP24|UyFwly;4eHSZ*=ob?El*fg-=V5diWxh#PT1lQ>+TzBka1-r_A;;&|2ZCs@v%1_FgSHY=CjdCHht}hgav=Ic`y`8kyqY^MOClzMfQi-etWjNil z>VF6dZ^*6iC#??{t8)8P`NQ3gl~cq`>H$mxt}Ztvi4Ds-UM6hjxAX0j!d5d2f_Bq{ zVVD=c)=F-%;6$N;!=KRHVkjn}{kg?oloWkPmoHwdnp^ca0Ww*n144v#KT1fwc^rqy zji<;juG8P2dE~AVk#pM=HSm0nJWrJ8?I4h zxdl^TMVhRzaK{T^0wUy?V;7LpL~5XkL0QIHJYLNjxm9dD`=OF>JN7f%@~UqxEc0JI-rVvp;aa@3(R|=pUBpLa z2Z%3MU)P&ybS@%Ern3L4z4c0zS(LZvrEiQ28diGrrqcI|hT00ekTqF=9sM0_A0Df| zzrILhkQnv7xc#f-v8gqODX@5(?LJ@2AaGfCo&dIEp}XLe&Ru{KdSY6B)|v<$B)@;Qw4=Bsa-Q04sq z(i3s0)|~sZzA{&DAJzdnPn_+e`Qz@zEMW8FN1&SU7#}ynN>j(kAuPt0SKFI~Pur4E zoxq^{CM+0)t8W8E!qw}Hl&us==g$qb4V1{)_i2^)a|b$;TM_0vo7*8nCq`HEJfNeq zyT~<8dn58A?*H~|tL#A|^37V(%f}!oH3mt(iffA}UtM(lEjP1O)T#SeEnHpRI%w{o zar32zH8i+xSkPPE*#?IV<&b6NJB}~6309DP) z22--=K53NQ6vRwr<|x2Bxjsv@2-e(D2Uv5BE>@c*-I(E*D)FWm_-JtNCoab!kT zN(Tm62lxEfSqFDfWF5#21oqNw1mU}l=c|USM%8vu-5768>5c@jw*?+{++;!V5nrri< zFwzm-mBB6R-6>o(jfFZi1nxfs%@&~_oA8iS7=3CxC6n7kCxmKtdqL7BeB~YZw48*y z<}PJQPtF+L%qU2q+XxD6`FPeE>7Z*g2N$%YtqPy5Eg zXy?bB9+X3qp1e6jBy9t2ZvLXfDh~1A-G|O0)|ywst6H%fQ*m=O7u~-C3RrC)Onfg=oZcxfdNhth;DsHt zEH{8Hy)4&Kl4V)t-DoYwwdUGyTLsWG$k6NsKtFOf(!IU=^VNpyD43uH*GrGY!PS&= zT>w1R4t|~jGKO=lHP37vWS?PIG0X0=A~^`FS7WSOJY=0>FeW_pjjax3uTm7* zVsXj~l*&c4_{_mxczdg`H&9^w;$9oZzA-R<5}nn;hvTr<6vpGCFdpl`*nNK(w?X}_ zAi4Xn+L?nK7&BsEJSPg{x_`#OsO;*Nj8;)xC}CP6{k-oW?8?>wL!1}%|92R_I-nC_ zK(kB zTG_&ybaR8<%{5KC=@v61Pm2hoyE(VTZYDL;O|sq1FaKyV8WF|prG0+1oBvQx44X5* zj$?oEtmpIZ+FGoqo>EiRleaCFF#muYaE4ptfXDBNC5LfeSmdyek+g~ox-iKHpPw^i z18*`vYag`8U?qh(GUyS5xD8u4cCNK{uJjPsk z7Tl9ml**AvnS{5+V5h0h{MqNuzViM1J{Gp{vYXIZym)7XpY)l3Cu;e_{J z8ACHkB8zDb_27MR*lP--KMLbT4vg8&z?jxL7)J|?*M=<^3u0g#7oFjsIOMbN_*S}1 zuNdxMo(8eAp@}s@F69%8NH0DS7@qp9Gslz(t|gtGqckz(OCyy0af;=>!>h8p^1fI~ zkpI4F6<#05wqP#0(}FoxUU=Sg@S5Em%)d;H!mRRNMqy61U|!s*vjQ}&D!YpV=xZ$G zRuI4*R6?_@4QQ_(mH9Fl!0n}DycXQzE&^kED6_Q|% zGc1J0im#V{;~;d$-yAq)%A1O>dp>a%)6W#+6z{d>b|f8F6G^9S%aYFNh)M_Ad+;@arv#Aan(jU3J=UhMnL^B_aQ}dqwQ~YY&RX9U zR6BStTiK(V_AFWct>DeLy$ zPvdr-rn2~Nn;cTuM^WnwKT&F;FN|$y6;V6^aONxJu|#o8y+su5A<|Y6!*NXY!Kdj0 zk@1?yJD=Qb5ySfwVu>Lq27yPw<*aFXo@xj0WfPK0(_V`0UT$pCi!Y{^MIvkHEyden zFH@T7#bx($Sd(4?F})0p_Oh8nX(5JrAIA|xQ@)VE)L3fmZy)W)7cT$2RV473Xh1K` zjU|B_H(Dgn79wpG2^`A=AAEAo6Zx(Q3Dk2cuQZ=p3b7=R7lXF0us>^Z7EQcCbAdj&v%Ltpw6F_Y+#)~tJ4y(CM-X#y(S2Z2yas^7ZdF!XAASeTUxQzhUwIN zxKvEE_lqv5OtfpwTQ9_1t|3cwmClWaEdGe1@Rljp?|($G)?D&QEI@xiF}uI5C}yb| zCb3jnFm3f9EU|EweZ+KGhPX@eTh3!EDxa?xs8xIIm(jBd5)ldRx8gjTtCg1XpU_;G0heW!80s) zX2`xY`%hMSZJxDo!gafd8GGiiY8`X%VuIt9mH1*sO06|mk4K2+o(!G&YT#dc6ANFD z=-@Y!dk;7I?rG7KIvyF!HV@l&>qv<8>;Rf#1G>-QN(3*xpIlZ)}j5rYIzMAFtvz0m&By>0Z`|ovE*(o5v}e%t<{P7eOBZ!`%v-L@+Ls>LKI)* z2!1xzPAdF7MJK7SgRQ+RvQ~liJ`2hmra_a%t4{{D{O*9Zd0rFHs1yZ_MU|~oU(y^$ z5p_drp%Hn)Tzb1gl(wh|qH>~$y0|GcO%V0{j~Jh1SualcFU9>4RkyK~h6Ry&G(7c1&*bF?XkXY24a0*x1cJ^(rQPz=ae&ar6OoO4g5dyYt;E_i^;<`$~ zHc|Vox!XW$bQR89k0ZcI&_wH3-~dEjNi(urK>_oOxaNKqm|i#)g1_(q6s z+jTS(MXy4wxN}EQ+xI<-6IajuU(mY=)HFr!U4X9q#|{<0A0U1-#cyG$h2QHaSooEL zG{LauWiP>nEM7L4I{V>xc8&z&Nmw2mVy)Q=))$>=In1OX6&?_CpgB}Q;_gc1z5rxC z7oFTj!V}bV;g2V;s!hFUYNR)0=cpJCbV#nY%=o<7m5gBox_7qK8d4?qGu!*=s({`|iHIpXre zY-=MS2LI)PWL%xJ#WB^<{p!WyL;Em2?@sLtQ?Gqt)PZ}w$T+vYuegfkbZc20dD4QU zkcUCZTz{+h0F3nIhRe1~FErQTLuZN$=Gf*41&5`BDmX-t`Nz9j?Wi|W?x%<|Dx7aV zrE>3ARo<^bFFwMwxM>3b;_)o>2IlcFZ_MTz&z9i*%N>~=@eyh{{o3Qu>otbuYkziB3*y9v;VFMnn%U(JS;Fy$L@$d|~h*>og6Yg1C2 zcDM0%Ygq45h#A(XXQ-;X>l*EDA(cFlYHt=ep7Xpqn_p`VUd!cy!CBo2{7;d6FgPn2 zw+rRls}w0k;z-ZVQZrJz6FRFc)`wFPi!}t^j$*m@^D6IVXX5v)Z`BH1&w@4s(}>|x zlyM1rh(j5dTa+>1qKEE>Ko5zsX*Z#VM{ctacQ1t)#6{`h6WE8v(hI2rJve3s#(^smQsirRt!BPMZ0^DO8e16zcq>; z(xHbjvaJVaWl$7Dj71tAidx53q!G^pimtx-x(PQI?Z*SYUDqm7SOsr2J;gRD41otb zq##m@ViIb9x9B1L5a{81cDAPT6#lD)xKau+h>Oz0TDX`+4+YeL9-O`oKo6m2`Z>|= zr$>B0G4yavw4>cK<2yP4J*3l7^YpNo29$;9MG7&)ilK)eWfRxNyK*YU(Stb5!<*Bq zZ8Mviajm)QeOLCo1s*JC6q+IVIT5SEcb4$@_yqGU|~(G2=F2~pIluS zYw4X+Y0+O#HGQq6zcZN6ek6)|&%EyhxhJHkcz%mCmxbunlxuy&IjCCR>nT{v+hg3T zE{c%45%-JVIdbE3)QOP$`8_k8PEq{sl(n6+DsF8zm1Tch?qGW#MJ>zzM5&1^+X)sS zrqi9u!Sj%X?JvbFcl9l?DDFk$0=xOvbRpQ*qIezXQf9eXbu#4Bj@K9a{KjHe`^8|R zRNWx744H>CST66*Q1J&XPQqd&DBJf)8S8*k&Pz4!#T%+%nFanYpu6?pcT(Vgn-jVT zr69K^XW;d4ss=!{?_XhTlKe|zGKYtI-^52kZqnB|#!VmS`*~G-WX^`dq2c}uJVv#* zEK<}hXeJhQAdgdVdtb0Bl^r8kmE7WxS0R%$rMq#(7TsM+!QNJ4QZ+n=3}NxP{?t%= z%5O3b*PLsydH`jmQT%}?@{WuzCyTMo>8pO9RVOr=fUwXaTzwQ=?w|f`;oESgft-4% zt+VQc^T^zvnO+siA^vqvs>OivSO|&%Wj4!zR-(_w2soH79R_5i{7QdX_T5EEWM3=7 zL8)|y!P;7}3_gYBnU~)fy9~P9<9ZDQww{jO0ZZ6Kaze$Gf{Md>>1FT{RNo?o*RaPn zCH4tZ>HFQ@katx%glbSnIz6=RM4oEeo!{;*JHES7zdQT!+-QHt{Gt8^HPhdw zzgWYoqYyK^QNKIe@e$Gfo~P2GkMBL%-{8Xb{EL8dz1?3y)BeaatCh`X-f{4mMJ2X> z=`ts)fE9i^t1rhWt_&EaEb?R6lv|wDixe1c*P9ldJrl*OCsJiob!HD);9L`Uid=F| z+qe8%4h5Ii3s-cNb`qW+)n&DHT8pnn%AP!|_{yvJ2TD;d0kxdZfl;(#IZKD8F)4OA z`zx#wd?nK$n!GVQ&1YPyJYV7t~Y-MA*^Tbz&B)YQ~Nmg zabeSL;1}X^h8o@Q(OYXi1Q!KK-Yivh^5^o~rEf8M(B2&b@>?=pydz%Vs`p=pCci9PL`p3K(i5T9>h(cHv z2%GbvwIvSXiPU&ned=i4f#+&_uH@n%LZcwon5*K)sLz`R1oICu=W01mh?j*(>2=^_wSHb}`?m`lw zw$=KzFPx>Yi05oYIa$vLjwhGO90nFgBEeNBQ`$)L)L(%9zPMl?ibG) z9k01hMm+RaMC|G;HRj0;@{8{cz33OIPwgw7bM`^Qvh3rVgRTGV_WD=nH&*;+V5PnO zl?_SoZfo_V(vLs8sWq2X#O^bPtWF*-p4x|B9T&ejl2u`^|4H`xZ^m+2IC;X9qN|H0 z#GhW&n*CY_$~-Y1%qvi*=9!FE&eS6A&JCIp)V&KLLZ&!qv?pBh_+0BckLl`b5t|kyupjAn-?hP(Occ1v*>PqV1ZlR%sZ5B zUX?wu$@~qsyYV*d#yOrhqTQrZNvOK!W#PY^r^BLJL}Hfe)}8!oO1;m zowL%ipSR%uM34}cjEck3RBjNg_?99h_s*}f6``c&6d~e?K!?}Z>WptL`R`)$Nqdad zfpGuqTw`ghTMhF6eo4q#^_$srn=Y4`*VqK3=r7FxVL=l@P=w?w9vy($U;qrI^StnhWhBU)=&qI7cy6DljRqYdi6 z)D*UAMgE(qYypr>$R15sWHErK#d4zqkrqrW<}+cV!+eHPqlF%((L>Xrc6Az-p&s|N zH7ozVs@1cy0fe>y$aid>O^15NmDW&aQ;1tl4)dvABun?)e`&rj=hYVZ!pmy!c29rO znk<(yhY47C>ySq<&DLRg6b|5;v(u7E>Yvd)WUHREk?Dhz|A4-^Up`fx4C_uC1|tE&R@we7Xv`NiDL3Cw-nuc%eA7r#-+HL*1C@G6>t5u7q5V+ zbNYx21pRm1ZtL&LE@c_fZM#&l*o^Do+E-I5m&7I?3fHcaH-A{zs?oayh>HNi=xWJ1 zwGOM{mGhXQsL4Mnuq!nsMT7XMIN6wzCr{iR~=Mv7ObLxvc~8 z&)~s)JTG=%8MnY%6#Fidb=4}XwhPJ2YwVU$O+8WDvptfPZDer}oka$%sM7Wq2}bgrsYPOnO2gWB>^1rVx?| zLfTV`Ari}($w5fpvs1MZ7_X8H$`A@``D2Hgd&9$8fe{a~fjND6EJn_L)WXPyF|EeP zR%92Ak<6)m)r~r~{Grh^AO<~m!16VEGBtYqk1O=#gC4n_E;us}^!yS}FY#;WU?RuD}``Zfm# zVlk8Wu!Wh2N4FX?uOM1!%oI#LIi6l7#o$Nu6HPA#8b3!prtsqfKW!9#vcb=uczTK7 zmx?A#FDk~a+H_yq%)*S~;}4k5m#r5;K66+sO1^u@LP=;;JW5D(XdSCsXR2poO6W|^ zxwy1L>&?fJUV<~T6Q-UV<8KbL^??iyQ!$>iKQK&jE6JLfJ^3s7q2r?=VQuHX|DGTAAJ|pFl4=t&ttN`YrQXzh?j?(@=+TH~|s_I(&PcjJ% z2%JHQMn#!w)L?u>gBlvEGsz5`ff)(%Fw}r)wG=B=3NsJ|H89~ZJx;|})z((5w&mV> zmD_r0Kr49w2@iRyV5@@lb>e76u@ZbRzwg@T%mYlU_xAtKCo^--eyqLr+H0@9_S$Rj zoy!DHNiZMB5VJq0!WxWahZR^F1p&@fV1G^tyjaB}`>oDn_s;o$p9yug#FI`p1Bnk7b$VDy$E|PHR-Ys@4pQw{@fxUY77kYPREDs^%EPQhQGo!DJ44#luQ}6QcdO zU?eYsTp7q+oI&o~|0{AA3vvr|*&jT~nQA!eNO^8uvG0*&_eWLZ<$2s6DF+Len0I}& zPDnxPu9530)oqblbt`Dq*zL$6)IqsmF%Uf>hl=l3w?zhvCz=-y=T1h_ZS>_&WOYsD zn5;{~kCp+^()u46$05^_b@usk=eQW$7Jin4k~!PH=;GRLy%Zx{OE)+F4V(89SubiH zZQsq6YG4?Zsl465{FdDCz3}&-+IbnOeM0}pYSPsG3fa8Yo6o?`&C=PcDO7o$M+*Ih zpKWH7aQfx`M#kZ;gHR^p9Q^jrMG(M?-D8Y3F5s z3cvl({{N2O$4dEq%L_5YUG^UOB_(*79&H!G7JACfF~DmX35EGT~nq^t=qM+&_4q%@L=k8AS|%!iv7i{XV3TTU#_+ zIbm%xzx_=B|G)x#K??AOEYgS-LHb}NeQ?nNWkc9z-v4tMcej~esNc8@jk5PJev)NI zXpymV;d&WDk8)Q@-FGlk?yCzIbJ7_neS0T*Cv$rR*O$p@1@`Tq?+fi4uj2L4#M=1}slS1~bW}-h>x0;##NFgq{ zdh~p_p0XCGf`E9*hRkN;Z!2`);dU2iy(JxZ> zbBRerX%2lw{<8vt-g5c9G89Z;U&D5@%zAdpbFn-d*|$NRp&$!9m(Yrm3;w*-R!tE7 z&@E$b`R+Y1h?rZxl)7-*`~TXFVF(OikCAQ}TFO#NM1`f?`0iCogqv~tJ3PubUCfAc zwiL$rn3 z8tys+9YO7nJSx=C!B+B&4t6$Jo|D1y)d!ElGBqw{W7*rdxCT+N)hq?kwKvEB3~tH7 zXVzIg8$4S_OV4J1>3!0aT&yJ>Wabd*Aaz_`9bI3;%}|Oz< zjW=iou8*KTa(N5q^&6iXRW9}_lqmmsqa(z~r>-~%8Ts6CAid=zG@WFJmkpAY-Lqd4 zW@Vh0YZ6Mk^wux)D^0B_2F3x#X7i>i8P{VsyNoZJ)uiFjyW$wyfyX76m}(yG&3VB* zi8Mj3TA);olOx0zpwkSy9o(xJG(Hc-?kHOPLAV%>7JnBo6~MZYpT|9W$LaB_v36d| zSp8vc{V6=IgFE1o5l zY|xEoiW{XVqTG*nop+i#$2fDBg!D_*f8@TL6rIuc4}4AoEqvdF{!XX*{-%_^pM$gs z#zHFs#(~(RMmjHd<}iWvoMBA-YK{F)~joLxj1R?yBlbwc5i$#w^VI4e+s81oFU_# zAcD5uZyfQBTrCA@OYWBMVNHBfy2zL%`+3s2@Yid+?i=}MaqpNrL3W(iE*F8fRJ=P7 zmcGvXgK{uTosr+kB^#bVd;rd4F;(V%UI97#Pip4& zydW`qsczi9JmI813O(bh{PJB!>!HiywYe#VpCLEs#QYD*AqNet+9#7dj8L~D3LA|u zc8ZEV!@Tv^!ULp{#6TJ4Jao|5(fXdlv4fRq8N0Y>e$pzrk$1*&pK+m&-Zo;5TTF&O z>LxcQU>W2<(k*j0i%Z~OVtI~q-Xer+L?yLF9EFUx1+}&PH*hl`+pCg- zVW?Tw3<8JVqIb1Ruc{P`0Cax9c*&0#D`8^BhWAwe;6BoBGSFBT>G8k-J^Eg5Bq7Mc zn%qGO{LOc?31Hu`fd4+y0$j``*#dZ&0ABvJ@YIaz7Yd%%w1QHPh50iZW|8J~}dE;v$_6aI1Zj{KatKU5d-2$e07r$iaV-d17J zq|(O!(q8e`I~c=+69XNWQ1 z(FL#1$_f8S;dF!1^lRy8v8G4mCq;^Y=HY&cPP5!b4L*1=1n*gV&~tksk@n3(m?iE} zd|cz-T8Mk;YtVg6$Hh9s%VDo26n(+B`Lj$}p( zf4y~oK60!%Xe`+QmVV=MSPwyr9!!N~``9@l!As9o@|DUMdMEq8-Pox{ay> zvf*u*e4W6qw{Tx29ug<0%!vW&?$Ja+v$S`=zHB+7l3G&(kQuv{GdKwypky<3sP1BO;8^2&^F@DLdr*wGna=sD2cIc6giP|H-jW}_O(h>ia(5=VyQkzNDaj-$=_v^| z3|MryVo||hRwn(dp3;+~K?L7fD#x%)>V}?EFKL8)lA%OpI3u0mZi(n6&$8a~NJKAr zmiLxNB6`UqLsyTuNklJsR`ixfB6`WQvbQ`E(Ni8;1z~okBH3xOfdxBJnQ=|N?m+h) zT_%jA!ACn1`BvoQ3b_#VWR?B|dY35ZFVX3J*BA6PBEjW6f?3)k)Cag>4uf6V)>8BAYD%@YE6$pO~qg6hQ?6# z@Gs~@Io_u=3ENofrv^7XF5S;-&=}AeTD&Q8fj1r~GT%t%5z;9G@xY)ZmJm&@gd=2Z z%VdcS=tK>z&Zmr+zX@H`zbvhPbI*alNslT0+bNd~`kO@gUQmK4ina?Hk*JbMf}jy< ziRC6o=d<-SAR7{9a{S?52a{{`aofq3W>^XlW#|NI9w`U*Z_koF(o zj@j@~0&FdDEU6}aVxA|dEG-fCSt|9=21n(G*Sng+OW?2^@O&7$xJzGE2!ghe0jGfO&=}Na^u4tyee$G9&%a*5#r? zYM&7mxTusUcte=bcA7sL?8pfi1BzwZ5ez^imtNY+*v{RwLpBKgQs#O!Pvvf}?yPIj zwWS|3s>v1R1>h8ljVKPGm^$UlwYG@NGEaN&LZ(Pd_X;ShXUKl+%BLhiTl5!Y#1o5C zX`Sd4pXXaw93Fbp)_aut!Xz=ERVg)QCeWl8m8uzH1A}|P$XBpK(4=nWh`(AbGkNBS zlLm{@JiU)--XY^iFt*MbW@U6Qwbhr{XeSC5z#208u*?@*-^f=-s0AJPJ3OlLIbPwa z;_ztv_nhX*px`y~i(?M5mKmLDoYxP%ky%)YE&51c~Rac7BdWYnn?|0@`JHC zPBl-w(>eQIJ$CzE!{3M}BE5TsZqzW>tZ{`0G1uP9Tw9NNoG#VZ_X>dJ|J}+yryH2= zVG*eCRZe$?7jRp*noh`cQ)@aR7v8{3Xh8eIrwU&vjDIK?McZA3M%eKzlm;pEIGmKl z81eOMGPA_UQ!F4Tqw4{RNEZI;zx!}yIyZ%XKV95VWv@}?9XkITmS-D3j#>kn+c#Nw z1>l)_Z!!N1NYWO_-?ze-(7>-I)^R3|uedwSU#k!2!DoahH7GvhC8sbRie0yPC0w~& z|xybnVRHr>nm)Q6zfNsac@0EMcZ;Q zLr^ofdDc(cR702fjd!I%OZ=(bZ-1rsS?kMwgEI=AQ}@{ijEFN(8p+XHkL1gl4x)p= z?tWvB-`MUoK2)ykLl+Z@Xnv$vqNguMt8e{#e!wva8mnz|USoh`8;h>kp_46&aHp;A5a7{OUa`an$8 z0yeMQ1j|i* z&7WjC!Y8Ob-G$BGlS^poIWOzkk@cLP^<0qk+$Za~ulxnTN5A zc}Ae}Rrt_&HDr8|xJpM$3K%(hWwk4Of|6GlV=mSW?5PArJ_^K6_ih~Jq{(qhtK+~= z6qXs%=ChzkS-O+82aPwe)aq)g1iSRrNBUh_(YPf0DI?Ct+Zj`@QlSN?P(jFf2)S=sh&W=xt2mD?l7rKyuRn@cx0%T!XY)Lr31 zbsy(my|OJ#LwQK7yJY-8e$~m1!=H;}b}P@#q~8^coukLDffv86$L0e(L@9oFV1w>x z2^#sWK{kR%PSj(UwT=I^I zsV6H4{a}xYD+hd&6W6_ zO!vlA692O2ua=bY=Vu8lh61TwZ3tM22SWX3I_1xJ2C>6f|GURDYV>AC z`jsSWL74oK#%`K19lnd)N+Up`-on64v51mKtU)Sjt)rwai%qR(%F?Y`goL>lDk88p zV$?bt=bxMtIX`HyaV-9z3Xk6{KW3jj>!|RSwPmXKQ_W9{Ta%JF3=LEY6=Uur7$sP> z#IfL1VEk_RF*{ZX{kE)~VT1d9HaJP4V$9_V+=J5YY6)@#h1JMQvMsH(i^i@;+s-*k zYd?!bqP33$0IO~tOH-_afx4c!WsfQ_#)F=0&?Vml^kz^N(4U-1Rb!7p=>SiaHU2$N7<7LCm@db`wDCT40pj{95e*<5HpXKMr)!{Q;gc><;h z2+=1PFR0lrLPB(;WDSGNUP)etl+cjI&!>gXfa@J@g}bp>B5XaJQl6h^3XS_>0NNkR`ZBkO)VU@9NHqHN|65@ zrWc;1y1xubb>#qNDZ%zhZTSYYJXe+Q2qj2^zW7J0LD`4V0^*apv%&5E2H^hoxF8$? zoNmO0VPzuo)F+Gu3)c%ni*9w@v}>oPSz`7TkW)$O!j7MaAP?o3&-<{PD?2)j`&gCq ztHLw>XQ)K3FdfW_?D3h=cNSVhgL_hDU3#Ty^_~Nitqq^msSR&v_G!aCEBVqN;;UvE zUk^1%ztx7XQ2kdMzOvSOU!_~W%@zFWM!{YGX?H%q2cH6&U^Os$h%{Ij>|d1Qmey6T zXdV64fPltTaKY-nbPJYzXQ=O)>U-AnHwZJtBFj7IEd2S)KM2NtypqqV_*KuDg&gsp z9x(k9+)M|bPVZ{rsEHl6>-Jt5bQFNbE1_C^@{ysGGzVsVk22cfbDj#?@ zrI`oTrqpuZ$Qf)j5ltj$gjQzF=hS+(2N5}fxzZ>nLnCLj|4eKY#tzY+g78#0Y%3KxQ`9MFZk#zWyc0o*hL`GcIanrR&xaeo#>{4%GU6yOb#{& zD?P685VYO!08v5ZHS&?zv^I!ZP(ZrK2w5%H>DuUbu-$tf3qv?NyhU&Z#)Htx3|TXz zPPTh1r{VSV510^hOsXw>l?^U!(SrnXK5^mie}l+~`CY)}zJhyr!-k6h`r+Awa@MLl z>*Ar3WZ^6#Lh)ycMfwDy>q%a?c#_OnwwhDVmYbSh4p^sp2aFR#@te_R>?=9VYNylK;02aTu6Yn`o%D7Jrk*ju`GE8TN;y5io_{nASJiJk6?GkYm_j+HLorre9Y zr5kId8)Bz>vbS_+TIn9K(>3*$?(=h1eebu^)%BKc_tEJ_^p@@qR=Ou_cmsM%7q!wo zX{USZj9%z+t(9)Qo$k5b(v@53-nY};-&?xltaJlzv6yLQZ|U9~uIN&1r}Ooe?pZ6{ z<#xKEy`{U)O6RlFee$hd>U-1C>9+QkuG&f$wBbF`Te?$^PPd@9bO%dRed}y^6MIXy z#Y#8RPIq2!=^nSzEwIz&_m*zHm9EK7_o}-Wx=gUrJ!7YPrnhvZN2j~1w{#9G-IF%F z8+uFkw{sL-p0Lwh-dnmqS?Qj$(+we=CDEqY!mLSD6HA^&TbT1GnHKng#fEPWqZC`F zo%}#XrhRLoCDS$#pC!}Q93|80?J`%8s7IN0lHkTH9Tm%-9xIbjS6%HDQ8ylF0m)Y`M)=ow?xaSPCn=dsv<_NsSyO0dOU zSoF>!%f~f6)&RL~ce2Q{UmNb< zuXO53`_Y0L&0if}hsx5e2&ssus40XrCM^@fMQ@X9GhRkPH};9XXK8bIhA3_BXhlw6 zlTs}8^45&WSJ$3yMf2ik=TXX?-kj1tiP~XB*=k--QMSU@QH8)Q{y6PjRK_*7OXH}#?katUt0_zY!G*Zkew0-2-5AE4=D^NQq3>YDt6e$AC5 zkF`#%yS0)n@-nWBm%}{O-Z_E<2PAA>g;vt0QeIBvfmBKl zFCR(Dc|O2T8Ldl_Yk~)TTCGZbU5z}p6IVNWBAUdXzGwByaYI$FG+s^?&b(LVuqaoB zpWTE)b%_EGB;6vCbAabKj=6gn`O8&kjtSTRF6cNONtG2j_8F~38($zBG5JA=` z@@FL1crQ5@%|1&$d5VxoowAIea{{cdI6Sh76JX!r`X<%?I%T<7cl=bQU^4Ss{1;+$ zBjBWXwXQ4f;rSlq^CH75u5V0^<@NGKvNxo}5^l6czK88pi_~f#Gt+CFeBI>qX(gLs zrMee*8;5hU>-v0xc1qBTy!GXCDgk>X;BUg|w>WtmJd-^qTFF0IM)(-cbX}7#oUhd# zmK0a|wUQ1=-$KT>38{OVhxaAqJsu89$RXgeo=%nxYDO$ils9-{@kB}YIly-d%kSnv zF?<^xg1KYKCJALNqjsm5ye?>)*N@+W+W58vov+Qj{-eAcKo8WIFtPU0sg<-!hIUm* zjr|5JCgjC7q`^4o0eFYJ?hwqiDST>q+{PoHUW)2IKv6!;b=u>YeW>zoUZx3(3SV#< z>~BtGsOOwX~m78ij0;LORK-sI0YCtsUaIvi3IfI!p`KuTnA9Kf!93k=PvN!I z?U`w=%;nQYg{)baBpRS-lmIHLJG*vS#&GKx$SWWZ3frST;MejTIm| zelxwWjTJz=sRFn&GQH1l(<`U2@P`knOz#7%Finx^eO~z{8GaUTLZ-JGo+5gk+oP@C z9w^^J9X4yLeZ|A|^3K%rxmnMpSG{&-xw1iI`qiiD$3c0jxq`^WC z%C!VF&Z@RZH&MLM>qL>lpJM4}%CYMKq!j`dAsO0l*j*OD)(1Q^|UrlevGSQ5M< zUv)d2lB%vnf~JW88_X`3L?I8Z6i_=CYrXNpS>LsW&;f<%A#}Kr8mivCfuZW-Au2|V zVuR9Aof5St73EA89{g!4*J8}b=5s{#I82tyup2Mzo??}Ie+mR+I z6Ku)=;*(ga`o|0Ozoeq_S^rE&U3WcEzagqe%A9OLf4$bC%xzg9ex3&LqJX$A6;+Td zoS%*wD7gE2gZ}I(iZYEh^r2ZGD$*c+F3@vRQGJqyr=_DF|2|Rg9N!D>Q!VIc*wCLR z9ZEucG9doCEJc|bf&O?Z3a^ZH>8SB9fcvuEpeIjOxUav)qD*}jhy`g7#|w176@@5& zAz4_Pj$4GQgE>4MhgNraI&Qke4NS+e!t74Rt=$S*9}VuM(lbCSeh1zGh3DFsZ6v9x zHyz^dOH=h;E~NW|6=m#67Ivm%7NIGc_oOoQix3{7{C{h&p<7A5>S7m|t zQ5r;B&*8Tra%CFUK&J1pnI$+ z5qWhuq%y2?&P6)OTp#UyS|-U2#ld3l#hsNdnjONhi7gIttoD zk{)rr%EI*o8`q~TQ1QuBcgx}wkv7!>;(jX%@XSztpN`vE4F(NX94c9|@UC>!YKfYf ziXzuf(oxB2K&&FFN2J!As0et+M2mo@SRjNUFH1x43r;y!Onma7WZ}?sRGZZJ?LoZ& zuLF2|)L=A!2nrXhu;l;l8#wivF5reoTq zjJJvDv5Y!Z#tD>BA@#S*SZx7{Po^fjqN)13RQ)q$G^b;xNf`@!E2CS6ta#yHuC^*L z#fG405l+MSqrmu1s^B5X!YS#f0=neeCfRB$VlqN*2@!(kKrnGT(X^8TqPmYuRkuw8y4}DGHqeHJ8oG(>(X z4XRkxKON^u7T%kVyFoCx){dj<4e6Nvf`GR-1ezJ|;?qu{_P5!EpO`KHroJc*=J!&- zXZ@_!r}8JIW4ch6&HZ)^MSpo`s_u8Mr|6Bu^jP=r$S52y%(Kh=wFNC>_T@UZ0Npsl;8Bj$;J(rQ>#?vzdj&^@!G8G6u#A$J=Oq z&{x$tJ{hw0OM~buXzjA1n8Jk`lZ9{Ho}$PgDf@pik;{^W9qGuADv5l^iljoDlZAgs z$Bh)k77*7XVh3f|iWfEqEqYC~U?`H$N`tr=J=`3bDSLUcaBMm5935wZH)?7V&z+OI;W9h#;8rU9&0JY z6;@lcFM+E;ywLSMYZZG|Z)LtKqg=euZO=M%NoRQkgp5nY5daFJewgb>w_G_fEFPp> zcGZy@C+}qMSp1PwS9WJzg+HYzH0Q z3V!g85Lem<)f3A!@q+U}Qjg(P8!s4aJ!0D|__>vUak}7_U_b&ioB|FylgF~`6D)AX zFW*$`2pXF&&yDnhXcKr2|bY7ej1z!?S={U<=+z*;MUIbWN0AvN8Q+!3qo5us#*QY!G-c3QW+h3$C4I#=kFL_OBMz2y=?x4 zP&@5_nL?Y|*V-=A=u%X&$=VOWO9ju%0LLSCtft~d0nJN^kIw22(eULhW}R5$qw8za z@W6bSu*xaXTkCQneVQMk*mlEP8_P4i6Ju5R35VpSjZ+v^?v4T&TJe2Tp$Gj8GU7QAkkK+C9vFqxj#`U1Z2{~51 z)uXgjc6q7xCY9lxVHc{(kpd|TtSJs0dMI(qM6+C5Zx z2D?Ch7@zQ^etp~GU3b*5A<4mUku1(7b;rhF>BcPoLzyLCoz#;otbJJ%8Qgg5mt!Nx zH8vy*A_a{VeZt3aW)3oB)17+~{YJ&lJA;EkA_HOeiQdX1+M;nlgb?DmTR6W#DmQ6` z7f(LWIkeYrY&ezJO^5a+w}Yp|iDTbHR(7R1z0Z+3>DBySn9I}(+td|)!t*4vq^lvF zv77T|C5hBYE+A$BZFRV~CNU^Q=}F6}zb}<%e9G^4x7YYIl}A%~#(P`earzveCQdsl zYrj-*A1TRTOV?C|<#;=l1<-38N-s|{;tui)` zD9oL9=m47<3WuQagA5Lw?vcV_UkV^N)TMABKB+*BIR*#1>qLpPDK}X1)U>|obPyh! zx-xO5q)+D_kQLL9OORKtlh*maVG{g$OpaHW_~P|P>@pK94QHV;kYHkyf@mU5n0+)( z<#?a%Cfrh;bl&5rjvdh#!ahkojL>>xQfH9E zzeKJC4NKn0VPGPP;`xJpoOrhAAToiIMHVOcrBlh3*QKq&*zNApHsF-3*-v=PzlwQ5 zgq|l|N)BG}Xf8CkSR;|L_KZb9q;2 zgFSAdR}oysJ3Adb01fQmy@vPwyw~%4KpR|jKy&re2KVR9#hZ&%02@PYZyE384tRJc zx3>lbf}k41GlSCuXU3{)**rDT{Mm6bV6e{U)$V6s>-@R|ZUO9+fPl$K%gS4Vh9!e_ z!`jw_L;~@cEuvE+_L;% zW1q3R#eBl4hQh_;$*P(vS@^vrgNI8kVJjgJ8sJh`0 zWonCmD#KW`k)YV4v2>*s z3R~RW%%f3V6I=Qs53za0(fJL|$Q6t$-)0jJs_eW9Up!Q+$1cJ#`_f!z4k4cSq>uRF z-(_CAFE__9WyF04CADMp4T8B5Z4zLk7Z_0~Ken_{0u5nlW`HHpmea}V=!}i4*JIDN z5Go9{LVo4!o}UBAd=m#VJr)(JuWgt-;&|_x*bn_@#_ronfVX)$LB5zFHTK1#f_V`C z{MCIqNb7oW8%g_@Fx`sZnad(?>wEa$w|dKmEYeoDc^$15B;Spl1x-#Tvm!4J`rc%# z4b;m#r?snyd}Q*M=P$BLQAI@lQ#Yb5lqrmD&kTG)h4S9@+uCIpc9AMf*4h;r21HqfZ*?H=3~7dcT@D4)>FyqXk-ceO5S4D}NfL)Yb8LMVJSEnfTM=-xn$Whs$8%7HcT2;5tQC*KLNZu!6Rr)?M5rM>kha8TnQrl^h_bpdh@nR!I z^e+O4@obf3L-0v6td_{t z7XOe&&YfRR;PCki^jNhsHs2L}R)FP%Z;2|SMowfpLlL&Au};5n!CI({G-noJmbNfn z99Z1aFi_ob(=4+f&40jaT%k@^@|J#Sj1BvY4zmp+4p)W}pX1#a!{m`%t?9pk!`T{( zf6H%>W=l+8oQ(7vIe!7820_LgH`BN3LueU{v7DGfYgIduzD0EJ{2cGHd}Mr!oPhBz zg1g9PY@{%=R!aI)Bl(BVaSfm2_U2wnd2D0Or2@GeG~;+jF5!W-=8h0v>DmL*%6cUS z_m_xo_YASD)XJ36EsB8H9xNs{HYWbc!5@j2l)1aGQ^#2r+|Z^I!btUyw21cs(&-A*k1kb>yRjbL?*_9|!&X7F{J3 zFhexN?VA5}^X{zB`gAC>YC3@ec59rtP+FmHmT7lO}MeGdrSZ7I$Hnc?eJ;qbsc$M+S@8a^ZRjC+k!+Z#YCuXFi80 z`WAbLf-K@j%qk*;#EjC&FWSmFVFM~t;4=;-&J&G>)6cFHcQ(0Og(eR4G^K*^C*g@LBs^r^kO}>BCiJRI=(CwnIdsg1ur3q& zv5W+h)`40(gxoApTf1CnNc)Gy{0EKJRYa1_Q#8$(EKC+G+ zVXqOouJZ7lexsI+xX@?3n_x(LL(UMzSc}18g2!)QaUWa3@jPg@-pcjifl8)$OTXw^ zApN`)3y%MXOq;Z(nY{aqAK&6P-Ufx;{>p#)wW@ajhKutT!5x}aE?YaSa+NfOA^oMFcpXQ&98y;72Ui09^q!%oGXVBXIV<>dpAou} zdPs81)bFhHUm5PJ3Qtr+kSk>hcb-<_e_AUEt>cW4zC3T|cbtoWeLRfDzu5nwgp|n} zaQx$_d$_;|JsQI^*XnU{K8Dp7#nd3OMrJ?KCy(yLYCI6DE*n}!2xJ{P&XNWClr3gH zQj#E0;Wb_ri(PJVGINaFh_am2CywXjNtU$sBqx`NX40XGyGqSQ>Mf!Z=`#{vo9mwJ zTt>pm*ZMZc4DIncJ}^GFGxrnAOTF>AnBy{qMkdRfLbml?SGr8cmv*kx_H15{6T~3}v!aJ_9wpP32JS=!<!!!Nxyy3-&R^zrEb~@y z)|!sn@S z!DW0AdwwD(1S)rgj|)|HM&4DcZ|yA11S)q$UXh?a%?OH|_CRTierWHhEmlz$KUR+C z^dN1uH?LieZRbjl)w%7w=GtipwBmEEcq^$SvfC#WUyzA+2!MPmK{|haCcZ%89a-@X za8;$-c=B9iQPo;V)O=}_ZF&SMcSZ(76u83cgp`oeTLdkHN;@JP8LC309VB#oQ4mTD zkd_hBt56I5t(fpP<~vihVSI+(AvVeP5q#tro$;;^)a@??7Hst9<+i6{i^B8@FOXZ( zvAGi47AeqaivALTWBjg&VxR&se#Kqoz63Fc`0O zA?zwSu_Inv6dn>Zc86pM;$X-~aC%q3IGEskKd~&<6orge0>)oM#>c1;A>;3y<`k^# zV0RvE9;!skep@}{X-%(6zo#?R$b1R)_EruENQRFKR$dYA6RNztI0E@P!ru*5`g6h) zLzR8P<0QU+sB&buAXNG7NU@*?Elvni#}gujP_is&YzhkgoJ+RHJPke*4X8$~wxpKr z-1gNA)7r^ULb?ze`zt?-05dl{Fl3w@sN5ZaciZGpE8U%7%eW5dpg3Vt-Y$uiMv3Vq ziAU|2c8S>?SuQaKF=dIxfM+4|6bVkjrpN4xoEl=qhO@ME_g7KMD$9mQ>Qi5>&5!2{WHde<2S6h4v0~4vW#e;dUQiI4*IZ`ce{lZXm*Iki5!Ah^Zo5?MkoQ4uzx{e;IjAv2J139$MbFaRX|xqwHq87Z%UbbMJRUX@vr z)gSFlsr)1rc&Y;IoWw%I=E4?Q!>B4sz?fG{7ZEP1Dq>qmK=TPVQwQk@a5sm|d8s6r z!snFgEedHqxTRGf5=To@DN?#JC>0^TK(z>9>8@{=Z&N1=GM%lL)Yz+)eDW3V$B|%iw6$}(c0ucH=SE6oz+hZv2XW`vKy>x zzE(jgKY+As2c^!r$S8$Tn3H{7VP@MFejih?N1Zsf*WO=DEJjon7WtU^ioPR5cagf# zNmu6oH7&>?^UL4LxiA<}tvgIunc#>bPS_oWf!rZyKgJwuiX`ESk`Qz_1`ij3Sx|Bo zAjJ+q>FRLSFylX?Gb1yn#r6=KA&74D>#B8U7RUuZ0OH>v#;79iWU+0Lh=Zugljap? zioCoc$f9!W4wBsgeQTY1X%WX~I&l5anq-!kK1OkvY~Nlg^ES3GzQzw4;O99m4#dQL zXY4t8<(9b(W*@sYgYk%>9gz3YmERK4Pi7I8=yA$}t|+8itrII5+X$b?cH_&AJx8 zv;K4g{tP&~CZ1-|L|5knQq>s{#5#k>HeW1!zfme=tGWS$LmQtfZXpN_jPr>0qP4d{<#C;)=%d4eU>?0 zPNHA=-*|mjd$2wFIiue*RuM9Z{~t;T36*xpfsemG3FBQiDgK8Pm3tZH#J_Aic7TEA z7HpriLsvBd-hADDxm2XRvO5|t2pF+GGOWqbEL#Rr@K9s7`5UR95!~mNZhM?nZ}V3K zY9$=UDGq9ll!k*EId5W6oKuFAS_MvL)oj+pZj*95tKgu!dv%ta z8pXCLT=_C(XN!Fy3{D&m5{%n5F=+mitkD~9_2V+$pj)9c(MMagUftk7j z#w$W;A#NTgaW1RU197i2WMCx&-Hk zoE5#XM(~KxLTh>!C4n4dH{(Qf{ekz!J9K!XuQnX_18q3#tZ)vZK?IgtYx*6O!tzJ& zLwa5KElpkesMzZLGT7=G;h0Nqo!gIN2aM66JwXI4Ir_sG>v_}_+&i}qMI4-WGT-~=a^M*{7p7tO;RW+irzM*HD!70x=qLmQr+JIJp0=<= zR7yd)gs#_?{DMG*X;lW(?U8=;g+^k)QQ=!ehJO!V!Fu0Z#Q0wmgO5V`7s~oljkz(6 zZwkA43xftrf>JrF@u*}FXRs0ufe^{;Hb0=Bu*;d25T5i1>(&J0C`Irs?SB*eGDlBw zs?6%_VKXgZ()@-vk@=gbyaCyn{xQt8#sdY+e?DrB10Ip_IGT>7nJ1vr_QT??8_ah* z&EKgrs=C?eN|%}dfv*PZ?dH>;NEe%+o*!4wa>$+OJXPpAmSk{@==%yJwqIrgnZ{g% zTyARNG*@*pp82?2GO0riXR@rX#HSik(p6Cp$BY-U_~6ErNAC$34XzLZJ9?)JQ}#Sc zg-t%<;B^Z=yV#_-p$Y+xx!h*HaYTGeuSjQzyc96*EaJ6D@)w0Kl!Z?__gP=b{dhXJ zl{`XUoabUGT5Gz4{uD46t7Hx0C+bDxV8=|~qWym&EIQKeWXNX^u0MEsxkbz#5PntN z= zM8bl-v-?TzR<+Arz|7-ZvLl>+t6C*C->payWWdc8zVEv{zJvw8=3lF{p&%^}1S zm^-!U(c4@(5l)-$2#15Q>Jr=-1JMRoj@;kG0dL3@&gbPw0V6M9^aBYy|6IwB4BKqy zXObKq5s(uQXc~=lRJRVqO(%k|y22FhJ+^c34i!^f1ia^<6VGQ-G6xZl zA8}9p113cti{_!a27?KOO8)@=#ycuLqv)A%y8{GAmGKpz73*{%NvpQ> zXP~2wq*Ssh`i1ljxp!|q3f|$!1uFMQ&W*lNUWXA5RT!7#)~b_2MvnOy9fBT+qtm{` zGLfNr<>ZpcFj4^IB+^Qv1tgM7dl(}3bzP?>J$Z`Lg=jW$IcRyG8ZSlvpejm5n`xR1GAS6198I z6S z$|{B!=0vJH(fCTkbd_i&>!qGvp@e83br+>6A?z{b00&)2Fs!5q@sa2ZA1R&T$h^Mt za$qh4B7$u!$?JfsxlZOm26zEl=aH`xa=*%F1J8RU(<=(X=krcgDu}jZ5uc)GSyo=bPWFprF!a5Rx_(U)p|^yy7+j~oRNiXr0M_Cp%i_3?N4Xl)O&xL zjZUKa69k*!qCcVi{QuIQ=KcHqY3aY!pRDm&>92B9k~4EzZ1jDPtOCi5KWMzC<4w7o zM>WA^Uib#;pm`HpqSQ>2mElgj)6KO6SSgrRn&*9xdE0CLgE;1-K^FCmb`hJh-q^%q zTM1*0eI6&vDnXfXS+h=-A#~$4(~mbHk8(NhUkl}tTe4p;xATawat$e#Z-n&)ZMR(( zxkO$@IgvCM_==skogGoJGJf|}rlG>f2|SNh2}V0_>!UTDPU#_;1*sYCt;~YZVyT0$ zB>MR_bMm|3eSPOf-$jnx1ij}4)2BjqZ1kP$K&kqNZX8t0JIaOrC9{um57=fNc_&qS zvzonON73nC0y1>U&!XC1bE9k|%chf``95@7{2E%ZjITl>tSG9xtEuK5^9+`dmANUz z8YgNysv>oGNpvr_7+l(DIii$1kyKW~C7!5v|G|`&S&zrsPS(S$Cm;^9m@*-t>$Vpo zyM)9LmsgMTw)GJVqD%)baNf2i@@I*HxGLs9BP%WJgk%dLS?X<@IY$U+sK&-(@{+k* ztsAR%&iH=GZ0Eh}hYS;$u~D9mk$2gwS_X@vH>562V3j~O?o#WOIHj2FUE;xL?-nxP z)cftFOw)9}CsEH8H$oxBS$IKpo3jZ`z3nwes5hH)g(dz(V&*$H28|a~E2x%#QF!`c z)%ZK8vTPbLzBF}JG~=Au|8&DNA0!|Jy4&n`R6$!*TvkD2R6*ef#SualUsdO!b39qx z$Qz`h%&)3knY&QBPDWEs6Or+<0`4C!QlHh|w;7<%kQTd0)C?C#Hpt7ZGKTl(bS>12 z{9>M~oT7Ki_&#MnI}BT_AWK7d18IJi-#sX2&M5LS^z+rA)UC3QIXg`B0aw9ae$Wq9 zbjpWBPB}pCe~@W|c5jOe_n<-14D|WMjPn)kD(qsSjtaGFVB7Dm!LLL_k#5|EPWD~4 z^UN|a$?a7}fa5^h)5(|K3=vEud1m^?{Pk$j=hfONZ5 z;uCq=B4003XF0}e2h&BVL92Ximam=ErPZPu0b1>5^JL7QRIcF6VS{q!9Z%f{Uc?h2 zOe)12OeXDU^I{7ahZzEh0+@7eJ}B-K{HA=p3N}-)?MykyM}Bt`S}U|`qdfDEPgun~ zcRIz0n%X^gGPV|FX&(<`-D5IV=09@+=>p2IMHIJ{aY&2yqXzOcYIpfX_&bqW5#cYQl2+#HB zp}1JPYtdE@V3B1<(p$mUj2%pig0Y59^xIvuYcuV-lH?v~EPYwyosJxB@kTX0pGI}D zQOjZd0fPzP%UB^ro?V96Ri;n0FVnpB@0P(%TRmV{(>_0+TsozN7Yv0{-Xf7OO6`YyUL-&`=mp6Mx7Kdsvstw8&FbQz z@SQTiw@?DQYT)`W6a`;aE_cY4jlRnqx!#SwVUAq0P2v8ea>_#3snK|wIg|m(vNF9a zGX6VEj53p=BwD={iPhl+6B&^s5OY>pFxkhuOw*GcT<#^Oc1AZk^-^xX>UL;%oe0>A zg^uh`;2TFwVZeG34GevjsFuwgA`nw*iQM9{gLl%yS}EU@Y2u2JnP4IRbf|u{G$wwE z6N}ZQv#No`&_mDH>Y%ht7`3{;L%99CFk6%eduE8Zn|x}@=JQs)viYo^cRI5%b{o@Y z_Rs5w9MijU-+~L}p+p|yg|D1q*|^>2o(;;z-95#!al1_u6QL#GC@q(!s)NPsNvoP- zF*hSnFtib}l4LMi5AeA|$W(B(jnUjbDL)A?6SQdWc5D0;8>m}3>BupbuA@D5JeWJw z*trD@6J62#5BiUcU1Bhm-nB-(KUus&(Vnq~PQxY%bD;`XFJ&@9-jm5!A^Cptx&=o( z>{cHz7pYhDk8Qkmn-j8M_nS9lCpOK9dbLJ#aM4!p&B`y?C)x?r;*{}{6!1NQWW*Od zwbf=yFGwi`<~?@2HICeG*XJ&!?V4c)&$@mI{209Lh%KsC7A8cXG}^vUcn54(agQiS z#L-7m81FXkQ*o9qO&oFx%I!8EA(-pfNUBV`=c`nE2vLA7_TFw@YNeu^(2=&AeXUnu z@Vd<`Qkk}!D_#`>Z!;fKztUO^GT3iWMYfsOs|wLhnZWJlRd!%mcHl@mup$$<%`8@d z^l@|}Yh?%4_GCFbb>)%5*3XV+D0bE|$g7pnkG$eXPLEyGC_klD4RW<;knL(wg9zC7 zlKZCi6QxF~xg5t_S(=mzY&UnQDS&C&)E`?WHua`r1%_Il%2~+F&oHT{4^O!IZ_@nx z6AtCcKglVJSJPe-o%=-rC;H`@60k5Q2`n@PS2H|eP95u( zRa=tDT?)oz*8eBF!u@r;oui|i&cs0R(jsD;d3cqax#5?bd~QNNk>^^>^HV{QHdHPB zX1669ZFKTg?N}8QeMPI?C=$BQY%C-+vPyp+`m&O&>TQzAakU==jLA$)M-}O%?3v+; zR**jr-vu!`t@j`am%Ffv@2a-Tvs%Tg`I^7hDZa*S?WE*2JT4!CX zmwnZs5?HoAo;p83_P&W}ce8mPjc4=cUM4RL&LRU|Q+A#uR+n=!qj0GOXF~)82%A6t ztD?%;S@t_>vBf+~u^*4<&wI_$DpmMR3%;OQCZ@&;P<3C|HQbq5{!XpWr`7}Q`K@&= zoLe~}epLQ}9viO5Zlt+yq@ix4p>A~ZDdAJ*S$1OuzaD;derx#D@~P)DgU_sZsK^|$ zM3|9(xiM`N!8bSPv8NPSV^2vJ4j9)t1Es_4MfLF1V;0nZMG~n>{Hg}?{jo4lY!m>N zC;;*Ny*yfS;Eo0b2wSyU8y7BaeVC$UtzIpUTUlaHDe}giQnE1i)CvI~dupZiv&#Bu zmY?`!#jrYEVYymU@5LX`?DJUaP>`>*H;w&@$+f!l)IPF$HHw!Q*{ThJ&V(Ej(O~XcBUiij;bIL723Z9PeEQrmEu0z6)AK=_|6qfU z_4t$-x>2b&|EKlWUmscR3|9%_9N3Nk1ce;S@#5MhX*irMlHzP3n+GdIQN>|_57T<( zY9M|FbOC%X;sdV;a9C0uZq}Lk6kuT*S>M2S6YT;N4qGzn%cwv{b>T`idgdAI7ib6? zYFA^>Sh@l%?A5=OFH3(rAmZg9D`PW6mrY|I7|BK4O*bJO)mofXqr}4gR|@_tS0E{F z5g|}6v9R|G_LgkBHHCv;R+%yX_Sp~iP~pr<-GFPoMijDoWfUD z&Vple7O9;0mBea$DpOd|s?nB3HpK+nlOdAgQsY6zx-664jYwA__)$xM+-*fHwRl=& z$=&MF&Zw3~Qz0rT3#6p6pr&#WQYYs-ut7qJI&Qg=rk*gGrvAz8Sxs%pJHy+c8~Hm@ zJgCRLHK}JwAnjxEgS8%294RyVClty)+2a{8r^Dv z^8+Zt#Xw0}-(xpu!1ypw`K7K^b2KF}<`WAclQm$;Xs$IaAyi%3ZRF#%GUTuxJ3)po z#u6s(G6_WeYn?lQB|+MNmTpU2fPJR*wvx!%M5En`)6_932B;Jm#|(g5od<7B%kd4* zQETAyGVl$OfzNF^{<9^?`t{$eq`i!fZW$k6`42gY3Ae%{bNaGD?-aGj7G$-EeaPQo zEEY@DtX?fqDAETsOOe*if9ymqiGH9wMciwZTK(8nDc6yE?mxEqto9LmFw+QWNrtOf zBQ-2fik4E(wTNN}sS!&c6N%wCUh|C`3f~j0)i)R9YH%{?Wz0S7&`J)8{|lP{EdQ{8 zk>8SJ636i&0*r?xVg9N3Qsb0xwjrTCDR!dt>_=A6J9%yg8QUmKTCz=3k7M1z}9b82?A1o!nJz_)b@N@!@gN!^o?BBiW7gI(s?s0K~c3kf?HLgw&8zyXxRL1>HYkEv_ zMccb|qf}}!L+V2(WiQJe#5CSskrQdy=P#ILH!?o8+EQRz(mr8CViS950qgK0eC zZoK@$oCp_r_K}ffhF(cE@XMwXOVtE+;v|(t=?`FH&R5qhNTKSAD(atfELdY<34)8S zlkNt`j+Du7nRU@Q*tVu`2$kDGahdDZOWASTg1<-iFu95P*>brb@O-7)+UvWrwCj;u z0kZ@k?Wxul$B0DfoOhCvB7-6W2+t!VS0U4d3$z2R`s z$i;~vRN5I>`v+?{KQ~~s1r8zRKIYzXxNajmK(Evt2gJ*d-b<`bZ0lzt=B%h4`m>X) zKb*REYfa+X5sZJI@qL`Dw;aZ1b!&6G5TSC%yyNh9#L@cIfL8UYZr_Ejl+W#^aZU$n z%K>Q~oFGTc)mz`;`iBF-_#I_x)2;|G6Lk@+OX zjpZM#|a;L*O4GJf^e9%ZTa!1;>y*c@oiv_}i=!Ddf}Fq}|SdjwPM zv02XTSM7lpMW#K{s+qKhIPGWJqvss|qCG5Psk!k@`ErA$)gEKx1Lg+fBRWIzJBsYa zkTrK`-l)j7jq^Z{aN|f=0yCrzLh4g2GrN#FfY6cFL;KFA^TnbyTXa^F8|L4Or7eWc z8S6V6TFuS}GIUlGkkpm2N?SyMK72HXEE#ml8zqy6~6C@YI^1Cx>ohN$POy4NY+`LVPQyir*(r#r=aSVuNksdQMxD0=_K9~ zwknI?mNu*j5(*E>{uJ5ngYQ|)i&e?XX7$`)%(I`5$>#tc?72wA)-nrP+`|rn_i`gR z&I>!+q&LS?YayswNl}&tn~>}Z?z$n$xOM0K8A1xP^4A+ZvpH;O0z|)-p73pN^vvel zZ%9uwS7tJ47QB=DHNQ$sw?#*pXFx(eE(pY!E#wyByrUfHcABNbHvlY~PT~a9E1iZ4 zovyhrO()NU5b6=GdX<~QvqSviedP+4z7mXk*<;3i!$!@4fT5cK!?QmSYdFBi1NFA!}j8ylPGkVM@f*|uW1i03Ny3VymJ8DB$+#_`|`(XxTKzMqjW@;h;kav_e7 zK5@`GzYq^ePFNJ2u3_Jg;8YeY-3d-k^f0(9<8Kf!D6xi*r~9a42e`m0PfCPl4hm(U zYG>!kmI!?ma3T7GaQ7DTy>m7o5I7-G&Pl}od{@|)#mDd~Cr5ga)nDOZVOV%~6`y84 zEqprp>`=|aELH9AkbdOKp8qj$(W5^S15&zWgGQAzSemD2Wac4L+NAY!xJ&M7VF2S^ zv_@gm^u$m3+S8hF?r!seq-Yx5dJH{)*6bvvJ`nzU8RUnJOP+ zG0kwj&dG@dKO$sI%$F-|uEOH?$Z4fjv5C3)A+Af~Q^d#3r-V-#p9(%6K02Qo$;NLz zpBa2+@oDfcTh>T{QUU`KCr{+M36i}HS*nXIPgHvb@q%EI;8w1Ghrw#%C4HzW7>{>i zPS*zK$w?7rG1Hah#J=tjLiFWmDn{{fMdsW(H7|il#5Yi^QmJw*d1ZlqML`n&EBKWH zkSiiU8=Nc5gFHZ_a_k;;Ps**}75RCQL+1PA6yy{;quBNnpYz2d5ED{{>_t*~CHp`Q z6ib_;Pg_-q7bNpQlhG!&P;O7=jy)l)ZrzZ6P~u`u{Z&vVhMUqQ#7E3be$7X|B@8*P zQ&h;)n4jv#6z5tOgfx%;omj4}>l8~KI}6?+)k?8^Yzljk@XaYrbKz%d!w7!DUb^ft z7tzZCX~5_-H~v<^S_!;We42r^Tp)c1NGpzkRMZ2cc{d4^MhnVvAUwop1ylb9sW5;% z09y7<0G%O#E>nOWRheVgH3DmyHK9-~%X!x&=`&>Q^I78sb8>~&Ts@X+Rw$Z{RU0L) z#PKw(b=$P)u?9n>;OC!U9sn~`yZO+m@zzyhELnJ-U1a7wSXjrrK*>6F94p6@;Ne=j zQ;+`rKuWjou^=wf>oh0X1v$iSz=y#|#AUK@{W2wr540}fpqG177GiH(PTz4r^f zw6hB(R~g|He~YwpDJECjugt#6%DlzA1w*#y(~jKm;I%T1)8mHly*WclSN7s~)anQ_ zIaF<_>;qPRK|ULY&GP{9X*;_(*H#DwB;~m(x8%Ty#>%89V|^Xf-#U^5bHGSUiP#zb zH&jB3b($@|QB-=R>}#oH{uX9Zhi!yM^l{E+?h}lSb|pNhOO&^uKLwy46M~xpwZcMiq9*$x*=;DqL26nX4nLIW zK#UvRk^V})j8x;y;GqiW59)?>mU z(4Ia-{r-~T|;ffal`nldHj#_=&)FOIMq(- zc4m2t=#H@}^u#LkMK;dHs!I5j@j-E{@+2H2l`COAi<7rHjQJD2vD@6B=b`~fOx`ij zTiQsl5jGOFMqNWF7shd1MU`uD3pq!Tvr6ZX^b*z$z*Hq?Ni3aQl1f|()Tk^_5?7Hi z!vtf;XPIF<=7s7GqGK0DSPIB=c%e^G%4ngsbJd`Ga@wHm^HS!#f!;3%LLBy^D`I`d zg|)QIz%vQ8wvF`TNw{s^akOBSFkai-3z!#~9$1TWmUZL9*rzFKvDV6Y@i{d^C#wL zcRj0`^eR*wyh>aHZ@C4@Q#rOown9&EC(c7(5lc}ire$3_w*~8DwV=CWF8gHaS`+y! zT(%N(-VWVCFAJ%Bes|(ry)-0RlVrlmIK|&%rWW1dr?efBkpZ=5Y`17@qqy5|B<=r# zdBRQNZxW zkXO0P5APK*JgUetzLvtC7)q0!F^8A-F<;|g9=izCsTKiYm65=9#a7s{MgEIh_`$sE z>Z1+zIt_U-k^>3s4d*~q5O9K)R?}*03g<8=glH1T?JW+qnh;IG zAOxt2;($YS$D=KFkikmc?{DpWPEHuad;jm}{k(n*XAf(wy@uy`)-$i>kMc<;5uRS0 zAW6vN5@i_yf5LWgf~)Eh|8V44ROQG(w`cgX;U24HClg0Z1XPw7UQSO=;9fJiSS=OV zeQk`X4+CJg?`)gAVr=t%{I4FMj!FQs(_v1KW=Io3E(@zA#hVzh$T4Y%nz)I|D(JSw zDhAsXgw!L7SD=U5Zhzn2gARm_x7pu!_UuQIzG5a((&g#tw8u0}4aMB4LAx8`ReqZr z;~*)-DW|>lroD{^wYQJ<8p%L#MY(U=I;TDdFb=b71C~l#9B$)wRis4oHj&*gQoI7q zG^}9qn`LHBlM${7QBO_}X(IHJ7sl{-XkHe`P7N?gX}orfBrz*jYf8SY*Kn^ha+bRx zsz`jkiQL(~x6pW1HA;EEU^mC`J`6hk)mmA*M^L_ENY)^2+2P&R9e#rISM2sT3Nr!T z;UK`(eYApeZKSd)F?;vNxI<4FK=p;O`so%D6dQu9)u=C5or7 zmvv|0+hMR#JPQ+Vg*rc){K`uFB=+z-#NQufk_9cA+h9q1^Amq23p>`MeB30gQS2dq zj=FoCCq)YQZ$iv{Re4n=)K-42ENa#4h$gRnz;^fKv0TZcP^6YgldP`!_lXyopHhTA;oHBXoGlzhq$L^>yyVWS&L8zyO0 zhoCi8_*rRR3pfcP&#o%mo;cQsvsE?QvF84m68MT?>uX#J#K3mdc3CBb+xdMST_qaH z6>DMzeG_^1AfZLA{+fCeyBYBhqBu@Nnp#!(VFEyB6jQ5e zJ}gcY{yINB=)!HODSa*5teP&g2X5^e$ExW>HvHy)IPM3&_8cpC<8F=!hSOA^ zY=Y3Lju8qWn;3KWo3y~jWYCJBEDZcs%LbmojN%Gh`?ggwoK*hLi*7Qtndy5wn7%G= z)mMFYdgWkL+F?`W7*%082qa~u$>xQd7ED{Jw!hwVQ!i0(r)~}T1^JZuB;V2}k5KP; zQ!ifUG#?nW{4^&uS^7Z(-)d#ll-(r#1-?DtJAI7Pw>dr3ko*EJ?XLFSfHeDVr0*H& zdkfx=G=DV6y8CsOf-9UQ8@O^7JoCtE&B~tFs3Byqt?G7A)SLRfHeVZA3$(;;K*bR1 z=XlJnCBxHD#(A@M>0R2e3LMffXtMb&i==85`T%e{9Bdse*jSrdallzXyuf*VPWvAV zV+DV*Q-x$7-c{%n;FezdFv;4M)Fi*GBRBk92;JVQGw50S+ZaYZjHIUI(;lW0>bymr z4|rm}z!Qfj(SpRy{rW%CP)7f0f<7*$tw`S%?0O~6ZSQH!&TW4(L-&7bTl-dm%!!-r z)c5q*tz9Cf&?uH`AC}2*@9Ff$-E6xD6yGB)9iufmSV->_1eQp-ZAIBtoH=%QbK<4u zm3CeujMK_FFhw&Y?Tq~TUk%ST@>+fu%geiHlK-TAu_-8`=6>Y{wcjJhvsMLohr1HH zdAc&d9grqKpM|F!26tq1n_Py>7NF0szth(DP=4>@c=LPzwp?1ERMCO=#agnksnXAk zk<~kPvv*$tos>6og|D#l`P2Rsoy^0rXeguZ)MDrHjA=pk9IQoqdN16`e$c*uP{j2x z*TAU;7PR=64MXcfmv0(9N9dZ-|4&UFcYKZ3d5iZ&LLfBhnpKWT zr(%Pw6Idi^Tu0tuyRZwk+Tr~RpHP0uIffZEZk9d==ciG-W}eT)^|RZ){3?Eq{ZIDc z3_nL+s}lG*aYBZnBVp9%+MNZ}oMA8?H0aFq7xtx?g@}KVtt)||7KGJ<&iDzzgXv($ zZ2o|W@WhhFA_8sF7cIZg00?J5tuPPHT6wx%<&<$|b=Bo%b)e$g15e z`DRO`d1VduOWf4m*<}%Tat#>;Sb)nziMa|b`U2K-)auMuH3DcgVvo&R42~NT7*4L@ z{)&(}rYM@6#m(13(d3n7>6>D_ikax}Z8i^WUZMytGbPj0$@7u;91REY!AEXC)1?2M zH1nx;zJ^})3jVGtGdXah;VlU!V@5~@=;n3hRn zoqmVLi}0w}MwL*akaF~8QhC%puBWzYqMazLO-{8XB!{k!x?e1dwZ54cCW%O9)oVIp z?n`X5E$w2le8WG&v(lj#w?66pbM=>)$Ada7gihRn=+VHvtM=0tnzxF@ZcJ z=!5s>TX$@yO(#_y+&!&3B}Ch8x2LIqRrOD#dR)J(ShkG<65vJ2Vh-79?+wKek$Jpc zk6)l&Wv^O8>t4v+iiSxCrpNTaTC>eA=$35P{#po}4@C>w^u=iExKXgb2$-QMQ0miNAIAj2_+1ue4os^x=05rPr--YHo z5pDb_*)eWsda%8x$KJD3;~L2<#tRr1IjuFct&A>4JT)}#Q&UqTl%|kSm$oGW{-TG)0qPynBb1N zMJK&CGLNmKJN-px&nxzx=S{g~&uMpg*cvjR=%3#Wihh9xB%32hcd0z3=N4_{EgxHE zf{m6_l_nI6)SV{bXSc#VC^hn@^N{5cEDWiw3^G5Xhhb zDYL~ZJkxN%EtgO#T7^xpaiR!Qc{IGzOx2XkRCU=EQ?gSvMVgz#P1O)BZpfFBi{?tN z(K1^7lAEGb8!Su-e`RSr7hW=2JUfZra#1lENO-XTME(ZqiT4sio#b^(d%tU{n%LAE zXBoW@$`J@9@6yYmk;asQbV=49QiUd_ii=}YNB5w-e9yBlvqd4xK8I38J2`1V(q{q< zlgFlu_%Xx4&Z(4?lS&p-Wu5h}ZIA+f?{7n(LL=MDBIq-TA0i5{$x0P@E!#8I@C_th zY<^zeZ}O$8IgnYDR@obHs5ijCsI6%7M@@{RWheGIUK#zW(X?h2aPxD6msBs7yuKmo zei=k*eyUzVQjV@sD50H%o*@6{23ff8`W}t&b-e&AXKHc8PxUy2&&}RdUzR4Nwk%dr zTOvn2c(W3x;+TG8^dWvDQH~=x)qW)7G(|2%>yBp;c1=9cW^dU7UB*fr8kK*Pod2W; z_$8pUda7Ia8ZP~1MzQ!W0#aYm07|Y$;Sk#)t%GN~D|WDqJ=d>Bv(NNziH|aJ@F+Hn zb}%~DlRi$YKq}VlJytCHy4jlKDsJp_8h4*l59|9#vEHlNyCbCmxlaxgf&oGF6AjNJlQf#+( zLDIL!<(SFjbnt58SBz%2LkF@Zet%YBcC%hjspBrU+h1q?J2M8d6ZNr}yO@vRHIxyV zuQear?6u$7Mgr;;)ix=gFS08RkV|j3%=5SP84D_vyUw<$Z0A-EQ8|eGxQ+Tufql?g zMZ>$S+h+le&H@3l{5HFpAK`A8vmME<-t-cpoMxwtNa|R{E+vD!CGa%G?Esp zT+1qt*ky;8vC7f#irrSrVuK$S#ga=f@GpT+N<8FLd=Pcta@zmFvL7f}==3YH)Zsf$ zG`tc~*;~BkWl!}v$srED{Z9Lv$emAd2@J!npazkM-)NKjR4j=empo4EF==M&d?=nvhKnIy6 z3_92qTRs6gNCXS)#ic?A79WVlvg)J5lFPL+Yg?t4h;^Hd|2(7VpS2@n+=go%*uVha z)g`06rPS{I0J*uZ^zX%k^Eg!aPx|r3egi4mJC}bm+=l3DMzoa4CS*c7p!!Y;+&h*z zL`(;ghi|H=9(EqcJhCxn)~vjB%D$#s3-jVgjK0PH9J}hqV!12hx6|B?M@wBHilv$h zLvYPy-ap1`dsC9zMaTezXPEexGJQl}2=86UT++P!aVjN^u#C&GN=PKp-f*xzJmU}G zyLMo9mUo9+GwfcwqGs4?```C63s%by1Od0T8{;>_9P9no0A#aq{#dY7dK!ejCJ{-r z_;br13sJ!v+rlcy|H1V=Jml=}J4Lv&?=>zO5WDP#5I@`JPe#1p?P=EXQKqlspkm=2 z3tyHS7&7FHdpoDx30%@0jV^E-)7)lUaj>B~CF;}Ye*KW`E(?11&-w@lyU2FJAuDf5 z+`6?G5?^jsVnEkejS>62`KDXE*POFh{Y9AeOt+?$8*c=&26QXe_Ltd@{r<6O*vyC< z0bP6SiXJ)I$PF2x?84msj@aS*%e;QO$nzB2Ov)50v4M3fq`(fpuy9ATqD`AM0-WZC zQb*`OwMnbSx61^La5RRwB?bU+A+Sv_!~$2lADJz>N$W0X&B~v)d&+*8AV_&z{Ikg9 z@D{Ms!Gn+M|ln9I>LERJL9KgHbDtEsXTE4p$7GNQmRi3*{P`^9)=Qw z)5Yf6y=uPgE^LUppViKGX(k_=_>GgnCLQc&34Ah zwG-=`SI)$iHq%Odhqtmt{+3^$W2v30tp{fs#%%)>FzUgO;>BKxaV=S#CV#PQ#1Y7c z#E{ty{4IqoW>C`_ax0V_zQPq$xPrpb(MuJ5^W;ofb?zJ8rY_$0R1-g933QYJ=EXC| zZIeD@EX-%fjE(`Bff*z0Gu~?)!xbbrLzIn^Pt&978Rw7fLkXfVffwS+QZcRbHa*WLID>t4 z!CX|o2%NvpPnyI11SS|ze|+XE-iyYlU3DmPZ{kLyuxHa8zuV05#C_JAzE^va7TEesTuj!=iII!mAlWNW8|Jx zTmlNffP_AJ3R1wHrL>+VO)24L;iY8>Y>za)&Z$r!D4f~ef<*)|tc#B#gC#YmmvBHN z_NV4fs?mE4P1;kp`a2#+mrh}ml0IU-VNo}EcgztoupNtR)NwS{)19lD7zz)iJI+oy zP;+O-GMZ}`#b?FDpfkTr2BZaLzno3A9T#jtc}ho%e?n!bFMVvKYb(9QfB@89F`YEW=#)sp#E ztHbQpw!Dd19WW!Tgbr);KvBOeXYz5){@{A#xzFvhn;Qi@`w>N5N4GL;qZYUp4bXLzGvn{&+l>DvXxhQwZKUA~&B^4I zlM53S+NRj7wT>Bhx812s8sr|IB|8bpM^VZFBc3B3VZb~^!+WjUm5&Q}H0cUP9nWca z%)xom_Ny>j_#ilrz`1c>VDmh1+4jEl2q}bt<_7GNc*)KlOWE>)5cApW{`^=S^NS$# zzW3`}5ES}QKO9^k8s2>fywK(rZ$1hC=-g9MIfTHH0Z}Odg+;$+T-$7S${QOE$ z7jGP+Qe%IVN)0l{u|il|fgLD9rR{zVRUp=DtmTV}uXn7*kMz&qGV>|hhS@AAj4K_{ zZPlG@f;dvo99?(4wURhNJy{9%dpA42l4`1TziO4gT z@Y%*=`KX2YG_vyiQ&CjJiPM1$NaC>ppZ_iE4rgqj(!elN^cCWwl-f z2>aQ#a`QWl#V}DxcHe4~=ZSPqS=|7!d+DwH`*ZWV;ASL*eVC&^idV;~>WVox1*IE4 zKqcl_6OLX12-1I~-_^)C5jkj$|dZSrF#{IC~-mG2wHwI z)AG&%E$_&*yaU`1SunYMEhVTE>JLv<^##t6!$|^=x~l-|N+| z>Ad>gEy`lee1@Ky{yOwG)9NApU9V%nGzr@VG}e>pY7dn2HEZUx3jyviuP-82d&~<9 zbu_?>3)#3p^)iAi&5z-K#Wl^h-J&J=S+;kMA#yI>h~^}WQT77BxSD+cZ!ui@(+G`3 z+=f4le?u&B70`*~WfY@K6Xjq=|7N538ireNF<3+{CnNS+M(@z=wXn&ctz*-ihXHD5 zqOfxcPIO&UN>o-1=NvJd)2I3jXOkY99Ivo~&UT-D40&5N8{V*Zl+QkfytXTIc|!r= zLHwaFv}ewvtYZ*5c+AF}>1Ukg^mM!G>X6m)6kqiB?`gPrEaJ8Nk+)hczcBp+cyKCV zbbj+B<2Ak??U7eAQ}EwtS>h z+p2xlc0VL!CyhV+Kg64cufxI_O=V$pfnlj>%G^O536=m|@pGuBl&iLDFYnEo@eS}u#=rooVKnYJSX`BbYp*L8GPzZSp8Ylvu zK4-L(8@&!P@3*u`SjSp!WLJkT!AMrkC{D0H!irW+DM`Fboox6vn_ni&OGn~ohGK>% z7q9%66+`r;zox%!S1l@wyZjr9w=%!_dhgemr7XGHB-7TYe7q^4!4Xat*Gcn{YX0i@ zo6lc^HOhz)9A`5JscL@Ag=^)IERZ6agbxW{Rkr-}XmXSet4hu-HV2PEF)(68Sh~w$ z8ZIkOpGlQajO{-;x7-jBA|jQ}bE<#r7bhBlZQGL(TW6k~0!15n%2q-J@Ngzz-x-^X zRCh&;(Y!;?P@TtcNvqgO=VkRXG=(Gr*J0cnSQ>ojnz)p;led0@exbMZ2!e5>P>wNT z1B-FMlPEBb#(3;kk0l_REkZkk*z<`EKzuzJ`;aCttM7m$AYZn{;gtNE%A#sqlvS}^ z728|ZCq_hFR?@fUla7)L8p_m#VXIq8%S)YPT?0O5FG&vHtuDGnZ~f!bdGmywQs#7wv+PiY0H|5wXr$#8i}g z{>d#PVM@-q)foOZa8qlYGs&cTEc$Qm93^8?v+gyOK-Z^8r)sq2Hv)J_0aru)p7nmm zc8F$N@-$fmjFcL@GF6iIs#K=+2%)Hh4ek>PYeAeKMVO>Dx2B3^W1E5AYP>h~uujI8{Q{OFJK<)Y ztyL1NHP_av60YF8tL1YjC0vf|^LIv<<-eoud8pNN6hl}HZp@v9$TYQF-or8XOW^oP z9FG>C>nNRZw^Q+yQ?dR~Ch`kf4a(v3DY4j!b;qn23=ha0>x^14(tmX0afS`OGiJ@$ z?SwnU6+$WT#3AW`&Mc+Y^o=oV`b*L9elEMB)^vQGsWpRIug0wChYrk~LF1EZNe09; zIqtTMo4jV`LT#p!O(jG0j~IX7+fR^0h)_~>ZG+DfYX+A`P$DgDUdGi$X2t`>^~E7j z!fOd@SBsO8VA4|GC7-9cpX+!=pQ~kY5|9JqNRKgzi#n;xF3iXW7`LpJHfCHaY}cT; zV5;e$5nJyzi{z`wp7Z;VS#pTdP)Lqi6abLBDN8S8^M#1?jzZ%v^QxBGD$gXjeB9)S zRMN{G`YP{tncts{_W0HDPi3b3T*4D2vz-l;uig|J#&()15f8 z#+{0&_dO9aLskH$IT5#dX6A&bSiDJ|0hIH|`^|gd*e5XA*qi#T#+-aGT6*F-BuS;{z zAFeImX=7(_2i3ScB5p~I+veU}UBdy=oJQ38p1puxS+(mpS(u*}`RgXROl?o|JA>k< zh=_v>?ecE#iK4Ep*p?oKx(fnKCaJciFEI(r_JoW1}$5E#i)u-nHiomGf@&a5Oz&6 ztWf$Inp!c^(EsPXzdg$V5>x%dhP=0RbBXEBMf4;uFF6=^b6E3AHpiA*Ai}1v+k0nlsY2ErUoltvxVl<2nlH9qZZ6)m zTCd{*aHxwkduB;FwI;KqL1=@&q_Am{@)k^^WO`8i}nUb>Xj8h~{x(M)Iu%5L{ zT&*uB>SJ)G3*0NU$xnz>Y>S_(e}+ZE+u|4Z{yV^+Xq98&EUkYs#>Ce3E6)HBTXjf} zp5EQc1ryRZBHhS+<1$^xV?=mp|28nv-p#6gF*~~eMfwUnt_;Ho(`YY6ksp{eNG!HZ zD>6=75}c8yn)7j)W_)(8t52M)DMn_^t&L^FST}rc8t52=QT}eI@_k)~$y;;~J@(@n zQOu!_-sj!_IipBwl^X%9#B5x@OGbX}Y2*4$F6EM<>0Dc@Zeyr$73&t?%2_#fl3=)! zt8uB@jvroWO;CFAr%Z{F3;@D9y|{NN@E~Diwowxl1YUht6vNhc_=*GTnjSIy)^!{4 zuiL8X)~bKwQ)>3viw5UW>bwo6t@CKhe3U{jSgY>w`_o~qlD=QMAJeCKnLa)Als|(0 zJ}LDfeR`AP{e2n|^lA3T_GvLesn?X&4(QK)rk8U{#|(H%7NVTieWx-)9_OOvc~c`k zn}#%JyEJOvEe(msL*m)xAmSkP^dR+gBlWb!IDAcl&7EY0D=FH(&WJhgQjrCqi8ud8 zc744p{l*^$O9uMEoZ!KyfB1Rx;HP%*;LIrQk&>Stl-zW0H2GU?o;mgk+~@IwLRU); zT--{2Bn8WSJm|{p1ycxtnNcZ~Yn|;DwiC%B_6{vb>__6vc!}i-T`whVLTXk^J<_0( zQjUc5s?z7+TATQ$w~&JmWc(U?EZgxETgu)BJX=<4e$l6-RH$l7C~*$U0tez(x+JLd z;V1$6?^Q+$gA;q-;emHr@b=~Yw^lh8B&$5}Beb$lTjgI_&F^LM_0K!{=dU^pxn(1tQ5rIF{2hnm_$`x}lCn}AAF#^*?(2YW-Vl61jiaP( z*FW8`@hbMBRsIKxkw@_6jYlZ9oOFX9^1hS5BQ>>>GJgr$+3dH&NA~*zGT&qvn>3cc zJK;@|Ga87ol(yOQlM=6~S3UGf4^6MQ-=~MDnY-2ghq`$`Q%t@3i*ELtRx{sr!p|Nw z48#+afQK}TDN#S96~DAZi?;~-&K1QdMXQMGBBbKO^f&FQE6s!H=D~sVd{jwR%X_S* z?`isj3&bh|CsFM8aJVBBc8-6S;_ONLjPYaCN|cz3$~gC%Q}_tDi6$FEun{D!Og3_l zVV+a@NPJK10=2m8e6*Owjml+bShQ+EiPiE?Le{GD@)K6H>dX1X33%dHdY9>8_(QAZ zM00V#YLS$IhFg-Uy!of08wN3$1RZp}DLw&7Ri}o-vO3|X_3Wv51q1*Wh>^;FeP26$ z4?mmc9PnM{hDyvA&}P&NSNH?|kMn~8YqY~eKg6cn=&~9(>HO9*JQhe-tpT~On(>g~ zwYO8ynw$b7PEheA5RYea0rQ)jooy1%omP(}qk^UY4N^7hf}(?@p4O;E7)+LwB}$#- zJR0gU=C&kiQyNU)ER!5l$2$~@#0W9fdOq7M*BP|pf9l=yj@)~*N+W~bvzv#AIY#Hm zTA4m`ypB%mrHdv81o{zmm#|!|P3oyshQJN#!XlzQ)8BNeh+G~{=3E{i;HT$1VOB`z z|M?wRU^?R0C5*y{96rZf66`z(%kHQ~=9BS4!ItpZE+@H|p#e8sFn;3P^mXQw0|@CX zPXf5PnGoq{)eR*HP7!~v_g8`r!OpQh>9;c#u_=PJ$NIwBRIogzf9l3d;+``e0@iD?2hi1KuWFXJ52C~T64FBCtC@}>KYiyWEZTPo;oEz z7T!V5S%n&PBcMmZA1D@UCt@aw)J!baP7{l@1;w8_j{itb$F~ootEq`WMAp-~Q#=h> zR275OmDBe=6GTR~ITM5R=MWx@%ZiDQQs0S(S{K1jl3oVkR}ps`{Z`+fCkpGJz7s~4 z2_fr`!V3Cs;>hSbit@CAu++E)q#&%!fQZ1_DOjDBI*x>#21%TPb|*}(e19sKKzh$S zdJ}N@Xk#+0wd-oEnzl&O?tD_?`n`HFRqI(13nfZ?qt_2l5a+;dG64A;6q#k-4mK`p?UjWQoSV>iE3`JgoM6N6v=Myi zAVNT}uQzBYl{gp}c-gFmJVpB5UCzsKcggCvk2Kz<6-)E1mf?sAG5JRjdA-HkwT;8f z_hJY!-%P&*myTu9jMh$+gR143p$fIfD({6Hg8X5=ogQq;+h!8`(1lMK8%&|*@AeL3 zcQM~7=R6aFp7qI3>u3`>8pRW$PXou-fRx%d0}n5TR;pK#I6w zN^4YPQD{Is=kyYkFQOs+@ti*yl1oFrqdUcOD&P@d#$EQ$pD3OaqUpBR_#vH;4eA+U z0w!({B{>WgISwk)lR+J*Nch!kKxaSB`2n45FCP=o`4s+N{Zw!*cgC6x75uY50ujQ4 z13DG2%Fd7zk(wESB03oXse>~k*vzBthm3$g%zQ|BW&|KU;R{4`Zp(@2By!V4bV5u% zE~1lY&H@w7si001(D`~a{5nydl~DpZqb8v9Wvlgkpb~$lWmAx>74UnE;|FwZideHZ zrH^&?yyWGb!>Wf8RMTZ?(GIUx%iGT4|3sq!OKo4Us%}*$C}@tjjrTZr+#V2m%UJS ze|gQ<@k_;@`G&*Wo|2X?LIw+Mr2+FIT~=j0ieC@8#0`U<_1un=4Fc^M`mqg)ri+il zWjmCIEwgG)u^fY{LEPib@L=nMTI4FgZ-IarQ3O_B&@3;tFU{usBZ|4J>^qP9$Yk)}X^S{7oO5i$p;qcp%+@hO^5xyZxWHnr}DT zwsI=iCPPDYh$~y!6{>BO4;G}q%EGO^)2X8#2b0o!soF>to&GDCPfM?Q=VS!OT6BN0 z25-w)6E9Fy@{C) z;;T*G+~C~_{=07f-JQI<)4L>i_u((hSAXfh^Lu-G@a|Rr-D>l0z*qam_~ZG!-|{zd zYrhe^JJEl4dG5O|z0-fyv*gSNvo#7#DRwIM+wFaYshj&q3AAFUAASJH$*Q4ahY-)^ z;P$=X;+rwg7q-X>j2B+)^R+2tm2vtdsCB9kMDOXmT%bY zZVdk&7fs-0> zA|jRn432FPTZf6IcLH0wwU)tqVh0cqteW=E$!k{70U-)KXi$6WA4L-6xgysTuLh-| za#mdKzx_?{wpwqiy|aS1Z$4n^es|#8V!ie8SLh49#&>z`e)dVDDKU6UT2c5Mqz^1q zq#PB$G+Oa@BrgoxCBDAIMqe`3=u41cFE?xx`jTNJRD}~$@}TN66gfB~oi2t@{vJ*k z_h_^s1Ws1jS$#>n_%Xb94BHsSW1A8j?i7@ezNAh3*c=E9ZjbJq66r>a_aMziE9{bJ zMO|^V?B6>Lgu_^FJQSAt2Efw$y2Ej#T+rkrgs*%MLgcC#9Cv@MG#FWs%Eg8OASG;& zth4P1Amwvp0Z4&lAA=1L#=~I4X#++uN_R)&%9Pb6eFS9a$l|e**gV7Ev-JGX%r()} zA;@6($xnt1zA^|M+zuUjmFc4#lSMWt;!DIe1$qe5vz3DEBc! zu#P@76Sb9_)WW3SpNkstJmpT}Ga&)ha6oL*!Pva>~GSszG3t2<%E-$Valo(NS zaeJH&!sxek;2hUMCc84CJlX5MYfj(tw<7beiT|oAA&)Gn4pQ}Z2HpvXV)arECx56# zm;9`Q){VP#a_J5N4tfv_x;dr2jdV*7;*|0EtAC<^o~8G4eaS_ogOP;JsrEe-&fyJr zcgjOSUI`=1{RgY%rl3RKqg9K_t=6CFLyEVyTJJUAoHj>*Paw>sa;0QU9A`H#!$}Yq z8jP4#kq`)^Ay1mmC#&)IxW*is+rId7s&;a=8iJInp_25gsZNmN-PGZX^|mEA72LYi z_rAj9=ykRuk&r|HM)=}~uX$aoUpQXC8KkAF!CAKfjE z{1-OBNs~l5!%i#gt%@=$VC^x2JTFTiVkX~!fWjH97>r6K>b8-#M`0 zaayj&9LlF+;Wrv7%0Xl=!ICr*1%|z$+X-)uS~K2{g;uZ)d%N!+} zFM{a&8crLs-4buvk2NL!EHE=VVB*lJ0r79&ZRAR0B_N@^@oB}Yzut?p4tBEDOk=W4 z*@WFIZL)UPDdo1ZcH6~iJk0$9sp-|;MZb9xf%Lmg1`IcQJ5FH!-N_BM>th4d^*Bu4 zc$YQHTZSK%OfLv7>@M?|M}Do0d;WC|>1rTH$<#59pN}d~hGcdl+>$cM)BzShn|jxP zOk{X)DNUBbl&!T!IXj~3YHe5Pfz0dO4mUj~_*T0)d{FGgFS&7vuw=z7mik0)r_cVks@;yO5 zfHR-Fa$NwZpgI@TT$m>|%U3KeqfY1B&CwMS`%DU;1l6OZ!p1t%vXC8(_8Ks5hP>UF znIW>}wp)PfQxhn#RIr)Ur4%N$cX~erHsu1}yG30#aR;xMF3Uv`Y~8BIOEr=%^O$_X zW&+n+|Fl*QuvJ=j|I)l-kaY}FjmlyD<*^kED%NJkbc#Qw@&1^47!zQvF>z_ew8LBfBQvIk zftmJwBIUjNLm^{75Xzf#yEcc`*V$k3hBsQT>#ifKvoG%i8OoJ@BX!g07ua8e=xkSd#Q;yg=qC z^U?|U-QJxs-G&e%-2gk7C#|wEspY~RObMqP$)HrWxH2F&d>()8{ZIHz}=kY)b zcutE^{z=6;QCr%bKTz7ml1rBASH5=hxG=3n-5Y6*f0y#{#7%lOOMXj@UyN2QCWhh; z;fp$KwTwcQE0^NsXVAqAau`J)POwveEkpP#y({h)f&ihy!RvAV>vgG#OO(zBX>M%D zOZ;aq>Lq4w3cKH=l0;aaCb9&;c4yaXIr@Ye`CTMk|TER_%ge$ zBR?t}e>6N3k%ULtm@aG8pMbYu!+OJj-lX~HAL}`B)a3vcuB=x1zRA5Q8lD!i?*6?g zH60hSw^v-NeRqt4ft81bd=DmSB}($H?&Tve+c;LV2d1+T4lCKDdN>JeeH38On7|91 zvlJGJb8xcu4q^42UL{g_lxfIIzof=LOTM_HHjmq8PVZ$25j8%(*Iw(seEf`@*y zZ)zy)w`Kr_-}nRrfLX}-!hiw9?)Uru0N=VlJ;3&#IvFMf zmcckqZpZhX`C_g&dp8i;!~E&f+zsUzC0~OJmux%k%d%g#)_|V9_59=a=@;_ACm6xH zb0*Jx$~9FO3@n+ZHfMr)ynWxN<^|>*n^2|;V+Fa&8lmo}EOTm*17<@#NfTt=1#R#) z5C{}$ZiEJ=~}sMB9j>2wZLkzi$0kzZ4h-PNZL zvLo!GMcEOw+iEkF?w#laj=x%8e)f#>`JR;EC=3i$N&3iL-TI&ShL_d+xF4SD3EP-^ofGuvHlcoO%{ zCc36UmI%*^q|rH>7?Xzd5IgxT|J{0Je)+b~!WiMsPCnvS?hz4*>=!spY7naj%Y%Hw zha}tNp6IB2IM8&{pj&i&M?ll%yQ{;`1g~Pht(M!F4)22hFio<{x0wtpH*4Bt=dfD* zGf$`0tB-`Dv3y^!lmF#+$IrQXmLIQuaK2Sa`Cm7s60eApH$+nV@AsGlRRj52xYS}< zG1sJPjpAt+BPq>Q+&A$?*V9+q#1gtV2UUGr&*H~%p+3lufo+)i{&Jf9rSfdHV1-}; zW)vfR;D9*={*3(?t=lNnV;tIROs(+d8@)NWArRWkszJKxRqGN+Fv(AuB1|p#-dEje zz5xedRxLh^Y(}$vdSRFjd~YV(Y>v^?)DoeZkV4uFBw)2)zd^Hl#nPNdMK~q}ap2RI zdP}}w%x6o}|0VZzd0_*l+t8E*NuB^uf43%nSfVE4V&cnD;26XSy*ec6jnV zNk__T<>s)%I5w;)$|;1BBGKB$6aM@-S_FXQ{7n8WdYzPniQB`Jo3#$ebLN_4@sV?oBr~tIQh^5)wt)PEDfc#G_ zC;57`Vk(R0D@vbY>Ku+5K(Fmo9INGQ$4|oeA!Rbj_lo*veGa6_mwvul>upQr!^Xm- zrgEA z+upE91g1BB4>i3V>gG7mxytxa;NmDpM>Lfu5Oa}$cr()?$xJj0JN9ZOh$jjr%6Z}h zBPJ;oXE|AGx*d07$f+1a=Qt~(TQKFCC8fB&%ifLXNJ6QwQLiVpk}HVhVv}Tur*czv0@F-tQ&oL zb`1^)0JG4wJAf`AnQSCq#zw0^q8NI316_d$NR-?^s^Enh7oE2J#f)Q)@7)qJ&Zh&w zOU|drhim>I@RIY@oTGtPB>ZRPlADh%O5j*`L`a)nY*+B-;+l0tK>Kh2puPA1KR_!L zpp^*5bf`0MqI8Z*4m9ANU5CM5$zWO8V>q(PsR(LVYkJr$i=7H$w*ft+$noLLw1au) zuir8t_p|N+Ky`xUgWR+J+f~8aa)DgAw-1F}0CCkBSi@9PY@#nw1H50`f);2!AQL6O zLWSTANAC?z1x{J}CIEEC)|iDf>7V)`?G*!Q*MLzFGsH;)Zu13h^+y6XSXIEycTYS7 z+!%I0HOqpV>~;dT`GVu|hVj_WxP)=;1T-yLajMSC!JWXam{F`y zUC?PDrG6K{>bFoy!(_bLu%8Yf%^Bp`>h^vjX99-yjGPJhefE%X9EPG9syx6mte>Kt z6a~;qeLw@rHTC__mhLqW<_^K7#Hq+LOA2J!Fl!Y!@6|wHT4l;X(1+VYz;A4p#nbEE&yZ}jE+;%iilgk@*+VGQ zNygLOS0I-=)6cyecHlktubm8Px3p|^QNmMP_yKYOyTiRrw{nbtNz*_#$hosoeVAir z62_tTWz>KJ2(0ns$;{$6nXwJHCX&G?R9A5>5R{)V^72l%bP%SP%PZN z$kv!D4Ma^#jdyfTpi@9T+lXJfCnR{ba6_ZA?HXa_mQPR-%i+BbGF9edL!^p!sM zZ$dFr6++0jc;i)!V8P^Rpl4WZ8XfhsiZ2(*t0^3mH#Jo_PEk8hLNbzZNDCQG!h05v zM)~cH=Dp*R|1x#lm}tcwstC4@(bH7nsp+9!f!_c|9L+Xl%ND@Z(SC7;cFpVX9v#L3 z6<+gjb4&%hZoIgu>U?}%`r3)GwASX2UlBih{CV-uj1R?68$UFD^7wNwhf(a<@fXA^ z&l@{_=#udf__DtC^tSOAB*x-9q8n<3sC5dp%BXc5wQw}t5Fc)845LPxOtWhb@fSJl z_s^oGGid2lS~`iAj#o>gOiRVVx1YPPt;4i8fPBb7?BAQ%mXgRDC^VCZ8PXma6<#~A zCw${JI=Wb{VZn~%xKI)iJZgV9RD41{0a(!_jt*n5Ji0+ZvrI|Lv8*`1K@ne#eR0W=|57 z-J-6Qn67OUR9xNrV2J%gSBEYCn97H8%P-9-ulb}?1M=xJktpg2JoHXYKFPkYNGC`5 zM%B$;#pQWe_6A?grbP4poi?a7(zKx!D^@>!_@H~)f=BDmMEdi?On>xQFa3_`4|#~MP=EUS zvKRqejo$K8kK7k^Xxz5mWFoI$YU2LHnK}0cUII37UjQY0R|!hyfjv9r zLcGx%g0eTjo{ioxeX(mwB?ADPvWjgp`T)Kg;JDKdW;yQpIyX|RwsE)Bq4vj{Edfoq zZiaHBxVcd{bP$He0b)^TWLKMZkkw9K+r%bZu}B%4isFa8sq=}x)v##gQJvL+lR#U# z5bgcmpn;H${ba1^8W)vVO7oPC94?q#Bz_B19rb&MTnsDi=KUoLzhFF$jHxwy(vUeO z40^Ix`&DpMkq+$r?vH>yZ^)Rv7#CCI#@(zs?xg<#Ac>sqxB#B zm+P|yE}3@fw{hN|Is&;BnP5XvD#%=CR1+J>;5PgU3hY&)d;8QJ-B z7MsjJDqr+fZZgG9e?z%mzo}o2HhGP2d$-L1LD9N@3jn3{Ay$jCHjE4Q3*$a8KIEyQ zLH||61^^=q={@j}e?1?ws@GR~!hJ<~t7R~wC8BiOw954wUtM46IK4AzHEcP}q>6s+ z*Bw!peVF>TEIrAYBciHP-&Z=DI+QH=PyZ|R9AVazOfX}mXWjx0r_g-w*3m+aZfotQ zyob&(m%P5^#KC#q7yUQfzP)T@o_D#qm0wF)iI^$WjAARgz4aATOO;Nhj&9G*R?BN8 zimi0pzZCiCP}^W9f7`^!__>px0402kC=f3bMI1%5Vm^T6 zACOk(o&RAzNOehFUfK~)*W67utFl*@}Lo^ zAMveD^E6K&fI&1*B&6Jp?Qq*ipD})rf+T7mjJkL{lN^)lJMlJ*hHHDG)NioH z)tgTjva8rxTbJjs*b6`Jq-N#IDKVEw9dtgSsN5Pgr9302`kfK-`AGEjUm4UmG7@>e zn<(hU2HjWs$h|@*A?kCwa#KQZk-Lk~=qjSJOrUn#Qz8V};|K7k_GafXu>n2u`58p{ zS++R^b3PR2?wnc2tF^|-_>nwou5!_}jMHKt^2*Y(NTKXleU z2e-jtJhuqtqb@$lw;->!8KGzIlFuM!RDlP(?9{bAb^+o%IJH$9?2C9?3Jo|f5y3Ge zQihvMD%Rs|0s%md9+1N`$k79G?6TdFH-5J$&ucte5a`bGa)G7i69CIIq&wK;O*mfL zP;9r>tEC(zJIBr&UPJ&)KdQHC3LQxKIb?$fi_)byS_m zYZ`yzxoCDNP}Ed8CSI%peQjw5+%c$EdfjO1@_f_MIZ+OV9bH>Vwpm)gYEUFK>B;dY zE*=(XN`EoZ^x=t1VokRcjENtUuBG^}_~-a{Wc-3?cyoMY?Vb5b^MMpnp1wvp3|0jY z4tf6>676CnW(4VK^P!9Nq0dK}E*_H@!qW;5~^Hfu3~ zEPm02_h%WmdWm4h2_#Z%wcN$>87aa;No3MtdHZ((H0;errJP%czTLz2moh;mtS4VcX8j?CG{vqug6PfpYFNR7rrH zoO^Sbukud-_0NA#Q15(-38Fuh*>Cc#a#~i*Np6$&Cup+8H2J}?nsc&DvUT9SiuANC zekQUd>x+m8GbK;-61zD<9;cB~=kTJ(d#G5)Iw2*wi%OjE`|)$}2SHU6(1gp+km%B_ zd6j?w7lsC}0@Y4<-NF};-Uo^6gKZJ=zQvjAI{Tr)!R5qHQSyd=lA-uTgwvbI0%f#X zBn=}HHOXw@T?R|8jt@)& zRU>ct0dUsUDaM0AXZ*Ls-BglL4Quk<&5 zk<%UY#KKguB!D|hk=4008|~qRJJW-Hlm8gw&2yjezWgOI!`mGt3+?vSUXKeZ(`l-J zgwoXbwG6+VBTq+WX0u{9U~a4xyDCiu#saIQmBy8pEqRWa+r^o={W=!`J^Q$ceMJ*n zbm6}+(6z;t!>!iOtARfJX7Q?U+>hkwrfXX+&W|t--M|(rgcT$ltE*~VmD{NnQ^4S+ zTrlfu-KPTjAS!I+A2q~`)ydCzC_!4dHPfb_ckT3-L2LqKIKx~1^sE74Io;kr84TR3 zh>?%T-K!>qTaL`fa7?f)X+RBP25Y4AZ zn21ivCihykIY~0J!m0X4@q83>M-0>>taMao5$Z`ytJ(hQt zk9N^ik#)@zkexj=6hA8qUxN?-xlSkicfr?zNb^5NTCJlYx)5ib*8MQ@UUJq0{B@aZ z{dv5iu+_2$KSZN385l>?zB38W- zF&xua&-kI%s;4QBcGxYw;GR!I3ya3^lS^%C;18fR!yr2C(3^D&D^ii4kN3$<`@&Nh zMEt~yhs8@H7Z=A%n)Z!G?aSc^eI3@?W73_E8kJDxi`v0zIa0PQ{wd$HS%Ch>OPO?c zhjL>o9U?pN1%3|wV!!~-!%(*9Y6gG>O7Hw?aU6c`G2ya8~hc$eur7nR}WgzPq9J+RIzw8{$N*Zm!ZpmX1Di@>5&^-0uL0ec!Pt{;k0U3 zMw20}GQ$1+HSSmD0k2j|L~3d(H^08uaFD+J)f`EG5C>`9@s!FUhg>j>leCM?4VI2; zA5Q-kYC%r=S0M>#h=ou?n=U;+fj(t={)OAvkA3^ZA@%{Kn=y94Q{MW`jv7MZD zE$!R_hlbL8vpAqM^<4PyZLK{T{c;}9&_d%cp1}w3f78NK0)E3#1R=!2VIqzOA)cja zSu8X`)*T<1D7ejir3+k%raQ)Mt4U3Sf91(so)|VEHFc0T{wi@{d(pIjE%Z%xVdM)ayyl>a9{siNB;z;A!e6;Z#)3guCByqphDzb~QjO=Mo zTP-rUS!?sooAcnSR_k%xnEn)glKwPZI@W4^5t-InJ2~HPU=w$U9r#QGJ7oSx3TBEUeeF=*^tN$32}#icG|mq8tBCc)uv7$UzoaO2Sx)^IO z8UaZB_EV8iO&AWihNKrIee3$#oA+I|{GG>Ee(zqL#<6Z#q;Gxu8->GPbow|lWBtm9 zf`uF6HP0~%2O6Pa)({q$CA{lemT(_?s`=>R6Pos&Z?)<~Q8Qq`!@6T9cLosVB&CV_ z;4juyyMtzjdguAgTICp+yS>fV&>H$EY7ZWNhSl2a1Gm5aJl6Vu?DjuyXVV1g)$5Zw zfpibIafE@7v{iMnRdJu#4KMsCF$Q_wf6g|8GQtS<$ zKIE?VIqs#0*y3HP+b(X6USf+kUH1=jUu~^5sXSMx{=b>}=Kek1e^2$z?E&4IU`hY} z7}a0G>&%qi$hDc$FR6|H_vcR((rPWqrH%!;)bRtb%6$KIJw5vO4Sif|TFB5x6WN@l zkF2gw56$X+B6`?3?I0pp(N6?d{}1WkZ~N&VW@0~WzSUBs@dxw|`qe8wJeU6ck^6r7 z_dIt#{c8y}LYRQziBqle-2$+4{e}Yycpnt0_vfnb6Us+PJe=nZ9#G~%mAQ@QnN{CF zRJ)mVg|{Dt{1^(EnEXko<7#YL3^|uN)`A^5)KRD^Uc4OU<_5btj00gb8BUY7oorc~ zy}Ris?9|P6A9g6xhOf9khmFsQU;`2O<5+MuMkiNZn>YOlQYuaTi^ClIH5moA#}UZ|i;cedOcPzcr)c zf-jr-tH{UxJ@B8Ayv*MZAByCab6?4y&EIVPZs2bze|PeC4}ZQk9{a8d9B{hm0+^#L z6x)oh!v=qi%sW9BD4oy+EFW#N|K%TE9wp232FauQ`lq;GrNk7U(6ry@Dth38-nqJI z{~1Qk!H3--Hp!G34(eRvMjQvu5}Zku6x zj*9OvJFq*FP1|DKHL88_>GnSwea9}k~ zL&P=3P-Gx#L|Jp<(yf+BTqu0D2D~}K2F=OqvGAV6F2{X^BFC^g&hInQXupKYoZ+ok zdjBdTz5a+Ft$jxS@bn?l>Z^z9A246QMh(yCA08nJ!cNvcAaM`<0|p_ZPx#6O8s1*? z4=6`Dlx9!-EFa#E)_;_CR?8LQ&eRa+WxgWy>MlOQm+=&9|Z+yWtmFD7T zP4%y!R7k(2h7J!dO}CgedzYX7^}K%d|LywiMH_gS_51mGx$7s7!!f>i-;~&+w{I4ryI4RlxBw5gJF0$`37Wmq?J8PfU zkZqXN;jeXR$#&12zxKYN*6uMN|4qw0x+c3yl7xp?B4; z;RjnsExH!7XQwgzn`}sLMBT6R@MR|LVdg4csu8DHhsQ$H&`sUGC;QaV(9t?6Xrvq7 z?Vl#+&RQnC^tW6_F7A#OUp&le{Ri!lb0L0(o=lgTeCRk1eLy4r_50;l$0BxUM3c*c zi)$Z_x^EeO>{?WTZ^lnjZ~jsN6Q-lUH+c{56?&D{@e$cYD+gPxLycMFD^D^xYVvrg z8``L02BVv1>KGFt#-WYg&--5yFRtbQx#RUM9IT)B*GOMF|7^hzkfqm#KJ-`I;*A;5 z=4$|D#xc=5j#qdN^lCYLz}pi5-Vob&)e82*zBc2og?*+CRoEWyZX=hv+{Ml(%PUpd&avv^GY|D z`?Z2`$1|@q2^X1HW?FX2*tXI8<2gBFFXJ_SW@y^hVJ$yF2DijU&>qgrn9pu|O1n`m zN0#B10)8pf&o9Z#WQ@FL&-Lf)$ovt7Fb`CX6*y@>#8q6IAy%Hb`PNz|zo~c52kj_$ zwrJ>>JY=?uy4xj>_nYSWb&VN)vh~F9etzZT9Q)kHg(I=;1-wc}`nhp^Fc^(94w6mA z7}?~J2p={3Y05@F(=Po?o6*m-HSZmupTXH*{L217Kl5K%`Q(ksbldPNs5%xvgu1=m z)3k`jc83Kg@GLyYVy!8_#;W)gKZrGiJySjx__)63VAqrZW`m|gtX{jic|=nt=>Wxn zeuytuYHAOBw+vbxy?3j&`*-%fha1hF@d!Wte7uu0r`35GE_EAw|HO>#p+mNZeeC_C zWP2#V_ORdB9#H6XT5C^82b$`~+qHMd_QlSupbDgH%|rcJ>Hud0V$tjp*tKgm;IL%v zGiFJ1w50(u%?Ea~tbI3tw20elVqJVAFS$7V`A`PrNGc+|g>}cVhExAv8+)_-?=}SB@FycPLR_Og6mJLdRnKo7H_xe&b zkSaYcg6ZpCG#Yc-BECk$S4nhx@7Vgn$611{hfz*+dlBbo1*Np;_NtCr4qi(I#~!ty z(YkbdQ$9f#(Z6(i|9aGd($jQ%-#cnKqrmC*QlFsUp+<1z$^B16@*8-We`PE|hT`?(r}sejF$m2bzY(5vfMv@Uzdj z9JJx_ka$TOaU^BG)TG05rPQu*|BkbbZ)Qx*$v1q`K7;r#28Jo|`$xw9j3WcgxRJ%I zRloBQA4B64w+Qh^KFQDF5I;jeH!M7_-{9D>@HF{1oFro-SU)starCj?O0W0rQ=Pxh z!FpK!4Aw6^L*Teu_zvxPRlENAKF|1_+!~@2fzfewNHsi6_Z;1n93v}FKb-&r@J`0_ zLBR_-_HM~ja`mYbpLJ{2)yFmmd++n^lHx%+^J!**I;@t7To@l}L+_8eR2@opQu_5} zVr7P5yI&^vgOJh5^k}aQA4{k80ng0#$Z4kJsLGPWb4m{z?tqUx8aVI`QWu2CBr44l zDRxL8IwRz>$#(OU^1Zz&JqIcR|D$rBSHUeh;F2L;Eff*+nd@I(?%i~+VONI8l^8A2 zMlZbG@GAcsccc1+;#OY#leh=D>e%8O!X4rqt{J_Q#i^TTwsfCo{@<_QRjG?h60@HlgWm<$e?c`bb{p!3Tm zfKI`y#!)3vqgU)*;g^+{wdnsL?p@%cs;h8?bCMZ2 zLnasn6$LddEtiU|m7Z^>_cDpC7}V$3A)#3WTBs-oCt0XO0|_2y*C@6T7Ae+FtW+)n|(+p!kbqbQ}<> zp&~;Ui20(fh6%xT1447k6E#s{)sY8&Im|)YPq;X-y-`kT`$YaI)%)e&xKeAKDIdgcaLJ}U z-*$<&IgznU&Nthmazp#bgdIGr1ek7X^+ww-Drs5-8-mhe1qCS89_c;X18+19m_lp<-1U_o6} zJggYs#B2JL2SBZnYZTUNMOYgtj(OJIbIy`)`fH+hXVnl6)mu(!2M6U{HV#C};?Puu zgVFL@PL<79<+>gJ`Edj7*d{5sCEn;b()>y6qhJKDcM1n7`)HBya|x~W!PC#-Cgl&5 zwD$s`Z?k<~>E9V{WgAr<1?-}ztF~!WOfHXueL~tQpYoW(NKwzGJH<1BvJb{02JR0NH@AUijdv-oQeJjW8@EFL26Tw##{|6Me06Zyr* zfq!BeensTd1XMe8tOp+nnSSoxt@^MOZ=>QpcR%rWn5+u%Qr12(4%)$D>?Dz3u^~dI zf{`Pj=4AeJ3d#J)2p8MT7ldC1MSd#!bb;c(pYfB{*g{VwZMsSRyD`&di{AEm_;1c1 zj>~_aRCq#ws}TU;y&pGL*aF=4-={w)gkeL}!aaJ}E~Ad&#VuvWSlX7_CnWW3(@e46 zNYL05Drl_7YW|CCQ*GK!jNnX0&WnC ze{zH^zUDJ4H#Fo5MpdW`%V%!i9pau6I7rM)9ba@{!+hfmY#@3!vDz}YSpuO9?jZnj zr92$Oti8BQ*299oY8BwewozY@6_Ivf)ya z!kOXHzEJ##M3SlSr7mlE5u+h}f~(lm|B{UI$u;f@Iw6i^Gguprl9++h*a(LVhf6;U zMc(1@x=?a+0s`elgF?$>bHX?O0WnzlH8%GZiV?DyiK4s)a`W_?V*5lk{iTXn7M~JP z_|GpmzB$d7|1$RzlEzGle1zuO5^|%&N{EC!p9>XI+vr_ze390UXGf$}I^bW7waK}X zme?ew^>Q9F0x34N4odzMT9mCEEguLapU}jl1ZHJoN-CLaC@&;bbkpsMhG+4Uc1S3H zgv8Eo$|PN4Sq(yhj)`SWYL<>%c>Ci*g)QDTflbIaty~r{h%(fieeUR%4Elzc z)+F^_hNgyvxxEoCa8T@23(^P@=5}7lypA;H*Wp77N5_XE!Q|$K1!8X9{>oZdlmv1A zYQE5{*18Kcro+b^`44`SvPZr!IG(jrc+zXaldwlp(+y5dKeh)%a(;cjk(E*OtB=x= z$uf%eV#6rPV&m|m6K{NgPzDTTS8^zSbekH=mHecKlCEOMlMNEdwdRE{F{VG`Fw7H- zsVycr!hZa0`S=Se)hn8?CI(!5DvniYYogbdonZ1h{#@+0?B{d#qi_T-`%x;Avo|8Ni+TK>lzwpH@n9p$ za^Lw)(?$D42`)3t54o2#7q5y$B%W4ze-ICdEfL*;yAo5PQiZ{TgwJ`uEfNtY(*V4x z!az9Ez^hV1RgWr^8O55=nm3{mu zhz`mLRgIW5PjqHiMYh&z@>R+{k+z<6TWa+ri>O#n_DdUP?g;f+Ud3>+o=9b)t(~+j zWjG#9{8Q}2Ch@NLO5|?4|_C(r-F>dAVUpDkR)d{YgM+vR}G>8uteG6 zPN&55e`8Nz{_7&PA@5}pL`SN6#e^%;R+kaqQdXB!^~Cdm=y(1z6zR+(sA^<=PhW1(_jc2qldT|Z3raHb znog@vIrK3aVol@rc9pk%hqC?E3>5>@t4}a|&Cd%?($i29l)K*mM}PZ{vdvWFH(jM@ z9;40cji>SAP5T88vDa`^)$2`v3z}~SqTl;ZmhL`EV6wU47BSiMP^K?e>CM2dwcJYo zr54A&aN_xD?{B&`34zu+3*8uL_Hq7J;|g?Xt>Sy(ZmkhxO9s;lZx?$hxL`{Y5e!@q zELF2Qy_;#$3p8%-;J8sjCpf(wJ0R)w%&p=;Cwqf=-D=s3r;galwbl+7O;-+*n4->( zSRe%+S9A8ytPV;S!m&r0t=1gM_KNVV-75h@A$Ebtp$gZ@lanm>^ig(hsd#MJxz)6~ z#ypylpNS{k{7IJwbaHjFld8AU$+hWD-mux}9 z;plgrk6iXgIv;(Lyujl=nKs6vINESO1XO5a}D10|s;@hS;T`N@r9Cnd_|zPq)SKS?N}WFZN@>o~T>iuYgNVu~l$lY-$zv!3UxusW**Rza52Qe5RKdynk1 zRg0-|T=pKsik9>h$*-)Z$K78JaRO8?x-W@~SX`}dDY%-j=zc6&X|`H-LaV8qPK}70 zM2A$sKahQQi5*&!W8_(->a!YTSk#`Et=q(kXG50CD+GAS?VcnDV~18Q32+jI7U(ge zqtdPu8-FrB>A~^$4}MR7kZ)8*^{|uaJ|w3R?jVDib=Cb4jvaor-MUQOu=lZ+P!T^a zf+z=qMJLPMO#bTlo5$Y*{uUe2=ax&){?Ba1FGmdM#9mka~LtkrMOB%M7 zvJIQwG6bmvN}1R{2LH+d!Jhs)C66T}7^2%U1koPVe7BX47|0O}^CW^qy`74bn|izd zCG~c3>g{9lEz%~ScU#@|+Xbn&N3nxC#~5^5PpY@(atf25Dms4wtJ2N0&LfM-m@al4 zMaMD|s_8Jsm8x1vsbC+O#&j?zk+sqRrxXUHl7mWvx2P)lh$xzjk9-H~Hwzkd_Epau zl;CR2and?!_emI;I9f+Yh0*zp(|pEh{!A)BJY>>y*a^G65y6sqE{{{qqI#)f)1Orp zWkx64 zcueX)n`^{5aLeCV&Oro_(~FIl*avyUrh?sTYYhntgqhf3fhlHEW@SyL%@ilGs~j|c zg?`GM+{I?EVV?b)8yUdTvwtc-@lV}PiEe7GdzeYcTCR*Pwtl-TYUl+YnHQJ&`{ zQw4A`{~9~cLux8jF@tKAdoskR-o+7p6aNM1%%y(v_0-B?7^68*H4m`hY1U<8`io4d z?H8UVL+GbJJV_mzqVQqQqR0;lspk_pRpZ7w;Ys7L_p5Y3tY<1C5QA+e1qz{w>|>l* zhGC!fsSz)U)6fZmxs@KNPL)Yh8SY&2(dkAe3t~kWkN}tWoxPbvQ&%R&%#3g@)Gks?mzMYK$g?hn{ z>658EMrLo_rx{cEC);FXN6e7#BkRb5u(OF^nX@OU`eZD8JMlmfSTf==Rm2$)NPHkZ z)M~kj9B`7P1+_;8g1v3zBs6<^?|J6AM6zcC=sTTX?#?Aj%O&nJtR$dwkgTJ}t0Oe!zIhvLPp;av3oY+BzTld(*MzzaA!k)=|Op1HPA>UO8Hi6ZAD=&Hmg zP@b%pVzfJEX^9eVNG6q3!Z4|0)ByO>unC3*z5%XW5)y~ay(+oP@KAK5^4~tg99x6% zmt`E=0`OX$7%OUjBH9Dv+W?)V!>8mlaU}CoAePS zvZT9Lhgg1*F2)WugIQ6xjgt#i;eNphs~m@TplE>;P)xSdaI_>GorlSmR8=&;9~+}c z*hd)jJh^xc_X?>=#|&l33HiRJtsv8^1WpR77Rb1#bux8=p2I%}%3~5d3es*QAL&7R z#Dq)3-c{EfOuUmsK}ZBVQi>}3RmjZYgd}9LXwFVi@O-b=|J5NrhD#YW9HO*y!Pxvz zSPiE+r3lF?5+f=sC(YQB^PTZZp5HUk5fUzv$@=?48I$#$Er8TX9a2jM50gs*pyjbM z1v2=h%CU+K*ICFvI6F13x~-o|h33-2)Z6DlYf5rhq~0pFX@_rqjW$xDt2e5*DJYzd zWcEkN!%5MHVOG)vV#U>k))+o!IPhsox>+*CLiw@j#a50~>Lk(~IMG3`jNgsabDTCa z`6ug`UE{?Nqa5FUK!?u9m4*Kg#A5@>Cb6ztM%Sy zU=^x6xBg|}eqaVt>_p0A)!!yB702kDB9l2q1DPX|xjq+K|H>!AK}croaH7EkDeI5S z&9JXBuW=|TaYQ~5=EeHXqWaTXSyb(#2b2b6m#-`gPt-HY+X=hWaa;1$t%JWxLzteg z4!w|B9AO|tdmmT_HVp5&TkPZa(8)uOOgVRjtqOqTSr z0e>X@5;_nW7mJYD^0c3#S9PqLo8oUMhlL_AQs8g$#vmn^O3x@c#9&_Mz_b`JWdPxq zbH3a#vPcJioWlJM$;px{h26(A{^3C6mh{A?7F(zO6YMj&MC1bwoUi;mF(ET51Gz-{ zdyX1G#2x}biCQ|FFL(Uf8F&<9F%q6*7>wXo?f0=$0oS4f{AxzZ%8E>O7^s{bjpmt1 zRqC9%eyEA#6AI-(H`+Bxa@Uin&EtgZmR&+<5c~Fz#ZPt+t1mf%^O_3$t6Y9<)rQ_@ zdGADtc_h8y{8?&q0|(nF%Pqyqcg2>vQt@KuIN|U{>3Su<_&OJU9b=!8NX)UN5{mbl zli%qjwZ9fdTVfrwX`=q?H~Vf->P&1(q#Tn&*!ihjAmc=3)a0|YZC%}G6|Gl z41asny7f!%&!oo$m&r;a$CIatmn*@qT5r?%)u$he- zdDB2_{n5r&nm$A3*KB-kI2KS66&U#CJZI(AP*uG4?&-CW3|5UwA?~xy8z%b(!Ac8(B;lndeHU%rZv_VNJjf z7vhvQt>q@($_Z7*v!1)4@Af2Z3yILXTXd# zTgKpSZxU(Q)(Bt@nfK(010m7aICrH`{PZu-i1!4Ie0I3NK}@#w+a1r*cd(9?wA(s! zi1dD0vDiE?3O{h1#?C!%k51U3CoV{LXcBFaF|<%@<*nVy?RUF(UKmvy-V9P@EV|f< zETNTbMd(XnH{rNmwB%HIM@D&qv{?NDk{nmp!Z>{r4B6-Q$qXKi-)poqJ!& z#85wUnQHMLoE9Vh_bqxeS{zM_sW#kB8|Myc19^P$-<{>h>Dtp0I_pf!M_(2S!?z0$ zvX|J%Qr1CP1TldoYD?gFEC$H~KvVJ^R+=56$)@v1iwzVriIR1(7Fv3XjKOg@*vwp+ z@!i(L2mXKHV2{s9_pSS-FGdB&;b4|0NxLp~YC%^|}1^Cr_pvPfJ=cs4Xq5LZHGj#h3pa|!<+UHUU)g>RK7{4M*NuCtd7 z;rGtcabnh$A~snU ze^(i~XF!h;N=epQt|f=EU+O*6?IceJ&n#x7d_|;{bA;3G5+_O3fb8qqeG)5a-M?0p zh-y~SjE=hN%i(BZs^EEgjpU4xJbjI5p)440f@EuVtRuhaH&R95>Z=d56VUR5yPV+ zc-ymIX+8t!8H?+6M(i=~!_t}Nzt$=8%>8=Eq3Kr1bdY8cLe*O^KZ2WNfPV9v4$^-!0?=0{LEl=D3HsuHI1$!w`Rq$#{bqQ^3s(1< zL7<;=GSIIW2>QS8bwD2m=qY*`Jpl6O=AH=h-;kVxx%b8C<<~xeyl61w->x|c(wDQU zW+2_#<3N4~N$gUP-}LoNoadYn@_l5T_)?JfGL>GiX00BC^GC3toRHEtun=ZIJ}wFQ z<@u0H2~j3$1^B10Wr801&WVtI>6Zn4oC5vfRf9l3P<;~6^9O?7u-ifUC4_IJK`$79 z^#{IvBG4NTe@U!2zy)5g-u~kt&?lS>bdfePu)gLE2lPvSBf_3NNv-U)q6{1(cb(8W za(+_8lQo0||K;B&7kni`H*BQ3)GFRO=R}B@-=B#H=RA(G&#{W%#>{-d`pX}VBd@yZ z&p>!NR$2sPPo|i7!9bAPy9O;cZ-h=v4??Pj_0>0|m+C;AOD-3pt?5b>8C;3Di86t# zguwZqZ6a{~(ko&hGG}4PTv~$6dGortEART7o~3`JXMM)s){ph9e>d z-d;251ooP+mA2RPbB0yYUbEG@P3(Xtx7VDgM@cmSqj8pL$(mGEKb3BqW#uE5)nBff-$jm1$+Fizd;lP86GqDv@0D2p~Y)!2ol&7 z`DCQhdtamsYVW?EI)QWuspT6bvcxa{80lR9D#w3;k}uWVF0($q=_D#+xApGdm_(6J zUD~~46&#Ww{)V)kn=+A3;W@T=Te}!4Cem4hn81hwL(+;@xApz?&n41QGSkHR{(~-r zNjXjTre{Q$lxH*V6KRr|Dv3`>Y*;?2Ou;??3g5v+L?-53rkr;fKyX?(c1SXC&LCb3 z0r?<%7dGUSD*>7O2zG9Mk&yA1bz84LFM~Cp;s_RChg;A+r*Ge&Z`#d+xW$N@2lVYh z>RKsIhD`lqpq_mq1?2H^VO{4vu~uoN_p7lMKCz7K9fTGOG2D8KO(k-ou^h*dJlio9 zc;JwbII>afqu1owL{;8?(r^Gf9x&;OWjK{T_`JwOLR!0Mx zW+cFZp4yMn(?k4o>U#nqbGs&-mz6GV$2ka3v;C>YoWuACIYn7(k$8qkVx-pcdoG^x z@Q;|8%B)A1x+EP6o;JTkE8xB>WM@Pa-%Au1TC}!Uf-hc;Bt|TnO3KJlpFNu(Pwkq< zoJu=SE#XL#k0`5etXv5%=sRDoM4?6@<4WAFeH_3uS=OFBVx*&TDzJS{EBenY^QzIR#`1DzFyXfXa%m11yUF*TL5G(rmHnjLR>43OIi3GZBY;M-_ z3YYd!N22I~ukvnt`rS0%X{!pYk$*(1f12mX@C}*JW!85da3TDQfyx|l0Ywuz!F7u^0>_UX9eeo zN0N`1&~_j6cTHg*5yeGQ3xs)(FnMi_TqVnQ(YvSZhr+wWx??0Re3ELEq30EF_$Ge| z{!Rx|e*V70-`eB+nLPV<{+@E)B}rJ2sj%qyfn_`*6Z4xm;1zXCu$HuGTaoLw&O)Wc-W_OD&v@TRi|*7xT9E)H=^eUq*zeJ$9Dcz0hQYCD-lK*~qg7V`}P=0PQ6kQ=D1%NwQ z{P?fmVoQY$Un-P+;P>m21z0(XQ-cGL7}*$7MMUHc zKHZR`dZXepDN$@YvjAZv{yy#{uMPIuzezuw_z2cR7K|SaWva{Sxzp&>B}h6;d~cn$H4hfGwB1%>G|!wuh|MfVt;m3Aa^=OWEMdJ=!5I(_o6oxWtV_1cdSwbgRR5WZwY8vuZ%ZE3OfO{#Drgw^`y zmqo1>yy610UjET@2^*ipyB227Vh0~i@F)mY@uTqQZ)_9KC0zb|7&n6^>!%$MJ7Cg^ zJYd^Km0ASLq<%YK8r`VrR1pOQ4(9z#0fs2O5E~T@-}{SB4@JQfDPog|Ly#=Y>YE!f zYpGGiI^#)sPweBRy@tn}u|+Gt8S&T7nQ_^~$F3cJ}o7+zMWuU~@vm_d(pCwEs_%3tPJod$PJ zMbceS5D+fU|ACrCcq*AQK-giQ*(>2gdE!W_P)iZPq1AO{;iK5po2I;K9 zu)iHjNWNU^RRQ@(pQ+<6WlI?6S1T7nJD2_E$_DlJ5)pUD|A(+!8h7A%a7hv#rz`5G zQ!fw^3z?P~Do+n51b?P}HW_7yc-wcN3pDt6Nq&yL;JQ`i%RWowpm9p_vS><)N8?k~Fa$b7h zB~`J4Va$y}^(_};kNxnqUkj3Yj41nn*9FY!-l?&I2l*NXLq~#iBq$dbav>z?H(wE@ z-NS?nM5m8Y@!eH~-InOswl6xmO}+@YHwB{A#bAwel=YlxbSq52yE?F5v?oYPoyhMfE>moQ5U3GrDCAT~S16X#e06NXKg$8RxnbYO4cA8Y zYP$Jh=?6LkK3Ds`cyx2;Y75%geZE{;j8%T7N7@TN)U{nJ=T*SB zp?*6JH%t(paM0Xr#P?uTDkCprSY>0WKc z2vj9?2%OAfL&6ZF6#-w>*hSMEco<^nOh$fs2i9 zl^%edG{W3tvwcgw^*b47u{(Go?f8Ds~(=Sr%*HbcC6GbyF6h?s|x9Ec`8rY9l z(0Ox(deZ}6OcZ^EYv=I=&g0mKJ$#TT%I7{&^j}gy2$=Jly(wl#`*wQ)Q}>kb(#>`< zlg6zP+T)dZ<~3tTMgEg@4Z{e~*Asd{UqNY4fVq0jm;g`AYdml%@&zZ?zx~9;M z=T3C!@!fgxy@Z@!Q>e4KJCM&e99E}~u|KH)iyqN)5>0rjH(FQXV@gT~3S&ulLU2k% z83JF~TnNRZR^CP6lX*CPKvNmyqDwp?YTQoaSVSQ78piz4AtvU*?fZ0d%*xnQ$SkJ~ zYKT?4m}CpjuQAJ4>am>SZI;=iPn>YCu1#*&Ccla=E>=Z}_CX<<3CY8yql&r9HQb@Z(k4_yEj863kXAvxy zhKLbX_MDFRo;;nuP?QI&vh%xCF^W4y>;DpxnZG$f-y>C?MAPu{7emM(`1A*&TH!lv z#)IWAnjsG?S_VE_H)|PqUHeH#{qWMB(k?w(JI0LbQNQO(1qgUH3e)}N99qVj5wD3F zGTg)Rw@F#~N|mpFUB@P&no|D+%o{y5Cewbq9^W?tyw>I+LXHeTB6`AK5RU1^eOH>- z6w5`h^wmK0Mo(od=M+7f3m{S3^xUVb#GG!9w1tT>I|6ZenwnhJo=JB7pXNO*adJrQ2kz7?a`ln4C8d z^pPh8*stI{*?44-ilUbkKV&_@U?tekYzQa%nB#(m77NArr&~TAzoQ%t|vJ?V?aQ9BVn155CIQ1@;s($U%8{9{AduhVoQyQ}Wh9?Qy*zZk@vFToucS#x1s*Mf&{< zM|QgWbQCdJe%3|x9Gf!17ZTnz#fD%x@f>g#05ZQgg4lC4$;%``D*QxA zh5mrKHF_tXy*%+w@51o|2Y`_Je?Vl*$6; z?qJIiyGdlDYCEF{M5eIhSz3y^6sEicv(TUSH;H+i{5UR)81js1B@u;kdBt^)u8f)1PlD*-D&g*>U>|Xe^odAP{t%=NXS9f z^RigMa&xFG?-lXhY&~j>iRG*>qY`G$2o}sSvS>o@#p`%yU)c1m>`f|vtQ`05nT~f0 z3xx#2a{gN#>X~)PuC)o0=nEAhGqGuoZKiq1ePxNF!Q#|dRgc%R^zun zusRVvf-M}_%)T6XUh6zRfKjJ6!n3fsl`M3B%Aqam2P{v{y|SQ4Yje}jhz^h{Jl6T> zq-x&<=QGUOmk7k_`kmVya%=WWXuSwe=1B4xxUbUPFGNR5Cc{`wnbrEvr;rT!m91I0 zGgpE)U5-MP2S0>2+E<0JeYx^jt2p02C|P0ujr!6lbOHj(3}%`7@JVW7W|}pV%u&_JlM)Rt@sC|CCjUBRgv*p`@Hk_Rvs#H`*Hk zd%V0&EP*BvS5b;09A3inU|AsQZA%0vg(3%F-HRY|7?OR+whhelS5c`N0fkwyo>?B2 zDTYBdh|3VD7lLAIC@;#}Ki3J=iWH$jAsHwUS%|^f7irI};m{s)r`Z*V8LnV7FUYLL z*QTwS#9d)9M%b{K&B8z06;uUsydk!*#`g|&eQ&#J%|w!RkS?s({7*Ov5}CG2ce)R;x&im1e$m zK*~hRJFDcd$}Ab*xA=`+&BNQhwQDX6J&2G&Uh+eG#40eabknxpKy1=*J$@it=Tszh zK9gDC)t`eDIiOB~TN9hxFR*H>Ca?($gF%6L6pvNpU6(K3bVDp>7_dhAg(Rx-JbboB z{xQ2Uz<*xA_bTu$8+_7-q`}`}UEgSfUq%@U7|~J`MAN=PJE+}CNaH5&Q3Ttg=m@a3FpOinOSwr(*p8(Jr^Lx@@^yU`^jI)^IgD*YJ&8&9p}HP=;|7Ed@-Z!gX|=gS7mZ zE9~`0=Ia8xz8}9Y^Yx(aTi-ONd{_B?Qk3E^=RMgOq~$$Si#NMzxVd@zZns4esl7N} zUneobMd|e*u{p&7O0368MlWBuwMXAzr{9~goJ#}lgANo`u}NPsCl{F0@{)uw*&&3< z$0G!GOJm#Xvd;Rk(D4qw6tOo&#H3x=Y}M2YA&j&xq6`I$=s7|NLxc<_Lk0)1b=wGN z%>@n8s|D86r}f%+E3qEFLbiWOAdL*I6TDp!G8_EK0PcZj&&v`b>xaE`h`i&04cHs= zY)0^jVgv_a1ffpZ@tpYF{9s7P9Gb}uMymTvUJ&0alRqj26(3P7z_(Q9e|K{Buxk~r zswU8zKN7s1VE*6f%zr5}VE+FaM9Ad#n+GsS!QUZZ+4NI%y-@XUU5$B(&TR({z0sGw z?SM?}>eOIi~;l6+KXS!f=Bz>qSh=s4f|A%-&J7E7ZV<|GizCk9@%P}E_e!d(qi7*OxTX}cbc;8DIg?FEg_p!oD4S1=&zS@x9eX28i zJl40qo}4{`$j>)>QuBxNfRw-{<00W@_VoFH>7%j$e!=MzkXbP#J$(XErVsbWOdnP5 z^UR+AxL*+FEI$KQ&n?y~-?I_+q?C!4W~`nsf(ThDQFxN$XAZGhfDMv}1ChkCrpvH7 z+4BqCC&{_$+pEh)#<~2 z%BVrNm(b(_DneByL?|}k^kie*6j@&UTps-vmQLo{p!qe3DI!eoR;N3>k4J<$_k$p7 zC$h52_BE~0+LF5VSn%%%B~brUyi+b)&m%1=d; z{bs??){RIO^1kQLi(071`iMeCY*~)*jiy}zx~R*pe$yQ+?PUCW^td&2`QBxE+h}2? zJ-m=R9=3u0*wu)iZh1c7q5F6bb9fkN%W(x;IJx0Ix<|G!u(aL!5RtQQiP|}tBag{t zwm?boEST4)yrWyKS*eE}eT@?Ckq71u5gh=V$n|9+9&pSpxALK1x3h`x@O(a`RYIs@ z*CWlcL$gq|v(?JujdBnQhfL*EVkqsAW1G32Vv~c$FU=n#e_cSVU>HS)8GgidHv8cla@LRXkIOguUTZiN zyqTkamRPraZzAsgAaZzUeXlvCfNUQKV+tcv9ARuqo`-rIsoeUP`y|BdAVt9^F;Az9 z0LFN3pC=g6tpDOYFT>HV%c3#V-!{ROm{Q<-tsePXIj8_9Kmk2g!|WRhPJ}RP?KyY5 zccwGJ^tKtfaug*KQBBL_M66*VstKAo5o?%;$3A2t4wZ@MNcOktH>w|I*%?Dv~kB;q(&=aqDQ$cLfYeMjB*woDfLiQW2NvJwsiMid9Ov$yEjUpcE_a`gc{BY;Wn?c-fLZ(&_%U_tp11V5FM`*GDhEK z`Y}hjw>6P6>rSK;``seuTv8KRY;D|4NqOP1#_^F{)mbe(AoWk!^~H#X1GG%-OL$l5m%ftqL&_tBwY1hQ%52=^ems%+3^Gl z%*WnIBubAa)|s1CsqOFhjy8}8r;#S5Br`@8Yo!>9%egBPn{jY$-o7ug*QNM~{d$Nc zubcLUBF`&EBGafuYrPu8*#%yr@2&09i#)hoTu0+orp?40@Z>*^;!en+xapu&SYCQwXeDzH|F%AOM?EO0ibJBKS_MeQI7-W@bIM2_Uue=l<7 zFGtF>_;!t{nJ+OdByr0JL?iLL?SF4ZbO(Iv8_s8QeR4)@VMZ_^`n74DlCvW@Aw=ii zY}K<$>JyvhHQ`@aTSZ6O*9_zc%k_>^zxpiN&uWq^gwT*p-mq(Gq9&-}`{Y))>FM(=SVxeML^XxE6*vVNmw z!ZTzAM|Rd$yZ`{KTDp59aV)lV(KaP1>!P)9x!}Z6d|9%@awI~O=UX;TKHiLGA} z47iL%+^jB$bT-dj>DN{rh#wf@U;g$t{Mq|~@2BnlZ1jLUUsqF=n@FAG8LzB`QfDZZj@=*JIzb+q~C#A1y~*bi@YAlkVe3eb=0%FXx<~FEgBa#|`X@zipBdNFp0@ zY|Gbk&i)aPtj2Y=@Gj;rTOgJt8G(4cEW9a!IJFQDkced=K1L#zh4|QqNr_l3#3jna zmJtQ3_>Baas&G*A#zNVs;cML`dM?3WhYhm$T2p=}(tE&rh5dXYl8$kz746yLwpnA3G>Y&+!CWdpK z*ruLf+i15=el!ywW^ZAzt-!g9@5{sK;zE586bRa-nLP1t6b_8%(c31u_1JXY57Q&- zum=ac&cy)B2cH`F!WLF(eYm@-1z;|N8Y2-5q2Q-RR8)b;D?TBcl$ z_IR9Uz?6Y&=FkQ&Safa%d3~ z2XBhJZR9Q1zq7(TPX`ljsZlQvxrm6*mePW22#k?L@JnMo1MU z2+y)F4^PsZXP9@+oQkbGWO6WXKe??X4##)T0z;d84~K7TY`oPlZ&}RQNDF;y{K64^ zI}ELIhv9ppAk(lk?N5%dQ)kaCM^bH=vtgc8*=R8g_txxgr$N1jh zAMn)A(^}}IPJ)(4CW?MX+EG%D*V(mJLkq7^gF--O73bPWTd6szE)}b=C#YXJ_+}D- zdee|p0IDHIA?e$_tU_VvmI2UOmT*JrV=c0P3+as3I+rW6BOJ?-{vk~1o=S5PJ5nZc zJ}R#yA4p3j7f}Q*eWu`!913s^Db24RnFfYoV2#Sji%!nbR$ZN|t(uZEmvE!G`CW6P z)AD#Ult)9-kB0MT7?1MOj|zCiRGuGL!w9O&?~3oGvMB}mJra2|EYe;J z3z{I;xsg5RMs{mxDq|A_z9DGvrp)Y!Tlrj+$VF~sFGarLevt=WxTz;mv{bMjolG#y zlv8NyRMiGIqmmbe>LNO=n1`oP;&g)tMn1trQ;O1;qn%45I?Y2+_Bh_2N#V27CC*4+ z7N-lBQ0PJmd(&Mm<5nJDoP^+_AU^BoO+H8m4XJ`I#!& zi_nzqA5fE0hj1Y*LkNszhRsqJJlTel--%~WW4=^J*aRALAMdjmq=wo zo#jC35l=1WS)!rzBhEOaA~CH6`Q)2&$Bt0C!kH)6f@RxwJ1Bs6S$(QDW5&Vp+pB?)^FjTrrbd38+~xf zF521|DBT%E8NV!yHt{on=BRirbTAflX`vR?7law7SH2C}0~2A&oE|U#nj8A2IG!~J zo>1a>4*NKt!#+aIWTDT>T67-TgM`Rk>clB<9LSW42_;R3Ld{2{z``@uNL`Gqk&)YZ z*18(=J&BbxKNekAbYS7DMBQzZ1tH8n3`U+%B4NcFLVt2eM1hCZW^^+f9zn+s&NgB< z!7eMu=w>4RZeEDL{Qhu$e~s@mZN(qd=%N{yaX}$iRQ-8;b?vz!m{9zky!?YaJtv&s zLuhS{`<1YJdyQ{BC+<+Z`E60)8!rf%$^y0UI`+%i5Vp4K=2q>YINN+?_xdRmG+!rQ zVF)jEP3Z@UUO1mMdy4j4&S_@XSRKK3(iyR9Jld3PL>GAU<(AHo>}TlOl(?@$Yn4MD zk#-rk0BNY#gGZ;G&=>B4c3-*-kQ{$cH zhTiMYU~B~RnL+bqn%WmG-IbN7Kzq*p_xjhJV`6KAzkB(c%A@{w;O%)f#^x ztI2;8r)HGyM!LD{$QV*NJa0r>yk)#$Q(?gTK##u%C*G+adRdRWgHMPyjY#4&ZN+!t zNk(jS79M$y+Gzb)Uz;T#Y12M}XVr>rfmMRgrQH}DW8Sr^aNYm7wgG*0F;l>9HSc^U9J{PxxFlPRi>_*57$=b4rv^wBaKA%xt6>@ z1xqFzv|OXsb~9fr#^<%_^O^SN{>;zcg}a0h zqWH9yKSO=a7R#A65E#P>?bVoBj3vaUwaQitgO`SxHF18ScJEKQxBZ=w#5irm&$-oB z8EC_`ZW*&}+z`^FE@bOO{=@ut5w$x{xEr0mJTs8Lktb(JIs39WeOaI& z%uj+kTwOE`3nE#zZWUI5;&Upq0>dYFxH{3iBss7i>F4S(u7KnMsy|g8B{Vm$Kjw58S=;2!EufvT@p5LoN3Gn5fnVe%L=-n#+>7iUBd}y zzftF&Zu^8~cCprWBjg!~6|lB3;B#KAnS)h>b14EMOyjZ%Q;JaQ`@PF~pJ`tWs(>tx zebHild|P7@dOMj=Gc868Hvm_A#_tN5rv}HfM<(a7fLYM2n}Nr2!tPBqY)df5G$X>W zeaHPOze^B;;^Wke=B{cC|1|Ju-8i*A`;M9$v`S3y?c>7k_8MPT!&SsfQDzi^5TXxK zk+y1wHbrVWHT8&5LOPi8qJG7zA{50#iFJHh-^D*oL(1EINBeR~6MDs~+Jo)LEW^|g zm|cB2im~POuP%i7&pAx9J`L?he3}KAe)-hjt!z1h3fP^Z~(c zbNvSXN%w)5b{{4gW{Voy$*~E<8Or<}iFKPGo z@-CC!gt`c%*JAB_6EdemUTm6D)GxD>6Wz7Q!#Xo(6Gy@<;8qn9Bf6o!%k3WE~(l>JRS7q&s0@OarA zJ_oNyT$%oEfV&#C2@dI6*XXGDh-$K*Pno0**R6SK&T~=dm`_tLr2(lw!+)L0Ty57i zhgD&aeLrkIAJkP(WLKzqgR0LT%dWhg2^5 zpt;BF2x_aXkQ=Uhzp5(a#uO>hqVBE`J0R|x#K+)y9-rc01VQt()h*tc+{$FDo6D1# z@}!n0a#JfeVmOf-LvBPxksCkNRB+8D_6{Uqt|i?Am}&8rI5#DdssbazL*C_pZ@tNE zl@)dszhRD7v9V@06oz7Vj5B=iEu3Wd4q}2mX!t%76YR(Q*7xJ+C^lkCi*W-H@EtOz zRp<#~YNR5aiVXHZkz;_wI+QWBWMkp^@o^a5yE!qAn)0o;r^tbwXm7G!8*B>b=Qm4h zISQy@a}Gp=XxmU&9UD7VAi2tj9Cg|74TdL3_=>p|XhP!J%7Etgs@Dn{-5knWg8`Lh zFmHvm$9H4rUmtd(140q=^Q`GWBy3WKyoQrS?+&B7TUDV(V!9_| z92zghlH`FT${-wkNe`*1Bf?j7eu<(8ceTfQIp}g^CAOb662;(aC|pQr^0DA^thG&H zBHfFD@8r&S=6l$DF`0ft8%6q!Xr(7w$yBHu+nFsQ@!ZbJoLMRv5;LkpZ@YH*+(SEp zZIxp*QtZ^8xlwPc#1L)eE#EVm%VF|#CKmvJr)-RT4DKSbe z3b{CiH-+)uVtxpMBCHA(scq_LyHruK)M<7JdR%qH6#MS*#8X?vEU4WpgK0Dxo-O|GqSnc-Se1dz7Rpr)uqml$IX^f|^D zwI11SG%>@b+-MT|jmZ{;G?yzgRM?EMnib%_j|CCtsrpm0>T)(DQf=jF$bCp&+I>5D ziIqq<-@~eiiinx3x>j6SWN}kg;-MT%lbCLhZ9;1mEzxihA8@L+x*A0{fW2vT+~3yd z9jmBJnN8XP-i!GwH8(>zpk73b`0(uD73DX0G?Q-Hxe*$IuRcmq@Ge_lo2Dizzr> z+z}oz=*$)S(gbPXQu(4>0KpE^1eCTbFF#TA&YL+|=&+4!MRlL1kc@2}F~ITm!W6^- zQanNYma`=-CF=l!4M{1JnePYs3uHlqyu@Fy-@Y_hM)z`QyAF16Wrm8uRX!qnD|Rc} znNa1ybMpRf=s}zbVR$qLVc|MpJG8hC-jz24oC$B+Pi$ub3q3S-s^d%uu?;rqO!(J5 z|4*F>P$c^D4f+jh476)&Wku3DcuVgf>mW&(LfHAPe3pLU>kmhlpn&(YL(%#LVyw*2 zcGby0c-yE6WYyvxVo$Dk55?T{R{WyWj+xzYzijB~lKX^sU zH=+iv+(hGS{W)c2q>eHoxyU}``Udtrg03^-8Trs~?2k3IAs?~2Z^$l0ZOZG2zu1DB zhFZgbxi1?h4Ss+t4EKjd>8DLyikKvxPPNFdz-^%8DQhT1weB*I(fqt1M!)q|$vX?U zSJ~ipI?SA(WBFN35RvqMFXu*lElodYUQ#Giw((AaIn-=L6$@h;h1Eos)nzr#H73rg z#kU5VnFjNj@dhNtR4JnZFj7S)bNfHZL7ri92u2b`J9mpajx=44ubV`Ts2ycSbPDKe zZ@Nm%DmT;jq+`z(_#?~aWpUcIH1>{RPC?0-vY7T7r9GPI8wyz)S&gK^5c%DmoOFtY zlbih0JP!JSjX^*a;K{oBYe@n+``r`)c?5&XUaXrtfx!H#!C>6pgUNG?t6n+PV*Ji&qHj%hNmU2hjXo$Aw5$1deh4a zQiGAS?b%MXjHm!0Y~uY()rbnDDvm+?YkgbOL#eK0Jn46Ge{OQ6LT!BCAfpMuE4Lr_ zR-)+L*JMC?z;@#}*#ZpFVr7FP%yPACY%KO)u?1-{panKycnP$TD5E{>>#pa>&kje` zIyO>8Ot9aF$IH@CXw3OQSIvbn%KJWO8V=7K1%E5NWu3NK&k4jPC+6xd(kR5q%*ozr z5=RK=B@$m$CcEJ6$YDLUEIa7yxaaPWxn1o=55;CB_oMrc-VMWd&z+cEpP%TQ8zraj zx}3g3ZFP2HJ$E!XoD5hwn7JrUM_>Rdf~ zP0kXCRrRo2b|&IMINP@8Qm!DP`^Yngb0uQAmb@46y?D==fl_CGOK1-HuDWQdzzpF$ zXgUyxjXnj~$PcybkFrJFMrVo&)Ox`xzEcL`90r0A(cCE;3g89tsXvm<2eN+goD-qs zM;qk|#HMQ6DAGcX(((A}czks{zB(RX9gnZRKpWM(TqbdId?i0p-%#q~LtY;DBPsIy zdMTnWm}_V+tIy@(zwxlMxs6)#_^-2B+*fkNOxH$5ZlijBe!!2lo;VjpIZ0?K0-Pgp zSD$PBmX~JLY_qyfdo&(t&yH5tMXP2<`t#~9U&*xh8@?)|VMtq^k*M;==hx*$s%G~` zmd?h0U0v7kIyHf_vRS?7(Yp278T2gqgo7ytrC*YK9cnv43FcH4_NI(oM(n9ahzBx! zOUmr<8AZNAv8*xQ{SVT)vS2{LkWJ(WJ3zHnmui374?vyTD$T5&?f-baOKaHx{xLl* z$~JcrR{(L(yW27;5f z>di;R&Dk)ziuSI0_>8NwxVZnShtIk?tM4=e9Yx@n`0&|RXK``=L=S+#th7~|cAN;HOpNf~ z9Vu^Soob8*)j5+ox9vB4i_5eX&nl0pWP(sE$dS-JG`ReS;DnLYR;`@Mlu<#EiZ{_8 zlEdZ8F!-Ipt{IJZi)mU1r4>0`;kAIrHS(x0uZ z_zTsLa>w0G#w)#fPhuJLkI#clP#3Ce=0b57Wk@RLQcv*T?8p0m`rtp2h|wz3rhhRE^DtT|8|VsmGeLmS<(P zJ!CgT{gSG$yu*e@Z{96{z=s|1rp6%e)hix(FdGA1OZ6jURc9f2Q10=X(^}I%(m#6H zy9u}@H+_pp=4N;EVS!YO{5N;*YOj&lf^B-F-3o98+U{3yCBd?x;;G$LRb`^n?51zA zoYN!y?)qD?ypTz;{YbzaCjz&5uL3mYw-J>@5*R#F`WxAOu0h|7@-Cvdazo`CF*5?a z>cw=Y7xn`Iznc!Iy!w;T))X#<#g#lKm?}Nw`#`JuAlfjN(QPVdPN;sZxPFM3;AYL! zpA`v=Es0)2SI8KMQ#Pmt`#M`x1Pdt0N)B}NH(tm&D}X@Y4Vr&e0Yiu4Sy{uf8s|v- z;Z!Qp{9Jp187CS z%qa#Ea%kA};ya?-QBh+} zW+jrieQ+heJ#Hmh>-o?`MnzidC>}@}%O4O2U1M&RaM}YXTV_Y7bX_<$rr42}Rt;l4 zXvr7UA~?ASeqx-6pz5rDGc1C75bgfnReTt5Vw!^HK{lIFps_@BF?_SBvB(&L-iUmH z5m*tEQrZyQ%HU3net?P0y_^%KlG^@32 z0i%c)r#qCPaU=^yW=qZWJuXQyMYfyz6g8`IGlH?}stg6kUcXJah z)tj0@X!DWf+-fV{aw=qV-;sc8{tU95B-$j~r+m-C7-;h&uve9}8QDgps*F(iY63Z3 zJyyZ;HdmyoHgTes*uTT67<+#CY~sQMZ3NI!enyM11A|pDvUi!Rw0W`=>mWp*4`58?_t8aITlOOimf$02sz4qz}%Dxm8 z{9PpO`nf{|UlfV(N068?_(>${<`!4Aca1Rpi>piA)nn~YVp3>EtHv6!$iKtN4082e zZcd*Oz@MQQ#wS^KLGt$=ImC9u&GX|8U%h3op2ap*Uq{1;Lsf<70T{C0;BEPf;pp#e zoDg#Rs7Msn6#l^?K=MSpw%%0~bc)$(vt6(+Pl{)0|BP*GP;_FZ{Gu`s5sLV2FIzM= z9+FJtc`QwPCG~&@L8ft(se4QHnLd3i41nwceQsD-c;c`o?B&f5(}H3CxLy5lF#0B= z`S1(GrPUXN%|}=AH0<8j$0qAXA9>J?B#Xr|*7}UZtzn&j!Yabi`Rp*RUhpERk0VQK zIhiAFTwGlyNB|J6MU0urP~K0`&n3!mge z9ozTDzU#7~iO!!b8x+4fxE6D1ojHGY{6Jo0eSdUmonKq^ie0qfCFF0m#5ef$wPH>p zkf7;mHU3y4kR|HEv4$BN1cbx85`>`ZM_2ndI%&?t6&a7<;dx4Sv9gR@<7A>gh8`c}ewL%PHZzD=sC?-AX!_0&9EX0DzAtTy%HQ5E+P*{nucjtf z85IWzY9g$}+{PX?XxYefXxXNYi;mNy%&~PwW2Z#7k(rfoDptdb+MYSQ$Bakj_{!kQ z$WpHmjA|JCP-7CRNIZ{027UI+`b&?~-{gF^$9F(o3OZN?E-JPnWe%!J2X5+tF@t@>GAf>)-8FTj|Luj8MRQ?GW0NrDOiqhVl3 zBjayjq$7LHqmMlD$f3RJXWPC+NA#M}r0j|Jj*RSaMXQPR-xxof4ZFc97Kvvc+M~)$ zFV+#Ew0aT^f`e>@da_7nS?w2cVAMvE^(ukd83FuK3h|gMlBj224CuGVOFeXh(dxVS ztK+YczuTjxU^7}h&xqQHkJ=cCnl}E;hvl^?!V4v2jQA1pf}eKzv8jS~{QPm+Ta~h^ zT4xK0B7fNXUc%;IuA6?nJ|h%+)FS^JN6YmO<6|@T>8*~3p|yu4g?%?Q(fK=2l%h*n z;NGv9L(&-1JBPhwf`z)YQAGVjgYEKL8=kXIe(U5Pth2%8{H^5gVg8<&*y^W&#_-hG z7*Y4wy!VJj;JSFIiRw~+DMDCYu*lM0vkK5|HJlvLT&FkA731< zv<&~5wtBcECP)PC_Y=wp{77_b;cr<1-y!XRT(0!k6qhlli#~`)o@sa3v+S%&JWYO? z|871s67fnJ0|AFU_q<1HsbKjoTs&mZAYLXENo3zu8H!CgD%*KU{r+mKK+b*0D%~mH zn}LV?C_7?8G+Y6uQ`4N^}S0OatJ@T0yACwV#Egk@G= zK_pNR$d+R@0tNnXX=l^=fUu=L7zksMqy`dBKo7A8#F8vzVLJh!2J1WL!vkUuh^<)) zy`ZlV^NKZ%#{pmBu4;)JEfY^xpk~fi-OOWz$A)6pW@GvKVYqZ-5?*a}p&k6P)AHo}>E`_jG^-FGf(Cmc)lCgd_o22l-|DTJX=(LtPN>WiVn> z66yUa?(pb<3^>UP!bN{pL;hC@n%d2$LUr@Pv452&vCxEL|0unwasOGz!0zBvB0tO9 zg&;2zVj~QA1wB}yGY6u>B_7$_7AwdiyNSN7mn33|u6$fA;1?$jv9cZ6goYZCK3CIf z!;Hzq702An(V(vRd70Sy>|18toHCZeA5;D~kBXOQ{%cu*n*PshN;?>NQbWRp_f=M2 z{C&&?bx0%CKP{AIZG^QDXkG=c#&sxUm!c0;bFwM>b66;m1DZSFl39tC`=yRV%R}-L zk|Z`elKm&IGKUWAAfvc>e~Y~Kz27vHqb3)<<9lBVzFNK?+81NT! zE>B8$0iV=B1P&S7Ep1i18E%oy2@mj$-uXYXpTeO$$^*8Ay_W2Cg(biplsCinj(Y57Xs3Nxq>%?_-a7 zJy?)n*t;16820duDTWP>RkoaRwAH!MCpSeHc;!uV6i9tFA=A@FS_z_D^v8y zh9=X?Q~g=-&4n>X!#&pfE1oG1L9|UH^~4sL(N~J~ZkeS&a}LN=rG&Fq{C~{73w%`7 zwfLXOOdycp85C@)RAZrSaMZ@a)x<$NCz*jWFo95f&}tQLYKpbB5oQ1{4-+Q=#^Wd! zYqj;Ny|?XcuYK4TAU>K&galBYS4Hgu?8Awp7H!L`%KX1;?=zE02-LRscRznWhB=RY z_FjAKwbx#2?X}i6?PsLujV#@1YQ0e1@My{0scs zoQU7d50k=Ze_r~K{DHKTqc7&y4U$&P=#Y4MM*aHuG55mDFtc-D3b`5y&*S>VX4lW^ zrE2)1yEonUA@Pf7<%6PZPkeJWc0`yB;E7l9LyqVIN zg-O57!onUCn<03`j0Yl0D+ukkbA?ac9Gud4TOY@k0r$aZvneortU2iVsfNMKZYMX; zr2*a>@rRfc(t;F?{WfzEAPV3#6+bp|@n~xQB7mE~Lh6&z8N+Fg2W31sHK^eNfuT!Y zi^gc~I%#dn$uaO6?ovws`Um>oT$gQc(j5t|{+y>Vb9Q!f{MfMA84lV&Q4SGaK?J+r z*)F0wWvCghcTLV|xjhK2%SwS$Co~Dvv+NxL_jv-hj2Hu#8#I~sjWTW*0<{BhADmV& zFC>!fk&)UQEO$n!?+d&W#D88P-j_qXT0eURApacX!2bp0PdfOtFi!gg9RtWVUvlQ~ zP;%;N=`SLLp&;z}1JY*M!g&e)*LvRtS{}0U`aocHwKAwI6g4gNmQw9=r5Els$qEL_ z_PiQTm6W|e9q1;qZ}@)I$D~;j0*zVp5!6R?N6`mGD`8UiPGc-I$zbWOXLoSp zsq`+A{LrzLPi5_`Vg&tQzK93+K=KXmXYXyP|fk3uk1OmZ} z+br9q5fikx3U1IDVWj=NQwraS>t`1Lua9Mq$i{)V0xI~X60JD7ktq-5wx1zQ)yam% z$fUH%RzP8!IIpN?Pt+#;k!}eND5}x05K|YYS~bxlX(w5Cpw4)@y&`zF>=yUZ1k9$4 zQv|j$-s~EqKq%x*%JIJwwKW9(L_)p&JhgBocfxvP(Hd2*7cE(HbhMZxQ(jsaE%w>& z^lSK2IyxAhXi=X&Uz1$^*S;Xj;I{OY&+Ff_h-TnEJNC`T@m$O4B+jSmCxC9k8n+kx zvc`S1D=(Eirk=d*M2pjm(LT9E7Neg{=;akczVZvh2J(kKQVJ9u#972jJg9u`#VJYz z5z!aKsXoH}PCkkx&tLq!82a?F07m=xRqa(cBPdHEyN9Z5J~(hSZ3`uUN7%bh4_{B-iuv+BG2OGRV@xY%glPE#Q+IyP|;zq^&^ zE_+&(WvoNe*9U7CFEKjY0*}2TeL6YIP`S}&Kdv?f4^8tHRYQU8NW&C(SX#3-99nmO z(-Ys>cq<7SE5p8DS%-eh@m`25Y&LU#Puh#N5W#oQ-PK?}XQk5R){UKyjRhPZ9#@E1 z+o**2sTacWqr(^7Xg)zcMDFFhmw0!nyEon?foCR4MGCU!syKh;&R==*S0(wYVfm}! z>WZMeQZA6>!sJGLi2XN=?wn26N_(>Z?aFo$p@MPFol@@>WH#K=I=uDJeoiR5vCF{X z;OarhxM7?|^I-7!>a&4c< z@L9f>?5kQ-@}T;?miz8C@}{jz8&0~(NRqyBtgFa%UCYGlqL%An{o$%d)c3lYM5zpY zbgaOa8KtgAbabj7L^&GoEi>_PTzI0TY}t48snK7lCQD*vtEy$?PWef!l$KR)+2+K` zPI+WcZ3)}Ilz{n~$rZ6f+GbO$zA{!lEH%}tkBn99mr#7=ynW13CtSx$-Z??{T~C7S z*x$m#(OOQ2zK-$tR%Wi*Gn^GD+c$^LjrHGG8=ZE$`pj7W!Nr2x?B@10Zl9cRF9nVDD?9nIlK07gG$Xt=B8oL5t6E6# z-6-*rVa47qkw`W6N&!==>KY?lV{DqbMD+K{^s_s(d#(64SoVEtekNC{k;XI9d|U)v zafFN?KFjDxaAU8W3m#~Y>`yJy9@Rh`#Qdz3kEPZY2SNdDzQ8q4!8BI|P2~Zy_@dSM z0&q1zHL4_@S@`g&%gXf2TLi+WH#-%l1ibXrpje4vqL8YwMY|LxCJ8GQQ?oUb6RopT z>bGaML=x-N=s~>r;J5xvc-$fa=rpfHY`56;drS($<0rCrjJmj&ThzruWf6`n`bY&) zYVc$+Ho}v?@?@STOQI&p0)wxO@MBd#_WBpg^PV1vA)C){LgE9LarA=DHfE7d=2LF9hjPk^Rlm9a z=Xy-vR9F$iNh01VokLo;sC)^(HHo+o23H(j7?;T*Z?V(GWfToUS}s77=+s3nPsC-= z9rxe3pmI`Y-*>2A0?b7w=Du6TbXe-|nTC^nbs5FM2q6jMy|1NilxFDQH zex`mN?UZMaN;_;&RG`0*RK?zu!PCde+NtsGpszDHK4sP3G}mZ9jix~h@d_ijI#fTe zh;_v1c$X^LmMTAJd>Oa_s=P0>q$+Z6w%k3EFJjd$^>(dv+>CdgB?!G|k4BqBwp*^B zDr!znJbZbc*yfGTehZ-CXeMMXA{3;>CmhLm-Z-4)T{w5gJ#HKU*5dMEEA$+0hg zqrB*GjB_C5QK2pWu1GT8%LPn5Q9+6l_Id)`^~R67Ns^Wv+qM~|ZA>L`gXa#cnfoZp z?ppd>lGB2m(oI5s zDi<2P?%IBnh@)@k^Lt3{`mmEl?}(ymFC0mNM%zWBQ^7NBTtr;v5;}S5nsO{fTkU&f zybtYemi1EnZCzybdfj79O5srGA^Dd%Y0T~F5!XDGTV*TSd2rf1y+ zMu=m83EBYZ-Pxv!4C)+sLXU$Nq{KFEO?9lM_%#*YzxhjhdHj430HRju4_ zoDZvX&U}6P2g05AvS>u-CtBtOTHm`qI-Y+QL_fs8i(}K(vY{53o1PVli~?wP<}zcW zB;*m>fiS?zpQu;z$@L`e)oFy6KBp*HEjeHQp`)%`MtialT_XW$#|Ie{C@{`?=@{+W z-jEqcf7Th=M5F1XG)6ngz|kw0Ps+NBSYn9-Lx3SQO#d%sa!q?ip8EC% zYpGhE{#lG)>S>MdfNWRMT3P~h<-nuZFj+n`zmTwGsaIK7BmM)?5Ai%=CRD!uYCDte zt6*`;x?&#!h|EP&c_jMVc=oTcU+W6D@IGT;J&%yn|Ab%oVimSJd_72Y@qvYc;I!$NI8{%kRi#E>q?Ma#LGsbgbcm z!wS!z{7Jw+e73RbHvI+1&9_I@Wo=PxWc*effjU0NeZ;=8%CtkJmwu8DVx$2Nl?J%l zApgh-io}MH%F?Fi>p*|WBRs{-l_jP96<#)5@-Xz>!Gwwb)w}Q< zb?S^bFdOSaMfj)h%Wjv9BiT*xG72o%cd)BCdOhaJvu!#t*NiVGTVE-CsWt$DSu<%j z2cTbt6l^9!m11eH#(;=-NDDdfQr7i(aK4B zT@^|!uaF5kyeAM4iZl;~ys(oUQjf8YEgOk>#Kiz*uESebdT76$@^$S>yGe)XxvBGP z$;I=ZQr6x)!I)A?7UpEhA0I3yX%S+)G&WlryNAXYlprOT>9Zk-6sK`99{I7JYAe-DD>U7{ZbkTC1Q-^p}ujn z0|0j&2Y^?RPFnxqJ8@0kODxwsz~2c4ff5ik(=KunwhsclZwu{9H_N?7H2;Ql5;E*}U( zjfO#e59rY)GPL8dAIj)<^JGZeC~#yZ#2Rz>smOzHzQ)f-`^QA4mmU*&rYG66XY}KO z0U4FYbtJLGD??Q)kjXd;5K2a6J~Z0L@KT<77|-*CWW#54wnQ(MGtC>Ijtk^~bG$F* zJY05n*;w}N!jYTxpcnTC@&bhk*N`0R&!?Yciy{y385&^rh#M+N_$Ti#aG4%8Tuz*H^@sb>jFsA5ILD?GKl2@^LjqC(qM4nQW>)08V-B>9^JeqbI z{Z`dNSk9Euc-1$C+OtuQ|JZ_UCj;plAJhnQK;j!*!3CB{q$A2T;sJY=Iq3X3=)6F; zT%dc0IRkWhKVS&>ste$&`8(nJE32W*v_kl9r@iCgtB$Zn2E=1r)(k=86h(wrR2Umy z9kFmuKfkZ%^ApjZ9Fept+}8BI>|!+U25wa!>(hVyNFBOkUfCANXQmz#XfJ_ z{-P{FDG=#zV}VZo*(>_(nI#f zExp-n?s^OEOj{f;f`IEb+Rvu@IEzH<&d zFHr^W0B=uP6Zo^kbeaOE9!BO7UW-$+ zNF-Q@WT3`iNbFqGzidJU*d9eQA}a~3 zM)GoQFBOz68xcR^A<&8YFk7m`J@kZpQl0&5`X{F;v9|qV@-5x`6y-ON0yf*1ah{kw zabWGcAKB5~mKy>gq>m_lLZED4D5;RXo`bC@Fq6_VeO6U}w`` z&I)p!>FhhCC@{oHB7~JWf}!R9qY@ND@X@|?^j+{EblAs%2$0w*dM%zq%|rI@6g6Ao z-I91zvW{cSZ%fJ6y}Eyu`^|J~nb;!`mT-R|9ysyURz?|WT+((#d;pA9XYgUA%$PxfzHR4;Ts1ELs=Z(=(T^~H5<;P zNG#vI{+Aa{$j`r@f{np&0hIsc1!ykL_->(5)AtgRf=Y`GrN+CD#a|`h7@pSU&XQPq zy(Wpihk=DQA`|`vh$S!L&KRzGZkjx&S?N3VCu?tu(lVtr`vpaHuMX#9)0ZORFB6J) z4X2*71)J}YWc`FtZ`r_dmCe^OoS3C}SDDmetl#0@>!1dSWtr(tsxeP`yd6caA?+rfqV=2Ip_-Oi+FNIoUhA5L`0q>$K>+$3=3iJA+F7G=gb3rTt@I%)sB zke0rATua9Ye+k>F-f*%ZNqcE`=>7C9Wt7Vg%SpJm`WiHUJ6) zzcZ8|4JFG^eqqb4Y3VaW69DnThZ_*d*p*R5SpX#ldPoi5=s1jDhuPEdJ3fYRvVG!g z%UoCCBMqES#kqZ3ndtUb<|&**$}!y&xp~MGugTA+CI)gaW!hbZ)4brj#m}`fr|tu{ z-#uV-+{G_0oiP1nelsbJv3cOd5BF^b04oPxb39!kwI+$*L~mp zOE&x6$|zb+KN|0pX8}bSpSo+%?C4v}OS*;yKG+CC!u z$=<5W1bg=RUe5N?F`4nMP^0Pksve;b(NiKPcBEy%Xk|LB*duepI$sa#c5FY2{T7T% z!FaBP76#yw_D?dNGLEtv_Ro$ZIl==MnnmN`tNR#U$KG-r>>mPl7}}HuI~3rvkr3Eq zU$1Xh#^Xz|PNV;Ff`A{abRr9;GNaTJT-<%Q>2%^jMBqN#T)jcxE?+7q`GtME5WyOo z*Wl;l8ELL|;r|d%Wn%}FJZRQ7G#VY>mNTa5fiSVY`?*ownEGd)LQReOBQv{ofUPnA z!RO`c_;RsszDD0fV$Rtw+*C1`9+}Y;S+FnU>k7Go6UK#Hp$S@-^s`kNMQmuOM&+CpAeq>&?xe!WV}P^Nt}XZ?)MQlBEO#6GIkJ9r|h9?Xef zN4--vLUmukbALmnn*NX8F_@-0h{$s!_E|zdm`f@gokp-A&#<>^B}ZW*x=aHe6J&g} zpT3TQsuSYFADa-pj8(Ayxb{nEUo9uftfm)~oSKwdP5MOD)5^BM)F^PO@PNJ~jpl&U zPnH%wK_+%WZrfb=Rai(jz9<3nDT21sK>_DH$ zDO@sgs3rZQc4Mg;wXc+kdP4F3(Xy{7Z96IpY}DI!RJ5RIscgyHsmus-gZLhB2X&Vp z+Pk3@nmTh!e1D+rs4SEuX<~`lV!9h5veK}~T2O1u10W;Gwb|<7uRl;%^dJ0v=ETWgA<)15trsLB39 zY)Zl2!s3ssS9W7SS!X$yE0CSTj?^3+Q)b8|drLj_RUpN2ip$|);8`^S2l>I+qOOvd z)tA&}^lZc^v$f_zqhp#}#gEK2Ixgi3lV5CP(mVz>tFF76Y-=VPNl}7z#Q7Vsh?H}f z**Zzam@HX^OFH)fD`8ffh{Ya(FjBj;MzZmZ{q#NJqA^FG&tq;l0Bg+dCA5&^41vS=)lSV+JVX^xi!dIF`g!6Mt#RL?dc)m9trH$gnofYE+ES2!t(0oiE3 zTyAPBjE)&x6d=%8b%`pru&N__>u?V5J@lK5*ZyPbO;3DNNjzJ<+#P?-fVRq$(+wkosp3~Ee0ytGRI5~zg6T+NMIdprH?g8x1M(_3*MRI5?B@X4CN}~|7Z(En`LR=s z&P@&`mQ2yrC|y$ZXJvmi(dASTTT<}(;+q)os$k+)qNtXRM0tkq*Wh*SBgupclu#DY14@msB)Hd(LeGTE#|PGJ&dGbO)} z$pliyI+sFgVVmfC%i=rdiRw(0U>@&HGkL335wn04j5i!vC&OFVHe`;lPxKe^M7lxB#u>Nyq z_qKFBO@Yf(dZzYU+A`jrsbY9!uRF(!2W@#1!lgF)&77ZDZogad>s6Aw9J+c(^>kMR za^qaT*klqhNYVl&Bky@NY)=oUa}xvD^@B~V%^leFXAS)ERc`? zF(-{AX&1F%*TQn7E~pIolG8%kzb3n8ys8LJg4dKXb0&FK(QJzQRYk0dp-FY*YNT|h zQ-Qwv`)a^O@K4rI{!iC{)#9IofjH>`Bv4%e{v3S#4NP+K(LV`;oO%Kyb>MI+qw$^g zop;Mn>Q@z$?);hzCe*@Mc22re4W)!h8Xa$_HH#QKD9E$mDtyesDNY@^DfO-*oFeFj zHatP-*rAz%R-Edc#)fP~MK^B5O)Ywkvfl^|HxThco^ST%C+&oeb42{RL%ZzMfXTxo zLK+*fqP!?SVVEy{bR{o?Ld;APqBlq>x+Tn35!rp#o$BU*rMI(?Z}N8Wj}IDkT}1Pi zUMkO$tL2eV*PGh!HOqSKRJTk(52@<9`QE!QEHm!RT)YVI77M(D<8W{Z`%$qs+m7g} z+oT@l>PG!3Q~BfH)Mc2=bv*6MI=jPdhn0KV?H^?gVLtaqB!my`i}+p+@5*p6PdJq+ z58v3`h+AjG-MLXt#4EIi(>@9VC*0t=w?$tS=dW^H-ztSEuB!46Yyx^inS3U2G{|4(C0g+h2dA0>RY6u-MO|ypq?4 z(Oh;Sr+G<#)W2MYI=$;ebB+uDk=f?AFMkeU%`U zOlsobUL}_{k^kf`=TvN^^N^NZj3RUGBcx20Gf?Jnr|qlcaJ1Z=I3HFT@pF-u$c~5~ z{^vX`gk2en_KU3pXKCDV_h|cov0m~M6gOvs!4?%s{8q?zZ^YnHWIirJF}-OH)_yM7 z5}U;gb1rGbxw?>mc;~V*S$E92G|YJFuko(GqP@8mK9w2E?YkLy_#TROJasI?G38rA zenMu5K%Uww*=o+S>{BEct!&M+YFA34;bG`)r|1jLpz6W#86jN`3e=Y05Ju$>h!@`i znyrkL%R%U52MGCJTJVC=o4a)MKb3{_pY$lkv~!3PG3aBf*xSFJ-J2CY$XN z)cgU|tT0^TWYb-I>&q83yW7j+xOnI1XSN8h z64nu*;3!_3$(dQ%ErDjxjyG#vgm^Qh&dRsN5`j_`L?ae0SBl~OBApa{SIY6!eoM;8 zyGt99T8vdc;$QoPzB{E{vgB8|WH6jnvRNx_TNnv>Jj{VppfT+?G;CMloyyG**caSYWe_fNi(U+Q~TBZOhCqU-icgDM+l|IvO?@+T2n%#`jn z&)tMq);abj5<-i7PK;LhW(bWTj7<1&=6wIw1s_tr0lux4o1^wTE{dZ80K2i?u3!fFGkB0ee8O@IUUih&PqP66w!gS6tBas$g7t^6U+YNoXG4iGs{6V*|&Dl@D3lj)xWWgr8 zqZ%|)WE?JLzoYG#rig!cVC9_pF+!`bu~#kIwR&7J{{~kFi(Ta1uW7NplI|T6oh4F;vZs|N*Ae*h!zGBPe;xSV#GGTtgg|6*H5cNk6^#=uw z*$v{_o)MO7UTa=M$i&s%swS31Zc7t7WyRm#oTHcKN|H{$6M z4n)P>jA)dgy=aOL<#0v7zLs&gG7?NaAd$;NEj4h0o!vYyV&9CR1FsM~?g{Ym?UZ@s zwWm%N&RuCgzvoqZW;DB%O-W%8oQ`S#WzQe7+lAwo612IRhrGLAe#T4?HoovIV;x4L zt&$XFdMWzBx@j(Q67MC!buqyLUg9^pt??psjJcD<>34Dwxzn{LgM}VKn{u$r8=H2p zD`0fgG1Vx%Y0o~1(b3@2dmdYQH~snr4IhIob`Qxvd*bANFLV2laaWQvLXz zFpDAkak46+5=(lEKrgU=EC;&^x7aI*rVD!nb|phWu19o4cglSLA=(Fp`VSZ@Zh>iSpDOV-8ppC_ z@@AjSJ4l}07601{=j1*%eYisR>hBjW@UvKjoa=m&AK0d(lry>8J7S3TyBINtE zisx|+sy~AXC0CD+dPLm>x$U${yTq>!D$fDX7|ndWWCt%^6qeMaItdlIr8ogWecd0w zBHt5l`yTz_(gd`CjH5}i7XsK<2l(xDTfXOFFQ^=_f))7$!AIy`VGkp9v|ng}ul_Dsc(I4QBm%$^W9m+2dWV-Islv(TnV4^&f2$N0+L9X&J3dBY5A3pd z=eeoFZu^!BCd%#0WuiPPf|Kun?@^&NVlC`&DHGlQ9LktD`yTMWBaSSwvUrvxg-)*cyMsHepJjOER8d&4ygy(EqueHi0yB%7h@#ap3YRsLiXi~Q0>iC zA!924aIV~ia+-12o`qFnlWD(~z8vFw*mavX>{?M7a(#JRXd)j>ytyh?8n&l;Ij6Xi zk1*$z`QNgd)=K}4Y2=KXL;4nsnPD$gjHU_+%5*L9@-uOM1^>F{k8>$(`Tjz-56so3nQRQ34Vb>!!xEdISNF{%~k=2RHm)}ww!VaZ{N414qF~^9I_A3 z!Oe?5>BH|jB^7cma4->{F8I9z@aA0`v z1^HHrIAD-rMzuI2Xe(%Zy|74BitPlnB~?1Vgjd%k8DkaXL0iEgTLe|X+IR((kqIQB zEbbyt4ct3_$x?;L6PXFp0ruv~@p4l1SSFAT^*soavKdLt6pyq1_Z_ns>ZRf;h z6?`YmhZBF!Z-T0YA{e~{t4RIC&WKPteyLX=P8L(b?X zA?g_ny6ovx^GlY0<94OT*!4^WMbqqU&L@YN_y&4h#17kbE7k7V$N0_*lHh54{W7~g z5*go1nwb_drg-X_>k?$$s*gDIhFpzE29rT(AH!EIT+T(vx!_N^6Bu{kluYIeV^!xXwxiUCsU%7MAhi&MNOrjt?1y0d%;&oh7G+;A8lr zlzwc4v@h`3@dH$x?X6YSYP_1{Foqfx;{7VYf}jWAt@VsNIO~P$F31GmmacULXBrI@q~a+k{i!x z(FUbnuJIq+hf%^AQF)lTL03Z01ztpIS01N=b%qd@sm8*=GRuWVGMHNX>||{r zN{t1ldhy_C#FlF-uEqI9xX8*B%D`e?BxRxG>VlPSOE3MfOeUY^VhL5+vSX}h+tZD_ z3fi%XVC|wRTy++)G#!jyM4pFA%Whz4!VULW`f(!XE!T3d#nPlEP0$q^7o5mf6Bn^Q zk;s9Ko~eA{4%RMV!}w7o98s;9X|lK4D4Rs{n6Q-y5NgVH>mDd45tXT2a~{cP9cw&6 zceIPJ)1&V}Gl!?)_*O>TOB-`I z0$qZp%ZI3Ro~|^$q=K!E}W}JR#ph#mK4Y;gZGY#-DhMYFyC@dJ`L`N7Sb>MqFCtWmO-cTcB~6sWct7J1& zgKxI>x%He1+TRd-IxJ2^dJZUp#R}oX%+{t{TtAR&%z6 zEAfOPF$ytWIxITSDh*sX~Dt2*O`gSJV;GW%8ksF-=TvC|iwFvhP zk7SmKs7|fJNLC;$GNqOg@T6Geg+o+$sjg77NH2A17Fo)bW|4ub)aec!$n$zG1;R)1 zl5|`@&eWIU`r(yJ+thwgZn+UxnWG{(Sfxqxh4|r17kjOZuGS*hPI0AW{AbsK(eWd< zM9bTbd>!s+bZn=r$ssYus%N<36ilz$9EbL<<5a7)Jd58}TEzL5@lVoTocp$=rShqq zZ}1*EV~Z+M!B=0D%s5fWI`BDtY#jbDxQ#`>z)=U24suLLpmt$Z6nS<>+RvcWE+*z{ z0$*n?s$E zmII{9+xm)@&~3$Ni&;LGSKIOL0|Uy$vX8_M4_iKRLx9_4V`b(;XezDF_2>x z^TtZ9%X({-<`m`Ft=_V&PQ*Gh)$7~3tIxfaEH5N1yD4=xsxZ+6S_{tBS2?<~NRnJ; zN$OYSR1{{ZnKn~uI6-;7mLd_n1VtF8AUnvb%Zmrr%3aR$XBSE064N3KN>6?1EdZT< zcr0VHu*&FIO*mA1X=$y|A?|{?4_bb$K5$?pS?JmQb#rGAxGUw3EI`%dM^r~hcgW(U zz!wuieHDr+-BoZZqrpG+WJZ-9Acd*;;Sn*~4M4duT6DD$m%`y1%%17caQ; z%3Z0tlPgd0F0;1U_-beIPTg4;8P1CKoN6|rIJt>V!*AHG_L!?Zr9;0eIq|DuCw?_t zz4}KG0-)8}w-lF`K>2FVNIk^W3aeIai#J-uiwY4;W_WoG&IW$-LH*GAthQweCq~;2rX|Yf#s-*cdIOulKSQ-zB zjqXKwzBm2jR}>hon`(p){q$53HfA8hZ!tRVM?DMre$TPCH&q1fV?qD#7vD!qv?Gyq zG$rk@^O$~RlYCW=rD|Bn{mjW)tJkgRPKW7NhFI3H(eY%yzmI`eXF)}{}PcIfpbCFO1xv2#WZ-&zo<2LWZ)Q^hKq;Oaakb`r4TAnh<*$=W6wRdBKoUj- zfas@?Tk=-j=}KziR5?5uqa^vkDv%|6;$$}8P!EN#3HMixVEfN;GW`H^P{9Map+zzWj?7%47GB7Mbywz*UaJA5 zU?jL)Gm=t4H05Q)OM*{2XBij2_f5`_@7-zEy-lz7%yF~U^oz2krMvWwJ`?ImwE4jy`vfcbB8 zl?zOGfa~~sBaBsR)N9U@TD4NH{O`p^g-F2Mu|)2Y%SFo#ki=gmFYBEcZnJY34vD%j z+9d>A&}Nf5pyfPP)Wj0Jqz|%r(So8(=mlXH=K?Az#)~6~mg?jzO!ig~%Uw1xHG(Jc zo_&d_(QI#G>N2$#nV7l6IqfEKUn}1!n}v*6wS8q!D#66nsK<~eQRm4#=SgzbuwY`H z7|hK*uknsNKu?SAuK=Gq-zg<&JQGvB_DXq`EbpM1qQuOKNbRD==neckFM1vS&X0at z2-Addgrdr{&-<0A*+TE^ImbY%U z6orLSmRYwaD#}HDW%|F-Syi5iOqZg&Os6v0spqevXUADyXHC6Z#!}DWc6}*x_*S{h&EYS~jm+UD zE>1j$2daY?Q?{qxqQi>jt0%pgxM^JCrgE}mR?6H)5|Aj6XQP zEg%y(J&(oHvahb1v>THci;o)>VQv=F36}iCd4t!VD3TPLdot)OgA-!H6a`B6Zrl!n zJBt%4iz?TiojQjqTZcHN?IdV=1K+6YVOByNd6-bUeu+nAsZKm9b^}s_ipp4>u)oE# z9%Tj+)buC|xIz*vI3WDzT7spx%rl`}sDm27z#Mpy9zV3?fNZ8PH!ZcxyG#-j9~4b_ zZqQjt#|mNIUjp^&2S&T(*yuNn1hviSc>73@1$uy$?l?2Kvr(dV6p#WPBYCf5%+fmy zM#ln1;&@XK;UWEYthr?}PD7f=&*xRpUXF=;g_y`!AYOBraleTiVLY3@ZzJD3Ci0+b zIo5GLn7CrFb-V@Z`0pSLF^Pd9eTEnF736_Q!Mu1HUEM9aim!keZSKJ;e#Ox6YvYb% z^U>Co$; znghCKZT$HtRchnUSzPJKF8o5gl9YX1=%kW;fA4_R41%$e4~Pvhl6+j?QFfw;oeA5A zLdj-C{8d84X4_%OS0I6eJJOaCt_M6Xqqqp9ZeH;*zL`e*HBfahv0m1`uuYbU%_ah; zar-){&ThcYWwigdv}==TmQYPRhO*`*Ba9A_{mo0l_;V^pnoGjP;pA*Yy5&+)TT0-# zWIA3Wb*`9cB^ya~d&$Vy#oY2V_VHw0@g>uXV;@V_xi6XSj-8#X^IS6B6Z=52uH=&G zC9JaXu3_qnlCXc*f_0`ZRU$PeRBCn8-?@ks6YB*LLH#IVZ|8uXi2ZBQ{W>o=O*r>Z zHUbu#_6WVNx60XJ5_d-g>s7f;JTfXqZ^4lhn`UQX7(GQ{_mtw|gW-CW+R9s3GG{@# z?Ch;ldv&XvUAkem0*fP29YjvlSa*erGSdZ#@Xtmyd674Btut}uP8w&@(n@w16@Lx( zR%GWZrpoNyYGkt^{3AkYI3y^{R!LTK8(LSX4XylK-I4x2nnT3?Bx7v56RK#~{xWR* zx%BP43E7`#s@@<|^#-Qu?_{c8QK=m*o-yrTrZbFw*mWJdS)awx;`2CK@WI3z)Km?z zkwwl&d$>#$qg|M)GO{IqA;V!l$tbbvJ}k7_cLS>%D3K{D2E1uQLv6d+*j9$-9qB(Y zS@2J=4Gnc#DAj2zH!U;MgS8h$FU!}Z=i_4LBc3W^uvT+%NBX;is*I`AO$FbV+TQ+qVSa=ab$P*Q^|uT{_qIgbbHGgUy}8 zZKs`x+IYZc)U^N2sGTWy=Bf2Mef+Gk}CNyZgtIW~W#B<7kAD%PQ#?(~)u z=Ag!qZ;#%nk!@ju_z2l3*cP7D$tFMd%1P|MrC+^BuFdZxEK`KWt1pEDklGY0~cW|B%)#>A6^Y zzGTi%u2f}u7moKG@xATb^^p9l|BL_N3)d6Uln4~nLX8Mra##UtofG&YOG5$aS@x|= z=C_5*|AY~-Z?35Qa+NU^(d^CW#g=_lCE5KcPHh;=>|dqNqzTJ)E%W)hO4rTfCf-~z zQMdu`WovpGMW^w}5bfp`D5;B5?BA;ODZe%a?SxG9p#5^tzDGnRG8bD-4?MyZUSmP~ zaV2xvyKFNk&U3dmwsi@f8|<6sh22M#?#R(<$<;DXf_^rDqJDBJoaYZ3(_XcbUlZJs z2O{-HPF#HGXH;q$bw@+?eKL+A|Iv^!?Wp!w4Rb0(h#)QZ7OSZ{P;(w5xRo-2nrJCe zIKNO|t}Cixu>up~3K?+KnB0AvJ6t6RGDxv$Xp&E()2u0qeU@v^%v0C1xpq6(5TWUD zu4}n2ajwtjdYE&44%fq->#3d{gv0!!;s3gw#r0{kbe5k3%{$u(% z^eiT5m2IH`xME&=2JSexoWGEcaVSORG*Jr(!_7UcCSkuw{4Sr}<66oL13G~jO3xE{ z1g}e#>B&xrVt)YZ^h#&Qc6;tvp zg%Yc!CE5EvK~w6nZs8EiPo@k8H{499CUK%AFh$kScL~ycZZ@^AR79wBH;*XM!lSh0Le>$}$x;7_Af}EB!)Y=?ND=d~IsRn)JIL2Xu^HUD`fo46 z;kf?}k8?BIe|wsRi)#FJPdMpeCLVS#{}}-lue&qDIq5W0oZV{M9tJq+xdK3nBo29` zD_$f+Ztu3$MZ9w)j=`z4+unsA&a|B%AZe9w-e$<-?^=9j1I|FFbG#*t*3kjPy|ZsF z$kO{!B(hvj)&8x9I-SzCh4wgB(F4`lLR>=IGnr2i@cNyQJvPT?4(n=8taXT7n=g?a zFiyrD3V&QE92YIAjQ8jE#?|GYAnJ5xbkcNlu`i*XHHXRwHcP~%HcnAPSI{G1Z?o6R z0EtrAm7Y%jIe9|{#ThXbbd(1dAHDy3a7ioji7#+;MzZA5n?=#zmOf4BjNfhL!a8Ai z9S4PtXoe!2)))r+W{RXIS9z<7m28u#VI|rW!6r-gNPUU6Mn#Hks@I7&MZL+A7xlaO z`rWr6IZ6tJV)}bUziZ`Af|l9@sfjijg}xd<%FS>kFKWk1_^W+bvo%6;8M54%&t|-Z z&B=I|u{hRy-^Y-jtH?)F1mS|PFg-%?zEK$%GhqPsPDb6Ku+kNkdec>T z@xZ!OPMHFF%ACR}wBEsG?5)yC1u@ICCMN+juzHG%jD|VF1aiIU95B|&!-Kn2{cJv! z7wclp1TjmK`I2Emy<*v) zU3DO+)S%t1<)P-f+HotRAF-P5kwO^0 z#gC~?u7im?@A*E|Yp#B<^jq9#hT#fz&B|gkn?gv5_%|)<4%(`uwwz-PC|>>)BK{o-AO+7o)+3cqD z+i=wQO>?9~5mNV!s+mOqtMNrzM|A@-}aG_?+q94S6YHN{ecJw?XwZ;)RDgjnpN_jCNlBt9rTa`{#<2qOtxl znd!--=(T)u&7H;QB&r!89d|EYVS503Hb8RUEo-L$3on(!-wOd2NR4$0=sdux9sx9U z!2MDVeCo(#M!H|(_qWvZYiuu6b-!Xb$@AYG{Zuw_zbqT}&ywE8StMMHE)V+dP42vM z7TDnE+V#8bZFDT?1A?-bbDx_2y(=1Ws9Zg6B+$Nmay0T*KuOL#;L>PSt>)^>l)8Vd z;gF2NTE<&g29e)8QTcF^&0|ZdZ+KfugumQVV;!(Xl9R;(2z}NY>!TMGPs0KK0^bY% zmvdN@#Ytl^R3@kI{XJNGy8w%?gGCW*UPX@CLp_R`5|0V)LiU3ftO0ovbruWx?!2J! zs#!z|f|L{<^)zq#_VAUkCDpqBofW}6^8Ob6X~gvri05FAS`_tVMsf_oSqX*Bpnro{ zy^Pzpu{|X6NU2t8v@XrG0+t6S6f>Re7d5>B63_0PAR+R($q=!pOppVNnX^n_2$B3> zIG&)D(24!@pjXH)*M5je0&qdJp$OWLv2Kk_p?b8Tz_}X)EkRppA8Ij1J&Jc82)Tu( zU(aC=bVxb9(h6#sHy@-K5g0Ujl`d4U5(hZjkHdj2<<`c5$*#D-o)*!fA zHqgv34cbe*k)}q1a#OE*snEE&tJ!GjC64QjhQc-#>^D!?=_Q)iOdZ8dv2SGv4Eq{v+bsET6~9=mEkxfy19LM zhXmnzCMP{)uJ}=>t4$U&3-ijUQu%qsWWZIAWl0OiH+yvYj+n4_kxFGC1HviWp8+0B zTG=Ngl4fSoGh5l?!cBWnQD#fCMX^(x*KqJLt7rU41xQi!0C#4*uejOupnB3AZ#VCt zY;m*cx?jQCvE{ZWydziVZ; z(eEnacURI4(BtolegK7$G>@dLAgPAy9_c7r>ue-~UN#5_P9~8@>>+JbAUHuCi^pn% z$X)V-=}wM~;DkylKqB7-)~sT8CwCT!R(d6_zc?iO2I~VJa=lZ~?N$NX9Yn$R`^=W{-viF?pPk>s&hNXVncb(twJHL-Pzdv(+H#omfI=`LH?=#MCuk-t?^Sjge z{U7Iduk-s$=Xam;`#a}1?fkwWzo1*hvxH&^04HIG{Kz_xA5dj)yGqNo4NZHeH$ADQ z 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%0DQC z2MGFEctYV{q#eSm#zwapp3)3sA`u%#X`iLA>>G0(Og` zn%m43KJs&#;OC_kN!7FY(dUWX6|qG&hxw^#>Ui@nTr^bsx$3h~vJ0V5H`NK}e~C)s za_%2jumXI80q=C}Fh@$#c=|w|oW9USTIz@LU%S7n+Si_MO@Vh$S9oJ-EyQI7Fc=s5 zCF2dNG#N&JTd@;kK$wT8GBL0-2@nRd=XZ3^m^HXrmi?#j| zhJInc1b#z(73{ZGLii3m-CFjvdp@V$YIVU%pBCV!RCx$`YW{6TDqhPU-2qpWs5O|1 z{RYyxree+ixz9BR>n^~KKUUSqirR4CiexzAz{^mC)izV(>j~#Oa2es|X&S$ua9yp2 zx$tfU?Ecd39~LQjD)_*6bb1j_HaqEinBUWsqJQvaGCsumS~24-XML^lB4>R~%S)tJ z`vHo%AHW1z^D(fI6z@YG)JH4g@Y6~-aD(QrIt5=#xXwxMC%>z1(&_!gx811Wm4pWz zI7m3)?lF>@6Pyt$qE$i&NAtJm1T*{GGsj0XugM}sqy98xNBF$B~w+2sri>Q$pRTaW4>s~ zR+4x~{s!JFqg2#p5e~W6MF)ga4qu4VYSgTfhy@|LOK= zB;4%4wS;R<*6T@Pe7+pPHfcKTmxpAi5Cv?GeZp=+=*J=E-~B^fUJv0;2ks?YGl-sS zsW@jt%;z?`=!x-vkxCExlAqSCf*@&dm>*0;{o@@!>CTjR)MCE z|I+Ij``Lb_KU4Kp{&)FLHN2APBbJtTG2wwXba_63zfY$xA$-7=UwoAz6_ z{e)LJ@Cw1t8xlW=9;Izg)$|78**fOfq47DyA2l>yw9o5n?fMR)FWgSo(0FQ_`G=wL zdx^hyXgs}(IeTcl2m_}Mjqhjvu|wkz5r34%L;e}~#TvLxDhA*n+au7R+oy?eB&7Q% zk$(4}_GyysE!yV~YX-|t*}K5stMMqWhwZ(}DQ^z>DV?hAOU(b)nA)C2`GMCoe}rKl zc~%L2Q}qFi`)?#H{AXmOrYHPeodXN|ui2{W&x%+92Nvl|Z8%N*6NH+#Ba?YwuA1#y z`*XYB2S1|xqK`FwAL$=Bq+mmwXA%8j?;V1FKk;pL`jq*yi_C>t)+=H@)pzkC7 z1BZ2e%9w%udj{*H*K4Y+{@dMfqt%Z*Hr}4EP;AmQh<^^Ad{|EpjbB0hV?*O9Br85N zzK8g^L*w@nA5Mc`Mnpd9Mux#JVbs6c%8>O{aHEwW>nmVY-_MlTWMy6Xl|O%RXuPQJ z#-Z_|zK;xz7xi5*G+xwq#vr`X=fFq0y#*urKhX6T1$%5*-PhNw2ti+3As?$*2~xpQ z|LcYR7Zcz4p`@?J&wn?-i`4X*1M}& zzI(Bd?V_c7A$(ll{j#CkTGoV%mSaS+52|AN)-Ek22D;+ar}< zE(F{Ajc~u(0k_MLYZl+f&UoQ6ey8a9NH3z=*Ou>rZzz7%d~5#I%0DT8<=LS8w{G7; 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

vw*}&X*U+DpgvZOcnF`Xo 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�T$%`=6h@ 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]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 diff --git a/tests/OpenGL/package/glm/.appveyor.yml b/tests/OpenGL/package/glm/.appveyor.yml deleted file mode 100644 index f82b848e..00000000 --- a/tests/OpenGL/package/glm/.appveyor.yml +++ /dev/null @@ -1,87 +0,0 @@ -shallow_clone: true - -platform: - - x86 - - x64 - -configuration: - - Debug - - Release - -image: - - Visual Studio 2013 - - Visual Studio 2015 - - Visual Studio 2017 - - Visual Studio 2019 - -environment: - matrix: - - GLM_ARGUMENTS: -DGLM_TEST_FORCE_PURE=ON - - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_SSE2=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON - - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON - - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_14=ON - - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_17=ON - -matrix: - exclude: - - image: Visual Studio 2013 - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON - - image: Visual Studio 2013 - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_14=ON - - image: Visual Studio 2013 - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_17=ON - - image: Visual Studio 2013 - configuration: Debug - - image: Visual Studio 2015 - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_SSE2=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON - - image: Visual Studio 2015 - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_14=ON - - image: Visual Studio 2015 - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_17=ON - - image: Visual Studio 2015 - platform: x86 - - image: Visual Studio 2015 - configuration: Debug - - image: Visual Studio 2017 - platform: x86 - - image: Visual Studio 2017 - configuration: Debug - - image: Visual Studio 2019 - platform: x64 - -before_build: - - ps: | - mkdir build - cd build - - if ("$env:APPVEYOR_JOB_NAME" -match "Image: Visual Studio 2013") { - $env:generator="Visual Studio 12 2013" - } - if ("$env:APPVEYOR_JOB_NAME" -match "Image: Visual Studio 2015") { - $env:generator="Visual Studio 14 2015" - } - if ("$env:APPVEYOR_JOB_NAME" -match "Image: Visual Studio 2017") { - $env:generator="Visual Studio 15 2017" - } - if ("$env:APPVEYOR_JOB_NAME" -match "Image: Visual Studio 2019") { - $env:generator="Visual Studio 16 2019" - } - if ($env:PLATFORM -eq "x64") { - $env:generator="$env:generator Win64" - } - echo generator="$env:generator" - cmake .. -G "$env:generator" -DGLM_QUIET=ON -DGLM_TEST_ENABLE=ON "$env:GLM_ARGUMENTS" - -build_script: - - cmake --build . --config %CONFIGURATION% -- /m /v:minimal - -test_script: - - ctest -j4 -C %CONFIGURATION% - - cd .. - - ps: | - mkdir build_test_cmake - cd build_test_cmake - cmake ..\test\cmake\ -G "$env:generator" -Dglm_DIR="$env:APPVEYOR_BUILD_FOLDER/cmake/glm/" - - cmake --build . --config %CONFIGURATION% -- /m /v:minimal - -deploy: off diff --git a/tests/OpenGL/package/glm/.gitignore b/tests/OpenGL/package/glm/.gitignore deleted file mode 100644 index 9dbd6d8c..00000000 --- a/tests/OpenGL/package/glm/.gitignore +++ /dev/null @@ -1,61 +0,0 @@ -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -# CMake -CMakeCache.txt -CMakeFiles -cmake_install.cmake -install_manifest.txt -*.cmake -!glmConfig.cmake -!glmConfig-version.cmake -# ^ May need to add future .cmake files as exceptions - -# Test logs -Testing/* - -# Test input -test/gtc/*.dds - -# Project Files -Makefile -*.cbp -*.user - -# Misc. -*.log - -# local build(s) -build* - -/.vs -/.vscode -/CMakeSettings.json -.DS_Store -*.swp diff --git a/tests/OpenGL/package/glm/.travis.yml b/tests/OpenGL/package/glm/.travis.yml deleted file mode 100644 index 8eae8f73..00000000 --- a/tests/OpenGL/package/glm/.travis.yml +++ /dev/null @@ -1,735 +0,0 @@ -language: cpp - -matrix: - include: - - os: osx - osx_image: xcode7.3 - script: - - cmake --version - - mkdir ./build_unknown_release - - cd ./build_unknown_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_DISABLE_AUTO_DETECTION=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - env: - - MATRIX_EVAL="INFO=C++unknown-release" - - - os: osx - osx_image: xcode7.3 - script: - - cmake --version - - mkdir ./build_pure_98_release - - cd ./build_pure_98_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - env: - - MATRIX_EVAL="INFO=C++98-pure-release" - - - os: osx - osx_image: xcode7.3 - script: - - cmake --version - - mkdir ./build_pure_ms_release - - cd ./build_pure_ms_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - env: - - MATRIX_EVAL="INFO=C++98-pure-ms-release" - - - os: osx - osx_image: xcode7.3 - script: - - cmake --version - - mkdir ./build_pure_11_release - - cd ./build_pure_11_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - env: - - MATRIX_EVAL="INFO=C++11-pure-release" - - - os: osx - osx_image: xcode7.3 - script: - - cmake --version - - mkdir ./build_sse2_11_release - - cd ./build_sse2_11_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - env: - - MATRIX_EVAL="INFO=C++11-sse2-release" - - - os: osx - osx_image: xcode8 - script: - - cmake --version - - mkdir ./build_pure_14_release - - cd ./build_pure_14_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - env: - - MATRIX_EVAL="INFO=C++14-pure-release" - - - os: osx - osx_image: xcode8 - script: - - cmake --version - - mkdir ./build_sse3_14_release - - cd ./build_sse3_14_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - env: - - MATRIX_EVAL="INFO=C++14-sse3-release" - - - os: osx - osx_image: xcode8 - script: - - cmake --version - - mkdir ./build_avx_14_release - - cd ./build_avx_14_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - env: - - MATRIX_EVAL="INFO=C++14-avx-release" - - - os: osx - osx_image: xcode8 - script: - - cmake --version - - mkdir ./build_avx_14_debug - - cd ./build_avx_14_debug - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - env: - - MATRIX_EVAL="INFO=C++14-avx-debug" - - - os: osx - osx_image: xcode11 - script: - - cmake --version - - mkdir ./build_pure_17_release - - cd ./build_pure_17_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - env: - - MATRIX_EVAL="INFO=C++17-pure-release" - - - os: osx - osx_image: xcode11 - script: - - cmake --version - - mkdir ./build_pure_17_debug - - cd ./build_pure_17_debug - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - env: - - MATRIX_EVAL="INFO=C++17-pure-debug" - - - os: osx - osx_image: xcode11 - script: - - cmake --version - - mkdir ./build_avx_17_release - - cd ./build_avx_17_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - env: - - MATRIX_EVAL="INFO=C++17-avx-release" - - - os: osx - osx_image: xcode11 - script: - - cmake --version - - mkdir ./build_avx_17_debug - - cd ./build_avx_17_debug - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - env: - - MATRIX_EVAL="INFO=C++17-avx-debug" - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.9 - env: - - MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9 && INFO=C++98-pure-release" - script: - - cmake --version - - mkdir ./build_pure_98_release - - cd ./build_pure_98_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.9 - env: - - MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9 && INFO=C++98-pure-debug" - script: - - cmake --version - - mkdir ./build_pure_98_debug - - cd ./build_pure_98_debug - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.9 - env: - - MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9 && INFO=C++98-pure-ms" - script: - - cmake --version - - mkdir ./build_pure_ms_release - - cd ./build_pure_ms_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-5 - env: - - MATRIX_EVAL="CC=gcc-5 && CXX=g++-5 && INFO=C++11-pure-release" - script: - - cmake --version - - mkdir ./build_pure_11_release - - cd ./build_pure_11_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-5 - env: - - MATRIX_EVAL="CC=gcc-5 && CXX=g++-5 && INFO=C++11-pure-debug" - script: - - cmake --version - - mkdir ./build_pure_11_debug - - cd ./build_pure_11_debug - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-5 - env: - - MATRIX_EVAL="CC=gcc-5 && CXX=g++-5 && INFO=C++11-pure-ms" - script: - - cmake --version - - mkdir ./build_pure_ms_release - - cd ./build_pure_ms_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-5 - env: - - MATRIX_EVAL="CC=gcc-5 && CXX=g++-5 && INFO=C++11-sse3-release" - script: - - cmake --version - - mkdir ./build_sse3_ms_release - - cd ./build_sse3_ms_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON .. - - cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-6 - env: - - MATRIX_EVAL="CC=gcc-6 && CXX=g++-6 && INFO=C++14-pure-release" - script: - - cmake --version - - mkdir ./build_pure_14_release - - cd ./build_pure_14_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-6 - env: - - MATRIX_EVAL="CC=gcc-6 && CXX=g++-6 && INFO=C++14-pure-debug" - script: - - cmake --version - - mkdir ./build_pure_14_debug - - cd ./build_pure_14_debug - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-6 - env: - - MATRIX_EVAL="CC=gcc-6 && CXX=g++-6 && INFO=C++14-pure-ms" - script: - - cmake --version - - mkdir ./build_pure_ms_release - - cd ./build_pure_ms_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-6 - env: - - MATRIX_EVAL="CC=gcc-6 && CXX=g++-6 && INFO=C++14-sse3-release" - script: - - cmake --version - - mkdir ./build_sse3_ms_release - - cd ./build_sse3_ms_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON .. - - cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-7 - env: - - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && INFO=C++17-pure-release" - script: - - cmake --version - - mkdir ./build_pure_17_release - - cd ./build_pure_17_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-7 - env: - - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && INFO=C++17-sse2-release" - script: - - cmake --version - - mkdir ./build_sse2_17_release - - cd ./build_sse2_17_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-7 - env: - - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && INFO=C++17-sse3-release" - script: - - cmake --version - - mkdir ./build_sse3_17_release - - cd ./build_sse3_17_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-7 - env: - - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && INFO=C++17-avx-release" - script: - - cmake --version - - mkdir ./build_avx_17_release - - cd ./build_avx_17_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-7 - env: - - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && INFO=C++17-avx2-release" - script: - - cmake --version - - mkdir ./build_avx2_17_release - - cd ./build_avx2_17_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX2=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - - llvm-toolchain-precise-3.6 - packages: - - clang-3.6 - env: - - MATRIX_EVAL="CC=clang-3.6 && CXX=clang++-3.6 && INFO=C++14-pure-release" - script: - - cmake --version - - mkdir ./build_pure_14_release - - cd ./build_pure_14_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - - llvm-toolchain-precise-3.6 - packages: - - clang-3.6 - env: - - MATRIX_EVAL="CC=clang-3.6 && CXX=clang++-3.6 && INFO=C++14-pure-debug" - script: - - cmake --version - - mkdir ./build_pure_14_debug - - cd ./build_pure_14_debug - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - - llvm-toolchain-precise-3.6 - packages: - - clang-3.6 - env: - - MATRIX_EVAL="CC=clang-3.6 && CXX=clang++-3.6 && INFO=C++14-avx-debug" - script: - - cmake --version - - mkdir ./build_avx_14_debug - - cd ./build_avx_14_debug - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - dist: bionic - env: - - MATRIX_EVAL="CC=clang && CXX=clang++ && INFO=C++17-pure-release" - script: - - cmake --version - - mkdir ./build_pure_17_release - - cd ./build_pure_17_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - dist: bionic - env: - - MATRIX_EVAL="CC=clang && CXX=clang++ && INFO=C++17-pure-debug" - script: - - cmake --version - - mkdir ./build_pure_17_debug - - cd ./build_pure_17_debug - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - dist: bionic - env: - - MATRIX_EVAL="CC=clang && CXX=clang++ && INFO=C++17-sse3-release - script: - - cmake --version - - mkdir ./build_sse3_17_release - - cd ./build_sse3_17_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - dist: bionic - env: - - MATRIX_EVAL="CC=clang && CXX=clang++ && INFO=C++17-sse3-debug" - script: - - cmake --version - - mkdir ./build_sse3_17_debug - - cd ./build_sse3_17_debug - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - - - os: linux - dist: bionic - env: - - MATRIX_EVAL="CC=clang && CXX=clang++ && INFO=C++17-ssse3-release" - script: - - cmake --version - - mkdir ./build_ssse3_17_release - - cd ./build_ssse3_17_release - - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSSE3=ON .. - - cmake -E time cmake --build . - - ctest - - cd $TRAVIS_BUILD_DIR - - mkdir ./build_test_cmake - - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ - - cmake --build . - -before_install: - - eval "${MATRIX_EVAL}" - - diff --git a/tests/OpenGL/package/glm/CMakeLists.txt b/tests/OpenGL/package/glm/CMakeLists.txt deleted file mode 100644 index 843e7546..00000000 --- a/tests/OpenGL/package/glm/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -cmake_minimum_required(VERSION 3.2 FATAL_ERROR) -cmake_policy(VERSION 3.2) - -set(GLM_VERSION "0.9.9") -project(glm VERSION ${GLM_VERSION} LANGUAGES CXX) -enable_testing() - -add_subdirectory(glm) -add_library(glm::glm ALIAS glm) - -if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) - -add_subdirectory(test) - -endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/tests/OpenGL/package/glm/cmake/glm/glmConfig-version.cmake b/tests/OpenGL/package/glm/cmake/glm/glmConfig-version.cmake deleted file mode 100644 index 6e63a4a3..00000000 --- a/tests/OpenGL/package/glm/cmake/glm/glmConfig-version.cmake +++ /dev/null @@ -1,11 +0,0 @@ -if(${PACKAGE_FIND_VERSION_MAJOR} EQUAL 0) - if (${PACKAGE_FIND_VERSION} VERSION_LESS ${GLM_VERSION}) - set(PACKAGE_VERSION_COMPATIBLE 1) - endif() - if(${PACKAGE_FIND_VERSION} VERSION_EQUAL ${GLM_VERSION}) - set(PACKAGE_VERSION_EXACT 1) - endif() -else() - set(PACKAGE_VERSION_UNSUITABLE 1) -endif() - diff --git a/tests/OpenGL/package/glm/cmake/glm/glmConfig.cmake b/tests/OpenGL/package/glm/cmake/glm/glmConfig.cmake deleted file mode 100644 index 4fba5116..00000000 --- a/tests/OpenGL/package/glm/cmake/glm/glmConfig.cmake +++ /dev/null @@ -1,22 +0,0 @@ -cmake_minimum_required(VERSION 3.2 FATAL_ERROR) -cmake_policy(VERSION 3.2) - -set(GLM_VERSION 0.9.9) - -get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -if (_IMPORT_PREFIX STREQUAL "/") - set(_IMPORT_PREFIX "") -endif() - -# Set the old GLM_INCLUDE_DIRS variable for backwards compatibility -set(GLM_INCLUDE_DIRS ${_IMPORT_PREFIX}) - -add_library(glm::glm INTERFACE IMPORTED) -set_target_properties(glm::glm PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES ${GLM_INCLUDE_DIRS}) - -mark_as_advanced(glm_DIR) -set(_IMPORT_PREFIX) - diff --git a/tests/OpenGL/package/glm/copying.txt b/tests/OpenGL/package/glm/copying.txt deleted file mode 100644 index 779c32fb..00000000 --- a/tests/OpenGL/package/glm/copying.txt +++ /dev/null @@ -1,54 +0,0 @@ -================================================================================ -OpenGL Mathematics (GLM) --------------------------------------------------------------------------------- -GLM is licensed under The Happy Bunny License or MIT License - -================================================================================ -The Happy Bunny License (Modified MIT License) --------------------------------------------------------------------------------- -Copyright (c) 2005 - G-Truc Creation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -Restrictions: - By making use of the Software for military purposes, you choose to make a - Bunny unhappy. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -================================================================================ -The MIT License --------------------------------------------------------------------------------- -Copyright (c) 2005 - G-Truc Creation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/tests/OpenGL/package/glm/doc/api/a00001_source.html b/tests/OpenGL/package/glm/doc/api/a00001_source.html deleted file mode 100644 index 36d74ceb..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00001_source.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - -0.9.9 API documentation: _features.hpp Source File - - - - - - - - - - -

-
-
-
_features.hpp
-
-
-
1 #pragma once
-
2 
-
3 // #define GLM_CXX98_EXCEPTIONS
-
4 // #define GLM_CXX98_RTTI
-
5 
-
6 // #define GLM_CXX11_RVALUE_REFERENCES
-
7 // Rvalue references - GCC 4.3
-
8 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html
-
9 
-
10 // GLM_CXX11_TRAILING_RETURN
-
11 // Rvalue references for *this - GCC not supported
-
12 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm
-
13 
-
14 // GLM_CXX11_NONSTATIC_MEMBER_INIT
-
15 // Initialization of class objects by rvalues - GCC any
-
16 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html
-
17 
-
18 // GLM_CXX11_NONSTATIC_MEMBER_INIT
-
19 // Non-static data member initializers - GCC 4.7
-
20 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm
-
21 
-
22 // #define GLM_CXX11_VARIADIC_TEMPLATE
-
23 // Variadic templates - GCC 4.3
-
24 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf
-
25 
-
26 //
-
27 // Extending variadic template template parameters - GCC 4.4
-
28 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf
-
29 
-
30 // #define GLM_CXX11_GENERALIZED_INITIALIZERS
-
31 // Initializer lists - GCC 4.4
-
32 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
-
33 
-
34 // #define GLM_CXX11_STATIC_ASSERT
-
35 // Static assertions - GCC 4.3
-
36 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html
-
37 
-
38 // #define GLM_CXX11_AUTO_TYPE
-
39 // auto-typed variables - GCC 4.4
-
40 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf
-
41 
-
42 // #define GLM_CXX11_AUTO_TYPE
-
43 // Multi-declarator auto - GCC 4.4
-
44 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf
-
45 
-
46 // #define GLM_CXX11_AUTO_TYPE
-
47 // Removal of auto as a storage-class specifier - GCC 4.4
-
48 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm
-
49 
-
50 // #define GLM_CXX11_AUTO_TYPE
-
51 // New function declarator syntax - GCC 4.4
-
52 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm
-
53 
-
54 // #define GLM_CXX11_LAMBDAS
-
55 // New wording for C++0x lambdas - GCC 4.5
-
56 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf
-
57 
-
58 // #define GLM_CXX11_DECLTYPE
-
59 // Declared type of an expression - GCC 4.3
-
60 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf
-
61 
-
62 //
-
63 // Right angle brackets - GCC 4.3
-
64 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html
-
65 
-
66 //
-
67 // Default template arguments for function templates DR226 GCC 4.3
-
68 // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226
-
69 
-
70 //
-
71 // Solving the SFINAE problem for expressions DR339 GCC 4.4
-
72 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html
-
73 
-
74 // #define GLM_CXX11_ALIAS_TEMPLATE
-
75 // Template aliases N2258 GCC 4.7
-
76 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
-
77 
-
78 //
-
79 // Extern templates N1987 Yes
-
80 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm
-
81 
-
82 // #define GLM_CXX11_NULLPTR
-
83 // Null pointer constant N2431 GCC 4.6
-
84 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf
-
85 
-
86 // #define GLM_CXX11_STRONG_ENUMS
-
87 // Strongly-typed enums N2347 GCC 4.4
-
88 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf
-
89 
-
90 //
-
91 // Forward declarations for enums N2764 GCC 4.6
-
92 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf
-
93 
-
94 //
-
95 // Generalized attributes N2761 GCC 4.8
-
96 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf
-
97 
-
98 //
-
99 // Generalized constant expressions N2235 GCC 4.6
-
100 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf
-
101 
-
102 //
-
103 // Alignment support N2341 GCC 4.8
-
104 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
-
105 
-
106 // #define GLM_CXX11_DELEGATING_CONSTRUCTORS
-
107 // Delegating constructors N1986 GCC 4.7
-
108 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf
-
109 
-
110 //
-
111 // Inheriting constructors N2540 GCC 4.8
-
112 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm
-
113 
-
114 // #define GLM_CXX11_EXPLICIT_CONVERSIONS
-
115 // Explicit conversion operators N2437 GCC 4.5
-
116 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
-
117 
-
118 //
-
119 // New character types N2249 GCC 4.4
-
120 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html
-
121 
-
122 //
-
123 // Unicode string literals N2442 GCC 4.5
-
124 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
-
125 
-
126 //
-
127 // Raw string literals N2442 GCC 4.5
-
128 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
-
129 
-
130 //
-
131 // Universal character name literals N2170 GCC 4.5
-
132 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html
-
133 
-
134 // #define GLM_CXX11_USER_LITERALS
-
135 // User-defined literals N2765 GCC 4.7
-
136 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf
-
137 
-
138 //
-
139 // Standard Layout Types N2342 GCC 4.5
-
140 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm
-
141 
-
142 // #define GLM_CXX11_DEFAULTED_FUNCTIONS
-
143 // #define GLM_CXX11_DELETED_FUNCTIONS
-
144 // Defaulted and deleted functions N2346 GCC 4.4
-
145 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm
-
146 
-
147 //
-
148 // Extended friend declarations N1791 GCC 4.7
-
149 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf
-
150 
-
151 //
-
152 // Extending sizeof N2253 GCC 4.4
-
153 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html
-
154 
-
155 // #define GLM_CXX11_INLINE_NAMESPACES
-
156 // Inline namespaces N2535 GCC 4.4
-
157 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm
-
158 
-
159 // #define GLM_CXX11_UNRESTRICTED_UNIONS
-
160 // Unrestricted unions N2544 GCC 4.6
-
161 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf
-
162 
-
163 // #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
-
164 // Local and unnamed types as template arguments N2657 GCC 4.5
-
165 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm
-
166 
-
167 // #define GLM_CXX11_RANGE_FOR
-
168 // Range-based for N2930 GCC 4.6
-
169 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html
-
170 
-
171 // #define GLM_CXX11_OVERRIDE_CONTROL
-
172 // Explicit virtual overrides N2928 N3206 N3272 GCC 4.7
-
173 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm
-
174 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm
-
175 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm
-
176 
-
177 //
-
178 // Minimal support for garbage collection and reachability-based leak detection N2670 No
-
179 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm
-
180 
-
181 // #define GLM_CXX11_NOEXCEPT
-
182 // Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only)
-
183 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html
-
184 
-
185 //
-
186 // Defining move special member functions N3053 GCC 4.6
-
187 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html
-
188 
-
189 //
-
190 // Sequence points N2239 Yes
-
191 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
-
192 
-
193 //
-
194 // Atomic operations N2427 GCC 4.4
-
195 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
-
196 
-
197 //
-
198 // Strong Compare and Exchange N2748 GCC 4.5
-
199 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html
-
200 
-
201 //
-
202 // Bidirectional Fences N2752 GCC 4.8
-
203 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm
-
204 
-
205 //
-
206 // Memory model N2429 GCC 4.8
-
207 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm
-
208 
-
209 //
-
210 // Data-dependency ordering: atomics and memory model N2664 GCC 4.4
-
211 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm
-
212 
-
213 //
-
214 // Propagating exceptions N2179 GCC 4.4
-
215 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html
-
216 
-
217 //
-
218 // Abandoning a process and at_quick_exit N2440 GCC 4.8
-
219 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm
-
220 
-
221 //
-
222 // Allow atomics use in signal handlers N2547 Yes
-
223 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm
-
224 
-
225 //
-
226 // Thread-local storage N2659 GCC 4.8
-
227 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm
-
228 
-
229 //
-
230 // Dynamic initialization and destruction with concurrency N2660 GCC 4.3
-
231 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm
-
232 
-
233 //
-
234 // __func__ predefined identifier N2340 GCC 4.3
-
235 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm
-
236 
-
237 //
-
238 // C99 preprocessor N1653 GCC 4.3
-
239 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
-
240 
-
241 //
-
242 // long long N1811 GCC 4.3
-
243 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf
-
244 
-
245 //
-
246 // Extended integral types N1988 Yes
-
247 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf
-
248 
-
249 #if(GLM_COMPILER & GLM_COMPILER_GCC)
-
250 
-
251 # define GLM_CXX11_STATIC_ASSERT
-
252 
-
253 #elif(GLM_COMPILER & GLM_COMPILER_CLANG)
-
254 # if(__has_feature(cxx_exceptions))
-
255 # define GLM_CXX98_EXCEPTIONS
-
256 # endif
-
257 
-
258 # if(__has_feature(cxx_rtti))
-
259 # define GLM_CXX98_RTTI
-
260 # endif
-
261 
-
262 # if(__has_feature(cxx_access_control_sfinae))
-
263 # define GLM_CXX11_ACCESS_CONTROL_SFINAE
-
264 # endif
-
265 
-
266 # if(__has_feature(cxx_alias_templates))
-
267 # define GLM_CXX11_ALIAS_TEMPLATE
-
268 # endif
-
269 
-
270 # if(__has_feature(cxx_alignas))
-
271 # define GLM_CXX11_ALIGNAS
-
272 # endif
-
273 
-
274 # if(__has_feature(cxx_attributes))
-
275 # define GLM_CXX11_ATTRIBUTES
-
276 # endif
-
277 
-
278 # if(__has_feature(cxx_constexpr))
-
279 # define GLM_CXX11_CONSTEXPR
-
280 # endif
-
281 
-
282 # if(__has_feature(cxx_decltype))
-
283 # define GLM_CXX11_DECLTYPE
-
284 # endif
-
285 
-
286 # if(__has_feature(cxx_default_function_template_args))
-
287 # define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS
-
288 # endif
-
289 
-
290 # if(__has_feature(cxx_defaulted_functions))
-
291 # define GLM_CXX11_DEFAULTED_FUNCTIONS
-
292 # endif
-
293 
-
294 # if(__has_feature(cxx_delegating_constructors))
-
295 # define GLM_CXX11_DELEGATING_CONSTRUCTORS
-
296 # endif
-
297 
-
298 # if(__has_feature(cxx_deleted_functions))
-
299 # define GLM_CXX11_DELETED_FUNCTIONS
-
300 # endif
-
301 
-
302 # if(__has_feature(cxx_explicit_conversions))
-
303 # define GLM_CXX11_EXPLICIT_CONVERSIONS
-
304 # endif
-
305 
-
306 # if(__has_feature(cxx_generalized_initializers))
-
307 # define GLM_CXX11_GENERALIZED_INITIALIZERS
-
308 # endif
-
309 
-
310 # if(__has_feature(cxx_implicit_moves))
-
311 # define GLM_CXX11_IMPLICIT_MOVES
-
312 # endif
-
313 
-
314 # if(__has_feature(cxx_inheriting_constructors))
-
315 # define GLM_CXX11_INHERITING_CONSTRUCTORS
-
316 # endif
-
317 
-
318 # if(__has_feature(cxx_inline_namespaces))
-
319 # define GLM_CXX11_INLINE_NAMESPACES
-
320 # endif
-
321 
-
322 # if(__has_feature(cxx_lambdas))
-
323 # define GLM_CXX11_LAMBDAS
-
324 # endif
-
325 
-
326 # if(__has_feature(cxx_local_type_template_args))
-
327 # define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
-
328 # endif
-
329 
-
330 # if(__has_feature(cxx_noexcept))
-
331 # define GLM_CXX11_NOEXCEPT
-
332 # endif
-
333 
-
334 # if(__has_feature(cxx_nonstatic_member_init))
-
335 # define GLM_CXX11_NONSTATIC_MEMBER_INIT
-
336 # endif
-
337 
-
338 # if(__has_feature(cxx_nullptr))
-
339 # define GLM_CXX11_NULLPTR
-
340 # endif
-
341 
-
342 # if(__has_feature(cxx_override_control))
-
343 # define GLM_CXX11_OVERRIDE_CONTROL
-
344 # endif
-
345 
-
346 # if(__has_feature(cxx_reference_qualified_functions))
-
347 # define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS
-
348 # endif
-
349 
-
350 # if(__has_feature(cxx_range_for))
-
351 # define GLM_CXX11_RANGE_FOR
-
352 # endif
-
353 
-
354 # if(__has_feature(cxx_raw_string_literals))
-
355 # define GLM_CXX11_RAW_STRING_LITERALS
-
356 # endif
-
357 
-
358 # if(__has_feature(cxx_rvalue_references))
-
359 # define GLM_CXX11_RVALUE_REFERENCES
-
360 # endif
-
361 
-
362 # if(__has_feature(cxx_static_assert))
-
363 # define GLM_CXX11_STATIC_ASSERT
-
364 # endif
-
365 
-
366 # if(__has_feature(cxx_auto_type))
-
367 # define GLM_CXX11_AUTO_TYPE
-
368 # endif
-
369 
-
370 # if(__has_feature(cxx_strong_enums))
-
371 # define GLM_CXX11_STRONG_ENUMS
-
372 # endif
-
373 
-
374 # if(__has_feature(cxx_trailing_return))
-
375 # define GLM_CXX11_TRAILING_RETURN
-
376 # endif
-
377 
-
378 # if(__has_feature(cxx_unicode_literals))
-
379 # define GLM_CXX11_UNICODE_LITERALS
-
380 # endif
-
381 
-
382 # if(__has_feature(cxx_unrestricted_unions))
-
383 # define GLM_CXX11_UNRESTRICTED_UNIONS
-
384 # endif
-
385 
-
386 # if(__has_feature(cxx_user_literals))
-
387 # define GLM_CXX11_USER_LITERALS
-
388 # endif
-
389 
-
390 # if(__has_feature(cxx_variadic_templates))
-
391 # define GLM_CXX11_VARIADIC_TEMPLATES
-
392 # endif
-
393 
-
394 #endif//(GLM_COMPILER & GLM_COMPILER_CLANG)
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00002_source.html b/tests/OpenGL/package/glm/doc/api/a00002_source.html deleted file mode 100644 index b3878354..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00002_source.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -0.9.9 API documentation: _fixes.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
_fixes.hpp
-
-
-
1 #include <cmath>
-
2 
-
4 #ifdef max
-
5 #undef max
-
6 #endif
-
7 
-
9 #ifdef min
-
10 #undef min
-
11 #endif
-
12 
-
14 #ifdef isnan
-
15 #undef isnan
-
16 #endif
-
17 
-
19 #ifdef isinf
-
20 #undef isinf
-
21 #endif
-
22 
-
24 #ifdef log2
-
25 #undef log2
-
26 #endif
-
27 
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00003_source.html b/tests/OpenGL/package/glm/doc/api/a00003_source.html deleted file mode 100644 index 4e90ac88..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00003_source.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - -0.9.9 API documentation: _noise.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
_noise.hpp
-
-
-
1 #pragma once
-
2 
-
3 #include "../common.hpp"
-
4 
-
5 namespace glm{
-
6 namespace detail
-
7 {
-
8  template<typename T>
-
9  GLM_FUNC_QUALIFIER T mod289(T const& x)
-
10  {
-
11  return x - floor(x * (static_cast<T>(1.0) / static_cast<T>(289.0))) * static_cast<T>(289.0);
-
12  }
-
13 
-
14  template<typename T>
-
15  GLM_FUNC_QUALIFIER T permute(T const& x)
-
16  {
-
17  return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
-
18  }
-
19 
-
20  template<typename T, qualifier Q>
-
21  GLM_FUNC_QUALIFIER vec<2, T, Q> permute(vec<2, T, Q> const& x)
-
22  {
-
23  return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
-
24  }
-
25 
-
26  template<typename T, qualifier Q>
-
27  GLM_FUNC_QUALIFIER vec<3, T, Q> permute(vec<3, T, Q> const& x)
-
28  {
-
29  return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
-
30  }
-
31 
-
32  template<typename T, qualifier Q>
-
33  GLM_FUNC_QUALIFIER vec<4, T, Q> permute(vec<4, T, Q> const& x)
-
34  {
-
35  return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
-
36  }
-
37 
-
38  template<typename T>
-
39  GLM_FUNC_QUALIFIER T taylorInvSqrt(T const& r)
-
40  {
-
41  return static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;
-
42  }
-
43 
-
44  template<typename T, qualifier Q>
-
45  GLM_FUNC_QUALIFIER vec<2, T, Q> taylorInvSqrt(vec<2, T, Q> const& r)
-
46  {
-
47  return static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;
-
48  }
-
49 
-
50  template<typename T, qualifier Q>
-
51  GLM_FUNC_QUALIFIER vec<3, T, Q> taylorInvSqrt(vec<3, T, Q> const& r)
-
52  {
-
53  return static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;
-
54  }
-
55 
-
56  template<typename T, qualifier Q>
-
57  GLM_FUNC_QUALIFIER vec<4, T, Q> taylorInvSqrt(vec<4, T, Q> const& r)
-
58  {
-
59  return static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;
-
60  }
-
61 
-
62  template<typename T, qualifier Q>
-
63  GLM_FUNC_QUALIFIER vec<2, T, Q> fade(vec<2, T, Q> const& t)
-
64  {
-
65  return (t * t * t) * (t * (t * static_cast<T>(6) - static_cast<T>(15)) + static_cast<T>(10));
-
66  }
-
67 
-
68  template<typename T, qualifier Q>
-
69  GLM_FUNC_QUALIFIER vec<3, T, Q> fade(vec<3, T, Q> const& t)
-
70  {
-
71  return (t * t * t) * (t * (t * static_cast<T>(6) - static_cast<T>(15)) + static_cast<T>(10));
-
72  }
-
73 
-
74  template<typename T, qualifier Q>
-
75  GLM_FUNC_QUALIFIER vec<4, T, Q> fade(vec<4, T, Q> const& t)
-
76  {
-
77  return (t * t * t) * (t * (t * static_cast<T>(6) - static_cast<T>(15)) + static_cast<T>(10));
-
78  }
-
79 }//namespace detail
-
80 }//namespace glm
-
81 
-
GLM_FUNC_DECL vec< L, T, Q > floor(vec< L, T, Q > const &x)
Returns a value equal to the nearest integer that is less then or equal to x.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00004_source.html b/tests/OpenGL/package/glm/doc/api/a00004_source.html deleted file mode 100644 index a2a5ebb6..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00004_source.html +++ /dev/null @@ -1,905 +0,0 @@ - - - - - - -0.9.9 API documentation: _swizzle.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
_swizzle.hpp
-
-
-
1 #pragma once
-
2 
-
3 namespace glm{
-
4 namespace detail
-
5 {
-
6  // Internal class for implementing swizzle operators
-
7  template<typename T, int N>
-
8  struct _swizzle_base0
-
9  {
-
10  protected:
-
11  GLM_FUNC_QUALIFIER T& elem(size_t i){ return (reinterpret_cast<T*>(_buffer))[i]; }
-
12  GLM_FUNC_QUALIFIER T const& elem(size_t i) const{ return (reinterpret_cast<const T*>(_buffer))[i]; }
-
13 
-
14  // Use an opaque buffer to *ensure* the compiler doesn't call a constructor.
-
15  // The size 1 buffer is assumed to aligned to the actual members so that the
-
16  // elem()
-
17  char _buffer[1];
-
18  };
-
19 
-
20  template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, bool Aligned>
-
21  struct _swizzle_base1 : public _swizzle_base0<T, N>
-
22  {
-
23  };
-
24 
-
25  template<typename T, qualifier Q, int E0, int E1, bool Aligned>
-
26  struct _swizzle_base1<2, T, Q, E0,E1,-1,-2, Aligned> : public _swizzle_base0<T, 2>
-
27  {
-
28  GLM_FUNC_QUALIFIER vec<2, T, Q> operator ()() const { return vec<2, T, Q>(this->elem(E0), this->elem(E1)); }
-
29  };
-
30 
-
31  template<typename T, qualifier Q, int E0, int E1, int E2, bool Aligned>
-
32  struct _swizzle_base1<3, T, Q, E0,E1,E2,-1, Aligned> : public _swizzle_base0<T, 3>
-
33  {
-
34  GLM_FUNC_QUALIFIER vec<3, T, Q> operator ()() const { return vec<3, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2)); }
-
35  };
-
36 
-
37  template<typename T, qualifier Q, int E0, int E1, int E2, int E3, bool Aligned>
-
38  struct _swizzle_base1<4, T, Q, E0,E1,E2,E3, Aligned> : public _swizzle_base0<T, 4>
-
39  {
-
40  GLM_FUNC_QUALIFIER vec<4, T, Q> operator ()() const { return vec<4, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }
-
41  };
-
42 
-
43  // Internal class for implementing swizzle operators
-
44  /*
-
45  Template parameters:
-
46 
-
47  T = type of scalar values (e.g. float, double)
-
48  N = number of components in the vector (e.g. 3)
-
49  E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec
-
50 
-
51  DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles
-
52  containing duplicate elements so that they cannot be used as r-values).
-
53  */
-
54  template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, int DUPLICATE_ELEMENTS>
-
55  struct _swizzle_base2 : public _swizzle_base1<N, T, Q, E0,E1,E2,E3, detail::is_aligned<Q>::value>
-
56  {
-
57  struct op_equal
-
58  {
-
59  GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e = t; }
-
60  };
-
61 
-
62  struct op_minus
-
63  {
-
64  GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e -= t; }
-
65  };
-
66 
-
67  struct op_plus
-
68  {
-
69  GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e += t; }
-
70  };
-
71 
-
72  struct op_mul
-
73  {
-
74  GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e *= t; }
-
75  };
-
76 
-
77  struct op_div
-
78  {
-
79  GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e /= t; }
-
80  };
-
81 
-
82  public:
-
83  GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const T& t)
-
84  {
-
85  for (int i = 0; i < N; ++i)
-
86  (*this)[i] = t;
-
87  return *this;
-
88  }
-
89 
-
90  GLM_FUNC_QUALIFIER _swizzle_base2& operator= (vec<N, T, Q> const& that)
-
91  {
-
92  _apply_op(that, op_equal());
-
93  return *this;
-
94  }
-
95 
-
96  GLM_FUNC_QUALIFIER void operator -= (vec<N, T, Q> const& that)
-
97  {
-
98  _apply_op(that, op_minus());
-
99  }
-
100 
-
101  GLM_FUNC_QUALIFIER void operator += (vec<N, T, Q> const& that)
-
102  {
-
103  _apply_op(that, op_plus());
-
104  }
-
105 
-
106  GLM_FUNC_QUALIFIER void operator *= (vec<N, T, Q> const& that)
-
107  {
-
108  _apply_op(that, op_mul());
-
109  }
-
110 
-
111  GLM_FUNC_QUALIFIER void operator /= (vec<N, T, Q> const& that)
-
112  {
-
113  _apply_op(that, op_div());
-
114  }
-
115 
-
116  GLM_FUNC_QUALIFIER T& operator[](size_t i)
-
117  {
-
118  const int offset_dst[4] = { E0, E1, E2, E3 };
-
119  return this->elem(offset_dst[i]);
-
120  }
-
121  GLM_FUNC_QUALIFIER T operator[](size_t i) const
-
122  {
-
123  const int offset_dst[4] = { E0, E1, E2, E3 };
-
124  return this->elem(offset_dst[i]);
-
125  }
-
126 
-
127  protected:
-
128  template<typename U>
-
129  GLM_FUNC_QUALIFIER void _apply_op(vec<N, T, Q> const& that, const U& op)
-
130  {
-
131  // Make a copy of the data in this == &that.
-
132  // The copier should optimize out the copy in cases where the function is
-
133  // properly inlined and the copy is not necessary.
-
134  T t[N];
-
135  for (int i = 0; i < N; ++i)
-
136  t[i] = that[i];
-
137  for (int i = 0; i < N; ++i)
-
138  op( (*this)[i], t[i] );
-
139  }
-
140  };
-
141 
-
142  // Specialization for swizzles containing duplicate elements. These cannot be modified.
-
143  template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3>
-
144  struct _swizzle_base2<N, T, Q, E0,E1,E2,E3, 1> : public _swizzle_base1<N, T, Q, E0,E1,E2,E3, detail::is_aligned<Q>::value>
-
145  {
-
146  struct Stub {};
-
147 
-
148  GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const&) { return *this; }
-
149 
-
150  GLM_FUNC_QUALIFIER T operator[] (size_t i) const
-
151  {
-
152  const int offset_dst[4] = { E0, E1, E2, E3 };
-
153  return this->elem(offset_dst[i]);
-
154  }
-
155  };
-
156 
-
157  template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3>
-
158  struct _swizzle : public _swizzle_base2<N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)>
-
159  {
-
160  typedef _swizzle_base2<N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)> base_type;
-
161 
-
162  using base_type::operator=;
-
163 
-
164  GLM_FUNC_QUALIFIER operator vec<N, T, Q> () const { return (*this)(); }
-
165  };
-
166 
-
167 //
-
168 // To prevent the C++ syntax from getting entirely overwhelming, define some alias macros
-
169 //
-
170 #define GLM_SWIZZLE_TEMPLATE1 template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3>
-
171 #define GLM_SWIZZLE_TEMPLATE2 template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3>
-
172 #define GLM_SWIZZLE_TYPE1 _swizzle<N, T, Q, E0, E1, E2, E3>
-
173 #define GLM_SWIZZLE_TYPE2 _swizzle<N, T, Q, F0, F1, F2, F3>
-
174 
-
175 //
-
176 // Wrapper for a binary operator (e.g. u.yy + v.zy)
-
177 //
-
178 #define GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
-
179  GLM_SWIZZLE_TEMPLATE2 \
-
180  GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \
-
181  { \
-
182  return a() OPERAND b(); \
-
183  } \
-
184  GLM_SWIZZLE_TEMPLATE1 \
-
185  GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const vec<N, T, Q>& b) \
-
186  { \
-
187  return a() OPERAND b; \
-
188  } \
-
189  GLM_SWIZZLE_TEMPLATE1 \
-
190  GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const vec<N, T, Q>& a, const GLM_SWIZZLE_TYPE1& b) \
-
191  { \
-
192  return a OPERAND b(); \
-
193  }
-
194 
-
195 //
-
196 // Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)
-
197 //
-
198 #define GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
-
199  GLM_SWIZZLE_TEMPLATE1 \
-
200  GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const T& b) \
-
201  { \
-
202  return a() OPERAND b; \
-
203  } \
-
204  GLM_SWIZZLE_TEMPLATE1 \
-
205  GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const T& a, const GLM_SWIZZLE_TYPE1& b) \
-
206  { \
-
207  return a OPERAND b(); \
-
208  }
-
209 
-
210 //
-
211 // Macro for wrapping a function taking one argument (e.g. abs())
-
212 //
-
213 #define GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \
-
214  GLM_SWIZZLE_TEMPLATE1 \
-
215  GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a) \
-
216  { \
-
217  return FUNCTION(a()); \
-
218  }
-
219 
-
220 //
-
221 // Macro for wrapping a function taking two vector arguments (e.g. dot()).
-
222 //
-
223 #define GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \
-
224  GLM_SWIZZLE_TEMPLATE2 \
-
225  GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \
-
226  { \
-
227  return FUNCTION(a(), b()); \
-
228  } \
-
229  GLM_SWIZZLE_TEMPLATE1 \
-
230  GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b) \
-
231  { \
-
232  return FUNCTION(a(), b()); \
-
233  } \
-
234  GLM_SWIZZLE_TEMPLATE1 \
-
235  GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename V& b) \
-
236  { \
-
237  return FUNCTION(a(), b); \
-
238  } \
-
239  GLM_SWIZZLE_TEMPLATE1 \
-
240  GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const GLM_SWIZZLE_TYPE1& b) \
-
241  { \
-
242  return FUNCTION(a, b()); \
-
243  }
-
244 
-
245 //
-
246 // Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).
-
247 //
-
248 #define GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \
-
249  GLM_SWIZZLE_TEMPLATE2 \
-
250  GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b, const T& c) \
-
251  { \
-
252  return FUNCTION(a(), b(), c); \
-
253  } \
-
254  GLM_SWIZZLE_TEMPLATE1 \
-
255  GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \
-
256  { \
-
257  return FUNCTION(a(), b(), c); \
-
258  } \
-
259  GLM_SWIZZLE_TEMPLATE1 \
-
260  GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\
-
261  { \
-
262  return FUNCTION(a(), b, c); \
-
263  } \
-
264  GLM_SWIZZLE_TEMPLATE1 \
-
265  GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \
-
266  { \
-
267  return FUNCTION(a, b(), c); \
-
268  }
-
269 
-
270 }//namespace detail
-
271 }//namespace glm
-
272 
-
273 namespace glm
-
274 {
-
275  namespace detail
-
276  {
-
277  GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)
-
278  GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)
-
279  GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)
-
280  GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)
-
281  GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)
-
282  GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)
-
283  }
-
284 
-
285  //
-
286  // Swizzles are distinct types from the unswizzled type. The below macros will
-
287  // provide template specializations for the swizzle types for the given functions
-
288  // so that the compiler does not have any ambiguity to choosing how to handle
-
289  // the function.
-
290  //
-
291  // The alternative is to use the operator()() when calling the function in order
-
292  // to explicitly convert the swizzled type to the unswizzled type.
-
293  //
-
294 
-
295  //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs);
-
296  //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos);
-
297  //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh);
-
298  //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all);
-
299  //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any);
-
300 
-
301  //GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot);
-
302  //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross);
-
303  //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step);
-
304  //GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);
-
305 }
-
306 
-
307 #define GLM_SWIZZLE2_2_MEMBERS(T, Q, E0,E1) \
-
308  struct { detail::_swizzle<2, T, Q, 0,0,-1,-2> E0 ## E0; }; \
-
309  struct { detail::_swizzle<2, T, Q, 0,1,-1,-2> E0 ## E1; }; \
-
310  struct { detail::_swizzle<2, T, Q, 1,0,-1,-2> E1 ## E0; }; \
-
311  struct { detail::_swizzle<2, T, Q, 1,1,-1,-2> E1 ## E1; };
-
312 
-
313 #define GLM_SWIZZLE2_3_MEMBERS(T, Q, E0,E1) \
-
314  struct { detail::_swizzle<3,T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \
-
315  struct { detail::_swizzle<3,T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \
-
316  struct { detail::_swizzle<3,T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \
-
317  struct { detail::_swizzle<3,T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \
-
318  struct { detail::_swizzle<3,T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \
-
319  struct { detail::_swizzle<3,T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \
-
320  struct { detail::_swizzle<3,T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \
-
321  struct { detail::_swizzle<3,T, Q, 1,1,1,-1> E1 ## E1 ## E1; };
-
322 
-
323 #define GLM_SWIZZLE2_4_MEMBERS(T, Q, E0,E1) \
-
324  struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
-
325  struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
-
326  struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
-
327  struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
-
328  struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
-
329  struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
-
330  struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
-
331  struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
-
332  struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
-
333  struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
-
334  struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
-
335  struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
-
336  struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
-
337  struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
-
338  struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
-
339  struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; };
-
340 
-
341 #define GLM_SWIZZLE3_2_MEMBERS(T, Q, E0,E1,E2) \
-
342  struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \
-
343  struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \
-
344  struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \
-
345  struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \
-
346  struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \
-
347  struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \
-
348  struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \
-
349  struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \
-
350  struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; };
-
351 
-
352 #define GLM_SWIZZLE3_3_MEMBERS(T, Q ,E0,E1,E2) \
-
353  struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \
-
354  struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \
-
355  struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \
-
356  struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \
-
357  struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \
-
358  struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \
-
359  struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \
-
360  struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \
-
361  struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \
-
362  struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \
-
363  struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \
-
364  struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \
-
365  struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \
-
366  struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \
-
367  struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \
-
368  struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \
-
369  struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \
-
370  struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \
-
371  struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \
-
372  struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \
-
373  struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \
-
374  struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \
-
375  struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \
-
376  struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \
-
377  struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \
-
378  struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \
-
379  struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; };
-
380 
-
381 #define GLM_SWIZZLE3_4_MEMBERS(T, Q, E0,E1,E2) \
-
382  struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
-
383  struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
-
384  struct { detail::_swizzle<4,T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
-
385  struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
-
386  struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
-
387  struct { detail::_swizzle<4,T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
-
388  struct { detail::_swizzle<4,T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
-
389  struct { detail::_swizzle<4,T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
-
390  struct { detail::_swizzle<4,T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
-
391  struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
-
392  struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
-
393  struct { detail::_swizzle<4,T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
-
394  struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
-
395  struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
-
396  struct { detail::_swizzle<4,T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
-
397  struct { detail::_swizzle<4,T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
-
398  struct { detail::_swizzle<4,T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
-
399  struct { detail::_swizzle<4,T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
-
400  struct { detail::_swizzle<4,T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
-
401  struct { detail::_swizzle<4,T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
-
402  struct { detail::_swizzle<4,T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
-
403  struct { detail::_swizzle<4,T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
-
404  struct { detail::_swizzle<4,T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
-
405  struct { detail::_swizzle<4,T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
-
406  struct { detail::_swizzle<4,T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
-
407  struct { detail::_swizzle<4,T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
-
408  struct { detail::_swizzle<4,T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
-
409  struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
-
410  struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
-
411  struct { detail::_swizzle<4,T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
-
412  struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
-
413  struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
-
414  struct { detail::_swizzle<4,T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
-
415  struct { detail::_swizzle<4,T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
-
416  struct { detail::_swizzle<4,T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
-
417  struct { detail::_swizzle<4,T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
-
418  struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
-
419  struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
-
420  struct { detail::_swizzle<4,T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
-
421  struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
-
422  struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
-
423  struct { detail::_swizzle<4,T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
-
424  struct { detail::_swizzle<4,T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
-
425  struct { detail::_swizzle<4,T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
-
426  struct { detail::_swizzle<4,T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
-
427  struct { detail::_swizzle<4,T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
-
428  struct { detail::_swizzle<4,T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
-
429  struct { detail::_swizzle<4,T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
-
430  struct { detail::_swizzle<4,T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
-
431  struct { detail::_swizzle<4,T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
-
432  struct { detail::_swizzle<4,T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
-
433  struct { detail::_swizzle<4,T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
-
434  struct { detail::_swizzle<4,T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
-
435  struct { detail::_swizzle<4,T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
-
436  struct { detail::_swizzle<4,T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
-
437  struct { detail::_swizzle<4,T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
-
438  struct { detail::_swizzle<4,T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
-
439  struct { detail::_swizzle<4,T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
-
440  struct { detail::_swizzle<4,T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
-
441  struct { detail::_swizzle<4,T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
-
442  struct { detail::_swizzle<4,T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
-
443  struct { detail::_swizzle<4,T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
-
444  struct { detail::_swizzle<4,T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
-
445  struct { detail::_swizzle<4,T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
-
446  struct { detail::_swizzle<4,T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
-
447  struct { detail::_swizzle<4,T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
-
448  struct { detail::_swizzle<4,T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
-
449  struct { detail::_swizzle<4,T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
-
450  struct { detail::_swizzle<4,T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
-
451  struct { detail::_swizzle<4,T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
-
452  struct { detail::_swizzle<4,T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
-
453  struct { detail::_swizzle<4,T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
-
454  struct { detail::_swizzle<4,T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
-
455  struct { detail::_swizzle<4,T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
-
456  struct { detail::_swizzle<4,T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
-
457  struct { detail::_swizzle<4,T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
-
458  struct { detail::_swizzle<4,T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
-
459  struct { detail::_swizzle<4,T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
-
460  struct { detail::_swizzle<4,T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
-
461  struct { detail::_swizzle<4,T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
-
462  struct { detail::_swizzle<4,T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; };
-
463 
-
464 #define GLM_SWIZZLE4_2_MEMBERS(T, Q, E0,E1,E2,E3) \
-
465  struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \
-
466  struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \
-
467  struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \
-
468  struct { detail::_swizzle<2,T, Q, 0,3,-1,-2> E0 ## E3; }; \
-
469  struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \
-
470  struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \
-
471  struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \
-
472  struct { detail::_swizzle<2,T, Q, 1,3,-1,-2> E1 ## E3; }; \
-
473  struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \
-
474  struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \
-
475  struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; \
-
476  struct { detail::_swizzle<2,T, Q, 2,3,-1,-2> E2 ## E3; }; \
-
477  struct { detail::_swizzle<2,T, Q, 3,0,-1,-2> E3 ## E0; }; \
-
478  struct { detail::_swizzle<2,T, Q, 3,1,-1,-2> E3 ## E1; }; \
-
479  struct { detail::_swizzle<2,T, Q, 3,2,-1,-2> E3 ## E2; }; \
-
480  struct { detail::_swizzle<2,T, Q, 3,3,-1,-2> E3 ## E3; };
-
481 
-
482 #define GLM_SWIZZLE4_3_MEMBERS(T, Q, E0,E1,E2,E3) \
-
483  struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \
-
484  struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \
-
485  struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \
-
486  struct { detail::_swizzle<3, T, Q, 0,0,3,-1> E0 ## E0 ## E3; }; \
-
487  struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \
-
488  struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \
-
489  struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \
-
490  struct { detail::_swizzle<3, T, Q, 0,1,3,-1> E0 ## E1 ## E3; }; \
-
491  struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \
-
492  struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \
-
493  struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \
-
494  struct { detail::_swizzle<3, T, Q, 0,2,3,-1> E0 ## E2 ## E3; }; \
-
495  struct { detail::_swizzle<3, T, Q, 0,3,0,-1> E0 ## E3 ## E0; }; \
-
496  struct { detail::_swizzle<3, T, Q, 0,3,1,-1> E0 ## E3 ## E1; }; \
-
497  struct { detail::_swizzle<3, T, Q, 0,3,2,-1> E0 ## E3 ## E2; }; \
-
498  struct { detail::_swizzle<3, T, Q, 0,3,3,-1> E0 ## E3 ## E3; }; \
-
499  struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \
-
500  struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \
-
501  struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \
-
502  struct { detail::_swizzle<3, T, Q, 1,0,3,-1> E1 ## E0 ## E3; }; \
-
503  struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \
-
504  struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \
-
505  struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \
-
506  struct { detail::_swizzle<3, T, Q, 1,1,3,-1> E1 ## E1 ## E3; }; \
-
507  struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \
-
508  struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \
-
509  struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \
-
510  struct { detail::_swizzle<3, T, Q, 1,2,3,-1> E1 ## E2 ## E3; }; \
-
511  struct { detail::_swizzle<3, T, Q, 1,3,0,-1> E1 ## E3 ## E0; }; \
-
512  struct { detail::_swizzle<3, T, Q, 1,3,1,-1> E1 ## E3 ## E1; }; \
-
513  struct { detail::_swizzle<3, T, Q, 1,3,2,-1> E1 ## E3 ## E2; }; \
-
514  struct { detail::_swizzle<3, T, Q, 1,3,3,-1> E1 ## E3 ## E3; }; \
-
515  struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \
-
516  struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \
-
517  struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \
-
518  struct { detail::_swizzle<3, T, Q, 2,0,3,-1> E2 ## E0 ## E3; }; \
-
519  struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \
-
520  struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \
-
521  struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \
-
522  struct { detail::_swizzle<3, T, Q, 2,1,3,-1> E2 ## E1 ## E3; }; \
-
523  struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \
-
524  struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \
-
525  struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; \
-
526  struct { detail::_swizzle<3, T, Q, 2,2,3,-1> E2 ## E2 ## E3; }; \
-
527  struct { detail::_swizzle<3, T, Q, 2,3,0,-1> E2 ## E3 ## E0; }; \
-
528  struct { detail::_swizzle<3, T, Q, 2,3,1,-1> E2 ## E3 ## E1; }; \
-
529  struct { detail::_swizzle<3, T, Q, 2,3,2,-1> E2 ## E3 ## E2; }; \
-
530  struct { detail::_swizzle<3, T, Q, 2,3,3,-1> E2 ## E3 ## E3; }; \
-
531  struct { detail::_swizzle<3, T, Q, 3,0,0,-1> E3 ## E0 ## E0; }; \
-
532  struct { detail::_swizzle<3, T, Q, 3,0,1,-1> E3 ## E0 ## E1; }; \
-
533  struct { detail::_swizzle<3, T, Q, 3,0,2,-1> E3 ## E0 ## E2; }; \
-
534  struct { detail::_swizzle<3, T, Q, 3,0,3,-1> E3 ## E0 ## E3; }; \
-
535  struct { detail::_swizzle<3, T, Q, 3,1,0,-1> E3 ## E1 ## E0; }; \
-
536  struct { detail::_swizzle<3, T, Q, 3,1,1,-1> E3 ## E1 ## E1; }; \
-
537  struct { detail::_swizzle<3, T, Q, 3,1,2,-1> E3 ## E1 ## E2; }; \
-
538  struct { detail::_swizzle<3, T, Q, 3,1,3,-1> E3 ## E1 ## E3; }; \
-
539  struct { detail::_swizzle<3, T, Q, 3,2,0,-1> E3 ## E2 ## E0; }; \
-
540  struct { detail::_swizzle<3, T, Q, 3,2,1,-1> E3 ## E2 ## E1; }; \
-
541  struct { detail::_swizzle<3, T, Q, 3,2,2,-1> E3 ## E2 ## E2; }; \
-
542  struct { detail::_swizzle<3, T, Q, 3,2,3,-1> E3 ## E2 ## E3; }; \
-
543  struct { detail::_swizzle<3, T, Q, 3,3,0,-1> E3 ## E3 ## E0; }; \
-
544  struct { detail::_swizzle<3, T, Q, 3,3,1,-1> E3 ## E3 ## E1; }; \
-
545  struct { detail::_swizzle<3, T, Q, 3,3,2,-1> E3 ## E3 ## E2; }; \
-
546  struct { detail::_swizzle<3, T, Q, 3,3,3,-1> E3 ## E3 ## E3; };
-
547 
-
548 #define GLM_SWIZZLE4_4_MEMBERS(T, Q, E0,E1,E2,E3) \
-
549  struct { detail::_swizzle<4, T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
-
550  struct { detail::_swizzle<4, T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
-
551  struct { detail::_swizzle<4, T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
-
552  struct { detail::_swizzle<4, T, Q, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \
-
553  struct { detail::_swizzle<4, T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
-
554  struct { detail::_swizzle<4, T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
-
555  struct { detail::_swizzle<4, T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
-
556  struct { detail::_swizzle<4, T, Q, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \
-
557  struct { detail::_swizzle<4, T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
-
558  struct { detail::_swizzle<4, T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
-
559  struct { detail::_swizzle<4, T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
-
560  struct { detail::_swizzle<4, T, Q, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \
-
561  struct { detail::_swizzle<4, T, Q, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \
-
562  struct { detail::_swizzle<4, T, Q, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \
-
563  struct { detail::_swizzle<4, T, Q, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \
-
564  struct { detail::_swizzle<4, T, Q, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \
-
565  struct { detail::_swizzle<4, T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
-
566  struct { detail::_swizzle<4, T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
-
567  struct { detail::_swizzle<4, T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
-
568  struct { detail::_swizzle<4, T, Q, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \
-
569  struct { detail::_swizzle<4, T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
-
570  struct { detail::_swizzle<4, T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
-
571  struct { detail::_swizzle<4, T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
-
572  struct { detail::_swizzle<4, T, Q, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \
-
573  struct { detail::_swizzle<4, T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
-
574  struct { detail::_swizzle<4, T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
-
575  struct { detail::_swizzle<4, T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
-
576  struct { detail::_swizzle<4, T, Q, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \
-
577  struct { detail::_swizzle<4, T, Q, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \
-
578  struct { detail::_swizzle<4, T, Q, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \
-
579  struct { detail::_swizzle<4, T, Q, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \
-
580  struct { detail::_swizzle<4, T, Q, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \
-
581  struct { detail::_swizzle<4, T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
-
582  struct { detail::_swizzle<4, T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
-
583  struct { detail::_swizzle<4, T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
-
584  struct { detail::_swizzle<4, T, Q, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \
-
585  struct { detail::_swizzle<4, T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
-
586  struct { detail::_swizzle<4, T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
-
587  struct { detail::_swizzle<4, T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
-
588  struct { detail::_swizzle<4, T, Q, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \
-
589  struct { detail::_swizzle<4, T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
-
590  struct { detail::_swizzle<4, T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
-
591  struct { detail::_swizzle<4, T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
-
592  struct { detail::_swizzle<4, T, Q, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \
-
593  struct { detail::_swizzle<4, T, Q, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \
-
594  struct { detail::_swizzle<4, T, Q, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \
-
595  struct { detail::_swizzle<4, T, Q, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \
-
596  struct { detail::_swizzle<4, T, Q, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \
-
597  struct { detail::_swizzle<4, T, Q, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \
-
598  struct { detail::_swizzle<4, T, Q, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \
-
599  struct { detail::_swizzle<4, T, Q, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \
-
600  struct { detail::_swizzle<4, T, Q, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \
-
601  struct { detail::_swizzle<4, T, Q, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \
-
602  struct { detail::_swizzle<4, T, Q, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \
-
603  struct { detail::_swizzle<4, T, Q, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \
-
604  struct { detail::_swizzle<4, T, Q, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \
-
605  struct { detail::_swizzle<4, T, Q, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \
-
606  struct { detail::_swizzle<4, T, Q, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \
-
607  struct { detail::_swizzle<4, T, Q, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \
-
608  struct { detail::_swizzle<4, T, Q, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \
-
609  struct { detail::_swizzle<4, T, Q, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \
-
610  struct { detail::_swizzle<4, T, Q, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \
-
611  struct { detail::_swizzle<4, T, Q, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \
-
612  struct { detail::_swizzle<4, T, Q, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \
-
613  struct { detail::_swizzle<4, T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
-
614  struct { detail::_swizzle<4, T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
-
615  struct { detail::_swizzle<4, T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
-
616  struct { detail::_swizzle<4, T, Q, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \
-
617  struct { detail::_swizzle<4, T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
-
618  struct { detail::_swizzle<4, T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
-
619  struct { detail::_swizzle<4, T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
-
620  struct { detail::_swizzle<4, T, Q, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \
-
621  struct { detail::_swizzle<4, T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
-
622  struct { detail::_swizzle<4, T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
-
623  struct { detail::_swizzle<4, T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
-
624  struct { detail::_swizzle<4, T, Q, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \
-
625  struct { detail::_swizzle<4, T, Q, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \
-
626  struct { detail::_swizzle<4, T, Q, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \
-
627  struct { detail::_swizzle<4, T, Q, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \
-
628  struct { detail::_swizzle<4, T, Q, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \
-
629  struct { detail::_swizzle<4, T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
-
630  struct { detail::_swizzle<4, T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
-
631  struct { detail::_swizzle<4, T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
-
632  struct { detail::_swizzle<4, T, Q, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \
-
633  struct { detail::_swizzle<4, T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
-
634  struct { detail::_swizzle<4, T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
-
635  struct { detail::_swizzle<4, T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
-
636  struct { detail::_swizzle<4, T, Q, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \
-
637  struct { detail::_swizzle<4, T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
-
638  struct { detail::_swizzle<4, T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
-
639  struct { detail::_swizzle<4, T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
-
640  struct { detail::_swizzle<4, T, Q, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \
-
641  struct { detail::_swizzle<4, T, Q, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \
-
642  struct { detail::_swizzle<4, T, Q, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \
-
643  struct { detail::_swizzle<4, T, Q, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \
-
644  struct { detail::_swizzle<4, T, Q, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \
-
645  struct { detail::_swizzle<4, T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
-
646  struct { detail::_swizzle<4, T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
-
647  struct { detail::_swizzle<4, T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
-
648  struct { detail::_swizzle<4, T, Q, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \
-
649  struct { detail::_swizzle<4, T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
-
650  struct { detail::_swizzle<4, T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
-
651  struct { detail::_swizzle<4, T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
-
652  struct { detail::_swizzle<4, T, Q, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \
-
653  struct { detail::_swizzle<4, T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
-
654  struct { detail::_swizzle<4, T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
-
655  struct { detail::_swizzle<4, T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
-
656  struct { detail::_swizzle<4, T, Q, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \
-
657  struct { detail::_swizzle<4, T, Q, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \
-
658  struct { detail::_swizzle<4, T, Q, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \
-
659  struct { detail::_swizzle<4, T, Q, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \
-
660  struct { detail::_swizzle<4, T, Q, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \
-
661  struct { detail::_swizzle<4, T, Q, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \
-
662  struct { detail::_swizzle<4, T, Q, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \
-
663  struct { detail::_swizzle<4, T, Q, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \
-
664  struct { detail::_swizzle<4, T, Q, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \
-
665  struct { detail::_swizzle<4, T, Q, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \
-
666  struct { detail::_swizzle<4, T, Q, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \
-
667  struct { detail::_swizzle<4, T, Q, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \
-
668  struct { detail::_swizzle<4, T, Q, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \
-
669  struct { detail::_swizzle<4, T, Q, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \
-
670  struct { detail::_swizzle<4, T, Q, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \
-
671  struct { detail::_swizzle<4, T, Q, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \
-
672  struct { detail::_swizzle<4, T, Q, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \
-
673  struct { detail::_swizzle<4, T, Q, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \
-
674  struct { detail::_swizzle<4, T, Q, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \
-
675  struct { detail::_swizzle<4, T, Q, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \
-
676  struct { detail::_swizzle<4, T, Q, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \
-
677  struct { detail::_swizzle<4, T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
-
678  struct { detail::_swizzle<4, T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
-
679  struct { detail::_swizzle<4, T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
-
680  struct { detail::_swizzle<4, T, Q, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \
-
681  struct { detail::_swizzle<4, T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
-
682  struct { detail::_swizzle<4, T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
-
683  struct { detail::_swizzle<4, T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
-
684  struct { detail::_swizzle<4, T, Q, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \
-
685  struct { detail::_swizzle<4, T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
-
686  struct { detail::_swizzle<4, T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
-
687  struct { detail::_swizzle<4, T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
-
688  struct { detail::_swizzle<4, T, Q, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \
-
689  struct { detail::_swizzle<4, T, Q, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \
-
690  struct { detail::_swizzle<4, T, Q, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \
-
691  struct { detail::_swizzle<4, T, Q, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \
-
692  struct { detail::_swizzle<4, T, Q, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \
-
693  struct { detail::_swizzle<4, T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
-
694  struct { detail::_swizzle<4, T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
-
695  struct { detail::_swizzle<4, T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
-
696  struct { detail::_swizzle<4, T, Q, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \
-
697  struct { detail::_swizzle<4, T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
-
698  struct { detail::_swizzle<4, T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
-
699  struct { detail::_swizzle<4, T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
-
700  struct { detail::_swizzle<4, T, Q, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \
-
701  struct { detail::_swizzle<4, T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
-
702  struct { detail::_swizzle<4, T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
-
703  struct { detail::_swizzle<4, T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
-
704  struct { detail::_swizzle<4, T, Q, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \
-
705  struct { detail::_swizzle<4, T, Q, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \
-
706  struct { detail::_swizzle<4, T, Q, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \
-
707  struct { detail::_swizzle<4, T, Q, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \
-
708  struct { detail::_swizzle<4, T, Q, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \
-
709  struct { detail::_swizzle<4, T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
-
710  struct { detail::_swizzle<4, T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
-
711  struct { detail::_swizzle<4, T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
-
712  struct { detail::_swizzle<4, T, Q, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \
-
713  struct { detail::_swizzle<4, T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
-
714  struct { detail::_swizzle<4, T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
-
715  struct { detail::_swizzle<4, T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
-
716  struct { detail::_swizzle<4, T, Q, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \
-
717  struct { detail::_swizzle<4, T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
-
718  struct { detail::_swizzle<4, T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
-
719  struct { detail::_swizzle<4, T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \
-
720  struct { detail::_swizzle<4, T, Q, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \
-
721  struct { detail::_swizzle<4, T, Q, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \
-
722  struct { detail::_swizzle<4, T, Q, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \
-
723  struct { detail::_swizzle<4, T, Q, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \
-
724  struct { detail::_swizzle<4, T, Q, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \
-
725  struct { detail::_swizzle<4, T, Q, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \
-
726  struct { detail::_swizzle<4, T, Q, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \
-
727  struct { detail::_swizzle<4, T, Q, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \
-
728  struct { detail::_swizzle<4, T, Q, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \
-
729  struct { detail::_swizzle<4, T, Q, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \
-
730  struct { detail::_swizzle<4, T, Q, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \
-
731  struct { detail::_swizzle<4, T, Q, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \
-
732  struct { detail::_swizzle<4, T, Q, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \
-
733  struct { detail::_swizzle<4, T, Q, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \
-
734  struct { detail::_swizzle<4, T, Q, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \
-
735  struct { detail::_swizzle<4, T, Q, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \
-
736  struct { detail::_swizzle<4, T, Q, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \
-
737  struct { detail::_swizzle<4, T, Q, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \
-
738  struct { detail::_swizzle<4, T, Q, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \
-
739  struct { detail::_swizzle<4, T, Q, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \
-
740  struct { detail::_swizzle<4, T, Q, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \
-
741  struct { detail::_swizzle<4, T, Q, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \
-
742  struct { detail::_swizzle<4, T, Q, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \
-
743  struct { detail::_swizzle<4, T, Q, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \
-
744  struct { detail::_swizzle<4, T, Q, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \
-
745  struct { detail::_swizzle<4, T, Q, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \
-
746  struct { detail::_swizzle<4, T, Q, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \
-
747  struct { detail::_swizzle<4, T, Q, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \
-
748  struct { detail::_swizzle<4, T, Q, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \
-
749  struct { detail::_swizzle<4, T, Q, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \
-
750  struct { detail::_swizzle<4, T, Q, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \
-
751  struct { detail::_swizzle<4, T, Q, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \
-
752  struct { detail::_swizzle<4, T, Q, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \
-
753  struct { detail::_swizzle<4, T, Q, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \
-
754  struct { detail::_swizzle<4, T, Q, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \
-
755  struct { detail::_swizzle<4, T, Q, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \
-
756  struct { detail::_swizzle<4, T, Q, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \
-
757  struct { detail::_swizzle<4, T, Q, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \
-
758  struct { detail::_swizzle<4, T, Q, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \
-
759  struct { detail::_swizzle<4, T, Q, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \
-
760  struct { detail::_swizzle<4, T, Q, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \
-
761  struct { detail::_swizzle<4, T, Q, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \
-
762  struct { detail::_swizzle<4, T, Q, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \
-
763  struct { detail::_swizzle<4, T, Q, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \
-
764  struct { detail::_swizzle<4, T, Q, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \
-
765  struct { detail::_swizzle<4, T, Q, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \
-
766  struct { detail::_swizzle<4, T, Q, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \
-
767  struct { detail::_swizzle<4, T, Q, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \
-
768  struct { detail::_swizzle<4, T, Q, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \
-
769  struct { detail::_swizzle<4, T, Q, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \
-
770  struct { detail::_swizzle<4, T, Q, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \
-
771  struct { detail::_swizzle<4, T, Q, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \
-
772  struct { detail::_swizzle<4, T, Q, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \
-
773  struct { detail::_swizzle<4, T, Q, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \
-
774  struct { detail::_swizzle<4, T, Q, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \
-
775  struct { detail::_swizzle<4, T, Q, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \
-
776  struct { detail::_swizzle<4, T, Q, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \
-
777  struct { detail::_swizzle<4, T, Q, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \
-
778  struct { detail::_swizzle<4, T, Q, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \
-
779  struct { detail::_swizzle<4, T, Q, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \
-
780  struct { detail::_swizzle<4, T, Q, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \
-
781  struct { detail::_swizzle<4, T, Q, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \
-
782  struct { detail::_swizzle<4, T, Q, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \
-
783  struct { detail::_swizzle<4, T, Q, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \
-
784  struct { detail::_swizzle<4, T, Q, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \
-
785  struct { detail::_swizzle<4, T, Q, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \
-
786  struct { detail::_swizzle<4, T, Q, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \
-
787  struct { detail::_swizzle<4, T, Q, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \
-
788  struct { detail::_swizzle<4, T, Q, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \
-
789  struct { detail::_swizzle<4, T, Q, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \
-
790  struct { detail::_swizzle<4, T, Q, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \
-
791  struct { detail::_swizzle<4, T, Q, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \
-
792  struct { detail::_swizzle<4, T, Q, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \
-
793  struct { detail::_swizzle<4, T, Q, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \
-
794  struct { detail::_swizzle<4, T, Q, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \
-
795  struct { detail::_swizzle<4, T, Q, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \
-
796  struct { detail::_swizzle<4, T, Q, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \
-
797  struct { detail::_swizzle<4, T, Q, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \
-
798  struct { detail::_swizzle<4, T, Q, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \
-
799  struct { detail::_swizzle<4, T, Q, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \
-
800  struct { detail::_swizzle<4, T, Q, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \
-
801  struct { detail::_swizzle<4, T, Q, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \
-
802  struct { detail::_swizzle<4, T, Q, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \
-
803  struct { detail::_swizzle<4, T, Q, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \
-
804  struct { detail::_swizzle<4, T, Q, 3,3,3,3> E3 ## E3 ## E3 ## E3; };
-
GLM_FUNC_DECL GLM_CONSTEXPR genType e()
Return e constant.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00005_source.html b/tests/OpenGL/package/glm/doc/api/a00005_source.html deleted file mode 100644 index 5ef1455e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00005_source.html +++ /dev/null @@ -1,781 +0,0 @@ - - - - - - -0.9.9 API documentation: _swizzle_func.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
_swizzle_func.hpp
-
-
-
1 #pragma once
-
2 
-
3 #define GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, CONST, A, B) \
-
4  vec<2, T, Q> A ## B() CONST \
-
5  { \
-
6  return vec<2, T, Q>(this->A, this->B); \
-
7  }
-
8 
-
9 #define GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, CONST, A, B, C) \
-
10  vec<3, T, Q> A ## B ## C() CONST \
-
11  { \
-
12  return vec<3, T, Q>(this->A, this->B, this->C); \
-
13  }
-
14 
-
15 #define GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, CONST, A, B, C, D) \
-
16  vec<4, T, Q> A ## B ## C ## D() CONST \
-
17  { \
-
18  return vec<4, T, Q>(this->A, this->B, this->C, this->D); \
-
19  }
-
20 
-
21 #define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(T, P, L, CONST, A, B) \
-
22  template<typename T> \
-
23  vec<L, T, Q> vec<L, T, Q>::A ## B() CONST \
-
24  { \
-
25  return vec<2, T, Q>(this->A, this->B); \
-
26  }
-
27 
-
28 #define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(T, P, L, CONST, A, B, C) \
-
29  template<typename T> \
-
30  vec<3, T, Q> vec<L, T, Q>::A ## B ## C() CONST \
-
31  { \
-
32  return vec<3, T, Q>(this->A, this->B, this->C); \
-
33  }
-
34 
-
35 #define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(T, P, L, CONST, A, B, C, D) \
-
36  template<typename T> \
-
37  vec<4, T, Q> vec<L, T, Q>::A ## B ## C ## D() CONST \
-
38  { \
-
39  return vec<4, T, Q>(this->A, this->B, this->C, this->D); \
-
40  }
-
41 
-
42 #define GLM_MUTABLE
-
43 
-
44 #define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, A, B) \
-
45  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, A, B) \
-
46  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, B, A)
-
47 
-
48 #define GLM_SWIZZLE_GEN_REF_FROM_VEC2(T, P) \
-
49  GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, x, y) \
-
50  GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, r, g) \
-
51  GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, s, t)
-
52 
-
53 #define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
-
54  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \
-
55  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \
-
56  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \
-
57  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \
-
58  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \
-
59  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B)
-
60 
-
61 #define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
-
62  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, B, C) \
-
63  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, C, B) \
-
64  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, A, C) \
-
65  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, C, A) \
-
66  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, A, B) \
-
67  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, B, A)
-
68 
-
69 #define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, A, B, C) \
-
70  GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
-
71  GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C)
-
72 
-
73 #define GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, P) \
-
74  GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, x, y, z) \
-
75  GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, r, g, b) \
-
76  GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, s, t, p)
-
77 
-
78 #define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
-
79  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \
-
80  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \
-
81  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, D) \
-
82  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \
-
83  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \
-
84  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, D) \
-
85  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \
-
86  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) \
-
87  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, D) \
-
88  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, A) \
-
89  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, B) \
-
90  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, C)
-
91 
-
92 #define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
-
93  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, C) \
-
94  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, D) \
-
95  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, B) \
-
96  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, D) \
-
97  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, B) \
-
98  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, C) \
-
99  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, C) \
-
100  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, D) \
-
101  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, A) \
-
102  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, D) \
-
103  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, A) \
-
104  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, C) \
-
105  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, B) \
-
106  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, D) \
-
107  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, A) \
-
108  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, D) \
-
109  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, A) \
-
110  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, B) \
-
111  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, B) \
-
112  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, C) \
-
113  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, A) \
-
114  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, C) \
-
115  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, A) \
-
116  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, B)
-
117 
-
118 #define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
-
119  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, B, D) \
-
120  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, D, B) \
-
121  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, B, C) \
-
122  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, C, B) \
-
123  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, D, C) \
-
124  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, C, D) \
-
125  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, A, D) \
-
126  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, D, A) \
-
127  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, A, C) \
-
128  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, C, A) \
-
129  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, D, C) \
-
130  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, C, D) \
-
131  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, A, D) \
-
132  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, D, A) \
-
133  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, A, B) \
-
134  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, B, A) \
-
135  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, D, B) \
-
136  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, B, D) \
-
137  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, B, A) \
-
138  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, A, B) \
-
139  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, B, C) \
-
140  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, C, B) \
-
141  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, A, C) \
-
142  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, C, A)
-
143 
-
144 #define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, A, B, C, D) \
-
145  GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
-
146  GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
-
147  GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)
-
148 
-
149 #define GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, P) \
-
150  GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, x, y, z, w) \
-
151  GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, r, g, b, a) \
-
152  GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, s, t, p, q)
-
153 
-
154 #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \
-
155  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \
-
156  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \
-
157  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \
-
158  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B)
-
159 
-
160 #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \
-
161  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \
-
162  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \
-
163  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \
-
164  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \
-
165  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \
-
166  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \
-
167  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \
-
168  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B)
-
169 
-
170 #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) \
-
171  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \
-
172  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \
-
173  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \
-
174  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \
-
175  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \
-
176  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \
-
177  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \
-
178  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \
-
179  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \
-
180  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \
-
181  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \
-
182  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \
-
183  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \
-
184  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \
-
185  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \
-
186  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B)
-
187 
-
188 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, A, B) \
-
189  GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \
-
190  GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \
-
191  GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B)
-
192 
-
193 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P) \
-
194  GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, x, y) \
-
195  GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, r, g) \
-
196  GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, s, t)
-
197 
-
198 #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
-
199  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \
-
200  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \
-
201  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \
-
202  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \
-
203  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \
-
204  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \
-
205  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \
-
206  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \
-
207  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C)
-
208 
-
209 #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
-
210  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \
-
211  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \
-
212  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \
-
213  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \
-
214  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \
-
215  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \
-
216  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \
-
217  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \
-
218  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \
-
219  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \
-
220  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \
-
221  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \
-
222  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \
-
223  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \
-
224  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \
-
225  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \
-
226  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \
-
227  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \
-
228  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \
-
229  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \
-
230  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \
-
231  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \
-
232  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \
-
233  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \
-
234  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \
-
235  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \
-
236  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C)
-
237 
-
238 #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
-
239  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \
-
240  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \
-
241  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \
-
242  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \
-
243  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \
-
244  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \
-
245  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \
-
246  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \
-
247  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \
-
248  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \
-
249  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \
-
250  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \
-
251  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \
-
252  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \
-
253  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \
-
254  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \
-
255  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \
-
256  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \
-
257  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \
-
258  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \
-
259  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \
-
260  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \
-
261  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \
-
262  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \
-
263  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \
-
264  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \
-
265  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \
-
266  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \
-
267  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \
-
268  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \
-
269  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \
-
270  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \
-
271  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \
-
272  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \
-
273  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \
-
274  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \
-
275  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \
-
276  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \
-
277  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \
-
278  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \
-
279  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \
-
280  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \
-
281  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \
-
282  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \
-
283  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \
-
284  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \
-
285  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \
-
286  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \
-
287  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \
-
288  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \
-
289  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \
-
290  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \
-
291  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \
-
292  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \
-
293  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \
-
294  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \
-
295  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \
-
296  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \
-
297  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \
-
298  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \
-
299  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \
-
300  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \
-
301  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \
-
302  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \
-
303  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \
-
304  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \
-
305  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \
-
306  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \
-
307  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \
-
308  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \
-
309  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \
-
310  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \
-
311  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \
-
312  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \
-
313  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \
-
314  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \
-
315  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \
-
316  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \
-
317  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \
-
318  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \
-
319  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C)
-
320 
-
321 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, A, B, C) \
-
322  GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
-
323  GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \
-
324  GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C)
-
325 
-
326 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P) \
-
327  GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, x, y, z) \
-
328  GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, r, g, b) \
-
329  GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, s, t, p)
-
330 
-
331 #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
-
332  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \
-
333  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \
-
334  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \
-
335  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, D) \
-
336  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \
-
337  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \
-
338  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \
-
339  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, D) \
-
340  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \
-
341  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \
-
342  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) \
-
343  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, D) \
-
344  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, A) \
-
345  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, B) \
-
346  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, C) \
-
347  GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, D)
-
348 
-
349 #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
-
350  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \
-
351  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \
-
352  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \
-
353  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, D) \
-
354  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \
-
355  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \
-
356  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \
-
357  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, D) \
-
358  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \
-
359  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \
-
360  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \
-
361  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, D) \
-
362  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, A) \
-
363  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, B) \
-
364  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, C) \
-
365  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, D) \
-
366  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \
-
367  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \
-
368  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \
-
369  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, D) \
-
370  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \
-
371  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \
-
372  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \
-
373  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, D) \
-
374  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \
-
375  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \
-
376  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \
-
377  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, D) \
-
378  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, A) \
-
379  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, B) \
-
380  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, C) \
-
381  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, D) \
-
382  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \
-
383  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \
-
384  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \
-
385  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, D) \
-
386  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \
-
387  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \
-
388  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \
-
389  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, D) \
-
390  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \
-
391  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \
-
392  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) \
-
393  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, D) \
-
394  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, A) \
-
395  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, B) \
-
396  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, C) \
-
397  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, D) \
-
398  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, A) \
-
399  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, B) \
-
400  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, C) \
-
401  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, D) \
-
402  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, A) \
-
403  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, B) \
-
404  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, C) \
-
405  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, D) \
-
406  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, A) \
-
407  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, B) \
-
408  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, C) \
-
409  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, D) \
-
410  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, A) \
-
411  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, B) \
-
412  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, C) \
-
413  GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, D)
-
414 
-
415 #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
-
416  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \
-
417  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \
-
418  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \
-
419  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, D) \
-
420  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \
-
421  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \
-
422  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \
-
423  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, D) \
-
424  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \
-
425  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \
-
426  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \
-
427  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, D) \
-
428  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, A) \
-
429  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, B) \
-
430  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, C) \
-
431  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, D) \
-
432  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \
-
433  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \
-
434  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \
-
435  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, D) \
-
436  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \
-
437  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \
-
438  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \
-
439  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, D) \
-
440  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \
-
441  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \
-
442  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \
-
443  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, D) \
-
444  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, A) \
-
445  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, B) \
-
446  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, C) \
-
447  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, D) \
-
448  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \
-
449  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \
-
450  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \
-
451  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, D) \
-
452  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \
-
453  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \
-
454  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \
-
455  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, D) \
-
456  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \
-
457  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \
-
458  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \
-
459  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, D) \
-
460  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, A) \
-
461  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, B) \
-
462  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, C) \
-
463  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, D) \
-
464  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, A) \
-
465  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, B) \
-
466  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, C) \
-
467  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, D) \
-
468  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, A) \
-
469  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, B) \
-
470  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, C) \
-
471  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, D) \
-
472  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, A) \
-
473  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, B) \
-
474  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, C) \
-
475  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, D) \
-
476  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, A) \
-
477  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, B) \
-
478  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, C) \
-
479  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, D) \
-
480  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \
-
481  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \
-
482  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \
-
483  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, D) \
-
484  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \
-
485  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \
-
486  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \
-
487  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, D) \
-
488  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \
-
489  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \
-
490  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \
-
491  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, D) \
-
492  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, A) \
-
493  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, B) \
-
494  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, C) \
-
495  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, D) \
-
496  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \
-
497  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \
-
498  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \
-
499  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, D) \
-
500  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \
-
501  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \
-
502  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \
-
503  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, D) \
-
504  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \
-
505  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \
-
506  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \
-
507  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, D) \
-
508  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, A) \
-
509  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, B) \
-
510  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, C) \
-
511  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, D) \
-
512  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \
-
513  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \
-
514  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \
-
515  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, D) \
-
516  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \
-
517  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \
-
518  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \
-
519  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, D) \
-
520  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \
-
521  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \
-
522  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \
-
523  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, D) \
-
524  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, A) \
-
525  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, B) \
-
526  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, C) \
-
527  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, D) \
-
528  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, A) \
-
529  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, B) \
-
530  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, C) \
-
531  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, D) \
-
532  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, A) \
-
533  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, B) \
-
534  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, C) \
-
535  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, D) \
-
536  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, A) \
-
537  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, B) \
-
538  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, C) \
-
539  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, D) \
-
540  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, A) \
-
541  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, B) \
-
542  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, C) \
-
543  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, D) \
-
544  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \
-
545  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \
-
546  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \
-
547  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, D) \
-
548  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \
-
549  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \
-
550  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \
-
551  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, D) \
-
552  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \
-
553  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \
-
554  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \
-
555  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, D) \
-
556  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, A) \
-
557  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, B) \
-
558  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, C) \
-
559  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, D) \
-
560  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \
-
561  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \
-
562  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \
-
563  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, D) \
-
564  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \
-
565  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \
-
566  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \
-
567  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, D) \
-
568  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \
-
569  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \
-
570  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \
-
571  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, D) \
-
572  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, A) \
-
573  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, B) \
-
574  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, C) \
-
575  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, D) \
-
576  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \
-
577  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \
-
578  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \
-
579  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, D) \
-
580  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \
-
581  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \
-
582  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \
-
583  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, D) \
-
584  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \
-
585  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \
-
586  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) \
-
587  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, D) \
-
588  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, A) \
-
589  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, B) \
-
590  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, C) \
-
591  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, D) \
-
592  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, A) \
-
593  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, B) \
-
594  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, C) \
-
595  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, D) \
-
596  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, A) \
-
597  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, B) \
-
598  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, C) \
-
599  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, D) \
-
600  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, A) \
-
601  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, B) \
-
602  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, C) \
-
603  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, D) \
-
604  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, A) \
-
605  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, B) \
-
606  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, C) \
-
607  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, D) \
-
608  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, A) \
-
609  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, B) \
-
610  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, C) \
-
611  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, D) \
-
612  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, A) \
-
613  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, B) \
-
614  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, C) \
-
615  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, D) \
-
616  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, A) \
-
617  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, B) \
-
618  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, C) \
-
619  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, D) \
-
620  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, A) \
-
621  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, B) \
-
622  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, C) \
-
623  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, D) \
-
624  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, A) \
-
625  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, B) \
-
626  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, C) \
-
627  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, D) \
-
628  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, A) \
-
629  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, B) \
-
630  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, C) \
-
631  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, D) \
-
632  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, A) \
-
633  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, B) \
-
634  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, C) \
-
635  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, D) \
-
636  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, A) \
-
637  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, B) \
-
638  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, C) \
-
639  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, D) \
-
640  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, A) \
-
641  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, B) \
-
642  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, C) \
-
643  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, D) \
-
644  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, A) \
-
645  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, B) \
-
646  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, C) \
-
647  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, D) \
-
648  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, A) \
-
649  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, B) \
-
650  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, C) \
-
651  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, D) \
-
652  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, A) \
-
653  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, B) \
-
654  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, C) \
-
655  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, D) \
-
656  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, A) \
-
657  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, B) \
-
658  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, C) \
-
659  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, D) \
-
660  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, A) \
-
661  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, B) \
-
662  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, C) \
-
663  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, D) \
-
664  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, A) \
-
665  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, B) \
-
666  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, C) \
-
667  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, D) \
-
668  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, A) \
-
669  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, B) \
-
670  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, C) \
-
671  GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, D)
-
672 
-
673 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, A, B, C, D) \
-
674  GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
-
675  GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \
-
676  GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)
-
677 
-
678 #define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P) \
-
679  GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, x, y, z, w) \
-
680  GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, r, g, b, a) \
-
681  GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, s, t, p, q)
-
682 
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00006_source.html b/tests/OpenGL/package/glm/doc/api/a00006_source.html deleted file mode 100644 index 96923b3b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00006_source.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - -0.9.9 API documentation: _vectorize.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
_vectorize.hpp
-
-
-
1 #pragma once
-
2 
-
3 namespace glm{
-
4 namespace detail
-
5 {
-
6  template<template<length_t L, typename T, qualifier Q> class vec, length_t L, typename R, typename T, qualifier Q>
-
7  struct functor1{};
-
8 
-
9  template<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>
-
10  struct functor1<vec, 1, R, T, Q>
-
11  {
-
12  GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<1, R, Q> call(R (*Func) (T x), vec<1, T, Q> const& v)
-
13  {
-
14  return vec<1, R, Q>(Func(v.x));
-
15  }
-
16  };
-
17 
-
18  template<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>
-
19  struct functor1<vec, 2, R, T, Q>
-
20  {
-
21  GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<2, R, Q> call(R (*Func) (T x), vec<2, T, Q> const& v)
-
22  {
-
23  return vec<2, R, Q>(Func(v.x), Func(v.y));
-
24  }
-
25  };
-
26 
-
27  template<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>
-
28  struct functor1<vec, 3, R, T, Q>
-
29  {
-
30  GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<3, R, Q> call(R (*Func) (T x), vec<3, T, Q> const& v)
-
31  {
-
32  return vec<3, R, Q>(Func(v.x), Func(v.y), Func(v.z));
-
33  }
-
34  };
-
35 
-
36  template<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>
-
37  struct functor1<vec, 4, R, T, Q>
-
38  {
-
39  GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, R, Q> call(R (*Func) (T x), vec<4, T, Q> const& v)
-
40  {
-
41  return vec<4, R, Q>(Func(v.x), Func(v.y), Func(v.z), Func(v.w));
-
42  }
-
43  };
-
44 
-
45  template<template<length_t L, typename T, qualifier Q> class vec, length_t L, typename T, qualifier Q>
-
46  struct functor2{};
-
47 
-
48  template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
-
49  struct functor2<vec, 1, T, Q>
-
50  {
-
51  GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, vec<1, T, Q> const& b)
-
52  {
-
53  return vec<1, T, Q>(Func(a.x, b.x));
-
54  }
-
55  };
-
56 
-
57  template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
-
58  struct functor2<vec, 2, T, Q>
-
59  {
-
60  GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, vec<2, T, Q> const& b)
-
61  {
-
62  return vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y));
-
63  }
-
64  };
-
65 
-
66  template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
-
67  struct functor2<vec, 3, T, Q>
-
68  {
-
69  GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, vec<3, T, Q> const& b)
-
70  {
-
71  return vec<3, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));
-
72  }
-
73  };
-
74 
-
75  template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
-
76  struct functor2<vec, 4, T, Q>
-
77  {
-
78  GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, vec<4, T, Q> const& b)
-
79  {
-
80  return vec<4, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));
-
81  }
-
82  };
-
83 
-
84  template<template<length_t L, typename T, qualifier Q> class vec, length_t L, typename T, qualifier Q>
-
85  struct functor2_vec_sca{};
-
86 
-
87  template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
-
88  struct functor2_vec_sca<vec, 1, T, Q>
-
89  {
-
90  GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, T b)
-
91  {
-
92  return vec<1, T, Q>(Func(a.x, b));
-
93  }
-
94  };
-
95 
-
96  template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
-
97  struct functor2_vec_sca<vec, 2, T, Q>
-
98  {
-
99  GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, T b)
-
100  {
-
101  return vec<2, T, Q>(Func(a.x, b), Func(a.y, b));
-
102  }
-
103  };
-
104 
-
105  template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
-
106  struct functor2_vec_sca<vec, 3, T, Q>
-
107  {
-
108  GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, T b)
-
109  {
-
110  return vec<3, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b));
-
111  }
-
112  };
-
113 
-
114  template<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>
-
115  struct functor2_vec_sca<vec, 4, T, Q>
-
116  {
-
117  GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, T b)
-
118  {
-
119  return vec<4, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));
-
120  }
-
121  };
-
122 
-
123  template<length_t L, typename T, qualifier Q>
-
124  struct functor2_vec_int {};
-
125 
-
126  template<typename T, qualifier Q>
-
127  struct functor2_vec_int<1, T, Q>
-
128  {
-
129  GLM_FUNC_QUALIFIER static vec<1, int, Q> call(int (*Func) (T x, int y), vec<1, T, Q> const& a, vec<1, int, Q> const& b)
-
130  {
-
131  return vec<1, int, Q>(Func(a.x, b.x));
-
132  }
-
133  };
-
134 
-
135  template<typename T, qualifier Q>
-
136  struct functor2_vec_int<2, T, Q>
-
137  {
-
138  GLM_FUNC_QUALIFIER static vec<2, int, Q> call(int (*Func) (T x, int y), vec<2, T, Q> const& a, vec<2, int, Q> const& b)
-
139  {
-
140  return vec<2, int, Q>(Func(a.x, b.x), Func(a.y, b.y));
-
141  }
-
142  };
-
143 
-
144  template<typename T, qualifier Q>
-
145  struct functor2_vec_int<3, T, Q>
-
146  {
-
147  GLM_FUNC_QUALIFIER static vec<3, int, Q> call(int (*Func) (T x, int y), vec<3, T, Q> const& a, vec<3, int, Q> const& b)
-
148  {
-
149  return vec<3, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));
-
150  }
-
151  };
-
152 
-
153  template<typename T, qualifier Q>
-
154  struct functor2_vec_int<4, T, Q>
-
155  {
-
156  GLM_FUNC_QUALIFIER static vec<4, int, Q> call(int (*Func) (T x, int y), vec<4, T, Q> const& a, vec<4, int, Q> const& b)
-
157  {
-
158  return vec<4, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));
-
159  }
-
160  };
-
161 }//namespace detail
-
162 }//namespace glm
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00007.html b/tests/OpenGL/package/glm/doc/api/a00007.html deleted file mode 100644 index bd708c8f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00007.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - -0.9.9 API documentation: associated_min_max.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
associated_min_max.hpp File Reference
-
-
- -

GLM_GTX_associated_min_max -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , typename U >
GLM_FUNC_DECL U associatedMax (T x, U a, T y, U b)
 Maximum comparison between 2 variables and returns 2 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 2, U, Q > associatedMax (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b)
 Maximum comparison between 2 variables and returns 2 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > associatedMax (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b)
 Maximum comparison between 2 variables and returns 2 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMax (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b)
 Maximum comparison between 2 variables and returns 2 associated variable values. More...
 
template<typename T , typename U >
GLM_FUNC_DECL U associatedMax (T x, U a, T y, U b, T z, U c)
 Maximum comparison between 3 variables and returns 3 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMax (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c)
 Maximum comparison between 3 variables and returns 3 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > associatedMax (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c)
 Maximum comparison between 3 variables and returns 3 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMax (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c)
 Maximum comparison between 3 variables and returns 3 associated variable values. More...
 
template<typename T , typename U >
GLM_FUNC_DECL U associatedMax (T x, U a, T y, U b, T z, U c, T w, U d)
 Maximum comparison between 4 variables and returns 4 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMax (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c, vec< L, T, Q > const &w, vec< L, U, Q > const &d)
 Maximum comparison between 4 variables and returns 4 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMax (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c, T w, vec< L, U, Q > const &d)
 Maximum comparison between 4 variables and returns 4 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMax (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &w, U d)
 Maximum comparison between 4 variables and returns 4 associated variable values. More...
 
template<typename T , typename U , qualifier Q>
GLM_FUNC_DECL U associatedMin (T x, U a, T y, U b)
 Minimum comparison between 2 variables and returns 2 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 2, U, Q > associatedMin (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b)
 Minimum comparison between 2 variables and returns 2 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMin (T x, const vec< L, U, Q > &a, T y, const vec< L, U, Q > &b)
 Minimum comparison between 2 variables and returns 2 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMin (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b)
 Minimum comparison between 2 variables and returns 2 associated variable values. More...
 
template<typename T , typename U >
GLM_FUNC_DECL U associatedMin (T x, U a, T y, U b, T z, U c)
 Minimum comparison between 3 variables and returns 3 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMin (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c)
 Minimum comparison between 3 variables and returns 3 associated variable values. More...
 
template<typename T , typename U >
GLM_FUNC_DECL U associatedMin (T x, U a, T y, U b, T z, U c, T w, U d)
 Minimum comparison between 4 variables and returns 4 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMin (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c, vec< L, T, Q > const &w, vec< L, U, Q > const &d)
 Minimum comparison between 4 variables and returns 4 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMin (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c, T w, vec< L, U, Q > const &d)
 Minimum comparison between 4 variables and returns 4 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMin (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &w, U d)
 Minimum comparison between 4 variables and returns 4 associated variable values. More...
 
-

Detailed Description

-

GLM_GTX_associated_min_max

-
See also
Core features (dependence)
-
-gtx_extented_min_max (dependence)
- -

Definition in file associated_min_max.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00007_source.html b/tests/OpenGL/package/glm/doc/api/a00007_source.html deleted file mode 100644 index 45d76a2d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00007_source.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - - -0.9.9 API documentation: associated_min_max.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
associated_min_max.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../glm.hpp"
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # ifndef GLM_ENABLE_EXPERIMENTAL
-
21 # pragma message("GLM: GLM_GTX_associated_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
22 # else
-
23 # pragma message("GLM: GLM_GTX_associated_min_max extension included")
-
24 # endif
-
25 #endif
-
26 
-
27 namespace glm
-
28 {
-
31 
-
34  template<typename T, typename U, qualifier Q>
-
35  GLM_FUNC_DECL U associatedMin(T x, U a, T y, U b);
-
36 
-
39  template<length_t L, typename T, typename U, qualifier Q>
-
40  GLM_FUNC_DECL vec<2, U, Q> associatedMin(
-
41  vec<L, T, Q> const& x, vec<L, U, Q> const& a,
-
42  vec<L, T, Q> const& y, vec<L, U, Q> const& b);
-
43 
-
46  template<length_t L, typename T, typename U, qualifier Q>
-
47  GLM_FUNC_DECL vec<L, U, Q> associatedMin(
-
48  T x, const vec<L, U, Q>& a,
-
49  T y, const vec<L, U, Q>& b);
-
50 
-
53  template<length_t L, typename T, typename U, qualifier Q>
-
54  GLM_FUNC_DECL vec<L, U, Q> associatedMin(
-
55  vec<L, T, Q> const& x, U a,
-
56  vec<L, T, Q> const& y, U b);
-
57 
-
60  template<typename T, typename U>
-
61  GLM_FUNC_DECL U associatedMin(
-
62  T x, U a,
-
63  T y, U b,
-
64  T z, U c);
-
65 
-
68  template<length_t L, typename T, typename U, qualifier Q>
-
69  GLM_FUNC_DECL vec<L, U, Q> associatedMin(
-
70  vec<L, T, Q> const& x, vec<L, U, Q> const& a,
-
71  vec<L, T, Q> const& y, vec<L, U, Q> const& b,
-
72  vec<L, T, Q> const& z, vec<L, U, Q> const& c);
-
73 
-
76  template<typename T, typename U>
-
77  GLM_FUNC_DECL U associatedMin(
-
78  T x, U a,
-
79  T y, U b,
-
80  T z, U c,
-
81  T w, U d);
-
82 
-
85  template<length_t L, typename T, typename U, qualifier Q>
-
86  GLM_FUNC_DECL vec<L, U, Q> associatedMin(
-
87  vec<L, T, Q> const& x, vec<L, U, Q> const& a,
-
88  vec<L, T, Q> const& y, vec<L, U, Q> const& b,
-
89  vec<L, T, Q> const& z, vec<L, U, Q> const& c,
-
90  vec<L, T, Q> const& w, vec<L, U, Q> const& d);
-
91 
-
94  template<length_t L, typename T, typename U, qualifier Q>
-
95  GLM_FUNC_DECL vec<L, U, Q> associatedMin(
-
96  T x, vec<L, U, Q> const& a,
-
97  T y, vec<L, U, Q> const& b,
-
98  T z, vec<L, U, Q> const& c,
-
99  T w, vec<L, U, Q> const& d);
-
100 
-
103  template<length_t L, typename T, typename U, qualifier Q>
-
104  GLM_FUNC_DECL vec<L, U, Q> associatedMin(
-
105  vec<L, T, Q> const& x, U a,
-
106  vec<L, T, Q> const& y, U b,
-
107  vec<L, T, Q> const& z, U c,
-
108  vec<L, T, Q> const& w, U d);
-
109 
-
112  template<typename T, typename U>
-
113  GLM_FUNC_DECL U associatedMax(T x, U a, T y, U b);
-
114 
-
117  template<length_t L, typename T, typename U, qualifier Q>
-
118  GLM_FUNC_DECL vec<2, U, Q> associatedMax(
-
119  vec<L, T, Q> const& x, vec<L, U, Q> const& a,
-
120  vec<L, T, Q> const& y, vec<L, U, Q> const& b);
-
121 
-
124  template<length_t L, typename T, typename U, qualifier Q>
-
125  GLM_FUNC_DECL vec<L, T, Q> associatedMax(
-
126  T x, vec<L, U, Q> const& a,
-
127  T y, vec<L, U, Q> const& b);
-
128 
-
131  template<length_t L, typename T, typename U, qualifier Q>
-
132  GLM_FUNC_DECL vec<L, U, Q> associatedMax(
-
133  vec<L, T, Q> const& x, U a,
-
134  vec<L, T, Q> const& y, U b);
-
135 
-
138  template<typename T, typename U>
-
139  GLM_FUNC_DECL U associatedMax(
-
140  T x, U a,
-
141  T y, U b,
-
142  T z, U c);
-
143 
-
146  template<length_t L, typename T, typename U, qualifier Q>
-
147  GLM_FUNC_DECL vec<L, U, Q> associatedMax(
-
148  vec<L, T, Q> const& x, vec<L, U, Q> const& a,
-
149  vec<L, T, Q> const& y, vec<L, U, Q> const& b,
-
150  vec<L, T, Q> const& z, vec<L, U, Q> const& c);
-
151 
-
154  template<length_t L, typename T, typename U, qualifier Q>
-
155  GLM_FUNC_DECL vec<L, T, Q> associatedMax(
-
156  T x, vec<L, U, Q> const& a,
-
157  T y, vec<L, U, Q> const& b,
-
158  T z, vec<L, U, Q> const& c);
-
159 
-
162  template<length_t L, typename T, typename U, qualifier Q>
-
163  GLM_FUNC_DECL vec<L, U, Q> associatedMax(
-
164  vec<L, T, Q> const& x, U a,
-
165  vec<L, T, Q> const& y, U b,
-
166  vec<L, T, Q> const& z, U c);
-
167 
-
170  template<typename T, typename U>
-
171  GLM_FUNC_DECL U associatedMax(
-
172  T x, U a,
-
173  T y, U b,
-
174  T z, U c,
-
175  T w, U d);
-
176 
-
179  template<length_t L, typename T, typename U, qualifier Q>
-
180  GLM_FUNC_DECL vec<L, U, Q> associatedMax(
-
181  vec<L, T, Q> const& x, vec<L, U, Q> const& a,
-
182  vec<L, T, Q> const& y, vec<L, U, Q> const& b,
-
183  vec<L, T, Q> const& z, vec<L, U, Q> const& c,
-
184  vec<L, T, Q> const& w, vec<L, U, Q> const& d);
-
185 
-
188  template<length_t L, typename T, typename U, qualifier Q>
-
189  GLM_FUNC_DECL vec<L, U, Q> associatedMax(
-
190  T x, vec<L, U, Q> const& a,
-
191  T y, vec<L, U, Q> const& b,
-
192  T z, vec<L, U, Q> const& c,
-
193  T w, vec<L, U, Q> const& d);
-
194 
-
197  template<length_t L, typename T, typename U, qualifier Q>
-
198  GLM_FUNC_DECL vec<L, U, Q> associatedMax(
-
199  vec<L, T, Q> const& x, U a,
-
200  vec<L, T, Q> const& y, U b,
-
201  vec<L, T, Q> const& z, U c,
-
202  vec<L, T, Q> const& w, U d);
-
203 
-
205 } //namespace glm
-
206 
-
207 #include "associated_min_max.inl"
-
GLM_FUNC_DECL vec< L, U, Q > associatedMax(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &w, U d)
Maximum comparison between 4 variables and returns 4 associated variable values.
-
GLM_FUNC_DECL vec< L, U, Q > associatedMin(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &w, U d)
Minimum comparison between 4 variables and returns 4 associated variable values.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00008.html b/tests/OpenGL/package/glm/doc/api/a00008.html deleted file mode 100644 index 481484f3..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00008.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -0.9.9 API documentation: bit.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
bit.hpp File Reference
-
-
- -

GLM_GTX_bit -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genIUType >
GLM_FUNC_DECL genIUType highestBitValue (genIUType Value)
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > highestBitValue (vec< L, T, Q > const &value)
 Find the highest bit set to 1 in a integer variable and return its value. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType lowestBitValue (genIUType Value)
 
template<typename genIUType >
GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoAbove (genIUType Value)
 Return the power of two number which value is just higher the input value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > powerOfTwoAbove (vec< L, T, Q > const &value)
 Return the power of two number which value is just higher the input value. More...
 
template<typename genIUType >
GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoBelow (genIUType Value)
 Return the power of two number which value is just lower the input value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > powerOfTwoBelow (vec< L, T, Q > const &value)
 Return the power of two number which value is just lower the input value. More...
 
template<typename genIUType >
GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoNearest (genIUType Value)
 Return the power of two number which value is the closet to the input value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > powerOfTwoNearest (vec< L, T, Q > const &value)
 Return the power of two number which value is the closet to the input value. More...
 
-

Detailed Description

-

GLM_GTX_bit

-
See also
Core features (dependence)
- -

Definition in file bit.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00008_source.html b/tests/OpenGL/package/glm/doc/api/a00008_source.html deleted file mode 100644 index ea56523d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00008_source.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - -0.9.9 API documentation: bit.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
bit.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependencies
-
16 #include "../gtc/bitfield.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_bit is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_bit extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
32  template<typename genIUType>
-
33  GLM_FUNC_DECL genIUType highestBitValue(genIUType Value);
-
34 
-
36  template<typename genIUType>
-
37  GLM_FUNC_DECL genIUType lowestBitValue(genIUType Value);
-
38 
-
42  template<length_t L, typename T, qualifier Q>
-
43  GLM_FUNC_DECL vec<L, T, Q> highestBitValue(vec<L, T, Q> const& value);
-
44 
-
50  template<typename genIUType>
-
51  GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoAbove(genIUType Value);
-
52 
-
58  template<length_t L, typename T, qualifier Q>
-
59  GLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> powerOfTwoAbove(vec<L, T, Q> const& value);
-
60 
-
66  template<typename genIUType>
-
67  GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoBelow(genIUType Value);
-
68 
-
74  template<length_t L, typename T, qualifier Q>
-
75  GLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> powerOfTwoBelow(vec<L, T, Q> const& value);
-
76 
-
82  template<typename genIUType>
-
83  GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoNearest(genIUType Value);
-
84 
-
90  template<length_t L, typename T, qualifier Q>
-
91  GLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> powerOfTwoNearest(vec<L, T, Q> const& value);
-
92 
-
94 } //namespace glm
-
95 
-
96 
-
97 #include "bit.inl"
-
98 
-
GLM_FUNC_DECL vec< L, T, Q > highestBitValue(vec< L, T, Q > const &value)
Find the highest bit set to 1 in a integer variable and return its value.
-
GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > powerOfTwoBelow(vec< L, T, Q > const &value)
Return the power of two number which value is just lower the input value.
-
GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > powerOfTwoAbove(vec< L, T, Q > const &value)
Return the power of two number which value is just higher the input value.
-
GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > powerOfTwoNearest(vec< L, T, Q > const &value)
Return the power of two number which value is the closet to the input value.
-
GLM_FUNC_DECL genIUType lowestBitValue(genIUType Value)
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00009.html b/tests/OpenGL/package/glm/doc/api/a00009.html deleted file mode 100644 index 429ccf04..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00009.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - -0.9.9 API documentation: bitfield.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
bitfield.hpp File Reference
-
-
- -

GLM_GTC_bitfield -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GLM_FUNC_DECL glm::u8vec2 bitfieldDeinterleave (glm::uint16 x)
 Deinterleaves the bits of x. More...
 
GLM_FUNC_DECL glm::u16vec2 bitfieldDeinterleave (glm::uint32 x)
 Deinterleaves the bits of x. More...
 
GLM_FUNC_DECL glm::u32vec2 bitfieldDeinterleave (glm::uint64 x)
 Deinterleaves the bits of x. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType bitfieldFillOne (genIUType Value, int FirstBit, int BitCount)
 Set to 1 a range of bits. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > bitfieldFillOne (vec< L, T, Q > const &Value, int FirstBit, int BitCount)
 Set to 1 a range of bits. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType bitfieldFillZero (genIUType Value, int FirstBit, int BitCount)
 Set to 0 a range of bits. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > bitfieldFillZero (vec< L, T, Q > const &Value, int FirstBit, int BitCount)
 Set to 0 a range of bits. More...
 
GLM_FUNC_DECL int16 bitfieldInterleave (int8 x, int8 y)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL uint16 bitfieldInterleave (uint8 x, uint8 y)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL uint16 bitfieldInterleave (u8vec2 const &v)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL int32 bitfieldInterleave (int16 x, int16 y)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL uint32 bitfieldInterleave (uint16 x, uint16 y)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL uint32 bitfieldInterleave (u16vec2 const &v)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL int64 bitfieldInterleave (int32 x, int32 y)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL uint64 bitfieldInterleave (uint32 x, uint32 y)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL uint64 bitfieldInterleave (u32vec2 const &v)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL int32 bitfieldInterleave (int8 x, int8 y, int8 z)
 Interleaves the bits of x, y and z. More...
 
GLM_FUNC_DECL uint32 bitfieldInterleave (uint8 x, uint8 y, uint8 z)
 Interleaves the bits of x, y and z. More...
 
GLM_FUNC_DECL int64 bitfieldInterleave (int16 x, int16 y, int16 z)
 Interleaves the bits of x, y and z. More...
 
GLM_FUNC_DECL uint64 bitfieldInterleave (uint16 x, uint16 y, uint16 z)
 Interleaves the bits of x, y and z. More...
 
GLM_FUNC_DECL int64 bitfieldInterleave (int32 x, int32 y, int32 z)
 Interleaves the bits of x, y and z. More...
 
GLM_FUNC_DECL uint64 bitfieldInterleave (uint32 x, uint32 y, uint32 z)
 Interleaves the bits of x, y and z. More...
 
GLM_FUNC_DECL int32 bitfieldInterleave (int8 x, int8 y, int8 z, int8 w)
 Interleaves the bits of x, y, z and w. More...
 
GLM_FUNC_DECL uint32 bitfieldInterleave (uint8 x, uint8 y, uint8 z, uint8 w)
 Interleaves the bits of x, y, z and w. More...
 
GLM_FUNC_DECL int64 bitfieldInterleave (int16 x, int16 y, int16 z, int16 w)
 Interleaves the bits of x, y, z and w. More...
 
GLM_FUNC_DECL uint64 bitfieldInterleave (uint16 x, uint16 y, uint16 z, uint16 w)
 Interleaves the bits of x, y, z and w. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType bitfieldRotateLeft (genIUType In, int Shift)
 Rotate all bits to the left. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > bitfieldRotateLeft (vec< L, T, Q > const &In, int Shift)
 Rotate all bits to the left. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType bitfieldRotateRight (genIUType In, int Shift)
 Rotate all bits to the right. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > bitfieldRotateRight (vec< L, T, Q > const &In, int Shift)
 Rotate all bits to the right. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType mask (genIUType Bits)
 Build a mask of 'count' bits. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > mask (vec< L, T, Q > const &v)
 Build a mask of 'count' bits. More...
 
-

Detailed Description

-

GLM_GTC_bitfield

-
See also
Core features (dependence)
-
-GLM_GTC_bitfield (dependence)
- -

Definition in file bitfield.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00009_source.html b/tests/OpenGL/package/glm/doc/api/a00009_source.html deleted file mode 100644 index ba214961..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00009_source.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - -0.9.9 API documentation: bitfield.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
bitfield.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #include "../detail/setup.hpp"
-
15 
-
16 #pragma once
-
17 
-
18 // Dependencies
-
19 #include "../ext/scalar_int_sized.hpp"
-
20 #include "../ext/scalar_uint_sized.hpp"
-
21 #include "../detail/qualifier.hpp"
-
22 #include "../detail/_vectorize.hpp"
-
23 #include "type_precision.hpp"
-
24 #include <limits>
-
25 
-
26 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
27 # pragma message("GLM: GLM_GTC_bitfield extension included")
-
28 #endif
-
29 
-
30 namespace glm
-
31 {
-
34 
-
38  template<typename genIUType>
-
39  GLM_FUNC_DECL genIUType mask(genIUType Bits);
-
40 
-
48  template<length_t L, typename T, qualifier Q>
-
49  GLM_FUNC_DECL vec<L, T, Q> mask(vec<L, T, Q> const& v);
-
50 
-
54  template<typename genIUType>
-
55  GLM_FUNC_DECL genIUType bitfieldRotateRight(genIUType In, int Shift);
-
56 
-
64  template<length_t L, typename T, qualifier Q>
-
65  GLM_FUNC_DECL vec<L, T, Q> bitfieldRotateRight(vec<L, T, Q> const& In, int Shift);
-
66 
-
70  template<typename genIUType>
-
71  GLM_FUNC_DECL genIUType bitfieldRotateLeft(genIUType In, int Shift);
-
72 
-
80  template<length_t L, typename T, qualifier Q>
-
81  GLM_FUNC_DECL vec<L, T, Q> bitfieldRotateLeft(vec<L, T, Q> const& In, int Shift);
-
82 
-
86  template<typename genIUType>
-
87  GLM_FUNC_DECL genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount);
-
88 
-
96  template<length_t L, typename T, qualifier Q>
-
97  GLM_FUNC_DECL vec<L, T, Q> bitfieldFillOne(vec<L, T, Q> const& Value, int FirstBit, int BitCount);
-
98 
-
102  template<typename genIUType>
-
103  GLM_FUNC_DECL genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount);
-
104 
-
112  template<length_t L, typename T, qualifier Q>
-
113  GLM_FUNC_DECL vec<L, T, Q> bitfieldFillZero(vec<L, T, Q> const& Value, int FirstBit, int BitCount);
-
114 
-
120  GLM_FUNC_DECL int16 bitfieldInterleave(int8 x, int8 y);
-
121 
-
127  GLM_FUNC_DECL uint16 bitfieldInterleave(uint8 x, uint8 y);
-
128 
-
134  GLM_FUNC_DECL uint16 bitfieldInterleave(u8vec2 const& v);
-
135 
- -
140 
-
146  GLM_FUNC_DECL int32 bitfieldInterleave(int16 x, int16 y);
-
147 
-
153  GLM_FUNC_DECL uint32 bitfieldInterleave(uint16 x, uint16 y);
-
154 
-
160  GLM_FUNC_DECL uint32 bitfieldInterleave(u16vec2 const& v);
-
161 
- -
166 
-
172  GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y);
-
173 
-
179  GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y);
-
180 
-
186  GLM_FUNC_DECL uint64 bitfieldInterleave(u32vec2 const& v);
-
187 
- -
192 
-
198  GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z);
-
199 
-
205  GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z);
-
206 
-
212  GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z);
-
213 
-
219  GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z);
-
220 
-
226  GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y, int32 z);
-
227 
-
233  GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z);
-
234 
-
240  GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w);
-
241 
-
247  GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w);
-
248 
-
254  GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w);
-
255 
-
261  GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w);
-
262 
-
264 } //namespace glm
-
265 
-
266 #include "bitfield.inl"
-
detail::uint32 uint32
32 bit unsigned integer type.
-
GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w)
Interleaves the bits of x, y, z and w.
-
GLM_FUNC_DECL glm::u32vec2 bitfieldDeinterleave(glm::uint64 x)
Deinterleaves the bits of x.
-
GLM_FUNC_DECL vec< L, T, Q > bitfieldFillZero(vec< L, T, Q > const &Value, int FirstBit, int BitCount)
Set to 0 a range of bits.
-
detail::uint16 uint16
16 bit unsigned integer type.
-
vec< 2, u8, defaultp > u8vec2
Default qualifier 8 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:340
-
GLM_FUNC_DECL vec< L, T, Q > bitfieldRotateLeft(vec< L, T, Q > const &In, int Shift)
Rotate all bits to the left.
-
GLM_FUNC_DECL vec< L, T, Q > mask(vec< L, T, Q > const &v)
Build a mask of 'count' bits.
-
detail::uint64 uint64
64 bit unsigned integer type.
-
GLM_FUNC_DECL vec< L, T, Q > bitfieldFillOne(vec< L, T, Q > const &Value, int FirstBit, int BitCount)
Set to 1 a range of bits.
-
GLM_GTC_type_precision
-
detail::int64 int64
64 bit signed integer type.
-
vec< 2, u32, defaultp > u32vec2
Default qualifier 32 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:380
-
GLM_FUNC_DECL vec< L, T, Q > bitfieldRotateRight(vec< L, T, Q > const &In, int Shift)
Rotate all bits to the right.
-
vec< 2, u16, defaultp > u16vec2
Default qualifier 16 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:360
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00010.html b/tests/OpenGL/package/glm/doc/api/a00010.html deleted file mode 100644 index 427c3ad1..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00010.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - -0.9.9 API documentation: closest_point.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
closest_point.hpp File Reference
-
-
- -

GLM_GTX_closest_point -More...

- -

Go to the source code of this file.

- - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > closestPointOnLine (vec< 3, T, Q > const &point, vec< 3, T, Q > const &a, vec< 3, T, Q > const &b)
 Find the point on a straight line which is the closet of a point. More...
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 2, T, Q > closestPointOnLine (vec< 2, T, Q > const &point, vec< 2, T, Q > const &a, vec< 2, T, Q > const &b)
 2d lines work as well
 
-

Detailed Description

-

GLM_GTX_closest_point

-
See also
Core features (dependence)
- -

Definition in file closest_point.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00010_source.html b/tests/OpenGL/package/glm/doc/api/a00010_source.html deleted file mode 100644 index 57de3ceb..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00010_source.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - -0.9.9 API documentation: closest_point.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
closest_point.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_closest_point extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
33  template<typename T, qualifier Q>
-
34  GLM_FUNC_DECL vec<3, T, Q> closestPointOnLine(
-
35  vec<3, T, Q> const& point,
-
36  vec<3, T, Q> const& a,
-
37  vec<3, T, Q> const& b);
-
38 
-
40  template<typename T, qualifier Q>
-
41  GLM_FUNC_DECL vec<2, T, Q> closestPointOnLine(
-
42  vec<2, T, Q> const& point,
-
43  vec<2, T, Q> const& a,
-
44  vec<2, T, Q> const& b);
-
45 
-
47 }// namespace glm
-
48 
-
49 #include "closest_point.inl"
-
GLM_FUNC_DECL vec< 2, T, Q > closestPointOnLine(vec< 2, T, Q > const &point, vec< 2, T, Q > const &a, vec< 2, T, Q > const &b)
2d lines work as well
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00011.html b/tests/OpenGL/package/glm/doc/api/a00011.html deleted file mode 100644 index fc81397e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00011.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - -0.9.9 API documentation: color_encoding.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
color_encoding.hpp File Reference
-
-
- -

GLM_GTX_color_encoding -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Functions

-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > convertD65XYZToD50XYZ (vec< 3, T, Q > const &ColorD65XYZ)
 Convert a D65 YUV color to D50 YUV.
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > convertD65XYZToLinearSRGB (vec< 3, T, Q > const &ColorD65XYZ)
 Convert a D65 YUV color to linear sRGB.
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > convertLinearSRGBToD50XYZ (vec< 3, T, Q > const &ColorLinearSRGB)
 Convert a linear sRGB color to D50 YUV.
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > convertLinearSRGBToD65XYZ (vec< 3, T, Q > const &ColorLinearSRGB)
 Convert a linear sRGB color to D65 YUV.
 
-

Detailed Description

-

GLM_GTX_color_encoding

-
See also
Core features (dependence)
-
-GLM_GTX_color_encoding (dependence)
- -

Definition in file color_encoding.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00011_source.html b/tests/OpenGL/package/glm/doc/api/a00011_source.html deleted file mode 100644 index 0deaac45..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00011_source.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - -0.9.9 API documentation: color_encoding.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
color_encoding.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependencies
-
17 #include "../detail/setup.hpp"
-
18 #include "../detail/qualifier.hpp"
-
19 #include "../vec3.hpp"
-
20 #include <limits>
-
21 
-
22 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
23 # ifndef GLM_ENABLE_EXPERIMENTAL
-
24 # pragma message("GLM: GLM_GTC_color_encoding is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
25 # else
-
26 # pragma message("GLM: GLM_GTC_color_encoding extension included")
-
27 # endif
-
28 #endif
-
29 
-
30 namespace glm
-
31 {
-
34 
-
36  template<typename T, qualifier Q>
-
37  GLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB);
-
38 
-
40  template<typename T, qualifier Q>
-
41  GLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB);
-
42 
-
44  template<typename T, qualifier Q>
-
45  GLM_FUNC_DECL vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ);
-
46 
-
48  template<typename T, qualifier Q>
-
49  GLM_FUNC_DECL vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ);
-
50 
-
52 } //namespace glm
-
53 
-
54 #include "color_encoding.inl"
-
GLM_FUNC_DECL vec< 3, T, Q > convertD65XYZToLinearSRGB(vec< 3, T, Q > const &ColorD65XYZ)
Convert a D65 YUV color to linear sRGB.
-
GLM_FUNC_DECL vec< 3, T, Q > convertLinearSRGBToD50XYZ(vec< 3, T, Q > const &ColorLinearSRGB)
Convert a linear sRGB color to D50 YUV.
-
GLM_FUNC_DECL vec< 3, T, Q > convertLinearSRGBToD65XYZ(vec< 3, T, Q > const &ColorLinearSRGB)
Convert a linear sRGB color to D65 YUV.
-
GLM_FUNC_DECL vec< 3, T, Q > convertD65XYZToD50XYZ(vec< 3, T, Q > const &ColorD65XYZ)
Convert a D65 YUV color to D50 YUV.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00012.html b/tests/OpenGL/package/glm/doc/api/a00012.html deleted file mode 100644 index 4262e1e9..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00012.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -0.9.9 API documentation: color_space.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
gtc/color_space.hpp File Reference
-
-
- -

GLM_GTC_color_space -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > convertLinearToSRGB (vec< L, T, Q > const &ColorLinear)
 Convert a linear color to sRGB color using a standard gamma correction. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > convertLinearToSRGB (vec< L, T, Q > const &ColorLinear, T Gamma)
 Convert a linear color to sRGB color using a custom gamma correction. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > convertSRGBToLinear (vec< L, T, Q > const &ColorSRGB)
 Convert a sRGB color to linear color using a standard gamma correction. More...
 
-template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > convertSRGBToLinear (vec< L, T, Q > const &ColorSRGB, T Gamma)
 Convert a sRGB color to linear color using a custom gamma correction.
 
-

Detailed Description

-

GLM_GTC_color_space

-
See also
Core features (dependence)
-
-GLM_GTC_color_space (dependence)
- -

Definition in file gtc/color_space.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00012_source.html b/tests/OpenGL/package/glm/doc/api/a00012_source.html deleted file mode 100644 index 8f864b9f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00012_source.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - -0.9.9 API documentation: color_space.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
gtc/color_space.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependencies
-
17 #include "../detail/setup.hpp"
-
18 #include "../detail/qualifier.hpp"
-
19 #include "../exponential.hpp"
-
20 #include "../vec3.hpp"
-
21 #include "../vec4.hpp"
-
22 #include <limits>
-
23 
-
24 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
25 # pragma message("GLM: GLM_GTC_color_space extension included")
-
26 #endif
-
27 
-
28 namespace glm
-
29 {
-
32 
-
35  template<length_t L, typename T, qualifier Q>
-
36  GLM_FUNC_DECL vec<L, T, Q> convertLinearToSRGB(vec<L, T, Q> const& ColorLinear);
-
37 
-
40  template<length_t L, typename T, qualifier Q>
-
41  GLM_FUNC_DECL vec<L, T, Q> convertLinearToSRGB(vec<L, T, Q> const& ColorLinear, T Gamma);
-
42 
-
45  template<length_t L, typename T, qualifier Q>
-
46  GLM_FUNC_DECL vec<L, T, Q> convertSRGBToLinear(vec<L, T, Q> const& ColorSRGB);
-
47 
-
49  // IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb
-
50  template<length_t L, typename T, qualifier Q>
-
51  GLM_FUNC_DECL vec<L, T, Q> convertSRGBToLinear(vec<L, T, Q> const& ColorSRGB, T Gamma);
-
52 
-
54 } //namespace glm
-
55 
-
56 #include "color_space.inl"
-
GLM_FUNC_DECL vec< L, T, Q > convertLinearToSRGB(vec< L, T, Q > const &ColorLinear, T Gamma)
Convert a linear color to sRGB color using a custom gamma correction.
-
GLM_FUNC_DECL vec< L, T, Q > convertSRGBToLinear(vec< L, T, Q > const &ColorSRGB, T Gamma)
Convert a sRGB color to linear color using a custom gamma correction.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00013.html b/tests/OpenGL/package/glm/doc/api/a00013.html deleted file mode 100644 index 0c209950..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00013.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - -0.9.9 API documentation: color_space.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
gtx/color_space.hpp File Reference
-
-
- -

GLM_GTX_color_space -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > hsvColor (vec< 3, T, Q > const &rgbValue)
 Converts a color from RGB color space to its color in HSV color space. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T luminosity (vec< 3, T, Q > const &color)
 Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rgbColor (vec< 3, T, Q > const &hsvValue)
 Converts a color from HSV color space to its color in RGB color space. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > saturation (T const s)
 Build a saturation matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > saturation (T const s, vec< 3, T, Q > const &color)
 Modify the saturation of a color. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > saturation (T const s, vec< 4, T, Q > const &color)
 Modify the saturation of a color. More...
 
-

Detailed Description

-

GLM_GTX_color_space

-
See also
Core features (dependence)
- -

Definition in file gtx/color_space.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00013_source.html b/tests/OpenGL/package/glm/doc/api/a00013_source.html deleted file mode 100644 index e85a5658..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00013_source.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - -0.9.9 API documentation: color_space.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
gtx/color_space.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_color_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_color_space extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
33  template<typename T, qualifier Q>
-
34  GLM_FUNC_DECL vec<3, T, Q> rgbColor(
-
35  vec<3, T, Q> const& hsvValue);
-
36 
-
39  template<typename T, qualifier Q>
-
40  GLM_FUNC_DECL vec<3, T, Q> hsvColor(
-
41  vec<3, T, Q> const& rgbValue);
-
42 
-
45  template<typename T>
-
46  GLM_FUNC_DECL mat<4, 4, T, defaultp> saturation(
-
47  T const s);
-
48 
-
51  template<typename T, qualifier Q>
-
52  GLM_FUNC_DECL vec<3, T, Q> saturation(
-
53  T const s,
-
54  vec<3, T, Q> const& color);
-
55 
-
58  template<typename T, qualifier Q>
-
59  GLM_FUNC_DECL vec<4, T, Q> saturation(
-
60  T const s,
-
61  vec<4, T, Q> const& color);
-
62 
-
65  template<typename T, qualifier Q>
-
66  GLM_FUNC_DECL T luminosity(
-
67  vec<3, T, Q> const& color);
-
68 
-
70 }//namespace glm
-
71 
-
72 #include "color_space.inl"
-
GLM_FUNC_DECL T luminosity(vec< 3, T, Q > const &color)
Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.
-
GLM_FUNC_DECL vec< 4, T, Q > saturation(T const s, vec< 4, T, Q > const &color)
Modify the saturation of a color.
-
GLM_FUNC_DECL vec< 3, T, Q > rgbColor(vec< 3, T, Q > const &hsvValue)
Converts a color from HSV color space to its color in RGB color space.
-
GLM_FUNC_DECL vec< 3, T, Q > hsvColor(vec< 3, T, Q > const &rgbValue)
Converts a color from RGB color space to its color in HSV color space.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00014.html b/tests/OpenGL/package/glm/doc/api/a00014.html deleted file mode 100644 index 5e838b7a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00014.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - -0.9.9 API documentation: color_space_YCoCg.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
color_space_YCoCg.hpp File Reference
-
-
- -

GLM_GTX_color_space_YCoCg -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rgb2YCoCg (vec< 3, T, Q > const &rgbColor)
 Convert a color from RGB color space to YCoCg color space. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rgb2YCoCgR (vec< 3, T, Q > const &rgbColor)
 Convert a color from RGB color space to YCoCgR color space. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > YCoCg2rgb (vec< 3, T, Q > const &YCoCgColor)
 Convert a color from YCoCg color space to RGB color space. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > YCoCgR2rgb (vec< 3, T, Q > const &YCoCgColor)
 Convert a color from YCoCgR color space to RGB color space. More...
 
-

Detailed Description

-

GLM_GTX_color_space_YCoCg

-
See also
Core features (dependence)
- -

Definition in file color_space_YCoCg.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00014_source.html b/tests/OpenGL/package/glm/doc/api/a00014_source.html deleted file mode 100644 index 903a7d9b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00014_source.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - -0.9.9 API documentation: color_space_YCoCg.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
color_space_YCoCg.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_color_space_YCoCg is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_color_space_YCoCg extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
33  template<typename T, qualifier Q>
-
34  GLM_FUNC_DECL vec<3, T, Q> rgb2YCoCg(
-
35  vec<3, T, Q> const& rgbColor);
-
36 
-
39  template<typename T, qualifier Q>
-
40  GLM_FUNC_DECL vec<3, T, Q> YCoCg2rgb(
-
41  vec<3, T, Q> const& YCoCgColor);
-
42 
-
46  template<typename T, qualifier Q>
-
47  GLM_FUNC_DECL vec<3, T, Q> rgb2YCoCgR(
-
48  vec<3, T, Q> const& rgbColor);
-
49 
-
53  template<typename T, qualifier Q>
-
54  GLM_FUNC_DECL vec<3, T, Q> YCoCgR2rgb(
-
55  vec<3, T, Q> const& YCoCgColor);
-
56 
-
58 }//namespace glm
-
59 
-
60 #include "color_space_YCoCg.inl"
-
GLM_FUNC_DECL vec< 3, T, Q > YCoCgR2rgb(vec< 3, T, Q > const &YCoCgColor)
Convert a color from YCoCgR color space to RGB color space.
-
GLM_FUNC_DECL vec< 3, T, Q > YCoCg2rgb(vec< 3, T, Q > const &YCoCgColor)
Convert a color from YCoCg color space to RGB color space.
-
GLM_FUNC_DECL vec< 3, T, Q > rgbColor(vec< 3, T, Q > const &hsvValue)
Converts a color from HSV color space to its color in RGB color space.
-
GLM_FUNC_DECL vec< 3, T, Q > rgb2YCoCg(vec< 3, T, Q > const &rgbColor)
Convert a color from RGB color space to YCoCg color space.
-
GLM_FUNC_DECL vec< 3, T, Q > rgb2YCoCgR(vec< 3, T, Q > const &rgbColor)
Convert a color from RGB color space to YCoCgR color space.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00015.html b/tests/OpenGL/package/glm/doc/api/a00015.html deleted file mode 100644 index 0f9e2256..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00015.html +++ /dev/null @@ -1,267 +0,0 @@ - - - - - - -0.9.9 API documentation: common.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
common.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType abs (genType x)
 Returns x if x >= 0; otherwise, it returns -x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > abs (vec< L, T, Q > const &x)
 Returns x if x >= 0; otherwise, it returns -x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > ceil (vec< L, T, Q > const &x)
 Returns a value equal to the nearest integer that is greater than or equal to x. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType clamp (genType x, genType minVal, genType maxVal)
 Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > clamp (vec< L, T, Q > const &x, T minVal, T maxVal)
 Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > clamp (vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &maxVal)
 Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. More...
 
GLM_FUNC_DECL int floatBitsToInt (float const &v)
 Returns a signed integer value representing the encoding of a floating-point value. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, int, Q > floatBitsToInt (vec< L, float, Q > const &v)
 Returns a signed integer value representing the encoding of a floating-point value. More...
 
GLM_FUNC_DECL uint floatBitsToUint (float const &v)
 Returns a unsigned integer value representing the encoding of a floating-point value. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, uint, Q > floatBitsToUint (vec< L, float, Q > const &v)
 Returns a unsigned integer value representing the encoding of a floating-point value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > floor (vec< L, T, Q > const &x)
 Returns a value equal to the nearest integer that is less then or equal to x. More...
 
template<typename genType >
GLM_FUNC_DECL genType fma (genType const &a, genType const &b, genType const &c)
 Computes and returns a * b + c. More...
 
template<typename genType >
GLM_FUNC_DECL genType fract (genType x)
 Return x - floor(x). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fract (vec< L, T, Q > const &x)
 Return x - floor(x). More...
 
template<typename genType >
GLM_FUNC_DECL genType frexp (genType x, int &exp)
 Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two, such that: x = significand * exp(2, exponent) More...
 
GLM_FUNC_DECL float intBitsToFloat (int const &v)
 Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, float, Q > intBitsToFloat (vec< L, int, Q > const &v)
 Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > isinf (vec< L, T, Q > const &x)
 Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > isnan (vec< L, T, Q > const &x)
 Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations. More...
 
template<typename genType >
GLM_FUNC_DECL genType ldexp (genType const &x, int const &exp)
 Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent) More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType max (genType x, genType y)
 Returns y if x < y; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > max (vec< L, T, Q > const &x, T y)
 Returns y if x < y; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > max (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns y if x < y; otherwise, it returns x. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType min (genType x, genType y)
 Returns y if y < x; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > min (vec< L, T, Q > const &x, T y)
 Returns y if y < x; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > min (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns y if y < x; otherwise, it returns x. More...
 
template<typename genTypeT , typename genTypeU >
GLM_FUNC_DECL genTypeT mix (genTypeT x, genTypeT y, genTypeU a)
 If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > mod (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Modulus. More...
 
template<typename genType >
GLM_FUNC_DECL genType modf (genType x, genType &i)
 Returns the fractional part of x and sets i to the integer part (as a whole number floating point value). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > round (vec< L, T, Q > const &x)
 Returns a value equal to the nearest integer to x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > roundEven (vec< L, T, Q > const &x)
 Returns a value equal to the nearest integer to x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > sign (vec< L, T, Q > const &x)
 Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. More...
 
template<typename genType >
GLM_FUNC_DECL genType smoothstep (genType edge0, genType edge1, genType x)
 Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 < x < edge1. More...
 
template<typename genType >
GLM_FUNC_DECL genType step (genType edge, genType x)
 Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > step (T edge, vec< L, T, Q > const &x)
 Returns 0.0 if x < edge, otherwise it returns 1.0. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > step (vec< L, T, Q > const &edge, vec< L, T, Q > const &x)
 Returns 0.0 if x < edge, otherwise it returns 1.0. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > trunc (vec< L, T, Q > const &x)
 Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x. More...
 
GLM_FUNC_DECL float uintBitsToFloat (uint const &v)
 Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, float, Q > uintBitsToFloat (vec< L, uint, Q > const &v)
 Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00015_source.html b/tests/OpenGL/package/glm/doc/api/a00015_source.html deleted file mode 100644 index 6bc9d103..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00015_source.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - -0.9.9 API documentation: common.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
common.hpp
-
-
-Go to the documentation of this file.
1 
-
15 #pragma once
-
16 
-
17 #include "detail/qualifier.hpp"
-
18 #include "detail/_fixes.hpp"
-
19 
-
20 namespace glm
-
21 {
-
24 
-
31  template<typename genType>
-
32  GLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x);
-
33 
-
42  template<length_t L, typename T, qualifier Q>
-
43  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> abs(vec<L, T, Q> const& x);
-
44 
-
53  template<length_t L, typename T, qualifier Q>
-
54  GLM_FUNC_DECL vec<L, T, Q> sign(vec<L, T, Q> const& x);
-
55 
-
64  template<length_t L, typename T, qualifier Q>
-
65  GLM_FUNC_DECL vec<L, T, Q> floor(vec<L, T, Q> const& x);
-
66 
-
76  template<length_t L, typename T, qualifier Q>
-
77  GLM_FUNC_DECL vec<L, T, Q> trunc(vec<L, T, Q> const& x);
-
78 
-
91  template<length_t L, typename T, qualifier Q>
-
92  GLM_FUNC_DECL vec<L, T, Q> round(vec<L, T, Q> const& x);
-
93 
-
105  template<length_t L, typename T, qualifier Q>
-
106  GLM_FUNC_DECL vec<L, T, Q> roundEven(vec<L, T, Q> const& x);
-
107 
-
117  template<length_t L, typename T, qualifier Q>
-
118  GLM_FUNC_DECL vec<L, T, Q> ceil(vec<L, T, Q> const& x);
-
119 
-
126  template<typename genType>
-
127  GLM_FUNC_DECL genType fract(genType x);
-
128 
-
137  template<length_t L, typename T, qualifier Q>
-
138  GLM_FUNC_DECL vec<L, T, Q> fract(vec<L, T, Q> const& x);
-
139 
-
140  template<typename genType>
-
141  GLM_FUNC_DECL genType mod(genType x, genType y);
-
142 
-
143  template<length_t L, typename T, qualifier Q>
-
144  GLM_FUNC_DECL vec<L, T, Q> mod(vec<L, T, Q> const& x, T y);
-
145 
-
155  template<length_t L, typename T, qualifier Q>
-
156  GLM_FUNC_DECL vec<L, T, Q> mod(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
157 
-
167  template<typename genType>
-
168  GLM_FUNC_DECL genType modf(genType x, genType& i);
-
169 
-
176  template<typename genType>
-
177  GLM_FUNC_DECL GLM_CONSTEXPR genType min(genType x, genType y);
-
178 
-
187  template<length_t L, typename T, qualifier Q>
-
188  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, T y);
-
189 
-
198  template<length_t L, typename T, qualifier Q>
-
199  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
200 
-
207  template<typename genType>
-
208  GLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y);
-
209 
-
218  template<length_t L, typename T, qualifier Q>
-
219  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, T y);
-
220 
-
229  template<length_t L, typename T, qualifier Q>
-
230  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
231 
-
239  template<typename genType>
-
240  GLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal);
-
241 
-
251  template<length_t L, typename T, qualifier Q>
-
252  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, T minVal, T maxVal);
-
253 
-
263  template<length_t L, typename T, qualifier Q>
-
264  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal);
-
265 
-
308  template<typename genTypeT, typename genTypeU>
-
309  GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a);
-
310 
-
311  template<length_t L, typename T, typename U, qualifier Q>
-
312  GLM_FUNC_DECL vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a);
-
313 
-
314  template<length_t L, typename T, typename U, qualifier Q>
-
315  GLM_FUNC_DECL vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U a);
-
316 
-
321  template<typename genType>
-
322  GLM_FUNC_DECL genType step(genType edge, genType x);
-
323 
-
332  template<length_t L, typename T, qualifier Q>
-
333  GLM_FUNC_DECL vec<L, T, Q> step(T edge, vec<L, T, Q> const& x);
-
334 
-
343  template<length_t L, typename T, qualifier Q>
-
344  GLM_FUNC_DECL vec<L, T, Q> step(vec<L, T, Q> const& edge, vec<L, T, Q> const& x);
-
345 
-
360  template<typename genType>
-
361  GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x);
-
362 
-
363  template<length_t L, typename T, qualifier Q>
-
364  GLM_FUNC_DECL vec<L, T, Q> smoothstep(T edge0, T edge1, vec<L, T, Q> const& x);
-
365 
-
366  template<length_t L, typename T, qualifier Q>
-
367  GLM_FUNC_DECL vec<L, T, Q> smoothstep(vec<L, T, Q> const& edge0, vec<L, T, Q> const& edge1, vec<L, T, Q> const& x);
-
368 
-
383  template<length_t L, typename T, qualifier Q>
-
384  GLM_FUNC_DECL vec<L, bool, Q> isnan(vec<L, T, Q> const& x);
-
385 
-
398  template<length_t L, typename T, qualifier Q>
-
399  GLM_FUNC_DECL vec<L, bool, Q> isinf(vec<L, T, Q> const& x);
-
400 
-
407  GLM_FUNC_DECL int floatBitsToInt(float const& v);
-
408 
-
418  template<length_t L, qualifier Q>
-
419  GLM_FUNC_DECL vec<L, int, Q> floatBitsToInt(vec<L, float, Q> const& v);
-
420 
-
427  GLM_FUNC_DECL uint floatBitsToUint(float const& v);
-
428 
-
438  template<length_t L, qualifier Q>
-
439  GLM_FUNC_DECL vec<L, uint, Q> floatBitsToUint(vec<L, float, Q> const& v);
-
440 
-
449  GLM_FUNC_DECL float intBitsToFloat(int const& v);
-
450 
-
462  template<length_t L, qualifier Q>
-
463  GLM_FUNC_DECL vec<L, float, Q> intBitsToFloat(vec<L, int, Q> const& v);
-
464 
-
473  GLM_FUNC_DECL float uintBitsToFloat(uint const& v);
-
474 
-
486  template<length_t L, qualifier Q>
-
487  GLM_FUNC_DECL vec<L, float, Q> uintBitsToFloat(vec<L, uint, Q> const& v);
-
488 
-
495  template<typename genType>
-
496  GLM_FUNC_DECL genType fma(genType const& a, genType const& b, genType const& c);
-
497 
-
512  template<typename genType>
-
513  GLM_FUNC_DECL genType frexp(genType x, int& exp);
-
514 
-
515  template<length_t L, typename T, qualifier Q>
-
516  GLM_FUNC_DECL vec<L, T, Q> frexp(vec<L, T, Q> const& v, vec<L, int, Q>& exp);
-
517 
-
529  template<typename genType>
-
530  GLM_FUNC_DECL genType ldexp(genType const& x, int const& exp);
-
531 
-
532  template<length_t L, typename T, qualifier Q>
-
533  GLM_FUNC_DECL vec<L, T, Q> ldexp(vec<L, T, Q> const& v, vec<L, int, Q> const& exp);
-
534 
-
536 }//namespace glm
-
537 
-
538 #include "detail/func_common.inl"
-
539 
-
GLM_FUNC_DECL vec< L, T, Q > floor(vec< L, T, Q > const &x)
Returns a value equal to the nearest integer that is less then or equal to x.
-
GLM_FUNC_DECL genType fma(genType const &a, genType const &b, genType const &c)
Computes and returns a * b + c.
-
GLM_FUNC_DECL vec< L, T, Q > trunc(vec< L, T, Q > const &x)
Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolut...
-
GLM_FUNC_DECL vec< L, T, Q > mod(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Modulus.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > clamp(vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &maxVal)
Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...
-
GLM_FUNC_DECL vec< L, T, Q > round(vec< L, T, Q > const &x)
Returns a value equal to the nearest integer to x.
-
GLM_FUNC_DECL vec< L, float, Q > uintBitsToFloat(vec< L, uint, Q > const &v)
Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value...
-
GLM_FUNC_DECL vec< L, T, Q > sign(vec< L, T, Q > const &x)
Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.
-
GLM_FUNC_DECL vec< L, bool, Q > isinf(vec< L, T, Q > const &x)
Returns true if x holds a positive infinity or negative infinity representation in the underlying imp...
-
GLM_FUNC_DECL vec< L, T, Q > roundEven(vec< L, T, Q > const &x)
Returns a value equal to the nearest integer to x.
-
GLM_FUNC_DECL genType modf(genType x, genType &i)
Returns the fractional part of x and sets i to the integer part (as a whole number floating point val...
-
GLM_FUNC_DECL vec< L, T, Q > ceil(vec< L, T, Q > const &x)
Returns a value equal to the nearest integer that is greater than or equal to x.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > min(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Returns y if y < x; otherwise, it returns x.
-
GLM_FUNC_DECL vec< L, float, Q > intBitsToFloat(vec< L, int, Q > const &v)
Returns a floating-point value corresponding to a signed integer encoding of a floating-point value...
-
GLM_FUNC_DECL vec< L, bool, Q > isnan(vec< L, T, Q > const &x)
Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of...
-
GLM_FUNC_DECL vec< L, T, Q > exp(vec< L, T, Q > const &v)
Returns the natural exponentiation of x, i.e., e^x.
-
GLM_FUNC_DECL vec< L, uint, Q > floatBitsToUint(vec< L, float, Q > const &v)
Returns a unsigned integer value representing the encoding of a floating-point value.
-
GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x)
Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 a...
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > abs(vec< L, T, Q > const &x)
Returns x if x >= 0; otherwise, it returns -x.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > max(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Returns y if x < y; otherwise, it returns x.
-
GLM_FUNC_DECL vec< L, T, Q > step(vec< L, T, Q > const &edge, vec< L, T, Q > const &x)
Returns 0.0 if x < edge, otherwise it returns 1.0.
-
GLM_FUNC_DECL vec< L, T, Q > fract(vec< L, T, Q > const &x)
Return x - floor(x).
-
GLM_FUNC_DECL genType ldexp(genType const &x, int const &exp)
Builds a floating-point number from x and the corresponding integral exponent of two in exp...
-
GLM_FUNC_DECL vec< L, int, Q > floatBitsToInt(vec< L, float, Q > const &v)
Returns a signed integer value representing the encoding of a floating-point value.
-
GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a)
If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...
-
GLM_FUNC_DECL genType frexp(genType x, int &exp)
Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00016.html b/tests/OpenGL/package/glm/doc/api/a00016.html deleted file mode 100644 index 82bb3750..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00016.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - -0.9.9 API documentation: common.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
gtx/common.hpp File Reference
-
-
- -

GLM_GTX_common -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > closeBounded (vec< L, T, Q > const &Value, vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)
 Returns whether vector components values are within an interval. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmod (vec< L, T, Q > const &v)
 Similar to 'mod' but with a different rounding and integer support. More...
 
template<typename genType >
GLM_FUNC_DECL genType::bool_type isdenormal (genType const &x)
 Returns true if x is a denormalized number Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > openBounded (vec< L, T, Q > const &Value, vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)
 Returns whether vector components values are within an interval. More...
 
-

Detailed Description

-

GLM_GTX_common

-
See also
Core features (dependence)
- -

Definition in file gtx/common.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00016_source.html b/tests/OpenGL/package/glm/doc/api/a00016_source.html deleted file mode 100644 index 0833436d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00016_source.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - -0.9.9 API documentation: common.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
gtx/common.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependencies:
-
16 #include "../vec2.hpp"
-
17 #include "../vec3.hpp"
-
18 #include "../vec4.hpp"
-
19 #include "../gtc/vec1.hpp"
-
20 
-
21 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
22 # ifndef GLM_ENABLE_EXPERIMENTAL
-
23 # pragma message("GLM: GLM_GTX_common is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
24 # else
-
25 # pragma message("GLM: GLM_GTX_common extension included")
-
26 # endif
-
27 #endif
-
28 
-
29 namespace glm
-
30 {
-
33 
-
42  template<typename genType>
-
43  GLM_FUNC_DECL typename genType::bool_type isdenormal(genType const& x);
-
44 
-
50  template<length_t L, typename T, qualifier Q>
-
51  GLM_FUNC_DECL vec<L, T, Q> fmod(vec<L, T, Q> const& v);
-
52 
-
60  template <length_t L, typename T, qualifier Q>
-
61  GLM_FUNC_DECL vec<L, bool, Q> openBounded(vec<L, T, Q> const& Value, vec<L, T, Q> const& Min, vec<L, T, Q> const& Max);
-
62 
-
70  template <length_t L, typename T, qualifier Q>
-
71  GLM_FUNC_DECL vec<L, bool, Q> closeBounded(vec<L, T, Q> const& Value, vec<L, T, Q> const& Min, vec<L, T, Q> const& Max);
-
72 
-
74 }//namespace glm
-
75 
-
76 #include "common.inl"
-
GLM_FUNC_DECL vec< L, T, Q > fmod(vec< L, T, Q > const &v)
Similar to 'mod' but with a different rounding and integer support.
-
GLM_FUNC_DECL vec< L, bool, Q > openBounded(vec< L, T, Q > const &Value, vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)
Returns whether vector components values are within an interval.
-
GLM_FUNC_DECL genType::bool_type isdenormal(genType const &x)
Returns true if x is a denormalized number Numbers whose absolute value is too small to be represente...
-
Definition: common.hpp:20
-
GLM_FUNC_DECL vec< L, bool, Q > closeBounded(vec< L, T, Q > const &Value, vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)
Returns whether vector components values are within an interval.
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00017.html b/tests/OpenGL/package/glm/doc/api/a00017.html deleted file mode 100644 index f5eda22a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00017.html +++ /dev/null @@ -1,443 +0,0 @@ - - - - - - -0.9.9 API documentation: compatibility.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
compatibility.hpp File Reference
-
-
- -

GLM_GTX_compatibility -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

-typedef bool bool1
 boolean type with 1 component. (From GLM_GTX_compatibility extension)
 
-typedef bool bool1x1
 boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension)
 
-typedef vec< 2, bool, highp > bool2
 boolean type with 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 2, bool, highp > bool2x2
 boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 3, bool, highp > bool2x3
 boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 4, bool, highp > bool2x4
 boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 3, bool, highp > bool3
 boolean type with 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 2, bool, highp > bool3x2
 boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 3, bool, highp > bool3x3
 boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 4, bool, highp > bool3x4
 boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 4, bool, highp > bool4
 boolean type with 4 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 2, bool, highp > bool4x2
 boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 3, bool, highp > bool4x3
 boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 4, bool, highp > bool4x4
 boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef double double1
 double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension)
 
-typedef double double1x1
 double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension)
 
-typedef vec< 2, double, highp > double2
 double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 2, double, highp > double2x2
 double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 3, double, highp > double2x3
 double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 4, double, highp > double2x4
 double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 3, double, highp > double3
 double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 2, double, highp > double3x2
 double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 3, double, highp > double3x3
 double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 4, double, highp > double3x4
 double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 4, double, highp > double4
 double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 2, double, highp > double4x2
 double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 3, double, highp > double4x3
 double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 4, double, highp > double4x4
 double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef float float1
 single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension)
 
-typedef float float1x1
 single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension)
 
-typedef vec< 2, float, highp > float2
 single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 2, float, highp > float2x2
 single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 3, float, highp > float2x3
 single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 4, float, highp > float2x4
 single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 3, float, highp > float3
 single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 2, float, highp > float3x2
 single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 3, float, highp > float3x3
 single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 4, float, highp > float3x4
 single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 4, float, highp > float4
 single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 2, float, highp > float4x2
 single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 3, float, highp > float4x3
 single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 4, float, highp > float4x4
 single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef int int1
 integer vector with 1 component. (From GLM_GTX_compatibility extension)
 
-typedef int int1x1
 integer matrix with 1 component. (From GLM_GTX_compatibility extension)
 
-typedef vec< 2, int, highp > int2
 integer vector with 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 2, int, highp > int2x2
 integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 3, int, highp > int2x3
 integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 4, int, highp > int2x4
 integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 3, int, highp > int3
 integer vector with 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 2, int, highp > int3x2
 integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 3, int, highp > int3x3
 integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 4, int, highp > int3x4
 integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 4, int, highp > int4
 integer vector with 4 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 2, int, highp > int4x2
 integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 3, int, highp > int4x3
 integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 4, int, highp > int4x4
 integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER T atan2 (T x, T y)
 Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 2, T, Q > atan2 (const vec< 2, T, Q > &x, const vec< 2, T, Q > &y)
 Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 3, T, Q > atan2 (const vec< 3, T, Q > &x, const vec< 3, T, Q > &y)
 Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 4, T, Q > atan2 (const vec< 4, T, Q > &x, const vec< 4, T, Q > &y)
 Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
 
-template<typename genType >
GLM_FUNC_DECL bool isfinite (genType const &x)
 Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 1, bool, Q > isfinite (const vec< 1, T, Q > &x)
 Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 2, bool, Q > isfinite (const vec< 2, T, Q > &x)
 Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, bool, Q > isfinite (const vec< 3, T, Q > &x)
 Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > isfinite (const vec< 4, T, Q > &x)
 Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
 
-template<typename T >
GLM_FUNC_QUALIFIER T lerp (T x, T y, T a)
 Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 2, T, Q > lerp (const vec< 2, T, Q > &x, const vec< 2, T, Q > &y, T a)
 Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 3, T, Q > lerp (const vec< 3, T, Q > &x, const vec< 3, T, Q > &y, T a)
 Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 4, T, Q > lerp (const vec< 4, T, Q > &x, const vec< 4, T, Q > &y, T a)
 Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 2, T, Q > lerp (const vec< 2, T, Q > &x, const vec< 2, T, Q > &y, const vec< 2, T, Q > &a)
 Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 3, T, Q > lerp (const vec< 3, T, Q > &x, const vec< 3, T, Q > &y, const vec< 3, T, Q > &a)
 Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 4, T, Q > lerp (const vec< 4, T, Q > &x, const vec< 4, T, Q > &y, const vec< 4, T, Q > &a)
 Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER T saturate (T x)
 Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 2, T, Q > saturate (const vec< 2, T, Q > &x)
 Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 3, T, Q > saturate (const vec< 3, T, Q > &x)
 Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 4, T, Q > saturate (const vec< 4, T, Q > &x)
 Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
 
-

Detailed Description

-

GLM_GTX_compatibility

-
See also
Core features (dependence)
- -

Definition in file compatibility.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00017_source.html b/tests/OpenGL/package/glm/doc/api/a00017_source.html deleted file mode 100644 index 206d3954..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00017_source.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - -0.9.9 API documentation: compatibility.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
compatibility.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 #include "../gtc/quaternion.hpp"
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # ifndef GLM_ENABLE_EXPERIMENTAL
-
21 # pragma message("GLM: GLM_GTX_compatibility is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
22 # else
-
23 # pragma message("GLM: GLM_GTX_compatibility extension included")
-
24 # endif
-
25 #endif
-
26 
-
27 #if GLM_COMPILER & GLM_COMPILER_VC
-
28 # include <cfloat>
-
29 #elif GLM_COMPILER & GLM_COMPILER_GCC
-
30 # include <cmath>
-
31 # if(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
-
32 # undef isfinite
-
33 # endif
-
34 #endif//GLM_COMPILER
-
35 
-
36 namespace glm
-
37 {
-
40 
-
41  template<typename T> GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);}
-
42  template<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, T a){return mix(x, y, a);}
-
43 
-
44  template<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, T a){return mix(x, y, a);}
-
45  template<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, T a){return mix(x, y, a);}
-
46  template<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, const vec<2, T, Q>& a){return mix(x, y, a);}
-
47  template<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, const vec<3, T, Q>& a){return mix(x, y, a);}
-
48  template<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, const vec<4, T, Q>& a){return mix(x, y, a);}
-
49 
-
50  template<typename T, qualifier Q> GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));}
-
51  template<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> saturate(const vec<2, T, Q>& x){return clamp(x, T(0), T(1));}
-
52  template<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> saturate(const vec<3, T, Q>& x){return clamp(x, T(0), T(1));}
-
53  template<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> saturate(const vec<4, T, Q>& x){return clamp(x, T(0), T(1));}
-
54 
-
55  template<typename T, qualifier Q> GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);}
-
56  template<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> atan2(const vec<2, T, Q>& x, const vec<2, T, Q>& y){return atan(x, y);}
-
57  template<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> atan2(const vec<3, T, Q>& x, const vec<3, T, Q>& y){return atan(x, y);}
-
58  template<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> atan2(const vec<4, T, Q>& x, const vec<4, T, Q>& y){return atan(x, y);}
-
59 
-
60  template<typename genType> GLM_FUNC_DECL bool isfinite(genType const& x);
-
61  template<typename T, qualifier Q> GLM_FUNC_DECL vec<1, bool, Q> isfinite(const vec<1, T, Q>& x);
-
62  template<typename T, qualifier Q> GLM_FUNC_DECL vec<2, bool, Q> isfinite(const vec<2, T, Q>& x);
-
63  template<typename T, qualifier Q> GLM_FUNC_DECL vec<3, bool, Q> isfinite(const vec<3, T, Q>& x);
-
64  template<typename T, qualifier Q> GLM_FUNC_DECL vec<4, bool, Q> isfinite(const vec<4, T, Q>& x);
-
65 
-
66  typedef bool bool1;
-
67  typedef vec<2, bool, highp> bool2;
-
68  typedef vec<3, bool, highp> bool3;
-
69  typedef vec<4, bool, highp> bool4;
-
70 
-
71  typedef bool bool1x1;
-
72  typedef mat<2, 2, bool, highp> bool2x2;
-
73  typedef mat<2, 3, bool, highp> bool2x3;
-
74  typedef mat<2, 4, bool, highp> bool2x4;
-
75  typedef mat<3, 2, bool, highp> bool3x2;
-
76  typedef mat<3, 3, bool, highp> bool3x3;
-
77  typedef mat<3, 4, bool, highp> bool3x4;
-
78  typedef mat<4, 2, bool, highp> bool4x2;
-
79  typedef mat<4, 3, bool, highp> bool4x3;
-
80  typedef mat<4, 4, bool, highp> bool4x4;
-
81 
-
82  typedef int int1;
-
83  typedef vec<2, int, highp> int2;
-
84  typedef vec<3, int, highp> int3;
-
85  typedef vec<4, int, highp> int4;
-
86 
-
87  typedef int int1x1;
-
88  typedef mat<2, 2, int, highp> int2x2;
-
89  typedef mat<2, 3, int, highp> int2x3;
-
90  typedef mat<2, 4, int, highp> int2x4;
-
91  typedef mat<3, 2, int, highp> int3x2;
-
92  typedef mat<3, 3, int, highp> int3x3;
-
93  typedef mat<3, 4, int, highp> int3x4;
-
94  typedef mat<4, 2, int, highp> int4x2;
-
95  typedef mat<4, 3, int, highp> int4x3;
-
96  typedef mat<4, 4, int, highp> int4x4;
-
97 
-
98  typedef float float1;
-
99  typedef vec<2, float, highp> float2;
-
100  typedef vec<3, float, highp> float3;
-
101  typedef vec<4, float, highp> float4;
-
102 
-
103  typedef float float1x1;
-
104  typedef mat<2, 2, float, highp> float2x2;
-
105  typedef mat<2, 3, float, highp> float2x3;
-
106  typedef mat<2, 4, float, highp> float2x4;
-
107  typedef mat<3, 2, float, highp> float3x2;
-
108  typedef mat<3, 3, float, highp> float3x3;
-
109  typedef mat<3, 4, float, highp> float3x4;
-
110  typedef mat<4, 2, float, highp> float4x2;
-
111  typedef mat<4, 3, float, highp> float4x3;
-
112  typedef mat<4, 4, float, highp> float4x4;
-
113 
-
114  typedef double double1;
-
115  typedef vec<2, double, highp> double2;
-
116  typedef vec<3, double, highp> double3;
-
117  typedef vec<4, double, highp> double4;
-
118 
-
119  typedef double double1x1;
-
120  typedef mat<2, 2, double, highp> double2x2;
-
121  typedef mat<2, 3, double, highp> double2x3;
-
122  typedef mat<2, 4, double, highp> double2x4;
-
123  typedef mat<3, 2, double, highp> double3x2;
-
124  typedef mat<3, 3, double, highp> double3x3;
-
125  typedef mat<3, 4, double, highp> double3x4;
-
126  typedef mat<4, 2, double, highp> double4x2;
-
127  typedef mat<4, 3, double, highp> double4x3;
-
128  typedef mat<4, 4, double, highp> double4x4;
-
129 
-
131 }//namespace glm
-
132 
-
133 #include "compatibility.inl"
-
mat< 4, 4, double, highp > double4x4
double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) ...
-
mat< 3, 4, int, highp > int3x4
integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
-
GLM_FUNC_DECL vec< L, T, Q > atan(vec< L, T, Q > const &y, vec< L, T, Q > const &x)
Arc tangent.
-
bool bool1
boolean type with 1 component. (From GLM_GTX_compatibility extension)
-
mat< 4, 3, float, highp > float4x3
single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) ...
-
mat< 4, 4, float, highp > float4x4
single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) ...
-
mat< 2, 4, double, highp > double2x4
double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) ...
-
mat< 2, 2, double, highp > double2x2
double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) ...
-
mat< 3, 2, double, highp > double3x2
double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) ...
-
GLM_FUNC_QUALIFIER vec< 4, T, Q > atan2(const vec< 4, T, Q > &x, const vec< 4, T, Q > &y)
Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what q...
-
double double1x1
double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) ...
-
GLM_FUNC_QUALIFIER vec< 4, T, Q > lerp(const vec< 4, T, Q > &x, const vec< 4, T, Q > &y, const vec< 4, T, Q > &a)
Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using v...
-
mat< 3, 3, double, highp > double3x3
double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) ...
-
vec< 4, float, highp > float4
single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) ...
-
int int1x1
integer matrix with 1 component. (From GLM_GTX_compatibility extension)
-
vec< 2, float, highp > float2
single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) ...
-
GLM_FUNC_DECL vec< 4, bool, Q > isfinite(const vec< 4, T, Q > &x)
Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)...
-
mat< 2, 3, bool, highp > bool2x3
boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
-
mat< 2, 3, int, highp > int2x3
integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
-
int int1
integer vector with 1 component. (From GLM_GTX_compatibility extension)
-
vec< 3, float, highp > float3
single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) ...
-
mat< 2, 4, float, highp > float2x4
single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) ...
-
mat< 2, 2, bool, highp > bool2x2
boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
-
mat< 4, 4, bool, highp > bool4x4
boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
-
float float1
single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) ...
-
float float1x1
single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) ...
-
mat< 4, 2, double, highp > double4x2
double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) ...
-
mat< 4, 3, int, highp > int4x3
integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
-
mat< 4, 2, bool, highp > bool4x2
boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
-
mat< 2, 2, float, highp > float2x2
single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) ...
-
vec< 3, int, highp > int3
integer vector with 3 components. (From GLM_GTX_compatibility extension)
-
mat< 4, 2, float, highp > float4x2
single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) ...
-
mat< 2, 3, double, highp > double2x3
double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) ...
-
mat< 2, 3, float, highp > float2x3
single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) ...
-
mat< 3, 2, int, highp > int3x2
integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
-
vec< 4, bool, highp > bool4
boolean type with 4 components. (From GLM_GTX_compatibility extension)
-
mat< 4, 2, int, highp > int4x2
integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
-
bool bool1x1
boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension)
-
GLM_FUNC_QUALIFIER vec< 4, T, Q > saturate(const vec< 4, T, Q > &x)
Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
-
vec< 3, bool, highp > bool3
boolean type with 3 components. (From GLM_GTX_compatibility extension)
-
GLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal)
Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...
-
mat< 2, 2, int, highp > int2x2
integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
-
vec< 2, int, highp > int2
integer vector with 2 components. (From GLM_GTX_compatibility extension)
-
mat< 4, 4, int, highp > int4x4
integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
-
mat< 3, 2, bool, highp > bool3x2
boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
-
mat< 4, 3, double, highp > double4x3
double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) ...
-
mat< 4, 3, bool, highp > bool4x3
boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
-
double double1
double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) ...
-
vec< 3, double, highp > double3
double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) ...
-
vec< 4, double, highp > double4
double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) ...
-
mat< 3, 3, int, highp > int3x3
integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
-
mat< 3, 3, bool, highp > bool3x3
boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
-
mat< 3, 2, float, highp > float3x2
single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) ...
-
vec< 4, int, highp > int4
integer vector with 4 components. (From GLM_GTX_compatibility extension)
-
vec< 2, double, highp > double2
double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) ...
-
mat< 3, 3, float, highp > float3x3
single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) ...
-
GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a)
If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...
-
vec< 2, bool, highp > bool2
boolean type with 2 components. (From GLM_GTX_compatibility extension)
-
mat< 3, 4, bool, highp > bool3x4
boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
-
mat< 2, 4, int, highp > int2x4
integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
-
mat< 2, 4, bool, highp > bool2x4
boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
-
mat< 3, 4, double, highp > double3x4
double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) ...
-
Definition: common.hpp:20
-
mat< 3, 4, float, highp > float3x4
single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) ...
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00018.html b/tests/OpenGL/package/glm/doc/api/a00018.html deleted file mode 100644 index 5d5fd804..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00018.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - -0.9.9 API documentation: component_wise.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
component_wise.hpp File Reference
-
-
- -

GLM_GTX_component_wise -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType::value_type compAdd (genType const &v)
 Add all vector components together. More...
 
template<typename genType >
GLM_FUNC_DECL genType::value_type compMax (genType const &v)
 Find the maximum value between single vector components. More...
 
template<typename genType >
GLM_FUNC_DECL genType::value_type compMin (genType const &v)
 Find the minimum value between single vector components. More...
 
template<typename genType >
GLM_FUNC_DECL genType::value_type compMul (genType const &v)
 Multiply all vector components together. More...
 
template<typename floatType , length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, floatType, Q > compNormalize (vec< L, T, Q > const &v)
 Convert an integer vector to a normalized float vector. More...
 
template<length_t L, typename T , typename floatType , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > compScale (vec< L, floatType, Q > const &v)
 Convert a normalized float vector to an integer vector. More...
 
-

Detailed Description

-

GLM_GTX_component_wise

-
Date
2007-05-21 / 2011-06-07
-
Author
Christophe Riccio
-
See also
Core features (dependence)
- -

Definition in file component_wise.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00018_source.html b/tests/OpenGL/package/glm/doc/api/a00018_source.html deleted file mode 100644 index 81414087..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00018_source.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - -0.9.9 API documentation: component_wise.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
component_wise.hpp
-
-
-Go to the documentation of this file.
1 
-
15 #pragma once
-
16 
-
17 // Dependencies
-
18 #include "../detail/setup.hpp"
-
19 #include "../detail/qualifier.hpp"
-
20 
-
21 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
22 # ifndef GLM_ENABLE_EXPERIMENTAL
-
23 # pragma message("GLM: GLM_GTX_component_wise is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
24 # else
-
25 # pragma message("GLM: GLM_GTX_component_wise extension included")
-
26 # endif
-
27 #endif
-
28 
-
29 namespace glm
-
30 {
-
33 
-
37  template<typename floatType, length_t L, typename T, qualifier Q>
-
38  GLM_FUNC_DECL vec<L, floatType, Q> compNormalize(vec<L, T, Q> const& v);
-
39 
-
43  template<length_t L, typename T, typename floatType, qualifier Q>
-
44  GLM_FUNC_DECL vec<L, T, Q> compScale(vec<L, floatType, Q> const& v);
-
45 
-
48  template<typename genType>
-
49  GLM_FUNC_DECL typename genType::value_type compAdd(genType const& v);
-
50 
-
53  template<typename genType>
-
54  GLM_FUNC_DECL typename genType::value_type compMul(genType const& v);
-
55 
-
58  template<typename genType>
-
59  GLM_FUNC_DECL typename genType::value_type compMin(genType const& v);
-
60 
-
63  template<typename genType>
-
64  GLM_FUNC_DECL typename genType::value_type compMax(genType const& v);
-
65 
-
67 }//namespace glm
-
68 
-
69 #include "component_wise.inl"
-
GLM_FUNC_DECL genType::value_type compMax(genType const &v)
Find the maximum value between single vector components.
-
GLM_FUNC_DECL genType::value_type compMul(genType const &v)
Multiply all vector components together.
-
GLM_FUNC_DECL vec< L, T, Q > compScale(vec< L, floatType, Q > const &v)
Convert a normalized float vector to an integer vector.
-
GLM_FUNC_DECL vec< L, floatType, Q > compNormalize(vec< L, T, Q > const &v)
Convert an integer vector to a normalized float vector.
-
GLM_FUNC_DECL genType::value_type compMin(genType const &v)
Find the minimum value between single vector components.
-
GLM_FUNC_DECL genType::value_type compAdd(genType const &v)
Add all vector components together.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00019_source.html b/tests/OpenGL/package/glm/doc/api/a00019_source.html deleted file mode 100644 index d2fd66f7..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00019_source.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - -0.9.9 API documentation: compute_common.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
compute_common.hpp
-
-
-
1 #pragma once
-
2 
-
3 #include "setup.hpp"
-
4 #include <limits>
-
5 
-
6 namespace glm{
-
7 namespace detail
-
8 {
-
9  template<typename genFIType, bool /*signed*/>
-
10  struct compute_abs
-
11  {};
-
12 
-
13  template<typename genFIType>
-
14  struct compute_abs<genFIType, true>
-
15  {
-
16  GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x)
-
17  {
-
18  GLM_STATIC_ASSERT(
-
19  std::numeric_limits<genFIType>::is_iec559 || std::numeric_limits<genFIType>::is_signed,
-
20  "'abs' only accept floating-point and integer scalar or vector inputs");
-
21 
-
22  return x >= genFIType(0) ? x : -x;
-
23  // TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff;
-
24  }
-
25  };
-
26 
-
27 #if GLM_COMPILER & GLM_COMPILER_CUDA
-
28  template<>
-
29  struct compute_abs<float, true>
-
30  {
-
31  GLM_FUNC_QUALIFIER GLM_CONSTEXPR static float call(float x)
-
32  {
-
33  return fabsf(x);
-
34  }
-
35  };
-
36 #endif
-
37 
-
38  template<typename genFIType>
-
39  struct compute_abs<genFIType, false>
-
40  {
-
41  GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x)
-
42  {
-
43  GLM_STATIC_ASSERT(
-
44  (!std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer),
-
45  "'abs' only accept floating-point and integer scalar or vector inputs");
-
46  return x;
-
47  }
-
48  };
-
49 }//namespace detail
-
50 }//namespace glm
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00020_source.html b/tests/OpenGL/package/glm/doc/api/a00020_source.html deleted file mode 100644 index 049fde6e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00020_source.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -0.9.9 API documentation: compute_vector_relational.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
compute_vector_relational.hpp
-
-
-
1 #pragma once
-
2 
-
3 //#include "compute_common.hpp"
-
4 #include "setup.hpp"
-
5 #include <limits>
-
6 
-
7 namespace glm{
-
8 namespace detail
-
9 {
-
10  template <typename T, bool isFloat>
-
11  struct compute_equal
-
12  {
-
13  GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b)
-
14  {
-
15  return a == b;
-
16  }
-
17  };
-
18 /*
-
19  template <typename T>
-
20  struct compute_equal<T, true>
-
21  {
-
22  GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b)
-
23  {
-
24  return detail::compute_abs<T, std::numeric_limits<T>::is_signed>::call(b - a) <= static_cast<T>(0);
-
25  //return std::memcmp(&a, &b, sizeof(T)) == 0;
-
26  }
-
27  };
-
28 */
-
29 }//namespace detail
-
30 }//namespace glm
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00021.html b/tests/OpenGL/package/glm/doc/api/a00021.html deleted file mode 100644 index 0203aaad..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00021.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - -0.9.9 API documentation: constants.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
constants.hpp File Reference
-
-
- -

GLM_GTC_constants -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType e ()
 Return e constant. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType euler ()
 Return Euler's constant. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi ()
 Return 4 / pi. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio ()
 Return the golden ratio constant. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType half_pi ()
 Return pi / 2. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two ()
 Return ln(ln(2)). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten ()
 Return ln(10). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType ln_two ()
 Return ln(2). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType one ()
 Return 1. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi ()
 Return 1 / pi. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two ()
 Return 1 / sqrt(2). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi ()
 Return 1 / (pi * 2). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi ()
 Return pi / 4. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType root_five ()
 Return sqrt(5). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi ()
 Return sqrt(pi / 2). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four ()
 Return sqrt(ln(4)). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType root_pi ()
 Return square root of pi. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType root_three ()
 Return sqrt(3). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType root_two ()
 Return sqrt(2). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi ()
 Return sqrt(2 * pi). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType third ()
 Return 1 / 3. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi ()
 Return pi / 2 * 3. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi ()
 Return 2 / pi. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi ()
 Return 2 / sqrt(pi). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType two_pi ()
 Return pi * 2. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds ()
 Return 2 / 3. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType zero ()
 Return 0. More...
 
-

Detailed Description

-

GLM_GTC_constants

-
See also
Core features (dependence)
- -

Definition in file constants.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00021_source.html b/tests/OpenGL/package/glm/doc/api/a00021_source.html deleted file mode 100644 index 67c7767d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00021_source.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - - -0.9.9 API documentation: constants.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
constants.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependencies
-
16 #include "../ext/scalar_constants.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # pragma message("GLM: GLM_GTC_constants extension included")
-
20 #endif
-
21 
-
22 namespace glm
-
23 {
-
26 
-
29  template<typename genType>
-
30  GLM_FUNC_DECL GLM_CONSTEXPR genType zero();
-
31 
-
34  template<typename genType>
-
35  GLM_FUNC_DECL GLM_CONSTEXPR genType one();
-
36 
-
39  template<typename genType>
-
40  GLM_FUNC_DECL GLM_CONSTEXPR genType two_pi();
-
41 
-
44  template<typename genType>
-
45  GLM_FUNC_DECL GLM_CONSTEXPR genType root_pi();
-
46 
-
49  template<typename genType>
-
50  GLM_FUNC_DECL GLM_CONSTEXPR genType half_pi();
-
51 
-
54  template<typename genType>
-
55  GLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi();
-
56 
-
59  template<typename genType>
-
60  GLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi();
-
61 
-
64  template<typename genType>
-
65  GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi();
-
66 
-
69  template<typename genType>
-
70  GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi();
-
71 
-
74  template<typename genType>
-
75  GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi();
-
76 
-
79  template<typename genType>
-
80  GLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi();
-
81 
-
84  template<typename genType>
-
85  GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi();
-
86 
-
89  template<typename genType>
-
90  GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two();
-
91 
-
94  template<typename genType>
-
95  GLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi();
-
96 
-
99  template<typename genType>
-
100  GLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi();
-
101 
-
104  template<typename genType>
-
105  GLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four();
-
106 
-
109  template<typename genType>
-
110  GLM_FUNC_DECL GLM_CONSTEXPR genType e();
-
111 
-
114  template<typename genType>
-
115  GLM_FUNC_DECL GLM_CONSTEXPR genType euler();
-
116 
-
119  template<typename genType>
-
120  GLM_FUNC_DECL GLM_CONSTEXPR genType root_two();
-
121 
-
124  template<typename genType>
-
125  GLM_FUNC_DECL GLM_CONSTEXPR genType root_three();
-
126 
-
129  template<typename genType>
-
130  GLM_FUNC_DECL GLM_CONSTEXPR genType root_five();
-
131 
-
134  template<typename genType>
-
135  GLM_FUNC_DECL GLM_CONSTEXPR genType ln_two();
-
136 
-
139  template<typename genType>
-
140  GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten();
-
141 
-
144  template<typename genType>
-
145  GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two();
-
146 
-
149  template<typename genType>
-
150  GLM_FUNC_DECL GLM_CONSTEXPR genType third();
-
151 
-
154  template<typename genType>
-
155  GLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds();
-
156 
-
159  template<typename genType>
-
160  GLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio();
-
161 
-
163 } //namespace glm
-
164 
-
165 #include "constants.inl"
-
GLM_FUNC_DECL GLM_CONSTEXPR genType third()
Return 1 / 3.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType root_two()
Return sqrt(2).
-
GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two()
Return 1 / sqrt(2).
-
GLM_FUNC_DECL GLM_CONSTEXPR genType euler()
Return Euler's constant.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds()
Return 2 / 3.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType two_pi()
Return pi * 2.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio()
Return the golden ratio constant.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi()
Return pi / 4.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType one()
Return 1.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType root_five()
Return sqrt(5).
-
GLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi()
Return pi / 2 * 3.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType zero()
Return 0.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten()
Return ln(10).
-
GLM_FUNC_DECL GLM_CONSTEXPR genType root_three()
Return sqrt(3).
-
GLM_FUNC_DECL GLM_CONSTEXPR genType root_pi()
Return square root of pi.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType e()
Return e constant.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi()
Return 1 / pi.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi()
Return 2 / pi.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi()
Return 4 / pi.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi()
Return sqrt(2 * pi).
-
GLM_FUNC_DECL GLM_CONSTEXPR genType ln_two()
Return ln(2).
-
GLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four()
Return sqrt(ln(4)).
-
GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi()
Return 2 / sqrt(pi).
-
GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two()
Return ln(ln(2)).
-
GLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi()
Return sqrt(pi / 2).
-
GLM_FUNC_DECL GLM_CONSTEXPR genType half_pi()
Return pi / 2.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi()
Return 1 / (pi * 2).
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00022.html b/tests/OpenGL/package/glm/doc/api/a00022.html deleted file mode 100644 index 45016128..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00022.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - -0.9.9 API documentation: dual_quaternion.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
dual_quaternion.hpp File Reference
-
-
- -

GLM_GTX_dual_quaternion -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef highp_ddualquat ddualquat
 Dual-quaternion of default double-qualifier floating-point numbers. More...
 
typedef highp_fdualquat dualquat
 Dual-quaternion of floating-point numbers. More...
 
typedef highp_fdualquat fdualquat
 Dual-quaternion of single-qualifier floating-point numbers. More...
 
typedef tdualquat< double, highp > highp_ddualquat
 Dual-quaternion of high double-qualifier floating-point numbers. More...
 
typedef tdualquat< float, highp > highp_dualquat
 Dual-quaternion of high single-qualifier floating-point numbers. More...
 
typedef tdualquat< float, highp > highp_fdualquat
 Dual-quaternion of high single-qualifier floating-point numbers. More...
 
typedef tdualquat< double, lowp > lowp_ddualquat
 Dual-quaternion of low double-qualifier floating-point numbers. More...
 
typedef tdualquat< float, lowp > lowp_dualquat
 Dual-quaternion of low single-qualifier floating-point numbers. More...
 
typedef tdualquat< float, lowp > lowp_fdualquat
 Dual-quaternion of low single-qualifier floating-point numbers. More...
 
typedef tdualquat< double, mediump > mediump_ddualquat
 Dual-quaternion of medium double-qualifier floating-point numbers. More...
 
typedef tdualquat< float, mediump > mediump_dualquat
 Dual-quaternion of medium single-qualifier floating-point numbers. More...
 
typedef tdualquat< float, mediump > mediump_fdualquat
 Dual-quaternion of medium single-qualifier floating-point numbers. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL tdualquat< T, Q > dual_quat_identity ()
 Creates an identity dual quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL tdualquat< T, Q > dualquat_cast (mat< 2, 4, T, Q > const &x)
 Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL tdualquat< T, Q > dualquat_cast (mat< 3, 4, T, Q > const &x)
 Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL tdualquat< T, Q > inverse (tdualquat< T, Q > const &q)
 Returns the q inverse. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL tdualquat< T, Q > lerp (tdualquat< T, Q > const &x, tdualquat< T, Q > const &y, T const &a)
 Returns the linear interpolation of two dual quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 4, T, Q > mat2x4_cast (tdualquat< T, Q > const &x)
 Converts a quaternion to a 2 * 4 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 4, T, Q > mat3x4_cast (tdualquat< T, Q > const &x)
 Converts a quaternion to a 3 * 4 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL tdualquat< T, Q > normalize (tdualquat< T, Q > const &q)
 Returns the normalized quaternion. More...
 
-

Detailed Description

-

GLM_GTX_dual_quaternion

-
Author
Maksim Vorobiev (msome.nosp@m.one@.nosp@m.gmail.nosp@m..com)
-
See also
Core features (dependence)
-
-GLM_GTC_constants (dependence)
-
-GLM_GTC_quaternion (dependence)
- -

Definition in file dual_quaternion.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00022_source.html b/tests/OpenGL/package/glm/doc/api/a00022_source.html deleted file mode 100644 index 6be65eec..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00022_source.html +++ /dev/null @@ -1,317 +0,0 @@ - - - - - - -0.9.9 API documentation: dual_quaternion.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
dual_quaternion.hpp
-
-
-Go to the documentation of this file.
1 
-
16 #pragma once
-
17 
-
18 // Dependency:
-
19 #include "../glm.hpp"
-
20 #include "../gtc/constants.hpp"
-
21 #include "../gtc/quaternion.hpp"
-
22 
-
23 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
24 # ifndef GLM_ENABLE_EXPERIMENTAL
-
25 # pragma message("GLM: GLM_GTX_dual_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
26 # else
-
27 # pragma message("GLM: GLM_GTX_dual_quaternion extension included")
-
28 # endif
-
29 #endif
-
30 
-
31 namespace glm
-
32 {
-
35 
-
36  template<typename T, qualifier Q = defaultp>
-
37  struct tdualquat
-
38  {
-
39  // -- Implementation detail --
-
40 
-
41  typedef T value_type;
-
42  typedef qua<T, Q> part_type;
-
43 
-
44  // -- Data --
-
45 
-
46  qua<T, Q> real, dual;
-
47 
-
48  // -- Component accesses --
-
49 
-
50  typedef length_t length_type;
-
52  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;}
-
53 
-
54  GLM_FUNC_DECL part_type & operator[](length_type i);
-
55  GLM_FUNC_DECL part_type const& operator[](length_type i) const;
-
56 
-
57  // -- Implicit basic constructors --
-
58 
-
59  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat() GLM_DEFAULT;
-
60  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat<T, Q> const& d) GLM_DEFAULT;
-
61  template<qualifier P>
-
62  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat<T, P> const& d);
-
63 
-
64  // -- Explicit basic constructors --
-
65 
-
66  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua<T, Q> const& real);
-
67  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua<T, Q> const& orientation, vec<3, T, Q> const& translation);
-
68  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua<T, Q> const& real, qua<T, Q> const& dual);
-
69 
-
70  // -- Conversion constructors --
-
71 
-
72  template<typename U, qualifier P>
-
73  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tdualquat(tdualquat<U, P> const& q);
-
74 
-
75  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<2, 4, T, Q> const& holder_mat);
-
76  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<3, 4, T, Q> const& aug_mat);
-
77 
-
78  // -- Unary arithmetic operators --
-
79 
-
80  GLM_FUNC_DECL tdualquat<T, Q> & operator=(tdualquat<T, Q> const& m) GLM_DEFAULT;
-
81 
-
82  template<typename U>
-
83  GLM_FUNC_DECL tdualquat<T, Q> & operator=(tdualquat<U, Q> const& m);
-
84  template<typename U>
-
85  GLM_FUNC_DECL tdualquat<T, Q> & operator*=(U s);
-
86  template<typename U>
-
87  GLM_FUNC_DECL tdualquat<T, Q> & operator/=(U s);
-
88  };
-
89 
-
90  // -- Unary bit operators --
-
91 
-
92  template<typename T, qualifier Q>
-
93  GLM_FUNC_DECL tdualquat<T, Q> operator+(tdualquat<T, Q> const& q);
-
94 
-
95  template<typename T, qualifier Q>
-
96  GLM_FUNC_DECL tdualquat<T, Q> operator-(tdualquat<T, Q> const& q);
-
97 
-
98  // -- Binary operators --
-
99 
-
100  template<typename T, qualifier Q>
-
101  GLM_FUNC_DECL tdualquat<T, Q> operator+(tdualquat<T, Q> const& q, tdualquat<T, Q> const& p);
-
102 
-
103  template<typename T, qualifier Q>
-
104  GLM_FUNC_DECL tdualquat<T, Q> operator*(tdualquat<T, Q> const& q, tdualquat<T, Q> const& p);
-
105 
-
106  template<typename T, qualifier Q>
-
107  GLM_FUNC_DECL vec<3, T, Q> operator*(tdualquat<T, Q> const& q, vec<3, T, Q> const& v);
-
108 
-
109  template<typename T, qualifier Q>
-
110  GLM_FUNC_DECL vec<3, T, Q> operator*(vec<3, T, Q> const& v, tdualquat<T, Q> const& q);
-
111 
-
112  template<typename T, qualifier Q>
-
113  GLM_FUNC_DECL vec<4, T, Q> operator*(tdualquat<T, Q> const& q, vec<4, T, Q> const& v);
-
114 
-
115  template<typename T, qualifier Q>
-
116  GLM_FUNC_DECL vec<4, T, Q> operator*(vec<4, T, Q> const& v, tdualquat<T, Q> const& q);
-
117 
-
118  template<typename T, qualifier Q>
-
119  GLM_FUNC_DECL tdualquat<T, Q> operator*(tdualquat<T, Q> const& q, T const& s);
-
120 
-
121  template<typename T, qualifier Q>
-
122  GLM_FUNC_DECL tdualquat<T, Q> operator*(T const& s, tdualquat<T, Q> const& q);
-
123 
-
124  template<typename T, qualifier Q>
-
125  GLM_FUNC_DECL tdualquat<T, Q> operator/(tdualquat<T, Q> const& q, T const& s);
-
126 
-
127  // -- Boolean operators --
-
128 
-
129  template<typename T, qualifier Q>
-
130  GLM_FUNC_DECL bool operator==(tdualquat<T, Q> const& q1, tdualquat<T, Q> const& q2);
-
131 
-
132  template<typename T, qualifier Q>
-
133  GLM_FUNC_DECL bool operator!=(tdualquat<T, Q> const& q1, tdualquat<T, Q> const& q2);
-
134 
-
138  template <typename T, qualifier Q>
-
139  GLM_FUNC_DECL tdualquat<T, Q> dual_quat_identity();
-
140 
-
144  template<typename T, qualifier Q>
-
145  GLM_FUNC_DECL tdualquat<T, Q> normalize(tdualquat<T, Q> const& q);
-
146 
-
150  template<typename T, qualifier Q>
-
151  GLM_FUNC_DECL tdualquat<T, Q> lerp(tdualquat<T, Q> const& x, tdualquat<T, Q> const& y, T const& a);
-
152 
-
156  template<typename T, qualifier Q>
-
157  GLM_FUNC_DECL tdualquat<T, Q> inverse(tdualquat<T, Q> const& q);
-
158 
-
162  template<typename T, qualifier Q>
-
163  GLM_FUNC_DECL mat<2, 4, T, Q> mat2x4_cast(tdualquat<T, Q> const& x);
-
164 
-
168  template<typename T, qualifier Q>
-
169  GLM_FUNC_DECL mat<3, 4, T, Q> mat3x4_cast(tdualquat<T, Q> const& x);
-
170 
-
174  template<typename T, qualifier Q>
-
175  GLM_FUNC_DECL tdualquat<T, Q> dualquat_cast(mat<2, 4, T, Q> const& x);
-
176 
-
180  template<typename T, qualifier Q>
-
181  GLM_FUNC_DECL tdualquat<T, Q> dualquat_cast(mat<3, 4, T, Q> const& x);
-
182 
-
183 
-
187  typedef tdualquat<float, lowp> lowp_dualquat;
-
188 
-
192  typedef tdualquat<float, mediump> mediump_dualquat;
-
193 
-
197  typedef tdualquat<float, highp> highp_dualquat;
-
198 
-
199 
-
203  typedef tdualquat<float, lowp> lowp_fdualquat;
-
204 
-
208  typedef tdualquat<float, mediump> mediump_fdualquat;
-
209 
-
213  typedef tdualquat<float, highp> highp_fdualquat;
-
214 
-
215 
-
219  typedef tdualquat<double, lowp> lowp_ddualquat;
-
220 
-
224  typedef tdualquat<double, mediump> mediump_ddualquat;
-
225 
-
229  typedef tdualquat<double, highp> highp_ddualquat;
-
230 
-
231 
-
232 #if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
-
233  typedef highp_fdualquat dualquat;
-
237 
-
241  typedef highp_fdualquat fdualquat;
-
242 #elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
-
243  typedef highp_fdualquat dualquat;
-
244  typedef highp_fdualquat fdualquat;
-
245 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
-
246  typedef mediump_fdualquat dualquat;
-
247  typedef mediump_fdualquat fdualquat;
-
248 #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
-
249  typedef lowp_fdualquat dualquat;
-
250  typedef lowp_fdualquat fdualquat;
-
251 #else
-
252 # error "GLM error: multiple default precision requested for single-precision floating-point types"
-
253 #endif
-
254 
-
255 
-
256 #if(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
-
257  typedef highp_ddualquat ddualquat;
-
261 #elif(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
-
262  typedef highp_ddualquat ddualquat;
-
263 #elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
-
264  typedef mediump_ddualquat ddualquat;
-
265 #elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE))
-
266  typedef lowp_ddualquat ddualquat;
-
267 #else
-
268 # error "GLM error: Multiple default precision requested for double-precision floating-point types"
-
269 #endif
-
270 
-
272 } //namespace glm
-
273 
-
274 #include "dual_quaternion.inl"
-
highp_ddualquat ddualquat
Dual-quaternion of default double-qualifier floating-point numbers.
-
highp_fdualquat fdualquat
Dual-quaternion of single-qualifier floating-point numbers.
-
GLM_FUNC_DECL mat< 2, 4, T, Q > mat2x4_cast(tdualquat< T, Q > const &x)
Converts a quaternion to a 2 * 4 matrix.
-
tdualquat< double, highp > highp_ddualquat
Dual-quaternion of high double-qualifier floating-point numbers.
-
GLM_FUNC_DECL tdualquat< T, Q > normalize(tdualquat< T, Q > const &q)
Returns the normalized quaternion.
-
GLM_FUNC_DECL tdualquat< T, Q > dual_quat_identity()
Creates an identity dual quaternion.
-
GLM_FUNC_DECL tdualquat< T, Q > inverse(tdualquat< T, Q > const &q)
Returns the q inverse.
-
GLM_FUNC_DECL tdualquat< T, Q > lerp(tdualquat< T, Q > const &x, tdualquat< T, Q > const &y, T const &a)
Returns the linear interpolation of two dual quaternion.
-
tdualquat< float, lowp > lowp_dualquat
Dual-quaternion of low single-qualifier floating-point numbers.
-
tdualquat< float, lowp > lowp_fdualquat
Dual-quaternion of low single-qualifier floating-point numbers.
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
tdualquat< double, lowp > lowp_ddualquat
Dual-quaternion of low double-qualifier floating-point numbers.
-
GLM_FUNC_DECL mat< 3, 4, T, Q > mat3x4_cast(tdualquat< T, Q > const &x)
Converts a quaternion to a 3 * 4 matrix.
-
highp_fdualquat dualquat
Dual-quaternion of floating-point numbers.
-
tdualquat< float, highp > highp_fdualquat
Dual-quaternion of high single-qualifier floating-point numbers.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > orientation(vec< 3, T, Q > const &Normal, vec< 3, T, Q > const &Up)
Build a rotation matrix from a normal and a up vector.
-
tdualquat< float, mediump > mediump_dualquat
Dual-quaternion of medium single-qualifier floating-point numbers.
-
tdualquat< float, mediump > mediump_fdualquat
Dual-quaternion of medium single-qualifier floating-point numbers.
-
tdualquat< double, mediump > mediump_ddualquat
Dual-quaternion of medium double-qualifier floating-point numbers.
-
GLM_FUNC_DECL tdualquat< T, Q > dualquat_cast(mat< 3, 4, T, Q > const &x)
Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion.
-
tdualquat< float, highp > highp_dualquat
Dual-quaternion of high single-qualifier floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00023.html b/tests/OpenGL/package/glm/doc/api/a00023.html deleted file mode 100644 index 61002b82..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00023.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - -0.9.9 API documentation: easing.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
easing.hpp File Reference
-
-
- -

GLM_GTX_easing -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType backEaseIn (genType const &a)
 
template<typename genType >
GLM_FUNC_DECL genType backEaseIn (genType const &a, genType const &o)
 
template<typename genType >
GLM_FUNC_DECL genType backEaseInOut (genType const &a)
 
template<typename genType >
GLM_FUNC_DECL genType backEaseInOut (genType const &a, genType const &o)
 
template<typename genType >
GLM_FUNC_DECL genType backEaseOut (genType const &a)
 
template<typename genType >
GLM_FUNC_DECL genType backEaseOut (genType const &a, genType const &o)
 
template<typename genType >
GLM_FUNC_DECL genType bounceEaseIn (genType const &a)
 
template<typename genType >
GLM_FUNC_DECL genType bounceEaseInOut (genType const &a)
 
template<typename genType >
GLM_FUNC_DECL genType bounceEaseOut (genType const &a)
 
template<typename genType >
GLM_FUNC_DECL genType circularEaseIn (genType const &a)
 Modelled after shifted quadrant IV of unit circle. More...
 
template<typename genType >
GLM_FUNC_DECL genType circularEaseInOut (genType const &a)
 Modelled after the piecewise circular function y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1]. More...
 
template<typename genType >
GLM_FUNC_DECL genType circularEaseOut (genType const &a)
 Modelled after shifted quadrant II of unit circle. More...
 
-template<typename genType >
GLM_FUNC_DECL genType cubicEaseIn (genType const &a)
 Modelled after the cubic y = x^3.
 
template<typename genType >
GLM_FUNC_DECL genType cubicEaseInOut (genType const &a)
 Modelled after the piecewise cubic y = (1/2)((2x)^3) ; [0, 0.5) y = (1/2)((2x-2)^3 + 2) ; [0.5, 1]. More...
 
template<typename genType >
GLM_FUNC_DECL genType cubicEaseOut (genType const &a)
 Modelled after the cubic y = (x - 1)^3 + 1. More...
 
template<typename genType >
GLM_FUNC_DECL genType elasticEaseIn (genType const &a)
 Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1)) More...
 
template<typename genType >
GLM_FUNC_DECL genType elasticEaseInOut (genType const &a)
 Modelled after the piecewise exponentially-damped sine wave: y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1]. More...
 
template<typename genType >
GLM_FUNC_DECL genType elasticEaseOut (genType const &a)
 Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1. More...
 
template<typename genType >
GLM_FUNC_DECL genType exponentialEaseIn (genType const &a)
 Modelled after the exponential function y = 2^(10(x - 1)) More...
 
template<typename genType >
GLM_FUNC_DECL genType exponentialEaseInOut (genType const &a)
 Modelled after the piecewise exponential y = (1/2)2^(10(2x - 1)) ; [0,0.5) y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1]. More...
 
template<typename genType >
GLM_FUNC_DECL genType exponentialEaseOut (genType const &a)
 Modelled after the exponential function y = -2^(-10x) + 1. More...
 
template<typename genType >
GLM_FUNC_DECL genType linearInterpolation (genType const &a)
 Modelled after the line y = x. More...
 
template<typename genType >
GLM_FUNC_DECL genType quadraticEaseIn (genType const &a)
 Modelled after the parabola y = x^2. More...
 
template<typename genType >
GLM_FUNC_DECL genType quadraticEaseInOut (genType const &a)
 Modelled after the piecewise quadratic y = (1/2)((2x)^2) ; [0, 0.5) y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1]. More...
 
template<typename genType >
GLM_FUNC_DECL genType quadraticEaseOut (genType const &a)
 Modelled after the parabola y = -x^2 + 2x. More...
 
template<typename genType >
GLM_FUNC_DECL genType quarticEaseIn (genType const &a)
 Modelled after the quartic x^4. More...
 
template<typename genType >
GLM_FUNC_DECL genType quarticEaseInOut (genType const &a)
 Modelled after the piecewise quartic y = (1/2)((2x)^4) ; [0, 0.5) y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1]. More...
 
template<typename genType >
GLM_FUNC_DECL genType quarticEaseOut (genType const &a)
 Modelled after the quartic y = 1 - (x - 1)^4. More...
 
template<typename genType >
GLM_FUNC_DECL genType quinticEaseIn (genType const &a)
 Modelled after the quintic y = x^5. More...
 
template<typename genType >
GLM_FUNC_DECL genType quinticEaseInOut (genType const &a)
 Modelled after the piecewise quintic y = (1/2)((2x)^5) ; [0, 0.5) y = (1/2)((2x-2)^5 + 2) ; [0.5, 1]. More...
 
template<typename genType >
GLM_FUNC_DECL genType quinticEaseOut (genType const &a)
 Modelled after the quintic y = (x - 1)^5 + 1. More...
 
template<typename genType >
GLM_FUNC_DECL genType sineEaseIn (genType const &a)
 Modelled after quarter-cycle of sine wave. More...
 
template<typename genType >
GLM_FUNC_DECL genType sineEaseInOut (genType const &a)
 Modelled after half sine wave. More...
 
template<typename genType >
GLM_FUNC_DECL genType sineEaseOut (genType const &a)
 Modelled after quarter-cycle of sine wave (different phase) More...
 
-

Detailed Description

-

GLM_GTX_easing

-
Author
Robert Chisholm
-
See also
Core features (dependence)
- -

Definition in file easing.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00023_source.html b/tests/OpenGL/package/glm/doc/api/a00023_source.html deleted file mode 100644 index 92e1529b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00023_source.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - -0.9.9 API documentation: easing.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
easing.hpp
-
-
-Go to the documentation of this file.
1 
-
17 #pragma once
-
18 
-
19 // Dependency:
-
20 #include "../glm.hpp"
-
21 #include "../gtc/constants.hpp"
-
22 #include "../detail/qualifier.hpp"
-
23 
-
24 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
25 # ifndef GLM_ENABLE_EXPERIMENTAL
-
26 # pragma message("GLM: GLM_GTX_easing is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
27 # else
-
28 # pragma message("GLM: GLM_GTX_easing extension included")
-
29 # endif
-
30 #endif
-
31 
-
32 namespace glm{
-
35 
-
38  template <typename genType>
-
39  GLM_FUNC_DECL genType linearInterpolation(genType const & a);
-
40 
-
43  template <typename genType>
-
44  GLM_FUNC_DECL genType quadraticEaseIn(genType const & a);
-
45 
-
48  template <typename genType>
-
49  GLM_FUNC_DECL genType quadraticEaseOut(genType const & a);
-
50 
-
55  template <typename genType>
-
56  GLM_FUNC_DECL genType quadraticEaseInOut(genType const & a);
-
57 
-
59  template <typename genType>
-
60  GLM_FUNC_DECL genType cubicEaseIn(genType const & a);
-
61 
-
64  template <typename genType>
-
65  GLM_FUNC_DECL genType cubicEaseOut(genType const & a);
-
66 
-
71  template <typename genType>
-
72  GLM_FUNC_DECL genType cubicEaseInOut(genType const & a);
-
73 
-
76  template <typename genType>
-
77  GLM_FUNC_DECL genType quarticEaseIn(genType const & a);
-
78 
-
81  template <typename genType>
-
82  GLM_FUNC_DECL genType quarticEaseOut(genType const & a);
-
83 
-
88  template <typename genType>
-
89  GLM_FUNC_DECL genType quarticEaseInOut(genType const & a);
-
90 
-
93  template <typename genType>
-
94  GLM_FUNC_DECL genType quinticEaseIn(genType const & a);
-
95 
-
98  template <typename genType>
-
99  GLM_FUNC_DECL genType quinticEaseOut(genType const & a);
-
100 
-
105  template <typename genType>
-
106  GLM_FUNC_DECL genType quinticEaseInOut(genType const & a);
-
107 
-
110  template <typename genType>
-
111  GLM_FUNC_DECL genType sineEaseIn(genType const & a);
-
112 
-
115  template <typename genType>
-
116  GLM_FUNC_DECL genType sineEaseOut(genType const & a);
-
117 
-
120  template <typename genType>
-
121  GLM_FUNC_DECL genType sineEaseInOut(genType const & a);
-
122 
-
125  template <typename genType>
-
126  GLM_FUNC_DECL genType circularEaseIn(genType const & a);
-
127 
-
130  template <typename genType>
-
131  GLM_FUNC_DECL genType circularEaseOut(genType const & a);
-
132 
-
137  template <typename genType>
-
138  GLM_FUNC_DECL genType circularEaseInOut(genType const & a);
-
139 
-
142  template <typename genType>
-
143  GLM_FUNC_DECL genType exponentialEaseIn(genType const & a);
-
144 
-
147  template <typename genType>
-
148  GLM_FUNC_DECL genType exponentialEaseOut(genType const & a);
-
149 
-
154  template <typename genType>
-
155  GLM_FUNC_DECL genType exponentialEaseInOut(genType const & a);
-
156 
-
159  template <typename genType>
-
160  GLM_FUNC_DECL genType elasticEaseIn(genType const & a);
-
161 
-
164  template <typename genType>
-
165  GLM_FUNC_DECL genType elasticEaseOut(genType const & a);
-
166 
-
171  template <typename genType>
-
172  GLM_FUNC_DECL genType elasticEaseInOut(genType const & a);
-
173 
-
175  template <typename genType>
-
176  GLM_FUNC_DECL genType backEaseIn(genType const& a);
-
177 
-
179  template <typename genType>
-
180  GLM_FUNC_DECL genType backEaseOut(genType const& a);
-
181 
-
183  template <typename genType>
-
184  GLM_FUNC_DECL genType backEaseInOut(genType const& a);
-
185 
-
189  template <typename genType>
-
190  GLM_FUNC_DECL genType backEaseIn(genType const& a, genType const& o);
-
191 
-
195  template <typename genType>
-
196  GLM_FUNC_DECL genType backEaseOut(genType const& a, genType const& o);
-
197 
-
201  template <typename genType>
-
202  GLM_FUNC_DECL genType backEaseInOut(genType const& a, genType const& o);
-
203 
-
205  template <typename genType>
-
206  GLM_FUNC_DECL genType bounceEaseIn(genType const& a);
-
207 
-
209  template <typename genType>
-
210  GLM_FUNC_DECL genType bounceEaseOut(genType const& a);
-
211 
-
213  template <typename genType>
-
214  GLM_FUNC_DECL genType bounceEaseInOut(genType const& a);
-
215 
-
217 }//namespace glm
-
218 
-
219 #include "easing.inl"
-
GLM_FUNC_DECL genType bounceEaseIn(genType const &a)
-
GLM_FUNC_DECL genType circularEaseInOut(genType const &a)
Modelled after the piecewise circular function y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1].
-
GLM_FUNC_DECL genType cubicEaseIn(genType const &a)
Modelled after the cubic y = x^3.
-
GLM_FUNC_DECL genType elasticEaseIn(genType const &a)
Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1))
-
GLM_FUNC_DECL genType quinticEaseIn(genType const &a)
Modelled after the quintic y = x^5.
-
GLM_FUNC_DECL genType sineEaseInOut(genType const &a)
Modelled after half sine wave.
-
GLM_FUNC_DECL genType circularEaseOut(genType const &a)
Modelled after shifted quadrant II of unit circle.
-
GLM_FUNC_DECL genType elasticEaseOut(genType const &a)
Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1.
-
GLM_FUNC_DECL genType elasticEaseInOut(genType const &a)
Modelled after the piecewise exponentially-damped sine wave: y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1].
-
GLM_FUNC_DECL genType sineEaseIn(genType const &a)
Modelled after quarter-cycle of sine wave.
-
GLM_FUNC_DECL genType linearInterpolation(genType const &a)
Modelled after the line y = x.
-
GLM_FUNC_DECL genType quarticEaseIn(genType const &a)
Modelled after the quartic x^4.
-
GLM_FUNC_DECL genType quarticEaseOut(genType const &a)
Modelled after the quartic y = 1 - (x - 1)^4.
-
GLM_FUNC_DECL genType sineEaseOut(genType const &a)
Modelled after quarter-cycle of sine wave (different phase)
-
GLM_FUNC_DECL genType quadraticEaseInOut(genType const &a)
Modelled after the piecewise quadratic y = (1/2)((2x)^2) ; [0, 0.5) y = -(1/2)((2x-1)*(2x-3) - 1) ; [...
-
GLM_FUNC_DECL genType circularEaseIn(genType const &a)
Modelled after shifted quadrant IV of unit circle.
-
GLM_FUNC_DECL genType quadraticEaseOut(genType const &a)
Modelled after the parabola y = -x^2 + 2x.
-
GLM_FUNC_DECL genType exponentialEaseOut(genType const &a)
Modelled after the exponential function y = -2^(-10x) + 1.
-
GLM_FUNC_DECL genType quinticEaseOut(genType const &a)
Modelled after the quintic y = (x - 1)^5 + 1.
-
GLM_FUNC_DECL genType cubicEaseOut(genType const &a)
Modelled after the cubic y = (x - 1)^3 + 1.
-
GLM_FUNC_DECL genType exponentialEaseInOut(genType const &a)
Modelled after the piecewise exponential y = (1/2)2^(10(2x - 1)) ; [0,0.5) y = -(1/2)*2^(-10(2x - 1))...
-
GLM_FUNC_DECL genType bounceEaseOut(genType const &a)
-
GLM_FUNC_DECL genType quinticEaseInOut(genType const &a)
Modelled after the piecewise quintic y = (1/2)((2x)^5) ; [0, 0.5) y = (1/2)((2x-2)^5 + 2) ; [0...
-
GLM_FUNC_DECL genType backEaseIn(genType const &a, genType const &o)
-
GLM_FUNC_DECL genType exponentialEaseIn(genType const &a)
Modelled after the exponential function y = 2^(10(x - 1))
-
GLM_FUNC_DECL genType quadraticEaseIn(genType const &a)
Modelled after the parabola y = x^2.
-
GLM_FUNC_DECL genType quarticEaseInOut(genType const &a)
Modelled after the piecewise quartic y = (1/2)((2x)^4) ; [0, 0.5) y = -(1/2)((2x-2)^4 - 2) ; [0...
-
GLM_FUNC_DECL genType cubicEaseInOut(genType const &a)
Modelled after the piecewise cubic y = (1/2)((2x)^3) ; [0, 0.5) y = (1/2)((2x-2)^3 + 2) ; [0...
-
GLM_FUNC_DECL genType bounceEaseInOut(genType const &a)
-
GLM_FUNC_DECL genType backEaseInOut(genType const &a, genType const &o)
-
GLM_FUNC_DECL genType backEaseOut(genType const &a, genType const &o)
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00024.html b/tests/OpenGL/package/glm/doc/api/a00024.html deleted file mode 100644 index 8a392d24..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00024.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - -0.9.9 API documentation: epsilon.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
epsilon.hpp File Reference
-
-
- -

GLM_GTC_epsilon -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > epsilonEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y, T const &epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<typename genType >
GLM_FUNC_DECL bool epsilonEqual (genType const &x, genType const &y, genType const &epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > epsilonNotEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y, T const &epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<typename genType >
GLM_FUNC_DECL bool epsilonNotEqual (genType const &x, genType const &y, genType const &epsilon)
 Returns the component-wise comparison of |x - y| >= epsilon. More...
 
-

Detailed Description

-

GLM_GTC_epsilon

-
See also
Core features (dependence)
-
-GLM_GTC_quaternion (dependence)
- -

Definition in file epsilon.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00024_source.html b/tests/OpenGL/package/glm/doc/api/a00024_source.html deleted file mode 100644 index a1da3838..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00024_source.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -0.9.9 API documentation: epsilon.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
epsilon.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependencies
-
17 #include "../detail/setup.hpp"
-
18 #include "../detail/qualifier.hpp"
-
19 
-
20 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
21 # pragma message("GLM: GLM_GTC_epsilon extension included")
-
22 #endif
-
23 
-
24 namespace glm
-
25 {
-
28 
-
33  template<length_t L, typename T, qualifier Q>
-
34  GLM_FUNC_DECL vec<L, bool, Q> epsilonEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon);
-
35 
-
40  template<typename genType>
-
41  GLM_FUNC_DECL bool epsilonEqual(genType const& x, genType const& y, genType const& epsilon);
-
42 
-
47  template<length_t L, typename T, qualifier Q>
-
48  GLM_FUNC_DECL vec<L, bool, Q> epsilonNotEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon);
-
49 
-
54  template<typename genType>
-
55  GLM_FUNC_DECL bool epsilonNotEqual(genType const& x, genType const& y, genType const& epsilon);
-
56 
-
58 }//namespace glm
-
59 
-
60 #include "epsilon.inl"
-
GLM_FUNC_DECL bool epsilonEqual(genType const &x, genType const &y, genType const &epsilon)
Returns the component-wise comparison of |x - y| < epsilon.
-
GLM_FUNC_DECL bool epsilonNotEqual(genType const &x, genType const &y, genType const &epsilon)
Returns the component-wise comparison of |x - y| >= epsilon.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()
Return the epsilon constant for floating point types.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00025.html b/tests/OpenGL/package/glm/doc/api/a00025.html deleted file mode 100644 index 2904e622..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00025.html +++ /dev/null @@ -1,279 +0,0 @@ - - - - - - -0.9.9 API documentation: euler_angles.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
euler_angles.hpp File Reference
-
-
- -

GLM_GTX_euler_angles -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > derivedEulerAngleX (T const &angleX, T const &angularVelocityX)
 Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > derivedEulerAngleY (T const &angleY, T const &angularVelocityY)
 Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > derivedEulerAngleZ (T const &angleZ, T const &angularVelocityZ)
 Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleX (T const &angleX)
 Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXY (T const &angleX, T const &angleY)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXYX (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXYZ (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXZ (T const &angleX, T const &angleZ)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXZX (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXZY (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleY (T const &angleY)
 Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYX (T const &angleY, T const &angleX)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYXY (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYXZ (T const &yaw, T const &pitch, T const &roll)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYZ (T const &angleY, T const &angleZ)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYZX (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYZY (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZ (T const &angleZ)
 Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZX (T const &angle, T const &angleX)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZXY (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZXZ (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZY (T const &angleZ, T const &angleY)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZYX (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZYZ (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z). More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleXYX (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (X * Y * X) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleXYZ (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (X * Y * Z) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleXZX (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (X * Z * X) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleXZY (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (X * Z * Y) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleYXY (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Y * X * Y) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleYXZ (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Y * X * Z) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleYZX (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Y * Z * X) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleYZY (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Y * Z * Y) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleZXY (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Z * X * Y) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleZXZ (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Z * X * Z) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleZYX (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Z * Y * X) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleZYZ (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Z * Y * Z) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL mat< 2, 2, T, defaultp > orientate2 (T const &angle)
 Creates a 2D 2 * 2 rotation matrix from an euler angle. More...
 
template<typename T >
GLM_FUNC_DECL mat< 3, 3, T, defaultp > orientate3 (T const &angle)
 Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > orientate3 (vec< 3, T, Q > const &angles)
 Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > orientate4 (vec< 3, T, Q > const &angles)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > yawPitchRoll (T const &yaw, T const &pitch, T const &roll)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). More...
 
-

Detailed Description

-

GLM_GTX_euler_angles

-
See also
Core features (dependence)
- -

Definition in file euler_angles.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00025_source.html b/tests/OpenGL/package/glm/doc/api/a00025_source.html deleted file mode 100644 index 5c6402e7..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00025_source.html +++ /dev/null @@ -1,380 +0,0 @@ - - - - - - -0.9.9 API documentation: euler_angles.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
euler_angles.hpp
-
-
-Go to the documentation of this file.
1 
-
16 #pragma once
-
17 
-
18 // Dependency:
-
19 #include "../glm.hpp"
-
20 
-
21 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
22 # ifndef GLM_ENABLE_EXPERIMENTAL
-
23 # pragma message("GLM: GLM_GTX_euler_angles is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
24 # else
-
25 # pragma message("GLM: GLM_GTX_euler_angles extension included")
-
26 # endif
-
27 #endif
-
28 
-
29 namespace glm
-
30 {
-
33 
-
36  template<typename T>
-
37  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleX(
-
38  T const& angleX);
-
39 
-
42  template<typename T>
-
43  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleY(
-
44  T const& angleY);
-
45 
-
48  template<typename T>
-
49  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZ(
-
50  T const& angleZ);
-
51 
-
54  template <typename T>
-
55  GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleX(
-
56  T const & angleX, T const & angularVelocityX);
-
57 
-
60  template <typename T>
-
61  GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleY(
-
62  T const & angleY, T const & angularVelocityY);
-
63 
-
66  template <typename T>
-
67  GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleZ(
-
68  T const & angleZ, T const & angularVelocityZ);
-
69 
-
72  template<typename T>
-
73  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXY(
-
74  T const& angleX,
-
75  T const& angleY);
-
76 
-
79  template<typename T>
-
80  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYX(
-
81  T const& angleY,
-
82  T const& angleX);
-
83 
-
86  template<typename T>
-
87  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZ(
-
88  T const& angleX,
-
89  T const& angleZ);
-
90 
-
93  template<typename T>
-
94  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZX(
-
95  T const& angle,
-
96  T const& angleX);
-
97 
-
100  template<typename T>
-
101  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZ(
-
102  T const& angleY,
-
103  T const& angleZ);
-
104 
-
107  template<typename T>
-
108  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZY(
-
109  T const& angleZ,
-
110  T const& angleY);
-
111 
-
114  template<typename T>
-
115  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYZ(
-
116  T const& t1,
-
117  T const& t2,
-
118  T const& t3);
-
119 
-
122  template<typename T>
-
123  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXZ(
-
124  T const& yaw,
-
125  T const& pitch,
-
126  T const& roll);
-
127 
-
130  template <typename T>
-
131  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZX(
-
132  T const & t1,
-
133  T const & t2,
-
134  T const & t3);
-
135 
-
138  template <typename T>
-
139  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYX(
-
140  T const & t1,
-
141  T const & t2,
-
142  T const & t3);
-
143 
-
146  template <typename T>
-
147  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXY(
-
148  T const & t1,
-
149  T const & t2,
-
150  T const & t3);
-
151 
-
154  template <typename T>
-
155  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZY(
-
156  T const & t1,
-
157  T const & t2,
-
158  T const & t3);
-
159 
-
162  template <typename T>
-
163  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYZ(
-
164  T const & t1,
-
165  T const & t2,
-
166  T const & t3);
-
167 
-
170  template <typename T>
-
171  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXZ(
-
172  T const & t1,
-
173  T const & t2,
-
174  T const & t3);
-
175 
-
178  template <typename T>
-
179  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZY(
-
180  T const & t1,
-
181  T const & t2,
-
182  T const & t3);
-
183 
-
186  template <typename T>
-
187  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZX(
-
188  T const & t1,
-
189  T const & t2,
-
190  T const & t3);
-
191 
-
194  template <typename T>
-
195  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYX(
-
196  T const & t1,
-
197  T const & t2,
-
198  T const & t3);
-
199 
-
202  template <typename T>
-
203  GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXY(
-
204  T const & t1,
-
205  T const & t2,
-
206  T const & t3);
-
207 
-
210  template<typename T>
-
211  GLM_FUNC_DECL mat<4, 4, T, defaultp> yawPitchRoll(
-
212  T const& yaw,
-
213  T const& pitch,
-
214  T const& roll);
-
215 
-
218  template<typename T>
-
219  GLM_FUNC_DECL mat<2, 2, T, defaultp> orientate2(T const& angle);
-
220 
-
223  template<typename T>
-
224  GLM_FUNC_DECL mat<3, 3, T, defaultp> orientate3(T const& angle);
-
225 
-
228  template<typename T, qualifier Q>
-
229  GLM_FUNC_DECL mat<3, 3, T, Q> orientate3(vec<3, T, Q> const& angles);
-
230 
-
233  template<typename T, qualifier Q>
-
234  GLM_FUNC_DECL mat<4, 4, T, Q> orientate4(vec<3, T, Q> const& angles);
-
235 
-
238  template<typename T>
-
239  GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M,
-
240  T & t1,
-
241  T & t2,
-
242  T & t3);
-
243 
-
246  template <typename T>
-
247  GLM_FUNC_DECL void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M,
-
248  T & t1,
-
249  T & t2,
-
250  T & t3);
-
251 
-
254  template <typename T>
-
255  GLM_FUNC_DECL void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M,
-
256  T & t1,
-
257  T & t2,
-
258  T & t3);
-
259 
-
262  template <typename T>
-
263  GLM_FUNC_DECL void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M,
-
264  T & t1,
-
265  T & t2,
-
266  T & t3);
-
267 
-
270  template <typename T>
-
271  GLM_FUNC_DECL void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M,
-
272  T & t1,
-
273  T & t2,
-
274  T & t3);
-
275 
-
278  template <typename T>
-
279  GLM_FUNC_DECL void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M,
-
280  T & t1,
-
281  T & t2,
-
282  T & t3);
-
283 
-
286  template <typename T>
-
287  GLM_FUNC_DECL void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M,
-
288  T & t1,
-
289  T & t2,
-
290  T & t3);
-
291 
-
294  template <typename T>
-
295  GLM_FUNC_DECL void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M,
-
296  T & t1,
-
297  T & t2,
-
298  T & t3);
-
299 
-
302  template <typename T>
-
303  GLM_FUNC_DECL void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M,
-
304  T & t1,
-
305  T & t2,
-
306  T & t3);
-
307 
-
310  template <typename T>
-
311  GLM_FUNC_DECL void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M,
-
312  T & t1,
-
313  T & t2,
-
314  T & t3);
-
315 
-
318  template <typename T>
-
319  GLM_FUNC_DECL void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M,
-
320  T & t1,
-
321  T & t2,
-
322  T & t3);
-
323 
-
326  template <typename T>
-
327  GLM_FUNC_DECL void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M,
-
328  T & t1,
-
329  T & t2,
-
330  T & t3);
-
331 
-
333 }//namespace glm
-
334 
-
335 #include "euler_angles.inl"
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXY(T const &angleX, T const &angleY)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYZY(T const &t1, T const &t2, T const &t3)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y).
-
GLM_FUNC_DECL void extractEulerAngleYXZ(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
Extracts the (Y * X * Z) Euler angles from the rotation matrix M.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXYZ(T const &t1, T const &t2, T const &t3)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z).
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXZY(T const &t1, T const &t2, T const &t3)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y).
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > derivedEulerAngleZ(T const &angleZ, T const &angularVelocityZ)
Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYX(T const &angleY, T const &angleX)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleY(T const &angleY)
Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.
-
GLM_FUNC_DECL T angle(qua< T, Q > const &x)
Returns the quaternion rotation angle.
-
GLM_FUNC_DECL void extractEulerAngleZYZ(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
Extracts the (Z * Y * Z) Euler angles from the rotation matrix M.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > derivedEulerAngleX(T const &angleX, T const &angularVelocityX)
Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis.
-
GLM_FUNC_DECL void extractEulerAngleXYX(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
Extracts the (X * Y * X) Euler angles from the rotation matrix M.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZXY(T const &t1, T const &t2, T const &t3)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y).
-
GLM_FUNC_DECL T roll(qua< T, Q > const &x)
Returns roll value of euler angles expressed in radians.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleX(T const &angleX)
Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.
-
GLM_FUNC_DECL mat< 2, 2, T, defaultp > orientate2(T const &angle)
Creates a 2D 2 * 2 rotation matrix from an euler angle.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXYX(T const &t1, T const &t2, T const &t3)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X).
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYXZ(T const &yaw, T const &pitch, T const &roll)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
-
GLM_FUNC_DECL void extractEulerAngleXZX(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
Extracts the (X * Z * X) Euler angles from the rotation matrix M.
-
GLM_FUNC_DECL T yaw(qua< T, Q > const &x)
Returns yaw value of euler angles expressed in radians.
-
GLM_FUNC_DECL void extractEulerAngleYXY(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
Extracts the (Y * X * Y) Euler angles from the rotation matrix M.
-
GLM_FUNC_DECL void extractEulerAngleZXY(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
Extracts the (Z * X * Y) Euler angles from the rotation matrix M.
-
GLM_FUNC_DECL void extractEulerAngleXZY(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
Extracts the (X * Z * Y) Euler angles from the rotation matrix M.
-
GLM_FUNC_DECL void extractEulerAngleYZX(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
Extracts the (Y * Z * X) Euler angles from the rotation matrix M.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXZX(T const &t1, T const &t2, T const &t3)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X).
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZYX(T const &t1, T const &t2, T const &t3)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X).
-
GLM_FUNC_DECL mat< 4, 4, T, Q > orientate4(vec< 3, T, Q > const &angles)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
-
GLM_FUNC_DECL void extractEulerAngleZYX(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
Extracts the (Z * Y * X) Euler angles from the rotation matrix M.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZ(T const &angleZ)
Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYXY(T const &t1, T const &t2, T const &t3)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y).
-
GLM_FUNC_DECL void extractEulerAngleYZY(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
Extracts the (Y * Z * Y) Euler angles from the rotation matrix M.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > yawPitchRoll(T const &yaw, T const &pitch, T const &roll)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXZ(T const &angleX, T const &angleZ)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).
-
GLM_FUNC_DECL void extractEulerAngleXYZ(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
Extracts the (X * Y * Z) Euler angles from the rotation matrix M.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZXZ(T const &t1, T const &t2, T const &t3)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z).
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYZX(T const &t1, T const &t2, T const &t3)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X).
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZY(T const &angleZ, T const &angleY)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZYZ(T const &t1, T const &t2, T const &t3)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z).
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYZ(T const &angleY, T const &angleZ)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).
-
GLM_FUNC_DECL mat< 3, 3, T, Q > orientate3(vec< 3, T, Q > const &angles)
Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).
-
GLM_FUNC_DECL void extractEulerAngleZXZ(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
Extracts the (Z * X * Z) Euler angles from the rotation matrix M.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > derivedEulerAngleY(T const &angleY, T const &angularVelocityY)
Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis.
-
GLM_FUNC_DECL T pitch(qua< T, Q > const &x)
Returns pitch value of euler angles expressed in radians.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZX(T const &angle, T const &angleX)
Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00026.html b/tests/OpenGL/package/glm/doc/api/a00026.html deleted file mode 100644 index 552b6ed2..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00026.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -0.9.9 API documentation: exponential.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
exponential.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > exp (vec< L, T, Q > const &v)
 Returns the natural exponentiation of x, i.e., e^x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > exp2 (vec< L, T, Q > const &v)
 Returns 2 raised to the v power. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > inversesqrt (vec< L, T, Q > const &v)
 Returns the reciprocal of the positive square root of v. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > log (vec< L, T, Q > const &v)
 Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > log2 (vec< L, T, Q > const &v)
 Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > pow (vec< L, T, Q > const &base, vec< L, T, Q > const &exponent)
 Returns 'base' raised to the power 'exponent'. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > sqrt (vec< L, T, Q > const &v)
 Returns the positive square root of v. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00026_source.html b/tests/OpenGL/package/glm/doc/api/a00026_source.html deleted file mode 100644 index 56d929d8..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00026_source.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - -0.9.9 API documentation: exponential.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
exponential.hpp
-
-
-Go to the documentation of this file.
1 
-
15 #pragma once
-
16 
-
17 #include "detail/type_vec1.hpp"
-
18 #include "detail/type_vec2.hpp"
-
19 #include "detail/type_vec3.hpp"
-
20 #include "detail/type_vec4.hpp"
-
21 #include <cmath>
-
22 
-
23 namespace glm
-
24 {
-
27 
-
35  template<length_t L, typename T, qualifier Q>
-
36  GLM_FUNC_DECL vec<L, T, Q> pow(vec<L, T, Q> const& base, vec<L, T, Q> const& exponent);
-
37 
-
46  template<length_t L, typename T, qualifier Q>
-
47  GLM_FUNC_DECL vec<L, T, Q> exp(vec<L, T, Q> const& v);
-
48 
-
59  template<length_t L, typename T, qualifier Q>
-
60  GLM_FUNC_DECL vec<L, T, Q> log(vec<L, T, Q> const& v);
-
61 
-
70  template<length_t L, typename T, qualifier Q>
-
71  GLM_FUNC_DECL vec<L, T, Q> exp2(vec<L, T, Q> const& v);
-
72 
-
82  template<length_t L, typename T, qualifier Q>
-
83  GLM_FUNC_DECL vec<L, T, Q> log2(vec<L, T, Q> const& v);
-
84 
-
93  template<length_t L, typename T, qualifier Q>
-
94  GLM_FUNC_DECL vec<L, T, Q> sqrt(vec<L, T, Q> const& v);
-
95 
-
104  template<length_t L, typename T, qualifier Q>
-
105  GLM_FUNC_DECL vec<L, T, Q> inversesqrt(vec<L, T, Q> const& v);
-
106 
-
108 }//namespace glm
-
109 
-
110 #include "detail/func_exponential.inl"
-
Core features
-
GLM_FUNC_DECL vec< L, T, Q > sqrt(vec< L, T, Q > const &v)
Returns the positive square root of v.
-
GLM_FUNC_DECL vec< L, T, Q > exp2(vec< L, T, Q > const &v)
Returns 2 raised to the v power.
-
GLM_FUNC_DECL vec< L, T, Q > inversesqrt(vec< L, T, Q > const &v)
Returns the reciprocal of the positive square root of v.
-
Core features
-
Core features
-
GLM_FUNC_DECL vec< L, T, Q > pow(vec< L, T, Q > const &base, vec< L, T, Q > const &exponent)
Returns 'base' raised to the power 'exponent'.
-
GLM_FUNC_DECL vec< L, T, Q > exp(vec< L, T, Q > const &v)
Returns the natural exponentiation of x, i.e., e^x.
-
GLM_FUNC_DECL vec< L, T, Q > log(vec< L, T, Q > const &v)
Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y...
-
Core features
-
GLM_FUNC_DECL vec< L, T, Q > log2(vec< L, T, Q > const &v)
Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00027.html b/tests/OpenGL/package/glm/doc/api/a00027.html deleted file mode 100644 index d70d9442..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00027.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: ext.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
ext.hpp File Reference
-
-
- -

Core features (Dependence) -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features (Dependence)

- -

Definition in file ext.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00027_source.html b/tests/OpenGL/package/glm/doc/api/a00027_source.html deleted file mode 100644 index 4142831a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00027_source.html +++ /dev/null @@ -1,449 +0,0 @@ - - - - - - -0.9.9 API documentation: ext.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
ext.hpp
-
-
-Go to the documentation of this file.
1 
-
5 #include "detail/setup.hpp"
-
6 
-
7 #pragma once
-
8 
-
9 #include "glm.hpp"
-
10 
-
11 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED)
-
12 # define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED
-
13 # pragma message("GLM: All extensions included (not recommended)")
-
14 #endif//GLM_MESSAGES
-
15 
- - - - - - - - - - - - - - - - - - -
34 
- - - - - - - - - - - - - -
48 #include "./ext/matrix_float4x2_precision.hpp"
- - - - -
53 
- -
55 
- - - - - - -
62 
- - - -
66 
-
67 #include "./ext/vector_bool1.hpp"
- -
69 #include "./ext/vector_bool2.hpp"
- -
71 #include "./ext/vector_bool3.hpp"
- -
73 #include "./ext/vector_bool4.hpp"
- -
75 
-
76 #include "./ext/vector_double1.hpp"
- -
78 #include "./ext/vector_double2.hpp"
- -
80 #include "./ext/vector_double3.hpp"
- -
82 #include "./ext/vector_double4.hpp"
- -
84 
-
85 #include "./ext/vector_float1.hpp"
- -
87 #include "./ext/vector_float2.hpp"
- -
89 #include "./ext/vector_float3.hpp"
- -
91 #include "./ext/vector_float4.hpp"
- -
93 
-
94 #include "./ext/vector_int1.hpp"
- -
96 #include "./ext/vector_int2.hpp"
- -
98 #include "./ext/vector_int3.hpp"
- -
100 #include "./ext/vector_int4.hpp"
- -
102 
- -
104 
-
105 #include "./ext/vector_uint1.hpp"
- -
107 #include "./ext/vector_uint2.hpp"
- -
109 #include "./ext/vector_uint3.hpp"
- -
111 #include "./ext/vector_uint4.hpp"
- -
113 
-
114 #include "./gtc/bitfield.hpp"
-
115 #include "./gtc/color_space.hpp"
-
116 #include "./gtc/constants.hpp"
-
117 #include "./gtc/epsilon.hpp"
-
118 #include "./gtc/integer.hpp"
-
119 #include "./gtc/matrix_access.hpp"
-
120 #include "./gtc/matrix_integer.hpp"
-
121 #include "./gtc/matrix_inverse.hpp"
- -
123 #include "./gtc/noise.hpp"
-
124 #include "./gtc/packing.hpp"
-
125 #include "./gtc/quaternion.hpp"
-
126 #include "./gtc/random.hpp"
-
127 #include "./gtc/reciprocal.hpp"
-
128 #include "./gtc/round.hpp"
-
129 #include "./gtc/type_precision.hpp"
-
130 #include "./gtc/type_ptr.hpp"
-
131 #include "./gtc/ulp.hpp"
-
132 #include "./gtc/vec1.hpp"
-
133 #if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE
-
134 # include "./gtc/type_aligned.hpp"
-
135 #endif
-
136 
-
137 #ifdef GLM_ENABLE_EXPERIMENTAL
- -
139 #include "./gtx/bit.hpp"
-
140 #include "./gtx/closest_point.hpp"
-
141 #include "./gtx/color_encoding.hpp"
-
142 #include "./gtx/color_space.hpp"
- -
144 #include "./gtx/compatibility.hpp"
-
145 #include "./gtx/component_wise.hpp"
-
146 #include "./gtx/dual_quaternion.hpp"
-
147 #include "./gtx/euler_angles.hpp"
-
148 #include "./gtx/extend.hpp"
- - - - -
153 #include "./gtx/functions.hpp"
-
154 #include "./gtx/gradient_paint.hpp"
- -
156 #include "./gtx/integer.hpp"
-
157 #include "./gtx/intersect.hpp"
-
158 #include "./gtx/log_base.hpp"
- - - - -
163 #include "./gtx/matrix_query.hpp"
-
164 #include "./gtx/mixed_product.hpp"
-
165 #include "./gtx/norm.hpp"
-
166 #include "./gtx/normal.hpp"
-
167 #include "./gtx/normalize_dot.hpp"
- -
169 #include "./gtx/optimum_pow.hpp"
-
170 #include "./gtx/orthonormalize.hpp"
-
171 #include "./gtx/perpendicular.hpp"
- -
173 #include "./gtx/projection.hpp"
-
174 #include "./gtx/quaternion.hpp"
-
175 #include "./gtx/raw_data.hpp"
-
176 #include "./gtx/rotate_vector.hpp"
-
177 #include "./gtx/spline.hpp"
-
178 #include "./gtx/std_based_type.hpp"
-
179 #if !(GLM_COMPILER & GLM_COMPILER_CUDA)
-
180 # include "./gtx/string_cast.hpp"
-
181 #endif
-
182 #include "./gtx/transform.hpp"
-
183 #include "./gtx/transform2.hpp"
-
184 #include "./gtx/vec_swizzle.hpp"
-
185 #include "./gtx/vector_angle.hpp"
-
186 #include "./gtx/vector_query.hpp"
-
187 #include "./gtx/wrap.hpp"
-
188 
-
189 #if GLM_HAS_TEMPLATE_ALIASES
- -
191 #endif
-
192 
-
193 #if GLM_HAS_RANGE_FOR
-
194 # include "./gtx/range.hpp"
-
195 #endif
-
196 #endif//GLM_ENABLE_EXPERIMENTAL
-
GLM_GTC_epsilon
-
GLM_EXT_vector_relational
-
GLM_GTX_dual_quaternion
-
GLM_GTX_polar_coordinates
-
GLM_GTX_closest_point
-
Core features
- - -
GLM_GTX_handed_coordinate_space
-
Core features
-
GLM_GTX_raw_data
- -
Core features
-
GLM_GTX_string_cast
-
GLM_EXT_vector_uint1_precision
-
GLM_GTX_intersect
-
GLM_EXT_vector_int1_precision
-
GLM_GTX_normalize_dot
-
GLM_GTX_integer
-
GLM_GTX_rotate_vector
- -
GLM_GTX_matrix_major_storage
-
Core features
- -
Core features
-
GLM_GTX_matrix_interpolation
-
GLM_GTX_vector_angle
-
GLM_GTX_transform2
- - -
GLM_GTX_wrap
-
GLM_GTX_vector_query
-
GLM_GTX_projection
-
GLM_GTC_constants
- -
GLM_GTX_perpendicular
-
Core features
-
Core features
-
Core features
- -
Core features
-
GLM_GTX_std_based_type
-
Core features
-
GLM_GTX_component_wise
-
GLM_GTC_ulp
-
GLM_GTC_round
-
Core features
-
GLM_GTX_orthonormalize
- -
GLM_GTC_integer
-
GLM_EXT_vector_float1
- -
GLM_GTX_matrix_query
-
GLM_EXT_vector_double1_precision
- -
GLM_GTX_vec_swizzle
-
Core features
-
GLM_GTC_type_ptr
-
Core features
-
GLM_GTX_gradient_paint
-
GLM_GTC_bitfield
-
GLM_GTX_range
- -
Core features
-
GLM_GTC_matrix_transform
-
GLM_GTX_matrix_cross_product
-
GLM_EXT_vector_bool1_precision
-
GLM_GTC_type_aligned
-
GLM_EXT_vector_uint1
-
GLM_GTX_quaternion
-
GLM_GTX_color_space_YCoCg
-
GLM_EXT_vector_int1
-
GLM_GTX_normal
-
GLM_GTC_color_space
-
Core features
-
GLM_GTC_noise
-
Core features
-
Core features
- -
GLM_GTC_matrix_integer
-
GLM_GTC_matrix_access
-
GLM_GTX_extented_min_max
-
GLM_GTC_vec1
-
GLM_GTX_transform
- -
GLM_EXT_quaternion_double_precision
-
GLM_GTX_log_base
-
GLM_GTX_compatibility
-
GLM_EXT_scalar_int_sized
- -
GLM_GTX_optimum_pow
-
GLM_GTX_functions
-
GLM_EXT_quaternion_relational
- -
GLM_GTX_fast_square_root
-
Core features
-
GLM_EXT_quaternion_float_precision
-
Core features
- -
GLM_EXT_scalar_relational
- -
Core features
-
GLM_GTC_random
-
GLM_GTX_euler_angles
-
GLM_GTX_spline
-
GLM_GTC_quaternion
-
GLM_GTX_color_space
- -
GLM_GTX_norm
-
GLM_GTX_color_encoding
-
GLM_GTC_reciprocal
- -
Core features
-
GLM_GTX_mixed_producte
-
Core features
-
GLM_EXT_vector_double1
-
Core features
- -
GLM_GTC_type_precision
-
GLM_EXT_scalar_constants
- -
GLM_GTX_fast_trigonometry
-
GLM_GTX_bit
- -
GLM_EXT_quaternion_geometric
-
Core features
-
GLM_GTX_fast_exponential
- -
GLM_EXT_quaternion_float
- -
GLM_EXT_vector_bool1
-
Core features
-
Core features
-
Core features
- -
Core features
-
GLM_GTX_extend
- -
Core features
-
GLM_EXT_quaternion_double
- -
Core features
-
GLM_GTX_number_precision
-
Core features
- -
GLM_GTX_matrix_operation
-
Core features
- -
GLM_GTC_matrix_inverse
-
Core features
-
Experimental extensions
- -
GLM_GTC_packing
-
Core features
-
GLM_GTX_associated_min_max
-
GLM_EXT_vector_float1_precision
-
GLM_EXT_matrix_relational
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00028.html b/tests/OpenGL/package/glm/doc/api/a00028.html deleted file mode 100644 index 99d4646d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00028.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - -0.9.9 API documentation: extend.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
extend.hpp File Reference
-
-
- -

GLM_GTX_extend -More...

- -

Go to the source code of this file.

- - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType extend (genType const &Origin, genType const &Source, typename genType::value_type const Length)
 Extends of Length the Origin position using the (Source - Origin) direction. More...
 
-

Detailed Description

-

GLM_GTX_extend

-
See also
Core features (dependence)
- -

Definition in file extend.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00028_source.html b/tests/OpenGL/package/glm/doc/api/a00028_source.html deleted file mode 100644 index 71f6bf9a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00028_source.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - -0.9.9 API documentation: extend.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
extend.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_extend extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
33  template<typename genType>
-
34  GLM_FUNC_DECL genType extend(
-
35  genType const& Origin,
-
36  genType const& Source,
-
37  typename genType::value_type const Length);
-
38 
-
40 }//namespace glm
-
41 
-
42 #include "extend.inl"
-
GLM_FUNC_DECL genType extend(genType const &Origin, genType const &Source, typename genType::value_type const Length)
Extends of Length the Origin position using the (Source - Origin) direction.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00029.html b/tests/OpenGL/package/glm/doc/api/a00029.html deleted file mode 100644 index 892f596a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00029.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - -0.9.9 API documentation: extended_min_max.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
extended_min_max.hpp File Reference
-
-
- -

GLM_GTX_extented_min_max -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType fclamp (genType x, genType minVal, genType maxVal)
 Returns min(max(x, minVal), maxVal) for each component in x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fclamp (vec< L, T, Q > const &x, T minVal, T maxVal)
 Returns min(max(x, minVal), maxVal) for each component in x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fclamp (vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &maxVal)
 Returns min(max(x, minVal), maxVal) for each component in x. More...
 
template<typename genType >
GLM_FUNC_DECL genType fmax (genType x, genType y)
 Returns y if x < y; otherwise, it returns x. More...
 
template<typename genType >
GLM_FUNC_DECL genType fmin (genType x, genType y)
 Returns y if y < x; otherwise, it returns x. More...
 
template<typename T >
GLM_FUNC_DECL T max (T const &x, T const &y, T const &z)
 Return the maximum component-wise values of 3 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > max (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)
 Return the maximum component-wise values of 3 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > max (C< T > const &x, C< T > const &y, C< T > const &z)
 Return the maximum component-wise values of 3 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T max (T const &x, T const &y, T const &z, T const &w)
 Return the maximum component-wise values of 4 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > max (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)
 Return the maximum component-wise values of 4 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > max (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
 Return the maximum component-wise values of 4 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T min (T const &x, T const &y, T const &z)
 Return the minimum component-wise values of 3 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > min (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)
 Return the minimum component-wise values of 3 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > min (C< T > const &x, C< T > const &y, C< T > const &z)
 Return the minimum component-wise values of 3 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T min (T const &x, T const &y, T const &z, T const &w)
 Return the minimum component-wise values of 4 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > min (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)
 Return the minimum component-wise values of 4 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > min (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
 Return the minimum component-wise values of 4 inputs. More...
 
-

Detailed Description

-

GLM_GTX_extented_min_max

-
See also
Core features (dependence)
- -

Definition in file extended_min_max.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00029_source.html b/tests/OpenGL/package/glm/doc/api/a00029_source.html deleted file mode 100644 index 2cb43baf..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00029_source.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - -0.9.9 API documentation: extended_min_max.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
extended_min_max.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_extented_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_extented_min_max extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
33  template<typename T>
-
34  GLM_FUNC_DECL T min(
-
35  T const& x,
-
36  T const& y,
-
37  T const& z);
-
38 
-
41  template<typename T, template<typename> class C>
-
42  GLM_FUNC_DECL C<T> min(
-
43  C<T> const& x,
-
44  typename C<T>::T const& y,
-
45  typename C<T>::T const& z);
-
46 
-
49  template<typename T, template<typename> class C>
-
50  GLM_FUNC_DECL C<T> min(
-
51  C<T> const& x,
-
52  C<T> const& y,
-
53  C<T> const& z);
-
54 
-
57  template<typename T>
-
58  GLM_FUNC_DECL T min(
-
59  T const& x,
-
60  T const& y,
-
61  T const& z,
-
62  T const& w);
-
63 
-
66  template<typename T, template<typename> class C>
-
67  GLM_FUNC_DECL C<T> min(
-
68  C<T> const& x,
-
69  typename C<T>::T const& y,
-
70  typename C<T>::T const& z,
-
71  typename C<T>::T const& w);
-
72 
-
75  template<typename T, template<typename> class C>
-
76  GLM_FUNC_DECL C<T> min(
-
77  C<T> const& x,
-
78  C<T> const& y,
-
79  C<T> const& z,
-
80  C<T> const& w);
-
81 
-
84  template<typename T>
-
85  GLM_FUNC_DECL T max(
-
86  T const& x,
-
87  T const& y,
-
88  T const& z);
-
89 
-
92  template<typename T, template<typename> class C>
-
93  GLM_FUNC_DECL C<T> max(
-
94  C<T> const& x,
-
95  typename C<T>::T const& y,
-
96  typename C<T>::T const& z);
-
97 
-
100  template<typename T, template<typename> class C>
-
101  GLM_FUNC_DECL C<T> max(
-
102  C<T> const& x,
-
103  C<T> const& y,
-
104  C<T> const& z);
-
105 
-
108  template<typename T>
-
109  GLM_FUNC_DECL T max(
-
110  T const& x,
-
111  T const& y,
-
112  T const& z,
-
113  T const& w);
-
114 
-
117  template<typename T, template<typename> class C>
-
118  GLM_FUNC_DECL C<T> max(
-
119  C<T> const& x,
-
120  typename C<T>::T const& y,
-
121  typename C<T>::T const& z,
-
122  typename C<T>::T const& w);
-
123 
-
126  template<typename T, template<typename> class C>
-
127  GLM_FUNC_DECL C<T> max(
-
128  C<T> const& x,
-
129  C<T> const& y,
-
130  C<T> const& z,
-
131  C<T> const& w);
-
132 
-
138  template<typename genType>
-
139  GLM_FUNC_DECL genType fmin(genType x, genType y);
-
140 
-
147  template<typename genType>
-
148  GLM_FUNC_DECL genType fmax(genType x, genType y);
-
149 
-
155  template<typename genType>
-
156  GLM_FUNC_DECL genType fclamp(genType x, genType minVal, genType maxVal);
-
157 
-
165  template<length_t L, typename T, qualifier Q>
-
166  GLM_FUNC_DECL vec<L, T, Q> fclamp(vec<L, T, Q> const& x, T minVal, T maxVal);
-
167 
-
175  template<length_t L, typename T, qualifier Q>
-
176  GLM_FUNC_DECL vec<L, T, Q> fclamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal);
-
177 
-
178 
-
180 }//namespace glm
-
181 
-
182 #include "extended_min_max.inl"
-
GLM_FUNC_DECL vec< L, T, Q > fclamp(vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &maxVal)
Returns min(max(x, minVal), maxVal) for each component in x.
-
GLM_FUNC_DECL genType fmin(genType x, genType y)
Returns y if y < x; otherwise, it returns x.
-
GLM_FUNC_DECL genType fmax(genType x, genType y)
Returns y if x < y; otherwise, it returns x.
-
GLM_FUNC_DECL C< T > max(C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
Return the maximum component-wise values of 4 inputs.
-
GLM_FUNC_DECL C< T > min(C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
Return the minimum component-wise values of 4 inputs.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00030.html b/tests/OpenGL/package/glm/doc/api/a00030.html deleted file mode 100644 index 5f1b5b83..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00030.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -0.9.9 API documentation: exterior_product.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
exterior_product.hpp File Reference
-
-
- -

GLM_GTX_exterior_product -More...

- -

Go to the source code of this file.

- - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL T cross (vec< 2, T, Q > const &v, vec< 2, T, Q > const &u)
 Returns the cross product of x and y. More...
 
-

Detailed Description

-

GLM_GTX_exterior_product

-
See also
Core features (dependence)
-
-GLM_GTX_exterior_product (dependence)
- -

Definition in file exterior_product.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00030_source.html b/tests/OpenGL/package/glm/doc/api/a00030_source.html deleted file mode 100644 index 9bdf622e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00030_source.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - -0.9.9 API documentation: exterior_product.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
exterior_product.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependencies
-
17 #include "../detail/setup.hpp"
-
18 #include "../detail/qualifier.hpp"
-
19 
-
20 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
21 # ifndef GLM_ENABLE_EXPERIMENTAL
-
22 # pragma message("GLM: GLM_GTX_exterior_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
23 # else
-
24 # pragma message("GLM: GLM_GTX_exterior_product extension included")
-
25 # endif
-
26 #endif
-
27 
-
28 namespace glm
-
29 {
-
32 
-
39  template<typename T, qualifier Q>
-
40  GLM_FUNC_DECL T cross(vec<2, T, Q> const& v, vec<2, T, Q> const& u);
-
41 
-
43 } //namespace glm
-
44 
-
45 #include "exterior_product.inl"
-
GLM_FUNC_DECL T cross(vec< 2, T, Q > const &v, vec< 2, T, Q > const &u)
Returns the cross product of x and y.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00031.html b/tests/OpenGL/package/glm/doc/api/a00031.html deleted file mode 100644 index 40ce828f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00031.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - -0.9.9 API documentation: fast_exponential.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
fast_exponential.hpp File Reference
-
-
- -

GLM_GTX_fast_exponential -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL T fastExp (T x)
 Faster than the common exp function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastExp (vec< L, T, Q > const &x)
 Faster than the common exp function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastExp2 (T x)
 Faster than the common exp2 function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastExp2 (vec< L, T, Q > const &x)
 Faster than the common exp2 function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastLog (T x)
 Faster than the common log function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastLog (vec< L, T, Q > const &x)
 Faster than the common exp2 function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastLog2 (T x)
 Faster than the common log2 function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastLog2 (vec< L, T, Q > const &x)
 Faster than the common log2 function but less accurate. More...
 
template<typename genType >
GLM_FUNC_DECL genType fastPow (genType x, genType y)
 Faster than the common pow function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastPow (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Faster than the common pow function but less accurate. More...
 
template<typename genTypeT , typename genTypeU >
GLM_FUNC_DECL genTypeT fastPow (genTypeT x, genTypeU y)
 Faster than the common pow function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastPow (vec< L, T, Q > const &x)
 Faster than the common pow function but less accurate. More...
 
-

Detailed Description

-

GLM_GTX_fast_exponential

-
See also
Core features (dependence)
-
-gtx_half_float (dependence)
- -

Definition in file fast_exponential.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00031_source.html b/tests/OpenGL/package/glm/doc/api/a00031_source.html deleted file mode 100644 index 40945b5b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00031_source.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - -0.9.9 API documentation: fast_exponential.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
fast_exponential.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../glm.hpp"
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # ifndef GLM_ENABLE_EXPERIMENTAL
-
21 # pragma message("GLM: GLM_GTX_fast_exponential is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
22 # else
-
23 # pragma message("GLM: GLM_GTX_fast_exponential extension included")
-
24 # endif
-
25 #endif
-
26 
-
27 namespace glm
-
28 {
-
31 
-
34  template<typename genType>
-
35  GLM_FUNC_DECL genType fastPow(genType x, genType y);
-
36 
-
39  template<length_t L, typename T, qualifier Q>
-
40  GLM_FUNC_DECL vec<L, T, Q> fastPow(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
41 
-
44  template<typename genTypeT, typename genTypeU>
-
45  GLM_FUNC_DECL genTypeT fastPow(genTypeT x, genTypeU y);
-
46 
-
49  template<length_t L, typename T, qualifier Q>
-
50  GLM_FUNC_DECL vec<L, T, Q> fastPow(vec<L, T, Q> const& x);
-
51 
-
54  template<typename T>
-
55  GLM_FUNC_DECL T fastExp(T x);
-
56 
-
59  template<length_t L, typename T, qualifier Q>
-
60  GLM_FUNC_DECL vec<L, T, Q> fastExp(vec<L, T, Q> const& x);
-
61 
-
64  template<typename T>
-
65  GLM_FUNC_DECL T fastLog(T x);
-
66 
-
69  template<length_t L, typename T, qualifier Q>
-
70  GLM_FUNC_DECL vec<L, T, Q> fastLog(vec<L, T, Q> const& x);
-
71 
-
74  template<typename T>
-
75  GLM_FUNC_DECL T fastExp2(T x);
-
76 
-
79  template<length_t L, typename T, qualifier Q>
-
80  GLM_FUNC_DECL vec<L, T, Q> fastExp2(vec<L, T, Q> const& x);
-
81 
-
84  template<typename T>
-
85  GLM_FUNC_DECL T fastLog2(T x);
-
86 
-
89  template<length_t L, typename T, qualifier Q>
-
90  GLM_FUNC_DECL vec<L, T, Q> fastLog2(vec<L, T, Q> const& x);
-
91 
-
93 }//namespace glm
-
94 
-
95 #include "fast_exponential.inl"
-
GLM_FUNC_DECL vec< L, T, Q > fastLog(vec< L, T, Q > const &x)
Faster than the common exp2 function but less accurate.
-
GLM_FUNC_DECL vec< L, T, Q > fastPow(vec< L, T, Q > const &x)
Faster than the common pow function but less accurate.
-
GLM_FUNC_DECL vec< L, T, Q > fastLog2(vec< L, T, Q > const &x)
Faster than the common log2 function but less accurate.
-
GLM_FUNC_DECL vec< L, T, Q > fastExp2(vec< L, T, Q > const &x)
Faster than the common exp2 function but less accurate.
-
GLM_FUNC_DECL vec< L, T, Q > fastExp(vec< L, T, Q > const &x)
Faster than the common exp function but less accurate.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00032.html b/tests/OpenGL/package/glm/doc/api/a00032.html deleted file mode 100644 index 7ba4fe4f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00032.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - -0.9.9 API documentation: fast_square_root.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
fast_square_root.hpp File Reference
-
-
- -

GLM_GTX_fast_square_root -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType fastDistance (genType x, genType y)
 Faster than the common distance function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T fastDistance (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Faster than the common distance function but less accurate. More...
 
template<typename genType >
GLM_FUNC_DECL genType fastInverseSqrt (genType x)
 Faster than the common inversesqrt function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastInverseSqrt (vec< L, T, Q > const &x)
 Faster than the common inversesqrt function but less accurate. More...
 
template<typename genType >
GLM_FUNC_DECL genType fastLength (genType x)
 Faster than the common length function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T fastLength (vec< L, T, Q > const &x)
 Faster than the common length function but less accurate. More...
 
template<typename genType >
GLM_FUNC_DECL genType fastNormalize (genType const &x)
 Faster than the common normalize function but less accurate. More...
 
template<typename genType >
GLM_FUNC_DECL genType fastSqrt (genType x)
 Faster than the common sqrt function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastSqrt (vec< L, T, Q > const &x)
 Faster than the common sqrt function but less accurate. More...
 
-

Detailed Description

-

GLM_GTX_fast_square_root

-
See also
Core features (dependence)
- -

Definition in file fast_square_root.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00032_source.html b/tests/OpenGL/package/glm/doc/api/a00032_source.html deleted file mode 100644 index 36328925..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00032_source.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - -0.9.9 API documentation: fast_square_root.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
fast_square_root.hpp
-
-
-Go to the documentation of this file.
1 
-
15 #pragma once
-
16 
-
17 // Dependency:
-
18 #include "../common.hpp"
-
19 #include "../exponential.hpp"
-
20 #include "../geometric.hpp"
-
21 
-
22 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
23 # ifndef GLM_ENABLE_EXPERIMENTAL
-
24 # pragma message("GLM: GLM_GTX_fast_square_root is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
25 # else
-
26 # pragma message("GLM: GLM_GTX_fast_square_root extension included")
-
27 # endif
-
28 #endif
-
29 
-
30 namespace glm
-
31 {
-
34 
-
38  template<typename genType>
-
39  GLM_FUNC_DECL genType fastSqrt(genType x);
-
40 
-
44  template<length_t L, typename T, qualifier Q>
-
45  GLM_FUNC_DECL vec<L, T, Q> fastSqrt(vec<L, T, Q> const& x);
-
46 
-
50  template<typename genType>
-
51  GLM_FUNC_DECL genType fastInverseSqrt(genType x);
-
52 
-
56  template<length_t L, typename T, qualifier Q>
-
57  GLM_FUNC_DECL vec<L, T, Q> fastInverseSqrt(vec<L, T, Q> const& x);
-
58 
-
62  template<typename genType>
-
63  GLM_FUNC_DECL genType fastLength(genType x);
-
64 
-
68  template<length_t L, typename T, qualifier Q>
-
69  GLM_FUNC_DECL T fastLength(vec<L, T, Q> const& x);
-
70 
-
74  template<typename genType>
-
75  GLM_FUNC_DECL genType fastDistance(genType x, genType y);
-
76 
-
80  template<length_t L, typename T, qualifier Q>
-
81  GLM_FUNC_DECL T fastDistance(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
82 
-
86  template<typename genType>
-
87  GLM_FUNC_DECL genType fastNormalize(genType const& x);
-
88 
-
90 }// namespace glm
-
91 
-
92 #include "fast_square_root.inl"
-
GLM_FUNC_DECL T fastLength(vec< L, T, Q > const &x)
Faster than the common length function but less accurate.
-
GLM_FUNC_DECL T fastDistance(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Faster than the common distance function but less accurate.
-
GLM_FUNC_DECL vec< L, T, Q > fastSqrt(vec< L, T, Q > const &x)
Faster than the common sqrt function but less accurate.
-
GLM_FUNC_DECL genType fastNormalize(genType const &x)
Faster than the common normalize function but less accurate.
-
GLM_FUNC_DECL vec< L, T, Q > fastInverseSqrt(vec< L, T, Q > const &x)
Faster than the common inversesqrt function but less accurate.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00033.html b/tests/OpenGL/package/glm/doc/api/a00033.html deleted file mode 100644 index 3b496870..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00033.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - -0.9.9 API documentation: fast_trigonometry.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
fast_trigonometry.hpp File Reference
-
-
- -

GLM_GTX_fast_trigonometry -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL T fastAcos (T angle)
 Faster than the common acos function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastAsin (T angle)
 Faster than the common asin function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastAtan (T y, T x)
 Faster than the common atan function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastAtan (T angle)
 Faster than the common atan function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastCos (T angle)
 Faster than the common cos function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastSin (T angle)
 Faster than the common sin function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastTan (T angle)
 Faster than the common tan function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T wrapAngle (T angle)
 Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension. More...
 
-

Detailed Description

-

GLM_GTX_fast_trigonometry

-
See also
Core features (dependence)
- -

Definition in file fast_trigonometry.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00033_source.html b/tests/OpenGL/package/glm/doc/api/a00033_source.html deleted file mode 100644 index c02ae841..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00033_source.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -0.9.9 API documentation: fast_trigonometry.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
fast_trigonometry.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../gtc/constants.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_fast_trigonometry is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_fast_trigonometry extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
33  template<typename T>
-
34  GLM_FUNC_DECL T wrapAngle(T angle);
-
35 
-
38  template<typename T>
-
39  GLM_FUNC_DECL T fastSin(T angle);
-
40 
-
43  template<typename T>
-
44  GLM_FUNC_DECL T fastCos(T angle);
-
45 
-
49  template<typename T>
-
50  GLM_FUNC_DECL T fastTan(T angle);
-
51 
-
55  template<typename T>
-
56  GLM_FUNC_DECL T fastAsin(T angle);
-
57 
-
61  template<typename T>
-
62  GLM_FUNC_DECL T fastAcos(T angle);
-
63 
-
67  template<typename T>
-
68  GLM_FUNC_DECL T fastAtan(T y, T x);
-
69 
-
73  template<typename T>
-
74  GLM_FUNC_DECL T fastAtan(T angle);
-
75 
-
77 }//namespace glm
-
78 
-
79 #include "fast_trigonometry.inl"
-
GLM_FUNC_DECL T fastAsin(T angle)
Faster than the common asin function but less accurate.
-
GLM_FUNC_DECL T angle(qua< T, Q > const &x)
Returns the quaternion rotation angle.
-
GLM_FUNC_DECL T fastAcos(T angle)
Faster than the common acos function but less accurate.
-
GLM_FUNC_DECL T fastTan(T angle)
Faster than the common tan function but less accurate.
-
GLM_FUNC_DECL T fastCos(T angle)
Faster than the common cos function but less accurate.
-
GLM_FUNC_DECL T fastAtan(T angle)
Faster than the common atan function but less accurate.
-
GLM_FUNC_DECL T fastSin(T angle)
Faster than the common sin function but less accurate.
-
GLM_FUNC_DECL T wrapAngle(T angle)
Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00034.html b/tests/OpenGL/package/glm/doc/api/a00034.html deleted file mode 100644 index 00e437cd..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00034.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - -0.9.9 API documentation: functions.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
functions.hpp File Reference
-
-
- -

GLM_GTX_functions -More...

- -

Go to the source code of this file.

- - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL T gauss (T x, T ExpectedValue, T StandardDeviation)
 1D gauss function More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T gauss (vec< 2, T, Q > const &Coord, vec< 2, T, Q > const &ExpectedValue, vec< 2, T, Q > const &StandardDeviation)
 2D gauss function More...
 
-

Detailed Description

-

GLM_GTX_functions

-
See also
Core features (dependence)
-
-GLM_GTC_quaternion (dependence)
- -

Definition in file functions.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00034_source.html b/tests/OpenGL/package/glm/doc/api/a00034_source.html deleted file mode 100644 index 2d206e04..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00034_source.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - -0.9.9 API documentation: functions.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
functions.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependencies
-
17 #include "../detail/setup.hpp"
-
18 #include "../detail/qualifier.hpp"
-
19 #include "../detail/type_vec2.hpp"
-
20 
-
21 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
22 # ifndef GLM_ENABLE_EXPERIMENTAL
-
23 # pragma message("GLM: GLM_GTX_functions is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
24 # else
-
25 # pragma message("GLM: GLM_GTX_functions extension included")
-
26 # endif
-
27 #endif
-
28 
-
29 namespace glm
-
30 {
-
33 
-
37  template<typename T>
-
38  GLM_FUNC_DECL T gauss(
-
39  T x,
-
40  T ExpectedValue,
-
41  T StandardDeviation);
-
42 
-
46  template<typename T, qualifier Q>
-
47  GLM_FUNC_DECL T gauss(
-
48  vec<2, T, Q> const& Coord,
-
49  vec<2, T, Q> const& ExpectedValue,
-
50  vec<2, T, Q> const& StandardDeviation);
-
51 
-
53 }//namespace glm
-
54 
-
55 #include "functions.inl"
-
56 
-
GLM_FUNC_DECL T gauss(vec< 2, T, Q > const &Coord, vec< 2, T, Q > const &ExpectedValue, vec< 2, T, Q > const &StandardDeviation)
2D gauss function
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00035_source.html b/tests/OpenGL/package/glm/doc/api/a00035_source.html deleted file mode 100644 index 454a17d4..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00035_source.html +++ /dev/null @@ -1,1544 +0,0 @@ - - - - - - -0.9.9 API documentation: fwd.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
fwd.hpp
-
-
-
1 #pragma once
-
2 
-
3 #include "detail/qualifier.hpp"
-
4 
-
5 namespace glm
-
6 {
-
7 #if GLM_HAS_EXTENDED_INTEGER_TYPE
-
8  typedef std::int8_t int8;
-
9  typedef std::int16_t int16;
-
10  typedef std::int32_t int32;
-
11  typedef std::int64_t int64;
-
12 
-
13  typedef std::uint8_t uint8;
-
14  typedef std::uint16_t uint16;
-
15  typedef std::uint32_t uint32;
-
16  typedef std::uint64_t uint64;
-
17 #else
-
18  typedef signed char int8;
-
19  typedef signed short int16;
-
20  typedef signed int int32;
-
21  typedef detail::int64 int64;
-
22 
-
23  typedef unsigned char uint8;
-
24  typedef unsigned short uint16;
-
25  typedef unsigned int uint32;
-
26  typedef detail::uint64 uint64;
-
27 #endif
-
28 
-
29  // Scalar int
-
30 
-
31  typedef int8 lowp_i8;
-
32  typedef int8 mediump_i8;
-
33  typedef int8 highp_i8;
-
34  typedef int8 i8;
-
35 
-
36  typedef int8 lowp_int8;
-
37  typedef int8 mediump_int8;
-
38  typedef int8 highp_int8;
-
39 
-
40  typedef int8 lowp_int8_t;
-
41  typedef int8 mediump_int8_t;
-
42  typedef int8 highp_int8_t;
-
43  typedef int8 int8_t;
-
44 
-
45  typedef int16 lowp_i16;
-
46  typedef int16 mediump_i16;
-
47  typedef int16 highp_i16;
-
48  typedef int16 i16;
-
49 
-
50  typedef int16 lowp_int16;
-
51  typedef int16 mediump_int16;
-
52  typedef int16 highp_int16;
-
53 
-
54  typedef int16 lowp_int16_t;
-
55  typedef int16 mediump_int16_t;
-
56  typedef int16 highp_int16_t;
-
57  typedef int16 int16_t;
-
58 
-
59  typedef int32 lowp_i32;
-
60  typedef int32 mediump_i32;
-
61  typedef int32 highp_i32;
-
62  typedef int32 i32;
-
63 
-
64  typedef int32 lowp_int32;
-
65  typedef int32 mediump_int32;
-
66  typedef int32 highp_int32;
-
67 
-
68  typedef int32 lowp_int32_t;
-
69  typedef int32 mediump_int32_t;
-
70  typedef int32 highp_int32_t;
-
71  typedef int32 int32_t;
-
72 
-
73  typedef int64 lowp_i64;
-
74  typedef int64 mediump_i64;
-
75  typedef int64 highp_i64;
-
76  typedef int64 i64;
-
77 
-
78  typedef int64 lowp_int64;
-
79  typedef int64 mediump_int64;
-
80  typedef int64 highp_int64;
-
81 
-
82  typedef int64 lowp_int64_t;
-
83  typedef int64 mediump_int64_t;
-
84  typedef int64 highp_int64_t;
-
85  typedef int64 int64_t;
-
86 
-
87  // Scalar uint
-
88 
-
89  typedef uint8 lowp_u8;
-
90  typedef uint8 mediump_u8;
-
91  typedef uint8 highp_u8;
-
92  typedef uint8 u8;
-
93 
-
94  typedef uint8 lowp_uint8;
-
95  typedef uint8 mediump_uint8;
-
96  typedef uint8 highp_uint8;
-
97 
-
98  typedef uint8 lowp_uint8_t;
-
99  typedef uint8 mediump_uint8_t;
-
100  typedef uint8 highp_uint8_t;
-
101  typedef uint8 uint8_t;
-
102 
-
103  typedef uint16 lowp_u16;
-
104  typedef uint16 mediump_u16;
-
105  typedef uint16 highp_u16;
-
106  typedef uint16 u16;
-
107 
-
108  typedef uint16 lowp_uint16;
-
109  typedef uint16 mediump_uint16;
-
110  typedef uint16 highp_uint16;
-
111 
-
112  typedef uint16 lowp_uint16_t;
-
113  typedef uint16 mediump_uint16_t;
-
114  typedef uint16 highp_uint16_t;
-
115  typedef uint16 uint16_t;
-
116 
-
117  typedef uint32 lowp_u32;
-
118  typedef uint32 mediump_u32;
-
119  typedef uint32 highp_u32;
-
120  typedef uint32 u32;
-
121 
-
122  typedef uint32 lowp_uint32;
-
123  typedef uint32 mediump_uint32;
-
124  typedef uint32 highp_uint32;
-
125 
-
126  typedef uint32 lowp_uint32_t;
-
127  typedef uint32 mediump_uint32_t;
-
128  typedef uint32 highp_uint32_t;
-
129  typedef uint32 uint32_t;
-
130 
-
131  typedef uint64 lowp_u64;
-
132  typedef uint64 mediump_u64;
-
133  typedef uint64 highp_u64;
-
134  typedef uint64 u64;
-
135 
-
136  typedef uint64 lowp_uint64;
-
137  typedef uint64 mediump_uint64;
-
138  typedef uint64 highp_uint64;
-
139 
-
140  typedef uint64 lowp_uint64_t;
-
141  typedef uint64 mediump_uint64_t;
-
142  typedef uint64 highp_uint64_t;
-
143  typedef uint64 uint64_t;
-
144 
-
145  // Scalar float
-
146 
-
147  typedef float lowp_f32;
-
148  typedef float mediump_f32;
-
149  typedef float highp_f32;
-
150  typedef float f32;
-
151 
-
152  typedef float lowp_float32;
-
153  typedef float mediump_float32;
-
154  typedef float highp_float32;
-
155  typedef float float32;
-
156 
-
157  typedef float lowp_float32_t;
-
158  typedef float mediump_float32_t;
-
159  typedef float highp_float32_t;
-
160  typedef float float32_t;
-
161 
-
162 
-
163  typedef double lowp_f64;
-
164  typedef double mediump_f64;
-
165  typedef double highp_f64;
-
166  typedef double f64;
-
167 
-
168  typedef double lowp_float64;
-
169  typedef double mediump_float64;
-
170  typedef double highp_float64;
-
171  typedef double float64;
-
172 
-
173  typedef double lowp_float64_t;
-
174  typedef double mediump_float64_t;
-
175  typedef double highp_float64_t;
-
176  typedef double float64_t;
-
177 
-
178  // Vector bool
-
179 
-
180  typedef vec<1, bool, lowp> lowp_bvec1;
-
181  typedef vec<2, bool, lowp> lowp_bvec2;
-
182  typedef vec<3, bool, lowp> lowp_bvec3;
-
183  typedef vec<4, bool, lowp> lowp_bvec4;
-
184 
-
185  typedef vec<1, bool, mediump> mediump_bvec1;
-
186  typedef vec<2, bool, mediump> mediump_bvec2;
-
187  typedef vec<3, bool, mediump> mediump_bvec3;
-
188  typedef vec<4, bool, mediump> mediump_bvec4;
-
189 
-
190  typedef vec<1, bool, highp> highp_bvec1;
-
191  typedef vec<2, bool, highp> highp_bvec2;
-
192  typedef vec<3, bool, highp> highp_bvec3;
-
193  typedef vec<4, bool, highp> highp_bvec4;
-
194 
-
195  typedef vec<1, bool, defaultp> bvec1;
-
196  typedef vec<2, bool, defaultp> bvec2;
-
197  typedef vec<3, bool, defaultp> bvec3;
-
198  typedef vec<4, bool, defaultp> bvec4;
-
199 
-
200  // Vector int
-
201 
-
202  typedef vec<1, i32, lowp> lowp_ivec1;
-
203  typedef vec<2, i32, lowp> lowp_ivec2;
-
204  typedef vec<3, i32, lowp> lowp_ivec3;
-
205  typedef vec<4, i32, lowp> lowp_ivec4;
-
206 
-
207  typedef vec<1, i32, mediump> mediump_ivec1;
-
208  typedef vec<2, i32, mediump> mediump_ivec2;
-
209  typedef vec<3, i32, mediump> mediump_ivec3;
-
210  typedef vec<4, i32, mediump> mediump_ivec4;
-
211 
-
212  typedef vec<1, i32, highp> highp_ivec1;
-
213  typedef vec<2, i32, highp> highp_ivec2;
-
214  typedef vec<3, i32, highp> highp_ivec3;
-
215  typedef vec<4, i32, highp> highp_ivec4;
-
216 
-
217  typedef vec<1, i32, defaultp> ivec1;
-
218  typedef vec<2, i32, defaultp> ivec2;
-
219  typedef vec<3, i32, defaultp> ivec3;
-
220  typedef vec<4, i32, defaultp> ivec4;
-
221 
-
222  typedef vec<1, i8, lowp> lowp_i8vec1;
-
223  typedef vec<2, i8, lowp> lowp_i8vec2;
-
224  typedef vec<3, i8, lowp> lowp_i8vec3;
-
225  typedef vec<4, i8, lowp> lowp_i8vec4;
-
226 
-
227  typedef vec<1, i8, mediump> mediump_i8vec1;
-
228  typedef vec<2, i8, mediump> mediump_i8vec2;
-
229  typedef vec<3, i8, mediump> mediump_i8vec3;
-
230  typedef vec<4, i8, mediump> mediump_i8vec4;
-
231 
-
232  typedef vec<1, i8, highp> highp_i8vec1;
-
233  typedef vec<2, i8, highp> highp_i8vec2;
-
234  typedef vec<3, i8, highp> highp_i8vec3;
-
235  typedef vec<4, i8, highp> highp_i8vec4;
-
236 
-
237  typedef vec<1, i8, defaultp> i8vec1;
-
238  typedef vec<2, i8, defaultp> i8vec2;
-
239  typedef vec<3, i8, defaultp> i8vec3;
-
240  typedef vec<4, i8, defaultp> i8vec4;
-
241 
-
242  typedef vec<1, i16, lowp> lowp_i16vec1;
-
243  typedef vec<2, i16, lowp> lowp_i16vec2;
-
244  typedef vec<3, i16, lowp> lowp_i16vec3;
-
245  typedef vec<4, i16, lowp> lowp_i16vec4;
-
246 
-
247  typedef vec<1, i16, mediump> mediump_i16vec1;
-
248  typedef vec<2, i16, mediump> mediump_i16vec2;
-
249  typedef vec<3, i16, mediump> mediump_i16vec3;
-
250  typedef vec<4, i16, mediump> mediump_i16vec4;
-
251 
-
252  typedef vec<1, i16, highp> highp_i16vec1;
-
253  typedef vec<2, i16, highp> highp_i16vec2;
-
254  typedef vec<3, i16, highp> highp_i16vec3;
-
255  typedef vec<4, i16, highp> highp_i16vec4;
-
256 
-
257  typedef vec<1, i16, defaultp> i16vec1;
-
258  typedef vec<2, i16, defaultp> i16vec2;
-
259  typedef vec<3, i16, defaultp> i16vec3;
-
260  typedef vec<4, i16, defaultp> i16vec4;
-
261 
-
262  typedef vec<1, i32, lowp> lowp_i32vec1;
-
263  typedef vec<2, i32, lowp> lowp_i32vec2;
-
264  typedef vec<3, i32, lowp> lowp_i32vec3;
-
265  typedef vec<4, i32, lowp> lowp_i32vec4;
-
266 
-
267  typedef vec<1, i32, mediump> mediump_i32vec1;
-
268  typedef vec<2, i32, mediump> mediump_i32vec2;
-
269  typedef vec<3, i32, mediump> mediump_i32vec3;
-
270  typedef vec<4, i32, mediump> mediump_i32vec4;
-
271 
-
272  typedef vec<1, i32, highp> highp_i32vec1;
-
273  typedef vec<2, i32, highp> highp_i32vec2;
-
274  typedef vec<3, i32, highp> highp_i32vec3;
-
275  typedef vec<4, i32, highp> highp_i32vec4;
-
276 
-
277  typedef vec<1, i32, defaultp> i32vec1;
-
278  typedef vec<2, i32, defaultp> i32vec2;
-
279  typedef vec<3, i32, defaultp> i32vec3;
-
280  typedef vec<4, i32, defaultp> i32vec4;
-
281 
-
282  typedef vec<1, i64, lowp> lowp_i64vec1;
-
283  typedef vec<2, i64, lowp> lowp_i64vec2;
-
284  typedef vec<3, i64, lowp> lowp_i64vec3;
-
285  typedef vec<4, i64, lowp> lowp_i64vec4;
-
286 
-
287  typedef vec<1, i64, mediump> mediump_i64vec1;
-
288  typedef vec<2, i64, mediump> mediump_i64vec2;
-
289  typedef vec<3, i64, mediump> mediump_i64vec3;
-
290  typedef vec<4, i64, mediump> mediump_i64vec4;
-
291 
-
292  typedef vec<1, i64, highp> highp_i64vec1;
-
293  typedef vec<2, i64, highp> highp_i64vec2;
-
294  typedef vec<3, i64, highp> highp_i64vec3;
-
295  typedef vec<4, i64, highp> highp_i64vec4;
-
296 
-
297  typedef vec<1, i64, defaultp> i64vec1;
-
298  typedef vec<2, i64, defaultp> i64vec2;
-
299  typedef vec<3, i64, defaultp> i64vec3;
-
300  typedef vec<4, i64, defaultp> i64vec4;
-
301 
-
302  // Vector uint
-
303 
-
304  typedef vec<1, u32, lowp> lowp_uvec1;
-
305  typedef vec<2, u32, lowp> lowp_uvec2;
-
306  typedef vec<3, u32, lowp> lowp_uvec3;
-
307  typedef vec<4, u32, lowp> lowp_uvec4;
-
308 
-
309  typedef vec<1, u32, mediump> mediump_uvec1;
-
310  typedef vec<2, u32, mediump> mediump_uvec2;
-
311  typedef vec<3, u32, mediump> mediump_uvec3;
-
312  typedef vec<4, u32, mediump> mediump_uvec4;
-
313 
-
314  typedef vec<1, u32, highp> highp_uvec1;
-
315  typedef vec<2, u32, highp> highp_uvec2;
-
316  typedef vec<3, u32, highp> highp_uvec3;
-
317  typedef vec<4, u32, highp> highp_uvec4;
-
318 
-
319  typedef vec<1, u32, defaultp> uvec1;
-
320  typedef vec<2, u32, defaultp> uvec2;
-
321  typedef vec<3, u32, defaultp> uvec3;
-
322  typedef vec<4, u32, defaultp> uvec4;
-
323 
-
324  typedef vec<1, u8, lowp> lowp_u8vec1;
-
325  typedef vec<2, u8, lowp> lowp_u8vec2;
-
326  typedef vec<3, u8, lowp> lowp_u8vec3;
-
327  typedef vec<4, u8, lowp> lowp_u8vec4;
-
328 
-
329  typedef vec<1, u8, mediump> mediump_u8vec1;
-
330  typedef vec<2, u8, mediump> mediump_u8vec2;
-
331  typedef vec<3, u8, mediump> mediump_u8vec3;
-
332  typedef vec<4, u8, mediump> mediump_u8vec4;
-
333 
-
334  typedef vec<1, u8, highp> highp_u8vec1;
-
335  typedef vec<2, u8, highp> highp_u8vec2;
-
336  typedef vec<3, u8, highp> highp_u8vec3;
-
337  typedef vec<4, u8, highp> highp_u8vec4;
-
338 
-
339  typedef vec<1, u8, defaultp> u8vec1;
-
340  typedef vec<2, u8, defaultp> u8vec2;
-
341  typedef vec<3, u8, defaultp> u8vec3;
-
342  typedef vec<4, u8, defaultp> u8vec4;
-
343 
-
344  typedef vec<1, u16, lowp> lowp_u16vec1;
-
345  typedef vec<2, u16, lowp> lowp_u16vec2;
-
346  typedef vec<3, u16, lowp> lowp_u16vec3;
-
347  typedef vec<4, u16, lowp> lowp_u16vec4;
-
348 
-
349  typedef vec<1, u16, mediump> mediump_u16vec1;
-
350  typedef vec<2, u16, mediump> mediump_u16vec2;
-
351  typedef vec<3, u16, mediump> mediump_u16vec3;
-
352  typedef vec<4, u16, mediump> mediump_u16vec4;
-
353 
-
354  typedef vec<1, u16, highp> highp_u16vec1;
-
355  typedef vec<2, u16, highp> highp_u16vec2;
-
356  typedef vec<3, u16, highp> highp_u16vec3;
-
357  typedef vec<4, u16, highp> highp_u16vec4;
-
358 
-
359  typedef vec<1, u16, defaultp> u16vec1;
-
360  typedef vec<2, u16, defaultp> u16vec2;
-
361  typedef vec<3, u16, defaultp> u16vec3;
-
362  typedef vec<4, u16, defaultp> u16vec4;
-
363 
-
364  typedef vec<1, u32, lowp> lowp_u32vec1;
-
365  typedef vec<2, u32, lowp> lowp_u32vec2;
-
366  typedef vec<3, u32, lowp> lowp_u32vec3;
-
367  typedef vec<4, u32, lowp> lowp_u32vec4;
-
368 
-
369  typedef vec<1, u32, mediump> mediump_u32vec1;
-
370  typedef vec<2, u32, mediump> mediump_u32vec2;
-
371  typedef vec<3, u32, mediump> mediump_u32vec3;
-
372  typedef vec<4, u32, mediump> mediump_u32vec4;
-
373 
-
374  typedef vec<1, u32, highp> highp_u32vec1;
-
375  typedef vec<2, u32, highp> highp_u32vec2;
-
376  typedef vec<3, u32, highp> highp_u32vec3;
-
377  typedef vec<4, u32, highp> highp_u32vec4;
-
378 
-
379  typedef vec<1, u32, defaultp> u32vec1;
-
380  typedef vec<2, u32, defaultp> u32vec2;
-
381  typedef vec<3, u32, defaultp> u32vec3;
-
382  typedef vec<4, u32, defaultp> u32vec4;
-
383 
-
384  typedef vec<1, u64, lowp> lowp_u64vec1;
-
385  typedef vec<2, u64, lowp> lowp_u64vec2;
-
386  typedef vec<3, u64, lowp> lowp_u64vec3;
-
387  typedef vec<4, u64, lowp> lowp_u64vec4;
-
388 
-
389  typedef vec<1, u64, mediump> mediump_u64vec1;
-
390  typedef vec<2, u64, mediump> mediump_u64vec2;
-
391  typedef vec<3, u64, mediump> mediump_u64vec3;
-
392  typedef vec<4, u64, mediump> mediump_u64vec4;
-
393 
-
394  typedef vec<1, u64, highp> highp_u64vec1;
-
395  typedef vec<2, u64, highp> highp_u64vec2;
-
396  typedef vec<3, u64, highp> highp_u64vec3;
-
397  typedef vec<4, u64, highp> highp_u64vec4;
-
398 
-
399  typedef vec<1, u64, defaultp> u64vec1;
-
400  typedef vec<2, u64, defaultp> u64vec2;
-
401  typedef vec<3, u64, defaultp> u64vec3;
-
402  typedef vec<4, u64, defaultp> u64vec4;
-
403 
-
404  // Vector float
-
405 
-
406  typedef vec<1, float, lowp> lowp_vec1;
-
407  typedef vec<2, float, lowp> lowp_vec2;
-
408  typedef vec<3, float, lowp> lowp_vec3;
-
409  typedef vec<4, float, lowp> lowp_vec4;
-
410 
-
411  typedef vec<1, float, mediump> mediump_vec1;
-
412  typedef vec<2, float, mediump> mediump_vec2;
-
413  typedef vec<3, float, mediump> mediump_vec3;
-
414  typedef vec<4, float, mediump> mediump_vec4;
-
415 
-
416  typedef vec<1, float, highp> highp_vec1;
-
417  typedef vec<2, float, highp> highp_vec2;
-
418  typedef vec<3, float, highp> highp_vec3;
-
419  typedef vec<4, float, highp> highp_vec4;
-
420 
-
421  typedef vec<1, float, defaultp> vec1;
-
422  typedef vec<2, float, defaultp> vec2;
-
423  typedef vec<3, float, defaultp> vec3;
-
424  typedef vec<4, float, defaultp> vec4;
-
425 
-
426  typedef vec<1, float, lowp> lowp_fvec1;
-
427  typedef vec<2, float, lowp> lowp_fvec2;
-
428  typedef vec<3, float, lowp> lowp_fvec3;
-
429  typedef vec<4, float, lowp> lowp_fvec4;
-
430 
-
431  typedef vec<1, float, mediump> mediump_fvec1;
-
432  typedef vec<2, float, mediump> mediump_fvec2;
-
433  typedef vec<3, float, mediump> mediump_fvec3;
-
434  typedef vec<4, float, mediump> mediump_fvec4;
-
435 
-
436  typedef vec<1, float, highp> highp_fvec1;
-
437  typedef vec<2, float, highp> highp_fvec2;
-
438  typedef vec<3, float, highp> highp_fvec3;
-
439  typedef vec<4, float, highp> highp_fvec4;
-
440 
-
441  typedef vec<1, f32, defaultp> fvec1;
-
442  typedef vec<2, f32, defaultp> fvec2;
-
443  typedef vec<3, f32, defaultp> fvec3;
-
444  typedef vec<4, f32, defaultp> fvec4;
-
445 
-
446  typedef vec<1, f32, lowp> lowp_f32vec1;
-
447  typedef vec<2, f32, lowp> lowp_f32vec2;
-
448  typedef vec<3, f32, lowp> lowp_f32vec3;
-
449  typedef vec<4, f32, lowp> lowp_f32vec4;
-
450 
-
451  typedef vec<1, f32, mediump> mediump_f32vec1;
-
452  typedef vec<2, f32, mediump> mediump_f32vec2;
-
453  typedef vec<3, f32, mediump> mediump_f32vec3;
-
454  typedef vec<4, f32, mediump> mediump_f32vec4;
-
455 
-
456  typedef vec<1, f32, highp> highp_f32vec1;
-
457  typedef vec<2, f32, highp> highp_f32vec2;
-
458  typedef vec<3, f32, highp> highp_f32vec3;
-
459  typedef vec<4, f32, highp> highp_f32vec4;
-
460 
-
461  typedef vec<1, f32, defaultp> f32vec1;
-
462  typedef vec<2, f32, defaultp> f32vec2;
-
463  typedef vec<3, f32, defaultp> f32vec3;
-
464  typedef vec<4, f32, defaultp> f32vec4;
-
465 
-
466  typedef vec<1, f64, lowp> lowp_dvec1;
-
467  typedef vec<2, f64, lowp> lowp_dvec2;
-
468  typedef vec<3, f64, lowp> lowp_dvec3;
-
469  typedef vec<4, f64, lowp> lowp_dvec4;
-
470 
-
471  typedef vec<1, f64, mediump> mediump_dvec1;
-
472  typedef vec<2, f64, mediump> mediump_dvec2;
-
473  typedef vec<3, f64, mediump> mediump_dvec3;
-
474  typedef vec<4, f64, mediump> mediump_dvec4;
-
475 
-
476  typedef vec<1, f64, highp> highp_dvec1;
-
477  typedef vec<2, f64, highp> highp_dvec2;
-
478  typedef vec<3, f64, highp> highp_dvec3;
-
479  typedef vec<4, f64, highp> highp_dvec4;
-
480 
-
481  typedef vec<1, f64, defaultp> dvec1;
-
482  typedef vec<2, f64, defaultp> dvec2;
-
483  typedef vec<3, f64, defaultp> dvec3;
-
484  typedef vec<4, f64, defaultp> dvec4;
-
485 
-
486  typedef vec<1, f64, lowp> lowp_f64vec1;
-
487  typedef vec<2, f64, lowp> lowp_f64vec2;
-
488  typedef vec<3, f64, lowp> lowp_f64vec3;
-
489  typedef vec<4, f64, lowp> lowp_f64vec4;
-
490 
-
491  typedef vec<1, f64, mediump> mediump_f64vec1;
-
492  typedef vec<2, f64, mediump> mediump_f64vec2;
-
493  typedef vec<3, f64, mediump> mediump_f64vec3;
-
494  typedef vec<4, f64, mediump> mediump_f64vec4;
-
495 
-
496  typedef vec<1, f64, highp> highp_f64vec1;
-
497  typedef vec<2, f64, highp> highp_f64vec2;
-
498  typedef vec<3, f64, highp> highp_f64vec3;
-
499  typedef vec<4, f64, highp> highp_f64vec4;
-
500 
-
501  typedef vec<1, f64, defaultp> f64vec1;
-
502  typedef vec<2, f64, defaultp> f64vec2;
-
503  typedef vec<3, f64, defaultp> f64vec3;
-
504  typedef vec<4, f64, defaultp> f64vec4;
-
505 
-
506  // Matrix NxN
-
507 
-
508  typedef mat<2, 2, f32, lowp> lowp_mat2;
-
509  typedef mat<3, 3, f32, lowp> lowp_mat3;
-
510  typedef mat<4, 4, f32, lowp> lowp_mat4;
-
511 
-
512  typedef mat<2, 2, f32, mediump> mediump_mat2;
-
513  typedef mat<3, 3, f32, mediump> mediump_mat3;
-
514  typedef mat<4, 4, f32, mediump> mediump_mat4;
-
515 
-
516  typedef mat<2, 2, f32, highp> highp_mat2;
-
517  typedef mat<3, 3, f32, highp> highp_mat3;
-
518  typedef mat<4, 4, f32, highp> highp_mat4;
-
519 
-
520  typedef mat<2, 2, f32, defaultp> mat2;
-
521  typedef mat<3, 3, f32, defaultp> mat3;
-
522  typedef mat<4, 4, f32, defaultp> mat4;
-
523 
-
524  typedef mat<2, 2, f32, lowp> lowp_fmat2;
-
525  typedef mat<3, 3, f32, lowp> lowp_fmat3;
-
526  typedef mat<4, 4, f32, lowp> lowp_fmat4;
-
527 
-
528  typedef mat<2, 2, f32, mediump> mediump_fmat2;
-
529  typedef mat<3, 3, f32, mediump> mediump_fmat3;
-
530  typedef mat<4, 4, f32, mediump> mediump_fmat4;
-
531 
-
532  typedef mat<2, 2, f32, highp> highp_fmat2;
-
533  typedef mat<3, 3, f32, highp> highp_fmat3;
-
534  typedef mat<4, 4, f32, highp> highp_fmat4;
-
535 
-
536  typedef mat<2, 2, f32, defaultp> fmat2;
-
537  typedef mat<3, 3, f32, defaultp> fmat3;
-
538  typedef mat<4, 4, f32, defaultp> fmat4;
-
539 
-
540  typedef mat<2, 2, f32, lowp> lowp_f32mat2;
-
541  typedef mat<3, 3, f32, lowp> lowp_f32mat3;
-
542  typedef mat<4, 4, f32, lowp> lowp_f32mat4;
-
543 
-
544  typedef mat<2, 2, f32, mediump> mediump_f32mat2;
-
545  typedef mat<3, 3, f32, mediump> mediump_f32mat3;
-
546  typedef mat<4, 4, f32, mediump> mediump_f32mat4;
-
547 
-
548  typedef mat<2, 2, f32, highp> highp_f32mat2;
-
549  typedef mat<3, 3, f32, highp> highp_f32mat3;
-
550  typedef mat<4, 4, f32, highp> highp_f32mat4;
-
551 
-
552  typedef mat<2, 2, f32, defaultp> f32mat2;
-
553  typedef mat<3, 3, f32, defaultp> f32mat3;
-
554  typedef mat<4, 4, f32, defaultp> f32mat4;
-
555 
-
556  typedef mat<2, 2, f64, lowp> lowp_dmat2;
-
557  typedef mat<3, 3, f64, lowp> lowp_dmat3;
-
558  typedef mat<4, 4, f64, lowp> lowp_dmat4;
-
559 
-
560  typedef mat<2, 2, f64, mediump> mediump_dmat2;
-
561  typedef mat<3, 3, f64, mediump> mediump_dmat3;
-
562  typedef mat<4, 4, f64, mediump> mediump_dmat4;
-
563 
-
564  typedef mat<2, 2, f64, highp> highp_dmat2;
-
565  typedef mat<3, 3, f64, highp> highp_dmat3;
-
566  typedef mat<4, 4, f64, highp> highp_dmat4;
-
567 
-
568  typedef mat<2, 2, f64, defaultp> dmat2;
-
569  typedef mat<3, 3, f64, defaultp> dmat3;
-
570  typedef mat<4, 4, f64, defaultp> dmat4;
-
571 
-
572  typedef mat<2, 2, f64, lowp> lowp_f64mat2;
-
573  typedef mat<3, 3, f64, lowp> lowp_f64mat3;
-
574  typedef mat<4, 4, f64, lowp> lowp_f64mat4;
-
575 
-
576  typedef mat<2, 2, f64, mediump> mediump_f64mat2;
-
577  typedef mat<3, 3, f64, mediump> mediump_f64mat3;
-
578  typedef mat<4, 4, f64, mediump> mediump_f64mat4;
-
579 
-
580  typedef mat<2, 2, f64, highp> highp_f64mat2;
-
581  typedef mat<3, 3, f64, highp> highp_f64mat3;
-
582  typedef mat<4, 4, f64, highp> highp_f64mat4;
-
583 
-
584  typedef mat<2, 2, f64, defaultp> f64mat2;
-
585  typedef mat<3, 3, f64, defaultp> f64mat3;
-
586  typedef mat<4, 4, f64, defaultp> f64mat4;
-
587 
-
588  // Matrix MxN
-
589 
-
590  typedef mat<2, 2, f32, lowp> lowp_mat2x2;
-
591  typedef mat<2, 3, f32, lowp> lowp_mat2x3;
-
592  typedef mat<2, 4, f32, lowp> lowp_mat2x4;
-
593  typedef mat<3, 2, f32, lowp> lowp_mat3x2;
-
594  typedef mat<3, 3, f32, lowp> lowp_mat3x3;
-
595  typedef mat<3, 4, f32, lowp> lowp_mat3x4;
-
596  typedef mat<4, 2, f32, lowp> lowp_mat4x2;
-
597  typedef mat<4, 3, f32, lowp> lowp_mat4x3;
-
598  typedef mat<4, 4, f32, lowp> lowp_mat4x4;
-
599 
-
600  typedef mat<2, 2, f32, mediump> mediump_mat2x2;
-
601  typedef mat<2, 3, f32, mediump> mediump_mat2x3;
-
602  typedef mat<2, 4, f32, mediump> mediump_mat2x4;
-
603  typedef mat<3, 2, f32, mediump> mediump_mat3x2;
-
604  typedef mat<3, 3, f32, mediump> mediump_mat3x3;
-
605  typedef mat<3, 4, f32, mediump> mediump_mat3x4;
-
606  typedef mat<4, 2, f32, mediump> mediump_mat4x2;
-
607  typedef mat<4, 3, f32, mediump> mediump_mat4x3;
-
608  typedef mat<4, 4, f32, mediump> mediump_mat4x4;
-
609 
-
610  typedef mat<2, 2, f32, highp> highp_mat2x2;
-
611  typedef mat<2, 3, f32, highp> highp_mat2x3;
-
612  typedef mat<2, 4, f32, highp> highp_mat2x4;
-
613  typedef mat<3, 2, f32, highp> highp_mat3x2;
-
614  typedef mat<3, 3, f32, highp> highp_mat3x3;
-
615  typedef mat<3, 4, f32, highp> highp_mat3x4;
-
616  typedef mat<4, 2, f32, highp> highp_mat4x2;
-
617  typedef mat<4, 3, f32, highp> highp_mat4x3;
-
618  typedef mat<4, 4, f32, highp> highp_mat4x4;
-
619 
-
620  typedef mat<2, 2, f32, defaultp> mat2x2;
-
621  typedef mat<3, 2, f32, defaultp> mat3x2;
-
622  typedef mat<4, 2, f32, defaultp> mat4x2;
-
623  typedef mat<2, 3, f32, defaultp> mat2x3;
-
624  typedef mat<3, 3, f32, defaultp> mat3x3;
-
625  typedef mat<4, 3, f32, defaultp> mat4x3;
-
626  typedef mat<2, 4, f32, defaultp> mat2x4;
-
627  typedef mat<3, 4, f32, defaultp> mat3x4;
-
628  typedef mat<4, 4, f32, defaultp> mat4x4;
-
629 
-
630  typedef mat<2, 2, f32, lowp> lowp_fmat2x2;
-
631  typedef mat<2, 3, f32, lowp> lowp_fmat2x3;
-
632  typedef mat<2, 4, f32, lowp> lowp_fmat2x4;
-
633  typedef mat<3, 2, f32, lowp> lowp_fmat3x2;
-
634  typedef mat<3, 3, f32, lowp> lowp_fmat3x3;
-
635  typedef mat<3, 4, f32, lowp> lowp_fmat3x4;
-
636  typedef mat<4, 2, f32, lowp> lowp_fmat4x2;
-
637  typedef mat<4, 3, f32, lowp> lowp_fmat4x3;
-
638  typedef mat<4, 4, f32, lowp> lowp_fmat4x4;
-
639 
-
640  typedef mat<2, 2, f32, mediump> mediump_fmat2x2;
-
641  typedef mat<2, 3, f32, mediump> mediump_fmat2x3;
-
642  typedef mat<2, 4, f32, mediump> mediump_fmat2x4;
-
643  typedef mat<3, 2, f32, mediump> mediump_fmat3x2;
-
644  typedef mat<3, 3, f32, mediump> mediump_fmat3x3;
-
645  typedef mat<3, 4, f32, mediump> mediump_fmat3x4;
-
646  typedef mat<4, 2, f32, mediump> mediump_fmat4x2;
-
647  typedef mat<4, 3, f32, mediump> mediump_fmat4x3;
-
648  typedef mat<4, 4, f32, mediump> mediump_fmat4x4;
-
649 
-
650  typedef mat<2, 2, f32, highp> highp_fmat2x2;
-
651  typedef mat<2, 3, f32, highp> highp_fmat2x3;
-
652  typedef mat<2, 4, f32, highp> highp_fmat2x4;
-
653  typedef mat<3, 2, f32, highp> highp_fmat3x2;
-
654  typedef mat<3, 3, f32, highp> highp_fmat3x3;
-
655  typedef mat<3, 4, f32, highp> highp_fmat3x4;
-
656  typedef mat<4, 2, f32, highp> highp_fmat4x2;
-
657  typedef mat<4, 3, f32, highp> highp_fmat4x3;
-
658  typedef mat<4, 4, f32, highp> highp_fmat4x4;
-
659 
-
660  typedef mat<2, 2, f32, defaultp> fmat2x2;
-
661  typedef mat<3, 2, f32, defaultp> fmat3x2;
-
662  typedef mat<4, 2, f32, defaultp> fmat4x2;
-
663  typedef mat<2, 3, f32, defaultp> fmat2x3;
-
664  typedef mat<3, 3, f32, defaultp> fmat3x3;
-
665  typedef mat<4, 3, f32, defaultp> fmat4x3;
-
666  typedef mat<2, 4, f32, defaultp> fmat2x4;
-
667  typedef mat<3, 4, f32, defaultp> fmat3x4;
-
668  typedef mat<4, 4, f32, defaultp> fmat4x4;
-
669 
-
670  typedef mat<2, 2, f32, lowp> lowp_f32mat2x2;
-
671  typedef mat<2, 3, f32, lowp> lowp_f32mat2x3;
-
672  typedef mat<2, 4, f32, lowp> lowp_f32mat2x4;
-
673  typedef mat<3, 2, f32, lowp> lowp_f32mat3x2;
-
674  typedef mat<3, 3, f32, lowp> lowp_f32mat3x3;
-
675  typedef mat<3, 4, f32, lowp> lowp_f32mat3x4;
-
676  typedef mat<4, 2, f32, lowp> lowp_f32mat4x2;
-
677  typedef mat<4, 3, f32, lowp> lowp_f32mat4x3;
-
678  typedef mat<4, 4, f32, lowp> lowp_f32mat4x4;
-
679 
-
680  typedef mat<2, 2, f32, mediump> mediump_f32mat2x2;
-
681  typedef mat<2, 3, f32, mediump> mediump_f32mat2x3;
-
682  typedef mat<2, 4, f32, mediump> mediump_f32mat2x4;
-
683  typedef mat<3, 2, f32, mediump> mediump_f32mat3x2;
-
684  typedef mat<3, 3, f32, mediump> mediump_f32mat3x3;
-
685  typedef mat<3, 4, f32, mediump> mediump_f32mat3x4;
-
686  typedef mat<4, 2, f32, mediump> mediump_f32mat4x2;
-
687  typedef mat<4, 3, f32, mediump> mediump_f32mat4x3;
-
688  typedef mat<4, 4, f32, mediump> mediump_f32mat4x4;
-
689 
-
690  typedef mat<2, 2, f32, highp> highp_f32mat2x2;
-
691  typedef mat<2, 3, f32, highp> highp_f32mat2x3;
-
692  typedef mat<2, 4, f32, highp> highp_f32mat2x4;
-
693  typedef mat<3, 2, f32, highp> highp_f32mat3x2;
-
694  typedef mat<3, 3, f32, highp> highp_f32mat3x3;
-
695  typedef mat<3, 4, f32, highp> highp_f32mat3x4;
-
696  typedef mat<4, 2, f32, highp> highp_f32mat4x2;
-
697  typedef mat<4, 3, f32, highp> highp_f32mat4x3;
-
698  typedef mat<4, 4, f32, highp> highp_f32mat4x4;
-
699 
-
700  typedef mat<2, 2, f32, defaultp> f32mat2x2;
-
701  typedef mat<3, 2, f32, defaultp> f32mat3x2;
-
702  typedef mat<4, 2, f32, defaultp> f32mat4x2;
-
703  typedef mat<2, 3, f32, defaultp> f32mat2x3;
-
704  typedef mat<3, 3, f32, defaultp> f32mat3x3;
-
705  typedef mat<4, 3, f32, defaultp> f32mat4x3;
-
706  typedef mat<2, 4, f32, defaultp> f32mat2x4;
-
707  typedef mat<3, 4, f32, defaultp> f32mat3x4;
-
708  typedef mat<4, 4, f32, defaultp> f32mat4x4;
-
709 
-
710  typedef mat<2, 2, double, lowp> lowp_dmat2x2;
-
711  typedef mat<2, 3, double, lowp> lowp_dmat2x3;
-
712  typedef mat<2, 4, double, lowp> lowp_dmat2x4;
-
713  typedef mat<3, 2, double, lowp> lowp_dmat3x2;
-
714  typedef mat<3, 3, double, lowp> lowp_dmat3x3;
-
715  typedef mat<3, 4, double, lowp> lowp_dmat3x4;
-
716  typedef mat<4, 2, double, lowp> lowp_dmat4x2;
-
717  typedef mat<4, 3, double, lowp> lowp_dmat4x3;
-
718  typedef mat<4, 4, double, lowp> lowp_dmat4x4;
-
719 
-
720  typedef mat<2, 2, double, mediump> mediump_dmat2x2;
-
721  typedef mat<2, 3, double, mediump> mediump_dmat2x3;
-
722  typedef mat<2, 4, double, mediump> mediump_dmat2x4;
-
723  typedef mat<3, 2, double, mediump> mediump_dmat3x2;
-
724  typedef mat<3, 3, double, mediump> mediump_dmat3x3;
-
725  typedef mat<3, 4, double, mediump> mediump_dmat3x4;
-
726  typedef mat<4, 2, double, mediump> mediump_dmat4x2;
-
727  typedef mat<4, 3, double, mediump> mediump_dmat4x3;
-
728  typedef mat<4, 4, double, mediump> mediump_dmat4x4;
-
729 
-
730  typedef mat<2, 2, double, highp> highp_dmat2x2;
-
731  typedef mat<2, 3, double, highp> highp_dmat2x3;
-
732  typedef mat<2, 4, double, highp> highp_dmat2x4;
-
733  typedef mat<3, 2, double, highp> highp_dmat3x2;
-
734  typedef mat<3, 3, double, highp> highp_dmat3x3;
-
735  typedef mat<3, 4, double, highp> highp_dmat3x4;
-
736  typedef mat<4, 2, double, highp> highp_dmat4x2;
-
737  typedef mat<4, 3, double, highp> highp_dmat4x3;
-
738  typedef mat<4, 4, double, highp> highp_dmat4x4;
-
739 
-
740  typedef mat<2, 2, double, defaultp> dmat2x2;
-
741  typedef mat<3, 2, double, defaultp> dmat3x2;
-
742  typedef mat<4, 2, double, defaultp> dmat4x2;
-
743  typedef mat<2, 3, double, defaultp> dmat2x3;
-
744  typedef mat<3, 3, double, defaultp> dmat3x3;
-
745  typedef mat<4, 3, double, defaultp> dmat4x3;
-
746  typedef mat<2, 4, double, defaultp> dmat2x4;
-
747  typedef mat<3, 4, double, defaultp> dmat3x4;
-
748  typedef mat<4, 4, double, defaultp> dmat4x4;
-
749 
-
750  typedef mat<2, 2, f64, lowp> lowp_f64mat2x2;
-
751  typedef mat<2, 3, f64, lowp> lowp_f64mat2x3;
-
752  typedef mat<2, 4, f64, lowp> lowp_f64mat2x4;
-
753  typedef mat<3, 2, f64, lowp> lowp_f64mat3x2;
-
754  typedef mat<3, 3, f64, lowp> lowp_f64mat3x3;
-
755  typedef mat<3, 4, f64, lowp> lowp_f64mat3x4;
-
756  typedef mat<4, 2, f64, lowp> lowp_f64mat4x2;
-
757  typedef mat<4, 3, f64, lowp> lowp_f64mat4x3;
-
758  typedef mat<4, 4, f64, lowp> lowp_f64mat4x4;
-
759 
-
760  typedef mat<2, 2, f64, mediump> mediump_f64mat2x2;
-
761  typedef mat<2, 3, f64, mediump> mediump_f64mat2x3;
-
762  typedef mat<2, 4, f64, mediump> mediump_f64mat2x4;
-
763  typedef mat<3, 2, f64, mediump> mediump_f64mat3x2;
-
764  typedef mat<3, 3, f64, mediump> mediump_f64mat3x3;
-
765  typedef mat<3, 4, f64, mediump> mediump_f64mat3x4;
-
766  typedef mat<4, 2, f64, mediump> mediump_f64mat4x2;
-
767  typedef mat<4, 3, f64, mediump> mediump_f64mat4x3;
-
768  typedef mat<4, 4, f64, mediump> mediump_f64mat4x4;
-
769 
-
770  typedef mat<2, 2, f64, highp> highp_f64mat2x2;
-
771  typedef mat<2, 3, f64, highp> highp_f64mat2x3;
-
772  typedef mat<2, 4, f64, highp> highp_f64mat2x4;
-
773  typedef mat<3, 2, f64, highp> highp_f64mat3x2;
-
774  typedef mat<3, 3, f64, highp> highp_f64mat3x3;
-
775  typedef mat<3, 4, f64, highp> highp_f64mat3x4;
-
776  typedef mat<4, 2, f64, highp> highp_f64mat4x2;
-
777  typedef mat<4, 3, f64, highp> highp_f64mat4x3;
-
778  typedef mat<4, 4, f64, highp> highp_f64mat4x4;
-
779 
-
780  typedef mat<2, 2, f64, defaultp> f64mat2x2;
-
781  typedef mat<3, 2, f64, defaultp> f64mat3x2;
-
782  typedef mat<4, 2, f64, defaultp> f64mat4x2;
-
783  typedef mat<2, 3, f64, defaultp> f64mat2x3;
-
784  typedef mat<3, 3, f64, defaultp> f64mat3x3;
-
785  typedef mat<4, 3, f64, defaultp> f64mat4x3;
-
786  typedef mat<2, 4, f64, defaultp> f64mat2x4;
-
787  typedef mat<3, 4, f64, defaultp> f64mat3x4;
-
788  typedef mat<4, 4, f64, defaultp> f64mat4x4;
-
789 
-
790  // Quaternion
-
791 
-
792  typedef qua<float, lowp> lowp_quat;
-
793  typedef qua<float, mediump> mediump_quat;
-
794  typedef qua<float, highp> highp_quat;
-
795  typedef qua<float, defaultp> quat;
-
796 
-
797  typedef qua<float, lowp> lowp_fquat;
-
798  typedef qua<float, mediump> mediump_fquat;
-
799  typedef qua<float, highp> highp_fquat;
-
800  typedef qua<float, defaultp> fquat;
-
801 
-
802  typedef qua<f32, lowp> lowp_f32quat;
-
803  typedef qua<f32, mediump> mediump_f32quat;
-
804  typedef qua<f32, highp> highp_f32quat;
-
805  typedef qua<f32, defaultp> f32quat;
-
806 
-
807  typedef qua<double, lowp> lowp_dquat;
-
808  typedef qua<double, mediump> mediump_dquat;
-
809  typedef qua<double, highp> highp_dquat;
-
810  typedef qua<double, defaultp> dquat;
-
811 
-
812  typedef qua<f64, lowp> lowp_f64quat;
-
813  typedef qua<f64, mediump> mediump_f64quat;
-
814  typedef qua<f64, highp> highp_f64quat;
-
815  typedef qua<f64, defaultp> f64quat;
-
816 }//namespace glm
-
817 
-
818 
-
vec< 1, u16, highp > highp_u16vec1
High qualifier 16 bit unsigned integer scalar type.
Definition: fwd.hpp:354
-
mat< 4, 2, float, mediump > mediump_mat4x2
4 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...
-
mat< 4, 2, f32, highp > highp_f32mat4x2
High single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:696
-
mat< 4, 3, float, highp > highp_mat4x3
4 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...
-
mat< 4, 4, float, defaultp > mat4x4
4 columns of 4 components matrix of single-precision floating-point numbers.
-
vec< 4, unsigned int, mediump > mediump_uvec4
4 components vector of medium qualifier unsigned integer numbers.
-
uint64 highp_u64
High qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:133
-
vec< 1, f64, mediump > mediump_f64vec1
Medium double-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:491
-
vec< 3, f32, defaultp > f32vec3
Single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:463
-
mat< 2, 2, f32, mediump > mediump_fmat2
Medium single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:528
-
double highp_float64_t
High 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:175
-
mat< 4, 4, f64, defaultp > f64mat4
Double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:586
-
vec< 1, int, mediump > mediump_ivec1
1 component vector of signed integer values.
-
vec< 4, double, mediump > mediump_dvec4
4 components vector of medium double-qualifier floating-point numbers.
-
vec< 3, float, highp > highp_vec3
3 components vector of high single-qualifier floating-point numbers.
-
mat< 4, 2, double, lowp > lowp_dmat4x2
4 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...
-
mat< 2, 2, float, defaultp > mat2x2
2 columns of 2 components matrix of single-precision floating-point numbers.
-
mat< 2, 2, f64, defaultp > f64mat2
Double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:584
-
mat< 4, 3, f32, mediump > mediump_fmat4x3
Medium single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:647
-
mat< 3, 3, f32, mediump > mediump_f32mat3
Medium single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:545
-
uint32 mediump_uint32_t
Medium qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:127
-
uint64 lowp_uint64
Low qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:136
-
mat< 3, 3, float, mediump > mediump_mat3x3
3 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...
-
mat< 2, 2, f32, mediump > mediump_fmat2x2
Medium single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:640
-
vec< 1, f32, defaultp > f32vec1
Single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:461
-
mat< 4, 4, f32, highp > highp_f32mat4
High single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:550
-
qua< float, highp > highp_quat
Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...
-
double highp_float64
High 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:170
-
mat< 3, 2, double, mediump > mediump_dmat3x2
3 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
uint8 lowp_u8
Low qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:89
-
mat< 3, 2, double, lowp > lowp_dmat3x2
3 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...
-
uint32 u32
Default qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:120
-
mat< 3, 3, f64, defaultp > f64mat3
Double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:585
-
vec< 2, int, highp > highp_ivec2
2 components vector of high qualifier signed integer numbers.
-
mat< 4, 3, double, highp > highp_dmat4x3
4 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 2, 3, float, mediump > mediump_mat2x3
2 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...
-
double lowp_float64
Low 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:168
-
vec< 1, i32, defaultp > i32vec1
32 bit signed integer scalar type.
Definition: fwd.hpp:277
-
uint16 highp_uint16
High qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:110
-
mat< 2, 4, f64, mediump > mediump_f64mat2x4
Medium double-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:762
-
vec< 4, i64, highp > highp_i64vec4
High qualifier 64 bit signed integer vector of 4 components type.
Definition: fwd.hpp:295
-
mat< 4, 4, double, mediump > mediump_dmat4x4
4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 3, 4, f64, defaultp > f64mat3x4
Double-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:787
-
vec< 4, double, highp > highp_dvec4
4 components vector of high double-qualifier floating-point numbers.
-
mat< 2, 2, f32, defaultp > fmat2
Single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:536
-
mat< 3, 4, double, lowp > lowp_dmat3x4
3 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...
-
vec< 3, i16, defaultp > i16vec3
16 bit signed integer vector of 3 components type.
Definition: fwd.hpp:259
-
uint32 lowp_uint32_t
Low qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:126
-
vec< 2, float, lowp > lowp_fvec2
Low single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:427
-
uint32 mediump_uint32
Medium qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:123
-
mat< 4, 4, f32, mediump > mediump_fmat4
Medium single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:530
-
uint64 highp_uint64
High qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:138
-
mat< 2, 2, f32, lowp > lowp_fmat2
Low single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:524
-
uint32 lowp_uint32
Low qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:122
-
vec< 3, float, lowp > lowp_fvec3
Low single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:428
-
vec< 2, float, mediump > mediump_fvec2
Medium Single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:432
-
mat< 2, 3, float, highp > highp_mat2x3
2 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...
-
mat< 3, 4, f32, lowp > lowp_fmat3x4
Low single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:635
-
vec< 2, float, defaultp > vec2
2 components vector of single-precision floating-point numbers.
-
mat< 2, 2, f64, lowp > lowp_f64mat2x2
Low double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:750
-
vec< 4, i64, defaultp > i64vec4
64 bit signed integer vector of 4 components type.
Definition: fwd.hpp:300
-
vec< 3, u16, defaultp > u16vec3
Default qualifier 16 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:361
-
vec< 1, u64, lowp > lowp_u64vec1
Low qualifier 64 bit unsigned integer scalar type.
Definition: fwd.hpp:384
-
mat< 2, 2, double, mediump > mediump_dmat2
2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
vec< 1, u16, mediump > mediump_u16vec1
Medium qualifier 16 bit unsigned integer scalar type.
Definition: fwd.hpp:349
-
vec< 2, float, highp > highp_vec2
2 components vector of high single-qualifier floating-point numbers.
-
vec< 2, i8, defaultp > i8vec2
8 bit signed integer vector of 2 components type.
Definition: fwd.hpp:238
-
mat< 2, 3, f64, mediump > mediump_f64mat2x3
Medium double-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:761
-
vec< 4, u32, lowp > lowp_u32vec4
Low qualifier 32 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:367
-
vec< 4, f32, highp > highp_f32vec4
High single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:459
-
vec< 3, unsigned int, defaultp > uvec3
3 components vector of unsigned integer numbers.
-
vec< 1, f32, lowp > lowp_f32vec1
Low single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:446
-
mat< 2, 3, f32, highp > highp_f32mat2x3
High single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:691
-
int64 highp_int64
High qualifier 64 bit signed integer type.
Definition: fwd.hpp:80
-
vec< 2, i32, mediump > mediump_i32vec2
Medium qualifier 32 bit signed integer vector of 2 components type.
Definition: fwd.hpp:268
-
vec< 1, double, lowp > lowp_dvec1
1 component vector of double-precision floating-point numbers using low precision arithmetic in term ...
-
mat< 4, 4, f64, lowp > lowp_f64mat4
Low double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:574
-
mat< 4, 4, f32, defaultp > fmat4
Single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:538
-
mat< 3, 4, f32, mediump > mediump_fmat3x4
Medium single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:645
-
mat< 3, 3, double, lowp > lowp_dmat3
3 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...
-
int16 lowp_int16_t
Low qualifier 16 bit signed integer type.
Definition: fwd.hpp:54
-
vec< 4, i32, highp > highp_i32vec4
High qualifier 32 bit signed integer vector of 4 components type.
Definition: fwd.hpp:275
-
mat< 4, 2, f32, defaultp > f32mat4x2
Single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:702
-
mat< 3, 2, f32, highp > highp_fmat3x2
High single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:653
-
mat< 2, 4, float, defaultp > mat2x4
2 columns of 4 components matrix of single-precision floating-point numbers.
-
mat< 2, 3, f32, mediump > mediump_fmat2x3
Medium single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:641
-
uint32 mediump_u32
Medium qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:118
-
mat< 3, 2, f32, lowp > lowp_fmat3x2
Low single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:633
-
mat< 2, 3, float, lowp > lowp_mat2x3
2 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...
-
mat< 2, 2, float, lowp > lowp_mat2
2 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...
-
mat< 4, 2, f64, mediump > mediump_f64mat4x2
Medium double-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:766
-
vec< 4, bool, lowp > lowp_bvec4
4 components vector of low qualifier bool numbers.
-
vec< 2, u16, highp > highp_u16vec2
High qualifier 16 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:355
-
vec< 1, f64, highp > highp_f64vec1
High double-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:496
-
vec< 3, int, defaultp > ivec3
3 components vector of signed integer numbers.
Definition: vector_int3.hpp:15
-
vec< 2, i16, mediump > mediump_i16vec2
Medium qualifier 16 bit signed integer vector of 2 components type.
Definition: fwd.hpp:248
-
mat< 2, 4, f32, highp > highp_fmat2x4
High single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:652
-
vec< 3, u64, defaultp > u64vec3
Default qualifier 64 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:401
-
uint8 lowp_uint8
Low qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:94
-
mat< 3, 2, f32, lowp > lowp_f32mat3x2
Low single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:673
-
vec< 4, bool, mediump > mediump_bvec4
4 components vector of medium qualifier bool numbers.
-
mat< 3, 2, float, defaultp > mat3x2
3 columns of 2 components matrix of single-precision floating-point numbers.
-
uint64 lowp_u64
Low qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:131
-
vec< 1, unsigned int, mediump > mediump_uvec1
1 component vector of unsigned integer values.
-
vec< 3, i64, highp > highp_i64vec3
High qualifier 64 bit signed integer vector of 3 components type.
Definition: fwd.hpp:294
-
int8 mediump_int8
Medium qualifier 8 bit signed integer type.
Definition: fwd.hpp:37
-
int64 lowp_int64
Low qualifier 64 bit signed integer type.
Definition: fwd.hpp:78
-
vec< 1, float, lowp > lowp_vec1
1 component vector of single-precision floating-point numbers using low precision arithmetic in term ...
-
mat< 4, 2, f32, mediump > mediump_f32mat4x2
Medium single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:686
-
mat< 3, 3, float, highp > highp_mat3x3
3 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...
-
vec< 3, f64, lowp > lowp_f64vec3
Low double-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:488
-
mat< 3, 4, float, defaultp > mat3x4
3 columns of 4 components matrix of single-precision floating-point numbers.
-
mat< 3, 3, float, lowp > lowp_mat3x3
3 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...
-
vec< 2, u64, defaultp > u64vec2
Default qualifier 64 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:400
-
vec< 3, i64, lowp > lowp_i64vec3
Low qualifier 64 bit signed integer vector of 3 components type.
Definition: fwd.hpp:284
-
vec< 2, i8, mediump > mediump_i8vec2
Medium qualifier 8 bit signed integer vector of 2 components type.
Definition: fwd.hpp:228
-
vec< 4, float, lowp > lowp_vec4
4 components vector of low single-qualifier floating-point numbers.
-
mat< 4, 3, float, defaultp > mat4x3
4 columns of 3 components matrix of single-precision floating-point numbers.
-
mat< 3, 4, f32, defaultp > f32mat3x4
Single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:707
-
mat< 4, 2, double, mediump > mediump_dmat4x2
4 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
vec< 2, float, lowp > lowp_vec2
2 components vector of low single-qualifier floating-point numbers.
-
vec< 3, i16, highp > highp_i16vec3
High qualifier 16 bit signed integer vector of 3 components type.
Definition: fwd.hpp:254
-
mat< 2, 3, double, mediump > mediump_dmat2x3
2 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
vec< 3, i16, mediump > mediump_i16vec3
Medium qualifier 16 bit signed integer vector of 3 components type.
Definition: fwd.hpp:249
-
uint64 u64
Default qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:134
-
vec< 2, int, mediump > mediump_ivec2
2 components vector of medium qualifier signed integer numbers.
-
mat< 3, 2, f32, mediump > mediump_fmat3x2
Medium single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:643
-
vec< 1, f64, defaultp > f64vec1
Double-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:501
-
vec< 1, i64, mediump > mediump_i64vec1
Medium qualifier 64 bit signed integer scalar type.
Definition: fwd.hpp:287
-
vec< 1, i16, defaultp > i16vec1
16 bit signed integer scalar type.
Definition: fwd.hpp:257
-
mat< 2, 2, double, lowp > lowp_dmat2
2 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...
-
mat< 2, 4, double, highp > highp_dmat2x4
2 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 3, 3, f64, lowp > lowp_f64mat3x3
Low double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:754
-
vec< 2, f64, lowp > lowp_f64vec2
Low double-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:487
-
mat< 2, 3, f32, highp > highp_fmat2x3
High single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:651
-
mat< 4, 3, f32, lowp > lowp_f32mat4x3
Low single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:677
-
mat< 3, 3, f64, lowp > lowp_f64mat3
Low double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:573
-
vec< 3, u64, mediump > mediump_u64vec3
Medium qualifier 64 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:391
-
double mediump_float64
Medium 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:169
-
double float64
Double-qualifier floating-point scalar.
Definition: fwd.hpp:171
-
vec< 2, bool, highp > highp_bvec2
2 components vector of high qualifier bool numbers.
-
vec< 2, i16, highp > highp_i16vec2
High qualifier 16 bit signed integer vector of 2 components type.
Definition: fwd.hpp:253
-
mat< 4, 2, f32, defaultp > fmat4x2
Single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:662
-
mat< 2, 3, f64, lowp > lowp_f64mat2x3
Low double-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:751
-
mat< 3, 4, f32, defaultp > fmat3x4
Single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:667
-
mat< 3, 3, double, lowp > lowp_dmat3x3
3 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...
-
vec< 3, u32, lowp > lowp_u32vec3
Low qualifier 32 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:366
-
mat< 2, 4, f32, defaultp > f32mat2x4
Single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:706
-
vec< 4, float, lowp > lowp_fvec4
Low single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:429
-
vec< 4, f32, mediump > mediump_f32vec4
Medium single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:454
-
vec< 4, i16, defaultp > i16vec4
16 bit signed integer vector of 4 components type.
Definition: fwd.hpp:260
-
uint8 lowp_uint8_t
Low qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:98
-
uint32 highp_uint32_t
High qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:128
-
mat< 3, 3, f32, defaultp > fmat3x3
Single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:664
-
mat< 3, 4, f64, mediump > mediump_f64mat3x4
Medium double-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:765
-
mat< 2, 3, f32, lowp > lowp_fmat2x3
Low single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:631
-
vec< 1, u32, lowp > lowp_u32vec1
Low qualifier 32 bit unsigned integer scalar type.
Definition: fwd.hpp:364
-
mat< 3, 2, float, lowp > lowp_mat3x2
3 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...
-
mat< 2, 3, f32, defaultp > f32mat2x3
Single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:703
-
vec< 1, i32, mediump > mediump_i32vec1
Medium qualifier 32 bit signed integer scalar type.
Definition: fwd.hpp:267
-
vec< 4, u16, highp > highp_u16vec4
High qualifier 16 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:357
-
vec< 1, i32, lowp > lowp_i32vec1
Low qualifier 32 bit signed integer scalar type.
Definition: fwd.hpp:262
-
vec< 1, i64, lowp > lowp_i64vec1
Low qualifier 64 bit signed integer scalar type.
Definition: fwd.hpp:282
-
vec< 1, u32, highp > highp_u32vec1
High qualifier 32 bit unsigned integer scalar type.
Definition: fwd.hpp:374
-
vec< 1, bool, highp > highp_bvec1
1 component vector of bool values.
-
int16 mediump_int16
Medium qualifier 16 bit signed integer type.
Definition: fwd.hpp:51
-
uint16 mediump_u16
Medium qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:104
-
qua< f64, defaultp > f64quat
Double-qualifier floating-point quaternion.
Definition: fwd.hpp:815
-
vec< 4, float, mediump > mediump_vec4
4 components vector of medium single-qualifier floating-point numbers.
-
vec< 3, f64, mediump > mediump_f64vec3
Medium double-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:493
-
qua< double, defaultp > dquat
Quaternion of double-precision floating-point numbers.
-
vec< 1, u64, defaultp > u64vec1
Default qualifier 64 bit unsigned integer scalar type.
Definition: fwd.hpp:399
-
int64 int64_t
64 bit signed integer type.
Definition: fwd.hpp:85
-
vec< 1, u8, defaultp > u8vec1
Default qualifier 8 bit unsigned integer scalar type.
Definition: fwd.hpp:339
-
vec< 1, i8, highp > highp_i8vec1
High qualifier 8 bit signed integer scalar type.
Definition: fwd.hpp:232
-
vec< 4, u8, defaultp > u8vec4
Default qualifier 8 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:342
-
int8 int8_t
8 bit signed integer type.
Definition: fwd.hpp:43
-
int32 i32
32 bit signed integer type.
Definition: fwd.hpp:62
-
vec< 1, u32, mediump > mediump_u32vec1
Medium qualifier 32 bit unsigned integer scalar type.
Definition: fwd.hpp:369
-
mat< 2, 2, f64, defaultp > f64mat2x2
Double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:780
-
mat< 2, 2, f32, lowp > lowp_f32mat2x2
Low single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:670
-
vec< 4, f32, lowp > lowp_f32vec4
Low single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:449
-
vec< 3, float, highp > highp_fvec3
High Single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:438
-
mat< 4, 2, f64, lowp > lowp_f64mat4x2
Low double-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:756
-
mat< 3, 3, f32, mediump > mediump_fmat3x3
Medium single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:644
-
vec< 1, i64, highp > highp_i64vec1
High qualifier 64 bit signed integer scalar type.
Definition: fwd.hpp:292
-
vec< 4, i8, defaultp > i8vec4
8 bit signed integer vector of 4 components type.
Definition: fwd.hpp:240
-
vec< 1, int, highp > highp_ivec1
1 component vector of signed integer values.
-
vec< 3, bool, mediump > mediump_bvec3
3 components vector of medium qualifier bool numbers.
-
int32 highp_int32
High qualifier 32 bit signed integer type.
Definition: fwd.hpp:66
-
mat< 2, 3, f32, mediump > mediump_f32mat2x3
Medium single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:681
-
mat< 3, 4, double, mediump > mediump_dmat3x4
3 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 3, 2, f64, lowp > lowp_f64mat3x2
Low double-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:753
-
mat< 4, 2, float, defaultp > mat4x2
4 columns of 2 components matrix of single-precision floating-point numbers.
-
vec< 1, float, mediump > mediump_vec1
1 component vector of single-precision floating-point numbers using medium precision arithmetic in te...
-
uint32 highp_u32
High qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:119
-
int32 highp_i32
High qualifier 32 bit signed integer type.
Definition: fwd.hpp:61
-
vec< 4, int, defaultp > ivec4
4 components vector of signed integer numbers.
Definition: vector_int4.hpp:15
-
mat< 4, 4, float, mediump > mediump_mat4x4
4 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...
-
vec< 4, u64, defaultp > u64vec4
Default qualifier 64 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:402
-
vec< 2, int, lowp > lowp_ivec2
2 components vector of low qualifier signed integer numbers.
-
vec< 4, f32, defaultp > f32vec4
Single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:464
-
mat< 2, 3, f64, defaultp > f64mat2x3
Double-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:783
-
mat< 4, 4, f64, mediump > mediump_f64mat4x4
Medium double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:768
-
mat< 2, 2, double, mediump > mediump_dmat2x2
2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
vec< 4, u16, lowp > lowp_u16vec4
Low qualifier 16 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:347
-
vec< 4, unsigned int, highp > highp_uvec4
4 components vector of high qualifier unsigned integer numbers.
-
uint32 highp_uint32
High qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:124
-
mat< 4, 4, f32, lowp > lowp_f32mat4
Low single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:542
-
mat< 3, 2, f64, defaultp > f64mat3x2
Double-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:781
-
float mediump_float32
Medium 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:153
-
vec< 1, u32, defaultp > u32vec1
Default qualifier 32 bit unsigned integer scalar type.
Definition: fwd.hpp:379
-
mat< 4, 2, float, lowp > lowp_mat4x2
4 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...
-
vec< 4, f64, mediump > mediump_f64vec4
Medium double-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:494
-
mat< 3, 3, f64, defaultp > f64mat3x3
Double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:784
-
float highp_float32
High 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:154
-
uint8 highp_uint8
High qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:96
-
int8 highp_i8
High qualifier 8 bit signed integer type.
Definition: fwd.hpp:33
-
mat< 2, 4, f64, lowp > lowp_f64mat2x4
Low double-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:752
-
mat< 3, 4, f64, lowp > lowp_f64mat3x4
Low double-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:755
-
vec< 3, float, lowp > lowp_vec3
3 components vector of low single-qualifier floating-point numbers.
-
mat< 3, 4, float, highp > highp_mat3x4
3 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...
-
mat< 4, 4, float, lowp > lowp_mat4
4 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...
-
int8 mediump_i8
Medium qualifier 8 bit signed integer type.
Definition: fwd.hpp:32
-
int64 highp_int64_t
High qualifier 64 bit signed integer type.
Definition: fwd.hpp:84
-
mat< 4, 4, f32, defaultp > f32mat4x4
Single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:708
-
float float32_t
Default 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:160
-
mat< 2, 2, f32, defaultp > f32mat2x2
Single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:700
-
vec< 2, i64, lowp > lowp_i64vec2
Low qualifier 64 bit signed integer vector of 2 components type.
Definition: fwd.hpp:283
-
mat< 2, 4, f32, lowp > lowp_f32mat2x4
Low single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:672
-
vec< 4, bool, highp > highp_bvec4
4 components vector of high qualifier bool numbers.
-
uint32 uint32_t
Default qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:129
-
mat< 3, 3, f32, highp > highp_f32mat3
High single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:549
-
mat< 3, 3, f64, mediump > mediump_f64mat3x3
Medium double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:764
-
vec< 2, bool, defaultp > bvec2
2 components vector of boolean.
-
vec< 4, float, defaultp > vec4
4 components vector of single-precision floating-point numbers.
-
uint8 u8
Default qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:92
-
vec< 3, i32, highp > highp_i32vec3
High qualifier 32 bit signed integer vector of 3 components type.
Definition: fwd.hpp:274
-
float float32
Single-qualifier floating-point scalar.
Definition: fwd.hpp:155
-
vec< 4, f32, defaultp > fvec4
Single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:444
-
vec< 1, i32, highp > highp_i32vec1
High qualifier 32 bit signed integer scalar type.
Definition: fwd.hpp:272
-
mat< 3, 3, double, highp > highp_dmat3
3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 3, 3, f32, lowp > lowp_f32mat3
Low single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:541
-
vec< 1, u16, defaultp > u16vec1
Default qualifier 16 bit unsigned integer scalar type.
Definition: fwd.hpp:359
-
mat< 2, 4, float, lowp > lowp_mat2x4
2 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...
-
vec< 1, double, defaultp > dvec1
1 components vector of double-precision floating-point numbers.
-
vec< 1, i8, defaultp > i8vec1
8 bit signed integer scalar type.
Definition: fwd.hpp:237
-
vec< 3, i32, mediump > mediump_i32vec3
Medium qualifier 32 bit signed integer vector of 3 components type.
Definition: fwd.hpp:269
-
vec< 2, i32, defaultp > i32vec2
32 bit signed integer vector of 2 components type.
Definition: fwd.hpp:278
-
vec< 2, bool, mediump > mediump_bvec2
2 components vector of medium qualifier bool numbers.
-
vec< 2, i16, lowp > lowp_i16vec2
Low qualifier 16 bit signed integer vector of 2 components type.
Definition: fwd.hpp:243
-
vec< 2, float, mediump > mediump_vec2
2 components vector of medium single-qualifier floating-point numbers.
-
vec< 2, u64, mediump > mediump_u64vec2
Medium qualifier 64 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:390
-
vec< 4, u8, lowp > lowp_u8vec4
Low qualifier 8 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:327
-
mat< 3, 3, f32, highp > highp_f32mat3x3
High single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:694
-
vec< 1, u8, highp > highp_u8vec1
High qualifier 8 bit unsigned integer scalar type.
Definition: fwd.hpp:334
-
uint8 highp_uint8_t
High qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:100
-
vec< 4, u32, mediump > mediump_u32vec4
Medium qualifier 32 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:372
-
mat< 2, 2, f32, highp > highp_f32mat2x2
High single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:690
-
vec< 4, f64, highp > highp_f64vec4
High double-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:499
-
mat< 3, 3, double, highp > highp_dmat3x3
3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
vec< 3, u8, lowp > lowp_u8vec3
Low qualifier 8 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:326
-
float highp_f32
High 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:149
-
uint64 mediump_uint64
Medium qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:137
-
int32 highp_int32_t
32 bit signed integer type.
Definition: fwd.hpp:70
-
mat< 2, 3, f32, lowp > lowp_f32mat2x3
Low single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:671
-
vec< 3, f64, defaultp > f64vec3
Double-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:503
-
vec< 3, u16, mediump > mediump_u16vec3
Medium qualifier 16 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:351
-
mat< 2, 4, f64, defaultp > f64mat2x4
Double-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:786
-
qua< double, mediump > mediump_dquat
Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term ...
-
mat< 3, 3, f32, defaultp > f32mat3
Single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:553
-
mat< 2, 2, f64, mediump > mediump_f64mat2x2
Medium double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:760
-
vec< 1, double, highp > highp_dvec1
1 component vector of double-precision floating-point numbers using high precision arithmetic in term...
-
mat< 3, 3, float, defaultp > mat3x3
3 columns of 3 components matrix of single-precision floating-point numbers.
-
uint64 mediump_u64
Medium qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:132
-
mat< 4, 4, float, mediump > mediump_mat4
4 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...
-
vec< 4, i16, highp > highp_i16vec4
High qualifier 16 bit signed integer vector of 4 components type.
Definition: fwd.hpp:255
-
mat< 4, 4, f32, lowp > lowp_fmat4
Low single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:526
-
vec< 2, u32, mediump > mediump_u32vec2
Medium qualifier 32 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:370
-
vec< 3, u64, highp > highp_u64vec3
High qualifier 64 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:396
-
vec< 2, unsigned int, defaultp > uvec2
2 components vector of unsigned integer numbers.
-
uint16 lowp_u16
Low qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:103
-
vec< 3, i16, lowp > lowp_i16vec3
Low qualifier 16 bit signed integer vector of 3 components type.
Definition: fwd.hpp:244
-
vec< 3, u16, lowp > lowp_u16vec3
Low qualifier 16 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:346
-
vec< 1, unsigned int, defaultp > uvec1
1 component vector of unsigned integer numbers.
-
vec< 3, f32, lowp > lowp_f32vec3
Low single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:448
-
mat< 4, 4, f32, highp > highp_fmat4
High single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:534
-
mat< 3, 3, f32, lowp > lowp_fmat3
Low single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:525
-
int16 highp_i16
High qualifier 16 bit signed integer type.
Definition: fwd.hpp:47
-
qua< f32, mediump > mediump_f32quat
Medium single-qualifier floating-point quaternion.
Definition: fwd.hpp:803
-
int8 highp_int8
High qualifier 8 bit signed integer type.
Definition: fwd.hpp:38
-
mat< 4, 4, f64, defaultp > f64mat4x4
Double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:788
-
mat< 4, 3, f32, defaultp > fmat4x3
Single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:665
-
mat< 2, 4, f32, lowp > lowp_fmat2x4
Low single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:632
-
mat< 3, 3, f64, highp > highp_f64mat3
High double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:581
-
vec< 3, i8, mediump > mediump_i8vec3
Medium qualifier 8 bit signed integer vector of 3 components type.
Definition: fwd.hpp:229
-
vec< 1, f32, highp > highp_f32vec1
High single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:456
-
vec< 3, i8, lowp > lowp_i8vec3
Low qualifier 8 bit signed integer vector of 3 components type.
Definition: fwd.hpp:224
-
mat< 3, 3, double, mediump > mediump_dmat3x3
3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 4, 3, f64, lowp > lowp_f64mat4x3
Low double-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:757
-
vec< 4, u64, highp > highp_u64vec4
High qualifier 64 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:397
-
mat< 3, 3, float, mediump > mediump_mat3
3 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...
-
vec< 3, f32, defaultp > fvec3
Single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:443
-
vec< 2, i16, defaultp > i16vec2
16 bit signed integer vector of 2 components type.
Definition: fwd.hpp:258
-
vec< 1, bool, mediump > mediump_bvec1
1 component vector of bool values.
-
mat< 4, 4, double, lowp > lowp_dmat4
4 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...
-
mat< 3, 4, double, highp > highp_dmat3x4
3 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 4, 3, f32, defaultp > f32mat4x3
Single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:705
-
mat< 2, 2, f32, defaultp > f32mat2
Single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:552
-
mat< 2, 4, f32, mediump > mediump_fmat2x4
Medium single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:642
-
vec< 2, u16, mediump > mediump_u16vec2
Medium qualifier 16 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:350
-
mat< 4, 4, f32, lowp > lowp_f32mat4x4
Low single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:678
-
vec< 2, unsigned int, lowp > lowp_uvec2
2 components vector of low qualifier unsigned integer numbers.
-
mat< 3, 3, float, lowp > lowp_mat3
3 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...
-
vec< 2, u8, lowp > lowp_u8vec2
Low qualifier 8 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:325
-
vec< 2, double, lowp > lowp_dvec2
2 components vector of low double-qualifier floating-point numbers.
-
mat< 3, 3, f64, mediump > mediump_f64mat3
Medium double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:577
-
int16 lowp_i16
Low qualifier 16 bit signed integer type.
Definition: fwd.hpp:45
-
vec< 1, float, defaultp > vec1
1 components vector of single-precision floating-point numbers.
-
vec< 3, unsigned int, mediump > mediump_uvec3
3 components vector of medium qualifier unsigned integer numbers.
-
mat< 3, 4, f32, highp > highp_fmat3x4
High single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:655
-
double float64_t
Default 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:176
-
mat< 4, 4, f64, highp > highp_f64mat4x4
High double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:778
-
mat< 2, 2, float, highp > highp_mat2
2 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...
-
mat< 4, 3, f32, mediump > mediump_f32mat4x3
Medium single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:687
-
int16 lowp_int16
Low qualifier 16 bit signed integer type.
Definition: fwd.hpp:50
-
vec< 3, int, lowp > lowp_ivec3
3 components vector of low qualifier signed integer numbers.
-
mat< 3, 3, f32, mediump > mediump_fmat3
Medium single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:529
-
mat< 4, 4, double, mediump > mediump_dmat4
4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 4, 4, f32, highp > highp_f32mat4x4
High single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:698
-
int64 lowp_int64_t
Low qualifier 64 bit signed integer type.
Definition: fwd.hpp:82
-
vec< 4, int, lowp > lowp_ivec4
4 components vector of low qualifier signed integer numbers.
-
uint16 uint16_t
Default qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:115
-
vec< 4, unsigned int, lowp > lowp_uvec4
4 components vector of low qualifier unsigned integer numbers.
-
vec< 2, f64, highp > highp_f64vec2
High double-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:497
-
vec< 2, u64, lowp > lowp_u64vec2
Low qualifier 64 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:385
-
mat< 3, 3, f32, defaultp > fmat3
Single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:537
-
mat< 3, 2, f32, mediump > mediump_f32mat3x2
Medium single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:683
-
mat< 3, 3, double, defaultp > dmat3x3
3 columns of 3 components matrix of double-precision floating-point numbers.
-
mat< 3, 3, double, defaultp > dmat3
3 columns of 3 components matrix of double-precision floating-point numbers.
-
mat< 4, 2, f32, lowp > lowp_f32mat4x2
Low single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:676
-
int32 lowp_int32
Low qualifier 32 bit signed integer type.
Definition: fwd.hpp:64
-
vec< 4, i64, mediump > mediump_i64vec4
Medium qualifier 64 bit signed integer vector of 4 components type.
Definition: fwd.hpp:290
-
vec< 4, bool, defaultp > bvec4
4 components vector of boolean.
-
uint8 uint8_t
Default qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:101
-
vec< 1, i8, mediump > mediump_i8vec1
Medium qualifier 8 bit signed integer scalar type.
Definition: fwd.hpp:227
-
int32 mediump_int32_t
Medium qualifier 32 bit signed integer type.
Definition: fwd.hpp:69
-
mat< 4, 3, double, mediump > mediump_dmat4x3
4 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
float highp_float32_t
High 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:159
-
mat< 3, 3, f32, defaultp > f32mat3x3
Single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:704
-
mat< 4, 4, double, highp > highp_dmat4x4
4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
uint8 highp_u8
High qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:91
-
mat< 2, 3, double, highp > highp_dmat2x3
2 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
uint8 mediump_uint8
Medium qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:95
-
mat< 4, 2, f32, highp > highp_fmat4x2
High single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:656
-
vec< 2, f32, highp > highp_f32vec2
High single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:457
-
mat< 2, 4, double, mediump > mediump_dmat2x4
2 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 2, 2, double, defaultp > dmat2
2 columns of 2 components matrix of double-precision floating-point numbers.
-
vec< 4, float, highp > highp_vec4
4 components vector of high single-qualifier floating-point numbers.
-
int64 mediump_int64_t
Medium qualifier 64 bit signed integer type.
Definition: fwd.hpp:83
-
vec< 3, u64, lowp > lowp_u64vec3
Low qualifier 64 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:386
-
mat< 4, 4, double, defaultp > dmat4x4
4 columns of 4 components matrix of double-precision floating-point numbers.
-
vec< 1, bool, lowp > lowp_bvec1
1 component vector of bool values.
-
mat< 2, 2, f64, highp > highp_f64mat2x2
High double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:770
-
vec< 3, u32, highp > highp_u32vec3
High qualifier 32 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:376
-
vec< 3, bool, highp > highp_bvec3
3 components vector of high qualifier bool numbers.
-
int8 highp_int8_t
High qualifier 8 bit signed integer type.
Definition: fwd.hpp:42
-
qua< f32, lowp > lowp_f32quat
Low single-qualifier floating-point quaternion.
Definition: fwd.hpp:802
-
vec< 4, i32, lowp > lowp_i32vec4
Low qualifier 32 bit signed integer vector of 4 components type.
Definition: fwd.hpp:265
-
vec< 1, i16, highp > highp_i16vec1
High qualifier 16 bit signed integer scalar type.
Definition: fwd.hpp:252
-
mat< 4, 4, f32, lowp > lowp_fmat4x4
Low single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:638
-
mat< 4, 3, double, lowp > lowp_dmat4x3
4 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...
-
mat< 3, 2, f32, defaultp > f32mat3x2
Single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:701
-
mat< 3, 3, f32, lowp > lowp_f32mat3x3
Low single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:674
-
vec< 2, i8, lowp > lowp_i8vec2
Low qualifier 8 bit signed integer vector of 2 components type.
Definition: fwd.hpp:223
-
vec< 4, i32, defaultp > i32vec4
32 bit signed integer vector of 4 components type.
Definition: fwd.hpp:280
-
mat< 2, 2, f32, highp > highp_f32mat2
High single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:548
-
float lowp_f32
Low 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:147
-
vec< 1, unsigned int, highp > highp_uvec1
1 component vector of unsigned integer values.
-
vec< 4, u16, mediump > mediump_u16vec4
Medium qualifier 16 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:352
-
vec< 3, unsigned int, highp > highp_uvec3
3 components vector of high qualifier unsigned integer numbers.
-
vec< 3, u32, defaultp > u32vec3
Default qualifier 32 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:381
-
vec< 2, u8, defaultp > u8vec2
Default qualifier 8 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:340
-
vec< 3, double, mediump > mediump_dvec3
3 components vector of medium double-qualifier floating-point numbers.
-
int16 mediump_i16
Medium qualifier 16 bit signed integer type.
Definition: fwd.hpp:46
-
vec< 2, u64, highp > highp_u64vec2
High qualifier 64 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:395
-
vec< 1, int, lowp > lowp_ivec1
1 component vector of signed integer values.
-
vec< 3, i8, defaultp > i8vec3
8 bit signed integer vector of 3 components type.
Definition: fwd.hpp:239
-
mat< 2, 2, f32, mediump > mediump_f32mat2x2
High single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:680
-
mat< 4, 4, float, defaultp > mat4
4 columns of 4 components matrix of single-precision floating-point numbers.
-
uint16 mediump_uint16_t
Medium qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:113
-
mat< 4, 3, f64, mediump > mediump_f64mat4x3
Medium double-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:767
-
vec< 3, u8, defaultp > u8vec3
Default qualifier 8 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:341
-
double highp_f64
High 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:165
-
vec< 3, float, mediump > mediump_fvec3
Medium Single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:433
-
int64 mediump_int64
Medium qualifier 64 bit signed integer type.
Definition: fwd.hpp:79
-
vec< 4, u64, mediump > mediump_u64vec4
Medium qualifier 64 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:392
-
mat< 2, 2, double, highp > highp_dmat2x2
2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
uint64 uint64_t
Default qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:143
-
vec< 2, u32, highp > highp_u32vec2
High qualifier 32 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:375
-
vec< 1, double, mediump > mediump_dvec1
1 component vector of double-precision floating-point numbers using medium precision arithmetic in te...
-
vec< 1, float, highp > highp_fvec1
High single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:436
-
vec< 4, i64, lowp > lowp_i64vec4
Low qualifier 64 bit signed integer vector of 4 components type.
Definition: fwd.hpp:285
-
vec< 4, int, highp > highp_ivec4
4 components vector of high qualifier signed integer numbers.
-
vec< 3, i32, defaultp > i32vec3
32 bit signed integer vector of 3 components type.
Definition: fwd.hpp:279
-
mat< 2, 4, f32, highp > highp_f32mat2x4
High single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:692
-
vec< 1, i8, lowp > lowp_i8vec1
Low qualifier 8 bit signed integer scalar type.
Definition: fwd.hpp:222
-
mat< 2, 2, f64, highp > highp_f64mat2
High double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:580
-
vec< 3, double, lowp > lowp_dvec3
3 components vector of low double-qualifier floating-point numbers.
-
uint16 lowp_uint16_t
Low qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:112
-
vec< 2, double, defaultp > dvec2
2 components vector of double-precision floating-point numbers.
-
mat< 3, 2, f64, highp > highp_f64mat3x2
High double-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:773
-
vec< 3, u32, mediump > mediump_u32vec3
Medium qualifier 32 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:371
-
uint16 lowp_uint16
Low qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:108
-
mat< 3, 3, float, highp > highp_mat3
3 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...
-
vec< 3, u8, highp > highp_u8vec3
High qualifier 8 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:336
-
vec< 4, f64, defaultp > f64vec4
Double-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:504
-
vec< 2, i8, highp > highp_i8vec2
High qualifier 8 bit signed integer vector of 2 components type.
Definition: fwd.hpp:233
-
mat< 2, 2, double, highp > highp_dmat2
2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
vec< 3, i32, lowp > lowp_i32vec3
Low qualifier 32 bit signed integer vector of 3 components type.
Definition: fwd.hpp:264
-
int32 lowp_i32
Low qualifier 32 bit signed integer type.
Definition: fwd.hpp:59
-
mat< 4, 4, f32, mediump > mediump_fmat4x4
Medium single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:648
-
vec< 3, float, defaultp > vec3
3 components vector of single-precision floating-point numbers.
-
mat< 4, 4, double, lowp > lowp_dmat4x4
4 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...
-
int64 mediump_i64
Medium qualifier 64 bit signed integer type.
Definition: fwd.hpp:74
-
mat< 4, 4, double, highp > highp_dmat4
4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
vec< 4, i16, lowp > lowp_i16vec4
Low qualifier 16 bit signed integer vector of 4 components type.
Definition: fwd.hpp:245
-
vec< 1, bool, defaultp > bvec1
1 components vector of boolean.
-
mat< 4, 3, f64, highp > highp_f64mat4x3
High double-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:777
-
vec< 2, u8, highp > highp_u8vec2
High qualifier 8 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:335
-
vec< 3, int, mediump > mediump_ivec3
3 components vector of medium qualifier signed integer numbers.
-
vec< 3, i8, highp > highp_i8vec3
High qualifier 8 bit signed integer vector of 3 components type.
Definition: fwd.hpp:234
-
vec< 3, f64, highp > highp_f64vec3
High double-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:498
-
vec< 2, f32, defaultp > fvec2
Single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:442
-
vec< 4, f64, lowp > lowp_f64vec4
Low double-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:489
-
qua< double, highp > highp_dquat
Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of...
-
vec< 3, f32, mediump > mediump_f32vec3
Medium single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:453
-
double lowp_f64
Low 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:163
-
mat< 4, 2, f32, lowp > lowp_fmat4x2
Low single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:636
-
vec< 3, int, highp > highp_ivec3
3 components vector of high qualifier signed integer numbers.
-
mat< 2, 4, f64, highp > highp_f64mat2x4
High double-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:772
-
mat< 4, 4, f64, highp > highp_f64mat4
High double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:582
-
vec< 4, i32, mediump > mediump_i32vec4
Medium qualifier 32 bit signed integer vector of 4 components type.
Definition: fwd.hpp:270
-
mat< 2, 2, f32, lowp > lowp_f32mat2
Low single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:540
-
int16 int16_t
16 bit signed integer type.
Definition: fwd.hpp:57
-
mat< 3, 4, double, defaultp > dmat3x4
3 columns of 4 components matrix of double-precision floating-point numbers.
-
mat< 2, 3, double, lowp > lowp_dmat2x3
2 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...
-
int64 highp_i64
High qualifier 64 bit signed integer type.
Definition: fwd.hpp:75
-
mat< 2, 4, float, mediump > mediump_mat2x4
2 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...
-
mat< 3, 4, f64, highp > highp_f64mat3x4
High double-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:775
-
mat< 3, 3, f32, highp > highp_fmat3
High single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:533
-
mat< 3, 3, f32, mediump > mediump_f32mat3x3
Medium single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:684
-
qua< f64, mediump > mediump_f64quat
Medium double-qualifier floating-point quaternion.
Definition: fwd.hpp:813
-
int32 int32_t
32 bit signed integer type.
Definition: fwd.hpp:71
-
vec< 2, f64, defaultp > f64vec2
Double-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:502
-
vec< 4, unsigned int, defaultp > uvec4
4 components vector of unsigned integer numbers.
-
uint64 lowp_uint64_t
Low qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:140
-
detail::uint64 uint64
64 bit unsigned integer type.
-
int16 highp_int16
High qualifier 16 bit signed integer type.
Definition: fwd.hpp:52
-
mat< 2, 2, double, defaultp > dmat2x2
2 columns of 2 components matrix of double-precision floating-point numbers.
-
vec< 1, i16, mediump > mediump_i16vec1
Medium qualifier 16 bit signed integer scalar type.
Definition: fwd.hpp:247
-
mat< 2, 4, double, defaultp > dmat2x4
2 columns of 4 components matrix of double-precision floating-point numbers.
-
mat< 3, 2, double, highp > highp_dmat3x2
3 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 2, 4, f32, defaultp > fmat2x4
Single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:666
-
mat< 2, 2, f32, highp > highp_fmat2x2
High single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:650
-
vec< 4, float, highp > highp_fvec4
High Single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:439
-
mat< 3, 3, f64, highp > highp_f64mat3x3
High double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:774
-
int32 mediump_i32
Medium qualifier 32 bit signed integer type.
Definition: fwd.hpp:60
-
vec< 3, float, mediump > mediump_vec3
3 components vector of medium single-qualifier floating-point numbers.
-
vec< 2, u16, lowp > lowp_u16vec2
Low qualifier 16 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:345
-
vec< 4, u32, highp > highp_u32vec4
High qualifier 32 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:377
-
mat< 4, 2, double, defaultp > dmat4x2
4 columns of 2 components matrix of double-precision floating-point numbers.
-
vec< 4, double, lowp > lowp_dvec4
4 components vector of low double-qualifier floating-point numbers.
-
float lowp_float32_t
Low 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:157
-
uint64 highp_uint64_t
High qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:142
-
vec< 2, f32, lowp > lowp_f32vec2
Low single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:447
-
vec< 4, u32, defaultp > u32vec4
Default qualifier 32 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:382
-
mat< 2, 2, f64, mediump > mediump_f64mat2
Medium double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:576
-
qua< float, mediump > mediump_quat
Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...
-
mat< 4, 3, f32, highp > highp_f32mat4x3
High single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:697
-
vec< 3, unsigned int, lowp > lowp_uvec3
3 components vector of low qualifier unsigned integer numbers.
-
mat< 2, 2, float, lowp > lowp_mat2x2
2 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...
-
qua< f32, defaultp > f32quat
Single-qualifier floating-point quaternion.
Definition: fwd.hpp:805
-
detail::int64 int64
64 bit signed integer type.
-
qua< double, lowp > lowp_dquat
Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs...
-
vec< 1, u64, highp > highp_u64vec1
High qualifier 64 bit unsigned integer scalar type.
Definition: fwd.hpp:394
-
mat< 3, 4, float, mediump > mediump_mat3x4
3 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...
-
mat< 2, 3, f64, highp > highp_f64mat2x3
High double-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:771
-
vec< 4, i8, lowp > lowp_i8vec4
Low qualifier 8 bit signed integer vector of 4 components type.
Definition: fwd.hpp:225
-
mat< 4, 3, f32, lowp > lowp_fmat4x3
Low single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:637
-
float f32
Default 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:150
-
vec< 2, i32, highp > highp_i32vec2
High qualifier 32 bit signed integer vector of 2 components type.
Definition: fwd.hpp:273
-
vec< 1, u8, mediump > mediump_u8vec1
Medium qualifier 8 bit unsigned integer scalar type.
Definition: fwd.hpp:329
-
mat< 4, 3, f32, highp > highp_fmat4x3
High single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:657
-
mat< 3, 2, double, defaultp > dmat3x2
3 columns of 2 components matrix of double-precision floating-point numbers.
-
vec< 4, i16, mediump > mediump_i16vec4
Medium qualifier 16 bit signed integer vector of 4 components type.
Definition: fwd.hpp:250
-
mat< 4, 2, f64, defaultp > f64mat4x2
Double-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:782
-
mat< 2, 3, f32, defaultp > fmat2x3
Single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:663
-
mat< 4, 4, f64, mediump > mediump_f64mat4
Medium double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:578
-
vec< 4, u8, mediump > mediump_u8vec4
Medium qualifier 8 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:332
-
vec< 3, double, highp > highp_dvec3
3 components vector of high double-qualifier floating-point numbers.
-
mat< 3, 4, f32, lowp > lowp_f32mat3x4
Low single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:675
-
double mediump_float64_t
Medium 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:174
-
mat< 2, 2, float, highp > highp_mat2x2
2 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...
-
mat< 4, 3, float, lowp > lowp_mat4x3
4 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...
-
vec< 2, float, highp > highp_fvec2
High Single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:437
-
uint16 u16
Default qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:106
-
int64 lowp_i64
Low qualifier 64 bit signed integer type.
Definition: fwd.hpp:73
-
vec< 1, unsigned int, lowp > lowp_uvec1
1 component vector of unsigned integer values.
-
vec< 2, int, defaultp > ivec2
2 components vector of signed integer numbers.
Definition: vector_int2.hpp:15
-
mat< 4, 4, f32, defaultp > f32mat4
Single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:554
-
mat< 4, 2, f32, mediump > mediump_fmat4x2
Medium single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:646
-
mat< 2, 2, f64, lowp > lowp_f64mat2
Low double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:572
-
int8 mediump_int8_t
Medium qualifier 8 bit signed integer type.
Definition: fwd.hpp:41
-
mat< 3, 3, f32, lowp > lowp_fmat3x3
Low single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:634
-
double lowp_float64_t
Low 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:173
-
int16 highp_int16_t
High qualifier 16 bit signed integer type.
Definition: fwd.hpp:56
-
mat< 3, 3, f32, highp > highp_fmat3x3
High single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:654
-
mat< 4, 4, double, defaultp > dmat4
4 columns of 4 components matrix of double-precision floating-point numbers.
-
vec< 1, i64, defaultp > i64vec1
64 bit signed integer scalar type.
Definition: fwd.hpp:297
-
uint32 lowp_u32
Low qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:117
-
mat< 4, 3, float, mediump > mediump_mat4x3
4 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...
-
vec< 1, u8, lowp > lowp_u8vec1
Low qualifier 8 bit unsigned integer scalar type.
Definition: fwd.hpp:324
-
vec< 3, i64, mediump > mediump_i64vec3
Medium qualifier 64 bit signed integer vector of 3 components type.
Definition: fwd.hpp:289
-
vec< 1, int, defaultp > ivec1
1 component vector of signed integer numbers.
Definition: vector_int1.hpp:28
-
qua< f32, highp > highp_f32quat
High single-qualifier floating-point quaternion.
Definition: fwd.hpp:804
-
uint16 highp_u16
High qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:105
-
vec< 1, f32, defaultp > fvec1
Single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:441
-
mat< 3, 2, float, mediump > mediump_mat3x2
3 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...
-
vec< 2, bool, lowp > lowp_bvec2
2 components vector of low qualifier bool numbers.
-
vec< 2, u8, mediump > mediump_u8vec2
Medium qualifier 8 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:330
-
int32 lowp_int32_t
Low qualifier 32 bit signed integer type.
Definition: fwd.hpp:68
-
vec< 1, u16, lowp > lowp_u16vec1
Low qualifier 16 bit unsigned integer scalar type.
Definition: fwd.hpp:344
-
mat< 4, 4, f32, highp > highp_fmat4x4
High single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:658
-
mat< 3, 4, f32, highp > highp_f32mat3x4
High single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:695
-
vec< 3, bool, defaultp > bvec3
3 components vector of boolean.
-
vec< 2, f32, defaultp > f32vec2
Single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:462
-
vec< 3, u16, highp > highp_u16vec3
High qualifier 16 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:356
-
float mediump_float32_t
Medium 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:158
-
mat< 2, 2, f32, defaultp > fmat2x2
Single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:660
-
float mediump_f32
Medium 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:148
-
mat< 4, 4, f32, mediump > mediump_f32mat4x4
Medium single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:688
-
qua< float, lowp > lowp_quat
Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...
-
vec< 2, f32, mediump > mediump_f32vec2
Medium single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:452
-
int8 lowp_int8
Low qualifier 8 bit signed integer type.
Definition: fwd.hpp:36
-
mat< 2, 3, float, defaultp > mat2x3
2 columns of 3 components matrix of single-precision floating-point numbers.
-
vec< 1, f64, lowp > lowp_f64vec1
Low double-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:486
-
mat< 3, 2, f32, highp > highp_f32mat3x2
High single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:693
-
mat< 3, 2, f64, mediump > mediump_f64mat3x2
Medium double-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:763
-
mat< 3, 3, double, mediump > mediump_dmat3
3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
vec< 3, u8, mediump > mediump_u8vec3
Medium qualifier 8 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:331
-
mat< 2, 3, double, defaultp > dmat2x3
2 columns of 3 components matrix of double-precision floating-point numbers.
-
mat< 4, 4, f64, lowp > lowp_f64mat4x4
Low double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:758
-
vec< 1, i16, lowp > lowp_i16vec1
Low qualifier 16 bit signed integer scalar type.
Definition: fwd.hpp:242
-
vec< 3, double, defaultp > dvec3
3 components vector of double-precision floating-point numbers.
-
mat< 2, 4, double, lowp > lowp_dmat2x4
2 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...
-
int8 lowp_int8_t
Low qualifier 8 bit signed integer type.
Definition: fwd.hpp:40
-
vec< 2, u32, lowp > lowp_u32vec2
Low qualifier 32 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:365
-
mat< 2, 4, f32, mediump > mediump_f32mat2x4
Medium single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:682
-
mat< 4, 3, f64, defaultp > f64mat4x3
Double-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:785
-
vec< 2, i64, highp > highp_i64vec2
High qualifier 64 bit signed integer vector of 2 components type.
Definition: fwd.hpp:293
-
mat< 4, 4, f32, mediump > mediump_f32mat4
Medium single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:546
-
mat< 3, 2, float, highp > highp_mat3x2
3 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...
-
mat< 4, 4, float, highp > highp_mat4x4
4 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...
-
vec< 2, double, mediump > mediump_dvec2
2 components vector of medium double-qualifier floating-point numbers.
-
mat< 2, 2, double, lowp > lowp_dmat2x2
2 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...
-
int64 i64
64 bit signed integer type.
Definition: fwd.hpp:76
-
double f64
Default 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:166
-
vec< 3, bool, lowp > lowp_bvec3
3 components vector of low qualifier bool numbers.
-
mat< 3, 4, float, lowp > lowp_mat3x4
3 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...
-
mat< 4, 4, float, lowp > lowp_mat4x4
4 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...
-
vec< 1, float, highp > highp_vec1
1 component vector of single-precision floating-point numbers using high precision arithmetic in term...
-
vec< 1, f32, mediump > mediump_f32vec1
Medium single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:451
-
mat< 3, 4, f32, mediump > mediump_f32mat3x4
Medium single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:685
-
mat< 2, 2, f32, highp > highp_fmat2
High single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:532
-
vec< 2, unsigned int, highp > highp_uvec2
2 components vector of high qualifier unsigned integer numbers.
-
vec< 3, f32, highp > highp_f32vec3
High single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:458
-
mat< 2, 2, float, mediump > mediump_mat2x2
2 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...
-
vec< 4, i8, mediump > mediump_i8vec4
Medium qualifier 8 bit signed integer vector of 4 components type.
Definition: fwd.hpp:230
-
float lowp_float32
Low 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:152
-
vec< 2, u32, defaultp > u32vec2
Default qualifier 32 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:380
-
vec< 2, unsigned int, mediump > mediump_uvec2
2 components vector of medium qualifier unsigned integer numbers.
-
qua< float, defaultp > quat
Quaternion of single-precision floating-point numbers.
-
vec< 2, double, highp > highp_dvec2
2 components vector of high double-qualifier floating-point numbers.
-
vec< 4, float, mediump > mediump_fvec4
Medium Single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:434
-
int32 mediump_int32
Medium qualifier 32 bit signed integer type.
Definition: fwd.hpp:65
-
vec< 2, i64, defaultp > i64vec2
64 bit signed integer vector of 2 components type.
Definition: fwd.hpp:298
-
int16 i16
16 bit signed integer type.
Definition: fwd.hpp:48
-
vec< 4, double, defaultp > dvec4
4 components vector of double-precision floating-point numbers.
-
mat< 4, 4, f32, defaultp > fmat4x4
Single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:668
-
mat< 2, 2, float, mediump > mediump_mat2
2 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...
-
qua< f64, lowp > lowp_f64quat
Low double-qualifier floating-point quaternion.
Definition: fwd.hpp:812
-
mat< 2, 2, float, defaultp > mat2
2 columns of 2 components matrix of single-precision floating-point numbers.
-
mat< 3, 2, f32, defaultp > fmat3x2
Single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:661
-
mat< 4, 3, double, defaultp > dmat4x3
4 columns of 3 components matrix of double-precision floating-point numbers.
-
mat< 4, 2, double, highp > highp_dmat4x2
4 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
vec< 4, u16, defaultp > u16vec4
Default qualifier 16 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:362
-
vec< 2, u16, defaultp > u16vec2
Default qualifier 16 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:360
-
uint8 mediump_u8
Medium qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:90
-
mat< 2, 2, f32, lowp > lowp_fmat2x2
Low single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:630
-
vec< 4, i8, highp > highp_i8vec4
High qualifier 8 bit signed integer vector of 4 components type.
Definition: fwd.hpp:235
-
vec< 4, u64, lowp > lowp_u64vec4
Low qualifier 64 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:387
-
vec< 2, i64, mediump > mediump_i64vec2
Medium qualifier 64 bit signed integer vector of 2 components type.
Definition: fwd.hpp:288
-
mat< 4, 2, f64, highp > highp_f64mat4x2
High double-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:776
-
mat< 4, 4, float, highp > highp_mat4
4 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...
-
int16 mediump_int16_t
Medium qualifier 16 bit signed integer type.
Definition: fwd.hpp:55
-
int8 lowp_i8
Low qualifier 8 bit signed integer type.
Definition: fwd.hpp:31
-
mat< 4, 2, float, highp > highp_mat4x2
4 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...
-
vec< 3, i64, defaultp > i64vec3
64 bit signed integer vector of 3 components type.
Definition: fwd.hpp:299
-
vec< 2, i32, lowp > lowp_i32vec2
Low qualifier 32 bit signed integer vector of 2 components type.
Definition: fwd.hpp:263
-
qua< f64, highp > highp_f64quat
High double-qualifier floating-point quaternion.
Definition: fwd.hpp:814
-
mat< 3, 3, float, defaultp > mat3
3 columns of 3 components matrix of single-precision floating-point numbers.
-
vec< 2, f64, mediump > mediump_f64vec2
Medium double-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:492
-
uint16 highp_uint16_t
High qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:114
-
vec< 1, float, lowp > lowp_fvec1
Low single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:426
-
int8 i8
8 bit signed integer type.
Definition: fwd.hpp:34
-
uint64 mediump_uint64_t
Medium qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:141
-
vec< 1, u64, mediump > mediump_u64vec1
Medium qualifier 64 bit unsigned integer scalar type.
Definition: fwd.hpp:389
-
mat< 2, 2, f32, mediump > mediump_f32mat2
Medium single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:544
-
vec< 4, int, mediump > mediump_ivec4
4 components vector of medium qualifier signed integer numbers.
-
mat< 2, 4, float, highp > highp_mat2x4
2 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...
-
uint8 mediump_uint8_t
Medium qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:99
-
Definition: common.hpp:20
-
double mediump_f64
Medium 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:164
-
vec< 1, float, mediump > mediump_fvec1
Medium single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:431
-
uint16 mediump_uint16
Medium qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:109
-
vec< 4, u8, highp > highp_u8vec4
High qualifier 8 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:337
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00036.html b/tests/OpenGL/package/glm/doc/api/a00036.html deleted file mode 100644 index e9fca8f8..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00036.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - -0.9.9 API documentation: geometric.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
geometric.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > cross (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)
 Returns the cross product of x and y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T distance (vec< L, T, Q > const &p0, vec< L, T, Q > const &p1)
 Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T dot (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the dot product of x and y, i.e., result = x * y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > faceforward (vec< L, T, Q > const &N, vec< L, T, Q > const &I, vec< L, T, Q > const &Nref)
 If dot(Nref, I) < 0.0, return N, otherwise, return -N. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T length (vec< L, T, Q > const &x)
 Returns the length of x, i.e., sqrt(x * x). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > normalize (vec< L, T, Q > const &x)
 Returns a vector in the same direction as x but with length of 1. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > reflect (vec< L, T, Q > const &I, vec< L, T, Q > const &N)
 For the incident vector I and surface orientation N, returns the reflection direction : result = I - 2.0 * dot(N, I) * N. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > refract (vec< L, T, Q > const &I, vec< L, T, Q > const &N, T eta)
 For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00036_source.html b/tests/OpenGL/package/glm/doc/api/a00036_source.html deleted file mode 100644 index 2115bb4c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00036_source.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -0.9.9 API documentation: geometric.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
geometric.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 #include "detail/type_vec3.hpp"
-
16 
-
17 namespace glm
-
18 {
-
21 
-
29  template<length_t L, typename T, qualifier Q>
-
30  GLM_FUNC_DECL T length(vec<L, T, Q> const& x);
-
31 
-
39  template<length_t L, typename T, qualifier Q>
-
40  GLM_FUNC_DECL T distance(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1);
-
41 
-
49  template<length_t L, typename T, qualifier Q>
-
50  GLM_FUNC_DECL T dot(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
51 
-
58  template<typename T, qualifier Q>
-
59  GLM_FUNC_DECL vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y);
-
60 
-
69  template<length_t L, typename T, qualifier Q>
-
70  GLM_FUNC_DECL vec<L, T, Q> normalize(vec<L, T, Q> const& x);
-
71 
-
79  template<length_t L, typename T, qualifier Q>
-
80  GLM_FUNC_DECL vec<L, T, Q> faceforward(
-
81  vec<L, T, Q> const& N,
-
82  vec<L, T, Q> const& I,
-
83  vec<L, T, Q> const& Nref);
-
84 
-
93  template<length_t L, typename T, qualifier Q>
-
94  GLM_FUNC_DECL vec<L, T, Q> reflect(
-
95  vec<L, T, Q> const& I,
-
96  vec<L, T, Q> const& N);
-
97 
-
107  template<length_t L, typename T, qualifier Q>
-
108  GLM_FUNC_DECL vec<L, T, Q> refract(
-
109  vec<L, T, Q> const& I,
-
110  vec<L, T, Q> const& N,
-
111  T eta);
-
112 
-
114 }//namespace glm
-
115 
-
116 #include "detail/func_geometric.inl"
-
GLM_FUNC_DECL vec< L, T, Q > reflect(vec< L, T, Q > const &I, vec< L, T, Q > const &N)
For the incident vector I and surface orientation N, returns the reflection direction : result = I - ...
-
GLM_FUNC_DECL vec< L, T, Q > faceforward(vec< L, T, Q > const &N, vec< L, T, Q > const &I, vec< L, T, Q > const &Nref)
If dot(Nref, I) < 0.0, return N, otherwise, return -N.
-
GLM_FUNC_DECL T length(vec< L, T, Q > const &x)
Returns the length of x, i.e., sqrt(x * x).
-
GLM_FUNC_DECL vec< 3, T, Q > cross(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)
Returns the cross product of x and y.
-
GLM_FUNC_DECL vec< L, T, Q > refract(vec< L, T, Q > const &I, vec< L, T, Q > const &N, T eta)
For the incident vector I and surface normal N, and the ratio of indices of refraction eta...
-
GLM_FUNC_DECL vec< L, T, Q > normalize(vec< L, T, Q > const &x)
Returns a vector in the same direction as x but with length of 1.
-
Core features
-
GLM_FUNC_DECL T distance(vec< L, T, Q > const &p0, vec< L, T, Q > const &p1)
Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).
-
GLM_FUNC_DECL T dot(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Returns the dot product of x and y, i.e., result = x * y.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00037.html b/tests/OpenGL/package/glm/doc/api/a00037.html deleted file mode 100644 index b1a7039b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00037.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: glm.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
glm.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file glm.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00037_source.html b/tests/OpenGL/package/glm/doc/api/a00037_source.html deleted file mode 100644 index 775648f2..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00037_source.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - -0.9.9 API documentation: glm.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
glm.hpp
-
-
-Go to the documentation of this file.
1 
-
103 #include "detail/_fixes.hpp"
-
104 
-
105 #include "detail/setup.hpp"
-
106 
-
107 #pragma once
-
108 
-
109 #include <cmath>
-
110 #include <climits>
-
111 #include <cfloat>
-
112 #include <limits>
-
113 #include <cassert>
-
114 #include "fwd.hpp"
-
115 
-
116 #include "vec2.hpp"
-
117 #include "vec3.hpp"
-
118 #include "vec4.hpp"
-
119 #include "mat2x2.hpp"
-
120 #include "mat2x3.hpp"
-
121 #include "mat2x4.hpp"
-
122 #include "mat3x2.hpp"
-
123 #include "mat3x3.hpp"
-
124 #include "mat3x4.hpp"
-
125 #include "mat4x2.hpp"
-
126 #include "mat4x3.hpp"
-
127 #include "mat4x4.hpp"
-
128 
-
129 #include "trigonometric.hpp"
-
130 #include "exponential.hpp"
-
131 #include "common.hpp"
-
132 #include "packing.hpp"
-
133 #include "geometric.hpp"
-
134 #include "matrix.hpp"
-
135 #include "vector_relational.hpp"
-
136 #include "integer.hpp"
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
Core features
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00038.html b/tests/OpenGL/package/glm/doc/api/a00038.html deleted file mode 100644 index 9854848c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00038.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - -0.9.9 API documentation: gradient_paint.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
gradient_paint.hpp File Reference
-
-
- -

GLM_GTX_gradient_paint -More...

- -

Go to the source code of this file.

- - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL T linearGradient (vec< 2, T, Q > const &Point0, vec< 2, T, Q > const &Point1, vec< 2, T, Q > const &Position)
 Return a color from a linear gradient. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T radialGradient (vec< 2, T, Q > const &Center, T const &Radius, vec< 2, T, Q > const &Focal, vec< 2, T, Q > const &Position)
 Return a color from a radial gradient. More...
 
-

Detailed Description

-

GLM_GTX_gradient_paint

-
See also
Core features (dependence)
-
-GLM_GTX_optimum_pow (dependence)
- -

Definition in file gradient_paint.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00038_source.html b/tests/OpenGL/package/glm/doc/api/a00038_source.html deleted file mode 100644 index 0e82da14..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00038_source.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - -0.9.9 API documentation: gradient_paint.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
gradient_paint.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../glm.hpp"
-
18 #include "../gtx/optimum_pow.hpp"
-
19 
-
20 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
21 # ifndef GLM_ENABLE_EXPERIMENTAL
-
22 # pragma message("GLM: GLM_GTX_gradient_paint is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
23 # else
-
24 # pragma message("GLM: GLM_GTX_gradient_paint extension included")
-
25 # endif
-
26 #endif
-
27 
-
28 namespace glm
-
29 {
-
32 
-
35  template<typename T, qualifier Q>
-
36  GLM_FUNC_DECL T radialGradient(
-
37  vec<2, T, Q> const& Center,
-
38  T const& Radius,
-
39  vec<2, T, Q> const& Focal,
-
40  vec<2, T, Q> const& Position);
-
41 
-
44  template<typename T, qualifier Q>
-
45  GLM_FUNC_DECL T linearGradient(
-
46  vec<2, T, Q> const& Point0,
-
47  vec<2, T, Q> const& Point1,
-
48  vec<2, T, Q> const& Position);
-
49 
-
51 }// namespace glm
-
52 
-
53 #include "gradient_paint.inl"
-
GLM_FUNC_DECL T radialGradient(vec< 2, T, Q > const &Center, T const &Radius, vec< 2, T, Q > const &Focal, vec< 2, T, Q > const &Position)
Return a color from a radial gradient.
-
GLM_FUNC_DECL T linearGradient(vec< 2, T, Q > const &Point0, vec< 2, T, Q > const &Point1, vec< 2, T, Q > const &Position)
Return a color from a linear gradient.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00039.html b/tests/OpenGL/package/glm/doc/api/a00039.html deleted file mode 100644 index 9959600b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00039.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: handed_coordinate_space.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
handed_coordinate_space.hpp File Reference
-
-
- -

GLM_GTX_handed_coordinate_space -More...

- -

Go to the source code of this file.

- - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL bool leftHanded (vec< 3, T, Q > const &tangent, vec< 3, T, Q > const &binormal, vec< 3, T, Q > const &normal)
 Return if a trihedron left handed or not. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool rightHanded (vec< 3, T, Q > const &tangent, vec< 3, T, Q > const &binormal, vec< 3, T, Q > const &normal)
 Return if a trihedron right handed or not. More...
 
-

Detailed Description

-

GLM_GTX_handed_coordinate_space

-
See also
Core features (dependence)
- -

Definition in file handed_coordinate_space.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00039_source.html b/tests/OpenGL/package/glm/doc/api/a00039_source.html deleted file mode 100644 index aaf7013f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00039_source.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -0.9.9 API documentation: handed_coordinate_space.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
handed_coordinate_space.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_handed_coordinate_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_handed_coordinate_space extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
33  template<typename T, qualifier Q>
-
34  GLM_FUNC_DECL bool rightHanded(
-
35  vec<3, T, Q> const& tangent,
-
36  vec<3, T, Q> const& binormal,
-
37  vec<3, T, Q> const& normal);
-
38 
-
41  template<typename T, qualifier Q>
-
42  GLM_FUNC_DECL bool leftHanded(
-
43  vec<3, T, Q> const& tangent,
-
44  vec<3, T, Q> const& binormal,
-
45  vec<3, T, Q> const& normal);
-
46 
-
48 }// namespace glm
-
49 
-
50 #include "handed_coordinate_space.inl"
-
GLM_FUNC_DECL bool leftHanded(vec< 3, T, Q > const &tangent, vec< 3, T, Q > const &binormal, vec< 3, T, Q > const &normal)
Return if a trihedron left handed or not.
-
GLM_FUNC_DECL bool rightHanded(vec< 3, T, Q > const &tangent, vec< 3, T, Q > const &binormal, vec< 3, T, Q > const &normal)
Return if a trihedron right handed or not.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00040.html b/tests/OpenGL/package/glm/doc/api/a00040.html deleted file mode 100644 index ba2c95e1..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00040.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -0.9.9 API documentation: hash.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
hash.hpp File Reference
-
-
- -

GLM_GTX_hash -More...

- -

Go to the source code of this file.

-

Detailed Description

-

GLM_GTX_hash

-
See also
Core features (dependence)
- -

Definition in file hash.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00040_source.html b/tests/OpenGL/package/glm/doc/api/a00040_source.html deleted file mode 100644 index 14bcfe6a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00040_source.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - -0.9.9 API documentation: hash.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
hash.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
16 # ifndef GLM_ENABLE_EXPERIMENTAL
-
17 # pragma message("GLM: GLM_GTX_hash is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
18 # else
-
19 # pragma message("GLM: GLM_GTX_hash extension included")
-
20 # endif
-
21 #endif
-
22 
-
23 #include <functional>
-
24 
-
25 #include "../vec2.hpp"
-
26 #include "../vec3.hpp"
-
27 #include "../vec4.hpp"
-
28 #include "../gtc/vec1.hpp"
-
29 
-
30 #include "../gtc/quaternion.hpp"
-
31 #include "../gtx/dual_quaternion.hpp"
-
32 
-
33 #include "../mat2x2.hpp"
-
34 #include "../mat2x3.hpp"
-
35 #include "../mat2x4.hpp"
-
36 
-
37 #include "../mat3x2.hpp"
-
38 #include "../mat3x3.hpp"
-
39 #include "../mat3x4.hpp"
-
40 
-
41 #include "../mat4x2.hpp"
-
42 #include "../mat4x3.hpp"
-
43 #include "../mat4x4.hpp"
-
44 
-
45 #if !GLM_HAS_CXX11_STL
-
46 # error "GLM_GTX_hash requires C++11 standard library support"
-
47 #endif
-
48 
-
49 namespace std
-
50 {
-
51  template<typename T, glm::qualifier Q>
-
52  struct hash<glm::vec<1, T,Q> >
-
53  {
-
54  GLM_FUNC_DECL size_t operator()(glm::vec<1, T, Q> const& v) const;
-
55  };
-
56 
-
57  template<typename T, glm::qualifier Q>
-
58  struct hash<glm::vec<2, T,Q> >
-
59  {
-
60  GLM_FUNC_DECL size_t operator()(glm::vec<2, T, Q> const& v) const;
-
61  };
-
62 
-
63  template<typename T, glm::qualifier Q>
-
64  struct hash<glm::vec<3, T,Q> >
-
65  {
-
66  GLM_FUNC_DECL size_t operator()(glm::vec<3, T, Q> const& v) const;
-
67  };
-
68 
-
69  template<typename T, glm::qualifier Q>
-
70  struct hash<glm::vec<4, T,Q> >
-
71  {
-
72  GLM_FUNC_DECL size_t operator()(glm::vec<4, T, Q> const& v) const;
-
73  };
-
74 
-
75  template<typename T, glm::qualifier Q>
-
76  struct hash<glm::qua<T,Q>>
-
77  {
-
78  GLM_FUNC_DECL size_t operator()(glm::qua<T, Q> const& q) const;
-
79  };
-
80 
-
81  template<typename T, glm::qualifier Q>
-
82  struct hash<glm::tdualquat<T,Q> >
-
83  {
-
84  GLM_FUNC_DECL size_t operator()(glm::tdualquat<T,Q> const& q) const;
-
85  };
-
86 
-
87  template<typename T, glm::qualifier Q>
-
88  struct hash<glm::mat<2, 2, T,Q> >
-
89  {
-
90  GLM_FUNC_DECL size_t operator()(glm::mat<2, 2, T,Q> const& m) const;
-
91  };
-
92 
-
93  template<typename T, glm::qualifier Q>
-
94  struct hash<glm::mat<2, 3, T,Q> >
-
95  {
-
96  GLM_FUNC_DECL size_t operator()(glm::mat<2, 3, T,Q> const& m) const;
-
97  };
-
98 
-
99  template<typename T, glm::qualifier Q>
-
100  struct hash<glm::mat<2, 4, T,Q> >
-
101  {
-
102  GLM_FUNC_DECL size_t operator()(glm::mat<2, 4, T,Q> const& m) const;
-
103  };
-
104 
-
105  template<typename T, glm::qualifier Q>
-
106  struct hash<glm::mat<3, 2, T,Q> >
-
107  {
-
108  GLM_FUNC_DECL size_t operator()(glm::mat<3, 2, T,Q> const& m) const;
-
109  };
-
110 
-
111  template<typename T, glm::qualifier Q>
-
112  struct hash<glm::mat<3, 3, T,Q> >
-
113  {
-
114  GLM_FUNC_DECL size_t operator()(glm::mat<3, 3, T,Q> const& m) const;
-
115  };
-
116 
-
117  template<typename T, glm::qualifier Q>
-
118  struct hash<glm::mat<3, 4, T,Q> >
-
119  {
-
120  GLM_FUNC_DECL size_t operator()(glm::mat<3, 4, T,Q> const& m) const;
-
121  };
-
122 
-
123  template<typename T, glm::qualifier Q>
-
124  struct hash<glm::mat<4, 2, T,Q> >
-
125  {
-
126  GLM_FUNC_DECL size_t operator()(glm::mat<4, 2, T,Q> const& m) const;
-
127  };
-
128 
-
129  template<typename T, glm::qualifier Q>
-
130  struct hash<glm::mat<4, 3, T,Q> >
-
131  {
-
132  GLM_FUNC_DECL size_t operator()(glm::mat<4, 3, T,Q> const& m) const;
-
133  };
-
134 
-
135  template<typename T, glm::qualifier Q>
-
136  struct hash<glm::mat<4, 4, T,Q> >
-
137  {
-
138  GLM_FUNC_DECL size_t operator()(glm::mat<4, 4, T,Q> const& m) const;
-
139  };
-
140 } // namespace std
-
141 
-
142 #include "hash.inl"
-
Definition: hash.hpp:49
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00041.html b/tests/OpenGL/package/glm/doc/api/a00041.html deleted file mode 100644 index 2996ba25..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00041.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - -0.9.9 API documentation: integer.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
gtc/integer.hpp File Reference
-
-
- -

GLM_GTC_integer -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, int, Q > iround (vec< L, T, Q > const &x)
 Returns a value equal to the nearest integer to x. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType log2 (genIUType x)
 Returns the log2 of x for integer values. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, uint, Q > uround (vec< L, T, Q > const &x)
 Returns a value equal to the nearest integer to x. More...
 
-

Detailed Description

-

GLM_GTC_integer

-
See also
Core features (dependence)
-
-GLM_GTC_integer (dependence)
- -

Definition in file gtc/integer.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00041_source.html b/tests/OpenGL/package/glm/doc/api/a00041_source.html deleted file mode 100644 index ac897205..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00041_source.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - -0.9.9 API documentation: integer.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
gtc/integer.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependencies
-
17 #include "../detail/setup.hpp"
-
18 #include "../detail/qualifier.hpp"
-
19 #include "../common.hpp"
-
20 #include "../integer.hpp"
-
21 #include "../exponential.hpp"
-
22 #include <limits>
-
23 
-
24 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
25 # pragma message("GLM: GLM_GTC_integer extension included")
-
26 #endif
-
27 
-
28 namespace glm
-
29 {
-
32 
-
35  template<typename genIUType>
-
36  GLM_FUNC_DECL genIUType log2(genIUType x);
-
37 
-
47  template<length_t L, typename T, qualifier Q>
-
48  GLM_FUNC_DECL vec<L, int, Q> iround(vec<L, T, Q> const& x);
-
49 
-
59  template<length_t L, typename T, qualifier Q>
-
60  GLM_FUNC_DECL vec<L, uint, Q> uround(vec<L, T, Q> const& x);
-
61 
-
63 } //namespace glm
-
64 
-
65 #include "integer.inl"
-
GLM_FUNC_DECL vec< L, uint, Q > uround(vec< L, T, Q > const &x)
Returns a value equal to the nearest integer to x.
-
GLM_FUNC_DECL genIUType log2(genIUType x)
Returns the log2 of x for integer values.
-
GLM_FUNC_DECL vec< L, int, Q > iround(vec< L, T, Q > const &x)
Returns a value equal to the nearest integer to x.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00042.html b/tests/OpenGL/package/glm/doc/api/a00042.html deleted file mode 100644 index 8779f988..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00042.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - -0.9.9 API documentation: integer.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
gtx/integer.hpp File Reference
-
-
- -

GLM_GTX_integer -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef signed int sint
 32bit signed integer. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType factorial (genType const &x)
 Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension. More...
 
GLM_FUNC_DECL unsigned int floor_log2 (unsigned int x)
 Returns the floor log2 of x. More...
 
GLM_FUNC_DECL int mod (int x, int y)
 Modulus. More...
 
GLM_FUNC_DECL uint mod (uint x, uint y)
 Modulus. More...
 
GLM_FUNC_DECL uint nlz (uint x)
 Returns the number of leading zeros. More...
 
GLM_FUNC_DECL int pow (int x, uint y)
 Returns x raised to the y power. More...
 
GLM_FUNC_DECL uint pow (uint x, uint y)
 Returns x raised to the y power. More...
 
GLM_FUNC_DECL int sqrt (int x)
 Returns the positive square root of x. More...
 
GLM_FUNC_DECL uint sqrt (uint x)
 Returns the positive square root of x. More...
 
-

Detailed Description

-

GLM_GTX_integer

-
See also
Core features (dependence)
- -

Definition in file gtx/integer.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00042_source.html b/tests/OpenGL/package/glm/doc/api/a00042_source.html deleted file mode 100644 index 9093e881..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00042_source.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -0.9.9 API documentation: integer.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
gtx/integer.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 #include "../gtc/integer.hpp"
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # ifndef GLM_ENABLE_EXPERIMENTAL
-
21 # pragma message("GLM: GLM_GTX_integer is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
22 # else
-
23 # pragma message("GLM: GLM_GTX_integer extension included")
-
24 # endif
-
25 #endif
-
26 
-
27 namespace glm
-
28 {
-
31 
-
34  GLM_FUNC_DECL int pow(int x, uint y);
-
35 
-
38  GLM_FUNC_DECL int sqrt(int x);
-
39 
-
42  GLM_FUNC_DECL unsigned int floor_log2(unsigned int x);
-
43 
-
46  GLM_FUNC_DECL int mod(int x, int y);
-
47 
-
50  template<typename genType>
-
51  GLM_FUNC_DECL genType factorial(genType const& x);
-
52 
-
55  typedef signed int sint;
-
56 
-
59  GLM_FUNC_DECL uint pow(uint x, uint y);
-
60 
-
63  GLM_FUNC_DECL uint sqrt(uint x);
-
64 
-
67  GLM_FUNC_DECL uint mod(uint x, uint y);
-
68 
-
71  GLM_FUNC_DECL uint nlz(uint x);
-
72 
-
74 }//namespace glm
-
75 
-
76 #include "integer.inl"
-
GLM_FUNC_DECL uint nlz(uint x)
Returns the number of leading zeros.
-
GLM_FUNC_DECL uint mod(uint x, uint y)
Modulus.
-
GLM_FUNC_DECL unsigned int floor_log2(unsigned int x)
Returns the floor log2 of x.
-
signed int sint
32bit signed integer.
Definition: gtx/integer.hpp:55
-
GLM_FUNC_DECL genType factorial(genType const &x)
Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension...
-
GLM_FUNC_DECL uint pow(uint x, uint y)
Returns x raised to the y power.
-
GLM_FUNC_DECL uint sqrt(uint x)
Returns the positive square root of x.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00043.html b/tests/OpenGL/package/glm/doc/api/a00043.html deleted file mode 100644 index 02da2db6..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00043.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - -0.9.9 API documentation: integer.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
integer.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL int bitCount (genType v)
 Returns the number of bits set to 1 in the binary representation of value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, int, Q > bitCount (vec< L, T, Q > const &v)
 Returns the number of bits set to 1 in the binary representation of value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > bitfieldExtract (vec< L, T, Q > const &Value, int Offset, int Bits)
 Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of the result. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > bitfieldInsert (vec< L, T, Q > const &Base, vec< L, T, Q > const &Insert, int Offset, int Bits)
 Returns the insertion the bits least-significant bits of insert into base. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > bitfieldReverse (vec< L, T, Q > const &v)
 Returns the reversal of the bits of value. More...
 
template<typename genIUType >
GLM_FUNC_DECL int findLSB (genIUType x)
 Returns the bit number of the least significant bit set to 1 in the binary representation of value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, int, Q > findLSB (vec< L, T, Q > const &v)
 Returns the bit number of the least significant bit set to 1 in the binary representation of value. More...
 
template<typename genIUType >
GLM_FUNC_DECL int findMSB (genIUType x)
 Returns the bit number of the most significant bit in the binary representation of value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, int, Q > findMSB (vec< L, T, Q > const &v)
 Returns the bit number of the most significant bit in the binary representation of value. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL void imulExtended (vec< L, int, Q > const &x, vec< L, int, Q > const &y, vec< L, int, Q > &msb, vec< L, int, Q > &lsb)
 Multiplies 32-bit integers x and y, producing a 64-bit result. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, uint, Q > uaddCarry (vec< L, uint, Q > const &x, vec< L, uint, Q > const &y, vec< L, uint, Q > &carry)
 Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32). More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL void umulExtended (vec< L, uint, Q > const &x, vec< L, uint, Q > const &y, vec< L, uint, Q > &msb, vec< L, uint, Q > &lsb)
 Multiplies 32-bit integers x and y, producing a 64-bit result. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, uint, Q > usubBorrow (vec< L, uint, Q > const &x, vec< L, uint, Q > const &y, vec< L, uint, Q > &borrow)
 Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00043_source.html b/tests/OpenGL/package/glm/doc/api/a00043_source.html deleted file mode 100644 index 675e0f0c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00043_source.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - -0.9.9 API documentation: integer.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
integer.hpp
-
-
-Go to the documentation of this file.
1 
-
17 #pragma once
-
18 
-
19 #include "detail/qualifier.hpp"
-
20 #include "common.hpp"
-
21 #include "vector_relational.hpp"
-
22 
-
23 namespace glm
-
24 {
-
27 
-
36  template<length_t L, qualifier Q>
-
37  GLM_FUNC_DECL vec<L, uint, Q> uaddCarry(
-
38  vec<L, uint, Q> const& x,
-
39  vec<L, uint, Q> const& y,
-
40  vec<L, uint, Q> & carry);
-
41 
-
50  template<length_t L, qualifier Q>
-
51  GLM_FUNC_DECL vec<L, uint, Q> usubBorrow(
-
52  vec<L, uint, Q> const& x,
-
53  vec<L, uint, Q> const& y,
-
54  vec<L, uint, Q> & borrow);
-
55 
-
64  template<length_t L, qualifier Q>
-
65  GLM_FUNC_DECL void umulExtended(
-
66  vec<L, uint, Q> const& x,
-
67  vec<L, uint, Q> const& y,
-
68  vec<L, uint, Q> & msb,
-
69  vec<L, uint, Q> & lsb);
-
70 
-
79  template<length_t L, qualifier Q>
-
80  GLM_FUNC_DECL void imulExtended(
-
81  vec<L, int, Q> const& x,
-
82  vec<L, int, Q> const& y,
-
83  vec<L, int, Q> & msb,
-
84  vec<L, int, Q> & lsb);
-
85 
-
102  template<length_t L, typename T, qualifier Q>
-
103  GLM_FUNC_DECL vec<L, T, Q> bitfieldExtract(
-
104  vec<L, T, Q> const& Value,
-
105  int Offset,
-
106  int Bits);
-
107 
-
123  template<length_t L, typename T, qualifier Q>
-
124  GLM_FUNC_DECL vec<L, T, Q> bitfieldInsert(
-
125  vec<L, T, Q> const& Base,
-
126  vec<L, T, Q> const& Insert,
-
127  int Offset,
-
128  int Bits);
-
129 
-
139  template<length_t L, typename T, qualifier Q>
-
140  GLM_FUNC_DECL vec<L, T, Q> bitfieldReverse(vec<L, T, Q> const& v);
-
141 
-
148  template<typename genType>
-
149  GLM_FUNC_DECL int bitCount(genType v);
-
150 
-
158  template<length_t L, typename T, qualifier Q>
-
159  GLM_FUNC_DECL vec<L, int, Q> bitCount(vec<L, T, Q> const& v);
-
160 
-
169  template<typename genIUType>
-
170  GLM_FUNC_DECL int findLSB(genIUType x);
-
171 
-
181  template<length_t L, typename T, qualifier Q>
-
182  GLM_FUNC_DECL vec<L, int, Q> findLSB(vec<L, T, Q> const& v);
-
183 
-
193  template<typename genIUType>
-
194  GLM_FUNC_DECL int findMSB(genIUType x);
-
195 
-
206  template<length_t L, typename T, qualifier Q>
-
207  GLM_FUNC_DECL vec<L, int, Q> findMSB(vec<L, T, Q> const& v);
-
208 
-
210 }//namespace glm
-
211 
-
212 #include "detail/func_integer.inl"
-
Core features
-
GLM_FUNC_DECL vec< L, int, Q > findMSB(vec< L, T, Q > const &v)
Returns the bit number of the most significant bit in the binary representation of value...
-
GLM_FUNC_DECL void umulExtended(vec< L, uint, Q > const &x, vec< L, uint, Q > const &y, vec< L, uint, Q > &msb, vec< L, uint, Q > &lsb)
Multiplies 32-bit integers x and y, producing a 64-bit result.
-
GLM_FUNC_DECL void imulExtended(vec< L, int, Q > const &x, vec< L, int, Q > const &y, vec< L, int, Q > &msb, vec< L, int, Q > &lsb)
Multiplies 32-bit integers x and y, producing a 64-bit result.
-
GLM_FUNC_DECL vec< L, int, Q > bitCount(vec< L, T, Q > const &v)
Returns the number of bits set to 1 in the binary representation of value.
-
GLM_FUNC_DECL vec< L, uint, Q > uaddCarry(vec< L, uint, Q > const &x, vec< L, uint, Q > const &y, vec< L, uint, Q > &carry)
Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32).
-
GLM_FUNC_DECL vec< L, T, Q > bitfieldExtract(vec< L, T, Q > const &Value, int Offset, int Bits)
Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of...
-
GLM_FUNC_DECL vec< L, T, Q > bitfieldInsert(vec< L, T, Q > const &Base, vec< L, T, Q > const &Insert, int Offset, int Bits)
Returns the insertion the bits least-significant bits of insert into base.
-
Core features
-
GLM_FUNC_DECL vec< L, T, Q > bitfieldReverse(vec< L, T, Q > const &v)
Returns the reversal of the bits of value.
-
GLM_FUNC_DECL vec< L, uint, Q > usubBorrow(vec< L, uint, Q > const &x, vec< L, uint, Q > const &y, vec< L, uint, Q > &borrow)
Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise.
-
GLM_FUNC_DECL vec< L, int, Q > findLSB(vec< L, T, Q > const &v)
Returns the bit number of the least significant bit set to 1 in the binary representation of value...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00044.html b/tests/OpenGL/package/glm/doc/api/a00044.html deleted file mode 100644 index 393a1c87..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00044.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - -0.9.9 API documentation: intersect.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
intersect.hpp File Reference
-
-
- -

GLM_GTX_intersect -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL bool intersectLineSphere (genType const &point0, genType const &point1, genType const &sphereCenter, typename genType::value_type sphereRadius, genType &intersectionPosition1, genType &intersectionNormal1, genType &intersectionPosition2=genType(), genType &intersectionNormal2=genType())
 Compute the intersection of a line and a sphere. More...
 
template<typename genType >
GLM_FUNC_DECL bool intersectLineTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)
 Compute the intersection of a line and a triangle. More...
 
template<typename genType >
GLM_FUNC_DECL bool intersectRayPlane (genType const &orig, genType const &dir, genType const &planeOrig, genType const &planeNormal, typename genType::value_type &intersectionDistance)
 Compute the intersection of a ray and a plane. More...
 
template<typename genType >
GLM_FUNC_DECL bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, typename genType::value_type const sphereRadiusSquered, typename genType::value_type &intersectionDistance)
 Compute the intersection distance of a ray and a sphere. More...
 
template<typename genType >
GLM_FUNC_DECL bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)
 Compute the intersection of a ray and a sphere. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool intersectRayTriangle (vec< 3, T, Q > const &orig, vec< 3, T, Q > const &dir, vec< 3, T, Q > const &v0, vec< 3, T, Q > const &v1, vec< 3, T, Q > const &v2, vec< 2, T, Q > &baryPosition, T &distance)
 Compute the intersection of a ray and a triangle. More...
 
-

Detailed Description

-

GLM_GTX_intersect

-
See also
Core features (dependence)
-
-GLM_GTX_closest_point (dependence)
- -

Definition in file intersect.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00044_source.html b/tests/OpenGL/package/glm/doc/api/a00044_source.html deleted file mode 100644 index dd4a4fdc..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00044_source.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - -0.9.9 API documentation: intersect.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
intersect.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include <cfloat>
-
18 #include <limits>
-
19 #include "../glm.hpp"
-
20 #include "../geometric.hpp"
-
21 #include "../gtx/closest_point.hpp"
-
22 #include "../gtx/vector_query.hpp"
-
23 
-
24 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
25 # ifndef GLM_ENABLE_EXPERIMENTAL
-
26 # pragma message("GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
27 # else
-
28 # pragma message("GLM: GLM_GTX_closest_point extension included")
-
29 # endif
-
30 #endif
-
31 
-
32 namespace glm
-
33 {
-
36 
-
40  template<typename genType>
-
41  GLM_FUNC_DECL bool intersectRayPlane(
-
42  genType const& orig, genType const& dir,
-
43  genType const& planeOrig, genType const& planeNormal,
-
44  typename genType::value_type & intersectionDistance);
-
45 
-
49  template<typename T, qualifier Q>
-
50  GLM_FUNC_DECL bool intersectRayTriangle(
-
51  vec<3, T, Q> const& orig, vec<3, T, Q> const& dir,
-
52  vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, vec<3, T, Q> const& v2,
-
53  vec<2, T, Q>& baryPosition, T& distance);
-
54 
-
57  template<typename genType>
-
58  GLM_FUNC_DECL bool intersectLineTriangle(
-
59  genType const& orig, genType const& dir,
-
60  genType const& vert0, genType const& vert1, genType const& vert2,
-
61  genType & position);
-
62 
-
66  template<typename genType>
-
67  GLM_FUNC_DECL bool intersectRaySphere(
-
68  genType const& rayStarting, genType const& rayNormalizedDirection,
-
69  genType const& sphereCenter, typename genType::value_type const sphereRadiusSquered,
-
70  typename genType::value_type & intersectionDistance);
-
71 
-
74  template<typename genType>
-
75  GLM_FUNC_DECL bool intersectRaySphere(
-
76  genType const& rayStarting, genType const& rayNormalizedDirection,
-
77  genType const& sphereCenter, const typename genType::value_type sphereRadius,
-
78  genType & intersectionPosition, genType & intersectionNormal);
-
79 
-
82  template<typename genType>
-
83  GLM_FUNC_DECL bool intersectLineSphere(
-
84  genType const& point0, genType const& point1,
-
85  genType const& sphereCenter, typename genType::value_type sphereRadius,
-
86  genType & intersectionPosition1, genType & intersectionNormal1,
-
87  genType & intersectionPosition2 = genType(), genType & intersectionNormal2 = genType());
-
88 
-
90 }//namespace glm
-
91 
-
92 #include "intersect.inl"
-
GLM_FUNC_DECL bool intersectRayTriangle(vec< 3, T, Q > const &orig, vec< 3, T, Q > const &dir, vec< 3, T, Q > const &v0, vec< 3, T, Q > const &v1, vec< 3, T, Q > const &v2, vec< 2, T, Q > &baryPosition, T &distance)
Compute the intersection of a ray and a triangle.
-
GLM_FUNC_DECL bool intersectRaySphere(genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)
Compute the intersection of a ray and a sphere.
-
GLM_FUNC_DECL bool intersectRayPlane(genType const &orig, genType const &dir, genType const &planeOrig, genType const &planeNormal, typename genType::value_type &intersectionDistance)
Compute the intersection of a ray and a plane.
-
GLM_FUNC_DECL bool intersectLineTriangle(genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)
Compute the intersection of a line and a triangle.
-
GLM_FUNC_DECL bool intersectLineSphere(genType const &point0, genType const &point1, genType const &sphereCenter, typename genType::value_type sphereRadius, genType &intersectionPosition1, genType &intersectionNormal1, genType &intersectionPosition2=genType(), genType &intersectionNormal2=genType())
Compute the intersection of a line and a sphere.
-
GLM_FUNC_DECL T distance(vec< L, T, Q > const &p0, vec< L, T, Q > const &p1)
Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00045.html b/tests/OpenGL/package/glm/doc/api/a00045.html deleted file mode 100644 index a0bd7057..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00045.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - -0.9.9 API documentation: io.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
io.hpp File Reference
-
-
- -

GLM_GTX_io -More...

- -

Go to the source code of this file.

-

Detailed Description

-

GLM_GTX_io

-
Author
Jan P Springer (regni.nosp@m.rpsj.nosp@m.@gmai.nosp@m.l.co.nosp@m.m)
-
See also
Core features (dependence)
-
-GLM_GTC_matrix_access (dependence)
-
-GLM_GTC_quaternion (dependence)
- -

Definition in file io.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00045_source.html b/tests/OpenGL/package/glm/doc/api/a00045_source.html deleted file mode 100644 index 93b42287..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00045_source.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - -0.9.9 API documentation: io.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
io.hpp
-
-
-Go to the documentation of this file.
1 
-
20 #pragma once
-
21 
-
22 // Dependency:
-
23 #include "../glm.hpp"
-
24 #include "../gtx/quaternion.hpp"
-
25 
-
26 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
27 # ifndef GLM_ENABLE_EXPERIMENTAL
-
28 # pragma message("GLM: GLM_GTX_io is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
29 # else
-
30 # pragma message("GLM: GLM_GTX_io extension included")
-
31 # endif
-
32 #endif
-
33 
-
34 #include <iosfwd> // std::basic_ostream<> (fwd)
-
35 #include <locale> // std::locale, std::locale::facet, std::locale::id
-
36 #include <utility> // std::pair<>
-
37 
-
38 namespace glm
-
39 {
-
42 
-
43  namespace io
-
44  {
-
45  enum order_type { column_major, row_major};
-
46 
-
47  template<typename CTy>
-
48  class format_punct : public std::locale::facet
-
49  {
-
50  typedef CTy char_type;
-
51 
-
52  public:
-
53 
-
54  static std::locale::id id;
-
55 
-
56  bool formatted;
-
57  unsigned precision;
-
58  unsigned width;
-
59  char_type separator;
-
60  char_type delim_left;
-
61  char_type delim_right;
-
62  char_type space;
-
63  char_type newline;
-
64  order_type order;
-
65 
-
66  GLM_FUNC_DECL explicit format_punct(size_t a = 0);
-
67  GLM_FUNC_DECL explicit format_punct(format_punct const&);
-
68  };
-
69 
-
70  template<typename CTy, typename CTr = std::char_traits<CTy> >
-
71  class basic_state_saver {
-
72 
-
73  public:
-
74 
-
75  GLM_FUNC_DECL explicit basic_state_saver(std::basic_ios<CTy,CTr>&);
-
76  GLM_FUNC_DECL ~basic_state_saver();
-
77 
-
78  private:
-
79 
-
80  typedef ::std::basic_ios<CTy,CTr> state_type;
-
81  typedef typename state_type::char_type char_type;
-
82  typedef ::std::ios_base::fmtflags flags_type;
-
83  typedef ::std::streamsize streamsize_type;
-
84  typedef ::std::locale const locale_type;
-
85 
-
86  state_type& state_;
-
87  flags_type flags_;
-
88  streamsize_type precision_;
-
89  streamsize_type width_;
-
90  char_type fill_;
-
91  locale_type locale_;
-
92 
-
93  GLM_FUNC_DECL basic_state_saver& operator=(basic_state_saver const&);
-
94  };
-
95 
-
96  typedef basic_state_saver<char> state_saver;
-
97  typedef basic_state_saver<wchar_t> wstate_saver;
-
98 
-
99  template<typename CTy, typename CTr = std::char_traits<CTy> >
-
100  class basic_format_saver
-
101  {
-
102  public:
-
103 
-
104  GLM_FUNC_DECL explicit basic_format_saver(std::basic_ios<CTy,CTr>&);
-
105  GLM_FUNC_DECL ~basic_format_saver();
-
106 
-
107  private:
-
108 
-
109  basic_state_saver<CTy> const bss_;
-
110 
-
111  GLM_FUNC_DECL basic_format_saver& operator=(basic_format_saver const&);
-
112  };
-
113 
-
114  typedef basic_format_saver<char> format_saver;
-
115  typedef basic_format_saver<wchar_t> wformat_saver;
-
116 
-
117  struct precision
-
118  {
-
119  unsigned value;
-
120 
-
121  GLM_FUNC_DECL explicit precision(unsigned);
-
122  };
-
123 
-
124  struct width
-
125  {
-
126  unsigned value;
-
127 
-
128  GLM_FUNC_DECL explicit width(unsigned);
-
129  };
-
130 
-
131  template<typename CTy>
-
132  struct delimeter
-
133  {
-
134  CTy value[3];
-
135 
-
136  GLM_FUNC_DECL explicit delimeter(CTy /* left */, CTy /* right */, CTy /* separator */ = ',');
-
137  };
-
138 
-
139  struct order
-
140  {
-
141  order_type value;
-
142 
-
143  GLM_FUNC_DECL explicit order(order_type);
-
144  };
-
145 
-
146  // functions, inlined (inline)
-
147 
-
148  template<typename FTy, typename CTy, typename CTr>
-
149  FTy const& get_facet(std::basic_ios<CTy,CTr>&);
-
150  template<typename FTy, typename CTy, typename CTr>
-
151  std::basic_ios<CTy,CTr>& formatted(std::basic_ios<CTy,CTr>&);
-
152  template<typename FTy, typename CTy, typename CTr>
-
153  std::basic_ios<CTy,CTr>& unformattet(std::basic_ios<CTy,CTr>&);
-
154 
-
155  template<typename CTy, typename CTr>
-
156  std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, precision const&);
-
157  template<typename CTy, typename CTr>
-
158  std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, width const&);
-
159  template<typename CTy, typename CTr>
-
160  std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, delimeter<CTy> const&);
-
161  template<typename CTy, typename CTr>
-
162  std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, order const&);
-
163  }//namespace io
-
164 
-
165  template<typename CTy, typename CTr, typename T, qualifier Q>
-
166  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, qua<T, Q> const&);
-
167  template<typename CTy, typename CTr, typename T, qualifier Q>
-
168  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<1, T, Q> const&);
-
169  template<typename CTy, typename CTr, typename T, qualifier Q>
-
170  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<2, T, Q> const&);
-
171  template<typename CTy, typename CTr, typename T, qualifier Q>
-
172  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<3, T, Q> const&);
-
173  template<typename CTy, typename CTr, typename T, qualifier Q>
-
174  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<4, T, Q> const&);
-
175  template<typename CTy, typename CTr, typename T, qualifier Q>
-
176  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<2, 2, T, Q> const&);
-
177  template<typename CTy, typename CTr, typename T, qualifier Q>
-
178  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<2, 3, T, Q> const&);
-
179  template<typename CTy, typename CTr, typename T, qualifier Q>
-
180  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<2, 4, T, Q> const&);
-
181  template<typename CTy, typename CTr, typename T, qualifier Q>
-
182  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<3, 2, T, Q> const&);
-
183  template<typename CTy, typename CTr, typename T, qualifier Q>
-
184  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<3, 3, T, Q> const&);
-
185  template<typename CTy, typename CTr, typename T, qualifier Q>
-
186  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<3, 4, T, Q> const&);
-
187  template<typename CTy, typename CTr, typename T, qualifier Q>
-
188  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<4, 2, T, Q> const&);
-
189  template<typename CTy, typename CTr, typename T, qualifier Q>
-
190  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<4, 3, T, Q> const&);
-
191  template<typename CTy, typename CTr, typename T, qualifier Q>
-
192  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<4, 4, T, Q> const&);
-
193 
-
194  template<typename CTy, typename CTr, typename T, qualifier Q>
-
195  GLM_FUNC_DECL std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr> &,
-
196  std::pair<mat<4, 4, T, Q> const, mat<4, 4, T, Q> const> const&);
-
197 
-
199 }//namespace glm
-
200 
-
201 #include "io.inl"
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00046.html b/tests/OpenGL/package/glm/doc/api/a00046.html deleted file mode 100644 index 1f92ed35..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00046.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: log_base.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
log_base.hpp File Reference
-
-
- -

GLM_GTX_log_base -More...

- -

Go to the source code of this file.

- - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType log (genType const &x, genType const &base)
 Logarithm for any base. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > sign (vec< L, T, Q > const &x, vec< L, T, Q > const &base)
 Logarithm for any base. More...
 
-

Detailed Description

-

GLM_GTX_log_base

-
See also
Core features (dependence)
- -

Definition in file log_base.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00046_source.html b/tests/OpenGL/package/glm/doc/api/a00046_source.html deleted file mode 100644 index 4e8dc6db..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00046_source.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -0.9.9 API documentation: log_base.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
log_base.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_log_base is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_log_base extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
33  template<typename genType>
-
34  GLM_FUNC_DECL genType log(
-
35  genType const& x,
-
36  genType const& base);
-
37 
-
40  template<length_t L, typename T, qualifier Q>
-
41  GLM_FUNC_DECL vec<L, T, Q> sign(
-
42  vec<L, T, Q> const& x,
-
43  vec<L, T, Q> const& base);
-
44 
-
46 }//namespace glm
-
47 
-
48 #include "log_base.inl"
-
GLM_FUNC_DECL vec< L, T, Q > sign(vec< L, T, Q > const &x, vec< L, T, Q > const &base)
Logarithm for any base.
-
GLM_FUNC_DECL genType log(genType const &x, genType const &base)
Logarithm for any base.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00047_source.html b/tests/OpenGL/package/glm/doc/api/a00047_source.html deleted file mode 100644 index 0b8b70cc..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00047_source.html +++ /dev/null @@ -1,2515 +0,0 @@ - - - - - - -0.9.9 API documentation: man.doxy Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
man.doxy
-
-
-
1 # Doxyfile 1.8.10
-
2 
-
3 # This file describes the settings to be used by the documentation system
-
4 # doxygen (www.doxygen.org) for a project.
-
5 #
-
6 # All text after a double hash (##) is considered a comment and is placed in
-
7 # front of the TAG it is preceding.
-
8 #
-
9 # All text after a single hash (#) is considered a comment and will be ignored.
-
10 # The format is:
-
11 # TAG = value [value, ...]
-
12 # For lists, items can also be appended using:
-
13 # TAG += value [value, ...]
-
14 # Values that contain spaces should be placed between quotes (\" \").
-
15 
-
16 #---------------------------------------------------------------------------
-
17 # Project related configuration options
-
18 #---------------------------------------------------------------------------
-
19 
-
20 # This tag specifies the encoding used for all characters in the config file
-
21 # that follow. The default is UTF-8 which is also the encoding used for all text
-
22 # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
-
23 # built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
-
24 # for the list of possible encodings.
-
25 # The default value is: UTF-8.
-
26 
-
27 DOXYFILE_ENCODING = UTF-8
-
28 
-
29 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
-
30 # double-quotes, unless you are using Doxywizard) that should identify the
-
31 # project for which the documentation is generated. This name is used in the
-
32 # title of most generated pages and in a few other places.
-
33 # The default value is: My Project.
-
34 
-
35 PROJECT_NAME = "0.9.9 API documentation"
-
36 
-
37 # The PROJECT_NUMBER tag can be used to enter a project or revision number. This
-
38 # could be handy for archiving the generated documentation or if some version
-
39 # control system is used.
-
40 
-
41 PROJECT_NUMBER =
-
42 
-
43 # Using the PROJECT_BRIEF tag one can provide an optional one line description
-
44 # for a project that appears at the top of each page and should give viewer a
-
45 # quick idea about the purpose of the project. Keep the description short.
-
46 
-
47 PROJECT_BRIEF =
-
48 
-
49 # With the PROJECT_LOGO tag one can specify a logo or an icon that is included
-
50 # in the documentation. The maximum height of the logo should not exceed 55
-
51 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
-
52 # the logo to the output directory.
-
53 
-
54 PROJECT_LOGO = theme/logo-mini.png
-
55 
-
56 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
-
57 # into which the generated documentation will be written. If a relative path is
-
58 # entered, it will be relative to the location where doxygen was started. If
-
59 # left blank the current directory will be used.
-
60 
-
61 OUTPUT_DIRECTORY = .
-
62 
-
63 # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
-
64 # directories (in 2 levels) under the output directory of each output format and
-
65 # will distribute the generated files over these directories. Enabling this
-
66 # option can be useful when feeding doxygen a huge amount of source files, where
-
67 # putting all generated files in the same directory would otherwise causes
-
68 # performance problems for the file system.
-
69 # The default value is: NO.
-
70 
-
71 CREATE_SUBDIRS = NO
-
72 
-
73 # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
-
74 # characters to appear in the names of generated files. If set to NO, non-ASCII
-
75 # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
-
76 # U+3044.
-
77 # The default value is: NO.
-
78 
-
79 ALLOW_UNICODE_NAMES = NO
-
80 
-
81 # The OUTPUT_LANGUAGE tag is used to specify the language in which all
-
82 # documentation generated by doxygen is written. Doxygen will use this
-
83 # information to generate all constant output in the proper language.
-
84 # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
-
85 # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
-
86 # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
-
87 # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
-
88 # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
-
89 # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
-
90 # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
-
91 # Ukrainian and Vietnamese.
-
92 # The default value is: English.
-
93 
-
94 OUTPUT_LANGUAGE = English
-
95 
-
96 # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
-
97 # descriptions after the members that are listed in the file and class
-
98 # documentation (similar to Javadoc). Set to NO to disable this.
-
99 # The default value is: YES.
-
100 
-
101 BRIEF_MEMBER_DESC = YES
-
102 
-
103 # If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
-
104 # description of a member or function before the detailed description
-
105 #
-
106 # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-
107 # brief descriptions will be completely suppressed.
-
108 # The default value is: YES.
-
109 
-
110 REPEAT_BRIEF = YES
-
111 
-
112 # This tag implements a quasi-intelligent brief description abbreviator that is
-
113 # used to form the text in various listings. Each string in this list, if found
-
114 # as the leading text of the brief description, will be stripped from the text
-
115 # and the result, after processing the whole list, is used as the annotated
-
116 # text. Otherwise, the brief description is used as-is. If left blank, the
-
117 # following values are used ($name is automatically replaced with the name of
-
118 # the entity):The $name class, The $name widget, The $name file, is, provides,
-
119 # specifies, contains, represents, a, an and the.
-
120 
-
121 ABBREVIATE_BRIEF = "The $name class " \
-
122  "The $name widget " \
-
123  "The $name file " \
-
124  is \
-
125  provides \
-
126  specifies \
-
127  contains \
-
128  represents \
-
129  a \
-
130  an \
-
131  the
-
132 
-
133 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-
134 # doxygen will generate a detailed section even if there is only a brief
-
135 # description.
-
136 # The default value is: NO.
-
137 
-
138 ALWAYS_DETAILED_SEC = NO
-
139 
-
140 # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-
141 # inherited members of a class in the documentation of that class as if those
-
142 # members were ordinary class members. Constructors, destructors and assignment
-
143 # operators of the base classes will not be shown.
-
144 # The default value is: NO.
-
145 
-
146 INLINE_INHERITED_MEMB = NO
-
147 
-
148 # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
-
149 # before files name in the file list and in the header files. If set to NO the
-
150 # shortest path that makes the file name unique will be used
-
151 # The default value is: YES.
-
152 
-
153 FULL_PATH_NAMES = NO
-
154 
-
155 # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
-
156 # Stripping is only done if one of the specified strings matches the left-hand
-
157 # part of the path. The tag can be used to show relative paths in the file list.
-
158 # If left blank the directory from which doxygen is run is used as the path to
-
159 # strip.
-
160 #
-
161 # Note that you can specify absolute paths here, but also relative paths, which
-
162 # will be relative from the directory where doxygen is started.
-
163 # This tag requires that the tag FULL_PATH_NAMES is set to YES.
-
164 
-
165 STRIP_FROM_PATH = "C:/Documents and Settings/Groove/ "
-
166 
-
167 # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
-
168 # path mentioned in the documentation of a class, which tells the reader which
-
169 # header file to include in order to use a class. If left blank only the name of
-
170 # the header file containing the class definition is used. Otherwise one should
-
171 # specify the list of include paths that are normally passed to the compiler
-
172 # using the -I flag.
-
173 
-
174 STRIP_FROM_INC_PATH =
-
175 
-
176 # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
-
177 # less readable) file names. This can be useful is your file systems doesn't
-
178 # support long names like on DOS, Mac, or CD-ROM.
-
179 # The default value is: NO.
-
180 
-
181 SHORT_NAMES = YES
-
182 
-
183 # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
-
184 # first line (until the first dot) of a Javadoc-style comment as the brief
-
185 # description. If set to NO, the Javadoc-style will behave just like regular Qt-
-
186 # style comments (thus requiring an explicit @brief command for a brief
-
187 # description.)
-
188 # The default value is: NO.
-
189 
-
190 JAVADOC_AUTOBRIEF = YES
-
191 
-
192 # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
-
193 # line (until the first dot) of a Qt-style comment as the brief description. If
-
194 # set to NO, the Qt-style will behave just like regular Qt-style comments (thus
-
195 # requiring an explicit \brief command for a brief description.)
-
196 # The default value is: NO.
-
197 
-
198 QT_AUTOBRIEF = NO
-
199 
-
200 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
-
201 # multi-line C++ special comment block (i.e. a block of
-
202 # a brief description. This used to be the default behavior. The new default is
-
203 # to treat a multi-line C++ comment block as a detailed description. Set this
-
204 # tag to YES if you prefer the old behavior instead.
-
205 #
-
206 # Note that setting this tag to YES also means that rational rose comments are
-
207 # not recognized any more.
-
208 # The default value is: NO.
-
209 
-
210 MULTILINE_CPP_IS_BRIEF = NO
-
211 
-
212 # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
-
213 # documentation from any documented member that it re-implements.
-
214 # The default value is: YES.
-
215 
-
216 INHERIT_DOCS = YES
-
217 
-
218 # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
-
219 # page for each member. If set to NO, the documentation of a member will be part
-
220 # of the file/class/namespace that contains it.
-
221 # The default value is: NO.
-
222 
-
223 SEPARATE_MEMBER_PAGES = NO
-
224 
-
225 # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
-
226 # uses this value to replace tabs by spaces in code fragments.
-
227 # Minimum value: 1, maximum value: 16, default value: 4.
-
228 
-
229 TAB_SIZE = 8
-
230 
-
231 # This tag can be used to specify a number of aliases that act as commands in
-
232 # the documentation. An alias has the form:
-
233 # name=value
-
234 # For example adding
-
235 # "sideeffect=@par Side Effects:\n"
-
236 # will allow you to put the command \sideeffect (or @sideeffect) in the
-
237 # documentation, which will result in a user-defined paragraph with heading
-
238 # "Side Effects:". You can put \n's in the value part of an alias to insert
-
239 # newlines.
-
240 
-
241 ALIASES =
-
242 
-
243 # This tag can be used to specify a number of word-keyword mappings (TCL only).
-
244 # A mapping has the form "name=value". For example adding "class=itcl::class"
-
245 # will allow you to use the command class in the itcl::class meaning.
-
246 
-
247 TCL_SUBST =
-
248 
-
249 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-
250 # only. Doxygen will then generate output that is more tailored for C. For
-
251 # instance, some of the names that are used will be different. The list of all
-
252 # members will be omitted, etc.
-
253 # The default value is: NO.
-
254 
-
255 OPTIMIZE_OUTPUT_FOR_C = NO
-
256 
-
257 # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
-
258 # Python sources only. Doxygen will then generate output that is more tailored
-
259 # for that language. For instance, namespaces will be presented as packages,
-
260 # qualified scopes will look different, etc.
-
261 # The default value is: NO.
-
262 
-
263 OPTIMIZE_OUTPUT_JAVA = NO
-
264 
-
265 # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-
266 # sources. Doxygen will then generate output that is tailored for Fortran.
-
267 # The default value is: NO.
-
268 
-
269 OPTIMIZE_FOR_FORTRAN = NO
-
270 
-
271 # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-
272 # sources. Doxygen will then generate output that is tailored for VHDL.
-
273 # The default value is: NO.
-
274 
-
275 OPTIMIZE_OUTPUT_VHDL = NO
-
276 
-
277 # Doxygen selects the parser to use depending on the extension of the files it
-
278 # parses. With this tag you can assign which parser to use for a given
-
279 # extension. Doxygen has a built-in mapping, but you can override or extend it
-
280 # using this tag. The format is ext=language, where ext is a file extension, and
-
281 # language is one of the parsers supported by doxygen: IDL, Java, Javascript,
-
282 # C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
-
283 # FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
-
284 # Fortran. In the later case the parser tries to guess whether the code is fixed
-
285 # or free formatted code, this is the default for Fortran type files), VHDL. For
-
286 # instance to make doxygen treat .inc files as Fortran files (default is PHP),
-
287 # and .f files as C (default is Fortran), use: inc=Fortran f=C.
-
288 #
-
289 # Note: For files without extension you can use no_extension as a placeholder.
-
290 #
-
291 # Note that for custom extensions you also need to set FILE_PATTERNS otherwise
-
292 # the files are not read by doxygen.
-
293 
-
294 EXTENSION_MAPPING =
-
295 
-
296 # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
-
297 # according to the Markdown format, which allows for more readable
-
298 # documentation. See http://daringfireball.net/projects/markdown/ for details.
-
299 # The output of markdown processing is further processed by doxygen, so you can
-
300 # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
-
301 # case of backward compatibilities issues.
-
302 # The default value is: YES.
-
303 
-
304 MARKDOWN_SUPPORT = YES
-
305 
-
306 # When enabled doxygen tries to link words that correspond to documented
-
307 # classes, or namespaces to their corresponding documentation. Such a link can
-
308 # be prevented in individual cases by putting a % sign in front of the word or
-
309 # globally by setting AUTOLINK_SUPPORT to NO.
-
310 # The default value is: YES.
-
311 
-
312 AUTOLINK_SUPPORT = YES
-
313 
-
314 # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-
315 # to include (a tag file for) the STL sources as input, then you should set this
-
316 # tag to YES in order to let doxygen match functions declarations and
-
317 # definitions whose arguments contain STL classes (e.g. func(std::string);
-
318 # versus func(std::string) {}). This also make the inheritance and collaboration
-
319 # diagrams that involve STL classes more complete and accurate.
-
320 # The default value is: NO.
-
321 
-
322 BUILTIN_STL_SUPPORT = NO
-
323 
-
324 # If you use Microsoft's C++/CLI language, you should set this option to YES to
-
325 # enable parsing support.
-
326 # The default value is: NO.
-
327 
-
328 CPP_CLI_SUPPORT = NO
-
329 
-
330 # Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
-
331 # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
-
332 # will parse them like normal C++ but will assume all classes use public instead
-
333 # of private inheritance when no explicit protection keyword is present.
-
334 # The default value is: NO.
-
335 
-
336 SIP_SUPPORT = NO
-
337 
-
338 # For Microsoft's IDL there are propget and propput attributes to indicate
-
339 # getter and setter methods for a property. Setting this option to YES will make
-
340 # doxygen to replace the get and set methods by a property in the documentation.
-
341 # This will only work if the methods are indeed getting or setting a simple
-
342 # type. If this is not the case, or you want to show the methods anyway, you
-
343 # should set this option to NO.
-
344 # The default value is: YES.
-
345 
-
346 IDL_PROPERTY_SUPPORT = YES
-
347 
-
348 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-
349 # tag is set to YES then doxygen will reuse the documentation of the first
-
350 # member in the group (if any) for the other members of the group. By default
-
351 # all members of a group must be documented explicitly.
-
352 # The default value is: NO.
-
353 
-
354 DISTRIBUTE_GROUP_DOC = NO
-
355 
-
356 # If one adds a struct or class to a group and this option is enabled, then also
-
357 # any nested class or struct is added to the same group. By default this option
-
358 # is disabled and one has to add nested compounds explicitly via \ingroup.
-
359 # The default value is: NO.
-
360 
-
361 GROUP_NESTED_COMPOUNDS = NO
-
362 
-
363 # Set the SUBGROUPING tag to YES to allow class member groups of the same type
-
364 # (for instance a group of public functions) to be put as a subgroup of that
-
365 # type (e.g. under the Public Functions section). Set it to NO to prevent
-
366 # subgrouping. Alternatively, this can be done per class using the
-
367 # \nosubgrouping command.
-
368 # The default value is: YES.
-
369 
-
370 SUBGROUPING = NO
-
371 
-
372 # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
-
373 # are shown inside the group in which they are included (e.g. using \ingroup)
-
374 # instead of on a separate page (for HTML and Man pages) or section (for LaTeX
-
375 # and RTF).
-
376 #
-
377 # Note that this feature does not work in combination with
-
378 # SEPARATE_MEMBER_PAGES.
-
379 # The default value is: NO.
-
380 
-
381 INLINE_GROUPED_CLASSES = NO
-
382 
-
383 # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
-
384 # with only public data fields or simple typedef fields will be shown inline in
-
385 # the documentation of the scope in which they are defined (i.e. file,
-
386 # namespace, or group documentation), provided this scope is documented. If set
-
387 # to NO, structs, classes, and unions are shown on a separate page (for HTML and
-
388 # Man pages) or section (for LaTeX and RTF).
-
389 # The default value is: NO.
-
390 
-
391 INLINE_SIMPLE_STRUCTS = NO
-
392 
-
393 # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
-
394 # enum is documented as struct, union, or enum with the name of the typedef. So
-
395 # typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-
396 # with name TypeT. When disabled the typedef will appear as a member of a file,
-
397 # namespace, or class. And the struct will be named TypeS. This can typically be
-
398 # useful for C code in case the coding convention dictates that all compound
-
399 # types are typedef'ed and only the typedef is referenced, never the tag name.
-
400 # The default value is: NO.
-
401 
-
402 TYPEDEF_HIDES_STRUCT = NO
-
403 
-
404 # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
-
405 # cache is used to resolve symbols given their name and scope. Since this can be
-
406 # an expensive process and often the same symbol appears multiple times in the
-
407 # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
-
408 # doxygen will become slower. If the cache is too large, memory is wasted. The
-
409 # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
-
410 # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
-
411 # symbols. At the end of a run doxygen will report the cache usage and suggest
-
412 # the optimal cache size from a speed point of view.
-
413 # Minimum value: 0, maximum value: 9, default value: 0.
-
414 
-
415 LOOKUP_CACHE_SIZE = 0
-
416 
-
417 #---------------------------------------------------------------------------
-
418 # Build related configuration options
-
419 #---------------------------------------------------------------------------
-
420 
-
421 # If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
-
422 # documentation are documented, even if no documentation was available. Private
-
423 # class members and static file members will be hidden unless the
-
424 # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
-
425 # Note: This will also disable the warnings about undocumented members that are
-
426 # normally produced when WARNINGS is set to YES.
-
427 # The default value is: NO.
-
428 
-
429 EXTRACT_ALL = NO
-
430 
-
431 # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
-
432 # be included in the documentation.
-
433 # The default value is: NO.
-
434 
-
435 EXTRACT_PRIVATE = NO
-
436 
-
437 # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
-
438 # scope will be included in the documentation.
-
439 # The default value is: NO.
-
440 
-
441 EXTRACT_PACKAGE = NO
-
442 
-
443 # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
-
444 # included in the documentation.
-
445 # The default value is: NO.
-
446 
-
447 EXTRACT_STATIC = YES
-
448 
-
449 # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
-
450 # locally in source files will be included in the documentation. If set to NO,
-
451 # only classes defined in header files are included. Does not have any effect
-
452 # for Java sources.
-
453 # The default value is: YES.
-
454 
-
455 EXTRACT_LOCAL_CLASSES = NO
-
456 
-
457 # This flag is only useful for Objective-C code. If set to YES, local methods,
-
458 # which are defined in the implementation section but not in the interface are
-
459 # included in the documentation. If set to NO, only methods in the interface are
-
460 # included.
-
461 # The default value is: NO.
-
462 
-
463 EXTRACT_LOCAL_METHODS = NO
-
464 
-
465 # If this flag is set to YES, the members of anonymous namespaces will be
-
466 # extracted and appear in the documentation as a namespace called
-
467 # 'anonymous_namespace{file}', where file will be replaced with the base name of
-
468 # the file that contains the anonymous namespace. By default anonymous namespace
-
469 # are hidden.
-
470 # The default value is: NO.
-
471 
-
472 EXTRACT_ANON_NSPACES = NO
-
473 
-
474 # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
-
475 # undocumented members inside documented classes or files. If set to NO these
-
476 # members will be included in the various overviews, but no documentation
-
477 # section is generated. This option has no effect if EXTRACT_ALL is enabled.
-
478 # The default value is: NO.
-
479 
-
480 HIDE_UNDOC_MEMBERS = YES
-
481 
-
482 # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
-
483 # undocumented classes that are normally visible in the class hierarchy. If set
-
484 # to NO, these classes will be included in the various overviews. This option
-
485 # has no effect if EXTRACT_ALL is enabled.
-
486 # The default value is: NO.
-
487 
-
488 HIDE_UNDOC_CLASSES = YES
-
489 
-
490 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
-
491 # (class|struct|union) declarations. If set to NO, these declarations will be
-
492 # included in the documentation.
-
493 # The default value is: NO.
-
494 
-
495 HIDE_FRIEND_COMPOUNDS = YES
-
496 
-
497 # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
-
498 # documentation blocks found inside the body of a function. If set to NO, these
-
499 # blocks will be appended to the function's detailed documentation block.
-
500 # The default value is: NO.
-
501 
-
502 HIDE_IN_BODY_DOCS = YES
-
503 
-
504 # The INTERNAL_DOCS tag determines if documentation that is typed after a
-
505 # \internal command is included. If the tag is set to NO then the documentation
-
506 # will be excluded. Set it to YES to include the internal documentation.
-
507 # The default value is: NO.
-
508 
-
509 INTERNAL_DOCS = NO
-
510 
-
511 # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
-
512 # names in lower-case letters. If set to YES, upper-case letters are also
-
513 # allowed. This is useful if you have classes or files whose names only differ
-
514 # in case and if your file system supports case sensitive file names. Windows
-
515 # and Mac users are advised to set this option to NO.
-
516 # The default value is: system dependent.
-
517 
-
518 CASE_SENSE_NAMES = YES
-
519 
-
520 # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
-
521 # their full class and namespace scopes in the documentation. If set to YES, the
-
522 # scope will be hidden.
-
523 # The default value is: NO.
-
524 
-
525 HIDE_SCOPE_NAMES = YES
-
526 
-
527 # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
-
528 # append additional text to a page's title, such as Class Reference. If set to
-
529 # YES the compound reference will be hidden.
-
530 # The default value is: NO.
-
531 
-
532 HIDE_COMPOUND_REFERENCE= NO
-
533 
-
534 # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
-
535 # the files that are included by a file in the documentation of that file.
-
536 # The default value is: YES.
-
537 
-
538 SHOW_INCLUDE_FILES = NO
-
539 
-
540 # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
-
541 # grouped member an include statement to the documentation, telling the reader
-
542 # which file to include in order to use the member.
-
543 # The default value is: NO.
-
544 
-
545 SHOW_GROUPED_MEMB_INC = NO
-
546 
-
547 # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
-
548 # files with double quotes in the documentation rather than with sharp brackets.
-
549 # The default value is: NO.
-
550 
-
551 FORCE_LOCAL_INCLUDES = NO
-
552 
-
553 # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
-
554 # documentation for inline members.
-
555 # The default value is: YES.
-
556 
-
557 INLINE_INFO = NO
-
558 
-
559 # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
-
560 # (detailed) documentation of file and class members alphabetically by member
-
561 # name. If set to NO, the members will appear in declaration order.
-
562 # The default value is: YES.
-
563 
-
564 SORT_MEMBER_DOCS = YES
-
565 
-
566 # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
-
567 # descriptions of file, namespace and class members alphabetically by member
-
568 # name. If set to NO, the members will appear in declaration order. Note that
-
569 # this will also influence the order of the classes in the class list.
-
570 # The default value is: NO.
-
571 
-
572 SORT_BRIEF_DOCS = YES
-
573 
-
574 # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
-
575 # (brief and detailed) documentation of class members so that constructors and
-
576 # destructors are listed first. If set to NO the constructors will appear in the
-
577 # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
-
578 # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
-
579 # member documentation.
-
580 # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
-
581 # detailed member documentation.
-
582 # The default value is: NO.
-
583 
-
584 SORT_MEMBERS_CTORS_1ST = NO
-
585 
-
586 # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
-
587 # of group names into alphabetical order. If set to NO the group names will
-
588 # appear in their defined order.
-
589 # The default value is: NO.
-
590 
-
591 SORT_GROUP_NAMES = NO
-
592 
-
593 # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
-
594 # fully-qualified names, including namespaces. If set to NO, the class list will
-
595 # be sorted only by class name, not including the namespace part.
-
596 # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-
597 # Note: This option applies only to the class list, not to the alphabetical
-
598 # list.
-
599 # The default value is: NO.
-
600 
-
601 SORT_BY_SCOPE_NAME = YES
-
602 
-
603 # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
-
604 # type resolution of all parameters of a function it will reject a match between
-
605 # the prototype and the implementation of a member function even if there is
-
606 # only one candidate or it is obvious which candidate to choose by doing a
-
607 # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
-
608 # accept a match between prototype and implementation in such cases.
-
609 # The default value is: NO.
-
610 
-
611 STRICT_PROTO_MATCHING = NO
-
612 
-
613 # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
-
614 # list. This list is created by putting \todo commands in the documentation.
-
615 # The default value is: YES.
-
616 
-
617 GENERATE_TODOLIST = YES
-
618 
-
619 # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
-
620 # list. This list is created by putting \test commands in the documentation.
-
621 # The default value is: YES.
-
622 
-
623 GENERATE_TESTLIST = YES
-
624 
-
625 # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
-
626 # list. This list is created by putting \bug commands in the documentation.
-
627 # The default value is: YES.
-
628 
-
629 GENERATE_BUGLIST = YES
-
630 
-
631 # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
-
632 # the deprecated list. This list is created by putting \deprecated commands in
-
633 # the documentation.
-
634 # The default value is: YES.
-
635 
-
636 GENERATE_DEPRECATEDLIST= YES
-
637 
-
638 # The ENABLED_SECTIONS tag can be used to enable conditional documentation
-
639 # sections, marked by \if <section_label> ... \endif and \cond <section_label>
-
640 # ... \endcond blocks.
-
641 
-
642 ENABLED_SECTIONS =
-
643 
-
644 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
-
645 # initial value of a variable or macro / define can have for it to appear in the
-
646 # documentation. If the initializer consists of more lines than specified here
-
647 # it will be hidden. Use a value of 0 to hide initializers completely. The
-
648 # appearance of the value of individual variables and macros / defines can be
-
649 # controlled using \showinitializer or \hideinitializer command in the
-
650 # documentation regardless of this setting.
-
651 # Minimum value: 0, maximum value: 10000, default value: 30.
-
652 
-
653 MAX_INITIALIZER_LINES = 30
-
654 
-
655 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
-
656 # the bottom of the documentation of classes and structs. If set to YES, the
-
657 # list will mention the files that were used to generate the documentation.
-
658 # The default value is: YES.
-
659 
-
660 SHOW_USED_FILES = NO
-
661 
-
662 # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
-
663 # will remove the Files entry from the Quick Index and from the Folder Tree View
-
664 # (if specified).
-
665 # The default value is: YES.
-
666 
-
667 SHOW_FILES = YES
-
668 
-
669 # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
-
670 # page. This will remove the Namespaces entry from the Quick Index and from the
-
671 # Folder Tree View (if specified).
-
672 # The default value is: YES.
-
673 
-
674 SHOW_NAMESPACES = YES
-
675 
-
676 # The FILE_VERSION_FILTER tag can be used to specify a program or script that
-
677 # doxygen should invoke to get the current version for each file (typically from
-
678 # the version control system). Doxygen will invoke the program by executing (via
-
679 # popen()) the command command input-file, where command is the value of the
-
680 # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
-
681 # by doxygen. Whatever the program writes to standard output is used as the file
-
682 # version. For an example see the documentation.
-
683 
-
684 FILE_VERSION_FILTER =
-
685 
-
686 # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
-
687 # by doxygen. The layout file controls the global structure of the generated
-
688 # output files in an output format independent way. To create the layout file
-
689 # that represents doxygen's defaults, run doxygen with the -l option. You can
-
690 # optionally specify a file name after the option, if omitted DoxygenLayout.xml
-
691 # will be used as the name of the layout file.
-
692 #
-
693 # Note that if you run doxygen from a directory containing a file called
-
694 # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
-
695 # tag is left empty.
-
696 
-
697 LAYOUT_FILE =
-
698 
-
699 # The CITE_BIB_FILES tag can be used to specify one or more bib files containing
-
700 # the reference definitions. This must be a list of .bib files. The .bib
-
701 # extension is automatically appended if omitted. This requires the bibtex tool
-
702 # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
-
703 # For LaTeX the style of the bibliography can be controlled using
-
704 # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
-
705 # search path. See also \cite for info how to create references.
-
706 
-
707 CITE_BIB_FILES =
-
708 
-
709 #---------------------------------------------------------------------------
-
710 # Configuration options related to warning and progress messages
-
711 #---------------------------------------------------------------------------
-
712 
-
713 # The QUIET tag can be used to turn on/off the messages that are generated to
-
714 # standard output by doxygen. If QUIET is set to YES this implies that the
-
715 # messages are off.
-
716 # The default value is: NO.
-
717 
-
718 QUIET = NO
-
719 
-
720 # The WARNINGS tag can be used to turn on/off the warning messages that are
-
721 # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
-
722 # this implies that the warnings are on.
-
723 #
-
724 # Tip: Turn warnings on while writing the documentation.
-
725 # The default value is: YES.
-
726 
-
727 WARNINGS = YES
-
728 
-
729 # If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
-
730 # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
-
731 # will automatically be disabled.
-
732 # The default value is: YES.
-
733 
-
734 WARN_IF_UNDOCUMENTED = YES
-
735 
-
736 # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
-
737 # potential errors in the documentation, such as not documenting some parameters
-
738 # in a documented function, or documenting parameters that don't exist or using
-
739 # markup commands wrongly.
-
740 # The default value is: YES.
-
741 
-
742 WARN_IF_DOC_ERROR = YES
-
743 
-
744 # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
-
745 # are documented, but have no documentation for their parameters or return
-
746 # value. If set to NO, doxygen will only warn about wrong or incomplete
-
747 # parameter documentation, but not about the absence of documentation.
-
748 # The default value is: NO.
-
749 
-
750 WARN_NO_PARAMDOC = NO
-
751 
-
752 # The WARN_FORMAT tag determines the format of the warning messages that doxygen
-
753 # can produce. The string should contain the $file, $line, and $text tags, which
-
754 # will be replaced by the file and line number from which the warning originated
-
755 # and the warning text. Optionally the format may contain $version, which will
-
756 # be replaced by the version of the file (if it could be obtained via
-
757 # FILE_VERSION_FILTER)
-
758 # The default value is: $file:$line: $text.
-
759 
-
760 WARN_FORMAT = "$file:$line: $text"
-
761 
-
762 # The WARN_LOGFILE tag can be used to specify a file to which warning and error
-
763 # messages should be written. If left blank the output is written to standard
-
764 # error (stderr).
-
765 
-
766 WARN_LOGFILE =
-
767 
-
768 #---------------------------------------------------------------------------
-
769 # Configuration options related to the input files
-
770 #---------------------------------------------------------------------------
-
771 
-
772 # The INPUT tag is used to specify the files and/or directories that contain
-
773 # documented source files. You may enter file names like myfile.cpp or
-
774 # directories like /usr/src/myproject. Separate the files or directories with
-
775 # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
-
776 # Note: If this tag is empty the current directory is searched.
-
777 
-
778 INPUT = ../glm \
-
779  .
-
780 
-
781 # This tag can be used to specify the character encoding of the source files
-
782 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
-
783 # libiconv (or the iconv built into libc) for the transcoding. See the libiconv
-
784 # documentation (see: http://www.gnu.org/software/libiconv) for the list of
-
785 # possible encodings.
-
786 # The default value is: UTF-8.
-
787 
-
788 INPUT_ENCODING = UTF-8
-
789 
-
790 # If the value of the INPUT tag contains directories, you can use the
-
791 # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
-
792 # *.h) to filter out the source-files in the directories.
-
793 #
-
794 # Note that for custom extensions or not directly supported extensions you also
-
795 # need to set EXTENSION_MAPPING for the extension otherwise the files are not
-
796 # read by doxygen.
-
797 #
-
798 # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
-
799 # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
-
800 # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
-
801 # *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd,
-
802 # *.vhdl, *.ucf, *.qsf, *.as and *.js.
-
803 
-
804 FILE_PATTERNS = *.hpp \
-
805  *.doxy
-
806 
-
807 # The RECURSIVE tag can be used to specify whether or not subdirectories should
-
808 # be searched for input files as well.
-
809 # The default value is: NO.
-
810 
-
811 RECURSIVE = YES
-
812 
-
813 # The EXCLUDE tag can be used to specify files and/or directories that should be
-
814 # excluded from the INPUT source files. This way you can easily exclude a
-
815 # subdirectory from a directory tree whose root is specified with the INPUT tag.
-
816 #
-
817 # Note that relative paths are relative to the directory from which doxygen is
-
818 # run.
-
819 
-
820 EXCLUDE =
-
821 
-
822 # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
-
823 # directories that are symbolic links (a Unix file system feature) are excluded
-
824 # from the input.
-
825 # The default value is: NO.
-
826 
-
827 EXCLUDE_SYMLINKS = NO
-
828 
-
829 # If the value of the INPUT tag contains directories, you can use the
-
830 # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-
831 # certain files from those directories.
-
832 #
-
833 # Note that the wildcards are matched against the file with absolute path, so to
-
834 # exclude all test directories for example use the pattern */test/*
-
835 
-
836 EXCLUDE_PATTERNS =
-
837 
-
838 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-
839 # (namespaces, classes, functions, etc.) that should be excluded from the
-
840 # output. The symbol name can be a fully qualified name, a word, or if the
-
841 # wildcard * is used, a substring. Examples: ANamespace, AClass,
-
842 # AClass::ANamespace, ANamespace::*Test
-
843 #
-
844 # Note that the wildcards are matched against the file with absolute path, so to
-
845 # exclude all test directories use the pattern */test/*
-
846 
-
847 EXCLUDE_SYMBOLS =
-
848 
-
849 # The EXAMPLE_PATH tag can be used to specify one or more files or directories
-
850 # that contain example code fragments that are included (see the \include
-
851 # command).
-
852 
-
853 EXAMPLE_PATH =
-
854 
-
855 # If the value of the EXAMPLE_PATH tag contains directories, you can use the
-
856 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
-
857 # *.h) to filter out the source-files in the directories. If left blank all
-
858 # files are included.
-
859 
-
860 EXAMPLE_PATTERNS = *
-
861 
-
862 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-
863 # searched for input files to be used with the \include or \dontinclude commands
-
864 # irrespective of the value of the RECURSIVE tag.
-
865 # The default value is: NO.
-
866 
-
867 EXAMPLE_RECURSIVE = NO
-
868 
-
869 # The IMAGE_PATH tag can be used to specify one or more files or directories
-
870 # that contain images that are to be included in the documentation (see the
-
871 # \image command).
-
872 
-
873 IMAGE_PATH =
-
874 
-
875 # The INPUT_FILTER tag can be used to specify a program that doxygen should
-
876 # invoke to filter for each input file. Doxygen will invoke the filter program
-
877 # by executing (via popen()) the command:
-
878 #
-
879 # <filter> <input-file>
-
880 #
-
881 # where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
-
882 # name of an input file. Doxygen will then use the output that the filter
-
883 # program writes to standard output. If FILTER_PATTERNS is specified, this tag
-
884 # will be ignored.
-
885 #
-
886 # Note that the filter must not add or remove lines; it is applied before the
-
887 # code is scanned, but not when the output code is generated. If lines are added
-
888 # or removed, the anchors will not be placed correctly.
-
889 
-
890 INPUT_FILTER =
-
891 
-
892 # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-
893 # basis. Doxygen will compare the file name with each pattern and apply the
-
894 # filter if there is a match. The filters are a list of the form: pattern=filter
-
895 # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
-
896 # filters are used. If the FILTER_PATTERNS tag is empty or if none of the
-
897 # patterns match the file name, INPUT_FILTER is applied.
-
898 
-
899 FILTER_PATTERNS =
-
900 
-
901 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-
902 # INPUT_FILTER) will also be used to filter the input files that are used for
-
903 # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
904 # The default value is: NO.
-
905 
-
906 FILTER_SOURCE_FILES = NO
-
907 
-
908 # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
-
909 # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
-
910 # it is also possible to disable source filtering for a specific pattern using
-
911 # *.ext= (so without naming a filter).
-
912 # This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
-
913 
-
914 FILTER_SOURCE_PATTERNS =
-
915 
-
916 # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
-
917 # is part of the input, its contents will be placed on the main page
-
918 # (index.html). This can be useful if you have a project on for instance GitHub
-
919 # and want to reuse the introduction page also for the doxygen output.
-
920 
-
921 USE_MDFILE_AS_MAINPAGE =
-
922 
-
923 #---------------------------------------------------------------------------
-
924 # Configuration options related to source browsing
-
925 #---------------------------------------------------------------------------
-
926 
-
927 # If the SOURCE_BROWSER tag is set to YES then a list of source files will be
-
928 # generated. Documented entities will be cross-referenced with these sources.
-
929 #
-
930 # Note: To get rid of all source code in the generated output, make sure that
-
931 # also VERBATIM_HEADERS is set to NO.
-
932 # The default value is: NO.
-
933 
-
934 SOURCE_BROWSER = YES
-
935 
-
936 # Setting the INLINE_SOURCES tag to YES will include the body of functions,
-
937 # classes and enums directly into the documentation.
-
938 # The default value is: NO.
-
939 
-
940 INLINE_SOURCES = NO
-
941 
-
942 # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
-
943 # special comment blocks from generated source code fragments. Normal C, C++ and
-
944 # Fortran comments will always remain visible.
-
945 # The default value is: YES.
-
946 
-
947 STRIP_CODE_COMMENTS = YES
-
948 
-
949 # If the REFERENCED_BY_RELATION tag is set to YES then for each documented
-
950 # function all documented functions referencing it will be listed.
-
951 # The default value is: NO.
-
952 
-
953 REFERENCED_BY_RELATION = YES
-
954 
-
955 # If the REFERENCES_RELATION tag is set to YES then for each documented function
-
956 # all documented entities called/used by that function will be listed.
-
957 # The default value is: NO.
-
958 
-
959 REFERENCES_RELATION = YES
-
960 
-
961 # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
-
962 # to YES then the hyperlinks from functions in REFERENCES_RELATION and
-
963 # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
-
964 # link to the documentation.
-
965 # The default value is: YES.
-
966 
-
967 REFERENCES_LINK_SOURCE = YES
-
968 
-
969 # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
-
970 # source code will show a tooltip with additional information such as prototype,
-
971 # brief description and links to the definition and documentation. Since this
-
972 # will make the HTML file larger and loading of large files a bit slower, you
-
973 # can opt to disable this feature.
-
974 # The default value is: YES.
-
975 # This tag requires that the tag SOURCE_BROWSER is set to YES.
-
976 
-
977 SOURCE_TOOLTIPS = YES
-
978 
-
979 # If the USE_HTAGS tag is set to YES then the references to source code will
-
980 # point to the HTML generated by the htags(1) tool instead of doxygen built-in
-
981 # source browser. The htags tool is part of GNU's global source tagging system
-
982 # (see http://www.gnu.org/software/global/global.html). You will need version
-
983 # 4.8.6 or higher.
-
984 #
-
985 # To use it do the following:
-
986 # - Install the latest version of global
-
987 # - Enable SOURCE_BROWSER and USE_HTAGS in the config file
-
988 # - Make sure the INPUT points to the root of the source tree
-
989 # - Run doxygen as normal
-
990 #
-
991 # Doxygen will invoke htags (and that will in turn invoke gtags), so these
-
992 # tools must be available from the command line (i.e. in the search path).
-
993 #
-
994 # The result: instead of the source browser generated by doxygen, the links to
-
995 # source code will now point to the output of htags.
-
996 # The default value is: NO.
-
997 # This tag requires that the tag SOURCE_BROWSER is set to YES.
-
998 
-
999 USE_HTAGS = NO
-
1000 
-
1001 # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
-
1002 # verbatim copy of the header file for each class for which an include is
-
1003 # specified. Set to NO to disable this.
-
1004 # See also: Section \class.
-
1005 # The default value is: YES.
-
1006 
-
1007 VERBATIM_HEADERS = YES
-
1008 
-
1009 # If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
-
1010 # clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
-
1011 # cost of reduced performance. This can be particularly helpful with template
-
1012 # rich C++ code for which doxygen's built-in parser lacks the necessary type
-
1013 # information.
-
1014 # Note: The availability of this option depends on whether or not doxygen was
-
1015 # compiled with the --with-libclang option.
-
1016 # The default value is: NO.
-
1017 
-
1018 CLANG_ASSISTED_PARSING = NO
-
1019 
-
1020 # If clang assisted parsing is enabled you can provide the compiler with command
-
1021 # line options that you would normally use when invoking the compiler. Note that
-
1022 # the include paths will already be set by doxygen for the files and directories
-
1023 # specified with INPUT and INCLUDE_PATH.
-
1024 # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
-
1025 
-
1026 CLANG_OPTIONS =
-
1027 
-
1028 #---------------------------------------------------------------------------
-
1029 # Configuration options related to the alphabetical class index
-
1030 #---------------------------------------------------------------------------
-
1031 
-
1032 # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
-
1033 # compounds will be generated. Enable this if the project contains a lot of
-
1034 # classes, structs, unions or interfaces.
-
1035 # The default value is: YES.
-
1036 
-
1037 ALPHABETICAL_INDEX = NO
-
1038 
-
1039 # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
-
1040 # which the alphabetical index list will be split.
-
1041 # Minimum value: 1, maximum value: 20, default value: 5.
-
1042 # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
1043 
-
1044 COLS_IN_ALPHA_INDEX = 5
-
1045 
-
1046 # In case all classes in a project start with a common prefix, all classes will
-
1047 # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
-
1048 # can be used to specify a prefix (or a list of prefixes) that should be ignored
-
1049 # while generating the index headers.
-
1050 # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
1051 
-
1052 IGNORE_PREFIX =
-
1053 
-
1054 #---------------------------------------------------------------------------
-
1055 # Configuration options related to the HTML output
-
1056 #---------------------------------------------------------------------------
-
1057 
-
1058 # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
-
1059 # The default value is: YES.
-
1060 
-
1061 GENERATE_HTML = YES
-
1062 
-
1063 # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
-
1064 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-
1065 # it.
-
1066 # The default directory is: html.
-
1067 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1068 
-
1069 HTML_OUTPUT = html
-
1070 
-
1071 # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
-
1072 # generated HTML page (for example: .htm, .php, .asp).
-
1073 # The default value is: .html.
-
1074 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1075 
-
1076 HTML_FILE_EXTENSION = .html
-
1077 
-
1078 # The HTML_HEADER tag can be used to specify a user-defined HTML header file for
-
1079 # each generated HTML page. If the tag is left blank doxygen will generate a
-
1080 # standard header.
-
1081 #
-
1082 # To get valid HTML the header file that includes any scripts and style sheets
-
1083 # that doxygen needs, which is dependent on the configuration options used (e.g.
-
1084 # the setting GENERATE_TREEVIEW). It is highly recommended to start with a
-
1085 # default header using
-
1086 # doxygen -w html new_header.html new_footer.html new_stylesheet.css
-
1087 # YourConfigFile
-
1088 # and then modify the file new_header.html. See also section "Doxygen usage"
-
1089 # for information on how to generate the default header that doxygen normally
-
1090 # uses.
-
1091 # Note: The header is subject to change so you typically have to regenerate the
-
1092 # default header when upgrading to a newer version of doxygen. For a description
-
1093 # of the possible markers and block names see the documentation.
-
1094 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1095 
-
1096 HTML_HEADER =
-
1097 
-
1098 # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
-
1099 # generated HTML page. If the tag is left blank doxygen will generate a standard
-
1100 # footer. See HTML_HEADER for more information on how to generate a default
-
1101 # footer and what special commands can be used inside the footer. See also
-
1102 # section "Doxygen usage" for information on how to generate the default footer
-
1103 # that doxygen normally uses.
-
1104 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1105 
-
1106 HTML_FOOTER =
-
1107 
-
1108 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
-
1109 # sheet that is used by each HTML page. It can be used to fine-tune the look of
-
1110 # the HTML output. If left blank doxygen will generate a default style sheet.
-
1111 # See also section "Doxygen usage" for information on how to generate the style
-
1112 # sheet that doxygen normally uses.
-
1113 # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
-
1114 # it is more robust and this tag (HTML_STYLESHEET) will in the future become
-
1115 # obsolete.
-
1116 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1117 
-
1118 HTML_STYLESHEET =
-
1119 
-
1120 # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-
1121 # cascading style sheets that are included after the standard style sheets
-
1122 # created by doxygen. Using this option one can overrule certain style aspects.
-
1123 # This is preferred over using HTML_STYLESHEET since it does not replace the
-
1124 # standard style sheet and is therefore more robust against future updates.
-
1125 # Doxygen will copy the style sheet files to the output directory.
-
1126 # Note: The order of the extra style sheet files is of importance (e.g. the last
-
1127 # style sheet in the list overrules the setting of the previous ones in the
-
1128 # list). For an example see the documentation.
-
1129 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1130 
-
1131 HTML_EXTRA_STYLESHEET =
-
1132 
-
1133 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
-
1134 # other source files which should be copied to the HTML output directory. Note
-
1135 # that these files will be copied to the base HTML output directory. Use the
-
1136 # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
-
1137 # files. In the HTML_STYLESHEET file, use the file name only. Also note that the
-
1138 # files will be copied as-is; there are no commands or markers available.
-
1139 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1140 
-
1141 HTML_EXTRA_FILES =
-
1142 
-
1143 # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
-
1144 # will adjust the colors in the style sheet and background images according to
-
1145 # this color. Hue is specified as an angle on a colorwheel, see
-
1146 # http://en.wikipedia.org/wiki/Hue for more information. For instance the value
-
1147 # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
-
1148 # purple, and 360 is red again.
-
1149 # Minimum value: 0, maximum value: 359, default value: 220.
-
1150 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1151 
-
1152 HTML_COLORSTYLE_HUE = 220
-
1153 
-
1154 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
-
1155 # in the HTML output. For a value of 0 the output will use grayscales only. A
-
1156 # value of 255 will produce the most vivid colors.
-
1157 # Minimum value: 0, maximum value: 255, default value: 100.
-
1158 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1159 
-
1160 HTML_COLORSTYLE_SAT = 100
-
1161 
-
1162 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
-
1163 # luminance component of the colors in the HTML output. Values below 100
-
1164 # gradually make the output lighter, whereas values above 100 make the output
-
1165 # darker. The value divided by 100 is the actual gamma applied, so 80 represents
-
1166 # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
-
1167 # change the gamma.
-
1168 # Minimum value: 40, maximum value: 240, default value: 80.
-
1169 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1170 
-
1171 HTML_COLORSTYLE_GAMMA = 80
-
1172 
-
1173 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-
1174 # page will contain the date and time when the page was generated. Setting this
-
1175 # to YES can help to show when doxygen was last run and thus if the
-
1176 # documentation is up to date.
-
1177 # The default value is: NO.
-
1178 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1179 
-
1180 HTML_TIMESTAMP = NO
-
1181 
-
1182 # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-
1183 # documentation will contain sections that can be hidden and shown after the
-
1184 # page has loaded.
-
1185 # The default value is: NO.
-
1186 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1187 
-
1188 HTML_DYNAMIC_SECTIONS = NO
-
1189 
-
1190 # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
-
1191 # shown in the various tree structured indices initially; the user can expand
-
1192 # and collapse entries dynamically later on. Doxygen will expand the tree to
-
1193 # such a level that at most the specified number of entries are visible (unless
-
1194 # a fully collapsed tree already exceeds this amount). So setting the number of
-
1195 # entries 1 will produce a full collapsed tree by default. 0 is a special value
-
1196 # representing an infinite number of entries and will result in a full expanded
-
1197 # tree by default.
-
1198 # Minimum value: 0, maximum value: 9999, default value: 100.
-
1199 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1200 
-
1201 HTML_INDEX_NUM_ENTRIES = 100
-
1202 
-
1203 # If the GENERATE_DOCSET tag is set to YES, additional index files will be
-
1204 # generated that can be used as input for Apple's Xcode 3 integrated development
-
1205 # environment (see: http://developer.apple.com/tools/xcode/), introduced with
-
1206 # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
-
1207 # Makefile in the HTML output directory. Running make will produce the docset in
-
1208 # that directory and running make install will install the docset in
-
1209 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
-
1210 # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
-
1211 # for more information.
-
1212 # The default value is: NO.
-
1213 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1214 
-
1215 GENERATE_DOCSET = NO
-
1216 
-
1217 # This tag determines the name of the docset feed. A documentation feed provides
-
1218 # an umbrella under which multiple documentation sets from a single provider
-
1219 # (such as a company or product suite) can be grouped.
-
1220 # The default value is: Doxygen generated docs.
-
1221 # This tag requires that the tag GENERATE_DOCSET is set to YES.
-
1222 
-
1223 DOCSET_FEEDNAME = "Doxygen generated docs"
-
1224 
-
1225 # This tag specifies a string that should uniquely identify the documentation
-
1226 # set bundle. This should be a reverse domain-name style string, e.g.
-
1227 # com.mycompany.MyDocSet. Doxygen will append .docset to the name.
-
1228 # The default value is: org.doxygen.Project.
-
1229 # This tag requires that the tag GENERATE_DOCSET is set to YES.
-
1230 
-
1231 DOCSET_BUNDLE_ID = org.doxygen.Project
-
1232 
-
1233 # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
-
1234 # the documentation publisher. This should be a reverse domain-name style
-
1235 # string, e.g. com.mycompany.MyDocSet.documentation.
-
1236 # The default value is: org.doxygen.Publisher.
-
1237 # This tag requires that the tag GENERATE_DOCSET is set to YES.
-
1238 
-
1239 DOCSET_PUBLISHER_ID = org.doxygen.Publisher
-
1240 
-
1241 # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
-
1242 # The default value is: Publisher.
-
1243 # This tag requires that the tag GENERATE_DOCSET is set to YES.
-
1244 
-
1245 DOCSET_PUBLISHER_NAME = Publisher
-
1246 
-
1247 # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
-
1248 # additional HTML index files: index.hhp, index.hhc, and index.hhk. The
-
1249 # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
-
1250 # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
-
1251 # Windows.
-
1252 #
-
1253 # The HTML Help Workshop contains a compiler that can convert all HTML output
-
1254 # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
-
1255 # files are now used as the Windows 98 help format, and will replace the old
-
1256 # Windows help format (.hlp) on all Windows platforms in the future. Compressed
-
1257 # HTML files also contain an index, a table of contents, and you can search for
-
1258 # words in the documentation. The HTML workshop also contains a viewer for
-
1259 # compressed HTML files.
-
1260 # The default value is: NO.
-
1261 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1262 
-
1263 GENERATE_HTMLHELP = NO
-
1264 
-
1265 # The CHM_FILE tag can be used to specify the file name of the resulting .chm
-
1266 # file. You can add a path in front of the file if the result should not be
-
1267 # written to the html output directory.
-
1268 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
1269 
-
1270 CHM_FILE =
-
1271 
-
1272 # The HHC_LOCATION tag can be used to specify the location (absolute path
-
1273 # including file name) of the HTML help compiler (hhc.exe). If non-empty,
-
1274 # doxygen will try to run the HTML help compiler on the generated index.hhp.
-
1275 # The file has to be specified with full path.
-
1276 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
1277 
-
1278 HHC_LOCATION =
-
1279 
-
1280 # The GENERATE_CHI flag controls if a separate .chi index file is generated
-
1281 # (YES) or that it should be included in the master .chm file (NO).
-
1282 # The default value is: NO.
-
1283 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
1284 
-
1285 GENERATE_CHI = NO
-
1286 
-
1287 # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
-
1288 # and project file content.
-
1289 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
1290 
-
1291 CHM_INDEX_ENCODING =
-
1292 
-
1293 # The BINARY_TOC flag controls whether a binary table of contents is generated
-
1294 # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
-
1295 # enables the Previous and Next buttons.
-
1296 # The default value is: NO.
-
1297 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
1298 
-
1299 BINARY_TOC = NO
-
1300 
-
1301 # The TOC_EXPAND flag can be set to YES to add extra items for group members to
-
1302 # the table of contents of the HTML help documentation and to the tree view.
-
1303 # The default value is: NO.
-
1304 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
1305 
-
1306 TOC_EXPAND = NO
-
1307 
-
1308 # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-
1309 # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
-
1310 # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
-
1311 # (.qch) of the generated HTML documentation.
-
1312 # The default value is: NO.
-
1313 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1314 
-
1315 GENERATE_QHP = NO
-
1316 
-
1317 # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
-
1318 # the file name of the resulting .qch file. The path specified is relative to
-
1319 # the HTML output folder.
-
1320 # This tag requires that the tag GENERATE_QHP is set to YES.
-
1321 
-
1322 QCH_FILE =
-
1323 
-
1324 # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
-
1325 # Project output. For more information please see Qt Help Project / Namespace
-
1326 # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
-
1327 # The default value is: org.doxygen.Project.
-
1328 # This tag requires that the tag GENERATE_QHP is set to YES.
-
1329 
-
1330 QHP_NAMESPACE = org.doxygen.Project
-
1331 
-
1332 # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
-
1333 # Help Project output. For more information please see Qt Help Project / Virtual
-
1334 # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
-
1335 # folders).
-
1336 # The default value is: doc.
-
1337 # This tag requires that the tag GENERATE_QHP is set to YES.
-
1338 
-
1339 QHP_VIRTUAL_FOLDER = doc
-
1340 
-
1341 # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
-
1342 # filter to add. For more information please see Qt Help Project / Custom
-
1343 # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
-
1344 # filters).
-
1345 # This tag requires that the tag GENERATE_QHP is set to YES.
-
1346 
-
1347 QHP_CUST_FILTER_NAME =
-
1348 
-
1349 # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
-
1350 # custom filter to add. For more information please see Qt Help Project / Custom
-
1351 # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
-
1352 # filters).
-
1353 # This tag requires that the tag GENERATE_QHP is set to YES.
-
1354 
-
1355 QHP_CUST_FILTER_ATTRS =
-
1356 
-
1357 # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-
1358 # project's filter section matches. Qt Help Project / Filter Attributes (see:
-
1359 # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
-
1360 # This tag requires that the tag GENERATE_QHP is set to YES.
-
1361 
-
1362 QHP_SECT_FILTER_ATTRS =
-
1363 
-
1364 # The QHG_LOCATION tag can be used to specify the location of Qt's
-
1365 # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
-
1366 # generated .qhp file.
-
1367 # This tag requires that the tag GENERATE_QHP is set to YES.
-
1368 
-
1369 QHG_LOCATION =
-
1370 
-
1371 # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
-
1372 # generated, together with the HTML files, they form an Eclipse help plugin. To
-
1373 # install this plugin and make it available under the help contents menu in
-
1374 # Eclipse, the contents of the directory containing the HTML and XML files needs
-
1375 # to be copied into the plugins directory of eclipse. The name of the directory
-
1376 # within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
-
1377 # After copying Eclipse needs to be restarted before the help appears.
-
1378 # The default value is: NO.
-
1379 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1380 
-
1381 GENERATE_ECLIPSEHELP = NO
-
1382 
-
1383 # A unique identifier for the Eclipse help plugin. When installing the plugin
-
1384 # the directory name containing the HTML and XML files should also have this
-
1385 # name. Each documentation set should have its own identifier.
-
1386 # The default value is: org.doxygen.Project.
-
1387 # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
-
1388 
-
1389 ECLIPSE_DOC_ID = org.doxygen.Project
-
1390 
-
1391 # If you want full control over the layout of the generated HTML pages it might
-
1392 # be necessary to disable the index and replace it with your own. The
-
1393 # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
-
1394 # of each HTML page. A value of NO enables the index and the value YES disables
-
1395 # it. Since the tabs in the index contain the same information as the navigation
-
1396 # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
-
1397 # The default value is: NO.
-
1398 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1399 
-
1400 DISABLE_INDEX = NO
-
1401 
-
1402 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-
1403 # structure should be generated to display hierarchical information. If the tag
-
1404 # value is set to YES, a side panel will be generated containing a tree-like
-
1405 # index structure (just like the one that is generated for HTML Help). For this
-
1406 # to work a browser that supports JavaScript, DHTML, CSS and frames is required
-
1407 # (i.e. any modern browser). Windows users are probably better off using the
-
1408 # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
-
1409 # further fine-tune the look of the index. As an example, the default style
-
1410 # sheet generated by doxygen has an example that shows how to put an image at
-
1411 # the root of the tree instead of the PROJECT_NAME. Since the tree basically has
-
1412 # the same information as the tab index, you could consider setting
-
1413 # DISABLE_INDEX to YES when enabling this option.
-
1414 # The default value is: NO.
-
1415 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1416 
-
1417 GENERATE_TREEVIEW = NO
-
1418 
-
1419 # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
-
1420 # doxygen will group on one line in the generated HTML documentation.
-
1421 #
-
1422 # Note that a value of 0 will completely suppress the enum values from appearing
-
1423 # in the overview section.
-
1424 # Minimum value: 0, maximum value: 20, default value: 4.
-
1425 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1426 
-
1427 ENUM_VALUES_PER_LINE = 4
-
1428 
-
1429 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
-
1430 # to set the initial width (in pixels) of the frame in which the tree is shown.
-
1431 # Minimum value: 0, maximum value: 1500, default value: 250.
-
1432 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1433 
-
1434 TREEVIEW_WIDTH = 250
-
1435 
-
1436 # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
-
1437 # external symbols imported via tag files in a separate window.
-
1438 # The default value is: NO.
-
1439 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1440 
-
1441 EXT_LINKS_IN_WINDOW = NO
-
1442 
-
1443 # Use this tag to change the font size of LaTeX formulas included as images in
-
1444 # the HTML documentation. When you change the font size after a successful
-
1445 # doxygen run you need to manually remove any form_*.png images from the HTML
-
1446 # output directory to force them to be regenerated.
-
1447 # Minimum value: 8, maximum value: 50, default value: 10.
-
1448 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1449 
-
1450 FORMULA_FONTSIZE = 10
-
1451 
-
1452 # Use the FORMULA_TRANPARENT tag to determine whether or not the images
-
1453 # generated for formulas are transparent PNGs. Transparent PNGs are not
-
1454 # supported properly for IE 6.0, but are supported on all modern browsers.
-
1455 #
-
1456 # Note that when changing this option you need to delete any form_*.png files in
-
1457 # the HTML output directory before the changes have effect.
-
1458 # The default value is: YES.
-
1459 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1460 
-
1461 FORMULA_TRANSPARENT = YES
-
1462 
-
1463 # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
-
1464 # http://www.mathjax.org) which uses client side Javascript for the rendering
-
1465 # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
-
1466 # installed or if you want to formulas look prettier in the HTML output. When
-
1467 # enabled you may also need to install MathJax separately and configure the path
-
1468 # to it using the MATHJAX_RELPATH option.
-
1469 # The default value is: NO.
-
1470 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1471 
-
1472 USE_MATHJAX = NO
-
1473 
-
1474 # When MathJax is enabled you can set the default output format to be used for
-
1475 # the MathJax output. See the MathJax site (see:
-
1476 # http://docs.mathjax.org/en/latest/output.html) for more details.
-
1477 # Possible values are: HTML-CSS (which is slower, but has the best
-
1478 # compatibility), NativeMML (i.e. MathML) and SVG.
-
1479 # The default value is: HTML-CSS.
-
1480 # This tag requires that the tag USE_MATHJAX is set to YES.
-
1481 
-
1482 MATHJAX_FORMAT = HTML-CSS
-
1483 
-
1484 # When MathJax is enabled you need to specify the location relative to the HTML
-
1485 # output directory using the MATHJAX_RELPATH option. The destination directory
-
1486 # should contain the MathJax.js script. For instance, if the mathjax directory
-
1487 # is located at the same level as the HTML output directory, then
-
1488 # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
-
1489 # Content Delivery Network so you can quickly see the result without installing
-
1490 # MathJax. However, it is strongly recommended to install a local copy of
-
1491 # MathJax from http://www.mathjax.org before deployment.
-
1492 # The default value is: http://cdn.mathjax.org/mathjax/latest.
-
1493 # This tag requires that the tag USE_MATHJAX is set to YES.
-
1494 
-
1495 MATHJAX_RELPATH = http://www.mathjax.org/mathjax
-
1496 
-
1497 # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
-
1498 # extension names that should be enabled during MathJax rendering. For example
-
1499 # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
-
1500 # This tag requires that the tag USE_MATHJAX is set to YES.
-
1501 
-
1502 MATHJAX_EXTENSIONS =
-
1503 
-
1504 # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
-
1505 # of code that will be used on startup of the MathJax code. See the MathJax site
-
1506 # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
-
1507 # example see the documentation.
-
1508 # This tag requires that the tag USE_MATHJAX is set to YES.
-
1509 
-
1510 MATHJAX_CODEFILE =
-
1511 
-
1512 # When the SEARCHENGINE tag is enabled doxygen will generate a search box for
-
1513 # the HTML output. The underlying search engine uses javascript and DHTML and
-
1514 # should work on any modern browser. Note that when using HTML help
-
1515 # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
-
1516 # there is already a search function so this one should typically be disabled.
-
1517 # For large projects the javascript based search engine can be slow, then
-
1518 # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
-
1519 # search using the keyboard; to jump to the search box use <access key> + S
-
1520 # (what the <access key> is depends on the OS and browser, but it is typically
-
1521 # <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
-
1522 # key> to jump into the search results window, the results can be navigated
-
1523 # using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
-
1524 # the search. The filter options can be selected when the cursor is inside the
-
1525 # search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
-
1526 # to select a filter and <Enter> or <escape> to activate or cancel the filter
-
1527 # option.
-
1528 # The default value is: YES.
-
1529 # This tag requires that the tag GENERATE_HTML is set to YES.
-
1530 
-
1531 SEARCHENGINE = YES
-
1532 
-
1533 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-
1534 # implemented using a web server instead of a web client using Javascript. There
-
1535 # are two flavors of web server based searching depending on the EXTERNAL_SEARCH
-
1536 # setting. When disabled, doxygen will generate a PHP script for searching and
-
1537 # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
-
1538 # and searching needs to be provided by external tools. See the section
-
1539 # "External Indexing and Searching" for details.
-
1540 # The default value is: NO.
-
1541 # This tag requires that the tag SEARCHENGINE is set to YES.
-
1542 
-
1543 SERVER_BASED_SEARCH = NO
-
1544 
-
1545 # When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
-
1546 # script for searching. Instead the search results are written to an XML file
-
1547 # which needs to be processed by an external indexer. Doxygen will invoke an
-
1548 # external search engine pointed to by the SEARCHENGINE_URL option to obtain the
-
1549 # search results.
-
1550 #
-
1551 # Doxygen ships with an example indexer (doxyindexer) and search engine
-
1552 # (doxysearch.cgi) which are based on the open source search engine library
-
1553 # Xapian (see: http://xapian.org/).
-
1554 #
-
1555 # See the section "External Indexing and Searching" for details.
-
1556 # The default value is: NO.
-
1557 # This tag requires that the tag SEARCHENGINE is set to YES.
-
1558 
-
1559 EXTERNAL_SEARCH = NO
-
1560 
-
1561 # The SEARCHENGINE_URL should point to a search engine hosted by a web server
-
1562 # which will return the search results when EXTERNAL_SEARCH is enabled.
-
1563 #
-
1564 # Doxygen ships with an example indexer (doxyindexer) and search engine
-
1565 # (doxysearch.cgi) which are based on the open source search engine library
-
1566 # Xapian (see: http://xapian.org/). See the section "External Indexing and
-
1567 # Searching" for details.
-
1568 # This tag requires that the tag SEARCHENGINE is set to YES.
-
1569 
-
1570 SEARCHENGINE_URL =
-
1571 
-
1572 # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
-
1573 # search data is written to a file for indexing by an external tool. With the
-
1574 # SEARCHDATA_FILE tag the name of this file can be specified.
-
1575 # The default file is: searchdata.xml.
-
1576 # This tag requires that the tag SEARCHENGINE is set to YES.
-
1577 
-
1578 SEARCHDATA_FILE = searchdata.xml
-
1579 
-
1580 # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
-
1581 # EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
-
1582 # useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
-
1583 # projects and redirect the results back to the right project.
-
1584 # This tag requires that the tag SEARCHENGINE is set to YES.
-
1585 
-
1586 EXTERNAL_SEARCH_ID =
-
1587 
-
1588 # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
-
1589 # projects other than the one defined by this configuration file, but that are
-
1590 # all added to the same external search index. Each project needs to have a
-
1591 # unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
-
1592 # to a relative location where the documentation can be found. The format is:
-
1593 # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
-
1594 # This tag requires that the tag SEARCHENGINE is set to YES.
-
1595 
-
1596 EXTRA_SEARCH_MAPPINGS =
-
1597 
-
1598 #---------------------------------------------------------------------------
-
1599 # Configuration options related to the LaTeX output
-
1600 #---------------------------------------------------------------------------
-
1601 
-
1602 # If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
-
1603 # The default value is: YES.
-
1604 
-
1605 GENERATE_LATEX = NO
-
1606 
-
1607 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
-
1608 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-
1609 # it.
-
1610 # The default directory is: latex.
-
1611 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1612 
-
1613 LATEX_OUTPUT = latex
-
1614 
-
1615 # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-
1616 # invoked.
-
1617 #
-
1618 # Note that when enabling USE_PDFLATEX this option is only used for generating
-
1619 # bitmaps for formulas in the HTML output, but not in the Makefile that is
-
1620 # written to the output directory.
-
1621 # The default file is: latex.
-
1622 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1623 
-
1624 LATEX_CMD_NAME = latex
-
1625 
-
1626 # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
-
1627 # index for LaTeX.
-
1628 # The default file is: makeindex.
-
1629 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1630 
-
1631 MAKEINDEX_CMD_NAME = makeindex
-
1632 
-
1633 # If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
-
1634 # documents. This may be useful for small projects and may help to save some
-
1635 # trees in general.
-
1636 # The default value is: NO.
-
1637 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1638 
-
1639 COMPACT_LATEX = NO
-
1640 
-
1641 # The PAPER_TYPE tag can be used to set the paper type that is used by the
-
1642 # printer.
-
1643 # Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
-
1644 # 14 inches) and executive (7.25 x 10.5 inches).
-
1645 # The default value is: a4.
-
1646 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1647 
-
1648 PAPER_TYPE = a4wide
-
1649 
-
1650 # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-
1651 # that should be included in the LaTeX output. The package can be specified just
-
1652 # by its name or with the correct syntax as to be used with the LaTeX
-
1653 # \usepackage command. To get the times font for instance you can specify :
-
1654 # EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
-
1655 # To use the option intlimits with the amsmath package you can specify:
-
1656 # EXTRA_PACKAGES=[intlimits]{amsmath}
-
1657 # If left blank no extra packages will be included.
-
1658 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1659 
-
1660 EXTRA_PACKAGES =
-
1661 
-
1662 # The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
-
1663 # generated LaTeX document. The header should contain everything until the first
-
1664 # chapter. If it is left blank doxygen will generate a standard header. See
-
1665 # section "Doxygen usage" for information on how to let doxygen write the
-
1666 # default header to a separate file.
-
1667 #
-
1668 # Note: Only use a user-defined header if you know what you are doing! The
-
1669 # following commands have a special meaning inside the header: $title,
-
1670 # $datetime, $date, $doxygenversion, $projectname, $projectnumber,
-
1671 # $projectbrief, $projectlogo. Doxygen will replace $title with the empty
-
1672 # string, for the replacement values of the other commands the user is referred
-
1673 # to HTML_HEADER.
-
1674 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1675 
-
1676 LATEX_HEADER =
-
1677 
-
1678 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
-
1679 # generated LaTeX document. The footer should contain everything after the last
-
1680 # chapter. If it is left blank doxygen will generate a standard footer. See
-
1681 # LATEX_HEADER for more information on how to generate a default footer and what
-
1682 # special commands can be used inside the footer.
-
1683 #
-
1684 # Note: Only use a user-defined footer if you know what you are doing!
-
1685 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1686 
-
1687 LATEX_FOOTER =
-
1688 
-
1689 # The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-
1690 # LaTeX style sheets that are included after the standard style sheets created
-
1691 # by doxygen. Using this option one can overrule certain style aspects. Doxygen
-
1692 # will copy the style sheet files to the output directory.
-
1693 # Note: The order of the extra style sheet files is of importance (e.g. the last
-
1694 # style sheet in the list overrules the setting of the previous ones in the
-
1695 # list).
-
1696 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1697 
-
1698 LATEX_EXTRA_STYLESHEET =
-
1699 
-
1700 # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
-
1701 # other source files which should be copied to the LATEX_OUTPUT output
-
1702 # directory. Note that the files will be copied as-is; there are no commands or
-
1703 # markers available.
-
1704 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1705 
-
1706 LATEX_EXTRA_FILES =
-
1707 
-
1708 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
-
1709 # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
-
1710 # contain links (just like the HTML output) instead of page references. This
-
1711 # makes the output suitable for online browsing using a PDF viewer.
-
1712 # The default value is: YES.
-
1713 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1714 
-
1715 PDF_HYPERLINKS = NO
-
1716 
-
1717 # If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
-
1718 # the PDF file directly from the LaTeX files. Set this option to YES, to get a
-
1719 # higher quality PDF documentation.
-
1720 # The default value is: YES.
-
1721 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1722 
-
1723 USE_PDFLATEX = YES
-
1724 
-
1725 # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
-
1726 # command to the generated LaTeX files. This will instruct LaTeX to keep running
-
1727 # if errors occur, instead of asking the user for help. This option is also used
-
1728 # when generating formulas in HTML.
-
1729 # The default value is: NO.
-
1730 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1731 
-
1732 LATEX_BATCHMODE = NO
-
1733 
-
1734 # If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
-
1735 # index chapters (such as File Index, Compound Index, etc.) in the output.
-
1736 # The default value is: NO.
-
1737 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1738 
-
1739 LATEX_HIDE_INDICES = NO
-
1740 
-
1741 # If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
-
1742 # code with syntax highlighting in the LaTeX output.
-
1743 #
-
1744 # Note that which sources are shown also depends on other settings such as
-
1745 # SOURCE_BROWSER.
-
1746 # The default value is: NO.
-
1747 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1748 
-
1749 LATEX_SOURCE_CODE = NO
-
1750 
-
1751 # The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-
1752 # bibliography, e.g. plainnat, or ieeetr. See
-
1753 # http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
-
1754 # The default value is: plain.
-
1755 # This tag requires that the tag GENERATE_LATEX is set to YES.
-
1756 
-
1757 LATEX_BIB_STYLE = plain
-
1758 
-
1759 #---------------------------------------------------------------------------
-
1760 # Configuration options related to the RTF output
-
1761 #---------------------------------------------------------------------------
-
1762 
-
1763 # If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
-
1764 # RTF output is optimized for Word 97 and may not look too pretty with other RTF
-
1765 # readers/editors.
-
1766 # The default value is: NO.
-
1767 
-
1768 GENERATE_RTF = NO
-
1769 
-
1770 # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
-
1771 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-
1772 # it.
-
1773 # The default directory is: rtf.
-
1774 # This tag requires that the tag GENERATE_RTF is set to YES.
-
1775 
-
1776 RTF_OUTPUT = glm.rtf
-
1777 
-
1778 # If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
-
1779 # documents. This may be useful for small projects and may help to save some
-
1780 # trees in general.
-
1781 # The default value is: NO.
-
1782 # This tag requires that the tag GENERATE_RTF is set to YES.
-
1783 
-
1784 COMPACT_RTF = NO
-
1785 
-
1786 # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
-
1787 # contain hyperlink fields. The RTF file will contain links (just like the HTML
-
1788 # output) instead of page references. This makes the output suitable for online
-
1789 # browsing using Word or some other Word compatible readers that support those
-
1790 # fields.
-
1791 #
-
1792 # Note: WordPad (write) and others do not support links.
-
1793 # The default value is: NO.
-
1794 # This tag requires that the tag GENERATE_RTF is set to YES.
-
1795 
-
1796 RTF_HYPERLINKS = YES
-
1797 
-
1798 # Load stylesheet definitions from file. Syntax is similar to doxygen's config
-
1799 # file, i.e. a series of assignments. You only have to provide replacements,
-
1800 # missing definitions are set to their default value.
-
1801 #
-
1802 # See also section "Doxygen usage" for information on how to generate the
-
1803 # default style sheet that doxygen normally uses.
-
1804 # This tag requires that the tag GENERATE_RTF is set to YES.
-
1805 
-
1806 RTF_STYLESHEET_FILE =
-
1807 
-
1808 # Set optional variables used in the generation of an RTF document. Syntax is
-
1809 # similar to doxygen's config file. A template extensions file can be generated
-
1810 # using doxygen -e rtf extensionFile.
-
1811 # This tag requires that the tag GENERATE_RTF is set to YES.
-
1812 
-
1813 RTF_EXTENSIONS_FILE =
-
1814 
-
1815 # If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
-
1816 # with syntax highlighting in the RTF output.
-
1817 #
-
1818 # Note that which sources are shown also depends on other settings such as
-
1819 # SOURCE_BROWSER.
-
1820 # The default value is: NO.
-
1821 # This tag requires that the tag GENERATE_RTF is set to YES.
-
1822 
-
1823 RTF_SOURCE_CODE = NO
-
1824 
-
1825 #---------------------------------------------------------------------------
-
1826 # Configuration options related to the man page output
-
1827 #---------------------------------------------------------------------------
-
1828 
-
1829 # If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
-
1830 # classes and files.
-
1831 # The default value is: NO.
-
1832 
-
1833 GENERATE_MAN = NO
-
1834 
-
1835 # The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
-
1836 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-
1837 # it. A directory man3 will be created inside the directory specified by
-
1838 # MAN_OUTPUT.
-
1839 # The default directory is: man.
-
1840 # This tag requires that the tag GENERATE_MAN is set to YES.
-
1841 
-
1842 MAN_OUTPUT = man
-
1843 
-
1844 # The MAN_EXTENSION tag determines the extension that is added to the generated
-
1845 # man pages. In case the manual section does not start with a number, the number
-
1846 # 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
-
1847 # optional.
-
1848 # The default value is: .3.
-
1849 # This tag requires that the tag GENERATE_MAN is set to YES.
-
1850 
-
1851 MAN_EXTENSION = .3
-
1852 
-
1853 # The MAN_SUBDIR tag determines the name of the directory created within
-
1854 # MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
-
1855 # MAN_EXTENSION with the initial . removed.
-
1856 # This tag requires that the tag GENERATE_MAN is set to YES.
-
1857 
-
1858 MAN_SUBDIR =
-
1859 
-
1860 # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
-
1861 # will generate one additional man file for each entity documented in the real
-
1862 # man page(s). These additional files only source the real man page, but without
-
1863 # them the man command would be unable to find the correct page.
-
1864 # The default value is: NO.
-
1865 # This tag requires that the tag GENERATE_MAN is set to YES.
-
1866 
-
1867 MAN_LINKS = NO
-
1868 
-
1869 #---------------------------------------------------------------------------
-
1870 # Configuration options related to the XML output
-
1871 #---------------------------------------------------------------------------
-
1872 
-
1873 # If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
-
1874 # captures the structure of the code including all documentation.
-
1875 # The default value is: NO.
-
1876 
-
1877 GENERATE_XML = NO
-
1878 
-
1879 # The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
-
1880 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-
1881 # it.
-
1882 # The default directory is: xml.
-
1883 # This tag requires that the tag GENERATE_XML is set to YES.
-
1884 
-
1885 XML_OUTPUT = xml
-
1886 
-
1887 # If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
-
1888 # listings (including syntax highlighting and cross-referencing information) to
-
1889 # the XML output. Note that enabling this will significantly increase the size
-
1890 # of the XML output.
-
1891 # The default value is: YES.
-
1892 # This tag requires that the tag GENERATE_XML is set to YES.
-
1893 
-
1894 XML_PROGRAMLISTING = YES
-
1895 
-
1896 #---------------------------------------------------------------------------
-
1897 # Configuration options related to the DOCBOOK output
-
1898 #---------------------------------------------------------------------------
-
1899 
-
1900 # If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
-
1901 # that can be used to generate PDF.
-
1902 # The default value is: NO.
-
1903 
-
1904 GENERATE_DOCBOOK = NO
-
1905 
-
1906 # The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
-
1907 # If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
-
1908 # front of it.
-
1909 # The default directory is: docbook.
-
1910 # This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
1911 
-
1912 DOCBOOK_OUTPUT = docbook
-
1913 
-
1914 # If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
-
1915 # program listings (including syntax highlighting and cross-referencing
-
1916 # information) to the DOCBOOK output. Note that enabling this will significantly
-
1917 # increase the size of the DOCBOOK output.
-
1918 # The default value is: NO.
-
1919 # This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
1920 
-
1921 DOCBOOK_PROGRAMLISTING = NO
-
1922 
-
1923 #---------------------------------------------------------------------------
-
1924 # Configuration options for the AutoGen Definitions output
-
1925 #---------------------------------------------------------------------------
-
1926 
-
1927 # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
-
1928 # AutoGen Definitions (see http://autogen.sf.net) file that captures the
-
1929 # structure of the code including all documentation. Note that this feature is
-
1930 # still experimental and incomplete at the moment.
-
1931 # The default value is: NO.
-
1932 
-
1933 GENERATE_AUTOGEN_DEF = NO
-
1934 
-
1935 #---------------------------------------------------------------------------
-
1936 # Configuration options related to the Perl module output
-
1937 #---------------------------------------------------------------------------
-
1938 
-
1939 # If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
-
1940 # file that captures the structure of the code including all documentation.
-
1941 #
-
1942 # Note that this feature is still experimental and incomplete at the moment.
-
1943 # The default value is: NO.
-
1944 
-
1945 GENERATE_PERLMOD = NO
-
1946 
-
1947 # If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
-
1948 # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
-
1949 # output from the Perl module output.
-
1950 # The default value is: NO.
-
1951 # This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
1952 
-
1953 PERLMOD_LATEX = NO
-
1954 
-
1955 # If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
-
1956 # formatted so it can be parsed by a human reader. This is useful if you want to
-
1957 # understand what is going on. On the other hand, if this tag is set to NO, the
-
1958 # size of the Perl module output will be much smaller and Perl will parse it
-
1959 # just the same.
-
1960 # The default value is: YES.
-
1961 # This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
1962 
-
1963 PERLMOD_PRETTY = YES
-
1964 
-
1965 # The names of the make variables in the generated doxyrules.make file are
-
1966 # prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
-
1967 # so different doxyrules.make files included by the same Makefile don't
-
1968 # overwrite each other's variables.
-
1969 # This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
1970 
-
1971 PERLMOD_MAKEVAR_PREFIX =
-
1972 
-
1973 #---------------------------------------------------------------------------
-
1974 # Configuration options related to the preprocessor
-
1975 #---------------------------------------------------------------------------
-
1976 
-
1977 # If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
-
1978 # C-preprocessor directives found in the sources and include files.
-
1979 # The default value is: YES.
-
1980 
-
1981 ENABLE_PREPROCESSING = YES
-
1982 
-
1983 # If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
-
1984 # in the source code. If set to NO, only conditional compilation will be
-
1985 # performed. Macro expansion can be done in a controlled way by setting
-
1986 # EXPAND_ONLY_PREDEF to YES.
-
1987 # The default value is: NO.
-
1988 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
1989 
-
1990 MACRO_EXPANSION = NO
-
1991 
-
1992 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
-
1993 # the macro expansion is limited to the macros specified with the PREDEFINED and
-
1994 # EXPAND_AS_DEFINED tags.
-
1995 # The default value is: NO.
-
1996 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
1997 
-
1998 EXPAND_ONLY_PREDEF = NO
-
1999 
-
2000 # If the SEARCH_INCLUDES tag is set to YES, the include files in the
-
2001 # INCLUDE_PATH will be searched if a #include is found.
-
2002 # The default value is: YES.
-
2003 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
2004 
-
2005 SEARCH_INCLUDES = YES
-
2006 
-
2007 # The INCLUDE_PATH tag can be used to specify one or more directories that
-
2008 # contain include files that are not input files but should be processed by the
-
2009 # preprocessor.
-
2010 # This tag requires that the tag SEARCH_INCLUDES is set to YES.
-
2011 
-
2012 INCLUDE_PATH =
-
2013 
-
2014 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-
2015 # patterns (like *.h and *.hpp) to filter out the header-files in the
-
2016 # directories. If left blank, the patterns specified with FILE_PATTERNS will be
-
2017 # used.
-
2018 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
2019 
-
2020 INCLUDE_FILE_PATTERNS =
-
2021 
-
2022 # The PREDEFINED tag can be used to specify one or more macro names that are
-
2023 # defined before the preprocessor is started (similar to the -D option of e.g.
-
2024 # gcc). The argument of the tag is a list of macros of the form: name or
-
2025 # name=definition (no spaces). If the definition and the "=" are omitted, "=1"
-
2026 # is assumed. To prevent a macro definition from being undefined via #undef or
-
2027 # recursively expanded use the := operator instead of the = operator.
-
2028 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
2029 
-
2030 PREDEFINED =
-
2031 
-
2032 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
-
2033 # tag can be used to specify a list of macro names that should be expanded. The
-
2034 # macro definition that is found in the sources will be used. Use the PREDEFINED
-
2035 # tag if you want to use a different macro definition that overrules the
-
2036 # definition found in the source code.
-
2037 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
2038 
-
2039 EXPAND_AS_DEFINED =
-
2040 
-
2041 # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-
2042 # remove all references to function-like macros that are alone on a line, have
-
2043 # an all uppercase name, and do not end with a semicolon. Such function macros
-
2044 # are typically used for boiler-plate code, and will confuse the parser if not
-
2045 # removed.
-
2046 # The default value is: YES.
-
2047 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
2048 
-
2049 SKIP_FUNCTION_MACROS = YES
-
2050 
-
2051 #---------------------------------------------------------------------------
-
2052 # Configuration options related to external references
-
2053 #---------------------------------------------------------------------------
-
2054 
-
2055 # The TAGFILES tag can be used to specify one or more tag files. For each tag
-
2056 # file the location of the external documentation should be added. The format of
-
2057 # a tag file without this location is as follows:
-
2058 # TAGFILES = file1 file2 ...
-
2059 # Adding location for the tag files is done as follows:
-
2060 # TAGFILES = file1=loc1 "file2 = loc2" ...
-
2061 # where loc1 and loc2 can be relative or absolute paths or URLs. See the
-
2062 # section "Linking to external documentation" for more information about the use
-
2063 # of tag files.
-
2064 # Note: Each tag file must have a unique name (where the name does NOT include
-
2065 # the path). If a tag file is not located in the directory in which doxygen is
-
2066 # run, you must also specify the path to the tagfile here.
-
2067 
-
2068 TAGFILES =
-
2069 
-
2070 # When a file name is specified after GENERATE_TAGFILE, doxygen will create a
-
2071 # tag file that is based on the input files it reads. See section "Linking to
-
2072 # external documentation" for more information about the usage of tag files.
-
2073 
-
2074 GENERATE_TAGFILE =
-
2075 
-
2076 # If the ALLEXTERNALS tag is set to YES, all external class will be listed in
-
2077 # the class index. If set to NO, only the inherited external classes will be
-
2078 # listed.
-
2079 # The default value is: NO.
-
2080 
-
2081 ALLEXTERNALS = NO
-
2082 
-
2083 # If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
-
2084 # in the modules index. If set to NO, only the current project's groups will be
-
2085 # listed.
-
2086 # The default value is: YES.
-
2087 
-
2088 EXTERNAL_GROUPS = YES
-
2089 
-
2090 # If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
-
2091 # the related pages index. If set to NO, only the current project's pages will
-
2092 # be listed.
-
2093 # The default value is: YES.
-
2094 
-
2095 EXTERNAL_PAGES = YES
-
2096 
-
2097 # The PERL_PATH should be the absolute path and name of the perl script
-
2098 # interpreter (i.e. the result of 'which perl').
-
2099 # The default file (with absolute path) is: /usr/bin/perl.
-
2100 
-
2101 PERL_PATH = /usr/bin/perl
-
2102 
-
2103 #---------------------------------------------------------------------------
-
2104 # Configuration options related to the dot tool
-
2105 #---------------------------------------------------------------------------
-
2106 
-
2107 # If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
-
2108 # (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
-
2109 # NO turns the diagrams off. Note that this option also works with HAVE_DOT
-
2110 # disabled, but it is recommended to install and use dot, since it yields more
-
2111 # powerful graphs.
-
2112 # The default value is: YES.
-
2113 
-
2114 CLASS_DIAGRAMS = YES
-
2115 
-
2116 # You can define message sequence charts within doxygen comments using the \msc
-
2117 # command. Doxygen will then run the mscgen tool (see:
-
2118 # http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
-
2119 # documentation. The MSCGEN_PATH tag allows you to specify the directory where
-
2120 # the mscgen tool resides. If left empty the tool is assumed to be found in the
-
2121 # default search path.
-
2122 
-
2123 MSCGEN_PATH =
-
2124 
-
2125 # You can include diagrams made with dia in doxygen documentation. Doxygen will
-
2126 # then run dia to produce the diagram and insert it in the documentation. The
-
2127 # DIA_PATH tag allows you to specify the directory where the dia binary resides.
-
2128 # If left empty dia is assumed to be found in the default search path.
-
2129 
-
2130 DIA_PATH =
-
2131 
-
2132 # If set to YES the inheritance and collaboration graphs will hide inheritance
-
2133 # and usage relations if the target is undocumented or is not a class.
-
2134 # The default value is: YES.
-
2135 
-
2136 HIDE_UNDOC_RELATIONS = YES
-
2137 
-
2138 # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-
2139 # available from the path. This tool is part of Graphviz (see:
-
2140 # http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
-
2141 # Bell Labs. The other options in this section have no effect if this option is
-
2142 # set to NO
-
2143 # The default value is: NO.
-
2144 
-
2145 HAVE_DOT = NO
-
2146 
-
2147 # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
-
2148 # to run in parallel. When set to 0 doxygen will base this on the number of
-
2149 # processors available in the system. You can set it explicitly to a value
-
2150 # larger than 0 to get control over the balance between CPU load and processing
-
2151 # speed.
-
2152 # Minimum value: 0, maximum value: 32, default value: 0.
-
2153 # This tag requires that the tag HAVE_DOT is set to YES.
-
2154 
-
2155 DOT_NUM_THREADS = 0
-
2156 
-
2157 # When you want a differently looking font in the dot files that doxygen
-
2158 # generates you can specify the font name using DOT_FONTNAME. You need to make
-
2159 # sure dot is able to find the font, which can be done by putting it in a
-
2160 # standard location or by setting the DOTFONTPATH environment variable or by
-
2161 # setting DOT_FONTPATH to the directory containing the font.
-
2162 # The default value is: Helvetica.
-
2163 # This tag requires that the tag HAVE_DOT is set to YES.
-
2164 
-
2165 DOT_FONTNAME = Helvetica
-
2166 
-
2167 # The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-
2168 # dot graphs.
-
2169 # Minimum value: 4, maximum value: 24, default value: 10.
-
2170 # This tag requires that the tag HAVE_DOT is set to YES.
-
2171 
-
2172 DOT_FONTSIZE = 10
-
2173 
-
2174 # By default doxygen will tell dot to use the default font as specified with
-
2175 # DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
-
2176 # the path where dot can find it using this tag.
-
2177 # This tag requires that the tag HAVE_DOT is set to YES.
-
2178 
-
2179 DOT_FONTPATH =
-
2180 
-
2181 # If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
-
2182 # each documented class showing the direct and indirect inheritance relations.
-
2183 # Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
-
2184 # The default value is: YES.
-
2185 # This tag requires that the tag HAVE_DOT is set to YES.
-
2186 
-
2187 CLASS_GRAPH = YES
-
2188 
-
2189 # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
-
2190 # graph for each documented class showing the direct and indirect implementation
-
2191 # dependencies (inheritance, containment, and class references variables) of the
-
2192 # class with other documented classes.
-
2193 # The default value is: YES.
-
2194 # This tag requires that the tag HAVE_DOT is set to YES.
-
2195 
-
2196 COLLABORATION_GRAPH = YES
-
2197 
-
2198 # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
-
2199 # groups, showing the direct groups dependencies.
-
2200 # The default value is: YES.
-
2201 # This tag requires that the tag HAVE_DOT is set to YES.
-
2202 
-
2203 GROUP_GRAPHS = YES
-
2204 
-
2205 # If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
-
2206 # collaboration diagrams in a style similar to the OMG's Unified Modeling
-
2207 # Language.
-
2208 # The default value is: NO.
-
2209 # This tag requires that the tag HAVE_DOT is set to YES.
-
2210 
-
2211 UML_LOOK = NO
-
2212 
-
2213 # If the UML_LOOK tag is enabled, the fields and methods are shown inside the
-
2214 # class node. If there are many fields or methods and many nodes the graph may
-
2215 # become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
-
2216 # number of items for each type to make the size more manageable. Set this to 0
-
2217 # for no limit. Note that the threshold may be exceeded by 50% before the limit
-
2218 # is enforced. So when you set the threshold to 10, up to 15 fields may appear,
-
2219 # but if the number exceeds 15, the total amount of fields shown is limited to
-
2220 # 10.
-
2221 # Minimum value: 0, maximum value: 100, default value: 10.
-
2222 # This tag requires that the tag HAVE_DOT is set to YES.
-
2223 
-
2224 UML_LIMIT_NUM_FIELDS = 10
-
2225 
-
2226 # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
-
2227 # collaboration graphs will show the relations between templates and their
-
2228 # instances.
-
2229 # The default value is: NO.
-
2230 # This tag requires that the tag HAVE_DOT is set to YES.
-
2231 
-
2232 TEMPLATE_RELATIONS = NO
-
2233 
-
2234 # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
-
2235 # YES then doxygen will generate a graph for each documented file showing the
-
2236 # direct and indirect include dependencies of the file with other documented
-
2237 # files.
-
2238 # The default value is: YES.
-
2239 # This tag requires that the tag HAVE_DOT is set to YES.
-
2240 
-
2241 INCLUDE_GRAPH = YES
-
2242 
-
2243 # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
-
2244 # set to YES then doxygen will generate a graph for each documented file showing
-
2245 # the direct and indirect include dependencies of the file with other documented
-
2246 # files.
-
2247 # The default value is: YES.
-
2248 # This tag requires that the tag HAVE_DOT is set to YES.
-
2249 
-
2250 INCLUDED_BY_GRAPH = YES
-
2251 
-
2252 # If the CALL_GRAPH tag is set to YES then doxygen will generate a call
-
2253 # dependency graph for every global function or class method.
-
2254 #
-
2255 # Note that enabling this option will significantly increase the time of a run.
-
2256 # So in most cases it will be better to enable call graphs for selected
-
2257 # functions only using the \callgraph command. Disabling a call graph can be
-
2258 # accomplished by means of the command \hidecallgraph.
-
2259 # The default value is: NO.
-
2260 # This tag requires that the tag HAVE_DOT is set to YES.
-
2261 
-
2262 CALL_GRAPH = YES
-
2263 
-
2264 # If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
-
2265 # dependency graph for every global function or class method.
-
2266 #
-
2267 # Note that enabling this option will significantly increase the time of a run.
-
2268 # So in most cases it will be better to enable caller graphs for selected
-
2269 # functions only using the \callergraph command. Disabling a caller graph can be
-
2270 # accomplished by means of the command \hidecallergraph.
-
2271 # The default value is: NO.
-
2272 # This tag requires that the tag HAVE_DOT is set to YES.
-
2273 
-
2274 CALLER_GRAPH = YES
-
2275 
-
2276 # If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
-
2277 # hierarchy of all classes instead of a textual one.
-
2278 # The default value is: YES.
-
2279 # This tag requires that the tag HAVE_DOT is set to YES.
-
2280 
-
2281 GRAPHICAL_HIERARCHY = YES
-
2282 
-
2283 # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
-
2284 # dependencies a directory has on other directories in a graphical way. The
-
2285 # dependency relations are determined by the #include relations between the
-
2286 # files in the directories.
-
2287 # The default value is: YES.
-
2288 # This tag requires that the tag HAVE_DOT is set to YES.
-
2289 
-
2290 DIRECTORY_GRAPH = YES
-
2291 
-
2292 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-
2293 # generated by dot. For an explanation of the image formats see the section
-
2294 # output formats in the documentation of the dot tool (Graphviz (see:
-
2295 # http://www.graphviz.org/)).
-
2296 # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
-
2297 # to make the SVG files visible in IE 9+ (other browsers do not have this
-
2298 # requirement).
-
2299 # Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
-
2300 # png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
-
2301 # png:gdiplus:gdiplus.
-
2302 # The default value is: png.
-
2303 # This tag requires that the tag HAVE_DOT is set to YES.
-
2304 
-
2305 DOT_IMAGE_FORMAT = png
-
2306 
-
2307 # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-
2308 # enable generation of interactive SVG images that allow zooming and panning.
-
2309 #
-
2310 # Note that this requires a modern browser other than Internet Explorer. Tested
-
2311 # and working are Firefox, Chrome, Safari, and Opera.
-
2312 # Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
-
2313 # the SVG files visible. Older versions of IE do not have SVG support.
-
2314 # The default value is: NO.
-
2315 # This tag requires that the tag HAVE_DOT is set to YES.
-
2316 
-
2317 INTERACTIVE_SVG = NO
-
2318 
-
2319 # The DOT_PATH tag can be used to specify the path where the dot tool can be
-
2320 # found. If left blank, it is assumed the dot tool can be found in the path.
-
2321 # This tag requires that the tag HAVE_DOT is set to YES.
-
2322 
-
2323 DOT_PATH =
-
2324 
-
2325 # The DOTFILE_DIRS tag can be used to specify one or more directories that
-
2326 # contain dot files that are included in the documentation (see the \dotfile
-
2327 # command).
-
2328 # This tag requires that the tag HAVE_DOT is set to YES.
-
2329 
-
2330 DOTFILE_DIRS =
-
2331 
-
2332 # The MSCFILE_DIRS tag can be used to specify one or more directories that
-
2333 # contain msc files that are included in the documentation (see the \mscfile
-
2334 # command).
-
2335 
-
2336 MSCFILE_DIRS =
-
2337 
-
2338 # The DIAFILE_DIRS tag can be used to specify one or more directories that
-
2339 # contain dia files that are included in the documentation (see the \diafile
-
2340 # command).
-
2341 
-
2342 DIAFILE_DIRS =
-
2343 
-
2344 # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
-
2345 # path where java can find the plantuml.jar file. If left blank, it is assumed
-
2346 # PlantUML is not used or called during a preprocessing step. Doxygen will
-
2347 # generate a warning when it encounters a \startuml command in this case and
-
2348 # will not generate output for the diagram.
-
2349 
-
2350 PLANTUML_JAR_PATH =
-
2351 
-
2352 # When using plantuml, the specified paths are searched for files specified by
-
2353 # the !include statement in a plantuml block.
-
2354 
-
2355 PLANTUML_INCLUDE_PATH =
-
2356 
-
2357 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
-
2358 # that will be shown in the graph. If the number of nodes in a graph becomes
-
2359 # larger than this value, doxygen will truncate the graph, which is visualized
-
2360 # by representing a node as a red box. Note that doxygen if the number of direct
-
2361 # children of the root node in a graph is already larger than
-
2362 # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
-
2363 # the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-
2364 # Minimum value: 0, maximum value: 10000, default value: 50.
-
2365 # This tag requires that the tag HAVE_DOT is set to YES.
-
2366 
-
2367 DOT_GRAPH_MAX_NODES = 50
-
2368 
-
2369 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
-
2370 # generated by dot. A depth value of 3 means that only nodes reachable from the
-
2371 # root by following a path via at most 3 edges will be shown. Nodes that lay
-
2372 # further from the root node will be omitted. Note that setting this option to 1
-
2373 # or 2 may greatly reduce the computation time needed for large code bases. Also
-
2374 # note that the size of a graph can be further restricted by
-
2375 # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-
2376 # Minimum value: 0, maximum value: 1000, default value: 0.
-
2377 # This tag requires that the tag HAVE_DOT is set to YES.
-
2378 
-
2379 MAX_DOT_GRAPH_DEPTH = 1000
-
2380 
-
2381 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-
2382 # background. This is disabled by default, because dot on Windows does not seem
-
2383 # to support this out of the box.
-
2384 #
-
2385 # Warning: Depending on the platform used, enabling this option may lead to
-
2386 # badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-
2387 # read).
-
2388 # The default value is: NO.
-
2389 # This tag requires that the tag HAVE_DOT is set to YES.
-
2390 
-
2391 DOT_TRANSPARENT = NO
-
2392 
-
2393 # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
-
2394 # files in one run (i.e. multiple -o and -T options on the command line). This
-
2395 # makes dot run faster, but since only newer versions of dot (>1.8.10) support
-
2396 # this, this feature is disabled by default.
-
2397 # The default value is: NO.
-
2398 # This tag requires that the tag HAVE_DOT is set to YES.
-
2399 
-
2400 DOT_MULTI_TARGETS = NO
-
2401 
-
2402 # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
-
2403 # explaining the meaning of the various boxes and arrows in the dot generated
-
2404 # graphs.
-
2405 # The default value is: YES.
-
2406 # This tag requires that the tag HAVE_DOT is set to YES.
-
2407 
-
2408 GENERATE_LEGEND = YES
-
2409 
-
2410 # If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
-
2411 # files that are used to generate the various graphs.
-
2412 # The default value is: YES.
-
2413 # This tag requires that the tag HAVE_DOT is set to YES.
-
2414 
-
2415 DOT_CLEANUP = YES
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00048.html b/tests/OpenGL/package/glm/doc/api/a00048.html deleted file mode 100644 index f1e6b708..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00048.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: mat2x2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat2x2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file mat2x2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00048_source.html b/tests/OpenGL/package/glm/doc/api/a00048_source.html deleted file mode 100644 index 29c2a521..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00048_source.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -0.9.9 API documentation: mat2x2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat2x2.hpp
-
- - - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00049.html b/tests/OpenGL/package/glm/doc/api/a00049.html deleted file mode 100644 index 02371af4..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00049.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: mat2x3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat2x3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file mat2x3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00049_source.html b/tests/OpenGL/package/glm/doc/api/a00049_source.html deleted file mode 100644 index 9b32dceb..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00049_source.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -0.9.9 API documentation: mat2x3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat2x3.hpp
-
- - - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00050.html b/tests/OpenGL/package/glm/doc/api/a00050.html deleted file mode 100644 index edc8e0d3..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00050.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: mat2x4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat2x4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file mat2x4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00050_source.html b/tests/OpenGL/package/glm/doc/api/a00050_source.html deleted file mode 100644 index ef9de3a5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00050_source.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -0.9.9 API documentation: mat2x4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat2x4.hpp
-
- - - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00051.html b/tests/OpenGL/package/glm/doc/api/a00051.html deleted file mode 100644 index fe42f0de..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00051.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: mat3x2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat3x2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file mat3x2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00051_source.html b/tests/OpenGL/package/glm/doc/api/a00051_source.html deleted file mode 100644 index 7ff21cc9..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00051_source.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -0.9.9 API documentation: mat3x2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat3x2.hpp
-
- - - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00052.html b/tests/OpenGL/package/glm/doc/api/a00052.html deleted file mode 100644 index e54365b5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00052.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: mat3x3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat3x3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file mat3x3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00052_source.html b/tests/OpenGL/package/glm/doc/api/a00052_source.html deleted file mode 100644 index d05398cc..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00052_source.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -0.9.9 API documentation: mat3x3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat3x3.hpp
-
- - - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00053.html b/tests/OpenGL/package/glm/doc/api/a00053.html deleted file mode 100644 index 595a4ebd..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00053.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: mat3x4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat3x4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file mat3x4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00053_source.html b/tests/OpenGL/package/glm/doc/api/a00053_source.html deleted file mode 100644 index ceaa6234..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00053_source.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -0.9.9 API documentation: mat3x4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat3x4.hpp
-
- - - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00054.html b/tests/OpenGL/package/glm/doc/api/a00054.html deleted file mode 100644 index 8a064563..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00054.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: mat4x2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat4x2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file mat4x2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00054_source.html b/tests/OpenGL/package/glm/doc/api/a00054_source.html deleted file mode 100644 index 5e8fe2dc..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00054_source.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -0.9.9 API documentation: mat4x2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat4x2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
- - - -
8 #include "./ext/matrix_float4x2_precision.hpp"
-
9 
- -
Core features
-
Core features
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00055.html b/tests/OpenGL/package/glm/doc/api/a00055.html deleted file mode 100644 index 3905618f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00055.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: mat4x3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat4x3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file mat4x3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00055_source.html b/tests/OpenGL/package/glm/doc/api/a00055_source.html deleted file mode 100644 index 85f4e8fe..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00055_source.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -0.9.9 API documentation: mat4x3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat4x3.hpp
-
- - - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00056.html b/tests/OpenGL/package/glm/doc/api/a00056.html deleted file mode 100644 index b4a33834..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00056.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: mat4x4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat4x4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file mat4x4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00056_source.html b/tests/OpenGL/package/glm/doc/api/a00056_source.html deleted file mode 100644 index b6f327dc..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00056_source.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -0.9.9 API documentation: mat4x4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mat4x4.hpp
-
- - - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00057.html b/tests/OpenGL/package/glm/doc/api/a00057.html deleted file mode 100644 index 2513496c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00057.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL T determinant (mat< C, R, T, Q > const &m)
 Return the determinant of a squared matrix. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL mat< C, R, T, Q > inverse (mat< C, R, T, Q > const &m)
 Return the inverse of a squared matrix. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL mat< C, R, T, Q > matrixCompMult (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y)
 Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and y[i][j]. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL detail::outerProduct_trait< C, R, T, Q >::type outerProduct (vec< C, T, Q > const &c, vec< R, T, Q > const &r)
 Treats the first parameter c as a column vector and the second parameter r as a row vector and does a linear algebraic matrix multiply c * r. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL mat< C, R, T, Q >::transpose_type transpose (mat< C, R, T, Q > const &x)
 Returns the transposed matrix of x. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00057_source.html b/tests/OpenGL/package/glm/doc/api/a00057_source.html deleted file mode 100644 index f6793317..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00057_source.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependencies
-
16 #include "detail/qualifier.hpp"
-
17 #include "detail/setup.hpp"
-
18 #include "vec2.hpp"
-
19 #include "vec3.hpp"
-
20 #include "vec4.hpp"
-
21 #include "mat2x2.hpp"
-
22 #include "mat2x3.hpp"
-
23 #include "mat2x4.hpp"
-
24 #include "mat3x2.hpp"
-
25 #include "mat3x3.hpp"
-
26 #include "mat3x4.hpp"
-
27 #include "mat4x2.hpp"
-
28 #include "mat4x3.hpp"
-
29 #include "mat4x4.hpp"
-
30 
-
31 namespace glm {
-
32 namespace detail
-
33 {
-
34  template<length_t C, length_t R, typename T, qualifier Q>
-
35  struct outerProduct_trait{};
-
36 
-
37  template<typename T, qualifier Q>
-
38  struct outerProduct_trait<2, 2, T, Q>
-
39  {
-
40  typedef mat<2, 2, T, Q> type;
-
41  };
-
42 
-
43  template<typename T, qualifier Q>
-
44  struct outerProduct_trait<2, 3, T, Q>
-
45  {
-
46  typedef mat<3, 2, T, Q> type;
-
47  };
-
48 
-
49  template<typename T, qualifier Q>
-
50  struct outerProduct_trait<2, 4, T, Q>
-
51  {
-
52  typedef mat<4, 2, T, Q> type;
-
53  };
-
54 
-
55  template<typename T, qualifier Q>
-
56  struct outerProduct_trait<3, 2, T, Q>
-
57  {
-
58  typedef mat<2, 3, T, Q> type;
-
59  };
-
60 
-
61  template<typename T, qualifier Q>
-
62  struct outerProduct_trait<3, 3, T, Q>
-
63  {
-
64  typedef mat<3, 3, T, Q> type;
-
65  };
-
66 
-
67  template<typename T, qualifier Q>
-
68  struct outerProduct_trait<3, 4, T, Q>
-
69  {
-
70  typedef mat<4, 3, T, Q> type;
-
71  };
-
72 
-
73  template<typename T, qualifier Q>
-
74  struct outerProduct_trait<4, 2, T, Q>
-
75  {
-
76  typedef mat<2, 4, T, Q> type;
-
77  };
-
78 
-
79  template<typename T, qualifier Q>
-
80  struct outerProduct_trait<4, 3, T, Q>
-
81  {
-
82  typedef mat<3, 4, T, Q> type;
-
83  };
-
84 
-
85  template<typename T, qualifier Q>
-
86  struct outerProduct_trait<4, 4, T, Q>
-
87  {
-
88  typedef mat<4, 4, T, Q> type;
-
89  };
-
90 }//namespace detail
-
91 
-
94 
-
105  template<length_t C, length_t R, typename T, qualifier Q>
-
106  GLM_FUNC_DECL mat<C, R, T, Q> matrixCompMult(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y);
-
107 
-
119  template<length_t C, length_t R, typename T, qualifier Q>
-
120  GLM_FUNC_DECL typename detail::outerProduct_trait<C, R, T, Q>::type outerProduct(vec<C, T, Q> const& c, vec<R, T, Q> const& r);
-
121 
-
131  template<length_t C, length_t R, typename T, qualifier Q>
-
132  GLM_FUNC_DECL typename mat<C, R, T, Q>::transpose_type transpose(mat<C, R, T, Q> const& x);
-
133 
-
143  template<length_t C, length_t R, typename T, qualifier Q>
-
144  GLM_FUNC_DECL T determinant(mat<C, R, T, Q> const& m);
-
145 
-
155  template<length_t C, length_t R, typename T, qualifier Q>
-
156  GLM_FUNC_DECL mat<C, R, T, Q> inverse(mat<C, R, T, Q> const& m);
-
157 
-
159 }//namespace glm
-
160 
-
161 #include "detail/func_matrix.inl"
-
GLM_FUNC_DECL mat< C, R, T, Q > matrixCompMult(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y)
Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and...
-
Core features
-
GLM_FUNC_DECL T determinant(mat< C, R, T, Q > const &m)
Return the determinant of a squared matrix.
-
Core features
-
GLM_FUNC_DECL detail::outerProduct_trait< C, R, T, Q >::type outerProduct(vec< C, T, Q > const &c, vec< R, T, Q > const &r)
Treats the first parameter c as a column vector and the second parameter r as a row vector and does a...
-
Core features
-
Core features
-
GLM_FUNC_DECL mat< C, R, T, Q >::transpose_type transpose(mat< C, R, T, Q > const &x)
Returns the transposed matrix of x.
-
Core features
-
Core features
-
Core features
-
Core features
-
GLM_FUNC_DECL mat< C, R, T, Q > inverse(mat< C, R, T, Q > const &m)
Return the inverse of a squared matrix.
-
Core features
-
Core features
-
Core features
-
Core features
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00058.html b/tests/OpenGL/package/glm/doc/api/a00058.html deleted file mode 100644 index 8f2c5beb..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00058.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_access.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_access.hpp File Reference
-
-
- -

GLM_GTC_matrix_access -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType::col_type column (genType const &m, length_t index)
 Get a specific column of a matrix. More...
 
template<typename genType >
GLM_FUNC_DECL genType column (genType const &m, length_t index, typename genType::col_type const &x)
 Set a specific column to a matrix. More...
 
template<typename genType >
GLM_FUNC_DECL genType::row_type row (genType const &m, length_t index)
 Get a specific row of a matrix. More...
 
template<typename genType >
GLM_FUNC_DECL genType row (genType const &m, length_t index, typename genType::row_type const &x)
 Set a specific row to a matrix. More...
 
-

Detailed Description

-

GLM_GTC_matrix_access

-
See also
Core features (dependence)
- -

Definition in file matrix_access.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00058_source.html b/tests/OpenGL/package/glm/doc/api/a00058_source.html deleted file mode 100644 index 35b62127..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00058_source.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_access.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_access.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../detail/setup.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # pragma message("GLM: GLM_GTC_matrix_access extension included")
-
20 #endif
-
21 
-
22 namespace glm
-
23 {
-
26 
-
29  template<typename genType>
-
30  GLM_FUNC_DECL typename genType::row_type row(
-
31  genType const& m,
-
32  length_t index);
-
33 
-
36  template<typename genType>
-
37  GLM_FUNC_DECL genType row(
-
38  genType const& m,
-
39  length_t index,
-
40  typename genType::row_type const& x);
-
41 
-
44  template<typename genType>
-
45  GLM_FUNC_DECL typename genType::col_type column(
-
46  genType const& m,
-
47  length_t index);
-
48 
-
51  template<typename genType>
-
52  GLM_FUNC_DECL genType column(
-
53  genType const& m,
-
54  length_t index,
-
55  typename genType::col_type const& x);
-
56 
-
58 }//namespace glm
-
59 
-
60 #include "matrix_access.inl"
-
GLM_FUNC_DECL genType row(genType const &m, length_t index, typename genType::row_type const &x)
Set a specific row to a matrix.
-
GLM_FUNC_DECL genType column(genType const &m, length_t index, typename genType::col_type const &x)
Set a specific column to a matrix.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00059.html b/tests/OpenGL/package/glm/doc/api/a00059.html deleted file mode 100644 index 464cf2e1..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00059.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_clip_space.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_clip_space.hpp File Reference
-
-
- -

GLM_EXT_matrix_clip_space -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustum (T left, T right, T bottom, T top, T near, T far)
 Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumLH (T left, T right, T bottom, T top, T near, T far)
 Creates a left handed frustum matrix. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumLH_NO (T left, T right, T bottom, T top, T near, T far)
 Creates a left handed frustum matrix. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumLH_ZO (T left, T right, T bottom, T top, T near, T far)
 Creates a left handed frustum matrix. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumNO (T left, T right, T bottom, T top, T near, T far)
 Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumRH (T left, T right, T bottom, T top, T near, T far)
 Creates a right handed frustum matrix. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumRH_NO (T left, T right, T bottom, T top, T near, T far)
 Creates a right handed frustum matrix. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumRH_ZO (T left, T right, T bottom, T top, T near, T far)
 Creates a right handed frustum matrix. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumZO (T left, T right, T bottom, T top, T near, T far)
 Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > infinitePerspective (T fovy, T aspect, T near)
 Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > infinitePerspectiveLH (T fovy, T aspect, T near)
 Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > infinitePerspectiveRH (T fovy, T aspect, T near)
 Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > ortho (T left, T right, T bottom, T top)
 Creates a matrix for projecting two-dimensional coordinates onto the screen. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > ortho (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoLH (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoLH_NO (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoLH_ZO (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoNO (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoRH (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoRH_NO (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoRH_ZO (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoZO (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspective (T fovy, T aspect, T near, T far)
 Creates a matrix for a symetric perspective-view frustum based on the default handedness and default near and far clip planes definition. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFov (T fov, T width, T height, T near, T far)
 Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovLH (T fov, T width, T height, T near, T far)
 Builds a left handed perspective projection matrix based on a field of view. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovLH_NO (T fov, T width, T height, T near, T far)
 Builds a perspective projection matrix based on a field of view using left-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovLH_ZO (T fov, T width, T height, T near, T far)
 Builds a perspective projection matrix based on a field of view using left-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovNO (T fov, T width, T height, T near, T far)
 Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovRH (T fov, T width, T height, T near, T far)
 Builds a right handed perspective projection matrix based on a field of view. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovRH_NO (T fov, T width, T height, T near, T far)
 Builds a perspective projection matrix based on a field of view using right-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovRH_ZO (T fov, T width, T height, T near, T far)
 Builds a perspective projection matrix based on a field of view using right-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovZO (T fov, T width, T height, T near, T far)
 Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveLH (T fovy, T aspect, T near, T far)
 Creates a matrix for a left handed, symetric perspective-view frustum. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveLH_NO (T fovy, T aspect, T near, T far)
 Creates a matrix for a left handed, symetric perspective-view frustum. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveLH_ZO (T fovy, T aspect, T near, T far)
 Creates a matrix for a left handed, symetric perspective-view frustum. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveNO (T fovy, T aspect, T near, T far)
 Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveRH (T fovy, T aspect, T near, T far)
 Creates a matrix for a right handed, symetric perspective-view frustum. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveRH_NO (T fovy, T aspect, T near, T far)
 Creates a matrix for a right handed, symetric perspective-view frustum. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveRH_ZO (T fovy, T aspect, T near, T far)
 Creates a matrix for a right handed, symetric perspective-view frustum. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveZO (T fovy, T aspect, T near, T far)
 Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > tweakedInfinitePerspective (T fovy, T aspect, T near)
 Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > tweakedInfinitePerspective (T fovy, T aspect, T near, T ep)
 Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00059_source.html b/tests/OpenGL/package/glm/doc/api/a00059_source.html deleted file mode 100644 index 758d4894..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00059_source.html +++ /dev/null @@ -1,327 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_clip_space.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_clip_space.hpp
-
-
-Go to the documentation of this file.
1 
-
20 #pragma once
-
21 
-
22 // Dependencies
-
23 #include "../ext/scalar_constants.hpp"
-
24 #include "../geometric.hpp"
-
25 #include "../trigonometric.hpp"
-
26 
-
27 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
28 # pragma message("GLM: GLM_EXT_matrix_clip_space extension included")
-
29 #endif
-
30 
-
31 namespace glm
-
32 {
-
35 
-
42  template<typename T>
-
43  GLM_FUNC_DECL mat<4, 4, T, defaultp> ortho(
-
44  T left, T right, T bottom, T top);
-
45 
-
52  template<typename T>
-
53  GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_ZO(
-
54  T left, T right, T bottom, T top, T zNear, T zFar);
-
55 
-
62  template<typename T>
-
63  GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_NO(
-
64  T left, T right, T bottom, T top, T zNear, T zFar);
-
65 
-
72  template<typename T>
-
73  GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_ZO(
-
74  T left, T right, T bottom, T top, T zNear, T zFar);
-
75 
-
82  template<typename T>
-
83  GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_NO(
-
84  T left, T right, T bottom, T top, T zNear, T zFar);
-
85 
-
92  template<typename T>
-
93  GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoZO(
-
94  T left, T right, T bottom, T top, T zNear, T zFar);
-
95 
-
102  template<typename T>
-
103  GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoNO(
-
104  T left, T right, T bottom, T top, T zNear, T zFar);
-
105 
-
113  template<typename T>
-
114  GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH(
-
115  T left, T right, T bottom, T top, T zNear, T zFar);
-
116 
-
124  template<typename T>
-
125  GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH(
-
126  T left, T right, T bottom, T top, T zNear, T zFar);
-
127 
-
135  template<typename T>
-
136  GLM_FUNC_DECL mat<4, 4, T, defaultp> ortho(
-
137  T left, T right, T bottom, T top, T zNear, T zFar);
-
138 
-
143  template<typename T>
-
144  GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_ZO(
-
145  T left, T right, T bottom, T top, T near, T far);
-
146 
-
151  template<typename T>
-
152  GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_NO(
-
153  T left, T right, T bottom, T top, T near, T far);
-
154 
-
159  template<typename T>
-
160  GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_ZO(
-
161  T left, T right, T bottom, T top, T near, T far);
-
162 
-
167  template<typename T>
-
168  GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_NO(
-
169  T left, T right, T bottom, T top, T near, T far);
-
170 
-
175  template<typename T>
-
176  GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumZO(
-
177  T left, T right, T bottom, T top, T near, T far);
-
178 
-
183  template<typename T>
-
184  GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumNO(
-
185  T left, T right, T bottom, T top, T near, T far);
-
186 
-
192  template<typename T>
-
193  GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH(
-
194  T left, T right, T bottom, T top, T near, T far);
-
195 
-
201  template<typename T>
-
202  GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH(
-
203  T left, T right, T bottom, T top, T near, T far);
-
204 
-
210  template<typename T>
-
211  GLM_FUNC_DECL mat<4, 4, T, defaultp> frustum(
-
212  T left, T right, T bottom, T top, T near, T far);
-
213 
-
214 
-
224  template<typename T>
-
225  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_ZO(
-
226  T fovy, T aspect, T near, T far);
-
227 
-
237  template<typename T>
-
238  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_NO(
-
239  T fovy, T aspect, T near, T far);
-
240 
-
250  template<typename T>
-
251  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_ZO(
-
252  T fovy, T aspect, T near, T far);
-
253 
-
263  template<typename T>
-
264  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_NO(
-
265  T fovy, T aspect, T near, T far);
-
266 
-
276  template<typename T>
-
277  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveZO(
-
278  T fovy, T aspect, T near, T far);
-
279 
-
289  template<typename T>
-
290  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveNO(
-
291  T fovy, T aspect, T near, T far);
-
292 
-
303  template<typename T>
-
304  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH(
-
305  T fovy, T aspect, T near, T far);
-
306 
-
317  template<typename T>
-
318  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH(
-
319  T fovy, T aspect, T near, T far);
-
320 
-
331  template<typename T>
-
332  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspective(
-
333  T fovy, T aspect, T near, T far);
-
334 
-
345  template<typename T>
-
346  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_ZO(
-
347  T fov, T width, T height, T near, T far);
-
348 
-
359  template<typename T>
-
360  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_NO(
-
361  T fov, T width, T height, T near, T far);
-
362 
-
373  template<typename T>
-
374  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_ZO(
-
375  T fov, T width, T height, T near, T far);
-
376 
-
387  template<typename T>
-
388  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_NO(
-
389  T fov, T width, T height, T near, T far);
-
390 
-
401  template<typename T>
-
402  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovZO(
-
403  T fov, T width, T height, T near, T far);
-
404 
-
415  template<typename T>
-
416  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovNO(
-
417  T fov, T width, T height, T near, T far);
-
418 
-
430  template<typename T>
-
431  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH(
-
432  T fov, T width, T height, T near, T far);
-
433 
-
445  template<typename T>
-
446  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH(
-
447  T fov, T width, T height, T near, T far);
-
448 
-
459  template<typename T>
-
460  GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFov(
-
461  T fov, T width, T height, T near, T far);
-
462 
-
470  template<typename T>
-
471  GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveLH(
-
472  T fovy, T aspect, T near);
-
473 
-
481  template<typename T>
-
482  GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveRH(
-
483  T fovy, T aspect, T near);
-
484 
-
492  template<typename T>
-
493  GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspective(
-
494  T fovy, T aspect, T near);
-
495 
-
503  template<typename T>
-
504  GLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective(
-
505  T fovy, T aspect, T near);
-
506 
-
515  template<typename T>
-
516  GLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective(
-
517  T fovy, T aspect, T near, T ep);
-
518 
-
520 }//namespace glm
-
521 
-
522 #include "matrix_clip_space.inl"
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumRH_NO(T left, T right, T bottom, T top, T near, T far)
Creates a right handed frustum matrix.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > infinitePerspective(T fovy, T aspect, T near)
Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default han...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoZO(T left, T right, T bottom, T top, T zNear, T zFar)
Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > tweakedInfinitePerspective(T fovy, T aspect, T near, T ep)
Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics har...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoRH(T left, T right, T bottom, T top, T zNear, T zFar)
Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovLH(T fov, T width, T height, T near, T far)
Builds a left handed perspective projection matrix based on a field of view.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumLH_ZO(T left, T right, T bottom, T top, T near, T far)
Creates a left handed frustum matrix.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumLH_NO(T left, T right, T bottom, T top, T near, T far)
Creates a left handed frustum matrix.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumNO(T left, T right, T bottom, T top, T near, T far)
Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-h...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumRH(T left, T right, T bottom, T top, T near, T far)
Creates a right handed frustum matrix.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumLH(T left, T right, T bottom, T top, T near, T far)
Creates a left handed frustum matrix.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovRH_NO(T fov, T width, T height, T near, T far)
Builds a perspective projection matrix based on a field of view using right-handed coordinates...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFov(T fov, T width, T height, T near, T far)
Builds a perspective projection matrix based on a field of view and the default handedness and defaul...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovRH(T fov, T width, T height, T near, T far)
Builds a right handed perspective projection matrix based on a field of view.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumRH_ZO(T left, T right, T bottom, T top, T near, T far)
Creates a right handed frustum matrix.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoLH_ZO(T left, T right, T bottom, T top, T zNear, T zFar)
Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveLH_ZO(T fovy, T aspect, T near, T far)
Creates a matrix for a left handed, symetric perspective-view frustum.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveRH_NO(T fovy, T aspect, T near, T far)
Creates a matrix for a right handed, symetric perspective-view frustum.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoRH_NO(T left, T right, T bottom, T top, T zNear, T zFar)
Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveLH_NO(T fovy, T aspect, T near, T far)
Creates a matrix for a left handed, symetric perspective-view frustum.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > ortho(T left, T right, T bottom, T top, T zNear, T zFar)
Creates a matrix for an orthographic parallel viewing volume, using the default handedness and defaul...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovLH_ZO(T fov, T width, T height, T near, T far)
Builds a perspective projection matrix based on a field of view using left-handed coordinates...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumZO(T left, T right, T bottom, T top, T near, T far)
Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-h...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoLH(T left, T right, T bottom, T top, T zNear, T zFar)
Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoNO(T left, T right, T bottom, T top, T zNear, T zFar)
Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FO...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoLH_NO(T left, T right, T bottom, T top, T zNear, T zFar)
Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovNO(T fov, T width, T height, T near, T far)
Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspective(T fovy, T aspect, T near, T far)
Creates a matrix for a symetric perspective-view frustum based on the default handedness and default ...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoRH_ZO(T left, T right, T bottom, T top, T zNear, T zFar)
Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovZO(T fov, T width, T height, T near, T far)
Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > infinitePerspectiveRH(T fovy, T aspect, T near)
Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveNO(T fovy, T aspect, T near, T far)
Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_L...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovLH_NO(T fov, T width, T height, T near, T far)
Builds a perspective projection matrix based on a field of view using left-handed coordinates...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveRH_ZO(T fovy, T aspect, T near, T far)
Creates a matrix for a right handed, symetric perspective-view frustum.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveZO(T fovy, T aspect, T near, T far)
Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_L...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > infinitePerspectiveLH(T fovy, T aspect, T near)
Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveLH(T fovy, T aspect, T near, T far)
Creates a matrix for a left handed, symetric perspective-view frustum.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovRH_ZO(T fov, T width, T height, T near, T far)
Builds a perspective projection matrix based on a field of view using right-handed coordinates...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustum(T left, T right, T bottom, T top, T near, T far)
Creates a frustum matrix with default handedness, using the default handedness and default near and f...
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveRH(T fovy, T aspect, T near, T far)
Creates a matrix for a right handed, symetric perspective-view frustum.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00060.html b/tests/OpenGL/package/glm/doc/api/a00060.html deleted file mode 100644 index 878c55db..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00060.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_common.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_common.hpp File Reference
-
- - - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00060_source.html b/tests/OpenGL/package/glm/doc/api/a00060_source.html deleted file mode 100644 index 0232d910..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00060_source.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_common.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_common.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 #include "../detail/qualifier.hpp"
-
16 #include "../detail/_fixes.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # pragma message("GLM: GLM_EXT_matrix_transform extension included")
-
20 #endif
-
21 
-
22 namespace glm
-
23 {
-
26 
-
27  template<length_t C, length_t R, typename T, typename U, qualifier Q>
-
28  GLM_FUNC_DECL mat<C, R, T, Q> mix(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, mat<C, R, U, Q> const& a);
-
29 
-
30  template<length_t C, length_t R, typename T, typename U, qualifier Q>
-
31  GLM_FUNC_DECL mat<C, R, T, Q> mix(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, U a);
-
32 
-
34 }//namespace glm
-
35 
-
36 #include "matrix_common.inl"
-
GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a)
If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00061.html b/tests/OpenGL/package/glm/doc/api/a00061.html deleted file mode 100644 index c0ef4551..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00061.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_cross_product.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_cross_product.hpp File Reference
-
-
- -

GLM_GTX_matrix_cross_product -More...

- -

Go to the source code of this file.

- - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > matrixCross3 (vec< 3, T, Q > const &x)
 Build a cross product matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > matrixCross4 (vec< 3, T, Q > const &x)
 Build a cross product matrix. More...
 
-

Detailed Description

-

GLM_GTX_matrix_cross_product

-
See also
Core features (dependence)
-
-gtx_extented_min_max (dependence)
- -

Definition in file matrix_cross_product.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00061_source.html b/tests/OpenGL/package/glm/doc/api/a00061_source.html deleted file mode 100644 index 3eb5a4f2..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00061_source.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_cross_product.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_cross_product.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../glm.hpp"
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # ifndef GLM_ENABLE_EXPERIMENTAL
-
21 # pragma message("GLM: GLM_GTX_matrix_cross_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
22 # else
-
23 # pragma message("GLM: GLM_GTX_matrix_cross_product extension included")
-
24 # endif
-
25 #endif
-
26 
-
27 namespace glm
-
28 {
-
31 
-
34  template<typename T, qualifier Q>
-
35  GLM_FUNC_DECL mat<3, 3, T, Q> matrixCross3(
-
36  vec<3, T, Q> const& x);
-
37 
-
40  template<typename T, qualifier Q>
-
41  GLM_FUNC_DECL mat<4, 4, T, Q> matrixCross4(
-
42  vec<3, T, Q> const& x);
-
43 
-
45 }//namespace glm
-
46 
-
47 #include "matrix_cross_product.inl"
-
GLM_FUNC_DECL mat< 4, 4, T, Q > matrixCross4(vec< 3, T, Q > const &x)
Build a cross product matrix.
-
GLM_FUNC_DECL mat< 3, 3, T, Q > matrixCross3(vec< 3, T, Q > const &x)
Build a cross product matrix.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00062.html b/tests/OpenGL/package/glm/doc/api/a00062.html deleted file mode 100644 index 1156dc94..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00062.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_decompose.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_decompose.hpp File Reference
-
-
- -

GLM_GTX_matrix_decompose -More...

- -

Go to the source code of this file.

- - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL bool decompose (mat< 4, 4, T, Q > const &modelMatrix, vec< 3, T, Q > &scale, qua< T, Q > &orientation, vec< 3, T, Q > &translation, vec< 3, T, Q > &skew, vec< 4, T, Q > &perspective)
 Decomposes a model matrix to translations, rotation and scale components. More...
 
-

Detailed Description

-

GLM_GTX_matrix_decompose

-
See also
Core features (dependence)
- -

Definition in file matrix_decompose.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00062_source.html b/tests/OpenGL/package/glm/doc/api/a00062_source.html deleted file mode 100644 index a5e9c690..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00062_source.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_decompose.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_decompose.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependencies
-
16 #include "../mat4x4.hpp"
-
17 #include "../vec3.hpp"
-
18 #include "../vec4.hpp"
-
19 #include "../geometric.hpp"
-
20 #include "../gtc/quaternion.hpp"
-
21 #include "../gtc/matrix_transform.hpp"
-
22 
-
23 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
24 # ifndef GLM_ENABLE_EXPERIMENTAL
-
25 # pragma message("GLM: GLM_GTX_matrix_decompose is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
26 # else
-
27 # pragma message("GLM: GLM_GTX_matrix_decompose extension included")
-
28 # endif
-
29 #endif
-
30 
-
31 namespace glm
-
32 {
-
35 
-
38  template<typename T, qualifier Q>
-
39  GLM_FUNC_DECL bool decompose(
-
40  mat<4, 4, T, Q> const& modelMatrix,
-
41  vec<3, T, Q> & scale, qua<T, Q> & orientation, vec<3, T, Q> & translation, vec<3, T, Q> & skew, vec<4, T, Q> & perspective);
-
42 
-
44 }//namespace glm
-
45 
-
46 #include "matrix_decompose.inl"
-
GLM_FUNC_DECL bool decompose(mat< 4, 4, T, Q > const &modelMatrix, vec< 3, T, Q > &scale, qua< T, Q > &orientation, vec< 3, T, Q > &translation, vec< 3, T, Q > &skew, vec< 4, T, Q > &perspective)
Decomposes a model matrix to translations, rotation and scale components.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > scale(mat< 4, 4, T, Q > const &m, vec< 3, T, Q > const &v)
Builds a scale 4 * 4 matrix created from 3 scalars.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspective(T fovy, T aspect, T near, T far)
Creates a matrix for a symetric perspective-view frustum based on the default handedness and default ...
-
GLM_FUNC_DECL mat< 4, 4, T, Q > orientation(vec< 3, T, Q > const &Normal, vec< 3, T, Q > const &Up)
Build a rotation matrix from a normal and a up vector.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00063.html b/tests/OpenGL/package/glm/doc/api/a00063.html deleted file mode 100644 index 3732425f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00063.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double2x2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double2x2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Typedefs

typedef mat< 2, 2, double, defaultp > dmat2
 2 columns of 2 components matrix of double-precision floating-point numbers. More...
 
typedef mat< 2, 2, double, defaultp > dmat2x2
 2 columns of 2 components matrix of double-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_double2x2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00063_source.html b/tests/OpenGL/package/glm/doc/api/a00063_source.html deleted file mode 100644 index f684672e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00063_source.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double2x2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double2x2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat2x2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<2, 2, double, defaultp> dmat2x2;
-
16 
-
20  typedef mat<2, 2, double, defaultp> dmat2;
-
21 
-
23 }//namespace glm
-
mat< 2, 2, double, defaultp > dmat2
2 columns of 2 components matrix of double-precision floating-point numbers.
-
mat< 2, 2, double, defaultp > dmat2x2
2 columns of 2 components matrix of double-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00064.html b/tests/OpenGL/package/glm/doc/api/a00064.html deleted file mode 100644 index dffcad5c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00064.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double2x2_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double2x2_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef mat< 2, 2, double, highp > highp_dmat2
 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, double, highp > highp_dmat2x2
 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, double, lowp > lowp_dmat2
 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, double, lowp > lowp_dmat2x2
 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, double, mediump > mediump_dmat2
 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, double, mediump > mediump_dmat2x2
 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00064_source.html b/tests/OpenGL/package/glm/doc/api/a00064_source.html deleted file mode 100644 index 40b129dc..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00064_source.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double2x2_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double2x2_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat2x2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<2, 2, double, lowp> lowp_dmat2;
-
17 
-
22  typedef mat<2, 2, double, mediump> mediump_dmat2;
-
23 
-
28  typedef mat<2, 2, double, highp> highp_dmat2;
-
29 
-
34  typedef mat<2, 2, double, lowp> lowp_dmat2x2;
-
35 
-
40  typedef mat<2, 2, double, mediump> mediump_dmat2x2;
-
41 
-
46  typedef mat<2, 2, double, highp> highp_dmat2x2;
-
47 
-
49 }//namespace glm
-
mat< 2, 2, double, mediump > mediump_dmat2
2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 2, 2, double, lowp > lowp_dmat2
2 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...
-
mat< 2, 2, double, mediump > mediump_dmat2x2
2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 2, 2, double, highp > highp_dmat2x2
2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 2, 2, double, highp > highp_dmat2
2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 2, 2, double, lowp > lowp_dmat2x2
2 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00065.html b/tests/OpenGL/package/glm/doc/api/a00065.html deleted file mode 100644 index 3367bd25..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00065.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double2x3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double2x3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef mat< 2, 3, double, defaultp > dmat2x3
 2 columns of 3 components matrix of double-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_double2x3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00065_source.html b/tests/OpenGL/package/glm/doc/api/a00065_source.html deleted file mode 100644 index 3e4202bf..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00065_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double2x3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double2x3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat2x3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<2, 3, double, defaultp> dmat2x3;
-
16 
-
18 }//namespace glm
-
mat< 2, 3, double, defaultp > dmat2x3
2 columns of 3 components matrix of double-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00066.html b/tests/OpenGL/package/glm/doc/api/a00066.html deleted file mode 100644 index 5bc921b1..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00066.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double2x3_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double2x3_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef mat< 2, 3, double, highp > highp_dmat2x3
 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 3, double, lowp > lowp_dmat2x3
 2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 3, double, mediump > mediump_dmat2x3
 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00066_source.html b/tests/OpenGL/package/glm/doc/api/a00066_source.html deleted file mode 100644 index cb1ec15f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00066_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double2x3_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double2x3_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat2x3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<2, 3, double, lowp> lowp_dmat2x3;
-
17 
-
22  typedef mat<2, 3, double, mediump> mediump_dmat2x3;
-
23 
-
28  typedef mat<2, 3, double, highp> highp_dmat2x3;
-
29 
-
31 }//namespace glm
-
mat< 2, 3, double, mediump > mediump_dmat2x3
2 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 2, 3, double, highp > highp_dmat2x3
2 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 2, 3, double, lowp > lowp_dmat2x3
2 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00067.html b/tests/OpenGL/package/glm/doc/api/a00067.html deleted file mode 100644 index 9649eb03..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00067.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double2x4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double2x4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef mat< 2, 4, double, defaultp > dmat2x4
 2 columns of 4 components matrix of double-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_double2x4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00067_source.html b/tests/OpenGL/package/glm/doc/api/a00067_source.html deleted file mode 100644 index 94d4c97b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00067_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double2x4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double2x4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat2x4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<2, 4, double, defaultp> dmat2x4;
-
16 
-
18 }//namespace glm
-
mat< 2, 4, double, defaultp > dmat2x4
2 columns of 4 components matrix of double-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00068.html b/tests/OpenGL/package/glm/doc/api/a00068.html deleted file mode 100644 index d02af5d0..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00068.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double2x4_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double2x4_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef mat< 2, 4, double, highp > highp_dmat2x4
 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 4, double, lowp > lowp_dmat2x4
 2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 4, double, mediump > mediump_dmat2x4
 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00068_source.html b/tests/OpenGL/package/glm/doc/api/a00068_source.html deleted file mode 100644 index cee8dd3c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00068_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double2x4_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double2x4_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat2x4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<2, 4, double, lowp> lowp_dmat2x4;
-
17 
-
22  typedef mat<2, 4, double, mediump> mediump_dmat2x4;
-
23 
-
28  typedef mat<2, 4, double, highp> highp_dmat2x4;
-
29 
-
31 }//namespace glm
-
mat< 2, 4, double, highp > highp_dmat2x4
2 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 2, 4, double, mediump > mediump_dmat2x4
2 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 2, 4, double, lowp > lowp_dmat2x4
2 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00069.html b/tests/OpenGL/package/glm/doc/api/a00069.html deleted file mode 100644 index 77e86d3a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00069.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double3x2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double3x2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef mat< 3, 2, double, defaultp > dmat3x2
 3 columns of 2 components matrix of double-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_double3x2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00069_source.html b/tests/OpenGL/package/glm/doc/api/a00069_source.html deleted file mode 100644 index 893db253..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00069_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double3x2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double3x2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat3x2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<3, 2, double, defaultp> dmat3x2;
-
16 
-
18 }//namespace glm
-
mat< 3, 2, double, defaultp > dmat3x2
3 columns of 2 components matrix of double-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00070.html b/tests/OpenGL/package/glm/doc/api/a00070.html deleted file mode 100644 index f6e3e393..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00070.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double3x2_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double3x2_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef mat< 3, 2, double, highp > highp_dmat3x2
 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 2, double, lowp > lowp_dmat3x2
 3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 2, double, mediump > mediump_dmat3x2
 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00070_source.html b/tests/OpenGL/package/glm/doc/api/a00070_source.html deleted file mode 100644 index 0e228c61..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00070_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double3x2_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double3x2_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat3x2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<3, 2, double, lowp> lowp_dmat3x2;
-
17 
-
22  typedef mat<3, 2, double, mediump> mediump_dmat3x2;
-
23 
-
28  typedef mat<3, 2, double, highp> highp_dmat3x2;
-
29 
-
31 }//namespace glm
-
mat< 3, 2, double, mediump > mediump_dmat3x2
3 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 3, 2, double, lowp > lowp_dmat3x2
3 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...
-
mat< 3, 2, double, highp > highp_dmat3x2
3 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00071.html b/tests/OpenGL/package/glm/doc/api/a00071.html deleted file mode 100644 index 69a7029e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00071.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double3x3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double3x3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Typedefs

typedef mat< 3, 3, double, defaultp > dmat3
 3 columns of 3 components matrix of double-precision floating-point numbers. More...
 
typedef mat< 3, 3, double, defaultp > dmat3x3
 3 columns of 3 components matrix of double-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_double3x3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00071_source.html b/tests/OpenGL/package/glm/doc/api/a00071_source.html deleted file mode 100644 index 5d9c0b7b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00071_source.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double3x3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double3x3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat3x3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<3, 3, double, defaultp> dmat3x3;
-
16 
-
20  typedef mat<3, 3, double, defaultp> dmat3;
-
21 
-
23 }//namespace glm
-
mat< 3, 3, double, defaultp > dmat3x3
3 columns of 3 components matrix of double-precision floating-point numbers.
-
mat< 3, 3, double, defaultp > dmat3
3 columns of 3 components matrix of double-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00072.html b/tests/OpenGL/package/glm/doc/api/a00072.html deleted file mode 100644 index 102098a6..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00072.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double3x3_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double3x3_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef mat< 3, 3, double, highp > highp_dmat3
 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, double, highp > highp_dmat3x3
 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, double, lowp > lowp_dmat3
 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, double, lowp > lowp_dmat3x3
 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, double, mediump > mediump_dmat3
 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, double, mediump > mediump_dmat3x3
 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00072_source.html b/tests/OpenGL/package/glm/doc/api/a00072_source.html deleted file mode 100644 index 7726d4a2..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00072_source.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double3x3_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double3x3_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat3x3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<3, 3, double, lowp> lowp_dmat3;
-
17 
-
22  typedef mat<3, 3, double, mediump> mediump_dmat3;
-
23 
-
28  typedef mat<3, 3, double, highp> highp_dmat3;
-
29 
-
34  typedef mat<3, 3, double, lowp> lowp_dmat3x3;
-
35 
-
40  typedef mat<3, 3, double, mediump> mediump_dmat3x3;
-
41 
-
46  typedef mat<3, 3, double, highp> highp_dmat3x3;
-
47 
-
49 }//namespace glm
-
mat< 3, 3, double, lowp > lowp_dmat3
3 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...
-
mat< 3, 3, double, lowp > lowp_dmat3x3
3 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...
-
mat< 3, 3, double, highp > highp_dmat3
3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 3, 3, double, highp > highp_dmat3x3
3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 3, 3, double, mediump > mediump_dmat3x3
3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 3, 3, double, mediump > mediump_dmat3
3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00073.html b/tests/OpenGL/package/glm/doc/api/a00073.html deleted file mode 100644 index 8b94028d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00073.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double3x4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double3x4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef mat< 3, 4, double, defaultp > dmat3x4
 3 columns of 4 components matrix of double-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_double3x4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00073_source.html b/tests/OpenGL/package/glm/doc/api/a00073_source.html deleted file mode 100644 index 65681a0e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00073_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double3x4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double3x4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat3x4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<3, 4, double, defaultp> dmat3x4;
-
16 
-
18 }//namespace glm
-
mat< 3, 4, double, defaultp > dmat3x4
3 columns of 4 components matrix of double-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00074.html b/tests/OpenGL/package/glm/doc/api/a00074.html deleted file mode 100644 index dc2586d7..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00074.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double3x4_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double3x4_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef mat< 3, 4, double, highp > highp_dmat3x4
 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 4, double, lowp > lowp_dmat3x4
 3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 4, double, mediump > mediump_dmat3x4
 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00074_source.html b/tests/OpenGL/package/glm/doc/api/a00074_source.html deleted file mode 100644 index e805fc78..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00074_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double3x4_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double3x4_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat3x4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<3, 4, double, lowp> lowp_dmat3x4;
-
17 
-
22  typedef mat<3, 4, double, mediump> mediump_dmat3x4;
-
23 
-
28  typedef mat<3, 4, double, highp> highp_dmat3x4;
-
29 
-
31 }//namespace glm
-
mat< 3, 4, double, lowp > lowp_dmat3x4
3 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...
-
mat< 3, 4, double, mediump > mediump_dmat3x4
3 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 3, 4, double, highp > highp_dmat3x4
3 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00075.html b/tests/OpenGL/package/glm/doc/api/a00075.html deleted file mode 100644 index 2b3c2219..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00075.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double4x2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double4x2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef mat< 4, 2, double, defaultp > dmat4x2
 4 columns of 2 components matrix of double-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_double4x2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00075_source.html b/tests/OpenGL/package/glm/doc/api/a00075_source.html deleted file mode 100644 index f688cedf..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00075_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double4x2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double4x2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat4x2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<4, 2, double, defaultp> dmat4x2;
-
16 
-
18 }//namespace glm
-
mat< 4, 2, double, defaultp > dmat4x2
4 columns of 2 components matrix of double-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00076.html b/tests/OpenGL/package/glm/doc/api/a00076.html deleted file mode 100644 index 1f1000fe..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00076.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double4x2_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double4x2_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef mat< 4, 2, double, highp > highp_dmat4x2
 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 2, double, lowp > lowp_dmat4x2
 4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 2, double, mediump > mediump_dmat4x2
 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00076_source.html b/tests/OpenGL/package/glm/doc/api/a00076_source.html deleted file mode 100644 index da64db97..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00076_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double4x2_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double4x2_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat4x2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<4, 2, double, lowp> lowp_dmat4x2;
-
17 
-
22  typedef mat<4, 2, double, mediump> mediump_dmat4x2;
-
23 
-
28  typedef mat<4, 2, double, highp> highp_dmat4x2;
-
29 
-
31 }//namespace glm
-
mat< 4, 2, double, lowp > lowp_dmat4x2
4 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...
-
mat< 4, 2, double, mediump > mediump_dmat4x2
4 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 4, 2, double, highp > highp_dmat4x2
4 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00077.html b/tests/OpenGL/package/glm/doc/api/a00077.html deleted file mode 100644 index 686affa9..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00077.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double4x3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double4x3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef mat< 4, 3, double, defaultp > dmat4x3
 4 columns of 3 components matrix of double-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_double4x3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00077_source.html b/tests/OpenGL/package/glm/doc/api/a00077_source.html deleted file mode 100644 index c8913cd1..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00077_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double4x3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double4x3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat4x3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<4, 3, double, defaultp> dmat4x3;
-
16 
-
18 }//namespace glm
-
mat< 4, 3, double, defaultp > dmat4x3
4 columns of 3 components matrix of double-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00078.html b/tests/OpenGL/package/glm/doc/api/a00078.html deleted file mode 100644 index 7cdee1c7..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00078.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double4x3_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double4x3_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef mat< 4, 3, double, highp > highp_dmat4x3
 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 3, double, lowp > lowp_dmat4x3
 4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 3, double, mediump > mediump_dmat4x3
 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00078_source.html b/tests/OpenGL/package/glm/doc/api/a00078_source.html deleted file mode 100644 index 923fc1d5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00078_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double4x3_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double4x3_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat4x3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<4, 3, double, lowp> lowp_dmat4x3;
-
17 
-
22  typedef mat<4, 3, double, mediump> mediump_dmat4x3;
-
23 
-
28  typedef mat<4, 3, double, highp> highp_dmat4x3;
-
29 
-
31 }//namespace glm
-
mat< 4, 3, double, highp > highp_dmat4x3
4 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 4, 3, double, mediump > mediump_dmat4x3
4 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 4, 3, double, lowp > lowp_dmat4x3
4 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00079.html b/tests/OpenGL/package/glm/doc/api/a00079.html deleted file mode 100644 index 338ac518..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00079.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double4x4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double4x4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Typedefs

typedef mat< 4, 4, double, defaultp > dmat4
 4 columns of 4 components matrix of double-precision floating-point numbers. More...
 
typedef mat< 4, 4, double, defaultp > dmat4x4
 4 columns of 4 components matrix of double-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_double4x4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00079_source.html b/tests/OpenGL/package/glm/doc/api/a00079_source.html deleted file mode 100644 index bd45445b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00079_source.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double4x4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double4x4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat4x4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<4, 4, double, defaultp> dmat4x4;
-
16 
-
20  typedef mat<4, 4, double, defaultp> dmat4;
-
21 
-
23 }//namespace glm
-
mat< 4, 4, double, defaultp > dmat4x4
4 columns of 4 components matrix of double-precision floating-point numbers.
-
mat< 4, 4, double, defaultp > dmat4
4 columns of 4 components matrix of double-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00080.html b/tests/OpenGL/package/glm/doc/api/a00080.html deleted file mode 100644 index c9421fe4..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00080.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double4x4_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_double4x4_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef mat< 4, 4, double, highp > highp_dmat4
 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, double, highp > highp_dmat4x4
 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, double, lowp > lowp_dmat4
 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, double, lowp > lowp_dmat4x4
 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, double, mediump > mediump_dmat4
 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, double, mediump > mediump_dmat4x4
 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00080_source.html b/tests/OpenGL/package/glm/doc/api/a00080_source.html deleted file mode 100644 index 7ba0a331..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00080_source.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_double4x4_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_double4x4_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat4x4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<4, 4, double, lowp> lowp_dmat4;
-
17 
-
22  typedef mat<4, 4, double, mediump> mediump_dmat4;
-
23 
-
28  typedef mat<4, 4, double, highp> highp_dmat4;
-
29 
-
34  typedef mat<4, 4, double, lowp> lowp_dmat4x4;
-
35 
-
40  typedef mat<4, 4, double, mediump> mediump_dmat4x4;
-
41 
-
46  typedef mat<4, 4, double, highp> highp_dmat4x4;
-
47 
-
49 }//namespace glm
-
mat< 4, 4, double, mediump > mediump_dmat4x4
4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 4, 4, double, lowp > lowp_dmat4
4 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...
-
mat< 4, 4, double, mediump > mediump_dmat4
4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 4, 4, double, highp > highp_dmat4x4
4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
mat< 4, 4, double, lowp > lowp_dmat4x4
4 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...
-
mat< 4, 4, double, highp > highp_dmat4
4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00081.html b/tests/OpenGL/package/glm/doc/api/a00081.html deleted file mode 100644 index d1e90c09..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00081.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_factorisation.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_factorisation.hpp File Reference
-
-
- -

GLM_GTX_matrix_factorisation -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Functions

template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL mat< C, R, T, Q > fliplr (mat< C, R, T, Q > const &in)
 Flips the matrix columns right and left. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL mat< C, R, T, Q > flipud (mat< C, R, T, Q > const &in)
 Flips the matrix rows up and down. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL void qr_decompose (mat< C, R, T, Q > const &in, mat<(C< R?C:R), R, T, Q > &q, mat< C,(C< R?C:R), T, Q > &r)
 Performs QR factorisation of a matrix. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL void rq_decompose (mat< C, R, T, Q > const &in, mat<(C< R?C:R), R, T, Q > &r, mat< C,(C< R?C:R), T, Q > &q)
 Performs RQ factorisation of a matrix. More...
 
-

Detailed Description

-

GLM_GTX_matrix_factorisation

-
See also
Core features (dependence)
- -

Definition in file matrix_factorisation.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00081_source.html b/tests/OpenGL/package/glm/doc/api/a00081_source.html deleted file mode 100644 index 2bee6a86..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00081_source.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_factorisation.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_factorisation.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_matrix_factorisation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_matrix_factorisation extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 /*
-
27 Suggestions:
-
28  - Move helper functions flipud and fliplr to another file: They may be helpful in more general circumstances.
-
29  - Implement other types of matrix factorisation, such as: QL and LQ, L(D)U, eigendecompositions, etc...
-
30 */
-
31 
-
32 namespace glm
-
33 {
-
36 
-
40  template <length_t C, length_t R, typename T, qualifier Q>
-
41  GLM_FUNC_DECL mat<C, R, T, Q> flipud(mat<C, R, T, Q> const& in);
-
42 
-
46  template <length_t C, length_t R, typename T, qualifier Q>
-
47  GLM_FUNC_DECL mat<C, R, T, Q> fliplr(mat<C, R, T, Q> const& in);
-
48 
-
54  template <length_t C, length_t R, typename T, qualifier Q>
-
55  GLM_FUNC_DECL void qr_decompose(mat<C, R, T, Q> const& in, mat<(C < R ? C : R), R, T, Q>& q, mat<C, (C < R ? C : R), T, Q>& r);
-
56 
-
63  template <length_t C, length_t R, typename T, qualifier Q>
-
64  GLM_FUNC_DECL void rq_decompose(mat<C, R, T, Q> const& in, mat<(C < R ? C : R), R, T, Q>& r, mat<C, (C < R ? C : R), T, Q>& q);
-
65 
-
67 }
-
68 
-
69 #include "matrix_factorisation.inl"
-
GLM_FUNC_DECL void rq_decompose(mat< C, R, T, Q > const &in, mat<(C< R?C:R), R, T, Q > &r, mat< C,(C< R?C:R), T, Q > &q)
Performs RQ factorisation of a matrix.
-
GLM_FUNC_DECL void qr_decompose(mat< C, R, T, Q > const &in, mat<(C< R?C:R), R, T, Q > &q, mat< C,(C< R?C:R), T, Q > &r)
Performs QR factorisation of a matrix.
-
GLM_FUNC_DECL mat< C, R, T, Q > flipud(mat< C, R, T, Q > const &in)
Flips the matrix rows up and down.
-
GLM_FUNC_DECL mat< C, R, T, Q > fliplr(mat< C, R, T, Q > const &in)
Flips the matrix columns right and left.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00082.html b/tests/OpenGL/package/glm/doc/api/a00082.html deleted file mode 100644 index 9ac278eb..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00082.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float2x2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float2x2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Typedefs

typedef mat< 2, 2, float, defaultp > mat2
 2 columns of 2 components matrix of single-precision floating-point numbers. More...
 
typedef mat< 2, 2, float, defaultp > mat2x2
 2 columns of 2 components matrix of single-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_float2x2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00082_source.html b/tests/OpenGL/package/glm/doc/api/a00082_source.html deleted file mode 100644 index 68f096c2..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00082_source.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float2x2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float2x2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat2x2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<2, 2, float, defaultp> mat2x2;
-
16 
-
20  typedef mat<2, 2, float, defaultp> mat2;
-
21 
-
23 }//namespace glm
-
mat< 2, 2, float, defaultp > mat2x2
2 columns of 2 components matrix of single-precision floating-point numbers.
-
mat< 2, 2, float, defaultp > mat2
2 columns of 2 components matrix of single-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00083.html b/tests/OpenGL/package/glm/doc/api/a00083.html deleted file mode 100644 index 9145fdcc..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00083.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float2x2_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float2x2_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef mat< 2, 2, float, highp > highp_mat2
 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, float, highp > highp_mat2x2
 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, float, lowp > lowp_mat2
 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, float, lowp > lowp_mat2x2
 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, float, mediump > mediump_mat2
 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, float, mediump > mediump_mat2x2
 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00083_source.html b/tests/OpenGL/package/glm/doc/api/a00083_source.html deleted file mode 100644 index d327c95c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00083_source.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float2x2_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float2x2_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat2x2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<2, 2, float, lowp> lowp_mat2;
-
17 
-
22  typedef mat<2, 2, float, mediump> mediump_mat2;
-
23 
-
28  typedef mat<2, 2, float, highp> highp_mat2;
-
29 
-
34  typedef mat<2, 2, float, lowp> lowp_mat2x2;
-
35 
-
40  typedef mat<2, 2, float, mediump> mediump_mat2x2;
-
41 
-
46  typedef mat<2, 2, float, highp> highp_mat2x2;
-
47 
-
49 }//namespace glm
-
mat< 2, 2, float, lowp > lowp_mat2
2 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...
-
mat< 2, 2, float, highp > highp_mat2
2 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...
-
mat< 2, 2, float, lowp > lowp_mat2x2
2 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...
-
mat< 2, 2, float, highp > highp_mat2x2
2 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...
-
mat< 2, 2, float, mediump > mediump_mat2x2
2 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...
-
mat< 2, 2, float, mediump > mediump_mat2
2 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00084.html b/tests/OpenGL/package/glm/doc/api/a00084.html deleted file mode 100644 index 3911e079..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00084.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float2x3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float2x3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef mat< 2, 3, float, defaultp > mat2x3
 2 columns of 3 components matrix of single-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_float2x3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00084_source.html b/tests/OpenGL/package/glm/doc/api/a00084_source.html deleted file mode 100644 index ba54fa2a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00084_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float2x3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float2x3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat2x3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<2, 3, float, defaultp> mat2x3;
-
16 
-
18 }//namespace glm
-
mat< 2, 3, float, defaultp > mat2x3
2 columns of 3 components matrix of single-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00085.html b/tests/OpenGL/package/glm/doc/api/a00085.html deleted file mode 100644 index 58bdd792..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00085.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float2x3_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float2x3_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef mat< 2, 3, float, highp > highp_mat2x3
 2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 3, float, lowp > lowp_mat2x3
 2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 3, float, mediump > mediump_mat2x3
 2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00085_source.html b/tests/OpenGL/package/glm/doc/api/a00085_source.html deleted file mode 100644 index c58d2ae6..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00085_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float2x3_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float2x3_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat2x3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<2, 3, float, lowp> lowp_mat2x3;
-
17 
-
22  typedef mat<2, 3, float, mediump> mediump_mat2x3;
-
23 
-
28  typedef mat<2, 3, float, highp> highp_mat2x3;
-
29 
-
31 }//namespace glm
-
mat< 2, 3, float, mediump > mediump_mat2x3
2 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...
-
mat< 2, 3, float, highp > highp_mat2x3
2 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...
-
mat< 2, 3, float, lowp > lowp_mat2x3
2 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00086.html b/tests/OpenGL/package/glm/doc/api/a00086.html deleted file mode 100644 index de06d1a7..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00086.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float2x4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float2x4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef mat< 2, 4, float, defaultp > mat2x4
 2 columns of 4 components matrix of single-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_float2x4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00086_source.html b/tests/OpenGL/package/glm/doc/api/a00086_source.html deleted file mode 100644 index 8e472d15..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00086_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float2x4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float2x4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat2x4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<2, 4, float, defaultp> mat2x4;
-
16 
-
18 }//namespace glm
-
mat< 2, 4, float, defaultp > mat2x4
2 columns of 4 components matrix of single-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00087.html b/tests/OpenGL/package/glm/doc/api/a00087.html deleted file mode 100644 index b0f38e98..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00087.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float2x4_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float2x4_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef mat< 2, 4, float, highp > highp_mat2x4
 2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 4, float, lowp > lowp_mat2x4
 2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 4, float, mediump > mediump_mat2x4
 2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00087_source.html b/tests/OpenGL/package/glm/doc/api/a00087_source.html deleted file mode 100644 index 24885f4a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00087_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float2x4_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float2x4_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat2x4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<2, 4, float, lowp> lowp_mat2x4;
-
17 
-
22  typedef mat<2, 4, float, mediump> mediump_mat2x4;
-
23 
-
28  typedef mat<2, 4, float, highp> highp_mat2x4;
-
29 
-
31 }//namespace glm
-
mat< 2, 4, float, lowp > lowp_mat2x4
2 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...
-
mat< 2, 4, float, mediump > mediump_mat2x4
2 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...
-
mat< 2, 4, float, highp > highp_mat2x4
2 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00088.html b/tests/OpenGL/package/glm/doc/api/a00088.html deleted file mode 100644 index 32953ba7..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00088.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float3x2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float3x2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef mat< 3, 2, float, defaultp > mat3x2
 3 columns of 2 components matrix of single-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_float3x2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00088_source.html b/tests/OpenGL/package/glm/doc/api/a00088_source.html deleted file mode 100644 index 798fc788..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00088_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float3x2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float3x2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat3x2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<3, 2, float, defaultp> mat3x2;
-
16 
-
18 }//namespace glm
-
mat< 3, 2, float, defaultp > mat3x2
3 columns of 2 components matrix of single-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00089.html b/tests/OpenGL/package/glm/doc/api/a00089.html deleted file mode 100644 index dbd3b9fa..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00089.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float3x2_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float3x2_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef mat< 3, 2, float, highp > highp_mat3x2
 3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 2, float, lowp > lowp_mat3x2
 3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 2, float, mediump > mediump_mat3x2
 3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00089_source.html b/tests/OpenGL/package/glm/doc/api/a00089_source.html deleted file mode 100644 index 3083ceda..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00089_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float3x2_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float3x2_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat3x2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<3, 2, float, lowp> lowp_mat3x2;
-
17 
-
22  typedef mat<3, 2, float, mediump> mediump_mat3x2;
-
23 
-
28  typedef mat<3, 2, float, highp> highp_mat3x2;
-
29 
-
31 }//namespace glm
-
mat< 3, 2, float, lowp > lowp_mat3x2
3 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...
-
mat< 3, 2, float, mediump > mediump_mat3x2
3 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...
-
mat< 3, 2, float, highp > highp_mat3x2
3 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00090.html b/tests/OpenGL/package/glm/doc/api/a00090.html deleted file mode 100644 index 5da3f396..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00090.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float3x3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float3x3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Typedefs

typedef mat< 3, 3, float, defaultp > mat3
 3 columns of 3 components matrix of single-precision floating-point numbers. More...
 
typedef mat< 3, 3, float, defaultp > mat3x3
 3 columns of 3 components matrix of single-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_float3x3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00090_source.html b/tests/OpenGL/package/glm/doc/api/a00090_source.html deleted file mode 100644 index fc8e9a6e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00090_source.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float3x3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float3x3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat3x3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<3, 3, float, defaultp> mat3x3;
-
16 
-
20  typedef mat<3, 3, float, defaultp> mat3;
-
21 
-
23 }//namespace glm
-
mat< 3, 3, float, defaultp > mat3x3
3 columns of 3 components matrix of single-precision floating-point numbers.
-
mat< 3, 3, float, defaultp > mat3
3 columns of 3 components matrix of single-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00091.html b/tests/OpenGL/package/glm/doc/api/a00091.html deleted file mode 100644 index d80cd192..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00091.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float3x3_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float3x3_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef mat< 3, 3, float, highp > highp_mat3
 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, float, highp > highp_mat3x3
 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, float, lowp > lowp_mat3
 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, float, lowp > lowp_mat3x3
 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, float, mediump > mediump_mat3
 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, float, mediump > mediump_mat3x3
 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00091_source.html b/tests/OpenGL/package/glm/doc/api/a00091_source.html deleted file mode 100644 index 1f8ce621..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00091_source.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float3x3_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float3x3_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat3x3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<3, 3, float, lowp> lowp_mat3;
-
17 
-
22  typedef mat<3, 3, float, mediump> mediump_mat3;
-
23 
-
28  typedef mat<3, 3, float, highp> highp_mat3;
-
29 
-
34  typedef mat<3, 3, float, lowp> lowp_mat3x3;
-
35 
-
40  typedef mat<3, 3, float, mediump> mediump_mat3x3;
-
41 
-
46  typedef mat<3, 3, float, highp> highp_mat3x3;
-
47 
-
49 }//namespace glm
-
mat< 3, 3, float, mediump > mediump_mat3x3
3 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...
-
mat< 3, 3, float, highp > highp_mat3x3
3 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...
-
mat< 3, 3, float, lowp > lowp_mat3x3
3 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...
-
mat< 3, 3, float, mediump > mediump_mat3
3 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...
-
mat< 3, 3, float, lowp > lowp_mat3
3 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...
-
mat< 3, 3, float, highp > highp_mat3
3 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00092.html b/tests/OpenGL/package/glm/doc/api/a00092.html deleted file mode 100644 index a32abb20..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00092.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float3x4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float3x4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef mat< 3, 4, float, defaultp > mat3x4
 3 columns of 4 components matrix of single-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_float3x4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00092_source.html b/tests/OpenGL/package/glm/doc/api/a00092_source.html deleted file mode 100644 index 67b9f406..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00092_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float3x4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float3x4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat3x4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<3, 4, float, defaultp> mat3x4;
-
16 
-
18 }//namespace glm
-
mat< 3, 4, float, defaultp > mat3x4
3 columns of 4 components matrix of single-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00093.html b/tests/OpenGL/package/glm/doc/api/a00093.html deleted file mode 100644 index 862a061a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00093.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float3x4_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float3x4_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef mat< 3, 4, float, highp > highp_mat3x4
 3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 4, float, lowp > lowp_mat3x4
 3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 4, float, mediump > mediump_mat3x4
 3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00093_source.html b/tests/OpenGL/package/glm/doc/api/a00093_source.html deleted file mode 100644 index 424db41f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00093_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float3x4_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float3x4_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat3x4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<3, 4, float, lowp> lowp_mat3x4;
-
17 
-
22  typedef mat<3, 4, float, mediump> mediump_mat3x4;
-
23 
-
28  typedef mat<3, 4, float, highp> highp_mat3x4;
-
29 
-
31 }//namespace glm
-
mat< 3, 4, float, highp > highp_mat3x4
3 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...
-
mat< 3, 4, float, mediump > mediump_mat3x4
3 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...
-
mat< 3, 4, float, lowp > lowp_mat3x4
3 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00094.html b/tests/OpenGL/package/glm/doc/api/a00094.html deleted file mode 100644 index b9d4ef7a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00094.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float4x2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float4x2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef mat< 4, 2, float, defaultp > mat4x2
 4 columns of 2 components matrix of single-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_float4x2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00094_source.html b/tests/OpenGL/package/glm/doc/api/a00094_source.html deleted file mode 100644 index aacca642..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00094_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float4x2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float4x2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat4x2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<4, 2, float, defaultp> mat4x2;
-
16 
-
18 }//namespace glm
-
mat< 4, 2, float, defaultp > mat4x2
4 columns of 2 components matrix of single-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00095_source.html b/tests/OpenGL/package/glm/doc/api/a00095_source.html deleted file mode 100644 index b9d21999..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00095_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float4x2_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float4x2_precision.hpp
-
-
-
1 
-
4 #pragma once
-
5 #include "../detail/type_mat2x2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<4, 2, float, lowp> lowp_mat4x2;
-
17 
-
22  typedef mat<4, 2, float, mediump> mediump_mat4x2;
-
23 
-
28  typedef mat<4, 2, float, highp> highp_mat4x2;
-
29 
-
31 }//namespace glm
-
mat< 4, 2, float, mediump > mediump_mat4x2
4 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...
-
mat< 4, 2, float, lowp > lowp_mat4x2
4 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...
-
mat< 4, 2, float, highp > highp_mat4x2
4 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00096.html b/tests/OpenGL/package/glm/doc/api/a00096.html deleted file mode 100644 index ae8352d1..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00096.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float4x3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float4x3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef mat< 4, 3, float, defaultp > mat4x3
 4 columns of 3 components matrix of single-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_float4x3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00096_source.html b/tests/OpenGL/package/glm/doc/api/a00096_source.html deleted file mode 100644 index c7e6ce9a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00096_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float4x3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float4x3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat4x3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<4, 3, float, defaultp> mat4x3;
-
16 
-
18 }//namespace glm
-
mat< 4, 3, float, defaultp > mat4x3
4 columns of 3 components matrix of single-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00097.html b/tests/OpenGL/package/glm/doc/api/a00097.html deleted file mode 100644 index c3167d47..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00097.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float4x3_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float4x3_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef mat< 4, 3, float, highp > highp_mat4x3
 4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 3, float, lowp > lowp_mat4x3
 4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 3, float, mediump > mediump_mat4x3
 4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00097_source.html b/tests/OpenGL/package/glm/doc/api/a00097_source.html deleted file mode 100644 index d2faec60..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00097_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float4x3_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float4x3_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat4x3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<4, 3, float, lowp> lowp_mat4x3;
-
17 
-
22  typedef mat<4, 3, float, mediump> mediump_mat4x3;
-
23 
-
28  typedef mat<4, 3, float, highp> highp_mat4x3;
-
29 
-
31 }//namespace glm
-
mat< 4, 3, float, highp > highp_mat4x3
4 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...
-
mat< 4, 3, float, lowp > lowp_mat4x3
4 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...
-
mat< 4, 3, float, mediump > mediump_mat4x3
4 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00098.html b/tests/OpenGL/package/glm/doc/api/a00098.html deleted file mode 100644 index 2359c881..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00098.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float4x4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float4x4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - -
typedef mat< 4, 4, float, defaultp > mat4x4
 4 columns of 4 components matrix of single-precision floating-point numbers. More...
 
typedef mat< 4, 4, float, defaultp > mat4
 4 columns of 4 components matrix of single-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file matrix_float4x4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00098_source.html b/tests/OpenGL/package/glm/doc/api/a00098_source.html deleted file mode 100644 index 99a231ff..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00098_source.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float4x4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float4x4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat4x4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef mat<4, 4, float, defaultp> mat4x4;
-
16 
-
20  typedef mat<4, 4, float, defaultp> mat4;
-
21 
-
23 }//namespace glm
-
mat< 4, 4, float, defaultp > mat4x4
4 columns of 4 components matrix of single-precision floating-point numbers.
-
mat< 4, 4, float, defaultp > mat4
4 columns of 4 components matrix of single-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00099.html b/tests/OpenGL/package/glm/doc/api/a00099.html deleted file mode 100644 index 567117f8..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00099.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float4x4_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_float4x4_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef mat< 4, 4, float, highp > highp_mat4
 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, float, highp > highp_mat4x4
 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, float, lowp > lowp_mat4
 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, float, lowp > lowp_mat4x4
 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, float, mediump > mediump_mat4
 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, float, mediump > mediump_mat4x4
 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00099_source.html b/tests/OpenGL/package/glm/doc/api/a00099_source.html deleted file mode 100644 index 224d9729..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00099_source.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_float4x4_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_float4x4_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_mat4x4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef mat<4, 4, float, lowp> lowp_mat4;
-
17 
-
22  typedef mat<4, 4, float, mediump> mediump_mat4;
-
23 
-
28  typedef mat<4, 4, float, highp> highp_mat4;
-
29 
-
34  typedef mat<4, 4, float, lowp> lowp_mat4x4;
-
35 
-
40  typedef mat<4, 4, float, mediump> mediump_mat4x4;
-
41 
-
46  typedef mat<4, 4, float, highp> highp_mat4x4;
-
47 
-
49 }//namespace glm
-
mat< 4, 4, float, mediump > mediump_mat4x4
4 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...
-
mat< 4, 4, float, lowp > lowp_mat4
4 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...
-
mat< 4, 4, float, mediump > mediump_mat4
4 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...
-
mat< 4, 4, float, highp > highp_mat4x4
4 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...
-
mat< 4, 4, float, lowp > lowp_mat4x4
4 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...
-
mat< 4, 4, float, highp > highp_mat4
4 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00100.html b/tests/OpenGL/package/glm/doc/api/a00100.html deleted file mode 100644 index 9d3e5473..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00100.html +++ /dev/null @@ -1,403 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_integer.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_integer.hpp File Reference
-
-
- -

GLM_GTC_matrix_integer -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef mat< 2, 2, int, highp > highp_imat2
 High-qualifier signed integer 2x2 matrix. More...
 
typedef mat< 2, 2, int, highp > highp_imat2x2
 High-qualifier signed integer 2x2 matrix. More...
 
typedef mat< 2, 3, int, highp > highp_imat2x3
 High-qualifier signed integer 2x3 matrix. More...
 
typedef mat< 2, 4, int, highp > highp_imat2x4
 High-qualifier signed integer 2x4 matrix. More...
 
typedef mat< 3, 3, int, highp > highp_imat3
 High-qualifier signed integer 3x3 matrix. More...
 
typedef mat< 3, 2, int, highp > highp_imat3x2
 High-qualifier signed integer 3x2 matrix. More...
 
typedef mat< 3, 3, int, highp > highp_imat3x3
 High-qualifier signed integer 3x3 matrix. More...
 
typedef mat< 3, 4, int, highp > highp_imat3x4
 High-qualifier signed integer 3x4 matrix. More...
 
typedef mat< 4, 4, int, highp > highp_imat4
 High-qualifier signed integer 4x4 matrix. More...
 
typedef mat< 4, 2, int, highp > highp_imat4x2
 High-qualifier signed integer 4x2 matrix. More...
 
typedef mat< 4, 3, int, highp > highp_imat4x3
 High-qualifier signed integer 4x3 matrix. More...
 
typedef mat< 4, 4, int, highp > highp_imat4x4
 High-qualifier signed integer 4x4 matrix. More...
 
typedef mat< 2, 2, uint, highp > highp_umat2
 High-qualifier unsigned integer 2x2 matrix. More...
 
typedef mat< 2, 2, uint, highp > highp_umat2x2
 High-qualifier unsigned integer 2x2 matrix. More...
 
typedef mat< 2, 3, uint, highp > highp_umat2x3
 High-qualifier unsigned integer 2x3 matrix. More...
 
typedef mat< 2, 4, uint, highp > highp_umat2x4
 High-qualifier unsigned integer 2x4 matrix. More...
 
typedef mat< 3, 3, uint, highp > highp_umat3
 High-qualifier unsigned integer 3x3 matrix. More...
 
typedef mat< 3, 2, uint, highp > highp_umat3x2
 High-qualifier unsigned integer 3x2 matrix. More...
 
typedef mat< 3, 3, uint, highp > highp_umat3x3
 High-qualifier unsigned integer 3x3 matrix. More...
 
typedef mat< 3, 4, uint, highp > highp_umat3x4
 High-qualifier unsigned integer 3x4 matrix. More...
 
typedef mat< 4, 4, uint, highp > highp_umat4
 High-qualifier unsigned integer 4x4 matrix. More...
 
typedef mat< 4, 2, uint, highp > highp_umat4x2
 High-qualifier unsigned integer 4x2 matrix. More...
 
typedef mat< 4, 3, uint, highp > highp_umat4x3
 High-qualifier unsigned integer 4x3 matrix. More...
 
typedef mat< 4, 4, uint, highp > highp_umat4x4
 High-qualifier unsigned integer 4x4 matrix. More...
 
typedef mediump_imat2 imat2
 Signed integer 2x2 matrix. More...
 
typedef mediump_imat2x2 imat2x2
 Signed integer 2x2 matrix. More...
 
typedef mediump_imat2x3 imat2x3
 Signed integer 2x3 matrix. More...
 
typedef mediump_imat2x4 imat2x4
 Signed integer 2x4 matrix. More...
 
typedef mediump_imat3 imat3
 Signed integer 3x3 matrix. More...
 
typedef mediump_imat3x2 imat3x2
 Signed integer 3x2 matrix. More...
 
typedef mediump_imat3x3 imat3x3
 Signed integer 3x3 matrix. More...
 
typedef mediump_imat3x4 imat3x4
 Signed integer 3x4 matrix. More...
 
typedef mediump_imat4 imat4
 Signed integer 4x4 matrix. More...
 
typedef mediump_imat4x2 imat4x2
 Signed integer 4x2 matrix. More...
 
typedef mediump_imat4x3 imat4x3
 Signed integer 4x3 matrix. More...
 
typedef mediump_imat4x4 imat4x4
 Signed integer 4x4 matrix. More...
 
typedef mat< 2, 2, int, lowp > lowp_imat2
 Low-qualifier signed integer 2x2 matrix. More...
 
typedef mat< 2, 2, int, lowp > lowp_imat2x2
 Low-qualifier signed integer 2x2 matrix. More...
 
typedef mat< 2, 3, int, lowp > lowp_imat2x3
 Low-qualifier signed integer 2x3 matrix. More...
 
typedef mat< 2, 4, int, lowp > lowp_imat2x4
 Low-qualifier signed integer 2x4 matrix. More...
 
typedef mat< 3, 3, int, lowp > lowp_imat3
 Low-qualifier signed integer 3x3 matrix. More...
 
typedef mat< 3, 2, int, lowp > lowp_imat3x2
 Low-qualifier signed integer 3x2 matrix. More...
 
typedef mat< 3, 3, int, lowp > lowp_imat3x3
 Low-qualifier signed integer 3x3 matrix. More...
 
typedef mat< 3, 4, int, lowp > lowp_imat3x4
 Low-qualifier signed integer 3x4 matrix. More...
 
typedef mat< 4, 4, int, lowp > lowp_imat4
 Low-qualifier signed integer 4x4 matrix. More...
 
typedef mat< 4, 2, int, lowp > lowp_imat4x2
 Low-qualifier signed integer 4x2 matrix. More...
 
typedef mat< 4, 3, int, lowp > lowp_imat4x3
 Low-qualifier signed integer 4x3 matrix. More...
 
typedef mat< 4, 4, int, lowp > lowp_imat4x4
 Low-qualifier signed integer 4x4 matrix. More...
 
typedef mat< 2, 2, uint, lowp > lowp_umat2
 Low-qualifier unsigned integer 2x2 matrix. More...
 
typedef mat< 2, 2, uint, lowp > lowp_umat2x2
 Low-qualifier unsigned integer 2x2 matrix. More...
 
typedef mat< 2, 3, uint, lowp > lowp_umat2x3
 Low-qualifier unsigned integer 2x3 matrix. More...
 
typedef mat< 2, 4, uint, lowp > lowp_umat2x4
 Low-qualifier unsigned integer 2x4 matrix. More...
 
typedef mat< 3, 3, uint, lowp > lowp_umat3
 Low-qualifier unsigned integer 3x3 matrix. More...
 
typedef mat< 3, 2, uint, lowp > lowp_umat3x2
 Low-qualifier unsigned integer 3x2 matrix. More...
 
typedef mat< 3, 3, uint, lowp > lowp_umat3x3
 Low-qualifier unsigned integer 3x3 matrix. More...
 
typedef mat< 3, 4, uint, lowp > lowp_umat3x4
 Low-qualifier unsigned integer 3x4 matrix. More...
 
typedef mat< 4, 4, uint, lowp > lowp_umat4
 Low-qualifier unsigned integer 4x4 matrix. More...
 
typedef mat< 4, 2, uint, lowp > lowp_umat4x2
 Low-qualifier unsigned integer 4x2 matrix. More...
 
typedef mat< 4, 3, uint, lowp > lowp_umat4x3
 Low-qualifier unsigned integer 4x3 matrix. More...
 
typedef mat< 4, 4, uint, lowp > lowp_umat4x4
 Low-qualifier unsigned integer 4x4 matrix. More...
 
typedef mat< 2, 2, int, mediump > mediump_imat2
 Medium-qualifier signed integer 2x2 matrix. More...
 
typedef mat< 2, 2, int, mediump > mediump_imat2x2
 Medium-qualifier signed integer 2x2 matrix. More...
 
typedef mat< 2, 3, int, mediump > mediump_imat2x3
 Medium-qualifier signed integer 2x3 matrix. More...
 
typedef mat< 2, 4, int, mediump > mediump_imat2x4
 Medium-qualifier signed integer 2x4 matrix. More...
 
typedef mat< 3, 3, int, mediump > mediump_imat3
 Medium-qualifier signed integer 3x3 matrix. More...
 
typedef mat< 3, 2, int, mediump > mediump_imat3x2
 Medium-qualifier signed integer 3x2 matrix. More...
 
typedef mat< 3, 3, int, mediump > mediump_imat3x3
 Medium-qualifier signed integer 3x3 matrix. More...
 
typedef mat< 3, 4, int, mediump > mediump_imat3x4
 Medium-qualifier signed integer 3x4 matrix. More...
 
typedef mat< 4, 4, int, mediump > mediump_imat4
 Medium-qualifier signed integer 4x4 matrix. More...
 
typedef mat< 4, 2, int, mediump > mediump_imat4x2
 Medium-qualifier signed integer 4x2 matrix. More...
 
typedef mat< 4, 3, int, mediump > mediump_imat4x3
 Medium-qualifier signed integer 4x3 matrix. More...
 
typedef mat< 4, 4, int, mediump > mediump_imat4x4
 Medium-qualifier signed integer 4x4 matrix. More...
 
typedef mat< 2, 2, uint, mediump > mediump_umat2
 Medium-qualifier unsigned integer 2x2 matrix. More...
 
typedef mat< 2, 2, uint, mediump > mediump_umat2x2
 Medium-qualifier unsigned integer 2x2 matrix. More...
 
typedef mat< 2, 3, uint, mediump > mediump_umat2x3
 Medium-qualifier unsigned integer 2x3 matrix. More...
 
typedef mat< 2, 4, uint, mediump > mediump_umat2x4
 Medium-qualifier unsigned integer 2x4 matrix. More...
 
typedef mat< 3, 3, uint, mediump > mediump_umat3
 Medium-qualifier unsigned integer 3x3 matrix. More...
 
typedef mat< 3, 2, uint, mediump > mediump_umat3x2
 Medium-qualifier unsigned integer 3x2 matrix. More...
 
typedef mat< 3, 3, uint, mediump > mediump_umat3x3
 Medium-qualifier unsigned integer 3x3 matrix. More...
 
typedef mat< 3, 4, uint, mediump > mediump_umat3x4
 Medium-qualifier unsigned integer 3x4 matrix. More...
 
typedef mat< 4, 4, uint, mediump > mediump_umat4
 Medium-qualifier unsigned integer 4x4 matrix. More...
 
typedef mat< 4, 2, uint, mediump > mediump_umat4x2
 Medium-qualifier unsigned integer 4x2 matrix. More...
 
typedef mat< 4, 3, uint, mediump > mediump_umat4x3
 Medium-qualifier unsigned integer 4x3 matrix. More...
 
typedef mat< 4, 4, uint, mediump > mediump_umat4x4
 Medium-qualifier unsigned integer 4x4 matrix. More...
 
typedef mediump_umat2 umat2
 Unsigned integer 2x2 matrix. More...
 
typedef mediump_umat2x2 umat2x2
 Unsigned integer 2x2 matrix. More...
 
typedef mediump_umat2x3 umat2x3
 Unsigned integer 2x3 matrix. More...
 
typedef mediump_umat2x4 umat2x4
 Unsigned integer 2x4 matrix. More...
 
typedef mediump_umat3 umat3
 Unsigned integer 3x3 matrix. More...
 
typedef mediump_umat3x2 umat3x2
 Unsigned integer 3x2 matrix. More...
 
typedef mediump_umat3x3 umat3x3
 Unsigned integer 3x3 matrix. More...
 
typedef mediump_umat3x4 umat3x4
 Unsigned integer 3x4 matrix. More...
 
typedef mediump_umat4 umat4
 Unsigned integer 4x4 matrix. More...
 
typedef mediump_umat4x2 umat4x2
 Unsigned integer 4x2 matrix. More...
 
typedef mediump_umat4x3 umat4x3
 Unsigned integer 4x3 matrix. More...
 
typedef mediump_umat4x4 umat4x4
 Unsigned integer 4x4 matrix. More...
 
-

Detailed Description

-

GLM_GTC_matrix_integer

-
See also
Core features (dependence)
- -

Definition in file matrix_integer.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00100_source.html b/tests/OpenGL/package/glm/doc/api/a00100_source.html deleted file mode 100644 index 367a5f46..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00100_source.html +++ /dev/null @@ -1,477 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_integer.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_integer.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../mat2x2.hpp"
-
17 #include "../mat2x3.hpp"
-
18 #include "../mat2x4.hpp"
-
19 #include "../mat3x2.hpp"
-
20 #include "../mat3x3.hpp"
-
21 #include "../mat3x4.hpp"
-
22 #include "../mat4x2.hpp"
-
23 #include "../mat4x3.hpp"
-
24 #include "../mat4x4.hpp"
-
25 
-
26 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
27 # pragma message("GLM: GLM_GTC_matrix_integer extension included")
-
28 #endif
-
29 
-
30 namespace glm
-
31 {
-
34 
-
37  typedef mat<2, 2, int, highp> highp_imat2;
-
38 
-
41  typedef mat<3, 3, int, highp> highp_imat3;
-
42 
-
45  typedef mat<4, 4, int, highp> highp_imat4;
-
46 
-
49  typedef mat<2, 2, int, highp> highp_imat2x2;
-
50 
-
53  typedef mat<2, 3, int, highp> highp_imat2x3;
-
54 
-
57  typedef mat<2, 4, int, highp> highp_imat2x4;
-
58 
-
61  typedef mat<3, 2, int, highp> highp_imat3x2;
-
62 
-
65  typedef mat<3, 3, int, highp> highp_imat3x3;
-
66 
-
69  typedef mat<3, 4, int, highp> highp_imat3x4;
-
70 
-
73  typedef mat<4, 2, int, highp> highp_imat4x2;
-
74 
-
77  typedef mat<4, 3, int, highp> highp_imat4x3;
-
78 
-
81  typedef mat<4, 4, int, highp> highp_imat4x4;
-
82 
-
83 
-
86  typedef mat<2, 2, int, mediump> mediump_imat2;
-
87 
-
90  typedef mat<3, 3, int, mediump> mediump_imat3;
-
91 
-
94  typedef mat<4, 4, int, mediump> mediump_imat4;
-
95 
-
96 
-
99  typedef mat<2, 2, int, mediump> mediump_imat2x2;
-
100 
-
103  typedef mat<2, 3, int, mediump> mediump_imat2x3;
-
104 
-
107  typedef mat<2, 4, int, mediump> mediump_imat2x4;
-
108 
-
111  typedef mat<3, 2, int, mediump> mediump_imat3x2;
-
112 
-
115  typedef mat<3, 3, int, mediump> mediump_imat3x3;
-
116 
-
119  typedef mat<3, 4, int, mediump> mediump_imat3x4;
-
120 
-
123  typedef mat<4, 2, int, mediump> mediump_imat4x2;
-
124 
-
127  typedef mat<4, 3, int, mediump> mediump_imat4x3;
-
128 
-
131  typedef mat<4, 4, int, mediump> mediump_imat4x4;
-
132 
-
133 
-
136  typedef mat<2, 2, int, lowp> lowp_imat2;
-
137 
-
140  typedef mat<3, 3, int, lowp> lowp_imat3;
-
141 
-
144  typedef mat<4, 4, int, lowp> lowp_imat4;
-
145 
-
146 
-
149  typedef mat<2, 2, int, lowp> lowp_imat2x2;
-
150 
-
153  typedef mat<2, 3, int, lowp> lowp_imat2x3;
-
154 
-
157  typedef mat<2, 4, int, lowp> lowp_imat2x4;
-
158 
-
161  typedef mat<3, 2, int, lowp> lowp_imat3x2;
-
162 
-
165  typedef mat<3, 3, int, lowp> lowp_imat3x3;
-
166 
-
169  typedef mat<3, 4, int, lowp> lowp_imat3x4;
-
170 
-
173  typedef mat<4, 2, int, lowp> lowp_imat4x2;
-
174 
-
177  typedef mat<4, 3, int, lowp> lowp_imat4x3;
-
178 
-
181  typedef mat<4, 4, int, lowp> lowp_imat4x4;
-
182 
-
183 
-
186  typedef mat<2, 2, uint, highp> highp_umat2;
-
187 
-
190  typedef mat<3, 3, uint, highp> highp_umat3;
-
191 
-
194  typedef mat<4, 4, uint, highp> highp_umat4;
-
195 
-
198  typedef mat<2, 2, uint, highp> highp_umat2x2;
-
199 
-
202  typedef mat<2, 3, uint, highp> highp_umat2x3;
-
203 
-
206  typedef mat<2, 4, uint, highp> highp_umat2x4;
-
207 
-
210  typedef mat<3, 2, uint, highp> highp_umat3x2;
-
211 
-
214  typedef mat<3, 3, uint, highp> highp_umat3x3;
-
215 
-
218  typedef mat<3, 4, uint, highp> highp_umat3x4;
-
219 
-
222  typedef mat<4, 2, uint, highp> highp_umat4x2;
-
223 
-
226  typedef mat<4, 3, uint, highp> highp_umat4x3;
-
227 
-
230  typedef mat<4, 4, uint, highp> highp_umat4x4;
-
231 
-
232 
-
235  typedef mat<2, 2, uint, mediump> mediump_umat2;
-
236 
-
239  typedef mat<3, 3, uint, mediump> mediump_umat3;
-
240 
-
243  typedef mat<4, 4, uint, mediump> mediump_umat4;
-
244 
-
245 
-
248  typedef mat<2, 2, uint, mediump> mediump_umat2x2;
-
249 
-
252  typedef mat<2, 3, uint, mediump> mediump_umat2x3;
-
253 
-
256  typedef mat<2, 4, uint, mediump> mediump_umat2x4;
-
257 
-
260  typedef mat<3, 2, uint, mediump> mediump_umat3x2;
-
261 
-
264  typedef mat<3, 3, uint, mediump> mediump_umat3x3;
-
265 
-
268  typedef mat<3, 4, uint, mediump> mediump_umat3x4;
-
269 
-
272  typedef mat<4, 2, uint, mediump> mediump_umat4x2;
-
273 
-
276  typedef mat<4, 3, uint, mediump> mediump_umat4x3;
-
277 
-
280  typedef mat<4, 4, uint, mediump> mediump_umat4x4;
-
281 
-
282 
-
285  typedef mat<2, 2, uint, lowp> lowp_umat2;
-
286 
-
289  typedef mat<3, 3, uint, lowp> lowp_umat3;
-
290 
-
293  typedef mat<4, 4, uint, lowp> lowp_umat4;
-
294 
-
295 
-
298  typedef mat<2, 2, uint, lowp> lowp_umat2x2;
-
299 
-
302  typedef mat<2, 3, uint, lowp> lowp_umat2x3;
-
303 
-
306  typedef mat<2, 4, uint, lowp> lowp_umat2x4;
-
307 
-
310  typedef mat<3, 2, uint, lowp> lowp_umat3x2;
-
311 
-
314  typedef mat<3, 3, uint, lowp> lowp_umat3x3;
-
315 
-
318  typedef mat<3, 4, uint, lowp> lowp_umat3x4;
-
319 
-
322  typedef mat<4, 2, uint, lowp> lowp_umat4x2;
-
323 
-
326  typedef mat<4, 3, uint, lowp> lowp_umat4x3;
-
327 
-
330  typedef mat<4, 4, uint, lowp> lowp_umat4x4;
-
331 
-
332 #if(defined(GLM_PRECISION_HIGHP_INT))
-
333  typedef highp_imat2 imat2;
-
334  typedef highp_imat3 imat3;
-
335  typedef highp_imat4 imat4;
-
336  typedef highp_imat2x2 imat2x2;
-
337  typedef highp_imat2x3 imat2x3;
-
338  typedef highp_imat2x4 imat2x4;
-
339  typedef highp_imat3x2 imat3x2;
-
340  typedef highp_imat3x3 imat3x3;
-
341  typedef highp_imat3x4 imat3x4;
-
342  typedef highp_imat4x2 imat4x2;
-
343  typedef highp_imat4x3 imat4x3;
-
344  typedef highp_imat4x4 imat4x4;
-
345 #elif(defined(GLM_PRECISION_LOWP_INT))
-
346  typedef lowp_imat2 imat2;
-
347  typedef lowp_imat3 imat3;
-
348  typedef lowp_imat4 imat4;
-
349  typedef lowp_imat2x2 imat2x2;
-
350  typedef lowp_imat2x3 imat2x3;
-
351  typedef lowp_imat2x4 imat2x4;
-
352  typedef lowp_imat3x2 imat3x2;
-
353  typedef lowp_imat3x3 imat3x3;
-
354  typedef lowp_imat3x4 imat3x4;
-
355  typedef lowp_imat4x2 imat4x2;
-
356  typedef lowp_imat4x3 imat4x3;
-
357  typedef lowp_imat4x4 imat4x4;
-
358 #else //if(defined(GLM_PRECISION_MEDIUMP_INT))
-
359 
-
362  typedef mediump_imat2 imat2;
-
363 
-
366  typedef mediump_imat3 imat3;
-
367 
-
370  typedef mediump_imat4 imat4;
-
371 
-
374  typedef mediump_imat2x2 imat2x2;
-
375 
-
378  typedef mediump_imat2x3 imat2x3;
-
379 
-
382  typedef mediump_imat2x4 imat2x4;
-
383 
-
386  typedef mediump_imat3x2 imat3x2;
-
387 
-
390  typedef mediump_imat3x3 imat3x3;
-
391 
-
394  typedef mediump_imat3x4 imat3x4;
-
395 
-
398  typedef mediump_imat4x2 imat4x2;
-
399 
-
402  typedef mediump_imat4x3 imat4x3;
-
403 
-
406  typedef mediump_imat4x4 imat4x4;
-
407 #endif//GLM_PRECISION
-
408 
-
409 #if(defined(GLM_PRECISION_HIGHP_UINT))
-
410  typedef highp_umat2 umat2;
-
411  typedef highp_umat3 umat3;
-
412  typedef highp_umat4 umat4;
-
413  typedef highp_umat2x2 umat2x2;
-
414  typedef highp_umat2x3 umat2x3;
-
415  typedef highp_umat2x4 umat2x4;
-
416  typedef highp_umat3x2 umat3x2;
-
417  typedef highp_umat3x3 umat3x3;
-
418  typedef highp_umat3x4 umat3x4;
-
419  typedef highp_umat4x2 umat4x2;
-
420  typedef highp_umat4x3 umat4x3;
-
421  typedef highp_umat4x4 umat4x4;
-
422 #elif(defined(GLM_PRECISION_LOWP_UINT))
-
423  typedef lowp_umat2 umat2;
-
424  typedef lowp_umat3 umat3;
-
425  typedef lowp_umat4 umat4;
-
426  typedef lowp_umat2x2 umat2x2;
-
427  typedef lowp_umat2x3 umat2x3;
-
428  typedef lowp_umat2x4 umat2x4;
-
429  typedef lowp_umat3x2 umat3x2;
-
430  typedef lowp_umat3x3 umat3x3;
-
431  typedef lowp_umat3x4 umat3x4;
-
432  typedef lowp_umat4x2 umat4x2;
-
433  typedef lowp_umat4x3 umat4x3;
-
434  typedef lowp_umat4x4 umat4x4;
-
435 #else //if(defined(GLM_PRECISION_MEDIUMP_UINT))
-
436 
-
439  typedef mediump_umat2 umat2;
-
440 
-
443  typedef mediump_umat3 umat3;
-
444 
-
447  typedef mediump_umat4 umat4;
-
448 
-
451  typedef mediump_umat2x2 umat2x2;
-
452 
-
455  typedef mediump_umat2x3 umat2x3;
-
456 
-
459  typedef mediump_umat2x4 umat2x4;
-
460 
-
463  typedef mediump_umat3x2 umat3x2;
-
464 
-
467  typedef mediump_umat3x3 umat3x3;
-
468 
-
471  typedef mediump_umat3x4 umat3x4;
-
472 
-
475  typedef mediump_umat4x2 umat4x2;
-
476 
-
479  typedef mediump_umat4x3 umat4x3;
-
480 
-
483  typedef mediump_umat4x4 umat4x4;
-
484 #endif//GLM_PRECISION
-
485 
-
487 }//namespace glm
-
mediump_imat4x4 imat4x4
Signed integer 4x4 matrix.
-
mediump_imat2x2 imat2x2
Signed integer 2x2 matrix.
-
mediump_umat4 umat4
Unsigned integer 4x4 matrix.
-
mediump_umat4x2 umat4x2
Unsigned integer 4x2 matrix.
-
mat< 4, 4, uint, lowp > lowp_umat4x4
Low-qualifier unsigned integer 4x4 matrix.
-
mat< 4, 2, int, mediump > mediump_imat4x2
Medium-qualifier signed integer 4x2 matrix.
-
mat< 4, 4, uint, lowp > lowp_umat4
Low-qualifier unsigned integer 4x4 matrix.
-
mat< 3, 2, int, highp > highp_imat3x2
High-qualifier signed integer 3x2 matrix.
-
mat< 3, 3, uint, highp > highp_umat3x3
High-qualifier unsigned integer 3x3 matrix.
-
mat< 2, 2, uint, lowp > lowp_umat2x2
Low-qualifier unsigned integer 2x2 matrix.
-
mediump_umat3x3 umat3x3
Unsigned integer 3x3 matrix.
-
mat< 2, 4, uint, highp > highp_umat2x4
High-qualifier unsigned integer 2x4 matrix.
-
mediump_umat3x2 umat3x2
Unsigned integer 3x2 matrix.
-
mat< 3, 2, int, lowp > lowp_imat3x2
Low-qualifier signed integer 3x2 matrix.
-
mat< 3, 3, uint, highp > highp_umat3
High-qualifier unsigned integer 3x3 matrix.
-
mat< 4, 3, int, mediump > mediump_imat4x3
Medium-qualifier signed integer 4x3 matrix.
-
mediump_imat3 imat3
Signed integer 3x3 matrix.
-
mat< 2, 2, int, mediump > mediump_imat2
Medium-qualifier signed integer 2x2 matrix.
-
mat< 3, 4, uint, mediump > mediump_umat3x4
Medium-qualifier unsigned integer 3x4 matrix.
-
mat< 4, 4, int, lowp > lowp_imat4x4
Low-qualifier signed integer 4x4 matrix.
-
mat< 2, 4, int, highp > highp_imat2x4
High-qualifier signed integer 2x4 matrix.
-
mediump_umat2x3 umat2x3
Unsigned integer 2x3 matrix.
-
mat< 4, 3, int, lowp > lowp_imat4x3
Low-qualifier signed integer 4x3 matrix.
-
mat< 3, 3, uint, lowp > lowp_umat3
Low-qualifier unsigned integer 3x3 matrix.
-
mat< 4, 4, uint, mediump > mediump_umat4x4
Medium-qualifier unsigned integer 4x4 matrix.
-
mat< 3, 2, uint, mediump > mediump_umat3x2
Medium-qualifier unsigned integer 3x2 matrix.
-
mat< 2, 4, uint, mediump > mediump_umat2x4
Medium-qualifier unsigned integer 2x4 matrix.
-
mat< 4, 4, int, highp > highp_imat4x4
High-qualifier signed integer 4x4 matrix.
-
mat< 2, 4, uint, lowp > lowp_umat2x4
Low-qualifier unsigned integer 2x4 matrix.
-
mediump_imat4x3 imat4x3
Signed integer 4x3 matrix.
-
mat< 3, 3, uint, mediump > mediump_umat3x3
Medium-qualifier unsigned integer 3x3 matrix.
-
mat< 2, 2, int, highp > highp_imat2
High-qualifier signed integer 2x2 matrix.
-
mediump_umat2 umat2
Unsigned integer 2x2 matrix.
-
mat< 3, 4, uint, lowp > lowp_umat3x4
Low-qualifier unsigned integer 3x4 matrix.
-
mat< 4, 2, uint, mediump > mediump_umat4x2
Medium-qualifier unsigned integer 4x2 matrix.
-
mediump_imat4x2 imat4x2
Signed integer 4x2 matrix.
-
mat< 2, 3, int, mediump > mediump_imat2x3
Medium-qualifier signed integer 2x3 matrix.
-
mat< 2, 2, uint, mediump > mediump_umat2
Medium-qualifier unsigned integer 2x2 matrix.
-
mediump_imat2 imat2
Signed integer 2x2 matrix.
-
mat< 4, 3, uint, mediump > mediump_umat4x3
Medium-qualifier unsigned integer 4x3 matrix.
-
mat< 3, 3, int, mediump > mediump_imat3
Medium-qualifier signed integer 3x3 matrix.
-
mat< 2, 2, uint, highp > highp_umat2
High-qualifier unsigned integer 2x2 matrix.
-
mediump_imat3x4 imat3x4
Signed integer 3x4 matrix.
-
mat< 3, 2, uint, highp > highp_umat3x2
High-qualifier unsigned integer 3x2 matrix.
-
mat< 2, 2, int, highp > highp_imat2x2
High-qualifier signed integer 2x2 matrix.
-
mat< 3, 4, uint, highp > highp_umat3x4
High-qualifier unsigned integer 3x4 matrix.
-
mat< 3, 3, int, mediump > mediump_imat3x3
Medium-qualifier signed integer 3x3 matrix.
-
mat< 4, 4, uint, highp > highp_umat4x4
High-qualifier unsigned integer 4x4 matrix.
-
mediump_imat2x4 imat2x4
Signed integer 2x4 matrix.
-
mediump_umat2x4 umat2x4
Unsigned integer 2x4 matrix.
-
mat< 2, 4, int, mediump > mediump_imat2x4
Medium-qualifier signed integer 2x4 matrix.
-
mat< 2, 2, int, lowp > lowp_imat2
Low-qualifier signed integer 2x2 matrix.
-
mat< 4, 2, int, lowp > lowp_imat4x2
Low-qualifier signed integer 4x2 matrix.
-
mat< 4, 3, uint, lowp > lowp_umat4x3
Low-qualifier unsigned integer 4x3 matrix.
-
mediump_imat4 imat4
Signed integer 4x4 matrix.
-
mediump_imat3x2 imat3x2
Signed integer 3x2 matrix.
-
mat< 2, 3, uint, lowp > lowp_umat2x3
Low-qualifier unsigned integer 2x3 matrix.
-
mat< 3, 2, int, mediump > mediump_imat3x2
Medium-qualifier signed integer 3x2 matrix.
-
mediump_umat4x4 umat4x4
Unsigned integer 4x4 matrix.
-
mat< 4, 3, int, highp > highp_imat4x3
High-qualifier signed integer 4x3 matrix.
-
mediump_umat4x3 umat4x3
Unsigned integer 4x3 matrix.
-
mat< 4, 2, uint, lowp > lowp_umat4x2
Low-qualifier unsigned integer 4x2 matrix.
-
mat< 3, 2, uint, lowp > lowp_umat3x2
Low-qualifier unsigned integer 3x2 matrix.
-
mat< 2, 2, uint, highp > highp_umat2x2
High-qualifier unsigned integer 2x2 matrix.
-
mat< 3, 3, int, lowp > lowp_imat3x3
Low-qualifier signed integer 3x3 matrix.
-
mat< 3, 3, int, highp > highp_imat3x3
High-qualifier signed integer 3x3 matrix.
-
mat< 2, 3, uint, mediump > mediump_umat2x3
Medium-qualifier unsigned integer 2x3 matrix.
-
mat< 4, 2, uint, highp > highp_umat4x2
High-qualifier unsigned integer 4x2 matrix.
-
mat< 3, 3, uint, lowp > lowp_umat3x3
Low-qualifier unsigned integer 3x3 matrix.
-
mediump_imat2x3 imat2x3
Signed integer 2x3 matrix.
-
mat< 2, 3, int, lowp > lowp_imat2x3
Low-qualifier signed integer 2x3 matrix.
-
mat< 4, 4, uint, highp > highp_umat4
High-qualifier unsigned integer 4x4 matrix.
-
mat< 3, 3, int, highp > highp_imat3
High-qualifier signed integer 3x3 matrix.
-
mat< 3, 3, uint, mediump > mediump_umat3
Medium-qualifier unsigned integer 3x3 matrix.
-
mat< 2, 2, int, mediump > mediump_imat2x2
Medium-qualifier signed integer 2x2 matrix.
-
mat< 2, 3, int, highp > highp_imat2x3
High-qualifier signed integer 2x3 matrix.
-
mat< 4, 2, int, highp > highp_imat4x2
High-qualifier signed integer 4x2 matrix.
-
mat< 3, 4, int, lowp > lowp_imat3x4
Low-qualifier signed integer 3x4 matrix.
-
mediump_umat3 umat3
Unsigned integer 3x3 matrix.
-
mat< 2, 2, int, lowp > lowp_imat2x2
Low-qualifier signed integer 2x2 matrix.
-
mat< 2, 3, uint, highp > highp_umat2x3
High-qualifier unsigned integer 2x3 matrix.
-
mat< 4, 4, int, highp > highp_imat4
High-qualifier signed integer 4x4 matrix.
-
mat< 2, 4, int, lowp > lowp_imat2x4
Low-qualifier signed integer 2x4 matrix.
-
mat< 3, 4, int, mediump > mediump_imat3x4
Medium-qualifier signed integer 3x4 matrix.
-
mat< 4, 4, int, mediump > mediump_imat4x4
Medium-qualifier signed integer 4x4 matrix.
-
mat< 4, 4, int, mediump > mediump_imat4
Medium-qualifier signed integer 4x4 matrix.
-
mediump_imat3x3 imat3x3
Signed integer 3x3 matrix.
-
mat< 3, 3, int, lowp > lowp_imat3
Low-qualifier signed integer 3x3 matrix.
-
mat< 2, 2, uint, lowp > lowp_umat2
Low-qualifier unsigned integer 2x2 matrix.
-
mat< 4, 3, uint, highp > highp_umat4x3
High-qualifier unsigned integer 4x3 matrix.
-
mediump_umat2x2 umat2x2
Unsigned integer 2x2 matrix.
-
mat< 4, 4, uint, mediump > mediump_umat4
Medium-qualifier unsigned integer 4x4 matrix.
-
mat< 4, 4, int, lowp > lowp_imat4
Low-qualifier signed integer 4x4 matrix.
-
mediump_umat3x4 umat3x4
Unsigned integer 3x4 matrix.
-
mat< 3, 4, int, highp > highp_imat3x4
High-qualifier signed integer 3x4 matrix.
-
mat< 2, 2, uint, mediump > mediump_umat2x2
Medium-qualifier unsigned integer 2x2 matrix.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00101.html b/tests/OpenGL/package/glm/doc/api/a00101.html deleted file mode 100644 index b19e56e1..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00101.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_interpolation.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_interpolation.hpp File Reference
-
-
- -

GLM_GTX_matrix_interpolation -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL void axisAngle (mat< 4, 4, T, Q > const &Mat, vec< 3, T, Q > &Axis, T &Angle)
 Get the axis and angle of the rotation from a matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > axisAngleMatrix (vec< 3, T, Q > const &Axis, T const Angle)
 Build a matrix from axis and angle. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > extractMatrixRotation (mat< 4, 4, T, Q > const &Mat)
 Extracts the rotation part of a matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > interpolate (mat< 4, 4, T, Q > const &m1, mat< 4, 4, T, Q > const &m2, T const Delta)
 Build a interpolation of 4 * 4 matrixes. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00101_source.html b/tests/OpenGL/package/glm/doc/api/a00101_source.html deleted file mode 100644 index a7d92b04..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00101_source.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_interpolation.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_interpolation.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../glm.hpp"
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # ifndef GLM_ENABLE_EXPERIMENTAL
-
21 # pragma message("GLM: GLM_GTX_matrix_interpolation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
22 # else
-
23 # pragma message("GLM: GLM_GTX_matrix_interpolation extension included")
-
24 # endif
-
25 #endif
-
26 
-
27 namespace glm
-
28 {
-
31 
-
34  template<typename T, qualifier Q>
-
35  GLM_FUNC_DECL void axisAngle(
-
36  mat<4, 4, T, Q> const& Mat, vec<3, T, Q> & Axis, T & Angle);
-
37 
-
40  template<typename T, qualifier Q>
-
41  GLM_FUNC_DECL mat<4, 4, T, Q> axisAngleMatrix(
-
42  vec<3, T, Q> const& Axis, T const Angle);
-
43 
-
46  template<typename T, qualifier Q>
-
47  GLM_FUNC_DECL mat<4, 4, T, Q> extractMatrixRotation(
-
48  mat<4, 4, T, Q> const& Mat);
-
49 
-
53  template<typename T, qualifier Q>
-
54  GLM_FUNC_DECL mat<4, 4, T, Q> interpolate(
-
55  mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2, T const Delta);
-
56 
-
58 }//namespace glm
-
59 
-
60 #include "matrix_interpolation.inl"
-
GLM_FUNC_DECL mat< 4, 4, T, Q > extractMatrixRotation(mat< 4, 4, T, Q > const &Mat)
Extracts the rotation part of a matrix.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > interpolate(mat< 4, 4, T, Q > const &m1, mat< 4, 4, T, Q > const &m2, T const Delta)
Build a interpolation of 4 * 4 matrixes.
-
GLM_FUNC_DECL void axisAngle(mat< 4, 4, T, Q > const &Mat, vec< 3, T, Q > &Axis, T &Angle)
Get the axis and angle of the rotation from a matrix.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > axisAngleMatrix(vec< 3, T, Q > const &Axis, T const Angle)
Build a matrix from axis and angle.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00102.html b/tests/OpenGL/package/glm/doc/api/a00102.html deleted file mode 100644 index 598e69b1..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00102.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_inverse.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_inverse.hpp File Reference
-
-
- -

GLM_GTC_matrix_inverse -More...

- -

Go to the source code of this file.

- - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType affineInverse (genType const &m)
 Fast matrix inverse for affine matrix. More...
 
template<typename genType >
GLM_FUNC_DECL genType inverseTranspose (genType const &m)
 Compute the inverse transpose of a matrix. More...
 
-

Detailed Description

-

GLM_GTC_matrix_inverse

-
See also
Core features (dependence)
- -

Definition in file matrix_inverse.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00102_source.html b/tests/OpenGL/package/glm/doc/api/a00102_source.html deleted file mode 100644 index 544d88ea..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00102_source.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_inverse.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_inverse.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependencies
-
16 #include "../detail/setup.hpp"
-
17 #include "../matrix.hpp"
-
18 #include "../mat2x2.hpp"
-
19 #include "../mat3x3.hpp"
-
20 #include "../mat4x4.hpp"
-
21 
-
22 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
23 # pragma message("GLM: GLM_GTC_matrix_inverse extension included")
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
36  template<typename genType>
-
37  GLM_FUNC_DECL genType affineInverse(genType const& m);
-
38 
-
44  template<typename genType>
-
45  GLM_FUNC_DECL genType inverseTranspose(genType const& m);
-
46 
-
48 }//namespace glm
-
49 
-
50 #include "matrix_inverse.inl"
-
GLM_FUNC_DECL genType inverseTranspose(genType const &m)
Compute the inverse transpose of a matrix.
-
GLM_FUNC_DECL genType affineInverse(genType const &m)
Fast matrix inverse for affine matrix.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00103.html b/tests/OpenGL/package/glm/doc/api/a00103.html deleted file mode 100644 index b200c30c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00103.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_major_storage.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_major_storage.hpp File Reference
-
-
- -

GLM_GTX_matrix_major_storage -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 2, T, Q > colMajor2 (vec< 2, T, Q > const &v1, vec< 2, T, Q > const &v2)
 Build a column major matrix from column vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 2, T, Q > colMajor2 (mat< 2, 2, T, Q > const &m)
 Build a column major matrix from other matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > colMajor3 (vec< 3, T, Q > const &v1, vec< 3, T, Q > const &v2, vec< 3, T, Q > const &v3)
 Build a column major matrix from column vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > colMajor3 (mat< 3, 3, T, Q > const &m)
 Build a column major matrix from other matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > colMajor4 (vec< 4, T, Q > const &v1, vec< 4, T, Q > const &v2, vec< 4, T, Q > const &v3, vec< 4, T, Q > const &v4)
 Build a column major matrix from column vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > colMajor4 (mat< 4, 4, T, Q > const &m)
 Build a column major matrix from other matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 2, T, Q > rowMajor2 (vec< 2, T, Q > const &v1, vec< 2, T, Q > const &v2)
 Build a row major matrix from row vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 2, T, Q > rowMajor2 (mat< 2, 2, T, Q > const &m)
 Build a row major matrix from other matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > rowMajor3 (vec< 3, T, Q > const &v1, vec< 3, T, Q > const &v2, vec< 3, T, Q > const &v3)
 Build a row major matrix from row vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > rowMajor3 (mat< 3, 3, T, Q > const &m)
 Build a row major matrix from other matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > rowMajor4 (vec< 4, T, Q > const &v1, vec< 4, T, Q > const &v2, vec< 4, T, Q > const &v3, vec< 4, T, Q > const &v4)
 Build a row major matrix from row vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > rowMajor4 (mat< 4, 4, T, Q > const &m)
 Build a row major matrix from other matrix. More...
 
-

Detailed Description

-

GLM_GTX_matrix_major_storage

-
See also
Core features (dependence)
-
-gtx_extented_min_max (dependence)
- -

Definition in file matrix_major_storage.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00103_source.html b/tests/OpenGL/package/glm/doc/api/a00103_source.html deleted file mode 100644 index 9ec9278e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00103_source.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_major_storage.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_major_storage.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../glm.hpp"
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # ifndef GLM_ENABLE_EXPERIMENTAL
-
21 # pragma message("GLM: GLM_GTX_matrix_major_storage is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
22 # else
-
23 # pragma message("GLM: GLM_GTX_matrix_major_storage extension included")
-
24 # endif
-
25 #endif
-
26 
-
27 namespace glm
-
28 {
-
31 
-
34  template<typename T, qualifier Q>
-
35  GLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2(
-
36  vec<2, T, Q> const& v1,
-
37  vec<2, T, Q> const& v2);
-
38 
-
41  template<typename T, qualifier Q>
-
42  GLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2(
-
43  mat<2, 2, T, Q> const& m);
-
44 
-
47  template<typename T, qualifier Q>
-
48  GLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3(
-
49  vec<3, T, Q> const& v1,
-
50  vec<3, T, Q> const& v2,
-
51  vec<3, T, Q> const& v3);
-
52 
-
55  template<typename T, qualifier Q>
-
56  GLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3(
-
57  mat<3, 3, T, Q> const& m);
-
58 
-
61  template<typename T, qualifier Q>
-
62  GLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4(
-
63  vec<4, T, Q> const& v1,
-
64  vec<4, T, Q> const& v2,
-
65  vec<4, T, Q> const& v3,
-
66  vec<4, T, Q> const& v4);
-
67 
-
70  template<typename T, qualifier Q>
-
71  GLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4(
-
72  mat<4, 4, T, Q> const& m);
-
73 
-
76  template<typename T, qualifier Q>
-
77  GLM_FUNC_DECL mat<2, 2, T, Q> colMajor2(
-
78  vec<2, T, Q> const& v1,
-
79  vec<2, T, Q> const& v2);
-
80 
-
83  template<typename T, qualifier Q>
-
84  GLM_FUNC_DECL mat<2, 2, T, Q> colMajor2(
-
85  mat<2, 2, T, Q> const& m);
-
86 
-
89  template<typename T, qualifier Q>
-
90  GLM_FUNC_DECL mat<3, 3, T, Q> colMajor3(
-
91  vec<3, T, Q> const& v1,
-
92  vec<3, T, Q> const& v2,
-
93  vec<3, T, Q> const& v3);
-
94 
-
97  template<typename T, qualifier Q>
-
98  GLM_FUNC_DECL mat<3, 3, T, Q> colMajor3(
-
99  mat<3, 3, T, Q> const& m);
-
100 
-
103  template<typename T, qualifier Q>
-
104  GLM_FUNC_DECL mat<4, 4, T, Q> colMajor4(
-
105  vec<4, T, Q> const& v1,
-
106  vec<4, T, Q> const& v2,
-
107  vec<4, T, Q> const& v3,
-
108  vec<4, T, Q> const& v4);
-
109 
-
112  template<typename T, qualifier Q>
-
113  GLM_FUNC_DECL mat<4, 4, T, Q> colMajor4(
-
114  mat<4, 4, T, Q> const& m);
-
115 
-
117 }//namespace glm
-
118 
-
119 #include "matrix_major_storage.inl"
-
GLM_FUNC_DECL mat< 4, 4, T, Q > rowMajor4(mat< 4, 4, T, Q > const &m)
Build a row major matrix from other matrix.
-
GLM_FUNC_DECL mat< 2, 2, T, Q > rowMajor2(mat< 2, 2, T, Q > const &m)
Build a row major matrix from other matrix.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > colMajor4(mat< 4, 4, T, Q > const &m)
Build a column major matrix from other matrix.
-
GLM_FUNC_DECL mat< 3, 3, T, Q > colMajor3(mat< 3, 3, T, Q > const &m)
Build a column major matrix from other matrix.
-
GLM_FUNC_DECL mat< 2, 2, T, Q > colMajor2(mat< 2, 2, T, Q > const &m)
Build a column major matrix from other matrix.
-
GLM_FUNC_DECL mat< 3, 3, T, Q > rowMajor3(mat< 3, 3, T, Q > const &m)
Build a row major matrix from other matrix.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00104.html b/tests/OpenGL/package/glm/doc/api/a00104.html deleted file mode 100644 index 63ceeba0..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00104.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_operation.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_operation.hpp File Reference
-
-
- -

GLM_GTX_matrix_operation -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 2, T, Q > adjugate (mat< 2, 2, T, Q > const &m)
 Build an adjugate matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > adjugate (mat< 3, 3, T, Q > const &m)
 Build an adjugate matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > adjugate (mat< 4, 4, T, Q > const &m)
 Build an adjugate matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 2, T, Q > diagonal2x2 (vec< 2, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 3, T, Q > diagonal2x3 (vec< 2, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 4, T, Q > diagonal2x4 (vec< 2, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 2, T, Q > diagonal3x2 (vec< 2, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > diagonal3x3 (vec< 3, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 4, T, Q > diagonal3x4 (vec< 3, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 2, T, Q > diagonal4x2 (vec< 2, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 3, T, Q > diagonal4x3 (vec< 3, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > diagonal4x4 (vec< 4, T, Q > const &v)
 Build a diagonal matrix. More...
 
-

Detailed Description

-

GLM_GTX_matrix_operation

-
See also
Core features (dependence)
- -

Definition in file matrix_operation.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00104_source.html b/tests/OpenGL/package/glm/doc/api/a00104_source.html deleted file mode 100644 index 9f987b5d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00104_source.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_operation.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_operation.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_matrix_operation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_matrix_operation extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
33  template<typename T, qualifier Q>
-
34  GLM_FUNC_DECL mat<2, 2, T, Q> diagonal2x2(
-
35  vec<2, T, Q> const& v);
-
36 
-
39  template<typename T, qualifier Q>
-
40  GLM_FUNC_DECL mat<2, 3, T, Q> diagonal2x3(
-
41  vec<2, T, Q> const& v);
-
42 
-
45  template<typename T, qualifier Q>
-
46  GLM_FUNC_DECL mat<2, 4, T, Q> diagonal2x4(
-
47  vec<2, T, Q> const& v);
-
48 
-
51  template<typename T, qualifier Q>
-
52  GLM_FUNC_DECL mat<3, 2, T, Q> diagonal3x2(
-
53  vec<2, T, Q> const& v);
-
54 
-
57  template<typename T, qualifier Q>
-
58  GLM_FUNC_DECL mat<3, 3, T, Q> diagonal3x3(
-
59  vec<3, T, Q> const& v);
-
60 
-
63  template<typename T, qualifier Q>
-
64  GLM_FUNC_DECL mat<3, 4, T, Q> diagonal3x4(
-
65  vec<3, T, Q> const& v);
-
66 
-
69  template<typename T, qualifier Q>
-
70  GLM_FUNC_DECL mat<4, 2, T, Q> diagonal4x2(
-
71  vec<2, T, Q> const& v);
-
72 
-
75  template<typename T, qualifier Q>
-
76  GLM_FUNC_DECL mat<4, 3, T, Q> diagonal4x3(
-
77  vec<3, T, Q> const& v);
-
78 
-
81  template<typename T, qualifier Q>
-
82  GLM_FUNC_DECL mat<4, 4, T, Q> diagonal4x4(
-
83  vec<4, T, Q> const& v);
-
84 
-
87  template<typename T, qualifier Q>
-
88  GLM_FUNC_DECL mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m);
-
89 
-
92  template<typename T, qualifier Q>
-
93  GLM_FUNC_DECL mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m);
-
94 
-
97  template<typename T, qualifier Q>
-
98  GLM_FUNC_DECL mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m);
-
99 
-
101 }//namespace glm
-
102 
-
103 #include "matrix_operation.inl"
-
GLM_FUNC_DECL mat< 4, 3, T, Q > diagonal4x3(vec< 3, T, Q > const &v)
Build a diagonal matrix.
-
GLM_FUNC_DECL mat< 2, 2, T, Q > diagonal2x2(vec< 2, T, Q > const &v)
Build a diagonal matrix.
-
GLM_FUNC_DECL mat< 3, 4, T, Q > diagonal3x4(vec< 3, T, Q > const &v)
Build a diagonal matrix.
-
GLM_FUNC_DECL mat< 3, 2, T, Q > diagonal3x2(vec< 2, T, Q > const &v)
Build a diagonal matrix.
-
GLM_FUNC_DECL mat< 2, 3, T, Q > diagonal2x3(vec< 2, T, Q > const &v)
Build a diagonal matrix.
-
GLM_FUNC_DECL mat< 3, 3, T, Q > diagonal3x3(vec< 3, T, Q > const &v)
Build a diagonal matrix.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > adjugate(mat< 4, 4, T, Q > const &m)
Build an adjugate matrix.
-
GLM_FUNC_DECL mat< 2, 4, T, Q > diagonal2x4(vec< 2, T, Q > const &v)
Build a diagonal matrix.
-
GLM_FUNC_DECL mat< 4, 2, T, Q > diagonal4x2(vec< 2, T, Q > const &v)
Build a diagonal matrix.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > diagonal4x4(vec< 4, T, Q > const &v)
Build a diagonal matrix.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00105.html b/tests/OpenGL/package/glm/doc/api/a00105.html deleted file mode 100644 index 0c941e14..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00105.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_projection.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_projection.hpp File Reference
-
-
- -

GLM_EXT_matrix_projection -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q, typename U >
GLM_FUNC_DECL mat< 4, 4, T, Q > pickMatrix (vec< 2, T, Q > const &center, vec< 2, T, Q > const &delta, vec< 4, U, Q > const &viewport)
 Define a picking region. More...
 
template<typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > project (vec< 3, T, Q > const &obj, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
 Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition. More...
 
template<typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > projectNO (vec< 3, T, Q > const &obj, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
 Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. More...
 
template<typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > projectZO (vec< 3, T, Q > const &obj, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
 Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. More...
 
template<typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > unProject (vec< 3, T, Q > const &win, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
 Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition. More...
 
template<typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > unProjectNO (vec< 3, T, Q > const &win, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
 Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. More...
 
template<typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > unProjectZO (vec< 3, T, Q > const &win, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
 Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00105_source.html b/tests/OpenGL/package/glm/doc/api/a00105_source.html deleted file mode 100644 index d4dd197a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00105_source.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_projection.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_projection.hpp
-
-
-Go to the documentation of this file.
1 
-
20 #pragma once
-
21 
-
22 // Dependencies
-
23 #include "../gtc/constants.hpp"
-
24 #include "../geometric.hpp"
-
25 #include "../trigonometric.hpp"
-
26 #include "../matrix.hpp"
-
27 
-
28 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
29 # pragma message("GLM: GLM_EXT_matrix_projection extension included")
-
30 #endif
-
31 
-
32 namespace glm
-
33 {
-
36 
-
49  template<typename T, typename U, qualifier Q>
-
50  GLM_FUNC_DECL vec<3, T, Q> projectZO(
-
51  vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);
-
52 
-
65  template<typename T, typename U, qualifier Q>
-
66  GLM_FUNC_DECL vec<3, T, Q> projectNO(
-
67  vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);
-
68 
-
81  template<typename T, typename U, qualifier Q>
-
82  GLM_FUNC_DECL vec<3, T, Q> project(
-
83  vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);
-
84 
-
97  template<typename T, typename U, qualifier Q>
-
98  GLM_FUNC_DECL vec<3, T, Q> unProjectZO(
-
99  vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);
-
100 
-
113  template<typename T, typename U, qualifier Q>
-
114  GLM_FUNC_DECL vec<3, T, Q> unProjectNO(
-
115  vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);
-
116 
-
129  template<typename T, typename U, qualifier Q>
-
130  GLM_FUNC_DECL vec<3, T, Q> unProject(
-
131  vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);
-
132 
-
142  template<typename T, qualifier Q, typename U>
-
143  GLM_FUNC_DECL mat<4, 4, T, Q> pickMatrix(
-
144  vec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport);
-
145 
-
147 }//namespace glm
-
148 
-
149 #include "matrix_projection.inl"
-
GLM_FUNC_DECL vec< 3, T, Q > unProjectZO(vec< 3, T, Q > const &win, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.
-
GLM_FUNC_DECL genType proj(genType const &x, genType const &Normal)
Projects x on Normal.
-
GLM_FUNC_DECL vec< 3, T, Q > projectZO(vec< 3, T, Q > const &obj, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.
-
GLM_FUNC_DECL vec< 3, T, Q > projectNO(vec< 3, T, Q > const &obj, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.
-
GLM_FUNC_DECL vec< 3, T, Q > project(vec< 3, T, Q > const &obj, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near...
-
GLM_FUNC_DECL vec< 3, T, Q > unProjectNO(vec< 3, T, Q > const &win, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.
-
GLM_FUNC_DECL vec< 3, T, Q > unProject(vec< 3, T, Q > const &win, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near...
-
GLM_FUNC_DECL mat< 4, 4, T, Q > pickMatrix(vec< 2, T, Q > const &center, vec< 2, T, Q > const &delta, vec< 4, U, Q > const &viewport)
Define a picking region.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00106.html b/tests/OpenGL/package/glm/doc/api/a00106.html deleted file mode 100644 index 7abe6079..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00106.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_query.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_query.hpp File Reference
-
-
- -

GLM_GTX_matrix_query -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t C, length_t R, typename T , qualifier Q, template< length_t, length_t, typename, qualifier > class matType>
GLM_FUNC_DECL bool isIdentity (matType< C, R, T, Q > const &m, T const &epsilon)
 Return whether a matrix is an identity matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool isNormalized (mat< 2, 2, T, Q > const &m, T const &epsilon)
 Return whether a matrix is a normalized matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool isNormalized (mat< 3, 3, T, Q > const &m, T const &epsilon)
 Return whether a matrix is a normalized matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool isNormalized (mat< 4, 4, T, Q > const &m, T const &epsilon)
 Return whether a matrix is a normalized matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool isNull (mat< 2, 2, T, Q > const &m, T const &epsilon)
 Return whether a matrix a null matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool isNull (mat< 3, 3, T, Q > const &m, T const &epsilon)
 Return whether a matrix a null matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool isNull (mat< 4, 4, T, Q > const &m, T const &epsilon)
 Return whether a matrix is a null matrix. More...
 
template<length_t C, length_t R, typename T , qualifier Q, template< length_t, length_t, typename, qualifier > class matType>
GLM_FUNC_DECL bool isOrthogonal (matType< C, R, T, Q > const &m, T const &epsilon)
 Return whether a matrix is an orthonormalized matrix. More...
 
-

Detailed Description

-

GLM_GTX_matrix_query

-
See also
Core features (dependence)
-
-GLM_GTX_vector_query (dependence)
- -

Definition in file matrix_query.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00106_source.html b/tests/OpenGL/package/glm/doc/api/a00106_source.html deleted file mode 100644 index 06d2d277..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00106_source.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_query.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_query.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../glm.hpp"
-
18 #include "../gtx/vector_query.hpp"
-
19 #include <limits>
-
20 
-
21 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
22 # ifndef GLM_ENABLE_EXPERIMENTAL
-
23 # pragma message("GLM: GLM_GTX_matrix_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
24 # else
-
25 # pragma message("GLM: GLM_GTX_matrix_query extension included")
-
26 # endif
-
27 #endif
-
28 
-
29 namespace glm
-
30 {
-
33 
-
36  template<typename T, qualifier Q>
-
37  GLM_FUNC_DECL bool isNull(mat<2, 2, T, Q> const& m, T const& epsilon);
-
38 
-
41  template<typename T, qualifier Q>
-
42  GLM_FUNC_DECL bool isNull(mat<3, 3, T, Q> const& m, T const& epsilon);
-
43 
-
46  template<typename T, qualifier Q>
-
47  GLM_FUNC_DECL bool isNull(mat<4, 4, T, Q> const& m, T const& epsilon);
-
48 
-
51  template<length_t C, length_t R, typename T, qualifier Q, template<length_t, length_t, typename, qualifier> class matType>
-
52  GLM_FUNC_DECL bool isIdentity(matType<C, R, T, Q> const& m, T const& epsilon);
-
53 
-
56  template<typename T, qualifier Q>
-
57  GLM_FUNC_DECL bool isNormalized(mat<2, 2, T, Q> const& m, T const& epsilon);
-
58 
-
61  template<typename T, qualifier Q>
-
62  GLM_FUNC_DECL bool isNormalized(mat<3, 3, T, Q> const& m, T const& epsilon);
-
63 
-
66  template<typename T, qualifier Q>
-
67  GLM_FUNC_DECL bool isNormalized(mat<4, 4, T, Q> const& m, T const& epsilon);
-
68 
-
71  template<length_t C, length_t R, typename T, qualifier Q, template<length_t, length_t, typename, qualifier> class matType>
-
72  GLM_FUNC_DECL bool isOrthogonal(matType<C, R, T, Q> const& m, T const& epsilon);
-
73 
-
75 }//namespace glm
-
76 
-
77 #include "matrix_query.inl"
-
GLM_FUNC_DECL bool isNormalized(mat< 4, 4, T, Q > const &m, T const &epsilon)
Return whether a matrix is a normalized matrix.
-
GLM_FUNC_DECL bool isIdentity(matType< C, R, T, Q > const &m, T const &epsilon)
Return whether a matrix is an identity matrix.
-
GLM_FUNC_DECL bool isNull(mat< 4, 4, T, Q > const &m, T const &epsilon)
Return whether a matrix is a null matrix.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()
Return the epsilon constant for floating point types.
-
GLM_FUNC_DECL bool isOrthogonal(matType< C, R, T, Q > const &m, T const &epsilon)
Return whether a matrix is an orthonormalized matrix.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00107.html b/tests/OpenGL/package/glm/doc/api/a00107.html deleted file mode 100644 index 8138f889..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00107.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_relational.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_relational.hpp File Reference
-
-
- -

GLM_EXT_matrix_relational -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > equal (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y)
 Perform a component-wise equal-to comparison of two matrices. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > equal (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, T epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > equal (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, T, Q > const &epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > equal (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, int ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > equal (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, int, Q > const &ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > notEqual (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y)
 Perform a component-wise not-equal-to comparison of two matrices. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > notEqual (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, T epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > notEqual (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, T, Q > const &epsilon)
 Returns the component-wise comparison of |x - y| >= epsilon. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > notEqual (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, int ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > notEqual (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, int, Q > const &ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00107_source.html b/tests/OpenGL/package/glm/doc/api/a00107_source.html deleted file mode 100644 index cf926f33..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00107_source.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_relational.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_relational.hpp
-
-
-Go to the documentation of this file.
1 
-
15 #pragma once
-
16 
-
17 // Dependencies
-
18 #include "../detail/qualifier.hpp"
-
19 
-
20 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
21 # pragma message("GLM: GLM_EXT_matrix_relational extension included")
-
22 #endif
-
23 
-
24 namespace glm
-
25 {
-
28 
-
36  template<length_t C, length_t R, typename T, qualifier Q>
-
37  GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y);
-
38 
-
46  template<length_t C, length_t R, typename T, qualifier Q>
-
47  GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y);
-
48 
-
56  template<length_t C, length_t R, typename T, qualifier Q>
-
57  GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, T epsilon);
-
58 
-
66  template<length_t C, length_t R, typename T, qualifier Q>
-
67  GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, vec<C, T, Q> const& epsilon);
-
68 
-
76  template<length_t C, length_t R, typename T, qualifier Q>
-
77  GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, T epsilon);
-
78 
-
86  template<length_t C, length_t R, typename T, qualifier Q>
-
87  GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, vec<C, T, Q> const& epsilon);
-
88 
-
96  template<length_t C, length_t R, typename T, qualifier Q>
-
97  GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, int ULPs);
-
98 
-
106  template<length_t C, length_t R, typename T, qualifier Q>
-
107  GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, vec<C, int, Q> const& ULPs);
-
108 
-
116  template<length_t C, length_t R, typename T, qualifier Q>
-
117  GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, int ULPs);
-
118 
-
126  template<length_t C, length_t R, typename T, qualifier Q>
-
127  GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, vec<C, int, Q> const& ULPs);
-
128 
-
130 }//namespace glm
-
131 
-
132 #include "matrix_relational.inl"
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > equal(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, int, Q > const &ULPs)
Returns the component-wise comparison between two vectors in term of ULPs.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()
Return the epsilon constant for floating point types.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > notEqual(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, int, Q > const &ULPs)
Returns the component-wise comparison between two vectors in term of ULPs.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00108.html b/tests/OpenGL/package/glm/doc/api/a00108.html deleted file mode 100644 index 1f1f83da..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00108.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_transform.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
ext/matrix_transform.hpp File Reference
-
-
- -

GLM_EXT_matrix_transform -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

-template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType identity ()
 Builds an identity matrix.
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > lookAt (vec< 3, T, Q > const &eye, vec< 3, T, Q > const &center, vec< 3, T, Q > const &up)
 Build a look at view matrix based on the default handedness. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > lookAtLH (vec< 3, T, Q > const &eye, vec< 3, T, Q > const &center, vec< 3, T, Q > const &up)
 Build a left handed look at view matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > lookAtRH (vec< 3, T, Q > const &eye, vec< 3, T, Q > const &center, vec< 3, T, Q > const &up)
 Build a right handed look at view matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > rotate (mat< 4, 4, T, Q > const &m, T angle, vec< 3, T, Q > const &axis)
 Builds a rotation 4 * 4 matrix created from an axis vector and an angle. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > scale (mat< 4, 4, T, Q > const &m, vec< 3, T, Q > const &v)
 Builds a scale 4 * 4 matrix created from 3 scalars. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > translate (mat< 4, 4, T, Q > const &m, vec< 3, T, Q > const &v)
 Builds a translation 4 * 4 matrix created from a vector of 3 components. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00108_source.html b/tests/OpenGL/package/glm/doc/api/a00108_source.html deleted file mode 100644 index 2098420a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00108_source.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_transform.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
ext/matrix_transform.hpp
-
-
-Go to the documentation of this file.
1 
-
20 #pragma once
-
21 
-
22 // Dependencies
-
23 #include "../gtc/constants.hpp"
-
24 #include "../geometric.hpp"
-
25 #include "../trigonometric.hpp"
-
26 #include "../matrix.hpp"
-
27 
-
28 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
29 # pragma message("GLM: GLM_EXT_matrix_transform extension included")
-
30 #endif
-
31 
-
32 namespace glm
-
33 {
-
36 
-
38  template<typename genType>
-
39  GLM_FUNC_DECL GLM_CONSTEXPR genType identity();
-
40 
-
63  template<typename T, qualifier Q>
-
64  GLM_FUNC_DECL mat<4, 4, T, Q> translate(
-
65  mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v);
-
66 
-
79  template<typename T, qualifier Q>
-
80  GLM_FUNC_DECL mat<4, 4, T, Q> rotate(
-
81  mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& axis);
-
82 
-
94  template<typename T, qualifier Q>
-
95  GLM_FUNC_DECL mat<4, 4, T, Q> scale(
-
96  mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v);
-
97 
-
108  template<typename T, qualifier Q>
-
109  GLM_FUNC_DECL mat<4, 4, T, Q> lookAtRH(
-
110  vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up);
-
111 
-
122  template<typename T, qualifier Q>
-
123  GLM_FUNC_DECL mat<4, 4, T, Q> lookAtLH(
-
124  vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up);
-
125 
-
137  template<typename T, qualifier Q>
-
138  GLM_FUNC_DECL mat<4, 4, T, Q> lookAt(
-
139  vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up);
-
140 
-
142 }//namespace glm
-
143 
-
144 #include "matrix_transform.inl"
-
GLM_FUNC_DECL mat< 4, 4, T, Q > lookAtLH(vec< 3, T, Q > const &eye, vec< 3, T, Q > const &center, vec< 3, T, Q > const &up)
Build a left handed look at view matrix.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > lookAtRH(vec< 3, T, Q > const &eye, vec< 3, T, Q > const &center, vec< 3, T, Q > const &up)
Build a right handed look at view matrix.
-
GLM_FUNC_DECL T angle(qua< T, Q > const &x)
Returns the quaternion rotation angle.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > translate(mat< 4, 4, T, Q > const &m, vec< 3, T, Q > const &v)
Builds a translation 4 * 4 matrix created from a vector of 3 components.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > rotate(mat< 4, 4, T, Q > const &m, T angle, vec< 3, T, Q > const &axis)
Builds a rotation 4 * 4 matrix created from an axis vector and an angle.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType identity()
Builds an identity matrix.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > scale(mat< 4, 4, T, Q > const &m, vec< 3, T, Q > const &v)
Builds a scale 4 * 4 matrix created from 3 scalars.
-
GLM_FUNC_DECL vec< 3, T, Q > axis(qua< T, Q > const &x)
Returns the q rotation axis.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > lookAt(vec< 3, T, Q > const &eye, vec< 3, T, Q > const &center, vec< 3, T, Q > const &up)
Build a look at view matrix based on the default handedness.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00109.html b/tests/OpenGL/package/glm/doc/api/a00109.html deleted file mode 100644 index e6b7775f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00109.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_transform.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
gtc/matrix_transform.hpp File Reference
-
- - - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00109_source.html b/tests/OpenGL/package/glm/doc/api/a00109_source.html deleted file mode 100644 index 89220024..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00109_source.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_transform.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
gtc/matrix_transform.hpp
-
-
-Go to the documentation of this file.
1 
-
21 #pragma once
-
22 
-
23 // Dependencies
-
24 #include "../mat4x4.hpp"
-
25 #include "../vec2.hpp"
-
26 #include "../vec3.hpp"
-
27 #include "../vec4.hpp"
-
28 #include "../ext/matrix_projection.hpp"
-
29 #include "../ext/matrix_clip_space.hpp"
-
30 #include "../ext/matrix_transform.hpp"
-
31 
-
32 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
33 # pragma message("GLM: GLM_GTC_matrix_transform extension included")
-
34 #endif
-
35 
-
36 #include "matrix_transform.inl"
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00110.html b/tests/OpenGL/package/glm/doc/api/a00110.html deleted file mode 100644 index 8b3525cd..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00110.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_transform_2d.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
matrix_transform_2d.hpp File Reference
-
-
- -

GLM_GTX_matrix_transform_2d -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER mat< 3, 3, T, Q > rotate (mat< 3, 3, T, Q > const &m, T angle)
 Builds a rotation 3 * 3 matrix created from an angle. More...
 
template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER mat< 3, 3, T, Q > scale (mat< 3, 3, T, Q > const &m, vec< 2, T, Q > const &v)
 Builds a scale 3 * 3 matrix created from a vector of 2 components. More...
 
template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER mat< 3, 3, T, Q > shearX (mat< 3, 3, T, Q > const &m, T y)
 Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER mat< 3, 3, T, Q > shearY (mat< 3, 3, T, Q > const &m, T x)
 Builds a vertical (parallel to the y axis) shear 3 * 3 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER mat< 3, 3, T, Q > translate (mat< 3, 3, T, Q > const &m, vec< 2, T, Q > const &v)
 Builds a translation 3 * 3 matrix created from a vector of 2 components. More...
 
-

Detailed Description

-

GLM_GTX_matrix_transform_2d

-
Author
Miguel Ángel Pérez Martínez
-
See also
Core features (dependence)
- -

Definition in file matrix_transform_2d.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00110_source.html b/tests/OpenGL/package/glm/doc/api/a00110_source.html deleted file mode 100644 index 29815147..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00110_source.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -0.9.9 API documentation: matrix_transform_2d.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
matrix_transform_2d.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../mat3x3.hpp"
-
18 #include "../vec2.hpp"
-
19 
-
20 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
21 # ifndef GLM_ENABLE_EXPERIMENTAL
-
22 # pragma message("GLM: GLM_GTX_matrix_transform_2d is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
23 # else
-
24 # pragma message("GLM: GLM_GTX_matrix_transform_2d extension included")
-
25 # endif
-
26 #endif
-
27 
-
28 namespace glm
-
29 {
-
32 
-
37  template<typename T, qualifier Q>
-
38  GLM_FUNC_QUALIFIER mat<3, 3, T, Q> translate(
-
39  mat<3, 3, T, Q> const& m,
-
40  vec<2, T, Q> const& v);
-
41 
-
46  template<typename T, qualifier Q>
-
47  GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rotate(
-
48  mat<3, 3, T, Q> const& m,
-
49  T angle);
-
50 
-
55  template<typename T, qualifier Q>
-
56  GLM_FUNC_QUALIFIER mat<3, 3, T, Q> scale(
-
57  mat<3, 3, T, Q> const& m,
-
58  vec<2, T, Q> const& v);
-
59 
-
64  template<typename T, qualifier Q>
-
65  GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX(
-
66  mat<3, 3, T, Q> const& m,
-
67  T y);
-
68 
-
73  template<typename T, qualifier Q>
-
74  GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY(
-
75  mat<3, 3, T, Q> const& m,
-
76  T x);
-
77 
-
79 }//namespace glm
-
80 
-
81 #include "matrix_transform_2d.inl"
-
GLM_FUNC_DECL T angle(qua< T, Q > const &x)
Returns the quaternion rotation angle.
-
GLM_FUNC_QUALIFIER mat< 3, 3, T, Q > translate(mat< 3, 3, T, Q > const &m, vec< 2, T, Q > const &v)
Builds a translation 3 * 3 matrix created from a vector of 2 components.
-
GLM_FUNC_QUALIFIER mat< 3, 3, T, Q > rotate(mat< 3, 3, T, Q > const &m, T angle)
Builds a rotation 3 * 3 matrix created from an angle.
-
GLM_FUNC_QUALIFIER mat< 3, 3, T, Q > shearY(mat< 3, 3, T, Q > const &m, T x)
Builds a vertical (parallel to the y axis) shear 3 * 3 matrix.
-
GLM_FUNC_QUALIFIER mat< 3, 3, T, Q > scale(mat< 3, 3, T, Q > const &m, vec< 2, T, Q > const &v)
Builds a scale 3 * 3 matrix created from a vector of 2 components.
-
GLM_FUNC_QUALIFIER mat< 3, 3, T, Q > shearX(mat< 3, 3, T, Q > const &m, T y)
Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00111.html b/tests/OpenGL/package/glm/doc/api/a00111.html deleted file mode 100644 index 2c8ae4d7..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00111.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -0.9.9 API documentation: mixed_product.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
mixed_product.hpp File Reference
-
-
- -

GLM_GTX_mixed_producte -More...

- -

Go to the source code of this file.

- - - - - - -

-Functions

-template<typename T , qualifier Q>
GLM_FUNC_DECL T mixedProduct (vec< 3, T, Q > const &v1, vec< 3, T, Q > const &v2, vec< 3, T, Q > const &v3)
 Mixed product of 3 vectors (from GLM_GTX_mixed_product extension)
 
-

Detailed Description

-

GLM_GTX_mixed_producte

-
See also
Core features (dependence)
- -

Definition in file mixed_product.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00111_source.html b/tests/OpenGL/package/glm/doc/api/a00111_source.html deleted file mode 100644 index e16cba2e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00111_source.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - -0.9.9 API documentation: mixed_product.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
mixed_product.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_mixed_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_mixed_product extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
32  template<typename T, qualifier Q>
-
33  GLM_FUNC_DECL T mixedProduct(
-
34  vec<3, T, Q> const& v1,
-
35  vec<3, T, Q> const& v2,
-
36  vec<3, T, Q> const& v3);
-
37 
-
39 }// namespace glm
-
40 
-
41 #include "mixed_product.inl"
-
GLM_FUNC_DECL T mixedProduct(vec< 3, T, Q > const &v1, vec< 3, T, Q > const &v2, vec< 3, T, Q > const &v3)
Mixed product of 3 vectors (from GLM_GTX_mixed_product extension)
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00112.html b/tests/OpenGL/package/glm/doc/api/a00112.html deleted file mode 100644 index 3aecbc53..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00112.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - -0.9.9 API documentation: noise.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
noise.hpp File Reference
-
-
- -

GLM_GTC_noise -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T perlin (vec< L, T, Q > const &p)
 Classic perlin noise. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T perlin (vec< L, T, Q > const &p, vec< L, T, Q > const &rep)
 Periodic perlin noise. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T simplex (vec< L, T, Q > const &p)
 Simplex noise. More...
 
-

Detailed Description

-

GLM_GTC_noise

-
See also
Core features (dependence)
- -

Definition in file noise.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00112_source.html b/tests/OpenGL/package/glm/doc/api/a00112_source.html deleted file mode 100644 index fa90c6c3..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00112_source.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - -0.9.9 API documentation: noise.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
noise.hpp
-
-
-Go to the documentation of this file.
1 
-
17 #pragma once
-
18 
-
19 // Dependencies
-
20 #include "../detail/setup.hpp"
-
21 #include "../detail/qualifier.hpp"
-
22 #include "../detail/_noise.hpp"
-
23 #include "../geometric.hpp"
-
24 #include "../common.hpp"
-
25 #include "../vector_relational.hpp"
-
26 #include "../vec2.hpp"
-
27 #include "../vec3.hpp"
-
28 #include "../vec4.hpp"
-
29 
-
30 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
31 # pragma message("GLM: GLM_GTC_noise extension included")
-
32 #endif
-
33 
-
34 namespace glm
-
35 {
-
38 
-
41  template<length_t L, typename T, qualifier Q>
-
42  GLM_FUNC_DECL T perlin(
-
43  vec<L, T, Q> const& p);
-
44 
-
47  template<length_t L, typename T, qualifier Q>
-
48  GLM_FUNC_DECL T perlin(
-
49  vec<L, T, Q> const& p,
-
50  vec<L, T, Q> const& rep);
-
51 
-
54  template<length_t L, typename T, qualifier Q>
-
55  GLM_FUNC_DECL T simplex(
-
56  vec<L, T, Q> const& p);
-
57 
-
59 }//namespace glm
-
60 
-
61 #include "noise.inl"
-
GLM_FUNC_DECL T simplex(vec< L, T, Q > const &p)
Simplex noise.
-
GLM_FUNC_DECL T perlin(vec< L, T, Q > const &p, vec< L, T, Q > const &rep)
Periodic perlin noise.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00113.html b/tests/OpenGL/package/glm/doc/api/a00113.html deleted file mode 100644 index 764a5bb0..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00113.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -0.9.9 API documentation: norm.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
norm.hpp File Reference
-
-
- -

GLM_GTX_norm -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T distance2 (vec< L, T, Q > const &p0, vec< L, T, Q > const &p1)
 Returns the squared distance between p0 and p1, i.e., length2(p0 - p1). More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T l1Norm (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)
 Returns the L1 norm between x and y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T l1Norm (vec< 3, T, Q > const &v)
 Returns the L1 norm of v. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T l2Norm (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)
 Returns the L2 norm between x and y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T l2Norm (vec< 3, T, Q > const &x)
 Returns the L2 norm of v. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T length2 (vec< L, T, Q > const &x)
 Returns the squared length of x. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T lMaxNorm (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)
 Returns the LMax norm between x and y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T lMaxNorm (vec< 3, T, Q > const &x)
 Returns the LMax norm of v. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T lxNorm (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y, unsigned int Depth)
 Returns the L norm between x and y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T lxNorm (vec< 3, T, Q > const &x, unsigned int Depth)
 Returns the L norm of v. More...
 
-

Detailed Description

-

GLM_GTX_norm

-
See also
Core features (dependence)
-
-GLM_GTX_quaternion (dependence)
-
-GLM_GTX_component_wise (dependence)
- -

Definition in file norm.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00113_source.html b/tests/OpenGL/package/glm/doc/api/a00113_source.html deleted file mode 100644 index 190a4857..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00113_source.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -0.9.9 API documentation: norm.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
norm.hpp
-
-
-Go to the documentation of this file.
1 
-
15 #pragma once
-
16 
-
17 // Dependency:
-
18 #include "../geometric.hpp"
-
19 #include "../gtx/quaternion.hpp"
-
20 #include "../gtx/component_wise.hpp"
-
21 
-
22 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
23 # ifndef GLM_ENABLE_EXPERIMENTAL
-
24 # pragma message("GLM: GLM_GTX_norm is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
25 # else
-
26 # pragma message("GLM: GLM_GTX_norm extension included")
-
27 # endif
-
28 #endif
-
29 
-
30 namespace glm
-
31 {
-
34 
-
37  template<length_t L, typename T, qualifier Q>
-
38  GLM_FUNC_DECL T length2(vec<L, T, Q> const& x);
-
39 
-
42  template<length_t L, typename T, qualifier Q>
-
43  GLM_FUNC_DECL T distance2(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1);
-
44 
-
47  template<typename T, qualifier Q>
-
48  GLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y);
-
49 
-
52  template<typename T, qualifier Q>
-
53  GLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& v);
-
54 
-
57  template<typename T, qualifier Q>
-
58  GLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y);
-
59 
-
62  template<typename T, qualifier Q>
-
63  GLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x);
-
64 
-
67  template<typename T, qualifier Q>
-
68  GLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth);
-
69 
-
72  template<typename T, qualifier Q>
-
73  GLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, unsigned int Depth);
-
74 
-
77  template<typename T, qualifier Q>
-
78  GLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y);
-
79 
-
82  template<typename T, qualifier Q>
-
83  GLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x);
-
84 
-
86 }//namespace glm
-
87 
-
88 #include "norm.inl"
-
GLM_FUNC_DECL T length2(vec< L, T, Q > const &x)
Returns the squared length of x.
-
GLM_FUNC_DECL T l1Norm(vec< 3, T, Q > const &v)
Returns the L1 norm of v.
-
GLM_FUNC_DECL T distance2(vec< L, T, Q > const &p0, vec< L, T, Q > const &p1)
Returns the squared distance between p0 and p1, i.e., length2(p0 - p1).
-
GLM_FUNC_DECL T lMaxNorm(vec< 3, T, Q > const &x)
Returns the LMax norm of v.
-
GLM_FUNC_DECL T lxNorm(vec< 3, T, Q > const &x, unsigned int Depth)
Returns the L norm of v.
-
GLM_FUNC_DECL T l2Norm(vec< 3, T, Q > const &x)
Returns the L2 norm of v.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00114.html b/tests/OpenGL/package/glm/doc/api/a00114.html deleted file mode 100644 index fccfbc6b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00114.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -0.9.9 API documentation: normal.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
normal.hpp File Reference
-
-
- -

GLM_GTX_normal -More...

- -

Go to the source code of this file.

- - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > triangleNormal (vec< 3, T, Q > const &p1, vec< 3, T, Q > const &p2, vec< 3, T, Q > const &p3)
 Computes triangle normal from triangle points. More...
 
-

Detailed Description

-

GLM_GTX_normal

-
See also
Core features (dependence)
-
-gtx_extented_min_max (dependence)
- -

Definition in file normal.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00114_source.html b/tests/OpenGL/package/glm/doc/api/a00114_source.html deleted file mode 100644 index 322b3278..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00114_source.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - -0.9.9 API documentation: normal.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
normal.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../glm.hpp"
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # ifndef GLM_ENABLE_EXPERIMENTAL
-
21 # pragma message("GLM: GLM_GTX_normal is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
22 # else
-
23 # pragma message("GLM: GLM_GTX_normal extension included")
-
24 # endif
-
25 #endif
-
26 
-
27 namespace glm
-
28 {
-
31 
-
35  template<typename T, qualifier Q>
-
36  GLM_FUNC_DECL vec<3, T, Q> triangleNormal(vec<3, T, Q> const& p1, vec<3, T, Q> const& p2, vec<3, T, Q> const& p3);
-
37 
-
39 }//namespace glm
-
40 
-
41 #include "normal.inl"
-
GLM_FUNC_DECL vec< 3, T, Q > triangleNormal(vec< 3, T, Q > const &p1, vec< 3, T, Q > const &p2, vec< 3, T, Q > const &p3)
Computes triangle normal from triangle points.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00115.html b/tests/OpenGL/package/glm/doc/api/a00115.html deleted file mode 100644 index 82e82a9a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00115.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - -0.9.9 API documentation: normalize_dot.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
normalize_dot.hpp File Reference
-
-
- -

GLM_GTX_normalize_dot -More...

- -

Go to the source code of this file.

- - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T fastNormalizeDot (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Normalize parameters and returns the dot product of x and y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T normalizeDot (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Normalize parameters and returns the dot product of x and y. More...
 
-

Detailed Description

-

GLM_GTX_normalize_dot

-
See also
Core features (dependence)
-
-GLM_GTX_fast_square_root (dependence)
- -

Definition in file normalize_dot.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00115_source.html b/tests/OpenGL/package/glm/doc/api/a00115_source.html deleted file mode 100644 index 9ad6977e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00115_source.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - -0.9.9 API documentation: normalize_dot.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
normalize_dot.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../gtx/fast_square_root.hpp"
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # ifndef GLM_ENABLE_EXPERIMENTAL
-
21 # pragma message("GLM: GLM_GTX_normalize_dot is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
22 # else
-
23 # pragma message("GLM: GLM_GTX_normalize_dot extension included")
-
24 # endif
-
25 #endif
-
26 
-
27 namespace glm
-
28 {
-
31 
-
36  template<length_t L, typename T, qualifier Q>
-
37  GLM_FUNC_DECL T normalizeDot(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
38 
-
43  template<length_t L, typename T, qualifier Q>
-
44  GLM_FUNC_DECL T fastNormalizeDot(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
45 
-
47 }//namespace glm
-
48 
-
49 #include "normalize_dot.inl"
-
GLM_FUNC_DECL T normalizeDot(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Normalize parameters and returns the dot product of x and y.
-
GLM_FUNC_DECL T fastNormalizeDot(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Normalize parameters and returns the dot product of x and y.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00116.html b/tests/OpenGL/package/glm/doc/api/a00116.html deleted file mode 100644 index b0713fe2..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00116.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -0.9.9 API documentation: number_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
number_precision.hpp File Reference
-
-
- -

GLM_GTX_number_precision -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

-typedef f32 f32mat1
 Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
 
-typedef f32 f32mat1x1
 Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
 
-typedef f32 f32vec1
 Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
 
-typedef f64 f64mat1
 Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
 
-typedef f64 f64mat1x1
 Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
 
-typedef f64 f64vec1
 Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
 
-typedef u16 u16vec1
 16bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
 
-typedef u32 u32vec1
 32bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
 
-typedef u64 u64vec1
 64bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
 
-typedef u8 u8vec1
 8bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
 
-

Detailed Description

-

GLM_GTX_number_precision

-
See also
Core features (dependence)
-
-GLM_GTC_type_precision (dependence)
-
-GLM_GTC_quaternion (dependence)
- -

Definition in file number_precision.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00116_source.html b/tests/OpenGL/package/glm/doc/api/a00116_source.html deleted file mode 100644 index d9a852e7..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00116_source.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -0.9.9 API documentation: number_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
number_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
15 #pragma once
-
16 
-
17 // Dependency:
-
18 #include "../glm.hpp"
-
19 #include "../gtc/type_precision.hpp"
-
20 
-
21 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
22 # ifndef GLM_ENABLE_EXPERIMENTAL
-
23 # pragma message("GLM: GLM_GTX_number_precision is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
24 # else
-
25 # pragma message("GLM: GLM_GTX_number_precision extension included")
-
26 # endif
-
27 #endif
-
28 
-
29 namespace glm{
-
30 namespace gtx
-
31 {
-
33  // Unsigned int vector types
-
34 
-
37 
-
38  typedef u8 u8vec1;
-
39  typedef u16 u16vec1;
-
40  typedef u32 u32vec1;
-
41  typedef u64 u64vec1;
-
42 
-
44  // Float vector types
-
45 
-
46  typedef f32 f32vec1;
-
47  typedef f64 f64vec1;
-
48 
-
50  // Float matrix types
-
51 
-
52  typedef f32 f32mat1;
-
53  typedef f32 f32mat1x1;
-
54  typedef f64 f64mat1;
-
55  typedef f64 f64mat1x1;
-
56 
-
58 }//namespace gtx
-
59 }//namespace glm
-
60 
-
61 #include "number_precision.inl"
-
uint32 u32
Default qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:120
-
uint64 u64
Default qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:134
-
f32 f32mat1x1
Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...
-
f64 f64mat1
Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...
-
u16 u16vec1
16bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
-
uint8 u8
Default qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:92
-
f32 f32mat1
Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...
-
f32 f32vec1
Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...
-
f64 f64vec1
Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...
-
f64 f64mat1x1
Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...
-
u64 u64vec1
64bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
-
u32 u32vec1
32bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
-
float f32
Default 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:150
-
uint16 u16
Default qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:106
-
u8 u8vec1
8bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
-
double f64
Default 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:166
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00117.html b/tests/OpenGL/package/glm/doc/api/a00117.html deleted file mode 100644 index d6198dfc..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00117.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - -0.9.9 API documentation: optimum_pow.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
optimum_pow.hpp File Reference
-
-
- -

GLM_GTX_optimum_pow -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType pow2 (genType const &x)
 Returns x raised to the power of 2. More...
 
template<typename genType >
GLM_FUNC_DECL genType pow3 (genType const &x)
 Returns x raised to the power of 3. More...
 
template<typename genType >
GLM_FUNC_DECL genType pow4 (genType const &x)
 Returns x raised to the power of 4. More...
 
-

Detailed Description

-

GLM_GTX_optimum_pow

-
See also
Core features (dependence)
- -

Definition in file optimum_pow.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00117_source.html b/tests/OpenGL/package/glm/doc/api/a00117_source.html deleted file mode 100644 index 4031c3f1..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00117_source.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -0.9.9 API documentation: optimum_pow.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
optimum_pow.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_optimum_pow is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_optimum_pow extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 namespace glm{
-
27 namespace gtx
-
28 {
-
31 
-
35  template<typename genType>
-
36  GLM_FUNC_DECL genType pow2(genType const& x);
-
37 
-
41  template<typename genType>
-
42  GLM_FUNC_DECL genType pow3(genType const& x);
-
43 
-
47  template<typename genType>
-
48  GLM_FUNC_DECL genType pow4(genType const& x);
-
49 
-
51 }//namespace gtx
-
52 }//namespace glm
-
53 
-
54 #include "optimum_pow.inl"
-
GLM_FUNC_DECL genType pow3(genType const &x)
Returns x raised to the power of 3.
-
GLM_FUNC_DECL genType pow4(genType const &x)
Returns x raised to the power of 4.
-
GLM_FUNC_DECL genType pow2(genType const &x)
Returns x raised to the power of 2.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00118.html b/tests/OpenGL/package/glm/doc/api/a00118.html deleted file mode 100644 index 7ea9817c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00118.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - -0.9.9 API documentation: orthonormalize.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
orthonormalize.hpp File Reference
-
-
- -

GLM_GTX_orthonormalize -More...

- -

Go to the source code of this file.

- - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > orthonormalize (mat< 3, 3, T, Q > const &m)
 Returns the orthonormalized matrix of m. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > orthonormalize (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)
 Orthonormalizes x according y. More...
 
-

Detailed Description

-

GLM_GTX_orthonormalize

-
See also
Core features (dependence)
-
-gtx_extented_min_max (dependence)
- -

Definition in file orthonormalize.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00118_source.html b/tests/OpenGL/package/glm/doc/api/a00118_source.html deleted file mode 100644 index 4ee3ce64..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00118_source.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - -0.9.9 API documentation: orthonormalize.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
orthonormalize.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../vec3.hpp"
-
18 #include "../mat3x3.hpp"
-
19 #include "../geometric.hpp"
-
20 
-
21 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
22 # ifndef GLM_ENABLE_EXPERIMENTAL
-
23 # pragma message("GLM: GLM_GTX_orthonormalize is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
24 # else
-
25 # pragma message("GLM: GLM_GTX_orthonormalize extension included")
-
26 # endif
-
27 #endif
-
28 
-
29 namespace glm
-
30 {
-
33 
-
37  template<typename T, qualifier Q>
-
38  GLM_FUNC_DECL mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m);
-
39 
-
43  template<typename T, qualifier Q>
-
44  GLM_FUNC_DECL vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y);
-
45 
-
47 }//namespace glm
-
48 
-
49 #include "orthonormalize.inl"
-
GLM_FUNC_DECL vec< 3, T, Q > orthonormalize(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)
Orthonormalizes x according y.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00119.html b/tests/OpenGL/package/glm/doc/api/a00119.html deleted file mode 100644 index e8c7feb2..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00119.html +++ /dev/null @@ -1,333 +0,0 @@ - - - - - - -0.9.9 API documentation: packing.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
gtc/packing.hpp File Reference
-
-
- -

GLM_GTC_packing -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GLM_FUNC_DECL uint32 packF2x11_1x10 (vec3 const &v)
 First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. More...
 
GLM_FUNC_DECL uint32 packF3x9_E1x5 (vec3 const &v)
 First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, uint16, Q > packHalf (vec< L, float, Q > const &v)
 Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification. More...
 
GLM_FUNC_DECL uint16 packHalf1x16 (float v)
 Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 16-bit floating-point representation found in the OpenGL Specification, and then packing this 16-bit value into a 16-bit unsigned integer. More...
 
GLM_FUNC_DECL uint64 packHalf4x16 (vec4 const &v)
 Returns an unsigned integer obtained by converting the components of a four-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these four 16-bit values into a 64-bit unsigned integer. More...
 
GLM_FUNC_DECL uint32 packI3x10_1x2 (ivec4 const &v)
 Returns an unsigned integer obtained by converting the components of a four-component signed integer vector to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer. More...
 
GLM_FUNC_DECL int packInt2x16 (i16vec2 const &v)
 Convert each component from an integer vector into a packed integer. More...
 
GLM_FUNC_DECL int64 packInt2x32 (i32vec2 const &v)
 Convert each component from an integer vector into a packed integer. More...
 
GLM_FUNC_DECL int16 packInt2x8 (i8vec2 const &v)
 Convert each component from an integer vector into a packed integer. More...
 
GLM_FUNC_DECL int64 packInt4x16 (i16vec4 const &v)
 Convert each component from an integer vector into a packed integer. More...
 
GLM_FUNC_DECL int32 packInt4x8 (i8vec4 const &v)
 Convert each component from an integer vector into a packed integer. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > packRGBM (vec< 3, T, Q > const &rgb)
 Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification. More...
 
template<typename intType , length_t L, typename floatType , qualifier Q>
GLM_FUNC_DECL vec< L, intType, Q > packSnorm (vec< L, floatType, Q > const &v)
 Convert each component of the normalized floating-point vector into signed integer values. More...
 
GLM_FUNC_DECL uint16 packSnorm1x16 (float v)
 First, converts the normalized floating-point value v into 16-bit integer value. More...
 
GLM_FUNC_DECL uint8 packSnorm1x8 (float s)
 First, converts the normalized floating-point value v into 8-bit integer value. More...
 
GLM_FUNC_DECL uint16 packSnorm2x8 (vec2 const &v)
 First, converts each component of the normalized floating-point value v into 8-bit integer values. More...
 
GLM_FUNC_DECL uint32 packSnorm3x10_1x2 (vec4 const &v)
 First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values. More...
 
GLM_FUNC_DECL uint64 packSnorm4x16 (vec4 const &v)
 First, converts each component of the normalized floating-point value v into 16-bit integer values. More...
 
GLM_FUNC_DECL uint32 packU3x10_1x2 (uvec4 const &v)
 Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer. More...
 
GLM_FUNC_DECL uint packUint2x16 (u16vec2 const &v)
 Convert each component from an integer vector into a packed unsigned integer. More...
 
GLM_FUNC_DECL uint64 packUint2x32 (u32vec2 const &v)
 Convert each component from an integer vector into a packed unsigned integer. More...
 
GLM_FUNC_DECL uint16 packUint2x8 (u8vec2 const &v)
 Convert each component from an integer vector into a packed unsigned integer. More...
 
GLM_FUNC_DECL uint64 packUint4x16 (u16vec4 const &v)
 Convert each component from an integer vector into a packed unsigned integer. More...
 
GLM_FUNC_DECL uint32 packUint4x8 (u8vec4 const &v)
 Convert each component from an integer vector into a packed unsigned integer. More...
 
template<typename uintType , length_t L, typename floatType , qualifier Q>
GLM_FUNC_DECL vec< L, uintType, Q > packUnorm (vec< L, floatType, Q > const &v)
 Convert each component of the normalized floating-point vector into unsigned integer values. More...
 
GLM_FUNC_DECL uint16 packUnorm1x16 (float v)
 First, converts the normalized floating-point value v into a 16-bit integer value. More...
 
GLM_FUNC_DECL uint16 packUnorm1x5_1x6_1x5 (vec3 const &v)
 Convert each component of the normalized floating-point vector into unsigned integer values. More...
 
GLM_FUNC_DECL uint8 packUnorm1x8 (float v)
 First, converts the normalized floating-point value v into a 8-bit integer value. More...
 
GLM_FUNC_DECL uint8 packUnorm2x3_1x2 (vec3 const &v)
 Convert each component of the normalized floating-point vector into unsigned integer values. More...
 
GLM_FUNC_DECL uint8 packUnorm2x4 (vec2 const &v)
 Convert each component of the normalized floating-point vector into unsigned integer values. More...
 
GLM_FUNC_DECL uint16 packUnorm2x8 (vec2 const &v)
 First, converts each component of the normalized floating-point value v into 8-bit integer values. More...
 
GLM_FUNC_DECL uint32 packUnorm3x10_1x2 (vec4 const &v)
 First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values. More...
 
GLM_FUNC_DECL uint16 packUnorm3x5_1x1 (vec4 const &v)
 Convert each component of the normalized floating-point vector into unsigned integer values. More...
 
GLM_FUNC_DECL uint64 packUnorm4x16 (vec4 const &v)
 First, converts each component of the normalized floating-point value v into 16-bit integer values. More...
 
GLM_FUNC_DECL uint16 packUnorm4x4 (vec4 const &v)
 Convert each component of the normalized floating-point vector into unsigned integer values. More...
 
GLM_FUNC_DECL vec3 unpackF2x11_1x10 (uint32 p)
 First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . More...
 
GLM_FUNC_DECL vec3 unpackF3x9_E1x5 (uint32 p)
 First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, float, Q > unpackHalf (vec< L, uint16, Q > const &p)
 Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. More...
 
GLM_FUNC_DECL float unpackHalf1x16 (uint16 v)
 Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, interpreted as a 16-bit floating-point number according to the OpenGL Specification, and converting it to 32-bit floating-point values. More...
 
GLM_FUNC_DECL vec4 unpackHalf4x16 (uint64 p)
 Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values. More...
 
GLM_FUNC_DECL ivec4 unpackI3x10_1x2 (uint32 p)
 Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers. More...
 
GLM_FUNC_DECL i16vec2 unpackInt2x16 (int p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL i32vec2 unpackInt2x32 (int64 p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL i8vec2 unpackInt2x8 (int16 p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL i16vec4 unpackInt4x16 (int64 p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL i8vec4 unpackInt4x8 (int32 p)
 Convert a packed integer into an integer vector. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > unpackRGBM (vec< 4, T, Q > const &rgbm)
 Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. More...
 
template<typename floatType , length_t L, typename intType , qualifier Q>
GLM_FUNC_DECL vec< L, floatType, Q > unpackSnorm (vec< L, intType, Q > const &v)
 Convert a packed integer to a normalized floating-point vector. More...
 
GLM_FUNC_DECL float unpackSnorm1x16 (uint16 p)
 First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers. More...
 
GLM_FUNC_DECL float unpackSnorm1x8 (uint8 p)
 First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers. More...
 
GLM_FUNC_DECL vec2 unpackSnorm2x8 (uint16 p)
 First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers. More...
 
GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2 (uint32 p)
 First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. More...
 
GLM_FUNC_DECL vec4 unpackSnorm4x16 (uint64 p)
 First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers. More...
 
GLM_FUNC_DECL uvec4 unpackU3x10_1x2 (uint32 p)
 Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers. More...
 
GLM_FUNC_DECL u16vec2 unpackUint2x16 (uint p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL u32vec2 unpackUint2x32 (uint64 p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL u8vec2 unpackUint2x8 (uint16 p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL u16vec4 unpackUint4x16 (uint64 p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL u8vec4 unpackUint4x8 (uint32 p)
 Convert a packed integer into an integer vector. More...
 
template<typename floatType , length_t L, typename uintType , qualifier Q>
GLM_FUNC_DECL vec< L, floatType, Q > unpackUnorm (vec< L, uintType, Q > const &v)
 Convert a packed integer to a normalized floating-point vector. More...
 
GLM_FUNC_DECL float unpackUnorm1x16 (uint16 p)
 First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers. More...
 
GLM_FUNC_DECL vec3 unpackUnorm1x5_1x6_1x5 (uint16 p)
 Convert a packed integer to a normalized floating-point vector. More...
 
GLM_FUNC_DECL float unpackUnorm1x8 (uint8 p)
 Convert a single 8-bit integer to a normalized floating-point value. More...
 
GLM_FUNC_DECL vec3 unpackUnorm2x3_1x2 (uint8 p)
 Convert a packed integer to a normalized floating-point vector. More...
 
GLM_FUNC_DECL vec2 unpackUnorm2x4 (uint8 p)
 Convert a packed integer to a normalized floating-point vector. More...
 
GLM_FUNC_DECL vec2 unpackUnorm2x8 (uint16 p)
 First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers. More...
 
GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2 (uint32 p)
 First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. More...
 
GLM_FUNC_DECL vec4 unpackUnorm3x5_1x1 (uint16 p)
 Convert a packed integer to a normalized floating-point vector. More...
 
GLM_FUNC_DECL vec4 unpackUnorm4x16 (uint64 p)
 First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers. More...
 
GLM_FUNC_DECL vec4 unpackUnorm4x4 (uint16 p)
 Convert a packed integer to a normalized floating-point vector. More...
 
-

Detailed Description

-

GLM_GTC_packing

-
See also
Core features (dependence)
- -

Definition in file gtc/packing.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00119_source.html b/tests/OpenGL/package/glm/doc/api/a00119_source.html deleted file mode 100644 index 93889375..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00119_source.html +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - -0.9.9 API documentation: packing.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
gtc/packing.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "type_precision.hpp"
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # pragma message("GLM: GLM_GTC_packing extension included")
-
21 #endif
-
22 
-
23 namespace glm
-
24 {
-
27 
-
39  GLM_FUNC_DECL uint8 packUnorm1x8(float v);
-
40 
-
51  GLM_FUNC_DECL float unpackUnorm1x8(uint8 p);
-
52 
-
67  GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const& v);
-
68 
-
83  GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 p);
-
84 
-
96  GLM_FUNC_DECL uint8 packSnorm1x8(float s);
-
97 
-
109  GLM_FUNC_DECL float unpackSnorm1x8(uint8 p);
-
110 
-
125  GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const& v);
-
126 
-
141  GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 p);
-
142 
-
154  GLM_FUNC_DECL uint16 packUnorm1x16(float v);
-
155 
-
167  GLM_FUNC_DECL float unpackUnorm1x16(uint16 p);
-
168 
-
183  GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const& v);
-
184 
-
199  GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 p);
-
200 
-
212  GLM_FUNC_DECL uint16 packSnorm1x16(float v);
-
213 
-
225  GLM_FUNC_DECL float unpackSnorm1x16(uint16 p);
-
226 
-
241  GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const& v);
-
242 
-
257  GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 p);
-
258 
-
268  GLM_FUNC_DECL uint16 packHalf1x16(float v);
-
269 
-
279  GLM_FUNC_DECL float unpackHalf1x16(uint16 v);
-
280 
-
292  GLM_FUNC_DECL uint64 packHalf4x16(vec4 const& v);
-
293 
-
305  GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 p);
-
306 
-
318  GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const& v);
-
319 
-
329  GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 p);
-
330 
-
342  GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const& v);
-
343 
-
353  GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 p);
-
354 
-
371  GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const& v);
-
372 
-
388  GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 p);
-
389 
-
406  GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const& v);
-
407 
-
423  GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 p);
-
424 
-
434  GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const& v);
-
435 
-
444  GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 p);
-
445 
-
446 
-
458  GLM_FUNC_DECL uint32 packF3x9_E1x5(vec3 const& v);
-
459 
-
470  GLM_FUNC_DECL vec3 unpackF3x9_E1x5(uint32 p);
-
471 
-
480  template<length_t L, typename T, qualifier Q>
-
481  GLM_FUNC_DECL vec<4, T, Q> packRGBM(vec<3, T, Q> const& rgb);
-
482 
-
490  template<length_t L, typename T, qualifier Q>
-
491  GLM_FUNC_DECL vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& rgbm);
-
492 
-
501  template<length_t L, qualifier Q>
-
502  GLM_FUNC_DECL vec<L, uint16, Q> packHalf(vec<L, float, Q> const& v);
-
503 
-
511  template<length_t L, qualifier Q>
-
512  GLM_FUNC_DECL vec<L, float, Q> unpackHalf(vec<L, uint16, Q> const& p);
-
513 
-
518  template<typename uintType, length_t L, typename floatType, qualifier Q>
-
519  GLM_FUNC_DECL vec<L, uintType, Q> packUnorm(vec<L, floatType, Q> const& v);
-
520 
-
525  template<typename floatType, length_t L, typename uintType, qualifier Q>
-
526  GLM_FUNC_DECL vec<L, floatType, Q> unpackUnorm(vec<L, uintType, Q> const& v);
-
527 
-
532  template<typename intType, length_t L, typename floatType, qualifier Q>
-
533  GLM_FUNC_DECL vec<L, intType, Q> packSnorm(vec<L, floatType, Q> const& v);
-
534 
-
539  template<typename floatType, length_t L, typename intType, qualifier Q>
-
540  GLM_FUNC_DECL vec<L, floatType, Q> unpackSnorm(vec<L, intType, Q> const& v);
-
541 
-
546  GLM_FUNC_DECL uint8 packUnorm2x4(vec2 const& v);
-
547 
-
552  GLM_FUNC_DECL vec2 unpackUnorm2x4(uint8 p);
-
553 
-
558  GLM_FUNC_DECL uint16 packUnorm4x4(vec4 const& v);
-
559 
-
564  GLM_FUNC_DECL vec4 unpackUnorm4x4(uint16 p);
-
565 
-
570  GLM_FUNC_DECL uint16 packUnorm1x5_1x6_1x5(vec3 const& v);
-
571 
-
576  GLM_FUNC_DECL vec3 unpackUnorm1x5_1x6_1x5(uint16 p);
-
577 
-
582  GLM_FUNC_DECL uint16 packUnorm3x5_1x1(vec4 const& v);
-
583 
-
588  GLM_FUNC_DECL vec4 unpackUnorm3x5_1x1(uint16 p);
-
589 
-
594  GLM_FUNC_DECL uint8 packUnorm2x3_1x2(vec3 const& v);
-
595 
-
600  GLM_FUNC_DECL vec3 unpackUnorm2x3_1x2(uint8 p);
-
601 
-
602 
-
603 
-
608  GLM_FUNC_DECL int16 packInt2x8(i8vec2 const& v);
-
609 
-
614  GLM_FUNC_DECL i8vec2 unpackInt2x8(int16 p);
-
615 
-
620  GLM_FUNC_DECL uint16 packUint2x8(u8vec2 const& v);
-
621 
-
626  GLM_FUNC_DECL u8vec2 unpackUint2x8(uint16 p);
-
627 
-
632  GLM_FUNC_DECL int32 packInt4x8(i8vec4 const& v);
-
633 
-
638  GLM_FUNC_DECL i8vec4 unpackInt4x8(int32 p);
-
639 
-
644  GLM_FUNC_DECL uint32 packUint4x8(u8vec4 const& v);
-
645 
-
650  GLM_FUNC_DECL u8vec4 unpackUint4x8(uint32 p);
-
651 
-
656  GLM_FUNC_DECL int packInt2x16(i16vec2 const& v);
-
657 
-
662  GLM_FUNC_DECL i16vec2 unpackInt2x16(int p);
-
663 
-
668  GLM_FUNC_DECL int64 packInt4x16(i16vec4 const& v);
-
669 
-
674  GLM_FUNC_DECL i16vec4 unpackInt4x16(int64 p);
-
675 
-
680  GLM_FUNC_DECL uint packUint2x16(u16vec2 const& v);
-
681 
-
686  GLM_FUNC_DECL u16vec2 unpackUint2x16(uint p);
-
687 
-
692  GLM_FUNC_DECL uint64 packUint4x16(u16vec4 const& v);
-
693 
-
698  GLM_FUNC_DECL u16vec4 unpackUint4x16(uint64 p);
-
699 
-
704  GLM_FUNC_DECL int64 packInt2x32(i32vec2 const& v);
-
705 
-
710  GLM_FUNC_DECL i32vec2 unpackInt2x32(int64 p);
-
711 
-
716  GLM_FUNC_DECL uint64 packUint2x32(u32vec2 const& v);
-
717 
-
722  GLM_FUNC_DECL u32vec2 unpackUint2x32(uint64 p);
-
723 
-
724 
-
726 }// namespace glm
-
727 
-
728 #include "packing.inl"
-
GLM_FUNC_DECL uint16 packUnorm4x4(vec4 const &v)
Convert each component of the normalized floating-point vector into unsigned integer values...
-
GLM_FUNC_DECL uint16 packUint2x8(u8vec2 const &v)
Convert each component from an integer vector into a packed unsigned integer.
-
GLM_FUNC_DECL uint8 packUnorm2x4(vec2 const &v)
Convert each component of the normalized floating-point vector into unsigned integer values...
-
GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 p)
First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers.
-
GLM_FUNC_DECL i16vec2 unpackInt2x16(int p)
Convert a packed integer into an integer vector.
-
GLM_FUNC_DECL i8vec4 unpackInt4x8(int32 p)
Convert a packed integer into an integer vector.
-
vec< 2, float, defaultp > vec2
2 components vector of single-precision floating-point numbers.
-
GLM_FUNC_DECL u16vec4 unpackUint4x16(uint64 p)
Convert a packed integer into an integer vector.
-
vec< 2, i8, defaultp > i8vec2
8 bit signed integer vector of 2 components type.
Definition: fwd.hpp:238
-
GLM_FUNC_DECL u32vec2 unpackUint2x32(uint64 p)
Convert a packed integer into an integer vector.
-
GLM_FUNC_DECL vec< L, float, Q > unpackHalf(vec< L, uint16, Q > const &p)
Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bi...
-
GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const &v)
First, converts each component of the normalized floating-point value v into 16-bit integer values...
-
GLM_FUNC_DECL vec< L, uintType, Q > packUnorm(vec< L, floatType, Q > const &v)
Convert each component of the normalized floating-point vector into unsigned integer values...
-
GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 p)
First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and ...
-
GLM_FUNC_DECL uint8 packUnorm1x8(float v)
First, converts the normalized floating-point value v into a 8-bit integer value. ...
-
GLM_FUNC_DECL u8vec2 unpackUint2x8(uint16 p)
Convert a packed integer into an integer vector.
-
GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 p)
First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.
-
GLM_FUNC_DECL vec2 unpackUnorm2x4(uint8 p)
Convert a packed integer to a normalized floating-point vector.
-
GLM_FUNC_DECL vec< 4, T, Q > packRGBM(vec< 3, T, Q > const &rgb)
Returns an unsigned integer vector obtained by converting the components of a floating-point vector t...
-
vec< 4, i16, defaultp > i16vec4
16 bit signed integer vector of 4 components type.
Definition: fwd.hpp:260
-
GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 p)
First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers.
-
GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const &v)
First, converts the first three components of the normalized floating-point value v into 10-bit unsig...
-
vec< 4, u8, defaultp > u8vec4
Default qualifier 8 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:342
-
vec< 4, i8, defaultp > i8vec4
8 bit signed integer vector of 4 components type.
Definition: fwd.hpp:240
-
vec< 4, int, defaultp > ivec4
4 components vector of signed integer numbers.
Definition: vector_int4.hpp:15
-
GLM_FUNC_DECL i32vec2 unpackInt2x32(int64 p)
Convert a packed integer into an integer vector.
-
GLM_FUNC_DECL uint8 packUnorm2x3_1x2(vec3 const &v)
Convert each component of the normalized floating-point vector into unsigned integer values...
-
GLM_FUNC_DECL uint16 packUnorm1x16(float v)
First, converts the normalized floating-point value v into a 16-bit integer value.
-
vec< 4, float, defaultp > vec4
4 components vector of single-precision floating-point numbers.
-
vec< 2, i32, defaultp > i32vec2
32 bit signed integer vector of 2 components type.
Definition: fwd.hpp:278
-
GLM_FUNC_DECL float unpackUnorm1x8(uint8 p)
Convert a single 8-bit integer to a normalized floating-point value.
-
GLM_FUNC_DECL float unpackSnorm1x8(uint8 p)
First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers.
-
GLM_FUNC_DECL float unpackHalf1x16(uint16 v)
Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into ...
-
GLM_FUNC_DECL i16vec4 unpackInt4x16(int64 p)
Convert a packed integer into an integer vector.
-
GLM_FUNC_DECL float unpackUnorm1x16(uint16 p)
First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers.
-
GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 p)
First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers.
-
vec< 2, i16, defaultp > i16vec2
16 bit signed integer vector of 2 components type.
Definition: fwd.hpp:258
-
GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 p)
Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers...
-
GLM_FUNC_DECL uint16 packSnorm1x16(float v)
First, converts the normalized floating-point value v into 16-bit integer value.
-
GLM_FUNC_DECL vec3 unpackF3x9_E1x5(uint32 p)
First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and ...
-
GLM_FUNC_DECL vec< L, floatType, Q > unpackUnorm(vec< L, uintType, Q > const &v)
Convert a packed integer to a normalized floating-point vector.
-
GLM_FUNC_DECL vec< L, intType, Q > packSnorm(vec< L, floatType, Q > const &v)
Convert each component of the normalized floating-point vector into signed integer values...
-
GLM_FUNC_DECL uint16 packUnorm1x5_1x6_1x5(vec3 const &v)
Convert each component of the normalized floating-point vector into unsigned integer values...
-
GLM_FUNC_DECL vec4 unpackUnorm3x5_1x1(uint16 p)
Convert a packed integer to a normalized floating-point vector.
-
vec< 2, u8, defaultp > u8vec2
Default qualifier 8 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:340
-
GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 p)
First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.
-
GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const &v)
First, converts the first three components of the normalized floating-point value v into 10-bit signe...
-
GLM_FUNC_DECL int64 packInt4x16(i16vec4 const &v)
Convert each component from an integer vector into a packed integer.
-
GLM_FUNC_DECL vec3 unpackUnorm1x5_1x6_1x5(uint16 p)
Convert a packed integer to a normalized floating-point vector.
-
GLM_FUNC_DECL uint32 packF3x9_E1x5(vec3 const &v)
First, converts the first two components of the normalized floating-point value v into 11-bit signles...
-
GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const &v)
First, converts each component of the normalized floating-point value v into 8-bit integer values...
-
GLM_FUNC_DECL uint64 packUint4x16(u16vec4 const &v)
Convert each component from an integer vector into a packed unsigned integer.
-
vec< 3, float, defaultp > vec3
3 components vector of single-precision floating-point numbers.
-
GLM_FUNC_DECL uint16 packUnorm3x5_1x1(vec4 const &v)
Convert each component of the normalized floating-point vector into unsigned integer values...
-
GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 p)
First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers.
-
GLM_FUNC_DECL u16vec2 unpackUint2x16(uint p)
Convert a packed integer into an integer vector.
-
GLM_FUNC_DECL uint packUint2x16(u16vec2 const &v)
Convert each component from an integer vector into a packed unsigned integer.
-
GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const &v)
First, converts each component of the normalized floating-point value v into 16-bit integer values...
-
GLM_FUNC_DECL uint64 packUint2x32(u32vec2 const &v)
Convert each component from an integer vector into a packed unsigned integer.
-
vec< 4, unsigned int, defaultp > uvec4
4 components vector of unsigned integer numbers.
-
GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 p)
Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigne...
-
detail::uint64 uint64
64 bit unsigned integer type.
-
GLM_FUNC_DECL vec4 unpackUnorm4x4(uint16 p)
Convert a packed integer to a normalized floating-point vector.
-
GLM_FUNC_DECL uint64 packHalf4x16(vec4 const &v)
Returns an unsigned integer obtained by converting the components of a four-component floating-point ...
-
GLM_GTC_type_precision
-
GLM_FUNC_DECL i8vec2 unpackInt2x8(int16 p)
Convert a packed integer into an integer vector.
-
detail::int64 int64
64 bit signed integer type.
-
GLM_FUNC_DECL vec3 unpackUnorm2x3_1x2(uint8 p)
Convert a packed integer to a normalized floating-point vector.
-
GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const &v)
First, converts the first two components of the normalized floating-point value v into 11-bit signles...
-
GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 p)
Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers...
-
GLM_FUNC_DECL uint16 packHalf1x16(float v)
Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 1...
-
GLM_FUNC_DECL vec< L, floatType, Q > unpackSnorm(vec< L, intType, Q > const &v)
Convert a packed integer to a normalized floating-point vector.
-
GLM_FUNC_DECL vec< 3, T, Q > unpackRGBM(vec< 4, T, Q > const &rgbm)
Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bi...
-
GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const &v)
First, converts each component of the normalized floating-point value v into 8-bit integer values...
-
GLM_FUNC_DECL uint8 packSnorm1x8(float s)
First, converts the normalized floating-point value v into 8-bit integer value.
-
GLM_FUNC_DECL u8vec4 unpackUint4x8(uint32 p)
Convert a packed integer into an integer vector.
-
GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const &v)
Returns an unsigned integer obtained by converting the components of a four-component signed integer ...
-
GLM_FUNC_DECL int16 packInt2x8(i8vec2 const &v)
Convert each component from an integer vector into a packed integer.
-
GLM_FUNC_DECL int64 packInt2x32(i32vec2 const &v)
Convert each component from an integer vector into a packed integer.
-
GLM_FUNC_DECL uint32 packUint4x8(u8vec4 const &v)
Convert each component from an integer vector into a packed unsigned integer.
-
GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const &v)
Returns an unsigned integer obtained by converting the components of a four-component unsigned intege...
-
vec< 2, u32, defaultp > u32vec2
Default qualifier 32 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:380
-
GLM_FUNC_DECL int packInt2x16(i16vec2 const &v)
Convert each component from an integer vector into a packed integer.
-
GLM_FUNC_DECL vec< L, uint16, Q > packHalf(vec< L, float, Q > const &v)
Returns an unsigned integer vector obtained by converting the components of a floating-point vector t...
-
vec< 4, u16, defaultp > u16vec4
Default qualifier 16 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:362
-
GLM_FUNC_DECL int32 packInt4x8(i8vec4 const &v)
Convert each component from an integer vector into a packed integer.
-
vec< 2, u16, defaultp > u16vec2
Default qualifier 16 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:360
-
GLM_FUNC_DECL float unpackSnorm1x16(uint16 p)
First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00120.html b/tests/OpenGL/package/glm/doc/api/a00120.html deleted file mode 100644 index 4265a239..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00120.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -0.9.9 API documentation: packing.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
packing.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GLM_FUNC_DECL double packDouble2x32 (uvec2 const &v)
 Returns a double-qualifier value obtained by packing the components of v into a 64-bit value. More...
 
GLM_FUNC_DECL uint packHalf2x16 (vec2 const &v)
 Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these two 16- bit integers into a 32-bit unsigned integer. More...
 
GLM_FUNC_DECL uint packSnorm2x16 (vec2 const &v)
 First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. More...
 
GLM_FUNC_DECL uint packSnorm4x8 (vec4 const &v)
 First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. More...
 
GLM_FUNC_DECL uint packUnorm2x16 (vec2 const &v)
 First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. More...
 
GLM_FUNC_DECL uint packUnorm4x8 (vec4 const &v)
 First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. More...
 
GLM_FUNC_DECL uvec2 unpackDouble2x32 (double v)
 Returns a two-component unsigned integer vector representation of v. More...
 
GLM_FUNC_DECL vec2 unpackHalf2x16 (uint v)
 Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values. More...
 
GLM_FUNC_DECL vec2 unpackSnorm2x16 (uint p)
 First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. More...
 
GLM_FUNC_DECL vec4 unpackSnorm4x8 (uint p)
 First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. More...
 
GLM_FUNC_DECL vec2 unpackUnorm2x16 (uint p)
 First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. More...
 
GLM_FUNC_DECL vec4 unpackUnorm4x8 (uint p)
 First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00120_source.html b/tests/OpenGL/package/glm/doc/api/a00120_source.html deleted file mode 100644 index 37a06764..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00120_source.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - -0.9.9 API documentation: packing.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
packing.hpp
-
-
-Go to the documentation of this file.
1 
-
16 #pragma once
-
17 
-
18 #include "./ext/vector_uint2.hpp"
-
19 #include "./ext/vector_float2.hpp"
-
20 #include "./ext/vector_float4.hpp"
-
21 
-
22 namespace glm
-
23 {
-
26 
-
38  GLM_FUNC_DECL uint packUnorm2x16(vec2 const& v);
-
39 
-
51  GLM_FUNC_DECL uint packSnorm2x16(vec2 const& v);
-
52 
-
64  GLM_FUNC_DECL uint packUnorm4x8(vec4 const& v);
-
65 
-
77  GLM_FUNC_DECL uint packSnorm4x8(vec4 const& v);
-
78 
-
90  GLM_FUNC_DECL vec2 unpackUnorm2x16(uint p);
-
91 
-
103  GLM_FUNC_DECL vec2 unpackSnorm2x16(uint p);
-
104 
-
116  GLM_FUNC_DECL vec4 unpackUnorm4x8(uint p);
-
117 
-
129  GLM_FUNC_DECL vec4 unpackSnorm4x8(uint p);
-
130 
-
139  GLM_FUNC_DECL double packDouble2x32(uvec2 const& v);
-
140 
-
148  GLM_FUNC_DECL uvec2 unpackDouble2x32(double v);
-
149 
-
158  GLM_FUNC_DECL uint packHalf2x16(vec2 const& v);
-
159 
-
168  GLM_FUNC_DECL vec2 unpackHalf2x16(uint v);
-
169 
-
171 }//namespace glm
-
172 
-
173 #include "detail/func_packing.inl"
-
GLM_FUNC_DECL vec2 unpackUnorm2x16(uint p)
First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
-
vec< 2, float, defaultp > vec2
2 components vector of single-precision floating-point numbers.
-
GLM_FUNC_DECL uint packSnorm2x16(vec2 const &v)
First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...
-
GLM_FUNC_DECL uint packSnorm4x8(vec4 const &v)
First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...
-
GLM_FUNC_DECL uint packUnorm2x16(vec2 const &v)
First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...
-
GLM_FUNC_DECL uvec2 unpackDouble2x32(double v)
Returns a two-component unsigned integer vector representation of v.
-
vec< 4, float, defaultp > vec4
4 components vector of single-precision floating-point numbers.
-
GLM_FUNC_DECL vec2 unpackSnorm2x16(uint p)
First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
-
vec< 2, unsigned int, defaultp > uvec2
2 components vector of unsigned integer numbers.
-
GLM_FUNC_DECL vec2 unpackHalf2x16(uint v)
Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned...
-
Core features
-
GLM_FUNC_DECL uint packUnorm4x8(vec4 const &v)
First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...
-
GLM_FUNC_DECL vec4 unpackSnorm4x8(uint p)
First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
-
GLM_FUNC_DECL double packDouble2x32(uvec2 const &v)
Returns a double-qualifier value obtained by packing the components of v into a 64-bit value...
-
GLM_FUNC_DECL uint packHalf2x16(vec2 const &v)
Returns an unsigned integer obtained by converting the components of a two-component floating-point v...
-
Core features
-
GLM_FUNC_DECL vec4 unpackUnorm4x8(uint p)
First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
-
Core features
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00121.html b/tests/OpenGL/package/glm/doc/api/a00121.html deleted file mode 100644 index 98f3c401..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00121.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -0.9.9 API documentation: perpendicular.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
perpendicular.hpp File Reference
-
-
- -

GLM_GTX_perpendicular -More...

- -

Go to the source code of this file.

- - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType perp (genType const &x, genType const &Normal)
 Projects x a perpendicular axis of Normal. More...
 
-

Detailed Description

-

GLM_GTX_perpendicular

-
See also
Core features (dependence)
-
-GLM_GTX_projection (dependence)
- -

Definition in file perpendicular.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00121_source.html b/tests/OpenGL/package/glm/doc/api/a00121_source.html deleted file mode 100644 index 23b639ce..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00121_source.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - -0.9.9 API documentation: perpendicular.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
perpendicular.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../glm.hpp"
-
18 #include "../gtx/projection.hpp"
-
19 
-
20 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
21 # ifndef GLM_ENABLE_EXPERIMENTAL
-
22 # pragma message("GLM: GLM_GTX_perpendicular is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
23 # else
-
24 # pragma message("GLM: GLM_GTX_perpendicular extension included")
-
25 # endif
-
26 #endif
-
27 
-
28 namespace glm
-
29 {
-
32 
-
35  template<typename genType>
-
36  GLM_FUNC_DECL genType perp(genType const& x, genType const& Normal);
-
37 
-
39 }//namespace glm
-
40 
-
41 #include "perpendicular.inl"
-
GLM_FUNC_DECL genType perp(genType const &x, genType const &Normal)
Projects x a perpendicular axis of Normal.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00122.html b/tests/OpenGL/package/glm/doc/api/a00122.html deleted file mode 100644 index 0727653d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00122.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: polar_coordinates.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
polar_coordinates.hpp File Reference
-
-
- -

GLM_GTX_polar_coordinates -More...

- -

Go to the source code of this file.

- - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > euclidean (vec< 2, T, Q > const &polar)
 Convert Polar to Euclidean coordinates. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > polar (vec< 3, T, Q > const &euclidean)
 Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude. More...
 
-

Detailed Description

-

GLM_GTX_polar_coordinates

-
See also
Core features (dependence)
- -

Definition in file polar_coordinates.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00122_source.html b/tests/OpenGL/package/glm/doc/api/a00122_source.html deleted file mode 100644 index 5765202c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00122_source.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -0.9.9 API documentation: polar_coordinates.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
polar_coordinates.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_polar_coordinates is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_polar_coordinates extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
34  template<typename T, qualifier Q>
-
35  GLM_FUNC_DECL vec<3, T, Q> polar(
-
36  vec<3, T, Q> const& euclidean);
-
37 
-
41  template<typename T, qualifier Q>
-
42  GLM_FUNC_DECL vec<3, T, Q> euclidean(
-
43  vec<2, T, Q> const& polar);
-
44 
-
46 }//namespace glm
-
47 
-
48 #include "polar_coordinates.inl"
-
GLM_FUNC_DECL vec< 3, T, Q > polar(vec< 3, T, Q > const &euclidean)
Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude...
-
GLM_FUNC_DECL vec< 3, T, Q > euclidean(vec< 2, T, Q > const &polar)
Convert Polar to Euclidean coordinates.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00123.html b/tests/OpenGL/package/glm/doc/api/a00123.html deleted file mode 100644 index fd40a989..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00123.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - -0.9.9 API documentation: projection.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
projection.hpp File Reference
-
-
- -

GLM_GTX_projection -More...

- -

Go to the source code of this file.

- - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType proj (genType const &x, genType const &Normal)
 Projects x on Normal. More...
 
-

Detailed Description

-

GLM_GTX_projection

-
See also
Core features (dependence)
- -

Definition in file projection.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00123_source.html b/tests/OpenGL/package/glm/doc/api/a00123_source.html deleted file mode 100644 index b51acc05..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00123_source.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - -0.9.9 API documentation: projection.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
projection.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../geometric.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_projection is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_projection extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
37  template<typename genType>
-
38  GLM_FUNC_DECL genType proj(genType const& x, genType const& Normal);
-
39 
-
41 }//namespace glm
-
42 
-
43 #include "projection.inl"
-
GLM_FUNC_DECL genType proj(genType const &x, genType const &Normal)
Projects x on Normal.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00124_source.html b/tests/OpenGL/package/glm/doc/api/a00124_source.html deleted file mode 100644 index e648d3e4..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00124_source.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - -0.9.9 API documentation: qualifier.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
qualifier.hpp
-
-
-
1 #pragma once
-
2 
-
3 #include "setup.hpp"
-
4 
-
5 namespace glm
-
6 {
-
8  enum qualifier
-
9  {
-
10  packed_highp,
-
11  packed_mediump,
-
12  packed_lowp,
-
13 
-
14 # if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE
-
15  aligned_highp,
-
16  aligned_mediump,
-
17  aligned_lowp, // ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs to maximize performance
-
18  aligned = aligned_highp,
-
19 # endif
-
20 
-
21  highp = packed_highp,
-
22  mediump = packed_mediump,
-
23  lowp = packed_lowp,
-
24  packed = packed_highp,
-
25 
-
26 # if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE && defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES)
-
27  defaultp = aligned_highp
-
28 # else
-
29  defaultp = highp
-
30 # endif
-
31  };
-
32 
-
33  typedef qualifier precision;
-
34 
-
35  template<length_t L, typename T, qualifier Q = defaultp> struct vec;
-
36  template<length_t C, length_t R, typename T, qualifier Q = defaultp> struct mat;
-
37  template<typename T, qualifier Q = defaultp> struct qua;
-
38 
-
39 # if GLM_HAS_TEMPLATE_ALIASES
-
40  template <typename T, qualifier Q = defaultp> using tvec1 = vec<1, T, Q>;
-
41  template <typename T, qualifier Q = defaultp> using tvec2 = vec<2, T, Q>;
-
42  template <typename T, qualifier Q = defaultp> using tvec3 = vec<3, T, Q>;
-
43  template <typename T, qualifier Q = defaultp> using tvec4 = vec<4, T, Q>;
-
44  template <typename T, qualifier Q = defaultp> using tmat2x2 = mat<2, 2, T, Q>;
-
45  template <typename T, qualifier Q = defaultp> using tmat2x3 = mat<2, 3, T, Q>;
-
46  template <typename T, qualifier Q = defaultp> using tmat2x4 = mat<2, 4, T, Q>;
-
47  template <typename T, qualifier Q = defaultp> using tmat3x2 = mat<3, 2, T, Q>;
-
48  template <typename T, qualifier Q = defaultp> using tmat3x3 = mat<3, 3, T, Q>;
-
49  template <typename T, qualifier Q = defaultp> using tmat3x4 = mat<3, 4, T, Q>;
-
50  template <typename T, qualifier Q = defaultp> using tmat4x2 = mat<4, 2, T, Q>;
-
51  template <typename T, qualifier Q = defaultp> using tmat4x3 = mat<4, 3, T, Q>;
-
52  template <typename T, qualifier Q = defaultp> using tmat4x4 = mat<4, 4, T, Q>;
-
53  template <typename T, qualifier Q = defaultp> using tquat = qua<T, Q>;
-
54 # endif
-
55 
-
56 namespace detail
-
57 {
-
58  template<glm::qualifier P>
-
59  struct is_aligned
-
60  {
-
61  static const bool value = false;
-
62  };
-
63 
-
64 # if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE
-
65  template<>
-
66  struct is_aligned<glm::aligned_lowp>
-
67  {
-
68  static const bool value = true;
-
69  };
-
70 
-
71  template<>
-
72  struct is_aligned<glm::aligned_mediump>
-
73  {
-
74  static const bool value = true;
-
75  };
-
76 
-
77  template<>
-
78  struct is_aligned<glm::aligned_highp>
-
79  {
-
80  static const bool value = true;
-
81  };
-
82 # endif
-
83 
-
84  template<length_t L, typename T, bool is_aligned>
-
85  struct storage
-
86  {
-
87  typedef struct type {
-
88  T data[L];
-
89  } type;
-
90  };
-
91 
-
92 # if GLM_HAS_ALIGNOF
-
93  template<length_t L, typename T>
-
94  struct storage<L, T, true>
-
95  {
-
96  typedef struct alignas(L * sizeof(T)) type {
-
97  T data[L];
-
98  } type;
-
99  };
-
100 
-
101  template<typename T>
-
102  struct storage<3, T, true>
-
103  {
-
104  typedef struct alignas(4 * sizeof(T)) type {
-
105  T data[4];
-
106  } type;
-
107  };
-
108 # endif
-
109 
-
110 # if GLM_ARCH & GLM_ARCH_SSE2_BIT
-
111  template<>
-
112  struct storage<4, float, true>
-
113  {
-
114  typedef glm_f32vec4 type;
-
115  };
-
116 
-
117  template<>
-
118  struct storage<4, int, true>
-
119  {
-
120  typedef glm_i32vec4 type;
-
121  };
-
122 
-
123  template<>
-
124  struct storage<4, unsigned int, true>
-
125  {
-
126  typedef glm_u32vec4 type;
-
127  };
-
128 
-
129  template<>
-
130  struct storage<2, double, true>
-
131  {
-
132  typedef glm_f64vec2 type;
-
133  };
-
134 
-
135  template<>
-
136  struct storage<2, detail::int64, true>
-
137  {
-
138  typedef glm_i64vec2 type;
-
139  };
-
140 
-
141  template<>
-
142  struct storage<2, detail::uint64, true>
-
143  {
-
144  typedef glm_u64vec2 type;
-
145  };
-
146 # endif
-
147 
-
148 # if (GLM_ARCH & GLM_ARCH_AVX_BIT)
-
149  template<>
-
150  struct storage<4, double, true>
-
151  {
-
152  typedef glm_f64vec4 type;
-
153  };
-
154 # endif
-
155 
-
156 # if (GLM_ARCH & GLM_ARCH_AVX2_BIT)
-
157  template<>
-
158  struct storage<4, detail::int64, true>
-
159  {
-
160  typedef glm_i64vec4 type;
-
161  };
-
162 
-
163  template<>
-
164  struct storage<4, detail::uint64, true>
-
165  {
-
166  typedef glm_u64vec4 type;
-
167  };
-
168 # endif
-
169 
-
170 # if GLM_ARCH & GLM_ARCH_NEON_BIT
-
171  template<>
-
172  struct storage<4, float, true>
-
173  {
-
174  typedef glm_f32vec4 type;
-
175  };
-
176 
-
177  template<>
-
178  struct storage<4, int, true>
-
179  {
-
180  typedef glm_i32vec4 type;
-
181  };
-
182 
-
183  template<>
-
184  struct storage<4, unsigned int, true>
-
185  {
-
186  typedef glm_u32vec4 type;
-
187  };
-
188 # endif
-
189 
-
190  enum genTypeEnum
-
191  {
-
192  GENTYPE_VEC,
-
193  GENTYPE_MAT,
-
194  GENTYPE_QUAT
-
195  };
-
196 
-
197  template <typename genType>
-
198  struct genTypeTrait
-
199  {};
-
200 
-
201  template <length_t C, length_t R, typename T>
-
202  struct genTypeTrait<mat<C, R, T> >
-
203  {
-
204  static const genTypeEnum GENTYPE = GENTYPE_MAT;
-
205  };
-
206 
-
207  template<typename genType, genTypeEnum type>
-
208  struct init_gentype
-
209  {
-
210  };
-
211 
-
212  template<typename genType>
-
213  struct init_gentype<genType, GENTYPE_QUAT>
-
214  {
-
215  GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity()
-
216  {
-
217  return genType(1, 0, 0, 0);
-
218  }
-
219  };
-
220 
-
221  template<typename genType>
-
222  struct init_gentype<genType, GENTYPE_MAT>
-
223  {
-
224  GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity()
-
225  {
-
226  return genType(1);
-
227  }
-
228  };
-
229 }//namespace detail
-
230 }//namespace glm
-
GLM_FUNC_DECL GLM_CONSTEXPR genType identity()
Builds an identity matrix.
-
detail::uint64 uint64
64 bit unsigned integer type.
-
detail::int64 int64
64 bit signed integer type.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00125.html b/tests/OpenGL/package/glm/doc/api/a00125.html deleted file mode 100644 index 42e3bad6..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00125.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
gtc/quaternion.hpp File Reference
-
-
- -

GLM_GTC_quaternion -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > eulerAngles (qua< T, Q > const &x)
 Returns euler angles, pitch as x, yaw as y, roll as z. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > greaterThan (qua< T, Q > const &x, qua< T, Q > const &y)
 Returns the component-wise comparison of result x > y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > greaterThanEqual (qua< T, Q > const &x, qua< T, Q > const &y)
 Returns the component-wise comparison of result x >= y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > lessThan (qua< T, Q > const &x, qua< T, Q > const &y)
 Returns the component-wise comparison result of x < y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > lessThanEqual (qua< T, Q > const &x, qua< T, Q > const &y)
 Returns the component-wise comparison of result x <= y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > mat3_cast (qua< T, Q > const &x)
 Converts a quaternion to a 3 * 3 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > mat4_cast (qua< T, Q > const &x)
 Converts a quaternion to a 4 * 4 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T pitch (qua< T, Q > const &x)
 Returns pitch value of euler angles expressed in radians. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > quat_cast (mat< 3, 3, T, Q > const &x)
 Converts a pure rotation 3 * 3 matrix to a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > quat_cast (mat< 4, 4, T, Q > const &x)
 Converts a pure rotation 4 * 4 matrix to a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > quatLookAt (vec< 3, T, Q > const &direction, vec< 3, T, Q > const &up)
 Build a look at quaternion based on the default handedness. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > quatLookAtLH (vec< 3, T, Q > const &direction, vec< 3, T, Q > const &up)
 Build a left-handed look at quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > quatLookAtRH (vec< 3, T, Q > const &direction, vec< 3, T, Q > const &up)
 Build a right-handed look at quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T roll (qua< T, Q > const &x)
 Returns roll value of euler angles expressed in radians. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T yaw (qua< T, Q > const &x)
 Returns yaw value of euler angles expressed in radians. More...
 
-

Detailed Description

-

GLM_GTC_quaternion

-
See also
Core features (dependence)
-
-GLM_GTC_constants (dependence)
- -

Definition in file gtc/quaternion.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00125_source.html b/tests/OpenGL/package/glm/doc/api/a00125_source.html deleted file mode 100644 index 8bd0c8fe..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00125_source.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
gtc/quaternion.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../gtc/constants.hpp"
-
18 #include "../gtc/matrix_transform.hpp"
-
19 #include "../ext/vector_relational.hpp"
-
20 #include "../ext/quaternion_common.hpp"
-
21 #include "../ext/quaternion_float.hpp"
-
22 #include "../ext/quaternion_float_precision.hpp"
-
23 #include "../ext/quaternion_double.hpp"
-
24 #include "../ext/quaternion_double_precision.hpp"
-
25 #include "../ext/quaternion_relational.hpp"
-
26 #include "../ext/quaternion_geometric.hpp"
-
27 #include "../ext/quaternion_trigonometric.hpp"
-
28 #include "../ext/quaternion_transform.hpp"
-
29 #include "../detail/type_mat3x3.hpp"
-
30 #include "../detail/type_mat4x4.hpp"
-
31 #include "../detail/type_vec3.hpp"
-
32 #include "../detail/type_vec4.hpp"
-
33 
-
34 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
35 # pragma message("GLM: GLM_GTC_quaternion extension included")
-
36 #endif
-
37 
-
38 namespace glm
-
39 {
-
42 
-
49  template<typename T, qualifier Q>
-
50  GLM_FUNC_DECL vec<3, T, Q> eulerAngles(qua<T, Q> const& x);
-
51 
-
57  template<typename T, qualifier Q>
-
58  GLM_FUNC_DECL T roll(qua<T, Q> const& x);
-
59 
-
65  template<typename T, qualifier Q>
-
66  GLM_FUNC_DECL T pitch(qua<T, Q> const& x);
-
67 
-
73  template<typename T, qualifier Q>
-
74  GLM_FUNC_DECL T yaw(qua<T, Q> const& x);
-
75 
-
81  template<typename T, qualifier Q>
-
82  GLM_FUNC_DECL mat<3, 3, T, Q> mat3_cast(qua<T, Q> const& x);
-
83 
-
89  template<typename T, qualifier Q>
-
90  GLM_FUNC_DECL mat<4, 4, T, Q> mat4_cast(qua<T, Q> const& x);
-
91 
-
97  template<typename T, qualifier Q>
-
98  GLM_FUNC_DECL qua<T, Q> quat_cast(mat<3, 3, T, Q> const& x);
-
99 
-
105  template<typename T, qualifier Q>
-
106  GLM_FUNC_DECL qua<T, Q> quat_cast(mat<4, 4, T, Q> const& x);
-
107 
-
114  template<typename T, qualifier Q>
-
115  GLM_FUNC_DECL vec<4, bool, Q> lessThan(qua<T, Q> const& x, qua<T, Q> const& y);
-
116 
-
123  template<typename T, qualifier Q>
-
124  GLM_FUNC_DECL vec<4, bool, Q> lessThanEqual(qua<T, Q> const& x, qua<T, Q> const& y);
-
125 
-
132  template<typename T, qualifier Q>
-
133  GLM_FUNC_DECL vec<4, bool, Q> greaterThan(qua<T, Q> const& x, qua<T, Q> const& y);
-
134 
-
141  template<typename T, qualifier Q>
-
142  GLM_FUNC_DECL vec<4, bool, Q> greaterThanEqual(qua<T, Q> const& x, qua<T, Q> const& y);
-
143 
-
148  template<typename T, qualifier Q>
-
149  GLM_FUNC_DECL qua<T, Q> quatLookAt(
-
150  vec<3, T, Q> const& direction,
-
151  vec<3, T, Q> const& up);
-
152 
-
157  template<typename T, qualifier Q>
-
158  GLM_FUNC_DECL qua<T, Q> quatLookAtRH(
-
159  vec<3, T, Q> const& direction,
-
160  vec<3, T, Q> const& up);
-
161 
-
166  template<typename T, qualifier Q>
-
167  GLM_FUNC_DECL qua<T, Q> quatLookAtLH(
-
168  vec<3, T, Q> const& direction,
-
169  vec<3, T, Q> const& up);
-
171 } //namespace glm
-
172 
-
173 #include "quaternion.inl"
-
GLM_FUNC_DECL mat< 4, 4, T, Q > mat4_cast(qua< T, Q > const &x)
Converts a quaternion to a 4 * 4 matrix.
-
GLM_FUNC_DECL vec< 4, bool, Q > greaterThan(qua< T, Q > const &x, qua< T, Q > const &y)
Returns the component-wise comparison of result x > y.
-
GLM_FUNC_DECL vec< 4, bool, Q > greaterThanEqual(qua< T, Q > const &x, qua< T, Q > const &y)
Returns the component-wise comparison of result x >= y.
-
GLM_FUNC_DECL vec< 4, bool, Q > lessThanEqual(qua< T, Q > const &x, qua< T, Q > const &y)
Returns the component-wise comparison of result x <= y.
-
GLM_FUNC_DECL T roll(qua< T, Q > const &x)
Returns roll value of euler angles expressed in radians.
-
GLM_FUNC_DECL qua< T, Q > quatLookAt(vec< 3, T, Q > const &direction, vec< 3, T, Q > const &up)
Build a look at quaternion based on the default handedness.
-
GLM_FUNC_DECL qua< T, Q > quat_cast(mat< 4, 4, T, Q > const &x)
Converts a pure rotation 4 * 4 matrix to a quaternion.
-
GLM_FUNC_DECL mat< 3, 3, T, Q > mat3_cast(qua< T, Q > const &x)
Converts a quaternion to a 3 * 3 matrix.
-
GLM_FUNC_DECL vec< 3, T, Q > eulerAngles(qua< T, Q > const &x)
Returns euler angles, pitch as x, yaw as y, roll as z.
-
GLM_FUNC_DECL vec< 4, bool, Q > lessThan(qua< T, Q > const &x, qua< T, Q > const &y)
Returns the component-wise comparison result of x < y.
-
GLM_FUNC_DECL T yaw(qua< T, Q > const &x)
Returns yaw value of euler angles expressed in radians.
-
GLM_FUNC_DECL qua< T, Q > quatLookAtLH(vec< 3, T, Q > const &direction, vec< 3, T, Q > const &up)
Build a left-handed look at quaternion.
-
GLM_FUNC_DECL qua< T, Q > quatLookAtRH(vec< 3, T, Q > const &direction, vec< 3, T, Q > const &up)
Build a right-handed look at quaternion.
-
GLM_FUNC_DECL T pitch(qua< T, Q > const &x)
Returns pitch value of euler angles expressed in radians.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00126.html b/tests/OpenGL/package/glm/doc/api/a00126.html deleted file mode 100644 index 726daf77..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00126.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
gtx/quaternion.hpp File Reference
-
-
- -

GLM_GTX_quaternion -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > cross (qua< T, Q > const &q, vec< 3, T, Q > const &v)
 Compute a cross product between a quaternion and a vector. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > cross (vec< 3, T, Q > const &v, qua< T, Q > const &q)
 Compute a cross product between a vector and a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T extractRealComponent (qua< T, Q > const &q)
 Extract the real component of a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > fastMix (qua< T, Q > const &x, qua< T, Q > const &y, T const &a)
 Quaternion normalized linear interpolation. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > intermediate (qua< T, Q > const &prev, qua< T, Q > const &curr, qua< T, Q > const &next)
 Returns an intermediate control point for squad interpolation. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T length2 (qua< T, Q > const &q)
 Returns the squared length of x. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > quat_identity ()
 Create an identity quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rotate (qua< T, Q > const &q, vec< 3, T, Q > const &v)
 Returns quarternion square root. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > rotate (qua< T, Q > const &q, vec< 4, T, Q > const &v)
 Rotates a 4 components vector by a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > rotation (vec< 3, T, Q > const &orig, vec< 3, T, Q > const &dest)
 Compute the rotation between two vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > shortMix (qua< T, Q > const &x, qua< T, Q > const &y, T const &a)
 Quaternion interpolation using the rotation short path. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > squad (qua< T, Q > const &q1, qua< T, Q > const &q2, qua< T, Q > const &s1, qua< T, Q > const &s2, T const &h)
 Compute a point on a path according squad equation. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > toMat3 (qua< T, Q > const &x)
 Converts a quaternion to a 3 * 3 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > toMat4 (qua< T, Q > const &x)
 Converts a quaternion to a 4 * 4 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > toQuat (mat< 3, 3, T, Q > const &x)
 Converts a 3 * 3 matrix to a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > toQuat (mat< 4, 4, T, Q > const &x)
 Converts a 4 * 4 matrix to a quaternion. More...
 
-

Detailed Description

-

GLM_GTX_quaternion

-
See also
Core features (dependence)
-
-gtx_extented_min_max (dependence)
- -

Definition in file gtx/quaternion.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00126_source.html b/tests/OpenGL/package/glm/doc/api/a00126_source.html deleted file mode 100644 index 0206c496..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00126_source.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
gtx/quaternion.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../glm.hpp"
-
18 #include "../gtc/constants.hpp"
-
19 #include "../gtc/quaternion.hpp"
-
20 #include "../ext/quaternion_exponential.hpp"
-
21 #include "../gtx/norm.hpp"
-
22 
-
23 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
24 # ifndef GLM_ENABLE_EXPERIMENTAL
-
25 # pragma message("GLM: GLM_GTX_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
26 # else
-
27 # pragma message("GLM: GLM_GTX_quaternion extension included")
-
28 # endif
-
29 #endif
-
30 
-
31 namespace glm
-
32 {
-
35 
-
39  template<typename T, qualifier Q>
-
40  GLM_FUNC_DECL qua<T, Q> quat_identity();
-
41 
-
45  template<typename T, qualifier Q>
-
46  GLM_FUNC_DECL vec<3, T, Q> cross(
-
47  qua<T, Q> const& q,
-
48  vec<3, T, Q> const& v);
-
49 
-
53  template<typename T, qualifier Q>
-
54  GLM_FUNC_DECL vec<3, T, Q> cross(
-
55  vec<3, T, Q> const& v,
-
56  qua<T, Q> const& q);
-
57 
-
62  template<typename T, qualifier Q>
-
63  GLM_FUNC_DECL qua<T, Q> squad(
-
64  qua<T, Q> const& q1,
-
65  qua<T, Q> const& q2,
-
66  qua<T, Q> const& s1,
-
67  qua<T, Q> const& s2,
-
68  T const& h);
-
69 
-
73  template<typename T, qualifier Q>
-
74  GLM_FUNC_DECL qua<T, Q> intermediate(
-
75  qua<T, Q> const& prev,
-
76  qua<T, Q> const& curr,
-
77  qua<T, Q> const& next);
-
78 
-
82  //template<typename T, qualifier Q>
-
83  //qua<T, Q> sqrt(
-
84  // qua<T, Q> const& q);
-
85 
-
89  template<typename T, qualifier Q>
-
90  GLM_FUNC_DECL vec<3, T, Q> rotate(
-
91  qua<T, Q> const& q,
-
92  vec<3, T, Q> const& v);
-
93 
-
97  template<typename T, qualifier Q>
-
98  GLM_FUNC_DECL vec<4, T, Q> rotate(
-
99  qua<T, Q> const& q,
-
100  vec<4, T, Q> const& v);
-
101 
-
105  template<typename T, qualifier Q>
-
106  GLM_FUNC_DECL T extractRealComponent(
-
107  qua<T, Q> const& q);
-
108 
-
112  template<typename T, qualifier Q>
-
113  GLM_FUNC_DECL mat<3, 3, T, Q> toMat3(
-
114  qua<T, Q> const& x){return mat3_cast(x);}
-
115 
-
119  template<typename T, qualifier Q>
-
120  GLM_FUNC_DECL mat<4, 4, T, Q> toMat4(
-
121  qua<T, Q> const& x){return mat4_cast(x);}
-
122 
-
126  template<typename T, qualifier Q>
-
127  GLM_FUNC_DECL qua<T, Q> toQuat(
-
128  mat<3, 3, T, Q> const& x){return quat_cast(x);}
-
129 
-
133  template<typename T, qualifier Q>
-
134  GLM_FUNC_DECL qua<T, Q> toQuat(
-
135  mat<4, 4, T, Q> const& x){return quat_cast(x);}
-
136 
-
140  template<typename T, qualifier Q>
-
141  GLM_FUNC_DECL qua<T, Q> shortMix(
-
142  qua<T, Q> const& x,
-
143  qua<T, Q> const& y,
-
144  T const& a);
-
145 
-
149  template<typename T, qualifier Q>
-
150  GLM_FUNC_DECL qua<T, Q> fastMix(
-
151  qua<T, Q> const& x,
-
152  qua<T, Q> const& y,
-
153  T const& a);
-
154 
-
160  template<typename T, qualifier Q>
-
161  GLM_FUNC_DECL qua<T, Q> rotation(
-
162  vec<3, T, Q> const& orig,
-
163  vec<3, T, Q> const& dest);
-
164 
-
168  template<typename T, qualifier Q>
-
169  GLM_FUNC_DECL T length2(qua<T, Q> const& q);
-
170 
-
172 }//namespace glm
-
173 
-
174 #include "quaternion.inl"
-
GLM_FUNC_DECL mat< 4, 4, T, Q > mat4_cast(qua< T, Q > const &x)
Converts a quaternion to a 4 * 4 matrix.
-
GLM_FUNC_DECL qua< T, Q > shortMix(qua< T, Q > const &x, qua< T, Q > const &y, T const &a)
Quaternion interpolation using the rotation short path.
-
GLM_FUNC_DECL qua< T, Q > quat_identity()
Create an identity quaternion.
-
GLM_FUNC_DECL qua< T, Q > quat_cast(mat< 3, 3, T, Q > const &x)
Converts a pure rotation 3 * 3 matrix to a quaternion.
-
GLM_FUNC_DECL qua< T, Q > intermediate(qua< T, Q > const &prev, qua< T, Q > const &curr, qua< T, Q > const &next)
Returns an intermediate control point for squad interpolation.
-
GLM_FUNC_DECL mat< 3, 3, T, Q > mat3_cast(qua< T, Q > const &x)
Converts a quaternion to a 3 * 3 matrix.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > toMat4(qua< T, Q > const &x)
Converts a quaternion to a 4 * 4 matrix.
-
GLM_FUNC_DECL T extractRealComponent(qua< T, Q > const &q)
Extract the real component of a quaternion.
-
GLM_FUNC_DECL mat< 3, 3, T, Q > toMat3(qua< T, Q > const &x)
Converts a quaternion to a 3 * 3 matrix.
-
GLM_FUNC_DECL qua< T, Q > squad(qua< T, Q > const &q1, qua< T, Q > const &q2, qua< T, Q > const &s1, qua< T, Q > const &s2, T const &h)
Compute a point on a path according squad equation.
-
GLM_FUNC_DECL vec< 3, T, Q > cross(vec< 3, T, Q > const &v, qua< T, Q > const &q)
Compute a cross product between a vector and a quaternion.
-
GLM_FUNC_DECL qua< T, Q > toQuat(mat< 4, 4, T, Q > const &x)
Converts a 4 * 4 matrix to a quaternion.
-
GLM_FUNC_DECL qua< T, Q > rotation(vec< 3, T, Q > const &orig, vec< 3, T, Q > const &dest)
Compute the rotation between two vectors.
-
GLM_FUNC_DECL vec< 4, T, Q > rotate(qua< T, Q > const &q, vec< 4, T, Q > const &v)
Rotates a 4 components vector by a quaternion.
-
GLM_FUNC_DECL qua< T, Q > fastMix(qua< T, Q > const &x, qua< T, Q > const &y, T const &a)
Quaternion normalized linear interpolation.
-
GLM_FUNC_DECL T length2(qua< T, Q > const &q)
Returns the squared length of x.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00127.html b/tests/OpenGL/package/glm/doc/api/a00127.html deleted file mode 100644 index a9465549..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00127.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_common.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
quaternion_common.hpp File Reference
-
-
- -

GLM_EXT_quaternion_common -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > conjugate (qua< T, Q > const &q)
 Returns the q conjugate. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > inverse (qua< T, Q > const &q)
 Returns the q inverse. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > isinf (qua< T, Q > const &x)
 Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > isnan (qua< T, Q > const &x)
 Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > lerp (qua< T, Q > const &x, qua< T, Q > const &y, T a)
 Linear interpolation of two quaternions. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > mix (qua< T, Q > const &x, qua< T, Q > const &y, T a)
 Spherical linear interpolation of two quaternions. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > slerp (qua< T, Q > const &x, qua< T, Q > const &y, T a)
 Spherical linear interpolation of two quaternions. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00127_source.html b/tests/OpenGL/package/glm/doc/api/a00127_source.html deleted file mode 100644 index 098f39a5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00127_source.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_common.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
quaternion_common.hpp
-
-
-Go to the documentation of this file.
1 
-
21 #pragma once
-
22 
-
23 // Dependency:
-
24 #include "../ext/scalar_constants.hpp"
-
25 #include "../ext/quaternion_geometric.hpp"
-
26 #include "../common.hpp"
-
27 #include "../trigonometric.hpp"
-
28 #include "../exponential.hpp"
-
29 #include <limits>
-
30 
-
31 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
32 # pragma message("GLM: GLM_EXT_quaternion_common extension included")
-
33 #endif
-
34 
-
35 namespace glm
-
36 {
-
39 
-
52  template<typename T, qualifier Q>
-
53  GLM_FUNC_DECL qua<T, Q> mix(qua<T, Q> const& x, qua<T, Q> const& y, T a);
-
54 
-
64  template<typename T, qualifier Q>
-
65  GLM_FUNC_DECL qua<T, Q> lerp(qua<T, Q> const& x, qua<T, Q> const& y, T a);
-
66 
-
76  template<typename T, qualifier Q>
-
77  GLM_FUNC_DECL qua<T, Q> slerp(qua<T, Q> const& x, qua<T, Q> const& y, T a);
-
78 
-
83  template<typename T, qualifier Q>
-
84  GLM_FUNC_DECL qua<T, Q> conjugate(qua<T, Q> const& q);
-
85 
-
90  template<typename T, qualifier Q>
-
91  GLM_FUNC_DECL qua<T, Q> inverse(qua<T, Q> const& q);
-
92 
-
103  template<typename T, qualifier Q>
-
104  GLM_FUNC_DECL vec<4, bool, Q> isnan(qua<T, Q> const& x);
-
105 
-
114  template<typename T, qualifier Q>
-
115  GLM_FUNC_DECL vec<4, bool, Q> isinf(qua<T, Q> const& x);
-
116 
-
118 } //namespace glm
-
119 
-
120 #include "quaternion_common.inl"
-
GLM_FUNC_DECL vec< 4, bool, Q > isinf(qua< T, Q > const &x)
Returns true if x holds a positive infinity or negative infinity representation in the underlying imp...
-
GLM_FUNC_DECL vec< 4, bool, Q > isnan(qua< T, Q > const &x)
Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of...
-
GLM_FUNC_DECL qua< T, Q > conjugate(qua< T, Q > const &q)
Returns the q conjugate.
-
GLM_FUNC_DECL qua< T, Q > slerp(qua< T, Q > const &x, qua< T, Q > const &y, T a)
Spherical linear interpolation of two quaternions.
-
GLM_FUNC_DECL qua< T, Q > inverse(qua< T, Q > const &q)
Returns the q inverse.
-
GLM_FUNC_DECL qua< T, Q > lerp(qua< T, Q > const &x, qua< T, Q > const &y, T a)
Linear interpolation of two quaternions.
-
GLM_FUNC_DECL qua< T, Q > mix(qua< T, Q > const &x, qua< T, Q > const &y, T a)
Spherical linear interpolation of two quaternions.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00128.html b/tests/OpenGL/package/glm/doc/api/a00128.html deleted file mode 100644 index f4b74996..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00128.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_double.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
quaternion_double.hpp File Reference
-
-
- -

GLM_EXT_quaternion_double -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

-typedef qua< double, defaultp > dquat
 Quaternion of double-precision floating-point numbers.
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00128_source.html b/tests/OpenGL/package/glm/doc/api/a00128_source.html deleted file mode 100644 index 9780ecff..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00128_source.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_double.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
quaternion_double.hpp
-
-
-Go to the documentation of this file.
1 
-
20 #pragma once
-
21 
-
22 // Dependency:
-
23 #include "../detail/type_quat.hpp"
-
24 
-
25 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
26 # pragma message("GLM: GLM_EXT_quaternion_double extension included")
-
27 #endif
-
28 
-
29 namespace glm
-
30 {
-
33 
-
35  typedef qua<double, defaultp> dquat;
-
36 
-
38 } //namespace glm
-
39 
-
qua< double, defaultp > dquat
Quaternion of double-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00129.html b/tests/OpenGL/package/glm/doc/api/a00129.html deleted file mode 100644 index a03f0e6a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00129.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_double_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
quaternion_double_precision.hpp File Reference
-
-
- -

GLM_EXT_quaternion_double_precision -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef qua< double, highp > highp_dquat
 Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef qua< double, lowp > lowp_dquat
 Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef qua< double, mediump > mediump_dquat
 Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00129_source.html b/tests/OpenGL/package/glm/doc/api/a00129_source.html deleted file mode 100644 index bf9c5854..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00129_source.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_double_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
quaternion_double_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
11 #pragma once
-
12 
-
13 // Dependency:
-
14 #include "../detail/type_quat.hpp"
-
15 
-
16 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
17 # pragma message("GLM: GLM_EXT_quaternion_double_precision extension included")
-
18 #endif
-
19 
-
20 namespace glm
-
21 {
-
24 
-
28  typedef qua<double, lowp> lowp_dquat;
-
29 
-
33  typedef qua<double, mediump> mediump_dquat;
-
34 
-
38  typedef qua<double, highp> highp_dquat;
-
39 
-
41 } //namespace glm
-
42 
-
qua< double, mediump > mediump_dquat
Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term ...
-
qua< double, highp > highp_dquat
Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of...
-
qua< double, lowp > lowp_dquat
Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00130.html b/tests/OpenGL/package/glm/doc/api/a00130.html deleted file mode 100644 index b7d55770..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00130.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_exponential.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
quaternion_exponential.hpp File Reference
-
-
- -

GLM_EXT_quaternion_exponential -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > exp (qua< T, Q > const &q)
 Returns a exponential of a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > log (qua< T, Q > const &q)
 Returns a logarithm of a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > pow (qua< T, Q > const &q, T y)
 Returns a quaternion raised to a power. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > sqrt (qua< T, Q > const &q)
 Returns the square root of a quaternion. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00130_source.html b/tests/OpenGL/package/glm/doc/api/a00130_source.html deleted file mode 100644 index 41247102..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00130_source.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_exponential.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
quaternion_exponential.hpp
-
-
-Go to the documentation of this file.
1 
-
15 #pragma once
-
16 
-
17 // Dependency:
-
18 #include "../common.hpp"
-
19 #include "../trigonometric.hpp"
-
20 #include "../geometric.hpp"
-
21 #include "../ext/scalar_constants.hpp"
-
22 
-
23 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
24 # pragma message("GLM: GLM_EXT_quaternion_exponential extension included")
-
25 #endif
-
26 
-
27 namespace glm
-
28 {
-
31 
-
36  template<typename T, qualifier Q>
-
37  GLM_FUNC_DECL qua<T, Q> exp(qua<T, Q> const& q);
-
38 
-
43  template<typename T, qualifier Q>
-
44  GLM_FUNC_DECL qua<T, Q> log(qua<T, Q> const& q);
-
45 
-
50  template<typename T, qualifier Q>
-
51  GLM_FUNC_DECL qua<T, Q> pow(qua<T, Q> const& q, T y);
-
52 
-
57  template<typename T, qualifier Q>
-
58  GLM_FUNC_DECL qua<T, Q> sqrt(qua<T, Q> const& q);
-
59 
-
61 } //namespace glm
-
62 
-
63 #include "quaternion_exponential.inl"
-
GLM_FUNC_DECL qua< T, Q > log(qua< T, Q > const &q)
Returns a logarithm of a quaternion.
-
GLM_FUNC_DECL qua< T, Q > pow(qua< T, Q > const &q, T y)
Returns a quaternion raised to a power.
-
GLM_FUNC_DECL qua< T, Q > sqrt(qua< T, Q > const &q)
Returns the square root of a quaternion.
-
GLM_FUNC_DECL qua< T, Q > exp(qua< T, Q > const &q)
Returns a exponential of a quaternion.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00131.html b/tests/OpenGL/package/glm/doc/api/a00131.html deleted file mode 100644 index 7256131d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00131.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_float.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
quaternion_float.hpp File Reference
-
-
- -

GLM_EXT_quaternion_float -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

-typedef qua< float, defaultp > quat
 Quaternion of single-precision floating-point numbers.
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00131_source.html b/tests/OpenGL/package/glm/doc/api/a00131_source.html deleted file mode 100644 index 740f98cf..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00131_source.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_float.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
quaternion_float.hpp
-
-
-Go to the documentation of this file.
1 
-
20 #pragma once
-
21 
-
22 // Dependency:
-
23 #include "../detail/type_quat.hpp"
-
24 
-
25 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
26 # pragma message("GLM: GLM_EXT_quaternion_float extension included")
-
27 #endif
-
28 
-
29 namespace glm
-
30 {
-
33 
-
35  typedef qua<float, defaultp> quat;
-
36 
-
38 } //namespace glm
-
39 
-
qua< float, defaultp > quat
Quaternion of single-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00132.html b/tests/OpenGL/package/glm/doc/api/a00132.html deleted file mode 100644 index 8adc1ef5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00132.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_float_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
quaternion_float_precision.hpp File Reference
-
-
- -

GLM_EXT_quaternion_float_precision -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

-typedef qua< float, highp > highp_quat
 Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef qua< float, lowp > lowp_quat
 Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef qua< float, mediump > mediump_quat
 Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00132_source.html b/tests/OpenGL/package/glm/doc/api/a00132_source.html deleted file mode 100644 index 7a335700..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00132_source.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_float_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
quaternion_float_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
11 #pragma once
-
12 
-
13 // Dependency:
-
14 #include "../detail/type_quat.hpp"
-
15 
-
16 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
17 # pragma message("GLM: GLM_EXT_quaternion_float_precision extension included")
-
18 #endif
-
19 
-
20 namespace glm
-
21 {
-
24 
-
26  typedef qua<float, lowp> lowp_quat;
-
27 
-
29  typedef qua<float, mediump> mediump_quat;
-
30 
-
32  typedef qua<float, highp> highp_quat;
-
33 
-
35 } //namespace glm
-
36 
-
qua< float, highp > highp_quat
Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...
-
qua< float, mediump > mediump_quat
Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...
-
qua< float, lowp > lowp_quat
Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00133.html b/tests/OpenGL/package/glm/doc/api/a00133.html deleted file mode 100644 index 16cad057..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00133.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_geometric.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
quaternion_geometric.hpp File Reference
-
-
- -

GLM_EXT_quaternion_geometric -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER qua< T, Q > cross (qua< T, Q > const &q1, qua< T, Q > const &q2)
 Compute a cross product. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T dot (qua< T, Q > const &x, qua< T, Q > const &y)
 Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T length (qua< T, Q > const &q)
 Returns the norm of a quaternions. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > normalize (qua< T, Q > const &q)
 Returns the normalized quaternion. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00133_source.html b/tests/OpenGL/package/glm/doc/api/a00133_source.html deleted file mode 100644 index 6724a85e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00133_source.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_geometric.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
quaternion_geometric.hpp
-
-
-Go to the documentation of this file.
1 
-
15 #pragma once
-
16 
-
17 // Dependency:
-
18 #include "../geometric.hpp"
-
19 #include "../exponential.hpp"
-
20 #include "../ext/vector_relational.hpp"
-
21 
-
22 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
23 # pragma message("GLM: GLM_EXT_quaternion_geometric extension included")
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
37  template<typename T, qualifier Q>
-
38  GLM_FUNC_DECL T length(qua<T, Q> const& q);
-
39 
-
46  template<typename T, qualifier Q>
-
47  GLM_FUNC_DECL qua<T, Q> normalize(qua<T, Q> const& q);
-
48 
-
55  template<typename T, qualifier Q>
-
56  GLM_FUNC_DECL T dot(qua<T, Q> const& x, qua<T, Q> const& y);
-
57 
-
64  template<typename T, qualifier Q>
-
65  GLM_FUNC_QUALIFIER qua<T, Q> cross(qua<T, Q> const& q1, qua<T, Q> const& q2);
-
66 
-
68 } //namespace glm
-
69 
-
70 #include "quaternion_geometric.inl"
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
GLM_FUNC_DECL T dot(qua< T, Q > const &x, qua< T, Q > const &y)
Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...
-
GLM_FUNC_QUALIFIER qua< T, Q > cross(qua< T, Q > const &q1, qua< T, Q > const &q2)
Compute a cross product.
-
GLM_FUNC_DECL qua< T, Q > normalize(qua< T, Q > const &q)
Returns the normalized quaternion.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00134.html b/tests/OpenGL/package/glm/doc/api/a00134.html deleted file mode 100644 index 566ae01f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00134.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_relational.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
quaternion_relational.hpp File Reference
-
-
- -

GLM_EXT_quaternion_relational -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > equal (qua< T, Q > const &x, qua< T, Q > const &y)
 Returns the component-wise comparison of result x == y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > equal (qua< T, Q > const &x, qua< T, Q > const &y, T epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > notEqual (qua< T, Q > const &x, qua< T, Q > const &y)
 Returns the component-wise comparison of result x != y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > notEqual (qua< T, Q > const &x, qua< T, Q > const &y, T epsilon)
 Returns the component-wise comparison of |x - y| >= epsilon. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00134_source.html b/tests/OpenGL/package/glm/doc/api/a00134_source.html deleted file mode 100644 index 2b091c19..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00134_source.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_relational.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
quaternion_relational.hpp
-
-
-Go to the documentation of this file.
1 
-
17 #pragma once
-
18 
-
19 // Dependency:
-
20 #include "../vector_relational.hpp"
-
21 
-
22 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
23 # pragma message("GLM: GLM_EXT_quaternion_relational extension included")
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
35  template<typename T, qualifier Q>
-
36  GLM_FUNC_DECL vec<4, bool, Q> equal(qua<T, Q> const& x, qua<T, Q> const& y);
-
37 
-
42  template<typename T, qualifier Q>
-
43  GLM_FUNC_DECL vec<4, bool, Q> equal(qua<T, Q> const& x, qua<T, Q> const& y, T epsilon);
-
44 
-
49  template<typename T, qualifier Q>
-
50  GLM_FUNC_DECL vec<4, bool, Q> notEqual(qua<T, Q> const& x, qua<T, Q> const& y);
-
51 
-
56  template<typename T, qualifier Q>
-
57  GLM_FUNC_DECL vec<4, bool, Q> notEqual(qua<T, Q> const& x, qua<T, Q> const& y, T epsilon);
-
58 
-
60 } //namespace glm
-
61 
-
62 #include "quaternion_relational.inl"
-
GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()
Return the epsilon constant for floating point types.
-
GLM_FUNC_DECL vec< 4, bool, Q > notEqual(qua< T, Q > const &x, qua< T, Q > const &y, T epsilon)
Returns the component-wise comparison of |x - y| >= epsilon.
-
GLM_FUNC_DECL vec< 4, bool, Q > equal(qua< T, Q > const &x, qua< T, Q > const &y, T epsilon)
Returns the component-wise comparison of |x - y| < epsilon.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00135.html b/tests/OpenGL/package/glm/doc/api/a00135.html deleted file mode 100644 index 16c281fa..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00135.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_transform.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
quaternion_transform.hpp File Reference
-
-
- -

GLM_EXT_quaternion_transform -More...

- -

Go to the source code of this file.

- - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > rotate (qua< T, Q > const &q, T const &angle, vec< 3, T, Q > const &axis)
 Rotates a quaternion from a vector of 3 components axis and an angle. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00135_source.html b/tests/OpenGL/package/glm/doc/api/a00135_source.html deleted file mode 100644 index a23ecb78..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00135_source.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_transform.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
quaternion_transform.hpp
-
-
-Go to the documentation of this file.
1 
-
18 #pragma once
-
19 
-
20 // Dependency:
-
21 #include "../common.hpp"
-
22 #include "../trigonometric.hpp"
-
23 #include "../geometric.hpp"
-
24 
-
25 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
26 # pragma message("GLM: GLM_EXT_quaternion_transform extension included")
-
27 #endif
-
28 
-
29 namespace glm
-
30 {
-
33 
-
42  template<typename T, qualifier Q>
-
43  GLM_FUNC_DECL qua<T, Q> rotate(qua<T, Q> const& q, T const& angle, vec<3, T, Q> const& axis);
-
45 } //namespace glm
-
46 
-
47 #include "quaternion_transform.inl"
-
GLM_FUNC_DECL T angle(qua< T, Q > const &x)
Returns the quaternion rotation angle.
-
GLM_FUNC_DECL qua< T, Q > rotate(qua< T, Q > const &q, T const &angle, vec< 3, T, Q > const &axis)
Rotates a quaternion from a vector of 3 components axis and an angle.
-
GLM_FUNC_DECL vec< 3, T, Q > axis(qua< T, Q > const &x)
Returns the q rotation axis.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00136.html b/tests/OpenGL/package/glm/doc/api/a00136.html deleted file mode 100644 index ab0a414e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00136.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_trigonometric.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
quaternion_trigonometric.hpp File Reference
-
-
- -

GLM_EXT_quaternion_trigonometric -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL T angle (qua< T, Q > const &x)
 Returns the quaternion rotation angle. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > angleAxis (T const &angle, vec< 3, T, Q > const &axis)
 Build a quaternion from an angle and a normalized axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > axis (qua< T, Q > const &x)
 Returns the q rotation axis. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00136_source.html b/tests/OpenGL/package/glm/doc/api/a00136_source.html deleted file mode 100644 index 7ed33c08..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00136_source.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -0.9.9 API documentation: quaternion_trigonometric.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
quaternion_trigonometric.hpp
-
-
-Go to the documentation of this file.
1 
-
18 #pragma once
-
19 
-
20 // Dependency:
-
21 #include "../trigonometric.hpp"
-
22 #include "../exponential.hpp"
-
23 #include "scalar_constants.hpp"
-
24 #include "vector_relational.hpp"
-
25 #include <limits>
-
26 
-
27 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
28 # pragma message("GLM: GLM_EXT_quaternion_trigonometric extension included")
-
29 #endif
-
30 
-
31 namespace glm
-
32 {
-
35 
-
40  template<typename T, qualifier Q>
-
41  GLM_FUNC_DECL T angle(qua<T, Q> const& x);
-
42 
-
47  template<typename T, qualifier Q>
-
48  GLM_FUNC_DECL vec<3, T, Q> axis(qua<T, Q> const& x);
-
49 
-
57  template<typename T, qualifier Q>
-
58  GLM_FUNC_DECL qua<T, Q> angleAxis(T const& angle, vec<3, T, Q> const& axis);
-
59 
-
61 } //namespace glm
-
62 
-
63 #include "quaternion_trigonometric.inl"
-
GLM_EXT_vector_relational
-
GLM_FUNC_DECL T angle(qua< T, Q > const &x)
Returns the quaternion rotation angle.
-
GLM_FUNC_DECL qua< T, Q > angleAxis(T const &angle, vec< 3, T, Q > const &axis)
Build a quaternion from an angle and a normalized axis.
-
GLM_EXT_scalar_constants
-
GLM_FUNC_DECL vec< 3, T, Q > axis(qua< T, Q > const &x)
Returns the q rotation axis.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00137.html b/tests/OpenGL/package/glm/doc/api/a00137.html deleted file mode 100644 index af6cbb34..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00137.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - -0.9.9 API documentation: random.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
random.hpp File Reference
-
-
- -

GLM_GTC_random -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL vec< 3, T, defaultp > ballRand (T Radius)
 Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius. More...
 
template<typename T >
GLM_FUNC_DECL vec< 2, T, defaultp > circularRand (T Radius)
 Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius. More...
 
template<typename T >
GLM_FUNC_DECL vec< 2, T, defaultp > diskRand (T Radius)
 Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius. More...
 
template<typename genType >
GLM_FUNC_DECL genType gaussRand (genType Mean, genType Deviation)
 Generate random numbers in the interval [Min, Max], according a gaussian distribution. More...
 
template<typename genType >
GLM_FUNC_DECL genType linearRand (genType Min, genType Max)
 Generate random numbers in the interval [Min, Max], according a linear distribution. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > linearRand (vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)
 Generate random numbers in the interval [Min, Max], according a linear distribution. More...
 
template<typename T >
GLM_FUNC_DECL vec< 3, T, defaultp > sphericalRand (T Radius)
 Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius. More...
 
-

Detailed Description

-

GLM_GTC_random

-
See also
Core features (dependence)
-
-gtx_random (extended)
- -

Definition in file random.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00137_source.html b/tests/OpenGL/package/glm/doc/api/a00137_source.html deleted file mode 100644 index f1a63a24..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00137_source.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - -0.9.9 API documentation: random.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
random.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../ext/scalar_int_sized.hpp"
-
18 #include "../ext/scalar_uint_sized.hpp"
-
19 #include "../detail/qualifier.hpp"
-
20 
-
21 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
22 # pragma message("GLM: GLM_GTC_random extension included")
-
23 #endif
-
24 
-
25 namespace glm
-
26 {
-
29 
-
36  template<typename genType>
-
37  GLM_FUNC_DECL genType linearRand(genType Min, genType Max);
-
38 
-
46  template<length_t L, typename T, qualifier Q>
-
47  GLM_FUNC_DECL vec<L, T, Q> linearRand(vec<L, T, Q> const& Min, vec<L, T, Q> const& Max);
-
48 
-
52  template<typename genType>
-
53  GLM_FUNC_DECL genType gaussRand(genType Mean, genType Deviation);
-
54 
-
58  template<typename T>
-
59  GLM_FUNC_DECL vec<2, T, defaultp> circularRand(T Radius);
-
60 
-
64  template<typename T>
-
65  GLM_FUNC_DECL vec<3, T, defaultp> sphericalRand(T Radius);
-
66 
-
70  template<typename T>
-
71  GLM_FUNC_DECL vec<2, T, defaultp> diskRand(T Radius);
-
72 
-
76  template<typename T>
-
77  GLM_FUNC_DECL vec<3, T, defaultp> ballRand(T Radius);
-
78 
-
80 }//namespace glm
-
81 
-
82 #include "random.inl"
-
GLM_FUNC_DECL vec< 2, T, defaultp > circularRand(T Radius)
Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius...
-
GLM_FUNC_DECL vec< 2, T, defaultp > diskRand(T Radius)
Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a...
-
GLM_FUNC_DECL genType gaussRand(genType Mean, genType Deviation)
Generate random numbers in the interval [Min, Max], according a gaussian distribution.
-
GLM_FUNC_DECL vec< 3, T, defaultp > sphericalRand(T Radius)
Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius...
-
GLM_FUNC_DECL vec< 3, T, defaultp > ballRand(T Radius)
Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of...
-
GLM_FUNC_DECL vec< L, T, Q > linearRand(vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)
Generate random numbers in the interval [Min, Max], according a linear distribution.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00138.html b/tests/OpenGL/package/glm/doc/api/a00138.html deleted file mode 100644 index 41aae9a0..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00138.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -0.9.9 API documentation: range.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
range.hpp File Reference
-
-
- -

GLM_GTX_range -More...

- -

Go to the source code of this file.

-

Detailed Description

-

GLM_GTX_range

-
Author
Joshua Moerman
- -

Definition in file range.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00138_source.html b/tests/OpenGL/package/glm/doc/api/a00138_source.html deleted file mode 100644 index 84b35392..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00138_source.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - -0.9.9 API documentation: range.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
range.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependencies
-
16 #include "../detail/setup.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_range is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_range extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 #include "../gtc/type_ptr.hpp"
-
27 #include "../gtc/vec1.hpp"
-
28 
-
29 namespace glm
-
30 {
-
33 
-
34 # if GLM_COMPILER & GLM_COMPILER_VC
-
35 # pragma warning(push)
-
36 # pragma warning(disable : 4100) // unreferenced formal parameter
-
37 # endif
-
38 
-
39  template<typename T, qualifier Q>
-
40  inline length_t components(vec<1, T, Q> const& v)
-
41  {
-
42  return v.length();
-
43  }
-
44 
-
45  template<typename T, qualifier Q>
-
46  inline length_t components(vec<2, T, Q> const& v)
-
47  {
-
48  return v.length();
-
49  }
-
50 
-
51  template<typename T, qualifier Q>
-
52  inline length_t components(vec<3, T, Q> const& v)
-
53  {
-
54  return v.length();
-
55  }
-
56 
-
57  template<typename T, qualifier Q>
-
58  inline length_t components(vec<4, T, Q> const& v)
-
59  {
-
60  return v.length();
-
61  }
-
62 
-
63  template<typename genType>
-
64  inline length_t components(genType const& m)
-
65  {
-
66  return m.length() * m[0].length();
-
67  }
-
68 
-
69  template<typename genType>
-
70  inline typename genType::value_type const * begin(genType const& v)
-
71  {
-
72  return value_ptr(v);
-
73  }
-
74 
-
75  template<typename genType>
-
76  inline typename genType::value_type const * end(genType const& v)
-
77  {
-
78  return begin(v) + components(v);
-
79  }
-
80 
-
81  template<typename genType>
-
82  inline typename genType::value_type * begin(genType& v)
-
83  {
-
84  return value_ptr(v);
-
85  }
-
86 
-
87  template<typename genType>
-
88  inline typename genType::value_type * end(genType& v)
-
89  {
-
90  return begin(v) + components(v);
-
91  }
-
92 
-
93 # if GLM_COMPILER & GLM_COMPILER_VC
-
94 # pragma warning(pop)
-
95 # endif
-
96 
-
98 }//namespace glm
-
GLM_FUNC_DECL genType::value_type const * value_ptr(genType const &v)
Return the constant address to the data of the input parameter.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00139.html b/tests/OpenGL/package/glm/doc/api/a00139.html deleted file mode 100644 index 0efee438..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00139.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - -0.9.9 API documentation: raw_data.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
raw_data.hpp File Reference
-
-
- -

GLM_GTX_raw_data -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - -

-Typedefs

typedef detail::uint8 byte
 Type for byte numbers. More...
 
typedef detail::uint32 dword
 Type for dword numbers. More...
 
typedef detail::uint64 qword
 Type for qword numbers. More...
 
typedef detail::uint16 word
 Type for word numbers. More...
 
-

Detailed Description

-

GLM_GTX_raw_data

-
See also
Core features (dependence)
- -

Definition in file raw_data.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00139_source.html b/tests/OpenGL/package/glm/doc/api/a00139_source.html deleted file mode 100644 index be1d9f6e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00139_source.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - -0.9.9 API documentation: raw_data.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
raw_data.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependencies
-
16 #include "../ext/scalar_uint_sized.hpp"
-
17 #include "../detail/setup.hpp"
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # ifndef GLM_ENABLE_EXPERIMENTAL
-
21 # pragma message("GLM: GLM_GTX_raw_data is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
22 # else
-
23 # pragma message("GLM: GLM_GTX_raw_data extension included")
-
24 # endif
-
25 #endif
-
26 
-
27 namespace glm
-
28 {
-
31 
-
34  typedef detail::uint8 byte;
-
35 
-
38  typedef detail::uint16 word;
-
39 
-
42  typedef detail::uint32 dword;
-
43 
-
46  typedef detail::uint64 qword;
-
47 
-
49 }// namespace glm
-
50 
-
51 #include "raw_data.inl"
-
detail::uint32 dword
Type for dword numbers.
Definition: raw_data.hpp:42
-
detail::uint8 byte
Type for byte numbers.
Definition: raw_data.hpp:34
-
detail::uint64 qword
Type for qword numbers.
Definition: raw_data.hpp:46
-
detail::uint16 word
Type for word numbers.
Definition: raw_data.hpp:38
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00140.html b/tests/OpenGL/package/glm/doc/api/a00140.html deleted file mode 100644 index 15286609..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00140.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - -0.9.9 API documentation: reciprocal.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
reciprocal.hpp File Reference
-
-
- -

GLM_GTC_reciprocal -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType acot (genType x)
 Inverse cotangent function. More...
 
template<typename genType >
GLM_FUNC_DECL genType acoth (genType x)
 Inverse cotangent hyperbolic function. More...
 
template<typename genType >
GLM_FUNC_DECL genType acsc (genType x)
 Inverse cosecant function. More...
 
template<typename genType >
GLM_FUNC_DECL genType acsch (genType x)
 Inverse cosecant hyperbolic function. More...
 
template<typename genType >
GLM_FUNC_DECL genType asec (genType x)
 Inverse secant function. More...
 
template<typename genType >
GLM_FUNC_DECL genType asech (genType x)
 Inverse secant hyperbolic function. More...
 
template<typename genType >
GLM_FUNC_DECL genType cot (genType angle)
 Cotangent function. More...
 
template<typename genType >
GLM_FUNC_DECL genType coth (genType angle)
 Cotangent hyperbolic function. More...
 
template<typename genType >
GLM_FUNC_DECL genType csc (genType angle)
 Cosecant function. More...
 
template<typename genType >
GLM_FUNC_DECL genType csch (genType angle)
 Cosecant hyperbolic function. More...
 
template<typename genType >
GLM_FUNC_DECL genType sec (genType angle)
 Secant function. More...
 
template<typename genType >
GLM_FUNC_DECL genType sech (genType angle)
 Secant hyperbolic function. More...
 
-

Detailed Description

-

GLM_GTC_reciprocal

-
See also
Core features (dependence)
- -

Definition in file reciprocal.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00140_source.html b/tests/OpenGL/package/glm/doc/api/a00140_source.html deleted file mode 100644 index 9febcf5f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00140_source.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - -0.9.9 API documentation: reciprocal.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
reciprocal.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependencies
-
16 #include "../detail/setup.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # pragma message("GLM: GLM_GTC_reciprocal extension included")
-
20 #endif
-
21 
-
22 namespace glm
-
23 {
-
26 
-
33  template<typename genType>
-
34  GLM_FUNC_DECL genType sec(genType angle);
-
35 
-
42  template<typename genType>
-
43  GLM_FUNC_DECL genType csc(genType angle);
-
44 
-
51  template<typename genType>
-
52  GLM_FUNC_DECL genType cot(genType angle);
-
53 
-
60  template<typename genType>
-
61  GLM_FUNC_DECL genType asec(genType x);
-
62 
-
69  template<typename genType>
-
70  GLM_FUNC_DECL genType acsc(genType x);
-
71 
-
78  template<typename genType>
-
79  GLM_FUNC_DECL genType acot(genType x);
-
80 
-
86  template<typename genType>
-
87  GLM_FUNC_DECL genType sech(genType angle);
-
88 
-
94  template<typename genType>
-
95  GLM_FUNC_DECL genType csch(genType angle);
-
96 
-
102  template<typename genType>
-
103  GLM_FUNC_DECL genType coth(genType angle);
-
104 
-
111  template<typename genType>
-
112  GLM_FUNC_DECL genType asech(genType x);
-
113 
-
120  template<typename genType>
-
121  GLM_FUNC_DECL genType acsch(genType x);
-
122 
-
129  template<typename genType>
-
130  GLM_FUNC_DECL genType acoth(genType x);
-
131 
-
133 }//namespace glm
-
134 
-
135 #include "reciprocal.inl"
-
GLM_FUNC_DECL genType sec(genType angle)
Secant function.
-
GLM_FUNC_DECL genType csc(genType angle)
Cosecant function.
-
GLM_FUNC_DECL genType coth(genType angle)
Cotangent hyperbolic function.
-
GLM_FUNC_DECL genType asec(genType x)
Inverse secant function.
-
GLM_FUNC_DECL T angle(qua< T, Q > const &x)
Returns the quaternion rotation angle.
-
GLM_FUNC_DECL genType cot(genType angle)
Cotangent function.
-
GLM_FUNC_DECL genType acsc(genType x)
Inverse cosecant function.
-
GLM_FUNC_DECL genType sech(genType angle)
Secant hyperbolic function.
-
GLM_FUNC_DECL genType csch(genType angle)
Cosecant hyperbolic function.
-
GLM_FUNC_DECL genType acoth(genType x)
Inverse cotangent hyperbolic function.
-
GLM_FUNC_DECL genType acot(genType x)
Inverse cotangent function.
-
GLM_FUNC_DECL genType asech(genType x)
Inverse secant hyperbolic function.
-
GLM_FUNC_DECL genType acsch(genType x)
Inverse cosecant hyperbolic function.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00141.html b/tests/OpenGL/package/glm/doc/api/a00141.html deleted file mode 100644 index 98804fa2..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00141.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - -0.9.9 API documentation: rotate_normalized_axis.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
rotate_normalized_axis.hpp File Reference
-
-
- -

GLM_GTX_rotate_normalized_axis -More...

- -

Go to the source code of this file.

- - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > rotateNormalizedAxis (mat< 4, 4, T, Q > const &m, T const &angle, vec< 3, T, Q > const &axis)
 Builds a rotation 4 * 4 matrix created from a normalized axis and an angle. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > rotateNormalizedAxis (qua< T, Q > const &q, T const &angle, vec< 3, T, Q > const &axis)
 Rotates a quaternion from a vector of 3 components normalized axis and an angle. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00141_source.html b/tests/OpenGL/package/glm/doc/api/a00141_source.html deleted file mode 100644 index 874e182d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00141_source.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - -0.9.9 API documentation: rotate_normalized_axis.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
rotate_normalized_axis.hpp
-
-
-Go to the documentation of this file.
1 
-
15 #pragma once
-
16 
-
17 // Dependency:
-
18 #include "../glm.hpp"
-
19 #include "../gtc/epsilon.hpp"
-
20 #include "../gtc/quaternion.hpp"
-
21 
-
22 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
23 # ifndef GLM_ENABLE_EXPERIMENTAL
-
24 # pragma message("GLM: GLM_GTX_rotate_normalized_axis is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
25 # else
-
26 # pragma message("GLM: GLM_GTX_rotate_normalized_axis extension included")
-
27 # endif
-
28 #endif
-
29 
-
30 namespace glm
-
31 {
-
34 
-
46  template<typename T, qualifier Q>
-
47  GLM_FUNC_DECL mat<4, 4, T, Q> rotateNormalizedAxis(
-
48  mat<4, 4, T, Q> const& m,
-
49  T const& angle,
-
50  vec<3, T, Q> const& axis);
-
51 
-
59  template<typename T, qualifier Q>
-
60  GLM_FUNC_DECL qua<T, Q> rotateNormalizedAxis(
-
61  qua<T, Q> const& q,
-
62  T const& angle,
-
63  vec<3, T, Q> const& axis);
-
64 
-
66 }//namespace glm
-
67 
-
68 #include "rotate_normalized_axis.inl"
-
GLM_FUNC_DECL T angle(qua< T, Q > const &x)
Returns the quaternion rotation angle.
-
GLM_FUNC_DECL qua< T, Q > rotateNormalizedAxis(qua< T, Q > const &q, T const &angle, vec< 3, T, Q > const &axis)
Rotates a quaternion from a vector of 3 components normalized axis and an angle.
-
GLM_FUNC_DECL vec< 3, T, Q > axis(qua< T, Q > const &x)
Returns the q rotation axis.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00142.html b/tests/OpenGL/package/glm/doc/api/a00142.html deleted file mode 100644 index 31a60381..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00142.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - -0.9.9 API documentation: rotate_vector.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
rotate_vector.hpp File Reference
-
-
- -

GLM_GTX_rotate_vector -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > orientation (vec< 3, T, Q > const &Normal, vec< 3, T, Q > const &Up)
 Build a rotation matrix from a normal and a up vector. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 2, T, Q > rotate (vec< 2, T, Q > const &v, T const &angle)
 Rotate a two dimensional vector. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rotate (vec< 3, T, Q > const &v, T const &angle, vec< 3, T, Q > const &normal)
 Rotate a three dimensional vector around an axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > rotate (vec< 4, T, Q > const &v, T const &angle, vec< 3, T, Q > const &normal)
 Rotate a four dimensional vector around an axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rotateX (vec< 3, T, Q > const &v, T const &angle)
 Rotate a three dimensional vector around the X axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > rotateX (vec< 4, T, Q > const &v, T const &angle)
 Rotate a four dimensional vector around the X axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rotateY (vec< 3, T, Q > const &v, T const &angle)
 Rotate a three dimensional vector around the Y axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > rotateY (vec< 4, T, Q > const &v, T const &angle)
 Rotate a four dimensional vector around the Y axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rotateZ (vec< 3, T, Q > const &v, T const &angle)
 Rotate a three dimensional vector around the Z axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > rotateZ (vec< 4, T, Q > const &v, T const &angle)
 Rotate a four dimensional vector around the Z axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > slerp (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y, T const &a)
 Returns Spherical interpolation between two vectors. More...
 
-

Detailed Description

-

GLM_GTX_rotate_vector

-
See also
Core features (dependence)
-
-GLM_GTX_transform (dependence)
- -

Definition in file rotate_vector.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00142_source.html b/tests/OpenGL/package/glm/doc/api/a00142_source.html deleted file mode 100644 index dfa75fff..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00142_source.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - -0.9.9 API documentation: rotate_vector.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
rotate_vector.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../gtx/transform.hpp"
-
18 #include "../gtc/epsilon.hpp"
-
19 #include "../ext/vector_relational.hpp"
-
20 #include "../glm.hpp"
-
21 
-
22 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
23 # ifndef GLM_ENABLE_EXPERIMENTAL
-
24 # pragma message("GLM: GLM_GTX_rotate_vector is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
25 # else
-
26 # pragma message("GLM: GLM_GTX_rotate_vector extension included")
-
27 # endif
-
28 #endif
-
29 
-
30 namespace glm
-
31 {
-
34 
-
42  template<typename T, qualifier Q>
-
43  GLM_FUNC_DECL vec<3, T, Q> slerp(
-
44  vec<3, T, Q> const& x,
-
45  vec<3, T, Q> const& y,
-
46  T const& a);
-
47 
-
50  template<typename T, qualifier Q>
-
51  GLM_FUNC_DECL vec<2, T, Q> rotate(
-
52  vec<2, T, Q> const& v,
-
53  T const& angle);
-
54 
-
57  template<typename T, qualifier Q>
-
58  GLM_FUNC_DECL vec<3, T, Q> rotate(
-
59  vec<3, T, Q> const& v,
-
60  T const& angle,
-
61  vec<3, T, Q> const& normal);
-
62 
-
65  template<typename T, qualifier Q>
-
66  GLM_FUNC_DECL vec<4, T, Q> rotate(
-
67  vec<4, T, Q> const& v,
-
68  T const& angle,
-
69  vec<3, T, Q> const& normal);
-
70 
-
73  template<typename T, qualifier Q>
-
74  GLM_FUNC_DECL vec<3, T, Q> rotateX(
-
75  vec<3, T, Q> const& v,
-
76  T const& angle);
-
77 
-
80  template<typename T, qualifier Q>
-
81  GLM_FUNC_DECL vec<3, T, Q> rotateY(
-
82  vec<3, T, Q> const& v,
-
83  T const& angle);
-
84 
-
87  template<typename T, qualifier Q>
-
88  GLM_FUNC_DECL vec<3, T, Q> rotateZ(
-
89  vec<3, T, Q> const& v,
-
90  T const& angle);
-
91 
-
94  template<typename T, qualifier Q>
-
95  GLM_FUNC_DECL vec<4, T, Q> rotateX(
-
96  vec<4, T, Q> const& v,
-
97  T const& angle);
-
98 
-
101  template<typename T, qualifier Q>
-
102  GLM_FUNC_DECL vec<4, T, Q> rotateY(
-
103  vec<4, T, Q> const& v,
-
104  T const& angle);
-
105 
-
108  template<typename T, qualifier Q>
-
109  GLM_FUNC_DECL vec<4, T, Q> rotateZ(
-
110  vec<4, T, Q> const& v,
-
111  T const& angle);
-
112 
-
115  template<typename T, qualifier Q>
-
116  GLM_FUNC_DECL mat<4, 4, T, Q> orientation(
-
117  vec<3, T, Q> const& Normal,
-
118  vec<3, T, Q> const& Up);
-
119 
-
121 }//namespace glm
-
122 
-
123 #include "rotate_vector.inl"
-
GLM_FUNC_DECL T angle(qua< T, Q > const &x)
Returns the quaternion rotation angle.
-
GLM_FUNC_DECL vec< 4, T, Q > rotateZ(vec< 4, T, Q > const &v, T const &angle)
Rotate a four dimensional vector around the Z axis.
-
GLM_FUNC_DECL vec< 4, T, Q > rotateY(vec< 4, T, Q > const &v, T const &angle)
Rotate a four dimensional vector around the Y axis.
-
GLM_FUNC_DECL vec< 4, T, Q > rotateX(vec< 4, T, Q > const &v, T const &angle)
Rotate a four dimensional vector around the X axis.
-
GLM_FUNC_DECL vec< 3, T, Q > slerp(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y, T const &a)
Returns Spherical interpolation between two vectors.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > orientation(vec< 3, T, Q > const &Normal, vec< 3, T, Q > const &Up)
Build a rotation matrix from a normal and a up vector.
-
GLM_FUNC_DECL vec< 4, T, Q > rotate(vec< 4, T, Q > const &v, T const &angle, vec< 3, T, Q > const &normal)
Rotate a four dimensional vector around an axis.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00143.html b/tests/OpenGL/package/glm/doc/api/a00143.html deleted file mode 100644 index 4853ae53..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00143.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - -0.9.9 API documentation: round.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
round.hpp File Reference
-
-
- -

GLM_GTC_round -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType ceilMultiple (genType v, genType Multiple)
 Higher multiple number of Source. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > ceilMultiple (vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
 Higher multiple number of Source. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType ceilPowerOfTwo (genIUType v)
 Return the power of two number which value is just higher the input value, round up to a power of two. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > ceilPowerOfTwo (vec< L, T, Q > const &v)
 Return the power of two number which value is just higher the input value, round up to a power of two. More...
 
template<typename genType >
GLM_FUNC_DECL genType floorMultiple (genType v, genType Multiple)
 Lower multiple number of Source. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > floorMultiple (vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
 Lower multiple number of Source. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType floorPowerOfTwo (genIUType v)
 Return the power of two number which value is just lower the input value, round down to a power of two. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > floorPowerOfTwo (vec< L, T, Q > const &v)
 Return the power of two number which value is just lower the input value, round down to a power of two. More...
 
template<typename genType >
GLM_FUNC_DECL genType roundMultiple (genType v, genType Multiple)
 Lower multiple number of Source. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > roundMultiple (vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
 Lower multiple number of Source. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType roundPowerOfTwo (genIUType v)
 Return the power of two number which value is the closet to the input value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > roundPowerOfTwo (vec< L, T, Q > const &v)
 Return the power of two number which value is the closet to the input value. More...
 
-

Detailed Description

-

GLM_GTC_round

-
See also
Core features (dependence)
-
-GLM_GTC_round (dependence)
- -

Definition in file round.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00143_source.html b/tests/OpenGL/package/glm/doc/api/a00143_source.html deleted file mode 100644 index f900669b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00143_source.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - -0.9.9 API documentation: round.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
round.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependencies
-
17 #include "../detail/setup.hpp"
-
18 #include "../detail/qualifier.hpp"
-
19 #include "../detail/_vectorize.hpp"
-
20 #include "../vector_relational.hpp"
-
21 #include "../common.hpp"
-
22 #include <limits>
-
23 
-
24 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
25 # pragma message("GLM: GLM_GTC_round extension included")
-
26 #endif
-
27 
-
28 namespace glm
-
29 {
-
32 
-
37  template<typename genIUType>
-
38  GLM_FUNC_DECL genIUType ceilPowerOfTwo(genIUType v);
-
39 
-
48  template<length_t L, typename T, qualifier Q>
-
49  GLM_FUNC_DECL vec<L, T, Q> ceilPowerOfTwo(vec<L, T, Q> const& v);
-
50 
-
55  template<typename genIUType>
-
56  GLM_FUNC_DECL genIUType floorPowerOfTwo(genIUType v);
-
57 
-
66  template<length_t L, typename T, qualifier Q>
-
67  GLM_FUNC_DECL vec<L, T, Q> floorPowerOfTwo(vec<L, T, Q> const& v);
-
68 
-
72  template<typename genIUType>
-
73  GLM_FUNC_DECL genIUType roundPowerOfTwo(genIUType v);
-
74 
-
82  template<length_t L, typename T, qualifier Q>
-
83  GLM_FUNC_DECL vec<L, T, Q> roundPowerOfTwo(vec<L, T, Q> const& v);
-
84 
-
93  template<typename genType>
-
94  GLM_FUNC_DECL genType ceilMultiple(genType v, genType Multiple);
-
95 
-
106  template<length_t L, typename T, qualifier Q>
-
107  GLM_FUNC_DECL vec<L, T, Q> ceilMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);
-
108 
-
117  template<typename genType>
-
118  GLM_FUNC_DECL genType floorMultiple(genType v, genType Multiple);
-
119 
-
130  template<length_t L, typename T, qualifier Q>
-
131  GLM_FUNC_DECL vec<L, T, Q> floorMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);
-
132 
-
141  template<typename genType>
-
142  GLM_FUNC_DECL genType roundMultiple(genType v, genType Multiple);
-
143 
-
154  template<length_t L, typename T, qualifier Q>
-
155  GLM_FUNC_DECL vec<L, T, Q> roundMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);
-
156 
-
158 } //namespace glm
-
159 
-
160 #include "round.inl"
-
GLM_FUNC_DECL vec< L, T, Q > roundPowerOfTwo(vec< L, T, Q > const &v)
Return the power of two number which value is the closet to the input value.
-
GLM_FUNC_DECL vec< L, T, Q > ceilMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
Higher multiple number of Source.
-
GLM_FUNC_DECL vec< L, T, Q > floorPowerOfTwo(vec< L, T, Q > const &v)
Return the power of two number which value is just lower the input value, round down to a power of tw...
-
GLM_FUNC_DECL vec< L, T, Q > roundMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
Lower multiple number of Source.
-
GLM_FUNC_DECL vec< L, T, Q > ceilPowerOfTwo(vec< L, T, Q > const &v)
Return the power of two number which value is just higher the input value, round up to a power of two...
-
GLM_FUNC_DECL vec< L, T, Q > floorMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
Lower multiple number of Source.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00144.html b/tests/OpenGL/package/glm/doc/api/a00144.html deleted file mode 100644 index a0f522be..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00144.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_common.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
scalar_common.hpp File Reference
-
-
- -

GLM_EXT_scalar_common -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL T fmax (T a, T b)
 Returns the maximum component-wise values of 2 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T fmax (T a, T b, T C)
 Returns the maximum component-wise values of 3 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T fmax (T a, T b, T C, T D)
 Returns the maximum component-wise values of 4 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T fmin (T a, T b)
 Returns the minimum component-wise values of 2 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T fmin (T a, T b, T c)
 Returns the minimum component-wise values of 3 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T fmin (T a, T b, T c, T d)
 Returns the minimum component-wise values of 4 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T max (T a, T b, T c)
 Returns the maximum component-wise values of 3 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T max (T a, T b, T c, T d)
 Returns the maximum component-wise values of 4 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T min (T a, T b, T c)
 Returns the minimum component-wise values of 3 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T min (T a, T b, T c, T d)
 Returns the minimum component-wise values of 4 inputs. More...
 
-

Detailed Description

-

GLM_EXT_scalar_common

- -

Definition in file scalar_common.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00144_source.html b/tests/OpenGL/package/glm/doc/api/a00144_source.html deleted file mode 100644 index 13df516a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00144_source.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_common.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
scalar_common.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../common.hpp"
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # pragma message("GLM: GLM_EXT_scalar_common extension included")
-
21 #endif
-
22 
-
23 namespace glm
-
24 {
-
27 
-
31  template<typename T>
-
32  GLM_FUNC_DECL T min(T a, T b, T c);
-
33 
-
37  template<typename T>
-
38  GLM_FUNC_DECL T min(T a, T b, T c, T d);
-
39 
-
43  template<typename T>
-
44  GLM_FUNC_DECL T max(T a, T b, T c);
-
45 
-
49  template<typename T>
-
50  GLM_FUNC_DECL T max(T a, T b, T c, T d);
-
51 
-
57  template<typename T>
-
58  GLM_FUNC_DECL T fmin(T a, T b);
-
59 
-
65  template<typename T>
-
66  GLM_FUNC_DECL T fmin(T a, T b, T c);
-
67 
-
73  template<typename T>
-
74  GLM_FUNC_DECL T fmin(T a, T b, T c, T d);
-
75 
-
81  template<typename T>
-
82  GLM_FUNC_DECL T fmax(T a, T b);
-
83 
-
89  template<typename T>
-
90  GLM_FUNC_DECL T fmax(T a, T b, T C);
-
91 
-
97  template<typename T>
-
98  GLM_FUNC_DECL T fmax(T a, T b, T C, T D);
-
99 
-
101 }//namespace glm
-
102 
-
103 #include "scalar_common.inl"
-
GLM_FUNC_DECL T min(T a, T b, T c, T d)
Returns the minimum component-wise values of 4 inputs.
-
GLM_FUNC_DECL T max(T a, T b, T c, T d)
Returns the maximum component-wise values of 4 inputs.
-
GLM_FUNC_DECL T fmax(T a, T b, T C, T D)
Returns the maximum component-wise values of 4 inputs.
-
GLM_FUNC_DECL T fmin(T a, T b, T c, T d)
Returns the minimum component-wise values of 4 inputs.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00145.html b/tests/OpenGL/package/glm/doc/api/a00145.html deleted file mode 100644 index 4ce4ff3c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00145.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_constants.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
scalar_constants.hpp File Reference
-
-
- -

GLM_EXT_scalar_constants -More...

- -

Go to the source code of this file.

- - - - - - - - - - -

-Functions

-template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon ()
 Return the epsilon constant for floating point types.
 
-template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType pi ()
 Return the pi constant for floating point types.
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00145_source.html b/tests/OpenGL/package/glm/doc/api/a00145_source.html deleted file mode 100644 index 084396a8..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00145_source.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_constants.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
scalar_constants.hpp
-
-
-Go to the documentation of this file.
1 
-
11 #pragma once
-
12 
-
13 // Dependencies
-
14 #include "../detail/setup.hpp"
-
15 
-
16 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
17 # pragma message("GLM: GLM_EXT_scalar_constants extension included")
-
18 #endif
-
19 
-
20 namespace glm
-
21 {
-
24 
-
26  template<typename genType>
-
27  GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon();
-
28 
-
30  template<typename genType>
-
31  GLM_FUNC_DECL GLM_CONSTEXPR genType pi();
-
32 
-
34 } //namespace glm
-
35 
-
36 #include "scalar_constants.inl"
-
GLM_FUNC_DECL GLM_CONSTEXPR genType pi()
Return the pi constant for floating point types.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()
Return the epsilon constant for floating point types.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00146.html b/tests/OpenGL/package/glm/doc/api/a00146.html deleted file mode 100644 index 4f227064..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00146.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_int_sized.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
scalar_int_sized.hpp File Reference
-
-
- -

GLM_EXT_scalar_int_sized -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - -

-Typedefs

-typedef detail::int16 int16
 16 bit signed integer type.
 
-typedef detail::int32 int32
 32 bit signed integer type.
 
-typedef detail::int64 int64
 64 bit signed integer type.
 
-typedef detail::int8 int8
 8 bit signed integer type.
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00146_source.html b/tests/OpenGL/package/glm/doc/api/a00146_source.html deleted file mode 100644 index d1f35346..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00146_source.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_int_sized.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
scalar_int_sized.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 #include "../detail/setup.hpp"
-
16 
-
17 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
18 # pragma message("GLM: GLM_EXT_scalar_int_sized extension included")
-
19 #endif
-
20 
-
21 namespace glm{
-
22 namespace detail
-
23 {
-
24 # if GLM_HAS_EXTENDED_INTEGER_TYPE
-
25  typedef std::int8_t int8;
-
26  typedef std::int16_t int16;
-
27  typedef std::int32_t int32;
-
28 # else
-
29  typedef signed char int8;
-
30  typedef signed short int16;
-
31  typedef signed int int32;
-
32 #endif//
-
33 
-
34  template<>
-
35  struct is_int<int8>
-
36  {
-
37  enum test {value = ~0};
-
38  };
-
39 
-
40  template<>
-
41  struct is_int<int16>
-
42  {
-
43  enum test {value = ~0};
-
44  };
-
45 
-
46  template<>
-
47  struct is_int<int64>
-
48  {
-
49  enum test {value = ~0};
-
50  };
-
51 }//namespace detail
-
52 
-
53 
-
56 
-
58  typedef detail::int8 int8;
-
59 
-
61  typedef detail::int16 int16;
-
62 
-
64  typedef detail::int32 int32;
-
65 
-
67  typedef detail::int64 int64;
-
68 
-
70 }//namespace glm
-
int8 int8_t
8 bit signed integer type.
Definition: fwd.hpp:43
-
detail::int8 int8
8 bit signed integer type.
-
int16 int16_t
16 bit signed integer type.
Definition: fwd.hpp:57
-
int32 int32_t
32 bit signed integer type.
Definition: fwd.hpp:71
-
detail::int64 int64
64 bit signed integer type.
-
detail::int32 int32
32 bit signed integer type.
-
detail::int16 int16
16 bit signed integer type.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00147.html b/tests/OpenGL/package/glm/doc/api/a00147.html deleted file mode 100644 index 856a382d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00147.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_integer.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
scalar_integer.hpp File Reference
-
-
- -

GLM_EXT_scalar_integer -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genIUType >
GLM_FUNC_DECL int findNSB (genIUType x, int significantBitCount)
 Returns the bit number of the Nth significant bit set to 1 in the binary representation of value. More...
 
template<typename genIUType >
GLM_FUNC_DECL bool isMultiple (genIUType v, genIUType Multiple)
 Return true if the 'Value' is a multiple of 'Multiple'. More...
 
template<typename genIUType >
GLM_FUNC_DECL bool isPowerOfTwo (genIUType v)
 Return true if the value is a power of two number. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType nextMultiple (genIUType v, genIUType Multiple)
 Higher multiple number of Source. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType nextPowerOfTwo (genIUType v)
 Return the power of two number which value is just higher the input value, round up to a power of two. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType prevMultiple (genIUType v, genIUType Multiple)
 Lower multiple number of Source. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType prevPowerOfTwo (genIUType v)
 Return the power of two number which value is just lower the input value, round down to a power of two. More...
 
-

Detailed Description

-

GLM_EXT_scalar_integer

-
See also
Core features (dependence)
- -

Definition in file scalar_integer.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00147_source.html b/tests/OpenGL/package/glm/doc/api/a00147_source.html deleted file mode 100644 index 977c7b05..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00147_source.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_integer.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
scalar_integer.hpp
-
-
-Go to the documentation of this file.
1 
-
11 #pragma once
-
12 
-
13 // Dependencies
-
14 #include "../detail/setup.hpp"
-
15 #include "../detail/qualifier.hpp"
-
16 #include "../detail/_vectorize.hpp"
-
17 #include "../detail/type_float.hpp"
-
18 #include "../vector_relational.hpp"
-
19 #include "../common.hpp"
-
20 #include <limits>
-
21 
-
22 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
23 # pragma message("GLM: GLM_EXT_scalar_integer extension included")
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
34  template<typename genIUType>
-
35  GLM_FUNC_DECL bool isPowerOfTwo(genIUType v);
-
36 
-
41  template<typename genIUType>
-
42  GLM_FUNC_DECL genIUType nextPowerOfTwo(genIUType v);
-
43 
-
48  template<typename genIUType>
-
49  GLM_FUNC_DECL genIUType prevPowerOfTwo(genIUType v);
-
50 
-
54  template<typename genIUType>
-
55  GLM_FUNC_DECL bool isMultiple(genIUType v, genIUType Multiple);
-
56 
-
65  template<typename genIUType>
-
66  GLM_FUNC_DECL genIUType nextMultiple(genIUType v, genIUType Multiple);
-
67 
-
76  template<typename genIUType>
-
77  GLM_FUNC_DECL genIUType prevMultiple(genIUType v, genIUType Multiple);
-
78 
-
86  template<typename genIUType>
-
87  GLM_FUNC_DECL int findNSB(genIUType x, int significantBitCount);
-
88 
-
90 } //namespace glm
-
91 
-
92 #include "scalar_integer.inl"
-
GLM_FUNC_DECL genIUType prevPowerOfTwo(genIUType v)
Return the power of two number which value is just lower the input value, round down to a power of tw...
-
GLM_FUNC_DECL genIUType prevMultiple(genIUType v, genIUType Multiple)
Lower multiple number of Source.
-
GLM_FUNC_DECL bool isMultiple(genIUType v, genIUType Multiple)
Return true if the 'Value' is a multiple of 'Multiple'.
-
GLM_FUNC_DECL int findNSB(genIUType x, int significantBitCount)
Returns the bit number of the Nth significant bit set to 1 in the binary representation of value...
-
GLM_FUNC_DECL genIUType nextMultiple(genIUType v, genIUType Multiple)
Higher multiple number of Source.
-
GLM_FUNC_DECL bool isPowerOfTwo(genIUType v)
Return true if the value is a power of two number.
-
GLM_FUNC_DECL genIUType nextPowerOfTwo(genIUType v)
Return the power of two number which value is just higher the input value, round up to a power of two...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00148.html b/tests/OpenGL/package/glm/doc/api/a00148.html deleted file mode 100644 index ec50cf35..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00148.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_multiplication.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
scalar_multiplication.hpp File Reference
-
-
- -

Experimental extensions -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Experimental extensions

-
Author
Joshua Moerman
-

Include <glm/gtx/scalar_multiplication.hpp> to use the features of this extension.

-

Enables scalar multiplication for all types

-

Since GLSL is very strict about types, the following (often used) combinations do not work: double * vec4 int * vec4 vec4 / int So we'll fix that! Of course "float * vec4" should remain the same (hence the enable_if magic)

- -

Definition in file scalar_multiplication.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00148_source.html b/tests/OpenGL/package/glm/doc/api/a00148_source.html deleted file mode 100644 index a4a9c590..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00148_source.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_multiplication.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
scalar_multiplication.hpp
-
-
-Go to the documentation of this file.
1 
-
15 #pragma once
-
16 
-
17 #include "../detail/setup.hpp"
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # ifndef GLM_ENABLE_EXPERIMENTAL
-
21 # pragma message("GLM: GLM_GTX_scalar_multiplication is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
22 # else
-
23 # pragma message("GLM: GLM_GTX_scalar_multiplication extension included")
-
24 # endif
-
25 #endif
-
26 
-
27 #include "../vec2.hpp"
-
28 #include "../vec3.hpp"
-
29 #include "../vec4.hpp"
-
30 #include "../mat2x2.hpp"
-
31 #include <type_traits>
-
32 
-
33 namespace glm
-
34 {
-
35  template<typename T, typename Vec>
-
36  using return_type_scalar_multiplication = typename std::enable_if<
-
37  !std::is_same<T, float>::value // T may not be a float
-
38  && std::is_arithmetic<T>::value, Vec // But it may be an int or double (no vec3 or mat3, ...)
-
39  >::type;
-
40 
-
41 #define GLM_IMPLEMENT_SCAL_MULT(Vec) \
-
42  template<typename T> \
-
43  return_type_scalar_multiplication<T, Vec> \
-
44  operator*(T const& s, Vec rh){ \
-
45  return rh *= static_cast<float>(s); \
-
46  } \
-
47  \
-
48  template<typename T> \
-
49  return_type_scalar_multiplication<T, Vec> \
-
50  operator*(Vec lh, T const& s){ \
-
51  return lh *= static_cast<float>(s); \
-
52  } \
-
53  \
-
54  template<typename T> \
-
55  return_type_scalar_multiplication<T, Vec> \
-
56  operator/(Vec lh, T const& s){ \
-
57  return lh *= 1.0f / s; \
-
58  }
-
59 
-
60 GLM_IMPLEMENT_SCAL_MULT(vec2)
-
61 GLM_IMPLEMENT_SCAL_MULT(vec3)
-
62 GLM_IMPLEMENT_SCAL_MULT(vec4)
-
63 
-
64 GLM_IMPLEMENT_SCAL_MULT(mat2)
-
65 GLM_IMPLEMENT_SCAL_MULT(mat2x3)
-
66 GLM_IMPLEMENT_SCAL_MULT(mat2x4)
-
67 GLM_IMPLEMENT_SCAL_MULT(mat3x2)
-
68 GLM_IMPLEMENT_SCAL_MULT(mat3)
-
69 GLM_IMPLEMENT_SCAL_MULT(mat3x4)
-
70 GLM_IMPLEMENT_SCAL_MULT(mat4x2)
-
71 GLM_IMPLEMENT_SCAL_MULT(mat4x3)
-
72 GLM_IMPLEMENT_SCAL_MULT(mat4)
-
73 
-
74 #undef GLM_IMPLEMENT_SCAL_MULT
-
75 } // namespace glm
-
vec< 2, float, defaultp > vec2
2 components vector of single-precision floating-point numbers.
-
mat< 2, 4, float, defaultp > mat2x4
2 columns of 4 components matrix of single-precision floating-point numbers.
-
mat< 3, 2, float, defaultp > mat3x2
3 columns of 2 components matrix of single-precision floating-point numbers.
-
mat< 3, 4, float, defaultp > mat3x4
3 columns of 4 components matrix of single-precision floating-point numbers.
-
mat< 4, 3, float, defaultp > mat4x3
4 columns of 3 components matrix of single-precision floating-point numbers.
-
mat< 4, 2, float, defaultp > mat4x2
4 columns of 2 components matrix of single-precision floating-point numbers.
-
vec< 4, float, defaultp > vec4
4 components vector of single-precision floating-point numbers.
-
mat< 4, 4, float, defaultp > mat4
4 columns of 4 components matrix of single-precision floating-point numbers.
-
vec< 3, float, defaultp > vec3
3 components vector of single-precision floating-point numbers.
-
mat< 2, 3, float, defaultp > mat2x3
2 columns of 3 components matrix of single-precision floating-point numbers.
-
mat< 2, 2, float, defaultp > mat2
2 columns of 2 components matrix of single-precision floating-point numbers.
-
mat< 3, 3, float, defaultp > mat3
3 columns of 3 components matrix of single-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00149.html b/tests/OpenGL/package/glm/doc/api/a00149.html deleted file mode 100644 index f7aa38c3..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00149.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_relational.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
ext/scalar_relational.hpp File Reference
-
-
- -

GLM_EXT_scalar_relational -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR bool equal (genType const &x, genType const &y, genType const &epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR bool equal (genType const &x, genType const &y, int ULPs)
 Returns the component-wise comparison between two scalars in term of ULPs. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR bool notEqual (genType const &x, genType const &y, genType const &epsilon)
 Returns the component-wise comparison of |x - y| >= epsilon. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR bool notEqual (genType const &x, genType const &y, int ULPs)
 Returns the component-wise comparison between two scalars in term of ULPs. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00149_source.html b/tests/OpenGL/package/glm/doc/api/a00149_source.html deleted file mode 100644 index c013efd3..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00149_source.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_relational.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
ext/scalar_relational.hpp
-
-
-Go to the documentation of this file.
1 
-
15 #pragma once
-
16 
-
17 // Dependencies
-
18 #include "../detail/qualifier.hpp"
-
19 
-
20 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
21 # pragma message("GLM: GLM_EXT_scalar_relational extension included")
-
22 #endif
-
23 
-
24 namespace glm
-
25 {
-
30  template<typename genType>
-
31  GLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon);
-
32 
-
37  template<typename genType>
-
38  GLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon);
-
39 
-
48  template<typename genType>
-
49  GLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int ULPs);
-
50 
-
59  template<typename genType>
-
60  GLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs);
-
61 
-
63 }//namespace glm
-
64 
-
65 #include "scalar_relational.inl"
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > notEqual(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y)
Perform a component-wise not-equal-to comparison of two matrices.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > equal(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y)
Perform a component-wise equal-to comparison of two matrices.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()
Return the epsilon constant for floating point types.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00150.html b/tests/OpenGL/package/glm/doc/api/a00150.html deleted file mode 100644 index ff6d2a07..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00150.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_relational.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
gtx/scalar_relational.hpp File Reference
-
- - - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00150_source.html b/tests/OpenGL/package/glm/doc/api/a00150_source.html deleted file mode 100644 index 5997155a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00150_source.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_relational.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
gtx/scalar_relational.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # ifndef GLM_ENABLE_EXPERIMENTAL
-
20 # pragma message("GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
21 # else
-
22 # pragma message("GLM: GLM_GTX_extend extension included")
-
23 # endif
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
31 
-
32 
-
34 }//namespace glm
-
35 
-
36 #include "scalar_relational.inl"
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00151.html b/tests/OpenGL/package/glm/doc/api/a00151.html deleted file mode 100644 index 9954dbde..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00151.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_uint_sized.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
scalar_uint_sized.hpp File Reference
-
-
- -

GLM_EXT_scalar_uint_sized -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - -

-Typedefs

-typedef detail::uint16 uint16
 16 bit unsigned integer type.
 
-typedef detail::uint32 uint32
 32 bit unsigned integer type.
 
-typedef detail::uint64 uint64
 64 bit unsigned integer type.
 
-typedef detail::uint8 uint8
 8 bit unsigned integer type.
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00151_source.html b/tests/OpenGL/package/glm/doc/api/a00151_source.html deleted file mode 100644 index e807b705..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00151_source.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_uint_sized.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
scalar_uint_sized.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 #include "../detail/setup.hpp"
-
16 
-
17 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
18 # pragma message("GLM: GLM_EXT_scalar_uint_sized extension included")
-
19 #endif
-
20 
-
21 namespace glm{
-
22 namespace detail
-
23 {
-
24 # if GLM_HAS_EXTENDED_INTEGER_TYPE
-
25  typedef std::uint8_t uint8;
-
26  typedef std::uint16_t uint16;
-
27  typedef std::uint32_t uint32;
-
28 # else
-
29  typedef unsigned char uint8;
-
30  typedef unsigned short uint16;
-
31  typedef unsigned int uint32;
-
32 #endif
-
33 
-
34  template<>
-
35  struct is_int<uint8>
-
36  {
-
37  enum test {value = ~0};
-
38  };
-
39 
-
40  template<>
-
41  struct is_int<uint16>
-
42  {
-
43  enum test {value = ~0};
-
44  };
-
45 
-
46  template<>
-
47  struct is_int<uint64>
-
48  {
-
49  enum test {value = ~0};
-
50  };
-
51 }//namespace detail
-
52 
-
53 
-
56 
-
58  typedef detail::uint8 uint8;
-
59 
-
61  typedef detail::uint16 uint16;
-
62 
-
64  typedef detail::uint32 uint32;
-
65 
-
67  typedef detail::uint64 uint64;
-
68 
-
70 }//namespace glm
-
detail::uint32 uint32
32 bit unsigned integer type.
-
uint32 uint32_t
Default qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:129
-
detail::uint16 uint16
16 bit unsigned integer type.
-
uint16 uint16_t
Default qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:115
-
uint8 uint8_t
Default qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:101
-
detail::uint64 uint64
64 bit unsigned integer type.
-
detail::uint8 uint8
8 bit unsigned integer type.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00152.html b/tests/OpenGL/package/glm/doc/api/a00152.html deleted file mode 100644 index 1265ab90..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00152.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_ulp.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
scalar_ulp.hpp File Reference
-
-
- -

GLM_EXT_scalar_ulp -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GLM_FUNC_DECL int floatDistance (float x, float y)
 Return the distance in the number of ULP between 2 single-precision floating-point scalars. More...
 
GLM_FUNC_DECL int64 floatDistance (double x, double y)
 Return the distance in the number of ULP between 2 double-precision floating-point scalars. More...
 
template<typename genType >
GLM_FUNC_DECL genType nextFloat (genType x)
 Return the next ULP value(s) after the input value(s). More...
 
template<typename genType >
GLM_FUNC_DECL genType nextFloat (genType x, int ULPs)
 Return the value(s) ULP distance after the input value(s). More...
 
template<typename genType >
GLM_FUNC_DECL genType prevFloat (genType x)
 Return the previous ULP value(s) before the input value(s). More...
 
template<typename genType >
GLM_FUNC_DECL genType prevFloat (genType x, int ULPs)
 Return the value(s) ULP distance before the input value(s). More...
 
-

Detailed Description

-

GLM_EXT_scalar_ulp

- -

Definition in file scalar_ulp.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00152_source.html b/tests/OpenGL/package/glm/doc/api/a00152_source.html deleted file mode 100644 index 0d664c81..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00152_source.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -0.9.9 API documentation: scalar_ulp.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
scalar_ulp.hpp
-
-
-Go to the documentation of this file.
1 
-
16 #pragma once
-
17 
-
18 // Dependencies
-
19 #include "../ext/scalar_int_sized.hpp"
-
20 #include "../common.hpp"
-
21 #include "../detail/qualifier.hpp"
-
22 
-
23 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
24 # pragma message("GLM: GLM_EXT_scalar_ulp extension included")
-
25 #endif
-
26 
-
27 namespace glm
-
28 {
-
34  template<typename genType>
-
35  GLM_FUNC_DECL genType nextFloat(genType x);
-
36 
-
42  template<typename genType>
-
43  GLM_FUNC_DECL genType prevFloat(genType x);
-
44 
-
50  template<typename genType>
-
51  GLM_FUNC_DECL genType nextFloat(genType x, int ULPs);
-
52 
-
58  template<typename genType>
-
59  GLM_FUNC_DECL genType prevFloat(genType x, int ULPs);
-
60 
-
64  GLM_FUNC_DECL int floatDistance(float x, float y);
-
65 
-
69  GLM_FUNC_DECL int64 floatDistance(double x, double y);
-
70 
-
72 }//namespace glm
-
73 
-
74 #include "scalar_ulp.inl"
-
detail::int64 int64
64 bit signed integer type.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00153_source.html b/tests/OpenGL/package/glm/doc/api/a00153_source.html deleted file mode 100644 index fe206eee..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00153_source.html +++ /dev/null @@ -1,1212 +0,0 @@ - - - - - - -0.9.9 API documentation: setup.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
setup.hpp
-
-
-
1 #ifndef GLM_SETUP_INCLUDED
-
2 
-
3 #include <cassert>
-
4 #include <cstddef>
-
5 
-
6 #define GLM_VERSION_MAJOR 0
-
7 #define GLM_VERSION_MINOR 9
-
8 #define GLM_VERSION_PATCH 9
-
9 #define GLM_VERSION_REVISION 6
-
10 #define GLM_VERSION 996
-
11 #define GLM_VERSION_MESSAGE "GLM: version 0.9.9.6"
-
12 
-
13 #define GLM_SETUP_INCLUDED GLM_VERSION
-
14 
-
16 // Active states
-
17 
-
18 #define GLM_DISABLE 0
-
19 #define GLM_ENABLE 1
-
20 
-
22 // Messages
-
23 
-
24 #if defined(GLM_FORCE_MESSAGES)
-
25 # define GLM_MESSAGES GLM_ENABLE
-
26 #else
-
27 # define GLM_MESSAGES GLM_DISABLE
-
28 #endif
-
29 
-
31 // Detect the platform
-
32 
-
33 #include "../simd/platform.h"
-
34 
-
36 // Build model
-
37 
-
38 #if defined(__arch64__) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__)
-
39 # define GLM_MODEL GLM_MODEL_64
-
40 #elif defined(__i386__) || defined(__ppc__)
-
41 # define GLM_MODEL GLM_MODEL_32
-
42 #else
-
43 # define GLM_MODEL GLM_MODEL_32
-
44 #endif//
-
45 
-
46 #if !defined(GLM_MODEL) && GLM_COMPILER != 0
-
47 # error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message."
-
48 #endif//GLM_MODEL
-
49 
-
51 // C++ Version
-
52 
-
53 // User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14, GLM_FORCE_CXX17, GLM_FORCE_CXX2A
-
54 
-
55 #define GLM_LANG_CXX98_FLAG (1 << 1)
-
56 #define GLM_LANG_CXX03_FLAG (1 << 2)
-
57 #define GLM_LANG_CXX0X_FLAG (1 << 3)
-
58 #define GLM_LANG_CXX11_FLAG (1 << 4)
-
59 #define GLM_LANG_CXX14_FLAG (1 << 5)
-
60 #define GLM_LANG_CXX17_FLAG (1 << 6)
-
61 #define GLM_LANG_CXX2A_FLAG (1 << 7)
-
62 #define GLM_LANG_CXXMS_FLAG (1 << 8)
-
63 #define GLM_LANG_CXXGNU_FLAG (1 << 9)
-
64 
-
65 #define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG
-
66 #define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)
-
67 #define GLM_LANG_CXX0X (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG)
-
68 #define GLM_LANG_CXX11 (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG)
-
69 #define GLM_LANG_CXX14 (GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG)
-
70 #define GLM_LANG_CXX17 (GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG)
-
71 #define GLM_LANG_CXX2A (GLM_LANG_CXX17 | GLM_LANG_CXX2A_FLAG)
-
72 #define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG
-
73 #define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG
-
74 
-
75 #if (defined(_MSC_EXTENSIONS))
-
76 # define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG
-
77 #elif ((GLM_COMPILER & (GLM_COMPILER_CLANG | GLM_COMPILER_GCC)) && (GLM_ARCH & GLM_ARCH_SIMD_BIT))
-
78 # define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG
-
79 #else
-
80 # define GLM_LANG_EXT 0
-
81 #endif
-
82 
-
83 #if (defined(GLM_FORCE_CXX_UNKNOWN))
-
84 # define GLM_LANG 0
-
85 #elif defined(GLM_FORCE_CXX2A)
-
86 # define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT)
-
87 # define GLM_LANG_STL11_FORCED
-
88 #elif defined(GLM_FORCE_CXX17)
-
89 # define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)
-
90 # define GLM_LANG_STL11_FORCED
-
91 #elif defined(GLM_FORCE_CXX14)
-
92 # define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT)
-
93 # define GLM_LANG_STL11_FORCED
-
94 #elif defined(GLM_FORCE_CXX11)
-
95 # define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT)
-
96 # define GLM_LANG_STL11_FORCED
-
97 #elif defined(GLM_FORCE_CXX03)
-
98 # define GLM_LANG (GLM_LANG_CXX03 | GLM_LANG_EXT)
-
99 #elif defined(GLM_FORCE_CXX98)
-
100 # define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT)
-
101 #else
-
102 # if GLM_COMPILER & GLM_COMPILER_VC && defined(_MSVC_LANG)
-
103 # if GLM_COMPILER >= GLM_COMPILER_VC15_7
-
104 # define GLM_LANG_PLATFORM _MSVC_LANG
-
105 # elif GLM_COMPILER >= GLM_COMPILER_VC15
-
106 # if _MSVC_LANG > 201402L
-
107 # define GLM_LANG_PLATFORM 201402L
-
108 # else
-
109 # define GLM_LANG_PLATFORM _MSVC_LANG
-
110 # endif
-
111 # else
-
112 # define GLM_LANG_PLATFORM 0
-
113 # endif
-
114 # else
-
115 # define GLM_LANG_PLATFORM 0
-
116 # endif
-
117 
-
118 # if __cplusplus > 201703L || GLM_LANG_PLATFORM > 201703L
-
119 # define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT)
-
120 # elif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L
-
121 # define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)
-
122 # elif __cplusplus == 201402L || __cplusplus == 201500L || GLM_LANG_PLATFORM == 201402L
-
123 # define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT)
-
124 # elif __cplusplus == 201103L || GLM_LANG_PLATFORM == 201103L
-
125 # define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT)
-
126 # elif defined(__INTEL_CXX11_MODE__) || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__)
-
127 # define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_EXT)
-
128 # elif __cplusplus == 199711L
-
129 # define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT)
-
130 # else
-
131 # define GLM_LANG (0 | GLM_LANG_EXT)
-
132 # endif
-
133 #endif
-
134 
-
136 // Has of C++ features
-
137 
-
138 // http://clang.llvm.org/cxx_status.html
-
139 // http://gcc.gnu.org/projects/cxx0x.html
-
140 // http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx
-
141 
-
142 // Android has multiple STLs but C++11 STL detection doesn't always work #284 #564
-
143 #if GLM_PLATFORM == GLM_PLATFORM_ANDROID && !defined(GLM_LANG_STL11_FORCED)
-
144 # define GLM_HAS_CXX11_STL 0
-
145 #elif GLM_COMPILER & GLM_COMPILER_CLANG
-
146 # if (defined(_LIBCPP_VERSION) || (GLM_LANG & GLM_LANG_CXX11_FLAG) || defined(GLM_LANG_STL11_FORCED))
-
147 # define GLM_HAS_CXX11_STL 1
-
148 # else
-
149 # define GLM_HAS_CXX11_STL 0
-
150 # endif
-
151 #elif GLM_LANG & GLM_LANG_CXX11_FLAG
-
152 # define GLM_HAS_CXX11_STL 1
-
153 #else
-
154 # define GLM_HAS_CXX11_STL ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
-
155  ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \
-
156  ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
-
157  ((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) && (GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15))))
-
158 #endif
-
159 
-
160 // N1720
-
161 #if GLM_COMPILER & GLM_COMPILER_CLANG
-
162 # define GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert)
-
163 #elif GLM_LANG & GLM_LANG_CXX11_FLAG
-
164 # define GLM_HAS_STATIC_ASSERT 1
-
165 #else
-
166 # define GLM_HAS_STATIC_ASSERT ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
-
167  ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \
-
168  ((GLM_COMPILER & GLM_COMPILER_VC))))
-
169 #endif
-
170 
-
171 // N1988
-
172 #if GLM_LANG & GLM_LANG_CXX11_FLAG
-
173 # define GLM_HAS_EXTENDED_INTEGER_TYPE 1
-
174 #else
-
175 # define GLM_HAS_EXTENDED_INTEGER_TYPE (\
-
176  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC)) || \
-
177  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CUDA)) || \
-
178  ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG)))
-
179 #endif
-
180 
-
181 // N2672 Initializer lists http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
-
182 #if GLM_COMPILER & GLM_COMPILER_CLANG
-
183 # define GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers)
-
184 #elif GLM_LANG & GLM_LANG_CXX11_FLAG
-
185 # define GLM_HAS_INITIALIZER_LISTS 1
-
186 #else
-
187 # define GLM_HAS_INITIALIZER_LISTS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
-
188  ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \
-
189  ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \
-
190  ((GLM_COMPILER & GLM_COMPILER_CUDA))))
-
191 #endif
-
192 
-
193 // N2544 Unrestricted unions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf
-
194 #if GLM_COMPILER & GLM_COMPILER_CLANG
-
195 # define GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions)
-
196 #elif GLM_LANG & GLM_LANG_CXX11_FLAG
-
197 # define GLM_HAS_UNRESTRICTED_UNIONS 1
-
198 #else
-
199 # define GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
-
200  (GLM_COMPILER & GLM_COMPILER_VC) || \
-
201  ((GLM_COMPILER & GLM_COMPILER_CUDA)))
-
202 #endif
-
203 
-
204 // N2346
-
205 #if GLM_COMPILER & GLM_COMPILER_CLANG
-
206 # define GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions)
-
207 #elif GLM_LANG & GLM_LANG_CXX11_FLAG
-
208 # define GLM_HAS_DEFAULTED_FUNCTIONS 1
-
209 #else
-
210 # define GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
-
211  ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
-
212  ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \
-
213  (GLM_COMPILER & GLM_COMPILER_CUDA)))
-
214 #endif
-
215 
-
216 // N2118
-
217 #if GLM_COMPILER & GLM_COMPILER_CLANG
-
218 # define GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references)
-
219 #elif GLM_LANG & GLM_LANG_CXX11_FLAG
-
220 # define GLM_HAS_RVALUE_REFERENCES 1
-
221 #else
-
222 # define GLM_HAS_RVALUE_REFERENCES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
-
223  ((GLM_COMPILER & GLM_COMPILER_VC)) || \
-
224  ((GLM_COMPILER & GLM_COMPILER_CUDA))))
-
225 #endif
-
226 
-
227 // N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
-
228 #if GLM_COMPILER & GLM_COMPILER_CLANG
-
229 # define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions)
-
230 #elif GLM_LANG & GLM_LANG_CXX11_FLAG
-
231 # define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1
-
232 #else
-
233 # define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
-
234  ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \
-
235  ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
-
236  ((GLM_COMPILER & GLM_COMPILER_CUDA))))
-
237 #endif
-
238 
-
239 // N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
-
240 #if GLM_COMPILER & GLM_COMPILER_CLANG
-
241 # define GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates)
-
242 #elif GLM_LANG & GLM_LANG_CXX11_FLAG
-
243 # define GLM_HAS_TEMPLATE_ALIASES 1
-
244 #else
-
245 # define GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
-
246  ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \
-
247  ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
-
248  ((GLM_COMPILER & GLM_COMPILER_CUDA))))
-
249 #endif
-
250 
-
251 // N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html
-
252 #if GLM_COMPILER & GLM_COMPILER_CLANG
-
253 # define GLM_HAS_RANGE_FOR __has_feature(cxx_range_for)
-
254 #elif GLM_LANG & GLM_LANG_CXX11_FLAG
-
255 # define GLM_HAS_RANGE_FOR 1
-
256 #else
-
257 # define GLM_HAS_RANGE_FOR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
-
258  ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \
-
259  ((GLM_COMPILER & GLM_COMPILER_VC)) || \
-
260  ((GLM_COMPILER & GLM_COMPILER_CUDA))))
-
261 #endif
-
262 
-
263 // N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
-
264 #if GLM_COMPILER & GLM_COMPILER_CLANG
-
265 # define GLM_HAS_ALIGNOF __has_feature(cxx_alignas)
-
266 #elif GLM_LANG & GLM_LANG_CXX11_FLAG
-
267 # define GLM_HAS_ALIGNOF 1
-
268 #else
-
269 # define GLM_HAS_ALIGNOF ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
-
270  ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \
-
271  ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14)) || \
-
272  ((GLM_COMPILER & GLM_COMPILER_CUDA))))
-
273 #endif
-
274 
-
275 // N2235 Generalized Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf
-
276 // N3652 Extended Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html
-
277 #if (GLM_ARCH & GLM_ARCH_SIMD_BIT) // Compiler SIMD intrinsics don't support constexpr...
-
278 # define GLM_HAS_CONSTEXPR 0
-
279 #elif (GLM_COMPILER & GLM_COMPILER_CLANG)
-
280 # define GLM_HAS_CONSTEXPR __has_feature(cxx_relaxed_constexpr)
-
281 #elif (GLM_LANG & GLM_LANG_CXX14_FLAG)
-
282 # define GLM_HAS_CONSTEXPR 1
-
283 #else
-
284 # define GLM_HAS_CONSTEXPR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && GLM_HAS_INITIALIZER_LISTS && (\
-
285  ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL17)) || \
-
286  ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15))))
-
287 #endif
-
288 
-
289 #if GLM_HAS_CONSTEXPR
-
290 # define GLM_CONSTEXPR constexpr
-
291 #else
-
292 # define GLM_CONSTEXPR
-
293 #endif
-
294 
-
295 //
-
296 #if GLM_HAS_CONSTEXPR
-
297 # if (GLM_COMPILER & GLM_COMPILER_CLANG)
-
298 # if __has_feature(cxx_if_constexpr)
-
299 # define GLM_HAS_IF_CONSTEXPR 1
-
300 # else
-
301 # define GLM_HAS_IF_CONSTEXPR 0
-
302 # endif
-
303 # elif (GLM_LANG & GLM_LANG_CXX17_FLAG)
-
304 # define GLM_HAS_IF_CONSTEXPR 1
-
305 # else
-
306 # define GLM_HAS_IF_CONSTEXPR 0
-
307 # endif
-
308 #else
-
309 # define GLM_HAS_IF_CONSTEXPR 0
-
310 #endif
-
311 
-
312 #if GLM_HAS_IF_CONSTEXPR
-
313 # define GLM_IF_CONSTEXPR if constexpr
-
314 #else
-
315 # define GLM_IF_CONSTEXPR if
-
316 #endif
-
317 
-
318 //
-
319 #if GLM_LANG & GLM_LANG_CXX11_FLAG
-
320 # define GLM_HAS_ASSIGNABLE 1
-
321 #else
-
322 # define GLM_HAS_ASSIGNABLE ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
-
323  ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \
-
324  ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49))))
-
325 #endif
-
326 
-
327 //
-
328 #define GLM_HAS_TRIVIAL_QUERIES 0
-
329 
-
330 //
-
331 #if GLM_LANG & GLM_LANG_CXX11_FLAG
-
332 # define GLM_HAS_MAKE_SIGNED 1
-
333 #else
-
334 # define GLM_HAS_MAKE_SIGNED ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
-
335  ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
-
336  ((GLM_COMPILER & GLM_COMPILER_CUDA))))
-
337 #endif
-
338 
-
339 //
-
340 #if defined(GLM_FORCE_INTRINSICS)
-
341 # define GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && (\
-
342  ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \
-
343  ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14) && (GLM_ARCH & GLM_ARCH_X86_BIT))))
-
344 #else
-
345 # define GLM_HAS_BITSCAN_WINDOWS 0
-
346 #endif
-
347 
-
349 // OpenMP
-
350 #ifdef _OPENMP
-
351 # if GLM_COMPILER & GLM_COMPILER_GCC
-
352 # if GLM_COMPILER >= GLM_COMPILER_GCC61
-
353 # define GLM_HAS_OPENMP 45
-
354 # elif GLM_COMPILER >= GLM_COMPILER_GCC49
-
355 # define GLM_HAS_OPENMP 40
-
356 # elif GLM_COMPILER >= GLM_COMPILER_GCC47
-
357 # define GLM_HAS_OPENMP 31
-
358 # else
-
359 # define GLM_HAS_OPENMP 0
-
360 # endif
-
361 # elif GLM_COMPILER & GLM_COMPILER_CLANG
-
362 # if GLM_COMPILER >= GLM_COMPILER_CLANG38
-
363 # define GLM_HAS_OPENMP 31
-
364 # else
-
365 # define GLM_HAS_OPENMP 0
-
366 # endif
-
367 # elif GLM_COMPILER & GLM_COMPILER_VC
-
368 # define GLM_HAS_OPENMP 20
-
369 # elif GLM_COMPILER & GLM_COMPILER_INTEL
-
370 # if GLM_COMPILER >= GLM_COMPILER_INTEL16
-
371 # define GLM_HAS_OPENMP 40
-
372 # else
-
373 # define GLM_HAS_OPENMP 0
-
374 # endif
-
375 # else
-
376 # define GLM_HAS_OPENMP 0
-
377 # endif
-
378 #else
-
379 # define GLM_HAS_OPENMP 0
-
380 #endif
-
381 
-
383 // nullptr
-
384 
-
385 #if GLM_LANG & GLM_LANG_CXX0X_FLAG
-
386 # define GLM_CONFIG_NULLPTR GLM_ENABLE
-
387 #else
-
388 # define GLM_CONFIG_NULLPTR GLM_DISABLE
-
389 #endif
-
390 
-
391 #if GLM_CONFIG_NULLPTR == GLM_ENABLE
-
392 # define GLM_NULLPTR nullptr
-
393 #else
-
394 # define GLM_NULLPTR 0
-
395 #endif
-
396 
-
398 // Static assert
-
399 
-
400 #if GLM_HAS_STATIC_ASSERT
-
401 # define GLM_STATIC_ASSERT(x, message) static_assert(x, message)
-
402 #elif GLM_COMPILER & GLM_COMPILER_VC
-
403 # define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]
-
404 #else
-
405 # define GLM_STATIC_ASSERT(x, message) assert(x)
-
406 #endif//GLM_LANG
-
407 
-
409 // Qualifiers
-
410 
-
411 #if GLM_COMPILER & GLM_COMPILER_CUDA
-
412 # define GLM_CUDA_FUNC_DEF __device__ __host__
-
413 # define GLM_CUDA_FUNC_DECL __device__ __host__
-
414 #else
-
415 # define GLM_CUDA_FUNC_DEF
-
416 # define GLM_CUDA_FUNC_DECL
-
417 #endif
-
418 
-
419 #if defined(GLM_FORCE_INLINE)
-
420 # if GLM_COMPILER & GLM_COMPILER_VC
-
421 # define GLM_INLINE __forceinline
-
422 # define GLM_NEVER_INLINE __declspec((noinline))
-
423 # elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)
-
424 # define GLM_INLINE inline __attribute__((__always_inline__))
-
425 # define GLM_NEVER_INLINE __attribute__((__noinline__))
-
426 # elif GLM_COMPILER & GLM_COMPILER_CUDA
-
427 # define GLM_INLINE __forceinline__
-
428 # define GLM_NEVER_INLINE __noinline__
-
429 # else
-
430 # define GLM_INLINE inline
-
431 # define GLM_NEVER_INLINE
-
432 # endif//GLM_COMPILER
-
433 #else
-
434 # define GLM_INLINE inline
-
435 # define GLM_NEVER_INLINE
-
436 #endif//defined(GLM_FORCE_INLINE)
-
437 
-
438 #define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL
-
439 #define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE
-
440 
-
442 // Swizzle operators
-
443 
-
444 // User defines: GLM_FORCE_SWIZZLE
-
445 
-
446 #define GLM_SWIZZLE_DISABLED 0
-
447 #define GLM_SWIZZLE_OPERATOR 1
-
448 #define GLM_SWIZZLE_FUNCTION 2
-
449 
-
450 #if defined(GLM_FORCE_XYZW_ONLY)
-
451 # undef GLM_FORCE_SWIZZLE
-
452 #endif
-
453 
-
454 #if defined(GLM_SWIZZLE)
-
455 # pragma message("GLM: GLM_SWIZZLE is deprecated, use GLM_FORCE_SWIZZLE instead.")
-
456 # define GLM_FORCE_SWIZZLE
-
457 #endif
-
458 
-
459 #if defined(GLM_FORCE_SWIZZLE) && (GLM_LANG & GLM_LANG_CXXMS_FLAG)
-
460 # define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_OPERATOR
-
461 #elif defined(GLM_FORCE_SWIZZLE)
-
462 # define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_FUNCTION
-
463 #else
-
464 # define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_DISABLED
-
465 #endif
-
466 
-
468 // Allows using not basic types as genType
-
469 
-
470 // #define GLM_FORCE_UNRESTRICTED_GENTYPE
-
471 
-
472 #ifdef GLM_FORCE_UNRESTRICTED_GENTYPE
-
473 # define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_ENABLE
-
474 #else
-
475 # define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_DISABLE
-
476 #endif
-
477 
-
479 // Clip control, define GLM_FORCE_DEPTH_ZERO_TO_ONE before including GLM
-
480 // to use a clip space between 0 to 1.
-
481 // Coordinate system, define GLM_FORCE_LEFT_HANDED before including GLM
-
482 // to use left handed coordinate system by default.
-
483 
-
484 #define GLM_CLIP_CONTROL_ZO_BIT (1 << 0) // ZERO_TO_ONE
-
485 #define GLM_CLIP_CONTROL_NO_BIT (1 << 1) // NEGATIVE_ONE_TO_ONE
-
486 #define GLM_CLIP_CONTROL_LH_BIT (1 << 2) // LEFT_HANDED, For DirectX, Metal, Vulkan
-
487 #define GLM_CLIP_CONTROL_RH_BIT (1 << 3) // RIGHT_HANDED, For OpenGL, default in GLM
-
488 
-
489 #define GLM_CLIP_CONTROL_LH_ZO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_ZO_BIT)
-
490 #define GLM_CLIP_CONTROL_LH_NO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_NO_BIT)
-
491 #define GLM_CLIP_CONTROL_RH_ZO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_ZO_BIT)
-
492 #define GLM_CLIP_CONTROL_RH_NO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_NO_BIT)
-
493 
-
494 #ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE
-
495 # ifdef GLM_FORCE_LEFT_HANDED
-
496 # define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_ZO
-
497 # else
-
498 # define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_ZO
-
499 # endif
-
500 #else
-
501 # ifdef GLM_FORCE_LEFT_HANDED
-
502 # define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_NO
-
503 # else
-
504 # define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_NO
-
505 # endif
-
506 #endif
-
507 
-
509 // Qualifiers
-
510 
-
511 #if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))
-
512 # define GLM_DEPRECATED __declspec(deprecated)
-
513 # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name
-
514 #elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL)
-
515 # define GLM_DEPRECATED __attribute__((__deprecated__))
-
516 # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment)))
-
517 #elif GLM_COMPILER & GLM_COMPILER_CUDA
-
518 # define GLM_DEPRECATED
-
519 # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __align__(x)
-
520 #else
-
521 # define GLM_DEPRECATED
-
522 # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name
-
523 #endif
-
524 
-
526 
-
527 #ifdef GLM_FORCE_EXPLICIT_CTOR
-
528 # define GLM_EXPLICIT explicit
-
529 #else
-
530 # define GLM_EXPLICIT
-
531 #endif
-
532 
-
534 // SYCL
-
535 
-
536 #if GLM_COMPILER==GLM_COMPILER_SYCL
-
537 
-
538 #include <CL/sycl.hpp>
-
539 #include <limits>
-
540 
-
541 namespace glm {
-
542 namespace std {
-
543  // Import SYCL's functions into the namespace glm::std to force their usages.
-
544  // It's important to use the math built-in function (sin, exp, ...)
-
545  // of SYCL instead the std ones.
-
546  using namespace cl::sycl;
-
547 
-
549  // Import some "harmless" std's stuffs used by glm into
-
550  // the new glm::std namespace.
-
551  template<typename T>
-
552  using numeric_limits = ::std::numeric_limits<T>;
-
553 
-
554  using ::std::size_t;
-
555 
- - - - -
560 
- - - - -
565 
-
566  using ::std::make_unsigned;
-
568 } //namespace std
-
569 } //namespace glm
-
570 
-
571 #endif
-
572 
-
574 
-
576 // Length type: all length functions returns a length_t type.
-
577 // When GLM_FORCE_SIZE_T_LENGTH is defined, length_t is a typedef of size_t otherwise
-
578 // length_t is a typedef of int like GLSL defines it.
-
579 
-
580 #define GLM_LENGTH_INT 1
-
581 #define GLM_LENGTH_SIZE_T 2
-
582 
-
583 #ifdef GLM_FORCE_SIZE_T_LENGTH
-
584 # define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_SIZE_T
-
585 #else
-
586 # define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_INT
-
587 #endif
-
588 
-
589 namespace glm
-
590 {
-
591  using std::size_t;
-
592 # if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T
-
593  typedef size_t length_t;
-
594 # else
-
595  typedef int length_t;
-
596 # endif
-
597 }//namespace glm
-
598 
-
600 // constexpr
-
601 
-
602 #if GLM_HAS_CONSTEXPR
-
603 # define GLM_CONFIG_CONSTEXP GLM_ENABLE
-
604 
-
605  namespace glm
-
606  {
-
607  template<typename T, std::size_t N>
-
608  constexpr std::size_t countof(T const (&)[N])
-
609  {
-
610  return N;
-
611  }
-
612  }//namespace glm
-
613 # define GLM_COUNTOF(arr) glm::countof(arr)
-
614 #elif defined(_MSC_VER)
-
615 # define GLM_CONFIG_CONSTEXP GLM_DISABLE
-
616 
-
617 # define GLM_COUNTOF(arr) _countof(arr)
-
618 #else
-
619 # define GLM_CONFIG_CONSTEXP GLM_DISABLE
-
620 
-
621 # define GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0])
-
622 #endif
-
623 
-
625 // uint
-
626 
-
627 namespace glm{
-
628 namespace detail
-
629 {
-
630  template<typename T>
-
631  struct is_int
-
632  {
-
633  enum test {value = 0};
-
634  };
-
635 
-
636  template<>
-
637  struct is_int<unsigned int>
-
638  {
-
639  enum test {value = ~0};
-
640  };
-
641 
-
642  template<>
-
643  struct is_int<signed int>
-
644  {
-
645  enum test {value = ~0};
-
646  };
-
647 }//namespace detail
-
648 
-
649  typedef unsigned int uint;
-
650 }//namespace glm
-
651 
-
653 // 64-bit int
-
654 
-
655 #if GLM_HAS_EXTENDED_INTEGER_TYPE
-
656 # include <cstdint>
-
657 #endif
-
658 
-
659 namespace glm{
-
660 namespace detail
-
661 {
-
662 # if GLM_HAS_EXTENDED_INTEGER_TYPE
-
663  typedef std::uint64_t uint64;
-
664  typedef std::int64_t int64;
-
665 # elif (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available
-
666  typedef uint64_t uint64;
-
667  typedef int64_t int64;
-
668 # elif GLM_COMPILER & GLM_COMPILER_VC
-
669  typedef unsigned __int64 uint64;
-
670  typedef signed __int64 int64;
-
671 # elif GLM_COMPILER & GLM_COMPILER_GCC
-
672 # pragma GCC diagnostic ignored "-Wlong-long"
-
673  __extension__ typedef unsigned long long uint64;
-
674  __extension__ typedef signed long long int64;
-
675 # elif (GLM_COMPILER & GLM_COMPILER_CLANG)
-
676 # pragma clang diagnostic ignored "-Wc++11-long-long"
-
677  typedef unsigned long long uint64;
-
678  typedef signed long long int64;
-
679 # else//unknown compiler
-
680  typedef unsigned long long uint64;
-
681  typedef signed long long int64;
-
682 # endif
-
683 }//namespace detail
-
684 }//namespace glm
-
685 
-
687 // make_unsigned
-
688 
-
689 #if GLM_HAS_MAKE_SIGNED
-
690 # include <type_traits>
-
691 
-
692 namespace glm{
-
693 namespace detail
-
694 {
-
695  using std::make_unsigned;
-
696 }//namespace detail
-
697 }//namespace glm
-
698 
-
699 #else
-
700 
-
701 namespace glm{
-
702 namespace detail
-
703 {
-
704  template<typename genType>
-
705  struct make_unsigned
-
706  {};
-
707 
-
708  template<>
-
709  struct make_unsigned<char>
-
710  {
-
711  typedef unsigned char type;
-
712  };
-
713 
-
714  template<>
-
715  struct make_unsigned<signed char>
-
716  {
-
717  typedef unsigned char type;
-
718  };
-
719 
-
720  template<>
-
721  struct make_unsigned<short>
-
722  {
-
723  typedef unsigned short type;
-
724  };
-
725 
-
726  template<>
-
727  struct make_unsigned<int>
-
728  {
-
729  typedef unsigned int type;
-
730  };
-
731 
-
732  template<>
-
733  struct make_unsigned<long>
-
734  {
-
735  typedef unsigned long type;
-
736  };
-
737 
-
738  template<>
-
739  struct make_unsigned<int64>
-
740  {
-
741  typedef uint64 type;
-
742  };
-
743 
-
744  template<>
-
745  struct make_unsigned<unsigned char>
-
746  {
-
747  typedef unsigned char type;
-
748  };
-
749 
-
750  template<>
-
751  struct make_unsigned<unsigned short>
-
752  {
-
753  typedef unsigned short type;
-
754  };
-
755 
-
756  template<>
-
757  struct make_unsigned<unsigned int>
-
758  {
-
759  typedef unsigned int type;
-
760  };
-
761 
-
762  template<>
-
763  struct make_unsigned<unsigned long>
-
764  {
-
765  typedef unsigned long type;
-
766  };
-
767 
-
768  template<>
-
769  struct make_unsigned<uint64>
-
770  {
-
771  typedef uint64 type;
-
772  };
-
773 }//namespace detail
-
774 }//namespace glm
-
775 #endif
-
776 
-
778 // Only use x, y, z, w as vector type components
-
779 
-
780 #ifdef GLM_FORCE_XYZW_ONLY
-
781 # define GLM_CONFIG_XYZW_ONLY GLM_ENABLE
-
782 #else
-
783 # define GLM_CONFIG_XYZW_ONLY GLM_DISABLE
-
784 #endif
-
785 
-
787 // Configure the use of defaulted initialized types
-
788 
-
789 #define GLM_CTOR_INIT_DISABLE 0
-
790 #define GLM_CTOR_INITIALIZER_LIST 1
-
791 #define GLM_CTOR_INITIALISATION 2
-
792 
-
793 #if defined(GLM_FORCE_CTOR_INIT) && GLM_HAS_INITIALIZER_LISTS
-
794 # define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALIZER_LIST
-
795 #elif defined(GLM_FORCE_CTOR_INIT) && !GLM_HAS_INITIALIZER_LISTS
-
796 # define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALISATION
-
797 #else
-
798 # define GLM_CONFIG_CTOR_INIT GLM_CTOR_INIT_DISABLE
-
799 #endif
-
800 
-
802 // Use SIMD instruction sets
-
803 
-
804 #if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (GLM_ARCH & GLM_ARCH_SIMD_BIT)
-
805 # define GLM_CONFIG_SIMD GLM_ENABLE
-
806 #else
-
807 # define GLM_CONFIG_SIMD GLM_DISABLE
-
808 #endif
-
809 
-
811 // Configure the use of defaulted function
-
812 
-
813 #if GLM_HAS_DEFAULTED_FUNCTIONS && GLM_CONFIG_CTOR_INIT == GLM_CTOR_INIT_DISABLE
-
814 # define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_ENABLE
-
815 # define GLM_DEFAULT = default
-
816 #else
-
817 # define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_DISABLE
-
818 # define GLM_DEFAULT
-
819 #endif
-
820 
-
822 // Configure the use of aligned gentypes
-
823 
-
824 #ifdef GLM_FORCE_ALIGNED // Legacy define
-
825 # define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES
-
826 #endif
-
827 
-
828 #ifdef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES
-
829 # define GLM_FORCE_ALIGNED_GENTYPES
-
830 #endif
-
831 
-
832 #if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (defined(GLM_FORCE_ALIGNED_GENTYPES) || (GLM_CONFIG_SIMD == GLM_ENABLE))
-
833 # define GLM_CONFIG_ALIGNED_GENTYPES GLM_ENABLE
-
834 #else
-
835 # define GLM_CONFIG_ALIGNED_GENTYPES GLM_DISABLE
-
836 #endif
-
837 
-
839 // Configure the use of anonymous structure as implementation detail
-
840 
-
841 #if ((GLM_CONFIG_SIMD == GLM_ENABLE) || (GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR) || (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE))
-
842 # define GLM_CONFIG_ANONYMOUS_STRUCT GLM_ENABLE
-
843 #else
-
844 # define GLM_CONFIG_ANONYMOUS_STRUCT GLM_DISABLE
-
845 #endif
-
846 
-
848 // Silent warnings
-
849 
-
850 #ifdef GLM_FORCE_SILENT_WARNINGS
-
851 # define GLM_SILENT_WARNINGS GLM_ENABLE
-
852 #else
-
853 # define GLM_SILENT_WARNINGS GLM_DISABLE
-
854 #endif
-
855 
-
857 // Precision
-
858 
-
859 #define GLM_HIGHP 1
-
860 #define GLM_MEDIUMP 2
-
861 #define GLM_LOWP 3
-
862 
-
863 #if defined(GLM_FORCE_PRECISION_HIGHP_BOOL) || defined(GLM_PRECISION_HIGHP_BOOL)
-
864 # define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP
-
865 #elif defined(GLM_FORCE_PRECISION_MEDIUMP_BOOL) || defined(GLM_PRECISION_MEDIUMP_BOOL)
-
866 # define GLM_CONFIG_PRECISION_BOOL GLM_MEDIUMP
-
867 #elif defined(GLM_FORCE_PRECISION_LOWP_BOOL) || defined(GLM_PRECISION_LOWP_BOOL)
-
868 # define GLM_CONFIG_PRECISION_BOOL GLM_LOWP
-
869 #else
-
870 # define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP
-
871 #endif
-
872 
-
873 #if defined(GLM_FORCE_PRECISION_HIGHP_INT) || defined(GLM_PRECISION_HIGHP_INT)
-
874 # define GLM_CONFIG_PRECISION_INT GLM_HIGHP
-
875 #elif defined(GLM_FORCE_PRECISION_MEDIUMP_INT) || defined(GLM_PRECISION_MEDIUMP_INT)
-
876 # define GLM_CONFIG_PRECISION_INT GLM_MEDIUMP
-
877 #elif defined(GLM_FORCE_PRECISION_LOWP_INT) || defined(GLM_PRECISION_LOWP_INT)
-
878 # define GLM_CONFIG_PRECISION_INT GLM_LOWP
-
879 #else
-
880 # define GLM_CONFIG_PRECISION_INT GLM_HIGHP
-
881 #endif
-
882 
-
883 #if defined(GLM_FORCE_PRECISION_HIGHP_UINT) || defined(GLM_PRECISION_HIGHP_UINT)
-
884 # define GLM_CONFIG_PRECISION_UINT GLM_HIGHP
-
885 #elif defined(GLM_FORCE_PRECISION_MEDIUMP_UINT) || defined(GLM_PRECISION_MEDIUMP_UINT)
-
886 # define GLM_CONFIG_PRECISION_UINT GLM_MEDIUMP
-
887 #elif defined(GLM_FORCE_PRECISION_LOWP_UINT) || defined(GLM_PRECISION_LOWP_UINT)
-
888 # define GLM_CONFIG_PRECISION_UINT GLM_LOWP
-
889 #else
-
890 # define GLM_CONFIG_PRECISION_UINT GLM_HIGHP
-
891 #endif
-
892 
-
893 #if defined(GLM_FORCE_PRECISION_HIGHP_FLOAT) || defined(GLM_PRECISION_HIGHP_FLOAT)
-
894 # define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP
-
895 #elif defined(GLM_FORCE_PRECISION_MEDIUMP_FLOAT) || defined(GLM_PRECISION_MEDIUMP_FLOAT)
-
896 # define GLM_CONFIG_PRECISION_FLOAT GLM_MEDIUMP
-
897 #elif defined(GLM_FORCE_PRECISION_LOWP_FLOAT) || defined(GLM_PRECISION_LOWP_FLOAT)
-
898 # define GLM_CONFIG_PRECISION_FLOAT GLM_LOWP
-
899 #else
-
900 # define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP
-
901 #endif
-
902 
-
903 #if defined(GLM_FORCE_PRECISION_HIGHP_DOUBLE) || defined(GLM_PRECISION_HIGHP_DOUBLE)
-
904 # define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP
-
905 #elif defined(GLM_FORCE_PRECISION_MEDIUMP_DOUBLE) || defined(GLM_PRECISION_MEDIUMP_DOUBLE)
-
906 # define GLM_CONFIG_PRECISION_DOUBLE GLM_MEDIUMP
-
907 #elif defined(GLM_FORCE_PRECISION_LOWP_DOUBLE) || defined(GLM_PRECISION_LOWP_DOUBLE)
-
908 # define GLM_CONFIG_PRECISION_DOUBLE GLM_LOWP
-
909 #else
-
910 # define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP
-
911 #endif
-
912 
-
914 // Check inclusions of different versions of GLM
-
915 
-
916 #elif ((GLM_SETUP_INCLUDED != GLM_VERSION) && !defined(GLM_FORCE_IGNORE_VERSION))
-
917 # error "GLM error: A different version of GLM is already included. Define GLM_FORCE_IGNORE_VERSION before including GLM headers to ignore this error."
-
918 #elif GLM_SETUP_INCLUDED == GLM_VERSION
-
919 
-
921 // Messages
-
922 
-
923 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_DISPLAYED)
-
924 # define GLM_MESSAGE_DISPLAYED
-
925 # define GLM_STR_HELPER(x) #x
-
926 # define GLM_STR(x) GLM_STR_HELPER(x)
-
927 
-
928  // Report GLM version
-
929 # pragma message (GLM_STR(GLM_VERSION_MESSAGE))
-
930 
-
931  // Report C++ language
-
932 # if (GLM_LANG & GLM_LANG_CXX2A_FLAG) && (GLM_LANG & GLM_LANG_EXT)
-
933 # pragma message("GLM: C++ 2A with extensions")
-
934 # elif (GLM_LANG & GLM_LANG_CXX2A_FLAG)
-
935 # pragma message("GLM: C++ 2A")
-
936 # elif (GLM_LANG & GLM_LANG_CXX17_FLAG) && (GLM_LANG & GLM_LANG_EXT)
-
937 # pragma message("GLM: C++ 17 with extensions")
-
938 # elif (GLM_LANG & GLM_LANG_CXX17_FLAG)
-
939 # pragma message("GLM: C++ 17")
-
940 # elif (GLM_LANG & GLM_LANG_CXX14_FLAG) && (GLM_LANG & GLM_LANG_EXT)
-
941 # pragma message("GLM: C++ 14 with extensions")
-
942 # elif (GLM_LANG & GLM_LANG_CXX14_FLAG)
-
943 # pragma message("GLM: C++ 14")
-
944 # elif (GLM_LANG & GLM_LANG_CXX11_FLAG) && (GLM_LANG & GLM_LANG_EXT)
-
945 # pragma message("GLM: C++ 11 with extensions")
-
946 # elif (GLM_LANG & GLM_LANG_CXX11_FLAG)
-
947 # pragma message("GLM: C++ 11")
-
948 # elif (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_LANG & GLM_LANG_EXT)
-
949 # pragma message("GLM: C++ 0x with extensions")
-
950 # elif (GLM_LANG & GLM_LANG_CXX0X_FLAG)
-
951 # pragma message("GLM: C++ 0x")
-
952 # elif (GLM_LANG & GLM_LANG_CXX03_FLAG) && (GLM_LANG & GLM_LANG_EXT)
-
953 # pragma message("GLM: C++ 03 with extensions")
-
954 # elif (GLM_LANG & GLM_LANG_CXX03_FLAG)
-
955 # pragma message("GLM: C++ 03")
-
956 # elif (GLM_LANG & GLM_LANG_CXX98_FLAG) && (GLM_LANG & GLM_LANG_EXT)
-
957 # pragma message("GLM: C++ 98 with extensions")
-
958 # elif (GLM_LANG & GLM_LANG_CXX98_FLAG)
-
959 # pragma message("GLM: C++ 98")
-
960 # else
-
961 # pragma message("GLM: C++ language undetected")
-
962 # endif//GLM_LANG
-
963 
-
964  // Report compiler detection
-
965 # if GLM_COMPILER & GLM_COMPILER_CUDA
-
966 # pragma message("GLM: CUDA compiler detected")
-
967 # elif GLM_COMPILER & GLM_COMPILER_VC
-
968 # pragma message("GLM: Visual C++ compiler detected")
-
969 # elif GLM_COMPILER & GLM_COMPILER_CLANG
-
970 # pragma message("GLM: Clang compiler detected")
-
971 # elif GLM_COMPILER & GLM_COMPILER_INTEL
-
972 # pragma message("GLM: Intel Compiler detected")
-
973 # elif GLM_COMPILER & GLM_COMPILER_GCC
-
974 # pragma message("GLM: GCC compiler detected")
-
975 # else
-
976 # pragma message("GLM: Compiler not detected")
-
977 # endif
-
978 
-
979  // Report build target
-
980 # if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_64)
-
981 # pragma message("GLM: x86 64 bits with AVX2 instruction set build target")
-
982 # elif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_32)
-
983 # pragma message("GLM: x86 32 bits with AVX2 instruction set build target")
-
984 
-
985 # elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_64)
-
986 # pragma message("GLM: x86 64 bits with AVX instruction set build target")
-
987 # elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_32)
-
988 # pragma message("GLM: x86 32 bits with AVX instruction set build target")
-
989 
-
990 # elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_64)
-
991 # pragma message("GLM: x86 64 bits with SSE4.2 instruction set build target")
-
992 # elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_32)
-
993 # pragma message("GLM: x86 32 bits with SSE4.2 instruction set build target")
-
994 
-
995 # elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_64)
-
996 # pragma message("GLM: x86 64 bits with SSE4.1 instruction set build target")
-
997 # elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_32)
-
998 # pragma message("GLM: x86 32 bits with SSE4.1 instruction set build target")
-
999 
-
1000 # elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_64)
-
1001 # pragma message("GLM: x86 64 bits with SSSE3 instruction set build target")
-
1002 # elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_32)
-
1003 # pragma message("GLM: x86 32 bits with SSSE3 instruction set build target")
-
1004 
-
1005 # elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_64)
-
1006 # pragma message("GLM: x86 64 bits with SSE3 instruction set build target")
-
1007 # elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_32)
-
1008 # pragma message("GLM: x86 32 bits with SSE3 instruction set build target")
-
1009 
-
1010 # elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_64)
-
1011 # pragma message("GLM: x86 64 bits with SSE2 instruction set build target")
-
1012 # elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_32)
-
1013 # pragma message("GLM: x86 32 bits with SSE2 instruction set build target")
-
1014 
-
1015 # elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_64)
-
1016 # pragma message("GLM: x86 64 bits build target")
-
1017 # elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_32)
-
1018 # pragma message("GLM: x86 32 bits build target")
-
1019 
-
1020 # elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_64)
-
1021 # pragma message("GLM: ARM 64 bits with Neon instruction set build target")
-
1022 # elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_32)
-
1023 # pragma message("GLM: ARM 32 bits with Neon instruction set build target")
-
1024 
-
1025 # elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_64)
-
1026 # pragma message("GLM: ARM 64 bits build target")
-
1027 # elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_32)
-
1028 # pragma message("GLM: ARM 32 bits build target")
-
1029 
-
1030 # elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_64)
-
1031 # pragma message("GLM: MIPS 64 bits build target")
-
1032 # elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_32)
-
1033 # pragma message("GLM: MIPS 32 bits build target")
-
1034 
-
1035 # elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_64)
-
1036 # pragma message("GLM: PowerPC 64 bits build target")
-
1037 # elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_32)
-
1038 # pragma message("GLM: PowerPC 32 bits build target")
-
1039 # else
-
1040 # pragma message("GLM: Unknown build target")
-
1041 # endif//GLM_ARCH
-
1042 
-
1043  // Report platform name
-
1044 # if(GLM_PLATFORM & GLM_PLATFORM_QNXNTO)
-
1045 # pragma message("GLM: QNX platform detected")
-
1046 //# elif(GLM_PLATFORM & GLM_PLATFORM_IOS)
-
1047 //# pragma message("GLM: iOS platform detected")
-
1048 # elif(GLM_PLATFORM & GLM_PLATFORM_APPLE)
-
1049 # pragma message("GLM: Apple platform detected")
-
1050 # elif(GLM_PLATFORM & GLM_PLATFORM_WINCE)
-
1051 # pragma message("GLM: WinCE platform detected")
-
1052 # elif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)
-
1053 # pragma message("GLM: Windows platform detected")
-
1054 # elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL)
-
1055 # pragma message("GLM: Native Client detected")
-
1056 # elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
-
1057 # pragma message("GLM: Android platform detected")
-
1058 # elif(GLM_PLATFORM & GLM_PLATFORM_LINUX)
-
1059 # pragma message("GLM: Linux platform detected")
-
1060 # elif(GLM_PLATFORM & GLM_PLATFORM_UNIX)
-
1061 # pragma message("GLM: UNIX platform detected")
-
1062 # elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN)
-
1063 # pragma message("GLM: platform unknown")
-
1064 # else
-
1065 # pragma message("GLM: platform not detected")
-
1066 # endif
-
1067 
-
1068  // Report whether only xyzw component are used
-
1069 # if defined GLM_FORCE_XYZW_ONLY
-
1070 # pragma message("GLM: GLM_FORCE_XYZW_ONLY is defined. Only x, y, z and w component are available in vector type. This define disables swizzle operators and SIMD instruction sets.")
-
1071 # endif
-
1072 
-
1073  // Report swizzle operator support
-
1074 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
1075 # pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling operators enabled.")
-
1076 # elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
-
1077 # pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling functions enabled. Enable compiler C++ language extensions to enable swizzle operators.")
-
1078 # else
-
1079 # pragma message("GLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.")
-
1080 # endif
-
1081 
-
1082  // Report .length() type
-
1083 # if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T
-
1084 # pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is defined. .length() returns a glm::length_t, a typedef of std::size_t.")
-
1085 # else
-
1086 # pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.")
-
1087 # endif
-
1088 
-
1089 # if GLM_CONFIG_UNRESTRICTED_GENTYPE == GLM_ENABLE
-
1090 # pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is defined. Removes GLSL restrictions on valid function genTypes.")
-
1091 # else
-
1092 # pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.")
-
1093 # endif
-
1094 
-
1095 # if GLM_SILENT_WARNINGS == GLM_ENABLE
-
1096 # pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is defined. Ignores C++ warnings from using C++ language extensions.")
-
1097 # else
-
1098 # pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is undefined. Shows C++ warnings from using C++ language extensions.")
-
1099 # endif
-
1100 
-
1101 # ifdef GLM_FORCE_SINGLE_ONLY
-
1102 # pragma message("GLM: GLM_FORCE_SINGLE_ONLY is defined. Using only single precision floating-point types.")
-
1103 # endif
-
1104 
-
1105 # if defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE)
-
1106 # undef GLM_FORCE_ALIGNED_GENTYPES
-
1107 # pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined, allowing aligned types. This prevents the use of C++ constexpr.")
-
1108 # elif defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE)
-
1109 # undef GLM_FORCE_ALIGNED_GENTYPES
-
1110 # pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.")
-
1111 # endif
-
1112 
-
1113 # if defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES)
-
1114 # if GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE
-
1115 # undef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES
-
1116 # pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.")
-
1117 # elif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE
-
1118 # pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined. All gentypes (e.g. vec3) will be aligned and padded by default.")
-
1119 # endif
-
1120 # endif
-
1121 
-
1122 # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT
-
1123 # pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is defined. Using zero to one depth clip space.")
-
1124 # else
-
1125 # pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.")
-
1126 # endif
-
1127 
-
1128 # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT
-
1129 # pragma message("GLM: GLM_FORCE_LEFT_HANDED is defined. Using left handed coordinate system.")
-
1130 # else
-
1131 # pragma message("GLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.")
-
1132 # endif
-
1133 #endif//GLM_MESSAGES
-
1134 
-
1135 #endif//GLM_SETUP_INCLUDED
-
int64 int64_t
64 bit signed integer type.
Definition: fwd.hpp:85
-
int8 int8_t
8 bit signed integer type.
Definition: fwd.hpp:43
-
uint32 uint32_t
Default qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:129
-
uint16 uint16_t
Default qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:115
-
uint8 uint8_t
Default qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:101
-
uint64 uint64_t
Default qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:143
-
int16 int16_t
16 bit signed integer type.
Definition: fwd.hpp:57
-
Definition: hash.hpp:49
-
int32 int32_t
32 bit signed integer type.
Definition: fwd.hpp:71
-
detail::uint64 uint64
64 bit unsigned integer type.
-
detail::int64 int64
64 bit signed integer type.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00154.html b/tests/OpenGL/package/glm/doc/api/a00154.html deleted file mode 100644 index 7da63a78..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00154.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - -0.9.9 API documentation: spline.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
spline.hpp File Reference
-
-
- -

GLM_GTX_spline -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType catmullRom (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
 Return a point from a catmull rom curve. More...
 
template<typename genType >
GLM_FUNC_DECL genType cubic (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
 Return a point from a cubic curve. More...
 
template<typename genType >
GLM_FUNC_DECL genType hermite (genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)
 Return a point from a hermite curve. More...
 
-

Detailed Description

-

GLM_GTX_spline

-
See also
Core features (dependence)
- -

Definition in file spline.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00154_source.html b/tests/OpenGL/package/glm/doc/api/a00154_source.html deleted file mode 100644 index e2530bc3..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00154_source.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - -0.9.9 API documentation: spline.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
spline.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 #include "../gtx/optimum_pow.hpp"
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # ifndef GLM_ENABLE_EXPERIMENTAL
-
21 # pragma message("GLM: GLM_GTX_spline is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
22 # else
-
23 # pragma message("GLM: GLM_GTX_spline extension included")
-
24 # endif
-
25 #endif
-
26 
-
27 namespace glm
-
28 {
-
31 
-
34  template<typename genType>
-
35  GLM_FUNC_DECL genType catmullRom(
-
36  genType const& v1,
-
37  genType const& v2,
-
38  genType const& v3,
-
39  genType const& v4,
-
40  typename genType::value_type const& s);
-
41 
-
44  template<typename genType>
-
45  GLM_FUNC_DECL genType hermite(
-
46  genType const& v1,
-
47  genType const& t1,
-
48  genType const& v2,
-
49  genType const& t2,
-
50  typename genType::value_type const& s);
-
51 
-
54  template<typename genType>
-
55  GLM_FUNC_DECL genType cubic(
-
56  genType const& v1,
-
57  genType const& v2,
-
58  genType const& v3,
-
59  genType const& v4,
-
60  typename genType::value_type const& s);
-
61 
-
63 }//namespace glm
-
64 
-
65 #include "spline.inl"
-
GLM_FUNC_DECL genType hermite(genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)
Return a point from a hermite curve.
-
GLM_FUNC_DECL genType cubic(genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
Return a point from a cubic curve.
-
GLM_FUNC_DECL genType catmullRom(genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
Return a point from a catmull rom curve.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00155.html b/tests/OpenGL/package/glm/doc/api/a00155.html deleted file mode 100644 index a193492b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00155.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - -0.9.9 API documentation: std_based_type.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
std_based_type.hpp File Reference
-
-
- -

GLM_GTX_std_based_type -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef vec< 1, std::size_t, defaultp > size1
 Vector type based of one std::size_t component. More...
 
typedef vec< 1, std::size_t, defaultp > size1_t
 Vector type based of one std::size_t component. More...
 
typedef vec< 2, std::size_t, defaultp > size2
 Vector type based of two std::size_t components. More...
 
typedef vec< 2, std::size_t, defaultp > size2_t
 Vector type based of two std::size_t components. More...
 
typedef vec< 3, std::size_t, defaultp > size3
 Vector type based of three std::size_t components. More...
 
typedef vec< 3, std::size_t, defaultp > size3_t
 Vector type based of three std::size_t components. More...
 
typedef vec< 4, std::size_t, defaultp > size4
 Vector type based of four std::size_t components. More...
 
typedef vec< 4, std::size_t, defaultp > size4_t
 Vector type based of four std::size_t components. More...
 
-

Detailed Description

-

GLM_GTX_std_based_type

-
See also
Core features (dependence)
-
-gtx_extented_min_max (dependence)
- -

Definition in file std_based_type.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00155_source.html b/tests/OpenGL/package/glm/doc/api/a00155_source.html deleted file mode 100644 index 0f50c6fe..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00155_source.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - -0.9.9 API documentation: std_based_type.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
std_based_type.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../glm.hpp"
-
18 #include <cstdlib>
-
19 
-
20 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
21 # ifndef GLM_ENABLE_EXPERIMENTAL
-
22 # pragma message("GLM: GLM_GTX_std_based_type is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
23 # else
-
24 # pragma message("GLM: GLM_GTX_std_based_type extension included")
-
25 # endif
-
26 #endif
-
27 
-
28 namespace glm
-
29 {
-
32 
-
35  typedef vec<1, std::size_t, defaultp> size1;
-
36 
-
39  typedef vec<2, std::size_t, defaultp> size2;
-
40 
-
43  typedef vec<3, std::size_t, defaultp> size3;
-
44 
-
47  typedef vec<4, std::size_t, defaultp> size4;
-
48 
-
51  typedef vec<1, std::size_t, defaultp> size1_t;
-
52 
-
55  typedef vec<2, std::size_t, defaultp> size2_t;
-
56 
-
59  typedef vec<3, std::size_t, defaultp> size3_t;
-
60 
-
63  typedef vec<4, std::size_t, defaultp> size4_t;
-
64 
-
66 }//namespace glm
-
67 
-
68 #include "std_based_type.inl"
-
vec< 1, std::size_t, defaultp > size1
Vector type based of one std::size_t component.
-
vec< 3, std::size_t, defaultp > size3_t
Vector type based of three std::size_t components.
-
vec< 2, std::size_t, defaultp > size2_t
Vector type based of two std::size_t components.
-
vec< 4, std::size_t, defaultp > size4
Vector type based of four std::size_t components.
-
vec< 1, std::size_t, defaultp > size1_t
Vector type based of one std::size_t component.
-
vec< 3, std::size_t, defaultp > size3
Vector type based of three std::size_t components.
-
vec< 2, std::size_t, defaultp > size2
Vector type based of two std::size_t components.
-
vec< 4, std::size_t, defaultp > size4_t
Vector type based of four std::size_t components.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00156.html b/tests/OpenGL/package/glm/doc/api/a00156.html deleted file mode 100644 index ddaf252c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00156.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: string_cast.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
string_cast.hpp File Reference
-
-
- -

GLM_GTX_string_cast -More...

- -

Go to the source code of this file.

- - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL std::string to_string (genType const &x)
 Create a string from a GLM vector or matrix typed variable. More...
 
-

Detailed Description

-

GLM_GTX_string_cast

-
See also
Core features (dependence)
-
-GLM_GTX_integer (dependence)
-
-GLM_GTX_quaternion (dependence)
- -

Definition in file string_cast.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00156_source.html b/tests/OpenGL/package/glm/doc/api/a00156_source.html deleted file mode 100644 index 4dba3bcd..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00156_source.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - -0.9.9 API documentation: string_cast.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
string_cast.hpp
-
-
-Go to the documentation of this file.
1 
-
17 #pragma once
-
18 
-
19 // Dependency:
-
20 #include "../glm.hpp"
-
21 #include "../gtc/type_precision.hpp"
-
22 #include "../gtc/quaternion.hpp"
-
23 #include "../gtx/dual_quaternion.hpp"
-
24 #include <string>
-
25 #include <cmath>
-
26 
-
27 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
28 # ifndef GLM_ENABLE_EXPERIMENTAL
-
29 # pragma message("GLM: GLM_GTX_string_cast is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
30 # else
-
31 # pragma message("GLM: GLM_GTX_string_cast extension included")
-
32 # endif
-
33 #endif
-
34 
-
35 #if(GLM_COMPILER & GLM_COMPILER_CUDA)
-
36 # error "GLM_GTX_string_cast is not supported on CUDA compiler"
-
37 #endif
-
38 
-
39 namespace glm
-
40 {
-
43 
-
46  template<typename genType>
-
47  GLM_FUNC_DECL std::string to_string(genType const& x);
-
48 
-
50 }//namespace glm
-
51 
-
52 #include "string_cast.inl"
-
GLM_FUNC_DECL std::string to_string(genType const &x)
Create a string from a GLM vector or matrix typed variable.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00157.html b/tests/OpenGL/package/glm/doc/api/a00157.html deleted file mode 100644 index 5a200203..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00157.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - -0.9.9 API documentation: texture.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
texture.hpp File Reference
-
-
- -

GLM_GTX_texture -More...

- -

Go to the source code of this file.

- - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
levels (vec< L, T, Q > const &Extent)
 Compute the number of mipmaps levels necessary to create a mipmap complete texture. More...
 
-

Detailed Description

-

GLM_GTX_texture

-
See also
Core features (dependence)
- -

Definition in file texture.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00157_source.html b/tests/OpenGL/package/glm/doc/api/a00157_source.html deleted file mode 100644 index eabc4ba1..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00157_source.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - -0.9.9 API documentation: texture.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
texture.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 #include "../gtc/integer.hpp"
-
18 #include "../gtx/component_wise.hpp"
-
19 
-
20 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
21 # ifndef GLM_ENABLE_EXPERIMENTAL
-
22 # pragma message("GLM: GLM_GTX_texture is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
23 # else
-
24 # pragma message("GLM: GLM_GTX_texture extension included")
-
25 # endif
-
26 #endif
-
27 
-
28 namespace glm
-
29 {
-
32 
-
39  template <length_t L, typename T, qualifier Q>
-
40  T levels(vec<L, T, Q> const& Extent);
-
41 
-
43 }// namespace glm
-
44 
-
45 #include "texture.inl"
-
46 
-
T levels(vec< L, T, Q > const &Extent)
Compute the number of mipmaps levels necessary to create a mipmap complete texture.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00158.html b/tests/OpenGL/package/glm/doc/api/a00158.html deleted file mode 100644 index 99583720..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00158.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - -0.9.9 API documentation: transform.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
transform.hpp File Reference
-
-
- -

GLM_GTX_transform -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > rotate (T angle, vec< 3, T, Q > const &v)
 Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > scale (vec< 3, T, Q > const &v)
 Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > translate (vec< 3, T, Q > const &v)
 Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars. More...
 
-

Detailed Description

-

GLM_GTX_transform

-
See also
Core features (dependence)
-
-GLM_GTC_matrix_transform (dependence)
-
-GLM_GTX_transform
-
-GLM_GTX_transform2
- -

Definition in file transform.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00158_source.html b/tests/OpenGL/package/glm/doc/api/a00158_source.html deleted file mode 100644 index ce75b1ea..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00158_source.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - -0.9.9 API documentation: transform.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
transform.hpp
-
-
-Go to the documentation of this file.
1 
-
16 #pragma once
-
17 
-
18 // Dependency:
-
19 #include "../glm.hpp"
-
20 #include "../gtc/matrix_transform.hpp"
-
21 
-
22 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
23 # ifndef GLM_ENABLE_EXPERIMENTAL
-
24 # pragma message("GLM: GLM_GTX_transform is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
25 # else
-
26 # pragma message("GLM: GLM_GTX_transform extension included")
-
27 # endif
-
28 #endif
-
29 
-
30 namespace glm
-
31 {
-
34 
-
38  template<typename T, qualifier Q>
-
39  GLM_FUNC_DECL mat<4, 4, T, Q> translate(
-
40  vec<3, T, Q> const& v);
-
41 
-
45  template<typename T, qualifier Q>
-
46  GLM_FUNC_DECL mat<4, 4, T, Q> rotate(
-
47  T angle,
-
48  vec<3, T, Q> const& v);
-
49 
-
53  template<typename T, qualifier Q>
-
54  GLM_FUNC_DECL mat<4, 4, T, Q> scale(
-
55  vec<3, T, Q> const& v);
-
56 
-
58 }// namespace glm
-
59 
-
60 #include "transform.inl"
-
GLM_FUNC_DECL mat< 4, 4, T, Q > translate(vec< 3, T, Q > const &v)
Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.
-
GLM_FUNC_DECL T angle(qua< T, Q > const &x)
Returns the quaternion rotation angle.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > scale(vec< 3, T, Q > const &v)
Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > rotate(T angle, vec< 3, T, Q > const &v)
Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00159.html b/tests/OpenGL/package/glm/doc/api/a00159.html deleted file mode 100644 index 23a665a5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00159.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -0.9.9 API documentation: transform2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
transform2.hpp File Reference
-
-
- -

GLM_GTX_transform2 -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > proj2D (mat< 3, 3, T, Q > const &m, vec< 3, T, Q > const &normal)
 Build planar projection matrix along normal axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > proj3D (mat< 4, 4, T, Q > const &m, vec< 3, T, Q > const &normal)
 Build planar projection matrix along normal axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > scaleBias (T scale, T bias)
 Build a scale bias matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > scaleBias (mat< 4, 4, T, Q > const &m, T scale, T bias)
 Build a scale bias matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > shearX2D (mat< 3, 3, T, Q > const &m, T y)
 Transforms a matrix with a shearing on X axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > shearX3D (mat< 4, 4, T, Q > const &m, T y, T z)
 Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > shearY2D (mat< 3, 3, T, Q > const &m, T x)
 Transforms a matrix with a shearing on Y axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > shearY3D (mat< 4, 4, T, Q > const &m, T x, T z)
 Transforms a matrix with a shearing on Y axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > shearZ3D (mat< 4, 4, T, Q > const &m, T x, T y)
 Transforms a matrix with a shearing on Z axis. More...
 
-

Detailed Description

-

GLM_GTX_transform2

-
See also
Core features (dependence)
-
-GLM_GTX_transform (dependence)
- -

Definition in file transform2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00159_source.html b/tests/OpenGL/package/glm/doc/api/a00159_source.html deleted file mode 100644 index 7724d4bf..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00159_source.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - -0.9.9 API documentation: transform2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
transform2.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../glm.hpp"
-
18 #include "../gtx/transform.hpp"
-
19 
-
20 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
21 # ifndef GLM_ENABLE_EXPERIMENTAL
-
22 # pragma message("GLM: GLM_GTX_transform2 is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
23 # else
-
24 # pragma message("GLM: GLM_GTX_transform2 extension included")
-
25 # endif
-
26 #endif
-
27 
-
28 namespace glm
-
29 {
-
32 
-
35  template<typename T, qualifier Q>
-
36  GLM_FUNC_DECL mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T y);
-
37 
-
40  template<typename T, qualifier Q>
-
41  GLM_FUNC_DECL mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T x);
-
42 
-
45  template<typename T, qualifier Q>
-
46  GLM_FUNC_DECL mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T y, T z);
-
47 
-
50  template<typename T, qualifier Q>
-
51  GLM_FUNC_DECL mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T x, T z);
-
52 
-
55  template<typename T, qualifier Q>
-
56  GLM_FUNC_DECL mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T x, T y);
-
57 
-
58  //template<typename T> GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shear(const mat<4, 4, T, Q> & m, shearPlane, planePoint, angle)
-
59  // Identity + tan(angle) * cross(Normal, OnPlaneVector) 0
-
60  // - dot(PointOnPlane, normal) * OnPlaneVector 1
-
61 
-
62  // Reflect functions seem to don't work
-
63  //template<typename T> mat<3, 3, T, Q> reflect2D(const mat<3, 3, T, Q> & m, const vec<3, T, Q>& normal){return reflect2DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
-
64  //template<typename T> mat<4, 4, T, Q> reflect3D(const mat<4, 4, T, Q> & m, const vec<3, T, Q>& normal){return reflect3DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
-
65 
-
68  template<typename T, qualifier Q>
-
69  GLM_FUNC_DECL mat<3, 3, T, Q> proj2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal);
-
70 
-
73  template<typename T, qualifier Q>
-
74  GLM_FUNC_DECL mat<4, 4, T, Q> proj3D(mat<4, 4, T, Q> const & m, vec<3, T, Q> const& normal);
-
75 
-
78  template<typename T, qualifier Q>
-
79  GLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(T scale, T bias);
-
80 
-
83  template<typename T, qualifier Q>
-
84  GLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias);
-
85 
-
87 }// namespace glm
-
88 
-
89 #include "transform2.inl"
-
GLM_FUNC_DECL mat< 3, 3, T, Q > shearX2D(mat< 3, 3, T, Q > const &m, T y)
Transforms a matrix with a shearing on X axis.
-
GLM_FUNC_DECL mat< 3, 3, T, Q > shearY2D(mat< 3, 3, T, Q > const &m, T x)
Transforms a matrix with a shearing on Y axis.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > proj3D(mat< 4, 4, T, Q > const &m, vec< 3, T, Q > const &normal)
Build planar projection matrix along normal axis.
-
GLM_FUNC_DECL mat< 3, 3, T, Q > proj2D(mat< 3, 3, T, Q > const &m, vec< 3, T, Q > const &normal)
Build planar projection matrix along normal axis.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > shearZ3D(mat< 4, 4, T, Q > const &m, T x, T y)
Transforms a matrix with a shearing on Z axis.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > scale(mat< 4, 4, T, Q > const &m, vec< 3, T, Q > const &v)
Builds a scale 4 * 4 matrix created from 3 scalars.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > shearY3D(mat< 4, 4, T, Q > const &m, T x, T z)
Transforms a matrix with a shearing on Y axis.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > scaleBias(mat< 4, 4, T, Q > const &m, T scale, T bias)
Build a scale bias matrix.
-
GLM_FUNC_DECL mat< 4, 4, T, Q > shearX3D(mat< 4, 4, T, Q > const &m, T y, T z)
Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00160.html b/tests/OpenGL/package/glm/doc/api/a00160.html deleted file mode 100644 index b375eda0..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00160.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - -0.9.9 API documentation: trigonometric.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
trigonometric.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > acos (vec< L, T, Q > const &x)
 Arc cosine. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > acosh (vec< L, T, Q > const &x)
 Arc hyperbolic cosine; returns the non-negative inverse of cosh. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > asin (vec< L, T, Q > const &x)
 Arc sine. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > asinh (vec< L, T, Q > const &x)
 Arc hyperbolic sine; returns the inverse of sinh. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > atan (vec< L, T, Q > const &y, vec< L, T, Q > const &x)
 Arc tangent. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > atan (vec< L, T, Q > const &y_over_x)
 Arc tangent. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > atanh (vec< L, T, Q > const &x)
 Arc hyperbolic tangent; returns the inverse of tanh. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > cos (vec< L, T, Q > const &angle)
 The standard trigonometric cosine function. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > cosh (vec< L, T, Q > const &angle)
 Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > degrees (vec< L, T, Q > const &radians)
 Converts radians to degrees and returns the result. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > radians (vec< L, T, Q > const &degrees)
 Converts degrees to radians and returns the result. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > sin (vec< L, T, Q > const &angle)
 The standard trigonometric sine function. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > sinh (vec< L, T, Q > const &angle)
 Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > tan (vec< L, T, Q > const &angle)
 The standard trigonometric tangent function. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > tanh (vec< L, T, Q > const &angle)
 Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00160_source.html b/tests/OpenGL/package/glm/doc/api/a00160_source.html deleted file mode 100644 index 3ddd5bee..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00160_source.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - -0.9.9 API documentation: trigonometric.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
trigonometric.hpp
-
-
-Go to the documentation of this file.
1 
-
19 #pragma once
-
20 
-
21 #include "detail/setup.hpp"
-
22 #include "detail/qualifier.hpp"
-
23 
-
24 namespace glm
-
25 {
-
28 
-
37  template<length_t L, typename T, qualifier Q>
-
38  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> radians(vec<L, T, Q> const& degrees);
-
39 
-
48  template<length_t L, typename T, qualifier Q>
-
49  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> degrees(vec<L, T, Q> const& radians);
-
50 
-
60  template<length_t L, typename T, qualifier Q>
-
61  GLM_FUNC_DECL vec<L, T, Q> sin(vec<L, T, Q> const& angle);
-
62 
-
72  template<length_t L, typename T, qualifier Q>
-
73  GLM_FUNC_DECL vec<L, T, Q> cos(vec<L, T, Q> const& angle);
-
74 
-
83  template<length_t L, typename T, qualifier Q>
-
84  GLM_FUNC_DECL vec<L, T, Q> tan(vec<L, T, Q> const& angle);
-
85 
-
96  template<length_t L, typename T, qualifier Q>
-
97  GLM_FUNC_DECL vec<L, T, Q> asin(vec<L, T, Q> const& x);
-
98 
-
109  template<length_t L, typename T, qualifier Q>
-
110  GLM_FUNC_DECL vec<L, T, Q> acos(vec<L, T, Q> const& x);
-
111 
-
124  template<length_t L, typename T, qualifier Q>
-
125  GLM_FUNC_DECL vec<L, T, Q> atan(vec<L, T, Q> const& y, vec<L, T, Q> const& x);
-
126 
-
136  template<length_t L, typename T, qualifier Q>
-
137  GLM_FUNC_DECL vec<L, T, Q> atan(vec<L, T, Q> const& y_over_x);
-
138 
-
147  template<length_t L, typename T, qualifier Q>
-
148  GLM_FUNC_DECL vec<L, T, Q> sinh(vec<L, T, Q> const& angle);
-
149 
-
158  template<length_t L, typename T, qualifier Q>
-
159  GLM_FUNC_DECL vec<L, T, Q> cosh(vec<L, T, Q> const& angle);
-
160 
-
169  template<length_t L, typename T, qualifier Q>
-
170  GLM_FUNC_DECL vec<L, T, Q> tanh(vec<L, T, Q> const& angle);
-
171 
-
180  template<length_t L, typename T, qualifier Q>
-
181  GLM_FUNC_DECL vec<L, T, Q> asinh(vec<L, T, Q> const& x);
-
182 
-
192  template<length_t L, typename T, qualifier Q>
-
193  GLM_FUNC_DECL vec<L, T, Q> acosh(vec<L, T, Q> const& x);
-
194 
-
204  template<length_t L, typename T, qualifier Q>
-
205  GLM_FUNC_DECL vec<L, T, Q> atanh(vec<L, T, Q> const& x);
-
206 
-
208 }//namespace glm
-
209 
-
210 #include "detail/func_trigonometric.inl"
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > degrees(vec< L, T, Q > const &radians)
Converts radians to degrees and returns the result.
-
GLM_FUNC_DECL vec< L, T, Q > cosh(vec< L, T, Q > const &angle)
Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2.
-
GLM_FUNC_DECL vec< L, T, Q > acos(vec< L, T, Q > const &x)
Arc cosine.
-
GLM_FUNC_DECL vec< L, T, Q > sin(vec< L, T, Q > const &angle)
The standard trigonometric sine function.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > radians(vec< L, T, Q > const &degrees)
Converts degrees to radians and returns the result.
-
GLM_FUNC_DECL T angle(qua< T, Q > const &x)
Returns the quaternion rotation angle.
-
GLM_FUNC_DECL vec< L, T, Q > asin(vec< L, T, Q > const &x)
Arc sine.
-
GLM_FUNC_DECL vec< L, T, Q > tanh(vec< L, T, Q > const &angle)
Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)
-
GLM_FUNC_DECL vec< L, T, Q > sinh(vec< L, T, Q > const &angle)
Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2.
-
GLM_FUNC_DECL vec< L, T, Q > asinh(vec< L, T, Q > const &x)
Arc hyperbolic sine; returns the inverse of sinh.
-
GLM_FUNC_DECL vec< L, T, Q > atanh(vec< L, T, Q > const &x)
Arc hyperbolic tangent; returns the inverse of tanh.
-
GLM_FUNC_DECL vec< L, T, Q > cos(vec< L, T, Q > const &angle)
The standard trigonometric cosine function.
-
GLM_FUNC_DECL vec< L, T, Q > atan(vec< L, T, Q > const &y_over_x)
Arc tangent.
-
GLM_FUNC_DECL vec< L, T, Q > acosh(vec< L, T, Q > const &x)
Arc hyperbolic cosine; returns the non-negative inverse of cosh.
-
GLM_FUNC_DECL vec< L, T, Q > tan(vec< L, T, Q > const &angle)
The standard trigonometric tangent function.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00161.html b/tests/OpenGL/package/glm/doc/api/a00161.html deleted file mode 100644 index 773124e6..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00161.html +++ /dev/null @@ -1,1523 +0,0 @@ - - - - - - -0.9.9 API documentation: type_aligned.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
gtc/type_aligned.hpp File Reference
-
-
- -

GLM_GTC_type_aligned -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

-typedef aligned_highp_bvec1 aligned_bvec1
 1 component vector aligned in memory of bool values.
 
-typedef aligned_highp_bvec2 aligned_bvec2
 2 components vector aligned in memory of bool values.
 
-typedef aligned_highp_bvec3 aligned_bvec3
 3 components vector aligned in memory of bool values.
 
-typedef aligned_highp_bvec4 aligned_bvec4
 4 components vector aligned in memory of bool values.
 
-typedef aligned_highp_dmat2 aligned_dmat2
 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat2x2 aligned_dmat2x2
 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat2x3 aligned_dmat2x3
 2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat2x4 aligned_dmat2x4
 2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat3 aligned_dmat3
 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat3x2 aligned_dmat3x2
 3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat3x3 aligned_dmat3x3
 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat3x4 aligned_dmat3x4
 3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat4 aligned_dmat4
 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat4x2 aligned_dmat4x2
 4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat4x3 aligned_dmat4x3
 4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat4x4 aligned_dmat4x4
 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dvec1 aligned_dvec1
 1 component vector aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dvec2 aligned_dvec2
 2 components vector aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dvec3 aligned_dvec3
 3 components vector aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dvec4 aligned_dvec4
 4 components vector aligned in memory of double-precision floating-point numbers.
 
-typedef vec< 1, bool, aligned_highp > aligned_highp_bvec1
 1 component vector aligned in memory of bool values.
 
-typedef vec< 2, bool, aligned_highp > aligned_highp_bvec2
 2 components vector aligned in memory of bool values.
 
-typedef vec< 3, bool, aligned_highp > aligned_highp_bvec3
 3 components vector aligned in memory of bool values.
 
-typedef vec< 4, bool, aligned_highp > aligned_highp_bvec4
 4 components vector aligned in memory of bool values.
 
-typedef mat< 2, 2, double, aligned_highp > aligned_highp_dmat2
 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, double, aligned_highp > aligned_highp_dmat2x2
 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, double, aligned_highp > aligned_highp_dmat2x3
 2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, double, aligned_highp > aligned_highp_dmat2x4
 2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, aligned_highp > aligned_highp_dmat3
 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, double, aligned_highp > aligned_highp_dmat3x2
 3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, aligned_highp > aligned_highp_dmat3x3
 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, double, aligned_highp > aligned_highp_dmat3x4
 3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, aligned_highp > aligned_highp_dmat4
 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, double, aligned_highp > aligned_highp_dmat4x2
 4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, double, aligned_highp > aligned_highp_dmat4x3
 4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, aligned_highp > aligned_highp_dmat4x4
 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, aligned_highp > aligned_highp_dvec1
 1 component vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 2, double, aligned_highp > aligned_highp_dvec2
 2 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 3, double, aligned_highp > aligned_highp_dvec3
 3 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 4, double, aligned_highp > aligned_highp_dvec4
 4 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, int, aligned_highp > aligned_highp_ivec1
 1 component vector aligned in memory of signed integer numbers.
 
-typedef vec< 2, int, aligned_highp > aligned_highp_ivec2
 2 components vector aligned in memory of signed integer numbers.
 
-typedef vec< 3, int, aligned_highp > aligned_highp_ivec3
 3 components vector aligned in memory of signed integer numbers.
 
-typedef vec< 4, int, aligned_highp > aligned_highp_ivec4
 4 components vector aligned in memory of signed integer numbers.
 
-typedef mat< 2, 2, float, aligned_highp > aligned_highp_mat2
 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, float, aligned_highp > aligned_highp_mat2x2
 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, float, aligned_highp > aligned_highp_mat2x3
 2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, float, aligned_highp > aligned_highp_mat2x4
 2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, aligned_highp > aligned_highp_mat3
 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, float, aligned_highp > aligned_highp_mat3x2
 3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, aligned_highp > aligned_highp_mat3x3
 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, float, aligned_highp > aligned_highp_mat3x4
 3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, aligned_highp > aligned_highp_mat4
 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, float, aligned_highp > aligned_highp_mat4x2
 4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, float, aligned_highp > aligned_highp_mat4x3
 4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, aligned_highp > aligned_highp_mat4x4
 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, uint, aligned_highp > aligned_highp_uvec1
 1 component vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 2, uint, aligned_highp > aligned_highp_uvec2
 2 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 3, uint, aligned_highp > aligned_highp_uvec3
 3 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 4, uint, aligned_highp > aligned_highp_uvec4
 4 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 1, float, aligned_highp > aligned_highp_vec1
 1 component vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 2, float, aligned_highp > aligned_highp_vec2
 2 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 3, float, aligned_highp > aligned_highp_vec3
 3 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 4, float, aligned_highp > aligned_highp_vec4
 4 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef aligned_highp_ivec1 aligned_ivec1
 1 component vector aligned in memory of signed integer numbers.
 
-typedef aligned_highp_ivec2 aligned_ivec2
 2 components vector aligned in memory of signed integer numbers.
 
-typedef aligned_highp_ivec3 aligned_ivec3
 3 components vector aligned in memory of signed integer numbers.
 
-typedef aligned_highp_ivec4 aligned_ivec4
 4 components vector aligned in memory of signed integer numbers.
 
-typedef vec< 1, bool, aligned_lowp > aligned_lowp_bvec1
 1 component vector aligned in memory of bool values.
 
-typedef vec< 2, bool, aligned_lowp > aligned_lowp_bvec2
 2 components vector aligned in memory of bool values.
 
-typedef vec< 3, bool, aligned_lowp > aligned_lowp_bvec3
 3 components vector aligned in memory of bool values.
 
-typedef vec< 4, bool, aligned_lowp > aligned_lowp_bvec4
 4 components vector aligned in memory of bool values.
 
-typedef mat< 2, 2, double, aligned_lowp > aligned_lowp_dmat2
 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, double, aligned_lowp > aligned_lowp_dmat2x2
 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, double, aligned_lowp > aligned_lowp_dmat2x3
 2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, double, aligned_lowp > aligned_lowp_dmat2x4
 2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, aligned_lowp > aligned_lowp_dmat3
 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, double, aligned_lowp > aligned_lowp_dmat3x2
 3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, aligned_lowp > aligned_lowp_dmat3x3
 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, double, aligned_lowp > aligned_lowp_dmat3x4
 3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, aligned_lowp > aligned_lowp_dmat4
 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, double, aligned_lowp > aligned_lowp_dmat4x2
 4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, double, aligned_lowp > aligned_lowp_dmat4x3
 4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, aligned_lowp > aligned_lowp_dmat4x4
 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, aligned_lowp > aligned_lowp_dvec1
 1 component vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 2, double, aligned_lowp > aligned_lowp_dvec2
 2 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 3, double, aligned_lowp > aligned_lowp_dvec3
 3 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 4, double, aligned_lowp > aligned_lowp_dvec4
 4 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, int, aligned_lowp > aligned_lowp_ivec1
 1 component vector aligned in memory of signed integer numbers.
 
-typedef vec< 2, int, aligned_lowp > aligned_lowp_ivec2
 2 components vector aligned in memory of signed integer numbers.
 
-typedef vec< 3, int, aligned_lowp > aligned_lowp_ivec3
 3 components vector aligned in memory of signed integer numbers.
 
-typedef vec< 4, int, aligned_lowp > aligned_lowp_ivec4
 4 components vector aligned in memory of signed integer numbers.
 
-typedef mat< 2, 2, float, aligned_lowp > aligned_lowp_mat2
 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, float, aligned_lowp > aligned_lowp_mat2x2
 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, float, aligned_lowp > aligned_lowp_mat2x3
 2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, float, aligned_lowp > aligned_lowp_mat2x4
 2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, aligned_lowp > aligned_lowp_mat3
 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, float, aligned_lowp > aligned_lowp_mat3x2
 3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, aligned_lowp > aligned_lowp_mat3x3
 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, float, aligned_lowp > aligned_lowp_mat3x4
 3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, aligned_lowp > aligned_lowp_mat4
 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, float, aligned_lowp > aligned_lowp_mat4x2
 4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, float, aligned_lowp > aligned_lowp_mat4x3
 4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, aligned_lowp > aligned_lowp_mat4x4
 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, uint, aligned_lowp > aligned_lowp_uvec1
 1 component vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 2, uint, aligned_lowp > aligned_lowp_uvec2
 2 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 3, uint, aligned_lowp > aligned_lowp_uvec3
 3 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 4, uint, aligned_lowp > aligned_lowp_uvec4
 4 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 1, float, aligned_lowp > aligned_lowp_vec1
 1 component vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 2, float, aligned_lowp > aligned_lowp_vec2
 2 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 3, float, aligned_lowp > aligned_lowp_vec3
 3 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 4, float, aligned_lowp > aligned_lowp_vec4
 4 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef aligned_highp_mat2 aligned_mat2
 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat2x2 aligned_mat2x2
 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat2x3 aligned_mat2x3
 2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat2x4 aligned_mat2x4
 2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat3 aligned_mat3
 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat3x2 aligned_mat3x2
 3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat3x3 aligned_mat3x3
 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat3x4 aligned_mat3x4
 3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat4 aligned_mat4
 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat4x2 aligned_mat4x2
 4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat4x3 aligned_mat4x3
 4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat4x4 aligned_mat4x4
 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef vec< 1, bool, aligned_mediump > aligned_mediump_bvec1
 1 component vector aligned in memory of bool values.
 
-typedef vec< 2, bool, aligned_mediump > aligned_mediump_bvec2
 2 components vector aligned in memory of bool values.
 
-typedef vec< 3, bool, aligned_mediump > aligned_mediump_bvec3
 3 components vector aligned in memory of bool values.
 
-typedef vec< 4, bool, aligned_mediump > aligned_mediump_bvec4
 4 components vector aligned in memory of bool values.
 
-typedef mat< 2, 2, double, aligned_mediump > aligned_mediump_dmat2
 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, double, aligned_mediump > aligned_mediump_dmat2x2
 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, double, aligned_mediump > aligned_mediump_dmat2x3
 2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, double, aligned_mediump > aligned_mediump_dmat2x4
 2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, aligned_mediump > aligned_mediump_dmat3
 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, double, aligned_mediump > aligned_mediump_dmat3x2
 3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, aligned_mediump > aligned_mediump_dmat3x3
 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, double, aligned_mediump > aligned_mediump_dmat3x4
 3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, aligned_mediump > aligned_mediump_dmat4
 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, double, aligned_mediump > aligned_mediump_dmat4x2
 4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, double, aligned_mediump > aligned_mediump_dmat4x3
 4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, aligned_mediump > aligned_mediump_dmat4x4
 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, aligned_mediump > aligned_mediump_dvec1
 1 component vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 2, double, aligned_mediump > aligned_mediump_dvec2
 2 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 3, double, aligned_mediump > aligned_mediump_dvec3
 3 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 4, double, aligned_mediump > aligned_mediump_dvec4
 4 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 1, int, aligned_mediump > aligned_mediump_ivec1
 1 component vector aligned in memory of signed integer numbers.
 
-typedef vec< 2, int, aligned_mediump > aligned_mediump_ivec2
 2 components vector aligned in memory of signed integer numbers.
 
-typedef vec< 3, int, aligned_mediump > aligned_mediump_ivec3
 3 components vector aligned in memory of signed integer numbers.
 
-typedef vec< 4, int, aligned_mediump > aligned_mediump_ivec4
 4 components vector aligned in memory of signed integer numbers.
 
-typedef mat< 2, 2, float, aligned_mediump > aligned_mediump_mat2
 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, float, aligned_mediump > aligned_mediump_mat2x2
 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, float, aligned_mediump > aligned_mediump_mat2x3
 2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, float, aligned_mediump > aligned_mediump_mat2x4
 2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, aligned_mediump > aligned_mediump_mat3
 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, float, aligned_mediump > aligned_mediump_mat3x2
 3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, aligned_mediump > aligned_mediump_mat3x3
 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, float, aligned_mediump > aligned_mediump_mat3x4
 3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, aligned_mediump > aligned_mediump_mat4
 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, float, aligned_mediump > aligned_mediump_mat4x2
 4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, float, aligned_mediump > aligned_mediump_mat4x3
 4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, aligned_mediump > aligned_mediump_mat4x4
 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 1, uint, aligned_mediump > aligned_mediump_uvec1
 1 component vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 2, uint, aligned_mediump > aligned_mediump_uvec2
 2 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 3, uint, aligned_mediump > aligned_mediump_uvec3
 3 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 4, uint, aligned_mediump > aligned_mediump_uvec4
 4 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 1, float, aligned_mediump > aligned_mediump_vec1
 1 component vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 2, float, aligned_mediump > aligned_mediump_vec2
 2 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 3, float, aligned_mediump > aligned_mediump_vec3
 3 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 4, float, aligned_mediump > aligned_mediump_vec4
 4 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef aligned_highp_uvec1 aligned_uvec1
 1 component vector aligned in memory of unsigned integer numbers.
 
-typedef aligned_highp_uvec2 aligned_uvec2
 2 components vector aligned in memory of unsigned integer numbers.
 
-typedef aligned_highp_uvec3 aligned_uvec3
 3 components vector aligned in memory of unsigned integer numbers.
 
-typedef aligned_highp_uvec4 aligned_uvec4
 4 components vector aligned in memory of unsigned integer numbers.
 
-typedef aligned_highp_vec1 aligned_vec1
 1 component vector aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_vec2 aligned_vec2
 2 components vector aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_vec3 aligned_vec3
 3 components vector aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_vec4 aligned_vec4
 4 components vector aligned in memory of single-precision floating-point numbers.
 
-typedef packed_highp_bvec1 packed_bvec1
 1 components vector tightly packed in memory of bool values.
 
-typedef packed_highp_bvec2 packed_bvec2
 2 components vector tightly packed in memory of bool values.
 
-typedef packed_highp_bvec3 packed_bvec3
 3 components vector tightly packed in memory of bool values.
 
-typedef packed_highp_bvec4 packed_bvec4
 4 components vector tightly packed in memory of bool values.
 
-typedef packed_highp_dmat2 packed_dmat2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat2x2 packed_dmat2x2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat2x3 packed_dmat2x3
 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat2x4 packed_dmat2x4
 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat3 packed_dmat3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat3x2 packed_dmat3x2
 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat3x3 packed_dmat3x3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat3x4 packed_dmat3x4
 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat4 packed_dmat4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat4x2 packed_dmat4x2
 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat4x3 packed_dmat4x3
 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat4x4 packed_dmat4x4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dvec1 packed_dvec1
 1 component vector tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dvec2 packed_dvec2
 2 components vector tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dvec3 packed_dvec3
 3 components vector tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dvec4 packed_dvec4
 4 components vector tightly packed in memory of double-precision floating-point numbers.
 
-typedef vec< 1, bool, packed_highp > packed_highp_bvec1
 1 component vector tightly packed in memory of bool values.
 
-typedef vec< 2, bool, packed_highp > packed_highp_bvec2
 2 components vector tightly packed in memory of bool values.
 
-typedef vec< 3, bool, packed_highp > packed_highp_bvec3
 3 components vector tightly packed in memory of bool values.
 
-typedef vec< 4, bool, packed_highp > packed_highp_bvec4
 4 components vector tightly packed in memory of bool values.
 
-typedef mat< 2, 2, double, packed_highp > packed_highp_dmat2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, double, packed_highp > packed_highp_dmat2x2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, double, packed_highp > packed_highp_dmat2x3
 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, double, packed_highp > packed_highp_dmat2x4
 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, packed_highp > packed_highp_dmat3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, double, packed_highp > packed_highp_dmat3x2
 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, packed_highp > packed_highp_dmat3x3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, double, packed_highp > packed_highp_dmat3x4
 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, packed_highp > packed_highp_dmat4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, double, packed_highp > packed_highp_dmat4x2
 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, double, packed_highp > packed_highp_dmat4x3
 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, packed_highp > packed_highp_dmat4x4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, packed_highp > packed_highp_dvec1
 1 component vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 2, double, packed_highp > packed_highp_dvec2
 2 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 3, double, packed_highp > packed_highp_dvec3
 3 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 4, double, packed_highp > packed_highp_dvec4
 4 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, int, packed_highp > packed_highp_ivec1
 1 component vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 2, int, packed_highp > packed_highp_ivec2
 2 components vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 3, int, packed_highp > packed_highp_ivec3
 3 components vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 4, int, packed_highp > packed_highp_ivec4
 4 components vector tightly packed in memory of signed integer numbers.
 
-typedef mat< 2, 2, float, packed_highp > packed_highp_mat2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, float, packed_highp > packed_highp_mat2x2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, float, packed_highp > packed_highp_mat2x3
 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, float, packed_highp > packed_highp_mat2x4
 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, packed_highp > packed_highp_mat3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, float, packed_highp > packed_highp_mat3x2
 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, packed_highp > packed_highp_mat3x3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, float, packed_highp > packed_highp_mat3x4
 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, packed_highp > packed_highp_mat4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, float, packed_highp > packed_highp_mat4x2
 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, float, packed_highp > packed_highp_mat4x3
 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, packed_highp > packed_highp_mat4x4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, uint, packed_highp > packed_highp_uvec1
 1 component vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 2, uint, packed_highp > packed_highp_uvec2
 2 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 3, uint, packed_highp > packed_highp_uvec3
 3 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 4, uint, packed_highp > packed_highp_uvec4
 4 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 1, float, packed_highp > packed_highp_vec1
 1 component vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 2, float, packed_highp > packed_highp_vec2
 2 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 3, float, packed_highp > packed_highp_vec3
 3 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 4, float, packed_highp > packed_highp_vec4
 4 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef packed_highp_ivec1 packed_ivec1
 1 component vector tightly packed in memory of signed integer numbers.
 
-typedef packed_highp_ivec2 packed_ivec2
 2 components vector tightly packed in memory of signed integer numbers.
 
-typedef packed_highp_ivec3 packed_ivec3
 3 components vector tightly packed in memory of signed integer numbers.
 
-typedef packed_highp_ivec4 packed_ivec4
 4 components vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 1, bool, packed_lowp > packed_lowp_bvec1
 1 component vector tightly packed in memory of bool values.
 
-typedef vec< 2, bool, packed_lowp > packed_lowp_bvec2
 2 components vector tightly packed in memory of bool values.
 
-typedef vec< 3, bool, packed_lowp > packed_lowp_bvec3
 3 components vector tightly packed in memory of bool values.
 
-typedef vec< 4, bool, packed_lowp > packed_lowp_bvec4
 4 components vector tightly packed in memory of bool values.
 
-typedef mat< 2, 2, double, packed_lowp > packed_lowp_dmat2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, double, packed_lowp > packed_lowp_dmat2x2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, double, packed_lowp > packed_lowp_dmat2x3
 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, double, packed_lowp > packed_lowp_dmat2x4
 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, packed_lowp > packed_lowp_dmat3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, double, packed_lowp > packed_lowp_dmat3x2
 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, packed_lowp > packed_lowp_dmat3x3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, double, packed_lowp > packed_lowp_dmat3x4
 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, packed_lowp > packed_lowp_dmat4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, double, packed_lowp > packed_lowp_dmat4x2
 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, double, packed_lowp > packed_lowp_dmat4x3
 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, packed_lowp > packed_lowp_dmat4x4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, packed_lowp > packed_lowp_dvec1
 1 component vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 2, double, packed_lowp > packed_lowp_dvec2
 2 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 3, double, packed_lowp > packed_lowp_dvec3
 3 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 4, double, packed_lowp > packed_lowp_dvec4
 4 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, int, packed_lowp > packed_lowp_ivec1
 1 component vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 2, int, packed_lowp > packed_lowp_ivec2
 2 components vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 3, int, packed_lowp > packed_lowp_ivec3
 3 components vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 4, int, packed_lowp > packed_lowp_ivec4
 4 components vector tightly packed in memory of signed integer numbers.
 
-typedef mat< 2, 2, float, packed_lowp > packed_lowp_mat2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, float, packed_lowp > packed_lowp_mat2x2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, float, packed_lowp > packed_lowp_mat2x3
 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, float, packed_lowp > packed_lowp_mat2x4
 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, packed_lowp > packed_lowp_mat3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, float, packed_lowp > packed_lowp_mat3x2
 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, packed_lowp > packed_lowp_mat3x3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, float, packed_lowp > packed_lowp_mat3x4
 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, packed_lowp > packed_lowp_mat4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, float, packed_lowp > packed_lowp_mat4x2
 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, float, packed_lowp > packed_lowp_mat4x3
 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, packed_lowp > packed_lowp_mat4x4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, uint, packed_lowp > packed_lowp_uvec1
 1 component vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 2, uint, packed_lowp > packed_lowp_uvec2
 2 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 3, uint, packed_lowp > packed_lowp_uvec3
 3 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 4, uint, packed_lowp > packed_lowp_uvec4
 4 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 1, float, packed_lowp > packed_lowp_vec1
 1 component vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 2, float, packed_lowp > packed_lowp_vec2
 2 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 3, float, packed_lowp > packed_lowp_vec3
 3 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 4, float, packed_lowp > packed_lowp_vec4
 4 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef packed_highp_mat2 packed_mat2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat2x2 packed_mat2x2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat2x3 packed_mat2x3
 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat2x4 packed_mat2x4
 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat3 packed_mat3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat3x2 packed_mat3x2
 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat3x3 packed_mat3x3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat3x4 packed_mat3x4
 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat4 packed_mat4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat4x2 packed_mat4x2
 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat4x3 packed_mat4x3
 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat4x4 packed_mat4x4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef vec< 1, bool, packed_mediump > packed_mediump_bvec1
 1 component vector tightly packed in memory of bool values.
 
-typedef vec< 2, bool, packed_mediump > packed_mediump_bvec2
 2 components vector tightly packed in memory of bool values.
 
-typedef vec< 3, bool, packed_mediump > packed_mediump_bvec3
 3 components vector tightly packed in memory of bool values.
 
-typedef vec< 4, bool, packed_mediump > packed_mediump_bvec4
 4 components vector tightly packed in memory of bool values.
 
-typedef mat< 2, 2, double, packed_mediump > packed_mediump_dmat2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, double, packed_mediump > packed_mediump_dmat2x2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, double, packed_mediump > packed_mediump_dmat2x3
 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, double, packed_mediump > packed_mediump_dmat2x4
 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, packed_mediump > packed_mediump_dmat3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, double, packed_mediump > packed_mediump_dmat3x2
 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, packed_mediump > packed_mediump_dmat3x3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, double, packed_mediump > packed_mediump_dmat3x4
 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, packed_mediump > packed_mediump_dmat4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, double, packed_mediump > packed_mediump_dmat4x2
 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, double, packed_mediump > packed_mediump_dmat4x3
 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, packed_mediump > packed_mediump_dmat4x4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, packed_mediump > packed_mediump_dvec1
 1 component vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 2, double, packed_mediump > packed_mediump_dvec2
 2 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 3, double, packed_mediump > packed_mediump_dvec3
 3 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 4, double, packed_mediump > packed_mediump_dvec4
 4 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 1, int, packed_mediump > packed_mediump_ivec1
 1 component vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 2, int, packed_mediump > packed_mediump_ivec2
 2 components vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 3, int, packed_mediump > packed_mediump_ivec3
 3 components vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 4, int, packed_mediump > packed_mediump_ivec4
 4 components vector tightly packed in memory of signed integer numbers.
 
-typedef mat< 2, 2, float, packed_mediump > packed_mediump_mat2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, float, packed_mediump > packed_mediump_mat2x2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, float, packed_mediump > packed_mediump_mat2x3
 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, float, packed_mediump > packed_mediump_mat2x4
 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, packed_mediump > packed_mediump_mat3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, float, packed_mediump > packed_mediump_mat3x2
 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, packed_mediump > packed_mediump_mat3x3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, float, packed_mediump > packed_mediump_mat3x4
 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, packed_mediump > packed_mediump_mat4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, float, packed_mediump > packed_mediump_mat4x2
 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, float, packed_mediump > packed_mediump_mat4x3
 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, packed_mediump > packed_mediump_mat4x4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 1, uint, packed_mediump > packed_mediump_uvec1
 1 component vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 2, uint, packed_mediump > packed_mediump_uvec2
 2 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 3, uint, packed_mediump > packed_mediump_uvec3
 3 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 4, uint, packed_mediump > packed_mediump_uvec4
 4 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 1, float, packed_mediump > packed_mediump_vec1
 1 component vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 2, float, packed_mediump > packed_mediump_vec2
 2 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 3, float, packed_mediump > packed_mediump_vec3
 3 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 4, float, packed_mediump > packed_mediump_vec4
 4 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef packed_highp_uvec1 packed_uvec1
 1 component vector tightly packed in memory of unsigned integer numbers.
 
-typedef packed_highp_uvec2 packed_uvec2
 2 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef packed_highp_uvec3 packed_uvec3
 3 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef packed_highp_uvec4 packed_uvec4
 4 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef packed_highp_vec1 packed_vec1
 1 component vector tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_vec2 packed_vec2
 2 components vector tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_vec3 packed_vec3
 3 components vector tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_vec4 packed_vec4
 4 components vector tightly packed in memory of single-precision floating-point numbers.
 
-

Detailed Description

-

GLM_GTC_type_aligned

-
See also
Core features (dependence)
- -

Definition in file gtc/type_aligned.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00161_source.html b/tests/OpenGL/package/glm/doc/api/a00161_source.html deleted file mode 100644 index e3fac6e1..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00161_source.html +++ /dev/null @@ -1,1401 +0,0 @@ - - - - - - -0.9.9 API documentation: type_aligned.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
gtc/type_aligned.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 #if (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE)
-
16 # error "GLM: Aligned gentypes require to enable C++ language extensions. Define GLM_FORCE_ALIGNED_GENTYPES before including GLM headers to use aligned types."
-
17 #endif
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # pragma message("GLM: GLM_GTC_type_aligned extension included")
-
21 #endif
-
22 
-
23 #include "../mat4x4.hpp"
-
24 #include "../mat4x3.hpp"
-
25 #include "../mat4x2.hpp"
-
26 #include "../mat3x4.hpp"
-
27 #include "../mat3x3.hpp"
-
28 #include "../mat3x2.hpp"
-
29 #include "../mat2x4.hpp"
-
30 #include "../mat2x3.hpp"
-
31 #include "../mat2x2.hpp"
-
32 #include "../gtc/vec1.hpp"
-
33 #include "../vec2.hpp"
-
34 #include "../vec3.hpp"
-
35 #include "../vec4.hpp"
-
36 
-
37 namespace glm
-
38 {
-
41 
-
42  // -- *vec1 --
-
43 
-
45  typedef vec<1, float, aligned_highp> aligned_highp_vec1;
-
46 
-
48  typedef vec<1, float, aligned_mediump> aligned_mediump_vec1;
-
49 
-
51  typedef vec<1, float, aligned_lowp> aligned_lowp_vec1;
-
52 
-
54  typedef vec<1, double, aligned_highp> aligned_highp_dvec1;
-
55 
-
57  typedef vec<1, double, aligned_mediump> aligned_mediump_dvec1;
-
58 
-
60  typedef vec<1, double, aligned_lowp> aligned_lowp_dvec1;
-
61 
-
63  typedef vec<1, int, aligned_highp> aligned_highp_ivec1;
-
64 
-
66  typedef vec<1, int, aligned_mediump> aligned_mediump_ivec1;
-
67 
-
69  typedef vec<1, int, aligned_lowp> aligned_lowp_ivec1;
-
70 
-
72  typedef vec<1, uint, aligned_highp> aligned_highp_uvec1;
-
73 
-
75  typedef vec<1, uint, aligned_mediump> aligned_mediump_uvec1;
-
76 
-
78  typedef vec<1, uint, aligned_lowp> aligned_lowp_uvec1;
-
79 
-
81  typedef vec<1, bool, aligned_highp> aligned_highp_bvec1;
-
82 
-
84  typedef vec<1, bool, aligned_mediump> aligned_mediump_bvec1;
-
85 
-
87  typedef vec<1, bool, aligned_lowp> aligned_lowp_bvec1;
-
88 
-
90  typedef vec<1, float, packed_highp> packed_highp_vec1;
-
91 
-
93  typedef vec<1, float, packed_mediump> packed_mediump_vec1;
-
94 
-
96  typedef vec<1, float, packed_lowp> packed_lowp_vec1;
-
97 
-
99  typedef vec<1, double, packed_highp> packed_highp_dvec1;
-
100 
-
102  typedef vec<1, double, packed_mediump> packed_mediump_dvec1;
-
103 
-
105  typedef vec<1, double, packed_lowp> packed_lowp_dvec1;
-
106 
-
108  typedef vec<1, int, packed_highp> packed_highp_ivec1;
-
109 
-
111  typedef vec<1, int, packed_mediump> packed_mediump_ivec1;
-
112 
-
114  typedef vec<1, int, packed_lowp> packed_lowp_ivec1;
-
115 
-
117  typedef vec<1, uint, packed_highp> packed_highp_uvec1;
-
118 
-
120  typedef vec<1, uint, packed_mediump> packed_mediump_uvec1;
-
121 
-
123  typedef vec<1, uint, packed_lowp> packed_lowp_uvec1;
-
124 
-
126  typedef vec<1, bool, packed_highp> packed_highp_bvec1;
-
127 
-
129  typedef vec<1, bool, packed_mediump> packed_mediump_bvec1;
-
130 
-
132  typedef vec<1, bool, packed_lowp> packed_lowp_bvec1;
-
133 
-
134  // -- *vec2 --
-
135 
-
137  typedef vec<2, float, aligned_highp> aligned_highp_vec2;
-
138 
-
140  typedef vec<2, float, aligned_mediump> aligned_mediump_vec2;
-
141 
-
143  typedef vec<2, float, aligned_lowp> aligned_lowp_vec2;
-
144 
-
146  typedef vec<2, double, aligned_highp> aligned_highp_dvec2;
-
147 
-
149  typedef vec<2, double, aligned_mediump> aligned_mediump_dvec2;
-
150 
-
152  typedef vec<2, double, aligned_lowp> aligned_lowp_dvec2;
-
153 
-
155  typedef vec<2, int, aligned_highp> aligned_highp_ivec2;
-
156 
-
158  typedef vec<2, int, aligned_mediump> aligned_mediump_ivec2;
-
159 
-
161  typedef vec<2, int, aligned_lowp> aligned_lowp_ivec2;
-
162 
-
164  typedef vec<2, uint, aligned_highp> aligned_highp_uvec2;
-
165 
-
167  typedef vec<2, uint, aligned_mediump> aligned_mediump_uvec2;
-
168 
-
170  typedef vec<2, uint, aligned_lowp> aligned_lowp_uvec2;
-
171 
-
173  typedef vec<2, bool, aligned_highp> aligned_highp_bvec2;
-
174 
-
176  typedef vec<2, bool, aligned_mediump> aligned_mediump_bvec2;
-
177 
-
179  typedef vec<2, bool, aligned_lowp> aligned_lowp_bvec2;
-
180 
-
182  typedef vec<2, float, packed_highp> packed_highp_vec2;
-
183 
-
185  typedef vec<2, float, packed_mediump> packed_mediump_vec2;
-
186 
-
188  typedef vec<2, float, packed_lowp> packed_lowp_vec2;
-
189 
-
191  typedef vec<2, double, packed_highp> packed_highp_dvec2;
-
192 
-
194  typedef vec<2, double, packed_mediump> packed_mediump_dvec2;
-
195 
-
197  typedef vec<2, double, packed_lowp> packed_lowp_dvec2;
-
198 
-
200  typedef vec<2, int, packed_highp> packed_highp_ivec2;
-
201 
-
203  typedef vec<2, int, packed_mediump> packed_mediump_ivec2;
-
204 
-
206  typedef vec<2, int, packed_lowp> packed_lowp_ivec2;
-
207 
-
209  typedef vec<2, uint, packed_highp> packed_highp_uvec2;
-
210 
-
212  typedef vec<2, uint, packed_mediump> packed_mediump_uvec2;
-
213 
-
215  typedef vec<2, uint, packed_lowp> packed_lowp_uvec2;
-
216 
-
218  typedef vec<2, bool, packed_highp> packed_highp_bvec2;
-
219 
-
221  typedef vec<2, bool, packed_mediump> packed_mediump_bvec2;
-
222 
-
224  typedef vec<2, bool, packed_lowp> packed_lowp_bvec2;
-
225 
-
226  // -- *vec3 --
-
227 
-
229  typedef vec<3, float, aligned_highp> aligned_highp_vec3;
-
230 
-
232  typedef vec<3, float, aligned_mediump> aligned_mediump_vec3;
-
233 
-
235  typedef vec<3, float, aligned_lowp> aligned_lowp_vec3;
-
236 
-
238  typedef vec<3, double, aligned_highp> aligned_highp_dvec3;
-
239 
-
241  typedef vec<3, double, aligned_mediump> aligned_mediump_dvec3;
-
242 
-
244  typedef vec<3, double, aligned_lowp> aligned_lowp_dvec3;
-
245 
-
247  typedef vec<3, int, aligned_highp> aligned_highp_ivec3;
-
248 
-
250  typedef vec<3, int, aligned_mediump> aligned_mediump_ivec3;
-
251 
-
253  typedef vec<3, int, aligned_lowp> aligned_lowp_ivec3;
-
254 
-
256  typedef vec<3, uint, aligned_highp> aligned_highp_uvec3;
-
257 
-
259  typedef vec<3, uint, aligned_mediump> aligned_mediump_uvec3;
-
260 
-
262  typedef vec<3, uint, aligned_lowp> aligned_lowp_uvec3;
-
263 
-
265  typedef vec<3, bool, aligned_highp> aligned_highp_bvec3;
-
266 
-
268  typedef vec<3, bool, aligned_mediump> aligned_mediump_bvec3;
-
269 
-
271  typedef vec<3, bool, aligned_lowp> aligned_lowp_bvec3;
-
272 
-
274  typedef vec<3, float, packed_highp> packed_highp_vec3;
-
275 
-
277  typedef vec<3, float, packed_mediump> packed_mediump_vec3;
-
278 
-
280  typedef vec<3, float, packed_lowp> packed_lowp_vec3;
-
281 
-
283  typedef vec<3, double, packed_highp> packed_highp_dvec3;
-
284 
-
286  typedef vec<3, double, packed_mediump> packed_mediump_dvec3;
-
287 
-
289  typedef vec<3, double, packed_lowp> packed_lowp_dvec3;
-
290 
-
292  typedef vec<3, int, packed_highp> packed_highp_ivec3;
-
293 
-
295  typedef vec<3, int, packed_mediump> packed_mediump_ivec3;
-
296 
-
298  typedef vec<3, int, packed_lowp> packed_lowp_ivec3;
-
299 
-
301  typedef vec<3, uint, packed_highp> packed_highp_uvec3;
-
302 
-
304  typedef vec<3, uint, packed_mediump> packed_mediump_uvec3;
-
305 
-
307  typedef vec<3, uint, packed_lowp> packed_lowp_uvec3;
-
308 
-
310  typedef vec<3, bool, packed_highp> packed_highp_bvec3;
-
311 
-
313  typedef vec<3, bool, packed_mediump> packed_mediump_bvec3;
-
314 
-
316  typedef vec<3, bool, packed_lowp> packed_lowp_bvec3;
-
317 
-
318  // -- *vec4 --
-
319 
-
321  typedef vec<4, float, aligned_highp> aligned_highp_vec4;
-
322 
-
324  typedef vec<4, float, aligned_mediump> aligned_mediump_vec4;
-
325 
-
327  typedef vec<4, float, aligned_lowp> aligned_lowp_vec4;
-
328 
-
330  typedef vec<4, double, aligned_highp> aligned_highp_dvec4;
-
331 
-
333  typedef vec<4, double, aligned_mediump> aligned_mediump_dvec4;
-
334 
-
336  typedef vec<4, double, aligned_lowp> aligned_lowp_dvec4;
-
337 
-
339  typedef vec<4, int, aligned_highp> aligned_highp_ivec4;
-
340 
-
342  typedef vec<4, int, aligned_mediump> aligned_mediump_ivec4;
-
343 
-
345  typedef vec<4, int, aligned_lowp> aligned_lowp_ivec4;
-
346 
-
348  typedef vec<4, uint, aligned_highp> aligned_highp_uvec4;
-
349 
-
351  typedef vec<4, uint, aligned_mediump> aligned_mediump_uvec4;
-
352 
-
354  typedef vec<4, uint, aligned_lowp> aligned_lowp_uvec4;
-
355 
-
357  typedef vec<4, bool, aligned_highp> aligned_highp_bvec4;
-
358 
-
360  typedef vec<4, bool, aligned_mediump> aligned_mediump_bvec4;
-
361 
-
363  typedef vec<4, bool, aligned_lowp> aligned_lowp_bvec4;
-
364 
-
366  typedef vec<4, float, packed_highp> packed_highp_vec4;
-
367 
-
369  typedef vec<4, float, packed_mediump> packed_mediump_vec4;
-
370 
-
372  typedef vec<4, float, packed_lowp> packed_lowp_vec4;
-
373 
-
375  typedef vec<4, double, packed_highp> packed_highp_dvec4;
-
376 
-
378  typedef vec<4, double, packed_mediump> packed_mediump_dvec4;
-
379 
-
381  typedef vec<4, double, packed_lowp> packed_lowp_dvec4;
-
382 
-
384  typedef vec<4, int, packed_highp> packed_highp_ivec4;
-
385 
-
387  typedef vec<4, int, packed_mediump> packed_mediump_ivec4;
-
388 
-
390  typedef vec<4, int, packed_lowp> packed_lowp_ivec4;
-
391 
-
393  typedef vec<4, uint, packed_highp> packed_highp_uvec4;
-
394 
-
396  typedef vec<4, uint, packed_mediump> packed_mediump_uvec4;
-
397 
-
399  typedef vec<4, uint, packed_lowp> packed_lowp_uvec4;
-
400 
-
402  typedef vec<4, bool, packed_highp> packed_highp_bvec4;
-
403 
-
405  typedef vec<4, bool, packed_mediump> packed_mediump_bvec4;
-
406 
-
408  typedef vec<4, bool, packed_lowp> packed_lowp_bvec4;
-
409 
-
410  // -- *mat2 --
-
411 
-
413  typedef mat<2, 2, float, aligned_highp> aligned_highp_mat2;
-
414 
-
416  typedef mat<2, 2, float, aligned_mediump> aligned_mediump_mat2;
-
417 
-
419  typedef mat<2, 2, float, aligned_lowp> aligned_lowp_mat2;
-
420 
-
422  typedef mat<2, 2, double, aligned_highp> aligned_highp_dmat2;
-
423 
-
425  typedef mat<2, 2, double, aligned_mediump> aligned_mediump_dmat2;
-
426 
-
428  typedef mat<2, 2, double, aligned_lowp> aligned_lowp_dmat2;
-
429 
-
431  typedef mat<2, 2, float, packed_highp> packed_highp_mat2;
-
432 
-
434  typedef mat<2, 2, float, packed_mediump> packed_mediump_mat2;
-
435 
-
437  typedef mat<2, 2, float, packed_lowp> packed_lowp_mat2;
-
438 
-
440  typedef mat<2, 2, double, packed_highp> packed_highp_dmat2;
-
441 
-
443  typedef mat<2, 2, double, packed_mediump> packed_mediump_dmat2;
-
444 
-
446  typedef mat<2, 2, double, packed_lowp> packed_lowp_dmat2;
-
447 
-
448  // -- *mat3 --
-
449 
-
451  typedef mat<3, 3, float, aligned_highp> aligned_highp_mat3;
-
452 
-
454  typedef mat<3, 3, float, aligned_mediump> aligned_mediump_mat3;
-
455 
-
457  typedef mat<3, 3, float, aligned_lowp> aligned_lowp_mat3;
-
458 
-
460  typedef mat<3, 3, double, aligned_highp> aligned_highp_dmat3;
-
461 
-
463  typedef mat<3, 3, double, aligned_mediump> aligned_mediump_dmat3;
-
464 
-
466  typedef mat<3, 3, double, aligned_lowp> aligned_lowp_dmat3;
-
467 
-
469  typedef mat<3, 3, float, packed_highp> packed_highp_mat3;
-
470 
-
472  typedef mat<3, 3, float, packed_mediump> packed_mediump_mat3;
-
473 
-
475  typedef mat<3, 3, float, packed_lowp> packed_lowp_mat3;
-
476 
-
478  typedef mat<3, 3, double, packed_highp> packed_highp_dmat3;
-
479 
-
481  typedef mat<3, 3, double, packed_mediump> packed_mediump_dmat3;
-
482 
-
484  typedef mat<3, 3, double, packed_lowp> packed_lowp_dmat3;
-
485 
-
486  // -- *mat4 --
-
487 
-
489  typedef mat<4, 4, float, aligned_highp> aligned_highp_mat4;
-
490 
-
492  typedef mat<4, 4, float, aligned_mediump> aligned_mediump_mat4;
-
493 
-
495  typedef mat<4, 4, float, aligned_lowp> aligned_lowp_mat4;
-
496 
-
498  typedef mat<4, 4, double, aligned_highp> aligned_highp_dmat4;
-
499 
-
501  typedef mat<4, 4, double, aligned_mediump> aligned_mediump_dmat4;
-
502 
-
504  typedef mat<4, 4, double, aligned_lowp> aligned_lowp_dmat4;
-
505 
-
507  typedef mat<4, 4, float, packed_highp> packed_highp_mat4;
-
508 
-
510  typedef mat<4, 4, float, packed_mediump> packed_mediump_mat4;
-
511 
-
513  typedef mat<4, 4, float, packed_lowp> packed_lowp_mat4;
-
514 
-
516  typedef mat<4, 4, double, packed_highp> packed_highp_dmat4;
-
517 
-
519  typedef mat<4, 4, double, packed_mediump> packed_mediump_dmat4;
-
520 
-
522  typedef mat<4, 4, double, packed_lowp> packed_lowp_dmat4;
-
523 
-
524  // -- *mat2x2 --
-
525 
-
527  typedef mat<2, 2, float, aligned_highp> aligned_highp_mat2x2;
-
528 
-
530  typedef mat<2, 2, float, aligned_mediump> aligned_mediump_mat2x2;
-
531 
-
533  typedef mat<2, 2, float, aligned_lowp> aligned_lowp_mat2x2;
-
534 
-
536  typedef mat<2, 2, double, aligned_highp> aligned_highp_dmat2x2;
-
537 
-
539  typedef mat<2, 2, double, aligned_mediump> aligned_mediump_dmat2x2;
-
540 
-
542  typedef mat<2, 2, double, aligned_lowp> aligned_lowp_dmat2x2;
-
543 
-
545  typedef mat<2, 2, float, packed_highp> packed_highp_mat2x2;
-
546 
-
548  typedef mat<2, 2, float, packed_mediump> packed_mediump_mat2x2;
-
549 
-
551  typedef mat<2, 2, float, packed_lowp> packed_lowp_mat2x2;
-
552 
-
554  typedef mat<2, 2, double, packed_highp> packed_highp_dmat2x2;
-
555 
-
557  typedef mat<2, 2, double, packed_mediump> packed_mediump_dmat2x2;
-
558 
-
560  typedef mat<2, 2, double, packed_lowp> packed_lowp_dmat2x2;
-
561 
-
562  // -- *mat2x3 --
-
563 
-
565  typedef mat<2, 3, float, aligned_highp> aligned_highp_mat2x3;
-
566 
-
568  typedef mat<2, 3, float, aligned_mediump> aligned_mediump_mat2x3;
-
569 
-
571  typedef mat<2, 3, float, aligned_lowp> aligned_lowp_mat2x3;
-
572 
-
574  typedef mat<2, 3, double, aligned_highp> aligned_highp_dmat2x3;
-
575 
-
577  typedef mat<2, 3, double, aligned_mediump> aligned_mediump_dmat2x3;
-
578 
-
580  typedef mat<2, 3, double, aligned_lowp> aligned_lowp_dmat2x3;
-
581 
-
583  typedef mat<2, 3, float, packed_highp> packed_highp_mat2x3;
-
584 
-
586  typedef mat<2, 3, float, packed_mediump> packed_mediump_mat2x3;
-
587 
-
589  typedef mat<2, 3, float, packed_lowp> packed_lowp_mat2x3;
-
590 
-
592  typedef mat<2, 3, double, packed_highp> packed_highp_dmat2x3;
-
593 
-
595  typedef mat<2, 3, double, packed_mediump> packed_mediump_dmat2x3;
-
596 
-
598  typedef mat<2, 3, double, packed_lowp> packed_lowp_dmat2x3;
-
599 
-
600  // -- *mat2x4 --
-
601 
-
603  typedef mat<2, 4, float, aligned_highp> aligned_highp_mat2x4;
-
604 
-
606  typedef mat<2, 4, float, aligned_mediump> aligned_mediump_mat2x4;
-
607 
-
609  typedef mat<2, 4, float, aligned_lowp> aligned_lowp_mat2x4;
-
610 
-
612  typedef mat<2, 4, double, aligned_highp> aligned_highp_dmat2x4;
-
613 
-
615  typedef mat<2, 4, double, aligned_mediump> aligned_mediump_dmat2x4;
-
616 
-
618  typedef mat<2, 4, double, aligned_lowp> aligned_lowp_dmat2x4;
-
619 
-
621  typedef mat<2, 4, float, packed_highp> packed_highp_mat2x4;
-
622 
-
624  typedef mat<2, 4, float, packed_mediump> packed_mediump_mat2x4;
-
625 
-
627  typedef mat<2, 4, float, packed_lowp> packed_lowp_mat2x4;
-
628 
-
630  typedef mat<2, 4, double, packed_highp> packed_highp_dmat2x4;
-
631 
-
633  typedef mat<2, 4, double, packed_mediump> packed_mediump_dmat2x4;
-
634 
-
636  typedef mat<2, 4, double, packed_lowp> packed_lowp_dmat2x4;
-
637 
-
638  // -- *mat3x2 --
-
639 
-
641  typedef mat<3, 2, float, aligned_highp> aligned_highp_mat3x2;
-
642 
-
644  typedef mat<3, 2, float, aligned_mediump> aligned_mediump_mat3x2;
-
645 
-
647  typedef mat<3, 2, float, aligned_lowp> aligned_lowp_mat3x2;
-
648 
-
650  typedef mat<3, 2, double, aligned_highp> aligned_highp_dmat3x2;
-
651 
-
653  typedef mat<3, 2, double, aligned_mediump> aligned_mediump_dmat3x2;
-
654 
-
656  typedef mat<3, 2, double, aligned_lowp> aligned_lowp_dmat3x2;
-
657 
-
659  typedef mat<3, 2, float, packed_highp> packed_highp_mat3x2;
-
660 
-
662  typedef mat<3, 2, float, packed_mediump> packed_mediump_mat3x2;
-
663 
-
665  typedef mat<3, 2, float, packed_lowp> packed_lowp_mat3x2;
-
666 
-
668  typedef mat<3, 2, double, packed_highp> packed_highp_dmat3x2;
-
669 
-
671  typedef mat<3, 2, double, packed_mediump> packed_mediump_dmat3x2;
-
672 
-
674  typedef mat<3, 2, double, packed_lowp> packed_lowp_dmat3x2;
-
675 
-
676  // -- *mat3x3 --
-
677 
-
679  typedef mat<3, 3, float, aligned_highp> aligned_highp_mat3x3;
-
680 
-
682  typedef mat<3, 3, float, aligned_mediump> aligned_mediump_mat3x3;
-
683 
-
685  typedef mat<3, 3, float, aligned_lowp> aligned_lowp_mat3x3;
-
686 
-
688  typedef mat<3, 3, double, aligned_highp> aligned_highp_dmat3x3;
-
689 
-
691  typedef mat<3, 3, double, aligned_mediump> aligned_mediump_dmat3x3;
-
692 
-
694  typedef mat<3, 3, double, aligned_lowp> aligned_lowp_dmat3x3;
-
695 
-
697  typedef mat<3, 3, float, packed_highp> packed_highp_mat3x3;
-
698 
-
700  typedef mat<3, 3, float, packed_mediump> packed_mediump_mat3x3;
-
701 
-
703  typedef mat<3, 3, float, packed_lowp> packed_lowp_mat3x3;
-
704 
-
706  typedef mat<3, 3, double, packed_highp> packed_highp_dmat3x3;
-
707 
-
709  typedef mat<3, 3, double, packed_mediump> packed_mediump_dmat3x3;
-
710 
-
712  typedef mat<3, 3, double, packed_lowp> packed_lowp_dmat3x3;
-
713 
-
714  // -- *mat3x4 --
-
715 
-
717  typedef mat<3, 4, float, aligned_highp> aligned_highp_mat3x4;
-
718 
-
720  typedef mat<3, 4, float, aligned_mediump> aligned_mediump_mat3x4;
-
721 
-
723  typedef mat<3, 4, float, aligned_lowp> aligned_lowp_mat3x4;
-
724 
-
726  typedef mat<3, 4, double, aligned_highp> aligned_highp_dmat3x4;
-
727 
-
729  typedef mat<3, 4, double, aligned_mediump> aligned_mediump_dmat3x4;
-
730 
-
732  typedef mat<3, 4, double, aligned_lowp> aligned_lowp_dmat3x4;
-
733 
-
735  typedef mat<3, 4, float, packed_highp> packed_highp_mat3x4;
-
736 
-
738  typedef mat<3, 4, float, packed_mediump> packed_mediump_mat3x4;
-
739 
-
741  typedef mat<3, 4, float, packed_lowp> packed_lowp_mat3x4;
-
742 
-
744  typedef mat<3, 4, double, packed_highp> packed_highp_dmat3x4;
-
745 
-
747  typedef mat<3, 4, double, packed_mediump> packed_mediump_dmat3x4;
-
748 
-
750  typedef mat<3, 4, double, packed_lowp> packed_lowp_dmat3x4;
-
751 
-
752  // -- *mat4x2 --
-
753 
-
755  typedef mat<4, 2, float, aligned_highp> aligned_highp_mat4x2;
-
756 
-
758  typedef mat<4, 2, float, aligned_mediump> aligned_mediump_mat4x2;
-
759 
-
761  typedef mat<4, 2, float, aligned_lowp> aligned_lowp_mat4x2;
-
762 
-
764  typedef mat<4, 2, double, aligned_highp> aligned_highp_dmat4x2;
-
765 
-
767  typedef mat<4, 2, double, aligned_mediump> aligned_mediump_dmat4x2;
-
768 
-
770  typedef mat<4, 2, double, aligned_lowp> aligned_lowp_dmat4x2;
-
771 
-
773  typedef mat<4, 2, float, packed_highp> packed_highp_mat4x2;
-
774 
-
776  typedef mat<4, 2, float, packed_mediump> packed_mediump_mat4x2;
-
777 
-
779  typedef mat<4, 2, float, packed_lowp> packed_lowp_mat4x2;
-
780 
-
782  typedef mat<4, 2, double, packed_highp> packed_highp_dmat4x2;
-
783 
-
785  typedef mat<4, 2, double, packed_mediump> packed_mediump_dmat4x2;
-
786 
-
788  typedef mat<4, 2, double, packed_lowp> packed_lowp_dmat4x2;
-
789 
-
790  // -- *mat4x3 --
-
791 
-
793  typedef mat<4, 3, float, aligned_highp> aligned_highp_mat4x3;
-
794 
-
796  typedef mat<4, 3, float, aligned_mediump> aligned_mediump_mat4x3;
-
797 
-
799  typedef mat<4, 3, float, aligned_lowp> aligned_lowp_mat4x3;
-
800 
-
802  typedef mat<4, 3, double, aligned_highp> aligned_highp_dmat4x3;
-
803 
-
805  typedef mat<4, 3, double, aligned_mediump> aligned_mediump_dmat4x3;
-
806 
-
808  typedef mat<4, 3, double, aligned_lowp> aligned_lowp_dmat4x3;
-
809 
-
811  typedef mat<4, 3, float, packed_highp> packed_highp_mat4x3;
-
812 
-
814  typedef mat<4, 3, float, packed_mediump> packed_mediump_mat4x3;
-
815 
-
817  typedef mat<4, 3, float, packed_lowp> packed_lowp_mat4x3;
-
818 
-
820  typedef mat<4, 3, double, packed_highp> packed_highp_dmat4x3;
-
821 
-
823  typedef mat<4, 3, double, packed_mediump> packed_mediump_dmat4x3;
-
824 
-
826  typedef mat<4, 3, double, packed_lowp> packed_lowp_dmat4x3;
-
827 
-
828  // -- *mat4x4 --
-
829 
-
831  typedef mat<4, 4, float, aligned_highp> aligned_highp_mat4x4;
-
832 
-
834  typedef mat<4, 4, float, aligned_mediump> aligned_mediump_mat4x4;
-
835 
-
837  typedef mat<4, 4, float, aligned_lowp> aligned_lowp_mat4x4;
-
838 
-
840  typedef mat<4, 4, double, aligned_highp> aligned_highp_dmat4x4;
-
841 
-
843  typedef mat<4, 4, double, aligned_mediump> aligned_mediump_dmat4x4;
-
844 
-
846  typedef mat<4, 4, double, aligned_lowp> aligned_lowp_dmat4x4;
-
847 
-
849  typedef mat<4, 4, float, packed_highp> packed_highp_mat4x4;
-
850 
-
852  typedef mat<4, 4, float, packed_mediump> packed_mediump_mat4x4;
-
853 
-
855  typedef mat<4, 4, float, packed_lowp> packed_lowp_mat4x4;
-
856 
-
858  typedef mat<4, 4, double, packed_highp> packed_highp_dmat4x4;
-
859 
-
861  typedef mat<4, 4, double, packed_mediump> packed_mediump_dmat4x4;
-
862 
-
864  typedef mat<4, 4, double, packed_lowp> packed_lowp_dmat4x4;
-
865 
-
866  // -- default --
-
867 
-
868 #if(defined(GLM_PRECISION_LOWP_FLOAT))
-
869  typedef aligned_lowp_vec1 aligned_vec1;
-
870  typedef aligned_lowp_vec2 aligned_vec2;
-
871  typedef aligned_lowp_vec3 aligned_vec3;
-
872  typedef aligned_lowp_vec4 aligned_vec4;
-
873  typedef packed_lowp_vec1 packed_vec1;
-
874  typedef packed_lowp_vec2 packed_vec2;
-
875  typedef packed_lowp_vec3 packed_vec3;
-
876  typedef packed_lowp_vec4 packed_vec4;
-
877 
-
878  typedef aligned_lowp_mat2 aligned_mat2;
-
879  typedef aligned_lowp_mat3 aligned_mat3;
-
880  typedef aligned_lowp_mat4 aligned_mat4;
-
881  typedef packed_lowp_mat2 packed_mat2;
-
882  typedef packed_lowp_mat3 packed_mat3;
-
883  typedef packed_lowp_mat4 packed_mat4;
-
884 
-
885  typedef aligned_lowp_mat2x2 aligned_mat2x2;
-
886  typedef aligned_lowp_mat2x3 aligned_mat2x3;
-
887  typedef aligned_lowp_mat2x4 aligned_mat2x4;
-
888  typedef aligned_lowp_mat3x2 aligned_mat3x2;
-
889  typedef aligned_lowp_mat3x3 aligned_mat3x3;
-
890  typedef aligned_lowp_mat3x4 aligned_mat3x4;
-
891  typedef aligned_lowp_mat4x2 aligned_mat4x2;
-
892  typedef aligned_lowp_mat4x3 aligned_mat4x3;
-
893  typedef aligned_lowp_mat4x4 aligned_mat4x4;
-
894  typedef packed_lowp_mat2x2 packed_mat2x2;
-
895  typedef packed_lowp_mat2x3 packed_mat2x3;
-
896  typedef packed_lowp_mat2x4 packed_mat2x4;
-
897  typedef packed_lowp_mat3x2 packed_mat3x2;
-
898  typedef packed_lowp_mat3x3 packed_mat3x3;
-
899  typedef packed_lowp_mat3x4 packed_mat3x4;
-
900  typedef packed_lowp_mat4x2 packed_mat4x2;
-
901  typedef packed_lowp_mat4x3 packed_mat4x3;
-
902  typedef packed_lowp_mat4x4 packed_mat4x4;
-
903 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
-
904  typedef aligned_mediump_vec1 aligned_vec1;
-
905  typedef aligned_mediump_vec2 aligned_vec2;
-
906  typedef aligned_mediump_vec3 aligned_vec3;
-
907  typedef aligned_mediump_vec4 aligned_vec4;
-
908  typedef packed_mediump_vec1 packed_vec1;
-
909  typedef packed_mediump_vec2 packed_vec2;
-
910  typedef packed_mediump_vec3 packed_vec3;
-
911  typedef packed_mediump_vec4 packed_vec4;
-
912 
-
913  typedef aligned_mediump_mat2 aligned_mat2;
-
914  typedef aligned_mediump_mat3 aligned_mat3;
-
915  typedef aligned_mediump_mat4 aligned_mat4;
-
916  typedef packed_mediump_mat2 packed_mat2;
-
917  typedef packed_mediump_mat3 packed_mat3;
-
918  typedef packed_mediump_mat4 packed_mat4;
-
919 
-
920  typedef aligned_mediump_mat2x2 aligned_mat2x2;
-
921  typedef aligned_mediump_mat2x3 aligned_mat2x3;
-
922  typedef aligned_mediump_mat2x4 aligned_mat2x4;
-
923  typedef aligned_mediump_mat3x2 aligned_mat3x2;
-
924  typedef aligned_mediump_mat3x3 aligned_mat3x3;
-
925  typedef aligned_mediump_mat3x4 aligned_mat3x4;
-
926  typedef aligned_mediump_mat4x2 aligned_mat4x2;
-
927  typedef aligned_mediump_mat4x3 aligned_mat4x3;
-
928  typedef aligned_mediump_mat4x4 aligned_mat4x4;
-
929  typedef packed_mediump_mat2x2 packed_mat2x2;
-
930  typedef packed_mediump_mat2x3 packed_mat2x3;
-
931  typedef packed_mediump_mat2x4 packed_mat2x4;
-
932  typedef packed_mediump_mat3x2 packed_mat3x2;
-
933  typedef packed_mediump_mat3x3 packed_mat3x3;
-
934  typedef packed_mediump_mat3x4 packed_mat3x4;
-
935  typedef packed_mediump_mat4x2 packed_mat4x2;
-
936  typedef packed_mediump_mat4x3 packed_mat4x3;
-
937  typedef packed_mediump_mat4x4 packed_mat4x4;
-
938 #else //defined(GLM_PRECISION_HIGHP_FLOAT)
-
939  typedef aligned_highp_vec1 aligned_vec1;
-
941 
-
943  typedef aligned_highp_vec2 aligned_vec2;
-
944 
-
946  typedef aligned_highp_vec3 aligned_vec3;
-
947 
-
949  typedef aligned_highp_vec4 aligned_vec4;
-
950 
-
952  typedef packed_highp_vec1 packed_vec1;
-
953 
-
955  typedef packed_highp_vec2 packed_vec2;
-
956 
-
958  typedef packed_highp_vec3 packed_vec3;
-
959 
-
961  typedef packed_highp_vec4 packed_vec4;
-
962 
-
964  typedef aligned_highp_mat2 aligned_mat2;
-
965 
-
967  typedef aligned_highp_mat3 aligned_mat3;
-
968 
-
970  typedef aligned_highp_mat4 aligned_mat4;
-
971 
-
973  typedef packed_highp_mat2 packed_mat2;
-
974 
-
976  typedef packed_highp_mat3 packed_mat3;
-
977 
-
979  typedef packed_highp_mat4 packed_mat4;
-
980 
-
982  typedef aligned_highp_mat2x2 aligned_mat2x2;
-
983 
-
985  typedef aligned_highp_mat2x3 aligned_mat2x3;
-
986 
-
988  typedef aligned_highp_mat2x4 aligned_mat2x4;
-
989 
-
991  typedef aligned_highp_mat3x2 aligned_mat3x2;
-
992 
-
994  typedef aligned_highp_mat3x3 aligned_mat3x3;
-
995 
-
997  typedef aligned_highp_mat3x4 aligned_mat3x4;
-
998 
-
1000  typedef aligned_highp_mat4x2 aligned_mat4x2;
-
1001 
-
1003  typedef aligned_highp_mat4x3 aligned_mat4x3;
-
1004 
-
1006  typedef aligned_highp_mat4x4 aligned_mat4x4;
-
1007 
-
1009  typedef packed_highp_mat2x2 packed_mat2x2;
-
1010 
-
1012  typedef packed_highp_mat2x3 packed_mat2x3;
-
1013 
-
1015  typedef packed_highp_mat2x4 packed_mat2x4;
-
1016 
-
1018  typedef packed_highp_mat3x2 packed_mat3x2;
-
1019 
-
1021  typedef packed_highp_mat3x3 packed_mat3x3;
-
1022 
-
1024  typedef packed_highp_mat3x4 packed_mat3x4;
-
1025 
-
1027  typedef packed_highp_mat4x2 packed_mat4x2;
-
1028 
-
1030  typedef packed_highp_mat4x3 packed_mat4x3;
-
1031 
-
1033  typedef packed_highp_mat4x4 packed_mat4x4;
-
1034 #endif//GLM_PRECISION
-
1035 
-
1036 #if(defined(GLM_PRECISION_LOWP_DOUBLE))
-
1037  typedef aligned_lowp_dvec1 aligned_dvec1;
-
1038  typedef aligned_lowp_dvec2 aligned_dvec2;
-
1039  typedef aligned_lowp_dvec3 aligned_dvec3;
-
1040  typedef aligned_lowp_dvec4 aligned_dvec4;
-
1041  typedef packed_lowp_dvec1 packed_dvec1;
-
1042  typedef packed_lowp_dvec2 packed_dvec2;
-
1043  typedef packed_lowp_dvec3 packed_dvec3;
-
1044  typedef packed_lowp_dvec4 packed_dvec4;
-
1045 
-
1046  typedef aligned_lowp_dmat2 aligned_dmat2;
-
1047  typedef aligned_lowp_dmat3 aligned_dmat3;
-
1048  typedef aligned_lowp_dmat4 aligned_dmat4;
-
1049  typedef packed_lowp_dmat2 packed_dmat2;
-
1050  typedef packed_lowp_dmat3 packed_dmat3;
-
1051  typedef packed_lowp_dmat4 packed_dmat4;
-
1052 
-
1053  typedef aligned_lowp_dmat2x2 aligned_dmat2x2;
-
1054  typedef aligned_lowp_dmat2x3 aligned_dmat2x3;
-
1055  typedef aligned_lowp_dmat2x4 aligned_dmat2x4;
-
1056  typedef aligned_lowp_dmat3x2 aligned_dmat3x2;
-
1057  typedef aligned_lowp_dmat3x3 aligned_dmat3x3;
-
1058  typedef aligned_lowp_dmat3x4 aligned_dmat3x4;
-
1059  typedef aligned_lowp_dmat4x2 aligned_dmat4x2;
-
1060  typedef aligned_lowp_dmat4x3 aligned_dmat4x3;
-
1061  typedef aligned_lowp_dmat4x4 aligned_dmat4x4;
-
1062  typedef packed_lowp_dmat2x2 packed_dmat2x2;
-
1063  typedef packed_lowp_dmat2x3 packed_dmat2x3;
-
1064  typedef packed_lowp_dmat2x4 packed_dmat2x4;
-
1065  typedef packed_lowp_dmat3x2 packed_dmat3x2;
-
1066  typedef packed_lowp_dmat3x3 packed_dmat3x3;
-
1067  typedef packed_lowp_dmat3x4 packed_dmat3x4;
-
1068  typedef packed_lowp_dmat4x2 packed_dmat4x2;
-
1069  typedef packed_lowp_dmat4x3 packed_dmat4x3;
-
1070  typedef packed_lowp_dmat4x4 packed_dmat4x4;
-
1071 #elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
-
1072  typedef aligned_mediump_dvec1 aligned_dvec1;
-
1073  typedef aligned_mediump_dvec2 aligned_dvec2;
-
1074  typedef aligned_mediump_dvec3 aligned_dvec3;
-
1075  typedef aligned_mediump_dvec4 aligned_dvec4;
-
1076  typedef packed_mediump_dvec1 packed_dvec1;
-
1077  typedef packed_mediump_dvec2 packed_dvec2;
-
1078  typedef packed_mediump_dvec3 packed_dvec3;
-
1079  typedef packed_mediump_dvec4 packed_dvec4;
-
1080 
-
1081  typedef aligned_mediump_dmat2 aligned_dmat2;
-
1082  typedef aligned_mediump_dmat3 aligned_dmat3;
-
1083  typedef aligned_mediump_dmat4 aligned_dmat4;
-
1084  typedef packed_mediump_dmat2 packed_dmat2;
-
1085  typedef packed_mediump_dmat3 packed_dmat3;
-
1086  typedef packed_mediump_dmat4 packed_dmat4;
-
1087 
-
1088  typedef aligned_mediump_dmat2x2 aligned_dmat2x2;
-
1089  typedef aligned_mediump_dmat2x3 aligned_dmat2x3;
-
1090  typedef aligned_mediump_dmat2x4 aligned_dmat2x4;
-
1091  typedef aligned_mediump_dmat3x2 aligned_dmat3x2;
-
1092  typedef aligned_mediump_dmat3x3 aligned_dmat3x3;
-
1093  typedef aligned_mediump_dmat3x4 aligned_dmat3x4;
-
1094  typedef aligned_mediump_dmat4x2 aligned_dmat4x2;
-
1095  typedef aligned_mediump_dmat4x3 aligned_dmat4x3;
-
1096  typedef aligned_mediump_dmat4x4 aligned_dmat4x4;
-
1097  typedef packed_mediump_dmat2x2 packed_dmat2x2;
-
1098  typedef packed_mediump_dmat2x3 packed_dmat2x3;
-
1099  typedef packed_mediump_dmat2x4 packed_dmat2x4;
-
1100  typedef packed_mediump_dmat3x2 packed_dmat3x2;
-
1101  typedef packed_mediump_dmat3x3 packed_dmat3x3;
-
1102  typedef packed_mediump_dmat3x4 packed_dmat3x4;
-
1103  typedef packed_mediump_dmat4x2 packed_dmat4x2;
-
1104  typedef packed_mediump_dmat4x3 packed_dmat4x3;
-
1105  typedef packed_mediump_dmat4x4 packed_dmat4x4;
-
1106 #else //defined(GLM_PRECISION_HIGHP_DOUBLE)
-
1107  typedef aligned_highp_dvec1 aligned_dvec1;
-
1109 
-
1111  typedef aligned_highp_dvec2 aligned_dvec2;
-
1112 
-
1114  typedef aligned_highp_dvec3 aligned_dvec3;
-
1115 
-
1117  typedef aligned_highp_dvec4 aligned_dvec4;
-
1118 
-
1120  typedef packed_highp_dvec1 packed_dvec1;
-
1121 
-
1123  typedef packed_highp_dvec2 packed_dvec2;
-
1124 
-
1126  typedef packed_highp_dvec3 packed_dvec3;
-
1127 
-
1129  typedef packed_highp_dvec4 packed_dvec4;
-
1130 
-
1132  typedef aligned_highp_dmat2 aligned_dmat2;
-
1133 
-
1135  typedef aligned_highp_dmat3 aligned_dmat3;
-
1136 
-
1138  typedef aligned_highp_dmat4 aligned_dmat4;
-
1139 
-
1141  typedef packed_highp_dmat2 packed_dmat2;
-
1142 
-
1144  typedef packed_highp_dmat3 packed_dmat3;
-
1145 
-
1147  typedef packed_highp_dmat4 packed_dmat4;
-
1148 
-
1150  typedef aligned_highp_dmat2x2 aligned_dmat2x2;
-
1151 
-
1153  typedef aligned_highp_dmat2x3 aligned_dmat2x3;
-
1154 
-
1156  typedef aligned_highp_dmat2x4 aligned_dmat2x4;
-
1157 
-
1159  typedef aligned_highp_dmat3x2 aligned_dmat3x2;
-
1160 
-
1162  typedef aligned_highp_dmat3x3 aligned_dmat3x3;
-
1163 
-
1165  typedef aligned_highp_dmat3x4 aligned_dmat3x4;
-
1166 
-
1168  typedef aligned_highp_dmat4x2 aligned_dmat4x2;
-
1169 
-
1171  typedef aligned_highp_dmat4x3 aligned_dmat4x3;
-
1172 
-
1174  typedef aligned_highp_dmat4x4 aligned_dmat4x4;
-
1175 
-
1177  typedef packed_highp_dmat2x2 packed_dmat2x2;
-
1178 
-
1180  typedef packed_highp_dmat2x3 packed_dmat2x3;
-
1181 
-
1183  typedef packed_highp_dmat2x4 packed_dmat2x4;
-
1184 
-
1186  typedef packed_highp_dmat3x2 packed_dmat3x2;
-
1187 
-
1189  typedef packed_highp_dmat3x3 packed_dmat3x3;
-
1190 
-
1192  typedef packed_highp_dmat3x4 packed_dmat3x4;
-
1193 
-
1195  typedef packed_highp_dmat4x2 packed_dmat4x2;
-
1196 
-
1198  typedef packed_highp_dmat4x3 packed_dmat4x3;
-
1199 
-
1201  typedef packed_highp_dmat4x4 packed_dmat4x4;
-
1202 #endif//GLM_PRECISION
-
1203 
-
1204 #if(defined(GLM_PRECISION_LOWP_INT))
-
1205  typedef aligned_lowp_ivec1 aligned_ivec1;
-
1206  typedef aligned_lowp_ivec2 aligned_ivec2;
-
1207  typedef aligned_lowp_ivec3 aligned_ivec3;
-
1208  typedef aligned_lowp_ivec4 aligned_ivec4;
-
1209 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
-
1210  typedef aligned_mediump_ivec1 aligned_ivec1;
-
1211  typedef aligned_mediump_ivec2 aligned_ivec2;
-
1212  typedef aligned_mediump_ivec3 aligned_ivec3;
-
1213  typedef aligned_mediump_ivec4 aligned_ivec4;
-
1214 #else //defined(GLM_PRECISION_HIGHP_INT)
-
1215  typedef aligned_highp_ivec1 aligned_ivec1;
-
1217 
-
1219  typedef aligned_highp_ivec2 aligned_ivec2;
-
1220 
-
1222  typedef aligned_highp_ivec3 aligned_ivec3;
-
1223 
-
1225  typedef aligned_highp_ivec4 aligned_ivec4;
-
1226 
-
1228  typedef packed_highp_ivec1 packed_ivec1;
-
1229 
-
1231  typedef packed_highp_ivec2 packed_ivec2;
-
1232 
-
1234  typedef packed_highp_ivec3 packed_ivec3;
-
1235 
-
1237  typedef packed_highp_ivec4 packed_ivec4;
-
1238 #endif//GLM_PRECISION
-
1239 
-
1240  // -- Unsigned integer definition --
-
1241 
-
1242 #if(defined(GLM_PRECISION_LOWP_UINT))
-
1243  typedef aligned_lowp_uvec1 aligned_uvec1;
-
1244  typedef aligned_lowp_uvec2 aligned_uvec2;
-
1245  typedef aligned_lowp_uvec3 aligned_uvec3;
-
1246  typedef aligned_lowp_uvec4 aligned_uvec4;
-
1247 #elif(defined(GLM_PRECISION_MEDIUMP_UINT))
-
1248  typedef aligned_mediump_uvec1 aligned_uvec1;
-
1249  typedef aligned_mediump_uvec2 aligned_uvec2;
-
1250  typedef aligned_mediump_uvec3 aligned_uvec3;
-
1251  typedef aligned_mediump_uvec4 aligned_uvec4;
-
1252 #else //defined(GLM_PRECISION_HIGHP_UINT)
-
1253  typedef aligned_highp_uvec1 aligned_uvec1;
-
1255 
-
1257  typedef aligned_highp_uvec2 aligned_uvec2;
-
1258 
-
1260  typedef aligned_highp_uvec3 aligned_uvec3;
-
1261 
-
1263  typedef aligned_highp_uvec4 aligned_uvec4;
-
1264 
-
1266  typedef packed_highp_uvec1 packed_uvec1;
-
1267 
-
1269  typedef packed_highp_uvec2 packed_uvec2;
-
1270 
-
1272  typedef packed_highp_uvec3 packed_uvec3;
-
1273 
-
1275  typedef packed_highp_uvec4 packed_uvec4;
-
1276 #endif//GLM_PRECISION
-
1277 
-
1278 #if(defined(GLM_PRECISION_LOWP_BOOL))
-
1279  typedef aligned_lowp_bvec1 aligned_bvec1;
-
1280  typedef aligned_lowp_bvec2 aligned_bvec2;
-
1281  typedef aligned_lowp_bvec3 aligned_bvec3;
-
1282  typedef aligned_lowp_bvec4 aligned_bvec4;
-
1283 #elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
-
1284  typedef aligned_mediump_bvec1 aligned_bvec1;
-
1285  typedef aligned_mediump_bvec2 aligned_bvec2;
-
1286  typedef aligned_mediump_bvec3 aligned_bvec3;
-
1287  typedef aligned_mediump_bvec4 aligned_bvec4;
-
1288 #else //defined(GLM_PRECISION_HIGHP_BOOL)
-
1289  typedef aligned_highp_bvec1 aligned_bvec1;
-
1291 
-
1293  typedef aligned_highp_bvec2 aligned_bvec2;
-
1294 
-
1296  typedef aligned_highp_bvec3 aligned_bvec3;
-
1297 
-
1299  typedef aligned_highp_bvec4 aligned_bvec4;
-
1300 
-
1302  typedef packed_highp_bvec1 packed_bvec1;
-
1303 
-
1305  typedef packed_highp_bvec2 packed_bvec2;
-
1306 
-
1308  typedef packed_highp_bvec3 packed_bvec3;
-
1309 
-
1311  typedef packed_highp_bvec4 packed_bvec4;
-
1312 #endif//GLM_PRECISION
-
1313 
-
1315 }//namespace glm
-
packed_highp_uvec3 packed_uvec3
3 components vector tightly packed in memory of unsigned integer numbers.
-
packed_highp_mat2x2 packed_mat2x2
2 by 2 matrix tightly packed in memory of single-precision floating-point numbers.
-
mat< 2, 4, float, aligned_lowp > aligned_lowp_mat2x4
2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...
-
vec< 4, bool, aligned_lowp > aligned_lowp_bvec4
4 components vector aligned in memory of bool values.
-
vec< 4, double, packed_highp > packed_highp_dvec4
4 components vector tightly packed in memory of double-precision floating-point numbers using high pr...
-
packed_highp_dmat2x3 packed_dmat2x3
2 by 3 matrix tightly packed in memory of double-precision floating-point numbers.
-
vec< 3, bool, packed_lowp > packed_lowp_bvec3
3 components vector tightly packed in memory of bool values.
-
packed_highp_mat4 packed_mat4
4 by 4 matrix tightly packed in memory of single-precision floating-point numbers.
-
aligned_highp_uvec2 aligned_uvec2
2 components vector aligned in memory of unsigned integer numbers.
-
vec< 2, bool, aligned_lowp > aligned_lowp_bvec2
2 components vector aligned in memory of bool values.
-
vec< 3, int, packed_highp > packed_highp_ivec3
3 components vector tightly packed in memory of signed integer numbers.
-
mat< 4, 2, double, packed_highp > packed_highp_dmat4x2
4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...
-
packed_highp_dmat2 packed_dmat2
2 by 2 matrix tightly packed in memory of double-precision floating-point numbers.
-
mat< 3, 3, double, packed_highp > packed_highp_dmat3
3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...
-
mat< 4, 3, float, aligned_lowp > aligned_lowp_mat4x3
4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...
-
mat< 2, 4, double, packed_highp > packed_highp_dmat2x4
2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...
-
vec< 2, int, aligned_mediump > aligned_mediump_ivec2
2 components vector aligned in memory of signed integer numbers.
-
mat< 4, 3, float, packed_mediump > packed_mediump_mat4x3
4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...
-
packed_highp_ivec3 packed_ivec3
3 components vector tightly packed in memory of signed integer numbers.
-
mat< 3, 4, double, aligned_highp > aligned_highp_dmat3x4
3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arith...
-
mat< 3, 3, double, packed_mediump > packed_mediump_dmat3x3
3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...
-
packed_highp_mat2 packed_mat2
2 by 2 matrix tightly packed in memory of single-precision floating-point numbers.
-
mat< 3, 4, double, packed_lowp > packed_lowp_dmat3x4
3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision...
-
vec< 2, float, aligned_mediump > aligned_mediump_vec2
2 components vector aligned in memory of single-precision floating-point numbers using medium precisi...
-
mat< 4, 4, float, aligned_lowp > aligned_lowp_mat4x4
4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...
-
packed_highp_mat3 packed_mat3
3 by 3 matrix tightly packed in memory of single-precision floating-point numbers.
-
packed_highp_dmat4 packed_dmat4
4 by 4 matrix tightly packed in memory of double-precision floating-point numbers.
-
packed_highp_vec4 packed_vec4
4 components vector tightly packed in memory of single-precision floating-point numbers.
-
vec< 4, float, aligned_highp > aligned_highp_vec4
4 components vector aligned in memory of single-precision floating-point numbers using high precision...
-
mat< 4, 4, double, packed_highp > packed_highp_dmat4x4
4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...
-
vec< 1, double, aligned_mediump > aligned_mediump_dvec1
1 component vector aligned in memory of double-precision floating-point numbers using medium precisio...
-
mat< 3, 3, double, aligned_highp > aligned_highp_dmat3x3
3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arith...
-
packed_highp_dvec3 packed_dvec3
3 components vector tightly packed in memory of double-precision floating-point numbers.
-
vec< 1, double, packed_mediump > packed_mediump_dvec1
1 component vector tightly packed in memory of double-precision floating-point numbers using medium p...
-
packed_highp_uvec1 packed_uvec1
1 component vector tightly packed in memory of unsigned integer numbers.
-
mat< 3, 4, float, packed_lowp > packed_lowp_mat3x4
3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision...
-
vec< 1, uint, aligned_lowp > aligned_lowp_uvec1
1 component vector aligned in memory of unsigned integer numbers.
-
mat< 2, 4, double, packed_lowp > packed_lowp_dmat2x4
2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision...
-
aligned_highp_ivec3 aligned_ivec3
3 components vector aligned in memory of signed integer numbers.
-
mat< 3, 4, double, packed_highp > packed_highp_dmat3x4
3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...
-
packed_highp_vec2 packed_vec2
2 components vector tightly packed in memory of single-precision floating-point numbers.
-
vec< 1, uint, packed_highp > packed_highp_uvec1
1 component vector tightly packed in memory of unsigned integer numbers.
-
mat< 2, 2, float, packed_lowp > packed_lowp_mat2x2
2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision...
-
vec< 1, bool, packed_highp > packed_highp_bvec1
1 component vector tightly packed in memory of bool values.
-
aligned_highp_bvec4 aligned_bvec4
4 components vector aligned in memory of bool values.
-
aligned_highp_vec3 aligned_vec3
3 components vector aligned in memory of single-precision floating-point numbers. ...
-
mat< 3, 3, double, packed_lowp > packed_lowp_dmat3x3
3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision...
-
aligned_highp_uvec3 aligned_uvec3
3 components vector aligned in memory of unsigned integer numbers.
-
mat< 4, 2, double, aligned_mediump > aligned_mediump_dmat4x2
4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...
-
mat< 3, 3, float, aligned_highp > aligned_highp_mat3
3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arith...
-
vec< 2, uint, packed_mediump > packed_mediump_uvec2
2 components vector tightly packed in memory of unsigned integer numbers.
-
vec< 3, float, aligned_highp > aligned_highp_vec3
3 components vector aligned in memory of single-precision floating-point numbers using high precision...
-
aligned_highp_mat4x3 aligned_mat4x3
4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.
-
vec< 4, int, aligned_lowp > aligned_lowp_ivec4
4 components vector aligned in memory of signed integer numbers.
-
mat< 2, 2, float, aligned_highp > aligned_highp_mat2
2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arith...
-
packed_highp_vec1 packed_vec1
1 component vector tightly packed in memory of single-precision floating-point numbers.
-
vec< 2, int, aligned_lowp > aligned_lowp_ivec2
2 components vector aligned in memory of signed integer numbers.
-
mat< 4, 2, double, packed_lowp > packed_lowp_dmat4x2
4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision...
-
aligned_highp_dvec3 aligned_dvec3
3 components vector aligned in memory of double-precision floating-point numbers. ...
-
vec< 1, float, packed_lowp > packed_lowp_vec1
1 component vector tightly packed in memory of single-precision floating-point numbers using low prec...
-
vec< 3, bool, packed_mediump > packed_mediump_bvec3
3 components vector tightly packed in memory of bool values.
-
aligned_highp_dvec1 aligned_dvec1
1 component vector aligned in memory of double-precision floating-point numbers.
-
packed_highp_uvec4 packed_uvec4
4 components vector tightly packed in memory of unsigned integer numbers.
-
packed_highp_dmat3 packed_dmat3
3 by 3 matrix tightly packed in memory of double-precision floating-point numbers.
-
vec< 2, float, aligned_highp > aligned_highp_vec2
2 components vector aligned in memory of single-precision floating-point numbers using high precision...
-
mat< 2, 2, double, aligned_highp > aligned_highp_dmat2x2
2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arith...
-
vec< 3, uint, aligned_lowp > aligned_lowp_uvec3
3 components vector aligned in memory of unsigned integer numbers.
-
vec< 1, double, aligned_lowp > aligned_lowp_dvec1
1 component vector aligned in memory of double-precision floating-point numbers using low precision a...
-
vec< 1, float, aligned_mediump > aligned_mediump_vec1
1 component vector aligned in memory of single-precision floating-point numbers using medium precisio...
-
mat< 4, 3, double, packed_lowp > packed_lowp_dmat4x3
4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision...
-
mat< 3, 4, double, aligned_lowp > aligned_lowp_dmat3x4
3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...
-
mat< 4, 2, float, packed_highp > packed_highp_mat4x2
4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...
-
mat< 3, 2, float, aligned_mediump > aligned_mediump_mat3x2
3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...
-
mat< 4, 3, float, aligned_mediump > aligned_mediump_mat4x3
4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...
-
vec< 3, double, aligned_lowp > aligned_lowp_dvec3
3 components vector aligned in memory of double-precision floating-point numbers using low precision ...
-
mat< 2, 2, float, packed_mediump > packed_mediump_mat2
2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...
-
packed_highp_mat3x3 packed_mat3x3
3 by 3 matrix tightly packed in memory of single-precision floating-point numbers.
-
vec< 1, double, packed_highp > packed_highp_dvec1
1 component vector tightly packed in memory of double-precision floating-point numbers using high pre...
-
mat< 3, 2, double, aligned_lowp > aligned_lowp_dmat3x2
3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...
-
mat< 3, 3, float, packed_mediump > packed_mediump_mat3
3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...
-
mat< 2, 2, float, aligned_lowp > aligned_lowp_mat2
2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...
-
packed_highp_dmat4x4 packed_dmat4x4
4 by 4 matrix tightly packed in memory of double-precision floating-point numbers.
-
mat< 2, 3, double, aligned_lowp > aligned_lowp_dmat2x3
2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...
-
mat< 4, 4, float, packed_lowp > packed_lowp_mat4
4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision...
-
vec< 1, float, packed_highp > packed_highp_vec1
1 component vector tightly packed in memory of single-precision floating-point numbers using high pre...
-
mat< 2, 3, float, aligned_mediump > aligned_mediump_mat2x3
2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...
-
mat< 2, 2, float, packed_highp > packed_highp_mat2x2
2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...
-
vec< 2, bool, aligned_mediump > aligned_mediump_bvec2
2 components vector aligned in memory of bool values.
-
mat< 2, 2, double, packed_lowp > packed_lowp_dmat2
2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision...
-
mat< 2, 2, double, aligned_mediump > aligned_mediump_dmat2
2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...
-
vec< 4, float, packed_mediump > packed_mediump_vec4
4 components vector tightly packed in memory of single-precision floating-point numbers using medium ...
-
aligned_highp_dmat4x2 aligned_dmat4x2
4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.
-
mat< 4, 4, double, packed_lowp > packed_lowp_dmat4x4
4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision...
-
mat< 2, 2, double, packed_highp > packed_highp_dmat2x2
2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...
-
mat< 3, 3, float, packed_lowp > packed_lowp_mat3x3
3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision...
-
mat< 4, 3, float, packed_highp > packed_highp_mat4x3
4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...
-
mat< 3, 3, float, aligned_mediump > aligned_mediump_mat3
3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...
-
mat< 4, 3, double, aligned_highp > aligned_highp_dmat4x3
4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arith...
-
vec< 1, bool, aligned_lowp > aligned_lowp_bvec1
1 component vector aligned in memory of bool values.
-
aligned_highp_mat2 aligned_mat2
2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.
-
mat< 4, 4, double, aligned_mediump > aligned_mediump_dmat4x4
4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...
-
vec< 3, int, aligned_mediump > aligned_mediump_ivec3
3 components vector aligned in memory of signed integer numbers.
-
aligned_highp_bvec3 aligned_bvec3
3 components vector aligned in memory of bool values.
-
packed_highp_uvec2 packed_uvec2
2 components vector tightly packed in memory of unsigned integer numbers.
-
vec< 4, double, aligned_lowp > aligned_lowp_dvec4
4 components vector aligned in memory of double-precision floating-point numbers using low precision ...
-
mat< 3, 3, double, aligned_lowp > aligned_lowp_dmat3
3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...
-
mat< 4, 4, float, packed_mediump > packed_mediump_mat4x4
4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...
-
vec< 4, uint, aligned_highp > aligned_highp_uvec4
4 components vector aligned in memory of unsigned integer numbers.
-
mat< 4, 3, double, packed_highp > packed_highp_dmat4x3
4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...
-
mat< 4, 3, float, packed_lowp > packed_lowp_mat4x3
4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision...
-
vec< 2, float, aligned_lowp > aligned_lowp_vec2
2 components vector aligned in memory of single-precision floating-point numbers using low precision ...
-
vec< 1, int, packed_lowp > packed_lowp_ivec1
1 component vector tightly packed in memory of signed integer numbers.
-
vec< 3, bool, aligned_lowp > aligned_lowp_bvec3
3 components vector aligned in memory of bool values.
-
mat< 4, 4, double, aligned_mediump > aligned_mediump_dmat4
4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...
-
mat< 2, 4, float, packed_mediump > packed_mediump_mat2x4
2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...
-
mat< 4, 4, double, packed_highp > packed_highp_dmat4
4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...
-
mat< 4, 2, float, aligned_mediump > aligned_mediump_mat4x2
4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...
-
mat< 3, 4, float, packed_mediump > packed_mediump_mat3x4
3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...
-
vec< 3, uint, packed_highp > packed_highp_uvec3
3 components vector tightly packed in memory of unsigned integer numbers.
-
aligned_highp_dmat2x2 aligned_dmat2x2
2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.
-
mat< 2, 2, double, packed_mediump > packed_mediump_dmat2
2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...
-
mat< 3, 4, float, packed_highp > packed_highp_mat3x4
3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...
-
packed_highp_mat3x4 packed_mat3x4
3 by 4 matrix tightly packed in memory of single-precision floating-point numbers.
-
mat< 2, 4, double, packed_mediump > packed_mediump_dmat2x4
2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...
-
vec< 1, uint, packed_mediump > packed_mediump_uvec1
1 component vector tightly packed in memory of unsigned integer numbers.
-
mat< 4, 4, double, aligned_lowp > aligned_lowp_dmat4
4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...
-
packed_highp_mat4x3 packed_mat4x3
4 by 3 matrix tightly packed in memory of single-precision floating-point numbers.
-
vec< 4, int, packed_lowp > packed_lowp_ivec4
4 components vector tightly packed in memory of signed integer numbers.
-
vec< 4, int, packed_mediump > packed_mediump_ivec4
4 components vector tightly packed in memory of signed integer numbers.
-
vec< 2, double, aligned_mediump > aligned_mediump_dvec2
2 components vector aligned in memory of double-precision floating-point numbers using medium precisi...
-
packed_highp_ivec2 packed_ivec2
2 components vector tightly packed in memory of signed integer numbers.
-
aligned_highp_ivec1 aligned_ivec1
1 component vector aligned in memory of signed integer numbers.
-
vec< 3, int, packed_mediump > packed_mediump_ivec3
3 components vector tightly packed in memory of signed integer numbers.
-
vec< 3, uint, packed_lowp > packed_lowp_uvec3
3 components vector tightly packed in memory of unsigned integer numbers.
-
packed_highp_dmat4x2 packed_dmat4x2
4 by 2 matrix tightly packed in memory of double-precision floating-point numbers.
-
vec< 4, bool, aligned_mediump > aligned_mediump_bvec4
4 components vector aligned in memory of bool values.
-
vec< 2, bool, aligned_highp > aligned_highp_bvec2
2 components vector aligned in memory of bool values.
-
vec< 4, float, packed_lowp > packed_lowp_vec4
4 components vector tightly packed in memory of single-precision floating-point numbers using low pre...
-
vec< 4, double, aligned_highp > aligned_highp_dvec4
4 components vector aligned in memory of double-precision floating-point numbers using high precision...
-
mat< 2, 3, double, packed_highp > packed_highp_dmat2x3
2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...
-
mat< 2, 2, float, aligned_mediump > aligned_mediump_mat2
2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...
-
mat< 2, 4, double, aligned_mediump > aligned_mediump_dmat2x4
2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...
-
vec< 4, bool, packed_lowp > packed_lowp_bvec4
4 components vector tightly packed in memory of bool values.
-
vec< 2, double, packed_mediump > packed_mediump_dvec2
2 components vector tightly packed in memory of double-precision floating-point numbers using medium ...
-
vec< 2, double, aligned_highp > aligned_highp_dvec2
2 components vector aligned in memory of double-precision floating-point numbers using high precision...
-
mat< 2, 4, double, aligned_lowp > aligned_lowp_dmat2x4
2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...
-
aligned_highp_mat2x3 aligned_mat2x3
2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.
-
mat< 2, 2, float, packed_lowp > packed_lowp_mat2
2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision...
-
vec< 4, int, aligned_mediump > aligned_mediump_ivec4
4 components vector aligned in memory of signed integer numbers.
-
vec< 2, bool, packed_lowp > packed_lowp_bvec2
2 components vector tightly packed in memory of bool values.
-
vec< 2, int, packed_highp > packed_highp_ivec2
2 components vector tightly packed in memory of signed integer numbers.
-
packed_highp_dmat3x4 packed_dmat3x4
3 by 4 matrix tightly packed in memory of double-precision floating-point numbers.
-
mat< 3, 3, double, packed_mediump > packed_mediump_dmat3
3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...
-
mat< 4, 3, double, aligned_lowp > aligned_lowp_dmat4x3
4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...
-
mat< 4, 4, double, aligned_highp > aligned_highp_dmat4x4
4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arith...
-
mat< 4, 2, double, packed_mediump > packed_mediump_dmat4x2
4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...
-
packed_highp_mat4x4 packed_mat4x4
4 by 4 matrix tightly packed in memory of single-precision floating-point numbers.
-
mat< 4, 4, float, packed_highp > packed_highp_mat4
4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...
-
mat< 4, 4, double, aligned_highp > aligned_highp_dmat4
4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arith...
-
mat< 3, 2, double, aligned_highp > aligned_highp_dmat3x2
3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arith...
-
vec< 1, double, packed_lowp > packed_lowp_dvec1
1 component vector tightly packed in memory of double-precision floating-point numbers using low prec...
-
mat< 4, 4, float, aligned_lowp > aligned_lowp_mat4
4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...
-
vec< 3, uint, packed_mediump > packed_mediump_uvec3
3 components vector tightly packed in memory of unsigned integer numbers.
-
aligned_highp_dmat4x3 aligned_dmat4x3
4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.
-
mat< 4, 2, double, aligned_lowp > aligned_lowp_dmat4x2
4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...
-
mat< 2, 3, double, packed_mediump > packed_mediump_dmat2x3
2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...
-
mat< 4, 2, double, aligned_highp > aligned_highp_dmat4x2
4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arith...
-
aligned_highp_mat3x4 aligned_mat3x4
3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.
-
mat< 4, 4, double, aligned_lowp > aligned_lowp_dmat4x4
4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...
-
mat< 4, 4, float, aligned_mediump > aligned_mediump_mat4x4
4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...
-
aligned_highp_mat4 aligned_mat4
4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.
-
mat< 2, 2, double, packed_lowp > packed_lowp_dmat2x2
2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision...
-
vec< 2, int, packed_mediump > packed_mediump_ivec2
2 components vector tightly packed in memory of signed integer numbers.
-
packed_highp_dmat3x2 packed_dmat3x2
3 by 2 matrix tightly packed in memory of double-precision floating-point numbers.
-
mat< 4, 4, double, packed_mediump > packed_mediump_dmat4
4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...
-
vec< 3, float, aligned_lowp > aligned_lowp_vec3
3 components vector aligned in memory of single-precision floating-point numbers using low precision ...
-
mat< 2, 4, float, packed_highp > packed_highp_mat2x4
2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...
-
mat< 2, 3, float, aligned_highp > aligned_highp_mat2x3
2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arith...
-
mat< 3, 3, float, packed_mediump > packed_mediump_mat3x3
3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...
-
vec< 4, float, packed_highp > packed_highp_vec4
4 components vector tightly packed in memory of single-precision floating-point numbers using high pr...
-
aligned_highp_uvec1 aligned_uvec1
1 component vector aligned in memory of unsigned integer numbers.
-
mat< 4, 4, float, aligned_highp > aligned_highp_mat4x4
4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arith...
-
mat< 4, 2, float, packed_mediump > packed_mediump_mat4x2
4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...
-
mat< 3, 2, float, aligned_lowp > aligned_lowp_mat3x2
3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...
-
mat< 3, 3, float, packed_lowp > packed_lowp_mat3
3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision...
-
vec< 4, bool, packed_highp > packed_highp_bvec4
4 components vector tightly packed in memory of bool values.
-
aligned_highp_vec1 aligned_vec1
1 component vector aligned in memory of single-precision floating-point numbers.
-
packed_highp_vec3 packed_vec3
3 components vector tightly packed in memory of single-precision floating-point numbers.
-
packed_highp_mat2x3 packed_mat2x3
2 by 3 matrix tightly packed in memory of single-precision floating-point numbers.
-
vec< 3, bool, aligned_mediump > aligned_mediump_bvec3
3 components vector aligned in memory of bool values.
-
vec< 1, uint, aligned_mediump > aligned_mediump_uvec1
1 component vector aligned in memory of unsigned integer numbers.
-
aligned_highp_bvec2 aligned_bvec2
2 components vector aligned in memory of bool values.
-
packed_highp_dmat2x2 packed_dmat2x2
2 by 2 matrix tightly packed in memory of double-precision floating-point numbers.
-
mat< 4, 2, float, packed_lowp > packed_lowp_mat4x2
4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision...
-
packed_highp_dmat2x4 packed_dmat2x4
2 by 4 matrix tightly packed in memory of double-precision floating-point numbers.
-
vec< 3, uint, aligned_highp > aligned_highp_uvec3
3 components vector aligned in memory of unsigned integer numbers.
-
vec< 2, bool, packed_mediump > packed_mediump_bvec2
2 components vector tightly packed in memory of bool values.
-
aligned_highp_bvec1 aligned_bvec1
1 component vector aligned in memory of bool values.
-
aligned_highp_mat3x2 aligned_mat3x2
3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.
-
vec< 1, int, aligned_lowp > aligned_lowp_ivec1
1 component vector aligned in memory of signed integer numbers.
-
mat< 3, 3, double, aligned_mediump > aligned_mediump_dmat3x3
3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...
-
mat< 3, 2, float, packed_lowp > packed_lowp_mat3x2
3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision...
-
mat< 2, 3, float, packed_highp > packed_highp_mat2x3
2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...
-
mat< 4, 4, float, packed_lowp > packed_lowp_mat4x4
4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision...
-
aligned_highp_uvec4 aligned_uvec4
4 components vector aligned in memory of unsigned integer numbers.
-
packed_highp_bvec2 packed_bvec2
2 components vector tightly packed in memory of bool values.
-
mat< 3, 3, float, aligned_highp > aligned_highp_mat3x3
3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arith...
-
packed_highp_bvec4 packed_bvec4
4 components vector tightly packed in memory of bool values.
-
aligned_highp_ivec4 aligned_ivec4
4 components vector aligned in memory of signed integer numbers.
-
mat< 3, 3, float, packed_highp > packed_highp_mat3x3
3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...
-
vec< 4, int, packed_highp > packed_highp_ivec4
4 components vector tightly packed in memory of signed integer numbers.
-
packed_highp_mat3x2 packed_mat3x2
3 by 2 matrix tightly packed in memory of single-precision floating-point numbers.
-
vec< 2, uint, aligned_highp > aligned_highp_uvec2
2 components vector aligned in memory of unsigned integer numbers.
-
aligned_highp_dmat3 aligned_dmat3
3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.
-
vec< 3, int, aligned_highp > aligned_highp_ivec3
3 components vector aligned in memory of signed integer numbers.
-
mat< 2, 2, double, aligned_lowp > aligned_lowp_dmat2x2
2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...
-
mat< 3, 2, float, aligned_highp > aligned_highp_mat3x2
3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arith...
-
vec< 1, uint, aligned_highp > aligned_highp_uvec1
1 component vector aligned in memory of unsigned integer numbers.
-
aligned_highp_mat2x4 aligned_mat2x4
2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.
-
mat< 4, 4, float, aligned_mediump > aligned_mediump_mat4
4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...
-
packed_highp_dvec1 packed_dvec1
1 component vector tightly packed in memory of double-precision floating-point numbers.
-
aligned_highp_dmat2x4 aligned_dmat2x4
2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.
-
mat< 2, 2, double, packed_mediump > packed_mediump_dmat2x2
2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...
-
vec< 3, double, packed_lowp > packed_lowp_dvec3
3 components vector tightly packed in memory of double-precision floating-point numbers using low pre...
-
vec< 4, uint, aligned_lowp > aligned_lowp_uvec4
4 components vector aligned in memory of unsigned integer numbers.
-
vec< 4, uint, packed_highp > packed_highp_uvec4
4 components vector tightly packed in memory of unsigned integer numbers.
-
mat< 2, 4, float, packed_lowp > packed_lowp_mat2x4
2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision...
-
aligned_highp_vec2 aligned_vec2
2 components vector aligned in memory of single-precision floating-point numbers. ...
-
aligned_highp_mat2x2 aligned_mat2x2
2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.
-
mat< 3, 3, double, packed_lowp > packed_lowp_dmat3
3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision...
-
aligned_highp_dmat3x3 aligned_dmat3x3
3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.
-
vec< 2, double, packed_highp > packed_highp_dvec2
2 components vector tightly packed in memory of double-precision floating-point numbers using high pr...
-
mat< 2, 2, double, aligned_mediump > aligned_mediump_dmat2x2
2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...
-
vec< 1, uint, packed_lowp > packed_lowp_uvec1
1 component vector tightly packed in memory of unsigned integer numbers.
-
vec< 2, uint, packed_lowp > packed_lowp_uvec2
2 components vector tightly packed in memory of unsigned integer numbers.
-
packed_highp_dmat4x3 packed_dmat4x3
4 by 3 matrix tightly packed in memory of double-precision floating-point numbers.
-
mat< 3, 3, double, aligned_lowp > aligned_lowp_dmat3x3
3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...
-
mat< 3, 3, float, packed_highp > packed_highp_mat3
3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...
-
aligned_highp_dmat2x3 aligned_dmat2x3
2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.
-
mat< 2, 2, float, aligned_mediump > aligned_mediump_mat2x2
2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...
-
mat< 2, 2, float, aligned_lowp > aligned_lowp_mat2x2
2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...
-
vec< 1, bool, packed_mediump > packed_mediump_bvec1
1 component vector tightly packed in memory of bool values.
-
mat< 4, 4, double, packed_lowp > packed_lowp_dmat4
4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision...
-
packed_highp_ivec1 packed_ivec1
1 component vector tightly packed in memory of signed integer numbers.
-
vec< 1, bool, packed_lowp > packed_lowp_bvec1
1 component vector tightly packed in memory of bool values.
-
aligned_highp_dmat3x2 aligned_dmat3x2
3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.
-
mat< 3, 2, double, packed_highp > packed_highp_dmat3x2
3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...
-
aligned_highp_ivec2 aligned_ivec2
2 components vector aligned in memory of signed integer numbers.
-
aligned_highp_dmat4x4 aligned_dmat4x4
4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.
-
mat< 3, 3, double, packed_highp > packed_highp_dmat3x3
3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...
-
vec< 4, bool, aligned_highp > aligned_highp_bvec4
4 components vector aligned in memory of bool values.
-
vec< 4, bool, packed_mediump > packed_mediump_bvec4
4 components vector tightly packed in memory of bool values.
-
mat< 2, 2, float, packed_highp > packed_highp_mat2
2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...
-
packed_highp_mat2x4 packed_mat2x4
2 by 4 matrix tightly packed in memory of single-precision floating-point numbers.
-
mat< 4, 2, float, aligned_lowp > aligned_lowp_mat4x2
4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...
-
vec< 1, bool, aligned_mediump > aligned_mediump_bvec1
1 component vector aligned in memory of bool values.
-
mat< 2, 4, double, aligned_highp > aligned_highp_dmat2x4
2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arith...
-
mat< 3, 3, float, aligned_mediump > aligned_mediump_mat3x3
3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...
-
mat< 4, 4, float, packed_mediump > packed_mediump_mat4
4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...
-
vec< 1, float, packed_mediump > packed_mediump_vec1
1 component vector tightly packed in memory of single-precision floating-point numbers using medium p...
-
aligned_highp_mat4x4 aligned_mat4x4
4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.
-
aligned_highp_mat4x2 aligned_mat4x2
4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.
-
vec< 3, float, packed_highp > packed_highp_vec3
3 components vector tightly packed in memory of single-precision floating-point numbers using high pr...
-
aligned_highp_dvec4 aligned_dvec4
4 components vector aligned in memory of double-precision floating-point numbers. ...
-
vec< 1, int, aligned_highp > aligned_highp_ivec1
1 component vector aligned in memory of signed integer numbers.
-
mat< 3, 3, float, aligned_lowp > aligned_lowp_mat3
3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...
-
mat< 2, 2, double, aligned_highp > aligned_highp_dmat2
2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arith...
-
aligned_highp_dmat3x4 aligned_dmat3x4
3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.
-
packed_highp_bvec3 packed_bvec3
3 components vector tightly packed in memory of bool values.
-
mat< 4, 4, float, packed_highp > packed_highp_mat4x4
4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...
-
vec< 3, float, packed_mediump > packed_mediump_vec3
3 components vector tightly packed in memory of single-precision floating-point numbers using medium ...
-
vec< 2, uint, aligned_lowp > aligned_lowp_uvec2
2 components vector aligned in memory of unsigned integer numbers.
-
vec< 1, bool, aligned_highp > aligned_highp_bvec1
1 component vector aligned in memory of bool values.
-
vec< 2, bool, packed_highp > packed_highp_bvec2
2 components vector tightly packed in memory of bool values.
-
vec< 1, int, packed_highp > packed_highp_ivec1
1 component vector tightly packed in memory of signed integer numbers.
-
mat< 2, 4, float, aligned_highp > aligned_highp_mat2x4
2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arith...
-
vec< 2, int, packed_lowp > packed_lowp_ivec2
2 components vector tightly packed in memory of signed integer numbers.
-
vec< 3, double, packed_highp > packed_highp_dvec3
3 components vector tightly packed in memory of double-precision floating-point numbers using high pr...
-
vec< 2, int, aligned_highp > aligned_highp_ivec2
2 components vector aligned in memory of signed integer numbers.
-
aligned_highp_dmat2 aligned_dmat2
2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.
-
mat< 3, 2, double, packed_mediump > packed_mediump_dmat3x2
3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...
-
vec< 3, uint, aligned_mediump > aligned_mediump_uvec3
3 components vector aligned in memory of unsigned integer numbers.
-
vec< 4, double, packed_lowp > packed_lowp_dvec4
4 components vector tightly packed in memory of double-precision floating-point numbers using low pre...
-
vec< 3, double, packed_mediump > packed_mediump_dvec3
3 components vector tightly packed in memory of double-precision floating-point numbers using medium ...
-
mat< 2, 3, double, aligned_mediump > aligned_mediump_dmat2x3
2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...
-
vec< 3, int, aligned_lowp > aligned_lowp_ivec3
3 components vector aligned in memory of signed integer numbers.
-
mat< 2, 2, float, aligned_highp > aligned_highp_mat2x2
2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arith...
-
mat< 4, 3, float, aligned_highp > aligned_highp_mat4x3
4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arith...
-
vec< 3, bool, aligned_highp > aligned_highp_bvec3
3 components vector aligned in memory of bool values.
-
vec< 3, float, packed_lowp > packed_lowp_vec3
3 components vector tightly packed in memory of single-precision floating-point numbers using low pre...
-
vec< 2, uint, aligned_mediump > aligned_mediump_uvec2
2 components vector aligned in memory of unsigned integer numbers.
-
vec< 1, int, packed_mediump > packed_mediump_ivec1
1 component vector tightly packed in memory of signed integer numbers.
-
mat< 3, 3, double, aligned_highp > aligned_highp_dmat3
3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arith...
-
vec< 4, uint, packed_mediump > packed_mediump_uvec4
4 components vector tightly packed in memory of unsigned integer numbers.
-
mat< 3, 2, double, aligned_mediump > aligned_mediump_dmat3x2
3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...
-
mat< 3, 4, double, aligned_mediump > aligned_mediump_dmat3x4
3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...
-
mat< 4, 3, double, packed_mediump > packed_mediump_dmat4x3
4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...
-
vec< 2, uint, packed_highp > packed_highp_uvec2
2 components vector tightly packed in memory of unsigned integer numbers.
-
vec< 4, uint, aligned_mediump > aligned_mediump_uvec4
4 components vector aligned in memory of unsigned integer numbers.
-
vec< 4, double, packed_mediump > packed_mediump_dvec4
4 components vector tightly packed in memory of double-precision floating-point numbers using medium ...
-
aligned_highp_vec4 aligned_vec4
4 components vector aligned in memory of single-precision floating-point numbers. ...
-
vec< 4, int, aligned_highp > aligned_highp_ivec4
4 components vector aligned in memory of signed integer numbers.
-
vec< 2, double, aligned_lowp > aligned_lowp_dvec2
2 components vector aligned in memory of double-precision floating-point numbers using low precision ...
-
packed_highp_bvec1 packed_bvec1
1 components vector tightly packed in memory of bool values.
-
mat< 2, 3, float, packed_lowp > packed_lowp_mat2x3
2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision...
-
vec< 1, float, aligned_lowp > aligned_lowp_vec1
1 component vector aligned in memory of single-precision floating-point numbers using low precision a...
-
vec< 2, float, packed_lowp > packed_lowp_vec2
2 components vector tightly packed in memory of single-precision floating-point numbers using low pre...
-
vec< 1, double, aligned_highp > aligned_highp_dvec1
1 component vector aligned in memory of double-precision floating-point numbers using high precision ...
-
mat< 2, 3, float, packed_mediump > packed_mediump_mat2x3
2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...
-
mat< 3, 2, float, packed_mediump > packed_mediump_mat3x2
3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...
-
vec< 4, float, aligned_mediump > aligned_mediump_vec4
4 components vector aligned in memory of single-precision floating-point numbers using medium precisi...
-
packed_highp_dvec4 packed_dvec4
4 components vector tightly packed in memory of double-precision floating-point numbers.
-
vec< 4, double, aligned_mediump > aligned_mediump_dvec4
4 components vector aligned in memory of double-precision floating-point numbers using medium precisi...
-
mat< 4, 4, double, packed_mediump > packed_mediump_dmat4x4
4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...
-
mat< 3, 4, double, packed_mediump > packed_mediump_dmat3x4
3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...
-
mat< 3, 4, float, aligned_highp > aligned_highp_mat3x4
3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arith...
-
mat< 4, 4, float, aligned_highp > aligned_highp_mat4
4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arith...
-
mat< 2, 3, double, packed_lowp > packed_lowp_dmat2x3
2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision...
-
mat< 3, 4, float, aligned_mediump > aligned_mediump_mat3x4
3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...
-
packed_highp_dmat3x3 packed_dmat3x3
3 by 3 matrix tightly packed in memory of double-precision floating-point numbers.
-
aligned_highp_mat3x3 aligned_mat3x3
3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.
-
vec< 3, int, packed_lowp > packed_lowp_ivec3
3 components vector tightly packed in memory of signed integer numbers.
-
aligned_highp_dmat4 aligned_dmat4
4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.
-
mat< 4, 2, float, aligned_highp > aligned_highp_mat4x2
4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arith...
-
vec< 2, float, packed_highp > packed_highp_vec2
2 components vector tightly packed in memory of single-precision floating-point numbers using high pr...
-
mat< 2, 2, double, aligned_lowp > aligned_lowp_dmat2
2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...
-
vec< 4, uint, packed_lowp > packed_lowp_uvec4
4 components vector tightly packed in memory of unsigned integer numbers.
-
packed_highp_ivec4 packed_ivec4
4 components vector tightly packed in memory of signed integer numbers.
-
packed_highp_dvec2 packed_dvec2
2 components vector tightly packed in memory of double-precision floating-point numbers.
-
mat< 3, 3, float, aligned_lowp > aligned_lowp_mat3x3
3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...
-
mat< 3, 2, double, packed_lowp > packed_lowp_dmat3x2
3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision...
-
mat< 3, 2, float, packed_highp > packed_highp_mat3x2
3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...
-
mat< 3, 3, double, aligned_mediump > aligned_mediump_dmat3
3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...
-
mat< 2, 3, float, aligned_lowp > aligned_lowp_mat2x3
2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...
-
vec< 1, int, aligned_mediump > aligned_mediump_ivec1
1 component vector aligned in memory of signed integer numbers.
-
mat< 2, 2, double, packed_highp > packed_highp_dmat2
2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...
-
vec< 2, float, packed_mediump > packed_mediump_vec2
2 components vector tightly packed in memory of single-precision floating-point numbers using medium ...
-
aligned_highp_mat3 aligned_mat3
3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.
-
mat< 4, 3, double, aligned_mediump > aligned_mediump_dmat4x3
4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...
-
mat< 2, 2, float, packed_mediump > packed_mediump_mat2x2
2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...
-
mat< 2, 3, double, aligned_highp > aligned_highp_dmat2x3
2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arith...
-
aligned_highp_dvec2 aligned_dvec2
2 components vector aligned in memory of double-precision floating-point numbers. ...
-
mat< 3, 4, float, aligned_lowp > aligned_lowp_mat3x4
3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...
-
packed_highp_mat4x2 packed_mat4x2
4 by 2 matrix tightly packed in memory of single-precision floating-point numbers.
-
vec< 4, float, aligned_lowp > aligned_lowp_vec4
4 components vector aligned in memory of single-precision floating-point numbers using low precision ...
-
vec< 3, bool, packed_highp > packed_highp_bvec3
3 components vector tightly packed in memory of bool values.
-
vec< 2, double, packed_lowp > packed_lowp_dvec2
2 components vector tightly packed in memory of double-precision floating-point numbers using low pre...
-
vec< 3, double, aligned_mediump > aligned_mediump_dvec3
3 components vector aligned in memory of double-precision floating-point numbers using medium precisi...
-
vec< 3, float, aligned_mediump > aligned_mediump_vec3
3 components vector aligned in memory of single-precision floating-point numbers using medium precisi...
-
mat< 2, 4, float, aligned_mediump > aligned_mediump_mat2x4
2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...
-
Definition: common.hpp:20
-
vec< 3, double, aligned_highp > aligned_highp_dvec3
3 components vector aligned in memory of double-precision floating-point numbers using high precision...
-
vec< 1, float, aligned_highp > aligned_highp_vec1
1 component vector aligned in memory of single-precision floating-point numbers using high precision ...
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00162.html b/tests/OpenGL/package/glm/doc/api/a00162.html deleted file mode 100644 index 39c63374..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00162.html +++ /dev/null @@ -1,735 +0,0 @@ - - - - - - -0.9.9 API documentation: type_aligned.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
gtx/type_aligned.hpp File Reference
-
-
- -

GLM_GTX_type_aligned -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

 GLM_ALIGNED_TYPEDEF (lowp_int8, aligned_lowp_int8, 1)
 Low qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_int16, aligned_lowp_int16, 2)
 Low qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_int32, aligned_lowp_int32, 4)
 Low qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_int64, aligned_lowp_int64, 8)
 Low qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_int8_t, aligned_lowp_int8_t, 1)
 Low qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_int16_t, aligned_lowp_int16_t, 2)
 Low qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_int32_t, aligned_lowp_int32_t, 4)
 Low qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_int64_t, aligned_lowp_int64_t, 8)
 Low qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_i8, aligned_lowp_i8, 1)
 Low qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_i16, aligned_lowp_i16, 2)
 Low qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_i32, aligned_lowp_i32, 4)
 Low qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_i64, aligned_lowp_i64, 8)
 Low qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int8, aligned_mediump_int8, 1)
 Medium qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int16, aligned_mediump_int16, 2)
 Medium qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int32, aligned_mediump_int32, 4)
 Medium qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int64, aligned_mediump_int64, 8)
 Medium qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int8_t, aligned_mediump_int8_t, 1)
 Medium qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int16_t, aligned_mediump_int16_t, 2)
 Medium qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int32_t, aligned_mediump_int32_t, 4)
 Medium qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int64_t, aligned_mediump_int64_t, 8)
 Medium qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_i8, aligned_mediump_i8, 1)
 Medium qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_i16, aligned_mediump_i16, 2)
 Medium qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_i32, aligned_mediump_i32, 4)
 Medium qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_i64, aligned_mediump_i64, 8)
 Medium qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int8, aligned_highp_int8, 1)
 High qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int16, aligned_highp_int16, 2)
 High qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int32, aligned_highp_int32, 4)
 High qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int64, aligned_highp_int64, 8)
 High qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int8_t, aligned_highp_int8_t, 1)
 High qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int16_t, aligned_highp_int16_t, 2)
 High qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int32_t, aligned_highp_int32_t, 4)
 High qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int64_t, aligned_highp_int64_t, 8)
 High qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_i8, aligned_highp_i8, 1)
 High qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_i16, aligned_highp_i16, 2)
 High qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_i32, aligned_highp_i32, 4)
 High qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_i64, aligned_highp_i64, 8)
 High qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int8, aligned_int8, 1)
 Default qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int16, aligned_int16, 2)
 Default qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int32, aligned_int32, 4)
 Default qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int64, aligned_int64, 8)
 Default qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int8_t, aligned_int8_t, 1)
 Default qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int16_t, aligned_int16_t, 2)
 Default qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int32_t, aligned_int32_t, 4)
 Default qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int64_t, aligned_int64_t, 8)
 Default qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i8, aligned_i8, 1)
 Default qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i16, aligned_i16, 2)
 Default qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i32, aligned_i32, 4)
 Default qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i64, aligned_i64, 8)
 Default qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (ivec1, aligned_ivec1, 4)
 Default qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (ivec2, aligned_ivec2, 8)
 Default qualifier 32 bit signed integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (ivec3, aligned_ivec3, 16)
 Default qualifier 32 bit signed integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (ivec4, aligned_ivec4, 16)
 Default qualifier 32 bit signed integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i8vec1, aligned_i8vec1, 1)
 Default qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i8vec2, aligned_i8vec2, 2)
 Default qualifier 8 bit signed integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i8vec3, aligned_i8vec3, 4)
 Default qualifier 8 bit signed integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i8vec4, aligned_i8vec4, 4)
 Default qualifier 8 bit signed integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i16vec1, aligned_i16vec1, 2)
 Default qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i16vec2, aligned_i16vec2, 4)
 Default qualifier 16 bit signed integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i16vec3, aligned_i16vec3, 8)
 Default qualifier 16 bit signed integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i16vec4, aligned_i16vec4, 8)
 Default qualifier 16 bit signed integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i32vec1, aligned_i32vec1, 4)
 Default qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i32vec2, aligned_i32vec2, 8)
 Default qualifier 32 bit signed integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i32vec3, aligned_i32vec3, 16)
 Default qualifier 32 bit signed integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i32vec4, aligned_i32vec4, 16)
 Default qualifier 32 bit signed integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i64vec1, aligned_i64vec1, 8)
 Default qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i64vec2, aligned_i64vec2, 16)
 Default qualifier 64 bit signed integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i64vec3, aligned_i64vec3, 32)
 Default qualifier 64 bit signed integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i64vec4, aligned_i64vec4, 32)
 Default qualifier 64 bit signed integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint8, aligned_lowp_uint8, 1)
 Low qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint16, aligned_lowp_uint16, 2)
 Low qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint32, aligned_lowp_uint32, 4)
 Low qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint64, aligned_lowp_uint64, 8)
 Low qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint8_t, aligned_lowp_uint8_t, 1)
 Low qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint16_t, aligned_lowp_uint16_t, 2)
 Low qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint32_t, aligned_lowp_uint32_t, 4)
 Low qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint64_t, aligned_lowp_uint64_t, 8)
 Low qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_u8, aligned_lowp_u8, 1)
 Low qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_u16, aligned_lowp_u16, 2)
 Low qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_u32, aligned_lowp_u32, 4)
 Low qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_u64, aligned_lowp_u64, 8)
 Low qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint8, aligned_mediump_uint8, 1)
 Medium qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint16, aligned_mediump_uint16, 2)
 Medium qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint32, aligned_mediump_uint32, 4)
 Medium qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint64, aligned_mediump_uint64, 8)
 Medium qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint8_t, aligned_mediump_uint8_t, 1)
 Medium qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint16_t, aligned_mediump_uint16_t, 2)
 Medium qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint32_t, aligned_mediump_uint32_t, 4)
 Medium qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint64_t, aligned_mediump_uint64_t, 8)
 Medium qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_u8, aligned_mediump_u8, 1)
 Medium qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_u16, aligned_mediump_u16, 2)
 Medium qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_u32, aligned_mediump_u32, 4)
 Medium qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_u64, aligned_mediump_u64, 8)
 Medium qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint8, aligned_highp_uint8, 1)
 High qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint16, aligned_highp_uint16, 2)
 High qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint32, aligned_highp_uint32, 4)
 High qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint64, aligned_highp_uint64, 8)
 High qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint8_t, aligned_highp_uint8_t, 1)
 High qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint16_t, aligned_highp_uint16_t, 2)
 High qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint32_t, aligned_highp_uint32_t, 4)
 High qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint64_t, aligned_highp_uint64_t, 8)
 High qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_u8, aligned_highp_u8, 1)
 High qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_u16, aligned_highp_u16, 2)
 High qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_u32, aligned_highp_u32, 4)
 High qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_u64, aligned_highp_u64, 8)
 High qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint8, aligned_uint8, 1)
 Default qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint16, aligned_uint16, 2)
 Default qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint32, aligned_uint32, 4)
 Default qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint64, aligned_uint64, 8)
 Default qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint8_t, aligned_uint8_t, 1)
 Default qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint16_t, aligned_uint16_t, 2)
 Default qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint32_t, aligned_uint32_t, 4)
 Default qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint64_t, aligned_uint64_t, 8)
 Default qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u8, aligned_u8, 1)
 Default qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u16, aligned_u16, 2)
 Default qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u32, aligned_u32, 4)
 Default qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u64, aligned_u64, 8)
 Default qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uvec1, aligned_uvec1, 4)
 Default qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uvec2, aligned_uvec2, 8)
 Default qualifier 32 bit unsigned integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (uvec3, aligned_uvec3, 16)
 Default qualifier 32 bit unsigned integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (uvec4, aligned_uvec4, 16)
 Default qualifier 32 bit unsigned integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u8vec1, aligned_u8vec1, 1)
 Default qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u8vec2, aligned_u8vec2, 2)
 Default qualifier 8 bit unsigned integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u8vec3, aligned_u8vec3, 4)
 Default qualifier 8 bit unsigned integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u8vec4, aligned_u8vec4, 4)
 Default qualifier 8 bit unsigned integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u16vec1, aligned_u16vec1, 2)
 Default qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u16vec2, aligned_u16vec2, 4)
 Default qualifier 16 bit unsigned integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u16vec3, aligned_u16vec3, 8)
 Default qualifier 16 bit unsigned integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u16vec4, aligned_u16vec4, 8)
 Default qualifier 16 bit unsigned integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u32vec1, aligned_u32vec1, 4)
 Default qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u32vec2, aligned_u32vec2, 8)
 Default qualifier 32 bit unsigned integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u32vec3, aligned_u32vec3, 16)
 Default qualifier 32 bit unsigned integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u32vec4, aligned_u32vec4, 16)
 Default qualifier 32 bit unsigned integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u64vec1, aligned_u64vec1, 8)
 Default qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u64vec2, aligned_u64vec2, 16)
 Default qualifier 64 bit unsigned integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u64vec3, aligned_u64vec3, 32)
 Default qualifier 64 bit unsigned integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u64vec4, aligned_u64vec4, 32)
 Default qualifier 64 bit unsigned integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (float32, aligned_float32, 4)
 32 bit single-qualifier floating-point aligned scalar. More...
 
 GLM_ALIGNED_TYPEDEF (float32_t, aligned_float32_t, 4)
 32 bit single-qualifier floating-point aligned scalar. More...
 
 GLM_ALIGNED_TYPEDEF (float32, aligned_f32, 4)
 32 bit single-qualifier floating-point aligned scalar. More...
 
 GLM_ALIGNED_TYPEDEF (float64, aligned_float64, 8)
 64 bit double-qualifier floating-point aligned scalar. More...
 
 GLM_ALIGNED_TYPEDEF (float64_t, aligned_float64_t, 8)
 64 bit double-qualifier floating-point aligned scalar. More...
 
 GLM_ALIGNED_TYPEDEF (float64, aligned_f64, 8)
 64 bit double-qualifier floating-point aligned scalar. More...
 
 GLM_ALIGNED_TYPEDEF (vec1, aligned_vec1, 4)
 Single-qualifier floating-point aligned vector of 1 component. More...
 
 GLM_ALIGNED_TYPEDEF (vec2, aligned_vec2, 8)
 Single-qualifier floating-point aligned vector of 2 components. More...
 
 GLM_ALIGNED_TYPEDEF (vec3, aligned_vec3, 16)
 Single-qualifier floating-point aligned vector of 3 components. More...
 
 GLM_ALIGNED_TYPEDEF (vec4, aligned_vec4, 16)
 Single-qualifier floating-point aligned vector of 4 components. More...
 
 GLM_ALIGNED_TYPEDEF (fvec1, aligned_fvec1, 4)
 Single-qualifier floating-point aligned vector of 1 component. More...
 
 GLM_ALIGNED_TYPEDEF (fvec2, aligned_fvec2, 8)
 Single-qualifier floating-point aligned vector of 2 components. More...
 
 GLM_ALIGNED_TYPEDEF (fvec3, aligned_fvec3, 16)
 Single-qualifier floating-point aligned vector of 3 components. More...
 
 GLM_ALIGNED_TYPEDEF (fvec4, aligned_fvec4, 16)
 Single-qualifier floating-point aligned vector of 4 components. More...
 
 GLM_ALIGNED_TYPEDEF (f32vec1, aligned_f32vec1, 4)
 Single-qualifier floating-point aligned vector of 1 component. More...
 
 GLM_ALIGNED_TYPEDEF (f32vec2, aligned_f32vec2, 8)
 Single-qualifier floating-point aligned vector of 2 components. More...
 
 GLM_ALIGNED_TYPEDEF (f32vec3, aligned_f32vec3, 16)
 Single-qualifier floating-point aligned vector of 3 components. More...
 
 GLM_ALIGNED_TYPEDEF (f32vec4, aligned_f32vec4, 16)
 Single-qualifier floating-point aligned vector of 4 components. More...
 
 GLM_ALIGNED_TYPEDEF (dvec1, aligned_dvec1, 8)
 Double-qualifier floating-point aligned vector of 1 component. More...
 
 GLM_ALIGNED_TYPEDEF (dvec2, aligned_dvec2, 16)
 Double-qualifier floating-point aligned vector of 2 components. More...
 
 GLM_ALIGNED_TYPEDEF (dvec3, aligned_dvec3, 32)
 Double-qualifier floating-point aligned vector of 3 components. More...
 
 GLM_ALIGNED_TYPEDEF (dvec4, aligned_dvec4, 32)
 Double-qualifier floating-point aligned vector of 4 components. More...
 
 GLM_ALIGNED_TYPEDEF (f64vec1, aligned_f64vec1, 8)
 Double-qualifier floating-point aligned vector of 1 component. More...
 
 GLM_ALIGNED_TYPEDEF (f64vec2, aligned_f64vec2, 16)
 Double-qualifier floating-point aligned vector of 2 components. More...
 
 GLM_ALIGNED_TYPEDEF (f64vec3, aligned_f64vec3, 32)
 Double-qualifier floating-point aligned vector of 3 components. More...
 
 GLM_ALIGNED_TYPEDEF (f64vec4, aligned_f64vec4, 32)
 Double-qualifier floating-point aligned vector of 4 components. More...
 
 GLM_ALIGNED_TYPEDEF (mat2, aligned_mat2, 16)
 Single-qualifier floating-point aligned 1x1 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (mat3, aligned_mat3, 16)
 Single-qualifier floating-point aligned 3x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (mat4, aligned_mat4, 16)
 Single-qualifier floating-point aligned 4x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat2x2, aligned_fmat2, 16)
 Single-qualifier floating-point aligned 1x1 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat3x3, aligned_fmat3, 16)
 Single-qualifier floating-point aligned 3x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat4x4, aligned_fmat4, 16)
 Single-qualifier floating-point aligned 4x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat2x2, aligned_fmat2x2, 16)
 Single-qualifier floating-point aligned 1x1 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat2x3, aligned_fmat2x3, 16)
 Single-qualifier floating-point aligned 2x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat2x4, aligned_fmat2x4, 16)
 Single-qualifier floating-point aligned 2x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat3x2, aligned_fmat3x2, 16)
 Single-qualifier floating-point aligned 3x2 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat3x3, aligned_fmat3x3, 16)
 Single-qualifier floating-point aligned 3x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat3x4, aligned_fmat3x4, 16)
 Single-qualifier floating-point aligned 3x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat4x2, aligned_fmat4x2, 16)
 Single-qualifier floating-point aligned 4x2 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat4x3, aligned_fmat4x3, 16)
 Single-qualifier floating-point aligned 4x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat4x4, aligned_fmat4x4, 16)
 Single-qualifier floating-point aligned 4x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat2x2, aligned_f32mat2, 16)
 Single-qualifier floating-point aligned 1x1 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat3x3, aligned_f32mat3, 16)
 Single-qualifier floating-point aligned 3x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat4x4, aligned_f32mat4, 16)
 Single-qualifier floating-point aligned 4x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat2x2, aligned_f32mat2x2, 16)
 Single-qualifier floating-point aligned 1x1 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat2x3, aligned_f32mat2x3, 16)
 Single-qualifier floating-point aligned 2x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat2x4, aligned_f32mat2x4, 16)
 Single-qualifier floating-point aligned 2x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat3x2, aligned_f32mat3x2, 16)
 Single-qualifier floating-point aligned 3x2 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat3x3, aligned_f32mat3x3, 16)
 Single-qualifier floating-point aligned 3x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat3x4, aligned_f32mat3x4, 16)
 Single-qualifier floating-point aligned 3x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat4x2, aligned_f32mat4x2, 16)
 Single-qualifier floating-point aligned 4x2 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat4x3, aligned_f32mat4x3, 16)
 Single-qualifier floating-point aligned 4x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat4x4, aligned_f32mat4x4, 16)
 Single-qualifier floating-point aligned 4x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat2x2, aligned_f64mat2, 32)
 Double-qualifier floating-point aligned 1x1 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat3x3, aligned_f64mat3, 32)
 Double-qualifier floating-point aligned 3x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat4x4, aligned_f64mat4, 32)
 Double-qualifier floating-point aligned 4x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat2x2, aligned_f64mat2x2, 32)
 Double-qualifier floating-point aligned 1x1 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat2x3, aligned_f64mat2x3, 32)
 Double-qualifier floating-point aligned 2x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat2x4, aligned_f64mat2x4, 32)
 Double-qualifier floating-point aligned 2x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat3x2, aligned_f64mat3x2, 32)
 Double-qualifier floating-point aligned 3x2 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat3x3, aligned_f64mat3x3, 32)
 Double-qualifier floating-point aligned 3x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat3x4, aligned_f64mat3x4, 32)
 Double-qualifier floating-point aligned 3x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat4x2, aligned_f64mat4x2, 32)
 Double-qualifier floating-point aligned 4x2 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat4x3, aligned_f64mat4x3, 32)
 Double-qualifier floating-point aligned 4x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat4x4, aligned_f64mat4x4, 32)
 Double-qualifier floating-point aligned 4x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (quat, aligned_quat, 16)
 Single-qualifier floating-point aligned quaternion. More...
 
 GLM_ALIGNED_TYPEDEF (quat, aligned_fquat, 16)
 Single-qualifier floating-point aligned quaternion. More...
 
 GLM_ALIGNED_TYPEDEF (dquat, aligned_dquat, 32)
 Double-qualifier floating-point aligned quaternion. More...
 
 GLM_ALIGNED_TYPEDEF (f32quat, aligned_f32quat, 16)
 Single-qualifier floating-point aligned quaternion. More...
 
 GLM_ALIGNED_TYPEDEF (f64quat, aligned_f64quat, 32)
 Double-qualifier floating-point aligned quaternion. More...
 
-

Detailed Description

-

GLM_GTX_type_aligned

-
See also
Core features (dependence)
-
-GLM_GTC_quaternion (dependence)
- -

Definition in file gtx/type_aligned.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00162_source.html b/tests/OpenGL/package/glm/doc/api/a00162_source.html deleted file mode 100644 index 01745768..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00162_source.html +++ /dev/null @@ -1,842 +0,0 @@ - - - - - - -0.9.9 API documentation: type_aligned.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
gtx/type_aligned.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../gtc/type_precision.hpp"
-
18 #include "../gtc/quaternion.hpp"
-
19 
-
20 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
21 # ifndef GLM_ENABLE_EXPERIMENTAL
-
22 # pragma message("GLM: GLM_GTX_type_aligned is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
23 # else
-
24 # pragma message("GLM: GLM_GTX_type_aligned extension included")
-
25 # endif
-
26 #endif
-
27 
-
28 namespace glm
-
29 {
-
31  // Signed int vector types
-
32 
-
35 
-
38  GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1);
-
39 
-
42  GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2);
-
43 
-
46  GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4);
-
47 
-
50  GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8);
-
51 
-
52 
-
55  GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1);
-
56 
-
59  GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2);
-
60 
-
63  GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4);
-
64 
-
67  GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8);
-
68 
-
69 
-
72  GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1);
-
73 
-
76  GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2);
-
77 
-
80  GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4);
-
81 
-
84  GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8);
-
85 
-
86 
-
89  GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1);
-
90 
-
93  GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2);
-
94 
-
97  GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4);
-
98 
-
101  GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8);
-
102 
-
103 
-
106  GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1);
-
107 
-
110  GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2);
-
111 
-
114  GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4);
-
115 
-
118  GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8);
-
119 
-
120 
-
123  GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1);
-
124 
-
127  GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2);
-
128 
-
131  GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4);
-
132 
-
135  GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8);
-
136 
-
137 
-
140  GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1);
-
141 
-
144  GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2);
-
145 
-
148  GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4);
-
149 
-
152  GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8);
-
153 
-
154 
-
157  GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1);
-
158 
-
161  GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2);
-
162 
-
165  GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4);
-
166 
-
169  GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8);
-
170 
-
171 
-
174  GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1);
-
175 
-
178  GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2);
-
179 
-
182  GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4);
-
183 
-
186  GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8);
-
187 
-
188 
-
191  GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1);
-
192 
-
195  GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2);
-
196 
-
199  GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4);
-
200 
-
203  GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8);
-
204 
-
205 
-
208  GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1);
-
209 
-
212  GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2);
-
213 
-
216  GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4);
-
217 
-
220  GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8);
-
221 
-
222 
-
225  GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1);
-
226 
-
229  GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2);
-
230 
-
233  GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4);
-
234 
-
237  GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8);
-
238 
-
239 
- -
243 
- -
247 
- -
251 
- -
255 
-
256 
-
259  GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1);
-
260 
-
263  GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2);
-
264 
-
267  GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4);
-
268 
-
271  GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4);
-
272 
-
273 
-
276  GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2);
-
277 
-
280  GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4);
-
281 
-
284  GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8);
-
285 
-
288  GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8);
-
289 
-
290 
-
293  GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4);
-
294 
-
297  GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8);
-
298 
-
301  GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16);
-
302 
-
305  GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16);
-
306 
-
307 
-
310  GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8);
-
311 
-
314  GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16);
-
315 
-
318  GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32);
-
319 
-
322  GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32);
-
323 
-
324 
-
326  // Unsigned int vector types
-
327 
-
330  GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1);
-
331 
-
334  GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2);
-
335 
-
338  GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4);
-
339 
-
342  GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8);
-
343 
-
344 
-
347  GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1);
-
348 
-
351  GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2);
-
352 
-
355  GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4);
-
356 
-
359  GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8);
-
360 
-
361 
-
364  GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1);
-
365 
-
368  GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2);
-
369 
-
372  GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4);
-
373 
-
376  GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8);
-
377 
-
378 
-
381  GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1);
-
382 
-
385  GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2);
-
386 
-
389  GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4);
-
390 
-
393  GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8);
-
394 
-
395 
-
398  GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1);
-
399 
-
402  GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2);
-
403 
-
406  GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4);
-
407 
-
410  GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8);
-
411 
-
412 
-
415  GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1);
-
416 
-
419  GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2);
-
420 
-
423  GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4);
-
424 
-
427  GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8);
-
428 
-
429 
-
432  GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1);
-
433 
-
436  GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2);
-
437 
-
440  GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4);
-
441 
-
444  GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8);
-
445 
-
446 
-
449  GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1);
-
450 
-
453  GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2);
-
454 
-
457  GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4);
-
458 
-
461  GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8);
-
462 
-
463 
-
466  GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1);
-
467 
-
470  GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2);
-
471 
-
474  GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4);
-
475 
-
478  GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8);
-
479 
-
480 
-
483  GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1);
-
484 
-
487  GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2);
-
488 
-
491  GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4);
-
492 
-
495  GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8);
-
496 
-
497 
-
500  GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1);
-
501 
-
504  GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2);
-
505 
-
508  GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4);
-
509 
-
512  GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8);
-
513 
-
514 
-
517  GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1);
-
518 
-
521  GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2);
-
522 
-
525  GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4);
-
526 
-
529  GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8);
-
530 
-
531 
- -
535 
- -
539 
- -
543 
- -
547 
-
548 
-
551  GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1);
-
552 
-
555  GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2);
-
556 
-
559  GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4);
-
560 
-
563  GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4);
-
564 
-
565 
-
568  GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2);
-
569 
-
572  GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4);
-
573 
-
576  GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8);
-
577 
-
580  GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8);
-
581 
-
582 
-
585  GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4);
-
586 
-
589  GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8);
-
590 
-
593  GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16);
-
594 
-
597  GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16);
-
598 
-
599 
-
602  GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8);
-
603 
-
606  GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16);
-
607 
-
610  GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32);
-
611 
-
614  GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32);
-
615 
-
616 
-
618  // Float vector types
-
619 
-
622  GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4);
-
623 
-
626  GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4);
-
627 
-
630  GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4);
-
631 
-
632 # ifndef GLM_FORCE_SINGLE_ONLY
-
633 
-
636  GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8);
-
637 
-
640  GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8);
-
641 
-
644  GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8);
-
645 
-
646 # endif//GLM_FORCE_SINGLE_ONLY
-
647 
-
648 
- -
652 
- -
656 
- -
660 
- -
664 
-
665 
-
668  GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4);
-
669 
-
672  GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8);
-
673 
-
676  GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16);
-
677 
-
680  GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16);
-
681 
-
682 
-
685  GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4);
-
686 
-
689  GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8);
-
690 
-
693  GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16);
-
694 
-
697  GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16);
-
698 
-
699 
- -
703 
- -
707 
- -
711 
- -
715 
-
716 
-
717 # ifndef GLM_FORCE_SINGLE_ONLY
-
718 
-
721  GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8);
-
722 
-
725  GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16);
-
726 
-
729  GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32);
-
730 
-
733  GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32);
-
734 
-
735 # endif//GLM_FORCE_SINGLE_ONLY
-
736 
-
738  // Float matrix types
-
739 
-
742  //typedef detail::tmat1<f32> mat1;
-
743 
- -
747 
- -
751 
- -
755 
-
756 
-
759  //typedef detail::tmat1x1<f32> mat1;
-
760 
- -
764 
- -
768 
- -
772 
-
773 
-
776  //typedef detail::tmat1x1<f32> fmat1;
-
777 
-
780  GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16);
-
781 
-
784  GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16);
-
785 
-
788  GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16);
-
789 
-
790 
-
793  //typedef f32 fmat1x1;
-
794 
-
797  GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16);
-
798 
-
801  GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16);
-
802 
-
805  GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16);
-
806 
-
809  GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16);
-
810 
-
813  GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16);
-
814 
-
817  GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16);
-
818 
-
821  GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16);
-
822 
-
825  GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16);
-
826 
-
829  GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16);
-
830 
-
831 
-
834  //typedef detail::tmat1x1<f32, defaultp> f32mat1;
-
835 
-
838  GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16);
-
839 
-
842  GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16);
-
843 
-
846  GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16);
-
847 
-
848 
-
851  //typedef f32 f32mat1x1;
-
852 
-
855  GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16);
-
856 
-
859  GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16);
-
860 
-
863  GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16);
-
864 
-
867  GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16);
-
868 
-
871  GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16);
-
872 
-
875  GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16);
-
876 
-
879  GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16);
-
880 
-
883  GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16);
-
884 
-
887  GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16);
-
888 
-
889 
-
890 # ifndef GLM_FORCE_SINGLE_ONLY
-
891 
-
894  //typedef detail::tmat1x1<f64, defaultp> f64mat1;
-
895 
-
898  GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32);
-
899 
-
902  GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32);
-
903 
-
906  GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32);
-
907 
-
908 
-
911  //typedef f64 f64mat1x1;
-
912 
-
915  GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32);
-
916 
-
919  GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32);
-
920 
-
923  GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32);
-
924 
-
927  GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32);
-
928 
-
931  GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32);
-
932 
-
935  GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32);
-
936 
-
939  GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32);
-
940 
-
943  GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32);
-
944 
-
947  GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32);
-
948 
-
949 # endif//GLM_FORCE_SINGLE_ONLY
-
950 
-
951 
-
953  // Quaternion types
-
954 
-
957  GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16);
-
958 
-
961  GLM_ALIGNED_TYPEDEF(quat, aligned_fquat, 16);
-
962 
-
965  GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32);
-
966 
-
969  GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16);
-
970 
-
971 # ifndef GLM_FORCE_SINGLE_ONLY
-
972 
-
975  GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32);
-
976 
-
977 # endif//GLM_FORCE_SINGLE_ONLY
-
978 
-
980 }//namespace glm
-
981 
-
982 #include "type_aligned.inl"
-
mat< 4, 4, float, defaultp > mat4x4
4 columns of 4 components matrix of single-precision floating-point numbers.
-
uint64 highp_u64
High qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:133
-
vec< 3, f32, defaultp > f32vec3
Single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:463
-
mat< 2, 2, float, defaultp > mat2x2
2 columns of 2 components matrix of single-precision floating-point numbers.
-
uint32 mediump_uint32_t
Medium qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:127
-
aligned_highp_uvec2 aligned_uvec2
2 components vector aligned in memory of unsigned integer numbers.
-
uint64 lowp_uint64
Low qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:136
-
vec< 1, f32, defaultp > f32vec1
Single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:461
-
uint8 lowp_u8
Low qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:89
-
uint32 u32
Default qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:120
-
vec< 1, i32, defaultp > i32vec1
32 bit signed integer scalar type.
Definition: fwd.hpp:277
-
uint16 highp_uint16
High qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:110
-
mat< 3, 4, f64, defaultp > f64mat3x4
Double-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:787
-
vec< 3, i16, defaultp > i16vec3
16 bit signed integer vector of 3 components type.
Definition: fwd.hpp:259
-
uint32 lowp_uint32_t
Low qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:126
-
uint32 mediump_uint32
Medium qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:123
-
uint64 highp_uint64
High qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:138
-
uint32 lowp_uint32
Low qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:122
-
vec< 2, float, defaultp > vec2
2 components vector of single-precision floating-point numbers.
-
vec< 4, i64, defaultp > i64vec4
64 bit signed integer vector of 4 components type.
Definition: fwd.hpp:300
-
vec< 3, u16, defaultp > u16vec3
Default qualifier 16 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:361
-
aligned_highp_ivec3 aligned_ivec3
3 components vector aligned in memory of signed integer numbers.
-
vec< 2, i8, defaultp > i8vec2
8 bit signed integer vector of 2 components type.
Definition: fwd.hpp:238
-
aligned_highp_vec3 aligned_vec3
3 components vector aligned in memory of single-precision floating-point numbers. ...
-
vec< 3, unsigned int, defaultp > uvec3
3 components vector of unsigned integer numbers.
-
aligned_highp_uvec3 aligned_uvec3
3 components vector aligned in memory of unsigned integer numbers.
-
int64 highp_int64
High qualifier 64 bit signed integer type.
Definition: fwd.hpp:80
-
int16 lowp_int16_t
Low qualifier 16 bit signed integer type.
Definition: fwd.hpp:54
-
mat< 4, 2, f32, defaultp > f32mat4x2
Single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:702
-
uint32 mediump_u32
Medium qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:118
-
GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32)
Double-qualifier floating-point aligned quaternion.
-
aligned_highp_dvec3 aligned_dvec3
3 components vector aligned in memory of double-precision floating-point numbers. ...
-
aligned_highp_dvec1 aligned_dvec1
1 component vector aligned in memory of double-precision floating-point numbers.
-
vec< 3, int, defaultp > ivec3
3 components vector of signed integer numbers.
Definition: vector_int3.hpp:15
-
vec< 3, u64, defaultp > u64vec3
Default qualifier 64 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:401
-
uint8 lowp_uint8
Low qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:94
-
uint64 lowp_u64
Low qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:131
-
int8 mediump_int8
Medium qualifier 8 bit signed integer type.
Definition: fwd.hpp:37
-
int64 lowp_int64
Low qualifier 64 bit signed integer type.
Definition: fwd.hpp:78
-
vec< 2, u64, defaultp > u64vec2
Default qualifier 64 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:400
-
mat< 3, 4, f32, defaultp > f32mat3x4
Single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:707
-
uint64 u64
Default qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:134
-
vec< 1, f64, defaultp > f64vec1
Double-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:501
-
vec< 1, i16, defaultp > i16vec1
16 bit signed integer scalar type.
Definition: fwd.hpp:257
-
double float64
Double-qualifier floating-point scalar.
Definition: fwd.hpp:171
-
mat< 4, 2, f32, defaultp > fmat4x2
Single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:662
-
mat< 3, 4, f32, defaultp > fmat3x4
Single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:667
-
mat< 2, 4, f32, defaultp > f32mat2x4
Single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:706
-
vec< 4, i16, defaultp > i16vec4
16 bit signed integer vector of 4 components type.
Definition: fwd.hpp:260
-
uint8 lowp_uint8_t
Low qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:98
-
uint32 highp_uint32_t
High qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:128
-
mat< 3, 3, f32, defaultp > fmat3x3
Single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:664
-
mat< 2, 3, f32, defaultp > f32mat2x3
Single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:703
-
int16 mediump_int16
Medium qualifier 16 bit signed integer type.
Definition: fwd.hpp:51
-
uint16 mediump_u16
Medium qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:104
-
qua< f64, defaultp > f64quat
Double-qualifier floating-point quaternion.
Definition: fwd.hpp:815
-
qua< double, defaultp > dquat
Quaternion of double-precision floating-point numbers.
-
vec< 1, u64, defaultp > u64vec1
Default qualifier 64 bit unsigned integer scalar type.
Definition: fwd.hpp:399
-
int64 int64_t
64 bit signed integer type.
Definition: fwd.hpp:85
-
aligned_highp_mat2 aligned_mat2
2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.
-
vec< 1, u8, defaultp > u8vec1
Default qualifier 8 bit unsigned integer scalar type.
Definition: fwd.hpp:339
-
vec< 4, u8, defaultp > u8vec4
Default qualifier 8 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:342
-
int8 int8_t
8 bit signed integer type.
Definition: fwd.hpp:43
-
int32 i32
32 bit signed integer type.
Definition: fwd.hpp:62
-
mat< 2, 2, f64, defaultp > f64mat2x2
Double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:780
-
vec< 4, i8, defaultp > i8vec4
8 bit signed integer vector of 4 components type.
Definition: fwd.hpp:240
-
int32 highp_int32
High qualifier 32 bit signed integer type.
Definition: fwd.hpp:66
-
uint32 highp_u32
High qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:119
-
int32 highp_i32
High qualifier 32 bit signed integer type.
Definition: fwd.hpp:61
-
vec< 4, int, defaultp > ivec4
4 components vector of signed integer numbers.
Definition: vector_int4.hpp:15
-
vec< 4, u64, defaultp > u64vec4
Default qualifier 64 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:402
-
vec< 4, f32, defaultp > f32vec4
Single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:464
-
mat< 2, 3, f64, defaultp > f64mat2x3
Double-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:783
-
uint32 highp_uint32
High qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:124
-
mat< 3, 2, f64, defaultp > f64mat3x2
Double-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:781
-
vec< 1, u32, defaultp > u32vec1
Default qualifier 32 bit unsigned integer scalar type.
Definition: fwd.hpp:379
-
mat< 3, 3, f64, defaultp > f64mat3x3
Double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:784
-
uint8 highp_uint8
High qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:96
-
int8 highp_i8
High qualifier 8 bit signed integer type.
Definition: fwd.hpp:33
-
int8 mediump_i8
Medium qualifier 8 bit signed integer type.
Definition: fwd.hpp:32
-
int64 highp_int64_t
High qualifier 64 bit signed integer type.
Definition: fwd.hpp:84
-
mat< 4, 4, f32, defaultp > f32mat4x4
Single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:708
-
float float32_t
Default 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:160
-
mat< 2, 2, f32, defaultp > f32mat2x2
Single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:700
-
uint32 uint32_t
Default qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:129
-
aligned_highp_ivec1 aligned_ivec1
1 component vector aligned in memory of signed integer numbers.
-
vec< 4, float, defaultp > vec4
4 components vector of single-precision floating-point numbers.
-
uint8 u8
Default qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:92
-
float float32
Single-qualifier floating-point scalar.
Definition: fwd.hpp:155
-
vec< 4, f32, defaultp > fvec4
Single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:444
-
vec< 1, u16, defaultp > u16vec1
Default qualifier 16 bit unsigned integer scalar type.
Definition: fwd.hpp:359
-
vec< 1, double, defaultp > dvec1
1 components vector of double-precision floating-point numbers.
-
vec< 1, i8, defaultp > i8vec1
8 bit signed integer scalar type.
Definition: fwd.hpp:237
-
vec< 2, i32, defaultp > i32vec2
32 bit signed integer vector of 2 components type.
Definition: fwd.hpp:278
-
uint8 highp_uint8_t
High qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:100
-
uint64 mediump_uint64
Medium qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:137
-
int32 highp_int32_t
32 bit signed integer type.
Definition: fwd.hpp:70
-
vec< 3, f64, defaultp > f64vec3
Double-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:503
-
mat< 2, 4, f64, defaultp > f64mat2x4
Double-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:786
-
mat< 3, 3, float, defaultp > mat3x3
3 columns of 3 components matrix of single-precision floating-point numbers.
-
uint64 mediump_u64
Medium qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:132
-
vec< 2, unsigned int, defaultp > uvec2
2 components vector of unsigned integer numbers.
-
uint16 lowp_u16
Low qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:103
-
vec< 1, unsigned int, defaultp > uvec1
1 component vector of unsigned integer numbers.
-
int16 highp_i16
High qualifier 16 bit signed integer type.
Definition: fwd.hpp:47
-
int8 highp_int8
High qualifier 8 bit signed integer type.
Definition: fwd.hpp:38
-
mat< 4, 4, f64, defaultp > f64mat4x4
Double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:788
-
mat< 4, 3, f32, defaultp > fmat4x3
Single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:665
-
vec< 3, f32, defaultp > fvec3
Single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:443
-
vec< 2, i16, defaultp > i16vec2
16 bit signed integer vector of 2 components type.
Definition: fwd.hpp:258
-
mat< 4, 3, f32, defaultp > f32mat4x3
Single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:705
-
int16 lowp_i16
Low qualifier 16 bit signed integer type.
Definition: fwd.hpp:45
-
vec< 1, float, defaultp > vec1
1 components vector of single-precision floating-point numbers.
-
aligned_highp_mat4 aligned_mat4
4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.
-
double float64_t
Default 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:176
-
int16 lowp_int16
Low qualifier 16 bit signed integer type.
Definition: fwd.hpp:50
-
aligned_highp_uvec1 aligned_uvec1
1 component vector aligned in memory of unsigned integer numbers.
-
int64 lowp_int64_t
Low qualifier 64 bit signed integer type.
Definition: fwd.hpp:82
-
uint16 uint16_t
Default qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:115
-
aligned_highp_vec1 aligned_vec1
1 component vector aligned in memory of single-precision floating-point numbers.
-
int32 lowp_int32
Low qualifier 32 bit signed integer type.
Definition: fwd.hpp:64
-
uint8 uint8_t
Default qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:101
-
int32 mediump_int32_t
Medium qualifier 32 bit signed integer type.
Definition: fwd.hpp:69
-
mat< 3, 3, f32, defaultp > f32mat3x3
Single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:704
-
uint8 highp_u8
High qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:91
-
uint8 mediump_uint8
Medium qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:95
-
aligned_highp_uvec4 aligned_uvec4
4 components vector aligned in memory of unsigned integer numbers.
-
int64 mediump_int64_t
Medium qualifier 64 bit signed integer type.
Definition: fwd.hpp:83
-
aligned_highp_ivec4 aligned_ivec4
4 components vector aligned in memory of signed integer numbers.
-
int8 highp_int8_t
High qualifier 8 bit signed integer type.
Definition: fwd.hpp:42
-
mat< 3, 2, f32, defaultp > f32mat3x2
Single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:701
-
vec< 4, i32, defaultp > i32vec4
32 bit signed integer vector of 4 components type.
Definition: fwd.hpp:280
-
vec< 3, u32, defaultp > u32vec3
Default qualifier 32 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:381
-
vec< 2, u8, defaultp > u8vec2
Default qualifier 8 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:340
-
int16 mediump_i16
Medium qualifier 16 bit signed integer type.
Definition: fwd.hpp:46
-
vec< 3, i8, defaultp > i8vec3
8 bit signed integer vector of 3 components type.
Definition: fwd.hpp:239
-
aligned_highp_vec2 aligned_vec2
2 components vector aligned in memory of single-precision floating-point numbers. ...
-
mat< 4, 4, float, defaultp > mat4
4 columns of 4 components matrix of single-precision floating-point numbers.
-
aligned_highp_mat2x2 aligned_mat2x2
2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.
-
uint16 mediump_uint16_t
Medium qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:113
-
vec< 3, u8, defaultp > u8vec3
Default qualifier 8 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:341
-
int64 mediump_int64
Medium qualifier 64 bit signed integer type.
Definition: fwd.hpp:79
-
uint64 uint64_t
Default qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:143
-
vec< 3, i32, defaultp > i32vec3
32 bit signed integer vector of 3 components type.
Definition: fwd.hpp:279
-
uint16 lowp_uint16_t
Low qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:112
-
vec< 2, double, defaultp > dvec2
2 components vector of double-precision floating-point numbers.
-
uint16 lowp_uint16
Low qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:108
-
vec< 4, f64, defaultp > f64vec4
Double-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:504
-
int32 lowp_i32
Low qualifier 32 bit signed integer type.
Definition: fwd.hpp:59
-
vec< 3, float, defaultp > vec3
3 components vector of single-precision floating-point numbers.
-
int64 mediump_i64
Medium qualifier 64 bit signed integer type.
Definition: fwd.hpp:74
-
vec< 2, f32, defaultp > fvec2
Single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:442
-
aligned_highp_ivec2 aligned_ivec2
2 components vector aligned in memory of signed integer numbers.
-
int16 int16_t
16 bit signed integer type.
Definition: fwd.hpp:57
-
int64 highp_i64
High qualifier 64 bit signed integer type.
Definition: fwd.hpp:75
-
int32 int32_t
32 bit signed integer type.
Definition: fwd.hpp:71
-
vec< 2, f64, defaultp > f64vec2
Double-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:502
-
vec< 4, unsigned int, defaultp > uvec4
4 components vector of unsigned integer numbers.
-
uint64 lowp_uint64_t
Low qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:140
-
detail::uint64 uint64
64 bit unsigned integer type.
-
int16 highp_int16
High qualifier 16 bit signed integer type.
Definition: fwd.hpp:52
-
aligned_highp_mat4x4 aligned_mat4x4
4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.
-
mat< 2, 4, f32, defaultp > fmat2x4
Single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:666
-
int32 mediump_i32
Medium qualifier 32 bit signed integer type.
Definition: fwd.hpp:60
-
aligned_highp_dvec4 aligned_dvec4
4 components vector aligned in memory of double-precision floating-point numbers. ...
-
uint64 highp_uint64_t
High qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:142
-
vec< 4, u32, defaultp > u32vec4
Default qualifier 32 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:382
-
qua< f32, defaultp > f32quat
Single-qualifier floating-point quaternion.
Definition: fwd.hpp:805
-
detail::int64 int64
64 bit signed integer type.
-
mat< 4, 2, f64, defaultp > f64mat4x2
Double-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:782
-
mat< 2, 3, f32, defaultp > fmat2x3
Single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:663
-
uint16 u16
Default qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:106
-
int64 lowp_i64
Low qualifier 64 bit signed integer type.
Definition: fwd.hpp:73
-
vec< 2, int, defaultp > ivec2
2 components vector of signed integer numbers.
Definition: vector_int2.hpp:15
-
int8 mediump_int8_t
Medium qualifier 8 bit signed integer type.
Definition: fwd.hpp:41
-
int16 highp_int16_t
High qualifier 16 bit signed integer type.
Definition: fwd.hpp:56
-
vec< 1, i64, defaultp > i64vec1
64 bit signed integer scalar type.
Definition: fwd.hpp:297
-
aligned_highp_vec4 aligned_vec4
4 components vector aligned in memory of single-precision floating-point numbers. ...
-
uint32 lowp_u32
Low qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:117
-
vec< 1, int, defaultp > ivec1
1 component vector of signed integer numbers.
Definition: vector_int1.hpp:28
-
uint16 highp_u16
High qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:105
-
vec< 1, f32, defaultp > fvec1
Single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:441
-
int32 lowp_int32_t
Low qualifier 32 bit signed integer type.
Definition: fwd.hpp:68
-
vec< 2, f32, defaultp > f32vec2
Single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:462
-
mat< 2, 2, f32, defaultp > fmat2x2
Single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:660
-
int8 lowp_int8
Low qualifier 8 bit signed integer type.
Definition: fwd.hpp:36
-
vec< 3, double, defaultp > dvec3
3 components vector of double-precision floating-point numbers.
-
int8 lowp_int8_t
Low qualifier 8 bit signed integer type.
Definition: fwd.hpp:40
-
aligned_highp_mat3x3 aligned_mat3x3
3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.
-
mat< 4, 3, f64, defaultp > f64mat4x3
Double-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:785
-
int64 i64
64 bit signed integer type.
Definition: fwd.hpp:76
-
vec< 2, u32, defaultp > u32vec2
Default qualifier 32 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:380
-
qua< float, defaultp > quat
Quaternion of single-precision floating-point numbers.
-
int32 mediump_int32
Medium qualifier 32 bit signed integer type.
Definition: fwd.hpp:65
-
vec< 2, i64, defaultp > i64vec2
64 bit signed integer vector of 2 components type.
Definition: fwd.hpp:298
-
int16 i16
16 bit signed integer type.
Definition: fwd.hpp:48
-
vec< 4, double, defaultp > dvec4
4 components vector of double-precision floating-point numbers.
-
mat< 4, 4, f32, defaultp > fmat4x4
Single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:668
-
mat< 2, 2, float, defaultp > mat2
2 columns of 2 components matrix of single-precision floating-point numbers.
-
aligned_highp_mat3 aligned_mat3
3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.
-
mat< 3, 2, f32, defaultp > fmat3x2
Single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:661
-
vec< 4, u16, defaultp > u16vec4
Default qualifier 16 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:362
-
vec< 2, u16, defaultp > u16vec2
Default qualifier 16 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:360
-
uint8 mediump_u8
Medium qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:90
-
aligned_highp_dvec2 aligned_dvec2
2 components vector aligned in memory of double-precision floating-point numbers. ...
-
int16 mediump_int16_t
Medium qualifier 16 bit signed integer type.
Definition: fwd.hpp:55
-
int8 lowp_i8
Low qualifier 8 bit signed integer type.
Definition: fwd.hpp:31
-
vec< 3, i64, defaultp > i64vec3
64 bit signed integer vector of 3 components type.
Definition: fwd.hpp:299
-
mat< 3, 3, float, defaultp > mat3
3 columns of 3 components matrix of single-precision floating-point numbers.
-
uint16 highp_uint16_t
High qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:114
-
int8 i8
8 bit signed integer type.
Definition: fwd.hpp:34
-
uint64 mediump_uint64_t
Medium qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:141
-
uint8 mediump_uint8_t
Medium qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:99
-
Definition: common.hpp:20
-
uint16 mediump_uint16
Medium qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:109
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00163_source.html b/tests/OpenGL/package/glm/doc/api/a00163_source.html deleted file mode 100644 index a2df166b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00163_source.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - -0.9.9 API documentation: type_float.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_float.hpp
-
-
-
1 #pragma once
-
2 
-
3 #include "setup.hpp"
-
4 
-
5 #if GLM_COMPILER == GLM_COMPILER_VC12
-
6 # pragma warning(push)
-
7 # pragma warning(disable: 4512) // assignment operator could not be generated
-
8 #endif
-
9 
-
10 namespace glm{
-
11 namespace detail
-
12 {
-
13  template <typename T>
-
14  union float_t
-
15  {};
-
16 
-
17  // https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
-
18  template <>
-
19  union float_t<float>
-
20  {
-
21  typedef int int_type;
-
22  typedef float float_type;
-
23 
-
24  GLM_CONSTEXPR float_t(float_type Num = 0.0f) : f(Num) {}
-
25 
-
26  GLM_CONSTEXPR float_t& operator=(float_t const& x)
-
27  {
-
28  f = x.f;
-
29  return *this;
-
30  }
-
31 
-
32  // Portable extraction of components.
-
33  GLM_CONSTEXPR bool negative() const { return i < 0; }
-
34  GLM_CONSTEXPR int_type mantissa() const { return i & ((1 << 23) - 1); }
-
35  GLM_CONSTEXPR int_type exponent() const { return (i >> 23) & ((1 << 8) - 1); }
-
36 
-
37  int_type i;
-
38  float_type f;
-
39  };
-
40 
-
41  template <>
-
42  union float_t<double>
-
43  {
-
44  typedef detail::int64 int_type;
-
45  typedef double float_type;
-
46 
-
47  GLM_CONSTEXPR float_t(float_type Num = static_cast<float_type>(0)) : f(Num) {}
-
48 
-
49  GLM_CONSTEXPR float_t& operator=(float_t const& x)
-
50  {
-
51  f = x.f;
-
52  return *this;
-
53  }
-
54 
-
55  // Portable extraction of components.
-
56  GLM_CONSTEXPR bool negative() const { return i < 0; }
-
57  GLM_CONSTEXPR int_type mantissa() const { return i & ((int_type(1) << 52) - 1); }
-
58  GLM_CONSTEXPR int_type exponent() const { return (i >> 52) & ((int_type(1) << 11) - 1); }
-
59 
-
60  int_type i;
-
61  float_type f;
-
62  };
-
63 }//namespace detail
-
64 }//namespace glm
-
65 
-
66 #if GLM_COMPILER == GLM_COMPILER_VC12
-
67 # pragma warning(pop)
-
68 #endif
-
detail::int64 int64
64 bit signed integer type.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00164_source.html b/tests/OpenGL/package/glm/doc/api/a00164_source.html deleted file mode 100644 index 89639d25..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00164_source.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - -0.9.9 API documentation: type_half.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_half.hpp
-
-
-
1 #pragma once
-
2 
-
3 #include "setup.hpp"
-
4 
-
5 namespace glm{
-
6 namespace detail
-
7 {
-
8  typedef short hdata;
-
9 
-
10  GLM_FUNC_DECL float toFloat32(hdata value);
-
11  GLM_FUNC_DECL hdata toFloat16(float const& value);
-
12 
-
13 }//namespace detail
-
14 }//namespace glm
-
15 
-
16 #include "type_half.inl"
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00165.html b/tests/OpenGL/package/glm/doc/api/a00165.html deleted file mode 100644 index e6a9c91b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00165.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat2x2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat2x2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file type_mat2x2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00165_source.html b/tests/OpenGL/package/glm/doc/api/a00165_source.html deleted file mode 100644 index 0b4e126c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00165_source.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat2x2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat2x2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 
-
6 #include "type_vec2.hpp"
-
7 #include <limits>
-
8 #include <cstddef>
-
9 
-
10 namespace glm
-
11 {
-
12  template<typename T, qualifier Q>
-
13  struct mat<2, 2, T, Q>
-
14  {
-
15  typedef vec<2, T, Q> col_type;
-
16  typedef vec<2, T, Q> row_type;
-
17  typedef mat<2, 2, T, Q> type;
-
18  typedef mat<2, 2, T, Q> transpose_type;
-
19  typedef T value_type;
-
20 
-
21  private:
-
22  col_type value[2];
-
23 
-
24  public:
-
25  // -- Accesses --
-
26 
-
27  typedef length_t length_type;
-
28  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; }
-
29 
-
30  GLM_FUNC_DECL col_type & operator[](length_type i);
-
31  GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const;
-
32 
-
33  // -- Constructors --
-
34 
-
35  GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;
-
36  template<qualifier P>
-
37  GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 2, T, P> const& m);
-
38 
-
39  GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);
-
40  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
41  T const& x1, T const& y1,
-
42  T const& x2, T const& y2);
-
43  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
44  col_type const& v1,
-
45  col_type const& v2);
-
46 
-
47  // -- Conversions --
-
48 
-
49  template<typename U, typename V, typename M, typename N>
-
50  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
51  U const& x1, V const& y1,
-
52  M const& x2, N const& y2);
-
53 
-
54  template<typename U, typename V>
-
55  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
56  vec<2, U, Q> const& v1,
-
57  vec<2, V, Q> const& v2);
-
58 
-
59  // -- Matrix conversions --
-
60 
-
61  template<typename U, qualifier P>
-
62  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, U, P> const& m);
-
63 
-
64  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);
-
65  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);
-
66  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);
-
67  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);
-
68  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);
-
69  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);
-
70  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);
-
71  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);
-
72 
-
73  // -- Unary arithmetic operators --
-
74 
-
75  template<typename U>
-
76  GLM_FUNC_DECL mat<2, 2, T, Q> & operator=(mat<2, 2, U, Q> const& m);
-
77  template<typename U>
-
78  GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(U s);
-
79  template<typename U>
-
80  GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(mat<2, 2, U, Q> const& m);
-
81  template<typename U>
-
82  GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(U s);
-
83  template<typename U>
-
84  GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(mat<2, 2, U, Q> const& m);
-
85  template<typename U>
-
86  GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(U s);
-
87  template<typename U>
-
88  GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(mat<2, 2, U, Q> const& m);
-
89  template<typename U>
-
90  GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(U s);
-
91  template<typename U>
-
92  GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(mat<2, 2, U, Q> const& m);
-
93 
-
94  // -- Increment and decrement operators --
-
95 
-
96  GLM_FUNC_DECL mat<2, 2, T, Q> & operator++ ();
-
97  GLM_FUNC_DECL mat<2, 2, T, Q> & operator-- ();
-
98  GLM_FUNC_DECL mat<2, 2, T, Q> operator++(int);
-
99  GLM_FUNC_DECL mat<2, 2, T, Q> operator--(int);
-
100  };
-
101 
-
102  // -- Unary operators --
-
103 
-
104  template<typename T, qualifier Q>
-
105  GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m);
-
106 
-
107  template<typename T, qualifier Q>
-
108  GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m);
-
109 
-
110  // -- Binary operators --
-
111 
-
112  template<typename T, qualifier Q>
-
113  GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar);
-
114 
-
115  template<typename T, qualifier Q>
-
116  GLM_FUNC_DECL mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m);
-
117 
-
118  template<typename T, qualifier Q>
-
119  GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);
-
120 
-
121  template<typename T, qualifier Q>
-
122  GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar);
-
123 
-
124  template<typename T, qualifier Q>
-
125  GLM_FUNC_DECL mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m);
-
126 
-
127  template<typename T, qualifier Q>
-
128  GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);
-
129 
-
130  template<typename T, qualifier Q>
-
131  GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar);
-
132 
-
133  template<typename T, qualifier Q>
-
134  GLM_FUNC_DECL mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m);
-
135 
-
136  template<typename T, qualifier Q>
-
137  GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator*(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v);
-
138 
-
139  template<typename T, qualifier Q>
-
140  GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator*(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m);
-
141 
-
142  template<typename T, qualifier Q>
-
143  GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);
-
144 
-
145  template<typename T, qualifier Q>
-
146  GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2);
-
147 
-
148  template<typename T, qualifier Q>
-
149  GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2);
-
150 
-
151  template<typename T, qualifier Q>
-
152  GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar);
-
153 
-
154  template<typename T, qualifier Q>
-
155  GLM_FUNC_DECL mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m);
-
156 
-
157  template<typename T, qualifier Q>
-
158  GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v);
-
159 
-
160  template<typename T, qualifier Q>
-
161  GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m);
-
162 
-
163  template<typename T, qualifier Q>
-
164  GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);
-
165 
-
166  // -- Boolean operators --
-
167 
-
168  template<typename T, qualifier Q>
-
169  GLM_FUNC_DECL bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);
-
170 
-
171  template<typename T, qualifier Q>
-
172  GLM_FUNC_DECL bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);
-
173 } //namespace glm
-
174 
-
175 #ifndef GLM_EXTERNAL_TEMPLATE
-
176 #include "type_mat2x2.inl"
-
177 #endif
-
Core features
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00166.html b/tests/OpenGL/package/glm/doc/api/a00166.html deleted file mode 100644 index fdcf3e8c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00166.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat2x3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat2x3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file type_mat2x3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00166_source.html b/tests/OpenGL/package/glm/doc/api/a00166_source.html deleted file mode 100644 index a2f39c68..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00166_source.html +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat2x3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat2x3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 
-
6 #include "type_vec2.hpp"
-
7 #include "type_vec3.hpp"
-
8 #include <limits>
-
9 #include <cstddef>
-
10 
-
11 namespace glm
-
12 {
-
13  template<typename T, qualifier Q>
-
14  struct mat<2, 3, T, Q>
-
15  {
-
16  typedef vec<3, T, Q> col_type;
-
17  typedef vec<2, T, Q> row_type;
-
18  typedef mat<2, 3, T, Q> type;
-
19  typedef mat<3, 2, T, Q> transpose_type;
-
20  typedef T value_type;
-
21 
-
22  private:
-
23  col_type value[2];
-
24 
-
25  public:
-
26  // -- Accesses --
-
27 
-
28  typedef length_t length_type;
-
29  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; }
-
30 
-
31  GLM_FUNC_DECL col_type & operator[](length_type i);
-
32  GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const;
-
33 
-
34  // -- Constructors --
-
35 
-
36  GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;
-
37  template<qualifier P>
-
38  GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 3, T, P> const& m);
-
39 
-
40  GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);
-
41  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
42  T x0, T y0, T z0,
-
43  T x1, T y1, T z1);
-
44  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
45  col_type const& v0,
-
46  col_type const& v1);
-
47 
-
48  // -- Conversions --
-
49 
-
50  template<typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2>
-
51  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
52  X1 x1, Y1 y1, Z1 z1,
-
53  X2 x2, Y2 y2, Z2 z2);
-
54 
-
55  template<typename U, typename V>
-
56  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
57  vec<3, U, Q> const& v1,
-
58  vec<3, V, Q> const& v2);
-
59 
-
60  // -- Matrix conversions --
-
61 
-
62  template<typename U, qualifier P>
-
63  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, U, P> const& m);
-
64 
-
65  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);
-
66  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);
-
67  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);
-
68  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);
-
69  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);
-
70  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);
-
71  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);
-
72  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);
-
73 
-
74  // -- Unary arithmetic operators --
-
75 
-
76  template<typename U>
-
77  GLM_FUNC_DECL mat<2, 3, T, Q> & operator=(mat<2, 3, U, Q> const& m);
-
78  template<typename U>
-
79  GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(U s);
-
80  template<typename U>
-
81  GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(mat<2, 3, U, Q> const& m);
-
82  template<typename U>
-
83  GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(U s);
-
84  template<typename U>
-
85  GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(mat<2, 3, U, Q> const& m);
-
86  template<typename U>
-
87  GLM_FUNC_DECL mat<2, 3, T, Q> & operator*=(U s);
-
88  template<typename U>
-
89  GLM_FUNC_DECL mat<2, 3, T, Q> & operator/=(U s);
-
90 
-
91  // -- Increment and decrement operators --
-
92 
-
93  GLM_FUNC_DECL mat<2, 3, T, Q> & operator++ ();
-
94  GLM_FUNC_DECL mat<2, 3, T, Q> & operator-- ();
-
95  GLM_FUNC_DECL mat<2, 3, T, Q> operator++(int);
-
96  GLM_FUNC_DECL mat<2, 3, T, Q> operator--(int);
-
97  };
-
98 
-
99  // -- Unary operators --
-
100 
-
101  template<typename T, qualifier Q>
-
102  GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m);
-
103 
-
104  template<typename T, qualifier Q>
-
105  GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m);
-
106 
-
107  // -- Binary operators --
-
108 
-
109  template<typename T, qualifier Q>
-
110  GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar);
-
111 
-
112  template<typename T, qualifier Q>
-
113  GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2);
-
114 
-
115  template<typename T, qualifier Q>
-
116  GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar);
-
117 
-
118  template<typename T, qualifier Q>
-
119  GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2);
-
120 
-
121  template<typename T, qualifier Q>
-
122  GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar);
-
123 
-
124  template<typename T, qualifier Q>
-
125  GLM_FUNC_DECL mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m);
-
126 
-
127  template<typename T, qualifier Q>
-
128  GLM_FUNC_DECL typename mat<2, 3, T, Q>::col_type operator*(mat<2, 3, T, Q> const& m, typename mat<2, 3, T, Q>::row_type const& v);
-
129 
-
130  template<typename T, qualifier Q>
-
131  GLM_FUNC_DECL typename mat<2, 3, T, Q>::row_type operator*(typename mat<2, 3, T, Q>::col_type const& v, mat<2, 3, T, Q> const& m);
-
132 
-
133  template<typename T, qualifier Q>
-
134  GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2);
-
135 
-
136  template<typename T, qualifier Q>
-
137  GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2);
-
138 
-
139  template<typename T, qualifier Q>
-
140  GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2);
-
141 
-
142  template<typename T, qualifier Q>
-
143  GLM_FUNC_DECL mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar);
-
144 
-
145  template<typename T, qualifier Q>
-
146  GLM_FUNC_DECL mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m);
-
147 
-
148  // -- Boolean operators --
-
149 
-
150  template<typename T, qualifier Q>
-
151  GLM_FUNC_DECL bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2);
-
152 
-
153  template<typename T, qualifier Q>
-
154  GLM_FUNC_DECL bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2);
-
155 }//namespace glm
-
156 
-
157 #ifndef GLM_EXTERNAL_TEMPLATE
-
158 #include "type_mat2x3.inl"
-
159 #endif
-
Core features
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
Core features
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00167.html b/tests/OpenGL/package/glm/doc/api/a00167.html deleted file mode 100644 index 655c011b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00167.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat2x4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat2x4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file type_mat2x4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00167_source.html b/tests/OpenGL/package/glm/doc/api/a00167_source.html deleted file mode 100644 index 810fb6f2..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00167_source.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat2x4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat2x4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 
-
6 #include "type_vec2.hpp"
-
7 #include "type_vec4.hpp"
-
8 #include <limits>
-
9 #include <cstddef>
-
10 
-
11 namespace glm
-
12 {
-
13  template<typename T, qualifier Q>
-
14  struct mat<2, 4, T, Q>
-
15  {
-
16  typedef vec<4, T, Q> col_type;
-
17  typedef vec<2, T, Q> row_type;
-
18  typedef mat<2, 4, T, Q> type;
-
19  typedef mat<4, 2, T, Q> transpose_type;
-
20  typedef T value_type;
-
21 
-
22  private:
-
23  col_type value[2];
-
24 
-
25  public:
-
26  // -- Accesses --
-
27 
-
28  typedef length_t length_type;
-
29  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; }
-
30 
-
31  GLM_FUNC_DECL col_type & operator[](length_type i);
-
32  GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const;
-
33 
-
34  // -- Constructors --
-
35 
-
36  GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;
-
37  template<qualifier P>
-
38  GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 4, T, P> const& m);
-
39 
-
40  GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);
-
41  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
42  T x0, T y0, T z0, T w0,
-
43  T x1, T y1, T z1, T w1);
-
44  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
45  col_type const& v0,
-
46  col_type const& v1);
-
47 
-
48  // -- Conversions --
-
49 
-
50  template<
-
51  typename X1, typename Y1, typename Z1, typename W1,
-
52  typename X2, typename Y2, typename Z2, typename W2>
-
53  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
54  X1 x1, Y1 y1, Z1 z1, W1 w1,
-
55  X2 x2, Y2 y2, Z2 z2, W2 w2);
-
56 
-
57  template<typename U, typename V>
-
58  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
59  vec<4, U, Q> const& v1,
-
60  vec<4, V, Q> const& v2);
-
61 
-
62  // -- Matrix conversions --
-
63 
-
64  template<typename U, qualifier P>
-
65  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, U, P> const& m);
-
66 
-
67  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);
-
68  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);
-
69  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);
-
70  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);
-
71  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);
-
72  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);
-
73  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);
-
74  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);
-
75 
-
76  // -- Unary arithmetic operators --
-
77 
-
78  template<typename U>
-
79  GLM_FUNC_DECL mat<2, 4, T, Q> & operator=(mat<2, 4, U, Q> const& m);
-
80  template<typename U>
-
81  GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(U s);
-
82  template<typename U>
-
83  GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(mat<2, 4, U, Q> const& m);
-
84  template<typename U>
-
85  GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(U s);
-
86  template<typename U>
-
87  GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(mat<2, 4, U, Q> const& m);
-
88  template<typename U>
-
89  GLM_FUNC_DECL mat<2, 4, T, Q> & operator*=(U s);
-
90  template<typename U>
-
91  GLM_FUNC_DECL mat<2, 4, T, Q> & operator/=(U s);
-
92 
-
93  // -- Increment and decrement operators --
-
94 
-
95  GLM_FUNC_DECL mat<2, 4, T, Q> & operator++ ();
-
96  GLM_FUNC_DECL mat<2, 4, T, Q> & operator-- ();
-
97  GLM_FUNC_DECL mat<2, 4, T, Q> operator++(int);
-
98  GLM_FUNC_DECL mat<2, 4, T, Q> operator--(int);
-
99  };
-
100 
-
101  // -- Unary operators --
-
102 
-
103  template<typename T, qualifier Q>
-
104  GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m);
-
105 
-
106  template<typename T, qualifier Q>
-
107  GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m);
-
108 
-
109  // -- Binary operators --
-
110 
-
111  template<typename T, qualifier Q>
-
112  GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar);
-
113 
-
114  template<typename T, qualifier Q>
-
115  GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2);
-
116 
-
117  template<typename T, qualifier Q>
-
118  GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar);
-
119 
-
120  template<typename T, qualifier Q>
-
121  GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2);
-
122 
-
123  template<typename T, qualifier Q>
-
124  GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar);
-
125 
-
126  template<typename T, qualifier Q>
-
127  GLM_FUNC_DECL mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m);
-
128 
-
129  template<typename T, qualifier Q>
-
130  GLM_FUNC_DECL typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v);
-
131 
-
132  template<typename T, qualifier Q>
-
133  GLM_FUNC_DECL typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m);
-
134 
-
135  template<typename T, qualifier Q>
-
136  GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2);
-
137 
-
138  template<typename T, qualifier Q>
-
139  GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2);
-
140 
-
141  template<typename T, qualifier Q>
-
142  GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2);
-
143 
-
144  template<typename T, qualifier Q>
-
145  GLM_FUNC_DECL mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar);
-
146 
-
147  template<typename T, qualifier Q>
-
148  GLM_FUNC_DECL mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m);
-
149 
-
150  // -- Boolean operators --
-
151 
-
152  template<typename T, qualifier Q>
-
153  GLM_FUNC_DECL bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2);
-
154 
-
155  template<typename T, qualifier Q>
-
156  GLM_FUNC_DECL bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2);
-
157 }//namespace glm
-
158 
-
159 #ifndef GLM_EXTERNAL_TEMPLATE
-
160 #include "type_mat2x4.inl"
-
161 #endif
-
Core features
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
Core features
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00168.html b/tests/OpenGL/package/glm/doc/api/a00168.html deleted file mode 100644 index f3840a2e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00168.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat3x2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat3x2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file type_mat3x2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00168_source.html b/tests/OpenGL/package/glm/doc/api/a00168_source.html deleted file mode 100644 index cade0e91..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00168_source.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat3x2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat3x2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 
-
6 #include "type_vec2.hpp"
-
7 #include "type_vec3.hpp"
-
8 #include <limits>
-
9 #include <cstddef>
-
10 
-
11 namespace glm
-
12 {
-
13  template<typename T, qualifier Q>
-
14  struct mat<3, 2, T, Q>
-
15  {
-
16  typedef vec<2, T, Q> col_type;
-
17  typedef vec<3, T, Q> row_type;
-
18  typedef mat<3, 2, T, Q> type;
-
19  typedef mat<2, 3, T, Q> transpose_type;
-
20  typedef T value_type;
-
21 
-
22  private:
-
23  col_type value[3];
-
24 
-
25  public:
-
26  // -- Accesses --
-
27 
-
28  typedef length_t length_type;
-
29  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; }
-
30 
-
31  GLM_FUNC_DECL col_type & operator[](length_type i);
-
32  GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const;
-
33 
-
34  // -- Constructors --
-
35 
-
36  GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;
-
37  template<qualifier P>
-
38  GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 2, T, P> const& m);
-
39 
-
40  GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);
-
41  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
42  T x0, T y0,
-
43  T x1, T y1,
-
44  T x2, T y2);
-
45  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
46  col_type const& v0,
-
47  col_type const& v1,
-
48  col_type const& v2);
-
49 
-
50  // -- Conversions --
-
51 
-
52  template<
-
53  typename X1, typename Y1,
-
54  typename X2, typename Y2,
-
55  typename X3, typename Y3>
-
56  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
57  X1 x1, Y1 y1,
-
58  X2 x2, Y2 y2,
-
59  X3 x3, Y3 y3);
-
60 
-
61  template<typename V1, typename V2, typename V3>
-
62  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
63  vec<2, V1, Q> const& v1,
-
64  vec<2, V2, Q> const& v2,
-
65  vec<2, V3, Q> const& v3);
-
66 
-
67  // -- Matrix conversions --
-
68 
-
69  template<typename U, qualifier P>
-
70  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, U, P> const& m);
-
71 
-
72  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);
-
73  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);
-
74  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);
-
75  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);
-
76  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);
-
77  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);
-
78  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);
-
79  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);
-
80 
-
81  // -- Unary arithmetic operators --
-
82 
-
83  template<typename U>
-
84  GLM_FUNC_DECL mat<3, 2, T, Q> & operator=(mat<3, 2, U, Q> const& m);
-
85  template<typename U>
-
86  GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(U s);
-
87  template<typename U>
-
88  GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(mat<3, 2, U, Q> const& m);
-
89  template<typename U>
-
90  GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(U s);
-
91  template<typename U>
-
92  GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(mat<3, 2, U, Q> const& m);
-
93  template<typename U>
-
94  GLM_FUNC_DECL mat<3, 2, T, Q> & operator*=(U s);
-
95  template<typename U>
-
96  GLM_FUNC_DECL mat<3, 2, T, Q> & operator/=(U s);
-
97 
-
98  // -- Increment and decrement operators --
-
99 
-
100  GLM_FUNC_DECL mat<3, 2, T, Q> & operator++ ();
-
101  GLM_FUNC_DECL mat<3, 2, T, Q> & operator-- ();
-
102  GLM_FUNC_DECL mat<3, 2, T, Q> operator++(int);
-
103  GLM_FUNC_DECL mat<3, 2, T, Q> operator--(int);
-
104  };
-
105 
-
106  // -- Unary operators --
-
107 
-
108  template<typename T, qualifier Q>
-
109  GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m);
-
110 
-
111  template<typename T, qualifier Q>
-
112  GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m);
-
113 
-
114  // -- Binary operators --
-
115 
-
116  template<typename T, qualifier Q>
-
117  GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar);
-
118 
-
119  template<typename T, qualifier Q>
-
120  GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2);
-
121 
-
122  template<typename T, qualifier Q>
-
123  GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar);
-
124 
-
125  template<typename T, qualifier Q>
-
126  GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2);
-
127 
-
128  template<typename T, qualifier Q>
-
129  GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar);
-
130 
-
131  template<typename T, qualifier Q>
-
132  GLM_FUNC_DECL mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m);
-
133 
-
134  template<typename T, qualifier Q>
-
135  GLM_FUNC_DECL typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v);
-
136 
-
137  template<typename T, qualifier Q>
-
138  GLM_FUNC_DECL typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m);
-
139 
-
140  template<typename T, qualifier Q>
-
141  GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2);
-
142 
-
143  template<typename T, qualifier Q>
-
144  GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2);
-
145 
-
146  template<typename T, qualifier Q>
-
147  GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2);
-
148 
-
149  template<typename T, qualifier Q>
-
150  GLM_FUNC_DECL mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar);
-
151 
-
152  template<typename T, qualifier Q>
-
153  GLM_FUNC_DECL mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m);
-
154 
-
155  // -- Boolean operators --
-
156 
-
157  template<typename T, qualifier Q>
-
158  GLM_FUNC_DECL bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2);
-
159 
-
160  template<typename T, qualifier Q>
-
161  GLM_FUNC_DECL bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2);
-
162 
-
163 }//namespace glm
-
164 
-
165 #ifndef GLM_EXTERNAL_TEMPLATE
-
166 #include "type_mat3x2.inl"
-
167 #endif
-
Core features
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
Core features
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00169.html b/tests/OpenGL/package/glm/doc/api/a00169.html deleted file mode 100644 index 2bc35c69..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00169.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat3x3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat3x3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file type_mat3x3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00169_source.html b/tests/OpenGL/package/glm/doc/api/a00169_source.html deleted file mode 100644 index fbe0c929..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00169_source.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat3x3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat3x3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 
-
6 #include "type_vec3.hpp"
-
7 #include <limits>
-
8 #include <cstddef>
-
9 
-
10 namespace glm
-
11 {
-
12  template<typename T, qualifier Q>
-
13  struct mat<3, 3, T, Q>
-
14  {
-
15  typedef vec<3, T, Q> col_type;
-
16  typedef vec<3, T, Q> row_type;
-
17  typedef mat<3, 3, T, Q> type;
-
18  typedef mat<3, 3, T, Q> transpose_type;
-
19  typedef T value_type;
-
20 
-
21  private:
-
22  col_type value[3];
-
23 
-
24  public:
-
25  // -- Accesses --
-
26 
-
27  typedef length_t length_type;
-
28  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; }
-
29 
-
30  GLM_FUNC_DECL col_type & operator[](length_type i);
-
31  GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const;
-
32 
-
33  // -- Constructors --
-
34 
-
35  GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;
-
36  template<qualifier P>
-
37  GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 3, T, P> const& m);
-
38 
-
39  GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);
-
40  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
41  T x0, T y0, T z0,
-
42  T x1, T y1, T z1,
-
43  T x2, T y2, T z2);
-
44  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
45  col_type const& v0,
-
46  col_type const& v1,
-
47  col_type const& v2);
-
48 
-
49  // -- Conversions --
-
50 
-
51  template<
-
52  typename X1, typename Y1, typename Z1,
-
53  typename X2, typename Y2, typename Z2,
-
54  typename X3, typename Y3, typename Z3>
-
55  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
56  X1 x1, Y1 y1, Z1 z1,
-
57  X2 x2, Y2 y2, Z2 z2,
-
58  X3 x3, Y3 y3, Z3 z3);
-
59 
-
60  template<typename V1, typename V2, typename V3>
-
61  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
62  vec<3, V1, Q> const& v1,
-
63  vec<3, V2, Q> const& v2,
-
64  vec<3, V3, Q> const& v3);
-
65 
-
66  // -- Matrix conversions --
-
67 
-
68  template<typename U, qualifier P>
-
69  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, U, P> const& m);
-
70 
-
71  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);
-
72  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);
-
73  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);
-
74  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);
-
75  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);
-
76  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);
-
77  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);
-
78  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);
-
79 
-
80  // -- Unary arithmetic operators --
-
81 
-
82  template<typename U>
-
83  GLM_FUNC_DECL mat<3, 3, T, Q> & operator=(mat<3, 3, U, Q> const& m);
-
84  template<typename U>
-
85  GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(U s);
-
86  template<typename U>
-
87  GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(mat<3, 3, U, Q> const& m);
-
88  template<typename U>
-
89  GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(U s);
-
90  template<typename U>
-
91  GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(mat<3, 3, U, Q> const& m);
-
92  template<typename U>
-
93  GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(U s);
-
94  template<typename U>
-
95  GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(mat<3, 3, U, Q> const& m);
-
96  template<typename U>
-
97  GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(U s);
-
98  template<typename U>
-
99  GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(mat<3, 3, U, Q> const& m);
-
100 
-
101  // -- Increment and decrement operators --
-
102 
-
103  GLM_FUNC_DECL mat<3, 3, T, Q> & operator++();
-
104  GLM_FUNC_DECL mat<3, 3, T, Q> & operator--();
-
105  GLM_FUNC_DECL mat<3, 3, T, Q> operator++(int);
-
106  GLM_FUNC_DECL mat<3, 3, T, Q> operator--(int);
-
107  };
-
108 
-
109  // -- Unary operators --
-
110 
-
111  template<typename T, qualifier Q>
-
112  GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m);
-
113 
-
114  template<typename T, qualifier Q>
-
115  GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m);
-
116 
-
117  // -- Binary operators --
-
118 
-
119  template<typename T, qualifier Q>
-
120  GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar);
-
121 
-
122  template<typename T, qualifier Q>
-
123  GLM_FUNC_DECL mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m);
-
124 
-
125  template<typename T, qualifier Q>
-
126  GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);
-
127 
-
128  template<typename T, qualifier Q>
-
129  GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar);
-
130 
-
131  template<typename T, qualifier Q>
-
132  GLM_FUNC_DECL mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m);
-
133 
-
134  template<typename T, qualifier Q>
-
135  GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);
-
136 
-
137  template<typename T, qualifier Q>
-
138  GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar);
-
139 
-
140  template<typename T, qualifier Q>
-
141  GLM_FUNC_DECL mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m);
-
142 
-
143  template<typename T, qualifier Q>
-
144  GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v);
-
145 
-
146  template<typename T, qualifier Q>
-
147  GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m);
-
148 
-
149  template<typename T, qualifier Q>
-
150  GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);
-
151 
-
152  template<typename T, qualifier Q>
-
153  GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2);
-
154 
-
155  template<typename T, qualifier Q>
-
156  GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2);
-
157 
-
158  template<typename T, qualifier Q>
-
159  GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar);
-
160 
-
161  template<typename T, qualifier Q>
-
162  GLM_FUNC_DECL mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m);
-
163 
-
164  template<typename T, qualifier Q>
-
165  GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v);
-
166 
-
167  template<typename T, qualifier Q>
-
168  GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m);
-
169 
-
170  template<typename T, qualifier Q>
-
171  GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);
-
172 
-
173  // -- Boolean operators --
-
174 
-
175  template<typename T, qualifier Q>
-
176  GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);
-
177 
-
178  template<typename T, qualifier Q>
-
179  GLM_FUNC_DECL bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);
-
180 }//namespace glm
-
181 
-
182 #ifndef GLM_EXTERNAL_TEMPLATE
-
183 #include "type_mat3x3.inl"
-
184 #endif
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
Core features
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00170.html b/tests/OpenGL/package/glm/doc/api/a00170.html deleted file mode 100644 index 95cd273c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00170.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat3x4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat3x4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file type_mat3x4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00170_source.html b/tests/OpenGL/package/glm/doc/api/a00170_source.html deleted file mode 100644 index db05a365..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00170_source.html +++ /dev/null @@ -1,267 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat3x4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat3x4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 
-
6 #include "type_vec3.hpp"
-
7 #include "type_vec4.hpp"
-
8 #include <limits>
-
9 #include <cstddef>
-
10 
-
11 namespace glm
-
12 {
-
13  template<typename T, qualifier Q>
-
14  struct mat<3, 4, T, Q>
-
15  {
-
16  typedef vec<4, T, Q> col_type;
-
17  typedef vec<3, T, Q> row_type;
-
18  typedef mat<3, 4, T, Q> type;
-
19  typedef mat<4, 3, T, Q> transpose_type;
-
20  typedef T value_type;
-
21 
-
22  private:
-
23  col_type value[3];
-
24 
-
25  public:
-
26  // -- Accesses --
-
27 
-
28  typedef length_t length_type;
-
29  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; }
-
30 
-
31  GLM_FUNC_DECL col_type & operator[](length_type i);
-
32  GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const;
-
33 
-
34  // -- Constructors --
-
35 
-
36  GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;
-
37  template<qualifier P>
-
38  GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 4, T, P> const& m);
-
39 
-
40  GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);
-
41  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
42  T x0, T y0, T z0, T w0,
-
43  T x1, T y1, T z1, T w1,
-
44  T x2, T y2, T z2, T w2);
-
45  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
46  col_type const& v0,
-
47  col_type const& v1,
-
48  col_type const& v2);
-
49 
-
50  // -- Conversions --
-
51 
-
52  template<
-
53  typename X1, typename Y1, typename Z1, typename W1,
-
54  typename X2, typename Y2, typename Z2, typename W2,
-
55  typename X3, typename Y3, typename Z3, typename W3>
-
56  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
57  X1 x1, Y1 y1, Z1 z1, W1 w1,
-
58  X2 x2, Y2 y2, Z2 z2, W2 w2,
-
59  X3 x3, Y3 y3, Z3 z3, W3 w3);
-
60 
-
61  template<typename V1, typename V2, typename V3>
-
62  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
63  vec<4, V1, Q> const& v1,
-
64  vec<4, V2, Q> const& v2,
-
65  vec<4, V3, Q> const& v3);
-
66 
-
67  // -- Matrix conversions --
-
68 
-
69  template<typename U, qualifier P>
-
70  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, U, P> const& m);
-
71 
-
72  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);
-
73  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);
-
74  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);
-
75  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);
-
76  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);
-
77  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);
-
78  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);
-
79  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);
-
80 
-
81  // -- Unary arithmetic operators --
-
82 
-
83  template<typename U>
-
84  GLM_FUNC_DECL mat<3, 4, T, Q> & operator=(mat<3, 4, U, Q> const& m);
-
85  template<typename U>
-
86  GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(U s);
-
87  template<typename U>
-
88  GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(mat<3, 4, U, Q> const& m);
-
89  template<typename U>
-
90  GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(U s);
-
91  template<typename U>
-
92  GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(mat<3, 4, U, Q> const& m);
-
93  template<typename U>
-
94  GLM_FUNC_DECL mat<3, 4, T, Q> & operator*=(U s);
-
95  template<typename U>
-
96  GLM_FUNC_DECL mat<3, 4, T, Q> & operator/=(U s);
-
97 
-
98  // -- Increment and decrement operators --
-
99 
-
100  GLM_FUNC_DECL mat<3, 4, T, Q> & operator++();
-
101  GLM_FUNC_DECL mat<3, 4, T, Q> & operator--();
-
102  GLM_FUNC_DECL mat<3, 4, T, Q> operator++(int);
-
103  GLM_FUNC_DECL mat<3, 4, T, Q> operator--(int);
-
104  };
-
105 
-
106  // -- Unary operators --
-
107 
-
108  template<typename T, qualifier Q>
-
109  GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m);
-
110 
-
111  template<typename T, qualifier Q>
-
112  GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m);
-
113 
-
114  // -- Binary operators --
-
115 
-
116  template<typename T, qualifier Q>
-
117  GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar);
-
118 
-
119  template<typename T, qualifier Q>
-
120  GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2);
-
121 
-
122  template<typename T, qualifier Q>
-
123  GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar);
-
124 
-
125  template<typename T, qualifier Q>
-
126  GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2);
-
127 
-
128  template<typename T, qualifier Q>
-
129  GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar);
-
130 
-
131  template<typename T, qualifier Q>
-
132  GLM_FUNC_DECL mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m);
-
133 
-
134  template<typename T, qualifier Q>
-
135  GLM_FUNC_DECL typename mat<3, 4, T, Q>::col_type operator*(mat<3, 4, T, Q> const& m, typename mat<3, 4, T, Q>::row_type const& v);
-
136 
-
137  template<typename T, qualifier Q>
-
138  GLM_FUNC_DECL typename mat<3, 4, T, Q>::row_type operator*(typename mat<3, 4, T, Q>::col_type const& v, mat<3, 4, T, Q> const& m);
-
139 
-
140  template<typename T, qualifier Q>
-
141  GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2);
-
142 
-
143  template<typename T, qualifier Q>
-
144  GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2);
-
145 
-
146  template<typename T, qualifier Q>
-
147  GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2);
-
148 
-
149  template<typename T, qualifier Q>
-
150  GLM_FUNC_DECL mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar);
-
151 
-
152  template<typename T, qualifier Q>
-
153  GLM_FUNC_DECL mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m);
-
154 
-
155  // -- Boolean operators --
-
156 
-
157  template<typename T, qualifier Q>
-
158  GLM_FUNC_DECL bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2);
-
159 
-
160  template<typename T, qualifier Q>
-
161  GLM_FUNC_DECL bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2);
-
162 }//namespace glm
-
163 
-
164 #ifndef GLM_EXTERNAL_TEMPLATE
-
165 #include "type_mat3x4.inl"
-
166 #endif
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
Core features
-
Core features
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00171.html b/tests/OpenGL/package/glm/doc/api/a00171.html deleted file mode 100644 index d644b948..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00171.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat4x2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat4x2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file type_mat4x2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00171_source.html b/tests/OpenGL/package/glm/doc/api/a00171_source.html deleted file mode 100644 index 795f18b4..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00171_source.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat4x2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat4x2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 
-
6 #include "type_vec2.hpp"
-
7 #include "type_vec4.hpp"
-
8 #include <limits>
-
9 #include <cstddef>
-
10 
-
11 namespace glm
-
12 {
-
13  template<typename T, qualifier Q>
-
14  struct mat<4, 2, T, Q>
-
15  {
-
16  typedef vec<2, T, Q> col_type;
-
17  typedef vec<4, T, Q> row_type;
-
18  typedef mat<4, 2, T, Q> type;
-
19  typedef mat<2, 4, T, Q> transpose_type;
-
20  typedef T value_type;
-
21 
-
22  private:
-
23  col_type value[4];
-
24 
-
25  public:
-
26  // -- Accesses --
-
27 
-
28  typedef length_t length_type;
-
29  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; }
-
30 
-
31  GLM_FUNC_DECL col_type & operator[](length_type i);
-
32  GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const;
-
33 
-
34  // -- Constructors --
-
35 
-
36  GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;
-
37  template<qualifier P>
-
38  GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 2, T, P> const& m);
-
39 
-
40  GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);
-
41  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
42  T x0, T y0,
-
43  T x1, T y1,
-
44  T x2, T y2,
-
45  T x3, T y3);
-
46  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
47  col_type const& v0,
-
48  col_type const& v1,
-
49  col_type const& v2,
-
50  col_type const& v3);
-
51 
-
52  // -- Conversions --
-
53 
-
54  template<
-
55  typename X0, typename Y0,
-
56  typename X1, typename Y1,
-
57  typename X2, typename Y2,
-
58  typename X3, typename Y3>
-
59  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
60  X0 x0, Y0 y0,
-
61  X1 x1, Y1 y1,
-
62  X2 x2, Y2 y2,
-
63  X3 x3, Y3 y3);
-
64 
-
65  template<typename V1, typename V2, typename V3, typename V4>
-
66  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
67  vec<2, V1, Q> const& v1,
-
68  vec<2, V2, Q> const& v2,
-
69  vec<2, V3, Q> const& v3,
-
70  vec<2, V4, Q> const& v4);
-
71 
-
72  // -- Matrix conversions --
-
73 
-
74  template<typename U, qualifier P>
-
75  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, U, P> const& m);
-
76 
-
77  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);
-
78  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);
-
79  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);
-
80  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);
-
81  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);
-
82  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);
-
83  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);
-
84  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);
-
85 
-
86  // -- Unary arithmetic operators --
-
87 
-
88  template<typename U>
-
89  GLM_FUNC_DECL mat<4, 2, T, Q> & operator=(mat<4, 2, U, Q> const& m);
-
90  template<typename U>
-
91  GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(U s);
-
92  template<typename U>
-
93  GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(mat<4, 2, U, Q> const& m);
-
94  template<typename U>
-
95  GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(U s);
-
96  template<typename U>
-
97  GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(mat<4, 2, U, Q> const& m);
-
98  template<typename U>
-
99  GLM_FUNC_DECL mat<4, 2, T, Q> & operator*=(U s);
-
100  template<typename U>
-
101  GLM_FUNC_DECL mat<4, 2, T, Q> & operator/=(U s);
-
102 
-
103  // -- Increment and decrement operators --
-
104 
-
105  GLM_FUNC_DECL mat<4, 2, T, Q> & operator++ ();
-
106  GLM_FUNC_DECL mat<4, 2, T, Q> & operator-- ();
-
107  GLM_FUNC_DECL mat<4, 2, T, Q> operator++(int);
-
108  GLM_FUNC_DECL mat<4, 2, T, Q> operator--(int);
-
109  };
-
110 
-
111  // -- Unary operators --
-
112 
-
113  template<typename T, qualifier Q>
-
114  GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m);
-
115 
-
116  template<typename T, qualifier Q>
-
117  GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m);
-
118 
-
119  // -- Binary operators --
-
120 
-
121  template<typename T, qualifier Q>
-
122  GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar);
-
123 
-
124  template<typename T, qualifier Q>
-
125  GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2);
-
126 
-
127  template<typename T, qualifier Q>
-
128  GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar);
-
129 
-
130  template<typename T, qualifier Q>
-
131  GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2);
-
132 
-
133  template<typename T, qualifier Q>
-
134  GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar);
-
135 
-
136  template<typename T, qualifier Q>
-
137  GLM_FUNC_DECL mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m);
-
138 
-
139  template<typename T, qualifier Q>
-
140  GLM_FUNC_DECL typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v);
-
141 
-
142  template<typename T, qualifier Q>
-
143  GLM_FUNC_DECL typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m);
-
144 
-
145  template<typename T, qualifier Q>
-
146  GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2);
-
147 
-
148  template<typename T, qualifier Q>
-
149  GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2);
-
150 
-
151  template<typename T, qualifier Q>
-
152  GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2);
-
153 
-
154  template<typename T, qualifier Q>
-
155  GLM_FUNC_DECL mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar);
-
156 
-
157  template<typename T, qualifier Q>
-
158  GLM_FUNC_DECL mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m);
-
159 
-
160  // -- Boolean operators --
-
161 
-
162  template<typename T, qualifier Q>
-
163  GLM_FUNC_DECL bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2);
-
164 
-
165  template<typename T, qualifier Q>
-
166  GLM_FUNC_DECL bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2);
-
167 }//namespace glm
-
168 
-
169 #ifndef GLM_EXTERNAL_TEMPLATE
-
170 #include "type_mat4x2.inl"
-
171 #endif
-
Core features
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
Core features
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00172.html b/tests/OpenGL/package/glm/doc/api/a00172.html deleted file mode 100644 index ca1fd6e8..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00172.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat4x3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat4x3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file type_mat4x3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00172_source.html b/tests/OpenGL/package/glm/doc/api/a00172_source.html deleted file mode 100644 index 49119144..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00172_source.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat4x3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat4x3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 
-
6 #include "type_vec3.hpp"
-
7 #include "type_vec4.hpp"
-
8 #include <limits>
-
9 #include <cstddef>
-
10 
-
11 namespace glm
-
12 {
-
13  template<typename T, qualifier Q>
-
14  struct mat<4, 3, T, Q>
-
15  {
-
16  typedef vec<3, T, Q> col_type;
-
17  typedef vec<4, T, Q> row_type;
-
18  typedef mat<4, 3, T, Q> type;
-
19  typedef mat<3, 4, T, Q> transpose_type;
-
20  typedef T value_type;
-
21 
-
22  private:
-
23  col_type value[4];
-
24 
-
25  public:
-
26  // -- Accesses --
-
27 
-
28  typedef length_t length_type;
-
29  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; }
-
30 
-
31  GLM_FUNC_DECL col_type & operator[](length_type i);
-
32  GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const;
-
33 
-
34  // -- Constructors --
-
35 
-
36  GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;
-
37  template<qualifier P>
-
38  GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 3, T, P> const& m);
-
39 
-
40  GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x);
-
41  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
42  T const& x0, T const& y0, T const& z0,
-
43  T const& x1, T const& y1, T const& z1,
-
44  T const& x2, T const& y2, T const& z2,
-
45  T const& x3, T const& y3, T const& z3);
-
46  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
47  col_type const& v0,
-
48  col_type const& v1,
-
49  col_type const& v2,
-
50  col_type const& v3);
-
51 
-
52  // -- Conversions --
-
53 
-
54  template<
-
55  typename X1, typename Y1, typename Z1,
-
56  typename X2, typename Y2, typename Z2,
-
57  typename X3, typename Y3, typename Z3,
-
58  typename X4, typename Y4, typename Z4>
-
59  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
60  X1 const& x1, Y1 const& y1, Z1 const& z1,
-
61  X2 const& x2, Y2 const& y2, Z2 const& z2,
-
62  X3 const& x3, Y3 const& y3, Z3 const& z3,
-
63  X4 const& x4, Y4 const& y4, Z4 const& z4);
-
64 
-
65  template<typename V1, typename V2, typename V3, typename V4>
-
66  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
67  vec<3, V1, Q> const& v1,
-
68  vec<3, V2, Q> const& v2,
-
69  vec<3, V3, Q> const& v3,
-
70  vec<3, V4, Q> const& v4);
-
71 
-
72  // -- Matrix conversions --
-
73 
-
74  template<typename U, qualifier P>
-
75  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, U, P> const& m);
-
76 
-
77  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);
-
78  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);
-
79  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);
-
80  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);
-
81  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);
-
82  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);
-
83  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);
-
84  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);
-
85 
-
86  // -- Unary arithmetic operators --
-
87 
-
88  template<typename U>
-
89  GLM_FUNC_DECL mat<4, 3, T, Q> & operator=(mat<4, 3, U, Q> const& m);
-
90  template<typename U>
-
91  GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(U s);
-
92  template<typename U>
-
93  GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(mat<4, 3, U, Q> const& m);
-
94  template<typename U>
-
95  GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(U s);
-
96  template<typename U>
-
97  GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(mat<4, 3, U, Q> const& m);
-
98  template<typename U>
-
99  GLM_FUNC_DECL mat<4, 3, T, Q> & operator*=(U s);
-
100  template<typename U>
-
101  GLM_FUNC_DECL mat<4, 3, T, Q> & operator/=(U s);
-
102 
-
103  // -- Increment and decrement operators --
-
104 
-
105  GLM_FUNC_DECL mat<4, 3, T, Q>& operator++();
-
106  GLM_FUNC_DECL mat<4, 3, T, Q>& operator--();
-
107  GLM_FUNC_DECL mat<4, 3, T, Q> operator++(int);
-
108  GLM_FUNC_DECL mat<4, 3, T, Q> operator--(int);
-
109  };
-
110 
-
111  // -- Unary operators --
-
112 
-
113  template<typename T, qualifier Q>
-
114  GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m);
-
115 
-
116  template<typename T, qualifier Q>
-
117  GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m);
-
118 
-
119  // -- Binary operators --
-
120 
-
121  template<typename T, qualifier Q>
-
122  GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s);
-
123 
-
124  template<typename T, qualifier Q>
-
125  GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2);
-
126 
-
127  template<typename T, qualifier Q>
-
128  GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s);
-
129 
-
130  template<typename T, qualifier Q>
-
131  GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2);
-
132 
-
133  template<typename T, qualifier Q>
-
134  GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s);
-
135 
-
136  template<typename T, qualifier Q>
-
137  GLM_FUNC_DECL mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m);
-
138 
-
139  template<typename T, qualifier Q>
-
140  GLM_FUNC_DECL typename mat<4, 3, T, Q>::col_type operator*(mat<4, 3, T, Q> const& m, typename mat<4, 3, T, Q>::row_type const& v);
-
141 
-
142  template<typename T, qualifier Q>
-
143  GLM_FUNC_DECL typename mat<4, 3, T, Q>::row_type operator*(typename mat<4, 3, T, Q>::col_type const& v, mat<4, 3, T, Q> const& m);
-
144 
-
145  template<typename T, qualifier Q>
-
146  GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2);
-
147 
-
148  template<typename T, qualifier Q>
-
149  GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2);
-
150 
-
151  template<typename T, qualifier Q>
-
152  GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2);
-
153 
-
154  template<typename T, qualifier Q>
-
155  GLM_FUNC_DECL mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s);
-
156 
-
157  template<typename T, qualifier Q>
-
158  GLM_FUNC_DECL mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m);
-
159 
-
160  // -- Boolean operators --
-
161 
-
162  template<typename T, qualifier Q>
-
163  GLM_FUNC_DECL bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2);
-
164 
-
165  template<typename T, qualifier Q>
-
166  GLM_FUNC_DECL bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2);
-
167 }//namespace glm
-
168 
-
169 #ifndef GLM_EXTERNAL_TEMPLATE
-
170 #include "type_mat4x3.inl"
-
171 #endif //GLM_EXTERNAL_TEMPLATE
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
Core features
-
Core features
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00173.html b/tests/OpenGL/package/glm/doc/api/a00173.html deleted file mode 100644 index 57d8692c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00173.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat4x4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat4x4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file type_mat4x4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00173_source.html b/tests/OpenGL/package/glm/doc/api/a00173_source.html deleted file mode 100644 index 523ef991..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00173_source.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - -0.9.9 API documentation: type_mat4x4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_mat4x4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 
-
6 #include "type_vec4.hpp"
-
7 #include <limits>
-
8 #include <cstddef>
-
9 
-
10 namespace glm
-
11 {
-
12  template<typename T, qualifier Q>
-
13  struct mat<4, 4, T, Q>
-
14  {
-
15  typedef vec<4, T, Q> col_type;
-
16  typedef vec<4, T, Q> row_type;
-
17  typedef mat<4, 4, T, Q> type;
-
18  typedef mat<4, 4, T, Q> transpose_type;
-
19  typedef T value_type;
-
20 
-
21  private:
-
22  col_type value[4];
-
23 
-
24  public:
-
25  // -- Accesses --
-
26 
-
27  typedef length_t length_type;
-
28  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;}
-
29 
-
30  GLM_FUNC_DECL col_type & operator[](length_type i);
-
31  GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const;
-
32 
-
33  // -- Constructors --
-
34 
-
35  GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;
-
36  template<qualifier P>
-
37  GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 4, T, P> const& m);
-
38 
-
39  GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x);
-
40  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
41  T const& x0, T const& y0, T const& z0, T const& w0,
-
42  T const& x1, T const& y1, T const& z1, T const& w1,
-
43  T const& x2, T const& y2, T const& z2, T const& w2,
-
44  T const& x3, T const& y3, T const& z3, T const& w3);
-
45  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
46  col_type const& v0,
-
47  col_type const& v1,
-
48  col_type const& v2,
-
49  col_type const& v3);
-
50 
-
51  // -- Conversions --
-
52 
-
53  template<
-
54  typename X1, typename Y1, typename Z1, typename W1,
-
55  typename X2, typename Y2, typename Z2, typename W2,
-
56  typename X3, typename Y3, typename Z3, typename W3,
-
57  typename X4, typename Y4, typename Z4, typename W4>
-
58  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
59  X1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1,
-
60  X2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2,
-
61  X3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3,
-
62  X4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4);
-
63 
-
64  template<typename V1, typename V2, typename V3, typename V4>
-
65  GLM_FUNC_DECL GLM_CONSTEXPR mat(
-
66  vec<4, V1, Q> const& v1,
-
67  vec<4, V2, Q> const& v2,
-
68  vec<4, V3, Q> const& v3,
-
69  vec<4, V4, Q> const& v4);
-
70 
-
71  // -- Matrix conversions --
-
72 
-
73  template<typename U, qualifier P>
-
74  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, U, P> const& m);
-
75 
-
76  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);
-
77  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);
-
78  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);
-
79  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);
-
80  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);
-
81  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);
-
82  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);
-
83  GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);
-
84 
-
85  // -- Unary arithmetic operators --
-
86 
-
87  template<typename U>
-
88  GLM_FUNC_DECL mat<4, 4, T, Q> & operator=(mat<4, 4, U, Q> const& m);
-
89  template<typename U>
-
90  GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(U s);
-
91  template<typename U>
-
92  GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(mat<4, 4, U, Q> const& m);
-
93  template<typename U>
-
94  GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(U s);
-
95  template<typename U>
-
96  GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(mat<4, 4, U, Q> const& m);
-
97  template<typename U>
-
98  GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(U s);
-
99  template<typename U>
-
100  GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(mat<4, 4, U, Q> const& m);
-
101  template<typename U>
-
102  GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(U s);
-
103  template<typename U>
-
104  GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(mat<4, 4, U, Q> const& m);
-
105 
-
106  // -- Increment and decrement operators --
-
107 
-
108  GLM_FUNC_DECL mat<4, 4, T, Q> & operator++();
-
109  GLM_FUNC_DECL mat<4, 4, T, Q> & operator--();
-
110  GLM_FUNC_DECL mat<4, 4, T, Q> operator++(int);
-
111  GLM_FUNC_DECL mat<4, 4, T, Q> operator--(int);
-
112  };
-
113 
-
114  // -- Unary operators --
-
115 
-
116  template<typename T, qualifier Q>
-
117  GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m);
-
118 
-
119  template<typename T, qualifier Q>
-
120  GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m);
-
121 
-
122  // -- Binary operators --
-
123 
-
124  template<typename T, qualifier Q>
-
125  GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s);
-
126 
-
127  template<typename T, qualifier Q>
-
128  GLM_FUNC_DECL mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m);
-
129 
-
130  template<typename T, qualifier Q>
-
131  GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2);
-
132 
-
133  template<typename T, qualifier Q>
-
134  GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s);
-
135 
-
136  template<typename T, qualifier Q>
-
137  GLM_FUNC_DECL mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m);
-
138 
-
139  template<typename T, qualifier Q>
-
140  GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2);
-
141 
-
142  template<typename T, qualifier Q>
-
143  GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const& s);
-
144 
-
145  template<typename T, qualifier Q>
-
146  GLM_FUNC_DECL mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m);
-
147 
-
148  template<typename T, qualifier Q>
-
149  GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator*(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v);
-
150 
-
151  template<typename T, qualifier Q>
-
152  GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator*(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m);
-
153 
-
154  template<typename T, qualifier Q>
-
155  GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2);
-
156 
-
157  template<typename T, qualifier Q>
-
158  GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2);
-
159 
-
160  template<typename T, qualifier Q>
-
161  GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2);
-
162 
-
163  template<typename T, qualifier Q>
-
164  GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s);
-
165 
-
166  template<typename T, qualifier Q>
-
167  GLM_FUNC_DECL mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m);
-
168 
-
169  template<typename T, qualifier Q>
-
170  GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v);
-
171 
-
172  template<typename T, qualifier Q>
-
173  GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m);
-
174 
-
175  template<typename T, qualifier Q>
-
176  GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2);
-
177 
-
178  // -- Boolean operators --
-
179 
-
180  template<typename T, qualifier Q>
-
181  GLM_FUNC_DECL bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2);
-
182 
-
183  template<typename T, qualifier Q>
-
184  GLM_FUNC_DECL bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2);
-
185 }//namespace glm
-
186 
-
187 #ifndef GLM_EXTERNAL_TEMPLATE
-
188 #include "type_mat4x4.inl"
-
189 #endif//GLM_EXTERNAL_TEMPLATE
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
Core features
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00174.html b/tests/OpenGL/package/glm/doc/api/a00174.html deleted file mode 100644 index d852be4c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00174.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: type_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_precision.hpp File Reference
-
-
- -

GLM_GTC_type_precision -More...

- -

Go to the source code of this file.

-

Detailed Description

-

GLM_GTC_type_precision

-
See also
Core features (dependence)
-
-GLM_GTC_quaternion (dependence)
- -

Definition in file type_precision.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00174_source.html b/tests/OpenGL/package/glm/doc/api/a00174_source.html deleted file mode 100644 index edcf9d6c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00174_source.html +++ /dev/null @@ -1,1682 +0,0 @@ - - - - - - -0.9.9 API documentation: type_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../gtc/quaternion.hpp"
-
18 #include "../gtc/vec1.hpp"
-
19 #include "../ext/scalar_int_sized.hpp"
-
20 #include "../ext/scalar_uint_sized.hpp"
-
21 #include "../detail/type_vec2.hpp"
-
22 #include "../detail/type_vec3.hpp"
-
23 #include "../detail/type_vec4.hpp"
-
24 #include "../detail/type_mat2x2.hpp"
-
25 #include "../detail/type_mat2x3.hpp"
-
26 #include "../detail/type_mat2x4.hpp"
-
27 #include "../detail/type_mat3x2.hpp"
-
28 #include "../detail/type_mat3x3.hpp"
-
29 #include "../detail/type_mat3x4.hpp"
-
30 #include "../detail/type_mat4x2.hpp"
-
31 #include "../detail/type_mat4x3.hpp"
-
32 #include "../detail/type_mat4x4.hpp"
-
33 
-
34 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
35 # pragma message("GLM: GLM_GTC_type_precision extension included")
-
36 #endif
-
37 
-
38 namespace glm
-
39 {
-
41  // Signed int vector types
-
42 
-
45 
-
48  typedef detail::int8 lowp_int8;
-
49 
-
52  typedef detail::int16 lowp_int16;
-
53 
-
56  typedef detail::int32 lowp_int32;
-
57 
-
60  typedef detail::int64 lowp_int64;
-
61 
-
64  typedef detail::int8 lowp_int8_t;
-
65 
-
68  typedef detail::int16 lowp_int16_t;
-
69 
-
72  typedef detail::int32 lowp_int32_t;
-
73 
- -
77 
-
80  typedef detail::int8 lowp_i8;
-
81 
-
84  typedef detail::int16 lowp_i16;
-
85 
-
88  typedef detail::int32 lowp_i32;
-
89 
-
92  typedef detail::int64 lowp_i64;
-
93 
-
96  typedef detail::int8 mediump_int8;
-
97 
-
100  typedef detail::int16 mediump_int16;
-
101 
-
104  typedef detail::int32 mediump_int32;
-
105 
- -
109 
-
112  typedef detail::int8 mediump_int8_t;
-
113 
-
116  typedef detail::int16 mediump_int16_t;
-
117 
-
120  typedef detail::int32 mediump_int32_t;
-
121 
- -
125 
-
128  typedef detail::int8 mediump_i8;
-
129 
-
132  typedef detail::int16 mediump_i16;
-
133 
-
136  typedef detail::int32 mediump_i32;
-
137 
-
140  typedef detail::int64 mediump_i64;
-
141 
-
144  typedef detail::int8 highp_int8;
-
145 
-
148  typedef detail::int16 highp_int16;
-
149 
-
152  typedef detail::int32 highp_int32;
-
153 
-
156  typedef detail::int64 highp_int64;
-
157 
-
160  typedef detail::int8 highp_int8_t;
-
161 
-
164  typedef detail::int16 highp_int16_t;
-
165 
-
168  typedef detail::int32 highp_int32_t;
-
169 
- -
173 
-
176  typedef detail::int8 highp_i8;
-
177 
-
180  typedef detail::int16 highp_i16;
-
181 
-
184  typedef detail::int32 highp_i32;
-
185 
-
188  typedef detail::int64 highp_i64;
-
189 
-
190 
-
191 #if GLM_HAS_EXTENDED_INTEGER_TYPE
-
192  using std::int8_t;
-
193  using std::int16_t;
-
194  using std::int32_t;
-
195  using std::int64_t;
-
196 #else
-
197  typedef detail::int8 int8_t;
-
200 
-
203  typedef detail::int16 int16_t;
-
204 
-
207  typedef detail::int32 int32_t;
-
208 
-
211  typedef detail::int64 int64_t;
-
212 #endif
-
213 
-
216  typedef detail::int8 i8;
-
217 
-
220  typedef detail::int16 i16;
-
221 
-
224  typedef detail::int32 i32;
-
225 
-
228  typedef detail::int64 i64;
-
229 
-
230 
-
231 
-
234  typedef vec<1, i8, lowp> lowp_i8vec1;
-
235 
-
238  typedef vec<2, i8, lowp> lowp_i8vec2;
-
239 
-
242  typedef vec<3, i8, lowp> lowp_i8vec3;
-
243 
-
246  typedef vec<4, i8, lowp> lowp_i8vec4;
-
247 
-
248 
-
251  typedef vec<1, i8, mediump> mediump_i8vec1;
-
252 
-
255  typedef vec<2, i8, mediump> mediump_i8vec2;
-
256 
-
259  typedef vec<3, i8, mediump> mediump_i8vec3;
-
260 
-
263  typedef vec<4, i8, mediump> mediump_i8vec4;
-
264 
-
265 
-
268  typedef vec<1, i8, highp> highp_i8vec1;
-
269 
-
272  typedef vec<2, i8, highp> highp_i8vec2;
-
273 
-
276  typedef vec<3, i8, highp> highp_i8vec3;
-
277 
-
280  typedef vec<4, i8, highp> highp_i8vec4;
-
281 
-
282 
-
283 
-
286  typedef vec<1, i8, defaultp> i8vec1;
-
287 
-
290  typedef vec<2, i8, defaultp> i8vec2;
-
291 
-
294  typedef vec<3, i8, defaultp> i8vec3;
-
295 
-
298  typedef vec<4, i8, defaultp> i8vec4;
-
299 
-
300 
-
301 
-
302 
-
303 
-
306  typedef vec<1, i16, lowp> lowp_i16vec1;
-
307 
-
310  typedef vec<2, i16, lowp> lowp_i16vec2;
-
311 
-
314  typedef vec<3, i16, lowp> lowp_i16vec3;
-
315 
-
318  typedef vec<4, i16, lowp> lowp_i16vec4;
-
319 
-
320 
-
323  typedef vec<1, i16, mediump> mediump_i16vec1;
-
324 
-
327  typedef vec<2, i16, mediump> mediump_i16vec2;
-
328 
-
331  typedef vec<3, i16, mediump> mediump_i16vec3;
-
332 
-
335  typedef vec<4, i16, mediump> mediump_i16vec4;
-
336 
-
337 
-
340  typedef vec<1, i16, highp> highp_i16vec1;
-
341 
-
344  typedef vec<2, i16, highp> highp_i16vec2;
-
345 
-
348  typedef vec<3, i16, highp> highp_i16vec3;
-
349 
-
352  typedef vec<4, i16, highp> highp_i16vec4;
-
353 
-
354 
-
355 
-
356 
-
359  typedef vec<1, i16, defaultp> i16vec1;
-
360 
-
363  typedef vec<2, i16, defaultp> i16vec2;
-
364 
-
367  typedef vec<3, i16, defaultp> i16vec3;
-
368 
-
371  typedef vec<4, i16, defaultp> i16vec4;
-
372 
-
373 
-
374 
-
377  typedef vec<1, i32, lowp> lowp_i32vec1;
-
378 
-
381  typedef vec<2, i32, lowp> lowp_i32vec2;
-
382 
-
385  typedef vec<3, i32, lowp> lowp_i32vec3;
-
386 
-
389  typedef vec<4, i32, lowp> lowp_i32vec4;
-
390 
-
391 
-
394  typedef vec<1, i32, mediump> mediump_i32vec1;
-
395 
-
398  typedef vec<2, i32, mediump> mediump_i32vec2;
-
399 
-
402  typedef vec<3, i32, mediump> mediump_i32vec3;
-
403 
-
406  typedef vec<4, i32, mediump> mediump_i32vec4;
-
407 
-
408 
-
411  typedef vec<1, i32, highp> highp_i32vec1;
-
412 
-
415  typedef vec<2, i32, highp> highp_i32vec2;
-
416 
-
419  typedef vec<3, i32, highp> highp_i32vec3;
-
420 
-
423  typedef vec<4, i32, highp> highp_i32vec4;
-
424 
-
425 
-
428  typedef vec<1, i32, defaultp> i32vec1;
-
429 
-
432  typedef vec<2, i32, defaultp> i32vec2;
-
433 
-
436  typedef vec<3, i32, defaultp> i32vec3;
-
437 
-
440  typedef vec<4, i32, defaultp> i32vec4;
-
441 
-
442 
-
443 
-
444 
-
447  typedef vec<1, i64, lowp> lowp_i64vec1;
-
448 
-
451  typedef vec<2, i64, lowp> lowp_i64vec2;
-
452 
-
455  typedef vec<3, i64, lowp> lowp_i64vec3;
-
456 
-
459  typedef vec<4, i64, lowp> lowp_i64vec4;
-
460 
-
461 
-
464  typedef vec<1, i64, mediump> mediump_i64vec1;
-
465 
-
468  typedef vec<2, i64, mediump> mediump_i64vec2;
-
469 
-
472  typedef vec<3, i64, mediump> mediump_i64vec3;
-
473 
-
476  typedef vec<4, i64, mediump> mediump_i64vec4;
-
477 
-
478 
-
481  typedef vec<1, i64, highp> highp_i64vec1;
-
482 
-
485  typedef vec<2, i64, highp> highp_i64vec2;
-
486 
-
489  typedef vec<3, i64, highp> highp_i64vec3;
-
490 
-
493  typedef vec<4, i64, highp> highp_i64vec4;
-
494 
-
495 
-
498  typedef vec<1, i64, defaultp> i64vec1;
-
499 
-
502  typedef vec<2, i64, defaultp> i64vec2;
-
503 
-
506  typedef vec<3, i64, defaultp> i64vec3;
-
507 
-
510  typedef vec<4, i64, defaultp> i64vec4;
-
511 
-
512 
-
514  // Unsigned int vector types
-
515 
-
518  typedef detail::uint8 lowp_uint8;
-
519 
-
522  typedef detail::uint16 lowp_uint16;
-
523 
-
526  typedef detail::uint32 lowp_uint32;
-
527 
-
530  typedef detail::uint64 lowp_uint64;
-
531 
-
534  typedef detail::uint8 lowp_uint8_t;
-
535 
-
538  typedef detail::uint16 lowp_uint16_t;
-
539 
-
542  typedef detail::uint32 lowp_uint32_t;
-
543 
- -
547 
-
550  typedef detail::uint8 lowp_u8;
-
551 
-
554  typedef detail::uint16 lowp_u16;
-
555 
-
558  typedef detail::uint32 lowp_u32;
-
559 
-
562  typedef detail::uint64 lowp_u64;
-
563 
-
566  typedef detail::uint8 mediump_uint8;
-
567 
-
570  typedef detail::uint16 mediump_uint16;
-
571 
-
574  typedef detail::uint32 mediump_uint32;
-
575 
- -
579 
-
582  typedef detail::uint8 mediump_uint8_t;
-
583 
-
586  typedef detail::uint16 mediump_uint16_t;
-
587 
-
590  typedef detail::uint32 mediump_uint32_t;
-
591 
- -
595 
-
598  typedef detail::uint8 mediump_u8;
-
599 
-
602  typedef detail::uint16 mediump_u16;
-
603 
-
606  typedef detail::uint32 mediump_u32;
-
607 
-
610  typedef detail::uint64 mediump_u64;
-
611 
-
614  typedef detail::uint8 highp_uint8;
-
615 
-
618  typedef detail::uint16 highp_uint16;
-
619 
-
622  typedef detail::uint32 highp_uint32;
-
623 
- -
627 
-
630  typedef detail::uint8 highp_uint8_t;
-
631 
-
634  typedef detail::uint16 highp_uint16_t;
-
635 
-
638  typedef detail::uint32 highp_uint32_t;
-
639 
- -
643 
-
646  typedef detail::uint8 highp_u8;
-
647 
-
650  typedef detail::uint16 highp_u16;
-
651 
-
654  typedef detail::uint32 highp_u32;
-
655 
-
658  typedef detail::uint64 highp_u64;
-
659 
-
660 #if GLM_HAS_EXTENDED_INTEGER_TYPE
-
661  using std::uint8_t;
-
662  using std::uint16_t;
-
663  using std::uint32_t;
-
664  using std::uint64_t;
-
665 #else
-
666  typedef detail::uint8 uint8_t;
-
669 
-
672  typedef detail::uint16 uint16_t;
-
673 
-
676  typedef detail::uint32 uint32_t;
-
677 
-
680  typedef detail::uint64 uint64_t;
-
681 #endif
-
682 
-
685  typedef detail::uint8 u8;
-
686 
-
689  typedef detail::uint16 u16;
-
690 
-
693  typedef detail::uint32 u32;
-
694 
-
697  typedef detail::uint64 u64;
-
698 
-
699 
-
700 
-
701 
-
702 
-
704  // Float vector types
-
705 
-
708  typedef float float32;
-
709 
-
712  typedef double float64;
-
713 
-
716  typedef float32 lowp_float32;
-
717 
-
720  typedef float64 lowp_float64;
-
721 
-
724  typedef float32 lowp_float32_t;
-
725 
-
728  typedef float64 lowp_float64_t;
-
729 
-
732  typedef float32 lowp_f32;
-
733 
-
736  typedef float64 lowp_f64;
-
737 
-
740  typedef float32 lowp_float32;
-
741 
-
744  typedef float64 lowp_float64;
-
745 
-
748  typedef float32 lowp_float32_t;
-
749 
-
752  typedef float64 lowp_float64_t;
-
753 
-
756  typedef float32 lowp_f32;
-
757 
-
760  typedef float64 lowp_f64;
-
761 
-
762 
-
765  typedef float32 lowp_float32;
-
766 
-
769  typedef float64 lowp_float64;
-
770 
-
773  typedef float32 lowp_float32_t;
-
774 
-
777  typedef float64 lowp_float64_t;
-
778 
-
781  typedef float32 lowp_f32;
-
782 
-
785  typedef float64 lowp_f64;
-
786 
-
787 
-
790  typedef float32 mediump_float32;
-
791 
-
794  typedef float64 mediump_float64;
-
795 
-
798  typedef float32 mediump_float32_t;
-
799 
-
802  typedef float64 mediump_float64_t;
-
803 
-
806  typedef float32 mediump_f32;
-
807 
-
810  typedef float64 mediump_f64;
-
811 
-
812 
-
815  typedef float32 highp_float32;
-
816 
-
819  typedef float64 highp_float64;
-
820 
-
823  typedef float32 highp_float32_t;
-
824 
-
827  typedef float64 highp_float64_t;
-
828 
-
831  typedef float32 highp_f32;
-
832 
-
835  typedef float64 highp_f64;
-
836 
-
837 
-
838 #if(defined(GLM_PRECISION_LOWP_FLOAT))
-
839  typedef lowp_float32_t float32_t;
-
842 
-
845  typedef lowp_float64_t float64_t;
-
846 
-
849  typedef lowp_f32 f32;
-
850 
-
853  typedef lowp_f64 f64;
-
854 
-
855 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
-
856  typedef mediump_float32 float32_t;
-
859 
-
862  typedef mediump_float64 float64_t;
-
863 
-
866  typedef mediump_float32 f32;
-
867 
-
870  typedef mediump_float64 f64;
-
871 
-
872 #else//(defined(GLM_PRECISION_HIGHP_FLOAT))
-
873 
-
876  typedef highp_float32_t float32_t;
-
877 
-
880  typedef highp_float64_t float64_t;
-
881 
-
884  typedef highp_float32_t f32;
-
885 
-
888  typedef highp_float64_t f64;
-
889 #endif
-
890 
-
891 
-
894  typedef vec<1, float, lowp> lowp_fvec1;
-
895 
-
898  typedef vec<2, float, lowp> lowp_fvec2;
-
899 
-
902  typedef vec<3, float, lowp> lowp_fvec3;
-
903 
-
906  typedef vec<4, float, lowp> lowp_fvec4;
-
907 
-
908 
-
911  typedef vec<1, float, mediump> mediump_fvec1;
-
912 
-
915  typedef vec<2, float, mediump> mediump_fvec2;
-
916 
-
919  typedef vec<3, float, mediump> mediump_fvec3;
-
920 
-
923  typedef vec<4, float, mediump> mediump_fvec4;
-
924 
-
925 
-
928  typedef vec<1, float, highp> highp_fvec1;
-
929 
-
932  typedef vec<2, float, highp> highp_fvec2;
-
933 
-
936  typedef vec<3, float, highp> highp_fvec3;
-
937 
-
940  typedef vec<4, float, highp> highp_fvec4;
-
941 
-
942 
-
945  typedef vec<1, f32, lowp> lowp_f32vec1;
-
946 
-
949  typedef vec<2, f32, lowp> lowp_f32vec2;
-
950 
-
953  typedef vec<3, f32, lowp> lowp_f32vec3;
-
954 
-
957  typedef vec<4, f32, lowp> lowp_f32vec4;
-
958 
-
961  typedef vec<1, f32, mediump> mediump_f32vec1;
-
962 
-
965  typedef vec<2, f32, mediump> mediump_f32vec2;
-
966 
-
969  typedef vec<3, f32, mediump> mediump_f32vec3;
-
970 
-
973  typedef vec<4, f32, mediump> mediump_f32vec4;
-
974 
-
977  typedef vec<1, f32, highp> highp_f32vec1;
-
978 
-
981  typedef vec<2, f32, highp> highp_f32vec2;
-
982 
-
985  typedef vec<3, f32, highp> highp_f32vec3;
-
986 
-
989  typedef vec<4, f32, highp> highp_f32vec4;
-
990 
-
991 
-
994  typedef vec<1, f64, lowp> lowp_f64vec1;
-
995 
-
998  typedef vec<2, f64, lowp> lowp_f64vec2;
-
999 
-
1002  typedef vec<3, f64, lowp> lowp_f64vec3;
-
1003 
-
1006  typedef vec<4, f64, lowp> lowp_f64vec4;
-
1007 
-
1010  typedef vec<1, f64, mediump> mediump_f64vec1;
-
1011 
-
1014  typedef vec<2, f64, mediump> mediump_f64vec2;
-
1015 
-
1018  typedef vec<3, f64, mediump> mediump_f64vec3;
-
1019 
-
1022  typedef vec<4, f64, mediump> mediump_f64vec4;
-
1023 
-
1026  typedef vec<1, f64, highp> highp_f64vec1;
-
1027 
-
1030  typedef vec<2, f64, highp> highp_f64vec2;
-
1031 
-
1034  typedef vec<3, f64, highp> highp_f64vec3;
-
1035 
-
1038  typedef vec<4, f64, highp> highp_f64vec4;
-
1039 
-
1040 
-
1041 
-
1043  // Float matrix types
-
1044 
-
1047  //typedef lowp_f32 lowp_fmat1x1;
-
1048 
-
1051  typedef mat<2, 2, f32, lowp> lowp_fmat2x2;
-
1052 
-
1055  typedef mat<2, 3, f32, lowp> lowp_fmat2x3;
-
1056 
-
1059  typedef mat<2, 4, f32, lowp> lowp_fmat2x4;
-
1060 
-
1063  typedef mat<3, 2, f32, lowp> lowp_fmat3x2;
-
1064 
-
1067  typedef mat<3, 3, f32, lowp> lowp_fmat3x3;
-
1068 
-
1071  typedef mat<3, 4, f32, lowp> lowp_fmat3x4;
-
1072 
-
1075  typedef mat<4, 2, f32, lowp> lowp_fmat4x2;
-
1076 
-
1079  typedef mat<4, 3, f32, lowp> lowp_fmat4x3;
-
1080 
-
1083  typedef mat<4, 4, f32, lowp> lowp_fmat4x4;
-
1084 
-
1087  //typedef lowp_fmat1x1 lowp_fmat1;
-
1088 
-
1091  typedef lowp_fmat2x2 lowp_fmat2;
-
1092 
-
1095  typedef lowp_fmat3x3 lowp_fmat3;
-
1096 
-
1099  typedef lowp_fmat4x4 lowp_fmat4;
-
1100 
-
1101 
-
1104  //typedef mediump_f32 mediump_fmat1x1;
-
1105 
-
1108  typedef mat<2, 2, f32, mediump> mediump_fmat2x2;
-
1109 
-
1112  typedef mat<2, 3, f32, mediump> mediump_fmat2x3;
-
1113 
-
1116  typedef mat<2, 4, f32, mediump> mediump_fmat2x4;
-
1117 
-
1120  typedef mat<3, 2, f32, mediump> mediump_fmat3x2;
-
1121 
-
1124  typedef mat<3, 3, f32, mediump> mediump_fmat3x3;
-
1125 
-
1128  typedef mat<3, 4, f32, mediump> mediump_fmat3x4;
-
1129 
-
1132  typedef mat<4, 2, f32, mediump> mediump_fmat4x2;
-
1133 
-
1136  typedef mat<4, 3, f32, mediump> mediump_fmat4x3;
-
1137 
-
1140  typedef mat<4, 4, f32, mediump> mediump_fmat4x4;
-
1141 
-
1144  //typedef mediump_fmat1x1 mediump_fmat1;
-
1145 
-
1148  typedef mediump_fmat2x2 mediump_fmat2;
-
1149 
-
1152  typedef mediump_fmat3x3 mediump_fmat3;
-
1153 
-
1156  typedef mediump_fmat4x4 mediump_fmat4;
-
1157 
-
1158 
-
1161  //typedef highp_f32 highp_fmat1x1;
-
1162 
-
1165  typedef mat<2, 2, f32, highp> highp_fmat2x2;
-
1166 
-
1169  typedef mat<2, 3, f32, highp> highp_fmat2x3;
-
1170 
-
1173  typedef mat<2, 4, f32, highp> highp_fmat2x4;
-
1174 
-
1177  typedef mat<3, 2, f32, highp> highp_fmat3x2;
-
1178 
-
1181  typedef mat<3, 3, f32, highp> highp_fmat3x3;
-
1182 
-
1185  typedef mat<3, 4, f32, highp> highp_fmat3x4;
-
1186 
-
1189  typedef mat<4, 2, f32, highp> highp_fmat4x2;
-
1190 
-
1193  typedef mat<4, 3, f32, highp> highp_fmat4x3;
-
1194 
-
1197  typedef mat<4, 4, f32, highp> highp_fmat4x4;
-
1198 
-
1201  //typedef highp_fmat1x1 highp_fmat1;
-
1202 
-
1205  typedef highp_fmat2x2 highp_fmat2;
-
1206 
-
1209  typedef highp_fmat3x3 highp_fmat3;
-
1210 
-
1213  typedef highp_fmat4x4 highp_fmat4;
-
1214 
-
1215 
-
1218  //typedef f32 lowp_f32mat1x1;
-
1219 
-
1222  typedef mat<2, 2, f32, lowp> lowp_f32mat2x2;
-
1223 
-
1226  typedef mat<2, 3, f32, lowp> lowp_f32mat2x3;
-
1227 
-
1230  typedef mat<2, 4, f32, lowp> lowp_f32mat2x4;
-
1231 
-
1234  typedef mat<3, 2, f32, lowp> lowp_f32mat3x2;
-
1235 
-
1238  typedef mat<3, 3, f32, lowp> lowp_f32mat3x3;
-
1239 
-
1242  typedef mat<3, 4, f32, lowp> lowp_f32mat3x4;
-
1243 
-
1246  typedef mat<4, 2, f32, lowp> lowp_f32mat4x2;
-
1247 
-
1250  typedef mat<4, 3, f32, lowp> lowp_f32mat4x3;
-
1251 
-
1254  typedef mat<4, 4, f32, lowp> lowp_f32mat4x4;
-
1255 
-
1258  //typedef detail::tmat1x1<f32, lowp> lowp_f32mat1;
-
1259 
-
1262  typedef lowp_f32mat2x2 lowp_f32mat2;
-
1263 
-
1266  typedef lowp_f32mat3x3 lowp_f32mat3;
-
1267 
-
1270  typedef lowp_f32mat4x4 lowp_f32mat4;
-
1271 
-
1272 
-
1275  //typedef f32 mediump_f32mat1x1;
-
1276 
-
1279  typedef mat<2, 2, f32, mediump> mediump_f32mat2x2;
-
1280 
-
1283  typedef mat<2, 3, f32, mediump> mediump_f32mat2x3;
-
1284 
-
1287  typedef mat<2, 4, f32, mediump> mediump_f32mat2x4;
-
1288 
-
1291  typedef mat<3, 2, f32, mediump> mediump_f32mat3x2;
-
1292 
-
1295  typedef mat<3, 3, f32, mediump> mediump_f32mat3x3;
-
1296 
-
1299  typedef mat<3, 4, f32, mediump> mediump_f32mat3x4;
-
1300 
-
1303  typedef mat<4, 2, f32, mediump> mediump_f32mat4x2;
-
1304 
-
1307  typedef mat<4, 3, f32, mediump> mediump_f32mat4x3;
-
1308 
-
1311  typedef mat<4, 4, f32, mediump> mediump_f32mat4x4;
-
1312 
-
1315  //typedef detail::tmat1x1<f32, mediump> f32mat1;
-
1316 
-
1319  typedef mediump_f32mat2x2 mediump_f32mat2;
-
1320 
-
1323  typedef mediump_f32mat3x3 mediump_f32mat3;
-
1324 
-
1327  typedef mediump_f32mat4x4 mediump_f32mat4;
-
1328 
-
1329 
-
1332  //typedef f32 highp_f32mat1x1;
-
1333 
-
1336  typedef mat<2, 2, f32, highp> highp_f32mat2x2;
-
1337 
-
1340  typedef mat<2, 3, f32, highp> highp_f32mat2x3;
-
1341 
-
1344  typedef mat<2, 4, f32, highp> highp_f32mat2x4;
-
1345 
-
1348  typedef mat<3, 2, f32, highp> highp_f32mat3x2;
-
1349 
-
1352  typedef mat<3, 3, f32, highp> highp_f32mat3x3;
-
1353 
-
1356  typedef mat<3, 4, f32, highp> highp_f32mat3x4;
-
1357 
-
1360  typedef mat<4, 2, f32, highp> highp_f32mat4x2;
-
1361 
-
1364  typedef mat<4, 3, f32, highp> highp_f32mat4x3;
-
1365 
-
1368  typedef mat<4, 4, f32, highp> highp_f32mat4x4;
-
1369 
-
1372  //typedef detail::tmat1x1<f32, highp> f32mat1;
-
1373 
-
1376  typedef highp_f32mat2x2 highp_f32mat2;
-
1377 
-
1380  typedef highp_f32mat3x3 highp_f32mat3;
-
1381 
-
1384  typedef highp_f32mat4x4 highp_f32mat4;
-
1385 
-
1386 
-
1389  //typedef f64 lowp_f64mat1x1;
-
1390 
-
1393  typedef mat<2, 2, f64, lowp> lowp_f64mat2x2;
-
1394 
-
1397  typedef mat<2, 3, f64, lowp> lowp_f64mat2x3;
-
1398 
-
1401  typedef mat<2, 4, f64, lowp> lowp_f64mat2x4;
-
1402 
-
1405  typedef mat<3, 2, f64, lowp> lowp_f64mat3x2;
-
1406 
-
1409  typedef mat<3, 3, f64, lowp> lowp_f64mat3x3;
-
1410 
-
1413  typedef mat<3, 4, f64, lowp> lowp_f64mat3x4;
-
1414 
-
1417  typedef mat<4, 2, f64, lowp> lowp_f64mat4x2;
-
1418 
-
1421  typedef mat<4, 3, f64, lowp> lowp_f64mat4x3;
-
1422 
-
1425  typedef mat<4, 4, f64, lowp> lowp_f64mat4x4;
-
1426 
-
1429  //typedef lowp_f64mat1x1 lowp_f64mat1;
-
1430 
-
1433  typedef lowp_f64mat2x2 lowp_f64mat2;
-
1434 
-
1437  typedef lowp_f64mat3x3 lowp_f64mat3;
-
1438 
-
1441  typedef lowp_f64mat4x4 lowp_f64mat4;
-
1442 
-
1443 
-
1446  //typedef f64 Highp_f64mat1x1;
-
1447 
-
1450  typedef mat<2, 2, f64, mediump> mediump_f64mat2x2;
-
1451 
-
1454  typedef mat<2, 3, f64, mediump> mediump_f64mat2x3;
-
1455 
-
1458  typedef mat<2, 4, f64, mediump> mediump_f64mat2x4;
-
1459 
-
1462  typedef mat<3, 2, f64, mediump> mediump_f64mat3x2;
-
1463 
-
1466  typedef mat<3, 3, f64, mediump> mediump_f64mat3x3;
-
1467 
-
1470  typedef mat<3, 4, f64, mediump> mediump_f64mat3x4;
-
1471 
-
1474  typedef mat<4, 2, f64, mediump> mediump_f64mat4x2;
-
1475 
-
1478  typedef mat<4, 3, f64, mediump> mediump_f64mat4x3;
-
1479 
-
1482  typedef mat<4, 4, f64, mediump> mediump_f64mat4x4;
-
1483 
-
1486  //typedef mediump_f64mat1x1 mediump_f64mat1;
-
1487 
-
1490  typedef mediump_f64mat2x2 mediump_f64mat2;
-
1491 
-
1494  typedef mediump_f64mat3x3 mediump_f64mat3;
-
1495 
-
1498  typedef mediump_f64mat4x4 mediump_f64mat4;
-
1499 
-
1502  //typedef f64 highp_f64mat1x1;
-
1503 
-
1506  typedef mat<2, 2, f64, highp> highp_f64mat2x2;
-
1507 
-
1510  typedef mat<2, 3, f64, highp> highp_f64mat2x3;
-
1511 
-
1514  typedef mat<2, 4, f64, highp> highp_f64mat2x4;
-
1515 
-
1518  typedef mat<3, 2, f64, highp> highp_f64mat3x2;
-
1519 
-
1522  typedef mat<3, 3, f64, highp> highp_f64mat3x3;
-
1523 
-
1526  typedef mat<3, 4, f64, highp> highp_f64mat3x4;
-
1527 
-
1530  typedef mat<4, 2, f64, highp> highp_f64mat4x2;
-
1531 
-
1534  typedef mat<4, 3, f64, highp> highp_f64mat4x3;
-
1535 
-
1538  typedef mat<4, 4, f64, highp> highp_f64mat4x4;
-
1539 
-
1542  //typedef highp_f64mat1x1 highp_f64mat1;
-
1543 
-
1546  typedef highp_f64mat2x2 highp_f64mat2;
-
1547 
-
1550  typedef highp_f64mat3x3 highp_f64mat3;
-
1551 
-
1554  typedef highp_f64mat4x4 highp_f64mat4;
-
1555 
-
1556 
-
1557 
-
1558 
-
1561  typedef vec<1, u8, lowp> lowp_u8vec1;
-
1562 
-
1565  typedef vec<2, u8, lowp> lowp_u8vec2;
-
1566 
-
1569  typedef vec<3, u8, lowp> lowp_u8vec3;
-
1570 
-
1573  typedef vec<4, u8, lowp> lowp_u8vec4;
-
1574 
-
1575 
-
1578  typedef vec<1, u8, mediump> mediump_u8vec1;
-
1579 
-
1582  typedef vec<2, u8, mediump> mediump_u8vec2;
-
1583 
-
1586  typedef vec<3, u8, mediump> mediump_u8vec3;
-
1587 
-
1590  typedef vec<4, u8, mediump> mediump_u8vec4;
-
1591 
-
1592 
-
1595  typedef vec<1, u8, highp> highp_u8vec1;
-
1596 
-
1599  typedef vec<2, u8, highp> highp_u8vec2;
-
1600 
-
1603  typedef vec<3, u8, highp> highp_u8vec3;
-
1604 
-
1607  typedef vec<4, u8, highp> highp_u8vec4;
-
1608 
-
1609 
-
1610 
-
1613  typedef vec<1, u8, defaultp> u8vec1;
-
1614 
-
1617  typedef vec<2, u8, defaultp> u8vec2;
-
1618 
-
1621  typedef vec<3, u8, defaultp> u8vec3;
-
1622 
-
1625  typedef vec<4, u8, defaultp> u8vec4;
-
1626 
-
1627 
-
1628 
-
1629 
-
1632  typedef vec<1, u16, lowp> lowp_u16vec1;
-
1633 
-
1636  typedef vec<2, u16, lowp> lowp_u16vec2;
-
1637 
-
1640  typedef vec<3, u16, lowp> lowp_u16vec3;
-
1641 
-
1644  typedef vec<4, u16, lowp> lowp_u16vec4;
-
1645 
-
1646 
-
1649  typedef vec<1, u16, mediump> mediump_u16vec1;
-
1650 
-
1653  typedef vec<2, u16, mediump> mediump_u16vec2;
-
1654 
-
1657  typedef vec<3, u16, mediump> mediump_u16vec3;
-
1658 
-
1661  typedef vec<4, u16, mediump> mediump_u16vec4;
-
1662 
-
1663 
-
1666  typedef vec<1, u16, highp> highp_u16vec1;
-
1667 
-
1670  typedef vec<2, u16, highp> highp_u16vec2;
-
1671 
-
1674  typedef vec<3, u16, highp> highp_u16vec3;
-
1675 
-
1678  typedef vec<4, u16, highp> highp_u16vec4;
-
1679 
-
1680 
-
1681 
-
1682 
-
1685  typedef vec<1, u16, defaultp> u16vec1;
-
1686 
-
1689  typedef vec<2, u16, defaultp> u16vec2;
-
1690 
-
1693  typedef vec<3, u16, defaultp> u16vec3;
-
1694 
-
1697  typedef vec<4, u16, defaultp> u16vec4;
-
1698 
-
1699 
-
1700 
-
1703  typedef vec<1, u32, lowp> lowp_u32vec1;
-
1704 
-
1707  typedef vec<2, u32, lowp> lowp_u32vec2;
-
1708 
-
1711  typedef vec<3, u32, lowp> lowp_u32vec3;
-
1712 
-
1715  typedef vec<4, u32, lowp> lowp_u32vec4;
-
1716 
-
1717 
-
1720  typedef vec<1, u32, mediump> mediump_u32vec1;
-
1721 
-
1724  typedef vec<2, u32, mediump> mediump_u32vec2;
-
1725 
-
1728  typedef vec<3, u32, mediump> mediump_u32vec3;
-
1729 
-
1732  typedef vec<4, u32, mediump> mediump_u32vec4;
-
1733 
-
1734 
-
1737  typedef vec<1, u32, highp> highp_u32vec1;
-
1738 
-
1741  typedef vec<2, u32, highp> highp_u32vec2;
-
1742 
-
1745  typedef vec<3, u32, highp> highp_u32vec3;
-
1746 
-
1749  typedef vec<4, u32, highp> highp_u32vec4;
-
1750 
-
1751 
-
1752 
-
1755  typedef vec<1, u32, defaultp> u32vec1;
-
1756 
-
1759  typedef vec<2, u32, defaultp> u32vec2;
-
1760 
-
1763  typedef vec<3, u32, defaultp> u32vec3;
-
1764 
-
1767  typedef vec<4, u32, defaultp> u32vec4;
-
1768 
-
1769 
-
1770 
-
1771 
-
1774  typedef vec<1, u64, lowp> lowp_u64vec1;
-
1775 
-
1778  typedef vec<2, u64, lowp> lowp_u64vec2;
-
1779 
-
1782  typedef vec<3, u64, lowp> lowp_u64vec3;
-
1783 
-
1786  typedef vec<4, u64, lowp> lowp_u64vec4;
-
1787 
-
1788 
-
1791  typedef vec<1, u64, mediump> mediump_u64vec1;
-
1792 
-
1795  typedef vec<2, u64, mediump> mediump_u64vec2;
-
1796 
-
1799  typedef vec<3, u64, mediump> mediump_u64vec3;
-
1800 
-
1803  typedef vec<4, u64, mediump> mediump_u64vec4;
-
1804 
-
1805 
-
1808  typedef vec<1, u64, highp> highp_u64vec1;
-
1809 
-
1812  typedef vec<2, u64, highp> highp_u64vec2;
-
1813 
-
1816  typedef vec<3, u64, highp> highp_u64vec3;
-
1817 
-
1820  typedef vec<4, u64, highp> highp_u64vec4;
-
1821 
-
1822 
-
1823 
-
1824 
-
1827  typedef vec<1, u64, defaultp> u64vec1;
-
1828 
-
1831  typedef vec<2, u64, defaultp> u64vec2;
-
1832 
-
1835  typedef vec<3, u64, defaultp> u64vec3;
-
1836 
-
1839  typedef vec<4, u64, defaultp> u64vec4;
-
1840 
-
1841 
-
1843  // Float vector types
-
1844 
-
1847  typedef float32 float32_t;
-
1848 
-
1851  typedef float32 f32;
-
1852 
-
1853 # ifndef GLM_FORCE_SINGLE_ONLY
-
1854 
-
1857  typedef float64 float64_t;
-
1858 
-
1861  typedef float64 f64;
-
1862 # endif//GLM_FORCE_SINGLE_ONLY
-
1863 
-
1866  typedef vec<1, float, defaultp> fvec1;
-
1867 
-
1870  typedef vec<2, float, defaultp> fvec2;
-
1871 
-
1874  typedef vec<3, float, defaultp> fvec3;
-
1875 
-
1878  typedef vec<4, float, defaultp> fvec4;
-
1879 
-
1880 
-
1883  typedef vec<1, f32, defaultp> f32vec1;
-
1884 
-
1887  typedef vec<2, f32, defaultp> f32vec2;
-
1888 
-
1891  typedef vec<3, f32, defaultp> f32vec3;
-
1892 
-
1895  typedef vec<4, f32, defaultp> f32vec4;
-
1896 
-
1897 # ifndef GLM_FORCE_SINGLE_ONLY
-
1898  typedef vec<1, f64, defaultp> f64vec1;
-
1901 
-
1904  typedef vec<2, f64, defaultp> f64vec2;
-
1905 
-
1908  typedef vec<3, f64, defaultp> f64vec3;
-
1909 
-
1912  typedef vec<4, f64, defaultp> f64vec4;
-
1913 # endif//GLM_FORCE_SINGLE_ONLY
-
1914 
-
1915 
-
1917  // Float matrix types
-
1918 
-
1921  //typedef detail::tmat1x1<f32> fmat1;
-
1922 
-
1925  typedef mat<2, 2, f32, defaultp> fmat2;
-
1926 
-
1929  typedef mat<3, 3, f32, defaultp> fmat3;
-
1930 
-
1933  typedef mat<4, 4, f32, defaultp> fmat4;
-
1934 
-
1935 
-
1938  //typedef f32 fmat1x1;
-
1939 
-
1942  typedef mat<2, 2, f32, defaultp> fmat2x2;
-
1943 
-
1946  typedef mat<2, 3, f32, defaultp> fmat2x3;
-
1947 
-
1950  typedef mat<2, 4, f32, defaultp> fmat2x4;
-
1951 
-
1954  typedef mat<3, 2, f32, defaultp> fmat3x2;
-
1955 
-
1958  typedef mat<3, 3, f32, defaultp> fmat3x3;
-
1959 
-
1962  typedef mat<3, 4, f32, defaultp> fmat3x4;
-
1963 
-
1966  typedef mat<4, 2, f32, defaultp> fmat4x2;
-
1967 
-
1970  typedef mat<4, 3, f32, defaultp> fmat4x3;
-
1971 
-
1974  typedef mat<4, 4, f32, defaultp> fmat4x4;
-
1975 
-
1976 
-
1979  //typedef detail::tmat1x1<f32, defaultp> f32mat1;
-
1980 
-
1983  typedef mat<2, 2, f32, defaultp> f32mat2;
-
1984 
-
1987  typedef mat<3, 3, f32, defaultp> f32mat3;
-
1988 
-
1991  typedef mat<4, 4, f32, defaultp> f32mat4;
-
1992 
-
1993 
-
1996  //typedef f32 f32mat1x1;
-
1997 
-
2000  typedef mat<2, 2, f32, defaultp> f32mat2x2;
-
2001 
-
2004  typedef mat<2, 3, f32, defaultp> f32mat2x3;
-
2005 
-
2008  typedef mat<2, 4, f32, defaultp> f32mat2x4;
-
2009 
-
2012  typedef mat<3, 2, f32, defaultp> f32mat3x2;
-
2013 
-
2016  typedef mat<3, 3, f32, defaultp> f32mat3x3;
-
2017 
-
2020  typedef mat<3, 4, f32, defaultp> f32mat3x4;
-
2021 
-
2024  typedef mat<4, 2, f32, defaultp> f32mat4x2;
-
2025 
-
2028  typedef mat<4, 3, f32, defaultp> f32mat4x3;
-
2029 
-
2032  typedef mat<4, 4, f32, defaultp> f32mat4x4;
-
2033 
-
2034 
-
2035 # ifndef GLM_FORCE_SINGLE_ONLY
-
2036 
-
2039  //typedef detail::tmat1x1<f64, defaultp> f64mat1;
-
2040 
-
2043  typedef mat<2, 2, f64, defaultp> f64mat2;
-
2044 
-
2047  typedef mat<3, 3, f64, defaultp> f64mat3;
-
2048 
-
2051  typedef mat<4, 4, f64, defaultp> f64mat4;
-
2052 
-
2053 
-
2056  //typedef f64 f64mat1x1;
-
2057 
-
2060  typedef mat<2, 2, f64, defaultp> f64mat2x2;
-
2061 
-
2064  typedef mat<2, 3, f64, defaultp> f64mat2x3;
-
2065 
-
2068  typedef mat<2, 4, f64, defaultp> f64mat2x4;
-
2069 
-
2072  typedef mat<3, 2, f64, defaultp> f64mat3x2;
-
2073 
-
2076  typedef mat<3, 3, f64, defaultp> f64mat3x3;
-
2077 
-
2080  typedef mat<3, 4, f64, defaultp> f64mat3x4;
-
2081 
-
2084  typedef mat<4, 2, f64, defaultp> f64mat4x2;
-
2085 
-
2088  typedef mat<4, 3, f64, defaultp> f64mat4x3;
-
2089 
-
2092  typedef mat<4, 4, f64, defaultp> f64mat4x4;
-
2093 
-
2094 # endif//GLM_FORCE_SINGLE_ONLY
-
2095 
-
2097  // Quaternion types
-
2098 
-
2101  typedef qua<f32, defaultp> f32quat;
-
2102 
-
2105  typedef qua<f32, lowp> lowp_f32quat;
-
2106 
-
2109  typedef qua<f64, lowp> lowp_f64quat;
-
2110 
-
2113  typedef qua<f32, mediump> mediump_f32quat;
-
2114 
-
2115 # ifndef GLM_FORCE_SINGLE_ONLY
-
2116 
-
2119  typedef qua<f64, mediump> mediump_f64quat;
-
2120 
-
2123  typedef qua<f32, highp> highp_f32quat;
-
2124 
-
2127  typedef qua<f64, highp> highp_f64quat;
-
2128 
-
2131  typedef qua<f64, defaultp> f64quat;
-
2132 
-
2133 # endif//GLM_FORCE_SINGLE_ONLY
-
2134 
-
2136 }//namespace glm
-
2137 
-
2138 #include "type_precision.inl"
-
vec< 1, u16, highp > highp_u16vec1
High qualifier 16 bit unsigned integer scalar type.
Definition: fwd.hpp:354
-
mat< 4, 2, f32, highp > highp_f32mat4x2
High single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:696
-
uint64 highp_u64
High qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:133
-
vec< 1, f64, mediump > mediump_f64vec1
Medium double-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:491
-
vec< 3, f32, defaultp > f32vec3
Single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:463
-
mat< 2, 2, f32, mediump > mediump_fmat2
Medium single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:528
-
double highp_float64_t
High 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:175
-
mat< 4, 4, f64, defaultp > f64mat4
Double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:586
-
mat< 2, 2, f64, defaultp > f64mat2
Double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:584
-
mat< 4, 3, f32, mediump > mediump_fmat4x3
Medium single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:647
-
mat< 3, 3, f32, mediump > mediump_f32mat3
Medium single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:545
-
uint32 mediump_uint32_t
Medium qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:127
-
uint64 lowp_uint64
Low qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:136
-
mat< 2, 2, f32, mediump > mediump_fmat2x2
Medium single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:640
-
vec< 1, f32, defaultp > f32vec1
Single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:461
-
mat< 4, 4, f32, highp > highp_f32mat4
High single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:550
-
double highp_float64
High 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:170
-
uint8 lowp_u8
Low qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:89
-
uint32 u32
Default qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:120
-
mat< 3, 3, f64, defaultp > f64mat3
Double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:585
-
double lowp_float64
Low 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:168
-
vec< 1, i32, defaultp > i32vec1
32 bit signed integer scalar type.
Definition: fwd.hpp:277
-
uint16 highp_uint16
High qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:110
-
mat< 2, 4, f64, mediump > mediump_f64mat2x4
Medium double-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:762
-
vec< 4, i64, highp > highp_i64vec4
High qualifier 64 bit signed integer vector of 4 components type.
Definition: fwd.hpp:295
-
mat< 3, 4, f64, defaultp > f64mat3x4
Double-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:787
-
mat< 2, 2, f32, defaultp > fmat2
Single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:536
-
vec< 3, i16, defaultp > i16vec3
16 bit signed integer vector of 3 components type.
Definition: fwd.hpp:259
-
uint32 lowp_uint32_t
Low qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:126
-
vec< 2, float, lowp > lowp_fvec2
Low single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:427
-
uint32 mediump_uint32
Medium qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:123
-
mat< 4, 4, f32, mediump > mediump_fmat4
Medium single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:530
-
uint64 highp_uint64
High qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:138
-
mat< 2, 2, f32, lowp > lowp_fmat2
Low single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:524
-
uint32 lowp_uint32
Low qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:122
-
vec< 3, float, lowp > lowp_fvec3
Low single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:428
-
vec< 2, float, mediump > mediump_fvec2
Medium Single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:432
-
mat< 3, 4, f32, lowp > lowp_fmat3x4
Low single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:635
-
mat< 2, 2, f64, lowp > lowp_f64mat2x2
Low double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:750
-
vec< 4, i64, defaultp > i64vec4
64 bit signed integer vector of 4 components type.
Definition: fwd.hpp:300
-
vec< 3, u16, defaultp > u16vec3
Default qualifier 16 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:361
-
vec< 1, u64, lowp > lowp_u64vec1
Low qualifier 64 bit unsigned integer scalar type.
Definition: fwd.hpp:384
-
vec< 1, u16, mediump > mediump_u16vec1
Medium qualifier 16 bit unsigned integer scalar type.
Definition: fwd.hpp:349
-
vec< 2, i8, defaultp > i8vec2
8 bit signed integer vector of 2 components type.
Definition: fwd.hpp:238
-
mat< 2, 3, f64, mediump > mediump_f64mat2x3
Medium double-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:761
-
vec< 4, u32, lowp > lowp_u32vec4
Low qualifier 32 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:367
-
vec< 4, f32, highp > highp_f32vec4
High single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:459
-
vec< 1, f32, lowp > lowp_f32vec1
Low single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:446
-
mat< 2, 3, f32, highp > highp_f32mat2x3
High single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:691
-
int64 highp_int64
High qualifier 64 bit signed integer type.
Definition: fwd.hpp:80
-
vec< 2, i32, mediump > mediump_i32vec2
Medium qualifier 32 bit signed integer vector of 2 components type.
Definition: fwd.hpp:268
-
mat< 4, 4, f64, lowp > lowp_f64mat4
Low double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:574
-
mat< 4, 4, f32, defaultp > fmat4
Single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:538
-
mat< 3, 4, f32, mediump > mediump_fmat3x4
Medium single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:645
-
int16 lowp_int16_t
Low qualifier 16 bit signed integer type.
Definition: fwd.hpp:54
-
vec< 4, i32, highp > highp_i32vec4
High qualifier 32 bit signed integer vector of 4 components type.
Definition: fwd.hpp:275
-
mat< 4, 2, f32, defaultp > f32mat4x2
Single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:702
-
mat< 3, 2, f32, highp > highp_fmat3x2
High single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:653
-
mat< 2, 3, f32, mediump > mediump_fmat2x3
Medium single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:641
-
uint32 mediump_u32
Medium qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:118
-
mat< 3, 2, f32, lowp > lowp_fmat3x2
Low single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:633
-
mat< 4, 2, f64, mediump > mediump_f64mat4x2
Medium double-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:766
-
vec< 2, u16, highp > highp_u16vec2
High qualifier 16 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:355
-
vec< 1, f64, highp > highp_f64vec1
High double-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:496
-
vec< 2, i16, mediump > mediump_i16vec2
Medium qualifier 16 bit signed integer vector of 2 components type.
Definition: fwd.hpp:248
-
mat< 2, 4, f32, highp > highp_fmat2x4
High single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:652
-
vec< 3, u64, defaultp > u64vec3
Default qualifier 64 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:401
-
uint8 lowp_uint8
Low qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:94
-
mat< 3, 2, f32, lowp > lowp_f32mat3x2
Low single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:673
-
uint64 lowp_u64
Low qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:131
-
vec< 3, i64, highp > highp_i64vec3
High qualifier 64 bit signed integer vector of 3 components type.
Definition: fwd.hpp:294
-
int8 mediump_int8
Medium qualifier 8 bit signed integer type.
Definition: fwd.hpp:37
-
int64 lowp_int64
Low qualifier 64 bit signed integer type.
Definition: fwd.hpp:78
-
mat< 4, 2, f32, mediump > mediump_f32mat4x2
Medium single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:686
-
vec< 3, f64, lowp > lowp_f64vec3
Low double-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:488
-
vec< 2, u64, defaultp > u64vec2
Default qualifier 64 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:400
-
vec< 3, i64, lowp > lowp_i64vec3
Low qualifier 64 bit signed integer vector of 3 components type.
Definition: fwd.hpp:284
-
vec< 2, i8, mediump > mediump_i8vec2
Medium qualifier 8 bit signed integer vector of 2 components type.
Definition: fwd.hpp:228
-
mat< 3, 4, f32, defaultp > f32mat3x4
Single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:707
-
vec< 3, i16, highp > highp_i16vec3
High qualifier 16 bit signed integer vector of 3 components type.
Definition: fwd.hpp:254
-
vec< 3, i16, mediump > mediump_i16vec3
Medium qualifier 16 bit signed integer vector of 3 components type.
Definition: fwd.hpp:249
-
uint64 u64
Default qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:134
-
vec< 1, f64, defaultp > f64vec1
Double-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:501
-
mat< 3, 2, f32, mediump > mediump_fmat3x2
Medium single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:643
-
vec< 1, i64, mediump > mediump_i64vec1
Medium qualifier 64 bit signed integer scalar type.
Definition: fwd.hpp:287
-
vec< 1, i16, defaultp > i16vec1
16 bit signed integer scalar type.
Definition: fwd.hpp:257
-
mat< 3, 3, f64, lowp > lowp_f64mat3x3
Low double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:754
-
vec< 2, f64, lowp > lowp_f64vec2
Low double-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:487
-
mat< 2, 3, f32, highp > highp_fmat2x3
High single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:651
-
mat< 3, 3, f64, lowp > lowp_f64mat3
Low double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:573
-
mat< 4, 3, f32, lowp > lowp_f32mat4x3
Low single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:677
-
vec< 3, u64, mediump > mediump_u64vec3
Medium qualifier 64 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:391
-
double mediump_float64
Medium 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:169
-
double float64
Double-qualifier floating-point scalar.
Definition: fwd.hpp:171
-
vec< 2, i16, highp > highp_i16vec2
High qualifier 16 bit signed integer vector of 2 components type.
Definition: fwd.hpp:253
-
mat< 4, 2, f32, defaultp > fmat4x2
Single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:662
-
mat< 2, 3, f64, lowp > lowp_f64mat2x3
Low double-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:751
-
mat< 3, 4, f32, defaultp > fmat3x4
Single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:667
-
vec< 3, u32, lowp > lowp_u32vec3
Low qualifier 32 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:366
-
mat< 2, 4, f32, defaultp > f32mat2x4
Single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:706
-
vec< 4, float, lowp > lowp_fvec4
Low single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:429
-
vec< 4, f32, mediump > mediump_f32vec4
Medium single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:454
-
vec< 4, i16, defaultp > i16vec4
16 bit signed integer vector of 4 components type.
Definition: fwd.hpp:260
-
uint8 lowp_uint8_t
Low qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:98
-
uint32 highp_uint32_t
High qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:128
-
mat< 3, 3, f32, defaultp > fmat3x3
Single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:664
-
mat< 3, 4, f64, mediump > mediump_f64mat3x4
Medium double-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:765
-
mat< 2, 3, f32, lowp > lowp_fmat2x3
Low single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:631
-
vec< 1, u32, lowp > lowp_u32vec1
Low qualifier 32 bit unsigned integer scalar type.
Definition: fwd.hpp:364
-
mat< 2, 3, f32, defaultp > f32mat2x3
Single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:703
-
vec< 1, i32, mediump > mediump_i32vec1
Medium qualifier 32 bit signed integer scalar type.
Definition: fwd.hpp:267
-
vec< 4, u16, highp > highp_u16vec4
High qualifier 16 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:357
-
vec< 1, i32, lowp > lowp_i32vec1
Low qualifier 32 bit signed integer scalar type.
Definition: fwd.hpp:262
-
vec< 1, i64, lowp > lowp_i64vec1
Low qualifier 64 bit signed integer scalar type.
Definition: fwd.hpp:282
-
vec< 1, u32, highp > highp_u32vec1
High qualifier 32 bit unsigned integer scalar type.
Definition: fwd.hpp:374
-
int16 mediump_int16
Medium qualifier 16 bit signed integer type.
Definition: fwd.hpp:51
-
uint16 mediump_u16
Medium qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:104
-
qua< f64, defaultp > f64quat
Double-qualifier floating-point quaternion.
Definition: fwd.hpp:815
-
vec< 3, f64, mediump > mediump_f64vec3
Medium double-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:493
-
vec< 1, u64, defaultp > u64vec1
Default qualifier 64 bit unsigned integer scalar type.
Definition: fwd.hpp:399
-
int64 int64_t
64 bit signed integer type.
Definition: fwd.hpp:85
-
vec< 1, u8, defaultp > u8vec1
Default qualifier 8 bit unsigned integer scalar type.
Definition: fwd.hpp:339
-
vec< 1, i8, highp > highp_i8vec1
High qualifier 8 bit signed integer scalar type.
Definition: fwd.hpp:232
-
vec< 4, u8, defaultp > u8vec4
Default qualifier 8 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:342
-
int8 int8_t
8 bit signed integer type.
Definition: fwd.hpp:43
-
int32 i32
32 bit signed integer type.
Definition: fwd.hpp:62
-
vec< 1, u32, mediump > mediump_u32vec1
Medium qualifier 32 bit unsigned integer scalar type.
Definition: fwd.hpp:369
-
mat< 2, 2, f64, defaultp > f64mat2x2
Double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:780
-
mat< 2, 2, f32, lowp > lowp_f32mat2x2
Low single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:670
-
vec< 4, f32, lowp > lowp_f32vec4
Low single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:449
-
vec< 3, float, highp > highp_fvec3
High Single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:438
-
mat< 4, 2, f64, lowp > lowp_f64mat4x2
Low double-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:756
-
mat< 3, 3, f32, mediump > mediump_fmat3x3
Medium single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:644
-
vec< 1, i64, highp > highp_i64vec1
High qualifier 64 bit signed integer scalar type.
Definition: fwd.hpp:292
-
vec< 4, i8, defaultp > i8vec4
8 bit signed integer vector of 4 components type.
Definition: fwd.hpp:240
-
int32 highp_int32
High qualifier 32 bit signed integer type.
Definition: fwd.hpp:66
-
mat< 2, 3, f32, mediump > mediump_f32mat2x3
Medium single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:681
-
mat< 3, 2, f64, lowp > lowp_f64mat3x2
Low double-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:753
-
uint32 highp_u32
High qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:119
-
int32 highp_i32
High qualifier 32 bit signed integer type.
Definition: fwd.hpp:61
-
vec< 4, u64, defaultp > u64vec4
Default qualifier 64 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:402
-
vec< 4, f32, defaultp > f32vec4
Single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:464
-
mat< 2, 3, f64, defaultp > f64mat2x3
Double-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:783
-
mat< 4, 4, f64, mediump > mediump_f64mat4x4
Medium double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:768
-
vec< 4, u16, lowp > lowp_u16vec4
Low qualifier 16 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:347
-
uint32 highp_uint32
High qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:124
-
mat< 4, 4, f32, lowp > lowp_f32mat4
Low single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:542
-
mat< 3, 2, f64, defaultp > f64mat3x2
Double-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:781
-
float mediump_float32
Medium 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:153
-
vec< 1, u32, defaultp > u32vec1
Default qualifier 32 bit unsigned integer scalar type.
Definition: fwd.hpp:379
-
vec< 4, f64, mediump > mediump_f64vec4
Medium double-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:494
-
mat< 3, 3, f64, defaultp > f64mat3x3
Double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:784
-
float highp_float32
High 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:154
-
uint8 highp_uint8
High qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:96
-
int8 highp_i8
High qualifier 8 bit signed integer type.
Definition: fwd.hpp:33
-
mat< 2, 4, f64, lowp > lowp_f64mat2x4
Low double-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:752
-
mat< 3, 4, f64, lowp > lowp_f64mat3x4
Low double-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:755
-
int8 mediump_i8
Medium qualifier 8 bit signed integer type.
Definition: fwd.hpp:32
-
int64 highp_int64_t
High qualifier 64 bit signed integer type.
Definition: fwd.hpp:84
-
mat< 4, 4, f32, defaultp > f32mat4x4
Single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:708
-
float float32_t
Default 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:160
-
mat< 2, 2, f32, defaultp > f32mat2x2
Single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:700
-
vec< 2, i64, lowp > lowp_i64vec2
Low qualifier 64 bit signed integer vector of 2 components type.
Definition: fwd.hpp:283
-
mat< 2, 4, f32, lowp > lowp_f32mat2x4
Low single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:672
-
uint32 uint32_t
Default qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:129
-
mat< 3, 3, f32, highp > highp_f32mat3
High single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:549
-
mat< 3, 3, f64, mediump > mediump_f64mat3x3
Medium double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:764
-
uint8 u8
Default qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:92
-
vec< 3, i32, highp > highp_i32vec3
High qualifier 32 bit signed integer vector of 3 components type.
Definition: fwd.hpp:274
-
float float32
Single-qualifier floating-point scalar.
Definition: fwd.hpp:155
-
vec< 4, f32, defaultp > fvec4
Single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:444
-
vec< 1, i32, highp > highp_i32vec1
High qualifier 32 bit signed integer scalar type.
Definition: fwd.hpp:272
-
mat< 3, 3, f32, lowp > lowp_f32mat3
Low single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:541
-
vec< 1, u16, defaultp > u16vec1
Default qualifier 16 bit unsigned integer scalar type.
Definition: fwd.hpp:359
-
vec< 1, i8, defaultp > i8vec1
8 bit signed integer scalar type.
Definition: fwd.hpp:237
-
vec< 3, i32, mediump > mediump_i32vec3
Medium qualifier 32 bit signed integer vector of 3 components type.
Definition: fwd.hpp:269
-
vec< 2, i32, defaultp > i32vec2
32 bit signed integer vector of 2 components type.
Definition: fwd.hpp:278
-
vec< 2, i16, lowp > lowp_i16vec2
Low qualifier 16 bit signed integer vector of 2 components type.
Definition: fwd.hpp:243
-
vec< 2, u64, mediump > mediump_u64vec2
Medium qualifier 64 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:390
-
vec< 4, u8, lowp > lowp_u8vec4
Low qualifier 8 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:327
-
mat< 3, 3, f32, highp > highp_f32mat3x3
High single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:694
-
vec< 1, u8, highp > highp_u8vec1
High qualifier 8 bit unsigned integer scalar type.
Definition: fwd.hpp:334
-
uint8 highp_uint8_t
High qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:100
-
vec< 4, u32, mediump > mediump_u32vec4
Medium qualifier 32 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:372
-
mat< 2, 2, f32, highp > highp_f32mat2x2
High single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:690
-
vec< 4, f64, highp > highp_f64vec4
High double-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:499
-
vec< 3, u8, lowp > lowp_u8vec3
Low qualifier 8 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:326
-
float highp_f32
High 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:149
-
uint64 mediump_uint64
Medium qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:137
-
int32 highp_int32_t
32 bit signed integer type.
Definition: fwd.hpp:70
-
vec< 3, f64, defaultp > f64vec3
Double-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:503
-
mat< 2, 3, f32, lowp > lowp_f32mat2x3
Low single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:671
-
vec< 3, u16, mediump > mediump_u16vec3
Medium qualifier 16 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:351
-
mat< 2, 4, f64, defaultp > f64mat2x4
Double-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:786
-
mat< 3, 3, f32, defaultp > f32mat3
Single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:553
-
mat< 2, 2, f64, mediump > mediump_f64mat2x2
Medium double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:760
-
uint64 mediump_u64
Medium qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:132
-
vec< 4, i16, highp > highp_i16vec4
High qualifier 16 bit signed integer vector of 4 components type.
Definition: fwd.hpp:255
-
mat< 4, 4, f32, lowp > lowp_fmat4
Low single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:526
-
vec< 2, u32, mediump > mediump_u32vec2
Medium qualifier 32 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:370
-
vec< 3, u64, highp > highp_u64vec3
High qualifier 64 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:396
-
uint16 lowp_u16
Low qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:103
-
vec< 3, i16, lowp > lowp_i16vec3
Low qualifier 16 bit signed integer vector of 3 components type.
Definition: fwd.hpp:244
-
vec< 3, u16, lowp > lowp_u16vec3
Low qualifier 16 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:346
-
vec< 3, f32, lowp > lowp_f32vec3
Low single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:448
-
mat< 4, 4, f32, highp > highp_fmat4
High single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:534
-
mat< 3, 3, f32, lowp > lowp_fmat3
Low single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:525
-
int16 highp_i16
High qualifier 16 bit signed integer type.
Definition: fwd.hpp:47
-
qua< f32, mediump > mediump_f32quat
Medium single-qualifier floating-point quaternion.
Definition: fwd.hpp:803
-
int8 highp_int8
High qualifier 8 bit signed integer type.
Definition: fwd.hpp:38
-
mat< 4, 4, f64, defaultp > f64mat4x4
Double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:788
-
mat< 4, 3, f32, defaultp > fmat4x3
Single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:665
-
mat< 2, 4, f32, lowp > lowp_fmat2x4
Low single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:632
-
mat< 3, 3, f64, highp > highp_f64mat3
High double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:581
-
vec< 3, i8, mediump > mediump_i8vec3
Medium qualifier 8 bit signed integer vector of 3 components type.
Definition: fwd.hpp:229
-
vec< 1, f32, highp > highp_f32vec1
High single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:456
-
vec< 3, i8, lowp > lowp_i8vec3
Low qualifier 8 bit signed integer vector of 3 components type.
Definition: fwd.hpp:224
-
mat< 4, 3, f64, lowp > lowp_f64mat4x3
Low double-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:757
-
vec< 4, u64, highp > highp_u64vec4
High qualifier 64 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:397
-
vec< 3, f32, defaultp > fvec3
Single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:443
-
vec< 2, i16, defaultp > i16vec2
16 bit signed integer vector of 2 components type.
Definition: fwd.hpp:258
-
mat< 4, 3, f32, defaultp > f32mat4x3
Single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:705
-
mat< 2, 2, f32, defaultp > f32mat2
Single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:552
-
vec< 2, u16, mediump > mediump_u16vec2
Medium qualifier 16 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:350
-
mat< 2, 4, f32, mediump > mediump_fmat2x4
Medium single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:642
-
mat< 4, 4, f32, lowp > lowp_f32mat4x4
Low single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:678
-
vec< 2, u8, lowp > lowp_u8vec2
Low qualifier 8 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:325
-
mat< 3, 3, f64, mediump > mediump_f64mat3
Medium double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:577
-
int16 lowp_i16
Low qualifier 16 bit signed integer type.
Definition: fwd.hpp:45
-
mat< 3, 4, f32, highp > highp_fmat3x4
High single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:655
-
double float64_t
Default 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:176
-
mat< 4, 4, f64, highp > highp_f64mat4x4
High double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:778
-
mat< 4, 3, f32, mediump > mediump_f32mat4x3
Medium single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:687
-
int16 lowp_int16
Low qualifier 16 bit signed integer type.
Definition: fwd.hpp:50
-
mat< 3, 3, f32, mediump > mediump_fmat3
Medium single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:529
-
mat< 4, 4, f32, highp > highp_f32mat4x4
High single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:698
-
int64 lowp_int64_t
Low qualifier 64 bit signed integer type.
Definition: fwd.hpp:82
-
uint16 uint16_t
Default qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:115
-
vec< 2, f64, highp > highp_f64vec2
High double-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:497
-
vec< 2, u64, lowp > lowp_u64vec2
Low qualifier 64 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:385
-
mat< 3, 3, f32, defaultp > fmat3
Single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:537
-
mat< 3, 2, f32, mediump > mediump_f32mat3x2
Medium single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:683
-
mat< 4, 2, f32, lowp > lowp_f32mat4x2
Low single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:676
-
int32 lowp_int32
Low qualifier 32 bit signed integer type.
Definition: fwd.hpp:64
-
vec< 4, i64, mediump > mediump_i64vec4
Medium qualifier 64 bit signed integer vector of 4 components type.
Definition: fwd.hpp:290
-
uint8 uint8_t
Default qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:101
-
vec< 1, i8, mediump > mediump_i8vec1
Medium qualifier 8 bit signed integer scalar type.
Definition: fwd.hpp:227
-
int32 mediump_int32_t
Medium qualifier 32 bit signed integer type.
Definition: fwd.hpp:69
-
float highp_float32_t
High 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:159
-
mat< 3, 3, f32, defaultp > f32mat3x3
Single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:704
-
uint8 highp_u8
High qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:91
-
uint8 mediump_uint8
Medium qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:95
-
mat< 4, 2, f32, highp > highp_fmat4x2
High single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:656
-
vec< 2, f32, highp > highp_f32vec2
High single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:457
-
int64 mediump_int64_t
Medium qualifier 64 bit signed integer type.
Definition: fwd.hpp:83
-
vec< 3, u64, lowp > lowp_u64vec3
Low qualifier 64 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:386
-
mat< 2, 2, f64, highp > highp_f64mat2x2
High double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:770
-
vec< 3, u32, highp > highp_u32vec3
High qualifier 32 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:376
-
int8 highp_int8_t
High qualifier 8 bit signed integer type.
Definition: fwd.hpp:42
-
qua< f32, lowp > lowp_f32quat
Low single-qualifier floating-point quaternion.
Definition: fwd.hpp:802
-
vec< 4, i32, lowp > lowp_i32vec4
Low qualifier 32 bit signed integer vector of 4 components type.
Definition: fwd.hpp:265
-
vec< 1, i16, highp > highp_i16vec1
High qualifier 16 bit signed integer scalar type.
Definition: fwd.hpp:252
-
mat< 4, 4, f32, lowp > lowp_fmat4x4
Low single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:638
-
mat< 3, 2, f32, defaultp > f32mat3x2
Single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:701
-
mat< 3, 3, f32, lowp > lowp_f32mat3x3
Low single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:674
-
vec< 2, i8, lowp > lowp_i8vec2
Low qualifier 8 bit signed integer vector of 2 components type.
Definition: fwd.hpp:223
-
vec< 4, i32, defaultp > i32vec4
32 bit signed integer vector of 4 components type.
Definition: fwd.hpp:280
-
mat< 2, 2, f32, highp > highp_f32mat2
High single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:548
-
float lowp_f32
Low 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:147
-
vec< 4, u16, mediump > mediump_u16vec4
Medium qualifier 16 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:352
-
vec< 3, u32, defaultp > u32vec3
Default qualifier 32 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:381
-
vec< 2, u8, defaultp > u8vec2
Default qualifier 8 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:340
-
int16 mediump_i16
Medium qualifier 16 bit signed integer type.
Definition: fwd.hpp:46
-
vec< 2, u64, highp > highp_u64vec2
High qualifier 64 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:395
-
vec< 3, i8, defaultp > i8vec3
8 bit signed integer vector of 3 components type.
Definition: fwd.hpp:239
-
mat< 2, 2, f32, mediump > mediump_f32mat2x2
High single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:680
-
uint16 mediump_uint16_t
Medium qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:113
-
mat< 4, 3, f64, mediump > mediump_f64mat4x3
Medium double-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:767
-
vec< 3, u8, defaultp > u8vec3
Default qualifier 8 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:341
-
double highp_f64
High 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:165
-
vec< 3, float, mediump > mediump_fvec3
Medium Single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:433
-
int64 mediump_int64
Medium qualifier 64 bit signed integer type.
Definition: fwd.hpp:79
-
vec< 4, u64, mediump > mediump_u64vec4
Medium qualifier 64 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:392
-
uint64 uint64_t
Default qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:143
-
vec< 2, u32, highp > highp_u32vec2
High qualifier 32 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:375
-
vec< 1, float, highp > highp_fvec1
High single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:436
-
vec< 4, i64, lowp > lowp_i64vec4
Low qualifier 64 bit signed integer vector of 4 components type.
Definition: fwd.hpp:285
-
vec< 3, i32, defaultp > i32vec3
32 bit signed integer vector of 3 components type.
Definition: fwd.hpp:279
-
mat< 2, 4, f32, highp > highp_f32mat2x4
High single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:692
-
vec< 1, i8, lowp > lowp_i8vec1
Low qualifier 8 bit signed integer scalar type.
Definition: fwd.hpp:222
-
mat< 2, 2, f64, highp > highp_f64mat2
High double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:580
-
uint16 lowp_uint16_t
Low qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:112
-
mat< 3, 2, f64, highp > highp_f64mat3x2
High double-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:773
-
vec< 3, u32, mediump > mediump_u32vec3
Medium qualifier 32 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:371
-
uint16 lowp_uint16
Low qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:108
-
vec< 3, u8, highp > highp_u8vec3
High qualifier 8 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:336
-
vec< 4, f64, defaultp > f64vec4
Double-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:504
-
vec< 2, i8, highp > highp_i8vec2
High qualifier 8 bit signed integer vector of 2 components type.
Definition: fwd.hpp:233
-
vec< 3, i32, lowp > lowp_i32vec3
Low qualifier 32 bit signed integer vector of 3 components type.
Definition: fwd.hpp:264
-
int32 lowp_i32
Low qualifier 32 bit signed integer type.
Definition: fwd.hpp:59
-
mat< 4, 4, f32, mediump > mediump_fmat4x4
Medium single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:648
-
int64 mediump_i64
Medium qualifier 64 bit signed integer type.
Definition: fwd.hpp:74
-
vec< 4, i16, lowp > lowp_i16vec4
Low qualifier 16 bit signed integer vector of 4 components type.
Definition: fwd.hpp:245
-
mat< 4, 3, f64, highp > highp_f64mat4x3
High double-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:777
-
vec< 2, u8, highp > highp_u8vec2
High qualifier 8 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:335
-
vec< 3, i8, highp > highp_i8vec3
High qualifier 8 bit signed integer vector of 3 components type.
Definition: fwd.hpp:234
-
vec< 3, f64, highp > highp_f64vec3
High double-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:498
-
vec< 2, f32, defaultp > fvec2
Single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:442
-
vec< 4, f64, lowp > lowp_f64vec4
Low double-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:489
-
vec< 3, f32, mediump > mediump_f32vec3
Medium single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:453
-
double lowp_f64
Low 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:163
-
mat< 4, 2, f32, lowp > lowp_fmat4x2
Low single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:636
-
mat< 2, 4, f64, highp > highp_f64mat2x4
High double-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:772
-
mat< 4, 4, f64, highp > highp_f64mat4
High double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:582
-
vec< 4, i32, mediump > mediump_i32vec4
Medium qualifier 32 bit signed integer vector of 4 components type.
Definition: fwd.hpp:270
-
mat< 2, 2, f32, lowp > lowp_f32mat2
Low single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:540
-
int16 int16_t
16 bit signed integer type.
Definition: fwd.hpp:57
-
int64 highp_i64
High qualifier 64 bit signed integer type.
Definition: fwd.hpp:75
-
mat< 3, 4, f64, highp > highp_f64mat3x4
High double-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:775
-
mat< 3, 3, f32, highp > highp_fmat3
High single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:533
-
mat< 3, 3, f32, mediump > mediump_f32mat3x3
Medium single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:684
-
qua< f64, mediump > mediump_f64quat
Medium double-qualifier floating-point quaternion.
Definition: fwd.hpp:813
-
int32 int32_t
32 bit signed integer type.
Definition: fwd.hpp:71
-
vec< 2, f64, defaultp > f64vec2
Double-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:502
-
uint64 lowp_uint64_t
Low qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:140
-
detail::uint64 uint64
64 bit unsigned integer type.
-
int16 highp_int16
High qualifier 16 bit signed integer type.
Definition: fwd.hpp:52
-
vec< 1, i16, mediump > mediump_i16vec1
Medium qualifier 16 bit signed integer scalar type.
Definition: fwd.hpp:247
-
mat< 2, 4, f32, defaultp > fmat2x4
Single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:666
-
mat< 2, 2, f32, highp > highp_fmat2x2
High single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:650
-
vec< 4, float, highp > highp_fvec4
High Single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:439
-
mat< 3, 3, f64, highp > highp_f64mat3x3
High double-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:774
-
int32 mediump_i32
Medium qualifier 32 bit signed integer type.
Definition: fwd.hpp:60
-
vec< 2, u16, lowp > lowp_u16vec2
Low qualifier 16 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:345
-
vec< 4, u32, highp > highp_u32vec4
High qualifier 32 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:377
-
float lowp_float32_t
Low 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:157
-
uint64 highp_uint64_t
High qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:142
-
vec< 2, f32, lowp > lowp_f32vec2
Low single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:447
-
vec< 4, u32, defaultp > u32vec4
Default qualifier 32 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:382
-
mat< 2, 2, f64, mediump > mediump_f64mat2
Medium double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:576
-
mat< 4, 3, f32, highp > highp_f32mat4x3
High single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:697
-
qua< f32, defaultp > f32quat
Single-qualifier floating-point quaternion.
Definition: fwd.hpp:805
-
detail::int64 int64
64 bit signed integer type.
-
vec< 1, u64, highp > highp_u64vec1
High qualifier 64 bit unsigned integer scalar type.
Definition: fwd.hpp:394
-
mat< 2, 3, f64, highp > highp_f64mat2x3
High double-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:771
-
vec< 4, i8, lowp > lowp_i8vec4
Low qualifier 8 bit signed integer vector of 4 components type.
Definition: fwd.hpp:225
-
mat< 4, 3, f32, lowp > lowp_fmat4x3
Low single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:637
-
float f32
Default 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:150
-
vec< 2, i32, highp > highp_i32vec2
High qualifier 32 bit signed integer vector of 2 components type.
Definition: fwd.hpp:273
-
vec< 1, u8, mediump > mediump_u8vec1
Medium qualifier 8 bit unsigned integer scalar type.
Definition: fwd.hpp:329
-
mat< 4, 3, f32, highp > highp_fmat4x3
High single-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:657
-
vec< 4, i16, mediump > mediump_i16vec4
Medium qualifier 16 bit signed integer vector of 4 components type.
Definition: fwd.hpp:250
-
mat< 4, 2, f64, defaultp > f64mat4x2
Double-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:782
-
mat< 2, 3, f32, defaultp > fmat2x3
Single-qualifier floating-point 2x3 matrix.
Definition: fwd.hpp:663
-
mat< 4, 4, f64, mediump > mediump_f64mat4
Medium double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:578
-
vec< 4, u8, mediump > mediump_u8vec4
Medium qualifier 8 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:332
-
mat< 3, 4, f32, lowp > lowp_f32mat3x4
Low single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:675
-
double mediump_float64_t
Medium 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:174
-
vec< 2, float, highp > highp_fvec2
High Single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:437
-
uint16 u16
Default qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:106
-
int64 lowp_i64
Low qualifier 64 bit signed integer type.
Definition: fwd.hpp:73
-
mat< 4, 4, f32, defaultp > f32mat4
Single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:554
-
mat< 4, 2, f32, mediump > mediump_fmat4x2
Medium single-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:646
-
mat< 2, 2, f64, lowp > lowp_f64mat2
Low double-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:572
-
int8 mediump_int8_t
Medium qualifier 8 bit signed integer type.
Definition: fwd.hpp:41
-
mat< 3, 3, f32, lowp > lowp_fmat3x3
Low single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:634
-
double lowp_float64_t
Low 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:173
-
int16 highp_int16_t
High qualifier 16 bit signed integer type.
Definition: fwd.hpp:56
-
mat< 3, 3, f32, highp > highp_fmat3x3
High single-qualifier floating-point 3x3 matrix.
Definition: fwd.hpp:654
-
vec< 1, i64, defaultp > i64vec1
64 bit signed integer scalar type.
Definition: fwd.hpp:297
-
uint32 lowp_u32
Low qualifier 32 bit unsigned integer type.
Definition: fwd.hpp:117
-
vec< 1, u8, lowp > lowp_u8vec1
Low qualifier 8 bit unsigned integer scalar type.
Definition: fwd.hpp:324
-
vec< 3, i64, mediump > mediump_i64vec3
Medium qualifier 64 bit signed integer vector of 3 components type.
Definition: fwd.hpp:289
-
qua< f32, highp > highp_f32quat
High single-qualifier floating-point quaternion.
Definition: fwd.hpp:804
-
uint16 highp_u16
High qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:105
-
vec< 1, f32, defaultp > fvec1
Single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:441
-
vec< 2, u8, mediump > mediump_u8vec2
Medium qualifier 8 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:330
-
int32 lowp_int32_t
Low qualifier 32 bit signed integer type.
Definition: fwd.hpp:68
-
vec< 1, u16, lowp > lowp_u16vec1
Low qualifier 16 bit unsigned integer scalar type.
Definition: fwd.hpp:344
-
mat< 4, 4, f32, highp > highp_fmat4x4
High single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:658
-
mat< 3, 4, f32, highp > highp_f32mat3x4
High single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:695
-
vec< 2, f32, defaultp > f32vec2
Single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:462
-
vec< 3, u16, highp > highp_u16vec3
High qualifier 16 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:356
-
float mediump_float32_t
Medium 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:158
-
mat< 2, 2, f32, defaultp > fmat2x2
Single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:660
-
float mediump_f32
Medium 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:148
-
mat< 4, 4, f32, mediump > mediump_f32mat4x4
Medium single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:688
-
vec< 2, f32, mediump > mediump_f32vec2
Medium single-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:452
-
int8 lowp_int8
Low qualifier 8 bit signed integer type.
Definition: fwd.hpp:36
-
vec< 1, f64, lowp > lowp_f64vec1
Low double-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:486
-
mat< 3, 2, f32, highp > highp_f32mat3x2
High single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:693
-
mat< 3, 2, f64, mediump > mediump_f64mat3x2
Medium double-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:763
-
vec< 3, u8, mediump > mediump_u8vec3
Medium qualifier 8 bit unsigned integer vector of 3 components type.
Definition: fwd.hpp:331
-
mat< 4, 4, f64, lowp > lowp_f64mat4x4
Low double-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:758
-
vec< 1, i16, lowp > lowp_i16vec1
Low qualifier 16 bit signed integer scalar type.
Definition: fwd.hpp:242
-
int8 lowp_int8_t
Low qualifier 8 bit signed integer type.
Definition: fwd.hpp:40
-
vec< 2, u32, lowp > lowp_u32vec2
Low qualifier 32 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:365
-
mat< 2, 4, f32, mediump > mediump_f32mat2x4
Medium single-qualifier floating-point 2x4 matrix.
Definition: fwd.hpp:682
-
mat< 4, 3, f64, defaultp > f64mat4x3
Double-qualifier floating-point 4x3 matrix.
Definition: fwd.hpp:785
-
vec< 2, i64, highp > highp_i64vec2
High qualifier 64 bit signed integer vector of 2 components type.
Definition: fwd.hpp:293
-
mat< 4, 4, f32, mediump > mediump_f32mat4
Medium single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:546
-
int64 i64
64 bit signed integer type.
Definition: fwd.hpp:76
-
double f64
Default 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:166
-
vec< 1, f32, mediump > mediump_f32vec1
Medium single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:451
-
mat< 3, 4, f32, mediump > mediump_f32mat3x4
Medium single-qualifier floating-point 3x4 matrix.
Definition: fwd.hpp:685
-
mat< 2, 2, f32, highp > highp_fmat2
High single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:532
-
vec< 3, f32, highp > highp_f32vec3
High single-qualifier floating-point vector of 3 components.
Definition: fwd.hpp:458
-
vec< 4, i8, mediump > mediump_i8vec4
Medium qualifier 8 bit signed integer vector of 4 components type.
Definition: fwd.hpp:230
-
float lowp_float32
Low 32 bit single-qualifier floating-point scalar.
Definition: fwd.hpp:152
-
vec< 2, u32, defaultp > u32vec2
Default qualifier 32 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:380
-
vec< 4, float, mediump > mediump_fvec4
Medium Single-qualifier floating-point vector of 4 components.
Definition: fwd.hpp:434
-
int32 mediump_int32
Medium qualifier 32 bit signed integer type.
Definition: fwd.hpp:65
-
vec< 2, i64, defaultp > i64vec2
64 bit signed integer vector of 2 components type.
Definition: fwd.hpp:298
-
int16 i16
16 bit signed integer type.
Definition: fwd.hpp:48
-
mat< 4, 4, f32, defaultp > fmat4x4
Single-qualifier floating-point 4x4 matrix.
Definition: fwd.hpp:668
-
qua< f64, lowp > lowp_f64quat
Low double-qualifier floating-point quaternion.
Definition: fwd.hpp:812
-
mat< 3, 2, f32, defaultp > fmat3x2
Single-qualifier floating-point 3x2 matrix.
Definition: fwd.hpp:661
-
vec< 4, u16, defaultp > u16vec4
Default qualifier 16 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:362
-
vec< 2, u16, defaultp > u16vec2
Default qualifier 16 bit unsigned integer vector of 2 components type.
Definition: fwd.hpp:360
-
uint8 mediump_u8
Medium qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:90
-
mat< 2, 2, f32, lowp > lowp_fmat2x2
Low single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:630
-
vec< 4, i8, highp > highp_i8vec4
High qualifier 8 bit signed integer vector of 4 components type.
Definition: fwd.hpp:235
-
vec< 4, u64, lowp > lowp_u64vec4
Low qualifier 64 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:387
-
vec< 2, i64, mediump > mediump_i64vec2
Medium qualifier 64 bit signed integer vector of 2 components type.
Definition: fwd.hpp:288
-
mat< 4, 2, f64, highp > highp_f64mat4x2
High double-qualifier floating-point 4x2 matrix.
Definition: fwd.hpp:776
-
int16 mediump_int16_t
Medium qualifier 16 bit signed integer type.
Definition: fwd.hpp:55
-
int8 lowp_i8
Low qualifier 8 bit signed integer type.
Definition: fwd.hpp:31
-
vec< 3, i64, defaultp > i64vec3
64 bit signed integer vector of 3 components type.
Definition: fwd.hpp:299
-
vec< 2, i32, lowp > lowp_i32vec2
Low qualifier 32 bit signed integer vector of 2 components type.
Definition: fwd.hpp:263
-
qua< f64, highp > highp_f64quat
High double-qualifier floating-point quaternion.
Definition: fwd.hpp:814
-
vec< 2, f64, mediump > mediump_f64vec2
Medium double-qualifier floating-point vector of 2 components.
Definition: fwd.hpp:492
-
uint16 highp_uint16_t
High qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:114
-
vec< 1, float, lowp > lowp_fvec1
Low single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:426
-
int8 i8
8 bit signed integer type.
Definition: fwd.hpp:34
-
uint64 mediump_uint64_t
Medium qualifier 64 bit unsigned integer type.
Definition: fwd.hpp:141
-
vec< 1, u64, mediump > mediump_u64vec1
Medium qualifier 64 bit unsigned integer scalar type.
Definition: fwd.hpp:389
-
mat< 2, 2, f32, mediump > mediump_f32mat2
Medium single-qualifier floating-point 1x1 matrix.
Definition: fwd.hpp:544
-
uint8 mediump_uint8_t
Medium qualifier 8 bit unsigned integer type.
Definition: fwd.hpp:99
-
Definition: common.hpp:20
-
double mediump_f64
Medium 64 bit double-qualifier floating-point scalar.
Definition: fwd.hpp:164
-
vec< 1, float, mediump > mediump_fvec1
Medium single-qualifier floating-point vector of 1 component.
Definition: fwd.hpp:431
-
uint16 mediump_uint16
Medium qualifier 16 bit unsigned integer type.
Definition: fwd.hpp:109
-
vec< 4, u8, highp > highp_u8vec4
High qualifier 8 bit unsigned integer vector of 4 components type.
Definition: fwd.hpp:337
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00175.html b/tests/OpenGL/package/glm/doc/api/a00175.html deleted file mode 100644 index 871fae2a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00175.html +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - -0.9.9 API documentation: type_ptr.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
type_ptr.hpp File Reference
-
-
- -

GLM_GTC_type_ptr -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL mat< 2, 2, T, defaultp > make_mat2 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 2, 2, T, defaultp > make_mat2x2 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 2, 3, T, defaultp > make_mat2x3 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 2, 4, T, defaultp > make_mat2x4 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 3, 3, T, defaultp > make_mat3 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 3, 2, T, defaultp > make_mat3x2 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 3, 3, T, defaultp > make_mat3x3 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 3, 4, T, defaultp > make_mat3x4 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > make_mat4 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 2, T, defaultp > make_mat4x2 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 3, T, defaultp > make_mat4x3 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > make_mat4x4 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL qua< T, defaultp > make_quat (T const *const ptr)
 Build a quaternion from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 1, T, Q > make_vec1 (vec< 1, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 1, T, Q > make_vec1 (vec< 2, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 1, T, Q > make_vec1 (vec< 3, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 1, T, Q > make_vec1 (vec< 4, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 2, T, Q > make_vec2 (vec< 1, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 2, T, Q > make_vec2 (vec< 2, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 2, T, Q > make_vec2 (vec< 3, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 2, T, Q > make_vec2 (vec< 4, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL vec< 2, T, defaultp > make_vec2 (T const *const ptr)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > make_vec3 (vec< 1, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > make_vec3 (vec< 2, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > make_vec3 (vec< 3, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > make_vec3 (vec< 4, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL vec< 3, T, defaultp > make_vec3 (T const *const ptr)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > make_vec4 (vec< 1, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > make_vec4 (vec< 2, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > make_vec4 (vec< 3, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > make_vec4 (vec< 4, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL vec< 4, T, defaultp > make_vec4 (T const *const ptr)
 Build a vector from a pointer. More...
 
template<typename genType >
GLM_FUNC_DECL genType::value_type const * value_ptr (genType const &v)
 Return the constant address to the data of the input parameter. More...
 
-

Detailed Description

-

GLM_GTC_type_ptr

-
See also
Core features (dependence)
-
-GLM_GTC_quaternion (dependence)
- -

Definition in file type_ptr.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00175_source.html b/tests/OpenGL/package/glm/doc/api/a00175_source.html deleted file mode 100644 index 0a66716d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00175_source.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - -0.9.9 API documentation: type_ptr.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_ptr.hpp
-
-
-Go to the documentation of this file.
1 
-
34 #pragma once
-
35 
-
36 // Dependency:
-
37 #include "../gtc/quaternion.hpp"
-
38 #include "../gtc/vec1.hpp"
-
39 #include "../vec2.hpp"
-
40 #include "../vec3.hpp"
-
41 #include "../vec4.hpp"
-
42 #include "../mat2x2.hpp"
-
43 #include "../mat2x3.hpp"
-
44 #include "../mat2x4.hpp"
-
45 #include "../mat3x2.hpp"
-
46 #include "../mat3x3.hpp"
-
47 #include "../mat3x4.hpp"
-
48 #include "../mat4x2.hpp"
-
49 #include "../mat4x3.hpp"
-
50 #include "../mat4x4.hpp"
-
51 #include <cstring>
-
52 
-
53 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
54 # pragma message("GLM: GLM_GTC_type_ptr extension included")
-
55 #endif
-
56 
-
57 namespace glm
-
58 {
-
61 
-
64  template<typename genType>
-
65  GLM_FUNC_DECL typename genType::value_type const * value_ptr(genType const& v);
-
66 
-
69  template <typename T, qualifier Q>
-
70  GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<1, T, Q> const& v);
-
71 
-
74  template <typename T, qualifier Q>
-
75  GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<2, T, Q> const& v);
-
76 
-
79  template <typename T, qualifier Q>
-
80  GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<3, T, Q> const& v);
-
81 
-
84  template <typename T, qualifier Q>
-
85  GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<4, T, Q> const& v);
-
86 
-
89  template <typename T, qualifier Q>
-
90  GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<1, T, Q> const& v);
-
91 
-
94  template <typename T, qualifier Q>
-
95  GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<2, T, Q> const& v);
-
96 
-
99  template <typename T, qualifier Q>
-
100  GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<3, T, Q> const& v);
-
101 
-
104  template <typename T, qualifier Q>
-
105  GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<4, T, Q> const& v);
-
106 
-
109  template <typename T, qualifier Q>
-
110  GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<1, T, Q> const& v);
-
111 
-
114  template <typename T, qualifier Q>
-
115  GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<2, T, Q> const& v);
-
116 
-
119  template <typename T, qualifier Q>
-
120  GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<3, T, Q> const& v);
-
121 
-
124  template <typename T, qualifier Q>
-
125  GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<4, T, Q> const& v);
-
126 
-
129  template <typename T, qualifier Q>
-
130  GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<1, T, Q> const& v);
-
131 
-
134  template <typename T, qualifier Q>
-
135  GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<2, T, Q> const& v);
-
136 
-
139  template <typename T, qualifier Q>
-
140  GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<3, T, Q> const& v);
-
141 
-
144  template <typename T, qualifier Q>
-
145  GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<4, T, Q> const& v);
-
146 
-
149  template<typename T>
-
150  GLM_FUNC_DECL vec<2, T, defaultp> make_vec2(T const * const ptr);
-
151 
-
154  template<typename T>
-
155  GLM_FUNC_DECL vec<3, T, defaultp> make_vec3(T const * const ptr);
-
156 
-
159  template<typename T>
-
160  GLM_FUNC_DECL vec<4, T, defaultp> make_vec4(T const * const ptr);
-
161 
-
164  template<typename T>
-
165  GLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2x2(T const * const ptr);
-
166 
-
169  template<typename T>
-
170  GLM_FUNC_DECL mat<2, 3, T, defaultp> make_mat2x3(T const * const ptr);
-
171 
-
174  template<typename T>
-
175  GLM_FUNC_DECL mat<2, 4, T, defaultp> make_mat2x4(T const * const ptr);
-
176 
-
179  template<typename T>
-
180  GLM_FUNC_DECL mat<3, 2, T, defaultp> make_mat3x2(T const * const ptr);
-
181 
-
184  template<typename T>
-
185  GLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3x3(T const * const ptr);
-
186 
-
189  template<typename T>
-
190  GLM_FUNC_DECL mat<3, 4, T, defaultp> make_mat3x4(T const * const ptr);
-
191 
-
194  template<typename T>
-
195  GLM_FUNC_DECL mat<4, 2, T, defaultp> make_mat4x2(T const * const ptr);
-
196 
-
199  template<typename T>
-
200  GLM_FUNC_DECL mat<4, 3, T, defaultp> make_mat4x3(T const * const ptr);
-
201 
-
204  template<typename T>
-
205  GLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4x4(T const * const ptr);
-
206 
-
209  template<typename T>
-
210  GLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2(T const * const ptr);
-
211 
-
214  template<typename T>
-
215  GLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3(T const * const ptr);
-
216 
-
219  template<typename T>
-
220  GLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4(T const * const ptr);
-
221 
-
224  template<typename T>
-
225  GLM_FUNC_DECL qua<T, defaultp> make_quat(T const * const ptr);
-
226 
-
228 }//namespace glm
-
229 
-
230 #include "type_ptr.inl"
-
GLM_FUNC_DECL mat< 3, 3, T, defaultp > make_mat3(T const *const ptr)
Build a matrix from a pointer.
-
GLM_FUNC_DECL vec< 3, T, defaultp > make_vec3(T const *const ptr)
Build a vector from a pointer.
-
GLM_FUNC_DECL mat< 3, 2, T, defaultp > make_mat3x2(T const *const ptr)
Build a matrix from a pointer.
-
GLM_FUNC_DECL vec< 1, T, Q > make_vec1(vec< 4, T, Q > const &v)
Build a vector from a pointer.
-
GLM_FUNC_DECL qua< T, defaultp > make_quat(T const *const ptr)
Build a quaternion from a pointer.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > make_mat4(T const *const ptr)
Build a matrix from a pointer.
-
GLM_FUNC_DECL vec< 2, T, defaultp > make_vec2(T const *const ptr)
Build a vector from a pointer.
-
GLM_FUNC_DECL mat< 2, 4, T, defaultp > make_mat2x4(T const *const ptr)
Build a matrix from a pointer.
-
GLM_FUNC_DECL mat< 2, 2, T, defaultp > make_mat2(T const *const ptr)
Build a matrix from a pointer.
-
GLM_FUNC_DECL genType::value_type const * value_ptr(genType const &v)
Return the constant address to the data of the input parameter.
-
GLM_FUNC_DECL mat< 2, 2, T, defaultp > make_mat2x2(T const *const ptr)
Build a matrix from a pointer.
-
GLM_FUNC_DECL mat< 2, 3, T, defaultp > make_mat2x3(T const *const ptr)
Build a matrix from a pointer.
-
GLM_FUNC_DECL mat< 3, 4, T, defaultp > make_mat3x4(T const *const ptr)
Build a matrix from a pointer.
-
GLM_FUNC_DECL vec< 4, T, defaultp > make_vec4(T const *const ptr)
Build a vector from a pointer.
-
GLM_FUNC_DECL mat< 4, 3, T, defaultp > make_mat4x3(T const *const ptr)
Build a matrix from a pointer.
-
GLM_FUNC_DECL mat< 3, 3, T, defaultp > make_mat3x3(T const *const ptr)
Build a matrix from a pointer.
-
GLM_FUNC_DECL mat< 4, 4, T, defaultp > make_mat4x4(T const *const ptr)
Build a matrix from a pointer.
-
GLM_FUNC_DECL mat< 4, 2, T, defaultp > make_mat4x2(T const *const ptr)
Build a matrix from a pointer.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00176.html b/tests/OpenGL/package/glm/doc/api/a00176.html deleted file mode 100644 index 6ad7077d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00176.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: type_quat.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_quat.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file type_quat.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00176_source.html b/tests/OpenGL/package/glm/doc/api/a00176_source.html deleted file mode 100644 index e0f2832b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00176_source.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - -0.9.9 API documentation: type_quat.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_quat.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 
-
6 // Dependency:
-
7 #include "../detail/type_mat3x3.hpp"
-
8 #include "../detail/type_mat4x4.hpp"
-
9 #include "../detail/type_vec3.hpp"
-
10 #include "../detail/type_vec4.hpp"
-
11 #include "../ext/vector_relational.hpp"
-
12 #include "../ext/quaternion_relational.hpp"
-
13 #include "../gtc/constants.hpp"
-
14 #include "../gtc/matrix_transform.hpp"
-
15 
-
16 namespace glm
-
17 {
-
18  template<typename T, qualifier Q>
-
19  struct qua
-
20  {
-
21  // -- Implementation detail --
-
22 
-
23  typedef qua<T, Q> type;
-
24  typedef T value_type;
-
25 
-
26  // -- Data --
-
27 
-
28 # if GLM_SILENT_WARNINGS == GLM_ENABLE
-
29 # if GLM_COMPILER & GLM_COMPILER_GCC
-
30 # pragma GCC diagnostic push
-
31 # pragma GCC diagnostic ignored "-Wpedantic"
-
32 # elif GLM_COMPILER & GLM_COMPILER_CLANG
-
33 # pragma clang diagnostic push
-
34 # pragma clang diagnostic ignored "-Wgnu-anonymous-struct"
-
35 # pragma clang diagnostic ignored "-Wnested-anon-types"
-
36 # elif GLM_COMPILER & GLM_COMPILER_VC
-
37 # pragma warning(push)
-
38 # pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union
-
39 # endif
-
40 # endif
-
41 
-
42 # if GLM_LANG & GLM_LANG_CXXMS_FLAG
-
43  union
-
44  {
-
45  struct { T x, y, z, w;};
-
46 
-
47  typename detail::storage<4, T, detail::is_aligned<Q>::value>::type data;
-
48  };
-
49 # else
-
50  T x, y, z, w;
-
51 # endif
-
52 
-
53 # if GLM_SILENT_WARNINGS == GLM_ENABLE
-
54 # if GLM_COMPILER & GLM_COMPILER_CLANG
-
55 # pragma clang diagnostic pop
-
56 # elif GLM_COMPILER & GLM_COMPILER_GCC
-
57 # pragma GCC diagnostic pop
-
58 # elif GLM_COMPILER & GLM_COMPILER_VC
-
59 # pragma warning(pop)
-
60 # endif
-
61 # endif
-
62 
-
63  // -- Component accesses --
-
64 
-
65  typedef length_t length_type;
-
66 
-
68  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;}
-
69 
-
70  GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i);
-
71  GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;
-
72 
-
73  // -- Implicit basic constructors --
-
74 
-
75  GLM_FUNC_DECL GLM_CONSTEXPR qua() GLM_DEFAULT;
-
76  GLM_FUNC_DECL GLM_CONSTEXPR qua(qua<T, Q> const& q) GLM_DEFAULT;
-
77  template<qualifier P>
-
78  GLM_FUNC_DECL GLM_CONSTEXPR qua(qua<T, P> const& q);
-
79 
-
80  // -- Explicit basic constructors --
-
81 
-
82  GLM_FUNC_DECL GLM_CONSTEXPR qua(T s, vec<3, T, Q> const& v);
-
83  GLM_FUNC_DECL GLM_CONSTEXPR qua(T w, T x, T y, T z);
-
84 
-
85  // -- Conversion constructors --
-
86 
-
87  template<typename U, qualifier P>
-
88  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(qua<U, P> const& q);
-
89 
-
91 # if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS
-
92  GLM_FUNC_DECL explicit operator mat<3, 3, T, Q>() const;
-
93  GLM_FUNC_DECL explicit operator mat<4, 4, T, Q>() const;
-
94 # endif
-
95 
-
102  GLM_FUNC_DECL qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v);
-
103 
-
105  GLM_FUNC_DECL GLM_EXPLICIT qua(vec<3, T, Q> const& eulerAngles);
-
106  GLM_FUNC_DECL GLM_EXPLICIT qua(mat<3, 3, T, Q> const& q);
-
107  GLM_FUNC_DECL GLM_EXPLICIT qua(mat<4, 4, T, Q> const& q);
-
108 
-
109  // -- Unary arithmetic operators --
-
110 
-
111  GLM_FUNC_DECL qua<T, Q>& operator=(qua<T, Q> const& q) GLM_DEFAULT;
-
112 
-
113  template<typename U>
-
114  GLM_FUNC_DECL qua<T, Q>& operator=(qua<U, Q> const& q);
-
115  template<typename U>
-
116  GLM_FUNC_DECL qua<T, Q>& operator+=(qua<U, Q> const& q);
-
117  template<typename U>
-
118  GLM_FUNC_DECL qua<T, Q>& operator-=(qua<U, Q> const& q);
-
119  template<typename U>
-
120  GLM_FUNC_DECL qua<T, Q>& operator*=(qua<U, Q> const& q);
-
121  template<typename U>
-
122  GLM_FUNC_DECL qua<T, Q>& operator*=(U s);
-
123  template<typename U>
-
124  GLM_FUNC_DECL qua<T, Q>& operator/=(U s);
-
125  };
-
126 
-
127  // -- Unary bit operators --
-
128 
-
129  template<typename T, qualifier Q>
-
130  GLM_FUNC_DECL qua<T, Q> operator+(qua<T, Q> const& q);
-
131 
-
132  template<typename T, qualifier Q>
-
133  GLM_FUNC_DECL qua<T, Q> operator-(qua<T, Q> const& q);
-
134 
-
135  // -- Binary operators --
-
136 
-
137  template<typename T, qualifier Q>
-
138  GLM_FUNC_DECL qua<T, Q> operator+(qua<T, Q> const& q, qua<T, Q> const& p);
-
139 
-
140  template<typename T, qualifier Q>
-
141  GLM_FUNC_DECL qua<T, Q> operator-(qua<T, Q> const& q, qua<T, Q> const& p);
-
142 
-
143  template<typename T, qualifier Q>
-
144  GLM_FUNC_DECL qua<T, Q> operator*(qua<T, Q> const& q, qua<T, Q> const& p);
-
145 
-
146  template<typename T, qualifier Q>
-
147  GLM_FUNC_DECL vec<3, T, Q> operator*(qua<T, Q> const& q, vec<3, T, Q> const& v);
-
148 
-
149  template<typename T, qualifier Q>
-
150  GLM_FUNC_DECL vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua<T, Q> const& q);
-
151 
-
152  template<typename T, qualifier Q>
-
153  GLM_FUNC_DECL vec<4, T, Q> operator*(qua<T, Q> const& q, vec<4, T, Q> const& v);
-
154 
-
155  template<typename T, qualifier Q>
-
156  GLM_FUNC_DECL vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua<T, Q> const& q);
-
157 
-
158  template<typename T, qualifier Q>
-
159  GLM_FUNC_DECL qua<T, Q> operator*(qua<T, Q> const& q, T const& s);
-
160 
-
161  template<typename T, qualifier Q>
-
162  GLM_FUNC_DECL qua<T, Q> operator*(T const& s, qua<T, Q> const& q);
-
163 
-
164  template<typename T, qualifier Q>
-
165  GLM_FUNC_DECL qua<T, Q> operator/(qua<T, Q> const& q, T const& s);
-
166 
-
167  // -- Boolean operators --
-
168 
-
169  template<typename T, qualifier Q>
-
170  GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(qua<T, Q> const& q1, qua<T, Q> const& q2);
-
171 
-
172  template<typename T, qualifier Q>
-
173  GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(qua<T, Q> const& q1, qua<T, Q> const& q2);
-
174 } //namespace glm
-
175 
-
176 #ifndef GLM_EXTERNAL_TEMPLATE
-
177 #include "type_quat.inl"
-
178 #endif//GLM_EXTERNAL_TEMPLATE
-
GLM_FUNC_DECL vec< 3, T, Q > eulerAngles(qua< T, Q > const &x)
Returns euler angles, pitch as x, yaw as y, roll as z.
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00177.html b/tests/OpenGL/package/glm/doc/api/a00177.html deleted file mode 100644 index 9a6bc37d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00177.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -0.9.9 API documentation: type_trait.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_trait.hpp File Reference
-
-
- -

GLM_GTX_type_trait -More...

- -

Go to the source code of this file.

-

Detailed Description

-

GLM_GTX_type_trait

-
See also
Core features (dependence)
- -

Definition in file type_trait.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00177_source.html b/tests/OpenGL/package/glm/doc/api/a00177_source.html deleted file mode 100644 index eb44912e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00177_source.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - -0.9.9 API documentation: type_trait.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_trait.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
16 # ifndef GLM_ENABLE_EXPERIMENTAL
-
17 # pragma message("GLM: GLM_GTX_type_trait is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
18 # else
-
19 # pragma message("GLM: GLM_GTX_type_trait extension included")
-
20 # endif
-
21 #endif
-
22 
-
23 // Dependency:
-
24 #include "../detail/qualifier.hpp"
-
25 #include "../gtc/quaternion.hpp"
-
26 #include "../gtx/dual_quaternion.hpp"
-
27 
-
28 namespace glm
-
29 {
-
32 
-
33  template<typename T>
-
34  struct type
-
35  {
-
36  static bool const is_vec = false;
-
37  static bool const is_mat = false;
-
38  static bool const is_quat = false;
-
39  static length_t const components = 0;
-
40  static length_t const cols = 0;
-
41  static length_t const rows = 0;
-
42  };
-
43 
-
44  template<length_t L, typename T, qualifier Q>
-
45  struct type<vec<L, T, Q> >
-
46  {
-
47  static bool const is_vec = true;
-
48  static bool const is_mat = false;
-
49  static bool const is_quat = false;
-
50  static length_t const components = L;
-
51  };
-
52 
-
53  template<length_t C, length_t R, typename T, qualifier Q>
-
54  struct type<mat<C, R, T, Q> >
-
55  {
-
56  static bool const is_vec = false;
-
57  static bool const is_mat = true;
-
58  static bool const is_quat = false;
-
59  static length_t const components = C;
-
60  static length_t const cols = C;
-
61  static length_t const rows = R;
-
62  };
-
63 
-
64  template<typename T, qualifier Q>
-
65  struct type<qua<T, Q> >
-
66  {
-
67  static bool const is_vec = false;
-
68  static bool const is_mat = false;
-
69  static bool const is_quat = true;
-
70  static length_t const components = 4;
-
71  };
-
72 
-
73  template<typename T, qualifier Q>
-
74  struct type<tdualquat<T, Q> >
-
75  {
-
76  static bool const is_vec = false;
-
77  static bool const is_mat = false;
-
78  static bool const is_quat = true;
-
79  static length_t const components = 8;
-
80  };
-
81 
-
83 }//namespace glm
-
84 
-
85 #include "type_trait.inl"
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00178.html b/tests/OpenGL/package/glm/doc/api/a00178.html deleted file mode 100644 index 6e3ebb0f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00178.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: type_vec1.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_vec1.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file type_vec1.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00178_source.html b/tests/OpenGL/package/glm/doc/api/a00178_source.html deleted file mode 100644 index 40d09e0f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00178_source.html +++ /dev/null @@ -1,402 +0,0 @@ - - - - - - -0.9.9 API documentation: type_vec1.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_vec1.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 
-
6 #include "qualifier.hpp"
-
7 #if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
8 # include "_swizzle.hpp"
-
9 #elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
-
10 # include "_swizzle_func.hpp"
-
11 #endif
-
12 #include <cstddef>
-
13 
-
14 namespace glm
-
15 {
-
16  template<typename T, qualifier Q>
-
17  struct vec<1, T, Q>
-
18  {
-
19  // -- Implementation detail --
-
20 
-
21  typedef T value_type;
-
22  typedef vec<1, T, Q> type;
-
23  typedef vec<1, bool, Q> bool_type;
-
24 
-
25  // -- Data --
-
26 
-
27 # if GLM_SILENT_WARNINGS == GLM_ENABLE
-
28 # if GLM_COMPILER & GLM_COMPILER_GCC
-
29 # pragma GCC diagnostic push
-
30 # pragma GCC diagnostic ignored "-Wpedantic"
-
31 # elif GLM_COMPILER & GLM_COMPILER_CLANG
-
32 # pragma clang diagnostic push
-
33 # pragma clang diagnostic ignored "-Wgnu-anonymous-struct"
-
34 # pragma clang diagnostic ignored "-Wnested-anon-types"
-
35 # elif GLM_COMPILER & GLM_COMPILER_VC
-
36 # pragma warning(push)
-
37 # pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union
-
38 # endif
-
39 # endif
-
40 
-
41 # if GLM_CONFIG_XYZW_ONLY
-
42  T x;
-
43 # elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE
-
44  union
-
45  {
-
46  T x;
-
47  T r;
-
48  T s;
-
49 
-
50  typename detail::storage<1, T, detail::is_aligned<Q>::value>::type data;
-
51 /*
-
52 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
53  _GLM_SWIZZLE1_2_MEMBERS(T, Q, x)
-
54  _GLM_SWIZZLE1_2_MEMBERS(T, Q, r)
-
55  _GLM_SWIZZLE1_2_MEMBERS(T, Q, s)
-
56  _GLM_SWIZZLE1_3_MEMBERS(T, Q, x)
-
57  _GLM_SWIZZLE1_3_MEMBERS(T, Q, r)
-
58  _GLM_SWIZZLE1_3_MEMBERS(T, Q, s)
-
59  _GLM_SWIZZLE1_4_MEMBERS(T, Q, x)
-
60  _GLM_SWIZZLE1_4_MEMBERS(T, Q, r)
-
61  _GLM_SWIZZLE1_4_MEMBERS(T, Q, s)
-
62 # endif
-
63 */
-
64  };
-
65 # else
-
66  union {T x, r, s;};
-
67 /*
-
68 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
-
69  GLM_SWIZZLE_GEN_VEC_FROM_VEC1(T, Q)
-
70 # endif
-
71 */
-
72 # endif
-
73 
-
74 # if GLM_SILENT_WARNINGS == GLM_ENABLE
-
75 # if GLM_COMPILER & GLM_COMPILER_CLANG
-
76 # pragma clang diagnostic pop
-
77 # elif GLM_COMPILER & GLM_COMPILER_GCC
-
78 # pragma GCC diagnostic pop
-
79 # elif GLM_COMPILER & GLM_COMPILER_VC
-
80 # pragma warning(pop)
-
81 # endif
-
82 # endif
-
83 
-
84  // -- Component accesses --
-
85 
-
87  typedef length_t length_type;
-
88  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 1;}
-
89 
-
90  GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i);
-
91  GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;
-
92 
-
93  // -- Implicit basic constructors --
-
94 
-
95  GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT;
-
96  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT;
-
97  template<qualifier P>
-
98  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, T, P> const& v);
-
99 
-
100  // -- Explicit basic constructors --
-
101 
-
102  GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);
-
103 
-
104  // -- Conversion vector constructors --
-
105 
-
107  template<typename U, qualifier P>
-
108  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v);
-
110  template<typename U, qualifier P>
-
111  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v);
-
113  template<typename U, qualifier P>
-
114  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v);
-
115 
-
117  template<typename U, qualifier P>
-
118  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<1, U, P> const& v);
-
119 
-
120  // -- Swizzle constructors --
-
121 /*
-
122 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
123  template<int E0>
-
124  GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<1, T, Q, E0, -1,-2,-3> const& that)
-
125  {
-
126  *this = that();
-
127  }
-
128 # endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
129 */
-
130  // -- Unary arithmetic operators --
-
131 
-
132  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec const& v) GLM_DEFAULT;
-
133 
-
134  template<typename U>
-
135  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec<1, U, Q> const& v);
-
136  template<typename U>
-
137  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(U scalar);
-
138  template<typename U>
-
139  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(vec<1, U, Q> const& v);
-
140  template<typename U>
-
141  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(U scalar);
-
142  template<typename U>
-
143  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(vec<1, U, Q> const& v);
-
144  template<typename U>
-
145  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(U scalar);
-
146  template<typename U>
-
147  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(vec<1, U, Q> const& v);
-
148  template<typename U>
-
149  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(U scalar);
-
150  template<typename U>
-
151  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(vec<1, U, Q> const& v);
-
152 
-
153  // -- Increment and decrement operators --
-
154 
-
155  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator++();
-
156  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator--();
-
157  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator++(int);
-
158  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator--(int);
-
159 
-
160  // -- Unary bit operators --
-
161 
-
162  template<typename U>
-
163  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(U scalar);
-
164  template<typename U>
-
165  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(vec<1, U, Q> const& v);
-
166  template<typename U>
-
167  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(U scalar);
-
168  template<typename U>
-
169  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(vec<1, U, Q> const& v);
-
170  template<typename U>
-
171  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(U scalar);
-
172  template<typename U>
-
173  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(vec<1, U, Q> const& v);
-
174  template<typename U>
-
175  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(U scalar);
-
176  template<typename U>
-
177  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(vec<1, U, Q> const& v);
-
178  template<typename U>
-
179  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(U scalar);
-
180  template<typename U>
-
181  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(vec<1, U, Q> const& v);
-
182  template<typename U>
-
183  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(U scalar);
-
184  template<typename U>
-
185  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(vec<1, U, Q> const& v);
-
186  };
-
187 
-
188  // -- Unary operators --
-
189 
-
190  template<typename T, qualifier Q>
-
191  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v);
-
192 
-
193  template<typename T, qualifier Q>
-
194  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v);
-
195 
-
196  // -- Binary operators --
-
197 
-
198  template<typename T, qualifier Q>
-
199  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar);
-
200 
-
201  template<typename T, qualifier Q>
-
202  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v);
-
203 
-
204  template<typename T, qualifier Q>
-
205  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
-
206 
-
207  template<typename T, qualifier Q>
-
208  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar);
-
209 
-
210  template<typename T, qualifier Q>
-
211  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v);
-
212 
-
213  template<typename T, qualifier Q>
-
214  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
-
215 
-
216  template<typename T, qualifier Q>
-
217  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar);
-
218 
-
219  template<typename T, qualifier Q>
-
220  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v);
-
221 
-
222  template<typename T, qualifier Q>
-
223  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
-
224 
-
225  template<typename T, qualifier Q>
-
226  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar);
-
227 
-
228  template<typename T, qualifier Q>
-
229  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v);
-
230 
-
231  template<typename T, qualifier Q>
-
232  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
-
233 
-
234  template<typename T, qualifier Q>
-
235  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar);
-
236 
-
237  template<typename T, qualifier Q>
-
238  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v);
-
239 
-
240  template<typename T, qualifier Q>
-
241  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
-
242 
-
243  template<typename T, qualifier Q>
-
244  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar);
-
245 
-
246  template<typename T, qualifier Q>
-
247  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v);
-
248 
-
249  template<typename T, qualifier Q>
-
250  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
-
251 
-
252  template<typename T, qualifier Q>
-
253  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar);
-
254 
-
255  template<typename T, qualifier Q>
-
256  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v);
-
257 
-
258  template<typename T, qualifier Q>
-
259  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
-
260 
-
261  template<typename T, qualifier Q>
-
262  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar);
-
263 
-
264  template<typename T, qualifier Q>
-
265  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v);
-
266 
-
267  template<typename T, qualifier Q>
-
268  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
-
269 
-
270  template<typename T, qualifier Q>
-
271  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar);
-
272 
-
273  template<typename T, qualifier Q>
-
274  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v);
-
275 
-
276  template<typename T, qualifier Q>
-
277  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
-
278 
-
279  template<typename T, qualifier Q>
-
280  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar);
-
281 
-
282  template<typename T, qualifier Q>
-
283  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v);
-
284 
-
285  template<typename T, qualifier Q>
-
286  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
-
287 
-
288  template<typename T, qualifier Q>
-
289  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v);
-
290 
-
291  // -- Boolean operators --
-
292 
-
293  template<typename T, qualifier Q>
-
294  GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
-
295 
-
296  template<typename T, qualifier Q>
-
297  GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
-
298 
-
299  template<qualifier Q>
-
300  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2);
-
301 
-
302  template<qualifier Q>
-
303  GLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2);
-
304 }//namespace glm
-
305 
-
306 #ifndef GLM_EXTERNAL_TEMPLATE
-
307 #include "type_vec1.inl"
-
308 #endif//GLM_EXTERNAL_TEMPLATE
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00179.html b/tests/OpenGL/package/glm/doc/api/a00179.html deleted file mode 100644 index ec04224a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00179.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: type_vec2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_vec2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file type_vec2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00179_source.html b/tests/OpenGL/package/glm/doc/api/a00179_source.html deleted file mode 100644 index 47c1f4dd..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00179_source.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - -0.9.9 API documentation: type_vec2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_vec2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 
-
6 #include "qualifier.hpp"
-
7 #if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
8 # include "_swizzle.hpp"
-
9 #elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
-
10 # include "_swizzle_func.hpp"
-
11 #endif
-
12 #include <cstddef>
-
13 
-
14 namespace glm
-
15 {
-
16  template<typename T, qualifier Q>
-
17  struct vec<2, T, Q>
-
18  {
-
19  // -- Implementation detail --
-
20 
-
21  typedef T value_type;
-
22  typedef vec<2, T, Q> type;
-
23  typedef vec<2, bool, Q> bool_type;
-
24 
-
25  // -- Data --
-
26 
-
27 # if GLM_SILENT_WARNINGS == GLM_ENABLE
-
28 # if GLM_COMPILER & GLM_COMPILER_GCC
-
29 # pragma GCC diagnostic push
-
30 # pragma GCC diagnostic ignored "-Wpedantic"
-
31 # elif GLM_COMPILER & GLM_COMPILER_CLANG
-
32 # pragma clang diagnostic push
-
33 # pragma clang diagnostic ignored "-Wgnu-anonymous-struct"
-
34 # pragma clang diagnostic ignored "-Wnested-anon-types"
-
35 # elif GLM_COMPILER & GLM_COMPILER_VC
-
36 # pragma warning(push)
-
37 # pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union
-
38 # endif
-
39 # endif
-
40 
-
41 # if GLM_CONFIG_XYZW_ONLY
-
42  T x, y;
-
43 # elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE
-
44  union
-
45  {
-
46  struct{ T x, y; };
-
47  struct{ T r, g; };
-
48  struct{ T s, t; };
-
49 
-
50  typename detail::storage<2, T, detail::is_aligned<Q>::value>::type data;
-
51 
-
52 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
53  GLM_SWIZZLE2_2_MEMBERS(T, Q, x, y)
-
54  GLM_SWIZZLE2_2_MEMBERS(T, Q, r, g)
-
55  GLM_SWIZZLE2_2_MEMBERS(T, Q, s, t)
-
56  GLM_SWIZZLE2_3_MEMBERS(T, Q, x, y)
-
57  GLM_SWIZZLE2_3_MEMBERS(T, Q, r, g)
-
58  GLM_SWIZZLE2_3_MEMBERS(T, Q, s, t)
-
59  GLM_SWIZZLE2_4_MEMBERS(T, Q, x, y)
-
60  GLM_SWIZZLE2_4_MEMBERS(T, Q, r, g)
-
61  GLM_SWIZZLE2_4_MEMBERS(T, Q, s, t)
-
62 # endif
-
63  };
-
64 # else
-
65  union {T x, r, s;};
-
66  union {T y, g, t;};
-
67 
-
68 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
-
69  GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, Q)
-
70 # endif//GLM_CONFIG_SWIZZLE
-
71 # endif
-
72 
-
73 # if GLM_SILENT_WARNINGS == GLM_ENABLE
-
74 # if GLM_COMPILER & GLM_COMPILER_CLANG
-
75 # pragma clang diagnostic pop
-
76 # elif GLM_COMPILER & GLM_COMPILER_GCC
-
77 # pragma GCC diagnostic pop
-
78 # elif GLM_COMPILER & GLM_COMPILER_VC
-
79 # pragma warning(pop)
-
80 # endif
-
81 # endif
-
82 
-
83  // -- Component accesses --
-
84 
-
86  typedef length_t length_type;
-
87  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;}
-
88 
-
89  GLM_FUNC_DECL GLM_CONSTEXPR T& operator[](length_type i);
-
90  GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;
-
91 
-
92  // -- Implicit basic constructors --
-
93 
-
94  GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT;
-
95  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT;
-
96  template<qualifier P>
-
97  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, T, P> const& v);
-
98 
-
99  // -- Explicit basic constructors --
-
100 
-
101  GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);
-
102  GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y);
-
103 
-
104  // -- Conversion constructors --
-
105 
-
106  template<typename U, qualifier P>
-
107  GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v);
-
108 
-
110  template<typename A, typename B>
-
111  GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, B y);
-
112  template<typename A, typename B>
-
113  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, B y);
-
114  template<typename A, typename B>
-
115  GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, vec<1, B, Q> const& y);
-
116  template<typename A, typename B>
-
117  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, vec<1, B, Q> const& y);
-
118 
-
119  // -- Conversion vector constructors --
-
120 
-
122  template<typename U, qualifier P>
-
123  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v);
-
125  template<typename U, qualifier P>
-
126  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v);
-
127 
-
129  template<typename U, qualifier P>
-
130  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v);
-
131 
-
132  // -- Swizzle constructors --
-
133 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
134  template<int E0, int E1>
-
135  GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1,-1,-2> const& that)
-
136  {
-
137  *this = that();
-
138  }
-
139 # endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
140 
-
141  // -- Unary arithmetic operators --
-
142 
-
143  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec const& v) GLM_DEFAULT;
-
144 
-
145  template<typename U>
-
146  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec<2, U, Q> const& v);
-
147  template<typename U>
-
148  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(U scalar);
-
149  template<typename U>
-
150  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<1, U, Q> const& v);
-
151  template<typename U>
-
152  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<2, U, Q> const& v);
-
153  template<typename U>
-
154  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(U scalar);
-
155  template<typename U>
-
156  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<1, U, Q> const& v);
-
157  template<typename U>
-
158  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<2, U, Q> const& v);
-
159  template<typename U>
-
160  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(U scalar);
-
161  template<typename U>
-
162  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<1, U, Q> const& v);
-
163  template<typename U>
-
164  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<2, U, Q> const& v);
-
165  template<typename U>
-
166  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(U scalar);
-
167  template<typename U>
-
168  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<1, U, Q> const& v);
-
169  template<typename U>
-
170  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<2, U, Q> const& v);
-
171 
-
172  // -- Increment and decrement operators --
-
173 
-
174  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator++();
-
175  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator--();
-
176  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator++(int);
-
177  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator--(int);
-
178 
-
179  // -- Unary bit operators --
-
180 
-
181  template<typename U>
-
182  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(U scalar);
-
183  template<typename U>
-
184  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<1, U, Q> const& v);
-
185  template<typename U>
-
186  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<2, U, Q> const& v);
-
187  template<typename U>
-
188  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(U scalar);
-
189  template<typename U>
-
190  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<1, U, Q> const& v);
-
191  template<typename U>
-
192  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<2, U, Q> const& v);
-
193  template<typename U>
-
194  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(U scalar);
-
195  template<typename U>
-
196  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<1, U, Q> const& v);
-
197  template<typename U>
-
198  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<2, U, Q> const& v);
-
199  template<typename U>
-
200  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(U scalar);
-
201  template<typename U>
-
202  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<1, U, Q> const& v);
-
203  template<typename U>
-
204  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<2, U, Q> const& v);
-
205  template<typename U>
-
206  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(U scalar);
-
207  template<typename U>
-
208  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<1, U, Q> const& v);
-
209  template<typename U>
-
210  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<2, U, Q> const& v);
-
211  template<typename U>
-
212  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(U scalar);
-
213  template<typename U>
-
214  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<1, U, Q> const& v);
-
215  template<typename U>
-
216  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<2, U, Q> const& v);
-
217  };
-
218 
-
219  // -- Unary operators --
-
220 
-
221  template<typename T, qualifier Q>
-
222  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v);
-
223 
-
224  template<typename T, qualifier Q>
-
225  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v);
-
226 
-
227  // -- Binary operators --
-
228 
-
229  template<typename T, qualifier Q>
-
230  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar);
-
231 
-
232  template<typename T, qualifier Q>
-
233  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
-
234 
-
235  template<typename T, qualifier Q>
-
236  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v);
-
237 
-
238  template<typename T, qualifier Q>
-
239  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
-
240 
-
241  template<typename T, qualifier Q>
-
242  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
-
243 
-
244  template<typename T, qualifier Q>
-
245  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar);
-
246 
-
247  template<typename T, qualifier Q>
-
248  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
-
249 
-
250  template<typename T, qualifier Q>
-
251  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v);
-
252 
-
253  template<typename T, qualifier Q>
-
254  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
-
255 
-
256  template<typename T, qualifier Q>
-
257  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
-
258 
-
259  template<typename T, qualifier Q>
-
260  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar);
-
261 
-
262  template<typename T, qualifier Q>
-
263  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
-
264 
-
265  template<typename T, qualifier Q>
-
266  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v);
-
267 
-
268  template<typename T, qualifier Q>
-
269  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
-
270 
-
271  template<typename T, qualifier Q>
-
272  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
-
273 
-
274  template<typename T, qualifier Q>
-
275  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar);
-
276 
-
277  template<typename T, qualifier Q>
-
278  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
-
279 
-
280  template<typename T, qualifier Q>
-
281  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v);
-
282 
-
283  template<typename T, qualifier Q>
-
284  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
-
285 
-
286  template<typename T, qualifier Q>
-
287  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
-
288 
-
289  template<typename T, qualifier Q>
-
290  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar);
-
291 
-
292  template<typename T, qualifier Q>
-
293  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
-
294 
-
295  template<typename T, qualifier Q>
-
296  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v);
-
297 
-
298  template<typename T, qualifier Q>
-
299  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
-
300 
-
301  template<typename T, qualifier Q>
-
302  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
-
303 
-
304  template<typename T, qualifier Q>
-
305  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar);
-
306 
-
307  template<typename T, qualifier Q>
-
308  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
-
309 
-
310  template<typename T, qualifier Q>
-
311  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v);
-
312 
-
313  template<typename T, qualifier Q>
-
314  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
-
315 
-
316  template<typename T, qualifier Q>
-
317  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
-
318 
-
319  template<typename T, qualifier Q>
-
320  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar);
-
321 
-
322  template<typename T, qualifier Q>
-
323  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
-
324 
-
325  template<typename T, qualifier Q>
-
326  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v);
-
327 
-
328  template<typename T, qualifier Q>
-
329  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
-
330 
-
331  template<typename T, qualifier Q>
-
332  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
-
333 
-
334  template<typename T, qualifier Q>
-
335  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar);
-
336 
-
337  template<typename T, qualifier Q>
-
338  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
-
339 
-
340  template<typename T, qualifier Q>
-
341  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v);
-
342 
-
343  template<typename T, qualifier Q>
-
344  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
-
345 
-
346  template<typename T, qualifier Q>
-
347  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
-
348 
-
349  template<typename T, qualifier Q>
-
350  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar);
-
351 
-
352  template<typename T, qualifier Q>
-
353  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
-
354 
-
355  template<typename T, qualifier Q>
-
356  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v);
-
357 
-
358  template<typename T, qualifier Q>
-
359  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
-
360 
-
361  template<typename T, qualifier Q>
-
362  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
-
363 
-
364  template<typename T, qualifier Q>
-
365  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar);
-
366 
-
367  template<typename T, qualifier Q>
-
368  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
-
369 
-
370  template<typename T, qualifier Q>
-
371  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v);
-
372 
-
373  template<typename T, qualifier Q>
-
374  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
-
375 
-
376  template<typename T, qualifier Q>
-
377  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
-
378 
-
379  template<typename T, qualifier Q>
-
380  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v);
-
381 
-
382  // -- Boolean operators --
-
383 
-
384  template<typename T, qualifier Q>
-
385  GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
-
386 
-
387  template<typename T, qualifier Q>
-
388  GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
-
389 
-
390  template<qualifier Q>
-
391  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2);
-
392 
-
393  template<qualifier Q>
-
394  GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2);
-
395 }//namespace glm
-
396 
-
397 #ifndef GLM_EXTERNAL_TEMPLATE
-
398 #include "type_vec2.inl"
-
399 #endif//GLM_EXTERNAL_TEMPLATE
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00180.html b/tests/OpenGL/package/glm/doc/api/a00180.html deleted file mode 100644 index b159177e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00180.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: type_vec3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_vec3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file type_vec3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00180_source.html b/tests/OpenGL/package/glm/doc/api/a00180_source.html deleted file mode 100644 index face129d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00180_source.html +++ /dev/null @@ -1,523 +0,0 @@ - - - - - - -0.9.9 API documentation: type_vec3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_vec3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 
-
6 #include "qualifier.hpp"
-
7 #if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
8 # include "_swizzle.hpp"
-
9 #elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
-
10 # include "_swizzle_func.hpp"
-
11 #endif
-
12 #include <cstddef>
-
13 
-
14 namespace glm
-
15 {
-
16  template<typename T, qualifier Q>
-
17  struct vec<3, T, Q>
-
18  {
-
19  // -- Implementation detail --
-
20 
-
21  typedef T value_type;
-
22  typedef vec<3, T, Q> type;
-
23  typedef vec<3, bool, Q> bool_type;
-
24 
-
25  // -- Data --
-
26 
-
27 # if GLM_SILENT_WARNINGS == GLM_ENABLE
-
28 # if GLM_COMPILER & GLM_COMPILER_GCC
-
29 # pragma GCC diagnostic push
-
30 # pragma GCC diagnostic ignored "-Wpedantic"
-
31 # elif GLM_COMPILER & GLM_COMPILER_CLANG
-
32 # pragma clang diagnostic push
-
33 # pragma clang diagnostic ignored "-Wgnu-anonymous-struct"
-
34 # pragma clang diagnostic ignored "-Wnested-anon-types"
-
35 # elif GLM_COMPILER & GLM_COMPILER_VC
-
36 # pragma warning(push)
-
37 # pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union
-
38 # if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE
-
39 # pragma warning(disable: 4324) // structure was padded due to alignment specifier
-
40 # endif
-
41 # endif
-
42 # endif
-
43 
-
44 # if GLM_CONFIG_XYZW_ONLY
-
45  T x, y, z;
-
46 # elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE
-
47  union
-
48  {
-
49  struct{ T x, y, z; };
-
50  struct{ T r, g, b; };
-
51  struct{ T s, t, p; };
-
52 
-
53  typename detail::storage<3, T, detail::is_aligned<Q>::value>::type data;
-
54 
-
55 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
56  GLM_SWIZZLE3_2_MEMBERS(T, Q, x, y, z)
-
57  GLM_SWIZZLE3_2_MEMBERS(T, Q, r, g, b)
-
58  GLM_SWIZZLE3_2_MEMBERS(T, Q, s, t, p)
-
59  GLM_SWIZZLE3_3_MEMBERS(T, Q, x, y, z)
-
60  GLM_SWIZZLE3_3_MEMBERS(T, Q, r, g, b)
-
61  GLM_SWIZZLE3_3_MEMBERS(T, Q, s, t, p)
-
62  GLM_SWIZZLE3_4_MEMBERS(T, Q, x, y, z)
-
63  GLM_SWIZZLE3_4_MEMBERS(T, Q, r, g, b)
-
64  GLM_SWIZZLE3_4_MEMBERS(T, Q, s, t, p)
-
65 # endif
-
66  };
-
67 # else
-
68  union { T x, r, s; };
-
69  union { T y, g, t; };
-
70  union { T z, b, p; };
-
71 
-
72 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
-
73  GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, Q)
-
74 # endif//GLM_CONFIG_SWIZZLE
-
75 # endif//GLM_LANG
-
76 
-
77 # if GLM_SILENT_WARNINGS == GLM_ENABLE
-
78 # if GLM_COMPILER & GLM_COMPILER_CLANG
-
79 # pragma clang diagnostic pop
-
80 # elif GLM_COMPILER & GLM_COMPILER_GCC
-
81 # pragma GCC diagnostic pop
-
82 # elif GLM_COMPILER & GLM_COMPILER_VC
-
83 # pragma warning(pop)
-
84 # endif
-
85 # endif
-
86 
-
87  // -- Component accesses --
-
88 
-
90  typedef length_t length_type;
-
91  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 3;}
-
92 
-
93  GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i);
-
94  GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;
-
95 
-
96  // -- Implicit basic constructors --
-
97 
-
98  GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT;
-
99  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT;
-
100  template<qualifier P>
-
101  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, T, P> const& v);
-
102 
-
103  // -- Explicit basic constructors --
-
104 
-
105  GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);
-
106  GLM_FUNC_DECL GLM_CONSTEXPR vec(T a, T b, T c);
-
107 
-
108  // -- Conversion scalar constructors --
-
109 
-
110  template<typename U, qualifier P>
-
111  GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v);
-
112 
-
114  template<typename X, typename Y, typename Z>
-
115  GLM_FUNC_DECL GLM_CONSTEXPR vec(X x, Y y, Z z);
-
116  template<typename X, typename Y, typename Z>
-
117  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z);
-
118  template<typename X, typename Y, typename Z>
-
119  GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z);
-
120  template<typename X, typename Y, typename Z>
-
121  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z);
-
122  template<typename X, typename Y, typename Z>
-
123  GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z);
-
124  template<typename X, typename Y, typename Z>
-
125  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z);
-
126  template<typename X, typename Y, typename Z>
-
127  GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z);
-
128  template<typename X, typename Y, typename Z>
-
129  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z);
-
130 
-
131  // -- Conversion vector constructors --
-
132 
-
134  template<typename A, typename B, qualifier P>
-
135  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z);
-
137  template<typename A, typename B, qualifier P>
-
138  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z);
-
140  template<typename A, typename B, qualifier P>
-
141  GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz);
-
143  template<typename A, typename B, qualifier P>
-
144  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz);
-
146  template<typename U, qualifier P>
-
147  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v);
-
148 
-
150  template<typename U, qualifier P>
-
151  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v);
-
152 
-
153  // -- Swizzle constructors --
-
154 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
155  template<int E0, int E1, int E2>
-
156  GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& that)
-
157  {
-
158  *this = that();
-
159  }
-
160 
-
161  template<int E0, int E1>
-
162  GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& scalar)
-
163  {
-
164  *this = vec(v(), scalar);
-
165  }
-
166 
-
167  template<int E0, int E1>
-
168  GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& scalar, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v)
-
169  {
-
170  *this = vec(scalar, v());
-
171  }
-
172 # endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
173 
-
174  // -- Unary arithmetic operators --
-
175 
-
176  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q>& operator=(vec<3, T, Q> const& v) GLM_DEFAULT;
-
177 
-
178  template<typename U>
-
179  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator=(vec<3, U, Q> const& v);
-
180  template<typename U>
-
181  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(U scalar);
-
182  template<typename U>
-
183  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<1, U, Q> const& v);
-
184  template<typename U>
-
185  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<3, U, Q> const& v);
-
186  template<typename U>
-
187  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(U scalar);
-
188  template<typename U>
-
189  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<1, U, Q> const& v);
-
190  template<typename U>
-
191  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<3, U, Q> const& v);
-
192  template<typename U>
-
193  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(U scalar);
-
194  template<typename U>
-
195  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<1, U, Q> const& v);
-
196  template<typename U>
-
197  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<3, U, Q> const& v);
-
198  template<typename U>
-
199  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(U scalar);
-
200  template<typename U>
-
201  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<1, U, Q> const& v);
-
202  template<typename U>
-
203  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<3, U, Q> const& v);
-
204 
-
205  // -- Increment and decrement operators --
-
206 
-
207  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator++();
-
208  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator--();
-
209  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator++(int);
-
210  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator--(int);
-
211 
-
212  // -- Unary bit operators --
-
213 
-
214  template<typename U>
-
215  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(U scalar);
-
216  template<typename U>
-
217  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<1, U, Q> const& v);
-
218  template<typename U>
-
219  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<3, U, Q> const& v);
-
220  template<typename U>
-
221  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(U scalar);
-
222  template<typename U>
-
223  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<1, U, Q> const& v);
-
224  template<typename U>
-
225  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<3, U, Q> const& v);
-
226  template<typename U>
-
227  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(U scalar);
-
228  template<typename U>
-
229  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<1, U, Q> const& v);
-
230  template<typename U>
-
231  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<3, U, Q> const& v);
-
232  template<typename U>
-
233  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(U scalar);
-
234  template<typename U>
-
235  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<1, U, Q> const& v);
-
236  template<typename U>
-
237  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<3, U, Q> const& v);
-
238  template<typename U>
-
239  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(U scalar);
-
240  template<typename U>
-
241  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<1, U, Q> const& v);
-
242  template<typename U>
-
243  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<3, U, Q> const& v);
-
244  template<typename U>
-
245  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(U scalar);
-
246  template<typename U>
-
247  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<1, U, Q> const& v);
-
248  template<typename U>
-
249  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<3, U, Q> const& v);
-
250  };
-
251 
-
252  // -- Unary operators --
-
253 
-
254  template<typename T, qualifier Q>
-
255  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v);
-
256 
-
257  template<typename T, qualifier Q>
-
258  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v);
-
259 
-
260  // -- Binary operators --
-
261 
-
262  template<typename T, qualifier Q>
-
263  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar);
-
264 
-
265  template<typename T, qualifier Q>
-
266  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar);
-
267 
-
268  template<typename T, qualifier Q>
-
269  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v);
-
270 
-
271  template<typename T, qualifier Q>
-
272  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);
-
273 
-
274  template<typename T, qualifier Q>
-
275  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);
-
276 
-
277  template<typename T, qualifier Q>
-
278  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar);
-
279 
-
280  template<typename T, qualifier Q>
-
281  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);
-
282 
-
283  template<typename T, qualifier Q>
-
284  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v);
-
285 
-
286  template<typename T, qualifier Q>
-
287  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);
-
288 
-
289  template<typename T, qualifier Q>
-
290  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);
-
291 
-
292  template<typename T, qualifier Q>
-
293  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar);
-
294 
-
295  template<typename T, qualifier Q>
-
296  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);
-
297 
-
298  template<typename T, qualifier Q>
-
299  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v);
-
300 
-
301  template<typename T, qualifier Q>
-
302  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);
-
303 
-
304  template<typename T, qualifier Q>
-
305  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);
-
306 
-
307  template<typename T, qualifier Q>
-
308  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar);
-
309 
-
310  template<typename T, qualifier Q>
-
311  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);
-
312 
-
313  template<typename T, qualifier Q>
-
314  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v);
-
315 
-
316  template<typename T, qualifier Q>
-
317  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);
-
318 
-
319  template<typename T, qualifier Q>
-
320  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);
-
321 
-
322  template<typename T, qualifier Q>
-
323  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar);
-
324 
-
325  template<typename T, qualifier Q>
-
326  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);
-
327 
-
328  template<typename T, qualifier Q>
-
329  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v);
-
330 
-
331  template<typename T, qualifier Q>
-
332  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);
-
333 
-
334  template<typename T, qualifier Q>
-
335  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);
-
336 
-
337  template<typename T, qualifier Q>
-
338  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, T scalar);
-
339 
-
340  template<typename T, qualifier Q>
-
341  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);
-
342 
-
343  template<typename T, qualifier Q>
-
344  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v);
-
345 
-
346  template<typename T, qualifier Q>
-
347  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);
-
348 
-
349  template<typename T, qualifier Q>
-
350  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);
-
351 
-
352  template<typename T, qualifier Q>
-
353  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar);
-
354 
-
355  template<typename T, qualifier Q>
-
356  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);
-
357 
-
358  template<typename T, qualifier Q>
-
359  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v);
-
360 
-
361  template<typename T, qualifier Q>
-
362  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);
-
363 
-
364  template<typename T, qualifier Q>
-
365  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);
-
366 
-
367  template<typename T, qualifier Q>
-
368  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar);
-
369 
-
370  template<typename T, qualifier Q>
-
371  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);
-
372 
-
373  template<typename T, qualifier Q>
-
374  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v);
-
375 
-
376  template<typename T, qualifier Q>
-
377  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);
-
378 
-
379  template<typename T, qualifier Q>
-
380  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);
-
381 
-
382  template<typename T, qualifier Q>
-
383  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar);
-
384 
-
385  template<typename T, qualifier Q>
-
386  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);
-
387 
-
388  template<typename T, qualifier Q>
-
389  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v);
-
390 
-
391  template<typename T, qualifier Q>
-
392  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);
-
393 
-
394  template<typename T, qualifier Q>
-
395  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);
-
396 
-
397  template<typename T, qualifier Q>
-
398  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar);
-
399 
-
400  template<typename T, qualifier Q>
-
401  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);
-
402 
-
403  template<typename T, qualifier Q>
-
404  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v);
-
405 
-
406  template<typename T, qualifier Q>
-
407  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);
-
408 
-
409  template<typename T, qualifier Q>
-
410  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);
-
411 
-
412  template<typename T, qualifier Q>
-
413  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v);
-
414 
-
415  // -- Boolean operators --
-
416 
-
417  template<typename T, qualifier Q>
-
418  GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);
-
419 
-
420  template<typename T, qualifier Q>
-
421  GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);
-
422 
-
423  template<qualifier Q>
-
424  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2);
-
425 
-
426  template<qualifier Q>
-
427  GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2);
-
428 }//namespace glm
-
429 
-
430 #ifndef GLM_EXTERNAL_TEMPLATE
-
431 #include "type_vec3.inl"
-
432 #endif//GLM_EXTERNAL_TEMPLATE
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00181.html b/tests/OpenGL/package/glm/doc/api/a00181.html deleted file mode 100644 index a82e1906..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00181.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: type_vec4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_vec4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file type_vec4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00181_source.html b/tests/OpenGL/package/glm/doc/api/a00181_source.html deleted file mode 100644 index f03ca95a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00181_source.html +++ /dev/null @@ -1,584 +0,0 @@ - - - - - - -0.9.9 API documentation: type_vec4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
type_vec4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 
-
6 #include "qualifier.hpp"
-
7 #if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
8 # include "_swizzle.hpp"
-
9 #elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
-
10 # include "_swizzle_func.hpp"
-
11 #endif
-
12 #include <cstddef>
-
13 
-
14 namespace glm
-
15 {
-
16  template<typename T, qualifier Q>
-
17  struct vec<4, T, Q>
-
18  {
-
19  // -- Implementation detail --
-
20 
-
21  typedef T value_type;
-
22  typedef vec<4, T, Q> type;
-
23  typedef vec<4, bool, Q> bool_type;
-
24 
-
25  // -- Data --
-
26 
-
27 # if GLM_SILENT_WARNINGS == GLM_ENABLE
-
28 # if GLM_COMPILER & GLM_COMPILER_GCC
-
29 # pragma GCC diagnostic push
-
30 # pragma GCC diagnostic ignored "-Wpedantic"
-
31 # elif GLM_COMPILER & GLM_COMPILER_CLANG
-
32 # pragma clang diagnostic push
-
33 # pragma clang diagnostic ignored "-Wgnu-anonymous-struct"
-
34 # pragma clang diagnostic ignored "-Wnested-anon-types"
-
35 # elif GLM_COMPILER & GLM_COMPILER_VC
-
36 # pragma warning(push)
-
37 # pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union
-
38 # endif
-
39 # endif
-
40 
-
41 # if GLM_CONFIG_XYZW_ONLY
-
42  T x, y, z, w;
-
43 # elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE
-
44  union
-
45  {
-
46  struct { T x, y, z, w; };
-
47  struct { T r, g, b, a; };
-
48  struct { T s, t, p, q; };
-
49 
-
50  typename detail::storage<4, T, detail::is_aligned<Q>::value>::type data;
-
51 
-
52 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
53  GLM_SWIZZLE4_2_MEMBERS(T, Q, x, y, z, w)
-
54  GLM_SWIZZLE4_2_MEMBERS(T, Q, r, g, b, a)
-
55  GLM_SWIZZLE4_2_MEMBERS(T, Q, s, t, p, q)
-
56  GLM_SWIZZLE4_3_MEMBERS(T, Q, x, y, z, w)
-
57  GLM_SWIZZLE4_3_MEMBERS(T, Q, r, g, b, a)
-
58  GLM_SWIZZLE4_3_MEMBERS(T, Q, s, t, p, q)
-
59  GLM_SWIZZLE4_4_MEMBERS(T, Q, x, y, z, w)
-
60  GLM_SWIZZLE4_4_MEMBERS(T, Q, r, g, b, a)
-
61  GLM_SWIZZLE4_4_MEMBERS(T, Q, s, t, p, q)
-
62 # endif
-
63  };
-
64 # else
-
65  union { T x, r, s; };
-
66  union { T y, g, t; };
-
67  union { T z, b, p; };
-
68  union { T w, a, q; };
-
69 
-
70 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
-
71  GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, Q)
-
72 # endif
-
73 # endif
-
74 
-
75 # if GLM_SILENT_WARNINGS == GLM_ENABLE
-
76 # if GLM_COMPILER & GLM_COMPILER_CLANG
-
77 # pragma clang diagnostic pop
-
78 # elif GLM_COMPILER & GLM_COMPILER_GCC
-
79 # pragma GCC diagnostic pop
-
80 # elif GLM_COMPILER & GLM_COMPILER_VC
-
81 # pragma warning(pop)
-
82 # endif
-
83 # endif
-
84 
-
85  // -- Component accesses --
-
86 
-
87  typedef length_t length_type;
-
88 
-
90  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;}
-
91 
-
92  GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i);
-
93  GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;
-
94 
-
95  // -- Implicit basic constructors --
-
96 
-
97  GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT;
-
98  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, Q> const& v) GLM_DEFAULT;
-
99  template<qualifier P>
-
100  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, P> const& v);
-
101 
-
102  // -- Explicit basic constructors --
-
103 
-
104  GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);
-
105  GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y, T z, T w);
-
106 
-
107  // -- Conversion scalar constructors --
-
108 
-
109  template<typename U, qualifier P>
-
110  GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v);
-
111 
-
113  template<typename X, typename Y, typename Z, typename W>
-
114  GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, Z _z, W _w);
-
115  template<typename X, typename Y, typename Z, typename W>
-
116  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w);
-
117  template<typename X, typename Y, typename Z, typename W>
-
118  GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w);
-
119  template<typename X, typename Y, typename Z, typename W>
-
120  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w);
-
121  template<typename X, typename Y, typename Z, typename W>
-
122  GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w);
-
123  template<typename X, typename Y, typename Z, typename W>
-
124  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w);
-
125  template<typename X, typename Y, typename Z, typename W>
-
126  GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w);
-
127  template<typename X, typename Y, typename Z, typename W>
-
128  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w);
-
129  template<typename X, typename Y, typename Z, typename W>
-
130  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w);
-
131  template<typename X, typename Y, typename Z, typename W>
-
132  GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w);
-
133  template<typename X, typename Y, typename Z, typename W>
-
134  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w);
-
135  template<typename X, typename Y, typename Z, typename W>
-
136  GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w);
-
137  template<typename X, typename Y, typename Z, typename W>
-
138  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w);
-
139  template<typename X, typename Y, typename Z, typename W>
-
140  GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w);
-
141  template<typename X, typename Y, typename Z, typename W>
-
142  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _Y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w);
-
143 
-
144  // -- Conversion vector constructors --
-
145 
-
147  template<typename A, typename B, typename C, qualifier P>
-
148  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, C _w);
-
150  template<typename A, typename B, typename C, qualifier P>
-
151  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w);
-
153  template<typename A, typename B, typename C, qualifier P>
-
154  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w);
-
156  template<typename A, typename B, typename C, qualifier P>
-
157  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w);
-
159  template<typename A, typename B, typename C, qualifier P>
-
160  GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, C _w);
-
162  template<typename A, typename B, typename C, qualifier P>
-
163  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w);
-
165  template<typename A, typename B, typename C, qualifier P>
-
166  GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w);
-
168  template<typename A, typename B, typename C, qualifier P>
-
169  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w);
-
171  template<typename A, typename B, typename C, qualifier P>
-
172  GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, B _y, vec<2, C, P> const& _zw);
-
174  template<typename A, typename B, typename C, qualifier P>
-
175  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw);
-
177  template<typename A, typename B, typename C, qualifier P>
-
178  GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw);
-
180  template<typename A, typename B, typename C, qualifier P>
-
181  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw);
-
183  template<typename A, typename B, qualifier P>
-
184  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, B _w);
-
186  template<typename A, typename B, qualifier P>
-
187  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w);
-
189  template<typename A, typename B, qualifier P>
-
190  GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<3, B, P> const& _yzw);
-
192  template<typename A, typename B, qualifier P>
-
193  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw);
-
195  template<typename A, typename B, qualifier P>
-
196  GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw);
-
197 
-
199  template<typename U, qualifier P>
-
200  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v);
-
201 
-
202  // -- Swizzle constructors --
-
203 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
204  template<int E0, int E1, int E2, int E3>
-
205  GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<4, T, Q, E0, E1, E2, E3> const& that)
-
206  {
-
207  *this = that();
-
208  }
-
209 
-
210  template<int E0, int E1, int F0, int F1>
-
211  GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, detail::_swizzle<2, T, Q, F0, F1, -1, -2> const& u)
-
212  {
-
213  *this = vec<4, T, Q>(v(), u());
-
214  }
-
215 
-
216  template<int E0, int E1>
-
217  GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, T const& y, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v)
-
218  {
-
219  *this = vec<4, T, Q>(x, y, v());
-
220  }
-
221 
-
222  template<int E0, int E1>
-
223  GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& w)
-
224  {
-
225  *this = vec<4, T, Q>(x, v(), w);
-
226  }
-
227 
-
228  template<int E0, int E1>
-
229  GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& z, T const& w)
-
230  {
-
231  *this = vec<4, T, Q>(v(), z, w);
-
232  }
-
233 
-
234  template<int E0, int E1, int E2>
-
235  GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v, T const& w)
-
236  {
-
237  *this = vec<4, T, Q>(v(), w);
-
238  }
-
239 
-
240  template<int E0, int E1, int E2>
-
241  GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v)
-
242  {
-
243  *this = vec<4, T, Q>(x, v());
-
244  }
-
245 # endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
-
246 
-
247  // -- Unary arithmetic operators --
-
248 
-
249  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, T, Q> const& v) GLM_DEFAULT;
-
250 
-
251  template<typename U>
-
252  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, U, Q> const& v);
-
253  template<typename U>
-
254  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(U scalar);
-
255  template<typename U>
-
256  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<1, U, Q> const& v);
-
257  template<typename U>
-
258  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<4, U, Q> const& v);
-
259  template<typename U>
-
260  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(U scalar);
-
261  template<typename U>
-
262  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<1, U, Q> const& v);
-
263  template<typename U>
-
264  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<4, U, Q> const& v);
-
265  template<typename U>
-
266  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(U scalar);
-
267  template<typename U>
-
268  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<1, U, Q> const& v);
-
269  template<typename U>
-
270  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<4, U, Q> const& v);
-
271  template<typename U>
-
272  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(U scalar);
-
273  template<typename U>
-
274  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<1, U, Q> const& v);
-
275  template<typename U>
-
276  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<4, U, Q> const& v);
-
277 
-
278  // -- Increment and decrement operators --
-
279 
-
280  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator++();
-
281  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator--();
-
282  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator++(int);
-
283  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator--(int);
-
284 
-
285  // -- Unary bit operators --
-
286 
-
287  template<typename U>
-
288  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(U scalar);
-
289  template<typename U>
-
290  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<1, U, Q> const& v);
-
291  template<typename U>
-
292  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<4, U, Q> const& v);
-
293  template<typename U>
-
294  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(U scalar);
-
295  template<typename U>
-
296  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<1, U, Q> const& v);
-
297  template<typename U>
-
298  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<4, U, Q> const& v);
-
299  template<typename U>
-
300  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(U scalar);
-
301  template<typename U>
-
302  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<1, U, Q> const& v);
-
303  template<typename U>
-
304  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<4, U, Q> const& v);
-
305  template<typename U>
-
306  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(U scalar);
-
307  template<typename U>
-
308  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<1, U, Q> const& v);
-
309  template<typename U>
-
310  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<4, U, Q> const& v);
-
311  template<typename U>
-
312  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(U scalar);
-
313  template<typename U>
-
314  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<1, U, Q> const& v);
-
315  template<typename U>
-
316  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<4, U, Q> const& v);
-
317  template<typename U>
-
318  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(U scalar);
-
319  template<typename U>
-
320  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<1, U, Q> const& v);
-
321  template<typename U>
-
322  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<4, U, Q> const& v);
-
323  };
-
324 
-
325  // -- Unary operators --
-
326 
-
327  template<typename T, qualifier Q>
-
328  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v);
-
329 
-
330  template<typename T, qualifier Q>
-
331  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v);
-
332 
-
333  // -- Binary operators --
-
334 
-
335  template<typename T, qualifier Q>
-
336  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar);
-
337 
-
338  template<typename T, qualifier Q>
-
339  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2);
-
340 
-
341  template<typename T, qualifier Q>
-
342  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v);
-
343 
-
344  template<typename T, qualifier Q>
-
345  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2);
-
346 
-
347  template<typename T, qualifier Q>
-
348  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);
-
349 
-
350  template<typename T, qualifier Q>
-
351  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar);
-
352 
-
353  template<typename T, qualifier Q>
-
354  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2);
-
355 
-
356  template<typename T, qualifier Q>
-
357  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v);
-
358 
-
359  template<typename T, qualifier Q>
-
360  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2);
-
361 
-
362  template<typename T, qualifier Q>
-
363  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);
-
364 
-
365  template<typename T, qualifier Q>
-
366  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar);
-
367 
-
368  template<typename T, qualifier Q>
-
369  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2);
-
370 
-
371  template<typename T, qualifier Q>
-
372  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v);
-
373 
-
374  template<typename T, qualifier Q>
-
375  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2);
-
376 
-
377  template<typename T, qualifier Q>
-
378  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);
-
379 
-
380  template<typename T, qualifier Q>
-
381  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar);
-
382 
-
383  template<typename T, qualifier Q>
-
384  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2);
-
385 
-
386  template<typename T, qualifier Q>
-
387  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v);
-
388 
-
389  template<typename T, qualifier Q>
-
390  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2);
-
391 
-
392  template<typename T, qualifier Q>
-
393  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);
-
394 
-
395  template<typename T, qualifier Q>
-
396  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar);
-
397 
-
398  template<typename T, qualifier Q>
-
399  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);
-
400 
-
401  template<typename T, qualifier Q>
-
402  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v);
-
403 
-
404  template<typename T, qualifier Q>
-
405  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);
-
406 
-
407  template<typename T, qualifier Q>
-
408  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);
-
409 
-
410  template<typename T, qualifier Q>
-
411  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar);
-
412 
-
413  template<typename T, qualifier Q>
-
414  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);
-
415 
-
416  template<typename T, qualifier Q>
-
417  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v);
-
418 
-
419  template<typename T, qualifier Q>
-
420  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);
-
421 
-
422  template<typename T, qualifier Q>
-
423  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);
-
424 
-
425  template<typename T, qualifier Q>
-
426  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar);
-
427 
-
428  template<typename T, qualifier Q>
-
429  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);
-
430 
-
431  template<typename T, qualifier Q>
-
432  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v);
-
433 
-
434  template<typename T, qualifier Q>
-
435  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);
-
436 
-
437  template<typename T, qualifier Q>
-
438  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);
-
439 
-
440  template<typename T, qualifier Q>
-
441  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar);
-
442 
-
443  template<typename T, qualifier Q>
-
444  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);
-
445 
-
446  template<typename T, qualifier Q>
-
447  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v);
-
448 
-
449  template<typename T, qualifier Q>
-
450  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);
-
451 
-
452  template<typename T, qualifier Q>
-
453  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);
-
454 
-
455  template<typename T, qualifier Q>
-
456  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar);
-
457 
-
458  template<typename T, qualifier Q>
-
459  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);
-
460 
-
461  template<typename T, qualifier Q>
-
462  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v);
-
463 
-
464  template<typename T, qualifier Q>
-
465  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);
-
466 
-
467  template<typename T, qualifier Q>
-
468  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);
-
469 
-
470  template<typename T, qualifier Q>
-
471  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar);
-
472 
-
473  template<typename T, qualifier Q>
-
474  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);
-
475 
-
476  template<typename T, qualifier Q>
-
477  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v);
-
478 
-
479  template<typename T, qualifier Q>
-
480  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);
-
481 
-
482  template<typename T, qualifier Q>
-
483  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);
-
484 
-
485  template<typename T, qualifier Q>
-
486  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v);
-
487 
-
488  // -- Boolean operators --
-
489 
-
490  template<typename T, qualifier Q>
-
491  GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);
-
492 
-
493  template<typename T, qualifier Q>
-
494  GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);
-
495 
-
496  template<qualifier Q>
-
497  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2);
-
498 
-
499  template<qualifier Q>
-
500  GLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2);
-
501 }//namespace glm
-
502 
-
503 #ifndef GLM_EXTERNAL_TEMPLATE
-
504 #include "type_vec4.inl"
-
505 #endif//GLM_EXTERNAL_TEMPLATE
-
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00182.html b/tests/OpenGL/package/glm/doc/api/a00182.html deleted file mode 100644 index 27bfbbe4..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00182.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - -0.9.9 API documentation: ulp.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
ulp.hpp File Reference
-
-
- -

GLM_GTC_ulp -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GLM_FUNC_DECL int float_distance (float x, float y)
 Return the distance in the number of ULP between 2 single-precision floating-point scalars. More...
 
GLM_FUNC_DECL int64 float_distance (double x, double y)
 Return the distance in the number of ULP between 2 double-precision floating-point scalars. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, int, Q > float_distance (vec< L, float, Q > const &x, vec< L, float, Q > const &y)
 Return the distance in the number of ULP between 2 single-precision floating-point scalars. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, int64, Q > float_distance (vec< L, double, Q > const &x, vec< L, double, Q > const &y)
 Return the distance in the number of ULP between 2 double-precision floating-point scalars. More...
 
template<typename genType >
GLM_FUNC_DECL genType next_float (genType x)
 Return the next ULP value(s) after the input value(s). More...
 
template<typename genType >
GLM_FUNC_DECL genType next_float (genType x, int ULPs)
 Return the value(s) ULP distance after the input value(s). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > next_float (vec< L, T, Q > const &x)
 Return the next ULP value(s) after the input value(s). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > next_float (vec< L, T, Q > const &x, int ULPs)
 Return the value(s) ULP distance after the input value(s). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > next_float (vec< L, T, Q > const &x, vec< L, int, Q > const &ULPs)
 Return the value(s) ULP distance after the input value(s). More...
 
template<typename genType >
GLM_FUNC_DECL genType prev_float (genType x)
 Return the previous ULP value(s) before the input value(s). More...
 
template<typename genType >
GLM_FUNC_DECL genType prev_float (genType x, int ULPs)
 Return the value(s) ULP distance before the input value(s). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > prev_float (vec< L, T, Q > const &x)
 Return the previous ULP value(s) before the input value(s). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > prev_float (vec< L, T, Q > const &x, int ULPs)
 Return the value(s) ULP distance before the input value(s). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > prev_float (vec< L, T, Q > const &x, vec< L, int, Q > const &ULPs)
 Return the value(s) ULP distance before the input value(s). More...
 
-

Detailed Description

-

GLM_GTC_ulp

-
See also
Core features (dependence)
- -

Definition in file ulp.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00182_source.html b/tests/OpenGL/package/glm/doc/api/a00182_source.html deleted file mode 100644 index 260b29e2..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00182_source.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -0.9.9 API documentation: ulp.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
ulp.hpp
-
-
-Go to the documentation of this file.
1 
-
15 #pragma once
-
16 
-
17 // Dependencies
-
18 #include "../detail/setup.hpp"
-
19 #include "../detail/qualifier.hpp"
-
20 #include "../detail/_vectorize.hpp"
-
21 #include "../ext/scalar_int_sized.hpp"
-
22 
-
23 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
24 # pragma message("GLM: GLM_GTC_ulp extension included")
-
25 #endif
-
26 
-
27 namespace glm
-
28 {
-
34  template<typename genType>
-
35  GLM_FUNC_DECL genType next_float(genType x);
-
36 
-
42  template<typename genType>
-
43  GLM_FUNC_DECL genType prev_float(genType x);
-
44 
-
50  template<typename genType>
-
51  GLM_FUNC_DECL genType next_float(genType x, int ULPs);
-
52 
-
58  template<typename genType>
-
59  GLM_FUNC_DECL genType prev_float(genType x, int ULPs);
-
60 
-
64  GLM_FUNC_DECL int float_distance(float x, float y);
-
65 
-
69  GLM_FUNC_DECL int64 float_distance(double x, double y);
-
70 
-
78  template<length_t L, typename T, qualifier Q>
-
79  GLM_FUNC_DECL vec<L, T, Q> next_float(vec<L, T, Q> const& x);
-
80 
-
88  template<length_t L, typename T, qualifier Q>
-
89  GLM_FUNC_DECL vec<L, T, Q> next_float(vec<L, T, Q> const& x, int ULPs);
-
90 
-
98  template<length_t L, typename T, qualifier Q>
-
99  GLM_FUNC_DECL vec<L, T, Q> next_float(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs);
-
100 
-
108  template<length_t L, typename T, qualifier Q>
-
109  GLM_FUNC_DECL vec<L, T, Q> prev_float(vec<L, T, Q> const& x);
-
110 
-
118  template<length_t L, typename T, qualifier Q>
-
119  GLM_FUNC_DECL vec<L, T, Q> prev_float(vec<L, T, Q> const& x, int ULPs);
-
120 
-
128  template<length_t L, typename T, qualifier Q>
-
129  GLM_FUNC_DECL vec<L, T, Q> prev_float(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs);
-
130 
-
137  template<length_t L, typename T, qualifier Q>
-
138  GLM_FUNC_DECL vec<L, int, Q> float_distance(vec<L, float, Q> const& x, vec<L, float, Q> const& y);
-
139 
-
146  template<length_t L, typename T, qualifier Q>
-
147  GLM_FUNC_DECL vec<L, int64, Q> float_distance(vec<L, double, Q> const& x, vec<L, double, Q> const& y);
-
148 
-
150 }//namespace glm
-
151 
-
152 #include "ulp.inl"
-
detail::int64 int64
64 bit signed integer type.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00183.html b/tests/OpenGL/package/glm/doc/api/a00183.html deleted file mode 100644 index 37c918e7..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00183.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -0.9.9 API documentation: vec1.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vec1.hpp File Reference
-
-
- -

GLM_GTC_vec1 -More...

- -

Go to the source code of this file.

-

Detailed Description

-

GLM_GTC_vec1

-
See also
Core features (dependence)
- -

Definition in file vec1.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00183_source.html b/tests/OpenGL/package/glm/doc/api/a00183_source.html deleted file mode 100644 index 0917812b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00183_source.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - -0.9.9 API documentation: vec1.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vec1.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../ext/vector_bool1.hpp"
-
17 #include "../ext/vector_bool1_precision.hpp"
-
18 #include "../ext/vector_float1.hpp"
-
19 #include "../ext/vector_float1_precision.hpp"
-
20 #include "../ext/vector_double1.hpp"
-
21 #include "../ext/vector_double1_precision.hpp"
-
22 #include "../ext/vector_int1.hpp"
-
23 #include "../ext/vector_int1_precision.hpp"
-
24 #include "../ext/vector_uint1.hpp"
-
25 #include "../ext/vector_uint1_precision.hpp"
-
26 
-
27 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
28 # pragma message("GLM: GLM_GTC_vec1 extension included")
-
29 #endif
-
30 
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00184.html b/tests/OpenGL/package/glm/doc/api/a00184.html deleted file mode 100644 index 559184ba..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00184.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: vec2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vec2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file vec2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00184_source.html b/tests/OpenGL/package/glm/doc/api/a00184_source.html deleted file mode 100644 index 845e0dfc..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00184_source.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -0.9.9 API documentation: vec2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vec2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "./ext/vector_bool2.hpp"
- - - - - -
11 #include "./ext/vector_int2.hpp"
- -
13 #include "./ext/vector_uint2.hpp"
- -
Core features
- - -
Core features
- - -
Core features
- -
Core features
-
Core features
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00185.html b/tests/OpenGL/package/glm/doc/api/a00185.html deleted file mode 100644 index 4f92c3ab..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00185.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: vec3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vec3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file vec3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00185_source.html b/tests/OpenGL/package/glm/doc/api/a00185_source.html deleted file mode 100644 index 4b2fac1f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00185_source.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -0.9.9 API documentation: vec3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vec3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "./ext/vector_bool3.hpp"
- - - - - -
11 #include "./ext/vector_int3.hpp"
- -
13 #include "./ext/vector_uint3.hpp"
- -
Core features
-
Core features
- -
Core features
-
Core features
- - - -
Core features
- -
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00186.html b/tests/OpenGL/package/glm/doc/api/a00186.html deleted file mode 100644 index 424ef27f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00186.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -0.9.9 API documentation: vec4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vec4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Core features

- -

Definition in file vec4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00186_source.html b/tests/OpenGL/package/glm/doc/api/a00186_source.html deleted file mode 100644 index 2f15fc59..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00186_source.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - -0.9.9 API documentation: vec4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vec4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "./ext/vector_bool4.hpp"
- - - - - -
11 #include "./ext/vector_int4.hpp"
- -
13 #include "./ext/vector_uint4.hpp"
- -
15 
- - -
Core features
-
Core features
- -
Core features
-
Core features
- - -
Core features
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00187.html b/tests/OpenGL/package/glm/doc/api/a00187.html deleted file mode 100644 index 76c3b2ec..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00187.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -0.9.9 API documentation: vec_swizzle.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vec_swizzle.hpp File Reference
-
-
- -

GLM_GTX_vec_swizzle -More...

- -

Go to the source code of this file.

-

Detailed Description

-

GLM_GTX_vec_swizzle

-
See also
Core features (dependence)
- -

Definition in file vec_swizzle.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00187_source.html b/tests/OpenGL/package/glm/doc/api/a00187_source.html deleted file mode 100644 index 4760447d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00187_source.html +++ /dev/null @@ -1,2871 +0,0 @@ - - - - - - -0.9.9 API documentation: vec_swizzle.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vec_swizzle.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 #include "../glm.hpp"
-
16 
-
17 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
18 # ifndef GLM_ENABLE_EXPERIMENTAL
-
19 # pragma message("GLM: GLM_GTX_vec_swizzle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
20 # else
-
21 # pragma message("GLM: GLM_GTX_vec_swizzle extension included")
-
22 # endif
-
23 #endif
-
24 
-
25 namespace glm {
-
26  // xx
-
27  template<typename T, qualifier Q>
-
28  GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<1, T, Q> &v) {
-
29  return glm::vec<2, T, Q>(v.x, v.x);
-
30  }
-
31 
-
32  template<typename T, qualifier Q>
-
33  GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<2, T, Q> &v) {
-
34  return glm::vec<2, T, Q>(v.x, v.x);
-
35  }
-
36 
-
37  template<typename T, qualifier Q>
-
38  GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<3, T, Q> &v) {
-
39  return glm::vec<2, T, Q>(v.x, v.x);
-
40  }
-
41 
-
42  template<typename T, qualifier Q>
-
43  GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<4, T, Q> &v) {
-
44  return glm::vec<2, T, Q>(v.x, v.x);
-
45  }
-
46 
-
47  // xy
-
48  template<typename T, qualifier Q>
-
49  GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<2, T, Q> &v) {
-
50  return glm::vec<2, T, Q>(v.x, v.y);
-
51  }
-
52 
-
53  template<typename T, qualifier Q>
-
54  GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<3, T, Q> &v) {
-
55  return glm::vec<2, T, Q>(v.x, v.y);
-
56  }
-
57 
-
58  template<typename T, qualifier Q>
-
59  GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<4, T, Q> &v) {
-
60  return glm::vec<2, T, Q>(v.x, v.y);
-
61  }
-
62 
-
63  // xz
-
64  template<typename T, qualifier Q>
-
65  GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<3, T, Q> &v) {
-
66  return glm::vec<2, T, Q>(v.x, v.z);
-
67  }
-
68 
-
69  template<typename T, qualifier Q>
-
70  GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<4, T, Q> &v) {
-
71  return glm::vec<2, T, Q>(v.x, v.z);
-
72  }
-
73 
-
74  // xw
-
75  template<typename T, qualifier Q>
-
76  GLM_INLINE glm::vec<2, T, Q> xw(const glm::vec<4, T, Q> &v) {
-
77  return glm::vec<2, T, Q>(v.x, v.w);
-
78  }
-
79 
-
80  // yx
-
81  template<typename T, qualifier Q>
-
82  GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<2, T, Q> &v) {
-
83  return glm::vec<2, T, Q>(v.y, v.x);
-
84  }
-
85 
-
86  template<typename T, qualifier Q>
-
87  GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<3, T, Q> &v) {
-
88  return glm::vec<2, T, Q>(v.y, v.x);
-
89  }
-
90 
-
91  template<typename T, qualifier Q>
-
92  GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<4, T, Q> &v) {
-
93  return glm::vec<2, T, Q>(v.y, v.x);
-
94  }
-
95 
-
96  // yy
-
97  template<typename T, qualifier Q>
-
98  GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<2, T, Q> &v) {
-
99  return glm::vec<2, T, Q>(v.y, v.y);
-
100  }
-
101 
-
102  template<typename T, qualifier Q>
-
103  GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<3, T, Q> &v) {
-
104  return glm::vec<2, T, Q>(v.y, v.y);
-
105  }
-
106 
-
107  template<typename T, qualifier Q>
-
108  GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<4, T, Q> &v) {
-
109  return glm::vec<2, T, Q>(v.y, v.y);
-
110  }
-
111 
-
112  // yz
-
113  template<typename T, qualifier Q>
-
114  GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<3, T, Q> &v) {
-
115  return glm::vec<2, T, Q>(v.y, v.z);
-
116  }
-
117 
-
118  template<typename T, qualifier Q>
-
119  GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<4, T, Q> &v) {
-
120  return glm::vec<2, T, Q>(v.y, v.z);
-
121  }
-
122 
-
123  // yw
-
124  template<typename T, qualifier Q>
-
125  GLM_INLINE glm::vec<2, T, Q> yw(const glm::vec<4, T, Q> &v) {
-
126  return glm::vec<2, T, Q>(v.y, v.w);
-
127  }
-
128 
-
129  // zx
-
130  template<typename T, qualifier Q>
-
131  GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<3, T, Q> &v) {
-
132  return glm::vec<2, T, Q>(v.z, v.x);
-
133  }
-
134 
-
135  template<typename T, qualifier Q>
-
136  GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<4, T, Q> &v) {
-
137  return glm::vec<2, T, Q>(v.z, v.x);
-
138  }
-
139 
-
140  // zy
-
141  template<typename T, qualifier Q>
-
142  GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<3, T, Q> &v) {
-
143  return glm::vec<2, T, Q>(v.z, v.y);
-
144  }
-
145 
-
146  template<typename T, qualifier Q>
-
147  GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<4, T, Q> &v) {
-
148  return glm::vec<2, T, Q>(v.z, v.y);
-
149  }
-
150 
-
151  // zz
-
152  template<typename T, qualifier Q>
-
153  GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<3, T, Q> &v) {
-
154  return glm::vec<2, T, Q>(v.z, v.z);
-
155  }
-
156 
-
157  template<typename T, qualifier Q>
-
158  GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<4, T, Q> &v) {
-
159  return glm::vec<2, T, Q>(v.z, v.z);
-
160  }
-
161 
-
162  // zw
-
163  template<typename T, qualifier Q>
-
164  GLM_INLINE glm::vec<2, T, Q> zw(const glm::vec<4, T, Q> &v) {
-
165  return glm::vec<2, T, Q>(v.z, v.w);
-
166  }
-
167 
-
168  // wx
-
169  template<typename T, qualifier Q>
-
170  GLM_INLINE glm::vec<2, T, Q> wx(const glm::vec<4, T, Q> &v) {
-
171  return glm::vec<2, T, Q>(v.w, v.x);
-
172  }
-
173 
-
174  // wy
-
175  template<typename T, qualifier Q>
-
176  GLM_INLINE glm::vec<2, T, Q> wy(const glm::vec<4, T, Q> &v) {
-
177  return glm::vec<2, T, Q>(v.w, v.y);
-
178  }
-
179 
-
180  // wz
-
181  template<typename T, qualifier Q>
-
182  GLM_INLINE glm::vec<2, T, Q> wz(const glm::vec<4, T, Q> &v) {
-
183  return glm::vec<2, T, Q>(v.w, v.z);
-
184  }
-
185 
-
186  // ww
-
187  template<typename T, qualifier Q>
-
188  GLM_INLINE glm::vec<2, T, Q> ww(const glm::vec<4, T, Q> &v) {
-
189  return glm::vec<2, T, Q>(v.w, v.w);
-
190  }
-
191 
-
192  // xxx
-
193  template<typename T, qualifier Q>
-
194  GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<1, T, Q> &v) {
-
195  return glm::vec<3, T, Q>(v.x, v.x, v.x);
-
196  }
-
197 
-
198  template<typename T, qualifier Q>
-
199  GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<2, T, Q> &v) {
-
200  return glm::vec<3, T, Q>(v.x, v.x, v.x);
-
201  }
-
202 
-
203  template<typename T, qualifier Q>
-
204  GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<3, T, Q> &v) {
-
205  return glm::vec<3, T, Q>(v.x, v.x, v.x);
-
206  }
-
207 
-
208  template<typename T, qualifier Q>
-
209  GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<4, T, Q> &v) {
-
210  return glm::vec<3, T, Q>(v.x, v.x, v.x);
-
211  }
-
212 
-
213  // xxy
-
214  template<typename T, qualifier Q>
-
215  GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<2, T, Q> &v) {
-
216  return glm::vec<3, T, Q>(v.x, v.x, v.y);
-
217  }
-
218 
-
219  template<typename T, qualifier Q>
-
220  GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<3, T, Q> &v) {
-
221  return glm::vec<3, T, Q>(v.x, v.x, v.y);
-
222  }
-
223 
-
224  template<typename T, qualifier Q>
-
225  GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<4, T, Q> &v) {
-
226  return glm::vec<3, T, Q>(v.x, v.x, v.y);
-
227  }
-
228 
-
229  // xxz
-
230  template<typename T, qualifier Q>
-
231  GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<3, T, Q> &v) {
-
232  return glm::vec<3, T, Q>(v.x, v.x, v.z);
-
233  }
-
234 
-
235  template<typename T, qualifier Q>
-
236  GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<4, T, Q> &v) {
-
237  return glm::vec<3, T, Q>(v.x, v.x, v.z);
-
238  }
-
239 
-
240  // xxw
-
241  template<typename T, qualifier Q>
-
242  GLM_INLINE glm::vec<3, T, Q> xxw(const glm::vec<4, T, Q> &v) {
-
243  return glm::vec<3, T, Q>(v.x, v.x, v.w);
-
244  }
-
245 
-
246  // xyx
-
247  template<typename T, qualifier Q>
-
248  GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<2, T, Q> &v) {
-
249  return glm::vec<3, T, Q>(v.x, v.y, v.x);
-
250  }
-
251 
-
252  template<typename T, qualifier Q>
-
253  GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<3, T, Q> &v) {
-
254  return glm::vec<3, T, Q>(v.x, v.y, v.x);
-
255  }
-
256 
-
257  template<typename T, qualifier Q>
-
258  GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<4, T, Q> &v) {
-
259  return glm::vec<3, T, Q>(v.x, v.y, v.x);
-
260  }
-
261 
-
262  // xyy
-
263  template<typename T, qualifier Q>
-
264  GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<2, T, Q> &v) {
-
265  return glm::vec<3, T, Q>(v.x, v.y, v.y);
-
266  }
-
267 
-
268  template<typename T, qualifier Q>
-
269  GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<3, T, Q> &v) {
-
270  return glm::vec<3, T, Q>(v.x, v.y, v.y);
-
271  }
-
272 
-
273  template<typename T, qualifier Q>
-
274  GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<4, T, Q> &v) {
-
275  return glm::vec<3, T, Q>(v.x, v.y, v.y);
-
276  }
-
277 
-
278  // xyz
-
279  template<typename T, qualifier Q>
-
280  GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<3, T, Q> &v) {
-
281  return glm::vec<3, T, Q>(v.x, v.y, v.z);
-
282  }
-
283 
-
284  template<typename T, qualifier Q>
-
285  GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<4, T, Q> &v) {
-
286  return glm::vec<3, T, Q>(v.x, v.y, v.z);
-
287  }
-
288 
-
289  // xyw
-
290  template<typename T, qualifier Q>
-
291  GLM_INLINE glm::vec<3, T, Q> xyw(const glm::vec<4, T, Q> &v) {
-
292  return glm::vec<3, T, Q>(v.x, v.y, v.w);
-
293  }
-
294 
-
295  // xzx
-
296  template<typename T, qualifier Q>
-
297  GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<3, T, Q> &v) {
-
298  return glm::vec<3, T, Q>(v.x, v.z, v.x);
-
299  }
-
300 
-
301  template<typename T, qualifier Q>
-
302  GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<4, T, Q> &v) {
-
303  return glm::vec<3, T, Q>(v.x, v.z, v.x);
-
304  }
-
305 
-
306  // xzy
-
307  template<typename T, qualifier Q>
-
308  GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<3, T, Q> &v) {
-
309  return glm::vec<3, T, Q>(v.x, v.z, v.y);
-
310  }
-
311 
-
312  template<typename T, qualifier Q>
-
313  GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<4, T, Q> &v) {
-
314  return glm::vec<3, T, Q>(v.x, v.z, v.y);
-
315  }
-
316 
-
317  // xzz
-
318  template<typename T, qualifier Q>
-
319  GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<3, T, Q> &v) {
-
320  return glm::vec<3, T, Q>(v.x, v.z, v.z);
-
321  }
-
322 
-
323  template<typename T, qualifier Q>
-
324  GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<4, T, Q> &v) {
-
325  return glm::vec<3, T, Q>(v.x, v.z, v.z);
-
326  }
-
327 
-
328  // xzw
-
329  template<typename T, qualifier Q>
-
330  GLM_INLINE glm::vec<3, T, Q> xzw(const glm::vec<4, T, Q> &v) {
-
331  return glm::vec<3, T, Q>(v.x, v.z, v.w);
-
332  }
-
333 
-
334  // xwx
-
335  template<typename T, qualifier Q>
-
336  GLM_INLINE glm::vec<3, T, Q> xwx(const glm::vec<4, T, Q> &v) {
-
337  return glm::vec<3, T, Q>(v.x, v.w, v.x);
-
338  }
-
339 
-
340  // xwy
-
341  template<typename T, qualifier Q>
-
342  GLM_INLINE glm::vec<3, T, Q> xwy(const glm::vec<4, T, Q> &v) {
-
343  return glm::vec<3, T, Q>(v.x, v.w, v.y);
-
344  }
-
345 
-
346  // xwz
-
347  template<typename T, qualifier Q>
-
348  GLM_INLINE glm::vec<3, T, Q> xwz(const glm::vec<4, T, Q> &v) {
-
349  return glm::vec<3, T, Q>(v.x, v.w, v.z);
-
350  }
-
351 
-
352  // xww
-
353  template<typename T, qualifier Q>
-
354  GLM_INLINE glm::vec<3, T, Q> xww(const glm::vec<4, T, Q> &v) {
-
355  return glm::vec<3, T, Q>(v.x, v.w, v.w);
-
356  }
-
357 
-
358  // yxx
-
359  template<typename T, qualifier Q>
-
360  GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<2, T, Q> &v) {
-
361  return glm::vec<3, T, Q>(v.y, v.x, v.x);
-
362  }
-
363 
-
364  template<typename T, qualifier Q>
-
365  GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<3, T, Q> &v) {
-
366  return glm::vec<3, T, Q>(v.y, v.x, v.x);
-
367  }
-
368 
-
369  template<typename T, qualifier Q>
-
370  GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<4, T, Q> &v) {
-
371  return glm::vec<3, T, Q>(v.y, v.x, v.x);
-
372  }
-
373 
-
374  // yxy
-
375  template<typename T, qualifier Q>
-
376  GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<2, T, Q> &v) {
-
377  return glm::vec<3, T, Q>(v.y, v.x, v.y);
-
378  }
-
379 
-
380  template<typename T, qualifier Q>
-
381  GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<3, T, Q> &v) {
-
382  return glm::vec<3, T, Q>(v.y, v.x, v.y);
-
383  }
-
384 
-
385  template<typename T, qualifier Q>
-
386  GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<4, T, Q> &v) {
-
387  return glm::vec<3, T, Q>(v.y, v.x, v.y);
-
388  }
-
389 
-
390  // yxz
-
391  template<typename T, qualifier Q>
-
392  GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<3, T, Q> &v) {
-
393  return glm::vec<3, T, Q>(v.y, v.x, v.z);
-
394  }
-
395 
-
396  template<typename T, qualifier Q>
-
397  GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<4, T, Q> &v) {
-
398  return glm::vec<3, T, Q>(v.y, v.x, v.z);
-
399  }
-
400 
-
401  // yxw
-
402  template<typename T, qualifier Q>
-
403  GLM_INLINE glm::vec<3, T, Q> yxw(const glm::vec<4, T, Q> &v) {
-
404  return glm::vec<3, T, Q>(v.y, v.x, v.w);
-
405  }
-
406 
-
407  // yyx
-
408  template<typename T, qualifier Q>
-
409  GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<2, T, Q> &v) {
-
410  return glm::vec<3, T, Q>(v.y, v.y, v.x);
-
411  }
-
412 
-
413  template<typename T, qualifier Q>
-
414  GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<3, T, Q> &v) {
-
415  return glm::vec<3, T, Q>(v.y, v.y, v.x);
-
416  }
-
417 
-
418  template<typename T, qualifier Q>
-
419  GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<4, T, Q> &v) {
-
420  return glm::vec<3, T, Q>(v.y, v.y, v.x);
-
421  }
-
422 
-
423  // yyy
-
424  template<typename T, qualifier Q>
-
425  GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<2, T, Q> &v) {
-
426  return glm::vec<3, T, Q>(v.y, v.y, v.y);
-
427  }
-
428 
-
429  template<typename T, qualifier Q>
-
430  GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<3, T, Q> &v) {
-
431  return glm::vec<3, T, Q>(v.y, v.y, v.y);
-
432  }
-
433 
-
434  template<typename T, qualifier Q>
-
435  GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<4, T, Q> &v) {
-
436  return glm::vec<3, T, Q>(v.y, v.y, v.y);
-
437  }
-
438 
-
439  // yyz
-
440  template<typename T, qualifier Q>
-
441  GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<3, T, Q> &v) {
-
442  return glm::vec<3, T, Q>(v.y, v.y, v.z);
-
443  }
-
444 
-
445  template<typename T, qualifier Q>
-
446  GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<4, T, Q> &v) {
-
447  return glm::vec<3, T, Q>(v.y, v.y, v.z);
-
448  }
-
449 
-
450  // yyw
-
451  template<typename T, qualifier Q>
-
452  GLM_INLINE glm::vec<3, T, Q> yyw(const glm::vec<4, T, Q> &v) {
-
453  return glm::vec<3, T, Q>(v.y, v.y, v.w);
-
454  }
-
455 
-
456  // yzx
-
457  template<typename T, qualifier Q>
-
458  GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<3, T, Q> &v) {
-
459  return glm::vec<3, T, Q>(v.y, v.z, v.x);
-
460  }
-
461 
-
462  template<typename T, qualifier Q>
-
463  GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<4, T, Q> &v) {
-
464  return glm::vec<3, T, Q>(v.y, v.z, v.x);
-
465  }
-
466 
-
467  // yzy
-
468  template<typename T, qualifier Q>
-
469  GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<3, T, Q> &v) {
-
470  return glm::vec<3, T, Q>(v.y, v.z, v.y);
-
471  }
-
472 
-
473  template<typename T, qualifier Q>
-
474  GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<4, T, Q> &v) {
-
475  return glm::vec<3, T, Q>(v.y, v.z, v.y);
-
476  }
-
477 
-
478  // yzz
-
479  template<typename T, qualifier Q>
-
480  GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<3, T, Q> &v) {
-
481  return glm::vec<3, T, Q>(v.y, v.z, v.z);
-
482  }
-
483 
-
484  template<typename T, qualifier Q>
-
485  GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<4, T, Q> &v) {
-
486  return glm::vec<3, T, Q>(v.y, v.z, v.z);
-
487  }
-
488 
-
489  // yzw
-
490  template<typename T, qualifier Q>
-
491  GLM_INLINE glm::vec<3, T, Q> yzw(const glm::vec<4, T, Q> &v) {
-
492  return glm::vec<3, T, Q>(v.y, v.z, v.w);
-
493  }
-
494 
-
495  // ywx
-
496  template<typename T, qualifier Q>
-
497  GLM_INLINE glm::vec<3, T, Q> ywx(const glm::vec<4, T, Q> &v) {
-
498  return glm::vec<3, T, Q>(v.y, v.w, v.x);
-
499  }
-
500 
-
501  // ywy
-
502  template<typename T, qualifier Q>
-
503  GLM_INLINE glm::vec<3, T, Q> ywy(const glm::vec<4, T, Q> &v) {
-
504  return glm::vec<3, T, Q>(v.y, v.w, v.y);
-
505  }
-
506 
-
507  // ywz
-
508  template<typename T, qualifier Q>
-
509  GLM_INLINE glm::vec<3, T, Q> ywz(const glm::vec<4, T, Q> &v) {
-
510  return glm::vec<3, T, Q>(v.y, v.w, v.z);
-
511  }
-
512 
-
513  // yww
-
514  template<typename T, qualifier Q>
-
515  GLM_INLINE glm::vec<3, T, Q> yww(const glm::vec<4, T, Q> &v) {
-
516  return glm::vec<3, T, Q>(v.y, v.w, v.w);
-
517  }
-
518 
-
519  // zxx
-
520  template<typename T, qualifier Q>
-
521  GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<3, T, Q> &v) {
-
522  return glm::vec<3, T, Q>(v.z, v.x, v.x);
-
523  }
-
524 
-
525  template<typename T, qualifier Q>
-
526  GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<4, T, Q> &v) {
-
527  return glm::vec<3, T, Q>(v.z, v.x, v.x);
-
528  }
-
529 
-
530  // zxy
-
531  template<typename T, qualifier Q>
-
532  GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<3, T, Q> &v) {
-
533  return glm::vec<3, T, Q>(v.z, v.x, v.y);
-
534  }
-
535 
-
536  template<typename T, qualifier Q>
-
537  GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<4, T, Q> &v) {
-
538  return glm::vec<3, T, Q>(v.z, v.x, v.y);
-
539  }
-
540 
-
541  // zxz
-
542  template<typename T, qualifier Q>
-
543  GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<3, T, Q> &v) {
-
544  return glm::vec<3, T, Q>(v.z, v.x, v.z);
-
545  }
-
546 
-
547  template<typename T, qualifier Q>
-
548  GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<4, T, Q> &v) {
-
549  return glm::vec<3, T, Q>(v.z, v.x, v.z);
-
550  }
-
551 
-
552  // zxw
-
553  template<typename T, qualifier Q>
-
554  GLM_INLINE glm::vec<3, T, Q> zxw(const glm::vec<4, T, Q> &v) {
-
555  return glm::vec<3, T, Q>(v.z, v.x, v.w);
-
556  }
-
557 
-
558  // zyx
-
559  template<typename T, qualifier Q>
-
560  GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<3, T, Q> &v) {
-
561  return glm::vec<3, T, Q>(v.z, v.y, v.x);
-
562  }
-
563 
-
564  template<typename T, qualifier Q>
-
565  GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<4, T, Q> &v) {
-
566  return glm::vec<3, T, Q>(v.z, v.y, v.x);
-
567  }
-
568 
-
569  // zyy
-
570  template<typename T, qualifier Q>
-
571  GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<3, T, Q> &v) {
-
572  return glm::vec<3, T, Q>(v.z, v.y, v.y);
-
573  }
-
574 
-
575  template<typename T, qualifier Q>
-
576  GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<4, T, Q> &v) {
-
577  return glm::vec<3, T, Q>(v.z, v.y, v.y);
-
578  }
-
579 
-
580  // zyz
-
581  template<typename T, qualifier Q>
-
582  GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<3, T, Q> &v) {
-
583  return glm::vec<3, T, Q>(v.z, v.y, v.z);
-
584  }
-
585 
-
586  template<typename T, qualifier Q>
-
587  GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<4, T, Q> &v) {
-
588  return glm::vec<3, T, Q>(v.z, v.y, v.z);
-
589  }
-
590 
-
591  // zyw
-
592  template<typename T, qualifier Q>
-
593  GLM_INLINE glm::vec<3, T, Q> zyw(const glm::vec<4, T, Q> &v) {
-
594  return glm::vec<3, T, Q>(v.z, v.y, v.w);
-
595  }
-
596 
-
597  // zzx
-
598  template<typename T, qualifier Q>
-
599  GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<3, T, Q> &v) {
-
600  return glm::vec<3, T, Q>(v.z, v.z, v.x);
-
601  }
-
602 
-
603  template<typename T, qualifier Q>
-
604  GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<4, T, Q> &v) {
-
605  return glm::vec<3, T, Q>(v.z, v.z, v.x);
-
606  }
-
607 
-
608  // zzy
-
609  template<typename T, qualifier Q>
-
610  GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<3, T, Q> &v) {
-
611  return glm::vec<3, T, Q>(v.z, v.z, v.y);
-
612  }
-
613 
-
614  template<typename T, qualifier Q>
-
615  GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<4, T, Q> &v) {
-
616  return glm::vec<3, T, Q>(v.z, v.z, v.y);
-
617  }
-
618 
-
619  // zzz
-
620  template<typename T, qualifier Q>
-
621  GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<3, T, Q> &v) {
-
622  return glm::vec<3, T, Q>(v.z, v.z, v.z);
-
623  }
-
624 
-
625  template<typename T, qualifier Q>
-
626  GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<4, T, Q> &v) {
-
627  return glm::vec<3, T, Q>(v.z, v.z, v.z);
-
628  }
-
629 
-
630  // zzw
-
631  template<typename T, qualifier Q>
-
632  GLM_INLINE glm::vec<3, T, Q> zzw(const glm::vec<4, T, Q> &v) {
-
633  return glm::vec<3, T, Q>(v.z, v.z, v.w);
-
634  }
-
635 
-
636  // zwx
-
637  template<typename T, qualifier Q>
-
638  GLM_INLINE glm::vec<3, T, Q> zwx(const glm::vec<4, T, Q> &v) {
-
639  return glm::vec<3, T, Q>(v.z, v.w, v.x);
-
640  }
-
641 
-
642  // zwy
-
643  template<typename T, qualifier Q>
-
644  GLM_INLINE glm::vec<3, T, Q> zwy(const glm::vec<4, T, Q> &v) {
-
645  return glm::vec<3, T, Q>(v.z, v.w, v.y);
-
646  }
-
647 
-
648  // zwz
-
649  template<typename T, qualifier Q>
-
650  GLM_INLINE glm::vec<3, T, Q> zwz(const glm::vec<4, T, Q> &v) {
-
651  return glm::vec<3, T, Q>(v.z, v.w, v.z);
-
652  }
-
653 
-
654  // zww
-
655  template<typename T, qualifier Q>
-
656  GLM_INLINE glm::vec<3, T, Q> zww(const glm::vec<4, T, Q> &v) {
-
657  return glm::vec<3, T, Q>(v.z, v.w, v.w);
-
658  }
-
659 
-
660  // wxx
-
661  template<typename T, qualifier Q>
-
662  GLM_INLINE glm::vec<3, T, Q> wxx(const glm::vec<4, T, Q> &v) {
-
663  return glm::vec<3, T, Q>(v.w, v.x, v.x);
-
664  }
-
665 
-
666  // wxy
-
667  template<typename T, qualifier Q>
-
668  GLM_INLINE glm::vec<3, T, Q> wxy(const glm::vec<4, T, Q> &v) {
-
669  return glm::vec<3, T, Q>(v.w, v.x, v.y);
-
670  }
-
671 
-
672  // wxz
-
673  template<typename T, qualifier Q>
-
674  GLM_INLINE glm::vec<3, T, Q> wxz(const glm::vec<4, T, Q> &v) {
-
675  return glm::vec<3, T, Q>(v.w, v.x, v.z);
-
676  }
-
677 
-
678  // wxw
-
679  template<typename T, qualifier Q>
-
680  GLM_INLINE glm::vec<3, T, Q> wxw(const glm::vec<4, T, Q> &v) {
-
681  return glm::vec<3, T, Q>(v.w, v.x, v.w);
-
682  }
-
683 
-
684  // wyx
-
685  template<typename T, qualifier Q>
-
686  GLM_INLINE glm::vec<3, T, Q> wyx(const glm::vec<4, T, Q> &v) {
-
687  return glm::vec<3, T, Q>(v.w, v.y, v.x);
-
688  }
-
689 
-
690  // wyy
-
691  template<typename T, qualifier Q>
-
692  GLM_INLINE glm::vec<3, T, Q> wyy(const glm::vec<4, T, Q> &v) {
-
693  return glm::vec<3, T, Q>(v.w, v.y, v.y);
-
694  }
-
695 
-
696  // wyz
-
697  template<typename T, qualifier Q>
-
698  GLM_INLINE glm::vec<3, T, Q> wyz(const glm::vec<4, T, Q> &v) {
-
699  return glm::vec<3, T, Q>(v.w, v.y, v.z);
-
700  }
-
701 
-
702  // wyw
-
703  template<typename T, qualifier Q>
-
704  GLM_INLINE glm::vec<3, T, Q> wyw(const glm::vec<4, T, Q> &v) {
-
705  return glm::vec<3, T, Q>(v.w, v.y, v.w);
-
706  }
-
707 
-
708  // wzx
-
709  template<typename T, qualifier Q>
-
710  GLM_INLINE glm::vec<3, T, Q> wzx(const glm::vec<4, T, Q> &v) {
-
711  return glm::vec<3, T, Q>(v.w, v.z, v.x);
-
712  }
-
713 
-
714  // wzy
-
715  template<typename T, qualifier Q>
-
716  GLM_INLINE glm::vec<3, T, Q> wzy(const glm::vec<4, T, Q> &v) {
-
717  return glm::vec<3, T, Q>(v.w, v.z, v.y);
-
718  }
-
719 
-
720  // wzz
-
721  template<typename T, qualifier Q>
-
722  GLM_INLINE glm::vec<3, T, Q> wzz(const glm::vec<4, T, Q> &v) {
-
723  return glm::vec<3, T, Q>(v.w, v.z, v.z);
-
724  }
-
725 
-
726  // wzw
-
727  template<typename T, qualifier Q>
-
728  GLM_INLINE glm::vec<3, T, Q> wzw(const glm::vec<4, T, Q> &v) {
-
729  return glm::vec<3, T, Q>(v.w, v.z, v.w);
-
730  }
-
731 
-
732  // wwx
-
733  template<typename T, qualifier Q>
-
734  GLM_INLINE glm::vec<3, T, Q> wwx(const glm::vec<4, T, Q> &v) {
-
735  return glm::vec<3, T, Q>(v.w, v.w, v.x);
-
736  }
-
737 
-
738  // wwy
-
739  template<typename T, qualifier Q>
-
740  GLM_INLINE glm::vec<3, T, Q> wwy(const glm::vec<4, T, Q> &v) {
-
741  return glm::vec<3, T, Q>(v.w, v.w, v.y);
-
742  }
-
743 
-
744  // wwz
-
745  template<typename T, qualifier Q>
-
746  GLM_INLINE glm::vec<3, T, Q> wwz(const glm::vec<4, T, Q> &v) {
-
747  return glm::vec<3, T, Q>(v.w, v.w, v.z);
-
748  }
-
749 
-
750  // www
-
751  template<typename T, qualifier Q>
-
752  GLM_INLINE glm::vec<3, T, Q> www(const glm::vec<4, T, Q> &v) {
-
753  return glm::vec<3, T, Q>(v.w, v.w, v.w);
-
754  }
-
755 
-
756  // xxxx
-
757  template<typename T, qualifier Q>
-
758  GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<1, T, Q> &v) {
-
759  return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
-
760  }
-
761 
-
762  template<typename T, qualifier Q>
-
763  GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<2, T, Q> &v) {
-
764  return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
-
765  }
-
766 
-
767  template<typename T, qualifier Q>
-
768  GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<3, T, Q> &v) {
-
769  return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
-
770  }
-
771 
-
772  template<typename T, qualifier Q>
-
773  GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<4, T, Q> &v) {
-
774  return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
-
775  }
-
776 
-
777  // xxxy
-
778  template<typename T, qualifier Q>
-
779  GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<2, T, Q> &v) {
-
780  return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);
-
781  }
-
782 
-
783  template<typename T, qualifier Q>
-
784  GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<3, T, Q> &v) {
-
785  return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);
-
786  }
-
787 
-
788  template<typename T, qualifier Q>
-
789  GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<4, T, Q> &v) {
-
790  return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);
-
791  }
-
792 
-
793  // xxxz
-
794  template<typename T, qualifier Q>
-
795  GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<3, T, Q> &v) {
-
796  return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z);
-
797  }
-
798 
-
799  template<typename T, qualifier Q>
-
800  GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<4, T, Q> &v) {
-
801  return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z);
-
802  }
-
803 
-
804  // xxxw
-
805  template<typename T, qualifier Q>
-
806  GLM_INLINE glm::vec<4, T, Q> xxxw(const glm::vec<4, T, Q> &v) {
-
807  return glm::vec<4, T, Q>(v.x, v.x, v.x, v.w);
-
808  }
-
809 
-
810  // xxyx
-
811  template<typename T, qualifier Q>
-
812  GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<2, T, Q> &v) {
-
813  return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);
-
814  }
-
815 
-
816  template<typename T, qualifier Q>
-
817  GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<3, T, Q> &v) {
-
818  return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);
-
819  }
-
820 
-
821  template<typename T, qualifier Q>
-
822  GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<4, T, Q> &v) {
-
823  return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);
-
824  }
-
825 
-
826  // xxyy
-
827  template<typename T, qualifier Q>
-
828  GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<2, T, Q> &v) {
-
829  return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);
-
830  }
-
831 
-
832  template<typename T, qualifier Q>
-
833  GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<3, T, Q> &v) {
-
834  return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);
-
835  }
-
836 
-
837  template<typename T, qualifier Q>
-
838  GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<4, T, Q> &v) {
-
839  return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);
-
840  }
-
841 
-
842  // xxyz
-
843  template<typename T, qualifier Q>
-
844  GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<3, T, Q> &v) {
-
845  return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z);
-
846  }
-
847 
-
848  template<typename T, qualifier Q>
-
849  GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<4, T, Q> &v) {
-
850  return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z);
-
851  }
-
852 
-
853  // xxyw
-
854  template<typename T, qualifier Q>
-
855  GLM_INLINE glm::vec<4, T, Q> xxyw(const glm::vec<4, T, Q> &v) {
-
856  return glm::vec<4, T, Q>(v.x, v.x, v.y, v.w);
-
857  }
-
858 
-
859  // xxzx
-
860  template<typename T, qualifier Q>
-
861  GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<3, T, Q> &v) {
-
862  return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x);
-
863  }
-
864 
-
865  template<typename T, qualifier Q>
-
866  GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<4, T, Q> &v) {
-
867  return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x);
-
868  }
-
869 
-
870  // xxzy
-
871  template<typename T, qualifier Q>
-
872  GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<3, T, Q> &v) {
-
873  return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y);
-
874  }
-
875 
-
876  template<typename T, qualifier Q>
-
877  GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<4, T, Q> &v) {
-
878  return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y);
-
879  }
-
880 
-
881  // xxzz
-
882  template<typename T, qualifier Q>
-
883  GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<3, T, Q> &v) {
-
884  return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z);
-
885  }
-
886 
-
887  template<typename T, qualifier Q>
-
888  GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<4, T, Q> &v) {
-
889  return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z);
-
890  }
-
891 
-
892  // xxzw
-
893  template<typename T, qualifier Q>
-
894  GLM_INLINE glm::vec<4, T, Q> xxzw(const glm::vec<4, T, Q> &v) {
-
895  return glm::vec<4, T, Q>(v.x, v.x, v.z, v.w);
-
896  }
-
897 
-
898  // xxwx
-
899  template<typename T, qualifier Q>
-
900  GLM_INLINE glm::vec<4, T, Q> xxwx(const glm::vec<4, T, Q> &v) {
-
901  return glm::vec<4, T, Q>(v.x, v.x, v.w, v.x);
-
902  }
-
903 
-
904  // xxwy
-
905  template<typename T, qualifier Q>
-
906  GLM_INLINE glm::vec<4, T, Q> xxwy(const glm::vec<4, T, Q> &v) {
-
907  return glm::vec<4, T, Q>(v.x, v.x, v.w, v.y);
-
908  }
-
909 
-
910  // xxwz
-
911  template<typename T, qualifier Q>
-
912  GLM_INLINE glm::vec<4, T, Q> xxwz(const glm::vec<4, T, Q> &v) {
-
913  return glm::vec<4, T, Q>(v.x, v.x, v.w, v.z);
-
914  }
-
915 
-
916  // xxww
-
917  template<typename T, qualifier Q>
-
918  GLM_INLINE glm::vec<4, T, Q> xxww(const glm::vec<4, T, Q> &v) {
-
919  return glm::vec<4, T, Q>(v.x, v.x, v.w, v.w);
-
920  }
-
921 
-
922  // xyxx
-
923  template<typename T, qualifier Q>
-
924  GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<2, T, Q> &v) {
-
925  return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);
-
926  }
-
927 
-
928  template<typename T, qualifier Q>
-
929  GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<3, T, Q> &v) {
-
930  return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);
-
931  }
-
932 
-
933  template<typename T, qualifier Q>
-
934  GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<4, T, Q> &v) {
-
935  return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);
-
936  }
-
937 
-
938  // xyxy
-
939  template<typename T, qualifier Q>
-
940  GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<2, T, Q> &v) {
-
941  return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);
-
942  }
-
943 
-
944  template<typename T, qualifier Q>
-
945  GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<3, T, Q> &v) {
-
946  return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);
-
947  }
-
948 
-
949  template<typename T, qualifier Q>
-
950  GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<4, T, Q> &v) {
-
951  return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);
-
952  }
-
953 
-
954  // xyxz
-
955  template<typename T, qualifier Q>
-
956  GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<3, T, Q> &v) {
-
957  return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z);
-
958  }
-
959 
-
960  template<typename T, qualifier Q>
-
961  GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<4, T, Q> &v) {
-
962  return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z);
-
963  }
-
964 
-
965  // xyxw
-
966  template<typename T, qualifier Q>
-
967  GLM_INLINE glm::vec<4, T, Q> xyxw(const glm::vec<4, T, Q> &v) {
-
968  return glm::vec<4, T, Q>(v.x, v.y, v.x, v.w);
-
969  }
-
970 
-
971  // xyyx
-
972  template<typename T, qualifier Q>
-
973  GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<2, T, Q> &v) {
-
974  return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);
-
975  }
-
976 
-
977  template<typename T, qualifier Q>
-
978  GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<3, T, Q> &v) {
-
979  return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);
-
980  }
-
981 
-
982  template<typename T, qualifier Q>
-
983  GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<4, T, Q> &v) {
-
984  return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);
-
985  }
-
986 
-
987  // xyyy
-
988  template<typename T, qualifier Q>
-
989  GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<2, T, Q> &v) {
-
990  return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);
-
991  }
-
992 
-
993  template<typename T, qualifier Q>
-
994  GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<3, T, Q> &v) {
-
995  return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);
-
996  }
-
997 
-
998  template<typename T, qualifier Q>
-
999  GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<4, T, Q> &v) {
-
1000  return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);
-
1001  }
-
1002 
-
1003  // xyyz
-
1004  template<typename T, qualifier Q>
-
1005  GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<3, T, Q> &v) {
-
1006  return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z);
-
1007  }
-
1008 
-
1009  template<typename T, qualifier Q>
-
1010  GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<4, T, Q> &v) {
-
1011  return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z);
-
1012  }
-
1013 
-
1014  // xyyw
-
1015  template<typename T, qualifier Q>
-
1016  GLM_INLINE glm::vec<4, T, Q> xyyw(const glm::vec<4, T, Q> &v) {
-
1017  return glm::vec<4, T, Q>(v.x, v.y, v.y, v.w);
-
1018  }
-
1019 
-
1020  // xyzx
-
1021  template<typename T, qualifier Q>
-
1022  GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<3, T, Q> &v) {
-
1023  return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x);
-
1024  }
-
1025 
-
1026  template<typename T, qualifier Q>
-
1027  GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<4, T, Q> &v) {
-
1028  return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x);
-
1029  }
-
1030 
-
1031  // xyzy
-
1032  template<typename T, qualifier Q>
-
1033  GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<3, T, Q> &v) {
-
1034  return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y);
-
1035  }
-
1036 
-
1037  template<typename T, qualifier Q>
-
1038  GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<4, T, Q> &v) {
-
1039  return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y);
-
1040  }
-
1041 
-
1042  // xyzz
-
1043  template<typename T, qualifier Q>
-
1044  GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<3, T, Q> &v) {
-
1045  return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);
-
1046  }
-
1047 
-
1048  template<typename T, qualifier Q>
-
1049  GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<4, T, Q> &v) {
-
1050  return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);
-
1051  }
-
1052 
-
1053  // xyzw
-
1054  template<typename T, qualifier Q>
-
1055  GLM_INLINE glm::vec<4, T, Q> xyzw(const glm::vec<4, T, Q> &v) {
-
1056  return glm::vec<4, T, Q>(v.x, v.y, v.z, v.w);
-
1057  }
-
1058 
-
1059  // xywx
-
1060  template<typename T, qualifier Q>
-
1061  GLM_INLINE glm::vec<4, T, Q> xywx(const glm::vec<4, T, Q> &v) {
-
1062  return glm::vec<4, T, Q>(v.x, v.y, v.w, v.x);
-
1063  }
-
1064 
-
1065  // xywy
-
1066  template<typename T, qualifier Q>
-
1067  GLM_INLINE glm::vec<4, T, Q> xywy(const glm::vec<4, T, Q> &v) {
-
1068  return glm::vec<4, T, Q>(v.x, v.y, v.w, v.y);
-
1069  }
-
1070 
-
1071  // xywz
-
1072  template<typename T, qualifier Q>
-
1073  GLM_INLINE glm::vec<4, T, Q> xywz(const glm::vec<4, T, Q> &v) {
-
1074  return glm::vec<4, T, Q>(v.x, v.y, v.w, v.z);
-
1075  }
-
1076 
-
1077  // xyww
-
1078  template<typename T, qualifier Q>
-
1079  GLM_INLINE glm::vec<4, T, Q> xyww(const glm::vec<4, T, Q> &v) {
-
1080  return glm::vec<4, T, Q>(v.x, v.y, v.w, v.w);
-
1081  }
-
1082 
-
1083  // xzxx
-
1084  template<typename T, qualifier Q>
-
1085  GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<3, T, Q> &v) {
-
1086  return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);
-
1087  }
-
1088 
-
1089  template<typename T, qualifier Q>
-
1090  GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<4, T, Q> &v) {
-
1091  return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);
-
1092  }
-
1093 
-
1094  // xzxy
-
1095  template<typename T, qualifier Q>
-
1096  GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<3, T, Q> &v) {
-
1097  return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);
-
1098  }
-
1099 
-
1100  template<typename T, qualifier Q>
-
1101  GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<4, T, Q> &v) {
-
1102  return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);
-
1103  }
-
1104 
-
1105  // xzxz
-
1106  template<typename T, qualifier Q>
-
1107  GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<3, T, Q> &v) {
-
1108  return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);
-
1109  }
-
1110 
-
1111  template<typename T, qualifier Q>
-
1112  GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<4, T, Q> &v) {
-
1113  return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);
-
1114  }
-
1115 
-
1116  // xzxw
-
1117  template<typename T, qualifier Q>
-
1118  GLM_INLINE glm::vec<4, T, Q> xzxw(const glm::vec<4, T, Q> &v) {
-
1119  return glm::vec<4, T, Q>(v.x, v.z, v.x, v.w);
-
1120  }
-
1121 
-
1122  // xzyx
-
1123  template<typename T, qualifier Q>
-
1124  GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<3, T, Q> &v) {
-
1125  return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);
-
1126  }
-
1127 
-
1128  template<typename T, qualifier Q>
-
1129  GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<4, T, Q> &v) {
-
1130  return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);
-
1131  }
-
1132 
-
1133  // xzyy
-
1134  template<typename T, qualifier Q>
-
1135  GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<3, T, Q> &v) {
-
1136  return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);
-
1137  }
-
1138 
-
1139  template<typename T, qualifier Q>
-
1140  GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<4, T, Q> &v) {
-
1141  return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);
-
1142  }
-
1143 
-
1144  // xzyz
-
1145  template<typename T, qualifier Q>
-
1146  GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<3, T, Q> &v) {
-
1147  return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);
-
1148  }
-
1149 
-
1150  template<typename T, qualifier Q>
-
1151  GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<4, T, Q> &v) {
-
1152  return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);
-
1153  }
-
1154 
-
1155  // xzyw
-
1156  template<typename T, qualifier Q>
-
1157  GLM_INLINE glm::vec<4, T, Q> xzyw(const glm::vec<4, T, Q> &v) {
-
1158  return glm::vec<4, T, Q>(v.x, v.z, v.y, v.w);
-
1159  }
-
1160 
-
1161  // xzzx
-
1162  template<typename T, qualifier Q>
-
1163  GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<3, T, Q> &v) {
-
1164  return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);
-
1165  }
-
1166 
-
1167  template<typename T, qualifier Q>
-
1168  GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<4, T, Q> &v) {
-
1169  return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);
-
1170  }
-
1171 
-
1172  // xzzy
-
1173  template<typename T, qualifier Q>
-
1174  GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<3, T, Q> &v) {
-
1175  return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);
-
1176  }
-
1177 
-
1178  template<typename T, qualifier Q>
-
1179  GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<4, T, Q> &v) {
-
1180  return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);
-
1181  }
-
1182 
-
1183  // xzzz
-
1184  template<typename T, qualifier Q>
-
1185  GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<3, T, Q> &v) {
-
1186  return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);
-
1187  }
-
1188 
-
1189  template<typename T, qualifier Q>
-
1190  GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<4, T, Q> &v) {
-
1191  return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);
-
1192  }
-
1193 
-
1194  // xzzw
-
1195  template<typename T, qualifier Q>
-
1196  GLM_INLINE glm::vec<4, T, Q> xzzw(const glm::vec<4, T, Q> &v) {
-
1197  return glm::vec<4, T, Q>(v.x, v.z, v.z, v.w);
-
1198  }
-
1199 
-
1200  // xzwx
-
1201  template<typename T, qualifier Q>
-
1202  GLM_INLINE glm::vec<4, T, Q> xzwx(const glm::vec<4, T, Q> &v) {
-
1203  return glm::vec<4, T, Q>(v.x, v.z, v.w, v.x);
-
1204  }
-
1205 
-
1206  // xzwy
-
1207  template<typename T, qualifier Q>
-
1208  GLM_INLINE glm::vec<4, T, Q> xzwy(const glm::vec<4, T, Q> &v) {
-
1209  return glm::vec<4, T, Q>(v.x, v.z, v.w, v.y);
-
1210  }
-
1211 
-
1212  // xzwz
-
1213  template<typename T, qualifier Q>
-
1214  GLM_INLINE glm::vec<4, T, Q> xzwz(const glm::vec<4, T, Q> &v) {
-
1215  return glm::vec<4, T, Q>(v.x, v.z, v.w, v.z);
-
1216  }
-
1217 
-
1218  // xzww
-
1219  template<typename T, qualifier Q>
-
1220  GLM_INLINE glm::vec<4, T, Q> xzww(const glm::vec<4, T, Q> &v) {
-
1221  return glm::vec<4, T, Q>(v.x, v.z, v.w, v.w);
-
1222  }
-
1223 
-
1224  // xwxx
-
1225  template<typename T, qualifier Q>
-
1226  GLM_INLINE glm::vec<4, T, Q> xwxx(const glm::vec<4, T, Q> &v) {
-
1227  return glm::vec<4, T, Q>(v.x, v.w, v.x, v.x);
-
1228  }
-
1229 
-
1230  // xwxy
-
1231  template<typename T, qualifier Q>
-
1232  GLM_INLINE glm::vec<4, T, Q> xwxy(const glm::vec<4, T, Q> &v) {
-
1233  return glm::vec<4, T, Q>(v.x, v.w, v.x, v.y);
-
1234  }
-
1235 
-
1236  // xwxz
-
1237  template<typename T, qualifier Q>
-
1238  GLM_INLINE glm::vec<4, T, Q> xwxz(const glm::vec<4, T, Q> &v) {
-
1239  return glm::vec<4, T, Q>(v.x, v.w, v.x, v.z);
-
1240  }
-
1241 
-
1242  // xwxw
-
1243  template<typename T, qualifier Q>
-
1244  GLM_INLINE glm::vec<4, T, Q> xwxw(const glm::vec<4, T, Q> &v) {
-
1245  return glm::vec<4, T, Q>(v.x, v.w, v.x, v.w);
-
1246  }
-
1247 
-
1248  // xwyx
-
1249  template<typename T, qualifier Q>
-
1250  GLM_INLINE glm::vec<4, T, Q> xwyx(const glm::vec<4, T, Q> &v) {
-
1251  return glm::vec<4, T, Q>(v.x, v.w, v.y, v.x);
-
1252  }
-
1253 
-
1254  // xwyy
-
1255  template<typename T, qualifier Q>
-
1256  GLM_INLINE glm::vec<4, T, Q> xwyy(const glm::vec<4, T, Q> &v) {
-
1257  return glm::vec<4, T, Q>(v.x, v.w, v.y, v.y);
-
1258  }
-
1259 
-
1260  // xwyz
-
1261  template<typename T, qualifier Q>
-
1262  GLM_INLINE glm::vec<4, T, Q> xwyz(const glm::vec<4, T, Q> &v) {
-
1263  return glm::vec<4, T, Q>(v.x, v.w, v.y, v.z);
-
1264  }
-
1265 
-
1266  // xwyw
-
1267  template<typename T, qualifier Q>
-
1268  GLM_INLINE glm::vec<4, T, Q> xwyw(const glm::vec<4, T, Q> &v) {
-
1269  return glm::vec<4, T, Q>(v.x, v.w, v.y, v.w);
-
1270  }
-
1271 
-
1272  // xwzx
-
1273  template<typename T, qualifier Q>
-
1274  GLM_INLINE glm::vec<4, T, Q> xwzx(const glm::vec<4, T, Q> &v) {
-
1275  return glm::vec<4, T, Q>(v.x, v.w, v.z, v.x);
-
1276  }
-
1277 
-
1278  // xwzy
-
1279  template<typename T, qualifier Q>
-
1280  GLM_INLINE glm::vec<4, T, Q> xwzy(const glm::vec<4, T, Q> &v) {
-
1281  return glm::vec<4, T, Q>(v.x, v.w, v.z, v.y);
-
1282  }
-
1283 
-
1284  // xwzz
-
1285  template<typename T, qualifier Q>
-
1286  GLM_INLINE glm::vec<4, T, Q> xwzz(const glm::vec<4, T, Q> &v) {
-
1287  return glm::vec<4, T, Q>(v.x, v.w, v.z, v.z);
-
1288  }
-
1289 
-
1290  // xwzw
-
1291  template<typename T, qualifier Q>
-
1292  GLM_INLINE glm::vec<4, T, Q> xwzw(const glm::vec<4, T, Q> &v) {
-
1293  return glm::vec<4, T, Q>(v.x, v.w, v.z, v.w);
-
1294  }
-
1295 
-
1296  // xwwx
-
1297  template<typename T, qualifier Q>
-
1298  GLM_INLINE glm::vec<4, T, Q> xwwx(const glm::vec<4, T, Q> &v) {
-
1299  return glm::vec<4, T, Q>(v.x, v.w, v.w, v.x);
-
1300  }
-
1301 
-
1302  // xwwy
-
1303  template<typename T, qualifier Q>
-
1304  GLM_INLINE glm::vec<4, T, Q> xwwy(const glm::vec<4, T, Q> &v) {
-
1305  return glm::vec<4, T, Q>(v.x, v.w, v.w, v.y);
-
1306  }
-
1307 
-
1308  // xwwz
-
1309  template<typename T, qualifier Q>
-
1310  GLM_INLINE glm::vec<4, T, Q> xwwz(const glm::vec<4, T, Q> &v) {
-
1311  return glm::vec<4, T, Q>(v.x, v.w, v.w, v.z);
-
1312  }
-
1313 
-
1314  // xwww
-
1315  template<typename T, qualifier Q>
-
1316  GLM_INLINE glm::vec<4, T, Q> xwww(const glm::vec<4, T, Q> &v) {
-
1317  return glm::vec<4, T, Q>(v.x, v.w, v.w, v.w);
-
1318  }
-
1319 
-
1320  // yxxx
-
1321  template<typename T, qualifier Q>
-
1322  GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<2, T, Q> &v) {
-
1323  return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
-
1324  }
-
1325 
-
1326  template<typename T, qualifier Q>
-
1327  GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<3, T, Q> &v) {
-
1328  return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
-
1329  }
-
1330 
-
1331  template<typename T, qualifier Q>
-
1332  GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<4, T, Q> &v) {
-
1333  return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
-
1334  }
-
1335 
-
1336  // yxxy
-
1337  template<typename T, qualifier Q>
-
1338  GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<2, T, Q> &v) {
-
1339  return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
-
1340  }
-
1341 
-
1342  template<typename T, qualifier Q>
-
1343  GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<3, T, Q> &v) {
-
1344  return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
-
1345  }
-
1346 
-
1347  template<typename T, qualifier Q>
-
1348  GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<4, T, Q> &v) {
-
1349  return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
-
1350  }
-
1351 
-
1352  // yxxz
-
1353  template<typename T, qualifier Q>
-
1354  GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<3, T, Q> &v) {
-
1355  return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);
-
1356  }
-
1357 
-
1358  template<typename T, qualifier Q>
-
1359  GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<4, T, Q> &v) {
-
1360  return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);
-
1361  }
-
1362 
-
1363  // yxxw
-
1364  template<typename T, qualifier Q>
-
1365  GLM_INLINE glm::vec<4, T, Q> yxxw(const glm::vec<4, T, Q> &v) {
-
1366  return glm::vec<4, T, Q>(v.y, v.x, v.x, v.w);
-
1367  }
-
1368 
-
1369  // yxyx
-
1370  template<typename T, qualifier Q>
-
1371  GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<2, T, Q> &v) {
-
1372  return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
-
1373  }
-
1374 
-
1375  template<typename T, qualifier Q>
-
1376  GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<3, T, Q> &v) {
-
1377  return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
-
1378  }
-
1379 
-
1380  template<typename T, qualifier Q>
-
1381  GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<4, T, Q> &v) {
-
1382  return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
-
1383  }
-
1384 
-
1385  // yxyy
-
1386  template<typename T, qualifier Q>
-
1387  GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<2, T, Q> &v) {
-
1388  return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
-
1389  }
-
1390 
-
1391  template<typename T, qualifier Q>
-
1392  GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<3, T, Q> &v) {
-
1393  return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
-
1394  }
-
1395 
-
1396  template<typename T, qualifier Q>
-
1397  GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<4, T, Q> &v) {
-
1398  return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
-
1399  }
-
1400 
-
1401  // yxyz
-
1402  template<typename T, qualifier Q>
-
1403  GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<3, T, Q> &v) {
-
1404  return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);
-
1405  }
-
1406 
-
1407  template<typename T, qualifier Q>
-
1408  GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<4, T, Q> &v) {
-
1409  return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);
-
1410  }
-
1411 
-
1412  // yxyw
-
1413  template<typename T, qualifier Q>
-
1414  GLM_INLINE glm::vec<4, T, Q> yxyw(const glm::vec<4, T, Q> &v) {
-
1415  return glm::vec<4, T, Q>(v.y, v.x, v.y, v.w);
-
1416  }
-
1417 
-
1418  // yxzx
-
1419  template<typename T, qualifier Q>
-
1420  GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<3, T, Q> &v) {
-
1421  return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);
-
1422  }
-
1423 
-
1424  template<typename T, qualifier Q>
-
1425  GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<4, T, Q> &v) {
-
1426  return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);
-
1427  }
-
1428 
-
1429  // yxzy
-
1430  template<typename T, qualifier Q>
-
1431  GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<3, T, Q> &v) {
-
1432  return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);
-
1433  }
-
1434 
-
1435  template<typename T, qualifier Q>
-
1436  GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<4, T, Q> &v) {
-
1437  return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);
-
1438  }
-
1439 
-
1440  // yxzz
-
1441  template<typename T, qualifier Q>
-
1442  GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<3, T, Q> &v) {
-
1443  return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);
-
1444  }
-
1445 
-
1446  template<typename T, qualifier Q>
-
1447  GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<4, T, Q> &v) {
-
1448  return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);
-
1449  }
-
1450 
-
1451  // yxzw
-
1452  template<typename T, qualifier Q>
-
1453  GLM_INLINE glm::vec<4, T, Q> yxzw(const glm::vec<4, T, Q> &v) {
-
1454  return glm::vec<4, T, Q>(v.y, v.x, v.z, v.w);
-
1455  }
-
1456 
-
1457  // yxwx
-
1458  template<typename T, qualifier Q>
-
1459  GLM_INLINE glm::vec<4, T, Q> yxwx(const glm::vec<4, T, Q> &v) {
-
1460  return glm::vec<4, T, Q>(v.y, v.x, v.w, v.x);
-
1461  }
-
1462 
-
1463  // yxwy
-
1464  template<typename T, qualifier Q>
-
1465  GLM_INLINE glm::vec<4, T, Q> yxwy(const glm::vec<4, T, Q> &v) {
-
1466  return glm::vec<4, T, Q>(v.y, v.x, v.w, v.y);
-
1467  }
-
1468 
-
1469  // yxwz
-
1470  template<typename T, qualifier Q>
-
1471  GLM_INLINE glm::vec<4, T, Q> yxwz(const glm::vec<4, T, Q> &v) {
-
1472  return glm::vec<4, T, Q>(v.y, v.x, v.w, v.z);
-
1473  }
-
1474 
-
1475  // yxww
-
1476  template<typename T, qualifier Q>
-
1477  GLM_INLINE glm::vec<4, T, Q> yxww(const glm::vec<4, T, Q> &v) {
-
1478  return glm::vec<4, T, Q>(v.y, v.x, v.w, v.w);
-
1479  }
-
1480 
-
1481  // yyxx
-
1482  template<typename T, qualifier Q>
-
1483  GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<2, T, Q> &v) {
-
1484  return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
-
1485  }
-
1486 
-
1487  template<typename T, qualifier Q>
-
1488  GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<3, T, Q> &v) {
-
1489  return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
-
1490  }
-
1491 
-
1492  template<typename T, qualifier Q>
-
1493  GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<4, T, Q> &v) {
-
1494  return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
-
1495  }
-
1496 
-
1497  // yyxy
-
1498  template<typename T, qualifier Q>
-
1499  GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<2, T, Q> &v) {
-
1500  return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
-
1501  }
-
1502 
-
1503  template<typename T, qualifier Q>
-
1504  GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<3, T, Q> &v) {
-
1505  return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
-
1506  }
-
1507 
-
1508  template<typename T, qualifier Q>
-
1509  GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<4, T, Q> &v) {
-
1510  return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
-
1511  }
-
1512 
-
1513  // yyxz
-
1514  template<typename T, qualifier Q>
-
1515  GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<3, T, Q> &v) {
-
1516  return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);
-
1517  }
-
1518 
-
1519  template<typename T, qualifier Q>
-
1520  GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<4, T, Q> &v) {
-
1521  return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);
-
1522  }
-
1523 
-
1524  // yyxw
-
1525  template<typename T, qualifier Q>
-
1526  GLM_INLINE glm::vec<4, T, Q> yyxw(const glm::vec<4, T, Q> &v) {
-
1527  return glm::vec<4, T, Q>(v.y, v.y, v.x, v.w);
-
1528  }
-
1529 
-
1530  // yyyx
-
1531  template<typename T, qualifier Q>
-
1532  GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<2, T, Q> &v) {
-
1533  return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
-
1534  }
-
1535 
-
1536  template<typename T, qualifier Q>
-
1537  GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<3, T, Q> &v) {
-
1538  return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
-
1539  }
-
1540 
-
1541  template<typename T, qualifier Q>
-
1542  GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<4, T, Q> &v) {
-
1543  return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
-
1544  }
-
1545 
-
1546  // yyyy
-
1547  template<typename T, qualifier Q>
-
1548  GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<2, T, Q> &v) {
-
1549  return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
-
1550  }
-
1551 
-
1552  template<typename T, qualifier Q>
-
1553  GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<3, T, Q> &v) {
-
1554  return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
-
1555  }
-
1556 
-
1557  template<typename T, qualifier Q>
-
1558  GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<4, T, Q> &v) {
-
1559  return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
-
1560  }
-
1561 
-
1562  // yyyz
-
1563  template<typename T, qualifier Q>
-
1564  GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<3, T, Q> &v) {
-
1565  return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);
-
1566  }
-
1567 
-
1568  template<typename T, qualifier Q>
-
1569  GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<4, T, Q> &v) {
-
1570  return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);
-
1571  }
-
1572 
-
1573  // yyyw
-
1574  template<typename T, qualifier Q>
-
1575  GLM_INLINE glm::vec<4, T, Q> yyyw(const glm::vec<4, T, Q> &v) {
-
1576  return glm::vec<4, T, Q>(v.y, v.y, v.y, v.w);
-
1577  }
-
1578 
-
1579  // yyzx
-
1580  template<typename T, qualifier Q>
-
1581  GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<3, T, Q> &v) {
-
1582  return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);
-
1583  }
-
1584 
-
1585  template<typename T, qualifier Q>
-
1586  GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<4, T, Q> &v) {
-
1587  return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);
-
1588  }
-
1589 
-
1590  // yyzy
-
1591  template<typename T, qualifier Q>
-
1592  GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<3, T, Q> &v) {
-
1593  return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);
-
1594  }
-
1595 
-
1596  template<typename T, qualifier Q>
-
1597  GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<4, T, Q> &v) {
-
1598  return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);
-
1599  }
-
1600 
-
1601  // yyzz
-
1602  template<typename T, qualifier Q>
-
1603  GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<3, T, Q> &v) {
-
1604  return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);
-
1605  }
-
1606 
-
1607  template<typename T, qualifier Q>
-
1608  GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<4, T, Q> &v) {
-
1609  return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);
-
1610  }
-
1611 
-
1612  // yyzw
-
1613  template<typename T, qualifier Q>
-
1614  GLM_INLINE glm::vec<4, T, Q> yyzw(const glm::vec<4, T, Q> &v) {
-
1615  return glm::vec<4, T, Q>(v.y, v.y, v.z, v.w);
-
1616  }
-
1617 
-
1618  // yywx
-
1619  template<typename T, qualifier Q>
-
1620  GLM_INLINE glm::vec<4, T, Q> yywx(const glm::vec<4, T, Q> &v) {
-
1621  return glm::vec<4, T, Q>(v.y, v.y, v.w, v.x);
-
1622  }
-
1623 
-
1624  // yywy
-
1625  template<typename T, qualifier Q>
-
1626  GLM_INLINE glm::vec<4, T, Q> yywy(const glm::vec<4, T, Q> &v) {
-
1627  return glm::vec<4, T, Q>(v.y, v.y, v.w, v.y);
-
1628  }
-
1629 
-
1630  // yywz
-
1631  template<typename T, qualifier Q>
-
1632  GLM_INLINE glm::vec<4, T, Q> yywz(const glm::vec<4, T, Q> &v) {
-
1633  return glm::vec<4, T, Q>(v.y, v.y, v.w, v.z);
-
1634  }
-
1635 
-
1636  // yyww
-
1637  template<typename T, qualifier Q>
-
1638  GLM_INLINE glm::vec<4, T, Q> yyww(const glm::vec<4, T, Q> &v) {
-
1639  return glm::vec<4, T, Q>(v.y, v.y, v.w, v.w);
-
1640  }
-
1641 
-
1642  // yzxx
-
1643  template<typename T, qualifier Q>
-
1644  GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<3, T, Q> &v) {
-
1645  return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);
-
1646  }
-
1647 
-
1648  template<typename T, qualifier Q>
-
1649  GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<4, T, Q> &v) {
-
1650  return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);
-
1651  }
-
1652 
-
1653  // yzxy
-
1654  template<typename T, qualifier Q>
-
1655  GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<3, T, Q> &v) {
-
1656  return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);
-
1657  }
-
1658 
-
1659  template<typename T, qualifier Q>
-
1660  GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<4, T, Q> &v) {
-
1661  return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);
-
1662  }
-
1663 
-
1664  // yzxz
-
1665  template<typename T, qualifier Q>
-
1666  GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<3, T, Q> &v) {
-
1667  return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);
-
1668  }
-
1669 
-
1670  template<typename T, qualifier Q>
-
1671  GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<4, T, Q> &v) {
-
1672  return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);
-
1673  }
-
1674 
-
1675  // yzxw
-
1676  template<typename T, qualifier Q>
-
1677  GLM_INLINE glm::vec<4, T, Q> yzxw(const glm::vec<4, T, Q> &v) {
-
1678  return glm::vec<4, T, Q>(v.y, v.z, v.x, v.w);
-
1679  }
-
1680 
-
1681  // yzyx
-
1682  template<typename T, qualifier Q>
-
1683  GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<3, T, Q> &v) {
-
1684  return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);
-
1685  }
-
1686 
-
1687  template<typename T, qualifier Q>
-
1688  GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<4, T, Q> &v) {
-
1689  return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);
-
1690  }
-
1691 
-
1692  // yzyy
-
1693  template<typename T, qualifier Q>
-
1694  GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<3, T, Q> &v) {
-
1695  return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);
-
1696  }
-
1697 
-
1698  template<typename T, qualifier Q>
-
1699  GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<4, T, Q> &v) {
-
1700  return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);
-
1701  }
-
1702 
-
1703  // yzyz
-
1704  template<typename T, qualifier Q>
-
1705  GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<3, T, Q> &v) {
-
1706  return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);
-
1707  }
-
1708 
-
1709  template<typename T, qualifier Q>
-
1710  GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<4, T, Q> &v) {
-
1711  return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);
-
1712  }
-
1713 
-
1714  // yzyw
-
1715  template<typename T, qualifier Q>
-
1716  GLM_INLINE glm::vec<4, T, Q> yzyw(const glm::vec<4, T, Q> &v) {
-
1717  return glm::vec<4, T, Q>(v.y, v.z, v.y, v.w);
-
1718  }
-
1719 
-
1720  // yzzx
-
1721  template<typename T, qualifier Q>
-
1722  GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<3, T, Q> &v) {
-
1723  return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);
-
1724  }
-
1725 
-
1726  template<typename T, qualifier Q>
-
1727  GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<4, T, Q> &v) {
-
1728  return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);
-
1729  }
-
1730 
-
1731  // yzzy
-
1732  template<typename T, qualifier Q>
-
1733  GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<3, T, Q> &v) {
-
1734  return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);
-
1735  }
-
1736 
-
1737  template<typename T, qualifier Q>
-
1738  GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<4, T, Q> &v) {
-
1739  return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);
-
1740  }
-
1741 
-
1742  // yzzz
-
1743  template<typename T, qualifier Q>
-
1744  GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<3, T, Q> &v) {
-
1745  return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);
-
1746  }
-
1747 
-
1748  template<typename T, qualifier Q>
-
1749  GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<4, T, Q> &v) {
-
1750  return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);
-
1751  }
-
1752 
-
1753  // yzzw
-
1754  template<typename T, qualifier Q>
-
1755  GLM_INLINE glm::vec<4, T, Q> yzzw(const glm::vec<4, T, Q> &v) {
-
1756  return glm::vec<4, T, Q>(v.y, v.z, v.z, v.w);
-
1757  }
-
1758 
-
1759  // yzwx
-
1760  template<typename T, qualifier Q>
-
1761  GLM_INLINE glm::vec<4, T, Q> yzwx(const glm::vec<4, T, Q> &v) {
-
1762  return glm::vec<4, T, Q>(v.y, v.z, v.w, v.x);
-
1763  }
-
1764 
-
1765  // yzwy
-
1766  template<typename T, qualifier Q>
-
1767  GLM_INLINE glm::vec<4, T, Q> yzwy(const glm::vec<4, T, Q> &v) {
-
1768  return glm::vec<4, T, Q>(v.y, v.z, v.w, v.y);
-
1769  }
-
1770 
-
1771  // yzwz
-
1772  template<typename T, qualifier Q>
-
1773  GLM_INLINE glm::vec<4, T, Q> yzwz(const glm::vec<4, T, Q> &v) {
-
1774  return glm::vec<4, T, Q>(v.y, v.z, v.w, v.z);
-
1775  }
-
1776 
-
1777  // yzww
-
1778  template<typename T, qualifier Q>
-
1779  GLM_INLINE glm::vec<4, T, Q> yzww(const glm::vec<4, T, Q> &v) {
-
1780  return glm::vec<4, T, Q>(v.y, v.z, v.w, v.w);
-
1781  }
-
1782 
-
1783  // ywxx
-
1784  template<typename T, qualifier Q>
-
1785  GLM_INLINE glm::vec<4, T, Q> ywxx(const glm::vec<4, T, Q> &v) {
-
1786  return glm::vec<4, T, Q>(v.y, v.w, v.x, v.x);
-
1787  }
-
1788 
-
1789  // ywxy
-
1790  template<typename T, qualifier Q>
-
1791  GLM_INLINE glm::vec<4, T, Q> ywxy(const glm::vec<4, T, Q> &v) {
-
1792  return glm::vec<4, T, Q>(v.y, v.w, v.x, v.y);
-
1793  }
-
1794 
-
1795  // ywxz
-
1796  template<typename T, qualifier Q>
-
1797  GLM_INLINE glm::vec<4, T, Q> ywxz(const glm::vec<4, T, Q> &v) {
-
1798  return glm::vec<4, T, Q>(v.y, v.w, v.x, v.z);
-
1799  }
-
1800 
-
1801  // ywxw
-
1802  template<typename T, qualifier Q>
-
1803  GLM_INLINE glm::vec<4, T, Q> ywxw(const glm::vec<4, T, Q> &v) {
-
1804  return glm::vec<4, T, Q>(v.y, v.w, v.x, v.w);
-
1805  }
-
1806 
-
1807  // ywyx
-
1808  template<typename T, qualifier Q>
-
1809  GLM_INLINE glm::vec<4, T, Q> ywyx(const glm::vec<4, T, Q> &v) {
-
1810  return glm::vec<4, T, Q>(v.y, v.w, v.y, v.x);
-
1811  }
-
1812 
-
1813  // ywyy
-
1814  template<typename T, qualifier Q>
-
1815  GLM_INLINE glm::vec<4, T, Q> ywyy(const glm::vec<4, T, Q> &v) {
-
1816  return glm::vec<4, T, Q>(v.y, v.w, v.y, v.y);
-
1817  }
-
1818 
-
1819  // ywyz
-
1820  template<typename T, qualifier Q>
-
1821  GLM_INLINE glm::vec<4, T, Q> ywyz(const glm::vec<4, T, Q> &v) {
-
1822  return glm::vec<4, T, Q>(v.y, v.w, v.y, v.z);
-
1823  }
-
1824 
-
1825  // ywyw
-
1826  template<typename T, qualifier Q>
-
1827  GLM_INLINE glm::vec<4, T, Q> ywyw(const glm::vec<4, T, Q> &v) {
-
1828  return glm::vec<4, T, Q>(v.y, v.w, v.y, v.w);
-
1829  }
-
1830 
-
1831  // ywzx
-
1832  template<typename T, qualifier Q>
-
1833  GLM_INLINE glm::vec<4, T, Q> ywzx(const glm::vec<4, T, Q> &v) {
-
1834  return glm::vec<4, T, Q>(v.y, v.w, v.z, v.x);
-
1835  }
-
1836 
-
1837  // ywzy
-
1838  template<typename T, qualifier Q>
-
1839  GLM_INLINE glm::vec<4, T, Q> ywzy(const glm::vec<4, T, Q> &v) {
-
1840  return glm::vec<4, T, Q>(v.y, v.w, v.z, v.y);
-
1841  }
-
1842 
-
1843  // ywzz
-
1844  template<typename T, qualifier Q>
-
1845  GLM_INLINE glm::vec<4, T, Q> ywzz(const glm::vec<4, T, Q> &v) {
-
1846  return glm::vec<4, T, Q>(v.y, v.w, v.z, v.z);
-
1847  }
-
1848 
-
1849  // ywzw
-
1850  template<typename T, qualifier Q>
-
1851  GLM_INLINE glm::vec<4, T, Q> ywzw(const glm::vec<4, T, Q> &v) {
-
1852  return glm::vec<4, T, Q>(v.y, v.w, v.z, v.w);
-
1853  }
-
1854 
-
1855  // ywwx
-
1856  template<typename T, qualifier Q>
-
1857  GLM_INLINE glm::vec<4, T, Q> ywwx(const glm::vec<4, T, Q> &v) {
-
1858  return glm::vec<4, T, Q>(v.y, v.w, v.w, v.x);
-
1859  }
-
1860 
-
1861  // ywwy
-
1862  template<typename T, qualifier Q>
-
1863  GLM_INLINE glm::vec<4, T, Q> ywwy(const glm::vec<4, T, Q> &v) {
-
1864  return glm::vec<4, T, Q>(v.y, v.w, v.w, v.y);
-
1865  }
-
1866 
-
1867  // ywwz
-
1868  template<typename T, qualifier Q>
-
1869  GLM_INLINE glm::vec<4, T, Q> ywwz(const glm::vec<4, T, Q> &v) {
-
1870  return glm::vec<4, T, Q>(v.y, v.w, v.w, v.z);
-
1871  }
-
1872 
-
1873  // ywww
-
1874  template<typename T, qualifier Q>
-
1875  GLM_INLINE glm::vec<4, T, Q> ywww(const glm::vec<4, T, Q> &v) {
-
1876  return glm::vec<4, T, Q>(v.y, v.w, v.w, v.w);
-
1877  }
-
1878 
-
1879  // zxxx
-
1880  template<typename T, qualifier Q>
-
1881  GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<3, T, Q> &v) {
-
1882  return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);
-
1883  }
-
1884 
-
1885  template<typename T, qualifier Q>
-
1886  GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<4, T, Q> &v) {
-
1887  return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);
-
1888  }
-
1889 
-
1890  // zxxy
-
1891  template<typename T, qualifier Q>
-
1892  GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<3, T, Q> &v) {
-
1893  return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);
-
1894  }
-
1895 
-
1896  template<typename T, qualifier Q>
-
1897  GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<4, T, Q> &v) {
-
1898  return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);
-
1899  }
-
1900 
-
1901  // zxxz
-
1902  template<typename T, qualifier Q>
-
1903  GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<3, T, Q> &v) {
-
1904  return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);
-
1905  }
-
1906 
-
1907  template<typename T, qualifier Q>
-
1908  GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<4, T, Q> &v) {
-
1909  return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);
-
1910  }
-
1911 
-
1912  // zxxw
-
1913  template<typename T, qualifier Q>
-
1914  GLM_INLINE glm::vec<4, T, Q> zxxw(const glm::vec<4, T, Q> &v) {
-
1915  return glm::vec<4, T, Q>(v.z, v.x, v.x, v.w);
-
1916  }
-
1917 
-
1918  // zxyx
-
1919  template<typename T, qualifier Q>
-
1920  GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<3, T, Q> &v) {
-
1921  return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);
-
1922  }
-
1923 
-
1924  template<typename T, qualifier Q>
-
1925  GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<4, T, Q> &v) {
-
1926  return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);
-
1927  }
-
1928 
-
1929  // zxyy
-
1930  template<typename T, qualifier Q>
-
1931  GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<3, T, Q> &v) {
-
1932  return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);
-
1933  }
-
1934 
-
1935  template<typename T, qualifier Q>
-
1936  GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<4, T, Q> &v) {
-
1937  return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);
-
1938  }
-
1939 
-
1940  // zxyz
-
1941  template<typename T, qualifier Q>
-
1942  GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<3, T, Q> &v) {
-
1943  return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);
-
1944  }
-
1945 
-
1946  template<typename T, qualifier Q>
-
1947  GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<4, T, Q> &v) {
-
1948  return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);
-
1949  }
-
1950 
-
1951  // zxyw
-
1952  template<typename T, qualifier Q>
-
1953  GLM_INLINE glm::vec<4, T, Q> zxyw(const glm::vec<4, T, Q> &v) {
-
1954  return glm::vec<4, T, Q>(v.z, v.x, v.y, v.w);
-
1955  }
-
1956 
-
1957  // zxzx
-
1958  template<typename T, qualifier Q>
-
1959  GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<3, T, Q> &v) {
-
1960  return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);
-
1961  }
-
1962 
-
1963  template<typename T, qualifier Q>
-
1964  GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<4, T, Q> &v) {
-
1965  return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);
-
1966  }
-
1967 
-
1968  // zxzy
-
1969  template<typename T, qualifier Q>
-
1970  GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<3, T, Q> &v) {
-
1971  return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);
-
1972  }
-
1973 
-
1974  template<typename T, qualifier Q>
-
1975  GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<4, T, Q> &v) {
-
1976  return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);
-
1977  }
-
1978 
-
1979  // zxzz
-
1980  template<typename T, qualifier Q>
-
1981  GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<3, T, Q> &v) {
-
1982  return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);
-
1983  }
-
1984 
-
1985  template<typename T, qualifier Q>
-
1986  GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<4, T, Q> &v) {
-
1987  return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);
-
1988  }
-
1989 
-
1990  // zxzw
-
1991  template<typename T, qualifier Q>
-
1992  GLM_INLINE glm::vec<4, T, Q> zxzw(const glm::vec<4, T, Q> &v) {
-
1993  return glm::vec<4, T, Q>(v.z, v.x, v.z, v.w);
-
1994  }
-
1995 
-
1996  // zxwx
-
1997  template<typename T, qualifier Q>
-
1998  GLM_INLINE glm::vec<4, T, Q> zxwx(const glm::vec<4, T, Q> &v) {
-
1999  return glm::vec<4, T, Q>(v.z, v.x, v.w, v.x);
-
2000  }
-
2001 
-
2002  // zxwy
-
2003  template<typename T, qualifier Q>
-
2004  GLM_INLINE glm::vec<4, T, Q> zxwy(const glm::vec<4, T, Q> &v) {
-
2005  return glm::vec<4, T, Q>(v.z, v.x, v.w, v.y);
-
2006  }
-
2007 
-
2008  // zxwz
-
2009  template<typename T, qualifier Q>
-
2010  GLM_INLINE glm::vec<4, T, Q> zxwz(const glm::vec<4, T, Q> &v) {
-
2011  return glm::vec<4, T, Q>(v.z, v.x, v.w, v.z);
-
2012  }
-
2013 
-
2014  // zxww
-
2015  template<typename T, qualifier Q>
-
2016  GLM_INLINE glm::vec<4, T, Q> zxww(const glm::vec<4, T, Q> &v) {
-
2017  return glm::vec<4, T, Q>(v.z, v.x, v.w, v.w);
-
2018  }
-
2019 
-
2020  // zyxx
-
2021  template<typename T, qualifier Q>
-
2022  GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<3, T, Q> &v) {
-
2023  return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);
-
2024  }
-
2025 
-
2026  template<typename T, qualifier Q>
-
2027  GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<4, T, Q> &v) {
-
2028  return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);
-
2029  }
-
2030 
-
2031  // zyxy
-
2032  template<typename T, qualifier Q>
-
2033  GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<3, T, Q> &v) {
-
2034  return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);
-
2035  }
-
2036 
-
2037  template<typename T, qualifier Q>
-
2038  GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<4, T, Q> &v) {
-
2039  return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);
-
2040  }
-
2041 
-
2042  // zyxz
-
2043  template<typename T, qualifier Q>
-
2044  GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<3, T, Q> &v) {
-
2045  return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);
-
2046  }
-
2047 
-
2048  template<typename T, qualifier Q>
-
2049  GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<4, T, Q> &v) {
-
2050  return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);
-
2051  }
-
2052 
-
2053  // zyxw
-
2054  template<typename T, qualifier Q>
-
2055  GLM_INLINE glm::vec<4, T, Q> zyxw(const glm::vec<4, T, Q> &v) {
-
2056  return glm::vec<4, T, Q>(v.z, v.y, v.x, v.w);
-
2057  }
-
2058 
-
2059  // zyyx
-
2060  template<typename T, qualifier Q>
-
2061  GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<3, T, Q> &v) {
-
2062  return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);
-
2063  }
-
2064 
-
2065  template<typename T, qualifier Q>
-
2066  GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<4, T, Q> &v) {
-
2067  return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);
-
2068  }
-
2069 
-
2070  // zyyy
-
2071  template<typename T, qualifier Q>
-
2072  GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<3, T, Q> &v) {
-
2073  return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);
-
2074  }
-
2075 
-
2076  template<typename T, qualifier Q>
-
2077  GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<4, T, Q> &v) {
-
2078  return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);
-
2079  }
-
2080 
-
2081  // zyyz
-
2082  template<typename T, qualifier Q>
-
2083  GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<3, T, Q> &v) {
-
2084  return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);
-
2085  }
-
2086 
-
2087  template<typename T, qualifier Q>
-
2088  GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<4, T, Q> &v) {
-
2089  return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);
-
2090  }
-
2091 
-
2092  // zyyw
-
2093  template<typename T, qualifier Q>
-
2094  GLM_INLINE glm::vec<4, T, Q> zyyw(const glm::vec<4, T, Q> &v) {
-
2095  return glm::vec<4, T, Q>(v.z, v.y, v.y, v.w);
-
2096  }
-
2097 
-
2098  // zyzx
-
2099  template<typename T, qualifier Q>
-
2100  GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<3, T, Q> &v) {
-
2101  return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);
-
2102  }
-
2103 
-
2104  template<typename T, qualifier Q>
-
2105  GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<4, T, Q> &v) {
-
2106  return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);
-
2107  }
-
2108 
-
2109  // zyzy
-
2110  template<typename T, qualifier Q>
-
2111  GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<3, T, Q> &v) {
-
2112  return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);
-
2113  }
-
2114 
-
2115  template<typename T, qualifier Q>
-
2116  GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<4, T, Q> &v) {
-
2117  return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);
-
2118  }
-
2119 
-
2120  // zyzz
-
2121  template<typename T, qualifier Q>
-
2122  GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<3, T, Q> &v) {
-
2123  return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);
-
2124  }
-
2125 
-
2126  template<typename T, qualifier Q>
-
2127  GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<4, T, Q> &v) {
-
2128  return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);
-
2129  }
-
2130 
-
2131  // zyzw
-
2132  template<typename T, qualifier Q>
-
2133  GLM_INLINE glm::vec<4, T, Q> zyzw(const glm::vec<4, T, Q> &v) {
-
2134  return glm::vec<4, T, Q>(v.z, v.y, v.z, v.w);
-
2135  }
-
2136 
-
2137  // zywx
-
2138  template<typename T, qualifier Q>
-
2139  GLM_INLINE glm::vec<4, T, Q> zywx(const glm::vec<4, T, Q> &v) {
-
2140  return glm::vec<4, T, Q>(v.z, v.y, v.w, v.x);
-
2141  }
-
2142 
-
2143  // zywy
-
2144  template<typename T, qualifier Q>
-
2145  GLM_INLINE glm::vec<4, T, Q> zywy(const glm::vec<4, T, Q> &v) {
-
2146  return glm::vec<4, T, Q>(v.z, v.y, v.w, v.y);
-
2147  }
-
2148 
-
2149  // zywz
-
2150  template<typename T, qualifier Q>
-
2151  GLM_INLINE glm::vec<4, T, Q> zywz(const glm::vec<4, T, Q> &v) {
-
2152  return glm::vec<4, T, Q>(v.z, v.y, v.w, v.z);
-
2153  }
-
2154 
-
2155  // zyww
-
2156  template<typename T, qualifier Q>
-
2157  GLM_INLINE glm::vec<4, T, Q> zyww(const glm::vec<4, T, Q> &v) {
-
2158  return glm::vec<4, T, Q>(v.z, v.y, v.w, v.w);
-
2159  }
-
2160 
-
2161  // zzxx
-
2162  template<typename T, qualifier Q>
-
2163  GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<3, T, Q> &v) {
-
2164  return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);
-
2165  }
-
2166 
-
2167  template<typename T, qualifier Q>
-
2168  GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<4, T, Q> &v) {
-
2169  return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);
-
2170  }
-
2171 
-
2172  // zzxy
-
2173  template<typename T, qualifier Q>
-
2174  GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<3, T, Q> &v) {
-
2175  return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);
-
2176  }
-
2177 
-
2178  template<typename T, qualifier Q>
-
2179  GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<4, T, Q> &v) {
-
2180  return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);
-
2181  }
-
2182 
-
2183  // zzxz
-
2184  template<typename T, qualifier Q>
-
2185  GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<3, T, Q> &v) {
-
2186  return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);
-
2187  }
-
2188 
-
2189  template<typename T, qualifier Q>
-
2190  GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<4, T, Q> &v) {
-
2191  return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);
-
2192  }
-
2193 
-
2194  // zzxw
-
2195  template<typename T, qualifier Q>
-
2196  GLM_INLINE glm::vec<4, T, Q> zzxw(const glm::vec<4, T, Q> &v) {
-
2197  return glm::vec<4, T, Q>(v.z, v.z, v.x, v.w);
-
2198  }
-
2199 
-
2200  // zzyx
-
2201  template<typename T, qualifier Q>
-
2202  GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<3, T, Q> &v) {
-
2203  return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);
-
2204  }
-
2205 
-
2206  template<typename T, qualifier Q>
-
2207  GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<4, T, Q> &v) {
-
2208  return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);
-
2209  }
-
2210 
-
2211  // zzyy
-
2212  template<typename T, qualifier Q>
-
2213  GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<3, T, Q> &v) {
-
2214  return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);
-
2215  }
-
2216 
-
2217  template<typename T, qualifier Q>
-
2218  GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<4, T, Q> &v) {
-
2219  return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);
-
2220  }
-
2221 
-
2222  // zzyz
-
2223  template<typename T, qualifier Q>
-
2224  GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<3, T, Q> &v) {
-
2225  return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);
-
2226  }
-
2227 
-
2228  template<typename T, qualifier Q>
-
2229  GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<4, T, Q> &v) {
-
2230  return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);
-
2231  }
-
2232 
-
2233  // zzyw
-
2234  template<typename T, qualifier Q>
-
2235  GLM_INLINE glm::vec<4, T, Q> zzyw(const glm::vec<4, T, Q> &v) {
-
2236  return glm::vec<4, T, Q>(v.z, v.z, v.y, v.w);
-
2237  }
-
2238 
-
2239  // zzzx
-
2240  template<typename T, qualifier Q>
-
2241  GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<3, T, Q> &v) {
-
2242  return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);
-
2243  }
-
2244 
-
2245  template<typename T, qualifier Q>
-
2246  GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<4, T, Q> &v) {
-
2247  return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);
-
2248  }
-
2249 
-
2250  // zzzy
-
2251  template<typename T, qualifier Q>
-
2252  GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<3, T, Q> &v) {
-
2253  return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);
-
2254  }
-
2255 
-
2256  template<typename T, qualifier Q>
-
2257  GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<4, T, Q> &v) {
-
2258  return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);
-
2259  }
-
2260 
-
2261  // zzzz
-
2262  template<typename T, qualifier Q>
-
2263  GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<3, T, Q> &v) {
-
2264  return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);
-
2265  }
-
2266 
-
2267  template<typename T, qualifier Q>
-
2268  GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<4, T, Q> &v) {
-
2269  return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);
-
2270  }
-
2271 
-
2272  // zzzw
-
2273  template<typename T, qualifier Q>
-
2274  GLM_INLINE glm::vec<4, T, Q> zzzw(const glm::vec<4, T, Q> &v) {
-
2275  return glm::vec<4, T, Q>(v.z, v.z, v.z, v.w);
-
2276  }
-
2277 
-
2278  // zzwx
-
2279  template<typename T, qualifier Q>
-
2280  GLM_INLINE glm::vec<4, T, Q> zzwx(const glm::vec<4, T, Q> &v) {
-
2281  return glm::vec<4, T, Q>(v.z, v.z, v.w, v.x);
-
2282  }
-
2283 
-
2284  // zzwy
-
2285  template<typename T, qualifier Q>
-
2286  GLM_INLINE glm::vec<4, T, Q> zzwy(const glm::vec<4, T, Q> &v) {
-
2287  return glm::vec<4, T, Q>(v.z, v.z, v.w, v.y);
-
2288  }
-
2289 
-
2290  // zzwz
-
2291  template<typename T, qualifier Q>
-
2292  GLM_INLINE glm::vec<4, T, Q> zzwz(const glm::vec<4, T, Q> &v) {
-
2293  return glm::vec<4, T, Q>(v.z, v.z, v.w, v.z);
-
2294  }
-
2295 
-
2296  // zzww
-
2297  template<typename T, qualifier Q>
-
2298  GLM_INLINE glm::vec<4, T, Q> zzww(const glm::vec<4, T, Q> &v) {
-
2299  return glm::vec<4, T, Q>(v.z, v.z, v.w, v.w);
-
2300  }
-
2301 
-
2302  // zwxx
-
2303  template<typename T, qualifier Q>
-
2304  GLM_INLINE glm::vec<4, T, Q> zwxx(const glm::vec<4, T, Q> &v) {
-
2305  return glm::vec<4, T, Q>(v.z, v.w, v.x, v.x);
-
2306  }
-
2307 
-
2308  // zwxy
-
2309  template<typename T, qualifier Q>
-
2310  GLM_INLINE glm::vec<4, T, Q> zwxy(const glm::vec<4, T, Q> &v) {
-
2311  return glm::vec<4, T, Q>(v.z, v.w, v.x, v.y);
-
2312  }
-
2313 
-
2314  // zwxz
-
2315  template<typename T, qualifier Q>
-
2316  GLM_INLINE glm::vec<4, T, Q> zwxz(const glm::vec<4, T, Q> &v) {
-
2317  return glm::vec<4, T, Q>(v.z, v.w, v.x, v.z);
-
2318  }
-
2319 
-
2320  // zwxw
-
2321  template<typename T, qualifier Q>
-
2322  GLM_INLINE glm::vec<4, T, Q> zwxw(const glm::vec<4, T, Q> &v) {
-
2323  return glm::vec<4, T, Q>(v.z, v.w, v.x, v.w);
-
2324  }
-
2325 
-
2326  // zwyx
-
2327  template<typename T, qualifier Q>
-
2328  GLM_INLINE glm::vec<4, T, Q> zwyx(const glm::vec<4, T, Q> &v) {
-
2329  return glm::vec<4, T, Q>(v.z, v.w, v.y, v.x);
-
2330  }
-
2331 
-
2332  // zwyy
-
2333  template<typename T, qualifier Q>
-
2334  GLM_INLINE glm::vec<4, T, Q> zwyy(const glm::vec<4, T, Q> &v) {
-
2335  return glm::vec<4, T, Q>(v.z, v.w, v.y, v.y);
-
2336  }
-
2337 
-
2338  // zwyz
-
2339  template<typename T, qualifier Q>
-
2340  GLM_INLINE glm::vec<4, T, Q> zwyz(const glm::vec<4, T, Q> &v) {
-
2341  return glm::vec<4, T, Q>(v.z, v.w, v.y, v.z);
-
2342  }
-
2343 
-
2344  // zwyw
-
2345  template<typename T, qualifier Q>
-
2346  GLM_INLINE glm::vec<4, T, Q> zwyw(const glm::vec<4, T, Q> &v) {
-
2347  return glm::vec<4, T, Q>(v.z, v.w, v.y, v.w);
-
2348  }
-
2349 
-
2350  // zwzx
-
2351  template<typename T, qualifier Q>
-
2352  GLM_INLINE glm::vec<4, T, Q> zwzx(const glm::vec<4, T, Q> &v) {
-
2353  return glm::vec<4, T, Q>(v.z, v.w, v.z, v.x);
-
2354  }
-
2355 
-
2356  // zwzy
-
2357  template<typename T, qualifier Q>
-
2358  GLM_INLINE glm::vec<4, T, Q> zwzy(const glm::vec<4, T, Q> &v) {
-
2359  return glm::vec<4, T, Q>(v.z, v.w, v.z, v.y);
-
2360  }
-
2361 
-
2362  // zwzz
-
2363  template<typename T, qualifier Q>
-
2364  GLM_INLINE glm::vec<4, T, Q> zwzz(const glm::vec<4, T, Q> &v) {
-
2365  return glm::vec<4, T, Q>(v.z, v.w, v.z, v.z);
-
2366  }
-
2367 
-
2368  // zwzw
-
2369  template<typename T, qualifier Q>
-
2370  GLM_INLINE glm::vec<4, T, Q> zwzw(const glm::vec<4, T, Q> &v) {
-
2371  return glm::vec<4, T, Q>(v.z, v.w, v.z, v.w);
-
2372  }
-
2373 
-
2374  // zwwx
-
2375  template<typename T, qualifier Q>
-
2376  GLM_INLINE glm::vec<4, T, Q> zwwx(const glm::vec<4, T, Q> &v) {
-
2377  return glm::vec<4, T, Q>(v.z, v.w, v.w, v.x);
-
2378  }
-
2379 
-
2380  // zwwy
-
2381  template<typename T, qualifier Q>
-
2382  GLM_INLINE glm::vec<4, T, Q> zwwy(const glm::vec<4, T, Q> &v) {
-
2383  return glm::vec<4, T, Q>(v.z, v.w, v.w, v.y);
-
2384  }
-
2385 
-
2386  // zwwz
-
2387  template<typename T, qualifier Q>
-
2388  GLM_INLINE glm::vec<4, T, Q> zwwz(const glm::vec<4, T, Q> &v) {
-
2389  return glm::vec<4, T, Q>(v.z, v.w, v.w, v.z);
-
2390  }
-
2391 
-
2392  // zwww
-
2393  template<typename T, qualifier Q>
-
2394  GLM_INLINE glm::vec<4, T, Q> zwww(const glm::vec<4, T, Q> &v) {
-
2395  return glm::vec<4, T, Q>(v.z, v.w, v.w, v.w);
-
2396  }
-
2397 
-
2398  // wxxx
-
2399  template<typename T, qualifier Q>
-
2400  GLM_INLINE glm::vec<4, T, Q> wxxx(const glm::vec<4, T, Q> &v) {
-
2401  return glm::vec<4, T, Q>(v.w, v.x, v.x, v.x);
-
2402  }
-
2403 
-
2404  // wxxy
-
2405  template<typename T, qualifier Q>
-
2406  GLM_INLINE glm::vec<4, T, Q> wxxy(const glm::vec<4, T, Q> &v) {
-
2407  return glm::vec<4, T, Q>(v.w, v.x, v.x, v.y);
-
2408  }
-
2409 
-
2410  // wxxz
-
2411  template<typename T, qualifier Q>
-
2412  GLM_INLINE glm::vec<4, T, Q> wxxz(const glm::vec<4, T, Q> &v) {
-
2413  return glm::vec<4, T, Q>(v.w, v.x, v.x, v.z);
-
2414  }
-
2415 
-
2416  // wxxw
-
2417  template<typename T, qualifier Q>
-
2418  GLM_INLINE glm::vec<4, T, Q> wxxw(const glm::vec<4, T, Q> &v) {
-
2419  return glm::vec<4, T, Q>(v.w, v.x, v.x, v.w);
-
2420  }
-
2421 
-
2422  // wxyx
-
2423  template<typename T, qualifier Q>
-
2424  GLM_INLINE glm::vec<4, T, Q> wxyx(const glm::vec<4, T, Q> &v) {
-
2425  return glm::vec<4, T, Q>(v.w, v.x, v.y, v.x);
-
2426  }
-
2427 
-
2428  // wxyy
-
2429  template<typename T, qualifier Q>
-
2430  GLM_INLINE glm::vec<4, T, Q> wxyy(const glm::vec<4, T, Q> &v) {
-
2431  return glm::vec<4, T, Q>(v.w, v.x, v.y, v.y);
-
2432  }
-
2433 
-
2434  // wxyz
-
2435  template<typename T, qualifier Q>
-
2436  GLM_INLINE glm::vec<4, T, Q> wxyz(const glm::vec<4, T, Q> &v) {
-
2437  return glm::vec<4, T, Q>(v.w, v.x, v.y, v.z);
-
2438  }
-
2439 
-
2440  // wxyw
-
2441  template<typename T, qualifier Q>
-
2442  GLM_INLINE glm::vec<4, T, Q> wxyw(const glm::vec<4, T, Q> &v) {
-
2443  return glm::vec<4, T, Q>(v.w, v.x, v.y, v.w);
-
2444  }
-
2445 
-
2446  // wxzx
-
2447  template<typename T, qualifier Q>
-
2448  GLM_INLINE glm::vec<4, T, Q> wxzx(const glm::vec<4, T, Q> &v) {
-
2449  return glm::vec<4, T, Q>(v.w, v.x, v.z, v.x);
-
2450  }
-
2451 
-
2452  // wxzy
-
2453  template<typename T, qualifier Q>
-
2454  GLM_INLINE glm::vec<4, T, Q> wxzy(const glm::vec<4, T, Q> &v) {
-
2455  return glm::vec<4, T, Q>(v.w, v.x, v.z, v.y);
-
2456  }
-
2457 
-
2458  // wxzz
-
2459  template<typename T, qualifier Q>
-
2460  GLM_INLINE glm::vec<4, T, Q> wxzz(const glm::vec<4, T, Q> &v) {
-
2461  return glm::vec<4, T, Q>(v.w, v.x, v.z, v.z);
-
2462  }
-
2463 
-
2464  // wxzw
-
2465  template<typename T, qualifier Q>
-
2466  GLM_INLINE glm::vec<4, T, Q> wxzw(const glm::vec<4, T, Q> &v) {
-
2467  return glm::vec<4, T, Q>(v.w, v.x, v.z, v.w);
-
2468  }
-
2469 
-
2470  // wxwx
-
2471  template<typename T, qualifier Q>
-
2472  GLM_INLINE glm::vec<4, T, Q> wxwx(const glm::vec<4, T, Q> &v) {
-
2473  return glm::vec<4, T, Q>(v.w, v.x, v.w, v.x);
-
2474  }
-
2475 
-
2476  // wxwy
-
2477  template<typename T, qualifier Q>
-
2478  GLM_INLINE glm::vec<4, T, Q> wxwy(const glm::vec<4, T, Q> &v) {
-
2479  return glm::vec<4, T, Q>(v.w, v.x, v.w, v.y);
-
2480  }
-
2481 
-
2482  // wxwz
-
2483  template<typename T, qualifier Q>
-
2484  GLM_INLINE glm::vec<4, T, Q> wxwz(const glm::vec<4, T, Q> &v) {
-
2485  return glm::vec<4, T, Q>(v.w, v.x, v.w, v.z);
-
2486  }
-
2487 
-
2488  // wxww
-
2489  template<typename T, qualifier Q>
-
2490  GLM_INLINE glm::vec<4, T, Q> wxww(const glm::vec<4, T, Q> &v) {
-
2491  return glm::vec<4, T, Q>(v.w, v.x, v.w, v.w);
-
2492  }
-
2493 
-
2494  // wyxx
-
2495  template<typename T, qualifier Q>
-
2496  GLM_INLINE glm::vec<4, T, Q> wyxx(const glm::vec<4, T, Q> &v) {
-
2497  return glm::vec<4, T, Q>(v.w, v.y, v.x, v.x);
-
2498  }
-
2499 
-
2500  // wyxy
-
2501  template<typename T, qualifier Q>
-
2502  GLM_INLINE glm::vec<4, T, Q> wyxy(const glm::vec<4, T, Q> &v) {
-
2503  return glm::vec<4, T, Q>(v.w, v.y, v.x, v.y);
-
2504  }
-
2505 
-
2506  // wyxz
-
2507  template<typename T, qualifier Q>
-
2508  GLM_INLINE glm::vec<4, T, Q> wyxz(const glm::vec<4, T, Q> &v) {
-
2509  return glm::vec<4, T, Q>(v.w, v.y, v.x, v.z);
-
2510  }
-
2511 
-
2512  // wyxw
-
2513  template<typename T, qualifier Q>
-
2514  GLM_INLINE glm::vec<4, T, Q> wyxw(const glm::vec<4, T, Q> &v) {
-
2515  return glm::vec<4, T, Q>(v.w, v.y, v.x, v.w);
-
2516  }
-
2517 
-
2518  // wyyx
-
2519  template<typename T, qualifier Q>
-
2520  GLM_INLINE glm::vec<4, T, Q> wyyx(const glm::vec<4, T, Q> &v) {
-
2521  return glm::vec<4, T, Q>(v.w, v.y, v.y, v.x);
-
2522  }
-
2523 
-
2524  // wyyy
-
2525  template<typename T, qualifier Q>
-
2526  GLM_INLINE glm::vec<4, T, Q> wyyy(const glm::vec<4, T, Q> &v) {
-
2527  return glm::vec<4, T, Q>(v.w, v.y, v.y, v.y);
-
2528  }
-
2529 
-
2530  // wyyz
-
2531  template<typename T, qualifier Q>
-
2532  GLM_INLINE glm::vec<4, T, Q> wyyz(const glm::vec<4, T, Q> &v) {
-
2533  return glm::vec<4, T, Q>(v.w, v.y, v.y, v.z);
-
2534  }
-
2535 
-
2536  // wyyw
-
2537  template<typename T, qualifier Q>
-
2538  GLM_INLINE glm::vec<4, T, Q> wyyw(const glm::vec<4, T, Q> &v) {
-
2539  return glm::vec<4, T, Q>(v.w, v.y, v.y, v.w);
-
2540  }
-
2541 
-
2542  // wyzx
-
2543  template<typename T, qualifier Q>
-
2544  GLM_INLINE glm::vec<4, T, Q> wyzx(const glm::vec<4, T, Q> &v) {
-
2545  return glm::vec<4, T, Q>(v.w, v.y, v.z, v.x);
-
2546  }
-
2547 
-
2548  // wyzy
-
2549  template<typename T, qualifier Q>
-
2550  GLM_INLINE glm::vec<4, T, Q> wyzy(const glm::vec<4, T, Q> &v) {
-
2551  return glm::vec<4, T, Q>(v.w, v.y, v.z, v.y);
-
2552  }
-
2553 
-
2554  // wyzz
-
2555  template<typename T, qualifier Q>
-
2556  GLM_INLINE glm::vec<4, T, Q> wyzz(const glm::vec<4, T, Q> &v) {
-
2557  return glm::vec<4, T, Q>(v.w, v.y, v.z, v.z);
-
2558  }
-
2559 
-
2560  // wyzw
-
2561  template<typename T, qualifier Q>
-
2562  GLM_INLINE glm::vec<4, T, Q> wyzw(const glm::vec<4, T, Q> &v) {
-
2563  return glm::vec<4, T, Q>(v.w, v.y, v.z, v.w);
-
2564  }
-
2565 
-
2566  // wywx
-
2567  template<typename T, qualifier Q>
-
2568  GLM_INLINE glm::vec<4, T, Q> wywx(const glm::vec<4, T, Q> &v) {
-
2569  return glm::vec<4, T, Q>(v.w, v.y, v.w, v.x);
-
2570  }
-
2571 
-
2572  // wywy
-
2573  template<typename T, qualifier Q>
-
2574  GLM_INLINE glm::vec<4, T, Q> wywy(const glm::vec<4, T, Q> &v) {
-
2575  return glm::vec<4, T, Q>(v.w, v.y, v.w, v.y);
-
2576  }
-
2577 
-
2578  // wywz
-
2579  template<typename T, qualifier Q>
-
2580  GLM_INLINE glm::vec<4, T, Q> wywz(const glm::vec<4, T, Q> &v) {
-
2581  return glm::vec<4, T, Q>(v.w, v.y, v.w, v.z);
-
2582  }
-
2583 
-
2584  // wyww
-
2585  template<typename T, qualifier Q>
-
2586  GLM_INLINE glm::vec<4, T, Q> wyww(const glm::vec<4, T, Q> &v) {
-
2587  return glm::vec<4, T, Q>(v.w, v.y, v.w, v.w);
-
2588  }
-
2589 
-
2590  // wzxx
-
2591  template<typename T, qualifier Q>
-
2592  GLM_INLINE glm::vec<4, T, Q> wzxx(const glm::vec<4, T, Q> &v) {
-
2593  return glm::vec<4, T, Q>(v.w, v.z, v.x, v.x);
-
2594  }
-
2595 
-
2596  // wzxy
-
2597  template<typename T, qualifier Q>
-
2598  GLM_INLINE glm::vec<4, T, Q> wzxy(const glm::vec<4, T, Q> &v) {
-
2599  return glm::vec<4, T, Q>(v.w, v.z, v.x, v.y);
-
2600  }
-
2601 
-
2602  // wzxz
-
2603  template<typename T, qualifier Q>
-
2604  GLM_INLINE glm::vec<4, T, Q> wzxz(const glm::vec<4, T, Q> &v) {
-
2605  return glm::vec<4, T, Q>(v.w, v.z, v.x, v.z);
-
2606  }
-
2607 
-
2608  // wzxw
-
2609  template<typename T, qualifier Q>
-
2610  GLM_INLINE glm::vec<4, T, Q> wzxw(const glm::vec<4, T, Q> &v) {
-
2611  return glm::vec<4, T, Q>(v.w, v.z, v.x, v.w);
-
2612  }
-
2613 
-
2614  // wzyx
-
2615  template<typename T, qualifier Q>
-
2616  GLM_INLINE glm::vec<4, T, Q> wzyx(const glm::vec<4, T, Q> &v) {
-
2617  return glm::vec<4, T, Q>(v.w, v.z, v.y, v.x);
-
2618  }
-
2619 
-
2620  // wzyy
-
2621  template<typename T, qualifier Q>
-
2622  GLM_INLINE glm::vec<4, T, Q> wzyy(const glm::vec<4, T, Q> &v) {
-
2623  return glm::vec<4, T, Q>(v.w, v.z, v.y, v.y);
-
2624  }
-
2625 
-
2626  // wzyz
-
2627  template<typename T, qualifier Q>
-
2628  GLM_INLINE glm::vec<4, T, Q> wzyz(const glm::vec<4, T, Q> &v) {
-
2629  return glm::vec<4, T, Q>(v.w, v.z, v.y, v.z);
-
2630  }
-
2631 
-
2632  // wzyw
-
2633  template<typename T, qualifier Q>
-
2634  GLM_INLINE glm::vec<4, T, Q> wzyw(const glm::vec<4, T, Q> &v) {
-
2635  return glm::vec<4, T, Q>(v.w, v.z, v.y, v.w);
-
2636  }
-
2637 
-
2638  // wzzx
-
2639  template<typename T, qualifier Q>
-
2640  GLM_INLINE glm::vec<4, T, Q> wzzx(const glm::vec<4, T, Q> &v) {
-
2641  return glm::vec<4, T, Q>(v.w, v.z, v.z, v.x);
-
2642  }
-
2643 
-
2644  // wzzy
-
2645  template<typename T, qualifier Q>
-
2646  GLM_INLINE glm::vec<4, T, Q> wzzy(const glm::vec<4, T, Q> &v) {
-
2647  return glm::vec<4, T, Q>(v.w, v.z, v.z, v.y);
-
2648  }
-
2649 
-
2650  // wzzz
-
2651  template<typename T, qualifier Q>
-
2652  GLM_INLINE glm::vec<4, T, Q> wzzz(const glm::vec<4, T, Q> &v) {
-
2653  return glm::vec<4, T, Q>(v.w, v.z, v.z, v.z);
-
2654  }
-
2655 
-
2656  // wzzw
-
2657  template<typename T, qualifier Q>
-
2658  GLM_INLINE glm::vec<4, T, Q> wzzw(const glm::vec<4, T, Q> &v) {
-
2659  return glm::vec<4, T, Q>(v.w, v.z, v.z, v.w);
-
2660  }
-
2661 
-
2662  // wzwx
-
2663  template<typename T, qualifier Q>
-
2664  GLM_INLINE glm::vec<4, T, Q> wzwx(const glm::vec<4, T, Q> &v) {
-
2665  return glm::vec<4, T, Q>(v.w, v.z, v.w, v.x);
-
2666  }
-
2667 
-
2668  // wzwy
-
2669  template<typename T, qualifier Q>
-
2670  GLM_INLINE glm::vec<4, T, Q> wzwy(const glm::vec<4, T, Q> &v) {
-
2671  return glm::vec<4, T, Q>(v.w, v.z, v.w, v.y);
-
2672  }
-
2673 
-
2674  // wzwz
-
2675  template<typename T, qualifier Q>
-
2676  GLM_INLINE glm::vec<4, T, Q> wzwz(const glm::vec<4, T, Q> &v) {
-
2677  return glm::vec<4, T, Q>(v.w, v.z, v.w, v.z);
-
2678  }
-
2679 
-
2680  // wzww
-
2681  template<typename T, qualifier Q>
-
2682  GLM_INLINE glm::vec<4, T, Q> wzww(const glm::vec<4, T, Q> &v) {
-
2683  return glm::vec<4, T, Q>(v.w, v.z, v.w, v.w);
-
2684  }
-
2685 
-
2686  // wwxx
-
2687  template<typename T, qualifier Q>
-
2688  GLM_INLINE glm::vec<4, T, Q> wwxx(const glm::vec<4, T, Q> &v) {
-
2689  return glm::vec<4, T, Q>(v.w, v.w, v.x, v.x);
-
2690  }
-
2691 
-
2692  // wwxy
-
2693  template<typename T, qualifier Q>
-
2694  GLM_INLINE glm::vec<4, T, Q> wwxy(const glm::vec<4, T, Q> &v) {
-
2695  return glm::vec<4, T, Q>(v.w, v.w, v.x, v.y);
-
2696  }
-
2697 
-
2698  // wwxz
-
2699  template<typename T, qualifier Q>
-
2700  GLM_INLINE glm::vec<4, T, Q> wwxz(const glm::vec<4, T, Q> &v) {
-
2701  return glm::vec<4, T, Q>(v.w, v.w, v.x, v.z);
-
2702  }
-
2703 
-
2704  // wwxw
-
2705  template<typename T, qualifier Q>
-
2706  GLM_INLINE glm::vec<4, T, Q> wwxw(const glm::vec<4, T, Q> &v) {
-
2707  return glm::vec<4, T, Q>(v.w, v.w, v.x, v.w);
-
2708  }
-
2709 
-
2710  // wwyx
-
2711  template<typename T, qualifier Q>
-
2712  GLM_INLINE glm::vec<4, T, Q> wwyx(const glm::vec<4, T, Q> &v) {
-
2713  return glm::vec<4, T, Q>(v.w, v.w, v.y, v.x);
-
2714  }
-
2715 
-
2716  // wwyy
-
2717  template<typename T, qualifier Q>
-
2718  GLM_INLINE glm::vec<4, T, Q> wwyy(const glm::vec<4, T, Q> &v) {
-
2719  return glm::vec<4, T, Q>(v.w, v.w, v.y, v.y);
-
2720  }
-
2721 
-
2722  // wwyz
-
2723  template<typename T, qualifier Q>
-
2724  GLM_INLINE glm::vec<4, T, Q> wwyz(const glm::vec<4, T, Q> &v) {
-
2725  return glm::vec<4, T, Q>(v.w, v.w, v.y, v.z);
-
2726  }
-
2727 
-
2728  // wwyw
-
2729  template<typename T, qualifier Q>
-
2730  GLM_INLINE glm::vec<4, T, Q> wwyw(const glm::vec<4, T, Q> &v) {
-
2731  return glm::vec<4, T, Q>(v.w, v.w, v.y, v.w);
-
2732  }
-
2733 
-
2734  // wwzx
-
2735  template<typename T, qualifier Q>
-
2736  GLM_INLINE glm::vec<4, T, Q> wwzx(const glm::vec<4, T, Q> &v) {
-
2737  return glm::vec<4, T, Q>(v.w, v.w, v.z, v.x);
-
2738  }
-
2739 
-
2740  // wwzy
-
2741  template<typename T, qualifier Q>
-
2742  GLM_INLINE glm::vec<4, T, Q> wwzy(const glm::vec<4, T, Q> &v) {
-
2743  return glm::vec<4, T, Q>(v.w, v.w, v.z, v.y);
-
2744  }
-
2745 
-
2746  // wwzz
-
2747  template<typename T, qualifier Q>
-
2748  GLM_INLINE glm::vec<4, T, Q> wwzz(const glm::vec<4, T, Q> &v) {
-
2749  return glm::vec<4, T, Q>(v.w, v.w, v.z, v.z);
-
2750  }
-
2751 
-
2752  // wwzw
-
2753  template<typename T, qualifier Q>
-
2754  GLM_INLINE glm::vec<4, T, Q> wwzw(const glm::vec<4, T, Q> &v) {
-
2755  return glm::vec<4, T, Q>(v.w, v.w, v.z, v.w);
-
2756  }
-
2757 
-
2758  // wwwx
-
2759  template<typename T, qualifier Q>
-
2760  GLM_INLINE glm::vec<4, T, Q> wwwx(const glm::vec<4, T, Q> &v) {
-
2761  return glm::vec<4, T, Q>(v.w, v.w, v.w, v.x);
-
2762  }
-
2763 
-
2764  // wwwy
-
2765  template<typename T, qualifier Q>
-
2766  GLM_INLINE glm::vec<4, T, Q> wwwy(const glm::vec<4, T, Q> &v) {
-
2767  return glm::vec<4, T, Q>(v.w, v.w, v.w, v.y);
-
2768  }
-
2769 
-
2770  // wwwz
-
2771  template<typename T, qualifier Q>
-
2772  GLM_INLINE glm::vec<4, T, Q> wwwz(const glm::vec<4, T, Q> &v) {
-
2773  return glm::vec<4, T, Q>(v.w, v.w, v.w, v.z);
-
2774  }
-
2775 
-
2776  // wwww
-
2777  template<typename T, qualifier Q>
-
2778  GLM_INLINE glm::vec<4, T, Q> wwww(const glm::vec<4, T, Q> &v) {
-
2779  return glm::vec<4, T, Q>(v.w, v.w, v.w, v.w);
-
2780  }
-
2781 
-
2782 }
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00188.html b/tests/OpenGL/package/glm/doc/api/a00188.html deleted file mode 100644 index 71d4ce33..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00188.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_angle.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_angle.hpp File Reference
-
-
- -

GLM_GTX_vector_angle -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T angle (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the absolute angle between two vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T orientedAngle (vec< 2, T, Q > const &x, vec< 2, T, Q > const &y)
 Returns the oriented angle between two 2d vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T orientedAngle (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y, vec< 3, T, Q > const &ref)
 Returns the oriented angle between two 3d vectors based from a reference axis. More...
 
-

Detailed Description

-

GLM_GTX_vector_angle

-
See also
Core features (dependence)
-
-GLM_GTX_quaternion (dependence)
-
-gtx_epsilon (dependence)
- -

Definition in file vector_angle.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00188_source.html b/tests/OpenGL/package/glm/doc/api/a00188_source.html deleted file mode 100644 index e22f1d22..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00188_source.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_angle.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_angle.hpp
-
-
-Go to the documentation of this file.
1 
-
15 #pragma once
-
16 
-
17 // Dependency:
-
18 #include "../glm.hpp"
-
19 #include "../gtc/epsilon.hpp"
-
20 #include "../gtx/quaternion.hpp"
-
21 #include "../gtx/rotate_vector.hpp"
-
22 
-
23 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
24 # ifndef GLM_ENABLE_EXPERIMENTAL
-
25 # pragma message("GLM: GLM_GTX_vector_angle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
26 # else
-
27 # pragma message("GLM: GLM_GTX_vector_angle extension included")
-
28 # endif
-
29 #endif
-
30 
-
31 namespace glm
-
32 {
-
35 
-
39  template<length_t L, typename T, qualifier Q>
-
40  GLM_FUNC_DECL T angle(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
41 
-
45  template<typename T, qualifier Q>
-
46  GLM_FUNC_DECL T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y);
-
47 
-
51  template<typename T, qualifier Q>
-
52  GLM_FUNC_DECL T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref);
-
53 
-
55 }// namespace glm
-
56 
-
57 #include "vector_angle.inl"
-
GLM_FUNC_DECL T orientedAngle(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y, vec< 3, T, Q > const &ref)
Returns the oriented angle between two 3d vectors based from a reference axis.
-
GLM_FUNC_DECL T angle(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Returns the absolute angle between two vectors.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00189.html b/tests/OpenGL/package/glm/doc/api/a00189.html deleted file mode 100644 index 94850f77..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00189.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool1.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_bool1.hpp File Reference
-
-
- -

GLM_EXT_vector_bool1 -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

-typedef vec< 1, bool, defaultp > bvec1
 1 components vector of boolean.
 
-

Detailed Description

-

GLM_EXT_vector_bool1

- -

Definition in file vector_bool1.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00189_source.html b/tests/OpenGL/package/glm/doc/api/a00189_source.html deleted file mode 100644 index 778805d7..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00189_source.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool1.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_bool1.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 #include "../detail/type_vec1.hpp"
-
16 
-
17 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
18 # pragma message("GLM: GLM_EXT_vector_bool1 extension included")
-
19 #endif
-
20 
-
21 namespace glm
-
22 {
-
25 
-
27  typedef vec<1, bool, defaultp> bvec1;
-
28 
-
30 }//namespace glm
-
vec< 1, bool, defaultp > bvec1
1 components vector of boolean.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00190.html b/tests/OpenGL/package/glm/doc/api/a00190.html deleted file mode 100644 index 24e2f1bf..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00190.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool1_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_bool1_precision.hpp File Reference
-
-
- -

GLM_EXT_vector_bool1_precision -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

-typedef vec< 1, bool, highp > highp_bvec1
 1 component vector of bool values.
 
-typedef vec< 1, bool, lowp > lowp_bvec1
 1 component vector of bool values.
 
-typedef vec< 1, bool, mediump > mediump_bvec1
 1 component vector of bool values.
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00190_source.html b/tests/OpenGL/package/glm/doc/api/a00190_source.html deleted file mode 100644 index e72e08c5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00190_source.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool1_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_bool1_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
11 #pragma once
-
12 
-
13 #include "../detail/type_vec1.hpp"
-
14 
-
15 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
16 # pragma message("GLM: GLM_EXT_vector_bool1_precision extension included")
-
17 #endif
-
18 
-
19 namespace glm
-
20 {
-
23 
-
25  typedef vec<1, bool, highp> highp_bvec1;
-
26 
-
28  typedef vec<1, bool, mediump> mediump_bvec1;
-
29 
-
31  typedef vec<1, bool, lowp> lowp_bvec1;
-
32 
-
34 }//namespace glm
-
vec< 1, bool, highp > highp_bvec1
1 component vector of bool values.
-
vec< 1, bool, mediump > mediump_bvec1
1 component vector of bool values.
-
vec< 1, bool, lowp > lowp_bvec1
1 component vector of bool values.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00191.html b/tests/OpenGL/package/glm/doc/api/a00191.html deleted file mode 100644 index 9acc92d2..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00191.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_bool2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef vec< 2, bool, defaultp > bvec2
 2 components vector of boolean. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_bool2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00191_source.html b/tests/OpenGL/package/glm/doc/api/a00191_source.html deleted file mode 100644 index 99f0500b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00191_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_bool2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef vec<2, bool, defaultp> bvec2;
-
16 
-
18 }//namespace glm
-
vec< 2, bool, defaultp > bvec2
2 components vector of boolean.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00192.html b/tests/OpenGL/package/glm/doc/api/a00192.html deleted file mode 100644 index 6e88bf0f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00192.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool2_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_bool2_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 2, bool, highp > highp_bvec2
 2 components vector of high qualifier bool numbers. More...
 
typedef vec< 2, bool, lowp > lowp_bvec2
 2 components vector of low qualifier bool numbers. More...
 
typedef vec< 2, bool, mediump > mediump_bvec2
 2 components vector of medium qualifier bool numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_bool2_precision.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00192_source.html b/tests/OpenGL/package/glm/doc/api/a00192_source.html deleted file mode 100644 index 59488794..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00192_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool2_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_bool2_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef vec<2, bool, highp> highp_bvec2;
-
17 
-
22  typedef vec<2, bool, mediump> mediump_bvec2;
-
23 
-
28  typedef vec<2, bool, lowp> lowp_bvec2;
-
29 
-
31 }//namespace glm
-
vec< 2, bool, highp > highp_bvec2
2 components vector of high qualifier bool numbers.
-
vec< 2, bool, mediump > mediump_bvec2
2 components vector of medium qualifier bool numbers.
-
vec< 2, bool, lowp > lowp_bvec2
2 components vector of low qualifier bool numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00193.html b/tests/OpenGL/package/glm/doc/api/a00193.html deleted file mode 100644 index 5b14f839..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00193.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_bool3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef vec< 3, bool, defaultp > bvec3
 3 components vector of boolean. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_bool3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00193_source.html b/tests/OpenGL/package/glm/doc/api/a00193_source.html deleted file mode 100644 index 0b125899..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00193_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_bool3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef vec<3, bool, defaultp> bvec3;
-
16 
-
18 }//namespace glm
-
vec< 3, bool, defaultp > bvec3
3 components vector of boolean.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00194.html b/tests/OpenGL/package/glm/doc/api/a00194.html deleted file mode 100644 index f35c6e09..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00194.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool3_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_bool3_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 3, bool, highp > highp_bvec3
 3 components vector of high qualifier bool numbers. More...
 
typedef vec< 3, bool, lowp > lowp_bvec3
 3 components vector of low qualifier bool numbers. More...
 
typedef vec< 3, bool, mediump > mediump_bvec3
 3 components vector of medium qualifier bool numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_bool3_precision.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00194_source.html b/tests/OpenGL/package/glm/doc/api/a00194_source.html deleted file mode 100644 index dc749889..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00194_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool3_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_bool3_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef vec<3, bool, highp> highp_bvec3;
-
17 
-
22  typedef vec<3, bool, mediump> mediump_bvec3;
-
23 
-
28  typedef vec<3, bool, lowp> lowp_bvec3;
-
29 
-
31 }//namespace glm
-
vec< 3, bool, mediump > mediump_bvec3
3 components vector of medium qualifier bool numbers.
-
vec< 3, bool, highp > highp_bvec3
3 components vector of high qualifier bool numbers.
-
vec< 3, bool, lowp > lowp_bvec3
3 components vector of low qualifier bool numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00195.html b/tests/OpenGL/package/glm/doc/api/a00195.html deleted file mode 100644 index 26aa735f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00195.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_bool4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef vec< 4, bool, defaultp > bvec4
 4 components vector of boolean. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_bool4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00195_source.html b/tests/OpenGL/package/glm/doc/api/a00195_source.html deleted file mode 100644 index 438a8fef..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00195_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_bool4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef vec<4, bool, defaultp> bvec4;
-
16 
-
18 }//namespace glm
-
vec< 4, bool, defaultp > bvec4
4 components vector of boolean.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00196.html b/tests/OpenGL/package/glm/doc/api/a00196.html deleted file mode 100644 index 3c1d91bc..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00196.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool4_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_bool4_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 4, bool, highp > highp_bvec4
 4 components vector of high qualifier bool numbers. More...
 
typedef vec< 4, bool, lowp > lowp_bvec4
 4 components vector of low qualifier bool numbers. More...
 
typedef vec< 4, bool, mediump > mediump_bvec4
 4 components vector of medium qualifier bool numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_bool4_precision.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00196_source.html b/tests/OpenGL/package/glm/doc/api/a00196_source.html deleted file mode 100644 index 6319b4d3..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00196_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_bool4_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_bool4_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef vec<4, bool, highp> highp_bvec4;
-
17 
-
22  typedef vec<4, bool, mediump> mediump_bvec4;
-
23 
-
28  typedef vec<4, bool, lowp> lowp_bvec4;
-
29 
-
31 }//namespace glm
-
vec< 4, bool, lowp > lowp_bvec4
4 components vector of low qualifier bool numbers.
-
vec< 4, bool, mediump > mediump_bvec4
4 components vector of medium qualifier bool numbers.
-
vec< 4, bool, highp > highp_bvec4
4 components vector of high qualifier bool numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00197.html b/tests/OpenGL/package/glm/doc/api/a00197.html deleted file mode 100644 index b658eb81..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00197.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_common.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_common.hpp File Reference
-
-
- -

GLM_EXT_vector_common -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmax (vec< L, T, Q > const &a, T b)
 Returns y if x < y; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmax (vec< L, T, Q > const &a, vec< L, T, Q > const &b)
 Returns y if x < y; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmax (vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c)
 Returns y if x < y; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmax (vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c, vec< L, T, Q > const &d)
 Returns y if x < y; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmin (vec< L, T, Q > const &x, T y)
 Returns y if y < x; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmin (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns y if y < x; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmin (vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c)
 Returns y if y < x; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmin (vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c, vec< L, T, Q > const &d)
 Returns y if y < x; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > max (vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &z)
 Return the maximum component-wise values of 3 inputs. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > max (vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &z, vec< L, T, Q > const &w)
 Return the maximum component-wise values of 4 inputs. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > min (vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c)
 Return the minimum component-wise values of 3 inputs. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > min (vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c, vec< L, T, Q > const &d)
 Return the minimum component-wise values of 4 inputs. More...
 
-

Detailed Description

-

GLM_EXT_vector_common

- -

Definition in file vector_common.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00197_source.html b/tests/OpenGL/package/glm/doc/api/a00197_source.html deleted file mode 100644 index 31b776b7..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00197_source.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_common.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_common.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 // Dependency:
-
17 #include "../ext/scalar_common.hpp"
-
18 #include "../common.hpp"
-
19 
-
20 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
21 # pragma message("GLM: GLM_EXT_vector_common extension included")
-
22 #endif
-
23 
-
24 namespace glm
-
25 {
-
28 
-
34  template<length_t L, typename T, qualifier Q>
-
35  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c);
-
36 
-
42  template<length_t L, typename T, qualifier Q>
-
43  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d);
-
44 
-
50  template<length_t L, typename T, qualifier Q>
-
51  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z);
-
52 
-
58  template<length_t L, typename T, qualifier Q>
-
59  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max( vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z, vec<L, T, Q> const& w);
-
60 
-
68  template<length_t L, typename T, qualifier Q>
-
69  GLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& x, T y);
-
70 
-
78  template<length_t L, typename T, qualifier Q>
-
79  GLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
80 
-
88  template<length_t L, typename T, qualifier Q>
-
89  GLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c);
-
90 
-
98  template<length_t L, typename T, qualifier Q>
-
99  GLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d);
-
100 
-
108  template<length_t L, typename T, qualifier Q>
-
109  GLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, T b);
-
110 
-
118  template<length_t L, typename T, qualifier Q>
-
119  GLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b);
-
120 
-
128  template<length_t L, typename T, qualifier Q>
-
129  GLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c);
-
130 
-
138  template<length_t L, typename T, qualifier Q>
-
139  GLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d);
-
140 
-
142 }//namespace glm
-
143 
-
144 #include "vector_common.inl"
-
GLM_FUNC_DECL vec< L, T, Q > fmax(vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c, vec< L, T, Q > const &d)
Returns y if x < y; otherwise, it returns x.
-
GLM_FUNC_DECL vec< L, T, Q > fmin(vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c, vec< L, T, Q > const &d)
Returns y if y < x; otherwise, it returns x.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > max(vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &z, vec< L, T, Q > const &w)
Return the maximum component-wise values of 4 inputs.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > min(vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c, vec< L, T, Q > const &d)
Return the minimum component-wise values of 4 inputs.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00198.html b/tests/OpenGL/package/glm/doc/api/a00198.html deleted file mode 100644 index cf13fd0d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00198.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double1.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_double1.hpp File Reference
-
-
- -

GLM_EXT_vector_double1 -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

-typedef vec< 1, double, defaultp > dvec1
 1 components vector of double-precision floating-point numbers.
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00198_source.html b/tests/OpenGL/package/glm/doc/api/a00198_source.html deleted file mode 100644 index ff04a10f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00198_source.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double1.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_double1.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 #include "../detail/type_vec1.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # pragma message("GLM: GLM_EXT_vector_double1 extension included")
-
20 #endif
-
21 
-
22 namespace glm
-
23 {
-
26 
-
28  typedef vec<1, double, defaultp> dvec1;
-
29 
-
31 }//namespace glm
-
vec< 1, double, defaultp > dvec1
1 components vector of double-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00199.html b/tests/OpenGL/package/glm/doc/api/a00199.html deleted file mode 100644 index 8fbf40ed..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00199.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double1_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_double1_precision.hpp File Reference
-
-
- -

GLM_EXT_vector_double1_precision -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

-typedef vec< 1, double, highp > highp_dvec1
 1 component vector of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, lowp > lowp_dvec1
 1 component vector of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, mediump > mediump_dvec1
 1 component vector of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00199_source.html b/tests/OpenGL/package/glm/doc/api/a00199_source.html deleted file mode 100644 index 193b125d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00199_source.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double1_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_double1_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 #include "../detail/type_vec1.hpp"
-
16 
-
17 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
18 # pragma message("GLM: GLM_EXT_vector_double1_precision extension included")
-
19 #endif
-
20 
-
21 namespace glm
-
22 {
-
25 
-
27  typedef vec<1, double, highp> highp_dvec1;
-
28 
-
30  typedef vec<1, double, mediump> mediump_dvec1;
-
31 
-
33  typedef vec<1, double, lowp> lowp_dvec1;
-
34 
-
36 }//namespace glm
-
vec< 1, double, lowp > lowp_dvec1
1 component vector of double-precision floating-point numbers using low precision arithmetic in term ...
-
vec< 1, double, highp > highp_dvec1
1 component vector of double-precision floating-point numbers using high precision arithmetic in term...
-
vec< 1, double, mediump > mediump_dvec1
1 component vector of double-precision floating-point numbers using medium precision arithmetic in te...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00200.html b/tests/OpenGL/package/glm/doc/api/a00200.html deleted file mode 100644 index 7c7d4f30..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00200.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_double2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef vec< 2, double, defaultp > dvec2
 2 components vector of double-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_double2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00200_source.html b/tests/OpenGL/package/glm/doc/api/a00200_source.html deleted file mode 100644 index 8fb43a56..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00200_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_double2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef vec<2, double, defaultp> dvec2;
-
16 
-
18 }//namespace glm
-
vec< 2, double, defaultp > dvec2
2 components vector of double-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00201.html b/tests/OpenGL/package/glm/doc/api/a00201.html deleted file mode 100644 index 846107e4..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00201.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double2_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_double2_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 2, double, highp > highp_dvec2
 2 components vector of high double-qualifier floating-point numbers. More...
 
typedef vec< 2, double, lowp > lowp_dvec2
 2 components vector of low double-qualifier floating-point numbers. More...
 
typedef vec< 2, double, mediump > mediump_dvec2
 2 components vector of medium double-qualifier floating-point numbers. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00201_source.html b/tests/OpenGL/package/glm/doc/api/a00201_source.html deleted file mode 100644 index 53cd4fda..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00201_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double2_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_double2_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef vec<2, double, highp> highp_dvec2;
-
17 
-
22  typedef vec<2, double, mediump> mediump_dvec2;
-
23 
-
28  typedef vec<2, double, lowp> lowp_dvec2;
-
29 
-
31 }//namespace glm
-
vec< 2, double, lowp > lowp_dvec2
2 components vector of low double-qualifier floating-point numbers.
-
vec< 2, double, mediump > mediump_dvec2
2 components vector of medium double-qualifier floating-point numbers.
-
vec< 2, double, highp > highp_dvec2
2 components vector of high double-qualifier floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00202.html b/tests/OpenGL/package/glm/doc/api/a00202.html deleted file mode 100644 index 6d556f27..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00202.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_double3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef vec< 3, double, defaultp > dvec3
 3 components vector of double-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_double3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00202_source.html b/tests/OpenGL/package/glm/doc/api/a00202_source.html deleted file mode 100644 index 29f8ac5e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00202_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_double3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef vec<3, double, defaultp> dvec3;
-
16 
-
18 }//namespace glm
-
vec< 3, double, defaultp > dvec3
3 components vector of double-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00203.html b/tests/OpenGL/package/glm/doc/api/a00203.html deleted file mode 100644 index ca4158b7..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00203.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double3_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_double3_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 3, double, highp > highp_dvec3
 3 components vector of high double-qualifier floating-point numbers. More...
 
typedef vec< 3, double, lowp > lowp_dvec3
 3 components vector of low double-qualifier floating-point numbers. More...
 
typedef vec< 3, double, mediump > mediump_dvec3
 3 components vector of medium double-qualifier floating-point numbers. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00203_source.html b/tests/OpenGL/package/glm/doc/api/a00203_source.html deleted file mode 100644 index f80f926f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00203_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double3_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_double3_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
17  typedef vec<3, double, highp> highp_dvec3;
-
18 
-
24  typedef vec<3, double, mediump> mediump_dvec3;
-
25 
-
31  typedef vec<3, double, lowp> lowp_dvec3;
-
32 
-
34 }//namespace glm
-
vec< 3, double, mediump > mediump_dvec3
3 components vector of medium double-qualifier floating-point numbers.
-
vec< 3, double, lowp > lowp_dvec3
3 components vector of low double-qualifier floating-point numbers.
-
vec< 3, double, highp > highp_dvec3
3 components vector of high double-qualifier floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00204.html b/tests/OpenGL/package/glm/doc/api/a00204.html deleted file mode 100644 index 0eaf6c67..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00204.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_double4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef vec< 4, double, defaultp > dvec4
 4 components vector of double-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_double4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00204_source.html b/tests/OpenGL/package/glm/doc/api/a00204_source.html deleted file mode 100644 index c9711834..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00204_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_double4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef vec<4, double, defaultp> dvec4;
-
16 
-
18 }//namespace glm
-
vec< 4, double, defaultp > dvec4
4 components vector of double-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00205.html b/tests/OpenGL/package/glm/doc/api/a00205.html deleted file mode 100644 index 55ea8884..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00205.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double4_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_double4_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 4, double, highp > highp_dvec4
 4 components vector of high double-qualifier floating-point numbers. More...
 
typedef vec< 4, double, lowp > lowp_dvec4
 4 components vector of low double-qualifier floating-point numbers. More...
 
typedef vec< 4, double, mediump > mediump_dvec4
 4 components vector of medium double-qualifier floating-point numbers. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00205_source.html b/tests/OpenGL/package/glm/doc/api/a00205_source.html deleted file mode 100644 index a3277e57..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00205_source.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_double4_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_double4_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/setup.hpp"
-
6 #include "../detail/type_vec4.hpp"
-
7 
-
8 namespace glm
-
9 {
-
12 
-
18  typedef vec<4, double, highp> highp_dvec4;
-
19 
-
25  typedef vec<4, double, mediump> mediump_dvec4;
-
26 
-
32  typedef vec<4, double, lowp> lowp_dvec4;
-
33 
-
35 }//namespace glm
-
vec< 4, double, mediump > mediump_dvec4
4 components vector of medium double-qualifier floating-point numbers.
-
vec< 4, double, highp > highp_dvec4
4 components vector of high double-qualifier floating-point numbers.
-
vec< 4, double, lowp > lowp_dvec4
4 components vector of low double-qualifier floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00206.html b/tests/OpenGL/package/glm/doc/api/a00206.html deleted file mode 100644 index c11ff9a3..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00206.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float1.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_float1.hpp File Reference
-
-
- -

GLM_EXT_vector_float1 -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

-typedef vec< 1, float, defaultp > vec1
 1 components vector of single-precision floating-point numbers.
 
-

Detailed Description

-

GLM_EXT_vector_float1

- -

Definition in file vector_float1.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00206_source.html b/tests/OpenGL/package/glm/doc/api/a00206_source.html deleted file mode 100644 index 05d91664..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00206_source.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float1.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_float1.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 #include "../detail/type_vec1.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # pragma message("GLM: GLM_EXT_vector_float1 extension included")
-
20 #endif
-
21 
-
22 namespace glm
-
23 {
-
26 
-
28  typedef vec<1, float, defaultp> vec1;
-
29 
-
31 }//namespace glm
-
vec< 1, float, defaultp > vec1
1 components vector of single-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00207.html b/tests/OpenGL/package/glm/doc/api/a00207.html deleted file mode 100644 index 785f3f3e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00207.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float1_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_float1_precision.hpp File Reference
-
-
- -

GLM_EXT_vector_float1_precision -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

-typedef vec< 1, float, highp > highp_vec1
 1 component vector of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, float, lowp > lowp_vec1
 1 component vector of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, float, mediump > mediump_vec1
 1 component vector of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00207_source.html b/tests/OpenGL/package/glm/doc/api/a00207_source.html deleted file mode 100644 index cd28660d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00207_source.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float1_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_float1_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 #include "../detail/type_vec1.hpp"
-
16 
-
17 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
18 # pragma message("GLM: GLM_EXT_vector_float1_precision extension included")
-
19 #endif
-
20 
-
21 namespace glm
-
22 {
-
25 
-
27  typedef vec<1, float, highp> highp_vec1;
-
28 
-
30  typedef vec<1, float, mediump> mediump_vec1;
-
31 
-
33  typedef vec<1, float, lowp> lowp_vec1;
-
34 
-
36 }//namespace glm
-
vec< 1, float, lowp > lowp_vec1
1 component vector of single-precision floating-point numbers using low precision arithmetic in term ...
-
vec< 1, float, mediump > mediump_vec1
1 component vector of single-precision floating-point numbers using medium precision arithmetic in te...
-
vec< 1, float, highp > highp_vec1
1 component vector of single-precision floating-point numbers using high precision arithmetic in term...
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00208.html b/tests/OpenGL/package/glm/doc/api/a00208.html deleted file mode 100644 index 29111fd1..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00208.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_float2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef vec< 2, float, defaultp > vec2
 2 components vector of single-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_float2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00208_source.html b/tests/OpenGL/package/glm/doc/api/a00208_source.html deleted file mode 100644 index 3eb29262..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00208_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_float2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef vec<2, float, defaultp> vec2;
-
16 
-
18 }//namespace glm
-
vec< 2, float, defaultp > vec2
2 components vector of single-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00209.html b/tests/OpenGL/package/glm/doc/api/a00209.html deleted file mode 100644 index ab2d9985..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00209.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float2_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_float2_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 2, float, highp > highp_vec2
 2 components vector of high single-qualifier floating-point numbers. More...
 
typedef vec< 2, float, lowp > lowp_vec2
 2 components vector of low single-qualifier floating-point numbers. More...
 
typedef vec< 2, float, mediump > mediump_vec2
 2 components vector of medium single-qualifier floating-point numbers. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00209_source.html b/tests/OpenGL/package/glm/doc/api/a00209_source.html deleted file mode 100644 index b93c0d43..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00209_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float2_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_float2_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef vec<2, float, highp> highp_vec2;
-
17 
-
22  typedef vec<2, float, mediump> mediump_vec2;
-
23 
-
28  typedef vec<2, float, lowp> lowp_vec2;
-
29 
-
31 }//namespace glm
-
vec< 2, float, highp > highp_vec2
2 components vector of high single-qualifier floating-point numbers.
-
vec< 2, float, lowp > lowp_vec2
2 components vector of low single-qualifier floating-point numbers.
-
vec< 2, float, mediump > mediump_vec2
2 components vector of medium single-qualifier floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00210.html b/tests/OpenGL/package/glm/doc/api/a00210.html deleted file mode 100644 index 2b60bb4d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00210.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_float3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef vec< 3, float, defaultp > vec3
 3 components vector of single-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_float3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00210_source.html b/tests/OpenGL/package/glm/doc/api/a00210_source.html deleted file mode 100644 index 48aa1a9b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00210_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_float3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef vec<3, float, defaultp> vec3;
-
16 
-
18 }//namespace glm
-
vec< 3, float, defaultp > vec3
3 components vector of single-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00211.html b/tests/OpenGL/package/glm/doc/api/a00211.html deleted file mode 100644 index c5ca77ed..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00211.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float3_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_float3_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 3, float, highp > highp_vec3
 3 components vector of high single-qualifier floating-point numbers. More...
 
typedef vec< 3, float, lowp > lowp_vec3
 3 components vector of low single-qualifier floating-point numbers. More...
 
typedef vec< 3, float, mediump > mediump_vec3
 3 components vector of medium single-qualifier floating-point numbers. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00211_source.html b/tests/OpenGL/package/glm/doc/api/a00211_source.html deleted file mode 100644 index a4eb1e75..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00211_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float3_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_float3_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef vec<3, float, highp> highp_vec3;
-
17 
-
22  typedef vec<3, float, mediump> mediump_vec3;
-
23 
-
28  typedef vec<3, float, lowp> lowp_vec3;
-
29 
-
31 }//namespace glm
-
vec< 3, float, highp > highp_vec3
3 components vector of high single-qualifier floating-point numbers.
-
vec< 3, float, lowp > lowp_vec3
3 components vector of low single-qualifier floating-point numbers.
-
vec< 3, float, mediump > mediump_vec3
3 components vector of medium single-qualifier floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00212.html b/tests/OpenGL/package/glm/doc/api/a00212.html deleted file mode 100644 index 94e655b0..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00212.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_float4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef vec< 4, float, defaultp > vec4
 4 components vector of single-precision floating-point numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_float4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00212_source.html b/tests/OpenGL/package/glm/doc/api/a00212_source.html deleted file mode 100644 index cd4a352f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00212_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_float4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef vec<4, float, defaultp> vec4;
-
16 
-
18 }//namespace glm
-
vec< 4, float, defaultp > vec4
4 components vector of single-precision floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00213.html b/tests/OpenGL/package/glm/doc/api/a00213.html deleted file mode 100644 index 9938b0e3..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00213.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float4_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_float4_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 4, float, highp > highp_vec4
 4 components vector of high single-qualifier floating-point numbers. More...
 
typedef vec< 4, float, lowp > lowp_vec4
 4 components vector of low single-qualifier floating-point numbers. More...
 
typedef vec< 4, float, mediump > mediump_vec4
 4 components vector of medium single-qualifier floating-point numbers. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00213_source.html b/tests/OpenGL/package/glm/doc/api/a00213_source.html deleted file mode 100644 index 2495eac3..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00213_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_float4_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_float4_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef vec<4, float, highp> highp_vec4;
-
17 
-
22  typedef vec<4, float, mediump> mediump_vec4;
-
23 
-
28  typedef vec<4, float, lowp> lowp_vec4;
-
29 
-
31 }//namespace glm
-
vec< 4, float, lowp > lowp_vec4
4 components vector of low single-qualifier floating-point numbers.
-
vec< 4, float, mediump > mediump_vec4
4 components vector of medium single-qualifier floating-point numbers.
-
vec< 4, float, highp > highp_vec4
4 components vector of high single-qualifier floating-point numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00214.html b/tests/OpenGL/package/glm/doc/api/a00214.html deleted file mode 100644 index 41749ac6..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00214.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int1.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_int1.hpp File Reference
-
-
- -

GLM_EXT_vector_int1 -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

-typedef vec< 1, int, defaultp > ivec1
 1 component vector of signed integer numbers.
 
-

Detailed Description

-

GLM_EXT_vector_int1

- -

Definition in file vector_int1.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00214_source.html b/tests/OpenGL/package/glm/doc/api/a00214_source.html deleted file mode 100644 index 483592ee..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00214_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int1.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_int1.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 #include "../detail/type_vec1.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # pragma message("GLM: GLM_EXT_vector_int1 extension included")
-
20 #endif
-
21 
-
22 namespace glm
-
23 {
-
26 
-
28  typedef vec<1, int, defaultp> ivec1;
-
29 
-
31 }//namespace glm
-
32 
-
vec< 1, int, defaultp > ivec1
1 component vector of signed integer numbers.
Definition: vector_int1.hpp:28
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00215.html b/tests/OpenGL/package/glm/doc/api/a00215.html deleted file mode 100644 index 643f8642..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00215.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int1_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_int1_precision.hpp File Reference
-
-
- -

GLM_EXT_vector_int1_precision -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

-typedef vec< 1, int, highp > highp_ivec1
 1 component vector of signed integer values.
 
-typedef vec< 1, int, lowp > lowp_ivec1
 1 component vector of signed integer values.
 
-typedef vec< 1, int, mediump > mediump_ivec1
 1 component vector of signed integer values.
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00215_source.html b/tests/OpenGL/package/glm/doc/api/a00215_source.html deleted file mode 100644 index 48ac834c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00215_source.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int1_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_int1_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
11 #pragma once
-
12 
-
13 #include "../detail/type_vec1.hpp"
-
14 
-
15 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
16 # pragma message("GLM: GLM_EXT_vector_int1_precision extension included")
-
17 #endif
-
18 
-
19 namespace glm
-
20 {
-
23 
-
25  typedef vec<1, int, highp> highp_ivec1;
-
26 
-
28  typedef vec<1, int, mediump> mediump_ivec1;
-
29 
-
31  typedef vec<1, int, lowp> lowp_ivec1;
-
32 
-
34 }//namespace glm
-
vec< 1, int, mediump > mediump_ivec1
1 component vector of signed integer values.
-
vec< 1, int, highp > highp_ivec1
1 component vector of signed integer values.
-
vec< 1, int, lowp > lowp_ivec1
1 component vector of signed integer values.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00216.html b/tests/OpenGL/package/glm/doc/api/a00216.html deleted file mode 100644 index 542ab059..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00216.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_int2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef vec< 2, int, defaultp > ivec2
 2 components vector of signed integer numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_int2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00216_source.html b/tests/OpenGL/package/glm/doc/api/a00216_source.html deleted file mode 100644 index 4d507bcb..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00216_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_int2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef vec<2, int, defaultp> ivec2;
-
16 
-
18 }//namespace glm
-
vec< 2, int, defaultp > ivec2
2 components vector of signed integer numbers.
Definition: vector_int2.hpp:15
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00217.html b/tests/OpenGL/package/glm/doc/api/a00217.html deleted file mode 100644 index 4f939134..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00217.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int2_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_int2_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 2, int, highp > highp_ivec2
 2 components vector of high qualifier signed integer numbers. More...
 
typedef vec< 2, int, lowp > lowp_ivec2
 2 components vector of low qualifier signed integer numbers. More...
 
typedef vec< 2, int, mediump > mediump_ivec2
 2 components vector of medium qualifier signed integer numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_int2_precision.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00217_source.html b/tests/OpenGL/package/glm/doc/api/a00217_source.html deleted file mode 100644 index d84a2fc2..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00217_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int2_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_int2_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef vec<2, int, highp> highp_ivec2;
-
17 
-
22  typedef vec<2, int, mediump> mediump_ivec2;
-
23 
-
28  typedef vec<2, int, lowp> lowp_ivec2;
-
29 
-
31 }//namespace glm
-
vec< 2, int, highp > highp_ivec2
2 components vector of high qualifier signed integer numbers.
-
vec< 2, int, mediump > mediump_ivec2
2 components vector of medium qualifier signed integer numbers.
-
vec< 2, int, lowp > lowp_ivec2
2 components vector of low qualifier signed integer numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00218.html b/tests/OpenGL/package/glm/doc/api/a00218.html deleted file mode 100644 index fd0917bd..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00218.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_int3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef vec< 3, int, defaultp > ivec3
 3 components vector of signed integer numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_int3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00218_source.html b/tests/OpenGL/package/glm/doc/api/a00218_source.html deleted file mode 100644 index 89898ad7..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00218_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_int3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef vec<3, int, defaultp> ivec3;
-
16 
-
18 }//namespace glm
-
vec< 3, int, defaultp > ivec3
3 components vector of signed integer numbers.
Definition: vector_int3.hpp:15
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00219.html b/tests/OpenGL/package/glm/doc/api/a00219.html deleted file mode 100644 index c30ee431..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00219.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int3_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_int3_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 3, int, highp > highp_ivec3
 3 components vector of high qualifier signed integer numbers. More...
 
typedef vec< 3, int, lowp > lowp_ivec3
 3 components vector of low qualifier signed integer numbers. More...
 
typedef vec< 3, int, mediump > mediump_ivec3
 3 components vector of medium qualifier signed integer numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_int3_precision.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00219_source.html b/tests/OpenGL/package/glm/doc/api/a00219_source.html deleted file mode 100644 index d6692bea..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00219_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int3_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_int3_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef vec<3, int, highp> highp_ivec3;
-
17 
-
22  typedef vec<3, int, mediump> mediump_ivec3;
-
23 
-
28  typedef vec<3, int, lowp> lowp_ivec3;
-
29 
-
31 }//namespace glm
-
vec< 3, int, lowp > lowp_ivec3
3 components vector of low qualifier signed integer numbers.
-
vec< 3, int, mediump > mediump_ivec3
3 components vector of medium qualifier signed integer numbers.
-
vec< 3, int, highp > highp_ivec3
3 components vector of high qualifier signed integer numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00220.html b/tests/OpenGL/package/glm/doc/api/a00220.html deleted file mode 100644 index 534c9c13..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00220.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_int4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef vec< 4, int, defaultp > ivec4
 4 components vector of signed integer numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_int4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00220_source.html b/tests/OpenGL/package/glm/doc/api/a00220_source.html deleted file mode 100644 index 1a04d1b0..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00220_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_int4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef vec<4, int, defaultp> ivec4;
-
16 
-
18 }//namespace glm
-
vec< 4, int, defaultp > ivec4
4 components vector of signed integer numbers.
Definition: vector_int4.hpp:15
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00221.html b/tests/OpenGL/package/glm/doc/api/a00221.html deleted file mode 100644 index 8b3a48c5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00221.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int4_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_int4_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 4, int, highp > highp_ivec4
 4 components vector of high qualifier signed integer numbers. More...
 
typedef vec< 4, int, lowp > lowp_ivec4
 4 components vector of low qualifier signed integer numbers. More...
 
typedef vec< 4, int, mediump > mediump_ivec4
 4 components vector of medium qualifier signed integer numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_int4_precision.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00221_source.html b/tests/OpenGL/package/glm/doc/api/a00221_source.html deleted file mode 100644 index db681038..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00221_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_int4_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_int4_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef vec<4, int, highp> highp_ivec4;
-
17 
-
22  typedef vec<4, int, mediump> mediump_ivec4;
-
23 
-
28  typedef vec<4, int, lowp> lowp_ivec4;
-
29 
-
31 }//namespace glm
-
vec< 4, int, lowp > lowp_ivec4
4 components vector of low qualifier signed integer numbers.
-
vec< 4, int, highp > highp_ivec4
4 components vector of high qualifier signed integer numbers.
-
vec< 4, int, mediump > mediump_ivec4
4 components vector of medium qualifier signed integer numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00222.html b/tests/OpenGL/package/glm/doc/api/a00222.html deleted file mode 100644 index a9db4229..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00222.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_integer.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_integer.hpp File Reference
-
-
- -

GLM_EXT_vector_integer -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, int, Q > findNSB (vec< L, T, Q > const &Source, vec< L, int, Q > SignificantBitCount)
 Returns the bit number of the Nth significant bit set to 1 in the binary representation of value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > isMultiple (vec< L, T, Q > const &v, T Multiple)
 Return true if the 'Value' is a multiple of 'Multiple'. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > isMultiple (vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
 Return true if the 'Value' is a multiple of 'Multiple'. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > isPowerOfTwo (vec< L, T, Q > const &v)
 Return true if the value is a power of two number. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > nextMultiple (vec< L, T, Q > const &v, T Multiple)
 Higher multiple number of Source. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > nextMultiple (vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
 Higher multiple number of Source. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > nextPowerOfTwo (vec< L, T, Q > const &v)
 Return the power of two number which value is just higher the input value, round up to a power of two. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > prevMultiple (vec< L, T, Q > const &v, T Multiple)
 Lower multiple number of Source. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > prevMultiple (vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
 Lower multiple number of Source. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > prevPowerOfTwo (vec< L, T, Q > const &v)
 Return the power of two number which value is just lower the input value, round down to a power of two. More...
 
-

Detailed Description

-

GLM_EXT_vector_integer

-
See also
Core features (dependence)
-
-GLM_EXT_vector_integer (dependence)
- -

Definition in file vector_integer.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00222_source.html b/tests/OpenGL/package/glm/doc/api/a00222_source.html deleted file mode 100644 index 7579f700..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00222_source.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_integer.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_integer.hpp
-
-
-Go to the documentation of this file.
1 
-
12 #pragma once
-
13 
-
14 // Dependencies
-
15 #include "../detail/setup.hpp"
-
16 #include "../detail/qualifier.hpp"
-
17 #include "../detail/_vectorize.hpp"
-
18 #include "../vector_relational.hpp"
-
19 #include "../common.hpp"
-
20 #include <limits>
-
21 
-
22 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
23 # pragma message("GLM: GLM_EXT_vector_integer extension included")
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
30 
-
38  template<length_t L, typename T, qualifier Q>
-
39  GLM_FUNC_DECL vec<L, bool, Q> isPowerOfTwo(vec<L, T, Q> const& v);
-
40 
-
49  template<length_t L, typename T, qualifier Q>
-
50  GLM_FUNC_DECL vec<L, T, Q> nextPowerOfTwo(vec<L, T, Q> const& v);
-
51 
-
60  template<length_t L, typename T, qualifier Q>
-
61  GLM_FUNC_DECL vec<L, T, Q> prevPowerOfTwo(vec<L, T, Q> const& v);
-
62 
-
70  template<length_t L, typename T, qualifier Q>
-
71  GLM_FUNC_DECL vec<L, bool, Q> isMultiple(vec<L, T, Q> const& v, T Multiple);
-
72 
-
80  template<length_t L, typename T, qualifier Q>
-
81  GLM_FUNC_DECL vec<L, bool, Q> isMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);
-
82 
-
93  template<length_t L, typename T, qualifier Q>
-
94  GLM_FUNC_DECL vec<L, T, Q> nextMultiple(vec<L, T, Q> const& v, T Multiple);
-
95 
-
106  template<length_t L, typename T, qualifier Q>
-
107  GLM_FUNC_DECL vec<L, T, Q> nextMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);
-
108 
-
119  template<length_t L, typename T, qualifier Q>
-
120  GLM_FUNC_DECL vec<L, T, Q> prevMultiple(vec<L, T, Q> const& v, T Multiple);
-
121 
-
132  template<length_t L, typename T, qualifier Q>
-
133  GLM_FUNC_DECL vec<L, T, Q> prevMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);
-
134 
-
143  template<length_t L, typename T, qualifier Q>
-
144  GLM_FUNC_DECL vec<L, int, Q> findNSB(vec<L, T, Q> const& Source, vec<L, int, Q> SignificantBitCount);
-
145 
-
147 } //namespace glm
-
148 
-
149 #include "vector_integer.inl"
-
GLM_FUNC_DECL vec< L, bool, Q > isPowerOfTwo(vec< L, T, Q > const &v)
Return true if the value is a power of two number.
-
GLM_FUNC_DECL vec< L, T, Q > nextPowerOfTwo(vec< L, T, Q > const &v)
Return the power of two number which value is just higher the input value, round up to a power of two...
-
GLM_FUNC_DECL vec< L, T, Q > nextMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
Higher multiple number of Source.
-
GLM_FUNC_DECL vec< L, T, Q > prevPowerOfTwo(vec< L, T, Q > const &v)
Return the power of two number which value is just lower the input value, round down to a power of tw...
-
GLM_FUNC_DECL vec< L, int, Q > findNSB(vec< L, T, Q > const &Source, vec< L, int, Q > SignificantBitCount)
Returns the bit number of the Nth significant bit set to 1 in the binary representation of value...
-
GLM_FUNC_DECL vec< L, T, Q > prevMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
Lower multiple number of Source.
-
GLM_FUNC_DECL vec< L, bool, Q > isMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
Return true if the 'Value' is a multiple of 'Multiple'.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00223.html b/tests/OpenGL/package/glm/doc/api/a00223.html deleted file mode 100644 index de1ec5f5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00223.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_query.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_query.hpp File Reference
-
-
- -

GLM_GTX_vector_query -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL bool areCollinear (vec< L, T, Q > const &v0, vec< L, T, Q > const &v1, T const &epsilon)
 Check whether two vectors are collinears. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL bool areOrthogonal (vec< L, T, Q > const &v0, vec< L, T, Q > const &v1, T const &epsilon)
 Check whether two vectors are orthogonals. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL bool areOrthonormal (vec< L, T, Q > const &v0, vec< L, T, Q > const &v1, T const &epsilon)
 Check whether two vectors are orthonormal. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > isCompNull (vec< L, T, Q > const &v, T const &epsilon)
 Check whether a each component of a vector is null. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL bool isNormalized (vec< L, T, Q > const &v, T const &epsilon)
 Check whether a vector is normalized. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL bool isNull (vec< L, T, Q > const &v, T const &epsilon)
 Check whether a vector is null. More...
 
-

Detailed Description

-

GLM_GTX_vector_query

-
See also
Core features (dependence)
- -

Definition in file vector_query.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00223_source.html b/tests/OpenGL/package/glm/doc/api/a00223_source.html deleted file mode 100644 index 6f7a03f8..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00223_source.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_query.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_query.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 #include <cfloat>
-
18 #include <limits>
-
19 
-
20 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
21 # ifndef GLM_ENABLE_EXPERIMENTAL
-
22 # pragma message("GLM: GLM_GTX_vector_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
23 # else
-
24 # pragma message("GLM: GLM_GTX_vector_query extension included")
-
25 # endif
-
26 #endif
-
27 
-
28 namespace glm
-
29 {
-
32 
-
35  template<length_t L, typename T, qualifier Q>
-
36  GLM_FUNC_DECL bool areCollinear(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon);
-
37 
-
40  template<length_t L, typename T, qualifier Q>
-
41  GLM_FUNC_DECL bool areOrthogonal(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon);
-
42 
-
45  template<length_t L, typename T, qualifier Q>
-
46  GLM_FUNC_DECL bool isNormalized(vec<L, T, Q> const& v, T const& epsilon);
-
47 
-
50  template<length_t L, typename T, qualifier Q>
-
51  GLM_FUNC_DECL bool isNull(vec<L, T, Q> const& v, T const& epsilon);
-
52 
-
55  template<length_t L, typename T, qualifier Q>
-
56  GLM_FUNC_DECL vec<L, bool, Q> isCompNull(vec<L, T, Q> const& v, T const& epsilon);
-
57 
-
60  template<length_t L, typename T, qualifier Q>
-
61  GLM_FUNC_DECL bool areOrthonormal(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon);
-
62 
-
64 }// namespace glm
-
65 
-
66 #include "vector_query.inl"
-
GLM_FUNC_DECL bool isNull(vec< L, T, Q > const &v, T const &epsilon)
Check whether a vector is null.
-
GLM_FUNC_DECL bool areCollinear(vec< L, T, Q > const &v0, vec< L, T, Q > const &v1, T const &epsilon)
Check whether two vectors are collinears.
-
GLM_FUNC_DECL bool isNormalized(vec< L, T, Q > const &v, T const &epsilon)
Check whether a vector is normalized.
-
GLM_FUNC_DECL bool areOrthonormal(vec< L, T, Q > const &v0, vec< L, T, Q > const &v1, T const &epsilon)
Check whether two vectors are orthonormal.
-
GLM_FUNC_DECL vec< L, bool, Q > isCompNull(vec< L, T, Q > const &v, T const &epsilon)
Check whether a each component of a vector is null.
-
GLM_FUNC_DECL bool areOrthogonal(vec< L, T, Q > const &v0, vec< L, T, Q > const &v1, T const &epsilon)
Check whether two vectors are orthogonals.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()
Return the epsilon constant for floating point types.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00224.html b/tests/OpenGL/package/glm/doc/api/a00224.html deleted file mode 100644 index 9396a928..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00224.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_relational.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
ext/vector_relational.hpp File Reference
-
-
- -

GLM_EXT_vector_relational -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > equal (vec< L, T, Q > const &x, vec< L, T, Q > const &y, T epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > equal (vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > equal (vec< L, T, Q > const &x, vec< L, T, Q > const &y, int ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > equal (vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, int, Q > const &ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > notEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y, T epsilon)
 Returns the component-wise comparison of |x - y| >= epsilon. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > notEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &epsilon)
 Returns the component-wise comparison of |x - y| >= epsilon. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > notEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y, int ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > notEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, int, Q > const &ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
-

Detailed Description

-

GLM_EXT_vector_relational

-
See also
Core features (dependence)
-
-GLM_EXT_scalar_integer (dependence)
- -

Definition in file ext/vector_relational.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00224_source.html b/tests/OpenGL/package/glm/doc/api/a00224_source.html deleted file mode 100644 index d99e1d1d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00224_source.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_relational.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
ext/vector_relational.hpp
-
-
-Go to the documentation of this file.
1 
-
18 #pragma once
-
19 
-
20 // Dependencies
-
21 #include "../detail/qualifier.hpp"
-
22 
-
23 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
24 # pragma message("GLM: GLM_EXT_vector_relational extension included")
-
25 #endif
-
26 
-
27 namespace glm
-
28 {
-
31 
-
38  template<length_t L, typename T, qualifier Q>
-
39  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T epsilon);
-
40 
-
47  template<length_t L, typename T, qualifier Q>
-
48  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon);
-
49 
-
56  template<length_t L, typename T, qualifier Q>
-
57  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T epsilon);
-
58 
-
65  template<length_t L, typename T, qualifier Q>
-
66  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon);
-
67 
-
74  template<length_t L, typename T, qualifier Q>
-
75  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, int ULPs);
-
76 
-
83  template<length_t L, typename T, qualifier Q>
-
84  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, int, Q> const& ULPs);
-
85 
-
92  template<length_t L, typename T, qualifier Q>
-
93  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, int ULPs);
-
94 
-
101  template<length_t L, typename T, qualifier Q>
-
102  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, int, Q> const& ULPs);
-
103 
-
105 }//namespace glm
-
106 
-
107 #include "vector_relational.inl"
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > notEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, int, Q > const &ULPs)
Returns the component-wise comparison between two vectors in term of ULPs.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > equal(vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, int, Q > const &ULPs)
Returns the component-wise comparison between two vectors in term of ULPs.
-
GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()
Return the epsilon constant for floating point types.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00225.html b/tests/OpenGL/package/glm/doc/api/a00225.html deleted file mode 100644 index d4eee753..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00225.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_relational.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_relational.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR bool all (vec< L, bool, Q > const &v)
 Returns true if all components of x are true. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR bool any (vec< L, bool, Q > const &v)
 Returns true if any component of x is true. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > equal (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the component-wise comparison of result x == y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > greaterThan (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the component-wise comparison of result x > y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > greaterThanEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the component-wise comparison of result x >= y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > lessThan (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the component-wise comparison result of x < y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > lessThanEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the component-wise comparison of result x <= y. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > not_ (vec< L, bool, Q > const &v)
 Returns the component-wise logical complement of x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > notEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the component-wise comparison of result x != y. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00225_source.html b/tests/OpenGL/package/glm/doc/api/a00225_source.html deleted file mode 100644 index 1399390b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00225_source.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_relational.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_relational.hpp
-
-
-Go to the documentation of this file.
1 
-
20 #pragma once
-
21 
-
22 #include "detail/qualifier.hpp"
-
23 #include "detail/setup.hpp"
-
24 
-
25 namespace glm
-
26 {
-
29 
-
37  template<length_t L, typename T, qualifier Q>
-
38  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> lessThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
39 
-
47  template<length_t L, typename T, qualifier Q>
-
48  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> lessThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
49 
-
57  template<length_t L, typename T, qualifier Q>
-
58  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> greaterThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
59 
-
67  template<length_t L, typename T, qualifier Q>
-
68  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> greaterThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
69 
-
77  template<length_t L, typename T, qualifier Q>
-
78  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
79 
-
87  template<length_t L, typename T, qualifier Q>
-
88  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y);
-
89 
-
96  template<length_t L, qualifier Q>
-
97  GLM_FUNC_DECL GLM_CONSTEXPR bool any(vec<L, bool, Q> const& v);
-
98 
-
105  template<length_t L, qualifier Q>
-
106  GLM_FUNC_DECL GLM_CONSTEXPR bool all(vec<L, bool, Q> const& v);
-
107 
-
115  template<length_t L, qualifier Q>
-
116  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> not_(vec<L, bool, Q> const& v);
-
117 
-
119 }//namespace glm
-
120 
-
121 #include "detail/func_vector_relational.inl"
-
GLM_FUNC_DECL GLM_CONSTEXPR bool all(vec< L, bool, Q > const &v)
Returns true if all components of x are true.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > greaterThan(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Returns the component-wise comparison of result x > y.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > notEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Returns the component-wise comparison of result x != y.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > lessThanEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Returns the component-wise comparison of result x <= y.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > not_(vec< L, bool, Q > const &v)
Returns the component-wise logical complement of x.
-
GLM_FUNC_DECL GLM_CONSTEXPR bool any(vec< L, bool, Q > const &v)
Returns true if any component of x is true.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > equal(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Returns the component-wise comparison of result x == y.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > greaterThanEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Returns the component-wise comparison of result x >= y.
-
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > lessThan(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Returns the component-wise comparison result of x < y.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00226.html b/tests/OpenGL/package/glm/doc/api/a00226.html deleted file mode 100644 index faf34357..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00226.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint1.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_uint1.hpp File Reference
-
-
- -

GLM_EXT_vector_uint1 -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

-typedef vec< 1, unsigned int, defaultp > uvec1
 1 component vector of unsigned integer numbers.
 
-

Detailed Description

-

GLM_EXT_vector_uint1

- -

Definition in file vector_uint1.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00226_source.html b/tests/OpenGL/package/glm/doc/api/a00226_source.html deleted file mode 100644 index ddbf4176..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00226_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint1.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_uint1.hpp
-
-
-Go to the documentation of this file.
1 
-
14 #pragma once
-
15 
-
16 #include "../detail/type_vec1.hpp"
-
17 
-
18 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
19 # pragma message("GLM: GLM_EXT_vector_uint1 extension included")
-
20 #endif
-
21 
-
22 namespace glm
-
23 {
-
26 
-
28  typedef vec<1, unsigned int, defaultp> uvec1;
-
29 
-
31 }//namespace glm
-
32 
-
vec< 1, unsigned int, defaultp > uvec1
1 component vector of unsigned integer numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00227.html b/tests/OpenGL/package/glm/doc/api/a00227.html deleted file mode 100644 index ef7f56de..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00227.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint1_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_uint1_precision.hpp File Reference
-
-
- -

GLM_EXT_vector_uint1_precision -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 1, unsigned int, highp > highp_uvec1
 1 component vector of unsigned integer values. More...
 
typedef vec< 1, unsigned int, lowp > lowp_uvec1
 1 component vector of unsigned integer values. More...
 
typedef vec< 1, unsigned int, mediump > mediump_uvec1
 1 component vector of unsigned integer values. More...
 
-

Detailed Description

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00227_source.html b/tests/OpenGL/package/glm/doc/api/a00227_source.html deleted file mode 100644 index d7313523..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00227_source.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint1_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_uint1_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
11 #pragma once
-
12 
-
13 #include "../detail/type_vec1.hpp"
-
14 
-
15 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
16 # pragma message("GLM: GLM_EXT_vector_uint1_precision extension included")
-
17 #endif
-
18 
-
19 namespace glm
-
20 {
-
23 
-
27  typedef vec<1, unsigned int, highp> highp_uvec1;
-
28 
-
32  typedef vec<1, unsigned int, mediump> mediump_uvec1;
-
33 
-
37  typedef vec<1, unsigned int, lowp> lowp_uvec1;
-
38 
-
40 }//namespace glm
-
vec< 1, unsigned int, mediump > mediump_uvec1
1 component vector of unsigned integer values.
-
vec< 1, unsigned int, highp > highp_uvec1
1 component vector of unsigned integer values.
-
vec< 1, unsigned int, lowp > lowp_uvec1
1 component vector of unsigned integer values.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00228.html b/tests/OpenGL/package/glm/doc/api/a00228.html deleted file mode 100644 index ee04a7a4..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00228.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint2.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_uint2.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef vec< 2, unsigned int, defaultp > uvec2
 2 components vector of unsigned integer numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_uint2.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00228_source.html b/tests/OpenGL/package/glm/doc/api/a00228_source.html deleted file mode 100644 index 88a97e30..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00228_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint2.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_uint2.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef vec<2, unsigned int, defaultp> uvec2;
-
16 
-
18 }//namespace glm
-
vec< 2, unsigned int, defaultp > uvec2
2 components vector of unsigned integer numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00229.html b/tests/OpenGL/package/glm/doc/api/a00229.html deleted file mode 100644 index 6171f309..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00229.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint2_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_uint2_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 2, unsigned int, highp > highp_uvec2
 2 components vector of high qualifier unsigned integer numbers. More...
 
typedef vec< 2, unsigned int, lowp > lowp_uvec2
 2 components vector of low qualifier unsigned integer numbers. More...
 
typedef vec< 2, unsigned int, mediump > mediump_uvec2
 2 components vector of medium qualifier unsigned integer numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_uint2_precision.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00229_source.html b/tests/OpenGL/package/glm/doc/api/a00229_source.html deleted file mode 100644 index d35275a9..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00229_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint2_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_uint2_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec2.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef vec<2, unsigned int, highp> highp_uvec2;
-
17 
-
22  typedef vec<2, unsigned int, mediump> mediump_uvec2;
-
23 
-
28  typedef vec<2, unsigned int, lowp> lowp_uvec2;
-
29 
-
31 }//namespace glm
-
vec< 2, unsigned int, lowp > lowp_uvec2
2 components vector of low qualifier unsigned integer numbers.
-
vec< 2, unsigned int, highp > highp_uvec2
2 components vector of high qualifier unsigned integer numbers.
-
vec< 2, unsigned int, mediump > mediump_uvec2
2 components vector of medium qualifier unsigned integer numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00230.html b/tests/OpenGL/package/glm/doc/api/a00230.html deleted file mode 100644 index 49dc86e5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00230.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint3.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_uint3.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef vec< 3, unsigned int, defaultp > uvec3
 3 components vector of unsigned integer numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_uint3.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00230_source.html b/tests/OpenGL/package/glm/doc/api/a00230_source.html deleted file mode 100644 index b5114363..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00230_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint3.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_uint3.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef vec<3, unsigned int, defaultp> uvec3;
-
16 
-
18 }//namespace glm
-
vec< 3, unsigned int, defaultp > uvec3
3 components vector of unsigned integer numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00231.html b/tests/OpenGL/package/glm/doc/api/a00231.html deleted file mode 100644 index 1b0174b0..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00231.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint3_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_uint3_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 3, unsigned int, highp > highp_uvec3
 3 components vector of high qualifier unsigned integer numbers. More...
 
typedef vec< 3, unsigned int, lowp > lowp_uvec3
 3 components vector of low qualifier unsigned integer numbers. More...
 
typedef vec< 3, unsigned int, mediump > mediump_uvec3
 3 components vector of medium qualifier unsigned integer numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_uint3_precision.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00231_source.html b/tests/OpenGL/package/glm/doc/api/a00231_source.html deleted file mode 100644 index 7e61a1f9..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00231_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint3_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_uint3_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec3.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef vec<3, unsigned int, highp> highp_uvec3;
-
17 
-
22  typedef vec<3, unsigned int, mediump> mediump_uvec3;
-
23 
-
28  typedef vec<3, unsigned int, lowp> lowp_uvec3;
-
29 
-
31 }//namespace glm
-
vec< 3, unsigned int, mediump > mediump_uvec3
3 components vector of medium qualifier unsigned integer numbers.
-
vec< 3, unsigned int, highp > highp_uvec3
3 components vector of high qualifier unsigned integer numbers.
-
vec< 3, unsigned int, lowp > lowp_uvec3
3 components vector of low qualifier unsigned integer numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00232.html b/tests/OpenGL/package/glm/doc/api/a00232.html deleted file mode 100644 index db8effcb..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00232.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint4.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_uint4.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - -

-Typedefs

typedef vec< 4, unsigned int, defaultp > uvec4
 4 components vector of unsigned integer numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_uint4.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00232_source.html b/tests/OpenGL/package/glm/doc/api/a00232_source.html deleted file mode 100644 index e7a754f7..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00232_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint4.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_uint4.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
15  typedef vec<4, unsigned int, defaultp> uvec4;
-
16 
-
18 }//namespace glm
-
vec< 4, unsigned int, defaultp > uvec4
4 components vector of unsigned integer numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00233.html b/tests/OpenGL/package/glm/doc/api/a00233.html deleted file mode 100644 index 23e89c47..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00233.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint4_precision.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_uint4_precision.hpp File Reference
-
-
- -

Core features -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Typedefs

typedef vec< 4, unsigned int, highp > highp_uvec4
 4 components vector of high qualifier unsigned integer numbers. More...
 
typedef vec< 4, unsigned int, lowp > lowp_uvec4
 4 components vector of low qualifier unsigned integer numbers. More...
 
typedef vec< 4, unsigned int, mediump > mediump_uvec4
 4 components vector of medium qualifier unsigned integer numbers. More...
 
-

Detailed Description

-

Core features

- -

Definition in file vector_uint4_precision.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00233_source.html b/tests/OpenGL/package/glm/doc/api/a00233_source.html deleted file mode 100644 index 553b9b78..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00233_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_uint4_precision.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_uint4_precision.hpp
-
-
-Go to the documentation of this file.
1 
-
4 #pragma once
-
5 #include "../detail/type_vec4.hpp"
-
6 
-
7 namespace glm
-
8 {
-
11 
-
16  typedef vec<4, unsigned int, highp> highp_uvec4;
-
17 
-
22  typedef vec<4, unsigned int, mediump> mediump_uvec4;
-
23 
-
28  typedef vec<4, unsigned int, lowp> lowp_uvec4;
-
29 
-
31 }//namespace glm
-
vec< 4, unsigned int, mediump > mediump_uvec4
4 components vector of medium qualifier unsigned integer numbers.
-
vec< 4, unsigned int, highp > highp_uvec4
4 components vector of high qualifier unsigned integer numbers.
-
vec< 4, unsigned int, lowp > lowp_uvec4
4 components vector of low qualifier unsigned integer numbers.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00234.html b/tests/OpenGL/package/glm/doc/api/a00234.html deleted file mode 100644 index 358df214..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00234.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_ulp.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
vector_ulp.hpp File Reference
-
-
- -

GLM_EXT_vector_ulp -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, int, Q > floatDistance (vec< L, float, Q > const &x, vec< L, float, Q > const &y)
 Return the distance in the number of ULP between 2 single-precision floating-point scalars. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, int64, Q > floatDistance (vec< L, double, Q > const &x, vec< L, double, Q > const &y)
 Return the distance in the number of ULP between 2 double-precision floating-point scalars. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > nextFloat (vec< L, T, Q > const &x)
 Return the next ULP value(s) after the input value(s). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > nextFloat (vec< L, T, Q > const &x, int ULPs)
 Return the value(s) ULP distance after the input value(s). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > nextFloat (vec< L, T, Q > const &x, vec< L, int, Q > const &ULPs)
 Return the value(s) ULP distance after the input value(s). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > prevFloat (vec< L, T, Q > const &x)
 Return the previous ULP value(s) before the input value(s). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > prevFloat (vec< L, T, Q > const &x, int ULPs)
 Return the value(s) ULP distance before the input value(s). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > prevFloat (vec< L, T, Q > const &x, vec< L, int, Q > const &ULPs)
 Return the value(s) ULP distance before the input value(s). More...
 
-

Detailed Description

-

GLM_EXT_vector_ulp

- -

Definition in file vector_ulp.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00234_source.html b/tests/OpenGL/package/glm/doc/api/a00234_source.html deleted file mode 100644 index 38f60eee..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00234_source.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - -0.9.9 API documentation: vector_ulp.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
vector_ulp.hpp
-
-
-Go to the documentation of this file.
1 
-
17 #pragma once
-
18 
-
19 // Dependencies
-
20 #include "../ext/scalar_ulp.hpp"
-
21 
-
22 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
23 # pragma message("GLM: GLM_EXT_vector_ulp extension included")
-
24 #endif
-
25 
-
26 namespace glm
-
27 {
-
35  template<length_t L, typename T, qualifier Q>
-
36  GLM_FUNC_DECL vec<L, T, Q> nextFloat(vec<L, T, Q> const& x);
-
37 
-
45  template<length_t L, typename T, qualifier Q>
-
46  GLM_FUNC_DECL vec<L, T, Q> nextFloat(vec<L, T, Q> const& x, int ULPs);
-
47 
-
55  template<length_t L, typename T, qualifier Q>
-
56  GLM_FUNC_DECL vec<L, T, Q> nextFloat(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs);
-
57 
-
65  template<length_t L, typename T, qualifier Q>
-
66  GLM_FUNC_DECL vec<L, T, Q> prevFloat(vec<L, T, Q> const& x);
-
67 
-
75  template<length_t L, typename T, qualifier Q>
-
76  GLM_FUNC_DECL vec<L, T, Q> prevFloat(vec<L, T, Q> const& x, int ULPs);
-
77 
-
85  template<length_t L, typename T, qualifier Q>
-
86  GLM_FUNC_DECL vec<L, T, Q> prevFloat(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs);
-
87 
-
94  template<length_t L, typename T, qualifier Q>
-
95  GLM_FUNC_DECL vec<L, int, Q> floatDistance(vec<L, float, Q> const& x, vec<L, float, Q> const& y);
-
96 
-
103  template<length_t L, typename T, qualifier Q>
-
104  GLM_FUNC_DECL vec<L, int64, Q> floatDistance(vec<L, double, Q> const& x, vec<L, double, Q> const& y);
-
105 
-
107 }//namespace glm
-
108 
-
109 #include "vector_ulp.inl"
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00235.html b/tests/OpenGL/package/glm/doc/api/a00235.html deleted file mode 100644 index f63dbaa1..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00235.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - -0.9.9 API documentation: wrap.hpp File Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
- -
-
wrap.hpp File Reference
-
-
- -

GLM_GTX_wrap -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType clamp (genType const &Texcoord)
 Simulate GL_CLAMP OpenGL wrap mode. More...
 
template<typename genType >
GLM_FUNC_DECL genType mirrorClamp (genType const &Texcoord)
 Simulate GL_MIRRORED_REPEAT OpenGL wrap mode. More...
 
template<typename genType >
GLM_FUNC_DECL genType mirrorRepeat (genType const &Texcoord)
 Simulate GL_MIRROR_REPEAT OpenGL wrap mode. More...
 
template<typename genType >
GLM_FUNC_DECL genType repeat (genType const &Texcoord)
 Simulate GL_REPEAT OpenGL wrap mode. More...
 
-

Detailed Description

-

GLM_GTX_wrap

-
See also
Core features (dependence)
- -

Definition in file wrap.hpp.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00235_source.html b/tests/OpenGL/package/glm/doc/api/a00235_source.html deleted file mode 100644 index 0a669d7e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00235_source.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - -0.9.9 API documentation: wrap.hpp Source File - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - - -
-
- - -
- -
- - -
-
-
-
wrap.hpp
-
-
-Go to the documentation of this file.
1 
-
13 #pragma once
-
14 
-
15 // Dependency:
-
16 #include "../glm.hpp"
-
17 #include "../gtc/vec1.hpp"
-
18 
-
19 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
-
20 # ifndef GLM_ENABLE_EXPERIMENTAL
-
21 # pragma message("GLM: GLM_GTX_wrap is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
-
22 # else
-
23 # pragma message("GLM: GLM_GTX_wrap extension included")
-
24 # endif
-
25 #endif
-
26 
-
27 namespace glm
-
28 {
-
31 
-
34  template<typename genType>
-
35  GLM_FUNC_DECL genType clamp(genType const& Texcoord);
-
36 
-
39  template<typename genType>
-
40  GLM_FUNC_DECL genType repeat(genType const& Texcoord);
-
41 
-
44  template<typename genType>
-
45  GLM_FUNC_DECL genType mirrorClamp(genType const& Texcoord);
-
46 
-
49  template<typename genType>
-
50  GLM_FUNC_DECL genType mirrorRepeat(genType const& Texcoord);
-
51 
-
53 }// namespace glm
-
54 
-
55 #include "wrap.inl"
-
GLM_FUNC_DECL genType mirrorRepeat(genType const &Texcoord)
Simulate GL_MIRROR_REPEAT OpenGL wrap mode.
-
GLM_FUNC_DECL genType repeat(genType const &Texcoord)
Simulate GL_REPEAT OpenGL wrap mode.
-
GLM_FUNC_DECL genType mirrorClamp(genType const &Texcoord)
Simulate GL_MIRRORED_REPEAT OpenGL wrap mode.
-
GLM_FUNC_DECL genType clamp(genType const &Texcoord)
Simulate GL_CLAMP OpenGL wrap mode.
-
Definition: common.hpp:20
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00241.html b/tests/OpenGL/package/glm/doc/api/a00241.html deleted file mode 100644 index c9868383..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00241.html +++ /dev/null @@ -1,1595 +0,0 @@ - - - - - - -0.9.9 API documentation: Common functions - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Common functions
-
-
- -

Provides GLSL common functions. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType abs (genType x)
 Returns x if x >= 0; otherwise, it returns -x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > abs (vec< L, T, Q > const &x)
 Returns x if x >= 0; otherwise, it returns -x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > ceil (vec< L, T, Q > const &x)
 Returns a value equal to the nearest integer that is greater than or equal to x. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType clamp (genType x, genType minVal, genType maxVal)
 Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > clamp (vec< L, T, Q > const &x, T minVal, T maxVal)
 Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > clamp (vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &maxVal)
 Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. More...
 
GLM_FUNC_DECL int floatBitsToInt (float const &v)
 Returns a signed integer value representing the encoding of a floating-point value. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, int, Q > floatBitsToInt (vec< L, float, Q > const &v)
 Returns a signed integer value representing the encoding of a floating-point value. More...
 
GLM_FUNC_DECL uint floatBitsToUint (float const &v)
 Returns a unsigned integer value representing the encoding of a floating-point value. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, uint, Q > floatBitsToUint (vec< L, float, Q > const &v)
 Returns a unsigned integer value representing the encoding of a floating-point value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > floor (vec< L, T, Q > const &x)
 Returns a value equal to the nearest integer that is less then or equal to x. More...
 
template<typename genType >
GLM_FUNC_DECL genType fma (genType const &a, genType const &b, genType const &c)
 Computes and returns a * b + c. More...
 
template<typename genType >
GLM_FUNC_DECL genType fract (genType x)
 Return x - floor(x). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fract (vec< L, T, Q > const &x)
 Return x - floor(x). More...
 
template<typename genType >
GLM_FUNC_DECL genType frexp (genType x, int &exp)
 Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two, such that: x = significand * exp(2, exponent) More...
 
GLM_FUNC_DECL float intBitsToFloat (int const &v)
 Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, float, Q > intBitsToFloat (vec< L, int, Q > const &v)
 Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > isinf (vec< L, T, Q > const &x)
 Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > isnan (vec< L, T, Q > const &x)
 Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations. More...
 
template<typename genType >
GLM_FUNC_DECL genType ldexp (genType const &x, int const &exp)
 Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent) More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType max (genType x, genType y)
 Returns y if x < y; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > max (vec< L, T, Q > const &x, T y)
 Returns y if x < y; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > max (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns y if x < y; otherwise, it returns x. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType min (genType x, genType y)
 Returns y if y < x; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > min (vec< L, T, Q > const &x, T y)
 Returns y if y < x; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > min (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns y if y < x; otherwise, it returns x. More...
 
template<typename genTypeT , typename genTypeU >
GLM_FUNC_DECL genTypeT mix (genTypeT x, genTypeT y, genTypeU a)
 If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > mod (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Modulus. More...
 
template<typename genType >
GLM_FUNC_DECL genType modf (genType x, genType &i)
 Returns the fractional part of x and sets i to the integer part (as a whole number floating point value). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > round (vec< L, T, Q > const &x)
 Returns a value equal to the nearest integer to x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > roundEven (vec< L, T, Q > const &x)
 Returns a value equal to the nearest integer to x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > sign (vec< L, T, Q > const &x)
 Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. More...
 
template<typename genType >
GLM_FUNC_DECL genType smoothstep (genType edge0, genType edge1, genType x)
 Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 < x < edge1. More...
 
template<typename genType >
GLM_FUNC_DECL genType step (genType edge, genType x)
 Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > step (T edge, vec< L, T, Q > const &x)
 Returns 0.0 if x < edge, otherwise it returns 1.0. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > step (vec< L, T, Q > const &edge, vec< L, T, Q > const &x)
 Returns 0.0 if x < edge, otherwise it returns 1.0. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > trunc (vec< L, T, Q > const &x)
 Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x. More...
 
GLM_FUNC_DECL float uintBitsToFloat (uint const &v)
 Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, float, Q > uintBitsToFloat (vec< L, uint, Q > const &v)
 Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. More...
 
-

Detailed Description

-

Provides GLSL common functions.

-

These all operate component-wise. The description is per component.

-

Include <glm/common.hpp> to use these core features.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::abs (genType x)
-
- -

Returns x if x >= 0; otherwise, it returns -x.

-
Template Parameters
- - -
genTypefloating-point or signed integer; scalar or vector types.
-
-
-
See also
GLSL abs man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> glm::abs (vec< L, T, Q > const & x)
-
- -

Returns x if x >= 0; otherwise, it returns -x.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or signed integer scalar types
QValue from qualifier enum
-
-
-
See also
GLSL abs man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::ceil (vec< L, T, Q > const & x)
-
- -

Returns a value equal to the nearest integer that is greater than or equal to x.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL ceil man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::clamp (genType x,
genType minVal,
genType maxVal 
)
-
- -

Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.

-
Template Parameters
- - -
genTypeFloating-point or integer; scalar or vector types.
-
-
-
See also
GLSL clamp man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -

Referenced by glm::saturate().

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> glm::clamp (vec< L, T, Q > const & x,
minVal,
maxVal 
)
-
- -

Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
-
See also
GLSL clamp man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> glm::clamp (vec< L, T, Q > const & x,
vec< L, T, Q > const & minVal,
vec< L, T, Q > const & maxVal 
)
-
- -

Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
-
See also
GLSL clamp man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL int glm::floatBitsToInt (float const & v)
-
- -

Returns a signed integer value representing the encoding of a floating-point value.

-

The floating-point value's bit-level representation is preserved.

-
See also
GLSL floatBitsToInt man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, int, Q> glm::floatBitsToInt (vec< L, float, Q > const & v)
-
- -

Returns a signed integer value representing the encoding of a floating-point value.

-

The floatingpoint value's bit-level representation is preserved.

-
Template Parameters
- - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
QValue from qualifier enum
-
-
-
See also
GLSL floatBitsToInt man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint glm::floatBitsToUint (float const & v)
-
- -

Returns a unsigned integer value representing the encoding of a floating-point value.

-

The floatingpoint value's bit-level representation is preserved.

-
See also
GLSL floatBitsToUint man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, uint, Q> glm::floatBitsToUint (vec< L, float, Q > const & v)
-
- -

Returns a unsigned integer value representing the encoding of a floating-point value.

-

The floatingpoint value's bit-level representation is preserved.

-
Template Parameters
- - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
QValue from qualifier enum
-
-
-
See also
GLSL floatBitsToUint man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::floor (vec< L, T, Q > const & x)
-
- -

Returns a value equal to the nearest integer that is less then or equal to x.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL floor man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::fma (genType const & a,
genType const & b,
genType const & c 
)
-
- -

Computes and returns a * b + c.

-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLSL fma man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::fract (genType x)
-
- -

Return x - floor(x).

-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLSL fract man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fract (vec< L, T, Q > const & x)
-
- -

Return x - floor(x).

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL fract man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::frexp (genType x,
int & exp 
)
-
- -

Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two, such that: x = significand * exp(2, exponent)

-

The significand is returned by the function and the exponent is returned in the parameter exp. For a floating-point value of zero, the significant and exponent are both zero. For a floating-point value that is an infinity or is not a number, the results are undefined.

-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLSL frexp man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL float glm::intBitsToFloat (int const & v)
-
- -

Returns a floating-point value corresponding to a signed integer encoding of a floating-point value.

-

If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.

-
See also
GLSL intBitsToFloat man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, float, Q> glm::intBitsToFloat (vec< L, int, Q > const & v)
-
- -

Returns a floating-point value corresponding to a signed integer encoding of a floating-point value.

-

If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.

-
Template Parameters
- - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
QValue from qualifier enum
-
-
-
See also
GLSL intBitsToFloat man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, bool, Q> glm::isinf (vec< L, T, Q > const & x)
-
- -

Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations.

-

Returns false otherwise, including for implementations with no infinity representations.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL isinf man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, bool, Q> glm::isnan (vec< L, T, Q > const & x)
-
- -

Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations.

-

Returns false otherwise, including for implementations with no NaN representations.

-

/!\ When using compiler fast math, this function may fail.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL isnan man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::ldexp (genType const & x,
int const & exp 
)
-
- -

Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent)

-

If this product is too large to be represented in the floating-point type, the result is undefined.

-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLSL ldexp man page;
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::max (genType x,
genType y 
)
-
- -

Returns y if x < y; otherwise, it returns x.

-
Template Parameters
- - -
genTypeFloating-point or integer; scalar or vector types.
-
-
-
See also
GLSL max man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> glm::max (vec< L, T, Q > const & x,
y 
)
-
- -

Returns y if x < y; otherwise, it returns x.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
-
See also
GLSL max man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> glm::max (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Returns y if x < y; otherwise, it returns x.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
-
See also
GLSL max man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::min (genType x,
genType y 
)
-
- -

Returns y if y < x; otherwise, it returns x.

-
Template Parameters
- - -
genTypeFloating-point or integer; scalar or vector types.
-
-
-
See also
GLSL min man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> glm::min (vec< L, T, Q > const & x,
y 
)
-
- -

Returns y if y < x; otherwise, it returns x.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
-
See also
GLSL min man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> glm::min (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Returns y if y < x; otherwise, it returns x.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
-
See also
GLSL min man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genTypeT glm::mix (genTypeT x,
genTypeT y,
genTypeU a 
)
-
- -

If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a.

-

The value for a is not restricted to the range [0, 1].

-

If genTypeU is a boolean scalar or vector: Selects which vector each returned component comes from. For a component of 'a' that is false, the corresponding component of 'x' is returned. For a component of 'a' that is true, the corresponding component of 'y' is returned. Components of 'x' and 'y' that are not selected are allowed to be invalid floating point values and will have no effect on the results. Thus, this provides different functionality than genType mix(genType x, genType y, genType(a)) where a is a Boolean vector.

-
See also
GLSL mix man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
-
Parameters
- - - - -
[in]xValue to interpolate.
[in]yValue to interpolate.
[in]aInterpolant.
-
-
-
Template Parameters
- - - -
genTypeTFloating point scalar or vector.
genTypeUFloating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.
-
-
-
#include <glm/glm.hpp>
-
...
-
float a;
-
bool b;
- - - - -
...
-
glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors.
-
glm::vec4 s = glm::mix(g, h, b); // Returns g or h;
-
glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second.
-
glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter.
-
-

Referenced by glm::lerp().

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::mod (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Modulus.

-

Returns x - y * floor(x / y) for each component in x using the floating point value y.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types, include glm/gtc/integer for integer scalar types support
QValue from qualifier enum
-
-
-
See also
GLSL mod man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::modf (genType x,
genType & i 
)
-
- -

Returns the fractional part of x and sets i to the integer part (as a whole number floating point value).

-

Both the return value and the output parameter will have the same sign as x.

-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLSL modf man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::round (vec< L, T, Q > const & x)
-
- -

Returns a value equal to the nearest integer to x.

-

The fraction 0.5 will round in a direction chosen by the implementation, presumably the direction that is fastest. This includes the possibility that round(x) returns the same value as roundEven(x) for all values of x.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL round man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::roundEven (vec< L, T, Q > const & x)
-
- -

Returns a value equal to the nearest integer to x.

-

A fractional part of 0.5 will round toward the nearest even integer. (Both 3.5 and 4.5 for x will return 4.0.)

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL roundEven man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
-
-New round to even technique
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::sign (vec< L, T, Q > const & x)
-
- -

Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL sign man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::smoothstep (genType edge0,
genType edge1,
genType x 
)
-
- -

Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 < x < edge1.

-

This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to: genType t; t = clamp ((x - edge0) / (edge1 - edge0), 0, 1); return t * t * (3 - 2 * t); Results are undefined if edge0 >= edge1.

-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLSL smoothstep man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::step (genType edge,
genType x 
)
-
- -

Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType.

-
See also
GLSL step man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::step (edge,
vec< L, T, Q > const & x 
)
-
- -

Returns 0.0 if x < edge, otherwise it returns 1.0.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL step man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::step (vec< L, T, Q > const & edge,
vec< L, T, Q > const & x 
)
-
- -

Returns 0.0 if x < edge, otherwise it returns 1.0.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL step man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::trunc (vec< L, T, Q > const & x)
-
- -

Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL trunc man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL float glm::uintBitsToFloat (uint const & v)
-
- -

Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value.

-

If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.

-
See also
GLSL uintBitsToFloat man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, float, Q> glm::uintBitsToFloat (vec< L, uint, Q > const & v)
-
- -

Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value.

-

If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.

-
Template Parameters
- - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
QValue from qualifier enum
-
-
-
See also
GLSL uintBitsToFloat man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00242.html b/tests/OpenGL/package/glm/doc/api/a00242.html deleted file mode 100644 index 3cead978..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00242.html +++ /dev/null @@ -1,375 +0,0 @@ - - - - - - -0.9.9 API documentation: Exponential functions - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Exponential functions
-
-
- -

Provides GLSL exponential functions. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > exp (vec< L, T, Q > const &v)
 Returns the natural exponentiation of x, i.e., e^x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > exp2 (vec< L, T, Q > const &v)
 Returns 2 raised to the v power. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > inversesqrt (vec< L, T, Q > const &v)
 Returns the reciprocal of the positive square root of v. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > log (vec< L, T, Q > const &v)
 Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > log2 (vec< L, T, Q > const &v)
 Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > pow (vec< L, T, Q > const &base, vec< L, T, Q > const &exponent)
 Returns 'base' raised to the power 'exponent'. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > sqrt (vec< L, T, Q > const &v)
 Returns the positive square root of v. More...
 
-

Detailed Description

-

Provides GLSL exponential functions.

-

These all operate component-wise. The description is per component.

-

Include <glm/exponential.hpp> to use these core features.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::exp (vec< L, T, Q > const & v)
-
- -

Returns the natural exponentiation of x, i.e., e^x.

-
Parameters
- - -
vexp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier.
-
-
-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TFloating-point scalar types.
-
-
-
See also
GLSL exp man page
-
-GLSL 4.20.8 specification, section 8.2 Exponential Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::exp2 (vec< L, T, Q > const & v)
-
- -

Returns 2 raised to the v power.

-
Parameters
- - -
vexp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier.
-
-
-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TFloating-point scalar types.
-
-
-
See also
GLSL exp2 man page
-
-GLSL 4.20.8 specification, section 8.2 Exponential Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::inversesqrt (vec< L, T, Q > const & v)
-
- -

Returns the reciprocal of the positive square root of v.

-
Parameters
- - -
vinversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier.
-
-
-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TFloating-point scalar types.
-
-
-
See also
GLSL inversesqrt man page
-
-GLSL 4.20.8 specification, section 8.2 Exponential Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::log (vec< L, T, Q > const & v)
-
- -

Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y.

-

Results are undefined if v <= 0.

-
Parameters
- - -
vlog function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier.
-
-
-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TFloating-point scalar types.
-
-
-
See also
GLSL log man page
-
-GLSL 4.20.8 specification, section 8.2 Exponential Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::log2 (vec< L, T, Q > const & v)
-
- -

Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y.

-
Parameters
- - -
vlog2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier.
-
-
-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TFloating-point scalar types.
-
-
-
See also
GLSL log2 man page
-
-GLSL 4.20.8 specification, section 8.2 Exponential Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::pow (vec< L, T, Q > const & base,
vec< L, T, Q > const & exponent 
)
-
- -

Returns 'base' raised to the power 'exponent'.

-
Parameters
- - - -
baseFloating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type qualifier.
exponentFloating point value representing the 'exponent'.
-
-
-
See also
GLSL pow man page
-
-GLSL 4.20.8 specification, section 8.2 Exponential Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::sqrt (vec< L, T, Q > const & v)
-
- -

Returns the positive square root of v.

-
Parameters
- - -
vsqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier.
-
-
-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TFloating-point scalar types.
-
-
-
See also
GLSL sqrt man page
-
-GLSL 4.20.8 specification, section 8.2 Exponential Functions
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00243.html b/tests/OpenGL/package/glm/doc/api/a00243.html deleted file mode 100644 index 834d89cb..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00243.html +++ /dev/null @@ -1,2717 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_matrix_clip_space - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_matrix_clip_space
-
-
- -

Defines functions that generate clip space transformation matrices. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustum (T left, T right, T bottom, T top, T near, T far)
 Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumLH (T left, T right, T bottom, T top, T near, T far)
 Creates a left handed frustum matrix. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumLH_NO (T left, T right, T bottom, T top, T near, T far)
 Creates a left handed frustum matrix. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumLH_ZO (T left, T right, T bottom, T top, T near, T far)
 Creates a left handed frustum matrix. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumNO (T left, T right, T bottom, T top, T near, T far)
 Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumRH (T left, T right, T bottom, T top, T near, T far)
 Creates a right handed frustum matrix. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumRH_NO (T left, T right, T bottom, T top, T near, T far)
 Creates a right handed frustum matrix. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumRH_ZO (T left, T right, T bottom, T top, T near, T far)
 Creates a right handed frustum matrix. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > frustumZO (T left, T right, T bottom, T top, T near, T far)
 Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > infinitePerspective (T fovy, T aspect, T near)
 Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > infinitePerspectiveLH (T fovy, T aspect, T near)
 Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > infinitePerspectiveRH (T fovy, T aspect, T near)
 Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > ortho (T left, T right, T bottom, T top)
 Creates a matrix for projecting two-dimensional coordinates onto the screen. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > ortho (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoLH (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoLH_NO (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoLH_ZO (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoNO (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoRH (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoRH_NO (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoRH_ZO (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > orthoZO (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspective (T fovy, T aspect, T near, T far)
 Creates a matrix for a symetric perspective-view frustum based on the default handedness and default near and far clip planes definition. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFov (T fov, T width, T height, T near, T far)
 Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovLH (T fov, T width, T height, T near, T far)
 Builds a left handed perspective projection matrix based on a field of view. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovLH_NO (T fov, T width, T height, T near, T far)
 Builds a perspective projection matrix based on a field of view using left-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovLH_ZO (T fov, T width, T height, T near, T far)
 Builds a perspective projection matrix based on a field of view using left-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovNO (T fov, T width, T height, T near, T far)
 Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovRH (T fov, T width, T height, T near, T far)
 Builds a right handed perspective projection matrix based on a field of view. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovRH_NO (T fov, T width, T height, T near, T far)
 Builds a perspective projection matrix based on a field of view using right-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovRH_ZO (T fov, T width, T height, T near, T far)
 Builds a perspective projection matrix based on a field of view using right-handed coordinates. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveFovZO (T fov, T width, T height, T near, T far)
 Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveLH (T fovy, T aspect, T near, T far)
 Creates a matrix for a left handed, symetric perspective-view frustum. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveLH_NO (T fovy, T aspect, T near, T far)
 Creates a matrix for a left handed, symetric perspective-view frustum. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveLH_ZO (T fovy, T aspect, T near, T far)
 Creates a matrix for a left handed, symetric perspective-view frustum. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveNO (T fovy, T aspect, T near, T far)
 Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveRH (T fovy, T aspect, T near, T far)
 Creates a matrix for a right handed, symetric perspective-view frustum. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveRH_NO (T fovy, T aspect, T near, T far)
 Creates a matrix for a right handed, symetric perspective-view frustum. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveRH_ZO (T fovy, T aspect, T near, T far)
 Creates a matrix for a right handed, symetric perspective-view frustum. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > perspectiveZO (T fovy, T aspect, T near, T far)
 Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > tweakedInfinitePerspective (T fovy, T aspect, T near)
 Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > tweakedInfinitePerspective (T fovy, T aspect, T near, T ep)
 Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. More...
 
-

Detailed Description

-

Defines functions that generate clip space transformation matrices.

-

The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space.

-

Include <glm/ext/matrix_clip_space.hpp> to use the features of this extension.

-
See also
GLM_EXT_matrix_transform
-
-GLM_EXT_matrix_projection
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::frustum (left,
right,
bottom,
top,
near,
far 
)
-
- -

Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition.

-

To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.

-
Template Parameters
- - -
TA floating-point scalar type
-
-
-
See also
glFrustum man page
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::frustumLH (left,
right,
bottom,
top,
near,
far 
)
-
- -

Creates a left handed frustum matrix.

-

If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::frustumLH_NO (left,
right,
bottom,
top,
near,
far 
)
-
- -

Creates a left handed frustum matrix.

-

The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::frustumLH_ZO (left,
right,
bottom,
top,
near,
far 
)
-
- -

Creates a left handed frustum matrix.

-

The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::frustumNO (left,
right,
bottom,
top,
near,
far 
)
-
- -

Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.

-

The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::frustumRH (left,
right,
bottom,
top,
near,
far 
)
-
- -

Creates a right handed frustum matrix.

-

If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::frustumRH_NO (left,
right,
bottom,
top,
near,
far 
)
-
- -

Creates a right handed frustum matrix.

-

The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::frustumRH_ZO (left,
right,
bottom,
top,
near,
far 
)
-
- -

Creates a right handed frustum matrix.

-

The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::frustumZO (left,
right,
bottom,
top,
near,
far 
)
-
- -

Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.

-

The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::infinitePerspective (fovy,
aspect,
near 
)
-
- -

Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness.

-
Parameters
- - - - -
fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::infinitePerspectiveLH (fovy,
aspect,
near 
)
-
- -

Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite.

-
Parameters
- - - - -
fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::infinitePerspectiveRH (fovy,
aspect,
near 
)
-
- -

Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite.

-
Parameters
- - - - -
fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::ortho (left,
right,
bottom,
top 
)
-
- -

Creates a matrix for projecting two-dimensional coordinates onto the screen.

-
Template Parameters
- - -
TA floating-point scalar type
-
-
-
See also
- glm::ortho(T const& left, T const& right, T const& bottom, T const& top, T const& zNear, T const& zFar)
-
-gluOrtho2D man page
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::ortho (left,
right,
bottom,
top,
zNear,
zFar 
)
-
- -

Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition.

-

To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.

-
Template Parameters
- - -
TA floating-point scalar type
-
-
-
See also
- glm::ortho(T const& left, T const& right, T const& bottom, T const& top)
-
-glOrtho man page
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::orthoLH (left,
right,
bottom,
top,
zNear,
zFar 
)
-
- -

Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.

-

If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
-
See also
- glm::ortho(T const& left, T const& right, T const& bottom, T const& top)
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::orthoLH_NO (left,
right,
bottom,
top,
zNear,
zFar 
)
-
- -

Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates.

-

The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
-
See also
- glm::ortho(T const& left, T const& right, T const& bottom, T const& top)
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::orthoLH_ZO (left,
right,
bottom,
top,
zNear,
zFar 
)
-
- -

Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.

-

The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
-
See also
- glm::ortho(T const& left, T const& right, T const& bottom, T const& top)
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::orthoNO (left,
right,
bottom,
top,
zNear,
zFar 
)
-
- -

Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.

-

The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
-
See also
- glm::ortho(T const& left, T const& right, T const& bottom, T const& top)
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::orthoRH (left,
right,
bottom,
top,
zNear,
zFar 
)
-
- -

Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.

-

If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
-
See also
- glm::ortho(T const& left, T const& right, T const& bottom, T const& top)
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::orthoRH_NO (left,
right,
bottom,
top,
zNear,
zFar 
)
-
- -

Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.

-

The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
-
See also
- glm::ortho(T const& left, T const& right, T const& bottom, T const& top)
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::orthoRH_ZO (left,
right,
bottom,
top,
zNear,
zFar 
)
-
- -

Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.

-

The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
-
See also
- glm::ortho(T const& left, T const& right, T const& bottom, T const& top)
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::orthoZO (left,
right,
bottom,
top,
zNear,
zFar 
)
-
- -

Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.

-

The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)

-
Template Parameters
- - -
TA floating-point scalar type
-
-
-
See also
- glm::ortho(T const& left, T const& right, T const& bottom, T const& top)
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspective (fovy,
aspect,
near,
far 
)
-
- -

Creates a matrix for a symetric perspective-view frustum based on the default handedness and default near and far clip planes definition.

-

To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.

-
Parameters
- - - - - -
fovySpecifies the field of view angle in the y direction. Expressed in radians.
aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
-
See also
gluPerspective man page
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveFov (fov,
width,
height,
near,
far 
)
-
- -

Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition.

-

To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.

-
Parameters
- - - - - - -
fovExpressed in radians.
widthWidth of the viewport
heightHeight of the viewport
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveFovLH (fov,
width,
height,
near,
far 
)
-
- -

Builds a left handed perspective projection matrix based on a field of view.

-

If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Parameters
- - - - - - -
fovExpressed in radians.
widthWidth of the viewport
heightHeight of the viewport
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveFovLH_NO (fov,
width,
height,
near,
far 
)
-
- -

Builds a perspective projection matrix based on a field of view using left-handed coordinates.

-

The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Parameters
- - - - - - -
fovExpressed in radians.
widthWidth of the viewport
heightHeight of the viewport
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveFovLH_ZO (fov,
width,
height,
near,
far 
)
-
- -

Builds a perspective projection matrix based on a field of view using left-handed coordinates.

-

The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)

-
Parameters
- - - - - - -
fovExpressed in radians.
widthWidth of the viewport
heightHeight of the viewport
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveFovNO (fov,
width,
height,
near,
far 
)
-
- -

Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.

-

The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Parameters
- - - - - - -
fovExpressed in radians.
widthWidth of the viewport
heightHeight of the viewport
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveFovRH (fov,
width,
height,
near,
far 
)
-
- -

Builds a right handed perspective projection matrix based on a field of view.

-

If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Parameters
- - - - - - -
fovExpressed in radians.
widthWidth of the viewport
heightHeight of the viewport
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveFovRH_NO (fov,
width,
height,
near,
far 
)
-
- -

Builds a perspective projection matrix based on a field of view using right-handed coordinates.

-

The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Parameters
- - - - - - -
fovExpressed in radians.
widthWidth of the viewport
heightHeight of the viewport
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveFovRH_ZO (fov,
width,
height,
near,
far 
)
-
- -

Builds a perspective projection matrix based on a field of view using right-handed coordinates.

-

The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)

-
Parameters
- - - - - - -
fovExpressed in radians.
widthWidth of the viewport
heightHeight of the viewport
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveFovZO (fov,
width,
height,
near,
far 
)
-
- -

Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.

-

The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)

-
Parameters
- - - - - - -
fovExpressed in radians.
widthWidth of the viewport
heightHeight of the viewport
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveLH (fovy,
aspect,
near,
far 
)
-
- -

Creates a matrix for a left handed, symetric perspective-view frustum.

-

If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Parameters
- - - - - -
fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveLH_NO (fovy,
aspect,
near,
far 
)
-
- -

Creates a matrix for a left handed, symetric perspective-view frustum.

-

The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Parameters
- - - - - -
fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveLH_ZO (fovy,
aspect,
near,
far 
)
-
- -

Creates a matrix for a left handed, symetric perspective-view frustum.

-

The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)

-
Parameters
- - - - - -
fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveNO (fovy,
aspect,
near,
far 
)
-
- -

Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.

-

The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Parameters
- - - - - -
fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveRH (fovy,
aspect,
near,
far 
)
-
- -

Creates a matrix for a right handed, symetric perspective-view frustum.

-

If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Parameters
- - - - - -
fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveRH_NO (fovy,
aspect,
near,
far 
)
-
- -

Creates a matrix for a right handed, symetric perspective-view frustum.

-

The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Parameters
- - - - - -
fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveRH_ZO (fovy,
aspect,
near,
far 
)
-
- -

Creates a matrix for a right handed, symetric perspective-view frustum.

-

The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)

-
Parameters
- - - - - -
fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::perspectiveZO (fovy,
aspect,
near,
far 
)
-
- -

Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.

-

The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)

-
Parameters
- - - - - -
fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
farSpecifies the distance from the viewer to the far clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::tweakedInfinitePerspective (fovy,
aspect,
near 
)
-
- -

Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.

-
Parameters
- - - - -
fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::tweakedInfinitePerspective (fovy,
aspect,
near,
ep 
)
-
- -

Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.

-
Parameters
- - - - - -
fovySpecifies the field of view angle, in degrees, in the y direction. Expressed in radians.
aspectSpecifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
nearSpecifies the distance from the viewer to the near clipping plane (always positive).
epEpsilon
-
-
-
Template Parameters
- - -
TA floating-point scalar type
-
-
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00244.html b/tests/OpenGL/package/glm/doc/api/a00244.html deleted file mode 100644 index 968de61b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00244.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_matrix_common - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
-
-
GLM_EXT_matrix_common
-
-
- -

Defines functions for common matrix operations. -More...

-

Detailed Description

-

Defines functions for common matrix operations.

-

Include <glm/ext/matrix_common.hpp> to use the features of this extension.

-
See also
GLM_EXT_matrix_common
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00245.html b/tests/OpenGL/package/glm/doc/api/a00245.html deleted file mode 100644 index 04801c0e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00245.html +++ /dev/null @@ -1,539 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_matrix_projection - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_matrix_projection
-
-
- -

Functions that generate common projection transformation matrices. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q, typename U >
GLM_FUNC_DECL mat< 4, 4, T, Q > pickMatrix (vec< 2, T, Q > const &center, vec< 2, T, Q > const &delta, vec< 4, U, Q > const &viewport)
 Define a picking region. More...
 
template<typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > project (vec< 3, T, Q > const &obj, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
 Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition. More...
 
template<typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > projectNO (vec< 3, T, Q > const &obj, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
 Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. More...
 
template<typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > projectZO (vec< 3, T, Q > const &obj, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
 Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. More...
 
template<typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > unProject (vec< 3, T, Q > const &win, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
 Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition. More...
 
template<typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > unProjectNO (vec< 3, T, Q > const &win, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
 Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. More...
 
template<typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > unProjectZO (vec< 3, T, Q > const &win, mat< 4, 4, T, Q > const &model, mat< 4, 4, T, Q > const &proj, vec< 4, U, Q > const &viewport)
 Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. More...
 
-

Detailed Description

-

Functions that generate common projection transformation matrices.

-

The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space.

-

Include <glm/ext/matrix_projection.hpp> to use the features of this extension.

-
See also
GLM_EXT_matrix_transform
-
-GLM_EXT_matrix_clip_space
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::pickMatrix (vec< 2, T, Q > const & center,
vec< 2, T, Q > const & delta,
vec< 4, U, Q > const & viewport 
)
-
- -

Define a picking region.

-
Parameters
- - - - -
centerSpecify the center of a picking region in window coordinates.
deltaSpecify the width and height, respectively, of the picking region in window coordinates.
viewportRendering viewport
-
-
-
Template Parameters
- - - -
TNative type used for the computation. Currently supported: half (not recommended), float or double.
UCurrently supported: Floating-point types and integer types.
-
-
-
See also
gluPickMatrix man page
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::project (vec< 3, T, Q > const & obj,
mat< 4, 4, T, Q > const & model,
mat< 4, 4, T, Q > const & proj,
vec< 4, U, Q > const & viewport 
)
-
- -

Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition.

-

To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.

-
Parameters
- - - - - -
objSpecify the object coordinates.
modelSpecifies the current modelview matrix
projSpecifies the current projection matrix
viewportSpecifies the current viewport
-
-
-
Returns
Return the computed window coordinates.
-
Template Parameters
- - - -
TNative type used for the computation. Currently supported: half (not recommended), float or double.
UCurrently supported: Floating-point types and integer types.
-
-
-
See also
gluProject man page
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::projectNO (vec< 3, T, Q > const & obj,
mat< 4, 4, T, Q > const & model,
mat< 4, 4, T, Q > const & proj,
vec< 4, U, Q > const & viewport 
)
-
- -

Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.

-

The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Parameters
- - - - - -
objSpecify the object coordinates.
modelSpecifies the current modelview matrix
projSpecifies the current projection matrix
viewportSpecifies the current viewport
-
-
-
Returns
Return the computed window coordinates.
-
Template Parameters
- - - -
TNative type used for the computation. Currently supported: half (not recommended), float or double.
UCurrently supported: Floating-point types and integer types.
-
-
-
See also
gluProject man page
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::projectZO (vec< 3, T, Q > const & obj,
mat< 4, 4, T, Q > const & model,
mat< 4, 4, T, Q > const & proj,
vec< 4, U, Q > const & viewport 
)
-
- -

Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.

-

The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)

-
Parameters
- - - - - -
objSpecify the object coordinates.
modelSpecifies the current modelview matrix
projSpecifies the current projection matrix
viewportSpecifies the current viewport
-
-
-
Returns
Return the computed window coordinates.
-
Template Parameters
- - - -
TNative type used for the computation. Currently supported: half (not recommended), float or double.
UCurrently supported: Floating-point types and integer types.
-
-
-
See also
gluProject man page
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::unProject (vec< 3, T, Q > const & win,
mat< 4, 4, T, Q > const & model,
mat< 4, 4, T, Q > const & proj,
vec< 4, U, Q > const & viewport 
)
-
- -

Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition.

-

To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.

-
Parameters
- - - - - -
winSpecify the window coordinates to be mapped.
modelSpecifies the modelview matrix
projSpecifies the projection matrix
viewportSpecifies the viewport
-
-
-
Returns
Returns the computed object coordinates.
-
Template Parameters
- - - -
TNative type used for the computation. Currently supported: half (not recommended), float or double.
UCurrently supported: Floating-point types and integer types.
-
-
-
See also
gluUnProject man page
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::unProjectNO (vec< 3, T, Q > const & win,
mat< 4, 4, T, Q > const & model,
mat< 4, 4, T, Q > const & proj,
vec< 4, U, Q > const & viewport 
)
-
- -

Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.

-

The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)

-
Parameters
- - - - - -
winSpecify the window coordinates to be mapped.
modelSpecifies the modelview matrix
projSpecifies the projection matrix
viewportSpecifies the viewport
-
-
-
Returns
Returns the computed object coordinates.
-
Template Parameters
- - - -
TNative type used for the computation. Currently supported: half (not recommended), float or double.
UCurrently supported: Floating-point types and integer types.
-
-
-
See also
gluUnProject man page
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::unProjectZO (vec< 3, T, Q > const & win,
mat< 4, 4, T, Q > const & model,
mat< 4, 4, T, Q > const & proj,
vec< 4, U, Q > const & viewport 
)
-
- -

Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.

-

The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)

-
Parameters
- - - - - -
winSpecify the window coordinates to be mapped.
modelSpecifies the modelview matrix
projSpecifies the projection matrix
viewportSpecifies the viewport
-
-
-
Returns
Returns the computed object coordinates.
-
Template Parameters
- - - -
TNative type used for the computation. Currently supported: half (not recommended), float or double.
UCurrently supported: Floating-point types and integer types.
-
-
-
See also
gluUnProject man page
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00246.html b/tests/OpenGL/package/glm/doc/api/a00246.html deleted file mode 100644 index 64b3af40..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00246.html +++ /dev/null @@ -1,576 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_matrix_relational - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_matrix_relational
-
-
- -

Exposes comparison functions for matrix types that take a user defined epsilon values. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > equal (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y)
 Perform a component-wise equal-to comparison of two matrices. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > equal (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, T epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > equal (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, T, Q > const &epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > equal (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, int ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > equal (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, int, Q > const &ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > notEqual (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y)
 Perform a component-wise not-equal-to comparison of two matrices. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > notEqual (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, T epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > notEqual (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, T, Q > const &epsilon)
 Returns the component-wise comparison of |x - y| >= epsilon. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > notEqual (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, int ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< C, bool, Q > notEqual (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, int, Q > const &ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
-

Detailed Description

-

Exposes comparison functions for matrix types that take a user defined epsilon values.

-

Include <glm/ext/matrix_relational.hpp> to use the features of this extension.

-
See also
GLM_EXT_vector_relational
-
-GLM_EXT_scalar_relational
-
-GLM_EXT_quaternion_relational
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> glm::equal (mat< C, R, T, Q > const & x,
mat< C, R, T, Q > const & y 
)
-
- -

Perform a component-wise equal-to comparison of two matrices.

-

Return a boolean vector which components value is True if this expression is satisfied per column of the matrices.

-
Template Parameters
- - - - - -
CInteger between 1 and 4 included that qualify the number of columns of the matrix
RInteger between 1 and 4 included that qualify the number of rows of the matrix
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> glm::equal (mat< C, R, T, Q > const & x,
mat< C, R, T, Q > const & y,
epsilon 
)
-
- -

Returns the component-wise comparison of |x - y| < epsilon.

-

True if this expression is satisfied.

-
Template Parameters
- - - - - -
CInteger between 1 and 4 included that qualify the number of columns of the matrix
RInteger between 1 and 4 included that qualify the number of rows of the matrix
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> glm::equal (mat< C, R, T, Q > const & x,
mat< C, R, T, Q > const & y,
vec< C, T, Q > const & epsilon 
)
-
- -

Returns the component-wise comparison of |x - y| < epsilon.

-

True if this expression is satisfied.

-
Template Parameters
- - - - - -
CInteger between 1 and 4 included that qualify the number of columns of the matrix
RInteger between 1 and 4 included that qualify the number of rows of the matrix
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> glm::equal (mat< C, R, T, Q > const & x,
mat< C, R, T, Q > const & y,
int ULPs 
)
-
- -

Returns the component-wise comparison between two vectors in term of ULPs.

-

True if this expression is satisfied.

-
Template Parameters
- - - - - -
CInteger between 1 and 4 included that qualify the number of columns of the matrix
RInteger between 1 and 4 included that qualify the number of rows of the matrix
TFloating-point
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> glm::equal (mat< C, R, T, Q > const & x,
mat< C, R, T, Q > const & y,
vec< C, int, Q > const & ULPs 
)
-
- -

Returns the component-wise comparison between two vectors in term of ULPs.

-

True if this expression is satisfied.

-
Template Parameters
- - - - - -
CInteger between 1 and 4 included that qualify the number of columns of the matrix
RInteger between 1 and 4 included that qualify the number of rows of the matrix
TFloating-point
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> glm::notEqual (mat< C, R, T, Q > const & x,
mat< C, R, T, Q > const & y 
)
-
- -

Perform a component-wise not-equal-to comparison of two matrices.

-

Return a boolean vector which components value is True if this expression is satisfied per column of the matrices.

-
Template Parameters
- - - - - -
CInteger between 1 and 4 included that qualify the number of columns of the matrix
RInteger between 1 and 4 included that qualify the number of rows of the matrix
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> glm::notEqual (mat< C, R, T, Q > const & x,
mat< C, R, T, Q > const & y,
epsilon 
)
-
- -

Returns the component-wise comparison of |x - y| < epsilon.

-

True if this expression is not satisfied.

-
Template Parameters
- - - - - -
CInteger between 1 and 4 included that qualify the number of columns of the matrix
RInteger between 1 and 4 included that qualify the number of rows of the matrix
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> glm::notEqual (mat< C, R, T, Q > const & x,
mat< C, R, T, Q > const & y,
vec< C, T, Q > const & epsilon 
)
-
- -

Returns the component-wise comparison of |x - y| >= epsilon.

-

True if this expression is not satisfied.

-
Template Parameters
- - - - - -
CInteger between 1 and 4 included that qualify the number of columns of the matrix
RInteger between 1 and 4 included that qualify the number of rows of the matrix
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> glm::notEqual (mat< C, R, T, Q > const & x,
mat< C, R, T, Q > const & y,
int ULPs 
)
-
- -

Returns the component-wise comparison between two vectors in term of ULPs.

-

True if this expression is not satisfied.

-
Template Parameters
- - - - - -
CInteger between 1 and 4 included that qualify the number of columns of the matrix
RInteger between 1 and 4 included that qualify the number of rows of the matrix
TFloating-point
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> glm::notEqual (mat< C, R, T, Q > const & x,
mat< C, R, T, Q > const & y,
vec< C, int, Q > const & ULPs 
)
-
- -

Returns the component-wise comparison between two vectors in term of ULPs.

-

True if this expression is not satisfied.

-
Template Parameters
- - - - - -
CInteger between 1 and 4 included that qualify the number of columns of the matrix
RInteger between 1 and 4 included that qualify the number of rows of the matrix
TFloating-point
QValue from qualifier enum
-
-
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00247.html b/tests/OpenGL/package/glm/doc/api/a00247.html deleted file mode 100644 index f83bd3c5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00247.html +++ /dev/null @@ -1,444 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_matrix_transform - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_matrix_transform
-
-
- -

Defines functions that generate common transformation matrices. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

-template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType identity ()
 Builds an identity matrix.
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > lookAt (vec< 3, T, Q > const &eye, vec< 3, T, Q > const &center, vec< 3, T, Q > const &up)
 Build a look at view matrix based on the default handedness. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > lookAtLH (vec< 3, T, Q > const &eye, vec< 3, T, Q > const &center, vec< 3, T, Q > const &up)
 Build a left handed look at view matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > lookAtRH (vec< 3, T, Q > const &eye, vec< 3, T, Q > const &center, vec< 3, T, Q > const &up)
 Build a right handed look at view matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > rotate (mat< 4, 4, T, Q > const &m, T angle, vec< 3, T, Q > const &axis)
 Builds a rotation 4 * 4 matrix created from an axis vector and an angle. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > scale (mat< 4, 4, T, Q > const &m, vec< 3, T, Q > const &v)
 Builds a scale 4 * 4 matrix created from 3 scalars. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > translate (mat< 4, 4, T, Q > const &m, vec< 3, T, Q > const &v)
 Builds a translation 4 * 4 matrix created from a vector of 3 components. More...
 
-

Detailed Description

-

Defines functions that generate common transformation matrices.

-

The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space.

-

Include <glm/ext/matrix_transform.hpp> to use the features of this extension.

-
See also
GLM_EXT_matrix_projection
-
-GLM_EXT_matrix_clip_space
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::lookAt (vec< 3, T, Q > const & eye,
vec< 3, T, Q > const & center,
vec< 3, T, Q > const & up 
)
-
- -

Build a look at view matrix based on the default handedness.

-
Parameters
- - - - -
eyePosition of the camera
centerPosition where the camera is looking at
upNormalized up vector, how the camera is oriented. Typically (0, 0, 1)
-
-
-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
-
See also
- frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal)
-
-gluLookAt man page
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::lookAtLH (vec< 3, T, Q > const & eye,
vec< 3, T, Q > const & center,
vec< 3, T, Q > const & up 
)
-
- -

Build a left handed look at view matrix.

-
Parameters
- - - - -
eyePosition of the camera
centerPosition where the camera is looking at
upNormalized up vector, how the camera is oriented. Typically (0, 0, 1)
-
-
-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
-
See also
- frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal)
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::lookAtRH (vec< 3, T, Q > const & eye,
vec< 3, T, Q > const & center,
vec< 3, T, Q > const & up 
)
-
- -

Build a right handed look at view matrix.

-
Parameters
- - - - -
eyePosition of the camera
centerPosition where the camera is looking at
upNormalized up vector, how the camera is oriented. Typically (0, 0, 1)
-
-
-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
-
See also
- frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal)
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::rotate (mat< 4, 4, T, Q > const & m,
angle,
vec< 3, T, Q > const & axis 
)
-
- -

Builds a rotation 4 * 4 matrix created from an axis vector and an angle.

-
Parameters
- - - - -
mInput matrix multiplied by this rotation matrix.
angleRotation angle expressed in radians.
axisRotation axis, recommended to be normalized.
-
-
-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
-
See also
- rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z)
-
-- rotate(T angle, vec<3, T, Q> const& v)
-
-glRotate man page
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::scale (mat< 4, 4, T, Q > const & m,
vec< 3, T, Q > const & v 
)
-
- -

Builds a scale 4 * 4 matrix created from 3 scalars.

-
Parameters
- - - -
mInput matrix multiplied by this scale matrix.
vRatio of scaling for each axis.
-
-
-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
-
See also
- scale(mat<4, 4, T, Q> const& m, T x, T y, T z)
-
-- scale(vec<3, T, Q> const& v)
-
-glScale man page
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::translate (mat< 4, 4, T, Q > const & m,
vec< 3, T, Q > const & v 
)
-
- -

Builds a translation 4 * 4 matrix created from a vector of 3 components.

-
Parameters
- - - -
mInput matrix multiplied by this translation matrix.
vCoordinates of a translation vector.
-
-
-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
-
#include <glm/glm.hpp>
- -
...
-
glm::mat4 m = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f));
-
// m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f
-
// m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f
-
// m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f
-
// m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f
-
See also
- translate(mat<4, 4, T, Q> const& m, T x, T y, T z)
-
-- translate(vec<3, T, Q> const& v)
-
-glTranslate man page
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00248.html b/tests/OpenGL/package/glm/doc/api/a00248.html deleted file mode 100644 index 99cec01e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00248.html +++ /dev/null @@ -1,402 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_quaternion_common - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_quaternion_common
-
-
- -

Provides common functions for quaternion types. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > conjugate (qua< T, Q > const &q)
 Returns the q conjugate. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > inverse (qua< T, Q > const &q)
 Returns the q inverse. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > isinf (qua< T, Q > const &x)
 Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > isnan (qua< T, Q > const &x)
 Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > lerp (qua< T, Q > const &x, qua< T, Q > const &y, T a)
 Linear interpolation of two quaternions. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > mix (qua< T, Q > const &x, qua< T, Q > const &y, T a)
 Spherical linear interpolation of two quaternions. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > slerp (qua< T, Q > const &x, qua< T, Q > const &y, T a)
 Spherical linear interpolation of two quaternions. More...
 
-

Detailed Description

-

Provides common functions for quaternion types.

-

Include <glm/ext/quaternion_common.hpp> to use the features of this extension.

-
See also
GLM_EXT_scalar_common
-
-GLM_EXT_vector_common
-
-GLM_EXT_quaternion_float
-
-GLM_EXT_quaternion_double
-
-GLM_EXT_quaternion_exponential
-
-GLM_EXT_quaternion_geometric
-
-GLM_EXT_quaternion_relational
-
-GLM_EXT_quaternion_trigonometric
-
-GLM_EXT_quaternion_transform
-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::conjugate (qua< T, Q > const & q)
-
- -

Returns the q conjugate.

-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::inverse (qua< T, Q > const & q)
-
- -

Returns the q inverse.

-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<4, bool, Q> glm::isinf (qua< T, Q > const & x)
-
- -

Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations.

-

Returns false otherwise, including for implementations with no infinity representations.

-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<4, bool, Q> glm::isnan (qua< T, Q > const & x)
-
- -

Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations.

-

Returns false otherwise, including for implementations with no NaN representations.

-

/!\ When using compiler fast math, this function may fail.

-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::lerp (qua< T, Q > const & x,
qua< T, Q > const & y,
a 
)
-
- -

Linear interpolation of two quaternions.

-

The interpolation is oriented.

-
Parameters
- - - - -
xA quaternion
yA quaternion
aInterpolation factor. The interpolation is defined in the range [0, 1].
-
-
-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::mix (qua< T, Q > const & x,
qua< T, Q > const & y,
a 
)
-
- -

Spherical linear interpolation of two quaternions.

-

The interpolation is oriented and the rotation is performed at constant speed. For short path spherical linear interpolation, use the slerp function.

-
Parameters
- - - - -
xA quaternion
yA quaternion
aInterpolation factor. The interpolation is defined beyond the range [0, 1].
-
-
-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
-
See also
- slerp(qua<T, Q> const& x, qua<T, Q> const& y, T const& a)
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::slerp (qua< T, Q > const & x,
qua< T, Q > const & y,
a 
)
-
- -

Spherical linear interpolation of two quaternions.

-

The interpolation always take the short path and the rotation is performed at constant speed.

-
Parameters
- - - - -
xA quaternion
yA quaternion
aInterpolation factor. The interpolation is defined beyond the range [0, 1].
-
-
-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00249.html b/tests/OpenGL/package/glm/doc/api/a00249.html deleted file mode 100644 index 3a3aa361..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00249.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_quaternion_double - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_quaternion_double
-
-
- -

Exposes double-precision floating point quaternion type. -More...

- - - - - -

-Typedefs

-typedef qua< double, defaultp > dquat
 Quaternion of double-precision floating-point numbers.
 
-

Detailed Description

-

Exposes double-precision floating point quaternion type.

-

Include <glm/ext/quaternion_double.hpp> to use the features of this extension.

-
See also
GLM_EXT_quaternion_float
-
-GLM_EXT_quaternion_double_precision
-
-GLM_EXT_quaternion_common
-
-GLM_EXT_quaternion_exponential
-
-GLM_EXT_quaternion_geometric
-
-GLM_EXT_quaternion_relational
-
-GLM_EXT_quaternion_transform
-
-GLM_EXT_quaternion_trigonometric
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00250.html b/tests/OpenGL/package/glm/doc/api/a00250.html deleted file mode 100644 index c82b3f64..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00250.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_quaternion_double_precision - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_quaternion_double_precision
-
-
- -

Exposes double-precision floating point quaternion type with various precision in term of ULPs. -More...

- - - - - - - - - - - -

-Typedefs

typedef qua< double, highp > highp_dquat
 Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef qua< double, lowp > lowp_dquat
 Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef qua< double, mediump > mediump_dquat
 Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-

Exposes double-precision floating point quaternion type with various precision in term of ULPs.

-

Include <glm/ext/quaternion_double_precision.hpp> to use the features of this extension.

-

Typedef Documentation

- -
-
- - - - -
typedef qua< double, highp > highp_dquat
-
- -

Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs.

-
See also
GLM_EXT_quaternion_double_precision
- -

Definition at line 38 of file quaternion_double_precision.hpp.

- -
-
- -
-
- - - - -
typedef qua< double, lowp > lowp_dquat
-
- -

Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs.

-
See also
GLM_EXT_quaternion_double_precision
- -

Definition at line 28 of file quaternion_double_precision.hpp.

- -
-
- -
-
- - - - -
typedef qua< double, mediump > mediump_dquat
-
- -

Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs.

-
See also
GLM_EXT_quaternion_double_precision
- -

Definition at line 33 of file quaternion_double_precision.hpp.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00251.html b/tests/OpenGL/package/glm/doc/api/a00251.html deleted file mode 100644 index 7f58a3e8..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00251.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_quaternion_exponential - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
-
-
GLM_EXT_quaternion_exponential
-
-
- -

Provides exponential functions for quaternion types. -More...

-

Provides exponential functions for quaternion types.

-

Include <glm/ext/quaternion_exponential.hpp> to use the features of this extension.

-
See also
core_exponential
-
-GLM_EXT_quaternion_float
-
-GLM_EXT_quaternion_double
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00252.html b/tests/OpenGL/package/glm/doc/api/a00252.html deleted file mode 100644 index 902bd318..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00252.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_quaternion_float - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_quaternion_float
-
-
- -

Exposes single-precision floating point quaternion type. -More...

- - - - - -

-Typedefs

-typedef qua< float, defaultp > quat
 Quaternion of single-precision floating-point numbers.
 
-

Detailed Description

-

Exposes single-precision floating point quaternion type.

-

Include <glm/ext/quaternion_float.hpp> to use the features of this extension.

-
See also
GLM_EXT_quaternion_double
-
-GLM_EXT_quaternion_float_precision
-
-GLM_EXT_quaternion_common
-
-GLM_EXT_quaternion_exponential
-
-GLM_EXT_quaternion_geometric
-
-GLM_EXT_quaternion_relational
-
-GLM_EXT_quaternion_transform
-
-GLM_EXT_quaternion_trigonometric
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00253.html b/tests/OpenGL/package/glm/doc/api/a00253.html deleted file mode 100644 index 8b283481..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00253.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_quaternion_float_precision - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_quaternion_float_precision
-
-
- -

Exposes single-precision floating point quaternion type with various precision in term of ULPs. -More...

- - - - - - - - - - - -

-Typedefs

-typedef qua< float, highp > highp_quat
 Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef qua< float, lowp > lowp_quat
 Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef qua< float, mediump > mediump_quat
 Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-

Detailed Description

-

Exposes single-precision floating point quaternion type with various precision in term of ULPs.

-

Include <glm/ext/quaternion_float_precision.hpp> to use the features of this extension.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00254.html b/tests/OpenGL/package/glm/doc/api/a00254.html deleted file mode 100644 index 7290e3aa..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00254.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_quaternion_geometric - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_quaternion_geometric
-
-
- -

Provides geometric functions for quaternion types. -More...

- - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER qua< T, Q > cross (qua< T, Q > const &q1, qua< T, Q > const &q2)
 Compute a cross product. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T dot (qua< T, Q > const &x, qua< T, Q > const &y)
 Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T length (qua< T, Q > const &q)
 Returns the norm of a quaternions. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > normalize (qua< T, Q > const &q)
 Returns the normalized quaternion. More...
 
-

Detailed Description

-

Provides geometric functions for quaternion types.

-

Include <glm/ext/quaternion_geometric.hpp> to use the features of this extension.

-
See also
core_geometric
-
-GLM_EXT_quaternion_float
-
-GLM_EXT_quaternion_double
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_QUALIFIER qua<T, Q> glm::cross (qua< T, Q > const & q1,
qua< T, Q > const & q2 
)
-
- -

Compute a cross product.

-
Template Parameters
- - - -
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLM_EXT_quaternion_geometric
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::dot (qua< T, Q > const & x,
qua< T, Q > const & y 
)
-
- -

Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...

-
Template Parameters
- - - -
TFloating-point scalar types.
QValue from qualifier enum
-
-
-
See also
GLM_EXT_quaternion_geometric
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::length (qua< T, Q > const & q)
-
- -

Returns the norm of a quaternions.

-
Template Parameters
- - - -
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLM_EXT_quaternion_geometric
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::normalize (qua< T, Q > const & q)
-
- -

Returns the normalized quaternion.

-
Template Parameters
- - - -
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLM_EXT_quaternion_geometric
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00255.html b/tests/OpenGL/package/glm/doc/api/a00255.html deleted file mode 100644 index 98943673..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00255.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_quaternion_relational - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_quaternion_relational
-
-
- -

Exposes comparison functions for quaternion types that take a user defined epsilon values. -More...

- - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > equal (qua< T, Q > const &x, qua< T, Q > const &y)
 Returns the component-wise comparison of result x == y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > equal (qua< T, Q > const &x, qua< T, Q > const &y, T epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > notEqual (qua< T, Q > const &x, qua< T, Q > const &y)
 Returns the component-wise comparison of result x != y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > notEqual (qua< T, Q > const &x, qua< T, Q > const &y, T epsilon)
 Returns the component-wise comparison of |x - y| >= epsilon. More...
 
-

Detailed Description

-

Exposes comparison functions for quaternion types that take a user defined epsilon values.

-

Include <glm/ext/quaternion_relational.hpp> to use the features of this extension.

-
See also
core_vector_relational
-
-GLM_EXT_vector_relational
-
-GLM_EXT_matrix_relational
-
-GLM_EXT_quaternion_float
-
-GLM_EXT_quaternion_double
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<4, bool, Q> glm::equal (qua< T, Q > const & x,
qua< T, Q > const & y 
)
-
- -

Returns the component-wise comparison of result x == y.

-
Template Parameters
- - - -
TFloating-point scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<4, bool, Q> glm::equal (qua< T, Q > const & x,
qua< T, Q > const & y,
epsilon 
)
-
- -

Returns the component-wise comparison of |x - y| < epsilon.

-
Template Parameters
- - - -
TFloating-point scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<4, bool, Q> glm::notEqual (qua< T, Q > const & x,
qua< T, Q > const & y 
)
-
- -

Returns the component-wise comparison of result x != y.

-
Template Parameters
- - - -
TFloating-point scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<4, bool, Q> glm::notEqual (qua< T, Q > const & x,
qua< T, Q > const & y,
epsilon 
)
-
- -

Returns the component-wise comparison of |x - y| >= epsilon.

-
Template Parameters
- - - -
TFloating-point scalar types
QValue from qualifier enum
-
-
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00256.html b/tests/OpenGL/package/glm/doc/api/a00256.html deleted file mode 100644 index 73bbcd55..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00256.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_quaternion_transform - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_quaternion_transform
-
-
- -

Provides transformation functions for quaternion types. -More...

- - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > exp (qua< T, Q > const &q)
 Returns a exponential of a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > log (qua< T, Q > const &q)
 Returns a logarithm of a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > pow (qua< T, Q > const &q, T y)
 Returns a quaternion raised to a power. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > rotate (qua< T, Q > const &q, T const &angle, vec< 3, T, Q > const &axis)
 Rotates a quaternion from a vector of 3 components axis and an angle. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > sqrt (qua< T, Q > const &q)
 Returns the square root of a quaternion. More...
 
-

Detailed Description

-

Provides transformation functions for quaternion types.

-

Include <glm/ext/quaternion_transform.hpp> to use the features of this extension.

-
See also
GLM_EXT_quaternion_float
-
-GLM_EXT_quaternion_double
-
-GLM_EXT_quaternion_exponential
-
-GLM_EXT_quaternion_geometric
-
-GLM_EXT_quaternion_relational
-
-GLM_EXT_quaternion_trigonometric
-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::exp (qua< T, Q > const & q)
-
- -

Returns a exponential of a quaternion.

-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::log (qua< T, Q > const & q)
-
- -

Returns a logarithm of a quaternion.

-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::pow (qua< T, Q > const & q,
y 
)
-
- -

Returns a quaternion raised to a power.

-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::rotate (qua< T, Q > const & q,
T const & angle,
vec< 3, T, Q > const & axis 
)
-
- -

Rotates a quaternion from a vector of 3 components axis and an angle.

-
Parameters
- - - - -
qSource orientation
angleAngle expressed in radians.
axisAxis of the rotation
-
-
-
Template Parameters
- - - -
TFloating-point scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::sqrt (qua< T, Q > const & q)
-
- -

Returns the square root of a quaternion.

-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00257.html b/tests/OpenGL/package/glm/doc/api/a00257.html deleted file mode 100644 index 486375f4..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00257.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_quaternion_trigonometric - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_quaternion_trigonometric
-
-
- -

Provides trigonometric functions for quaternion types. -More...

- - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL T angle (qua< T, Q > const &x)
 Returns the quaternion rotation angle. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > angleAxis (T const &angle, vec< 3, T, Q > const &axis)
 Build a quaternion from an angle and a normalized axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > axis (qua< T, Q > const &x)
 Returns the q rotation axis. More...
 
-

Detailed Description

-

Provides trigonometric functions for quaternion types.

-

Include <glm/ext/quaternion_trigonometric.hpp> to use the features of this extension.

-
See also
GLM_EXT_quaternion_float
-
-GLM_EXT_quaternion_double
-
-GLM_EXT_quaternion_exponential
-
-GLM_EXT_quaternion_geometric
-
-GLM_EXT_quaternion_relational
-
-GLM_EXT_quaternion_transform
-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::angle (qua< T, Q > const & x)
-
- -

Returns the quaternion rotation angle.

-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::angleAxis (T const & angle,
vec< 3, T, Q > const & axis 
)
-
- -

Build a quaternion from an angle and a normalized axis.

-
Parameters
- - - -
angleAngle expressed in radians.
axisAxis of the quaternion, must be normalized.
-
-
-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::axis (qua< T, Q > const & x)
-
- -

Returns the q rotation axis.

-
Template Parameters
- - - -
TA floating-point scalar type
QA value from qualifier enum
-
-
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00258.html b/tests/OpenGL/package/glm/doc/api/a00258.html deleted file mode 100644 index 532bab82..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00258.html +++ /dev/null @@ -1,570 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_scalar_common - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_scalar_common
-
-
- -

Exposes min and max functions for 3 to 4 scalar parameters. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL T fmax (T a, T b)
 Returns the maximum component-wise values of 2 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T fmax (T a, T b, T C)
 Returns the maximum component-wise values of 3 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T fmax (T a, T b, T C, T D)
 Returns the maximum component-wise values of 4 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T fmin (T a, T b)
 Returns the minimum component-wise values of 2 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T fmin (T a, T b, T c)
 Returns the minimum component-wise values of 3 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T fmin (T a, T b, T c, T d)
 Returns the minimum component-wise values of 4 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T max (T a, T b, T c)
 Returns the maximum component-wise values of 3 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T max (T a, T b, T c, T d)
 Returns the maximum component-wise values of 4 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T min (T a, T b, T c)
 Returns the minimum component-wise values of 3 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T min (T a, T b, T c, T d)
 Returns the minimum component-wise values of 4 inputs. More...
 
-

Detailed Description

-

Exposes min and max functions for 3 to 4 scalar parameters.

-

Include <glm/ext/scalar_common.hpp> to use the features of this extension.

-
See also
Common functions
-
-GLM_EXT_vector_common
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::fmax (a,
b 
)
-
- -

Returns the maximum component-wise values of 2 inputs.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - -
TA floating-point scalar type.
-
-
-
See also
std::fmax documentation
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::fmax (a,
b,
C 
)
-
- -

Returns the maximum component-wise values of 3 inputs.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - -
TA floating-point scalar type.
-
-
-
See also
std::fmax documentation
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::fmax (a,
b,
C,
D 
)
-
- -

Returns the maximum component-wise values of 4 inputs.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - -
TA floating-point scalar type.
-
-
-
See also
std::fmax documentation
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::fmin (a,
b 
)
-
- -

Returns the minimum component-wise values of 2 inputs.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - -
TA floating-point scalar type.
-
-
-
See also
std::fmin documentation
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::fmin (a,
b,
c 
)
-
- -

Returns the minimum component-wise values of 3 inputs.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - -
TA floating-point scalar type.
-
-
-
See also
std::fmin documentation
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::fmin (a,
b,
c,
d 
)
-
- -

Returns the minimum component-wise values of 4 inputs.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - -
TA floating-point scalar type.
-
-
-
See also
std::fmin documentation
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::max (a,
b,
c 
)
-
- -

Returns the maximum component-wise values of 3 inputs.

-
Template Parameters
- - -
TA floating-point scalar type.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::max (a,
b,
c,
d 
)
-
- -

Returns the maximum component-wise values of 4 inputs.

-
Template Parameters
- - -
TA floating-point scalar type.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::min (a,
b,
c 
)
-
- -

Returns the minimum component-wise values of 3 inputs.

-
Template Parameters
- - -
TA floating-point scalar type.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::min (a,
b,
c,
d 
)
-
- -

Returns the minimum component-wise values of 4 inputs.

-
Template Parameters
- - -
TA floating-point scalar type.
-
-
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00259.html b/tests/OpenGL/package/glm/doc/api/a00259.html deleted file mode 100644 index c34c0599..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00259.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_scalar_constants - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_scalar_constants
-
-
- -

Provides a list of constants and precomputed useful values. -More...

- - - - - - - - - - -

-Functions

-template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon ()
 Return the epsilon constant for floating point types.
 
-template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType pi ()
 Return the pi constant for floating point types.
 
-

Detailed Description

-

Provides a list of constants and precomputed useful values.

-

Include <glm/ext/scalar_constants.hpp> to use the features of this extension.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00260.html b/tests/OpenGL/package/glm/doc/api/a00260.html deleted file mode 100644 index 256c6f51..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00260.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_scalar_int_sized - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_scalar_int_sized
-
-
- -

Exposes sized signed integer scalar types. -More...

- - - - - - - - - - - - - - -

-Typedefs

-typedef detail::int16 int16
 16 bit signed integer type.
 
-typedef detail::int32 int32
 32 bit signed integer type.
 
-typedef detail::int64 int64
 64 bit signed integer type.
 
-typedef detail::int8 int8
 8 bit signed integer type.
 
-

Detailed Description

-

Exposes sized signed integer scalar types.

-

Include <glm/ext/scalar_int_sized.hpp> to use the features of this extension.

-
See also
GLM_EXT_scalar_uint_sized
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00261.html b/tests/OpenGL/package/glm/doc/api/a00261.html deleted file mode 100644 index 9772b954..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00261.html +++ /dev/null @@ -1,336 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_scalar_integer - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_scalar_integer
-
-
- -

Include <glm/ext/scalar_integer.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genIUType >
GLM_FUNC_DECL int findNSB (genIUType x, int significantBitCount)
 Returns the bit number of the Nth significant bit set to 1 in the binary representation of value. More...
 
template<typename genIUType >
GLM_FUNC_DECL bool isMultiple (genIUType v, genIUType Multiple)
 Return true if the 'Value' is a multiple of 'Multiple'. More...
 
template<typename genIUType >
GLM_FUNC_DECL bool isPowerOfTwo (genIUType v)
 Return true if the value is a power of two number. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType nextMultiple (genIUType v, genIUType Multiple)
 Higher multiple number of Source. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType nextPowerOfTwo (genIUType v)
 Return the power of two number which value is just higher the input value, round up to a power of two. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType prevMultiple (genIUType v, genIUType Multiple)
 Lower multiple number of Source. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType prevPowerOfTwo (genIUType v)
 Return the power of two number which value is just lower the input value, round down to a power of two. More...
 
-

Detailed Description

-

Include <glm/ext/scalar_integer.hpp> to use the features of this extension.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL int glm::findNSB (genIUType x,
int significantBitCount 
)
-
- -

Returns the bit number of the Nth significant bit set to 1 in the binary representation of value.

-

If value bitcount is less than the Nth significant bit, -1 will be returned.

-
Template Parameters
- - -
genIUTypeSigned or unsigned integer scalar types.
-
-
-
See also
GLM_EXT_scalar_integer
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::isMultiple (genIUType v,
genIUType Multiple 
)
-
- -

Return true if the 'Value' is a multiple of 'Multiple'.

-
See also
GLM_EXT_scalar_integer
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL bool glm::isPowerOfTwo (genIUType v)
-
- -

Return true if the value is a power of two number.

-
See also
GLM_EXT_scalar_integer
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genIUType glm::nextMultiple (genIUType v,
genIUType Multiple 
)
-
- -

Higher multiple number of Source.

-
Template Parameters
- - -
genIUTypeInteger scalar or vector types.
-
-
-
Parameters
- - - -
vSource value to which is applied the function
MultipleMust be a null or positive value
-
-
-
See also
GLM_EXT_scalar_integer
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genIUType glm::nextPowerOfTwo (genIUType v)
-
- -

Return the power of two number which value is just higher the input value, round up to a power of two.

-
See also
GLM_EXT_scalar_integer
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genIUType glm::prevMultiple (genIUType v,
genIUType Multiple 
)
-
- -

Lower multiple number of Source.

-
Template Parameters
- - -
genIUTypeInteger scalar or vector types.
-
-
-
Parameters
- - - -
vSource value to which is applied the function
MultipleMust be a null or positive value
-
-
-
See also
GLM_EXT_scalar_integer
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genIUType glm::prevPowerOfTwo (genIUType v)
-
- -

Return the power of two number which value is just lower the input value, round down to a power of two.

-
See also
GLM_EXT_scalar_integer
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00262.html b/tests/OpenGL/package/glm/doc/api/a00262.html deleted file mode 100644 index fa299f31..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00262.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_scalar_relational - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
-
-
GLM_EXT_scalar_relational
-
-
- -

Exposes comparison functions for scalar types that take a user defined epsilon values. -More...

-

Exposes comparison functions for scalar types that take a user defined epsilon values.

-

Include <glm/ext/scalar_relational.hpp> to use the features of this extension.

-
See also
core_vector_relational
-
-GLM_EXT_vector_relational
-
-GLM_EXT_matrix_relational
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00263.html b/tests/OpenGL/package/glm/doc/api/a00263.html deleted file mode 100644 index 8a4cbfca..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00263.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_scalar_uint_sized - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_scalar_uint_sized
-
-
- -

Exposes sized unsigned integer scalar types. -More...

- - - - - - - - - - - - - - -

-Typedefs

-typedef detail::uint16 uint16
 16 bit unsigned integer type.
 
-typedef detail::uint32 uint32
 32 bit unsigned integer type.
 
-typedef detail::uint64 uint64
 64 bit unsigned integer type.
 
-typedef detail::uint8 uint8
 8 bit unsigned integer type.
 
-

Detailed Description

-

Exposes sized unsigned integer scalar types.

-

Include <glm/ext/scalar_uint_sized.hpp> to use the features of this extension.

-
See also
GLM_EXT_scalar_int_sized
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00264.html b/tests/OpenGL/package/glm/doc/api/a00264.html deleted file mode 100644 index 69fc2f91..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00264.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_scalar_ulp - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
-
-
GLM_EXT_scalar_ulp
-
-
- -

Allow the measurement of the accuracy of a function against a reference implementation. -More...

-

Allow the measurement of the accuracy of a function against a reference implementation.

-

This extension works on floating-point data and provide results in ULP.

-

Include <glm/ext/scalar_ulp.hpp> to use the features of this extension.

-
See also
GLM_EXT_vector_ulp
-
-GLM_EXT_scalar_relational
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00265.html b/tests/OpenGL/package/glm/doc/api/a00265.html deleted file mode 100644 index 0daa238f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00265.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_vector_bool1 - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_vector_bool1
-
-
- -

Exposes bvec1 vector type. -More...

- - - - - -

-Typedefs

-typedef vec< 1, bool, defaultp > bvec1
 1 components vector of boolean.
 
-

Detailed Description

-

Exposes bvec1 vector type.

-

Include <glm/ext/vector_bool1.hpp> to use the features of this extension.

-
See also
GLM_EXT_vector_bool1_precision extension.
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00266.html b/tests/OpenGL/package/glm/doc/api/a00266.html deleted file mode 100644 index 77a77f2d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00266.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_vector_bool1_precision - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_vector_bool1_precision
-
-
- -

Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types. -More...

- - - - - - - - - - - -

-Typedefs

-typedef vec< 1, bool, highp > highp_bvec1
 1 component vector of bool values.
 
-typedef vec< 1, bool, lowp > lowp_bvec1
 1 component vector of bool values.
 
-typedef vec< 1, bool, mediump > mediump_bvec1
 1 component vector of bool values.
 
-

Detailed Description

-

Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types.

-

Include <glm/ext/vector_bool1_precision.hpp> to use the features of this extension.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00267.html b/tests/OpenGL/package/glm/doc/api/a00267.html deleted file mode 100644 index d7b3e507..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00267.html +++ /dev/null @@ -1,674 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_vector_common - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_vector_common
-
-
- -

Exposes min and max functions for 3 to 4 vector parameters. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmax (vec< L, T, Q > const &a, T b)
 Returns y if x < y; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmax (vec< L, T, Q > const &a, vec< L, T, Q > const &b)
 Returns y if x < y; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmax (vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c)
 Returns y if x < y; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmax (vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c, vec< L, T, Q > const &d)
 Returns y if x < y; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmin (vec< L, T, Q > const &x, T y)
 Returns y if y < x; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmin (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns y if y < x; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmin (vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c)
 Returns y if y < x; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmin (vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c, vec< L, T, Q > const &d)
 Returns y if y < x; otherwise, it returns x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > max (vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &z)
 Return the maximum component-wise values of 3 inputs. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > max (vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &z, vec< L, T, Q > const &w)
 Return the maximum component-wise values of 4 inputs. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > min (vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c)
 Return the minimum component-wise values of 3 inputs. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > min (vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c, vec< L, T, Q > const &d)
 Return the minimum component-wise values of 4 inputs. More...
 
-

Detailed Description

-

Exposes min and max functions for 3 to 4 vector parameters.

-

Include <glm/ext/vector_common.hpp> to use the features of this extension.

-
See also
core_common
-
-GLM_EXT_scalar_common
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fmax (vec< L, T, Q > const & a,
b 
)
-
- -

Returns y if x < y; otherwise, it returns x.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
std::fmax documentation
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fmax (vec< L, T, Q > const & a,
vec< L, T, Q > const & b 
)
-
- -

Returns y if x < y; otherwise, it returns x.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
std::fmax documentation
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fmax (vec< L, T, Q > const & a,
vec< L, T, Q > const & b,
vec< L, T, Q > const & c 
)
-
- -

Returns y if x < y; otherwise, it returns x.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
std::fmax documentation
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fmax (vec< L, T, Q > const & a,
vec< L, T, Q > const & b,
vec< L, T, Q > const & c,
vec< L, T, Q > const & d 
)
-
- -

Returns y if x < y; otherwise, it returns x.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
std::fmax documentation
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fmin (vec< L, T, Q > const & x,
y 
)
-
- -

Returns y if y < x; otherwise, it returns x.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
std::fmin documentation
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fmin (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Returns y if y < x; otherwise, it returns x.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
std::fmin documentation
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fmin (vec< L, T, Q > const & a,
vec< L, T, Q > const & b,
vec< L, T, Q > const & c 
)
-
- -

Returns y if y < x; otherwise, it returns x.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
std::fmin documentation
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fmin (vec< L, T, Q > const & a,
vec< L, T, Q > const & b,
vec< L, T, Q > const & c,
vec< L, T, Q > const & d 
)
-
- -

Returns y if y < x; otherwise, it returns x.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
std::fmin documentation
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> glm::max (vec< L, T, Q > const & x,
vec< L, T, Q > const & y,
vec< L, T, Q > const & z 
)
-
- -

Return the maximum component-wise values of 3 inputs.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> glm::max (vec< L, T, Q > const & x,
vec< L, T, Q > const & y,
vec< L, T, Q > const & z,
vec< L, T, Q > const & w 
)
-
- -

Return the maximum component-wise values of 4 inputs.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> glm::min (vec< L, T, Q > const & a,
vec< L, T, Q > const & b,
vec< L, T, Q > const & c 
)
-
- -

Return the minimum component-wise values of 3 inputs.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> glm::min (vec< L, T, Q > const & a,
vec< L, T, Q > const & b,
vec< L, T, Q > const & c,
vec< L, T, Q > const & d 
)
-
- -

Return the minimum component-wise values of 4 inputs.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00268.html b/tests/OpenGL/package/glm/doc/api/a00268.html deleted file mode 100644 index b4c4b4e9..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00268.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_vector_double1 - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_vector_double1
-
-
- -

Exposes double-precision floating point vector type with one component. -More...

- - - - - -

-Typedefs

-typedef vec< 1, double, defaultp > dvec1
 1 components vector of double-precision floating-point numbers.
 
-

Detailed Description

-

Exposes double-precision floating point vector type with one component.

-

Include <glm/ext/vector_double1.hpp> to use the features of this extension.

-
See also
GLM_EXT_vector_double1_precision extension.
-
-GLM_EXT_vector_float1 extension.
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00269.html b/tests/OpenGL/package/glm/doc/api/a00269.html deleted file mode 100644 index 14aa0c42..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00269.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_vector_double1_precision - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_vector_double1_precision
-
-
- -

Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types. -More...

- - - - - - - - - - - -

-Typedefs

-typedef vec< 1, double, highp > highp_dvec1
 1 component vector of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, lowp > lowp_dvec1
 1 component vector of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, mediump > mediump_dvec1
 1 component vector of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-

Detailed Description

-

Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types.

-

Include <glm/ext/vector_double1_precision.hpp> to use the features of this extension.

-
See also
GLM_EXT_vector_double1
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00270.html b/tests/OpenGL/package/glm/doc/api/a00270.html deleted file mode 100644 index 89ebe04e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00270.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_vector_float1 - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_vector_float1
-
-
- -

Exposes single-precision floating point vector type with one component. -More...

- - - - - -

-Typedefs

-typedef vec< 1, float, defaultp > vec1
 1 components vector of single-precision floating-point numbers.
 
-

Detailed Description

-

Exposes single-precision floating point vector type with one component.

-

Include <glm/ext/vector_float1.hpp> to use the features of this extension.

-
See also
GLM_EXT_vector_float1_precision extension.
-
-GLM_EXT_vector_double1 extension.
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00271.html b/tests/OpenGL/package/glm/doc/api/a00271.html deleted file mode 100644 index abfca2ae..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00271.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_vector_float1_precision - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_vector_float1_precision
-
-
- -

Exposes highp_vec1, mediump_vec1 and lowp_vec1 types. -More...

- - - - - - - - - - - -

-Typedefs

-typedef vec< 1, float, highp > highp_vec1
 1 component vector of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, float, lowp > lowp_vec1
 1 component vector of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, float, mediump > mediump_vec1
 1 component vector of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-

Detailed Description

-

Exposes highp_vec1, mediump_vec1 and lowp_vec1 types.

-

Include <glm/ext/vector_float1_precision.hpp> to use the features of this extension.

-
See also
GLM_EXT_vector_float1 extension.
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00272.html b/tests/OpenGL/package/glm/doc/api/a00272.html deleted file mode 100644 index ef08fcfe..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00272.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_vector_int1 - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_vector_int1
-
-
- -

Exposes ivec1 vector type. -More...

- - - - - -

-Typedefs

-typedef vec< 1, int, defaultp > ivec1
 1 component vector of signed integer numbers.
 
-

Detailed Description

-

Exposes ivec1 vector type.

-

Include <glm/ext/vector_int1.hpp> to use the features of this extension.

-
See also
GLM_EXT_vector_uint1 extension.
-
-GLM_EXT_vector_int1_precision extension.
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00273.html b/tests/OpenGL/package/glm/doc/api/a00273.html deleted file mode 100644 index 6d53604f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00273.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_vector_int1_precision - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_vector_int1_precision
-
-
- -

Exposes highp_ivec1, mediump_ivec1 and lowp_ivec1 types. -More...

- - - - - - - - - - - -

-Typedefs

-typedef vec< 1, int, highp > highp_ivec1
 1 component vector of signed integer values.
 
-typedef vec< 1, int, lowp > lowp_ivec1
 1 component vector of signed integer values.
 
-typedef vec< 1, int, mediump > mediump_ivec1
 1 component vector of signed integer values.
 
-

Detailed Description

-

Exposes highp_ivec1, mediump_ivec1 and lowp_ivec1 types.

-

Include <glm/ext/vector_int1_precision.hpp> to use the features of this extension.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00274.html b/tests/OpenGL/package/glm/doc/api/a00274.html deleted file mode 100644 index 77b13eec..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00274.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_vector_integer - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_vector_integer
-
-
- -

Include <glm/ext/vector_integer.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, int, Q > findNSB (vec< L, T, Q > const &Source, vec< L, int, Q > SignificantBitCount)
 Returns the bit number of the Nth significant bit set to 1 in the binary representation of value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > isMultiple (vec< L, T, Q > const &v, T Multiple)
 Return true if the 'Value' is a multiple of 'Multiple'. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > isMultiple (vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
 Return true if the 'Value' is a multiple of 'Multiple'. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > isPowerOfTwo (vec< L, T, Q > const &v)
 Return true if the value is a power of two number. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > nextMultiple (vec< L, T, Q > const &v, T Multiple)
 Higher multiple number of Source. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > nextMultiple (vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
 Higher multiple number of Source. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > nextPowerOfTwo (vec< L, T, Q > const &v)
 Return the power of two number which value is just higher the input value, round up to a power of two. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > prevMultiple (vec< L, T, Q > const &v, T Multiple)
 Lower multiple number of Source. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > prevMultiple (vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
 Lower multiple number of Source. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > prevPowerOfTwo (vec< L, T, Q > const &v)
 Return the power of two number which value is just lower the input value, round down to a power of two. More...
 
-

Detailed Description

-

Include <glm/ext/vector_integer.hpp> to use the features of this extension.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, int, Q> glm::findNSB (vec< L, T, Q > const & Source,
vec< L, int, Q > SignificantBitCount 
)
-
- -

Returns the bit number of the Nth significant bit set to 1 in the binary representation of value.

-

If value bitcount is less than the Nth significant bit, -1 will be returned.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TSigned or unsigned integer scalar types.
-
-
-
See also
GLM_EXT_vector_integer
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, bool, Q> glm::isMultiple (vec< L, T, Q > const & v,
Multiple 
)
-
- -

Return true if the 'Value' is a multiple of 'Multiple'.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TSigned or unsigned integer scalar types.
QValue from qualifier enum
-
-
-
See also
GLM_EXT_vector_integer
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, bool, Q> glm::isMultiple (vec< L, T, Q > const & v,
vec< L, T, Q > const & Multiple 
)
-
- -

Return true if the 'Value' is a multiple of 'Multiple'.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TSigned or unsigned integer scalar types.
QValue from qualifier enum
-
-
-
See also
GLM_EXT_vector_integer
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, bool, Q> glm::isPowerOfTwo (vec< L, T, Q > const & v)
-
- -

Return true if the value is a power of two number.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TSigned or unsigned integer scalar types.
QValue from qualifier enum
-
-
-
See also
GLM_EXT_vector_integer
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::nextMultiple (vec< L, T, Q > const & v,
Multiple 
)
-
- -

Higher multiple number of Source.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TSigned or unsigned integer scalar types.
QValue from qualifier enum
-
-
-
Parameters
- - - -
vSource values to which is applied the function
MultipleMust be a null or positive value
-
-
-
See also
GLM_EXT_vector_integer
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::nextMultiple (vec< L, T, Q > const & v,
vec< L, T, Q > const & Multiple 
)
-
- -

Higher multiple number of Source.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TSigned or unsigned integer scalar types.
QValue from qualifier enum
-
-
-
Parameters
- - - -
vSource values to which is applied the function
MultipleMust be a null or positive value
-
-
-
See also
GLM_EXT_vector_integer
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::nextPowerOfTwo (vec< L, T, Q > const & v)
-
- -

Return the power of two number which value is just higher the input value, round up to a power of two.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TSigned or unsigned integer scalar types.
QValue from qualifier enum
-
-
-
See also
GLM_EXT_vector_integer
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::prevMultiple (vec< L, T, Q > const & v,
Multiple 
)
-
- -

Lower multiple number of Source.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TSigned or unsigned integer scalar types.
QValue from qualifier enum
-
-
-
Parameters
- - - -
vSource values to which is applied the function
MultipleMust be a null or positive value
-
-
-
See also
GLM_EXT_vector_integer
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::prevMultiple (vec< L, T, Q > const & v,
vec< L, T, Q > const & Multiple 
)
-
- -

Lower multiple number of Source.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TSigned or unsigned integer scalar types.
QValue from qualifier enum
-
-
-
Parameters
- - - -
vSource values to which is applied the function
MultipleMust be a null or positive value
-
-
-
See also
GLM_EXT_vector_integer
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::prevPowerOfTwo (vec< L, T, Q > const & v)
-
- -

Return the power of two number which value is just lower the input value, round down to a power of two.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TSigned or unsigned integer scalar types.
QValue from qualifier enum
-
-
-
See also
GLM_EXT_vector_integer
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00275.html b/tests/OpenGL/package/glm/doc/api/a00275.html deleted file mode 100644 index ef394961..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00275.html +++ /dev/null @@ -1,484 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_vector_relational - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_vector_relational
-
-
- -

Exposes comparison functions for vector types that take a user defined epsilon values. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > equal (vec< L, T, Q > const &x, vec< L, T, Q > const &y, T epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > equal (vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > equal (vec< L, T, Q > const &x, vec< L, T, Q > const &y, int ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > equal (vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, int, Q > const &ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > notEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y, T epsilon)
 Returns the component-wise comparison of |x - y| >= epsilon. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > notEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &epsilon)
 Returns the component-wise comparison of |x - y| >= epsilon. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > notEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y, int ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > notEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, int, Q > const &ULPs)
 Returns the component-wise comparison between two vectors in term of ULPs. More...
 
-

Detailed Description

-

Exposes comparison functions for vector types that take a user defined epsilon values.

-

Include <glm/ext/vector_relational.hpp> to use the features of this extension.

-
See also
core_vector_relational
-
-GLM_EXT_scalar_relational
-
-GLM_EXT_matrix_relational
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> glm::equal (vec< L, T, Q > const & x,
vec< L, T, Q > const & y,
epsilon 
)
-
- -

Returns the component-wise comparison of |x - y| < epsilon.

-

True if this expression is satisfied.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> glm::equal (vec< L, T, Q > const & x,
vec< L, T, Q > const & y,
vec< L, T, Q > const & epsilon 
)
-
- -

Returns the component-wise comparison of |x - y| < epsilon.

-

True if this expression is satisfied.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> glm::equal (vec< L, T, Q > const & x,
vec< L, T, Q > const & y,
int ULPs 
)
-
- -

Returns the component-wise comparison between two vectors in term of ULPs.

-

True if this expression is satisfied.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> glm::equal (vec< L, T, Q > const & x,
vec< L, T, Q > const & y,
vec< L, int, Q > const & ULPs 
)
-
- -

Returns the component-wise comparison between two vectors in term of ULPs.

-

True if this expression is satisfied.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> glm::notEqual (vec< L, T, Q > const & x,
vec< L, T, Q > const & y,
epsilon 
)
-
- -

Returns the component-wise comparison of |x - y| >= epsilon.

-

True if this expression is not satisfied.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> glm::notEqual (vec< L, T, Q > const & x,
vec< L, T, Q > const & y,
vec< L, T, Q > const & epsilon 
)
-
- -

Returns the component-wise comparison of |x - y| >= epsilon.

-

True if this expression is not satisfied.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> glm::notEqual (vec< L, T, Q > const & x,
vec< L, T, Q > const & y,
int ULPs 
)
-
- -

Returns the component-wise comparison between two vectors in term of ULPs.

-

True if this expression is not satisfied.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point
QValue from qualifier enum
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> glm::notEqual (vec< L, T, Q > const & x,
vec< L, T, Q > const & y,
vec< L, int, Q > const & ULPs 
)
-
- -

Returns the component-wise comparison between two vectors in term of ULPs.

-

True if this expression is not satisfied.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point
QValue from qualifier enum
-
-
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00276.html b/tests/OpenGL/package/glm/doc/api/a00276.html deleted file mode 100644 index ab33a07b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00276.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_vector_uint1 - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_vector_uint1
-
-
- -

Exposes uvec1 vector type. -More...

- - - - - -

-Typedefs

-typedef vec< 1, unsigned int, defaultp > uvec1
 1 component vector of unsigned integer numbers.
 
-

Detailed Description

-

Exposes uvec1 vector type.

-

Include <glm/ext/vector_uvec1.hpp> to use the features of this extension.

-
See also
GLM_EXT_vector_int1 extension.
-
-GLM_EXT_vector_uint1_precision extension.
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00277.html b/tests/OpenGL/package/glm/doc/api/a00277.html deleted file mode 100644 index 21ec7435..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00277.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_vector_uint1_precision - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_EXT_vector_uint1_precision
-
-
- -

Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types. -More...

- - - - - - - - - - - -

-Typedefs

typedef vec< 1, unsigned int, highp > highp_uvec1
 1 component vector of unsigned integer values. More...
 
typedef vec< 1, unsigned int, lowp > lowp_uvec1
 1 component vector of unsigned integer values. More...
 
typedef vec< 1, unsigned int, mediump > mediump_uvec1
 1 component vector of unsigned integer values. More...
 
-

Detailed Description

-

Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types.

-

Include <glm/ext/vector_uint1_precision.hpp> to use the features of this extension.

-

Typedef Documentation

- -
-
- - - - -
typedef vec< 1, u32, highp > highp_uvec1
-
- -

1 component vector of unsigned integer values.

-
See also
GLM_EXT_vector_uint1_precision
- -

Definition at line 27 of file vector_uint1_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u32, lowp > lowp_uvec1
-
- -

1 component vector of unsigned integer values.

-
See also
GLM_EXT_vector_uint1_precision
- -

Definition at line 37 of file vector_uint1_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u32, mediump > mediump_uvec1
-
- -

1 component vector of unsigned integer values.

-
See also
GLM_EXT_vector_uint1_precision
- -

Definition at line 32 of file vector_uint1_precision.hpp.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00278.html b/tests/OpenGL/package/glm/doc/api/a00278.html deleted file mode 100644 index 3537ed9a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00278.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_EXT_vector_ulp - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
-
-
GLM_EXT_vector_ulp
-
-
- -

Allow the measurement of the accuracy of a function against a reference implementation. -More...

-

Allow the measurement of the accuracy of a function against a reference implementation.

-

This extension works on floating-point data and provide results in ULP.

-

Include <glm/ext/vector_ulp.hpp> to use the features of this extension.

-
See also
GLM_EXT_scalar_ulp
-
-GLM_EXT_scalar_relational
-
-GLM_EXT_vector_relational
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00279.html b/tests/OpenGL/package/glm/doc/api/a00279.html deleted file mode 100644 index f4fe42a4..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00279.html +++ /dev/null @@ -1,431 +0,0 @@ - - - - - - -0.9.9 API documentation: Geometric functions - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Geometric functions
-
-
- -

These operate on vectors as vectors, not component-wise. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > cross (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)
 Returns the cross product of x and y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T distance (vec< L, T, Q > const &p0, vec< L, T, Q > const &p1)
 Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T dot (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the dot product of x and y, i.e., result = x * y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > faceforward (vec< L, T, Q > const &N, vec< L, T, Q > const &I, vec< L, T, Q > const &Nref)
 If dot(Nref, I) < 0.0, return N, otherwise, return -N. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T length (vec< L, T, Q > const &x)
 Returns the length of x, i.e., sqrt(x * x). More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > normalize (vec< L, T, Q > const &x)
 Returns a vector in the same direction as x but with length of 1. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > reflect (vec< L, T, Q > const &I, vec< L, T, Q > const &N)
 For the incident vector I and surface orientation N, returns the reflection direction : result = I - 2.0 * dot(N, I) * N. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > refract (vec< L, T, Q > const &I, vec< L, T, Q > const &N, T eta)
 For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector. More...
 
-

Detailed Description

-

These operate on vectors as vectors, not component-wise.

-

Include <glm/geometric.hpp> to use these core features.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::cross (vec< 3, T, Q > const & x,
vec< 3, T, Q > const & y 
)
-
- -

Returns the cross product of x and y.

-
Template Parameters
- - -
TFloating-point scalar types.
-
-
-
See also
GLSL cross man page
-
-GLSL 4.20.8 specification, section 8.5 Geometric Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::distance (vec< L, T, Q > const & p0,
vec< L, T, Q > const & p1 
)
-
- -

Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TFloating-point scalar types.
-
-
-
See also
GLSL distance man page
-
-GLSL 4.20.8 specification, section 8.5 Geometric Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::dot (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Returns the dot product of x and y, i.e., result = x * y.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TFloating-point scalar types.
-
-
-
See also
GLSL dot man page
-
-GLSL 4.20.8 specification, section 8.5 Geometric Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::faceforward (vec< L, T, Q > const & N,
vec< L, T, Q > const & I,
vec< L, T, Q > const & Nref 
)
-
- -

If dot(Nref, I) < 0.0, return N, otherwise, return -N.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TFloating-point scalar types.
-
-
-
See also
GLSL faceforward man page
-
-GLSL 4.20.8 specification, section 8.5 Geometric Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::length (vec< L, T, Q > const & x)
-
- -

Returns the length of x, i.e., sqrt(x * x).

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TFloating-point scalar types.
-
-
-
See also
GLSL length man page
-
-GLSL 4.20.8 specification, section 8.5 Geometric Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::normalize (vec< L, T, Q > const & x)
-
- -

Returns a vector in the same direction as x but with length of 1.

-

According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefined and generate an error.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TFloating-point scalar types.
-
-
-
See also
GLSL normalize man page
-
-GLSL 4.20.8 specification, section 8.5 Geometric Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::reflect (vec< L, T, Q > const & I,
vec< L, T, Q > const & N 
)
-
- -

For the incident vector I and surface orientation N, returns the reflection direction : result = I - 2.0 * dot(N, I) * N.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TFloating-point scalar types.
-
-
-
See also
GLSL reflect man page
-
-GLSL 4.20.8 specification, section 8.5 Geometric Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::refract (vec< L, T, Q > const & I,
vec< L, T, Q > const & N,
eta 
)
-
- -

For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TFloating-point scalar types.
-
-
-
See also
GLSL refract man page
-
-GLSL 4.20.8 specification, section 8.5 Geometric Functions
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00280.html b/tests/OpenGL/package/glm/doc/api/a00280.html deleted file mode 100644 index 30a1bb56..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00280.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - -0.9.9 API documentation: Core features - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Core features
-
-
- -

Features that implement in C++ the GLSL specification as closely as possible. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Modules

 Common functions
 Provides GLSL common functions.
 
 Exponential functions
 Provides GLSL exponential functions.
 
 Geometric functions
 These operate on vectors as vectors, not component-wise.
 
 Vector types
 Vector types of two to four components with an exhaustive set of operators.
 
 Vector types with precision qualifiers
 Vector types with precision qualifiers which may result in various precision in term of ULPs.
 
 Matrix types
 Matrix types of with C columns and R rows where C and R are values between 2 to 4 included.
 
 Matrix types with precision qualifiers
 Matrix types with precision qualifiers which may result in various precision in term of ULPs.
 
 Integer functions
 Provides GLSL functions on integer types.
 
 Matrix functions
 Provides GLSL matrix functions.
 
 Floating-Point Pack and Unpack Functions
 Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types.
 
 Angle and Trigonometry Functions
 Function parameters specified as angle are assumed to be in units of radians.
 
 Vector Relational Functions
 Relational and equality operators (<, <=, >, >=, ==, !=) are defined to operate on scalars and produce scalar Boolean results.
 
- - - - -

-Typedefs

typedef mat< 3, 2, float, defaultp > mat3x2
 3 columns of 2 components matrix of single-precision floating-point numbers. More...
 
-

Detailed Description

-

Features that implement in C++ the GLSL specification as closely as possible.

-

The GLM core consists of C++ types that mirror GLSL types and C++ functions that mirror the GLSL functions.

-

The best documentation for GLM Core is the current GLSL specification, version 4.2 (pdf file).

-

GLM core functionalities require <glm/glm.hpp> to be included to be used.

-

Typedef Documentation

- -
-
- - - - -
typedef mat< 3, 2, f32, defaultp > mat3x2
-
- -

3 columns of 2 components matrix of single-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_float3x2.hpp.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00281.html b/tests/OpenGL/package/glm/doc/api/a00281.html deleted file mode 100644 index 694bcc15..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00281.html +++ /dev/null @@ -1,402 +0,0 @@ - - - - - - -0.9.9 API documentation: Vector types - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Vector types
-
-
- -

Vector types of two to four components with an exhaustive set of operators. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef vec< 2, bool, defaultp > bvec2
 2 components vector of boolean. More...
 
typedef vec< 3, bool, defaultp > bvec3
 3 components vector of boolean. More...
 
typedef vec< 4, bool, defaultp > bvec4
 4 components vector of boolean. More...
 
typedef vec< 2, double, defaultp > dvec2
 2 components vector of double-precision floating-point numbers. More...
 
typedef vec< 3, double, defaultp > dvec3
 3 components vector of double-precision floating-point numbers. More...
 
typedef vec< 4, double, defaultp > dvec4
 4 components vector of double-precision floating-point numbers. More...
 
typedef vec< 2, int, defaultp > ivec2
 2 components vector of signed integer numbers. More...
 
typedef vec< 3, int, defaultp > ivec3
 3 components vector of signed integer numbers. More...
 
typedef vec< 4, int, defaultp > ivec4
 4 components vector of signed integer numbers. More...
 
typedef vec< 2, unsigned int, defaultp > uvec2
 2 components vector of unsigned integer numbers. More...
 
typedef vec< 3, unsigned int, defaultp > uvec3
 3 components vector of unsigned integer numbers. More...
 
typedef vec< 4, unsigned int, defaultp > uvec4
 4 components vector of unsigned integer numbers. More...
 
typedef vec< 2, float, defaultp > vec2
 2 components vector of single-precision floating-point numbers. More...
 
typedef vec< 3, float, defaultp > vec3
 3 components vector of single-precision floating-point numbers. More...
 
typedef vec< 4, float, defaultp > vec4
 4 components vector of single-precision floating-point numbers. More...
 
-

Detailed Description

-

Vector types of two to four components with an exhaustive set of operators.

-

Typedef Documentation

- -
-
- - - - -
typedef vec< 2, bool, defaultp > bvec2
-
- -

2 components vector of boolean.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
- -

Definition at line 15 of file vector_bool2.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, bool, defaultp > bvec3
-
- -

3 components vector of boolean.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
- -

Definition at line 15 of file vector_bool3.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, bool, defaultp > bvec4
-
- -

4 components vector of boolean.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
- -

Definition at line 15 of file vector_bool4.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, f64, defaultp > dvec2
-
- -

2 components vector of double-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
- -

Definition at line 15 of file vector_double2.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, f64, defaultp > dvec3
-
- -

3 components vector of double-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
- -

Definition at line 15 of file vector_double3.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, f64, defaultp > dvec4
-
- -

4 components vector of double-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
- -

Definition at line 15 of file vector_double4.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i32, defaultp > ivec2
-
- -

2 components vector of signed integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
- -

Definition at line 15 of file vector_int2.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i32, defaultp > ivec3
-
- -

3 components vector of signed integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
- -

Definition at line 15 of file vector_int3.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i32, defaultp > ivec4
-
- -

4 components vector of signed integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
- -

Definition at line 15 of file vector_int4.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u32, defaultp > uvec2
-
- -

2 components vector of unsigned integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
- -

Definition at line 15 of file vector_uint2.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u32, defaultp > uvec3
-
- -

3 components vector of unsigned integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
- -

Definition at line 15 of file vector_uint3.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u32, defaultp > uvec4
-
- -

4 components vector of unsigned integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
- -

Definition at line 15 of file vector_uint4.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, float, defaultp > vec2
-
- -

2 components vector of single-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
- -

Definition at line 15 of file vector_float2.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, float, defaultp > vec3
-
- -

3 components vector of single-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
- -

Definition at line 15 of file vector_float3.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, float, defaultp > vec4
-
- -

4 components vector of single-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
- -

Definition at line 15 of file vector_float4.hpp.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00282.html b/tests/OpenGL/package/glm/doc/api/a00282.html deleted file mode 100644 index 38a2d43c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00282.html +++ /dev/null @@ -1,1101 +0,0 @@ - - - - - - -0.9.9 API documentation: Vector types with precision qualifiers - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Vector types with precision qualifiers
-
-
- -

Vector types with precision qualifiers which may result in various precision in term of ULPs. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef vec< 2, bool, highp > highp_bvec2
 2 components vector of high qualifier bool numbers. More...
 
typedef vec< 3, bool, highp > highp_bvec3
 3 components vector of high qualifier bool numbers. More...
 
typedef vec< 4, bool, highp > highp_bvec4
 4 components vector of high qualifier bool numbers. More...
 
typedef vec< 2, double, highp > highp_dvec2
 2 components vector of high double-qualifier floating-point numbers. More...
 
typedef vec< 3, double, highp > highp_dvec3
 3 components vector of high double-qualifier floating-point numbers. More...
 
typedef vec< 4, double, highp > highp_dvec4
 4 components vector of high double-qualifier floating-point numbers. More...
 
typedef vec< 2, int, highp > highp_ivec2
 2 components vector of high qualifier signed integer numbers. More...
 
typedef vec< 3, int, highp > highp_ivec3
 3 components vector of high qualifier signed integer numbers. More...
 
typedef vec< 4, int, highp > highp_ivec4
 4 components vector of high qualifier signed integer numbers. More...
 
typedef vec< 2, unsigned int, highp > highp_uvec2
 2 components vector of high qualifier unsigned integer numbers. More...
 
typedef vec< 3, unsigned int, highp > highp_uvec3
 3 components vector of high qualifier unsigned integer numbers. More...
 
typedef vec< 4, unsigned int, highp > highp_uvec4
 4 components vector of high qualifier unsigned integer numbers. More...
 
typedef vec< 2, float, highp > highp_vec2
 2 components vector of high single-qualifier floating-point numbers. More...
 
typedef vec< 3, float, highp > highp_vec3
 3 components vector of high single-qualifier floating-point numbers. More...
 
typedef vec< 4, float, highp > highp_vec4
 4 components vector of high single-qualifier floating-point numbers. More...
 
typedef vec< 2, bool, lowp > lowp_bvec2
 2 components vector of low qualifier bool numbers. More...
 
typedef vec< 3, bool, lowp > lowp_bvec3
 3 components vector of low qualifier bool numbers. More...
 
typedef vec< 4, bool, lowp > lowp_bvec4
 4 components vector of low qualifier bool numbers. More...
 
typedef vec< 2, double, lowp > lowp_dvec2
 2 components vector of low double-qualifier floating-point numbers. More...
 
typedef vec< 3, double, lowp > lowp_dvec3
 3 components vector of low double-qualifier floating-point numbers. More...
 
typedef vec< 4, double, lowp > lowp_dvec4
 4 components vector of low double-qualifier floating-point numbers. More...
 
typedef vec< 2, int, lowp > lowp_ivec2
 2 components vector of low qualifier signed integer numbers. More...
 
typedef vec< 3, int, lowp > lowp_ivec3
 3 components vector of low qualifier signed integer numbers. More...
 
typedef vec< 4, int, lowp > lowp_ivec4
 4 components vector of low qualifier signed integer numbers. More...
 
typedef vec< 2, unsigned int, lowp > lowp_uvec2
 2 components vector of low qualifier unsigned integer numbers. More...
 
typedef vec< 3, unsigned int, lowp > lowp_uvec3
 3 components vector of low qualifier unsigned integer numbers. More...
 
typedef vec< 4, unsigned int, lowp > lowp_uvec4
 4 components vector of low qualifier unsigned integer numbers. More...
 
typedef vec< 2, float, lowp > lowp_vec2
 2 components vector of low single-qualifier floating-point numbers. More...
 
typedef vec< 3, float, lowp > lowp_vec3
 3 components vector of low single-qualifier floating-point numbers. More...
 
typedef vec< 4, float, lowp > lowp_vec4
 4 components vector of low single-qualifier floating-point numbers. More...
 
typedef vec< 2, bool, mediump > mediump_bvec2
 2 components vector of medium qualifier bool numbers. More...
 
typedef vec< 3, bool, mediump > mediump_bvec3
 3 components vector of medium qualifier bool numbers. More...
 
typedef vec< 4, bool, mediump > mediump_bvec4
 4 components vector of medium qualifier bool numbers. More...
 
typedef vec< 2, double, mediump > mediump_dvec2
 2 components vector of medium double-qualifier floating-point numbers. More...
 
typedef vec< 3, double, mediump > mediump_dvec3
 3 components vector of medium double-qualifier floating-point numbers. More...
 
typedef vec< 4, double, mediump > mediump_dvec4
 4 components vector of medium double-qualifier floating-point numbers. More...
 
typedef vec< 2, int, mediump > mediump_ivec2
 2 components vector of medium qualifier signed integer numbers. More...
 
typedef vec< 3, int, mediump > mediump_ivec3
 3 components vector of medium qualifier signed integer numbers. More...
 
typedef vec< 4, int, mediump > mediump_ivec4
 4 components vector of medium qualifier signed integer numbers. More...
 
typedef vec< 2, unsigned int, mediump > mediump_uvec2
 2 components vector of medium qualifier unsigned integer numbers. More...
 
typedef vec< 3, unsigned int, mediump > mediump_uvec3
 3 components vector of medium qualifier unsigned integer numbers. More...
 
typedef vec< 4, unsigned int, mediump > mediump_uvec4
 4 components vector of medium qualifier unsigned integer numbers. More...
 
typedef vec< 2, float, mediump > mediump_vec2
 2 components vector of medium single-qualifier floating-point numbers. More...
 
typedef vec< 3, float, mediump > mediump_vec3
 3 components vector of medium single-qualifier floating-point numbers. More...
 
typedef vec< 4, float, mediump > mediump_vec4
 4 components vector of medium single-qualifier floating-point numbers. More...
 
-

Detailed Description

-

Vector types with precision qualifiers which may result in various precision in term of ULPs.

-

GLSL allows defining qualifiers for particular variables. With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, with OpenGL ES's GLSL, these qualifiers do have an effect.

-

C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: a number of typedefs that use a particular qualifier.

-

None of these types make any guarantees about the actual qualifier used.

-

Typedef Documentation

- -
-
- - - - -
typedef vec< 2, bool, highp > highp_bvec2
-
- -

2 components vector of high qualifier bool numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file vector_bool2_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, bool, highp > highp_bvec3
-
- -

3 components vector of high qualifier bool numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file vector_bool3_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, bool, highp > highp_bvec4
-
- -

4 components vector of high qualifier bool numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file vector_bool4_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, f64, highp > highp_dvec2
-
- -

2 components vector of high double-qualifier floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file vector_double2_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, f64, highp > highp_dvec3
-
- -

3 components vector of high double-qualifier floating-point numbers.

-

There is no guarantee on the actual qualifier.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 17 of file vector_double3_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, f64, highp > highp_dvec4
-
- -

4 components vector of high double-qualifier floating-point numbers.

-

There is no guarantee on the actual qualifier.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 18 of file vector_double4_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i32, highp > highp_ivec2
-
- -

2 components vector of high qualifier signed integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file vector_int2_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i32, highp > highp_ivec3
-
- -

3 components vector of high qualifier signed integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file vector_int3_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i32, highp > highp_ivec4
-
- -

4 components vector of high qualifier signed integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file vector_int4_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u32, highp > highp_uvec2
-
- -

2 components vector of high qualifier unsigned integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file vector_uint2_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u32, highp > highp_uvec3
-
- -

3 components vector of high qualifier unsigned integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file vector_uint3_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u32, highp > highp_uvec4
-
- -

4 components vector of high qualifier unsigned integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file vector_uint4_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, float, highp > highp_vec2
-
- -

2 components vector of high single-qualifier floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file vector_float2_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, float, highp > highp_vec3
-
- -

3 components vector of high single-qualifier floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file vector_float3_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, float, highp > highp_vec4
-
- -

4 components vector of high single-qualifier floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file vector_float4_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, bool, lowp > lowp_bvec2
-
- -

2 components vector of low qualifier bool numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file vector_bool2_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, bool, lowp > lowp_bvec3
-
- -

3 components vector of low qualifier bool numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file vector_bool3_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, bool, lowp > lowp_bvec4
-
- -

4 components vector of low qualifier bool numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file vector_bool4_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, f64, lowp > lowp_dvec2
-
- -

2 components vector of low double-qualifier floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file vector_double2_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, f64, lowp > lowp_dvec3
-
- -

3 components vector of low double-qualifier floating-point numbers.

-

There is no guarantee on the actual qualifier.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 31 of file vector_double3_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, f64, lowp > lowp_dvec4
-
- -

4 components vector of low double-qualifier floating-point numbers.

-

There is no guarantee on the actual qualifier.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 32 of file vector_double4_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i32, lowp > lowp_ivec2
-
- -

2 components vector of low qualifier signed integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file vector_int2_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i32, lowp > lowp_ivec3
-
- -

3 components vector of low qualifier signed integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file vector_int3_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i32, lowp > lowp_ivec4
-
- -

4 components vector of low qualifier signed integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file vector_int4_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u32, lowp > lowp_uvec2
-
- -

2 components vector of low qualifier unsigned integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file vector_uint2_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u32, lowp > lowp_uvec3
-
- -

3 components vector of low qualifier unsigned integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file vector_uint3_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u32, lowp > lowp_uvec4
-
- -

4 components vector of low qualifier unsigned integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file vector_uint4_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, float, lowp > lowp_vec2
-
- -

2 components vector of low single-qualifier floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file vector_float2_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, float, lowp > lowp_vec3
-
- -

3 components vector of low single-qualifier floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file vector_float3_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, float, lowp > lowp_vec4
-
- -

4 components vector of low single-qualifier floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file vector_float4_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, bool, mediump > mediump_bvec2
-
- -

2 components vector of medium qualifier bool numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file vector_bool2_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, bool, mediump > mediump_bvec3
-
- -

3 components vector of medium qualifier bool numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file vector_bool3_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, bool, mediump > mediump_bvec4
-
- -

4 components vector of medium qualifier bool numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file vector_bool4_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, f64, mediump > mediump_dvec2
-
- -

2 components vector of medium double-qualifier floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file vector_double2_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, f64, mediump > mediump_dvec3
-
- -

3 components vector of medium double-qualifier floating-point numbers.

-

There is no guarantee on the actual qualifier.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 24 of file vector_double3_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, f64, mediump > mediump_dvec4
-
- -

4 components vector of medium double-qualifier floating-point numbers.

-

There is no guarantee on the actual qualifier.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 25 of file vector_double4_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i32, mediump > mediump_ivec2
-
- -

2 components vector of medium qualifier signed integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file vector_int2_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i32, mediump > mediump_ivec3
-
- -

3 components vector of medium qualifier signed integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file vector_int3_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i32, mediump > mediump_ivec4
-
- -

4 components vector of medium qualifier signed integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file vector_int4_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u32, mediump > mediump_uvec2
-
- -

2 components vector of medium qualifier unsigned integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file vector_uint2_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u32, mediump > mediump_uvec3
-
- -

3 components vector of medium qualifier unsigned integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file vector_uint3_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u32, mediump > mediump_uvec4
-
- -

4 components vector of medium qualifier unsigned integer numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file vector_uint4_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, float, mediump > mediump_vec2
-
- -

2 components vector of medium single-qualifier floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file vector_float2_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, float, mediump > mediump_vec3
-
- -

3 components vector of medium single-qualifier floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file vector_float3_precision.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, float, mediump > mediump_vec4
-
- -

4 components vector of medium single-qualifier floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.5 Vectors
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file vector_float4_precision.hpp.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00283.html b/tests/OpenGL/package/glm/doc/api/a00283.html deleted file mode 100644 index 117eb823..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00283.html +++ /dev/null @@ -1,563 +0,0 @@ - - - - - - -0.9.9 API documentation: Matrix types - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Matrix types
-
-
- -

Matrix types of with C columns and R rows where C and R are values between 2 to 4 included. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef mat< 2, 2, double, defaultp > dmat2
 2 columns of 2 components matrix of double-precision floating-point numbers. More...
 
typedef mat< 2, 2, double, defaultp > dmat2x2
 2 columns of 2 components matrix of double-precision floating-point numbers. More...
 
typedef mat< 2, 3, double, defaultp > dmat2x3
 2 columns of 3 components matrix of double-precision floating-point numbers. More...
 
typedef mat< 2, 4, double, defaultp > dmat2x4
 2 columns of 4 components matrix of double-precision floating-point numbers. More...
 
typedef mat< 3, 3, double, defaultp > dmat3
 3 columns of 3 components matrix of double-precision floating-point numbers. More...
 
typedef mat< 3, 2, double, defaultp > dmat3x2
 3 columns of 2 components matrix of double-precision floating-point numbers. More...
 
typedef mat< 3, 3, double, defaultp > dmat3x3
 3 columns of 3 components matrix of double-precision floating-point numbers. More...
 
typedef mat< 3, 4, double, defaultp > dmat3x4
 3 columns of 4 components matrix of double-precision floating-point numbers. More...
 
typedef mat< 4, 4, double, defaultp > dmat4
 4 columns of 4 components matrix of double-precision floating-point numbers. More...
 
typedef mat< 4, 2, double, defaultp > dmat4x2
 4 columns of 2 components matrix of double-precision floating-point numbers. More...
 
typedef mat< 4, 3, double, defaultp > dmat4x3
 4 columns of 3 components matrix of double-precision floating-point numbers. More...
 
typedef mat< 4, 4, double, defaultp > dmat4x4
 4 columns of 4 components matrix of double-precision floating-point numbers. More...
 
typedef mat< 2, 2, float, defaultp > mat2
 2 columns of 2 components matrix of single-precision floating-point numbers. More...
 
typedef mat< 2, 2, float, defaultp > mat2x2
 2 columns of 2 components matrix of single-precision floating-point numbers. More...
 
typedef mat< 2, 3, float, defaultp > mat2x3
 2 columns of 3 components matrix of single-precision floating-point numbers. More...
 
typedef mat< 2, 4, float, defaultp > mat2x4
 2 columns of 4 components matrix of single-precision floating-point numbers. More...
 
typedef mat< 3, 3, float, defaultp > mat3
 3 columns of 3 components matrix of single-precision floating-point numbers. More...
 
typedef mat< 3, 3, float, defaultp > mat3x3
 3 columns of 3 components matrix of single-precision floating-point numbers. More...
 
typedef mat< 3, 4, float, defaultp > mat3x4
 3 columns of 4 components matrix of single-precision floating-point numbers. More...
 
typedef mat< 4, 2, float, defaultp > mat4x2
 4 columns of 2 components matrix of single-precision floating-point numbers. More...
 
typedef mat< 4, 3, float, defaultp > mat4x3
 4 columns of 3 components matrix of single-precision floating-point numbers. More...
 
typedef mat< 4, 4, float, defaultp > mat4x4
 4 columns of 4 components matrix of single-precision floating-point numbers. More...
 
typedef mat< 4, 4, float, defaultp > mat4
 4 columns of 4 components matrix of single-precision floating-point numbers. More...
 
-

Detailed Description

-

Matrix types of with C columns and R rows where C and R are values between 2 to 4 included.

-

These types have exhaustive sets of operators.

-

Typedef Documentation

- -
-
- - - - -
typedef mat< 2, 2, f64, defaultp > dmat2
-
- -

2 columns of 2 components matrix of double-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 20 of file matrix_double2x2.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, double, defaultp > dmat2x2
-
- -

2 columns of 2 components matrix of double-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_double2x2.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, double, defaultp > dmat2x3
-
- -

2 columns of 3 components matrix of double-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_double2x3.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, double, defaultp > dmat2x4
-
- -

2 columns of 4 components matrix of double-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_double2x4.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f64, defaultp > dmat3
-
- -

3 columns of 3 components matrix of double-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 20 of file matrix_double3x3.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, double, defaultp > dmat3x2
-
- -

3 columns of 2 components matrix of double-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_double3x2.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, double, defaultp > dmat3x3
-
- -

3 columns of 3 components matrix of double-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_double3x3.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, double, defaultp > dmat3x4
-
- -

3 columns of 4 components matrix of double-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_double3x4.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f64, defaultp > dmat4
-
- -

4 columns of 4 components matrix of double-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 20 of file matrix_double4x4.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, double, defaultp > dmat4x2
-
- -

4 columns of 2 components matrix of double-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_double4x2.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, double, defaultp > dmat4x3
-
- -

4 columns of 3 components matrix of double-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_double4x3.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, double, defaultp > dmat4x4
-
- -

4 columns of 4 components matrix of double-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_double4x4.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, defaultp > mat2
-
- -

2 columns of 2 components matrix of single-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 20 of file matrix_float2x2.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, defaultp > mat2x2
-
- -

2 columns of 2 components matrix of single-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_float2x2.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f32, defaultp > mat2x3
-
- -

2 columns of 3 components matrix of single-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_float2x3.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f32, defaultp > mat2x4
-
- -

2 columns of 4 components matrix of single-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_float2x4.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, defaultp > mat3
-
- -

3 columns of 3 components matrix of single-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 20 of file matrix_float3x3.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, defaultp > mat3x3
-
- -

3 columns of 3 components matrix of single-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_float3x3.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f32, defaultp > mat3x4
-
- -

3 columns of 4 components matrix of single-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_float3x4.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, defaultp > mat4
-
- -

4 columns of 4 components matrix of single-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 20 of file matrix_float4x4.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f32, defaultp > mat4x2
-
- -

4 columns of 2 components matrix of single-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_float4x2.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f32, defaultp > mat4x3
-
- -

4 columns of 3 components matrix of single-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_float4x3.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, defaultp > mat4x4
-
- -

4 columns of 4 components matrix of single-precision floating-point numbers.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
- -

Definition at line 15 of file matrix_float4x4.hpp.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00284.html b/tests/OpenGL/package/glm/doc/api/a00284.html deleted file mode 100644 index d18a4466..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00284.html +++ /dev/null @@ -1,1689 +0,0 @@ - - - - - - -0.9.9 API documentation: Matrix types with precision qualifiers - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Matrix types with precision qualifiers
-
-
- -

Matrix types with precision qualifiers which may result in various precision in term of ULPs. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef mat< 2, 2, double, highp > highp_dmat2
 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, double, highp > highp_dmat2x2
 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 3, double, highp > highp_dmat2x3
 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 4, double, highp > highp_dmat2x4
 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, double, highp > highp_dmat3
 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 2, double, highp > highp_dmat3x2
 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, double, highp > highp_dmat3x3
 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 4, double, highp > highp_dmat3x4
 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, double, highp > highp_dmat4
 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 2, double, highp > highp_dmat4x2
 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 3, double, highp > highp_dmat4x3
 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, double, highp > highp_dmat4x4
 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, float, highp > highp_mat2
 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, float, highp > highp_mat2x2
 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 3, float, highp > highp_mat2x3
 2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 4, float, highp > highp_mat2x4
 2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, float, highp > highp_mat3
 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 2, float, highp > highp_mat3x2
 3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, float, highp > highp_mat3x3
 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 4, float, highp > highp_mat3x4
 3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, float, highp > highp_mat4
 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 2, float, highp > highp_mat4x2
 4 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 3, float, highp > highp_mat4x3
 4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, float, highp > highp_mat4x4
 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, double, lowp > lowp_dmat2
 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, double, lowp > lowp_dmat2x2
 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 3, double, lowp > lowp_dmat2x3
 2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 4, double, lowp > lowp_dmat2x4
 2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, double, lowp > lowp_dmat3
 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 2, double, lowp > lowp_dmat3x2
 3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, double, lowp > lowp_dmat3x3
 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 4, double, lowp > lowp_dmat3x4
 3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, double, lowp > lowp_dmat4
 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 2, double, lowp > lowp_dmat4x2
 4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 3, double, lowp > lowp_dmat4x3
 4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, double, lowp > lowp_dmat4x4
 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, float, lowp > lowp_mat2
 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, float, lowp > lowp_mat2x2
 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 3, float, lowp > lowp_mat2x3
 2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 4, float, lowp > lowp_mat2x4
 2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, float, lowp > lowp_mat3
 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 2, float, lowp > lowp_mat3x2
 3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, float, lowp > lowp_mat3x3
 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 4, float, lowp > lowp_mat3x4
 3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, float, lowp > lowp_mat4
 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 2, float, lowp > lowp_mat4x2
 4 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 3, float, lowp > lowp_mat4x3
 4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, float, lowp > lowp_mat4x4
 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, double, mediump > mediump_dmat2
 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, double, mediump > mediump_dmat2x2
 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 3, double, mediump > mediump_dmat2x3
 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 4, double, mediump > mediump_dmat2x4
 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, double, mediump > mediump_dmat3
 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 2, double, mediump > mediump_dmat3x2
 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, double, mediump > mediump_dmat3x3
 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 4, double, mediump > mediump_dmat3x4
 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, double, mediump > mediump_dmat4
 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 2, double, mediump > mediump_dmat4x2
 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 3, double, mediump > mediump_dmat4x3
 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, double, mediump > mediump_dmat4x4
 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, float, mediump > mediump_mat2
 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 2, float, mediump > mediump_mat2x2
 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 3, float, mediump > mediump_mat2x3
 2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 2, 4, float, mediump > mediump_mat2x4
 2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, float, mediump > mediump_mat3
 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 2, float, mediump > mediump_mat3x2
 3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 3, float, mediump > mediump_mat3x3
 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 3, 4, float, mediump > mediump_mat3x4
 3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, float, mediump > mediump_mat4
 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 2, float, mediump > mediump_mat4x2
 4 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 3, float, mediump > mediump_mat4x3
 4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
typedef mat< 4, 4, float, mediump > mediump_mat4x4
 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. More...
 
-

Detailed Description

-

Matrix types with precision qualifiers which may result in various precision in term of ULPs.

-

GLSL allows defining qualifiers for particular variables. With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, with OpenGL ES's GLSL, these qualifiers do have an effect.

-

C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: a number of typedefs that use a particular qualifier.

-

None of these types make any guarantees about the actual qualifier used.

-

Typedef Documentation

- -
-
- - - - -
typedef mat< 2, 2, f64, highp > highp_dmat2
-
- -

2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_double2x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, double, highp > highp_dmat2x2
-
- -

2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 46 of file matrix_double2x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, double, highp > highp_dmat2x3
-
- -

2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_double2x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, double, highp > highp_dmat2x4
-
- -

2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_double2x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f64, highp > highp_dmat3
-
- -

3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_double3x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, double, highp > highp_dmat3x2
-
- -

3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_double3x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, double, highp > highp_dmat3x3
-
- -

3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 46 of file matrix_double3x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, double, highp > highp_dmat3x4
-
- -

3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_double3x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f64, highp > highp_dmat4
-
- -

4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_double4x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, double, highp > highp_dmat4x2
-
- -

4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_double4x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, double, highp > highp_dmat4x3
-
- -

4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_double4x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, double, highp > highp_dmat4x4
-
- -

4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 46 of file matrix_double4x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, highp > highp_mat2
-
- -

2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_float2x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, highp > highp_mat2x2
-
- -

2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 46 of file matrix_float2x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f32, highp > highp_mat2x3
-
- -

2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_float2x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f32, highp > highp_mat2x4
-
- -

2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_float2x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, highp > highp_mat3
-
- -

3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_float3x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, f32, highp > highp_mat3x2
-
- -

3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_float3x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, highp > highp_mat3x3
-
- -

3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 46 of file matrix_float3x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f32, highp > highp_mat3x4
-
- -

3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_float3x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, highp > highp_mat4
-
- -

4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_float4x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f32, highp > highp_mat4x2
-
- -

4 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_float4x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f32, highp > highp_mat4x3
-
- -

4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 28 of file matrix_float4x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, highp > highp_mat4x4
-
- -

4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 46 of file matrix_float4x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f64, lowp > lowp_dmat2
-
- -

2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_double2x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, double, lowp > lowp_dmat2x2
-
- -

2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 34 of file matrix_double2x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, double, lowp > lowp_dmat2x3
-
- -

2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_double2x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, double, lowp > lowp_dmat2x4
-
- -

2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_double2x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f64, lowp > lowp_dmat3
-
- -

3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_double3x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, double, lowp > lowp_dmat3x2
-
- -

3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_double3x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, double, lowp > lowp_dmat3x3
-
- -

3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 34 of file matrix_double3x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, double, lowp > lowp_dmat3x4
-
- -

3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_double3x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f64, lowp > lowp_dmat4
-
- -

4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_double4x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, double, lowp > lowp_dmat4x2
-
- -

4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_double4x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, double, lowp > lowp_dmat4x3
-
- -

4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_double4x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, double, lowp > lowp_dmat4x4
-
- -

4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 34 of file matrix_double4x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, lowp > lowp_mat2
-
- -

2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_float2x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, lowp > lowp_mat2x2
-
- -

2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 34 of file matrix_float2x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f32, lowp > lowp_mat2x3
-
- -

2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_float2x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f32, lowp > lowp_mat2x4
-
- -

2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_float2x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, lowp > lowp_mat3
-
- -

3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_float3x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, f32, lowp > lowp_mat3x2
-
- -

3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_float3x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, lowp > lowp_mat3x3
-
- -

3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 34 of file matrix_float3x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f32, lowp > lowp_mat3x4
-
- -

3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_float3x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, lowp > lowp_mat4
-
- -

4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_float4x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f32, lowp > lowp_mat4x2
-
- -

4 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_float4x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f32, lowp > lowp_mat4x3
-
- -

4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 16 of file matrix_float4x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, lowp > lowp_mat4x4
-
- -

4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 34 of file matrix_float4x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f64, mediump > mediump_dmat2
-
- -

2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_double2x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, double, mediump > mediump_dmat2x2
-
- -

2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 40 of file matrix_double2x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, double, mediump > mediump_dmat2x3
-
- -

2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_double2x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, double, mediump > mediump_dmat2x4
-
- -

2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_double2x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f64, mediump > mediump_dmat3
-
- -

3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_double3x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, double, mediump > mediump_dmat3x2
-
- -

3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_double3x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, double, mediump > mediump_dmat3x3
-
- -

3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 40 of file matrix_double3x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, double, mediump > mediump_dmat3x4
-
- -

3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_double3x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f64, mediump > mediump_dmat4
-
- -

4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_double4x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, double, mediump > mediump_dmat4x2
-
- -

4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_double4x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, double, mediump > mediump_dmat4x3
-
- -

4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_double4x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, double, mediump > mediump_dmat4x4
-
- -

4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 40 of file matrix_double4x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, mediump > mediump_mat2
-
- -

2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_float2x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, mediump > mediump_mat2x2
-
- -

2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 40 of file matrix_float2x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f32, mediump > mediump_mat2x3
-
- -

2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_float2x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f32, mediump > mediump_mat2x4
-
- -

2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_float2x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, mediump > mediump_mat3
-
- -

3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_float3x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, f32, mediump > mediump_mat3x2
-
- -

3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_float3x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, mediump > mediump_mat3x3
-
- -

3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 40 of file matrix_float3x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f32, mediump > mediump_mat3x4
-
- -

3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_float3x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, mediump > mediump_mat4
-
- -

4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_float4x4_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f32, mediump > mediump_mat4x2
-
- -

4 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_float4x2_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f32, mediump > mediump_mat4x3
-
- -

4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 22 of file matrix_float4x3_precision.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, mediump > mediump_mat4x4
-
- -

4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.

-
See also
GLSL 4.20.8 specification, section 4.1.6 Matrices
-
-GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier
- -

Definition at line 40 of file matrix_float4x4_precision.hpp.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00285.html b/tests/OpenGL/package/glm/doc/api/a00285.html deleted file mode 100644 index b9333026..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00285.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - -0.9.9 API documentation: Stable extensions - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Stable extensions
-
-
- -

Additional features not specified by GLSL specification. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Modules

 GLM_EXT_matrix_clip_space
 Defines functions that generate clip space transformation matrices.
 
 GLM_EXT_matrix_common
 Defines functions for common matrix operations.
 
 GLM_EXT_matrix_projection
 Functions that generate common projection transformation matrices.
 
 GLM_EXT_matrix_relational
 Exposes comparison functions for matrix types that take a user defined epsilon values.
 
 GLM_EXT_matrix_transform
 Defines functions that generate common transformation matrices.
 
 GLM_EXT_quaternion_common
 Provides common functions for quaternion types.
 
 GLM_EXT_quaternion_double
 Exposes double-precision floating point quaternion type.
 
 GLM_EXT_quaternion_double_precision
 Exposes double-precision floating point quaternion type with various precision in term of ULPs.
 
 GLM_EXT_quaternion_exponential
 Provides exponential functions for quaternion types.
 
 GLM_EXT_quaternion_float
 Exposes single-precision floating point quaternion type.
 
 GLM_EXT_quaternion_float_precision
 Exposes single-precision floating point quaternion type with various precision in term of ULPs.
 
 GLM_EXT_quaternion_geometric
 Provides geometric functions for quaternion types.
 
 GLM_EXT_quaternion_relational
 Exposes comparison functions for quaternion types that take a user defined epsilon values.
 
 GLM_EXT_quaternion_transform
 Provides transformation functions for quaternion types.
 
 GLM_EXT_quaternion_trigonometric
 Provides trigonometric functions for quaternion types.
 
 GLM_EXT_scalar_common
 Exposes min and max functions for 3 to 4 scalar parameters.
 
 GLM_EXT_scalar_constants
 Provides a list of constants and precomputed useful values.
 
 GLM_EXT_scalar_int_sized
 Exposes sized signed integer scalar types.
 
 GLM_EXT_scalar_integer
 Include <glm/ext/scalar_integer.hpp> to use the features of this extension.
 
 GLM_EXT_scalar_relational
 Exposes comparison functions for scalar types that take a user defined epsilon values.
 
 GLM_EXT_scalar_uint_sized
 Exposes sized unsigned integer scalar types.
 
 GLM_EXT_scalar_ulp
 Allow the measurement of the accuracy of a function against a reference implementation.
 
 GLM_EXT_vector_bool1
 Exposes bvec1 vector type.
 
 GLM_EXT_vector_bool1_precision
 Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types.
 
 GLM_EXT_vector_common
 Exposes min and max functions for 3 to 4 vector parameters.
 
 GLM_EXT_vector_double1
 Exposes double-precision floating point vector type with one component.
 
 GLM_EXT_vector_double1_precision
 Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types.
 
 GLM_EXT_vector_float1
 Exposes single-precision floating point vector type with one component.
 
 GLM_EXT_vector_float1_precision
 Exposes highp_vec1, mediump_vec1 and lowp_vec1 types.
 
 GLM_EXT_vector_int1
 Exposes ivec1 vector type.
 
 GLM_EXT_vector_int1_precision
 Exposes highp_ivec1, mediump_ivec1 and lowp_ivec1 types.
 
 GLM_EXT_vector_integer
 Include <glm/ext/vector_integer.hpp> to use the features of this extension.
 
 GLM_EXT_vector_relational
 Exposes comparison functions for vector types that take a user defined epsilon values.
 
 GLM_EXT_vector_uint1
 Exposes uvec1 vector type.
 
 GLM_EXT_vector_uint1_precision
 Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types.
 
 GLM_EXT_vector_ulp
 Allow the measurement of the accuracy of a function against a reference implementation.
 
-

Detailed Description

-

Additional features not specified by GLSL specification.

-

EXT extensions are fully tested and documented.

-

Even if it's highly unrecommended, it's possible to include all the extensions at once by including <glm/ext.hpp>. Otherwise, each extension needs to be included a specific file.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00286.html b/tests/OpenGL/package/glm/doc/api/a00286.html deleted file mode 100644 index 262daad5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00286.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - -0.9.9 API documentation: Recommended extensions - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Recommended extensions
-
-
- -

Additional features not specified by GLSL specification. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Modules

 GLM_GTC_bitfield
 Include <glm/gtc/bitfield.hpp> to use the features of this extension.
 
 GLM_GTC_color_space
 Include <glm/gtc/color_space.hpp> to use the features of this extension.
 
 GLM_GTC_constants
 Include <glm/gtc/constants.hpp> to use the features of this extension.
 
 GLM_GTC_epsilon
 Include <glm/gtc/epsilon.hpp> to use the features of this extension.
 
 GLM_GTC_integer
 Include <glm/gtc/integer.hpp> to use the features of this extension.
 
 GLM_GTC_matrix_access
 Include <glm/gtc/matrix_access.hpp> to use the features of this extension.
 
 GLM_GTC_matrix_integer
 Include <glm/gtc/matrix_integer.hpp> to use the features of this extension.
 
 GLM_GTC_matrix_inverse
 Include <glm/gtc/matrix_integer.hpp> to use the features of this extension.
 
 GLM_GTC_matrix_transform
 Include <glm/gtc/matrix_transform.hpp> to use the features of this extension.
 
 GLM_GTC_noise
 Include <glm/gtc/noise.hpp> to use the features of this extension.
 
 GLM_GTC_packing
 Include <glm/gtc/packing.hpp> to use the features of this extension.
 
 GLM_GTC_quaternion
 Include <glm/gtc/quaternion.hpp> to use the features of this extension.
 
 GLM_GTC_random
 Include <glm/gtc/random.hpp> to use the features of this extension.
 
 GLM_GTC_reciprocal
 Include <glm/gtc/reciprocal.hpp> to use the features of this extension.
 
 GLM_GTC_round
 Include <glm/gtc/round.hpp> to use the features of this extension.
 
 GLM_GTC_type_aligned
 Include <glm/gtc/type_aligned.hpp> to use the features of this extension.
 
 GLM_GTC_type_precision
 Include <glm/gtc/type_precision.hpp> to use the features of this extension.
 
 GLM_GTC_type_ptr
 Include <glm/gtc/type_ptr.hpp> to use the features of this extension.
 
 GLM_GTC_ulp
 Include <glm/gtc/ulp.hpp> to use the features of this extension.
 
 GLM_GTC_vec1
 Include <glm/gtc/vec1.hpp> to use the features of this extension.
 
-

Detailed Description

-

Additional features not specified by GLSL specification.

-

GTC extensions aim to be stable with tests and documentation.

-

Even if it's highly unrecommended, it's possible to include all the extensions at once by including <glm/ext.hpp>. Otherwise, each extension needs to be included a specific file.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00287.html b/tests/OpenGL/package/glm/doc/api/a00287.html deleted file mode 100644 index 765dc34e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00287.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - -0.9.9 API documentation: Experimental extensions - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Experimental extensions
-
-
- -

Experimental features not specified by GLSL specification. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Modules

 GLM_GTX_associated_min_max
 Include <glm/gtx/associated_min_max.hpp> to use the features of this extension.
 
 GLM_GTX_bit
 Include <glm/gtx/bit.hpp> to use the features of this extension.
 
 GLM_GTX_closest_point
 Include <glm/gtx/closest_point.hpp> to use the features of this extension.
 
 GLM_GTX_color_encoding
 Include <glm/gtx/color_encoding.hpp> to use the features of this extension.
 
 GLM_GTX_color_space
 Include <glm/gtx/color_space.hpp> to use the features of this extension.
 
 GLM_GTX_color_space_YCoCg
 Include <glm/gtx/color_space_YCoCg.hpp> to use the features of this extension.
 
 GLM_GTX_common
 Include <glm/gtx/common.hpp> to use the features of this extension.
 
 GLM_GTX_compatibility
 Include <glm/gtx/compatibility.hpp> to use the features of this extension.
 
 GLM_GTX_component_wise
 Include <glm/gtx/component_wise.hpp> to use the features of this extension.
 
 GLM_GTX_dual_quaternion
 Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension.
 
 GLM_GTX_easing
 Include <glm/gtx/easing.hpp> to use the features of this extension.
 
 GLM_GTX_euler_angles
 Include <glm/gtx/euler_angles.hpp> to use the features of this extension.
 
 GLM_GTX_extend
 Include <glm/gtx/extend.hpp> to use the features of this extension.
 
 GLM_GTX_extented_min_max
 Include <glm/gtx/extented_min_max.hpp> to use the features of this extension.
 
 GLM_GTX_exterior_product
 Include <glm/gtx/exterior_product.hpp> to use the features of this extension.
 
 GLM_GTX_fast_exponential
 Include <glm/gtx/fast_exponential.hpp> to use the features of this extension.
 
 GLM_GTX_fast_square_root
 Include <glm/gtx/fast_square_root.hpp> to use the features of this extension.
 
 GLM_GTX_fast_trigonometry
 Include <glm/gtx/fast_trigonometry.hpp> to use the features of this extension.
 
 GLM_GTX_functions
 Include <glm/gtx/functions.hpp> to use the features of this extension.
 
 GLM_GTX_gradient_paint
 Include <glm/gtx/gradient_paint.hpp> to use the features of this extension.
 
 GLM_GTX_handed_coordinate_space
 Include <glm/gtx/handed_coordinate_system.hpp> to use the features of this extension.
 
 GLM_GTX_hash
 Include <glm/gtx/hash.hpp> to use the features of this extension.
 
 GLM_GTX_integer
 Include <glm/gtx/integer.hpp> to use the features of this extension.
 
 GLM_GTX_intersect
 Include <glm/gtx/intersect.hpp> to use the features of this extension.
 
 GLM_GTX_io
 Include <glm/gtx/io.hpp> to use the features of this extension.
 
 GLM_GTX_log_base
 Include <glm/gtx/log_base.hpp> to use the features of this extension.
 
 GLM_GTX_matrix_cross_product
 Include <glm/gtx/matrix_cross_product.hpp> to use the features of this extension.
 
 GLM_GTX_matrix_decompose
 Include <glm/gtx/matrix_decompose.hpp> to use the features of this extension.
 
 GLM_GTX_matrix_factorisation
 Include <glm/gtx/matrix_factorisation.hpp> to use the features of this extension.
 
 GLM_GTX_matrix_interpolation
 Include <glm/gtx/matrix_interpolation.hpp> to use the features of this extension.
 
 GLM_GTX_matrix_major_storage
 Include <glm/gtx/matrix_major_storage.hpp> to use the features of this extension.
 
 GLM_GTX_matrix_operation
 Include <glm/gtx/matrix_operation.hpp> to use the features of this extension.
 
 GLM_GTX_matrix_query
 Include <glm/gtx/matrix_query.hpp> to use the features of this extension.
 
 GLM_GTX_matrix_transform_2d
 Include <glm/gtx/matrix_transform_2d.hpp> to use the features of this extension.
 
 GLM_GTX_mixed_producte
 Include <glm/gtx/mixed_product.hpp> to use the features of this extension.
 
 GLM_GTX_norm
 Include <glm/gtx/norm.hpp> to use the features of this extension.
 
 GLM_GTX_normal
 Include <glm/gtx/normal.hpp> to use the features of this extension.
 
 GLM_GTX_normalize_dot
 Include <glm/gtx/normalized_dot.hpp> to use the features of this extension.
 
 GLM_GTX_number_precision
 Include <glm/gtx/number_precision.hpp> to use the features of this extension.
 
 GLM_GTX_optimum_pow
 Include <glm/gtx/optimum_pow.hpp> to use the features of this extension.
 
 GLM_GTX_orthonormalize
 Include <glm/gtx/orthonormalize.hpp> to use the features of this extension.
 
 GLM_GTX_perpendicular
 Include <glm/gtx/perpendicular.hpp> to use the features of this extension.
 
 GLM_GTX_polar_coordinates
 Include <glm/gtx/polar_coordinates.hpp> to use the features of this extension.
 
 GLM_GTX_projection
 Include <glm/gtx/projection.hpp> to use the features of this extension.
 
 GLM_GTX_quaternion
 Include <glm/gtx/quaternion.hpp> to use the features of this extension.
 
 GLM_GTX_range
 Include <glm/gtx/range.hpp> to use the features of this extension.
 
 GLM_GTX_raw_data
 Include <glm/gtx/raw_data.hpp> to use the features of this extension.
 
 GLM_GTX_rotate_normalized_axis
 Include <glm/gtx/rotate_normalized_axis.hpp> to use the features of this extension.
 
 GLM_GTX_rotate_vector
 Include <glm/gtx/rotate_vector.hpp> to use the features of this extension.
 
 GLM_GTX_scalar_relational
 Include <glm/gtx/scalar_relational.hpp> to use the features of this extension.
 
 GLM_GTX_spline
 Include <glm/gtx/spline.hpp> to use the features of this extension.
 
 GLM_GTX_std_based_type
 Include <glm/gtx/std_based_type.hpp> to use the features of this extension.
 
 GLM_GTX_string_cast
 Include <glm/gtx/string_cast.hpp> to use the features of this extension.
 
 GLM_GTX_texture
 Include <glm/gtx/texture.hpp> to use the features of this extension.
 
 GLM_GTX_transform
 Include <glm/gtx/transform.hpp> to use the features of this extension.
 
 GLM_GTX_transform2
 Include <glm/gtx/transform2.hpp> to use the features of this extension.
 
 GLM_GTX_type_aligned
 Include <glm/gtx/type_aligned.hpp> to use the features of this extension.
 
 GLM_GTX_type_trait
 Include <glm/gtx/type_trait.hpp> to use the features of this extension.
 
 GLM_GTX_vec_swizzle
 Include <glm/gtx/vec_swizzle.hpp> to use the features of this extension.
 
 GLM_GTX_vector_angle
 Include <glm/gtx/vector_angle.hpp> to use the features of this extension.
 
 GLM_GTX_vector_query
 Include <glm/gtx/vector_query.hpp> to use the features of this extension.
 
 GLM_GTX_wrap
 Include <glm/gtx/wrap.hpp> to use the features of this extension.
 
-

Detailed Description

-

Experimental features not specified by GLSL specification.

-

Experimental extensions are useful functions and types, but the development of their API and functionality is not necessarily stable. They can change substantially between versions. Backwards compatibility is not much of an issue for them.

-

Even if it's highly unrecommended, it's possible to include all the extensions at once by including <glm/ext.hpp>. Otherwise, each extension needs to be included a specific file.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00288.html b/tests/OpenGL/package/glm/doc/api/a00288.html deleted file mode 100644 index ebebbdc9..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00288.html +++ /dev/null @@ -1,1228 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_bitfield - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTC_bitfield
-
-
- -

Include <glm/gtc/bitfield.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GLM_FUNC_DECL glm::u8vec2 bitfieldDeinterleave (glm::uint16 x)
 Deinterleaves the bits of x. More...
 
GLM_FUNC_DECL glm::u16vec2 bitfieldDeinterleave (glm::uint32 x)
 Deinterleaves the bits of x. More...
 
GLM_FUNC_DECL glm::u32vec2 bitfieldDeinterleave (glm::uint64 x)
 Deinterleaves the bits of x. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType bitfieldFillOne (genIUType Value, int FirstBit, int BitCount)
 Set to 1 a range of bits. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > bitfieldFillOne (vec< L, T, Q > const &Value, int FirstBit, int BitCount)
 Set to 1 a range of bits. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType bitfieldFillZero (genIUType Value, int FirstBit, int BitCount)
 Set to 0 a range of bits. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > bitfieldFillZero (vec< L, T, Q > const &Value, int FirstBit, int BitCount)
 Set to 0 a range of bits. More...
 
GLM_FUNC_DECL int16 bitfieldInterleave (int8 x, int8 y)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL uint16 bitfieldInterleave (uint8 x, uint8 y)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL uint16 bitfieldInterleave (u8vec2 const &v)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL int32 bitfieldInterleave (int16 x, int16 y)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL uint32 bitfieldInterleave (uint16 x, uint16 y)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL uint32 bitfieldInterleave (u16vec2 const &v)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL int64 bitfieldInterleave (int32 x, int32 y)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL uint64 bitfieldInterleave (uint32 x, uint32 y)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL uint64 bitfieldInterleave (u32vec2 const &v)
 Interleaves the bits of x and y. More...
 
GLM_FUNC_DECL int32 bitfieldInterleave (int8 x, int8 y, int8 z)
 Interleaves the bits of x, y and z. More...
 
GLM_FUNC_DECL uint32 bitfieldInterleave (uint8 x, uint8 y, uint8 z)
 Interleaves the bits of x, y and z. More...
 
GLM_FUNC_DECL int64 bitfieldInterleave (int16 x, int16 y, int16 z)
 Interleaves the bits of x, y and z. More...
 
GLM_FUNC_DECL uint64 bitfieldInterleave (uint16 x, uint16 y, uint16 z)
 Interleaves the bits of x, y and z. More...
 
GLM_FUNC_DECL int64 bitfieldInterleave (int32 x, int32 y, int32 z)
 Interleaves the bits of x, y and z. More...
 
GLM_FUNC_DECL uint64 bitfieldInterleave (uint32 x, uint32 y, uint32 z)
 Interleaves the bits of x, y and z. More...
 
GLM_FUNC_DECL int32 bitfieldInterleave (int8 x, int8 y, int8 z, int8 w)
 Interleaves the bits of x, y, z and w. More...
 
GLM_FUNC_DECL uint32 bitfieldInterleave (uint8 x, uint8 y, uint8 z, uint8 w)
 Interleaves the bits of x, y, z and w. More...
 
GLM_FUNC_DECL int64 bitfieldInterleave (int16 x, int16 y, int16 z, int16 w)
 Interleaves the bits of x, y, z and w. More...
 
GLM_FUNC_DECL uint64 bitfieldInterleave (uint16 x, uint16 y, uint16 z, uint16 w)
 Interleaves the bits of x, y, z and w. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType bitfieldRotateLeft (genIUType In, int Shift)
 Rotate all bits to the left. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > bitfieldRotateLeft (vec< L, T, Q > const &In, int Shift)
 Rotate all bits to the left. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType bitfieldRotateRight (genIUType In, int Shift)
 Rotate all bits to the right. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > bitfieldRotateRight (vec< L, T, Q > const &In, int Shift)
 Rotate all bits to the right. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType mask (genIUType Bits)
 Build a mask of 'count' bits. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > mask (vec< L, T, Q > const &v)
 Build a mask of 'count' bits. More...
 
-

Detailed Description

-

Include <glm/gtc/bitfield.hpp> to use the features of this extension.

-

Allow to perform bit operations on integer values

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL glm::u8vec2 glm::bitfieldDeinterleave (glm::uint16 x)
-
- -

Deinterleaves the bits of x.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL glm::u16vec2 glm::bitfieldDeinterleave (glm::uint32 x)
-
- -

Deinterleaves the bits of x.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL glm::u32vec2 glm::bitfieldDeinterleave (glm::uint64 x)
-
- -

Deinterleaves the bits of x.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genIUType glm::bitfieldFillOne (genIUType Value,
int FirstBit,
int BitCount 
)
-
- -

Set to 1 a range of bits.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::bitfieldFillOne (vec< L, T, Q > const & Value,
int FirstBit,
int BitCount 
)
-
- -

Set to 1 a range of bits.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TSigned and unsigned integer scalar types
QValue from qualifier enum
-
-
-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genIUType glm::bitfieldFillZero (genIUType Value,
int FirstBit,
int BitCount 
)
-
- -

Set to 0 a range of bits.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::bitfieldFillZero (vec< L, T, Q > const & Value,
int FirstBit,
int BitCount 
)
-
- -

Set to 0 a range of bits.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TSigned and unsigned integer scalar types
QValue from qualifier enum
-
-
-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL int16 glm::bitfieldInterleave (int8 x,
int8 y 
)
-
- -

Interleaves the bits of x and y.

-

The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL uint16 glm::bitfieldInterleave (uint8 x,
uint8 y 
)
-
- -

Interleaves the bits of x and y.

-

The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint16 glm::bitfieldInterleave (u8vec2 const & v)
-
- -

Interleaves the bits of x and y.

-

The first bit is the first bit of v.x followed by the first bit of v.y. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL int32 glm::bitfieldInterleave (int16 x,
int16 y 
)
-
- -

Interleaves the bits of x and y.

-

The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL uint32 glm::bitfieldInterleave (uint16 x,
uint16 y 
)
-
- -

Interleaves the bits of x and y.

-

The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint32 glm::bitfieldInterleave (u16vec2 const & v)
-
- -

Interleaves the bits of x and y.

-

The first bit is the first bit of v.x followed by the first bit of v.y. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL int64 glm::bitfieldInterleave (int32 x,
int32 y 
)
-
- -

Interleaves the bits of x and y.

-

The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL uint64 glm::bitfieldInterleave (uint32 x,
uint32 y 
)
-
- -

Interleaves the bits of x and y.

-

The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint64 glm::bitfieldInterleave (u32vec2 const & v)
-
- -

Interleaves the bits of x and y.

-

The first bit is the first bit of v.x followed by the first bit of v.y. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL int32 glm::bitfieldInterleave (int8 x,
int8 y,
int8 z 
)
-
- -

Interleaves the bits of x, y and z.

-

The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL uint32 glm::bitfieldInterleave (uint8 x,
uint8 y,
uint8 z 
)
-
- -

Interleaves the bits of x, y and z.

-

The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL int64 glm::bitfieldInterleave (int16 x,
int16 y,
int16 z 
)
-
- -

Interleaves the bits of x, y and z.

-

The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL uint64 glm::bitfieldInterleave (uint16 x,
uint16 y,
uint16 z 
)
-
- -

Interleaves the bits of x, y and z.

-

The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL int64 glm::bitfieldInterleave (int32 x,
int32 y,
int32 z 
)
-
- -

Interleaves the bits of x, y and z.

-

The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL uint64 glm::bitfieldInterleave (uint32 x,
uint32 y,
uint32 z 
)
-
- -

Interleaves the bits of x, y and z.

-

The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL int32 glm::bitfieldInterleave (int8 x,
int8 y,
int8 z,
int8 w 
)
-
- -

Interleaves the bits of x, y, z and w.

-

The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL uint32 glm::bitfieldInterleave (uint8 x,
uint8 y,
uint8 z,
uint8 w 
)
-
- -

Interleaves the bits of x, y, z and w.

-

The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL int64 glm::bitfieldInterleave (int16 x,
int16 y,
int16 z,
int16 w 
)
-
- -

Interleaves the bits of x, y, z and w.

-

The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL uint64 glm::bitfieldInterleave (uint16 x,
uint16 y,
uint16 z,
uint16 w 
)
-
- -

Interleaves the bits of x, y, z and w.

-

The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genIUType glm::bitfieldRotateLeft (genIUType In,
int Shift 
)
-
- -

Rotate all bits to the left.

-

All the bits dropped in the left side are inserted back on the right side.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::bitfieldRotateLeft (vec< L, T, Q > const & In,
int Shift 
)
-
- -

Rotate all bits to the left.

-

All the bits dropped in the left side are inserted back on the right side.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TSigned and unsigned integer scalar types
QValue from qualifier enum
-
-
-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genIUType glm::bitfieldRotateRight (genIUType In,
int Shift 
)
-
- -

Rotate all bits to the right.

-

All the bits dropped in the right side are inserted back on the left side.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::bitfieldRotateRight (vec< L, T, Q > const & In,
int Shift 
)
-
- -

Rotate all bits to the right.

-

All the bits dropped in the right side are inserted back on the left side.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TSigned and unsigned integer scalar types
QValue from qualifier enum
-
-
-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genIUType glm::mask (genIUType Bits)
-
- -

Build a mask of 'count' bits.

-
See also
GLM_GTC_bitfield
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::mask (vec< L, T, Q > const & v)
-
- -

Build a mask of 'count' bits.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TSigned and unsigned integer scalar types
QValue from qualifier enum
-
-
-
See also
GLM_GTC_bitfield
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00289.html b/tests/OpenGL/package/glm/doc/api/a00289.html deleted file mode 100644 index 29e66588..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00289.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_color_space - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTC_color_space
-
-
- -

Include <glm/gtc/color_space.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > convertLinearToSRGB (vec< L, T, Q > const &ColorLinear)
 Convert a linear color to sRGB color using a standard gamma correction. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > convertLinearToSRGB (vec< L, T, Q > const &ColorLinear, T Gamma)
 Convert a linear color to sRGB color using a custom gamma correction. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > convertSRGBToLinear (vec< L, T, Q > const &ColorSRGB)
 Convert a sRGB color to linear color using a standard gamma correction. More...
 
-template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > convertSRGBToLinear (vec< L, T, Q > const &ColorSRGB, T Gamma)
 Convert a sRGB color to linear color using a custom gamma correction.
 
-

Detailed Description

-

Include <glm/gtc/color_space.hpp> to use the features of this extension.

-

Allow to perform bit operations on integer values

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::convertLinearToSRGB (vec< L, T, Q > const & ColorLinear)
-
- -

Convert a linear color to sRGB color using a standard gamma correction.

-

IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::convertLinearToSRGB (vec< L, T, Q > const & ColorLinear,
Gamma 
)
-
- -

Convert a linear color to sRGB color using a custom gamma correction.

-

IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::convertSRGBToLinear (vec< L, T, Q > const & ColorSRGB)
-
- -

Convert a sRGB color to linear color using a standard gamma correction.

-

IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00290.html b/tests/OpenGL/package/glm/doc/api/a00290.html deleted file mode 100644 index f4bafa15..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00290.html +++ /dev/null @@ -1,697 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_constants - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTC_constants
-
-
- -

Include <glm/gtc/constants.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType e ()
 Return e constant. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType euler ()
 Return Euler's constant. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi ()
 Return 4 / pi. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio ()
 Return the golden ratio constant. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType half_pi ()
 Return pi / 2. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two ()
 Return ln(ln(2)). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten ()
 Return ln(10). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType ln_two ()
 Return ln(2). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType one ()
 Return 1. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi ()
 Return 1 / pi. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two ()
 Return 1 / sqrt(2). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi ()
 Return 1 / (pi * 2). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi ()
 Return pi / 4. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType root_five ()
 Return sqrt(5). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi ()
 Return sqrt(pi / 2). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four ()
 Return sqrt(ln(4)). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType root_pi ()
 Return square root of pi. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType root_three ()
 Return sqrt(3). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType root_two ()
 Return sqrt(2). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi ()
 Return sqrt(2 * pi). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType third ()
 Return 1 / 3. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi ()
 Return pi / 2 * 3. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi ()
 Return 2 / pi. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi ()
 Return 2 / sqrt(pi). More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType two_pi ()
 Return pi * 2. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds ()
 Return 2 / 3. More...
 
template<typename genType >
GLM_FUNC_DECL GLM_CONSTEXPR genType zero ()
 Return 0. More...
 
-

Detailed Description

-

Include <glm/gtc/constants.hpp> to use the features of this extension.

-

Provide a list of constants and precomputed useful values.

-

Function Documentation

- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::e ()
-
- -

Return e constant.

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::euler ()
-
- -

Return Euler's constant.

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::four_over_pi ()
-
- -

Return 4 / pi.

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::golden_ratio ()
-
- -

Return the golden ratio constant.

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::half_pi ()
-
- -

Return pi / 2.

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::ln_ln_two ()
-
- -

Return ln(ln(2)).

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::ln_ten ()
-
- -

Return ln(10).

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::ln_two ()
-
- -

Return ln(2).

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one ()
-
- -

Return 1.

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one_over_pi ()
-
- -

Return 1 / pi.

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one_over_root_two ()
-
- -

Return 1 / sqrt(2).

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one_over_two_pi ()
-
- -

Return 1 / (pi * 2).

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::quarter_pi ()
-
- -

Return pi / 4.

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_five ()
-
- -

Return sqrt(5).

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_half_pi ()
-
- -

Return sqrt(pi / 2).

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_ln_four ()
-
- -

Return sqrt(ln(4)).

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_pi ()
-
- -

Return square root of pi.

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_three ()
-
- -

Return sqrt(3).

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_two ()
-
- -

Return sqrt(2).

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_two_pi ()
-
- -

Return sqrt(2 * pi).

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::third ()
-
- -

Return 1 / 3.

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::three_over_two_pi ()
-
- -

Return pi / 2 * 3.

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_over_pi ()
-
- -

Return 2 / pi.

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_over_root_pi ()
-
- -

Return 2 / sqrt(pi).

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_pi ()
-
- -

Return pi * 2.

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_thirds ()
-
- -

Return 2 / 3.

-
See also
GLM_GTC_constants
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR genType glm::zero ()
-
- -

Return 0.

-
See also
GLM_GTC_constants
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00291.html b/tests/OpenGL/package/glm/doc/api/a00291.html deleted file mode 100644 index 8a951ece..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00291.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_epsilon - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTC_epsilon
-
-
- -

Include <glm/gtc/epsilon.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > epsilonEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y, T const &epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<typename genType >
GLM_FUNC_DECL bool epsilonEqual (genType const &x, genType const &y, genType const &epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > epsilonNotEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y, T const &epsilon)
 Returns the component-wise comparison of |x - y| < epsilon. More...
 
template<typename genType >
GLM_FUNC_DECL bool epsilonNotEqual (genType const &x, genType const &y, genType const &epsilon)
 Returns the component-wise comparison of |x - y| >= epsilon. More...
 
-

Detailed Description

-

Include <glm/gtc/epsilon.hpp> to use the features of this extension.

-

Comparison functions for a user defined epsilon values.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, bool, Q> glm::epsilonEqual (vec< L, T, Q > const & x,
vec< L, T, Q > const & y,
T const & epsilon 
)
-
- -

Returns the component-wise comparison of |x - y| < epsilon.

-

True if this expression is satisfied.

-
See also
GLM_GTC_epsilon
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::epsilonEqual (genType const & x,
genType const & y,
genType const & epsilon 
)
-
- -

Returns the component-wise comparison of |x - y| < epsilon.

-

True if this expression is satisfied.

-
See also
GLM_GTC_epsilon
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, bool, Q> glm::epsilonNotEqual (vec< L, T, Q > const & x,
vec< L, T, Q > const & y,
T const & epsilon 
)
-
- -

Returns the component-wise comparison of |x - y| < epsilon.

-

True if this expression is not satisfied.

-
See also
GLM_GTC_epsilon
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::epsilonNotEqual (genType const & x,
genType const & y,
genType const & epsilon 
)
-
- -

Returns the component-wise comparison of |x - y| >= epsilon.

-

True if this expression is not satisfied.

-
See also
GLM_GTC_epsilon
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00292.html b/tests/OpenGL/package/glm/doc/api/a00292.html deleted file mode 100644 index 14ee5af2..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00292.html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_integer - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTC_integer
-
-
- -

Include <glm/gtc/integer.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, int, Q > iround (vec< L, T, Q > const &x)
 Returns a value equal to the nearest integer to x. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType log2 (genIUType x)
 Returns the log2 of x for integer values. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, uint, Q > uround (vec< L, T, Q > const &x)
 Returns a value equal to the nearest integer to x. More...
 
-

Detailed Description

-

Include <glm/gtc/integer.hpp> to use the features of this extension.

-

Allow to perform bit operations on integer values

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, int, Q> glm::iround (vec< L, T, Q > const & x)
-
- -

Returns a value equal to the nearest integer to x.

-

The fraction 0.5 will round in a direction chosen by the implementation, presumably the direction that is fastest.

-
Parameters
- - -
xThe values of the argument must be greater or equal to zero.
-
-
-
Template Parameters
- - -
Tfloating point scalar types.
-
-
-
See also
GLSL round man page
-
-GLM_GTC_integer
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genIUType glm::log2 (genIUType x)
-
- -

Returns the log2 of x for integer values.

-

Usefull to compute mipmap count from the texture size.

See also
GLM_GTC_integer
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, uint, Q> glm::uround (vec< L, T, Q > const & x)
-
- -

Returns a value equal to the nearest integer to x.

-

The fraction 0.5 will round in a direction chosen by the implementation, presumably the direction that is fastest.

-
Parameters
- - -
xThe values of the argument must be greater or equal to zero.
-
-
-
Template Parameters
- - -
Tfloating point scalar types.
-
-
-
See also
GLSL round man page
-
-GLM_GTC_integer
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00293.html b/tests/OpenGL/package/glm/doc/api/a00293.html deleted file mode 100644 index b8f3c844..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00293.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_matrix_access - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTC_matrix_access
-
-
- -

Include <glm/gtc/matrix_access.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType::col_type column (genType const &m, length_t index)
 Get a specific column of a matrix. More...
 
template<typename genType >
GLM_FUNC_DECL genType column (genType const &m, length_t index, typename genType::col_type const &x)
 Set a specific column to a matrix. More...
 
template<typename genType >
GLM_FUNC_DECL genType::row_type row (genType const &m, length_t index)
 Get a specific row of a matrix. More...
 
template<typename genType >
GLM_FUNC_DECL genType row (genType const &m, length_t index, typename genType::row_type const &x)
 Set a specific row to a matrix. More...
 
-

Detailed Description

-

Include <glm/gtc/matrix_access.hpp> to use the features of this extension.

-

Defines functions to access rows or columns of a matrix easily.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType::col_type glm::column (genType const & m,
length_t index 
)
-
- -

Get a specific column of a matrix.

-
See also
GLM_GTC_matrix_access
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::column (genType const & m,
length_t index,
typename genType::col_type const & x 
)
-
- -

Set a specific column to a matrix.

-
See also
GLM_GTC_matrix_access
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType::row_type glm::row (genType const & m,
length_t index 
)
-
- -

Get a specific row of a matrix.

-
See also
GLM_GTC_matrix_access
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::row (genType const & m,
length_t index,
typename genType::row_type const & x 
)
-
- -

Set a specific row to a matrix.

-
See also
GLM_GTC_matrix_access
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00294.html b/tests/OpenGL/package/glm/doc/api/a00294.html deleted file mode 100644 index fc333a60..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00294.html +++ /dev/null @@ -1,2023 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_matrix_integer - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTC_matrix_integer
-
-
- -

Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef mat< 2, 2, int, highp > highp_imat2
 High-qualifier signed integer 2x2 matrix. More...
 
typedef mat< 2, 2, int, highp > highp_imat2x2
 High-qualifier signed integer 2x2 matrix. More...
 
typedef mat< 2, 3, int, highp > highp_imat2x3
 High-qualifier signed integer 2x3 matrix. More...
 
typedef mat< 2, 4, int, highp > highp_imat2x4
 High-qualifier signed integer 2x4 matrix. More...
 
typedef mat< 3, 3, int, highp > highp_imat3
 High-qualifier signed integer 3x3 matrix. More...
 
typedef mat< 3, 2, int, highp > highp_imat3x2
 High-qualifier signed integer 3x2 matrix. More...
 
typedef mat< 3, 3, int, highp > highp_imat3x3
 High-qualifier signed integer 3x3 matrix. More...
 
typedef mat< 3, 4, int, highp > highp_imat3x4
 High-qualifier signed integer 3x4 matrix. More...
 
typedef mat< 4, 4, int, highp > highp_imat4
 High-qualifier signed integer 4x4 matrix. More...
 
typedef mat< 4, 2, int, highp > highp_imat4x2
 High-qualifier signed integer 4x2 matrix. More...
 
typedef mat< 4, 3, int, highp > highp_imat4x3
 High-qualifier signed integer 4x3 matrix. More...
 
typedef mat< 4, 4, int, highp > highp_imat4x4
 High-qualifier signed integer 4x4 matrix. More...
 
typedef mat< 2, 2, uint, highp > highp_umat2
 High-qualifier unsigned integer 2x2 matrix. More...
 
typedef mat< 2, 2, uint, highp > highp_umat2x2
 High-qualifier unsigned integer 2x2 matrix. More...
 
typedef mat< 2, 3, uint, highp > highp_umat2x3
 High-qualifier unsigned integer 2x3 matrix. More...
 
typedef mat< 2, 4, uint, highp > highp_umat2x4
 High-qualifier unsigned integer 2x4 matrix. More...
 
typedef mat< 3, 3, uint, highp > highp_umat3
 High-qualifier unsigned integer 3x3 matrix. More...
 
typedef mat< 3, 2, uint, highp > highp_umat3x2
 High-qualifier unsigned integer 3x2 matrix. More...
 
typedef mat< 3, 3, uint, highp > highp_umat3x3
 High-qualifier unsigned integer 3x3 matrix. More...
 
typedef mat< 3, 4, uint, highp > highp_umat3x4
 High-qualifier unsigned integer 3x4 matrix. More...
 
typedef mat< 4, 4, uint, highp > highp_umat4
 High-qualifier unsigned integer 4x4 matrix. More...
 
typedef mat< 4, 2, uint, highp > highp_umat4x2
 High-qualifier unsigned integer 4x2 matrix. More...
 
typedef mat< 4, 3, uint, highp > highp_umat4x3
 High-qualifier unsigned integer 4x3 matrix. More...
 
typedef mat< 4, 4, uint, highp > highp_umat4x4
 High-qualifier unsigned integer 4x4 matrix. More...
 
typedef mediump_imat2 imat2
 Signed integer 2x2 matrix. More...
 
typedef mediump_imat2x2 imat2x2
 Signed integer 2x2 matrix. More...
 
typedef mediump_imat2x3 imat2x3
 Signed integer 2x3 matrix. More...
 
typedef mediump_imat2x4 imat2x4
 Signed integer 2x4 matrix. More...
 
typedef mediump_imat3 imat3
 Signed integer 3x3 matrix. More...
 
typedef mediump_imat3x2 imat3x2
 Signed integer 3x2 matrix. More...
 
typedef mediump_imat3x3 imat3x3
 Signed integer 3x3 matrix. More...
 
typedef mediump_imat3x4 imat3x4
 Signed integer 3x4 matrix. More...
 
typedef mediump_imat4 imat4
 Signed integer 4x4 matrix. More...
 
typedef mediump_imat4x2 imat4x2
 Signed integer 4x2 matrix. More...
 
typedef mediump_imat4x3 imat4x3
 Signed integer 4x3 matrix. More...
 
typedef mediump_imat4x4 imat4x4
 Signed integer 4x4 matrix. More...
 
typedef mat< 2, 2, int, lowp > lowp_imat2
 Low-qualifier signed integer 2x2 matrix. More...
 
typedef mat< 2, 2, int, lowp > lowp_imat2x2
 Low-qualifier signed integer 2x2 matrix. More...
 
typedef mat< 2, 3, int, lowp > lowp_imat2x3
 Low-qualifier signed integer 2x3 matrix. More...
 
typedef mat< 2, 4, int, lowp > lowp_imat2x4
 Low-qualifier signed integer 2x4 matrix. More...
 
typedef mat< 3, 3, int, lowp > lowp_imat3
 Low-qualifier signed integer 3x3 matrix. More...
 
typedef mat< 3, 2, int, lowp > lowp_imat3x2
 Low-qualifier signed integer 3x2 matrix. More...
 
typedef mat< 3, 3, int, lowp > lowp_imat3x3
 Low-qualifier signed integer 3x3 matrix. More...
 
typedef mat< 3, 4, int, lowp > lowp_imat3x4
 Low-qualifier signed integer 3x4 matrix. More...
 
typedef mat< 4, 4, int, lowp > lowp_imat4
 Low-qualifier signed integer 4x4 matrix. More...
 
typedef mat< 4, 2, int, lowp > lowp_imat4x2
 Low-qualifier signed integer 4x2 matrix. More...
 
typedef mat< 4, 3, int, lowp > lowp_imat4x3
 Low-qualifier signed integer 4x3 matrix. More...
 
typedef mat< 4, 4, int, lowp > lowp_imat4x4
 Low-qualifier signed integer 4x4 matrix. More...
 
typedef mat< 2, 2, uint, lowp > lowp_umat2
 Low-qualifier unsigned integer 2x2 matrix. More...
 
typedef mat< 2, 2, uint, lowp > lowp_umat2x2
 Low-qualifier unsigned integer 2x2 matrix. More...
 
typedef mat< 2, 3, uint, lowp > lowp_umat2x3
 Low-qualifier unsigned integer 2x3 matrix. More...
 
typedef mat< 2, 4, uint, lowp > lowp_umat2x4
 Low-qualifier unsigned integer 2x4 matrix. More...
 
typedef mat< 3, 3, uint, lowp > lowp_umat3
 Low-qualifier unsigned integer 3x3 matrix. More...
 
typedef mat< 3, 2, uint, lowp > lowp_umat3x2
 Low-qualifier unsigned integer 3x2 matrix. More...
 
typedef mat< 3, 3, uint, lowp > lowp_umat3x3
 Low-qualifier unsigned integer 3x3 matrix. More...
 
typedef mat< 3, 4, uint, lowp > lowp_umat3x4
 Low-qualifier unsigned integer 3x4 matrix. More...
 
typedef mat< 4, 4, uint, lowp > lowp_umat4
 Low-qualifier unsigned integer 4x4 matrix. More...
 
typedef mat< 4, 2, uint, lowp > lowp_umat4x2
 Low-qualifier unsigned integer 4x2 matrix. More...
 
typedef mat< 4, 3, uint, lowp > lowp_umat4x3
 Low-qualifier unsigned integer 4x3 matrix. More...
 
typedef mat< 4, 4, uint, lowp > lowp_umat4x4
 Low-qualifier unsigned integer 4x4 matrix. More...
 
typedef mat< 2, 2, int, mediump > mediump_imat2
 Medium-qualifier signed integer 2x2 matrix. More...
 
typedef mat< 2, 2, int, mediump > mediump_imat2x2
 Medium-qualifier signed integer 2x2 matrix. More...
 
typedef mat< 2, 3, int, mediump > mediump_imat2x3
 Medium-qualifier signed integer 2x3 matrix. More...
 
typedef mat< 2, 4, int, mediump > mediump_imat2x4
 Medium-qualifier signed integer 2x4 matrix. More...
 
typedef mat< 3, 3, int, mediump > mediump_imat3
 Medium-qualifier signed integer 3x3 matrix. More...
 
typedef mat< 3, 2, int, mediump > mediump_imat3x2
 Medium-qualifier signed integer 3x2 matrix. More...
 
typedef mat< 3, 3, int, mediump > mediump_imat3x3
 Medium-qualifier signed integer 3x3 matrix. More...
 
typedef mat< 3, 4, int, mediump > mediump_imat3x4
 Medium-qualifier signed integer 3x4 matrix. More...
 
typedef mat< 4, 4, int, mediump > mediump_imat4
 Medium-qualifier signed integer 4x4 matrix. More...
 
typedef mat< 4, 2, int, mediump > mediump_imat4x2
 Medium-qualifier signed integer 4x2 matrix. More...
 
typedef mat< 4, 3, int, mediump > mediump_imat4x3
 Medium-qualifier signed integer 4x3 matrix. More...
 
typedef mat< 4, 4, int, mediump > mediump_imat4x4
 Medium-qualifier signed integer 4x4 matrix. More...
 
typedef mat< 2, 2, uint, mediump > mediump_umat2
 Medium-qualifier unsigned integer 2x2 matrix. More...
 
typedef mat< 2, 2, uint, mediump > mediump_umat2x2
 Medium-qualifier unsigned integer 2x2 matrix. More...
 
typedef mat< 2, 3, uint, mediump > mediump_umat2x3
 Medium-qualifier unsigned integer 2x3 matrix. More...
 
typedef mat< 2, 4, uint, mediump > mediump_umat2x4
 Medium-qualifier unsigned integer 2x4 matrix. More...
 
typedef mat< 3, 3, uint, mediump > mediump_umat3
 Medium-qualifier unsigned integer 3x3 matrix. More...
 
typedef mat< 3, 2, uint, mediump > mediump_umat3x2
 Medium-qualifier unsigned integer 3x2 matrix. More...
 
typedef mat< 3, 3, uint, mediump > mediump_umat3x3
 Medium-qualifier unsigned integer 3x3 matrix. More...
 
typedef mat< 3, 4, uint, mediump > mediump_umat3x4
 Medium-qualifier unsigned integer 3x4 matrix. More...
 
typedef mat< 4, 4, uint, mediump > mediump_umat4
 Medium-qualifier unsigned integer 4x4 matrix. More...
 
typedef mat< 4, 2, uint, mediump > mediump_umat4x2
 Medium-qualifier unsigned integer 4x2 matrix. More...
 
typedef mat< 4, 3, uint, mediump > mediump_umat4x3
 Medium-qualifier unsigned integer 4x3 matrix. More...
 
typedef mat< 4, 4, uint, mediump > mediump_umat4x4
 Medium-qualifier unsigned integer 4x4 matrix. More...
 
typedef mediump_umat2 umat2
 Unsigned integer 2x2 matrix. More...
 
typedef mediump_umat2x2 umat2x2
 Unsigned integer 2x2 matrix. More...
 
typedef mediump_umat2x3 umat2x3
 Unsigned integer 2x3 matrix. More...
 
typedef mediump_umat2x4 umat2x4
 Unsigned integer 2x4 matrix. More...
 
typedef mediump_umat3 umat3
 Unsigned integer 3x3 matrix. More...
 
typedef mediump_umat3x2 umat3x2
 Unsigned integer 3x2 matrix. More...
 
typedef mediump_umat3x3 umat3x3
 Unsigned integer 3x3 matrix. More...
 
typedef mediump_umat3x4 umat3x4
 Unsigned integer 3x4 matrix. More...
 
typedef mediump_umat4 umat4
 Unsigned integer 4x4 matrix. More...
 
typedef mediump_umat4x2 umat4x2
 Unsigned integer 4x2 matrix. More...
 
typedef mediump_umat4x3 umat4x3
 Unsigned integer 4x3 matrix. More...
 
typedef mediump_umat4x4 umat4x4
 Unsigned integer 4x4 matrix. More...
 
-

Detailed Description

-

Include <glm/gtc/matrix_integer.hpp> to use the features of this extension.

-

Defines a number of matrices with integer types.

-

Typedef Documentation

- -
-
- - - - -
typedef mat<2, 2, int, highp> highp_imat2
-
- -

High-qualifier signed integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 37 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 2, int, highp> highp_imat2x2
-
- -

High-qualifier signed integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 49 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 3, int, highp> highp_imat2x3
-
- -

High-qualifier signed integer 2x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 53 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 4, int, highp> highp_imat2x4
-
- -

High-qualifier signed integer 2x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 57 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 3, int, highp> highp_imat3
-
- -

High-qualifier signed integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 41 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 2, int, highp> highp_imat3x2
-
- -

High-qualifier signed integer 3x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 61 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 3, int, highp> highp_imat3x3
-
- -

High-qualifier signed integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 65 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 4, int, highp> highp_imat3x4
-
- -

High-qualifier signed integer 3x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 69 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 4, int, highp> highp_imat4
-
- -

High-qualifier signed integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 45 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 2, int, highp> highp_imat4x2
-
- -

High-qualifier signed integer 4x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 73 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 3, int, highp> highp_imat4x3
-
- -

High-qualifier signed integer 4x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 77 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 4, int, highp> highp_imat4x4
-
- -

High-qualifier signed integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 81 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 2, uint, highp> highp_umat2
-
- -

High-qualifier unsigned integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 186 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 2, uint, highp> highp_umat2x2
-
- -

High-qualifier unsigned integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 198 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 3, uint, highp> highp_umat2x3
-
- -

High-qualifier unsigned integer 2x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 202 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 4, uint, highp> highp_umat2x4
-
- -

High-qualifier unsigned integer 2x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 206 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 3, uint, highp> highp_umat3
-
- -

High-qualifier unsigned integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 190 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 2, uint, highp> highp_umat3x2
-
- -

High-qualifier unsigned integer 3x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 210 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 3, uint, highp> highp_umat3x3
-
- -

High-qualifier unsigned integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 214 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 4, uint, highp> highp_umat3x4
-
- -

High-qualifier unsigned integer 3x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 218 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 4, uint, highp> highp_umat4
-
- -

High-qualifier unsigned integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 194 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 2, uint, highp> highp_umat4x2
-
- -

High-qualifier unsigned integer 4x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 222 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 3, uint, highp> highp_umat4x3
-
- -

High-qualifier unsigned integer 4x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 226 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 4, uint, highp> highp_umat4x4
-
- -

High-qualifier unsigned integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 230 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_imat2 imat2
-
- -

Signed integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 362 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_imat2x2 imat2x2
-
- -

Signed integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 374 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_imat2x3 imat2x3
-
- -

Signed integer 2x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 378 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_imat2x4 imat2x4
-
- -

Signed integer 2x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 382 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_imat3 imat3
-
- -

Signed integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 366 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_imat3x2 imat3x2
-
- -

Signed integer 3x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 386 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_imat3x3 imat3x3
-
- -

Signed integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 390 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_imat3x4 imat3x4
-
- -

Signed integer 3x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 394 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_imat4 imat4
-
- -

Signed integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 370 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_imat4x2 imat4x2
-
- -

Signed integer 4x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 398 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_imat4x3 imat4x3
-
- -

Signed integer 4x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 402 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_imat4x4 imat4x4
-
- -

Signed integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 406 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 2, int, lowp> lowp_imat2
-
- -

Low-qualifier signed integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 136 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 2, int, lowp> lowp_imat2x2
-
- -

Low-qualifier signed integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 149 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 3, int, lowp> lowp_imat2x3
-
- -

Low-qualifier signed integer 2x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 153 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 4, int, lowp> lowp_imat2x4
-
- -

Low-qualifier signed integer 2x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 157 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 3, int, lowp> lowp_imat3
-
- -

Low-qualifier signed integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 140 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 2, int, lowp> lowp_imat3x2
-
- -

Low-qualifier signed integer 3x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 161 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 3, int, lowp> lowp_imat3x3
-
- -

Low-qualifier signed integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 165 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 4, int, lowp> lowp_imat3x4
-
- -

Low-qualifier signed integer 3x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 169 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 4, int, lowp> lowp_imat4
-
- -

Low-qualifier signed integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 144 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 2, int, lowp> lowp_imat4x2
-
- -

Low-qualifier signed integer 4x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 173 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 3, int, lowp> lowp_imat4x3
-
- -

Low-qualifier signed integer 4x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 177 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 4, int, lowp> lowp_imat4x4
-
- -

Low-qualifier signed integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 181 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 2, uint, lowp> lowp_umat2
-
- -

Low-qualifier unsigned integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 285 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 2, uint, lowp> lowp_umat2x2
-
- -

Low-qualifier unsigned integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 298 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 3, uint, lowp> lowp_umat2x3
-
- -

Low-qualifier unsigned integer 2x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 302 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 4, uint, lowp> lowp_umat2x4
-
- -

Low-qualifier unsigned integer 2x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 306 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 3, uint, lowp> lowp_umat3
-
- -

Low-qualifier unsigned integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 289 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 2, uint, lowp> lowp_umat3x2
-
- -

Low-qualifier unsigned integer 3x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 310 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 3, uint, lowp> lowp_umat3x3
-
- -

Low-qualifier unsigned integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 314 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 4, uint, lowp> lowp_umat3x4
-
- -

Low-qualifier unsigned integer 3x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 318 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 4, uint, lowp> lowp_umat4
-
- -

Low-qualifier unsigned integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 293 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 2, uint, lowp> lowp_umat4x2
-
- -

Low-qualifier unsigned integer 4x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 322 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 3, uint, lowp> lowp_umat4x3
-
- -

Low-qualifier unsigned integer 4x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 326 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 4, uint, lowp> lowp_umat4x4
-
- -

Low-qualifier unsigned integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 330 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 2, int, mediump> mediump_imat2
-
- -

Medium-qualifier signed integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 86 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 2, int, mediump> mediump_imat2x2
-
- -

Medium-qualifier signed integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 99 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 3, int, mediump> mediump_imat2x3
-
- -

Medium-qualifier signed integer 2x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 103 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 4, int, mediump> mediump_imat2x4
-
- -

Medium-qualifier signed integer 2x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 107 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 3, int, mediump> mediump_imat3
-
- -

Medium-qualifier signed integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 90 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 2, int, mediump> mediump_imat3x2
-
- -

Medium-qualifier signed integer 3x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 111 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 3, int, mediump> mediump_imat3x3
-
- -

Medium-qualifier signed integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 115 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 4, int, mediump> mediump_imat3x4
-
- -

Medium-qualifier signed integer 3x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 119 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 4, int, mediump> mediump_imat4
-
- -

Medium-qualifier signed integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 94 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 2, int, mediump> mediump_imat4x2
-
- -

Medium-qualifier signed integer 4x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 123 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 3, int, mediump> mediump_imat4x3
-
- -

Medium-qualifier signed integer 4x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 127 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 4, int, mediump> mediump_imat4x4
-
- -

Medium-qualifier signed integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 131 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 2, uint, mediump> mediump_umat2
-
- -

Medium-qualifier unsigned integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 235 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 2, uint, mediump> mediump_umat2x2
-
- -

Medium-qualifier unsigned integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 248 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 3, uint, mediump> mediump_umat2x3
-
- -

Medium-qualifier unsigned integer 2x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 252 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<2, 4, uint, mediump> mediump_umat2x4
-
- -

Medium-qualifier unsigned integer 2x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 256 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 3, uint, mediump> mediump_umat3
-
- -

Medium-qualifier unsigned integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 239 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 2, uint, mediump> mediump_umat3x2
-
- -

Medium-qualifier unsigned integer 3x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 260 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 3, uint, mediump> mediump_umat3x3
-
- -

Medium-qualifier unsigned integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 264 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<3, 4, uint, mediump> mediump_umat3x4
-
- -

Medium-qualifier unsigned integer 3x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 268 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 4, uint, mediump> mediump_umat4
-
- -

Medium-qualifier unsigned integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 243 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 2, uint, mediump> mediump_umat4x2
-
- -

Medium-qualifier unsigned integer 4x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 272 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 3, uint, mediump> mediump_umat4x3
-
- -

Medium-qualifier unsigned integer 4x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 276 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mat<4, 4, uint, mediump> mediump_umat4x4
-
- -

Medium-qualifier unsigned integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 280 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_umat2 umat2
-
- -

Unsigned integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 439 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_umat2x2 umat2x2
-
- -

Unsigned integer 2x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 451 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_umat2x3 umat2x3
-
- -

Unsigned integer 2x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 455 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_umat2x4 umat2x4
-
- -

Unsigned integer 2x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 459 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_umat3 umat3
-
- -

Unsigned integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 443 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_umat3x2 umat3x2
-
- -

Unsigned integer 3x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 463 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_umat3x3 umat3x3
-
- -

Unsigned integer 3x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 467 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_umat3x4 umat3x4
-
- -

Unsigned integer 3x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 471 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_umat4 umat4
-
- -

Unsigned integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 447 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_umat4x2 umat4x2
-
- -

Unsigned integer 4x2 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 475 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_umat4x3 umat4x3
-
- -

Unsigned integer 4x3 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 479 of file matrix_integer.hpp.

- -
-
- -
-
- - - - -
typedef mediump_umat4x4 umat4x4
-
- -

Unsigned integer 4x4 matrix.

-
See also
GLM_GTC_matrix_integer
- -

Definition at line 483 of file matrix_integer.hpp.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00295.html b/tests/OpenGL/package/glm/doc/api/a00295.html deleted file mode 100644 index 4ddf4f40..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00295.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_matrix_inverse - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTC_matrix_inverse
-
-
- -

Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. -More...

- - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType affineInverse (genType const &m)
 Fast matrix inverse for affine matrix. More...
 
template<typename genType >
GLM_FUNC_DECL genType inverseTranspose (genType const &m)
 Compute the inverse transpose of a matrix. More...
 
-

Detailed Description

-

Include <glm/gtc/matrix_integer.hpp> to use the features of this extension.

-

Defines additional matrix inverting functions.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::affineInverse (genType const & m)
-
- -

Fast matrix inverse for affine matrix.

-
Parameters
- - -
mInput matrix to invert.
-
-
-
Template Parameters
- - -
genTypeSquared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate.
-
-
-
See also
GLM_GTC_matrix_inverse
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::inverseTranspose (genType const & m)
-
- -

Compute the inverse transpose of a matrix.

-
Parameters
- - -
mInput matrix to invert transpose.
-
-
-
Template Parameters
- - -
genTypeSquared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate.
-
-
-
See also
GLM_GTC_matrix_inverse
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00296.html b/tests/OpenGL/package/glm/doc/api/a00296.html deleted file mode 100644 index 67240afa..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00296.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_matrix_transform - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
-
-
GLM_GTC_matrix_transform
-
-
- -

Include <glm/gtc/matrix_transform.hpp> to use the features of this extension. -More...

-

Include <glm/gtc/matrix_transform.hpp> to use the features of this extension.

-

Defines functions that generate common transformation matrices.

-

The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00297.html b/tests/OpenGL/package/glm/doc/api/a00297.html deleted file mode 100644 index c2477d8e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00297.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_noise - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
-
-
- -

Include <glm/gtc/noise.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T perlin (vec< L, T, Q > const &p)
 Classic perlin noise. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T perlin (vec< L, T, Q > const &p, vec< L, T, Q > const &rep)
 Periodic perlin noise. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T simplex (vec< L, T, Q > const &p)
 Simplex noise. More...
 
-

Detailed Description

-

Include <glm/gtc/noise.hpp> to use the features of this extension.

-

Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": https://github.com/ashima/webgl-noise Following Stefan Gustavson's paper "Simplex noise demystified": http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::perlin (vec< L, T, Q > const & p)
-
- -

Classic perlin noise.

-
See also
GLM_GTC_noise
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::perlin (vec< L, T, Q > const & p,
vec< L, T, Q > const & rep 
)
-
- -

Periodic perlin noise.

-
See also
GLM_GTC_noise
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::simplex (vec< L, T, Q > const & p)
-
- -

Simplex noise.

-
See also
GLM_GTC_noise
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00298.html b/tests/OpenGL/package/glm/doc/api/a00298.html deleted file mode 100644 index 1c70249c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00298.html +++ /dev/null @@ -1,2034 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_packing - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTC_packing
-
-
- -

Include <glm/gtc/packing.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GLM_FUNC_DECL uint32 packF2x11_1x10 (vec3 const &v)
 First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. More...
 
GLM_FUNC_DECL uint32 packF3x9_E1x5 (vec3 const &v)
 First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, uint16, Q > packHalf (vec< L, float, Q > const &v)
 Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification. More...
 
GLM_FUNC_DECL uint16 packHalf1x16 (float v)
 Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 16-bit floating-point representation found in the OpenGL Specification, and then packing this 16-bit value into a 16-bit unsigned integer. More...
 
GLM_FUNC_DECL uint64 packHalf4x16 (vec4 const &v)
 Returns an unsigned integer obtained by converting the components of a four-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these four 16-bit values into a 64-bit unsigned integer. More...
 
GLM_FUNC_DECL uint32 packI3x10_1x2 (ivec4 const &v)
 Returns an unsigned integer obtained by converting the components of a four-component signed integer vector to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer. More...
 
GLM_FUNC_DECL int packInt2x16 (i16vec2 const &v)
 Convert each component from an integer vector into a packed integer. More...
 
GLM_FUNC_DECL int64 packInt2x32 (i32vec2 const &v)
 Convert each component from an integer vector into a packed integer. More...
 
GLM_FUNC_DECL int16 packInt2x8 (i8vec2 const &v)
 Convert each component from an integer vector into a packed integer. More...
 
GLM_FUNC_DECL int64 packInt4x16 (i16vec4 const &v)
 Convert each component from an integer vector into a packed integer. More...
 
GLM_FUNC_DECL int32 packInt4x8 (i8vec4 const &v)
 Convert each component from an integer vector into a packed integer. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > packRGBM (vec< 3, T, Q > const &rgb)
 Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification. More...
 
template<typename intType , length_t L, typename floatType , qualifier Q>
GLM_FUNC_DECL vec< L, intType, Q > packSnorm (vec< L, floatType, Q > const &v)
 Convert each component of the normalized floating-point vector into signed integer values. More...
 
GLM_FUNC_DECL uint16 packSnorm1x16 (float v)
 First, converts the normalized floating-point value v into 16-bit integer value. More...
 
GLM_FUNC_DECL uint8 packSnorm1x8 (float s)
 First, converts the normalized floating-point value v into 8-bit integer value. More...
 
GLM_FUNC_DECL uint16 packSnorm2x8 (vec2 const &v)
 First, converts each component of the normalized floating-point value v into 8-bit integer values. More...
 
GLM_FUNC_DECL uint32 packSnorm3x10_1x2 (vec4 const &v)
 First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values. More...
 
GLM_FUNC_DECL uint64 packSnorm4x16 (vec4 const &v)
 First, converts each component of the normalized floating-point value v into 16-bit integer values. More...
 
GLM_FUNC_DECL uint32 packU3x10_1x2 (uvec4 const &v)
 Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer. More...
 
GLM_FUNC_DECL uint packUint2x16 (u16vec2 const &v)
 Convert each component from an integer vector into a packed unsigned integer. More...
 
GLM_FUNC_DECL uint64 packUint2x32 (u32vec2 const &v)
 Convert each component from an integer vector into a packed unsigned integer. More...
 
GLM_FUNC_DECL uint16 packUint2x8 (u8vec2 const &v)
 Convert each component from an integer vector into a packed unsigned integer. More...
 
GLM_FUNC_DECL uint64 packUint4x16 (u16vec4 const &v)
 Convert each component from an integer vector into a packed unsigned integer. More...
 
GLM_FUNC_DECL uint32 packUint4x8 (u8vec4 const &v)
 Convert each component from an integer vector into a packed unsigned integer. More...
 
template<typename uintType , length_t L, typename floatType , qualifier Q>
GLM_FUNC_DECL vec< L, uintType, Q > packUnorm (vec< L, floatType, Q > const &v)
 Convert each component of the normalized floating-point vector into unsigned integer values. More...
 
GLM_FUNC_DECL uint16 packUnorm1x16 (float v)
 First, converts the normalized floating-point value v into a 16-bit integer value. More...
 
GLM_FUNC_DECL uint16 packUnorm1x5_1x6_1x5 (vec3 const &v)
 Convert each component of the normalized floating-point vector into unsigned integer values. More...
 
GLM_FUNC_DECL uint8 packUnorm1x8 (float v)
 First, converts the normalized floating-point value v into a 8-bit integer value. More...
 
GLM_FUNC_DECL uint8 packUnorm2x3_1x2 (vec3 const &v)
 Convert each component of the normalized floating-point vector into unsigned integer values. More...
 
GLM_FUNC_DECL uint8 packUnorm2x4 (vec2 const &v)
 Convert each component of the normalized floating-point vector into unsigned integer values. More...
 
GLM_FUNC_DECL uint16 packUnorm2x8 (vec2 const &v)
 First, converts each component of the normalized floating-point value v into 8-bit integer values. More...
 
GLM_FUNC_DECL uint32 packUnorm3x10_1x2 (vec4 const &v)
 First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values. More...
 
GLM_FUNC_DECL uint16 packUnorm3x5_1x1 (vec4 const &v)
 Convert each component of the normalized floating-point vector into unsigned integer values. More...
 
GLM_FUNC_DECL uint64 packUnorm4x16 (vec4 const &v)
 First, converts each component of the normalized floating-point value v into 16-bit integer values. More...
 
GLM_FUNC_DECL uint16 packUnorm4x4 (vec4 const &v)
 Convert each component of the normalized floating-point vector into unsigned integer values. More...
 
GLM_FUNC_DECL vec3 unpackF2x11_1x10 (uint32 p)
 First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . More...
 
GLM_FUNC_DECL vec3 unpackF3x9_E1x5 (uint32 p)
 First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, float, Q > unpackHalf (vec< L, uint16, Q > const &p)
 Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. More...
 
GLM_FUNC_DECL float unpackHalf1x16 (uint16 v)
 Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, interpreted as a 16-bit floating-point number according to the OpenGL Specification, and converting it to 32-bit floating-point values. More...
 
GLM_FUNC_DECL vec4 unpackHalf4x16 (uint64 p)
 Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values. More...
 
GLM_FUNC_DECL ivec4 unpackI3x10_1x2 (uint32 p)
 Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers. More...
 
GLM_FUNC_DECL i16vec2 unpackInt2x16 (int p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL i32vec2 unpackInt2x32 (int64 p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL i8vec2 unpackInt2x8 (int16 p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL i16vec4 unpackInt4x16 (int64 p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL i8vec4 unpackInt4x8 (int32 p)
 Convert a packed integer into an integer vector. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > unpackRGBM (vec< 4, T, Q > const &rgbm)
 Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. More...
 
template<typename floatType , length_t L, typename intType , qualifier Q>
GLM_FUNC_DECL vec< L, floatType, Q > unpackSnorm (vec< L, intType, Q > const &v)
 Convert a packed integer to a normalized floating-point vector. More...
 
GLM_FUNC_DECL float unpackSnorm1x16 (uint16 p)
 First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers. More...
 
GLM_FUNC_DECL float unpackSnorm1x8 (uint8 p)
 First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers. More...
 
GLM_FUNC_DECL vec2 unpackSnorm2x8 (uint16 p)
 First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers. More...
 
GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2 (uint32 p)
 First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. More...
 
GLM_FUNC_DECL vec4 unpackSnorm4x16 (uint64 p)
 First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers. More...
 
GLM_FUNC_DECL uvec4 unpackU3x10_1x2 (uint32 p)
 Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers. More...
 
GLM_FUNC_DECL u16vec2 unpackUint2x16 (uint p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL u32vec2 unpackUint2x32 (uint64 p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL u8vec2 unpackUint2x8 (uint16 p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL u16vec4 unpackUint4x16 (uint64 p)
 Convert a packed integer into an integer vector. More...
 
GLM_FUNC_DECL u8vec4 unpackUint4x8 (uint32 p)
 Convert a packed integer into an integer vector. More...
 
template<typename floatType , length_t L, typename uintType , qualifier Q>
GLM_FUNC_DECL vec< L, floatType, Q > unpackUnorm (vec< L, uintType, Q > const &v)
 Convert a packed integer to a normalized floating-point vector. More...
 
GLM_FUNC_DECL float unpackUnorm1x16 (uint16 p)
 First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers. More...
 
GLM_FUNC_DECL vec3 unpackUnorm1x5_1x6_1x5 (uint16 p)
 Convert a packed integer to a normalized floating-point vector. More...
 
GLM_FUNC_DECL float unpackUnorm1x8 (uint8 p)
 Convert a single 8-bit integer to a normalized floating-point value. More...
 
GLM_FUNC_DECL vec3 unpackUnorm2x3_1x2 (uint8 p)
 Convert a packed integer to a normalized floating-point vector. More...
 
GLM_FUNC_DECL vec2 unpackUnorm2x4 (uint8 p)
 Convert a packed integer to a normalized floating-point vector. More...
 
GLM_FUNC_DECL vec2 unpackUnorm2x8 (uint16 p)
 First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers. More...
 
GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2 (uint32 p)
 First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. More...
 
GLM_FUNC_DECL vec4 unpackUnorm3x5_1x1 (uint16 p)
 Convert a packed integer to a normalized floating-point vector. More...
 
GLM_FUNC_DECL vec4 unpackUnorm4x16 (uint64 p)
 First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers. More...
 
GLM_FUNC_DECL vec4 unpackUnorm4x4 (uint16 p)
 Convert a packed integer to a normalized floating-point vector. More...
 
-

Detailed Description

-

Include <glm/gtc/packing.hpp> to use the features of this extension.

-

This extension provides a set of function to convert vertors to packed formats.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL uint32 glm::packF2x11_1x10 (vec3 const & v)
-
- -

First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.

-

Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. Then, the results are packed into the returned 32-bit unsigned integer.

-

The first vector component specifies the 11 least-significant bits of the result; the last component specifies the 10 most-significant bits.

-
See also
GLM_GTC_packing
-
-vec3 unpackF2x11_1x10(uint32 const& p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint32 glm::packF3x9_E1x5 (vec3 const & v)
-
- -

First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.

-

Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. Then, the results are packed into the returned 32-bit unsigned integer.

-

The first vector component specifies the 11 least-significant bits of the result; the last component specifies the 10 most-significant bits.

-

packF3x9_E1x5 allows encoding into RGBE / RGB9E5 format

-
See also
GLM_GTC_packing
-
-vec3 unpackF3x9_E1x5(uint32 const& p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, uint16, Q> glm::packHalf (vec< L, float, Q > const & v)
-
- -

Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification.

-

The first vector component specifies the 16 least-significant bits of the result; the forth component specifies the 16 most-significant bits.

-
See also
GLM_GTC_packing
-
-vec<L, float, Q> unpackHalf(vec<L, uint16, Q> const& p)
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint16 glm::packHalf1x16 (float v)
-
- -

Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 16-bit floating-point representation found in the OpenGL Specification, and then packing this 16-bit value into a 16-bit unsigned integer.

-
See also
GLM_GTC_packing
-
-uint32 packHalf2x16(vec2 const& v)
-
-uint64 packHalf4x16(vec4 const& v)
-
-GLSL packHalf2x16 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint64 glm::packHalf4x16 (vec4 const & v)
-
- -

Returns an unsigned integer obtained by converting the components of a four-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these four 16-bit values into a 64-bit unsigned integer.

-

The first vector component specifies the 16 least-significant bits of the result; the forth component specifies the 16 most-significant bits.

-
See also
GLM_GTC_packing
-
-uint16 packHalf1x16(float const& v)
-
-uint32 packHalf2x16(vec2 const& v)
-
-GLSL packHalf2x16 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint32 glm::packI3x10_1x2 (ivec4 const & v)
-
- -

Returns an unsigned integer obtained by converting the components of a four-component signed integer vector to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.

-

The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.

-
See also
GLM_GTC_packing
-
-uint32 packI3x10_1x2(uvec4 const& v)
-
-uint32 packSnorm3x10_1x2(vec4 const& v)
-
-uint32 packUnorm3x10_1x2(vec4 const& v)
-
-ivec4 unpackI3x10_1x2(uint32 const& p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL int glm::packInt2x16 (i16vec2 const & v)
-
- -

Convert each component from an integer vector into a packed integer.

-
See also
GLM_GTC_packing
-
-i16vec2 unpackInt2x16(int p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL int64 glm::packInt2x32 (i32vec2 const & v)
-
- -

Convert each component from an integer vector into a packed integer.

-
See also
GLM_GTC_packing
-
-i32vec2 unpackInt2x32(int p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL int16 glm::packInt2x8 (i8vec2 const & v)
-
- -

Convert each component from an integer vector into a packed integer.

-
See also
GLM_GTC_packing
-
-i8vec2 unpackInt2x8(int16 p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL int64 glm::packInt4x16 (i16vec4 const & v)
-
- -

Convert each component from an integer vector into a packed integer.

-
See also
GLM_GTC_packing
-
-i16vec4 unpackInt4x16(int64 p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL int32 glm::packInt4x8 (i8vec4 const & v)
-
- -

Convert each component from an integer vector into a packed integer.

-
See also
GLM_GTC_packing
-
-i8vec4 unpackInt4x8(int32 p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<4, T, Q> glm::packRGBM (vec< 3, T, Q > const & rgb)
-
- -

Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification.

-

The first vector component specifies the 16 least-significant bits of the result; the forth component specifies the 16 most-significant bits.

-
See also
GLM_GTC_packing
-
-vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& p)
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, intType, Q> glm::packSnorm (vec< L, floatType, Q > const & v)
-
- -

Convert each component of the normalized floating-point vector into signed integer values.

-
See also
GLM_GTC_packing
-
-vec<L, floatType, Q> unpackSnorm(vec<L, intType, Q> const& p);
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint16 glm::packSnorm1x16 (float v)
-
- -

First, converts the normalized floating-point value v into 16-bit integer value.

-

Then, the results are packed into the returned 16-bit unsigned integer.

-

The conversion to fixed point is done as follows: packSnorm1x8: round(clamp(s, -1, +1) * 32767.0)

-
See also
GLM_GTC_packing
-
-uint32 packSnorm2x16(vec2 const& v)
-
-uint64 packSnorm4x16(vec4 const& v)
-
-GLSL packSnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint8 glm::packSnorm1x8 (float s)
-
- -

First, converts the normalized floating-point value v into 8-bit integer value.

-

Then, the results are packed into the returned 8-bit unsigned integer.

-

The conversion to fixed point is done as follows: packSnorm1x8: round(clamp(s, -1, +1) * 127.0)

-
See also
GLM_GTC_packing
-
-uint16 packSnorm2x8(vec2 const& v)
-
-uint32 packSnorm4x8(vec4 const& v)
-
-GLSL packSnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint16 glm::packSnorm2x8 (vec2 const & v)
-
- -

First, converts each component of the normalized floating-point value v into 8-bit integer values.

-

Then, the results are packed into the returned 16-bit unsigned integer.

-

The conversion for component c of v to fixed point is done as follows: packSnorm2x8: round(clamp(c, -1, +1) * 127.0)

-

The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

-
See also
GLM_GTC_packing
-
-uint8 packSnorm1x8(float const& v)
-
-uint32 packSnorm4x8(vec4 const& v)
-
-GLSL packSnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint32 glm::packSnorm3x10_1x2 (vec4 const & v)
-
- -

First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values.

-

Then, converts the forth component of the normalized floating-point value v into 2-bit signed integer values. Then, the results are packed into the returned 32-bit unsigned integer.

-

The conversion for component c of v to fixed point is done as follows: packSnorm3x10_1x2(xyz): round(clamp(c, -1, +1) * 511.0) packSnorm3x10_1x2(w): round(clamp(c, -1, +1) * 1.0)

-

The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.

-
See also
GLM_GTC_packing
-
-vec4 unpackSnorm3x10_1x2(uint32 const& p)
-
-uint32 packUnorm3x10_1x2(vec4 const& v)
-
-uint32 packU3x10_1x2(uvec4 const& v)
-
-uint32 packI3x10_1x2(ivec4 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint64 glm::packSnorm4x16 (vec4 const & v)
-
- -

First, converts each component of the normalized floating-point value v into 16-bit integer values.

-

Then, the results are packed into the returned 64-bit unsigned integer.

-

The conversion for component c of v to fixed point is done as follows: packSnorm2x8: round(clamp(c, -1, +1) * 32767.0)

-

The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

-
See also
GLM_GTC_packing
-
-uint16 packSnorm1x16(float const& v)
-
-uint32 packSnorm2x16(vec2 const& v)
-
-GLSL packSnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint32 glm::packU3x10_1x2 (uvec4 const & v)
-
- -

Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.

-

The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.

-
See also
GLM_GTC_packing
-
-uint32 packI3x10_1x2(ivec4 const& v)
-
-uint32 packSnorm3x10_1x2(vec4 const& v)
-
-uint32 packUnorm3x10_1x2(vec4 const& v)
-
-ivec4 unpackU3x10_1x2(uint32 const& p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint glm::packUint2x16 (u16vec2 const & v)
-
- -

Convert each component from an integer vector into a packed unsigned integer.

-
See also
GLM_GTC_packing
-
-u16vec2 unpackUint2x16(uint p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint64 glm::packUint2x32 (u32vec2 const & v)
-
- -

Convert each component from an integer vector into a packed unsigned integer.

-
See also
GLM_GTC_packing
-
-u32vec2 unpackUint2x32(int p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint16 glm::packUint2x8 (u8vec2 const & v)
-
- -

Convert each component from an integer vector into a packed unsigned integer.

-
See also
GLM_GTC_packing
-
-u8vec2 unpackInt2x8(uint16 p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint64 glm::packUint4x16 (u16vec4 const & v)
-
- -

Convert each component from an integer vector into a packed unsigned integer.

-
See also
GLM_GTC_packing
-
-u16vec4 unpackUint4x16(uint64 p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint32 glm::packUint4x8 (u8vec4 const & v)
-
- -

Convert each component from an integer vector into a packed unsigned integer.

-
See also
GLM_GTC_packing
-
-u8vec4 unpackUint4x8(uint32 p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, uintType, Q> glm::packUnorm (vec< L, floatType, Q > const & v)
-
- -

Convert each component of the normalized floating-point vector into unsigned integer values.

-
See also
GLM_GTC_packing
-
-vec<L, floatType, Q> unpackUnorm(vec<L, intType, Q> const& p);
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint16 glm::packUnorm1x16 (float v)
-
- -

First, converts the normalized floating-point value v into a 16-bit integer value.

-

Then, the results are packed into the returned 16-bit unsigned integer.

-

The conversion for component c of v to fixed point is done as follows: packUnorm1x16: round(clamp(c, 0, +1) * 65535.0)

-
See also
GLM_GTC_packing
-
-uint16 packSnorm1x16(float const& v)
-
-uint64 packSnorm4x16(vec4 const& v)
-
-GLSL packUnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint16 glm::packUnorm1x5_1x6_1x5 (vec3 const & v)
-
- -

Convert each component of the normalized floating-point vector into unsigned integer values.

-
See also
GLM_GTC_packing
-
-vec3 unpackUnorm1x5_1x6_1x5(uint16 p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint8 glm::packUnorm1x8 (float v)
-
- -

First, converts the normalized floating-point value v into a 8-bit integer value.

-

Then, the results are packed into the returned 8-bit unsigned integer.

-

The conversion for component c of v to fixed point is done as follows: packUnorm1x8: round(clamp(c, 0, +1) * 255.0)

-
See also
GLM_GTC_packing
-
-uint16 packUnorm2x8(vec2 const& v)
-
-uint32 packUnorm4x8(vec4 const& v)
-
-GLSL packUnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint8 glm::packUnorm2x3_1x2 (vec3 const & v)
-
- -

Convert each component of the normalized floating-point vector into unsigned integer values.

-
See also
GLM_GTC_packing
-
-vec3 unpackUnorm2x3_1x2(uint8 p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint8 glm::packUnorm2x4 (vec2 const & v)
-
- -

Convert each component of the normalized floating-point vector into unsigned integer values.

-
See also
GLM_GTC_packing
-
-vec2 unpackUnorm2x4(uint8 p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint16 glm::packUnorm2x8 (vec2 const & v)
-
- -

First, converts each component of the normalized floating-point value v into 8-bit integer values.

-

Then, the results are packed into the returned 16-bit unsigned integer.

-

The conversion for component c of v to fixed point is done as follows: packUnorm2x8: round(clamp(c, 0, +1) * 255.0)

-

The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

-
See also
GLM_GTC_packing
-
-uint8 packUnorm1x8(float const& v)
-
-uint32 packUnorm4x8(vec4 const& v)
-
-GLSL packUnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint32 glm::packUnorm3x10_1x2 (vec4 const & v)
-
- -

First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values.

-

Then, converts the forth component of the normalized floating-point value v into 2-bit signed uninteger values. Then, the results are packed into the returned 32-bit unsigned integer.

-

The conversion for component c of v to fixed point is done as follows: packUnorm3x10_1x2(xyz): round(clamp(c, 0, +1) * 1023.0) packUnorm3x10_1x2(w): round(clamp(c, 0, +1) * 3.0)

-

The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.

-
See also
GLM_GTC_packing
-
-vec4 unpackUnorm3x10_1x2(uint32 const& p)
-
-uint32 packUnorm3x10_1x2(vec4 const& v)
-
-uint32 packU3x10_1x2(uvec4 const& v)
-
-uint32 packI3x10_1x2(ivec4 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint16 glm::packUnorm3x5_1x1 (vec4 const & v)
-
- -

Convert each component of the normalized floating-point vector into unsigned integer values.

-
See also
GLM_GTC_packing
-
-vec4 unpackUnorm3x5_1x1(uint16 p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint64 glm::packUnorm4x16 (vec4 const & v)
-
- -

First, converts each component of the normalized floating-point value v into 16-bit integer values.

-

Then, the results are packed into the returned 64-bit unsigned integer.

-

The conversion for component c of v to fixed point is done as follows: packUnorm4x16: round(clamp(c, 0, +1) * 65535.0)

-

The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

-
See also
GLM_GTC_packing
-
-uint16 packUnorm1x16(float const& v)
-
-uint32 packUnorm2x16(vec2 const& v)
-
-GLSL packUnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint16 glm::packUnorm4x4 (vec4 const & v)
-
- -

Convert each component of the normalized floating-point vector into unsigned integer values.

-
See also
GLM_GTC_packing
-
-vec4 unpackUnorm4x4(uint16 p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec3 glm::unpackF2x11_1x10 (uint32 p)
-
- -

First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .

-

Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.

-

The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

-
See also
GLM_GTC_packing
-
-uint32 packF2x11_1x10(vec3 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec3 glm::unpackF3x9_E1x5 (uint32 p)
-
- -

First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .

-

Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.

-

The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

-

unpackF3x9_E1x5 allows decoding RGBE / RGB9E5 data

-
See also
GLM_GTC_packing
-
-uint32 packF3x9_E1x5(vec3 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, float, Q> glm::unpackHalf (vec< L, uint16, Q > const & p)
-
- -

Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values.

-

The first component of the vector is obtained from the 16 least-significant bits of v; the forth component is obtained from the 16 most-significant bits of v.

-
See also
GLM_GTC_packing
-
-vec<L, uint16, Q> packHalf(vec<L, float, Q> const& v)
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL float glm::unpackHalf1x16 (uint16 v)
-
- -

Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, interpreted as a 16-bit floating-point number according to the OpenGL Specification, and converting it to 32-bit floating-point values.

-
See also
GLM_GTC_packing
-
-vec2 unpackHalf2x16(uint32 const& v)
-
-vec4 unpackHalf4x16(uint64 const& v)
-
-GLSL unpackHalf2x16 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec4 glm::unpackHalf4x16 (uint64 p)
-
- -

Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.

-

The first component of the vector is obtained from the 16 least-significant bits of v; the forth component is obtained from the 16 most-significant bits of v.

-
See also
GLM_GTC_packing
-
-float unpackHalf1x16(uint16 const& v)
-
-vec2 unpackHalf2x16(uint32 const& v)
-
-GLSL unpackHalf2x16 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL ivec4 glm::unpackI3x10_1x2 (uint32 p)
-
- -

Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers.

-

The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

-
See also
GLM_GTC_packing
-
-uint32 packU3x10_1x2(uvec4 const& v)
-
-vec4 unpackSnorm3x10_1x2(uint32 const& p);
-
-uvec4 unpackI3x10_1x2(uint32 const& p);
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL i16vec2 glm::unpackInt2x16 (int p)
-
- -

Convert a packed integer into an integer vector.

-
See also
GLM_GTC_packing
-
-int packInt2x16(i16vec2 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL i32vec2 glm::unpackInt2x32 (int64 p)
-
- -

Convert a packed integer into an integer vector.

-
See also
GLM_GTC_packing
-
-int packInt2x16(i32vec2 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL i8vec2 glm::unpackInt2x8 (int16 p)
-
- -

Convert a packed integer into an integer vector.

-
See also
GLM_GTC_packing
-
-int16 packInt2x8(i8vec2 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL i16vec4 glm::unpackInt4x16 (int64 p)
-
- -

Convert a packed integer into an integer vector.

-
See also
GLM_GTC_packing
-
-int64 packInt4x16(i16vec4 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL i8vec4 glm::unpackInt4x8 (int32 p)
-
- -

Convert a packed integer into an integer vector.

-
See also
GLM_GTC_packing
-
-int32 packInt2x8(i8vec4 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::unpackRGBM (vec< 4, T, Q > const & rgbm)
-
- -

Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values.

-

The first component of the vector is obtained from the 16 least-significant bits of v; the forth component is obtained from the 16 most-significant bits of v.

-
See also
GLM_GTC_packing
-
-vec<4, T, Q> packRGBM(vec<3, float, Q> const& v)
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, floatType, Q> glm::unpackSnorm (vec< L, intType, Q > const & v)
-
- -

Convert a packed integer to a normalized floating-point vector.

-
See also
GLM_GTC_packing
-
-vec<L, intType, Q> packSnorm(vec<L, floatType, Q> const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL float glm::unpackSnorm1x16 (uint16 p)
-
- -

First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers.

-

Then, each component is converted to a normalized floating-point value to generate the returned scalar.

-

The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm1x16: clamp(f / 32767.0, -1, +1)

-
See also
GLM_GTC_packing
-
-vec2 unpackSnorm2x16(uint32 p)
-
-vec4 unpackSnorm4x16(uint64 p)
-
-GLSL unpackSnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL float glm::unpackSnorm1x8 (uint8 p)
-
- -

First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers.

-

Then, the value is converted to a normalized floating-point value to generate the returned scalar.

-

The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm1x8: clamp(f / 127.0, -1, +1)

-
See also
GLM_GTC_packing
-
-vec2 unpackSnorm2x8(uint16 p)
-
-vec4 unpackSnorm4x8(uint32 p)
-
-GLSL unpackSnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec2 glm::unpackSnorm2x8 (uint16 p)
-
- -

First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers.

-

Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.

-

The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm2x8: clamp(f / 127.0, -1, +1)

-

The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

-
See also
GLM_GTC_packing
-
-float unpackSnorm1x8(uint8 p)
-
-vec4 unpackSnorm4x8(uint32 p)
-
-GLSL unpackSnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec4 glm::unpackSnorm3x10_1x2 (uint32 p)
-
- -

First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.

-

Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.

-

The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm3x10_1x2(xyz): clamp(f / 511.0, -1, +1) unpackSnorm3x10_1x2(w): clamp(f / 511.0, -1, +1)

-

The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

-
See also
GLM_GTC_packing
-
-uint32 packSnorm3x10_1x2(vec4 const& v)
-
-vec4 unpackUnorm3x10_1x2(uint32 const& p))
-
-uvec4 unpackI3x10_1x2(uint32 const& p)
-
-uvec4 unpackU3x10_1x2(uint32 const& p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec4 glm::unpackSnorm4x16 (uint64 p)
-
- -

First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers.

-

Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.

-

The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm4x16: clamp(f / 32767.0, -1, +1)

-

The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

-
See also
GLM_GTC_packing
-
-float unpackSnorm1x16(uint16 p)
-
-vec2 unpackSnorm2x16(uint32 p)
-
-GLSL unpackSnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uvec4 glm::unpackU3x10_1x2 (uint32 p)
-
- -

Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers.

-

The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

-
See also
GLM_GTC_packing
-
-uint32 packU3x10_1x2(uvec4 const& v)
-
-vec4 unpackSnorm3x10_1x2(uint32 const& p);
-
-uvec4 unpackI3x10_1x2(uint32 const& p);
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL u16vec2 glm::unpackUint2x16 (uint p)
-
- -

Convert a packed integer into an integer vector.

-
See also
GLM_GTC_packing
-
-uint packUint2x16(u16vec2 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL u32vec2 glm::unpackUint2x32 (uint64 p)
-
- -

Convert a packed integer into an integer vector.

-
See also
GLM_GTC_packing
-
-int packUint2x16(u32vec2 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL u8vec2 glm::unpackUint2x8 (uint16 p)
-
- -

Convert a packed integer into an integer vector.

-
See also
GLM_GTC_packing
-
-uint16 packInt2x8(u8vec2 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL u16vec4 glm::unpackUint4x16 (uint64 p)
-
- -

Convert a packed integer into an integer vector.

-
See also
GLM_GTC_packing
-
-uint64 packUint4x16(u16vec4 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL u8vec4 glm::unpackUint4x8 (uint32 p)
-
- -

Convert a packed integer into an integer vector.

-
See also
GLM_GTC_packing
-
-uint32 packUint4x8(u8vec2 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, floatType, Q> glm::unpackUnorm (vec< L, uintType, Q > const & v)
-
- -

Convert a packed integer to a normalized floating-point vector.

-
See also
GLM_GTC_packing
-
-vec<L, intType, Q> packUnorm(vec<L, floatType, Q> const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL float glm::unpackUnorm1x16 (uint16 p)
-
- -

First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers.

-

Then, the value is converted to a normalized floating-point value to generate the returned scalar.

-

The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm1x16: f / 65535.0

-
See also
GLM_GTC_packing
-
-vec2 unpackUnorm2x16(uint32 p)
-
-vec4 unpackUnorm4x16(uint64 p)
-
-GLSL unpackUnorm2x16 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec3 glm::unpackUnorm1x5_1x6_1x5 (uint16 p)
-
- -

Convert a packed integer to a normalized floating-point vector.

-
See also
GLM_GTC_packing
-
-uint16 packUnorm1x5_1x6_1x5(vec3 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL float glm::unpackUnorm1x8 (uint8 p)
-
- -

Convert a single 8-bit integer to a normalized floating-point value.

-

The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0

-
See also
GLM_GTC_packing
-
-vec2 unpackUnorm2x8(uint16 p)
-
-vec4 unpackUnorm4x8(uint32 p)
-
-GLSL unpackUnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec3 glm::unpackUnorm2x3_1x2 (uint8 p)
-
- -

Convert a packed integer to a normalized floating-point vector.

-
See also
GLM_GTC_packing
-
-uint8 packUnorm2x3_1x2(vec3 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec2 glm::unpackUnorm2x4 (uint8 p)
-
- -

Convert a packed integer to a normalized floating-point vector.

-
See also
GLM_GTC_packing
-
-uint8 packUnorm2x4(vec2 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec2 glm::unpackUnorm2x8 (uint16 p)
-
- -

First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers.

-

Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.

-

The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0

-

The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

-
See also
GLM_GTC_packing
-
-float unpackUnorm1x8(uint8 v)
-
-vec4 unpackUnorm4x8(uint32 p)
-
-GLSL unpackUnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec4 glm::unpackUnorm3x10_1x2 (uint32 p)
-
- -

First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.

-

Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.

-

The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm3x10_1x2(xyz): clamp(f / 1023.0, 0, +1) unpackSnorm3x10_1x2(w): clamp(f / 3.0, 0, +1)

-

The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

-
See also
GLM_GTC_packing
-
-uint32 packSnorm3x10_1x2(vec4 const& v)
-
-vec4 unpackInorm3x10_1x2(uint32 const& p))
-
-uvec4 unpackI3x10_1x2(uint32 const& p)
-
-uvec4 unpackU3x10_1x2(uint32 const& p)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec4 glm::unpackUnorm3x5_1x1 (uint16 p)
-
- -

Convert a packed integer to a normalized floating-point vector.

-
See also
GLM_GTC_packing
-
-uint16 packUnorm3x5_1x1(vec4 const& v)
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec4 glm::unpackUnorm4x16 (uint64 p)
-
- -

First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers.

-

Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.

-

The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnormx4x16: f / 65535.0

-

The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

-
See also
GLM_GTC_packing
-
-float unpackUnorm1x16(uint16 p)
-
-vec2 unpackUnorm2x16(uint32 p)
-
-GLSL unpackUnorm2x16 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec4 glm::unpackUnorm4x4 (uint16 p)
-
- -

Convert a packed integer to a normalized floating-point vector.

-
See also
GLM_GTC_packing
-
-uint16 packUnorm4x4(vec4 const& v)
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00299.html b/tests/OpenGL/package/glm/doc/api/a00299.html deleted file mode 100644 index 89d49c99..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00299.html +++ /dev/null @@ -1,619 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_quaternion - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTC_quaternion
-
-
- -

Include <glm/gtc/quaternion.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > eulerAngles (qua< T, Q > const &x)
 Returns euler angles, pitch as x, yaw as y, roll as z. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > greaterThan (qua< T, Q > const &x, qua< T, Q > const &y)
 Returns the component-wise comparison of result x > y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > greaterThanEqual (qua< T, Q > const &x, qua< T, Q > const &y)
 Returns the component-wise comparison of result x >= y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > lessThan (qua< T, Q > const &x, qua< T, Q > const &y)
 Returns the component-wise comparison result of x < y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > lessThanEqual (qua< T, Q > const &x, qua< T, Q > const &y)
 Returns the component-wise comparison of result x <= y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > mat3_cast (qua< T, Q > const &x)
 Converts a quaternion to a 3 * 3 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > mat4_cast (qua< T, Q > const &x)
 Converts a quaternion to a 4 * 4 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T pitch (qua< T, Q > const &x)
 Returns pitch value of euler angles expressed in radians. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > quat_cast (mat< 3, 3, T, Q > const &x)
 Converts a pure rotation 3 * 3 matrix to a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > quat_cast (mat< 4, 4, T, Q > const &x)
 Converts a pure rotation 4 * 4 matrix to a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > quatLookAt (vec< 3, T, Q > const &direction, vec< 3, T, Q > const &up)
 Build a look at quaternion based on the default handedness. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > quatLookAtLH (vec< 3, T, Q > const &direction, vec< 3, T, Q > const &up)
 Build a left-handed look at quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > quatLookAtRH (vec< 3, T, Q > const &direction, vec< 3, T, Q > const &up)
 Build a right-handed look at quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T roll (qua< T, Q > const &x)
 Returns roll value of euler angles expressed in radians. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T yaw (qua< T, Q > const &x)
 Returns yaw value of euler angles expressed in radians. More...
 
-

Detailed Description

-

Include <glm/gtc/quaternion.hpp> to use the features of this extension.

-

Defines a templated quaternion type and several quaternion operations.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::eulerAngles (qua< T, Q > const & x)
-
- -

Returns euler angles, pitch as x, yaw as y, roll as z.

-

The result is expressed in radians.

-
Template Parameters
- - -
TFloating-point scalar types.
-
-
-
See also
GLM_GTC_quaternion
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<4, bool, Q> glm::greaterThan (qua< T, Q > const & x,
qua< T, Q > const & y 
)
-
- -

Returns the component-wise comparison of result x > y.

-
Template Parameters
- - - -
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLM_EXT_quaternion_relational
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<4, bool, Q> glm::greaterThanEqual (qua< T, Q > const & x,
qua< T, Q > const & y 
)
-
- -

Returns the component-wise comparison of result x >= y.

-
Template Parameters
- - - -
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLM_EXT_quaternion_relational
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<4, bool, Q> glm::lessThan (qua< T, Q > const & x,
qua< T, Q > const & y 
)
-
- -

Returns the component-wise comparison result of x < y.

-
Template Parameters
- - - -
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLM_EXT_quaternion_relational
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<4, bool, Q> glm::lessThanEqual (qua< T, Q > const & x,
qua< T, Q > const & y 
)
-
- -

Returns the component-wise comparison of result x <= y.

-
Template Parameters
- - - -
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLM_EXT_quaternion_relational
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, Q> glm::mat3_cast (qua< T, Q > const & x)
-
- -

Converts a quaternion to a 3 * 3 matrix.

-
Template Parameters
- - -
TFloating-point scalar types.
-
-
-
See also
GLM_GTC_quaternion
- -

Referenced by glm::toMat3().

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::mat4_cast (qua< T, Q > const & x)
-
- -

Converts a quaternion to a 4 * 4 matrix.

-
Template Parameters
- - -
TFloating-point scalar types.
-
-
-
See also
GLM_GTC_quaternion
- -

Referenced by glm::toMat4().

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::pitch (qua< T, Q > const & x)
-
- -

Returns pitch value of euler angles expressed in radians.

-
Template Parameters
- - -
TFloating-point scalar types.
-
-
-
See also
GLM_GTC_quaternion
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::quat_cast (mat< 3, 3, T, Q > const & x)
-
- -

Converts a pure rotation 3 * 3 matrix to a quaternion.

-
Template Parameters
- - -
TFloating-point scalar types.
-
-
-
See also
GLM_GTC_quaternion
- -

Referenced by glm::toQuat().

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::quat_cast (mat< 4, 4, T, Q > const & x)
-
- -

Converts a pure rotation 4 * 4 matrix to a quaternion.

-
Template Parameters
- - -
TFloating-point scalar types.
-
-
-
See also
GLM_GTC_quaternion
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::quatLookAt (vec< 3, T, Q > const & direction,
vec< 3, T, Q > const & up 
)
-
- -

Build a look at quaternion based on the default handedness.

-
Parameters
- - - -
directionDesired forward direction. Needs to be normalized.
upUp vector, how the camera is oriented. Typically (0, 1, 0).
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::quatLookAtLH (vec< 3, T, Q > const & direction,
vec< 3, T, Q > const & up 
)
-
- -

Build a left-handed look at quaternion.

-
Parameters
- - - -
directionDesired forward direction onto which the +z-axis gets mapped. Needs to be normalized.
upUp vector, how the camera is oriented. Typically (0, 1, 0).
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::quatLookAtRH (vec< 3, T, Q > const & direction,
vec< 3, T, Q > const & up 
)
-
- -

Build a right-handed look at quaternion.

-
Parameters
- - - -
directionDesired forward direction onto which the -z-axis gets mapped. Needs to be normalized.
upUp vector, how the camera is oriented. Typically (0, 1, 0).
-
-
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::roll (qua< T, Q > const & x)
-
- -

Returns roll value of euler angles expressed in radians.

-
Template Parameters
- - -
TFloating-point scalar types.
-
-
-
See also
GLM_GTC_quaternion
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::yaw (qua< T, Q > const & x)
-
- -

Returns yaw value of euler angles expressed in radians.

-
Template Parameters
- - -
TFloating-point scalar types.
-
-
-
See also
GLM_GTC_quaternion
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00300.html b/tests/OpenGL/package/glm/doc/api/a00300.html deleted file mode 100644 index cd7724f4..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00300.html +++ /dev/null @@ -1,320 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_random - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
-
-
- -

Include <glm/gtc/random.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL vec< 3, T, defaultp > ballRand (T Radius)
 Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius. More...
 
template<typename T >
GLM_FUNC_DECL vec< 2, T, defaultp > circularRand (T Radius)
 Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius. More...
 
template<typename T >
GLM_FUNC_DECL vec< 2, T, defaultp > diskRand (T Radius)
 Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius. More...
 
template<typename genType >
GLM_FUNC_DECL genType gaussRand (genType Mean, genType Deviation)
 Generate random numbers in the interval [Min, Max], according a gaussian distribution. More...
 
template<typename genType >
GLM_FUNC_DECL genType linearRand (genType Min, genType Max)
 Generate random numbers in the interval [Min, Max], according a linear distribution. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > linearRand (vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)
 Generate random numbers in the interval [Min, Max], according a linear distribution. More...
 
template<typename T >
GLM_FUNC_DECL vec< 3, T, defaultp > sphericalRand (T Radius)
 Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius. More...
 
-

Detailed Description

-

Include <glm/gtc/random.hpp> to use the features of this extension.

-

Generate random number from various distribution methods.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, defaultp> glm::ballRand (Radius)
-
- -

Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius.

-
See also
GLM_GTC_random
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<2, T, defaultp> glm::circularRand (Radius)
-
- -

Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius.

-
See also
GLM_GTC_random
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<2, T, defaultp> glm::diskRand (Radius)
-
- -

Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius.

-
See also
GLM_GTC_random
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::gaussRand (genType Mean,
genType Deviation 
)
-
- -

Generate random numbers in the interval [Min, Max], according a gaussian distribution.

-
See also
GLM_GTC_random
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::linearRand (genType Min,
genType Max 
)
-
- -

Generate random numbers in the interval [Min, Max], according a linear distribution.

-
Parameters
- - - -
MinMinimum value included in the sampling
MaxMaximum value included in the sampling
-
-
-
Template Parameters
- - -
genTypeValue type. Currently supported: float or double scalars.
-
-
-
See also
GLM_GTC_random
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::linearRand (vec< L, T, Q > const & Min,
vec< L, T, Q > const & Max 
)
-
- -

Generate random numbers in the interval [Min, Max], according a linear distribution.

-
Parameters
- - - -
MinMinimum value included in the sampling
MaxMaximum value included in the sampling
-
-
-
Template Parameters
- - -
TValue type. Currently supported: float or double.
-
-
-
See also
GLM_GTC_random
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, defaultp> glm::sphericalRand (Radius)
-
- -

Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius.

-
See also
GLM_GTC_random
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00301.html b/tests/OpenGL/package/glm/doc/api/a00301.html deleted file mode 100644 index 2f882995..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00301.html +++ /dev/null @@ -1,460 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_reciprocal - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTC_reciprocal
-
-
- -

Include <glm/gtc/reciprocal.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType acot (genType x)
 Inverse cotangent function. More...
 
template<typename genType >
GLM_FUNC_DECL genType acoth (genType x)
 Inverse cotangent hyperbolic function. More...
 
template<typename genType >
GLM_FUNC_DECL genType acsc (genType x)
 Inverse cosecant function. More...
 
template<typename genType >
GLM_FUNC_DECL genType acsch (genType x)
 Inverse cosecant hyperbolic function. More...
 
template<typename genType >
GLM_FUNC_DECL genType asec (genType x)
 Inverse secant function. More...
 
template<typename genType >
GLM_FUNC_DECL genType asech (genType x)
 Inverse secant hyperbolic function. More...
 
template<typename genType >
GLM_FUNC_DECL genType cot (genType angle)
 Cotangent function. More...
 
template<typename genType >
GLM_FUNC_DECL genType coth (genType angle)
 Cotangent hyperbolic function. More...
 
template<typename genType >
GLM_FUNC_DECL genType csc (genType angle)
 Cosecant function. More...
 
template<typename genType >
GLM_FUNC_DECL genType csch (genType angle)
 Cosecant hyperbolic function. More...
 
template<typename genType >
GLM_FUNC_DECL genType sec (genType angle)
 Secant function. More...
 
template<typename genType >
GLM_FUNC_DECL genType sech (genType angle)
 Secant hyperbolic function. More...
 
-

Detailed Description

-

Include <glm/gtc/reciprocal.hpp> to use the features of this extension.

-

Define secant, cosecant and cotangent functions.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::acot (genType x)
-
- -

Inverse cotangent function.

-
Returns
Return an angle expressed in radians.
-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLM_GTC_reciprocal
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::acoth (genType x)
-
- -

Inverse cotangent hyperbolic function.

-
Returns
Return an angle expressed in radians.
-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLM_GTC_reciprocal
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::acsc (genType x)
-
- -

Inverse cosecant function.

-
Returns
Return an angle expressed in radians.
-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLM_GTC_reciprocal
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::acsch (genType x)
-
- -

Inverse cosecant hyperbolic function.

-
Returns
Return an angle expressed in radians.
-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLM_GTC_reciprocal
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::asec (genType x)
-
- -

Inverse secant function.

-
Returns
Return an angle expressed in radians.
-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLM_GTC_reciprocal
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::asech (genType x)
-
- -

Inverse secant hyperbolic function.

-
Returns
Return an angle expressed in radians.
-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLM_GTC_reciprocal
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::cot (genType angle)
-
- -

Cotangent function.

-

adjacent / opposite or 1 / tan(x)

-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLM_GTC_reciprocal
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::coth (genType angle)
-
- -

Cotangent hyperbolic function.

-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLM_GTC_reciprocal
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::csc (genType angle)
-
- -

Cosecant function.

-

hypotenuse / opposite or 1 / sin(x)

-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLM_GTC_reciprocal
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::csch (genType angle)
-
- -

Cosecant hyperbolic function.

-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLM_GTC_reciprocal
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::sec (genType angle)
-
- -

Secant function.

-

hypotenuse / adjacent or 1 / cos(x)

-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLM_GTC_reciprocal
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::sech (genType angle)
-
- -

Secant hyperbolic function.

-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLM_GTC_reciprocal
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00302.html b/tests/OpenGL/package/glm/doc/api/a00302.html deleted file mode 100644 index 51e4817e..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00302.html +++ /dev/null @@ -1,547 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_round - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
-
-
- -

Include <glm/gtc/round.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType ceilMultiple (genType v, genType Multiple)
 Higher multiple number of Source. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > ceilMultiple (vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
 Higher multiple number of Source. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType ceilPowerOfTwo (genIUType v)
 Return the power of two number which value is just higher the input value, round up to a power of two. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > ceilPowerOfTwo (vec< L, T, Q > const &v)
 Return the power of two number which value is just higher the input value, round up to a power of two. More...
 
template<typename genType >
GLM_FUNC_DECL genType floorMultiple (genType v, genType Multiple)
 Lower multiple number of Source. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > floorMultiple (vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
 Lower multiple number of Source. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType floorPowerOfTwo (genIUType v)
 Return the power of two number which value is just lower the input value, round down to a power of two. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > floorPowerOfTwo (vec< L, T, Q > const &v)
 Return the power of two number which value is just lower the input value, round down to a power of two. More...
 
template<typename genType >
GLM_FUNC_DECL genType roundMultiple (genType v, genType Multiple)
 Lower multiple number of Source. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > roundMultiple (vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)
 Lower multiple number of Source. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType roundPowerOfTwo (genIUType v)
 Return the power of two number which value is the closet to the input value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > roundPowerOfTwo (vec< L, T, Q > const &v)
 Return the power of two number which value is the closet to the input value. More...
 
-

Detailed Description

-

Include <glm/gtc/round.hpp> to use the features of this extension.

-

Rounding value to specific boundings

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::ceilMultiple (genType v,
genType Multiple 
)
-
- -

Higher multiple number of Source.

-
Template Parameters
- - -
genTypeFloating-point or integer scalar or vector types.
-
-
-
Parameters
- - - -
vSource value to which is applied the function
MultipleMust be a null or positive value
-
-
-
See also
GLM_GTC_round
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::ceilMultiple (vec< L, T, Q > const & v,
vec< L, T, Q > const & Multiple 
)
-
- -

Higher multiple number of Source.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
-
Parameters
- - - -
vSource values to which is applied the function
MultipleMust be a null or positive value
-
-
-
See also
GLM_GTC_round
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genIUType glm::ceilPowerOfTwo (genIUType v)
-
- -

Return the power of two number which value is just higher the input value, round up to a power of two.

-
See also
GLM_GTC_round
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::ceilPowerOfTwo (vec< L, T, Q > const & v)
-
- -

Return the power of two number which value is just higher the input value, round up to a power of two.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
-
See also
GLM_GTC_round
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::floorMultiple (genType v,
genType Multiple 
)
-
- -

Lower multiple number of Source.

-
Template Parameters
- - -
genTypeFloating-point or integer scalar or vector types.
-
-
-
Parameters
- - - -
vSource value to which is applied the function
MultipleMust be a null or positive value
-
-
-
See also
GLM_GTC_round
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::floorMultiple (vec< L, T, Q > const & v,
vec< L, T, Q > const & Multiple 
)
-
- -

Lower multiple number of Source.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
-
Parameters
- - - -
vSource values to which is applied the function
MultipleMust be a null or positive value
-
-
-
See also
GLM_GTC_round
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genIUType glm::floorPowerOfTwo (genIUType v)
-
- -

Return the power of two number which value is just lower the input value, round down to a power of two.

-
See also
GLM_GTC_round
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::floorPowerOfTwo (vec< L, T, Q > const & v)
-
- -

Return the power of two number which value is just lower the input value, round down to a power of two.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
-
See also
GLM_GTC_round
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::roundMultiple (genType v,
genType Multiple 
)
-
- -

Lower multiple number of Source.

-
Template Parameters
- - -
genTypeFloating-point or integer scalar or vector types.
-
-
-
Parameters
- - - -
vSource value to which is applied the function
MultipleMust be a null or positive value
-
-
-
See also
GLM_GTC_round
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::roundMultiple (vec< L, T, Q > const & v,
vec< L, T, Q > const & Multiple 
)
-
- -

Lower multiple number of Source.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
-
Parameters
- - - -
vSource values to which is applied the function
MultipleMust be a null or positive value
-
-
-
See also
GLM_GTC_round
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genIUType glm::roundPowerOfTwo (genIUType v)
-
- -

Return the power of two number which value is the closet to the input value.

-
See also
GLM_GTC_round
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::roundPowerOfTwo (vec< L, T, Q > const & v)
-
- -

Return the power of two number which value is the closet to the input value.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
-
See also
GLM_GTC_round
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00303.html b/tests/OpenGL/package/glm/doc/api/a00303.html deleted file mode 100644 index a463e4a5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00303.html +++ /dev/null @@ -1,1510 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_type_aligned - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTC_type_aligned
-
-
- -

Include <glm/gtc/type_aligned.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

-typedef aligned_highp_bvec1 aligned_bvec1
 1 component vector aligned in memory of bool values.
 
-typedef aligned_highp_bvec2 aligned_bvec2
 2 components vector aligned in memory of bool values.
 
-typedef aligned_highp_bvec3 aligned_bvec3
 3 components vector aligned in memory of bool values.
 
-typedef aligned_highp_bvec4 aligned_bvec4
 4 components vector aligned in memory of bool values.
 
-typedef aligned_highp_dmat2 aligned_dmat2
 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat2x2 aligned_dmat2x2
 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat2x3 aligned_dmat2x3
 2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat2x4 aligned_dmat2x4
 2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat3 aligned_dmat3
 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat3x2 aligned_dmat3x2
 3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat3x3 aligned_dmat3x3
 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat3x4 aligned_dmat3x4
 3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat4 aligned_dmat4
 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat4x2 aligned_dmat4x2
 4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat4x3 aligned_dmat4x3
 4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dmat4x4 aligned_dmat4x4
 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dvec1 aligned_dvec1
 1 component vector aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dvec2 aligned_dvec2
 2 components vector aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dvec3 aligned_dvec3
 3 components vector aligned in memory of double-precision floating-point numbers.
 
-typedef aligned_highp_dvec4 aligned_dvec4
 4 components vector aligned in memory of double-precision floating-point numbers.
 
-typedef vec< 1, bool, aligned_highp > aligned_highp_bvec1
 1 component vector aligned in memory of bool values.
 
-typedef vec< 2, bool, aligned_highp > aligned_highp_bvec2
 2 components vector aligned in memory of bool values.
 
-typedef vec< 3, bool, aligned_highp > aligned_highp_bvec3
 3 components vector aligned in memory of bool values.
 
-typedef vec< 4, bool, aligned_highp > aligned_highp_bvec4
 4 components vector aligned in memory of bool values.
 
-typedef mat< 2, 2, double, aligned_highp > aligned_highp_dmat2
 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, double, aligned_highp > aligned_highp_dmat2x2
 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, double, aligned_highp > aligned_highp_dmat2x3
 2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, double, aligned_highp > aligned_highp_dmat2x4
 2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, aligned_highp > aligned_highp_dmat3
 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, double, aligned_highp > aligned_highp_dmat3x2
 3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, aligned_highp > aligned_highp_dmat3x3
 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, double, aligned_highp > aligned_highp_dmat3x4
 3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, aligned_highp > aligned_highp_dmat4
 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, double, aligned_highp > aligned_highp_dmat4x2
 4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, double, aligned_highp > aligned_highp_dmat4x3
 4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, aligned_highp > aligned_highp_dmat4x4
 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, aligned_highp > aligned_highp_dvec1
 1 component vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 2, double, aligned_highp > aligned_highp_dvec2
 2 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 3, double, aligned_highp > aligned_highp_dvec3
 3 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 4, double, aligned_highp > aligned_highp_dvec4
 4 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, int, aligned_highp > aligned_highp_ivec1
 1 component vector aligned in memory of signed integer numbers.
 
-typedef vec< 2, int, aligned_highp > aligned_highp_ivec2
 2 components vector aligned in memory of signed integer numbers.
 
-typedef vec< 3, int, aligned_highp > aligned_highp_ivec3
 3 components vector aligned in memory of signed integer numbers.
 
-typedef vec< 4, int, aligned_highp > aligned_highp_ivec4
 4 components vector aligned in memory of signed integer numbers.
 
-typedef mat< 2, 2, float, aligned_highp > aligned_highp_mat2
 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, float, aligned_highp > aligned_highp_mat2x2
 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, float, aligned_highp > aligned_highp_mat2x3
 2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, float, aligned_highp > aligned_highp_mat2x4
 2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, aligned_highp > aligned_highp_mat3
 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, float, aligned_highp > aligned_highp_mat3x2
 3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, aligned_highp > aligned_highp_mat3x3
 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, float, aligned_highp > aligned_highp_mat3x4
 3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, aligned_highp > aligned_highp_mat4
 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, float, aligned_highp > aligned_highp_mat4x2
 4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, float, aligned_highp > aligned_highp_mat4x3
 4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, aligned_highp > aligned_highp_mat4x4
 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, uint, aligned_highp > aligned_highp_uvec1
 1 component vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 2, uint, aligned_highp > aligned_highp_uvec2
 2 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 3, uint, aligned_highp > aligned_highp_uvec3
 3 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 4, uint, aligned_highp > aligned_highp_uvec4
 4 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 1, float, aligned_highp > aligned_highp_vec1
 1 component vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 2, float, aligned_highp > aligned_highp_vec2
 2 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 3, float, aligned_highp > aligned_highp_vec3
 3 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 4, float, aligned_highp > aligned_highp_vec4
 4 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef aligned_highp_ivec1 aligned_ivec1
 1 component vector aligned in memory of signed integer numbers.
 
-typedef aligned_highp_ivec2 aligned_ivec2
 2 components vector aligned in memory of signed integer numbers.
 
-typedef aligned_highp_ivec3 aligned_ivec3
 3 components vector aligned in memory of signed integer numbers.
 
-typedef aligned_highp_ivec4 aligned_ivec4
 4 components vector aligned in memory of signed integer numbers.
 
-typedef vec< 1, bool, aligned_lowp > aligned_lowp_bvec1
 1 component vector aligned in memory of bool values.
 
-typedef vec< 2, bool, aligned_lowp > aligned_lowp_bvec2
 2 components vector aligned in memory of bool values.
 
-typedef vec< 3, bool, aligned_lowp > aligned_lowp_bvec3
 3 components vector aligned in memory of bool values.
 
-typedef vec< 4, bool, aligned_lowp > aligned_lowp_bvec4
 4 components vector aligned in memory of bool values.
 
-typedef mat< 2, 2, double, aligned_lowp > aligned_lowp_dmat2
 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, double, aligned_lowp > aligned_lowp_dmat2x2
 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, double, aligned_lowp > aligned_lowp_dmat2x3
 2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, double, aligned_lowp > aligned_lowp_dmat2x4
 2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, aligned_lowp > aligned_lowp_dmat3
 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, double, aligned_lowp > aligned_lowp_dmat3x2
 3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, aligned_lowp > aligned_lowp_dmat3x3
 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, double, aligned_lowp > aligned_lowp_dmat3x4
 3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, aligned_lowp > aligned_lowp_dmat4
 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, double, aligned_lowp > aligned_lowp_dmat4x2
 4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, double, aligned_lowp > aligned_lowp_dmat4x3
 4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, aligned_lowp > aligned_lowp_dmat4x4
 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, aligned_lowp > aligned_lowp_dvec1
 1 component vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 2, double, aligned_lowp > aligned_lowp_dvec2
 2 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 3, double, aligned_lowp > aligned_lowp_dvec3
 3 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 4, double, aligned_lowp > aligned_lowp_dvec4
 4 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, int, aligned_lowp > aligned_lowp_ivec1
 1 component vector aligned in memory of signed integer numbers.
 
-typedef vec< 2, int, aligned_lowp > aligned_lowp_ivec2
 2 components vector aligned in memory of signed integer numbers.
 
-typedef vec< 3, int, aligned_lowp > aligned_lowp_ivec3
 3 components vector aligned in memory of signed integer numbers.
 
-typedef vec< 4, int, aligned_lowp > aligned_lowp_ivec4
 4 components vector aligned in memory of signed integer numbers.
 
-typedef mat< 2, 2, float, aligned_lowp > aligned_lowp_mat2
 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, float, aligned_lowp > aligned_lowp_mat2x2
 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, float, aligned_lowp > aligned_lowp_mat2x3
 2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, float, aligned_lowp > aligned_lowp_mat2x4
 2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, aligned_lowp > aligned_lowp_mat3
 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, float, aligned_lowp > aligned_lowp_mat3x2
 3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, aligned_lowp > aligned_lowp_mat3x3
 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, float, aligned_lowp > aligned_lowp_mat3x4
 3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, aligned_lowp > aligned_lowp_mat4
 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, float, aligned_lowp > aligned_lowp_mat4x2
 4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, float, aligned_lowp > aligned_lowp_mat4x3
 4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, aligned_lowp > aligned_lowp_mat4x4
 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, uint, aligned_lowp > aligned_lowp_uvec1
 1 component vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 2, uint, aligned_lowp > aligned_lowp_uvec2
 2 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 3, uint, aligned_lowp > aligned_lowp_uvec3
 3 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 4, uint, aligned_lowp > aligned_lowp_uvec4
 4 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 1, float, aligned_lowp > aligned_lowp_vec1
 1 component vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 2, float, aligned_lowp > aligned_lowp_vec2
 2 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 3, float, aligned_lowp > aligned_lowp_vec3
 3 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 4, float, aligned_lowp > aligned_lowp_vec4
 4 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef aligned_highp_mat2 aligned_mat2
 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat2x2 aligned_mat2x2
 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat2x3 aligned_mat2x3
 2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat2x4 aligned_mat2x4
 2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat3 aligned_mat3
 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat3x2 aligned_mat3x2
 3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat3x3 aligned_mat3x3
 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat3x4 aligned_mat3x4
 3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat4 aligned_mat4
 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat4x2 aligned_mat4x2
 4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat4x3 aligned_mat4x3
 4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_mat4x4 aligned_mat4x4
 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.
 
-typedef vec< 1, bool, aligned_mediump > aligned_mediump_bvec1
 1 component vector aligned in memory of bool values.
 
-typedef vec< 2, bool, aligned_mediump > aligned_mediump_bvec2
 2 components vector aligned in memory of bool values.
 
-typedef vec< 3, bool, aligned_mediump > aligned_mediump_bvec3
 3 components vector aligned in memory of bool values.
 
-typedef vec< 4, bool, aligned_mediump > aligned_mediump_bvec4
 4 components vector aligned in memory of bool values.
 
-typedef mat< 2, 2, double, aligned_mediump > aligned_mediump_dmat2
 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, double, aligned_mediump > aligned_mediump_dmat2x2
 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, double, aligned_mediump > aligned_mediump_dmat2x3
 2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, double, aligned_mediump > aligned_mediump_dmat2x4
 2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, aligned_mediump > aligned_mediump_dmat3
 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, double, aligned_mediump > aligned_mediump_dmat3x2
 3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, aligned_mediump > aligned_mediump_dmat3x3
 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, double, aligned_mediump > aligned_mediump_dmat3x4
 3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, aligned_mediump > aligned_mediump_dmat4
 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, double, aligned_mediump > aligned_mediump_dmat4x2
 4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, double, aligned_mediump > aligned_mediump_dmat4x3
 4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, aligned_mediump > aligned_mediump_dmat4x4
 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, aligned_mediump > aligned_mediump_dvec1
 1 component vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 2, double, aligned_mediump > aligned_mediump_dvec2
 2 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 3, double, aligned_mediump > aligned_mediump_dvec3
 3 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 4, double, aligned_mediump > aligned_mediump_dvec4
 4 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 1, int, aligned_mediump > aligned_mediump_ivec1
 1 component vector aligned in memory of signed integer numbers.
 
-typedef vec< 2, int, aligned_mediump > aligned_mediump_ivec2
 2 components vector aligned in memory of signed integer numbers.
 
-typedef vec< 3, int, aligned_mediump > aligned_mediump_ivec3
 3 components vector aligned in memory of signed integer numbers.
 
-typedef vec< 4, int, aligned_mediump > aligned_mediump_ivec4
 4 components vector aligned in memory of signed integer numbers.
 
-typedef mat< 2, 2, float, aligned_mediump > aligned_mediump_mat2
 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, float, aligned_mediump > aligned_mediump_mat2x2
 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, float, aligned_mediump > aligned_mediump_mat2x3
 2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, float, aligned_mediump > aligned_mediump_mat2x4
 2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, aligned_mediump > aligned_mediump_mat3
 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, float, aligned_mediump > aligned_mediump_mat3x2
 3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, aligned_mediump > aligned_mediump_mat3x3
 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, float, aligned_mediump > aligned_mediump_mat3x4
 3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, aligned_mediump > aligned_mediump_mat4
 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, float, aligned_mediump > aligned_mediump_mat4x2
 4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, float, aligned_mediump > aligned_mediump_mat4x3
 4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, aligned_mediump > aligned_mediump_mat4x4
 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 1, uint, aligned_mediump > aligned_mediump_uvec1
 1 component vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 2, uint, aligned_mediump > aligned_mediump_uvec2
 2 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 3, uint, aligned_mediump > aligned_mediump_uvec3
 3 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 4, uint, aligned_mediump > aligned_mediump_uvec4
 4 components vector aligned in memory of unsigned integer numbers.
 
-typedef vec< 1, float, aligned_mediump > aligned_mediump_vec1
 1 component vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 2, float, aligned_mediump > aligned_mediump_vec2
 2 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 3, float, aligned_mediump > aligned_mediump_vec3
 3 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 4, float, aligned_mediump > aligned_mediump_vec4
 4 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef aligned_highp_uvec1 aligned_uvec1
 1 component vector aligned in memory of unsigned integer numbers.
 
-typedef aligned_highp_uvec2 aligned_uvec2
 2 components vector aligned in memory of unsigned integer numbers.
 
-typedef aligned_highp_uvec3 aligned_uvec3
 3 components vector aligned in memory of unsigned integer numbers.
 
-typedef aligned_highp_uvec4 aligned_uvec4
 4 components vector aligned in memory of unsigned integer numbers.
 
-typedef aligned_highp_vec1 aligned_vec1
 1 component vector aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_vec2 aligned_vec2
 2 components vector aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_vec3 aligned_vec3
 3 components vector aligned in memory of single-precision floating-point numbers.
 
-typedef aligned_highp_vec4 aligned_vec4
 4 components vector aligned in memory of single-precision floating-point numbers.
 
-typedef packed_highp_bvec1 packed_bvec1
 1 components vector tightly packed in memory of bool values.
 
-typedef packed_highp_bvec2 packed_bvec2
 2 components vector tightly packed in memory of bool values.
 
-typedef packed_highp_bvec3 packed_bvec3
 3 components vector tightly packed in memory of bool values.
 
-typedef packed_highp_bvec4 packed_bvec4
 4 components vector tightly packed in memory of bool values.
 
-typedef packed_highp_dmat2 packed_dmat2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat2x2 packed_dmat2x2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat2x3 packed_dmat2x3
 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat2x4 packed_dmat2x4
 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat3 packed_dmat3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat3x2 packed_dmat3x2
 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat3x3 packed_dmat3x3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat3x4 packed_dmat3x4
 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat4 packed_dmat4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat4x2 packed_dmat4x2
 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat4x3 packed_dmat4x3
 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dmat4x4 packed_dmat4x4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dvec1 packed_dvec1
 1 component vector tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dvec2 packed_dvec2
 2 components vector tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dvec3 packed_dvec3
 3 components vector tightly packed in memory of double-precision floating-point numbers.
 
-typedef packed_highp_dvec4 packed_dvec4
 4 components vector tightly packed in memory of double-precision floating-point numbers.
 
-typedef vec< 1, bool, packed_highp > packed_highp_bvec1
 1 component vector tightly packed in memory of bool values.
 
-typedef vec< 2, bool, packed_highp > packed_highp_bvec2
 2 components vector tightly packed in memory of bool values.
 
-typedef vec< 3, bool, packed_highp > packed_highp_bvec3
 3 components vector tightly packed in memory of bool values.
 
-typedef vec< 4, bool, packed_highp > packed_highp_bvec4
 4 components vector tightly packed in memory of bool values.
 
-typedef mat< 2, 2, double, packed_highp > packed_highp_dmat2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, double, packed_highp > packed_highp_dmat2x2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, double, packed_highp > packed_highp_dmat2x3
 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, double, packed_highp > packed_highp_dmat2x4
 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, packed_highp > packed_highp_dmat3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, double, packed_highp > packed_highp_dmat3x2
 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, packed_highp > packed_highp_dmat3x3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, double, packed_highp > packed_highp_dmat3x4
 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, packed_highp > packed_highp_dmat4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, double, packed_highp > packed_highp_dmat4x2
 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, double, packed_highp > packed_highp_dmat4x3
 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, packed_highp > packed_highp_dmat4x4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, packed_highp > packed_highp_dvec1
 1 component vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 2, double, packed_highp > packed_highp_dvec2
 2 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 3, double, packed_highp > packed_highp_dvec3
 3 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 4, double, packed_highp > packed_highp_dvec4
 4 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, int, packed_highp > packed_highp_ivec1
 1 component vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 2, int, packed_highp > packed_highp_ivec2
 2 components vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 3, int, packed_highp > packed_highp_ivec3
 3 components vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 4, int, packed_highp > packed_highp_ivec4
 4 components vector tightly packed in memory of signed integer numbers.
 
-typedef mat< 2, 2, float, packed_highp > packed_highp_mat2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, float, packed_highp > packed_highp_mat2x2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, float, packed_highp > packed_highp_mat2x3
 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, float, packed_highp > packed_highp_mat2x4
 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, packed_highp > packed_highp_mat3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, float, packed_highp > packed_highp_mat3x2
 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, packed_highp > packed_highp_mat3x3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, float, packed_highp > packed_highp_mat3x4
 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, packed_highp > packed_highp_mat4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, float, packed_highp > packed_highp_mat4x2
 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, float, packed_highp > packed_highp_mat4x3
 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, packed_highp > packed_highp_mat4x4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 1, uint, packed_highp > packed_highp_uvec1
 1 component vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 2, uint, packed_highp > packed_highp_uvec2
 2 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 3, uint, packed_highp > packed_highp_uvec3
 3 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 4, uint, packed_highp > packed_highp_uvec4
 4 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 1, float, packed_highp > packed_highp_vec1
 1 component vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 2, float, packed_highp > packed_highp_vec2
 2 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 3, float, packed_highp > packed_highp_vec3
 3 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef vec< 4, float, packed_highp > packed_highp_vec4
 4 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
 
-typedef packed_highp_ivec1 packed_ivec1
 1 component vector tightly packed in memory of signed integer numbers.
 
-typedef packed_highp_ivec2 packed_ivec2
 2 components vector tightly packed in memory of signed integer numbers.
 
-typedef packed_highp_ivec3 packed_ivec3
 3 components vector tightly packed in memory of signed integer numbers.
 
-typedef packed_highp_ivec4 packed_ivec4
 4 components vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 1, bool, packed_lowp > packed_lowp_bvec1
 1 component vector tightly packed in memory of bool values.
 
-typedef vec< 2, bool, packed_lowp > packed_lowp_bvec2
 2 components vector tightly packed in memory of bool values.
 
-typedef vec< 3, bool, packed_lowp > packed_lowp_bvec3
 3 components vector tightly packed in memory of bool values.
 
-typedef vec< 4, bool, packed_lowp > packed_lowp_bvec4
 4 components vector tightly packed in memory of bool values.
 
-typedef mat< 2, 2, double, packed_lowp > packed_lowp_dmat2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, double, packed_lowp > packed_lowp_dmat2x2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, double, packed_lowp > packed_lowp_dmat2x3
 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, double, packed_lowp > packed_lowp_dmat2x4
 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, packed_lowp > packed_lowp_dmat3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, double, packed_lowp > packed_lowp_dmat3x2
 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, packed_lowp > packed_lowp_dmat3x3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, double, packed_lowp > packed_lowp_dmat3x4
 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, packed_lowp > packed_lowp_dmat4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, double, packed_lowp > packed_lowp_dmat4x2
 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, double, packed_lowp > packed_lowp_dmat4x3
 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, packed_lowp > packed_lowp_dmat4x4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, packed_lowp > packed_lowp_dvec1
 1 component vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 2, double, packed_lowp > packed_lowp_dvec2
 2 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 3, double, packed_lowp > packed_lowp_dvec3
 3 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 4, double, packed_lowp > packed_lowp_dvec4
 4 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, int, packed_lowp > packed_lowp_ivec1
 1 component vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 2, int, packed_lowp > packed_lowp_ivec2
 2 components vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 3, int, packed_lowp > packed_lowp_ivec3
 3 components vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 4, int, packed_lowp > packed_lowp_ivec4
 4 components vector tightly packed in memory of signed integer numbers.
 
-typedef mat< 2, 2, float, packed_lowp > packed_lowp_mat2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, float, packed_lowp > packed_lowp_mat2x2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, float, packed_lowp > packed_lowp_mat2x3
 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, float, packed_lowp > packed_lowp_mat2x4
 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, packed_lowp > packed_lowp_mat3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, float, packed_lowp > packed_lowp_mat3x2
 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, packed_lowp > packed_lowp_mat3x3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, float, packed_lowp > packed_lowp_mat3x4
 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, packed_lowp > packed_lowp_mat4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, float, packed_lowp > packed_lowp_mat4x2
 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, float, packed_lowp > packed_lowp_mat4x3
 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, packed_lowp > packed_lowp_mat4x4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 1, uint, packed_lowp > packed_lowp_uvec1
 1 component vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 2, uint, packed_lowp > packed_lowp_uvec2
 2 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 3, uint, packed_lowp > packed_lowp_uvec3
 3 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 4, uint, packed_lowp > packed_lowp_uvec4
 4 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 1, float, packed_lowp > packed_lowp_vec1
 1 component vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 2, float, packed_lowp > packed_lowp_vec2
 2 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 3, float, packed_lowp > packed_lowp_vec3
 3 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef vec< 4, float, packed_lowp > packed_lowp_vec4
 4 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
 
-typedef packed_highp_mat2 packed_mat2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat2x2 packed_mat2x2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat2x3 packed_mat2x3
 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat2x4 packed_mat2x4
 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat3 packed_mat3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat3x2 packed_mat3x2
 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat3x3 packed_mat3x3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat3x4 packed_mat3x4
 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat4 packed_mat4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat4x2 packed_mat4x2
 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat4x3 packed_mat4x3
 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_mat4x4 packed_mat4x4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers.
 
-typedef vec< 1, bool, packed_mediump > packed_mediump_bvec1
 1 component vector tightly packed in memory of bool values.
 
-typedef vec< 2, bool, packed_mediump > packed_mediump_bvec2
 2 components vector tightly packed in memory of bool values.
 
-typedef vec< 3, bool, packed_mediump > packed_mediump_bvec3
 3 components vector tightly packed in memory of bool values.
 
-typedef vec< 4, bool, packed_mediump > packed_mediump_bvec4
 4 components vector tightly packed in memory of bool values.
 
-typedef mat< 2, 2, double, packed_mediump > packed_mediump_dmat2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, double, packed_mediump > packed_mediump_dmat2x2
 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, double, packed_mediump > packed_mediump_dmat2x3
 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, double, packed_mediump > packed_mediump_dmat2x4
 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, packed_mediump > packed_mediump_dmat3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, double, packed_mediump > packed_mediump_dmat3x2
 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, double, packed_mediump > packed_mediump_dmat3x3
 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, double, packed_mediump > packed_mediump_dmat3x4
 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, packed_mediump > packed_mediump_dmat4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, double, packed_mediump > packed_mediump_dmat4x2
 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, double, packed_mediump > packed_mediump_dmat4x3
 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, double, packed_mediump > packed_mediump_dmat4x4
 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 1, double, packed_mediump > packed_mediump_dvec1
 1 component vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 2, double, packed_mediump > packed_mediump_dvec2
 2 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 3, double, packed_mediump > packed_mediump_dvec3
 3 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 4, double, packed_mediump > packed_mediump_dvec4
 4 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 1, int, packed_mediump > packed_mediump_ivec1
 1 component vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 2, int, packed_mediump > packed_mediump_ivec2
 2 components vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 3, int, packed_mediump > packed_mediump_ivec3
 3 components vector tightly packed in memory of signed integer numbers.
 
-typedef vec< 4, int, packed_mediump > packed_mediump_ivec4
 4 components vector tightly packed in memory of signed integer numbers.
 
-typedef mat< 2, 2, float, packed_mediump > packed_mediump_mat2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 2, float, packed_mediump > packed_mediump_mat2x2
 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 3, float, packed_mediump > packed_mediump_mat2x3
 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 2, 4, float, packed_mediump > packed_mediump_mat2x4
 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, packed_mediump > packed_mediump_mat3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 2, float, packed_mediump > packed_mediump_mat3x2
 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 3, float, packed_mediump > packed_mediump_mat3x3
 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 3, 4, float, packed_mediump > packed_mediump_mat3x4
 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, packed_mediump > packed_mediump_mat4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 2, float, packed_mediump > packed_mediump_mat4x2
 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 3, float, packed_mediump > packed_mediump_mat4x3
 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef mat< 4, 4, float, packed_mediump > packed_mediump_mat4x4
 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 1, uint, packed_mediump > packed_mediump_uvec1
 1 component vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 2, uint, packed_mediump > packed_mediump_uvec2
 2 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 3, uint, packed_mediump > packed_mediump_uvec3
 3 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 4, uint, packed_mediump > packed_mediump_uvec4
 4 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef vec< 1, float, packed_mediump > packed_mediump_vec1
 1 component vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 2, float, packed_mediump > packed_mediump_vec2
 2 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 3, float, packed_mediump > packed_mediump_vec3
 3 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef vec< 4, float, packed_mediump > packed_mediump_vec4
 4 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
 
-typedef packed_highp_uvec1 packed_uvec1
 1 component vector tightly packed in memory of unsigned integer numbers.
 
-typedef packed_highp_uvec2 packed_uvec2
 2 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef packed_highp_uvec3 packed_uvec3
 3 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef packed_highp_uvec4 packed_uvec4
 4 components vector tightly packed in memory of unsigned integer numbers.
 
-typedef packed_highp_vec1 packed_vec1
 1 component vector tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_vec2 packed_vec2
 2 components vector tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_vec3 packed_vec3
 3 components vector tightly packed in memory of single-precision floating-point numbers.
 
-typedef packed_highp_vec4 packed_vec4
 4 components vector tightly packed in memory of single-precision floating-point numbers.
 
-

Detailed Description

-

Include <glm/gtc/type_aligned.hpp> to use the features of this extension.

-

Aligned types allowing SIMD optimizations of vectors and matrices types

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00304.html b/tests/OpenGL/package/glm/doc/api/a00304.html deleted file mode 100644 index cd22f358..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00304.html +++ /dev/null @@ -1,8955 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_type_precision - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTC_type_precision
-
-
- -

Include <glm/gtc/type_precision.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef float f32
 Default 32 bit single-qualifier floating-point scalar. More...
 
typedef mat< 2, 2, f32, defaultp > f32mat2
 Single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 2, f32, defaultp > f32mat2x2
 Single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 3, f32, defaultp > f32mat2x3
 Single-qualifier floating-point 2x3 matrix. More...
 
typedef mat< 2, 4, f32, defaultp > f32mat2x4
 Single-qualifier floating-point 2x4 matrix. More...
 
typedef mat< 3, 3, f32, defaultp > f32mat3
 Single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 2, f32, defaultp > f32mat3x2
 Single-qualifier floating-point 3x2 matrix. More...
 
typedef mat< 3, 3, f32, defaultp > f32mat3x3
 Single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 4, f32, defaultp > f32mat3x4
 Single-qualifier floating-point 3x4 matrix. More...
 
typedef mat< 4, 4, f32, defaultp > f32mat4
 Single-qualifier floating-point 4x4 matrix. More...
 
typedef mat< 4, 2, f32, defaultp > f32mat4x2
 Single-qualifier floating-point 4x2 matrix. More...
 
typedef mat< 4, 3, f32, defaultp > f32mat4x3
 Single-qualifier floating-point 4x3 matrix. More...
 
typedef mat< 4, 4, f32, defaultp > f32mat4x4
 Single-qualifier floating-point 4x4 matrix. More...
 
typedef qua< f32, defaultp > f32quat
 Single-qualifier floating-point quaternion. More...
 
typedef vec< 1, f32, defaultp > f32vec1
 Single-qualifier floating-point vector of 1 component. More...
 
typedef vec< 2, f32, defaultp > f32vec2
 Single-qualifier floating-point vector of 2 components. More...
 
typedef vec< 3, f32, defaultp > f32vec3
 Single-qualifier floating-point vector of 3 components. More...
 
typedef vec< 4, f32, defaultp > f32vec4
 Single-qualifier floating-point vector of 4 components. More...
 
typedef double f64
 Default 64 bit double-qualifier floating-point scalar. More...
 
typedef mat< 2, 2, f64, defaultp > f64mat2
 Double-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 2, f64, defaultp > f64mat2x2
 Double-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 3, f64, defaultp > f64mat2x3
 Double-qualifier floating-point 2x3 matrix. More...
 
typedef mat< 2, 4, f64, defaultp > f64mat2x4
 Double-qualifier floating-point 2x4 matrix. More...
 
typedef mat< 3, 3, f64, defaultp > f64mat3
 Double-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 2, f64, defaultp > f64mat3x2
 Double-qualifier floating-point 3x2 matrix. More...
 
typedef mat< 3, 3, f64, defaultp > f64mat3x3
 Double-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 4, f64, defaultp > f64mat3x4
 Double-qualifier floating-point 3x4 matrix. More...
 
typedef mat< 4, 4, f64, defaultp > f64mat4
 Double-qualifier floating-point 4x4 matrix. More...
 
typedef mat< 4, 2, f64, defaultp > f64mat4x2
 Double-qualifier floating-point 4x2 matrix. More...
 
typedef mat< 4, 3, f64, defaultp > f64mat4x3
 Double-qualifier floating-point 4x3 matrix. More...
 
typedef mat< 4, 4, f64, defaultp > f64mat4x4
 Double-qualifier floating-point 4x4 matrix. More...
 
typedef qua< f64, defaultp > f64quat
 Double-qualifier floating-point quaternion. More...
 
typedef vec< 1, f64, defaultp > f64vec1
 Double-qualifier floating-point vector of 1 component. More...
 
typedef vec< 2, f64, defaultp > f64vec2
 Double-qualifier floating-point vector of 2 components. More...
 
typedef vec< 3, f64, defaultp > f64vec3
 Double-qualifier floating-point vector of 3 components. More...
 
typedef vec< 4, f64, defaultp > f64vec4
 Double-qualifier floating-point vector of 4 components. More...
 
typedef float float32
 Single-qualifier floating-point scalar. More...
 
typedef float float32_t
 Default 32 bit single-qualifier floating-point scalar. More...
 
typedef double float64
 Double-qualifier floating-point scalar. More...
 
typedef double float64_t
 Default 64 bit double-qualifier floating-point scalar. More...
 
typedef mat< 2, 2, f32, defaultp > fmat2
 Single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 2, f32, defaultp > fmat2x2
 Single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 3, f32, defaultp > fmat2x3
 Single-qualifier floating-point 2x3 matrix. More...
 
typedef mat< 2, 4, f32, defaultp > fmat2x4
 Single-qualifier floating-point 2x4 matrix. More...
 
typedef mat< 3, 3, f32, defaultp > fmat3
 Single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 2, f32, defaultp > fmat3x2
 Single-qualifier floating-point 3x2 matrix. More...
 
typedef mat< 3, 3, f32, defaultp > fmat3x3
 Single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 4, f32, defaultp > fmat3x4
 Single-qualifier floating-point 3x4 matrix. More...
 
typedef mat< 4, 4, f32, defaultp > fmat4
 Single-qualifier floating-point 4x4 matrix. More...
 
typedef mat< 4, 2, f32, defaultp > fmat4x2
 Single-qualifier floating-point 4x2 matrix. More...
 
typedef mat< 4, 3, f32, defaultp > fmat4x3
 Single-qualifier floating-point 4x3 matrix. More...
 
typedef mat< 4, 4, f32, defaultp > fmat4x4
 Single-qualifier floating-point 4x4 matrix. More...
 
typedef vec< 1, f32, defaultp > fvec1
 Single-qualifier floating-point vector of 1 component. More...
 
typedef vec< 2, f32, defaultp > fvec2
 Single-qualifier floating-point vector of 2 components. More...
 
typedef vec< 3, f32, defaultp > fvec3
 Single-qualifier floating-point vector of 3 components. More...
 
typedef vec< 4, f32, defaultp > fvec4
 Single-qualifier floating-point vector of 4 components. More...
 
typedef float highp_f32
 High 32 bit single-qualifier floating-point scalar. More...
 
typedef mat< 2, 2, f32, highp > highp_f32mat2
 High single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 2, f32, highp > highp_f32mat2x2
 High single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 3, f32, highp > highp_f32mat2x3
 High single-qualifier floating-point 2x3 matrix. More...
 
typedef mat< 2, 4, f32, highp > highp_f32mat2x4
 High single-qualifier floating-point 2x4 matrix. More...
 
typedef mat< 3, 3, f32, highp > highp_f32mat3
 High single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 2, f32, highp > highp_f32mat3x2
 High single-qualifier floating-point 3x2 matrix. More...
 
typedef mat< 3, 3, f32, highp > highp_f32mat3x3
 High single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 4, f32, highp > highp_f32mat3x4
 High single-qualifier floating-point 3x4 matrix. More...
 
typedef mat< 4, 4, f32, highp > highp_f32mat4
 High single-qualifier floating-point 4x4 matrix. More...
 
typedef mat< 4, 2, f32, highp > highp_f32mat4x2
 High single-qualifier floating-point 4x2 matrix. More...
 
typedef mat< 4, 3, f32, highp > highp_f32mat4x3
 High single-qualifier floating-point 4x3 matrix. More...
 
typedef mat< 4, 4, f32, highp > highp_f32mat4x4
 High single-qualifier floating-point 4x4 matrix. More...
 
typedef qua< f32, highp > highp_f32quat
 High single-qualifier floating-point quaternion. More...
 
typedef vec< 1, f32, highp > highp_f32vec1
 High single-qualifier floating-point vector of 1 component. More...
 
typedef vec< 2, f32, highp > highp_f32vec2
 High single-qualifier floating-point vector of 2 components. More...
 
typedef vec< 3, f32, highp > highp_f32vec3
 High single-qualifier floating-point vector of 3 components. More...
 
typedef vec< 4, f32, highp > highp_f32vec4
 High single-qualifier floating-point vector of 4 components. More...
 
typedef double highp_f64
 High 64 bit double-qualifier floating-point scalar. More...
 
typedef mat< 2, 2, f64, highp > highp_f64mat2
 High double-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 2, f64, highp > highp_f64mat2x2
 High double-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 3, f64, highp > highp_f64mat2x3
 High double-qualifier floating-point 2x3 matrix. More...
 
typedef mat< 2, 4, f64, highp > highp_f64mat2x4
 High double-qualifier floating-point 2x4 matrix. More...
 
typedef mat< 3, 3, f64, highp > highp_f64mat3
 High double-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 2, f64, highp > highp_f64mat3x2
 High double-qualifier floating-point 3x2 matrix. More...
 
typedef mat< 3, 3, f64, highp > highp_f64mat3x3
 High double-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 4, f64, highp > highp_f64mat3x4
 High double-qualifier floating-point 3x4 matrix. More...
 
typedef mat< 4, 4, f64, highp > highp_f64mat4
 High double-qualifier floating-point 4x4 matrix. More...
 
typedef mat< 4, 2, f64, highp > highp_f64mat4x2
 High double-qualifier floating-point 4x2 matrix. More...
 
typedef mat< 4, 3, f64, highp > highp_f64mat4x3
 High double-qualifier floating-point 4x3 matrix. More...
 
typedef mat< 4, 4, f64, highp > highp_f64mat4x4
 High double-qualifier floating-point 4x4 matrix. More...
 
typedef qua< f64, highp > highp_f64quat
 High double-qualifier floating-point quaternion. More...
 
typedef vec< 1, f64, highp > highp_f64vec1
 High double-qualifier floating-point vector of 1 component. More...
 
typedef vec< 2, f64, highp > highp_f64vec2
 High double-qualifier floating-point vector of 2 components. More...
 
typedef vec< 3, f64, highp > highp_f64vec3
 High double-qualifier floating-point vector of 3 components. More...
 
typedef vec< 4, f64, highp > highp_f64vec4
 High double-qualifier floating-point vector of 4 components. More...
 
typedef float highp_float32
 High 32 bit single-qualifier floating-point scalar. More...
 
typedef float highp_float32_t
 High 32 bit single-qualifier floating-point scalar. More...
 
typedef double highp_float64
 High 64 bit double-qualifier floating-point scalar. More...
 
typedef double highp_float64_t
 High 64 bit double-qualifier floating-point scalar. More...
 
typedef mat< 2, 2, f32, highp > highp_fmat2
 High single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 2, f32, highp > highp_fmat2x2
 High single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 3, f32, highp > highp_fmat2x3
 High single-qualifier floating-point 2x3 matrix. More...
 
typedef mat< 2, 4, f32, highp > highp_fmat2x4
 High single-qualifier floating-point 2x4 matrix. More...
 
typedef mat< 3, 3, f32, highp > highp_fmat3
 High single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 2, f32, highp > highp_fmat3x2
 High single-qualifier floating-point 3x2 matrix. More...
 
typedef mat< 3, 3, f32, highp > highp_fmat3x3
 High single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 4, f32, highp > highp_fmat3x4
 High single-qualifier floating-point 3x4 matrix. More...
 
typedef mat< 4, 4, f32, highp > highp_fmat4
 High single-qualifier floating-point 4x4 matrix. More...
 
typedef mat< 4, 2, f32, highp > highp_fmat4x2
 High single-qualifier floating-point 4x2 matrix. More...
 
typedef mat< 4, 3, f32, highp > highp_fmat4x3
 High single-qualifier floating-point 4x3 matrix. More...
 
typedef mat< 4, 4, f32, highp > highp_fmat4x4
 High single-qualifier floating-point 4x4 matrix. More...
 
typedef vec< 1, float, highp > highp_fvec1
 High single-qualifier floating-point vector of 1 component. More...
 
typedef vec< 2, float, highp > highp_fvec2
 High Single-qualifier floating-point vector of 2 components. More...
 
typedef vec< 3, float, highp > highp_fvec3
 High Single-qualifier floating-point vector of 3 components. More...
 
typedef vec< 4, float, highp > highp_fvec4
 High Single-qualifier floating-point vector of 4 components. More...
 
typedef int16 highp_i16
 High qualifier 16 bit signed integer type. More...
 
typedef vec< 1, i16, highp > highp_i16vec1
 High qualifier 16 bit signed integer scalar type. More...
 
typedef vec< 2, i16, highp > highp_i16vec2
 High qualifier 16 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i16, highp > highp_i16vec3
 High qualifier 16 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i16, highp > highp_i16vec4
 High qualifier 16 bit signed integer vector of 4 components type. More...
 
typedef int32 highp_i32
 High qualifier 32 bit signed integer type. More...
 
typedef vec< 1, i32, highp > highp_i32vec1
 High qualifier 32 bit signed integer scalar type. More...
 
typedef vec< 2, i32, highp > highp_i32vec2
 High qualifier 32 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i32, highp > highp_i32vec3
 High qualifier 32 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i32, highp > highp_i32vec4
 High qualifier 32 bit signed integer vector of 4 components type. More...
 
typedef int64 highp_i64
 High qualifier 64 bit signed integer type. More...
 
typedef vec< 1, i64, highp > highp_i64vec1
 High qualifier 64 bit signed integer scalar type. More...
 
typedef vec< 2, i64, highp > highp_i64vec2
 High qualifier 64 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i64, highp > highp_i64vec3
 High qualifier 64 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i64, highp > highp_i64vec4
 High qualifier 64 bit signed integer vector of 4 components type. More...
 
typedef int8 highp_i8
 High qualifier 8 bit signed integer type. More...
 
typedef vec< 1, i8, highp > highp_i8vec1
 High qualifier 8 bit signed integer scalar type. More...
 
typedef vec< 2, i8, highp > highp_i8vec2
 High qualifier 8 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i8, highp > highp_i8vec3
 High qualifier 8 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i8, highp > highp_i8vec4
 High qualifier 8 bit signed integer vector of 4 components type. More...
 
typedef int16 highp_int16
 High qualifier 16 bit signed integer type. More...
 
typedef int16 highp_int16_t
 High qualifier 16 bit signed integer type. More...
 
typedef int32 highp_int32
 High qualifier 32 bit signed integer type. More...
 
typedef int32 highp_int32_t
 32 bit signed integer type. More...
 
typedef int64 highp_int64
 High qualifier 64 bit signed integer type. More...
 
typedef int64 highp_int64_t
 High qualifier 64 bit signed integer type. More...
 
typedef int8 highp_int8
 High qualifier 8 bit signed integer type. More...
 
typedef int8 highp_int8_t
 High qualifier 8 bit signed integer type. More...
 
typedef uint16 highp_u16
 High qualifier 16 bit unsigned integer type. More...
 
typedef vec< 1, u16, highp > highp_u16vec1
 High qualifier 16 bit unsigned integer scalar type. More...
 
typedef vec< 2, u16, highp > highp_u16vec2
 High qualifier 16 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u16, highp > highp_u16vec3
 High qualifier 16 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u16, highp > highp_u16vec4
 High qualifier 16 bit unsigned integer vector of 4 components type. More...
 
typedef uint32 highp_u32
 High qualifier 32 bit unsigned integer type. More...
 
typedef vec< 1, u32, highp > highp_u32vec1
 High qualifier 32 bit unsigned integer scalar type. More...
 
typedef vec< 2, u32, highp > highp_u32vec2
 High qualifier 32 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u32, highp > highp_u32vec3
 High qualifier 32 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u32, highp > highp_u32vec4
 High qualifier 32 bit unsigned integer vector of 4 components type. More...
 
typedef uint64 highp_u64
 High qualifier 64 bit unsigned integer type. More...
 
typedef vec< 1, u64, highp > highp_u64vec1
 High qualifier 64 bit unsigned integer scalar type. More...
 
typedef vec< 2, u64, highp > highp_u64vec2
 High qualifier 64 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u64, highp > highp_u64vec3
 High qualifier 64 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u64, highp > highp_u64vec4
 High qualifier 64 bit unsigned integer vector of 4 components type. More...
 
typedef uint8 highp_u8
 High qualifier 8 bit unsigned integer type. More...
 
typedef vec< 1, u8, highp > highp_u8vec1
 High qualifier 8 bit unsigned integer scalar type. More...
 
typedef vec< 2, u8, highp > highp_u8vec2
 High qualifier 8 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u8, highp > highp_u8vec3
 High qualifier 8 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u8, highp > highp_u8vec4
 High qualifier 8 bit unsigned integer vector of 4 components type. More...
 
typedef uint16 highp_uint16
 High qualifier 16 bit unsigned integer type. More...
 
typedef uint16 highp_uint16_t
 High qualifier 16 bit unsigned integer type. More...
 
typedef uint32 highp_uint32
 High qualifier 32 bit unsigned integer type. More...
 
typedef uint32 highp_uint32_t
 High qualifier 32 bit unsigned integer type. More...
 
typedef uint64 highp_uint64
 High qualifier 64 bit unsigned integer type. More...
 
typedef uint64 highp_uint64_t
 High qualifier 64 bit unsigned integer type. More...
 
typedef uint8 highp_uint8
 High qualifier 8 bit unsigned integer type. More...
 
typedef uint8 highp_uint8_t
 High qualifier 8 bit unsigned integer type. More...
 
typedef int16 i16
 16 bit signed integer type. More...
 
typedef vec< 1, i16, defaultp > i16vec1
 16 bit signed integer scalar type. More...
 
typedef vec< 2, i16, defaultp > i16vec2
 16 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i16, defaultp > i16vec3
 16 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i16, defaultp > i16vec4
 16 bit signed integer vector of 4 components type. More...
 
typedef int32 i32
 32 bit signed integer type. More...
 
typedef vec< 1, i32, defaultp > i32vec1
 32 bit signed integer scalar type. More...
 
typedef vec< 2, i32, defaultp > i32vec2
 32 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i32, defaultp > i32vec3
 32 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i32, defaultp > i32vec4
 32 bit signed integer vector of 4 components type. More...
 
typedef int64 i64
 64 bit signed integer type. More...
 
typedef vec< 1, i64, defaultp > i64vec1
 64 bit signed integer scalar type. More...
 
typedef vec< 2, i64, defaultp > i64vec2
 64 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i64, defaultp > i64vec3
 64 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i64, defaultp > i64vec4
 64 bit signed integer vector of 4 components type. More...
 
typedef int8 i8
 8 bit signed integer type. More...
 
typedef vec< 1, i8, defaultp > i8vec1
 8 bit signed integer scalar type. More...
 
typedef vec< 2, i8, defaultp > i8vec2
 8 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i8, defaultp > i8vec3
 8 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i8, defaultp > i8vec4
 8 bit signed integer vector of 4 components type. More...
 
typedef int16 int16_t
 16 bit signed integer type. More...
 
typedef int32 int32_t
 32 bit signed integer type. More...
 
typedef int64 int64_t
 64 bit signed integer type. More...
 
typedef int8 int8_t
 8 bit signed integer type. More...
 
typedef float lowp_f32
 Low 32 bit single-qualifier floating-point scalar. More...
 
typedef mat< 2, 2, f32, lowp > lowp_f32mat2
 Low single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 2, f32, lowp > lowp_f32mat2x2
 Low single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 3, f32, lowp > lowp_f32mat2x3
 Low single-qualifier floating-point 2x3 matrix. More...
 
typedef mat< 2, 4, f32, lowp > lowp_f32mat2x4
 Low single-qualifier floating-point 2x4 matrix. More...
 
typedef mat< 3, 3, f32, lowp > lowp_f32mat3
 Low single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 2, f32, lowp > lowp_f32mat3x2
 Low single-qualifier floating-point 3x2 matrix. More...
 
typedef mat< 3, 3, f32, lowp > lowp_f32mat3x3
 Low single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 4, f32, lowp > lowp_f32mat3x4
 Low single-qualifier floating-point 3x4 matrix. More...
 
typedef mat< 4, 4, f32, lowp > lowp_f32mat4
 Low single-qualifier floating-point 4x4 matrix. More...
 
typedef mat< 4, 2, f32, lowp > lowp_f32mat4x2
 Low single-qualifier floating-point 4x2 matrix. More...
 
typedef mat< 4, 3, f32, lowp > lowp_f32mat4x3
 Low single-qualifier floating-point 4x3 matrix. More...
 
typedef mat< 4, 4, f32, lowp > lowp_f32mat4x4
 Low single-qualifier floating-point 4x4 matrix. More...
 
typedef qua< f32, lowp > lowp_f32quat
 Low single-qualifier floating-point quaternion. More...
 
typedef vec< 1, f32, lowp > lowp_f32vec1
 Low single-qualifier floating-point vector of 1 component. More...
 
typedef vec< 2, f32, lowp > lowp_f32vec2
 Low single-qualifier floating-point vector of 2 components. More...
 
typedef vec< 3, f32, lowp > lowp_f32vec3
 Low single-qualifier floating-point vector of 3 components. More...
 
typedef vec< 4, f32, lowp > lowp_f32vec4
 Low single-qualifier floating-point vector of 4 components. More...
 
typedef double lowp_f64
 Low 64 bit double-qualifier floating-point scalar. More...
 
typedef mat< 2, 2, f64, lowp > lowp_f64mat2
 Low double-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 2, f64, lowp > lowp_f64mat2x2
 Low double-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 3, f64, lowp > lowp_f64mat2x3
 Low double-qualifier floating-point 2x3 matrix. More...
 
typedef mat< 2, 4, f64, lowp > lowp_f64mat2x4
 Low double-qualifier floating-point 2x4 matrix. More...
 
typedef mat< 3, 3, f64, lowp > lowp_f64mat3
 Low double-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 2, f64, lowp > lowp_f64mat3x2
 Low double-qualifier floating-point 3x2 matrix. More...
 
typedef mat< 3, 3, f64, lowp > lowp_f64mat3x3
 Low double-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 4, f64, lowp > lowp_f64mat3x4
 Low double-qualifier floating-point 3x4 matrix. More...
 
typedef mat< 4, 4, f64, lowp > lowp_f64mat4
 Low double-qualifier floating-point 4x4 matrix. More...
 
typedef mat< 4, 2, f64, lowp > lowp_f64mat4x2
 Low double-qualifier floating-point 4x2 matrix. More...
 
typedef mat< 4, 3, f64, lowp > lowp_f64mat4x3
 Low double-qualifier floating-point 4x3 matrix. More...
 
typedef mat< 4, 4, f64, lowp > lowp_f64mat4x4
 Low double-qualifier floating-point 4x4 matrix. More...
 
typedef qua< f64, lowp > lowp_f64quat
 Low double-qualifier floating-point quaternion. More...
 
typedef vec< 1, f64, lowp > lowp_f64vec1
 Low double-qualifier floating-point vector of 1 component. More...
 
typedef vec< 2, f64, lowp > lowp_f64vec2
 Low double-qualifier floating-point vector of 2 components. More...
 
typedef vec< 3, f64, lowp > lowp_f64vec3
 Low double-qualifier floating-point vector of 3 components. More...
 
typedef vec< 4, f64, lowp > lowp_f64vec4
 Low double-qualifier floating-point vector of 4 components. More...
 
typedef float lowp_float32
 Low 32 bit single-qualifier floating-point scalar. More...
 
typedef float lowp_float32_t
 Low 32 bit single-qualifier floating-point scalar. More...
 
typedef double lowp_float64
 Low 64 bit double-qualifier floating-point scalar. More...
 
typedef double lowp_float64_t
 Low 64 bit double-qualifier floating-point scalar. More...
 
typedef mat< 2, 2, f32, lowp > lowp_fmat2
 Low single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 2, f32, lowp > lowp_fmat2x2
 Low single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 3, f32, lowp > lowp_fmat2x3
 Low single-qualifier floating-point 2x3 matrix. More...
 
typedef mat< 2, 4, f32, lowp > lowp_fmat2x4
 Low single-qualifier floating-point 2x4 matrix. More...
 
typedef mat< 3, 3, f32, lowp > lowp_fmat3
 Low single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 2, f32, lowp > lowp_fmat3x2
 Low single-qualifier floating-point 3x2 matrix. More...
 
typedef mat< 3, 3, f32, lowp > lowp_fmat3x3
 Low single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 4, f32, lowp > lowp_fmat3x4
 Low single-qualifier floating-point 3x4 matrix. More...
 
typedef mat< 4, 4, f32, lowp > lowp_fmat4
 Low single-qualifier floating-point 4x4 matrix. More...
 
typedef mat< 4, 2, f32, lowp > lowp_fmat4x2
 Low single-qualifier floating-point 4x2 matrix. More...
 
typedef mat< 4, 3, f32, lowp > lowp_fmat4x3
 Low single-qualifier floating-point 4x3 matrix. More...
 
typedef mat< 4, 4, f32, lowp > lowp_fmat4x4
 Low single-qualifier floating-point 4x4 matrix. More...
 
typedef vec< 1, float, lowp > lowp_fvec1
 Low single-qualifier floating-point vector of 1 component. More...
 
typedef vec< 2, float, lowp > lowp_fvec2
 Low single-qualifier floating-point vector of 2 components. More...
 
typedef vec< 3, float, lowp > lowp_fvec3
 Low single-qualifier floating-point vector of 3 components. More...
 
typedef vec< 4, float, lowp > lowp_fvec4
 Low single-qualifier floating-point vector of 4 components. More...
 
typedef int16 lowp_i16
 Low qualifier 16 bit signed integer type. More...
 
typedef vec< 1, i16, lowp > lowp_i16vec1
 Low qualifier 16 bit signed integer scalar type. More...
 
typedef vec< 2, i16, lowp > lowp_i16vec2
 Low qualifier 16 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i16, lowp > lowp_i16vec3
 Low qualifier 16 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i16, lowp > lowp_i16vec4
 Low qualifier 16 bit signed integer vector of 4 components type. More...
 
typedef int32 lowp_i32
 Low qualifier 32 bit signed integer type. More...
 
typedef vec< 1, i32, lowp > lowp_i32vec1
 Low qualifier 32 bit signed integer scalar type. More...
 
typedef vec< 2, i32, lowp > lowp_i32vec2
 Low qualifier 32 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i32, lowp > lowp_i32vec3
 Low qualifier 32 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i32, lowp > lowp_i32vec4
 Low qualifier 32 bit signed integer vector of 4 components type. More...
 
typedef int64 lowp_i64
 Low qualifier 64 bit signed integer type. More...
 
typedef vec< 1, i64, lowp > lowp_i64vec1
 Low qualifier 64 bit signed integer scalar type. More...
 
typedef vec< 2, i64, lowp > lowp_i64vec2
 Low qualifier 64 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i64, lowp > lowp_i64vec3
 Low qualifier 64 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i64, lowp > lowp_i64vec4
 Low qualifier 64 bit signed integer vector of 4 components type. More...
 
typedef int8 lowp_i8
 Low qualifier 8 bit signed integer type. More...
 
typedef vec< 1, i8, lowp > lowp_i8vec1
 Low qualifier 8 bit signed integer scalar type. More...
 
typedef vec< 2, i8, lowp > lowp_i8vec2
 Low qualifier 8 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i8, lowp > lowp_i8vec3
 Low qualifier 8 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i8, lowp > lowp_i8vec4
 Low qualifier 8 bit signed integer vector of 4 components type. More...
 
typedef int16 lowp_int16
 Low qualifier 16 bit signed integer type. More...
 
typedef int16 lowp_int16_t
 Low qualifier 16 bit signed integer type. More...
 
typedef int32 lowp_int32
 Low qualifier 32 bit signed integer type. More...
 
typedef int32 lowp_int32_t
 Low qualifier 32 bit signed integer type. More...
 
typedef int64 lowp_int64
 Low qualifier 64 bit signed integer type. More...
 
typedef int64 lowp_int64_t
 Low qualifier 64 bit signed integer type. More...
 
typedef int8 lowp_int8
 Low qualifier 8 bit signed integer type. More...
 
typedef int8 lowp_int8_t
 Low qualifier 8 bit signed integer type. More...
 
typedef uint16 lowp_u16
 Low qualifier 16 bit unsigned integer type. More...
 
typedef vec< 1, u16, lowp > lowp_u16vec1
 Low qualifier 16 bit unsigned integer scalar type. More...
 
typedef vec< 2, u16, lowp > lowp_u16vec2
 Low qualifier 16 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u16, lowp > lowp_u16vec3
 Low qualifier 16 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u16, lowp > lowp_u16vec4
 Low qualifier 16 bit unsigned integer vector of 4 components type. More...
 
typedef uint32 lowp_u32
 Low qualifier 32 bit unsigned integer type. More...
 
typedef vec< 1, u32, lowp > lowp_u32vec1
 Low qualifier 32 bit unsigned integer scalar type. More...
 
typedef vec< 2, u32, lowp > lowp_u32vec2
 Low qualifier 32 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u32, lowp > lowp_u32vec3
 Low qualifier 32 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u32, lowp > lowp_u32vec4
 Low qualifier 32 bit unsigned integer vector of 4 components type. More...
 
typedef uint64 lowp_u64
 Low qualifier 64 bit unsigned integer type. More...
 
typedef vec< 1, u64, lowp > lowp_u64vec1
 Low qualifier 64 bit unsigned integer scalar type. More...
 
typedef vec< 2, u64, lowp > lowp_u64vec2
 Low qualifier 64 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u64, lowp > lowp_u64vec3
 Low qualifier 64 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u64, lowp > lowp_u64vec4
 Low qualifier 64 bit unsigned integer vector of 4 components type. More...
 
typedef uint8 lowp_u8
 Low qualifier 8 bit unsigned integer type. More...
 
typedef vec< 1, u8, lowp > lowp_u8vec1
 Low qualifier 8 bit unsigned integer scalar type. More...
 
typedef vec< 2, u8, lowp > lowp_u8vec2
 Low qualifier 8 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u8, lowp > lowp_u8vec3
 Low qualifier 8 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u8, lowp > lowp_u8vec4
 Low qualifier 8 bit unsigned integer vector of 4 components type. More...
 
typedef uint16 lowp_uint16
 Low qualifier 16 bit unsigned integer type. More...
 
typedef uint16 lowp_uint16_t
 Low qualifier 16 bit unsigned integer type. More...
 
typedef uint32 lowp_uint32
 Low qualifier 32 bit unsigned integer type. More...
 
typedef uint32 lowp_uint32_t
 Low qualifier 32 bit unsigned integer type. More...
 
typedef uint64 lowp_uint64
 Low qualifier 64 bit unsigned integer type. More...
 
typedef uint64 lowp_uint64_t
 Low qualifier 64 bit unsigned integer type. More...
 
typedef uint8 lowp_uint8
 Low qualifier 8 bit unsigned integer type. More...
 
typedef uint8 lowp_uint8_t
 Low qualifier 8 bit unsigned integer type. More...
 
typedef float mediump_f32
 Medium 32 bit single-qualifier floating-point scalar. More...
 
typedef mat< 2, 2, f32, mediump > mediump_f32mat2
 Medium single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 2, f32, mediump > mediump_f32mat2x2
 High single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 3, f32, mediump > mediump_f32mat2x3
 Medium single-qualifier floating-point 2x3 matrix. More...
 
typedef mat< 2, 4, f32, mediump > mediump_f32mat2x4
 Medium single-qualifier floating-point 2x4 matrix. More...
 
typedef mat< 3, 3, f32, mediump > mediump_f32mat3
 Medium single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 2, f32, mediump > mediump_f32mat3x2
 Medium single-qualifier floating-point 3x2 matrix. More...
 
typedef mat< 3, 3, f32, mediump > mediump_f32mat3x3
 Medium single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 4, f32, mediump > mediump_f32mat3x4
 Medium single-qualifier floating-point 3x4 matrix. More...
 
typedef mat< 4, 4, f32, mediump > mediump_f32mat4
 Medium single-qualifier floating-point 4x4 matrix. More...
 
typedef mat< 4, 2, f32, mediump > mediump_f32mat4x2
 Medium single-qualifier floating-point 4x2 matrix. More...
 
typedef mat< 4, 3, f32, mediump > mediump_f32mat4x3
 Medium single-qualifier floating-point 4x3 matrix. More...
 
typedef mat< 4, 4, f32, mediump > mediump_f32mat4x4
 Medium single-qualifier floating-point 4x4 matrix. More...
 
typedef qua< f32, mediump > mediump_f32quat
 Medium single-qualifier floating-point quaternion. More...
 
typedef vec< 1, f32, mediump > mediump_f32vec1
 Medium single-qualifier floating-point vector of 1 component. More...
 
typedef vec< 2, f32, mediump > mediump_f32vec2
 Medium single-qualifier floating-point vector of 2 components. More...
 
typedef vec< 3, f32, mediump > mediump_f32vec3
 Medium single-qualifier floating-point vector of 3 components. More...
 
typedef vec< 4, f32, mediump > mediump_f32vec4
 Medium single-qualifier floating-point vector of 4 components. More...
 
typedef double mediump_f64
 Medium 64 bit double-qualifier floating-point scalar. More...
 
typedef mat< 2, 2, f64, mediump > mediump_f64mat2
 Medium double-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 2, f64, mediump > mediump_f64mat2x2
 Medium double-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 3, f64, mediump > mediump_f64mat2x3
 Medium double-qualifier floating-point 2x3 matrix. More...
 
typedef mat< 2, 4, f64, mediump > mediump_f64mat2x4
 Medium double-qualifier floating-point 2x4 matrix. More...
 
typedef mat< 3, 3, f64, mediump > mediump_f64mat3
 Medium double-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 2, f64, mediump > mediump_f64mat3x2
 Medium double-qualifier floating-point 3x2 matrix. More...
 
typedef mat< 3, 3, f64, mediump > mediump_f64mat3x3
 Medium double-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 4, f64, mediump > mediump_f64mat3x4
 Medium double-qualifier floating-point 3x4 matrix. More...
 
typedef mat< 4, 4, f64, mediump > mediump_f64mat4
 Medium double-qualifier floating-point 4x4 matrix. More...
 
typedef mat< 4, 2, f64, mediump > mediump_f64mat4x2
 Medium double-qualifier floating-point 4x2 matrix. More...
 
typedef mat< 4, 3, f64, mediump > mediump_f64mat4x3
 Medium double-qualifier floating-point 4x3 matrix. More...
 
typedef mat< 4, 4, f64, mediump > mediump_f64mat4x4
 Medium double-qualifier floating-point 4x4 matrix. More...
 
typedef qua< f64, mediump > mediump_f64quat
 Medium double-qualifier floating-point quaternion. More...
 
typedef vec< 1, f64, mediump > mediump_f64vec1
 Medium double-qualifier floating-point vector of 1 component. More...
 
typedef vec< 2, f64, mediump > mediump_f64vec2
 Medium double-qualifier floating-point vector of 2 components. More...
 
typedef vec< 3, f64, mediump > mediump_f64vec3
 Medium double-qualifier floating-point vector of 3 components. More...
 
typedef vec< 4, f64, mediump > mediump_f64vec4
 Medium double-qualifier floating-point vector of 4 components. More...
 
typedef float mediump_float32
 Medium 32 bit single-qualifier floating-point scalar. More...
 
typedef float mediump_float32_t
 Medium 32 bit single-qualifier floating-point scalar. More...
 
typedef double mediump_float64
 Medium 64 bit double-qualifier floating-point scalar. More...
 
typedef double mediump_float64_t
 Medium 64 bit double-qualifier floating-point scalar. More...
 
typedef mat< 2, 2, f32, mediump > mediump_fmat2
 Medium single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 2, f32, mediump > mediump_fmat2x2
 Medium single-qualifier floating-point 1x1 matrix. More...
 
typedef mat< 2, 3, f32, mediump > mediump_fmat2x3
 Medium single-qualifier floating-point 2x3 matrix. More...
 
typedef mat< 2, 4, f32, mediump > mediump_fmat2x4
 Medium single-qualifier floating-point 2x4 matrix. More...
 
typedef mat< 3, 3, f32, mediump > mediump_fmat3
 Medium single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 2, f32, mediump > mediump_fmat3x2
 Medium single-qualifier floating-point 3x2 matrix. More...
 
typedef mat< 3, 3, f32, mediump > mediump_fmat3x3
 Medium single-qualifier floating-point 3x3 matrix. More...
 
typedef mat< 3, 4, f32, mediump > mediump_fmat3x4
 Medium single-qualifier floating-point 3x4 matrix. More...
 
typedef mat< 4, 4, f32, mediump > mediump_fmat4
 Medium single-qualifier floating-point 4x4 matrix. More...
 
typedef mat< 4, 2, f32, mediump > mediump_fmat4x2
 Medium single-qualifier floating-point 4x2 matrix. More...
 
typedef mat< 4, 3, f32, mediump > mediump_fmat4x3
 Medium single-qualifier floating-point 4x3 matrix. More...
 
typedef mat< 4, 4, f32, mediump > mediump_fmat4x4
 Medium single-qualifier floating-point 4x4 matrix. More...
 
typedef vec< 1, float, mediump > mediump_fvec1
 Medium single-qualifier floating-point vector of 1 component. More...
 
typedef vec< 2, float, mediump > mediump_fvec2
 Medium Single-qualifier floating-point vector of 2 components. More...
 
typedef vec< 3, float, mediump > mediump_fvec3
 Medium Single-qualifier floating-point vector of 3 components. More...
 
typedef vec< 4, float, mediump > mediump_fvec4
 Medium Single-qualifier floating-point vector of 4 components. More...
 
typedef int16 mediump_i16
 Medium qualifier 16 bit signed integer type. More...
 
typedef vec< 1, i16, mediump > mediump_i16vec1
 Medium qualifier 16 bit signed integer scalar type. More...
 
typedef vec< 2, i16, mediump > mediump_i16vec2
 Medium qualifier 16 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i16, mediump > mediump_i16vec3
 Medium qualifier 16 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i16, mediump > mediump_i16vec4
 Medium qualifier 16 bit signed integer vector of 4 components type. More...
 
typedef int32 mediump_i32
 Medium qualifier 32 bit signed integer type. More...
 
typedef vec< 1, i32, mediump > mediump_i32vec1
 Medium qualifier 32 bit signed integer scalar type. More...
 
typedef vec< 2, i32, mediump > mediump_i32vec2
 Medium qualifier 32 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i32, mediump > mediump_i32vec3
 Medium qualifier 32 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i32, mediump > mediump_i32vec4
 Medium qualifier 32 bit signed integer vector of 4 components type. More...
 
typedef int64 mediump_i64
 Medium qualifier 64 bit signed integer type. More...
 
typedef vec< 1, i64, mediump > mediump_i64vec1
 Medium qualifier 64 bit signed integer scalar type. More...
 
typedef vec< 2, i64, mediump > mediump_i64vec2
 Medium qualifier 64 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i64, mediump > mediump_i64vec3
 Medium qualifier 64 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i64, mediump > mediump_i64vec4
 Medium qualifier 64 bit signed integer vector of 4 components type. More...
 
typedef int8 mediump_i8
 Medium qualifier 8 bit signed integer type. More...
 
typedef vec< 1, i8, mediump > mediump_i8vec1
 Medium qualifier 8 bit signed integer scalar type. More...
 
typedef vec< 2, i8, mediump > mediump_i8vec2
 Medium qualifier 8 bit signed integer vector of 2 components type. More...
 
typedef vec< 3, i8, mediump > mediump_i8vec3
 Medium qualifier 8 bit signed integer vector of 3 components type. More...
 
typedef vec< 4, i8, mediump > mediump_i8vec4
 Medium qualifier 8 bit signed integer vector of 4 components type. More...
 
typedef int16 mediump_int16
 Medium qualifier 16 bit signed integer type. More...
 
typedef int16 mediump_int16_t
 Medium qualifier 16 bit signed integer type. More...
 
typedef int32 mediump_int32
 Medium qualifier 32 bit signed integer type. More...
 
typedef int32 mediump_int32_t
 Medium qualifier 32 bit signed integer type. More...
 
typedef int64 mediump_int64
 Medium qualifier 64 bit signed integer type. More...
 
typedef int64 mediump_int64_t
 Medium qualifier 64 bit signed integer type. More...
 
typedef int8 mediump_int8
 Medium qualifier 8 bit signed integer type. More...
 
typedef int8 mediump_int8_t
 Medium qualifier 8 bit signed integer type. More...
 
typedef uint16 mediump_u16
 Medium qualifier 16 bit unsigned integer type. More...
 
typedef vec< 1, u16, mediump > mediump_u16vec1
 Medium qualifier 16 bit unsigned integer scalar type. More...
 
typedef vec< 2, u16, mediump > mediump_u16vec2
 Medium qualifier 16 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u16, mediump > mediump_u16vec3
 Medium qualifier 16 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u16, mediump > mediump_u16vec4
 Medium qualifier 16 bit unsigned integer vector of 4 components type. More...
 
typedef uint32 mediump_u32
 Medium qualifier 32 bit unsigned integer type. More...
 
typedef vec< 1, u32, mediump > mediump_u32vec1
 Medium qualifier 32 bit unsigned integer scalar type. More...
 
typedef vec< 2, u32, mediump > mediump_u32vec2
 Medium qualifier 32 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u32, mediump > mediump_u32vec3
 Medium qualifier 32 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u32, mediump > mediump_u32vec4
 Medium qualifier 32 bit unsigned integer vector of 4 components type. More...
 
typedef uint64 mediump_u64
 Medium qualifier 64 bit unsigned integer type. More...
 
typedef vec< 1, u64, mediump > mediump_u64vec1
 Medium qualifier 64 bit unsigned integer scalar type. More...
 
typedef vec< 2, u64, mediump > mediump_u64vec2
 Medium qualifier 64 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u64, mediump > mediump_u64vec3
 Medium qualifier 64 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u64, mediump > mediump_u64vec4
 Medium qualifier 64 bit unsigned integer vector of 4 components type. More...
 
typedef uint8 mediump_u8
 Medium qualifier 8 bit unsigned integer type. More...
 
typedef vec< 1, u8, mediump > mediump_u8vec1
 Medium qualifier 8 bit unsigned integer scalar type. More...
 
typedef vec< 2, u8, mediump > mediump_u8vec2
 Medium qualifier 8 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u8, mediump > mediump_u8vec3
 Medium qualifier 8 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u8, mediump > mediump_u8vec4
 Medium qualifier 8 bit unsigned integer vector of 4 components type. More...
 
typedef uint16 mediump_uint16
 Medium qualifier 16 bit unsigned integer type. More...
 
typedef uint16 mediump_uint16_t
 Medium qualifier 16 bit unsigned integer type. More...
 
typedef uint32 mediump_uint32
 Medium qualifier 32 bit unsigned integer type. More...
 
typedef uint32 mediump_uint32_t
 Medium qualifier 32 bit unsigned integer type. More...
 
typedef uint64 mediump_uint64
 Medium qualifier 64 bit unsigned integer type. More...
 
typedef uint64 mediump_uint64_t
 Medium qualifier 64 bit unsigned integer type. More...
 
typedef uint8 mediump_uint8
 Medium qualifier 8 bit unsigned integer type. More...
 
typedef uint8 mediump_uint8_t
 Medium qualifier 8 bit unsigned integer type. More...
 
typedef uint16 u16
 Default qualifier 16 bit unsigned integer type. More...
 
typedef vec< 1, u16, defaultp > u16vec1
 Default qualifier 16 bit unsigned integer scalar type. More...
 
typedef vec< 2, u16, defaultp > u16vec2
 Default qualifier 16 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u16, defaultp > u16vec3
 Default qualifier 16 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u16, defaultp > u16vec4
 Default qualifier 16 bit unsigned integer vector of 4 components type. More...
 
typedef uint32 u32
 Default qualifier 32 bit unsigned integer type. More...
 
typedef vec< 1, u32, defaultp > u32vec1
 Default qualifier 32 bit unsigned integer scalar type. More...
 
typedef vec< 2, u32, defaultp > u32vec2
 Default qualifier 32 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u32, defaultp > u32vec3
 Default qualifier 32 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u32, defaultp > u32vec4
 Default qualifier 32 bit unsigned integer vector of 4 components type. More...
 
typedef uint64 u64
 Default qualifier 64 bit unsigned integer type. More...
 
typedef vec< 1, u64, defaultp > u64vec1
 Default qualifier 64 bit unsigned integer scalar type. More...
 
typedef vec< 2, u64, defaultp > u64vec2
 Default qualifier 64 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u64, defaultp > u64vec3
 Default qualifier 64 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u64, defaultp > u64vec4
 Default qualifier 64 bit unsigned integer vector of 4 components type. More...
 
typedef uint8 u8
 Default qualifier 8 bit unsigned integer type. More...
 
typedef vec< 1, u8, defaultp > u8vec1
 Default qualifier 8 bit unsigned integer scalar type. More...
 
typedef vec< 2, u8, defaultp > u8vec2
 Default qualifier 8 bit unsigned integer vector of 2 components type. More...
 
typedef vec< 3, u8, defaultp > u8vec3
 Default qualifier 8 bit unsigned integer vector of 3 components type. More...
 
typedef vec< 4, u8, defaultp > u8vec4
 Default qualifier 8 bit unsigned integer vector of 4 components type. More...
 
typedef uint16 uint16_t
 Default qualifier 16 bit unsigned integer type. More...
 
typedef uint32 uint32_t
 Default qualifier 32 bit unsigned integer type. More...
 
typedef uint64 uint64_t
 Default qualifier 64 bit unsigned integer type. More...
 
typedef uint8 uint8_t
 Default qualifier 8 bit unsigned integer type. More...
 
-

Detailed Description

-

Include <glm/gtc/type_precision.hpp> to use the features of this extension.

-

Defines specific C++-based qualifier types.

-

Typedef Documentation

- -
-
- - - - -
typedef float32 f32
-
- -

Default 32 bit single-qualifier floating-point scalar.

-

32 bit single-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 150 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, defaultp > f32mat2
-
- -

Single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 552 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, defaultp > f32mat2x2
-
- -

Single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 700 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f32, defaultp > f32mat2x3
-
- -

Single-qualifier floating-point 2x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 703 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f32, defaultp > f32mat2x4
-
- -

Single-qualifier floating-point 2x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 706 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, defaultp > f32mat3
-
- -

Single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 553 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, f32, defaultp > f32mat3x2
-
- -

Single-qualifier floating-point 3x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 701 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, defaultp > f32mat3x3
-
- -

Single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 704 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f32, defaultp > f32mat3x4
-
- -

Single-qualifier floating-point 3x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 707 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, defaultp > f32mat4
-
- -

Single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 554 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f32, defaultp > f32mat4x2
-
- -

Single-qualifier floating-point 4x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 702 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f32, defaultp > f32mat4x3
-
- -

Single-qualifier floating-point 4x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 705 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, defaultp > f32mat4x4
-
- -

Single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 708 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef qua< f32, defaultp > f32quat
-
- -

Single-qualifier floating-point quaternion.

-
See also
GLM_GTC_type_precision
- -

Definition at line 805 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, f32, defaultp > f32vec1
-
- -

Single-qualifier floating-point vector of 1 component.

-
See also
GLM_GTC_type_precision
- -

Definition at line 461 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, f32, defaultp > f32vec2
-
- -

Single-qualifier floating-point vector of 2 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 462 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, f32, defaultp > f32vec3
-
- -

Single-qualifier floating-point vector of 3 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 463 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, f32, defaultp > f32vec4
-
- -

Single-qualifier floating-point vector of 4 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 464 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float64 f64
-
- -

Default 64 bit double-qualifier floating-point scalar.

-

64 bit double-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 166 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f64, defaultp > f64mat2
-
- -

Double-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Double-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 584 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f64, defaultp > f64mat2x2
-
- -

Double-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Double-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 780 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f64, defaultp > f64mat2x3
-
- -

Double-qualifier floating-point 2x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 783 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f64, defaultp > f64mat2x4
-
- -

Double-qualifier floating-point 2x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 786 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f64, defaultp > f64mat3
-
- -

Double-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 585 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, f64, defaultp > f64mat3x2
-
- -

Double-qualifier floating-point 3x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 781 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f64, defaultp > f64mat3x3
-
- -

Double-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 784 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f64, defaultp > f64mat3x4
-
- -

Double-qualifier floating-point 3x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 787 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f64, defaultp > f64mat4
-
- -

Double-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 586 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f64, defaultp > f64mat4x2
-
- -

Double-qualifier floating-point 4x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 782 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f64, defaultp > f64mat4x3
-
- -

Double-qualifier floating-point 4x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 785 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f64, defaultp > f64mat4x4
-
- -

Double-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 788 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef qua< f64, defaultp > f64quat
-
- -

Double-qualifier floating-point quaternion.

-
See also
GLM_GTC_type_precision
- -

Definition at line 815 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, f64, defaultp > f64vec1
-
- -

Double-qualifier floating-point vector of 1 component.

-
See also
GLM_GTC_type_precision
- -

Definition at line 501 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, f64, defaultp > f64vec2
-
- -

Double-qualifier floating-point vector of 2 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 502 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, f64, defaultp > f64vec3
-
- -

Double-qualifier floating-point vector of 3 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 503 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, f64, defaultp > f64vec4
-
- -

Double-qualifier floating-point vector of 4 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 504 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float float32
-
- -

Single-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 155 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float32 float32_t
-
- -

Default 32 bit single-qualifier floating-point scalar.

-

32 bit single-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 160 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef double float64
-
- -

Double-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 171 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float64 float64_t
-
- -

Default 64 bit double-qualifier floating-point scalar.

-

64 bit double-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 176 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, defaultp > fmat2
-
- -

Single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 536 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, defaultp > fmat2x2
-
- -

Single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 660 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f32, defaultp > fmat2x3
-
- -

Single-qualifier floating-point 2x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 663 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f32, defaultp > fmat2x4
-
- -

Single-qualifier floating-point 2x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 666 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, defaultp > fmat3
-
- -

Single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 537 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, f32, defaultp > fmat3x2
-
- -

Single-qualifier floating-point 3x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 661 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, defaultp > fmat3x3
-
- -

Single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 664 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f32, defaultp > fmat3x4
-
- -

Single-qualifier floating-point 3x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 667 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, defaultp > fmat4
-
- -

Single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 538 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f32, defaultp > fmat4x2
-
- -

Single-qualifier floating-point 4x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 662 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f32, defaultp > fmat4x3
-
- -

Single-qualifier floating-point 4x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 665 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, defaultp > fmat4x4
-
- -

Single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 668 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, float, defaultp > fvec1
-
- -

Single-qualifier floating-point vector of 1 component.

-
See also
GLM_GTC_type_precision
- -

Definition at line 441 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, float, defaultp > fvec2
-
- -

Single-qualifier floating-point vector of 2 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 442 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, float, defaultp > fvec3
-
- -

Single-qualifier floating-point vector of 3 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 443 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, float, defaultp > fvec4
-
- -

Single-qualifier floating-point vector of 4 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 444 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float32 highp_f32
-
- -

High 32 bit single-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 149 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef highp_f32mat2x2 highp_f32mat2
-
- -

High single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision High single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 548 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, highp > highp_f32mat2x2
-
- -

High single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision High single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 690 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f32, highp > highp_f32mat2x3
-
- -

High single-qualifier floating-point 2x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 691 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f32, highp > highp_f32mat2x4
-
- -

High single-qualifier floating-point 2x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 692 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef highp_f32mat3x3 highp_f32mat3
-
- -

High single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 549 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, f32, highp > highp_f32mat3x2
-
- -

High single-qualifier floating-point 3x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 693 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, highp > highp_f32mat3x3
-
- -

High single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 694 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f32, highp > highp_f32mat3x4
-
- -

High single-qualifier floating-point 3x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 695 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef highp_f32mat4x4 highp_f32mat4
-
- -

High single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 550 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f32, highp > highp_f32mat4x2
-
- -

High single-qualifier floating-point 4x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 696 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f32, highp > highp_f32mat4x3
-
- -

High single-qualifier floating-point 4x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 697 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, highp > highp_f32mat4x4
-
- -

High single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 698 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef qua< f32, highp > highp_f32quat
-
- -

High single-qualifier floating-point quaternion.

-
See also
GLM_GTC_type_precision
- -

Definition at line 804 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, f32, highp > highp_f32vec1
-
- -

High single-qualifier floating-point vector of 1 component.

-
See also
GLM_GTC_type_precision
- -

Definition at line 456 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, f32, highp > highp_f32vec2
-
- -

High single-qualifier floating-point vector of 2 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 457 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, f32, highp > highp_f32vec3
-
- -

High single-qualifier floating-point vector of 3 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 458 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, f32, highp > highp_f32vec4
-
- -

High single-qualifier floating-point vector of 4 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 459 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float64 highp_f64
-
- -

High 64 bit double-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 165 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef highp_f64mat2x2 highp_f64mat2
-
- -

High double-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision High double-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 580 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f64, highp > highp_f64mat2x2
-
- -

High double-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision High double-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 770 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f64, highp > highp_f64mat2x3
-
- -

High double-qualifier floating-point 2x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 771 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f64, highp > highp_f64mat2x4
-
- -

High double-qualifier floating-point 2x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 772 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef highp_f64mat3x3 highp_f64mat3
-
- -

High double-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 581 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, f64, highp > highp_f64mat3x2
-
- -

High double-qualifier floating-point 3x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 773 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f64, highp > highp_f64mat3x3
-
- -

High double-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 774 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f64, highp > highp_f64mat3x4
-
- -

High double-qualifier floating-point 3x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 775 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef highp_f64mat4x4 highp_f64mat4
-
- -

High double-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 582 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f64, highp > highp_f64mat4x2
-
- -

High double-qualifier floating-point 4x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 776 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f64, highp > highp_f64mat4x3
-
- -

High double-qualifier floating-point 4x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 777 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f64, highp > highp_f64mat4x4
-
- -

High double-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 778 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef qua< f64, highp > highp_f64quat
-
- -

High double-qualifier floating-point quaternion.

-
See also
GLM_GTC_type_precision
- -

Definition at line 814 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, f64, highp > highp_f64vec1
-
- -

High double-qualifier floating-point vector of 1 component.

-
See also
GLM_GTC_type_precision
- -

Definition at line 496 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, f64, highp > highp_f64vec2
-
- -

High double-qualifier floating-point vector of 2 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 497 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, f64, highp > highp_f64vec3
-
- -

High double-qualifier floating-point vector of 3 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 498 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, f64, highp > highp_f64vec4
-
- -

High double-qualifier floating-point vector of 4 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 499 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float32 highp_float32
-
- -

High 32 bit single-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 154 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float32 highp_float32_t
-
- -

High 32 bit single-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 159 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float64 highp_float64
-
- -

High 64 bit double-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 170 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float64 highp_float64_t
-
- -

High 64 bit double-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 175 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef highp_fmat2x2 highp_fmat2
-
- -

High single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision High single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 532 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, highp > highp_fmat2x2
-
- -

High single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision High single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 650 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f32, highp > highp_fmat2x3
-
- -

High single-qualifier floating-point 2x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 651 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f32, highp > highp_fmat2x4
-
- -

High single-qualifier floating-point 2x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 652 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef highp_fmat3x3 highp_fmat3
-
- -

High single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 533 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, f32, highp > highp_fmat3x2
-
- -

High single-qualifier floating-point 3x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 653 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, highp > highp_fmat3x3
-
- -

High single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 654 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f32, highp > highp_fmat3x4
-
- -

High single-qualifier floating-point 3x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 655 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef highp_fmat4x4 highp_fmat4
-
- -

High single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 534 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f32, highp > highp_fmat4x2
-
- -

High single-qualifier floating-point 4x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 656 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f32, highp > highp_fmat4x3
-
- -

High single-qualifier floating-point 4x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 657 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, highp > highp_fmat4x4
-
- -

High single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 658 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, float, highp > highp_fvec1
-
- -

High single-qualifier floating-point vector of 1 component.

-
See also
GLM_GTC_type_precision
- -

Definition at line 436 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, float, highp > highp_fvec2
-
- -

High Single-qualifier floating-point vector of 2 components.

-
See also
core_precision
- -

Definition at line 437 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, float, highp > highp_fvec3
-
- -

High Single-qualifier floating-point vector of 3 components.

-
See also
core_precision
- -

Definition at line 438 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, float, highp > highp_fvec4
-
- -

High Single-qualifier floating-point vector of 4 components.

-
See also
core_precision
- -

Definition at line 439 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int16 highp_i16
-
- -

High qualifier 16 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 47 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i16, highp > highp_i16vec1
-
- -

High qualifier 16 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 252 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i16, highp > highp_i16vec2
-
- -

High qualifier 16 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 253 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i16, highp > highp_i16vec3
-
- -

High qualifier 16 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 254 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i16, highp > highp_i16vec4
-
- -

High qualifier 16 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 255 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int32 highp_i32
-
- -

High qualifier 32 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 61 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i32, highp > highp_i32vec1
-
- -

High qualifier 32 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 272 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i32, highp > highp_i32vec2
-
- -

High qualifier 32 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 273 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i32, highp > highp_i32vec3
-
- -

High qualifier 32 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 274 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i32, highp > highp_i32vec4
-
- -

High qualifier 32 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 275 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int64 highp_i64
-
- -

High qualifier 64 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 75 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i64, highp > highp_i64vec1
-
- -

High qualifier 64 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 292 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i64, highp > highp_i64vec2
-
- -

High qualifier 64 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 293 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i64, highp > highp_i64vec3
-
- -

High qualifier 64 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 294 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i64, highp > highp_i64vec4
-
- -

High qualifier 64 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 295 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int8 highp_i8
-
- -

High qualifier 8 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 33 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i8, highp > highp_i8vec1
-
- -

High qualifier 8 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 232 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i8, highp > highp_i8vec2
-
- -

High qualifier 8 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 233 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i8, highp > highp_i8vec3
-
- -

High qualifier 8 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 234 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i8, highp > highp_i8vec4
-
- -

High qualifier 8 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 235 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int16 highp_int16
-
- -

High qualifier 16 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 52 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int16 highp_int16_t
-
- -

High qualifier 16 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 56 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int32 highp_int32
-
- -

High qualifier 32 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 66 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int32 highp_int32_t
-
- -

32 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 70 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int64 highp_int64
-
- -

High qualifier 64 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 80 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int64 highp_int64_t
-
- -

High qualifier 64 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 84 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int8 highp_int8
-
- -

High qualifier 8 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 38 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int8 highp_int8_t
-
- -

High qualifier 8 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 42 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint16 highp_u16
-
- -

High qualifier 16 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 105 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u16, highp > highp_u16vec1
-
- -

High qualifier 16 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 354 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u16, highp > highp_u16vec2
-
- -

High qualifier 16 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 355 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u16, highp > highp_u16vec3
-
- -

High qualifier 16 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 356 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u16, highp > highp_u16vec4
-
- -

High qualifier 16 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 357 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint32 highp_u32
-
- -

High qualifier 32 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 119 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u32, highp > highp_u32vec1
-
- -

High qualifier 32 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 374 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u32, highp > highp_u32vec2
-
- -

High qualifier 32 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 375 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u32, highp > highp_u32vec3
-
- -

High qualifier 32 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 376 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u32, highp > highp_u32vec4
-
- -

High qualifier 32 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 377 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint64 highp_u64
-
- -

High qualifier 64 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 133 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u64, highp > highp_u64vec1
-
- -

High qualifier 64 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 394 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u64, highp > highp_u64vec2
-
- -

High qualifier 64 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 395 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u64, highp > highp_u64vec3
-
- -

High qualifier 64 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 396 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u64, highp > highp_u64vec4
-
- -

High qualifier 64 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 397 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint8 highp_u8
-
- -

High qualifier 8 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 91 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u8, highp > highp_u8vec1
-
- -

High qualifier 8 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 334 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u8, highp > highp_u8vec2
-
- -

High qualifier 8 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 335 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u8, highp > highp_u8vec3
-
- -

High qualifier 8 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 336 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u8, highp > highp_u8vec4
-
- -

High qualifier 8 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 337 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint16 highp_uint16
-
- -

High qualifier 16 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 110 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint16 highp_uint16_t
-
- -

High qualifier 16 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 114 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint32 highp_uint32
-
- -

High qualifier 32 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 124 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint32 highp_uint32_t
-
- -

High qualifier 32 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 128 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint64 highp_uint64
-
- -

High qualifier 64 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 138 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint64 highp_uint64_t
-
- -

High qualifier 64 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 142 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint8 highp_uint8
-
- -

High qualifier 8 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 96 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint8 highp_uint8_t
-
- -

High qualifier 8 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 100 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int16 i16
-
- -

16 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 48 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i16, defaultp > i16vec1
-
- -

16 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 257 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i16, defaultp > i16vec2
-
- -

16 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 258 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i16, defaultp > i16vec3
-
- -

16 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 259 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i16, defaultp > i16vec4
-
- -

16 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 260 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int32 i32
-
- -

32 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 62 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i32, defaultp > i32vec1
-
- -

32 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 277 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i32, defaultp > i32vec2
-
- -

32 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 278 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i32, defaultp > i32vec3
-
- -

32 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 279 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i32, defaultp > i32vec4
-
- -

32 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 280 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int64 i64
-
- -

64 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 76 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i64, defaultp > i64vec1
-
- -

64 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 297 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i64, defaultp > i64vec2
-
- -

64 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 298 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i64, defaultp > i64vec3
-
- -

64 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 299 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i64, defaultp > i64vec4
-
- -

64 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 300 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int8 i8
-
- -

8 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 34 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i8, defaultp > i8vec1
-
- -

8 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 237 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i8, defaultp > i8vec2
-
- -

8 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 238 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i8, defaultp > i8vec3
-
- -

8 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 239 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i8, defaultp > i8vec4
-
- -

8 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 240 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int16 int16_t
-
- -

16 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 57 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int32 int32_t
-
- -

32 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 71 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int64 int64_t
-
- -

64 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 85 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int8 int8_t
-
- -

8 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 43 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float32 lowp_f32
-
- -

Low 32 bit single-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 147 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef lowp_f32mat2x2 lowp_f32mat2
-
- -

Low single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Low single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 540 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, lowp > lowp_f32mat2x2
-
- -

Low single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Low single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 670 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f32, lowp > lowp_f32mat2x3
-
- -

Low single-qualifier floating-point 2x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 671 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f32, lowp > lowp_f32mat2x4
-
- -

Low single-qualifier floating-point 2x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 672 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef lowp_f32mat3x3 lowp_f32mat3
-
- -

Low single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 541 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, f32, lowp > lowp_f32mat3x2
-
- -

Low single-qualifier floating-point 3x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 673 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, lowp > lowp_f32mat3x3
-
- -

Low single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 674 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f32, lowp > lowp_f32mat3x4
-
- -

Low single-qualifier floating-point 3x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 675 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef lowp_f32mat4x4 lowp_f32mat4
-
- -

Low single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 542 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f32, lowp > lowp_f32mat4x2
-
- -

Low single-qualifier floating-point 4x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 676 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f32, lowp > lowp_f32mat4x3
-
- -

Low single-qualifier floating-point 4x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 677 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, lowp > lowp_f32mat4x4
-
- -

Low single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 678 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef qua< f32, lowp > lowp_f32quat
-
- -

Low single-qualifier floating-point quaternion.

-
See also
GLM_GTC_type_precision
- -

Definition at line 802 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, f32, lowp > lowp_f32vec1
-
- -

Low single-qualifier floating-point vector of 1 component.

-
See also
GLM_GTC_type_precision
- -

Definition at line 446 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, f32, lowp > lowp_f32vec2
-
- -

Low single-qualifier floating-point vector of 2 components.

-
See also
core_precision
- -

Definition at line 447 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, f32, lowp > lowp_f32vec3
-
- -

Low single-qualifier floating-point vector of 3 components.

-
See also
core_precision
- -

Definition at line 448 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, f32, lowp > lowp_f32vec4
-
- -

Low single-qualifier floating-point vector of 4 components.

-
See also
core_precision
- -

Definition at line 449 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float64 lowp_f64
-
- -

Low 64 bit double-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 163 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef lowp_f64mat2x2 lowp_f64mat2
-
- -

Low double-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Low double-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 572 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f64, lowp > lowp_f64mat2x2
-
- -

Low double-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Low double-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 750 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f64, lowp > lowp_f64mat2x3
-
- -

Low double-qualifier floating-point 2x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 751 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f64, lowp > lowp_f64mat2x4
-
- -

Low double-qualifier floating-point 2x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 752 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef lowp_f64mat3x3 lowp_f64mat3
-
- -

Low double-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 573 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, f64, lowp > lowp_f64mat3x2
-
- -

Low double-qualifier floating-point 3x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 753 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f64, lowp > lowp_f64mat3x3
-
- -

Low double-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 754 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f64, lowp > lowp_f64mat3x4
-
- -

Low double-qualifier floating-point 3x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 755 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef lowp_f64mat4x4 lowp_f64mat4
-
- -

Low double-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 574 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f64, lowp > lowp_f64mat4x2
-
- -

Low double-qualifier floating-point 4x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 756 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f64, lowp > lowp_f64mat4x3
-
- -

Low double-qualifier floating-point 4x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 757 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f64, lowp > lowp_f64mat4x4
-
- -

Low double-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 758 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef qua< f64, lowp > lowp_f64quat
-
- -

Low double-qualifier floating-point quaternion.

-
See also
GLM_GTC_type_precision
- -

Definition at line 812 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, f64, lowp > lowp_f64vec1
-
- -

Low double-qualifier floating-point vector of 1 component.

-
See also
GLM_GTC_type_precision
- -

Definition at line 486 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, f64, lowp > lowp_f64vec2
-
- -

Low double-qualifier floating-point vector of 2 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 487 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, f64, lowp > lowp_f64vec3
-
- -

Low double-qualifier floating-point vector of 3 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 488 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, f64, lowp > lowp_f64vec4
-
- -

Low double-qualifier floating-point vector of 4 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 489 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float32 lowp_float32
-
- -

Low 32 bit single-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 152 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float32 lowp_float32_t
-
- -

Low 32 bit single-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 157 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float64 lowp_float64
-
- -

Low 64 bit double-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 168 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float64 lowp_float64_t
-
- -

Low 64 bit double-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 173 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef lowp_fmat2x2 lowp_fmat2
-
- -

Low single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Low single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 524 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, lowp > lowp_fmat2x2
-
- -

Low single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Low single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 630 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f32, lowp > lowp_fmat2x3
-
- -

Low single-qualifier floating-point 2x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 631 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f32, lowp > lowp_fmat2x4
-
- -

Low single-qualifier floating-point 2x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 632 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef lowp_fmat3x3 lowp_fmat3
-
- -

Low single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 525 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, f32, lowp > lowp_fmat3x2
-
- -

Low single-qualifier floating-point 3x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 633 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, lowp > lowp_fmat3x3
-
- -

Low single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 634 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f32, lowp > lowp_fmat3x4
-
- -

Low single-qualifier floating-point 3x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 635 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef lowp_fmat4x4 lowp_fmat4
-
- -

Low single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 526 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f32, lowp > lowp_fmat4x2
-
- -

Low single-qualifier floating-point 4x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 636 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f32, lowp > lowp_fmat4x3
-
- -

Low single-qualifier floating-point 4x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 637 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, lowp > lowp_fmat4x4
-
- -

Low single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 638 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, float, lowp > lowp_fvec1
-
- -

Low single-qualifier floating-point vector of 1 component.

-
See also
GLM_GTC_type_precision
- -

Definition at line 426 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, float, lowp > lowp_fvec2
-
- -

Low single-qualifier floating-point vector of 2 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 427 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, float, lowp > lowp_fvec3
-
- -

Low single-qualifier floating-point vector of 3 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 428 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, float, lowp > lowp_fvec4
-
- -

Low single-qualifier floating-point vector of 4 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 429 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int16 lowp_i16
-
- -

Low qualifier 16 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 45 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i16, lowp > lowp_i16vec1
-
- -

Low qualifier 16 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 242 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i16, lowp > lowp_i16vec2
-
- -

Low qualifier 16 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 243 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i16, lowp > lowp_i16vec3
-
- -

Low qualifier 16 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 244 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i16, lowp > lowp_i16vec4
-
- -

Low qualifier 16 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 245 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int32 lowp_i32
-
- -

Low qualifier 32 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 59 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i32, lowp > lowp_i32vec1
-
- -

Low qualifier 32 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 262 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i32, lowp > lowp_i32vec2
-
- -

Low qualifier 32 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 263 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i32, lowp > lowp_i32vec3
-
- -

Low qualifier 32 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 264 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i32, lowp > lowp_i32vec4
-
- -

Low qualifier 32 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 265 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int64 lowp_i64
-
- -

Low qualifier 64 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 73 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i64, lowp > lowp_i64vec1
-
- -

Low qualifier 64 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 282 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i64, lowp > lowp_i64vec2
-
- -

Low qualifier 64 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 283 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i64, lowp > lowp_i64vec3
-
- -

Low qualifier 64 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 284 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i64, lowp > lowp_i64vec4
-
- -

Low qualifier 64 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 285 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int8 lowp_i8
-
- -

Low qualifier 8 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 31 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i8, lowp > lowp_i8vec1
-
- -

Low qualifier 8 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 222 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i8, lowp > lowp_i8vec2
-
- -

Low qualifier 8 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 223 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i8, lowp > lowp_i8vec3
-
- -

Low qualifier 8 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 224 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i8, lowp > lowp_i8vec4
-
- -

Low qualifier 8 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 225 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int16 lowp_int16
-
- -

Low qualifier 16 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 50 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int16 lowp_int16_t
-
- -

Low qualifier 16 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 54 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int32 lowp_int32
-
- -

Low qualifier 32 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 64 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int32 lowp_int32_t
-
- -

Low qualifier 32 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 68 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int64 lowp_int64
-
- -

Low qualifier 64 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 78 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int64 lowp_int64_t
-
- -

Low qualifier 64 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 82 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int8 lowp_int8
-
- -

Low qualifier 8 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 36 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int8 lowp_int8_t
-
- -

Low qualifier 8 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 40 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint16 lowp_u16
-
- -

Low qualifier 16 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 103 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u16, lowp > lowp_u16vec1
-
- -

Low qualifier 16 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 344 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u16, lowp > lowp_u16vec2
-
- -

Low qualifier 16 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 345 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u16, lowp > lowp_u16vec3
-
- -

Low qualifier 16 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 346 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u16, lowp > lowp_u16vec4
-
- -

Low qualifier 16 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 347 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint32 lowp_u32
-
- -

Low qualifier 32 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 117 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u32, lowp > lowp_u32vec1
-
- -

Low qualifier 32 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 364 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u32, lowp > lowp_u32vec2
-
- -

Low qualifier 32 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 365 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u32, lowp > lowp_u32vec3
-
- -

Low qualifier 32 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 366 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u32, lowp > lowp_u32vec4
-
- -

Low qualifier 32 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 367 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint64 lowp_u64
-
- -

Low qualifier 64 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 131 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u64, lowp > lowp_u64vec1
-
- -

Low qualifier 64 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 384 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u64, lowp > lowp_u64vec2
-
- -

Low qualifier 64 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 385 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u64, lowp > lowp_u64vec3
-
- -

Low qualifier 64 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 386 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u64, lowp > lowp_u64vec4
-
- -

Low qualifier 64 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 387 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint8 lowp_u8
-
- -

Low qualifier 8 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 89 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u8, lowp > lowp_u8vec1
-
- -

Low qualifier 8 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 324 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u8, lowp > lowp_u8vec2
-
- -

Low qualifier 8 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 325 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u8, lowp > lowp_u8vec3
-
- -

Low qualifier 8 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 326 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u8, lowp > lowp_u8vec4
-
- -

Low qualifier 8 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 327 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint16 lowp_uint16
-
- -

Low qualifier 16 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 108 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint16 lowp_uint16_t
-
- -

Low qualifier 16 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 112 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint32 lowp_uint32
-
- -

Low qualifier 32 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 122 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint32 lowp_uint32_t
-
- -

Low qualifier 32 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 126 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint64 lowp_uint64
-
- -

Low qualifier 64 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 136 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint64 lowp_uint64_t
-
- -

Low qualifier 64 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 140 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint8 lowp_uint8
-
- -

Low qualifier 8 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 94 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint8 lowp_uint8_t
-
- -

Low qualifier 8 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 98 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float32 mediump_f32
-
- -

Medium 32 bit single-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 148 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mediump_f32mat2x2 mediump_f32mat2
-
- -

Medium single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Medium single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 544 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, mediump > mediump_f32mat2x2
-
- -

High single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Low single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 680 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f32, mediump > mediump_f32mat2x3
-
- -

Medium single-qualifier floating-point 2x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 681 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f32, mediump > mediump_f32mat2x4
-
- -

Medium single-qualifier floating-point 2x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 682 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mediump_f32mat3x3 mediump_f32mat3
-
- -

Medium single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 545 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, f32, mediump > mediump_f32mat3x2
-
- -

Medium single-qualifier floating-point 3x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 683 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, mediump > mediump_f32mat3x3
-
- -

Medium single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 684 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f32, mediump > mediump_f32mat3x4
-
- -

Medium single-qualifier floating-point 3x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 685 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mediump_f32mat4x4 mediump_f32mat4
-
- -

Medium single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 546 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f32, mediump > mediump_f32mat4x2
-
- -

Medium single-qualifier floating-point 4x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 686 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f32, mediump > mediump_f32mat4x3
-
- -

Medium single-qualifier floating-point 4x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 687 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, mediump > mediump_f32mat4x4
-
- -

Medium single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 688 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef qua< f32, mediump > mediump_f32quat
-
- -

Medium single-qualifier floating-point quaternion.

-
See also
GLM_GTC_type_precision
- -

Definition at line 803 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, f32, mediump > mediump_f32vec1
-
- -

Medium single-qualifier floating-point vector of 1 component.

-
See also
GLM_GTC_type_precision
- -

Definition at line 451 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, f32, mediump > mediump_f32vec2
-
- -

Medium single-qualifier floating-point vector of 2 components.

-
See also
core_precision
- -

Definition at line 452 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, f32, mediump > mediump_f32vec3
-
- -

Medium single-qualifier floating-point vector of 3 components.

-
See also
core_precision
- -

Definition at line 453 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, f32, mediump > mediump_f32vec4
-
- -

Medium single-qualifier floating-point vector of 4 components.

-
See also
core_precision
- -

Definition at line 454 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float64 mediump_f64
-
- -

Medium 64 bit double-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 164 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mediump_f64mat2x2 mediump_f64mat2
-
- -

Medium double-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Medium double-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 576 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f64, mediump > mediump_f64mat2x2
-
- -

Medium double-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Medium double-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 760 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f64, mediump > mediump_f64mat2x3
-
- -

Medium double-qualifier floating-point 2x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 761 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f64, mediump > mediump_f64mat2x4
-
- -

Medium double-qualifier floating-point 2x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 762 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mediump_f64mat3x3 mediump_f64mat3
-
- -

Medium double-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 577 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, f64, mediump > mediump_f64mat3x2
-
- -

Medium double-qualifier floating-point 3x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 763 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f64, mediump > mediump_f64mat3x3
-
- -

Medium double-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 764 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f64, mediump > mediump_f64mat3x4
-
- -

Medium double-qualifier floating-point 3x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 765 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mediump_f64mat4x4 mediump_f64mat4
-
- -

Medium double-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 578 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f64, mediump > mediump_f64mat4x2
-
- -

Medium double-qualifier floating-point 4x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 766 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f64, mediump > mediump_f64mat4x3
-
- -

Medium double-qualifier floating-point 4x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 767 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f64, mediump > mediump_f64mat4x4
-
- -

Medium double-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 768 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef qua< f64, mediump > mediump_f64quat
-
- -

Medium double-qualifier floating-point quaternion.

-
See also
GLM_GTC_type_precision
- -

Definition at line 813 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, f64, mediump > mediump_f64vec1
-
- -

Medium double-qualifier floating-point vector of 1 component.

-
See also
GLM_GTC_type_precision
- -

Definition at line 491 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, f64, mediump > mediump_f64vec2
-
- -

Medium double-qualifier floating-point vector of 2 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 492 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, f64, mediump > mediump_f64vec3
-
- -

Medium double-qualifier floating-point vector of 3 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 493 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, f64, mediump > mediump_f64vec4
-
- -

Medium double-qualifier floating-point vector of 4 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 494 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float32 mediump_float32
-
- -

Medium 32 bit single-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 153 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float32 mediump_float32_t
-
- -

Medium 32 bit single-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 158 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float64 mediump_float64
-
- -

Medium 64 bit double-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 169 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef float64 mediump_float64_t
-
- -

Medium 64 bit double-qualifier floating-point scalar.

-
See also
GLM_GTC_type_precision
- -

Definition at line 174 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mediump_fmat2x2 mediump_fmat2
-
- -

Medium single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Medium single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 528 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 2, f32, mediump > mediump_fmat2x2
-
- -

Medium single-qualifier floating-point 1x1 matrix.

-
See also
GLM_GTC_type_precision Medium single-qualifier floating-point 2x2 matrix.
-
-GLM_GTC_type_precision
- -

Definition at line 640 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 3, f32, mediump > mediump_fmat2x3
-
- -

Medium single-qualifier floating-point 2x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 641 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 2, 4, f32, mediump > mediump_fmat2x4
-
- -

Medium single-qualifier floating-point 2x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 642 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mediump_fmat3x3 mediump_fmat3
-
- -

Medium single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 529 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 2, f32, mediump > mediump_fmat3x2
-
- -

Medium single-qualifier floating-point 3x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 643 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 3, f32, mediump > mediump_fmat3x3
-
- -

Medium single-qualifier floating-point 3x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 644 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 3, 4, f32, mediump > mediump_fmat3x4
-
- -

Medium single-qualifier floating-point 3x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 645 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mediump_fmat4x4 mediump_fmat4
-
- -

Medium single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 530 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 2, f32, mediump > mediump_fmat4x2
-
- -

Medium single-qualifier floating-point 4x2 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 646 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 3, f32, mediump > mediump_fmat4x3
-
- -

Medium single-qualifier floating-point 4x3 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 647 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef mat< 4, 4, f32, mediump > mediump_fmat4x4
-
- -

Medium single-qualifier floating-point 4x4 matrix.

-
See also
GLM_GTC_type_precision
- -

Definition at line 648 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, float, mediump > mediump_fvec1
-
- -

Medium single-qualifier floating-point vector of 1 component.

-
See also
GLM_GTC_type_precision
- -

Definition at line 431 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, float, mediump > mediump_fvec2
-
- -

Medium Single-qualifier floating-point vector of 2 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 432 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, float, mediump > mediump_fvec3
-
- -

Medium Single-qualifier floating-point vector of 3 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 433 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, float, mediump > mediump_fvec4
-
- -

Medium Single-qualifier floating-point vector of 4 components.

-
See also
GLM_GTC_type_precision
- -

Definition at line 434 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int16 mediump_i16
-
- -

Medium qualifier 16 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 46 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i16, mediump > mediump_i16vec1
-
- -

Medium qualifier 16 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 247 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i16, mediump > mediump_i16vec2
-
- -

Medium qualifier 16 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 248 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i16, mediump > mediump_i16vec3
-
- -

Medium qualifier 16 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 249 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i16, mediump > mediump_i16vec4
-
- -

Medium qualifier 16 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 250 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int32 mediump_i32
-
- -

Medium qualifier 32 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 60 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i32, mediump > mediump_i32vec1
-
- -

Medium qualifier 32 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 267 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i32, mediump > mediump_i32vec2
-
- -

Medium qualifier 32 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 268 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i32, mediump > mediump_i32vec3
-
- -

Medium qualifier 32 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 269 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i32, mediump > mediump_i32vec4
-
- -

Medium qualifier 32 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 270 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int64 mediump_i64
-
- -

Medium qualifier 64 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 74 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i64, mediump > mediump_i64vec1
-
- -

Medium qualifier 64 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 287 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i64, mediump > mediump_i64vec2
-
- -

Medium qualifier 64 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 288 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i64, mediump > mediump_i64vec3
-
- -

Medium qualifier 64 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 289 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i64, mediump > mediump_i64vec4
-
- -

Medium qualifier 64 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 290 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int8 mediump_i8
-
- -

Medium qualifier 8 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 32 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, i8, mediump > mediump_i8vec1
-
- -

Medium qualifier 8 bit signed integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 227 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, i8, mediump > mediump_i8vec2
-
- -

Medium qualifier 8 bit signed integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 228 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, i8, mediump > mediump_i8vec3
-
- -

Medium qualifier 8 bit signed integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 229 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, i8, mediump > mediump_i8vec4
-
- -

Medium qualifier 8 bit signed integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 230 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int16 mediump_int16
-
- -

Medium qualifier 16 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 51 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int16 mediump_int16_t
-
- -

Medium qualifier 16 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 55 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int32 mediump_int32
-
- -

Medium qualifier 32 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 65 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int32 mediump_int32_t
-
- -

Medium qualifier 32 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 69 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int64 mediump_int64
-
- -

Medium qualifier 64 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 79 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int64 mediump_int64_t
-
- -

Medium qualifier 64 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 83 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int8 mediump_int8
-
- -

Medium qualifier 8 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 37 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::int8 mediump_int8_t
-
- -

Medium qualifier 8 bit signed integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 41 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint16 mediump_u16
-
- -

Medium qualifier 16 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 104 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u16, mediump > mediump_u16vec1
-
- -

Medium qualifier 16 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 349 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u16, mediump > mediump_u16vec2
-
- -

Medium qualifier 16 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 350 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u16, mediump > mediump_u16vec3
-
- -

Medium qualifier 16 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 351 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u16, mediump > mediump_u16vec4
-
- -

Medium qualifier 16 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 352 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint32 mediump_u32
-
- -

Medium qualifier 32 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 118 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u32, mediump > mediump_u32vec1
-
- -

Medium qualifier 32 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 369 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u32, mediump > mediump_u32vec2
-
- -

Medium qualifier 32 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 370 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u32, mediump > mediump_u32vec3
-
- -

Medium qualifier 32 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 371 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u32, mediump > mediump_u32vec4
-
- -

Medium qualifier 32 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 372 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint64 mediump_u64
-
- -

Medium qualifier 64 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 132 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u64, mediump > mediump_u64vec1
-
- -

Medium qualifier 64 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 389 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u64, mediump > mediump_u64vec2
-
- -

Medium qualifier 64 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 390 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u64, mediump > mediump_u64vec3
-
- -

Medium qualifier 64 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 391 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u64, mediump > mediump_u64vec4
-
- -

Medium qualifier 64 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 392 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint8 mediump_u8
-
- -

Medium qualifier 8 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 90 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u8, mediump > mediump_u8vec1
-
- -

Medium qualifier 8 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 329 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u8, mediump > mediump_u8vec2
-
- -

Medium qualifier 8 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 330 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u8, mediump > mediump_u8vec3
-
- -

Medium qualifier 8 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 331 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u8, mediump > mediump_u8vec4
-
- -

Medium qualifier 8 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 332 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint16 mediump_uint16
-
- -

Medium qualifier 16 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 109 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint16 mediump_uint16_t
-
- -

Medium qualifier 16 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 113 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint32 mediump_uint32
-
- -

Medium qualifier 32 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 123 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint32 mediump_uint32_t
-
- -

Medium qualifier 32 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 127 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint64 mediump_uint64
-
- -

Medium qualifier 64 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 137 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint64 mediump_uint64_t
-
- -

Medium qualifier 64 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 141 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint8 mediump_uint8
-
- -

Medium qualifier 8 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 95 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint8 mediump_uint8_t
-
- -

Medium qualifier 8 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 99 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint16 u16
-
- -

Default qualifier 16 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 106 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u16, defaultp > u16vec1
-
- -

Default qualifier 16 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 359 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u16, defaultp > u16vec2
-
- -

Default qualifier 16 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 360 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u16, defaultp > u16vec3
-
- -

Default qualifier 16 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 361 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u16, defaultp > u16vec4
-
- -

Default qualifier 16 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 362 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint32 u32
-
- -

Default qualifier 32 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 120 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u32, defaultp > u32vec1
-
- -

Default qualifier 32 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 379 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u32, defaultp > u32vec2
-
- -

Default qualifier 32 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 380 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u32, defaultp > u32vec3
-
- -

Default qualifier 32 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 381 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u32, defaultp > u32vec4
-
- -

Default qualifier 32 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 382 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint64 u64
-
- -

Default qualifier 64 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 134 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u64, defaultp > u64vec1
-
- -

Default qualifier 64 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 399 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u64, defaultp > u64vec2
-
- -

Default qualifier 64 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 400 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u64, defaultp > u64vec3
-
- -

Default qualifier 64 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 401 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u64, defaultp > u64vec4
-
- -

Default qualifier 64 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 402 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint8 u8
-
- -

Default qualifier 8 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 92 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 1, u8, defaultp > u8vec1
-
- -

Default qualifier 8 bit unsigned integer scalar type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 339 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 2, u8, defaultp > u8vec2
-
- -

Default qualifier 8 bit unsigned integer vector of 2 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 340 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 3, u8, defaultp > u8vec3
-
- -

Default qualifier 8 bit unsigned integer vector of 3 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 341 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef vec< 4, u8, defaultp > u8vec4
-
- -

Default qualifier 8 bit unsigned integer vector of 4 components type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 342 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint16 uint16_t
-
- -

Default qualifier 16 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 115 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint32 uint32_t
-
- -

Default qualifier 32 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 129 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint64 uint64_t
-
- -

Default qualifier 64 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 143 of file fwd.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint8 uint8_t
-
- -

Default qualifier 8 bit unsigned integer type.

-
See also
GLM_GTC_type_precision
- -

Definition at line 101 of file fwd.hpp.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00305.html b/tests/OpenGL/package/glm/doc/api/a00305.html deleted file mode 100644 index 3755526c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00305.html +++ /dev/null @@ -1,873 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_type_ptr - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTC_type_ptr
-
-
- -

Include <glm/gtc/type_ptr.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL mat< 2, 2, T, defaultp > make_mat2 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 2, 2, T, defaultp > make_mat2x2 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 2, 3, T, defaultp > make_mat2x3 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 2, 4, T, defaultp > make_mat2x4 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 3, 3, T, defaultp > make_mat3 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 3, 2, T, defaultp > make_mat3x2 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 3, 3, T, defaultp > make_mat3x3 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 3, 4, T, defaultp > make_mat3x4 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > make_mat4 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 2, T, defaultp > make_mat4x2 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 3, T, defaultp > make_mat4x3 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > make_mat4x4 (T const *const ptr)
 Build a matrix from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL qua< T, defaultp > make_quat (T const *const ptr)
 Build a quaternion from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 1, T, Q > make_vec1 (vec< 1, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 1, T, Q > make_vec1 (vec< 2, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 1, T, Q > make_vec1 (vec< 3, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 1, T, Q > make_vec1 (vec< 4, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 2, T, Q > make_vec2 (vec< 1, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 2, T, Q > make_vec2 (vec< 2, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 2, T, Q > make_vec2 (vec< 3, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 2, T, Q > make_vec2 (vec< 4, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL vec< 2, T, defaultp > make_vec2 (T const *const ptr)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > make_vec3 (vec< 1, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > make_vec3 (vec< 2, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > make_vec3 (vec< 3, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > make_vec3 (vec< 4, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL vec< 3, T, defaultp > make_vec3 (T const *const ptr)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > make_vec4 (vec< 1, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > make_vec4 (vec< 2, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > make_vec4 (vec< 3, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > make_vec4 (vec< 4, T, Q > const &v)
 Build a vector from a pointer. More...
 
template<typename T >
GLM_FUNC_DECL vec< 4, T, defaultp > make_vec4 (T const *const ptr)
 Build a vector from a pointer. More...
 
template<typename genType >
GLM_FUNC_DECL genType::value_type const * value_ptr (genType const &v)
 Return the constant address to the data of the input parameter. More...
 
-

Detailed Description

-

Include <glm/gtc/type_ptr.hpp> to use the features of this extension.

-

Handles the interaction between pointers and vector, matrix types.

-

This extension defines an overloaded function, glm::value_ptr. It returns a pointer to the memory layout of the object. Matrix types store their values in column-major order.

-

This is useful for uploading data to matrices or copying data to buffer objects.

-

Example:

#include <glm/glm.hpp>
- -
-
glm::vec3 aVector(3);
-
glm::mat4 someMatrix(1.0);
-
-
glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector));
-
glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, glm::value_ptr(someMatrix));
-

<glm/gtc/type_ptr.hpp> need to be included to use the features of this extension.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<2, 2, T, defaultp> glm::make_mat2 (T const *const ptr)
-
- -

Build a matrix from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<2, 2, T, defaultp> glm::make_mat2x2 (T const *const ptr)
-
- -

Build a matrix from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<2, 3, T, defaultp> glm::make_mat2x3 (T const *const ptr)
-
- -

Build a matrix from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<2, 4, T, defaultp> glm::make_mat2x4 (T const *const ptr)
-
- -

Build a matrix from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, defaultp> glm::make_mat3 (T const *const ptr)
-
- -

Build a matrix from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 2, T, defaultp> glm::make_mat3x2 (T const *const ptr)
-
- -

Build a matrix from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, defaultp> glm::make_mat3x3 (T const *const ptr)
-
- -

Build a matrix from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 4, T, defaultp> glm::make_mat3x4 (T const *const ptr)
-
- -

Build a matrix from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::make_mat4 (T const *const ptr)
-
- -

Build a matrix from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 2, T, defaultp> glm::make_mat4x2 (T const *const ptr)
-
- -

Build a matrix from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 3, T, defaultp> glm::make_mat4x3 (T const *const ptr)
-
- -

Build a matrix from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::make_mat4x4 (T const *const ptr)
-
- -

Build a matrix from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL qua<T, defaultp> glm::make_quat (T const *const ptr)
-
- -

Build a quaternion from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<1, T, Q> glm::make_vec1 (vec< 1, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<1, T, Q> glm::make_vec1 (vec< 2, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<1, T, Q> glm::make_vec1 (vec< 3, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<1, T, Q> glm::make_vec1 (vec< 4, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<2, T, Q> glm::make_vec2 (vec< 1, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<2, T, Q> glm::make_vec2 (vec< 2, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<2, T, Q> glm::make_vec2 (vec< 3, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<2, T, Q> glm::make_vec2 (vec< 4, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<2, T, defaultp> glm::make_vec2 (T const *const ptr)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::make_vec3 (vec< 1, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::make_vec3 (vec< 2, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::make_vec3 (vec< 3, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::make_vec3 (vec< 4, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, defaultp> glm::make_vec3 (T const *const ptr)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<4, T, Q> glm::make_vec4 (vec< 1, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<4, T, Q> glm::make_vec4 (vec< 2, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<4, T, Q> glm::make_vec4 (vec< 3, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<4, T, Q> glm::make_vec4 (vec< 4, T, Q > const & v)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<4, T, defaultp> glm::make_vec4 (T const *const ptr)
-
- -

Build a vector from a pointer.

-
See also
GLM_GTC_type_ptr
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType::value_type const* glm::value_ptr (genType const & v)
-
- -

Return the constant address to the data of the input parameter.

-
See also
GLM_GTC_type_ptr
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00306.html b/tests/OpenGL/package/glm/doc/api/a00306.html deleted file mode 100644 index 61c2d888..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00306.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_ulp - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
- -

Include <glm/gtc/ulp.hpp> to use the features of this extension. -More...

-

Include <glm/gtc/ulp.hpp> to use the features of this extension.

-

Allow the measurement of the accuracy of a function against a reference implementation. This extension works on floating-point data and provide results in ULP.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00307.html b/tests/OpenGL/package/glm/doc/api/a00307.html deleted file mode 100644 index ae43cce4..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00307.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTC_vec1 - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
-
-
-
-
- -

Include <glm/gtc/vec1.hpp> to use the features of this extension. -More...

-

Include <glm/gtc/vec1.hpp> to use the features of this extension.

-

Add vec1, ivec1, uvec1 and bvec1 types.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00308.html b/tests/OpenGL/package/glm/doc/api/a00308.html deleted file mode 100644 index 3768b7e7..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00308.html +++ /dev/null @@ -1,1357 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_associated_min_max - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_associated_min_max
-
-
- -

Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , typename U >
GLM_FUNC_DECL U associatedMax (T x, U a, T y, U b)
 Maximum comparison between 2 variables and returns 2 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 2, U, Q > associatedMax (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b)
 Maximum comparison between 2 variables and returns 2 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > associatedMax (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b)
 Maximum comparison between 2 variables and returns 2 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMax (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b)
 Maximum comparison between 2 variables and returns 2 associated variable values. More...
 
template<typename T , typename U >
GLM_FUNC_DECL U associatedMax (T x, U a, T y, U b, T z, U c)
 Maximum comparison between 3 variables and returns 3 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMax (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c)
 Maximum comparison between 3 variables and returns 3 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > associatedMax (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c)
 Maximum comparison between 3 variables and returns 3 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMax (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c)
 Maximum comparison between 3 variables and returns 3 associated variable values. More...
 
template<typename T , typename U >
GLM_FUNC_DECL U associatedMax (T x, U a, T y, U b, T z, U c, T w, U d)
 Maximum comparison between 4 variables and returns 4 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMax (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c, vec< L, T, Q > const &w, vec< L, U, Q > const &d)
 Maximum comparison between 4 variables and returns 4 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMax (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c, T w, vec< L, U, Q > const &d)
 Maximum comparison between 4 variables and returns 4 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMax (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &w, U d)
 Maximum comparison between 4 variables and returns 4 associated variable values. More...
 
template<typename T , typename U , qualifier Q>
GLM_FUNC_DECL U associatedMin (T x, U a, T y, U b)
 Minimum comparison between 2 variables and returns 2 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< 2, U, Q > associatedMin (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b)
 Minimum comparison between 2 variables and returns 2 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMin (T x, const vec< L, U, Q > &a, T y, const vec< L, U, Q > &b)
 Minimum comparison between 2 variables and returns 2 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMin (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b)
 Minimum comparison between 2 variables and returns 2 associated variable values. More...
 
template<typename T , typename U >
GLM_FUNC_DECL U associatedMin (T x, U a, T y, U b, T z, U c)
 Minimum comparison between 3 variables and returns 3 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMin (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c)
 Minimum comparison between 3 variables and returns 3 associated variable values. More...
 
template<typename T , typename U >
GLM_FUNC_DECL U associatedMin (T x, U a, T y, U b, T z, U c, T w, U d)
 Minimum comparison between 4 variables and returns 4 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMin (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c, vec< L, T, Q > const &w, vec< L, U, Q > const &d)
 Minimum comparison between 4 variables and returns 4 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMin (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c, T w, vec< L, U, Q > const &d)
 Minimum comparison between 4 variables and returns 4 associated variable values. More...
 
template<length_t L, typename T , typename U , qualifier Q>
GLM_FUNC_DECL vec< L, U, Q > associatedMin (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &w, U d)
 Minimum comparison between 4 variables and returns 4 associated variable values. More...
 
-

Detailed Description

-

Include <glm/gtx/associated_min_max.hpp> to use the features of this extension.

-

Min and max functions that return associated values not the compared onces.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL U glm::associatedMax (x,
a,
y,
b 
)
-
- -

Maximum comparison between 2 variables and returns 2 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<2, U, Q> glm::associatedMax (vec< L, T, Q > const & x,
vec< L, U, Q > const & a,
vec< L, T, Q > const & y,
vec< L, U, Q > const & b 
)
-
- -

Maximum comparison between 2 variables and returns 2 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::associatedMax (x,
vec< L, U, Q > const & a,
y,
vec< L, U, Q > const & b 
)
-
- -

Maximum comparison between 2 variables and returns 2 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, U, Q> glm::associatedMax (vec< L, T, Q > const & x,
a,
vec< L, T, Q > const & y,
b 
)
-
- -

Maximum comparison between 2 variables and returns 2 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL U glm::associatedMax (x,
a,
y,
b,
z,
c 
)
-
- -

Maximum comparison between 3 variables and returns 3 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, U, Q> glm::associatedMax (vec< L, T, Q > const & x,
vec< L, U, Q > const & a,
vec< L, T, Q > const & y,
vec< L, U, Q > const & b,
vec< L, T, Q > const & z,
vec< L, U, Q > const & c 
)
-
- -

Maximum comparison between 3 variables and returns 3 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::associatedMax (x,
vec< L, U, Q > const & a,
y,
vec< L, U, Q > const & b,
z,
vec< L, U, Q > const & c 
)
-
- -

Maximum comparison between 3 variables and returns 3 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, U, Q> glm::associatedMax (vec< L, T, Q > const & x,
a,
vec< L, T, Q > const & y,
b,
vec< L, T, Q > const & z,
c 
)
-
- -

Maximum comparison between 3 variables and returns 3 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL U glm::associatedMax (x,
a,
y,
b,
z,
c,
w,
d 
)
-
- -

Maximum comparison between 4 variables and returns 4 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, U, Q> glm::associatedMax (vec< L, T, Q > const & x,
vec< L, U, Q > const & a,
vec< L, T, Q > const & y,
vec< L, U, Q > const & b,
vec< L, T, Q > const & z,
vec< L, U, Q > const & c,
vec< L, T, Q > const & w,
vec< L, U, Q > const & d 
)
-
- -

Maximum comparison between 4 variables and returns 4 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, U, Q> glm::associatedMax (x,
vec< L, U, Q > const & a,
y,
vec< L, U, Q > const & b,
z,
vec< L, U, Q > const & c,
w,
vec< L, U, Q > const & d 
)
-
- -

Maximum comparison between 4 variables and returns 4 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, U, Q> glm::associatedMax (vec< L, T, Q > const & x,
a,
vec< L, T, Q > const & y,
b,
vec< L, T, Q > const & z,
c,
vec< L, T, Q > const & w,
d 
)
-
- -

Maximum comparison between 4 variables and returns 4 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL U glm::associatedMin (x,
a,
y,
b 
)
-
- -

Minimum comparison between 2 variables and returns 2 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<2, U, Q> glm::associatedMin (vec< L, T, Q > const & x,
vec< L, U, Q > const & a,
vec< L, T, Q > const & y,
vec< L, U, Q > const & b 
)
-
- -

Minimum comparison between 2 variables and returns 2 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, U, Q> glm::associatedMin (x,
const vec< L, U, Q > & a,
y,
const vec< L, U, Q > & b 
)
-
- -

Minimum comparison between 2 variables and returns 2 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, U, Q> glm::associatedMin (vec< L, T, Q > const & x,
a,
vec< L, T, Q > const & y,
b 
)
-
- -

Minimum comparison between 2 variables and returns 2 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL U glm::associatedMin (x,
a,
y,
b,
z,
c 
)
-
- -

Minimum comparison between 3 variables and returns 3 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, U, Q> glm::associatedMin (vec< L, T, Q > const & x,
vec< L, U, Q > const & a,
vec< L, T, Q > const & y,
vec< L, U, Q > const & b,
vec< L, T, Q > const & z,
vec< L, U, Q > const & c 
)
-
- -

Minimum comparison between 3 variables and returns 3 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL U glm::associatedMin (x,
a,
y,
b,
z,
c,
w,
d 
)
-
- -

Minimum comparison between 4 variables and returns 4 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, U, Q> glm::associatedMin (vec< L, T, Q > const & x,
vec< L, U, Q > const & a,
vec< L, T, Q > const & y,
vec< L, U, Q > const & b,
vec< L, T, Q > const & z,
vec< L, U, Q > const & c,
vec< L, T, Q > const & w,
vec< L, U, Q > const & d 
)
-
- -

Minimum comparison between 4 variables and returns 4 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, U, Q> glm::associatedMin (x,
vec< L, U, Q > const & a,
y,
vec< L, U, Q > const & b,
z,
vec< L, U, Q > const & c,
w,
vec< L, U, Q > const & d 
)
-
- -

Minimum comparison between 4 variables and returns 4 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, U, Q> glm::associatedMin (vec< L, T, Q > const & x,
a,
vec< L, T, Q > const & y,
b,
vec< L, T, Q > const & z,
c,
vec< L, T, Q > const & w,
d 
)
-
- -

Minimum comparison between 4 variables and returns 4 associated variable values.

-
See also
GLM_GTX_associated_min_max
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00309.html b/tests/OpenGL/package/glm/doc/api/a00309.html deleted file mode 100644 index e77c82ba..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00309.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_bit - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- - -
- -

Include <glm/gtx/bit.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genIUType >
GLM_FUNC_DECL genIUType highestBitValue (genIUType Value)
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > highestBitValue (vec< L, T, Q > const &value)
 Find the highest bit set to 1 in a integer variable and return its value. More...
 
template<typename genIUType >
GLM_FUNC_DECL genIUType lowestBitValue (genIUType Value)
 
template<typename genIUType >
GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoAbove (genIUType Value)
 Return the power of two number which value is just higher the input value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > powerOfTwoAbove (vec< L, T, Q > const &value)
 Return the power of two number which value is just higher the input value. More...
 
template<typename genIUType >
GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoBelow (genIUType Value)
 Return the power of two number which value is just lower the input value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > powerOfTwoBelow (vec< L, T, Q > const &value)
 Return the power of two number which value is just lower the input value. More...
 
template<typename genIUType >
GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoNearest (genIUType Value)
 Return the power of two number which value is the closet to the input value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > powerOfTwoNearest (vec< L, T, Q > const &value)
 Return the power of two number which value is the closet to the input value. More...
 
-

Detailed Description

-

Include <glm/gtx/bit.hpp> to use the features of this extension.

-

Allow to perform bit operations on integer values

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL genIUType glm::highestBitValue (genIUType Value)
-
-
See also
GLM_GTX_bit
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::highestBitValue (vec< L, T, Q > const & value)
-
- -

Find the highest bit set to 1 in a integer variable and return its value.

-
See also
GLM_GTX_bit
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genIUType glm::lowestBitValue (genIUType Value)
-
-
See also
GLM_GTX_bit
- -
-
- -
-
- - - - - - - - -
GLM_DEPRECATED GLM_FUNC_DECL genIUType glm::powerOfTwoAbove (genIUType Value)
-
- -

Return the power of two number which value is just higher the input value.

-

Deprecated, use ceilPowerOfTwo from GTC_round instead

-
See also
GLM_GTC_round
-
-GLM_GTX_bit
- -
-
- -
-
- - - - - - - - -
GLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> glm::powerOfTwoAbove (vec< L, T, Q > const & value)
-
- -

Return the power of two number which value is just higher the input value.

-

Deprecated, use ceilPowerOfTwo from GTC_round instead

-
See also
GLM_GTC_round
-
-GLM_GTX_bit
- -
-
- -
-
- - - - - - - - -
GLM_DEPRECATED GLM_FUNC_DECL genIUType glm::powerOfTwoBelow (genIUType Value)
-
- -

Return the power of two number which value is just lower the input value.

-

Deprecated, use floorPowerOfTwo from GTC_round instead

-
See also
GLM_GTC_round
-
-GLM_GTX_bit
- -
-
- -
-
- - - - - - - - -
GLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> glm::powerOfTwoBelow (vec< L, T, Q > const & value)
-
- -

Return the power of two number which value is just lower the input value.

-

Deprecated, use floorPowerOfTwo from GTC_round instead

-
See also
GLM_GTC_round
-
-GLM_GTX_bit
- -
-
- -
-
- - - - - - - - -
GLM_DEPRECATED GLM_FUNC_DECL genIUType glm::powerOfTwoNearest (genIUType Value)
-
- -

Return the power of two number which value is the closet to the input value.

-

Deprecated, use roundPowerOfTwo from GTC_round instead

-
See also
GLM_GTC_round
-
-GLM_GTX_bit
- -
-
- -
-
- - - - - - - - -
GLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> glm::powerOfTwoNearest (vec< L, T, Q > const & value)
-
- -

Return the power of two number which value is the closet to the input value.

-

Deprecated, use roundPowerOfTwo from GTC_round instead

-
See also
GLM_GTC_round
-
-GLM_GTX_bit
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00310.html b/tests/OpenGL/package/glm/doc/api/a00310.html deleted file mode 100644 index 72094902..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00310.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_closest_point - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_closest_point
-
-
- -

Include <glm/gtx/closest_point.hpp> to use the features of this extension. -More...

- - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > closestPointOnLine (vec< 3, T, Q > const &point, vec< 3, T, Q > const &a, vec< 3, T, Q > const &b)
 Find the point on a straight line which is the closet of a point. More...
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 2, T, Q > closestPointOnLine (vec< 2, T, Q > const &point, vec< 2, T, Q > const &a, vec< 2, T, Q > const &b)
 2d lines work as well
 
-

Detailed Description

-

Include <glm/gtx/closest_point.hpp> to use the features of this extension.

-

Find the point on a straight line which is the closet of a point.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::closestPointOnLine (vec< 3, T, Q > const & point,
vec< 3, T, Q > const & a,
vec< 3, T, Q > const & b 
)
-
- -

Find the point on a straight line which is the closet of a point.

-
See also
GLM_GTX_closest_point
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00311.html b/tests/OpenGL/package/glm/doc/api/a00311.html deleted file mode 100644 index 89a09c75..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00311.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_color_encoding - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_color_encoding
-
-
- -

Include <glm/gtx/color_encoding.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - -

-Functions

-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > convertD65XYZToD50XYZ (vec< 3, T, Q > const &ColorD65XYZ)
 Convert a D65 YUV color to D50 YUV.
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > convertD65XYZToLinearSRGB (vec< 3, T, Q > const &ColorD65XYZ)
 Convert a D65 YUV color to linear sRGB.
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > convertLinearSRGBToD50XYZ (vec< 3, T, Q > const &ColorLinearSRGB)
 Convert a linear sRGB color to D50 YUV.
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > convertLinearSRGBToD65XYZ (vec< 3, T, Q > const &ColorLinearSRGB)
 Convert a linear sRGB color to D65 YUV.
 
-

Detailed Description

-

Include <glm/gtx/color_encoding.hpp> to use the features of this extension.

-

Allow to perform bit operations on integer values

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00312.html b/tests/OpenGL/package/glm/doc/api/a00312.html deleted file mode 100644 index 996fad75..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00312.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_color_space - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_color_space
-
-
- -

Include <glm/gtx/color_space.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > hsvColor (vec< 3, T, Q > const &rgbValue)
 Converts a color from RGB color space to its color in HSV color space. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T luminosity (vec< 3, T, Q > const &color)
 Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rgbColor (vec< 3, T, Q > const &hsvValue)
 Converts a color from HSV color space to its color in RGB color space. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > saturation (T const s)
 Build a saturation matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > saturation (T const s, vec< 3, T, Q > const &color)
 Modify the saturation of a color. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > saturation (T const s, vec< 4, T, Q > const &color)
 Modify the saturation of a color. More...
 
-

Detailed Description

-

Include <glm/gtx/color_space.hpp> to use the features of this extension.

-

Related to RGB to HSV conversions and operations.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::hsvColor (vec< 3, T, Q > const & rgbValue)
-
- -

Converts a color from RGB color space to its color in HSV color space.

-
See also
GLM_GTX_color_space
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::luminosity (vec< 3, T, Q > const & color)
-
- -

Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.

-
See also
GLM_GTX_color_space
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::rgbColor (vec< 3, T, Q > const & hsvValue)
-
- -

Converts a color from HSV color space to its color in RGB color space.

-
See also
GLM_GTX_color_space
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::saturation (T const s)
-
- -

Build a saturation matrix.

-
See also
GLM_GTX_color_space
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::saturation (T const s,
vec< 3, T, Q > const & color 
)
-
- -

Modify the saturation of a color.

-
See also
GLM_GTX_color_space
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<4, T, Q> glm::saturation (T const s,
vec< 4, T, Q > const & color 
)
-
- -

Modify the saturation of a color.

-
See also
GLM_GTX_color_space
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00313.html b/tests/OpenGL/package/glm/doc/api/a00313.html deleted file mode 100644 index cb18e845..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00313.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_color_space_YCoCg - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_color_space_YCoCg
-
-
- -

Include <glm/gtx/color_space_YCoCg.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rgb2YCoCg (vec< 3, T, Q > const &rgbColor)
 Convert a color from RGB color space to YCoCg color space. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rgb2YCoCgR (vec< 3, T, Q > const &rgbColor)
 Convert a color from RGB color space to YCoCgR color space. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > YCoCg2rgb (vec< 3, T, Q > const &YCoCgColor)
 Convert a color from YCoCg color space to RGB color space. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > YCoCgR2rgb (vec< 3, T, Q > const &YCoCgColor)
 Convert a color from YCoCgR color space to RGB color space. More...
 
-

Detailed Description

-

Include <glm/gtx/color_space_YCoCg.hpp> to use the features of this extension.

-

RGB to YCoCg conversions and operations

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::rgb2YCoCg (vec< 3, T, Q > const & rgbColor)
-
- -

Convert a color from RGB color space to YCoCg color space.

-
See also
GLM_GTX_color_space_YCoCg
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::rgb2YCoCgR (vec< 3, T, Q > const & rgbColor)
-
- -

Convert a color from RGB color space to YCoCgR color space.

-
See also
"YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range"
-
-GLM_GTX_color_space_YCoCg
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::YCoCg2rgb (vec< 3, T, Q > const & YCoCgColor)
-
- -

Convert a color from YCoCg color space to RGB color space.

-
See also
GLM_GTX_color_space_YCoCg
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::YCoCgR2rgb (vec< 3, T, Q > const & YCoCgColor)
-
- -

Convert a color from YCoCgR color space to RGB color space.

-
See also
"YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range"
-
-GLM_GTX_color_space_YCoCg
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00314.html b/tests/OpenGL/package/glm/doc/api/a00314.html deleted file mode 100644 index 80170a7b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00314.html +++ /dev/null @@ -1,257 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_common - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
-
-
- -

Include <glm/gtx/common.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > closeBounded (vec< L, T, Q > const &Value, vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)
 Returns whether vector components values are within an interval. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fmod (vec< L, T, Q > const &v)
 Similar to 'mod' but with a different rounding and integer support. More...
 
template<typename genType >
GLM_FUNC_DECL genType::bool_type isdenormal (genType const &x)
 Returns true if x is a denormalized number Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > openBounded (vec< L, T, Q > const &Value, vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)
 Returns whether vector components values are within an interval. More...
 
-

Detailed Description

-

Include <glm/gtx/common.hpp> to use the features of this extension.

-

Provide functions to increase the compatibility with Cg and HLSL languages

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, bool, Q> glm::closeBounded (vec< L, T, Q > const & Value,
vec< L, T, Q > const & Min,
vec< L, T, Q > const & Max 
)
-
- -

Returns whether vector components values are within an interval.

-

A closed interval includes its endpoints, and is denoted with square brackets.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
-
See also
GLM_EXT_vector_relational
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fmod (vec< L, T, Q > const & v)
-
- -

Similar to 'mod' but with a different rounding and integer support.

-

Returns 'x - y * trunc(x/y)' instead of 'x - y * floor(x/y)'

-
See also
GLSL mod vs HLSL fmod
-
-GLSL mod man page
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType::bool_type glm::isdenormal (genType const & x)
-
- -

Returns true if x is a denormalized number Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format.

-

This format is less precise but can represent values closer to zero.

-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
GLSL isnan man page
-
-GLSL 4.20.8 specification, section 8.3 Common Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, bool, Q> glm::openBounded (vec< L, T, Q > const & Value,
vec< L, T, Q > const & Min,
vec< L, T, Q > const & Max 
)
-
- -

Returns whether vector components values are within an interval.

-

A open interval excludes its endpoints, and is denoted with square brackets.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or integer scalar types
QValue from qualifier enum
-
-
-
See also
GLM_EXT_vector_relational
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00315.html b/tests/OpenGL/package/glm/doc/api/a00315.html deleted file mode 100644 index 0dfa682f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00315.html +++ /dev/null @@ -1,430 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_compatibility - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_compatibility
-
-
- -

Include <glm/gtx/compatibility.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

-typedef bool bool1
 boolean type with 1 component. (From GLM_GTX_compatibility extension)
 
-typedef bool bool1x1
 boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension)
 
-typedef vec< 2, bool, highp > bool2
 boolean type with 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 2, bool, highp > bool2x2
 boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 3, bool, highp > bool2x3
 boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 4, bool, highp > bool2x4
 boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 3, bool, highp > bool3
 boolean type with 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 2, bool, highp > bool3x2
 boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 3, bool, highp > bool3x3
 boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 4, bool, highp > bool3x4
 boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 4, bool, highp > bool4
 boolean type with 4 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 2, bool, highp > bool4x2
 boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 3, bool, highp > bool4x3
 boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 4, bool, highp > bool4x4
 boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef double double1
 double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension)
 
-typedef double double1x1
 double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension)
 
-typedef vec< 2, double, highp > double2
 double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 2, double, highp > double2x2
 double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 3, double, highp > double2x3
 double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 4, double, highp > double2x4
 double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 3, double, highp > double3
 double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 2, double, highp > double3x2
 double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 3, double, highp > double3x3
 double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 4, double, highp > double3x4
 double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 4, double, highp > double4
 double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 2, double, highp > double4x2
 double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 3, double, highp > double4x3
 double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 4, double, highp > double4x4
 double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef float float1
 single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension)
 
-typedef float float1x1
 single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension)
 
-typedef vec< 2, float, highp > float2
 single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 2, float, highp > float2x2
 single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 3, float, highp > float2x3
 single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 4, float, highp > float2x4
 single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 3, float, highp > float3
 single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 2, float, highp > float3x2
 single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 3, float, highp > float3x3
 single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 4, float, highp > float3x4
 single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 4, float, highp > float4
 single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 2, float, highp > float4x2
 single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 3, float, highp > float4x3
 single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 4, float, highp > float4x4
 single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef int int1
 integer vector with 1 component. (From GLM_GTX_compatibility extension)
 
-typedef int int1x1
 integer matrix with 1 component. (From GLM_GTX_compatibility extension)
 
-typedef vec< 2, int, highp > int2
 integer vector with 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 2, int, highp > int2x2
 integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 3, int, highp > int2x3
 integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 2, 4, int, highp > int2x4
 integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 3, int, highp > int3
 integer vector with 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 2, int, highp > int3x2
 integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 3, int, highp > int3x3
 integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 3, 4, int, highp > int3x4
 integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
 
-typedef vec< 4, int, highp > int4
 integer vector with 4 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 2, int, highp > int4x2
 integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 3, int, highp > int4x3
 integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
 
-typedef mat< 4, 4, int, highp > int4x4
 integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER T atan2 (T x, T y)
 Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 2, T, Q > atan2 (const vec< 2, T, Q > &x, const vec< 2, T, Q > &y)
 Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 3, T, Q > atan2 (const vec< 3, T, Q > &x, const vec< 3, T, Q > &y)
 Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 4, T, Q > atan2 (const vec< 4, T, Q > &x, const vec< 4, T, Q > &y)
 Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
 
-template<typename genType >
GLM_FUNC_DECL bool isfinite (genType const &x)
 Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 1, bool, Q > isfinite (const vec< 1, T, Q > &x)
 Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 2, bool, Q > isfinite (const vec< 2, T, Q > &x)
 Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, bool, Q > isfinite (const vec< 3, T, Q > &x)
 Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, bool, Q > isfinite (const vec< 4, T, Q > &x)
 Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
 
-template<typename T >
GLM_FUNC_QUALIFIER T lerp (T x, T y, T a)
 Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 2, T, Q > lerp (const vec< 2, T, Q > &x, const vec< 2, T, Q > &y, T a)
 Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 3, T, Q > lerp (const vec< 3, T, Q > &x, const vec< 3, T, Q > &y, T a)
 Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 4, T, Q > lerp (const vec< 4, T, Q > &x, const vec< 4, T, Q > &y, T a)
 Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 2, T, Q > lerp (const vec< 2, T, Q > &x, const vec< 2, T, Q > &y, const vec< 2, T, Q > &a)
 Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 3, T, Q > lerp (const vec< 3, T, Q > &x, const vec< 3, T, Q > &y, const vec< 3, T, Q > &a)
 Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 4, T, Q > lerp (const vec< 4, T, Q > &x, const vec< 4, T, Q > &y, const vec< 4, T, Q > &a)
 Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER T saturate (T x)
 Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 2, T, Q > saturate (const vec< 2, T, Q > &x)
 Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 3, T, Q > saturate (const vec< 3, T, Q > &x)
 Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
 
-template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER vec< 4, T, Q > saturate (const vec< 4, T, Q > &x)
 Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
 
-

Detailed Description

-

Include <glm/gtx/compatibility.hpp> to use the features of this extension.

-

Provide functions to increase the compatibility with Cg and HLSL languages

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00316.html b/tests/OpenGL/package/glm/doc/api/a00316.html deleted file mode 100644 index 504a519c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00316.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_component_wise - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_component_wise
-
-
- -

Include <glm/gtx/component_wise.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType::value_type compAdd (genType const &v)
 Add all vector components together. More...
 
template<typename genType >
GLM_FUNC_DECL genType::value_type compMax (genType const &v)
 Find the maximum value between single vector components. More...
 
template<typename genType >
GLM_FUNC_DECL genType::value_type compMin (genType const &v)
 Find the minimum value between single vector components. More...
 
template<typename genType >
GLM_FUNC_DECL genType::value_type compMul (genType const &v)
 Multiply all vector components together. More...
 
template<typename floatType , length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, floatType, Q > compNormalize (vec< L, T, Q > const &v)
 Convert an integer vector to a normalized float vector. More...
 
template<length_t L, typename T , typename floatType , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > compScale (vec< L, floatType, Q > const &v)
 Convert a normalized float vector to an integer vector. More...
 
-

Detailed Description

-

Include <glm/gtx/component_wise.hpp> to use the features of this extension.

-

Operations between components of a type

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL genType::value_type glm::compAdd (genType const & v)
-
- -

Add all vector components together.

-
See also
GLM_GTX_component_wise
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType::value_type glm::compMax (genType const & v)
-
- -

Find the maximum value between single vector components.

-
See also
GLM_GTX_component_wise
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType::value_type glm::compMin (genType const & v)
-
- -

Find the minimum value between single vector components.

-
See also
GLM_GTX_component_wise
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType::value_type glm::compMul (genType const & v)
-
- -

Multiply all vector components together.

-
See also
GLM_GTX_component_wise
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, floatType, Q> glm::compNormalize (vec< L, T, Q > const & v)
-
- -

Convert an integer vector to a normalized float vector.

-

If the parameter value type is already a floating qualifier type, the value is passed through.

See also
GLM_GTX_component_wise
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::compScale (vec< L, floatType, Q > const & v)
-
- -

Convert a normalized float vector to an integer vector.

-

If the parameter value type is already a floating qualifier type, the value is passed through.

See also
GLM_GTX_component_wise
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00317.html b/tests/OpenGL/package/glm/doc/api/a00317.html deleted file mode 100644 index a97c9107..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00317.html +++ /dev/null @@ -1,547 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_dual_quaternion - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_dual_quaternion
-
-
- -

Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef highp_ddualquat ddualquat
 Dual-quaternion of default double-qualifier floating-point numbers. More...
 
typedef highp_fdualquat dualquat
 Dual-quaternion of floating-point numbers. More...
 
typedef highp_fdualquat fdualquat
 Dual-quaternion of single-qualifier floating-point numbers. More...
 
typedef tdualquat< double, highp > highp_ddualquat
 Dual-quaternion of high double-qualifier floating-point numbers. More...
 
typedef tdualquat< float, highp > highp_dualquat
 Dual-quaternion of high single-qualifier floating-point numbers. More...
 
typedef tdualquat< float, highp > highp_fdualquat
 Dual-quaternion of high single-qualifier floating-point numbers. More...
 
typedef tdualquat< double, lowp > lowp_ddualquat
 Dual-quaternion of low double-qualifier floating-point numbers. More...
 
typedef tdualquat< float, lowp > lowp_dualquat
 Dual-quaternion of low single-qualifier floating-point numbers. More...
 
typedef tdualquat< float, lowp > lowp_fdualquat
 Dual-quaternion of low single-qualifier floating-point numbers. More...
 
typedef tdualquat< double, mediump > mediump_ddualquat
 Dual-quaternion of medium double-qualifier floating-point numbers. More...
 
typedef tdualquat< float, mediump > mediump_dualquat
 Dual-quaternion of medium single-qualifier floating-point numbers. More...
 
typedef tdualquat< float, mediump > mediump_fdualquat
 Dual-quaternion of medium single-qualifier floating-point numbers. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL tdualquat< T, Q > dual_quat_identity ()
 Creates an identity dual quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL tdualquat< T, Q > dualquat_cast (mat< 2, 4, T, Q > const &x)
 Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL tdualquat< T, Q > dualquat_cast (mat< 3, 4, T, Q > const &x)
 Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL tdualquat< T, Q > inverse (tdualquat< T, Q > const &q)
 Returns the q inverse. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL tdualquat< T, Q > lerp (tdualquat< T, Q > const &x, tdualquat< T, Q > const &y, T const &a)
 Returns the linear interpolation of two dual quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 4, T, Q > mat2x4_cast (tdualquat< T, Q > const &x)
 Converts a quaternion to a 2 * 4 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 4, T, Q > mat3x4_cast (tdualquat< T, Q > const &x)
 Converts a quaternion to a 3 * 4 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL tdualquat< T, Q > normalize (tdualquat< T, Q > const &q)
 Returns the normalized quaternion. More...
 
-

Detailed Description

-

Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension.

-

Defines a templated dual-quaternion type and several dual-quaternion operations.

-

Typedef Documentation

- -
-
- - - - -
typedef highp_ddualquat ddualquat
-
- -

Dual-quaternion of default double-qualifier floating-point numbers.

-
See also
GLM_GTX_dual_quaternion
- -

Definition at line 260 of file dual_quaternion.hpp.

- -
-
- -
-
- - - - -
typedef highp_fdualquat dualquat
-
- -

Dual-quaternion of floating-point numbers.

-
See also
GLM_GTX_dual_quaternion
- -

Definition at line 236 of file dual_quaternion.hpp.

- -
-
- -
-
- - - - -
typedef highp_fdualquat fdualquat
-
- -

Dual-quaternion of single-qualifier floating-point numbers.

-
See also
GLM_GTX_dual_quaternion
- -

Definition at line 241 of file dual_quaternion.hpp.

- -
-
- -
-
- - - - -
typedef tdualquat<double, highp> highp_ddualquat
-
- -

Dual-quaternion of high double-qualifier floating-point numbers.

-
See also
GLM_GTX_dual_quaternion
- -

Definition at line 229 of file dual_quaternion.hpp.

- -
-
- -
-
- - - - -
typedef tdualquat<float, highp> highp_dualquat
-
- -

Dual-quaternion of high single-qualifier floating-point numbers.

-
See also
GLM_GTX_dual_quaternion
- -

Definition at line 197 of file dual_quaternion.hpp.

- -
-
- -
-
- - - - -
typedef tdualquat<float, highp> highp_fdualquat
-
- -

Dual-quaternion of high single-qualifier floating-point numbers.

-
See also
GLM_GTX_dual_quaternion
- -

Definition at line 213 of file dual_quaternion.hpp.

- -
-
- -
-
- - - - -
typedef tdualquat<double, lowp> lowp_ddualquat
-
- -

Dual-quaternion of low double-qualifier floating-point numbers.

-
See also
GLM_GTX_dual_quaternion
- -

Definition at line 219 of file dual_quaternion.hpp.

- -
-
- -
-
- - - - -
typedef tdualquat<float, lowp> lowp_dualquat
-
- -

Dual-quaternion of low single-qualifier floating-point numbers.

-
See also
GLM_GTX_dual_quaternion
- -

Definition at line 187 of file dual_quaternion.hpp.

- -
-
- -
-
- - - - -
typedef tdualquat<float, lowp> lowp_fdualquat
-
- -

Dual-quaternion of low single-qualifier floating-point numbers.

-
See also
GLM_GTX_dual_quaternion
- -

Definition at line 203 of file dual_quaternion.hpp.

- -
-
- -
-
- - - - -
typedef tdualquat<double, mediump> mediump_ddualquat
-
- -

Dual-quaternion of medium double-qualifier floating-point numbers.

-
See also
GLM_GTX_dual_quaternion
- -

Definition at line 224 of file dual_quaternion.hpp.

- -
-
- -
-
- - - - -
typedef tdualquat<float, mediump> mediump_dualquat
-
- -

Dual-quaternion of medium single-qualifier floating-point numbers.

-
See also
GLM_GTX_dual_quaternion
- -

Definition at line 192 of file dual_quaternion.hpp.

- -
-
- -
-
- - - - -
typedef tdualquat<float, mediump> mediump_fdualquat
-
- -

Dual-quaternion of medium single-qualifier floating-point numbers.

-
See also
GLM_GTX_dual_quaternion
- -

Definition at line 208 of file dual_quaternion.hpp.

- -
-
-

Function Documentation

- -
-
- - - - - - - -
GLM_FUNC_DECL tdualquat<T, Q> glm::dual_quat_identity ()
-
- -

Creates an identity dual quaternion.

-
See also
GLM_GTX_dual_quaternion
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL tdualquat<T, Q> glm::dualquat_cast (mat< 2, 4, T, Q > const & x)
-
- -

Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion.

-
See also
GLM_GTX_dual_quaternion
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL tdualquat<T, Q> glm::dualquat_cast (mat< 3, 4, T, Q > const & x)
-
- -

Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion.

-
See also
GLM_GTX_dual_quaternion
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL tdualquat<T, Q> glm::inverse (tdualquat< T, Q > const & q)
-
- -

Returns the q inverse.

-
See also
GLM_GTX_dual_quaternion
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL tdualquat<T, Q> glm::lerp (tdualquat< T, Q > const & x,
tdualquat< T, Q > const & y,
T const & a 
)
-
- -

Returns the linear interpolation of two dual quaternion.

-
See also
gtc_dual_quaternion
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<2, 4, T, Q> glm::mat2x4_cast (tdualquat< T, Q > const & x)
-
- -

Converts a quaternion to a 2 * 4 matrix.

-
See also
GLM_GTX_dual_quaternion
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 4, T, Q> glm::mat3x4_cast (tdualquat< T, Q > const & x)
-
- -

Converts a quaternion to a 3 * 4 matrix.

-
See also
GLM_GTX_dual_quaternion
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL tdualquat<T, Q> glm::normalize (tdualquat< T, Q > const & q)
-
- -

Returns the normalized quaternion.

-
See also
GLM_GTX_dual_quaternion
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00318.html b/tests/OpenGL/package/glm/doc/api/a00318.html deleted file mode 100644 index b508baab..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00318.html +++ /dev/null @@ -1,892 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_easing - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
-
-
- -

Include <glm/gtx/easing.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType backEaseIn (genType const &a)
 
template<typename genType >
GLM_FUNC_DECL genType backEaseIn (genType const &a, genType const &o)
 
template<typename genType >
GLM_FUNC_DECL genType backEaseInOut (genType const &a)
 
template<typename genType >
GLM_FUNC_DECL genType backEaseInOut (genType const &a, genType const &o)
 
template<typename genType >
GLM_FUNC_DECL genType backEaseOut (genType const &a)
 
template<typename genType >
GLM_FUNC_DECL genType backEaseOut (genType const &a, genType const &o)
 
template<typename genType >
GLM_FUNC_DECL genType bounceEaseIn (genType const &a)
 
template<typename genType >
GLM_FUNC_DECL genType bounceEaseInOut (genType const &a)
 
template<typename genType >
GLM_FUNC_DECL genType bounceEaseOut (genType const &a)
 
template<typename genType >
GLM_FUNC_DECL genType circularEaseIn (genType const &a)
 Modelled after shifted quadrant IV of unit circle. More...
 
template<typename genType >
GLM_FUNC_DECL genType circularEaseInOut (genType const &a)
 Modelled after the piecewise circular function y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1]. More...
 
template<typename genType >
GLM_FUNC_DECL genType circularEaseOut (genType const &a)
 Modelled after shifted quadrant II of unit circle. More...
 
-template<typename genType >
GLM_FUNC_DECL genType cubicEaseIn (genType const &a)
 Modelled after the cubic y = x^3.
 
template<typename genType >
GLM_FUNC_DECL genType cubicEaseInOut (genType const &a)
 Modelled after the piecewise cubic y = (1/2)((2x)^3) ; [0, 0.5) y = (1/2)((2x-2)^3 + 2) ; [0.5, 1]. More...
 
template<typename genType >
GLM_FUNC_DECL genType cubicEaseOut (genType const &a)
 Modelled after the cubic y = (x - 1)^3 + 1. More...
 
template<typename genType >
GLM_FUNC_DECL genType elasticEaseIn (genType const &a)
 Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1)) More...
 
template<typename genType >
GLM_FUNC_DECL genType elasticEaseInOut (genType const &a)
 Modelled after the piecewise exponentially-damped sine wave: y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1]. More...
 
template<typename genType >
GLM_FUNC_DECL genType elasticEaseOut (genType const &a)
 Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1. More...
 
template<typename genType >
GLM_FUNC_DECL genType exponentialEaseIn (genType const &a)
 Modelled after the exponential function y = 2^(10(x - 1)) More...
 
template<typename genType >
GLM_FUNC_DECL genType exponentialEaseInOut (genType const &a)
 Modelled after the piecewise exponential y = (1/2)2^(10(2x - 1)) ; [0,0.5) y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1]. More...
 
template<typename genType >
GLM_FUNC_DECL genType exponentialEaseOut (genType const &a)
 Modelled after the exponential function y = -2^(-10x) + 1. More...
 
template<typename genType >
GLM_FUNC_DECL genType linearInterpolation (genType const &a)
 Modelled after the line y = x. More...
 
template<typename genType >
GLM_FUNC_DECL genType quadraticEaseIn (genType const &a)
 Modelled after the parabola y = x^2. More...
 
template<typename genType >
GLM_FUNC_DECL genType quadraticEaseInOut (genType const &a)
 Modelled after the piecewise quadratic y = (1/2)((2x)^2) ; [0, 0.5) y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1]. More...
 
template<typename genType >
GLM_FUNC_DECL genType quadraticEaseOut (genType const &a)
 Modelled after the parabola y = -x^2 + 2x. More...
 
template<typename genType >
GLM_FUNC_DECL genType quarticEaseIn (genType const &a)
 Modelled after the quartic x^4. More...
 
template<typename genType >
GLM_FUNC_DECL genType quarticEaseInOut (genType const &a)
 Modelled after the piecewise quartic y = (1/2)((2x)^4) ; [0, 0.5) y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1]. More...
 
template<typename genType >
GLM_FUNC_DECL genType quarticEaseOut (genType const &a)
 Modelled after the quartic y = 1 - (x - 1)^4. More...
 
template<typename genType >
GLM_FUNC_DECL genType quinticEaseIn (genType const &a)
 Modelled after the quintic y = x^5. More...
 
template<typename genType >
GLM_FUNC_DECL genType quinticEaseInOut (genType const &a)
 Modelled after the piecewise quintic y = (1/2)((2x)^5) ; [0, 0.5) y = (1/2)((2x-2)^5 + 2) ; [0.5, 1]. More...
 
template<typename genType >
GLM_FUNC_DECL genType quinticEaseOut (genType const &a)
 Modelled after the quintic y = (x - 1)^5 + 1. More...
 
template<typename genType >
GLM_FUNC_DECL genType sineEaseIn (genType const &a)
 Modelled after quarter-cycle of sine wave. More...
 
template<typename genType >
GLM_FUNC_DECL genType sineEaseInOut (genType const &a)
 Modelled after half sine wave. More...
 
template<typename genType >
GLM_FUNC_DECL genType sineEaseOut (genType const &a)
 Modelled after quarter-cycle of sine wave (different phase) More...
 
-

Detailed Description

-

Include <glm/gtx/easing.hpp> to use the features of this extension.

-

Easing functions for animations and transitons All functions take a parameter x in the range [0.0,1.0]

-

Based on the AHEasing project of Warren Moore (https://github.com/warrenm/AHEasing)

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::backEaseIn (genType const & a)
-
-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::backEaseIn (genType const & a,
genType const & o 
)
-
-
Parameters
- - - -
aparameter
oOptional overshoot modifier
-
-
-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::backEaseInOut (genType const & a)
-
-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::backEaseInOut (genType const & a,
genType const & o 
)
-
-
Parameters
- - - -
aparameter
oOptional overshoot modifier
-
-
-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::backEaseOut (genType const & a)
-
-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::backEaseOut (genType const & a,
genType const & o 
)
-
-
Parameters
- - - -
aparameter
oOptional overshoot modifier
-
-
-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::bounceEaseIn (genType const & a)
-
-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::bounceEaseInOut (genType const & a)
-
-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::bounceEaseOut (genType const & a)
-
-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::circularEaseIn (genType const & a)
-
- -

Modelled after shifted quadrant IV of unit circle.

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::circularEaseInOut (genType const & a)
-
- -

Modelled after the piecewise circular function y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1].

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::circularEaseOut (genType const & a)
-
- -

Modelled after shifted quadrant II of unit circle.

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::cubicEaseInOut (genType const & a)
-
- -

Modelled after the piecewise cubic y = (1/2)((2x)^3) ; [0, 0.5) y = (1/2)((2x-2)^3 + 2) ; [0.5, 1].

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::cubicEaseOut (genType const & a)
-
- -

Modelled after the cubic y = (x - 1)^3 + 1.

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::elasticEaseIn (genType const & a)
-
- -

Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1))

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::elasticEaseInOut (genType const & a)
-
- -

Modelled after the piecewise exponentially-damped sine wave: y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1].

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::elasticEaseOut (genType const & a)
-
- -

Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1.

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::exponentialEaseIn (genType const & a)
-
- -

Modelled after the exponential function y = 2^(10(x - 1))

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::exponentialEaseInOut (genType const & a)
-
- -

Modelled after the piecewise exponential y = (1/2)2^(10(2x - 1)) ; [0,0.5) y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1].

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::exponentialEaseOut (genType const & a)
-
- -

Modelled after the exponential function y = -2^(-10x) + 1.

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::linearInterpolation (genType const & a)
-
- -

Modelled after the line y = x.

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::quadraticEaseIn (genType const & a)
-
- -

Modelled after the parabola y = x^2.

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::quadraticEaseInOut (genType const & a)
-
- -

Modelled after the piecewise quadratic y = (1/2)((2x)^2) ; [0, 0.5) y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1].

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::quadraticEaseOut (genType const & a)
-
- -

Modelled after the parabola y = -x^2 + 2x.

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::quarticEaseIn (genType const & a)
-
- -

Modelled after the quartic x^4.

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::quarticEaseInOut (genType const & a)
-
- -

Modelled after the piecewise quartic y = (1/2)((2x)^4) ; [0, 0.5) y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1].

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::quarticEaseOut (genType const & a)
-
- -

Modelled after the quartic y = 1 - (x - 1)^4.

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::quinticEaseIn (genType const & a)
-
- -

Modelled after the quintic y = x^5.

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::quinticEaseInOut (genType const & a)
-
- -

Modelled after the piecewise quintic y = (1/2)((2x)^5) ; [0, 0.5) y = (1/2)((2x-2)^5 + 2) ; [0.5, 1].

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::quinticEaseOut (genType const & a)
-
- -

Modelled after the quintic y = (x - 1)^5 + 1.

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::sineEaseIn (genType const & a)
-
- -

Modelled after quarter-cycle of sine wave.

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::sineEaseInOut (genType const & a)
-
- -

Modelled after half sine wave.

-
See also
GLM_GTX_easing
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::sineEaseOut (genType const & a)
-
- -

Modelled after quarter-cycle of sine wave (different phase)

-
See also
GLM_GTX_easing
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00319.html b/tests/OpenGL/package/glm/doc/api/a00319.html deleted file mode 100644 index ba2ff984..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00319.html +++ /dev/null @@ -1,1609 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_euler_angles - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_euler_angles
-
-
- -

Include <glm/gtx/euler_angles.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > derivedEulerAngleX (T const &angleX, T const &angularVelocityX)
 Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > derivedEulerAngleY (T const &angleY, T const &angularVelocityY)
 Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > derivedEulerAngleZ (T const &angleZ, T const &angularVelocityZ)
 Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleX (T const &angleX)
 Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXY (T const &angleX, T const &angleY)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXYX (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXYZ (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXZ (T const &angleX, T const &angleZ)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXZX (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXZY (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleY (T const &angleY)
 Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYX (T const &angleY, T const &angleX)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYXY (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYXZ (T const &yaw, T const &pitch, T const &roll)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYZ (T const &angleY, T const &angleZ)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYZX (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYZY (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZ (T const &angleZ)
 Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z. More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZX (T const &angle, T const &angleX)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZXY (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZXZ (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZY (T const &angleZ, T const &angleY)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZYX (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZYZ (T const &t1, T const &t2, T const &t3)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z). More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleXYX (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (X * Y * X) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleXYZ (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (X * Y * Z) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleXZX (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (X * Z * X) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleXZY (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (X * Z * Y) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleYXY (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Y * X * Y) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleYXZ (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Y * X * Z) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleYZX (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Y * Z * X) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleYZY (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Y * Z * Y) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleZXY (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Z * X * Y) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleZXZ (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Z * X * Z) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleZYX (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Z * Y * X) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL void extractEulerAngleZYZ (mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)
 Extracts the (Z * Y * Z) Euler angles from the rotation matrix M. More...
 
template<typename T >
GLM_FUNC_DECL mat< 2, 2, T, defaultp > orientate2 (T const &angle)
 Creates a 2D 2 * 2 rotation matrix from an euler angle. More...
 
template<typename T >
GLM_FUNC_DECL mat< 3, 3, T, defaultp > orientate3 (T const &angle)
 Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > orientate3 (vec< 3, T, Q > const &angles)
 Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > orientate4 (vec< 3, T, Q > const &angles)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). More...
 
template<typename T >
GLM_FUNC_DECL mat< 4, 4, T, defaultp > yawPitchRoll (T const &yaw, T const &pitch, T const &roll)
 Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). More...
 
-

Detailed Description

-

Include <glm/gtx/euler_angles.hpp> to use the features of this extension.

-

Build matrices from Euler angles.

-

Extraction of Euler angles from rotation matrix. Based on the original paper 2014 Mike Day - Extracting Euler Angles from a Rotation Matrix.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::derivedEulerAngleX (T const & angleX,
T const & angularVelocityX 
)
-
- -

Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::derivedEulerAngleY (T const & angleY,
T const & angularVelocityY 
)
-
- -

Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::derivedEulerAngleZ (T const & angleZ,
T const & angularVelocityZ 
)
-
- -

Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleX (T const & angleX)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleXY (T const & angleX,
T const & angleY 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleXYX (T const & t1,
T const & t2,
T const & t3 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleXYZ (T const & t1,
T const & t2,
T const & t3 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleXZ (T const & angleX,
T const & angleZ 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleXZX (T const & t1,
T const & t2,
T const & t3 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleXZY (T const & t1,
T const & t2,
T const & t3 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleY (T const & angleY)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleYX (T const & angleY,
T const & angleX 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleYXY (T const & t1,
T const & t2,
T const & t3 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleYXZ (T const & yaw,
T const & pitch,
T const & roll 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleYZ (T const & angleY,
T const & angleZ 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleYZX (T const & t1,
T const & t2,
T const & t3 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleYZY (T const & t1,
T const & t2,
T const & t3 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleZ (T const & angleZ)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleZX (T const & angle,
T const & angleX 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleZXY (T const & t1,
T const & t2,
T const & t3 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleZXZ (T const & t1,
T const & t2,
T const & t3 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleZY (T const & angleZ,
T const & angleY 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleZYX (T const & t1,
T const & t2,
T const & t3 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::eulerAngleZYZ (T const & t1,
T const & t2,
T const & t3 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL void glm::extractEulerAngleXYX (mat< 4, 4, T, defaultp > const & M,
T & t1,
T & t2,
T & t3 
)
-
- -

Extracts the (X * Y * X) Euler angles from the rotation matrix M.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL void glm::extractEulerAngleXYZ (mat< 4, 4, T, defaultp > const & M,
T & t1,
T & t2,
T & t3 
)
-
- -

Extracts the (X * Y * Z) Euler angles from the rotation matrix M.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL void glm::extractEulerAngleXZX (mat< 4, 4, T, defaultp > const & M,
T & t1,
T & t2,
T & t3 
)
-
- -

Extracts the (X * Z * X) Euler angles from the rotation matrix M.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL void glm::extractEulerAngleXZY (mat< 4, 4, T, defaultp > const & M,
T & t1,
T & t2,
T & t3 
)
-
- -

Extracts the (X * Z * Y) Euler angles from the rotation matrix M.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL void glm::extractEulerAngleYXY (mat< 4, 4, T, defaultp > const & M,
T & t1,
T & t2,
T & t3 
)
-
- -

Extracts the (Y * X * Y) Euler angles from the rotation matrix M.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL void glm::extractEulerAngleYXZ (mat< 4, 4, T, defaultp > const & M,
T & t1,
T & t2,
T & t3 
)
-
- -

Extracts the (Y * X * Z) Euler angles from the rotation matrix M.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL void glm::extractEulerAngleYZX (mat< 4, 4, T, defaultp > const & M,
T & t1,
T & t2,
T & t3 
)
-
- -

Extracts the (Y * Z * X) Euler angles from the rotation matrix M.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL void glm::extractEulerAngleYZY (mat< 4, 4, T, defaultp > const & M,
T & t1,
T & t2,
T & t3 
)
-
- -

Extracts the (Y * Z * Y) Euler angles from the rotation matrix M.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL void glm::extractEulerAngleZXY (mat< 4, 4, T, defaultp > const & M,
T & t1,
T & t2,
T & t3 
)
-
- -

Extracts the (Z * X * Y) Euler angles from the rotation matrix M.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL void glm::extractEulerAngleZXZ (mat< 4, 4, T, defaultp > const & M,
T & t1,
T & t2,
T & t3 
)
-
- -

Extracts the (Z * X * Z) Euler angles from the rotation matrix M.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL void glm::extractEulerAngleZYX (mat< 4, 4, T, defaultp > const & M,
T & t1,
T & t2,
T & t3 
)
-
- -

Extracts the (Z * Y * X) Euler angles from the rotation matrix M.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL void glm::extractEulerAngleZYZ (mat< 4, 4, T, defaultp > const & M,
T & t1,
T & t2,
T & t3 
)
-
- -

Extracts the (Z * Y * Z) Euler angles from the rotation matrix M.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<2, 2, T, defaultp> glm::orientate2 (T const & angle)
-
- -

Creates a 2D 2 * 2 rotation matrix from an euler angle.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, defaultp> glm::orientate3 (T const & angle)
-
- -

Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, Q> glm::orientate3 (vec< 3, T, Q > const & angles)
-
- -

Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::orientate4 (vec< 3, T, Q > const & angles)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).

-
See also
GLM_GTX_euler_angles
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, defaultp> glm::yawPitchRoll (T const & yaw,
T const & pitch,
T const & roll 
)
-
- -

Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).

-
See also
GLM_GTX_euler_angles
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00320.html b/tests/OpenGL/package/glm/doc/api/a00320.html deleted file mode 100644 index c8d16dad..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00320.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_extend - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
-
-
- -

Include <glm/gtx/extend.hpp> to use the features of this extension. -More...

- - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType extend (genType const &Origin, genType const &Source, typename genType::value_type const Length)
 Extends of Length the Origin position using the (Source - Origin) direction. More...
 
-

Detailed Description

-

Include <glm/gtx/extend.hpp> to use the features of this extension.

-

Extend a position from a source to a position at a defined length.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::extend (genType const & Origin,
genType const & Source,
typename genType::value_type const Length 
)
-
- -

Extends of Length the Origin position using the (Source - Origin) direction.

-
See also
GLM_GTX_extend
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00321.html b/tests/OpenGL/package/glm/doc/api/a00321.html deleted file mode 100644 index fc46024b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00321.html +++ /dev/null @@ -1,831 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_extented_min_max - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_extented_min_max
-
-
- -

Include <glm/gtx/extented_min_max.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType fclamp (genType x, genType minVal, genType maxVal)
 Returns min(max(x, minVal), maxVal) for each component in x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fclamp (vec< L, T, Q > const &x, T minVal, T maxVal)
 Returns min(max(x, minVal), maxVal) for each component in x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fclamp (vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &maxVal)
 Returns min(max(x, minVal), maxVal) for each component in x. More...
 
template<typename genType >
GLM_FUNC_DECL genType fmax (genType x, genType y)
 Returns y if x < y; otherwise, it returns x. More...
 
template<typename genType >
GLM_FUNC_DECL genType fmin (genType x, genType y)
 Returns y if y < x; otherwise, it returns x. More...
 
template<typename T >
GLM_FUNC_DECL T max (T const &x, T const &y, T const &z)
 Return the maximum component-wise values of 3 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > max (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)
 Return the maximum component-wise values of 3 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > max (C< T > const &x, C< T > const &y, C< T > const &z)
 Return the maximum component-wise values of 3 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T max (T const &x, T const &y, T const &z, T const &w)
 Return the maximum component-wise values of 4 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > max (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)
 Return the maximum component-wise values of 4 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > max (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
 Return the maximum component-wise values of 4 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T min (T const &x, T const &y, T const &z)
 Return the minimum component-wise values of 3 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > min (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)
 Return the minimum component-wise values of 3 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > min (C< T > const &x, C< T > const &y, C< T > const &z)
 Return the minimum component-wise values of 3 inputs. More...
 
template<typename T >
GLM_FUNC_DECL T min (T const &x, T const &y, T const &z, T const &w)
 Return the minimum component-wise values of 4 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > min (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)
 Return the minimum component-wise values of 4 inputs. More...
 
template<typename T , template< typename > class C>
GLM_FUNC_DECL C< T > min (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)
 Return the minimum component-wise values of 4 inputs. More...
 
-

Detailed Description

-

Include <glm/gtx/extented_min_max.hpp> to use the features of this extension.

-

Min and max functions for 3 to 4 parameters.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::fclamp (genType x,
genType minVal,
genType maxVal 
)
-
- -

Returns min(max(x, minVal), maxVal) for each component in x.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - -
genTypeFloating-point scalar or vector types.
-
-
-
See also
gtx_extented_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fclamp (vec< L, T, Q > const & x,
minVal,
maxVal 
)
-
- -

Returns min(max(x, minVal), maxVal) for each component in x.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
gtx_extented_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fclamp (vec< L, T, Q > const & x,
vec< L, T, Q > const & minVal,
vec< L, T, Q > const & maxVal 
)
-
- -

Returns min(max(x, minVal), maxVal) for each component in x.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
gtx_extented_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::fmax (genType x,
genType y 
)
-
- -

Returns y if x < y; otherwise, it returns x.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - -
genTypeFloating-point; scalar or vector types.
-
-
-
See also
gtx_extented_min_max
-
-std::fmax documentation
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::fmin (genType x,
genType y 
)
-
- -

Returns y if y < x; otherwise, it returns x.

-

If one of the two arguments is NaN, the value of the other argument is returned.

-
Template Parameters
- - -
genTypeFloating-point or integer; scalar or vector types.
-
-
-
See also
gtx_extented_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::max (T const & x,
T const & y,
T const & z 
)
-
- -

Return the maximum component-wise values of 3 inputs.

-
See also
gtx_extented_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL C<T> glm::max (C< T > const & x,
typename C< T >::T const & y,
typename C< T >::T const & z 
)
-
- -

Return the maximum component-wise values of 3 inputs.

-
See also
gtx_extented_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL C<T> glm::max (C< T > const & x,
C< T > const & y,
C< T > const & z 
)
-
- -

Return the maximum component-wise values of 3 inputs.

-
See also
gtx_extented_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::max (T const & x,
T const & y,
T const & z,
T const & w 
)
-
- -

Return the maximum component-wise values of 4 inputs.

-
See also
gtx_extented_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL C<T> glm::max (C< T > const & x,
typename C< T >::T const & y,
typename C< T >::T const & z,
typename C< T >::T const & w 
)
-
- -

Return the maximum component-wise values of 4 inputs.

-
See also
gtx_extented_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL C<T> glm::max (C< T > const & x,
C< T > const & y,
C< T > const & z,
C< T > const & w 
)
-
- -

Return the maximum component-wise values of 4 inputs.

-
See also
gtx_extented_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::min (T const & x,
T const & y,
T const & z 
)
-
- -

Return the minimum component-wise values of 3 inputs.

-
See also
gtx_extented_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL C<T> glm::min (C< T > const & x,
typename C< T >::T const & y,
typename C< T >::T const & z 
)
-
- -

Return the minimum component-wise values of 3 inputs.

-
See also
gtx_extented_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL C<T> glm::min (C< T > const & x,
C< T > const & y,
C< T > const & z 
)
-
- -

Return the minimum component-wise values of 3 inputs.

-
See also
gtx_extented_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::min (T const & x,
T const & y,
T const & z,
T const & w 
)
-
- -

Return the minimum component-wise values of 4 inputs.

-
See also
gtx_extented_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL C<T> glm::min (C< T > const & x,
typename C< T >::T const & y,
typename C< T >::T const & z,
typename C< T >::T const & w 
)
-
- -

Return the minimum component-wise values of 4 inputs.

-
See also
gtx_extented_min_max
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL C<T> glm::min (C< T > const & x,
C< T > const & y,
C< T > const & z,
C< T > const & w 
)
-
- -

Return the minimum component-wise values of 4 inputs.

-
See also
gtx_extented_min_max
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00322.html b/tests/OpenGL/package/glm/doc/api/a00322.html deleted file mode 100644 index 68677bf5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00322.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_exterior_product - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_exterior_product
-
-
- -

Include <glm/gtx/exterior_product.hpp> to use the features of this extension. -More...

- - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL T cross (vec< 2, T, Q > const &v, vec< 2, T, Q > const &u)
 Returns the cross product of x and y. More...
 
-

Detailed Description

-

Include <glm/gtx/exterior_product.hpp> to use the features of this extension.

-

Allow to perform bit operations on integer values

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::cross (vec< 2, T, Q > const & v,
vec< 2, T, Q > const & u 
)
-
- -

Returns the cross product of x and y.

-
Template Parameters
- - - -
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
Exterior product
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00323.html b/tests/OpenGL/package/glm/doc/api/a00323.html deleted file mode 100644 index 96a9fe9c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00323.html +++ /dev/null @@ -1,409 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_fast_exponential - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_fast_exponential
-
-
- -

Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL T fastExp (T x)
 Faster than the common exp function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastExp (vec< L, T, Q > const &x)
 Faster than the common exp function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastExp2 (T x)
 Faster than the common exp2 function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastExp2 (vec< L, T, Q > const &x)
 Faster than the common exp2 function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastLog (T x)
 Faster than the common log function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastLog (vec< L, T, Q > const &x)
 Faster than the common exp2 function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastLog2 (T x)
 Faster than the common log2 function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastLog2 (vec< L, T, Q > const &x)
 Faster than the common log2 function but less accurate. More...
 
template<typename genType >
GLM_FUNC_DECL genType fastPow (genType x, genType y)
 Faster than the common pow function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastPow (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Faster than the common pow function but less accurate. More...
 
template<typename genTypeT , typename genTypeU >
GLM_FUNC_DECL genTypeT fastPow (genTypeT x, genTypeU y)
 Faster than the common pow function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastPow (vec< L, T, Q > const &x)
 Faster than the common pow function but less accurate. More...
 
-

Detailed Description

-

Include <glm/gtx/fast_exponential.hpp> to use the features of this extension.

-

Fast but less accurate implementations of exponential based functions.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::fastExp (x)
-
- -

Faster than the common exp function but less accurate.

-
See also
GLM_GTX_fast_exponential
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fastExp (vec< L, T, Q > const & x)
-
- -

Faster than the common exp function but less accurate.

-
See also
GLM_GTX_fast_exponential
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::fastExp2 (x)
-
- -

Faster than the common exp2 function but less accurate.

-
See also
GLM_GTX_fast_exponential
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fastExp2 (vec< L, T, Q > const & x)
-
- -

Faster than the common exp2 function but less accurate.

-
See also
GLM_GTX_fast_exponential
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::fastLog (x)
-
- -

Faster than the common log function but less accurate.

-
See also
GLM_GTX_fast_exponential
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fastLog (vec< L, T, Q > const & x)
-
- -

Faster than the common exp2 function but less accurate.

-
See also
GLM_GTX_fast_exponential
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::fastLog2 (x)
-
- -

Faster than the common log2 function but less accurate.

-
See also
GLM_GTX_fast_exponential
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fastLog2 (vec< L, T, Q > const & x)
-
- -

Faster than the common log2 function but less accurate.

-
See also
GLM_GTX_fast_exponential
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::fastPow (genType x,
genType y 
)
-
- -

Faster than the common pow function but less accurate.

-
See also
GLM_GTX_fast_exponential
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fastPow (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Faster than the common pow function but less accurate.

-
See also
GLM_GTX_fast_exponential
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genTypeT glm::fastPow (genTypeT x,
genTypeU y 
)
-
- -

Faster than the common pow function but less accurate.

-
See also
GLM_GTX_fast_exponential
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fastPow (vec< L, T, Q > const & x)
-
- -

Faster than the common pow function but less accurate.

-
See also
GLM_GTX_fast_exponential
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00324.html b/tests/OpenGL/package/glm/doc/api/a00324.html deleted file mode 100644 index 9adcf060..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00324.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_fast_square_root - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_fast_square_root
-
-
- -

Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType fastDistance (genType x, genType y)
 Faster than the common distance function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T fastDistance (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Faster than the common distance function but less accurate. More...
 
template<typename genType >
GLM_FUNC_DECL genType fastInverseSqrt (genType x)
 Faster than the common inversesqrt function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastInverseSqrt (vec< L, T, Q > const &x)
 Faster than the common inversesqrt function but less accurate. More...
 
template<typename genType >
GLM_FUNC_DECL genType fastLength (genType x)
 Faster than the common length function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T fastLength (vec< L, T, Q > const &x)
 Faster than the common length function but less accurate. More...
 
template<typename genType >
GLM_FUNC_DECL genType fastNormalize (genType const &x)
 Faster than the common normalize function but less accurate. More...
 
template<typename genType >
GLM_FUNC_DECL genType fastSqrt (genType x)
 Faster than the common sqrt function but less accurate. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > fastSqrt (vec< L, T, Q > const &x)
 Faster than the common sqrt function but less accurate. More...
 
-

Detailed Description

-

Include <glm/gtx/fast_square_root.hpp> to use the features of this extension.

-

Fast but less accurate implementations of square root based functions.

    -
  • Sqrt optimisation based on Newton's method, www.gamedev.net/community/forums/topic.asp?topic id=139956
  • -
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::fastDistance (genType x,
genType y 
)
-
- -

Faster than the common distance function but less accurate.

-
See also
GLM_GTX_fast_square_root extension.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::fastDistance (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Faster than the common distance function but less accurate.

-
See also
GLM_GTX_fast_square_root extension.
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::fastInverseSqrt (genType x)
-
- -

Faster than the common inversesqrt function but less accurate.

-
See also
GLM_GTX_fast_square_root extension.
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fastInverseSqrt (vec< L, T, Q > const & x)
-
- -

Faster than the common inversesqrt function but less accurate.

-
See also
GLM_GTX_fast_square_root extension.
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::fastLength (genType x)
-
- -

Faster than the common length function but less accurate.

-
See also
GLM_GTX_fast_square_root extension.
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::fastLength (vec< L, T, Q > const & x)
-
- -

Faster than the common length function but less accurate.

-
See also
GLM_GTX_fast_square_root extension.
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::fastNormalize (genType const & x)
-
- -

Faster than the common normalize function but less accurate.

-
See also
GLM_GTX_fast_square_root extension.
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::fastSqrt (genType x)
-
- -

Faster than the common sqrt function but less accurate.

-
See also
GLM_GTX_fast_square_root extension.
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::fastSqrt (vec< L, T, Q > const & x)
-
- -

Faster than the common sqrt function but less accurate.

-
See also
GLM_GTX_fast_square_root extension.
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00325.html b/tests/OpenGL/package/glm/doc/api/a00325.html deleted file mode 100644 index 0c8cc0b8..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00325.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_fast_trigonometry - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_fast_trigonometry
-
-
- -

Include <glm/gtx/fast_trigonometry.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL T fastAcos (T angle)
 Faster than the common acos function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastAsin (T angle)
 Faster than the common asin function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastAtan (T y, T x)
 Faster than the common atan function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastAtan (T angle)
 Faster than the common atan function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastCos (T angle)
 Faster than the common cos function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastSin (T angle)
 Faster than the common sin function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T fastTan (T angle)
 Faster than the common tan function but less accurate. More...
 
template<typename T >
GLM_FUNC_DECL T wrapAngle (T angle)
 Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension. More...
 
-

Detailed Description

-

Include <glm/gtx/fast_trigonometry.hpp> to use the features of this extension.

-

Fast but less accurate implementations of trigonometric functions.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::fastAcos (angle)
-
- -

Faster than the common acos function but less accurate.

-

Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::fastAsin (angle)
-
- -

Faster than the common asin function but less accurate.

-

Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::fastAtan (y,
x 
)
-
- -

Faster than the common atan function but less accurate.

-

Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::fastAtan (angle)
-
- -

Faster than the common atan function but less accurate.

-

Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::fastCos (angle)
-
- -

Faster than the common cos function but less accurate.

-

From GLM_GTX_fast_trigonometry extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::fastSin (angle)
-
- -

Faster than the common sin function but less accurate.

-

From GLM_GTX_fast_trigonometry extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::fastTan (angle)
-
- -

Faster than the common tan function but less accurate.

-

Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::wrapAngle (angle)
-
- -

Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00326.html b/tests/OpenGL/package/glm/doc/api/a00326.html deleted file mode 100644 index d705401f..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00326.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_functions - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_functions
-
-
- -

Include <glm/gtx/functions.hpp> to use the features of this extension. -More...

- - - - - - - - - - -

-Functions

template<typename T >
GLM_FUNC_DECL T gauss (T x, T ExpectedValue, T StandardDeviation)
 1D gauss function More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T gauss (vec< 2, T, Q > const &Coord, vec< 2, T, Q > const &ExpectedValue, vec< 2, T, Q > const &StandardDeviation)
 2D gauss function More...
 
-

Detailed Description

-

Include <glm/gtx/functions.hpp> to use the features of this extension.

-

List of useful common functions.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::gauss (x,
ExpectedValue,
StandardDeviation 
)
-
- -

1D gauss function

-
See also
GLM_GTC_epsilon
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::gauss (vec< 2, T, Q > const & Coord,
vec< 2, T, Q > const & ExpectedValue,
vec< 2, T, Q > const & StandardDeviation 
)
-
- -

2D gauss function

-
See also
GLM_GTC_epsilon
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00327.html b/tests/OpenGL/package/glm/doc/api/a00327.html deleted file mode 100644 index 171895b6..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00327.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_gradient_paint - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_gradient_paint
-
-
- -

Include <glm/gtx/gradient_paint.hpp> to use the features of this extension. -More...

- - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL T linearGradient (vec< 2, T, Q > const &Point0, vec< 2, T, Q > const &Point1, vec< 2, T, Q > const &Position)
 Return a color from a linear gradient. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T radialGradient (vec< 2, T, Q > const &Center, T const &Radius, vec< 2, T, Q > const &Focal, vec< 2, T, Q > const &Position)
 Return a color from a radial gradient. More...
 
-

Detailed Description

-

Include <glm/gtx/gradient_paint.hpp> to use the features of this extension.

-

Functions that return the color of procedural gradient for specific coordinates.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::linearGradient (vec< 2, T, Q > const & Point0,
vec< 2, T, Q > const & Point1,
vec< 2, T, Q > const & Position 
)
-
- -

Return a color from a linear gradient.

-
See also
- GLM_GTX_gradient_paint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::radialGradient (vec< 2, T, Q > const & Center,
T const & Radius,
vec< 2, T, Q > const & Focal,
vec< 2, T, Q > const & Position 
)
-
- -

Return a color from a radial gradient.

-
See also
- GLM_GTX_gradient_paint
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00328.html b/tests/OpenGL/package/glm/doc/api/a00328.html deleted file mode 100644 index 2c29e335..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00328.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_handed_coordinate_space - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_handed_coordinate_space
-
-
- -

Include <glm/gtx/handed_coordinate_system.hpp> to use the features of this extension. -More...

- - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL bool leftHanded (vec< 3, T, Q > const &tangent, vec< 3, T, Q > const &binormal, vec< 3, T, Q > const &normal)
 Return if a trihedron left handed or not. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool rightHanded (vec< 3, T, Q > const &tangent, vec< 3, T, Q > const &binormal, vec< 3, T, Q > const &normal)
 Return if a trihedron right handed or not. More...
 
-

Detailed Description

-

Include <glm/gtx/handed_coordinate_system.hpp> to use the features of this extension.

-

To know if a set of three basis vectors defines a right or left-handed coordinate system.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::leftHanded (vec< 3, T, Q > const & tangent,
vec< 3, T, Q > const & binormal,
vec< 3, T, Q > const & normal 
)
-
- -

Return if a trihedron left handed or not.

-

From GLM_GTX_handed_coordinate_space extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::rightHanded (vec< 3, T, Q > const & tangent,
vec< 3, T, Q > const & binormal,
vec< 3, T, Q > const & normal 
)
-
- -

Return if a trihedron right handed or not.

-

From GLM_GTX_handed_coordinate_space extension.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00329.html b/tests/OpenGL/package/glm/doc/api/a00329.html deleted file mode 100644 index 4de30500..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00329.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_hash - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
- -

Include <glm/gtx/hash.hpp> to use the features of this extension. -More...

-

Include <glm/gtx/hash.hpp> to use the features of this extension.

-

Add std::hash support for glm types

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00330.html b/tests/OpenGL/package/glm/doc/api/a00330.html deleted file mode 100644 index ebac4a91..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00330.html +++ /dev/null @@ -1,366 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_integer - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
-
-
- -

Include <glm/gtx/integer.hpp> to use the features of this extension. -More...

- - - - - -

-Typedefs

typedef signed int sint
 32bit signed integer. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType factorial (genType const &x)
 Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension. More...
 
GLM_FUNC_DECL unsigned int floor_log2 (unsigned int x)
 Returns the floor log2 of x. More...
 
GLM_FUNC_DECL int mod (int x, int y)
 Modulus. More...
 
GLM_FUNC_DECL uint mod (uint x, uint y)
 Modulus. More...
 
GLM_FUNC_DECL uint nlz (uint x)
 Returns the number of leading zeros. More...
 
GLM_FUNC_DECL int pow (int x, uint y)
 Returns x raised to the y power. More...
 
GLM_FUNC_DECL uint pow (uint x, uint y)
 Returns x raised to the y power. More...
 
GLM_FUNC_DECL int sqrt (int x)
 Returns the positive square root of x. More...
 
GLM_FUNC_DECL uint sqrt (uint x)
 Returns the positive square root of x. More...
 
-

Detailed Description

-

Include <glm/gtx/integer.hpp> to use the features of this extension.

-

Add support for integer for core functions

-

Typedef Documentation

- -
-
- - - - -
typedef signed int sint
-
- -

32bit signed integer.

-

From GLM_GTX_integer extension.

- -

Definition at line 55 of file gtx/integer.hpp.

- -
-
-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::factorial (genType const & x)
-
- -

Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL unsigned int glm::floor_log2 (unsigned int x)
-
- -

Returns the floor log2 of x.

-

From GLM_GTX_integer extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL int glm::mod (int x,
int y 
)
-
- -

Modulus.

-

Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL uint glm::mod (uint x,
uint y 
)
-
- -

Modulus.

-

Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint glm::nlz (uint x)
-
- -

Returns the number of leading zeros.

-

From GLM_GTX_integer extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL int glm::pow (int x,
uint y 
)
-
- -

Returns x raised to the y power.

-

From GLM_GTX_integer extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL uint glm::pow (uint x,
uint y 
)
-
- -

Returns x raised to the y power.

-

From GLM_GTX_integer extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL int glm::sqrt (int x)
-
- -

Returns the positive square root of x.

-

From GLM_GTX_integer extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint glm::sqrt (uint x)
-
- -

Returns the positive square root of x.

-

From GLM_GTX_integer extension.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00331.html b/tests/OpenGL/package/glm/doc/api/a00331.html deleted file mode 100644 index 07aeaf8d..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00331.html +++ /dev/null @@ -1,451 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_intersect - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_intersect
-
-
- -

Include <glm/gtx/intersect.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL bool intersectLineSphere (genType const &point0, genType const &point1, genType const &sphereCenter, typename genType::value_type sphereRadius, genType &intersectionPosition1, genType &intersectionNormal1, genType &intersectionPosition2=genType(), genType &intersectionNormal2=genType())
 Compute the intersection of a line and a sphere. More...
 
template<typename genType >
GLM_FUNC_DECL bool intersectLineTriangle (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)
 Compute the intersection of a line and a triangle. More...
 
template<typename genType >
GLM_FUNC_DECL bool intersectRayPlane (genType const &orig, genType const &dir, genType const &planeOrig, genType const &planeNormal, typename genType::value_type &intersectionDistance)
 Compute the intersection of a ray and a plane. More...
 
template<typename genType >
GLM_FUNC_DECL bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, typename genType::value_type const sphereRadiusSquered, typename genType::value_type &intersectionDistance)
 Compute the intersection distance of a ray and a sphere. More...
 
template<typename genType >
GLM_FUNC_DECL bool intersectRaySphere (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)
 Compute the intersection of a ray and a sphere. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool intersectRayTriangle (vec< 3, T, Q > const &orig, vec< 3, T, Q > const &dir, vec< 3, T, Q > const &v0, vec< 3, T, Q > const &v1, vec< 3, T, Q > const &v2, vec< 2, T, Q > &baryPosition, T &distance)
 Compute the intersection of a ray and a triangle. More...
 
-

Detailed Description

-

Include <glm/gtx/intersect.hpp> to use the features of this extension.

-

Add intersection functions

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::intersectLineSphere (genType const & point0,
genType const & point1,
genType const & sphereCenter,
typename genType::value_type sphereRadius,
genType & intersectionPosition1,
genType & intersectionNormal1,
genType & intersectionPosition2 = genType(),
genType & intersectionNormal2 = genType() 
)
-
- -

Compute the intersection of a line and a sphere.

-

From GLM_GTX_intersect extension

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::intersectLineTriangle (genType const & orig,
genType const & dir,
genType const & vert0,
genType const & vert1,
genType const & vert2,
genType & position 
)
-
- -

Compute the intersection of a line and a triangle.

-

From GLM_GTX_intersect extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::intersectRayPlane (genType const & orig,
genType const & dir,
genType const & planeOrig,
genType const & planeNormal,
typename genType::value_type & intersectionDistance 
)
-
- -

Compute the intersection of a ray and a plane.

-

Ray direction and plane normal must be unit length. From GLM_GTX_intersect extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::intersectRaySphere (genType const & rayStarting,
genType const & rayNormalizedDirection,
genType const & sphereCenter,
typename genType::value_type const sphereRadiusSquered,
typename genType::value_type & intersectionDistance 
)
-
- -

Compute the intersection distance of a ray and a sphere.

-

The ray direction vector is unit length. From GLM_GTX_intersect extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::intersectRaySphere (genType const & rayStarting,
genType const & rayNormalizedDirection,
genType const & sphereCenter,
const typename genType::value_type sphereRadius,
genType & intersectionPosition,
genType & intersectionNormal 
)
-
- -

Compute the intersection of a ray and a sphere.

-

From GLM_GTX_intersect extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::intersectRayTriangle (vec< 3, T, Q > const & orig,
vec< 3, T, Q > const & dir,
vec< 3, T, Q > const & v0,
vec< 3, T, Q > const & v1,
vec< 3, T, Q > const & v2,
vec< 2, T, Q > & baryPosition,
T & distance 
)
-
- -

Compute the intersection of a ray and a triangle.

-

Based om Tomas Möller implementation http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/raytri/ From GLM_GTX_intersect extension.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00332.html b/tests/OpenGL/package/glm/doc/api/a00332.html deleted file mode 100644 index 901371ad..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00332.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_io - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
- -

Include <glm/gtx/io.hpp> to use the features of this extension. -More...

-

Detailed Description

-

Include <glm/gtx/io.hpp> to use the features of this extension.

-

std::[w]ostream support for glm types

-

std::[w]ostream support for glm types + qualifier/width/etc. manipulators based on howard hinnant's std::chrono io proposal [http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html]

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00333.html b/tests/OpenGL/package/glm/doc/api/a00333.html deleted file mode 100644 index 94f71bfb..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00333.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_log_base - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_log_base
-
-
- -

Include <glm/gtx/log_base.hpp> to use the features of this extension. -More...

- - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType log (genType const &x, genType const &base)
 Logarithm for any base. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > sign (vec< L, T, Q > const &x, vec< L, T, Q > const &base)
 Logarithm for any base. More...
 
-

Detailed Description

-

Include <glm/gtx/log_base.hpp> to use the features of this extension.

-

Logarithm for any base. base can be a vector or a scalar.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::log (genType const & x,
genType const & base 
)
-
- -

Logarithm for any base.

-

From GLM_GTX_log_base.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::sign (vec< L, T, Q > const & x,
vec< L, T, Q > const & base 
)
-
- -

Logarithm for any base.

-

From GLM_GTX_log_base.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00334.html b/tests/OpenGL/package/glm/doc/api/a00334.html deleted file mode 100644 index b6ed0be6..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00334.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_matrix_cross_product - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_matrix_cross_product
-
-
- -

Include <glm/gtx/matrix_cross_product.hpp> to use the features of this extension. -More...

- - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > matrixCross3 (vec< 3, T, Q > const &x)
 Build a cross product matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > matrixCross4 (vec< 3, T, Q > const &x)
 Build a cross product matrix. More...
 
-

Detailed Description

-

Include <glm/gtx/matrix_cross_product.hpp> to use the features of this extension.

-

Build cross product matrices

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, Q> glm::matrixCross3 (vec< 3, T, Q > const & x)
-
- -

Build a cross product matrix.

-

From GLM_GTX_matrix_cross_product extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::matrixCross4 (vec< 3, T, Q > const & x)
-
- -

Build a cross product matrix.

-

From GLM_GTX_matrix_cross_product extension.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00335.html b/tests/OpenGL/package/glm/doc/api/a00335.html deleted file mode 100644 index 5bcb4351..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00335.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_matrix_decompose - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_matrix_decompose
-
-
- -

Include <glm/gtx/matrix_decompose.hpp> to use the features of this extension. -More...

- - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL bool decompose (mat< 4, 4, T, Q > const &modelMatrix, vec< 3, T, Q > &scale, qua< T, Q > &orientation, vec< 3, T, Q > &translation, vec< 3, T, Q > &skew, vec< 4, T, Q > &perspective)
 Decomposes a model matrix to translations, rotation and scale components. More...
 
-

Detailed Description

-

Include <glm/gtx/matrix_decompose.hpp> to use the features of this extension.

-

Decomposes a model matrix to translations, rotation and scale components

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::decompose (mat< 4, 4, T, Q > const & modelMatrix,
vec< 3, T, Q > & scale,
qua< T, Q > & orientation,
vec< 3, T, Q > & translation,
vec< 3, T, Q > & skew,
vec< 4, T, Q > & perspective 
)
-
- -

Decomposes a model matrix to translations, rotation and scale components.

-
See also
GLM_GTX_matrix_decompose
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00336.html b/tests/OpenGL/package/glm/doc/api/a00336.html deleted file mode 100644 index b73f45f6..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00336.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_matrix_factorisation - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_matrix_factorisation
-
-
- -

Include <glm/gtx/matrix_factorisation.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - -

-Functions

template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL mat< C, R, T, Q > fliplr (mat< C, R, T, Q > const &in)
 Flips the matrix columns right and left. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL mat< C, R, T, Q > flipud (mat< C, R, T, Q > const &in)
 Flips the matrix rows up and down. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL void qr_decompose (mat< C, R, T, Q > const &in, mat<(C< R?C:R), R, T, Q > &q, mat< C,(C< R?C:R), T, Q > &r)
 Performs QR factorisation of a matrix. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL void rq_decompose (mat< C, R, T, Q > const &in, mat<(C< R?C:R), R, T, Q > &r, mat< C,(C< R?C:R), T, Q > &q)
 Performs RQ factorisation of a matrix. More...
 
-

Detailed Description

-

Include <glm/gtx/matrix_factorisation.hpp> to use the features of this extension.

-

Functions to factor matrices in various forms

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<C, R, T, Q> glm::fliplr (mat< C, R, T, Q > const & in)
-
- -

Flips the matrix columns right and left.

-

From GLM_GTX_matrix_factorisation extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<C, R, T, Q> glm::flipud (mat< C, R, T, Q > const & in)
-
- -

Flips the matrix rows up and down.

-

From GLM_GTX_matrix_factorisation extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL void glm::qr_decompose (mat< C, R, T, Q > const & in)
-
- -

Performs QR factorisation of a matrix.

-

Returns 2 matrices, q and r, such that the columns of q are orthonormal and span the same subspace than those of the input matrix, r is an upper triangular matrix, and q*r=in. Given an n-by-m input matrix, q has dimensions min(n,m)-by-m, and r has dimensions n-by-min(n,m).

-

From GLM_GTX_matrix_factorisation extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL void glm::rq_decompose (mat< C, R, T, Q > const & in)
-
- -

Performs RQ factorisation of a matrix.

-

Returns 2 matrices, r and q, such that r is an upper triangular matrix, the rows of q are orthonormal and span the same subspace than those of the input matrix, and r*q=in. Note that in the context of RQ factorisation, the diagonal is seen as starting in the lower-right corner of the matrix, instead of the usual upper-left. Given an n-by-m input matrix, r has dimensions min(n,m)-by-m, and q has dimensions n-by-min(n,m).

-

From GLM_GTX_matrix_factorisation extension.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00337.html b/tests/OpenGL/package/glm/doc/api/a00337.html deleted file mode 100644 index 56bedcf9..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00337.html +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_matrix_interpolation - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_matrix_interpolation
-
-
- -

Include <glm/gtx/matrix_interpolation.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL void axisAngle (mat< 4, 4, T, Q > const &Mat, vec< 3, T, Q > &Axis, T &Angle)
 Get the axis and angle of the rotation from a matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > axisAngleMatrix (vec< 3, T, Q > const &Axis, T const Angle)
 Build a matrix from axis and angle. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > extractMatrixRotation (mat< 4, 4, T, Q > const &Mat)
 Extracts the rotation part of a matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > interpolate (mat< 4, 4, T, Q > const &m1, mat< 4, 4, T, Q > const &m2, T const Delta)
 Build a interpolation of 4 * 4 matrixes. More...
 
-

Detailed Description

-

Include <glm/gtx/matrix_interpolation.hpp> to use the features of this extension.

-

Allows to directly interpolate two matrices.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL void glm::axisAngle (mat< 4, 4, T, Q > const & Mat,
vec< 3, T, Q > & Axis,
T & Angle 
)
-
- -

Get the axis and angle of the rotation from a matrix.

-

From GLM_GTX_matrix_interpolation extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::axisAngleMatrix (vec< 3, T, Q > const & Axis,
T const Angle 
)
-
- -

Build a matrix from axis and angle.

-

From GLM_GTX_matrix_interpolation extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::extractMatrixRotation (mat< 4, 4, T, Q > const & Mat)
-
- -

Extracts the rotation part of a matrix.

-

From GLM_GTX_matrix_interpolation extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::interpolate (mat< 4, 4, T, Q > const & m1,
mat< 4, 4, T, Q > const & m2,
T const Delta 
)
-
- -

Build a interpolation of 4 * 4 matrixes.

-

From GLM_GTX_matrix_interpolation extension. Warning! works only with rotation and/or translation matrixes, scale will generate unexpected results.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00338.html b/tests/OpenGL/package/glm/doc/api/a00338.html deleted file mode 100644 index 159c92a3..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00338.html +++ /dev/null @@ -1,475 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_matrix_major_storage - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_matrix_major_storage
-
-
- -

Include <glm/gtx/matrix_major_storage.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 2, T, Q > colMajor2 (vec< 2, T, Q > const &v1, vec< 2, T, Q > const &v2)
 Build a column major matrix from column vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 2, T, Q > colMajor2 (mat< 2, 2, T, Q > const &m)
 Build a column major matrix from other matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > colMajor3 (vec< 3, T, Q > const &v1, vec< 3, T, Q > const &v2, vec< 3, T, Q > const &v3)
 Build a column major matrix from column vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > colMajor3 (mat< 3, 3, T, Q > const &m)
 Build a column major matrix from other matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > colMajor4 (vec< 4, T, Q > const &v1, vec< 4, T, Q > const &v2, vec< 4, T, Q > const &v3, vec< 4, T, Q > const &v4)
 Build a column major matrix from column vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > colMajor4 (mat< 4, 4, T, Q > const &m)
 Build a column major matrix from other matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 2, T, Q > rowMajor2 (vec< 2, T, Q > const &v1, vec< 2, T, Q > const &v2)
 Build a row major matrix from row vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 2, T, Q > rowMajor2 (mat< 2, 2, T, Q > const &m)
 Build a row major matrix from other matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > rowMajor3 (vec< 3, T, Q > const &v1, vec< 3, T, Q > const &v2, vec< 3, T, Q > const &v3)
 Build a row major matrix from row vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > rowMajor3 (mat< 3, 3, T, Q > const &m)
 Build a row major matrix from other matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > rowMajor4 (vec< 4, T, Q > const &v1, vec< 4, T, Q > const &v2, vec< 4, T, Q > const &v3, vec< 4, T, Q > const &v4)
 Build a row major matrix from row vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > rowMajor4 (mat< 4, 4, T, Q > const &m)
 Build a row major matrix from other matrix. More...
 
-

Detailed Description

-

Include <glm/gtx/matrix_major_storage.hpp> to use the features of this extension.

-

Build matrices with specific matrix order, row or column

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<2, 2, T, Q> glm::colMajor2 (vec< 2, T, Q > const & v1,
vec< 2, T, Q > const & v2 
)
-
- -

Build a column major matrix from column vectors.

-

From GLM_GTX_matrix_major_storage extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<2, 2, T, Q> glm::colMajor2 (mat< 2, 2, T, Q > const & m)
-
- -

Build a column major matrix from other matrix.

-

From GLM_GTX_matrix_major_storage extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, Q> glm::colMajor3 (vec< 3, T, Q > const & v1,
vec< 3, T, Q > const & v2,
vec< 3, T, Q > const & v3 
)
-
- -

Build a column major matrix from column vectors.

-

From GLM_GTX_matrix_major_storage extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, Q> glm::colMajor3 (mat< 3, 3, T, Q > const & m)
-
- -

Build a column major matrix from other matrix.

-

From GLM_GTX_matrix_major_storage extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::colMajor4 (vec< 4, T, Q > const & v1,
vec< 4, T, Q > const & v2,
vec< 4, T, Q > const & v3,
vec< 4, T, Q > const & v4 
)
-
- -

Build a column major matrix from column vectors.

-

From GLM_GTX_matrix_major_storage extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::colMajor4 (mat< 4, 4, T, Q > const & m)
-
- -

Build a column major matrix from other matrix.

-

From GLM_GTX_matrix_major_storage extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<2, 2, T, Q> glm::rowMajor2 (vec< 2, T, Q > const & v1,
vec< 2, T, Q > const & v2 
)
-
- -

Build a row major matrix from row vectors.

-

From GLM_GTX_matrix_major_storage extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<2, 2, T, Q> glm::rowMajor2 (mat< 2, 2, T, Q > const & m)
-
- -

Build a row major matrix from other matrix.

-

From GLM_GTX_matrix_major_storage extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, Q> glm::rowMajor3 (vec< 3, T, Q > const & v1,
vec< 3, T, Q > const & v2,
vec< 3, T, Q > const & v3 
)
-
- -

Build a row major matrix from row vectors.

-

From GLM_GTX_matrix_major_storage extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, Q> glm::rowMajor3 (mat< 3, 3, T, Q > const & m)
-
- -

Build a row major matrix from other matrix.

-

From GLM_GTX_matrix_major_storage extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::rowMajor4 (vec< 4, T, Q > const & v1,
vec< 4, T, Q > const & v2,
vec< 4, T, Q > const & v3,
vec< 4, T, Q > const & v4 
)
-
- -

Build a row major matrix from row vectors.

-

From GLM_GTX_matrix_major_storage extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::rowMajor4 (mat< 4, 4, T, Q > const & m)
-
- -

Build a row major matrix from other matrix.

-

From GLM_GTX_matrix_major_storage extension.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00339.html b/tests/OpenGL/package/glm/doc/api/a00339.html deleted file mode 100644 index 17bbf924..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00339.html +++ /dev/null @@ -1,379 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_matrix_operation - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_matrix_operation
-
-
- -

Include <glm/gtx/matrix_operation.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 2, T, Q > adjugate (mat< 2, 2, T, Q > const &m)
 Build an adjugate matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > adjugate (mat< 3, 3, T, Q > const &m)
 Build an adjugate matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > adjugate (mat< 4, 4, T, Q > const &m)
 Build an adjugate matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 2, T, Q > diagonal2x2 (vec< 2, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 3, T, Q > diagonal2x3 (vec< 2, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 2, 4, T, Q > diagonal2x4 (vec< 2, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 2, T, Q > diagonal3x2 (vec< 2, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > diagonal3x3 (vec< 3, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 4, T, Q > diagonal3x4 (vec< 3, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 2, T, Q > diagonal4x2 (vec< 2, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 3, T, Q > diagonal4x3 (vec< 3, T, Q > const &v)
 Build a diagonal matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > diagonal4x4 (vec< 4, T, Q > const &v)
 Build a diagonal matrix. More...
 
-

Detailed Description

-

Include <glm/gtx/matrix_operation.hpp> to use the features of this extension.

-

Build diagonal matrices from vectors.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<2, 2, T, Q> glm::adjugate (mat< 2, 2, T, Q > const & m)
-
- -

Build an adjugate matrix.

-

From GLM_GTX_matrix_operation extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, Q> glm::adjugate (mat< 3, 3, T, Q > const & m)
-
- -

Build an adjugate matrix.

-

From GLM_GTX_matrix_operation extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::adjugate (mat< 4, 4, T, Q > const & m)
-
- -

Build an adjugate matrix.

-

From GLM_GTX_matrix_operation extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<2, 2, T, Q> glm::diagonal2x2 (vec< 2, T, Q > const & v)
-
- -

Build a diagonal matrix.

-

From GLM_GTX_matrix_operation extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<2, 3, T, Q> glm::diagonal2x3 (vec< 2, T, Q > const & v)
-
- -

Build a diagonal matrix.

-

From GLM_GTX_matrix_operation extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<2, 4, T, Q> glm::diagonal2x4 (vec< 2, T, Q > const & v)
-
- -

Build a diagonal matrix.

-

From GLM_GTX_matrix_operation extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 2, T, Q> glm::diagonal3x2 (vec< 2, T, Q > const & v)
-
- -

Build a diagonal matrix.

-

From GLM_GTX_matrix_operation extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, Q> glm::diagonal3x3 (vec< 3, T, Q > const & v)
-
- -

Build a diagonal matrix.

-

From GLM_GTX_matrix_operation extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 4, T, Q> glm::diagonal3x4 (vec< 3, T, Q > const & v)
-
- -

Build a diagonal matrix.

-

From GLM_GTX_matrix_operation extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 2, T, Q> glm::diagonal4x2 (vec< 2, T, Q > const & v)
-
- -

Build a diagonal matrix.

-

From GLM_GTX_matrix_operation extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 3, T, Q> glm::diagonal4x3 (vec< 3, T, Q > const & v)
-
- -

Build a diagonal matrix.

-

From GLM_GTX_matrix_operation extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::diagonal4x4 (vec< 4, T, Q > const & v)
-
- -

Build a diagonal matrix.

-

From GLM_GTX_matrix_operation extension.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00340.html b/tests/OpenGL/package/glm/doc/api/a00340.html deleted file mode 100644 index 626ab516..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00340.html +++ /dev/null @@ -1,367 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_matrix_query - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_matrix_query
-
-
- -

Include <glm/gtx/matrix_query.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t C, length_t R, typename T , qualifier Q, template< length_t, length_t, typename, qualifier > class matType>
GLM_FUNC_DECL bool isIdentity (matType< C, R, T, Q > const &m, T const &epsilon)
 Return whether a matrix is an identity matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool isNormalized (mat< 2, 2, T, Q > const &m, T const &epsilon)
 Return whether a matrix is a normalized matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool isNormalized (mat< 3, 3, T, Q > const &m, T const &epsilon)
 Return whether a matrix is a normalized matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool isNormalized (mat< 4, 4, T, Q > const &m, T const &epsilon)
 Return whether a matrix is a normalized matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool isNull (mat< 2, 2, T, Q > const &m, T const &epsilon)
 Return whether a matrix a null matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool isNull (mat< 3, 3, T, Q > const &m, T const &epsilon)
 Return whether a matrix a null matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL bool isNull (mat< 4, 4, T, Q > const &m, T const &epsilon)
 Return whether a matrix is a null matrix. More...
 
template<length_t C, length_t R, typename T , qualifier Q, template< length_t, length_t, typename, qualifier > class matType>
GLM_FUNC_DECL bool isOrthogonal (matType< C, R, T, Q > const &m, T const &epsilon)
 Return whether a matrix is an orthonormalized matrix. More...
 
-

Detailed Description

-

Include <glm/gtx/matrix_query.hpp> to use the features of this extension.

-

Query to evaluate matrix properties

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::isIdentity (matType< C, R, T, Q > const & m,
T const & epsilon 
)
-
- -

Return whether a matrix is an identity matrix.

-

From GLM_GTX_matrix_query extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::isNormalized (mat< 2, 2, T, Q > const & m,
T const & epsilon 
)
-
- -

Return whether a matrix is a normalized matrix.

-

From GLM_GTX_matrix_query extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::isNormalized (mat< 3, 3, T, Q > const & m,
T const & epsilon 
)
-
- -

Return whether a matrix is a normalized matrix.

-

From GLM_GTX_matrix_query extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::isNormalized (mat< 4, 4, T, Q > const & m,
T const & epsilon 
)
-
- -

Return whether a matrix is a normalized matrix.

-

From GLM_GTX_matrix_query extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::isNull (mat< 2, 2, T, Q > const & m,
T const & epsilon 
)
-
- -

Return whether a matrix a null matrix.

-

From GLM_GTX_matrix_query extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::isNull (mat< 3, 3, T, Q > const & m,
T const & epsilon 
)
-
- -

Return whether a matrix a null matrix.

-

From GLM_GTX_matrix_query extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::isNull (mat< 4, 4, T, Q > const & m,
T const & epsilon 
)
-
- -

Return whether a matrix is a null matrix.

-

From GLM_GTX_matrix_query extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::isOrthogonal (matType< C, R, T, Q > const & m,
T const & epsilon 
)
-
- -

Return whether a matrix is an orthonormalized matrix.

-

From GLM_GTX_matrix_query extension.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00341.html b/tests/OpenGL/package/glm/doc/api/a00341.html deleted file mode 100644 index c108f3fb..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00341.html +++ /dev/null @@ -1,298 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_matrix_transform_2d - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_matrix_transform_2d
-
-
- -

Include <glm/gtx/matrix_transform_2d.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER mat< 3, 3, T, Q > rotate (mat< 3, 3, T, Q > const &m, T angle)
 Builds a rotation 3 * 3 matrix created from an angle. More...
 
template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER mat< 3, 3, T, Q > scale (mat< 3, 3, T, Q > const &m, vec< 2, T, Q > const &v)
 Builds a scale 3 * 3 matrix created from a vector of 2 components. More...
 
template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER mat< 3, 3, T, Q > shearX (mat< 3, 3, T, Q > const &m, T y)
 Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER mat< 3, 3, T, Q > shearY (mat< 3, 3, T, Q > const &m, T x)
 Builds a vertical (parallel to the y axis) shear 3 * 3 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_QUALIFIER mat< 3, 3, T, Q > translate (mat< 3, 3, T, Q > const &m, vec< 2, T, Q > const &v)
 Builds a translation 3 * 3 matrix created from a vector of 2 components. More...
 
-

Detailed Description

-

Include <glm/gtx/matrix_transform_2d.hpp> to use the features of this extension.

-

Defines functions that generate common 2d transformation matrices.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> glm::rotate (mat< 3, 3, T, Q > const & m,
angle 
)
-
- -

Builds a rotation 3 * 3 matrix created from an angle.

-
Parameters
- - - -
mInput matrix multiplied by this translation matrix.
angleRotation angle expressed in radians.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> glm::scale (mat< 3, 3, T, Q > const & m,
vec< 2, T, Q > const & v 
)
-
- -

Builds a scale 3 * 3 matrix created from a vector of 2 components.

-
Parameters
- - - -
mInput matrix multiplied by this translation matrix.
vCoordinates of a scale vector.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> glm::shearX (mat< 3, 3, T, Q > const & m,
y 
)
-
- -

Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix.

-
Parameters
- - - -
mInput matrix multiplied by this translation matrix.
yShear factor.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> glm::shearY (mat< 3, 3, T, Q > const & m,
x 
)
-
- -

Builds a vertical (parallel to the y axis) shear 3 * 3 matrix.

-
Parameters
- - - -
mInput matrix multiplied by this translation matrix.
xShear factor.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_QUALIFIER mat<3, 3, T, Q> glm::translate (mat< 3, 3, T, Q > const & m,
vec< 2, T, Q > const & v 
)
-
- -

Builds a translation 3 * 3 matrix created from a vector of 2 components.

-
Parameters
- - - -
mInput matrix multiplied by this translation matrix.
vCoordinates of a translation vector.
-
-
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00342.html b/tests/OpenGL/package/glm/doc/api/a00342.html deleted file mode 100644 index 238176c3..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00342.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_mixed_producte - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_mixed_producte
-
-
- -

Include <glm/gtx/mixed_product.hpp> to use the features of this extension. -More...

- - - - - - -

-Functions

-template<typename T , qualifier Q>
GLM_FUNC_DECL T mixedProduct (vec< 3, T, Q > const &v1, vec< 3, T, Q > const &v2, vec< 3, T, Q > const &v3)
 Mixed product of 3 vectors (from GLM_GTX_mixed_product extension)
 
-

Detailed Description

-

Include <glm/gtx/mixed_product.hpp> to use the features of this extension.

-

Mixed product of 3 vectors.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00343.html b/tests/OpenGL/package/glm/doc/api/a00343.html deleted file mode 100644 index 779239f5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00343.html +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_norm - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- - -
-
- -

Include <glm/gtx/norm.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T distance2 (vec< L, T, Q > const &p0, vec< L, T, Q > const &p1)
 Returns the squared distance between p0 and p1, i.e., length2(p0 - p1). More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T l1Norm (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)
 Returns the L1 norm between x and y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T l1Norm (vec< 3, T, Q > const &v)
 Returns the L1 norm of v. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T l2Norm (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)
 Returns the L2 norm between x and y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T l2Norm (vec< 3, T, Q > const &x)
 Returns the L2 norm of v. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T length2 (vec< L, T, Q > const &x)
 Returns the squared length of x. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T lMaxNorm (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)
 Returns the LMax norm between x and y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T lMaxNorm (vec< 3, T, Q > const &x)
 Returns the LMax norm of v. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T lxNorm (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y, unsigned int Depth)
 Returns the L norm between x and y. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T lxNorm (vec< 3, T, Q > const &x, unsigned int Depth)
 Returns the L norm of v. More...
 
-

Detailed Description

-

Include <glm/gtx/norm.hpp> to use the features of this extension.

-

Various ways to compute vector norms.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::distance2 (vec< L, T, Q > const & p0,
vec< L, T, Q > const & p1 
)
-
- -

Returns the squared distance between p0 and p1, i.e., length2(p0 - p1).

-

From GLM_GTX_norm extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::l1Norm (vec< 3, T, Q > const & x,
vec< 3, T, Q > const & y 
)
-
- -

Returns the L1 norm between x and y.

-

From GLM_GTX_norm extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::l1Norm (vec< 3, T, Q > const & v)
-
- -

Returns the L1 norm of v.

-

From GLM_GTX_norm extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::l2Norm (vec< 3, T, Q > const & x,
vec< 3, T, Q > const & y 
)
-
- -

Returns the L2 norm between x and y.

-

From GLM_GTX_norm extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::l2Norm (vec< 3, T, Q > const & x)
-
- -

Returns the L2 norm of v.

-

From GLM_GTX_norm extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::length2 (vec< L, T, Q > const & x)
-
- -

Returns the squared length of x.

-

From GLM_GTX_norm extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::lMaxNorm (vec< 3, T, Q > const & x,
vec< 3, T, Q > const & y 
)
-
- -

Returns the LMax norm between x and y.

-

From GLM_GTX_norm extension.

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::lMaxNorm (vec< 3, T, Q > const & x)
-
- -

Returns the LMax norm of v.

-

From GLM_GTX_norm extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::lxNorm (vec< 3, T, Q > const & x,
vec< 3, T, Q > const & y,
unsigned int Depth 
)
-
- -

Returns the L norm between x and y.

-

From GLM_GTX_norm extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::lxNorm (vec< 3, T, Q > const & x,
unsigned int Depth 
)
-
- -

Returns the L norm of v.

-

From GLM_GTX_norm extension.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00344.html b/tests/OpenGL/package/glm/doc/api/a00344.html deleted file mode 100644 index 8f08abff..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00344.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_normal - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
-
-
- -

Include <glm/gtx/normal.hpp> to use the features of this extension. -More...

- - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > triangleNormal (vec< 3, T, Q > const &p1, vec< 3, T, Q > const &p2, vec< 3, T, Q > const &p3)
 Computes triangle normal from triangle points. More...
 
-

Detailed Description

-

Include <glm/gtx/normal.hpp> to use the features of this extension.

-

Compute the normal of a triangle.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::triangleNormal (vec< 3, T, Q > const & p1,
vec< 3, T, Q > const & p2,
vec< 3, T, Q > const & p3 
)
-
- -

Computes triangle normal from triangle points.

-
See also
GLM_GTX_normal
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00345.html b/tests/OpenGL/package/glm/doc/api/a00345.html deleted file mode 100644 index 29a165b8..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00345.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_normalize_dot - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_normalize_dot
-
-
- -

Include <glm/gtx/normalized_dot.hpp> to use the features of this extension. -More...

- - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T fastNormalizeDot (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Normalize parameters and returns the dot product of x and y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T normalizeDot (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Normalize parameters and returns the dot product of x and y. More...
 
-

Detailed Description

-

Include <glm/gtx/normalized_dot.hpp> to use the features of this extension.

-

Dot product of vectors that need to be normalize with a single square root.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::fastNormalizeDot (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Normalize parameters and returns the dot product of x and y.

-

Faster that dot(fastNormalize(x), fastNormalize(y)).

-
See also
GLM_GTX_normalize_dot extension.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::normalizeDot (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Normalize parameters and returns the dot product of x and y.

-

It's faster that dot(normalize(x), normalize(y)).

-
See also
GLM_GTX_normalize_dot extension.
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00346.html b/tests/OpenGL/package/glm/doc/api/a00346.html deleted file mode 100644 index d782196a..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00346.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_number_precision - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_number_precision
-
-
- -

Include <glm/gtx/number_precision.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

-typedef f32 f32mat1
 Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
 
-typedef f32 f32mat1x1
 Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
 
-typedef f32 f32vec1
 Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
 
-typedef f64 f64mat1
 Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
 
-typedef f64 f64mat1x1
 Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
 
-typedef f64 f64vec1
 Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
 
-typedef u16 u16vec1
 16bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
 
-typedef u32 u32vec1
 32bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
 
-typedef u64 u64vec1
 64bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
 
-typedef u8 u8vec1
 8bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
 
-

Detailed Description

-

Include <glm/gtx/number_precision.hpp> to use the features of this extension.

-

Defined size types.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00347.html b/tests/OpenGL/package/glm/doc/api/a00347.html deleted file mode 100644 index 95ac2cbe..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00347.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_optimum_pow - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_optimum_pow
-
-
- -

Include <glm/gtx/optimum_pow.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType pow2 (genType const &x)
 Returns x raised to the power of 2. More...
 
template<typename genType >
GLM_FUNC_DECL genType pow3 (genType const &x)
 Returns x raised to the power of 3. More...
 
template<typename genType >
GLM_FUNC_DECL genType pow4 (genType const &x)
 Returns x raised to the power of 4. More...
 
-

Detailed Description

-

Include <glm/gtx/optimum_pow.hpp> to use the features of this extension.

-

Integer exponentiation of power functions.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::gtx::pow2 (genType const & x)
-
- -

Returns x raised to the power of 2.

-
See also
GLM_GTX_optimum_pow
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::gtx::pow3 (genType const & x)
-
- -

Returns x raised to the power of 3.

-
See also
GLM_GTX_optimum_pow
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::gtx::pow4 (genType const & x)
-
- -

Returns x raised to the power of 4.

-
See also
GLM_GTX_optimum_pow
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00348.html b/tests/OpenGL/package/glm/doc/api/a00348.html deleted file mode 100644 index 199adb5b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00348.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_orthonormalize - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_orthonormalize
-
-
- -

Include <glm/gtx/orthonormalize.hpp> to use the features of this extension. -More...

- - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > orthonormalize (mat< 3, 3, T, Q > const &m)
 Returns the orthonormalized matrix of m. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > orthonormalize (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)
 Orthonormalizes x according y. More...
 
-

Detailed Description

-

Include <glm/gtx/orthonormalize.hpp> to use the features of this extension.

-

Orthonormalize matrices.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, Q> glm::orthonormalize (mat< 3, 3, T, Q > const & m)
-
- -

Returns the orthonormalized matrix of m.

-
See also
GLM_GTX_orthonormalize
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::orthonormalize (vec< 3, T, Q > const & x,
vec< 3, T, Q > const & y 
)
-
- -

Orthonormalizes x according y.

-
See also
GLM_GTX_orthonormalize
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00349.html b/tests/OpenGL/package/glm/doc/api/a00349.html deleted file mode 100644 index 05ba05a6..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00349.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_perpendicular - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_perpendicular
-
-
- -

Include <glm/gtx/perpendicular.hpp> to use the features of this extension. -More...

- - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType perp (genType const &x, genType const &Normal)
 Projects x a perpendicular axis of Normal. More...
 
-

Detailed Description

-

Include <glm/gtx/perpendicular.hpp> to use the features of this extension.

-

Perpendicular of a vector from other one

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::perp (genType const & x,
genType const & Normal 
)
-
- -

Projects x a perpendicular axis of Normal.

-

From GLM_GTX_perpendicular extension.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00350.html b/tests/OpenGL/package/glm/doc/api/a00350.html deleted file mode 100644 index 88f40dec..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00350.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_polar_coordinates - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_polar_coordinates
-
-
- -

Include <glm/gtx/polar_coordinates.hpp> to use the features of this extension. -More...

- - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > euclidean (vec< 2, T, Q > const &polar)
 Convert Polar to Euclidean coordinates. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > polar (vec< 3, T, Q > const &euclidean)
 Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude. More...
 
-

Detailed Description

-

Include <glm/gtx/polar_coordinates.hpp> to use the features of this extension.

-

Conversion from Euclidean space to polar space and revert.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::euclidean (vec< 2, T, Q > const & polar)
-
- -

Convert Polar to Euclidean coordinates.

-
See also
GLM_GTX_polar_coordinates
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::polar (vec< 3, T, Q > const & euclidean)
-
- -

Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude.

-
See also
GLM_GTX_polar_coordinates
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00351.html b/tests/OpenGL/package/glm/doc/api/a00351.html deleted file mode 100644 index 9eedf7ba..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00351.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_projection - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_projection
-
-
- -

Include <glm/gtx/projection.hpp> to use the features of this extension. -More...

- - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType proj (genType const &x, genType const &Normal)
 Projects x on Normal. More...
 
-

Detailed Description

-

Include <glm/gtx/projection.hpp> to use the features of this extension.

-

Projection of a vector to other one

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::proj (genType const & x,
genType const & Normal 
)
-
- -

Projects x on Normal.

-
Parameters
- - - -
[in]xA vector to project
[in]NormalA normal that doesn't need to be of unit length.
-
-
-
See also
GLM_GTX_projection
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00352.html b/tests/OpenGL/package/glm/doc/api/a00352.html deleted file mode 100644 index a9c0a0aa..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00352.html +++ /dev/null @@ -1,622 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_quaternion - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_quaternion
-
-
- -

Include <glm/gtx/quaternion.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > cross (qua< T, Q > const &q, vec< 3, T, Q > const &v)
 Compute a cross product between a quaternion and a vector. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > cross (vec< 3, T, Q > const &v, qua< T, Q > const &q)
 Compute a cross product between a vector and a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T extractRealComponent (qua< T, Q > const &q)
 Extract the real component of a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > fastMix (qua< T, Q > const &x, qua< T, Q > const &y, T const &a)
 Quaternion normalized linear interpolation. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > intermediate (qua< T, Q > const &prev, qua< T, Q > const &curr, qua< T, Q > const &next)
 Returns an intermediate control point for squad interpolation. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T length2 (qua< T, Q > const &q)
 Returns the squared length of x. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > quat_identity ()
 Create an identity quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rotate (qua< T, Q > const &q, vec< 3, T, Q > const &v)
 Returns quarternion square root. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > rotate (qua< T, Q > const &q, vec< 4, T, Q > const &v)
 Rotates a 4 components vector by a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > rotation (vec< 3, T, Q > const &orig, vec< 3, T, Q > const &dest)
 Compute the rotation between two vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > shortMix (qua< T, Q > const &x, qua< T, Q > const &y, T const &a)
 Quaternion interpolation using the rotation short path. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > squad (qua< T, Q > const &q1, qua< T, Q > const &q2, qua< T, Q > const &s1, qua< T, Q > const &s2, T const &h)
 Compute a point on a path according squad equation. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > toMat3 (qua< T, Q > const &x)
 Converts a quaternion to a 3 * 3 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > toMat4 (qua< T, Q > const &x)
 Converts a quaternion to a 4 * 4 matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > toQuat (mat< 3, 3, T, Q > const &x)
 Converts a 3 * 3 matrix to a quaternion. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > toQuat (mat< 4, 4, T, Q > const &x)
 Converts a 4 * 4 matrix to a quaternion. More...
 
-

Detailed Description

-

Include <glm/gtx/quaternion.hpp> to use the features of this extension.

-

Extented quaternion types and functions

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::cross (qua< T, Q > const & q,
vec< 3, T, Q > const & v 
)
-
- -

Compute a cross product between a quaternion and a vector.

-
See also
GLM_GTX_quaternion
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::cross (vec< 3, T, Q > const & v,
qua< T, Q > const & q 
)
-
- -

Compute a cross product between a vector and a quaternion.

-
See also
GLM_GTX_quaternion
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::extractRealComponent (qua< T, Q > const & q)
-
- -

Extract the real component of a quaternion.

-
See also
GLM_GTX_quaternion
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::fastMix (qua< T, Q > const & x,
qua< T, Q > const & y,
T const & a 
)
-
- -

Quaternion normalized linear interpolation.

-
See also
GLM_GTX_quaternion
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::intermediate (qua< T, Q > const & prev,
qua< T, Q > const & curr,
qua< T, Q > const & next 
)
-
- -

Returns an intermediate control point for squad interpolation.

-
See also
GLM_GTX_quaternion
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::length2 (qua< T, Q > const & q)
-
- -

Returns the squared length of x.

-
See also
GLM_GTX_quaternion
- -
-
- -
-
- - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::quat_identity ()
-
- -

Create an identity quaternion.

-
See also
GLM_GTX_quaternion
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::rotate (qua< T, Q > const & q,
vec< 3, T, Q > const & v 
)
-
- -

Returns quarternion square root.

-
See also
GLM_GTX_quaternion Rotates a 3 components vector by a quaternion.
-
-GLM_GTX_quaternion
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<4, T, Q> glm::rotate (qua< T, Q > const & q,
vec< 4, T, Q > const & v 
)
-
- -

Rotates a 4 components vector by a quaternion.

-
See also
GLM_GTX_quaternion
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::rotation (vec< 3, T, Q > const & orig,
vec< 3, T, Q > const & dest 
)
-
- -

Compute the rotation between two vectors.

-
Parameters
- - - -
origvector, needs to be normalized
destvector, needs to be normalized
-
-
-
See also
GLM_GTX_quaternion
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::shortMix (qua< T, Q > const & x,
qua< T, Q > const & y,
T const & a 
)
-
- -

Quaternion interpolation using the rotation short path.

-
See also
GLM_GTX_quaternion
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::squad (qua< T, Q > const & q1,
qua< T, Q > const & q2,
qua< T, Q > const & s1,
qua< T, Q > const & s2,
T const & h 
)
-
- -

Compute a point on a path according squad equation.

-

q1 and q2 are control points; s1 and s2 are intermediate control points.

-
See also
GLM_GTX_quaternion
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, Q> glm::toMat3 (qua< T, Q > const & x)
-
- -

Converts a quaternion to a 3 * 3 matrix.

-
See also
GLM_GTX_quaternion
- -

Definition at line 113 of file gtx/quaternion.hpp.

- -

References glm::mat3_cast().

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::toMat4 (qua< T, Q > const & x)
-
- -

Converts a quaternion to a 4 * 4 matrix.

-
See also
GLM_GTX_quaternion
- -

Definition at line 120 of file gtx/quaternion.hpp.

- -

References glm::mat4_cast().

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::toQuat (mat< 3, 3, T, Q > const & x)
-
- -

Converts a 3 * 3 matrix to a quaternion.

-
See also
GLM_GTX_quaternion
- -

Definition at line 127 of file gtx/quaternion.hpp.

- -

References glm::quat_cast().

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::toQuat (mat< 4, 4, T, Q > const & x)
-
- -

Converts a 4 * 4 matrix to a quaternion.

-
See also
GLM_GTX_quaternion
- -

Definition at line 134 of file gtx/quaternion.hpp.

- -

References glm::quat_cast().

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00353.html b/tests/OpenGL/package/glm/doc/api/a00353.html deleted file mode 100644 index a728811c..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00353.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_range - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
-
-
-
-
- -

Include <glm/gtx/range.hpp> to use the features of this extension. -More...

-

Detailed Description

-

Include <glm/gtx/range.hpp> to use the features of this extension.

-

Defines begin and end for vectors and matrices. Useful for range-based for loop. The range is defined over the elements, not over columns or rows (e.g. mat4 has 16 elements).

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00354.html b/tests/OpenGL/package/glm/doc/api/a00354.html deleted file mode 100644 index e14d7ba6..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00354.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_raw_data - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_raw_data
-
-
- -

Include <glm/gtx/raw_data.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - -

-Typedefs

typedef detail::uint8 byte
 Type for byte numbers. More...
 
typedef detail::uint32 dword
 Type for dword numbers. More...
 
typedef detail::uint64 qword
 Type for qword numbers. More...
 
typedef detail::uint16 word
 Type for word numbers. More...
 
-

Detailed Description

-

Include <glm/gtx/raw_data.hpp> to use the features of this extension.

-

Projection of a vector to other one

-

Typedef Documentation

- -
-
- - - - -
typedef detail::uint8 byte
-
- -

Type for byte numbers.

-

From GLM_GTX_raw_data extension.

- -

Definition at line 34 of file raw_data.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint32 dword
-
- -

Type for dword numbers.

-

From GLM_GTX_raw_data extension.

- -

Definition at line 42 of file raw_data.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint64 qword
-
- -

Type for qword numbers.

-

From GLM_GTX_raw_data extension.

- -

Definition at line 46 of file raw_data.hpp.

- -
-
- -
-
- - - - -
typedef detail::uint16 word
-
- -

Type for word numbers.

-

From GLM_GTX_raw_data extension.

- -

Definition at line 38 of file raw_data.hpp.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00355.html b/tests/OpenGL/package/glm/doc/api/a00355.html deleted file mode 100644 index b9807dd3..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00355.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_rotate_normalized_axis - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_rotate_normalized_axis
-
-
- -

Include <glm/gtx/rotate_normalized_axis.hpp> to use the features of this extension. -More...

- - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > rotateNormalizedAxis (mat< 4, 4, T, Q > const &m, T const &angle, vec< 3, T, Q > const &axis)
 Builds a rotation 4 * 4 matrix created from a normalized axis and an angle. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL qua< T, Q > rotateNormalizedAxis (qua< T, Q > const &q, T const &angle, vec< 3, T, Q > const &axis)
 Rotates a quaternion from a vector of 3 components normalized axis and an angle. More...
 
-

Detailed Description

-

Include <glm/gtx/rotate_normalized_axis.hpp> to use the features of this extension.

-

Quaternions and matrices rotations around normalized axis.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::rotateNormalizedAxis (mat< 4, 4, T, Q > const & m,
T const & angle,
vec< 3, T, Q > const & axis 
)
-
- -

Builds a rotation 4 * 4 matrix created from a normalized axis and an angle.

-
Parameters
- - - - -
mInput matrix multiplied by this rotation matrix.
angleRotation angle expressed in radians.
axisRotation axis, must be normalized.
-
-
-
Template Parameters
- - -
TValue type used to build the matrix. Currently supported: half (not recommended), float or double.
-
-
-
See also
GLM_GTX_rotate_normalized_axis
-
-- rotate(T angle, T x, T y, T z)
-
-- rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z)
-
-- rotate(T angle, vec<3, T, Q> const& v)
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL qua<T, Q> glm::rotateNormalizedAxis (qua< T, Q > const & q,
T const & angle,
vec< 3, T, Q > const & axis 
)
-
- -

Rotates a quaternion from a vector of 3 components normalized axis and an angle.

-
Parameters
- - - - -
qSource orientation
angleAngle expressed in radians.
axisNormalized axis of the rotation, must be normalized.
-
-
-
See also
GLM_GTX_rotate_normalized_axis
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00356.html b/tests/OpenGL/package/glm/doc/api/a00356.html deleted file mode 100644 index 3e6441b5..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00356.html +++ /dev/null @@ -1,492 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_rotate_vector - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_rotate_vector
-
-
- -

Include <glm/gtx/rotate_vector.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > orientation (vec< 3, T, Q > const &Normal, vec< 3, T, Q > const &Up)
 Build a rotation matrix from a normal and a up vector. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 2, T, Q > rotate (vec< 2, T, Q > const &v, T const &angle)
 Rotate a two dimensional vector. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rotate (vec< 3, T, Q > const &v, T const &angle, vec< 3, T, Q > const &normal)
 Rotate a three dimensional vector around an axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > rotate (vec< 4, T, Q > const &v, T const &angle, vec< 3, T, Q > const &normal)
 Rotate a four dimensional vector around an axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rotateX (vec< 3, T, Q > const &v, T const &angle)
 Rotate a three dimensional vector around the X axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > rotateX (vec< 4, T, Q > const &v, T const &angle)
 Rotate a four dimensional vector around the X axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rotateY (vec< 3, T, Q > const &v, T const &angle)
 Rotate a three dimensional vector around the Y axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > rotateY (vec< 4, T, Q > const &v, T const &angle)
 Rotate a four dimensional vector around the Y axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > rotateZ (vec< 3, T, Q > const &v, T const &angle)
 Rotate a three dimensional vector around the Z axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 4, T, Q > rotateZ (vec< 4, T, Q > const &v, T const &angle)
 Rotate a four dimensional vector around the Z axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL vec< 3, T, Q > slerp (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y, T const &a)
 Returns Spherical interpolation between two vectors. More...
 
-

Detailed Description

-

Include <glm/gtx/rotate_vector.hpp> to use the features of this extension.

-

Function to directly rotate a vector

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::orientation (vec< 3, T, Q > const & Normal,
vec< 3, T, Q > const & Up 
)
-
- -

Build a rotation matrix from a normal and a up vector.

-

From GLM_GTX_rotate_vector extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<2, T, Q> glm::rotate (vec< 2, T, Q > const & v,
T const & angle 
)
-
- -

Rotate a two dimensional vector.

-

From GLM_GTX_rotate_vector extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::rotate (vec< 3, T, Q > const & v,
T const & angle,
vec< 3, T, Q > const & normal 
)
-
- -

Rotate a three dimensional vector around an axis.

-

From GLM_GTX_rotate_vector extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<4, T, Q> glm::rotate (vec< 4, T, Q > const & v,
T const & angle,
vec< 3, T, Q > const & normal 
)
-
- -

Rotate a four dimensional vector around an axis.

-

From GLM_GTX_rotate_vector extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::rotateX (vec< 3, T, Q > const & v,
T const & angle 
)
-
- -

Rotate a three dimensional vector around the X axis.

-

From GLM_GTX_rotate_vector extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<4, T, Q> glm::rotateX (vec< 4, T, Q > const & v,
T const & angle 
)
-
- -

Rotate a four dimensional vector around the X axis.

-

From GLM_GTX_rotate_vector extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::rotateY (vec< 3, T, Q > const & v,
T const & angle 
)
-
- -

Rotate a three dimensional vector around the Y axis.

-

From GLM_GTX_rotate_vector extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<4, T, Q> glm::rotateY (vec< 4, T, Q > const & v,
T const & angle 
)
-
- -

Rotate a four dimensional vector around the Y axis.

-

From GLM_GTX_rotate_vector extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::rotateZ (vec< 3, T, Q > const & v,
T const & angle 
)
-
- -

Rotate a three dimensional vector around the Z axis.

-

From GLM_GTX_rotate_vector extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<4, T, Q> glm::rotateZ (vec< 4, T, Q > const & v,
T const & angle 
)
-
- -

Rotate a four dimensional vector around the Z axis.

-

From GLM_GTX_rotate_vector extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<3, T, Q> glm::slerp (vec< 3, T, Q > const & x,
vec< 3, T, Q > const & y,
T const & a 
)
-
- -

Returns Spherical interpolation between two vectors.

-
Parameters
- - - - -
xA first vector
yA second vector
aInterpolation factor. The interpolation is defined beyond the range [0, 1].
-
-
-
See also
GLM_GTX_rotate_vector
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00357.html b/tests/OpenGL/package/glm/doc/api/a00357.html deleted file mode 100644 index 78e85e33..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00357.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_scalar_relational - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
-
-
GLM_GTX_scalar_relational
-
-
- -

Include <glm/gtx/scalar_relational.hpp> to use the features of this extension. -More...

-

Include <glm/gtx/scalar_relational.hpp> to use the features of this extension.

-

Extend a position from a source to a position at a defined length.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00358.html b/tests/OpenGL/package/glm/doc/api/a00358.html deleted file mode 100644 index 6b1f77bf..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00358.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_spline - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
-
-
- -

Include <glm/gtx/spline.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType catmullRom (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
 Return a point from a catmull rom curve. More...
 
template<typename genType >
GLM_FUNC_DECL genType cubic (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)
 Return a point from a cubic curve. More...
 
template<typename genType >
GLM_FUNC_DECL genType hermite (genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)
 Return a point from a hermite curve. More...
 
-

Detailed Description

-

Include <glm/gtx/spline.hpp> to use the features of this extension.

-

Spline functions

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::catmullRom (genType const & v1,
genType const & v2,
genType const & v3,
genType const & v4,
typename genType::value_type const & s 
)
-
- -

Return a point from a catmull rom curve.

-
See also
GLM_GTX_spline extension.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::cubic (genType const & v1,
genType const & v2,
genType const & v3,
genType const & v4,
typename genType::value_type const & s 
)
-
- -

Return a point from a cubic curve.

-
See also
GLM_GTX_spline extension.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL genType glm::hermite (genType const & v1,
genType const & t1,
genType const & v2,
genType const & t2,
typename genType::value_type const & s 
)
-
- -

Return a point from a hermite curve.

-
See also
GLM_GTX_spline extension.
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00359.html b/tests/OpenGL/package/glm/doc/api/a00359.html deleted file mode 100644 index 4bccea24..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00359.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_std_based_type - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_std_based_type
-
-
- -

Include <glm/gtx/std_based_type.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef vec< 1, std::size_t, defaultp > size1
 Vector type based of one std::size_t component. More...
 
typedef vec< 1, std::size_t, defaultp > size1_t
 Vector type based of one std::size_t component. More...
 
typedef vec< 2, std::size_t, defaultp > size2
 Vector type based of two std::size_t components. More...
 
typedef vec< 2, std::size_t, defaultp > size2_t
 Vector type based of two std::size_t components. More...
 
typedef vec< 3, std::size_t, defaultp > size3
 Vector type based of three std::size_t components. More...
 
typedef vec< 3, std::size_t, defaultp > size3_t
 Vector type based of three std::size_t components. More...
 
typedef vec< 4, std::size_t, defaultp > size4
 Vector type based of four std::size_t components. More...
 
typedef vec< 4, std::size_t, defaultp > size4_t
 Vector type based of four std::size_t components. More...
 
-

Detailed Description

-

Include <glm/gtx/std_based_type.hpp> to use the features of this extension.

-

Adds vector types based on STL value types.

-

Typedef Documentation

- -
-
- - - - -
typedef vec<1, std::size_t, defaultp> size1
-
- -

Vector type based of one std::size_t component.

-
See also
GLM_GTX_std_based_type
- -

Definition at line 35 of file std_based_type.hpp.

- -
-
- -
-
- - - - -
typedef vec<1, std::size_t, defaultp> size1_t
-
- -

Vector type based of one std::size_t component.

-
See also
GLM_GTX_std_based_type
- -

Definition at line 51 of file std_based_type.hpp.

- -
-
- -
-
- - - - -
typedef vec<2, std::size_t, defaultp> size2
-
- -

Vector type based of two std::size_t components.

-
See also
GLM_GTX_std_based_type
- -

Definition at line 39 of file std_based_type.hpp.

- -
-
- -
-
- - - - -
typedef vec<2, std::size_t, defaultp> size2_t
-
- -

Vector type based of two std::size_t components.

-
See also
GLM_GTX_std_based_type
- -

Definition at line 55 of file std_based_type.hpp.

- -
-
- -
-
- - - - -
typedef vec<3, std::size_t, defaultp> size3
-
- -

Vector type based of three std::size_t components.

-
See also
GLM_GTX_std_based_type
- -

Definition at line 43 of file std_based_type.hpp.

- -
-
- -
-
- - - - -
typedef vec<3, std::size_t, defaultp> size3_t
-
- -

Vector type based of three std::size_t components.

-
See also
GLM_GTX_std_based_type
- -

Definition at line 59 of file std_based_type.hpp.

- -
-
- -
-
- - - - -
typedef vec<4, std::size_t, defaultp> size4
-
- -

Vector type based of four std::size_t components.

-
See also
GLM_GTX_std_based_type
- -

Definition at line 47 of file std_based_type.hpp.

- -
-
- -
-
- - - - -
typedef vec<4, std::size_t, defaultp> size4_t
-
- -

Vector type based of four std::size_t components.

-
See also
GLM_GTX_std_based_type
- -

Definition at line 63 of file std_based_type.hpp.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00360.html b/tests/OpenGL/package/glm/doc/api/a00360.html deleted file mode 100644 index 15834ca0..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00360.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_string_cast - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_string_cast
-
-
- -

Include <glm/gtx/string_cast.hpp> to use the features of this extension. -More...

- - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL std::string to_string (genType const &x)
 Create a string from a GLM vector or matrix typed variable. More...
 
-

Detailed Description

-

Include <glm/gtx/string_cast.hpp> to use the features of this extension.

-

Setup strings for GLM type values

-

This extension is not supported with CUDA

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL std::string glm::to_string (genType const & x)
-
- -

Create a string from a GLM vector or matrix typed variable.

-
See also
GLM_GTX_string_cast extension.
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00361.html b/tests/OpenGL/package/glm/doc/api/a00361.html deleted file mode 100644 index 4f438c32..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00361.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_texture - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
-
-
- -

Include <glm/gtx/texture.hpp> to use the features of this extension. -More...

- - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
levels (vec< L, T, Q > const &Extent)
 Compute the number of mipmaps levels necessary to create a mipmap complete texture. More...
 
-

Detailed Description

-

Include <glm/gtx/texture.hpp> to use the features of this extension.

-

Wrapping mode of texture coordinates.

-

Function Documentation

- -
-
- - - - - - - - -
T glm::levels (vec< L, T, Q > const & Extent)
-
- -

Compute the number of mipmaps levels necessary to create a mipmap complete texture.

-
Parameters
- - -
ExtentExtent of the texture base level mipmap
-
-
-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point or signed integer scalar types
QValue from qualifier enum
-
-
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00362.html b/tests/OpenGL/package/glm/doc/api/a00362.html deleted file mode 100644 index 5b6acb9b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00362.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_transform - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_transform
-
-
- -

Include <glm/gtx/transform.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > rotate (T angle, vec< 3, T, Q > const &v)
 Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > scale (vec< 3, T, Q > const &v)
 Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > translate (vec< 3, T, Q > const &v)
 Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars. More...
 
-

Detailed Description

-

Include <glm/gtx/transform.hpp> to use the features of this extension.

-

Add transformation matrices

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::rotate (angle,
vec< 3, T, Q > const & v 
)
-
- -

Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians.

-
See also
GLM_GTC_matrix_transform
-
-GLM_GTX_transform
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::scale (vec< 3, T, Q > const & v)
-
- -

Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components.

-
See also
GLM_GTC_matrix_transform
-
-GLM_GTX_transform
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::translate (vec< 3, T, Q > const & v)
-
- -

Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.

-
See also
GLM_GTC_matrix_transform
-
-GLM_GTX_transform
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00363.html b/tests/OpenGL/package/glm/doc/api/a00363.html deleted file mode 100644 index 838999eb..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00363.html +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_transform2 - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_transform2
-
-
- -

Include <glm/gtx/transform2.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > proj2D (mat< 3, 3, T, Q > const &m, vec< 3, T, Q > const &normal)
 Build planar projection matrix along normal axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > proj3D (mat< 4, 4, T, Q > const &m, vec< 3, T, Q > const &normal)
 Build planar projection matrix along normal axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > scaleBias (T scale, T bias)
 Build a scale bias matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > scaleBias (mat< 4, 4, T, Q > const &m, T scale, T bias)
 Build a scale bias matrix. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > shearX2D (mat< 3, 3, T, Q > const &m, T y)
 Transforms a matrix with a shearing on X axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > shearX3D (mat< 4, 4, T, Q > const &m, T y, T z)
 Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 3, 3, T, Q > shearY2D (mat< 3, 3, T, Q > const &m, T x)
 Transforms a matrix with a shearing on Y axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > shearY3D (mat< 4, 4, T, Q > const &m, T x, T z)
 Transforms a matrix with a shearing on Y axis. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL mat< 4, 4, T, Q > shearZ3D (mat< 4, 4, T, Q > const &m, T x, T y)
 Transforms a matrix with a shearing on Z axis. More...
 
-

Detailed Description

-

Include <glm/gtx/transform2.hpp> to use the features of this extension.

-

Add extra transformation matrices

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, Q> glm::proj2D (mat< 3, 3, T, Q > const & m,
vec< 3, T, Q > const & normal 
)
-
- -

Build planar projection matrix along normal axis.

-

From GLM_GTX_transform2 extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::proj3D (mat< 4, 4, T, Q > const & m,
vec< 3, T, Q > const & normal 
)
-
- -

Build planar projection matrix along normal axis.

-

From GLM_GTX_transform2 extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::scaleBias (scale,
bias 
)
-
- -

Build a scale bias matrix.

-

From GLM_GTX_transform2 extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::scaleBias (mat< 4, 4, T, Q > const & m,
scale,
bias 
)
-
- -

Build a scale bias matrix.

-

From GLM_GTX_transform2 extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, Q> glm::shearX2D (mat< 3, 3, T, Q > const & m,
y 
)
-
- -

Transforms a matrix with a shearing on X axis.

-

From GLM_GTX_transform2 extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::shearX3D (mat< 4, 4, T, Q > const & m,
y,
z 
)
-
- -

Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<3, 3, T, Q> glm::shearY2D (mat< 3, 3, T, Q > const & m,
x 
)
-
- -

Transforms a matrix with a shearing on Y axis.

-

From GLM_GTX_transform2 extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::shearY3D (mat< 4, 4, T, Q > const & m,
x,
z 
)
-
- -

Transforms a matrix with a shearing on Y axis.

-

From GLM_GTX_transform2 extension.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<4, 4, T, Q> glm::shearZ3D (mat< 4, 4, T, Q > const & m,
x,
y 
)
-
- -

Transforms a matrix with a shearing on Z axis.

-

From GLM_GTX_transform2 extension.

- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00364.html b/tests/OpenGL/package/glm/doc/api/a00364.html deleted file mode 100644 index d54b6042..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00364.html +++ /dev/null @@ -1,7945 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_type_aligned - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_type_aligned
-
-
- -

Include <glm/gtx/type_aligned.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

 GLM_ALIGNED_TYPEDEF (lowp_int8, aligned_lowp_int8, 1)
 Low qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_int16, aligned_lowp_int16, 2)
 Low qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_int32, aligned_lowp_int32, 4)
 Low qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_int64, aligned_lowp_int64, 8)
 Low qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_int8_t, aligned_lowp_int8_t, 1)
 Low qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_int16_t, aligned_lowp_int16_t, 2)
 Low qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_int32_t, aligned_lowp_int32_t, 4)
 Low qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_int64_t, aligned_lowp_int64_t, 8)
 Low qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_i8, aligned_lowp_i8, 1)
 Low qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_i16, aligned_lowp_i16, 2)
 Low qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_i32, aligned_lowp_i32, 4)
 Low qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_i64, aligned_lowp_i64, 8)
 Low qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int8, aligned_mediump_int8, 1)
 Medium qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int16, aligned_mediump_int16, 2)
 Medium qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int32, aligned_mediump_int32, 4)
 Medium qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int64, aligned_mediump_int64, 8)
 Medium qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int8_t, aligned_mediump_int8_t, 1)
 Medium qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int16_t, aligned_mediump_int16_t, 2)
 Medium qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int32_t, aligned_mediump_int32_t, 4)
 Medium qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_int64_t, aligned_mediump_int64_t, 8)
 Medium qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_i8, aligned_mediump_i8, 1)
 Medium qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_i16, aligned_mediump_i16, 2)
 Medium qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_i32, aligned_mediump_i32, 4)
 Medium qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_i64, aligned_mediump_i64, 8)
 Medium qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int8, aligned_highp_int8, 1)
 High qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int16, aligned_highp_int16, 2)
 High qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int32, aligned_highp_int32, 4)
 High qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int64, aligned_highp_int64, 8)
 High qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int8_t, aligned_highp_int8_t, 1)
 High qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int16_t, aligned_highp_int16_t, 2)
 High qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int32_t, aligned_highp_int32_t, 4)
 High qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_int64_t, aligned_highp_int64_t, 8)
 High qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_i8, aligned_highp_i8, 1)
 High qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_i16, aligned_highp_i16, 2)
 High qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_i32, aligned_highp_i32, 4)
 High qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_i64, aligned_highp_i64, 8)
 High qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int8, aligned_int8, 1)
 Default qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int16, aligned_int16, 2)
 Default qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int32, aligned_int32, 4)
 Default qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int64, aligned_int64, 8)
 Default qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int8_t, aligned_int8_t, 1)
 Default qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int16_t, aligned_int16_t, 2)
 Default qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int32_t, aligned_int32_t, 4)
 Default qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (int64_t, aligned_int64_t, 8)
 Default qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i8, aligned_i8, 1)
 Default qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i16, aligned_i16, 2)
 Default qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i32, aligned_i32, 4)
 Default qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i64, aligned_i64, 8)
 Default qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (ivec1, aligned_ivec1, 4)
 Default qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (ivec2, aligned_ivec2, 8)
 Default qualifier 32 bit signed integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (ivec3, aligned_ivec3, 16)
 Default qualifier 32 bit signed integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (ivec4, aligned_ivec4, 16)
 Default qualifier 32 bit signed integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i8vec1, aligned_i8vec1, 1)
 Default qualifier 8 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i8vec2, aligned_i8vec2, 2)
 Default qualifier 8 bit signed integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i8vec3, aligned_i8vec3, 4)
 Default qualifier 8 bit signed integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i8vec4, aligned_i8vec4, 4)
 Default qualifier 8 bit signed integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i16vec1, aligned_i16vec1, 2)
 Default qualifier 16 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i16vec2, aligned_i16vec2, 4)
 Default qualifier 16 bit signed integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i16vec3, aligned_i16vec3, 8)
 Default qualifier 16 bit signed integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i16vec4, aligned_i16vec4, 8)
 Default qualifier 16 bit signed integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i32vec1, aligned_i32vec1, 4)
 Default qualifier 32 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i32vec2, aligned_i32vec2, 8)
 Default qualifier 32 bit signed integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i32vec3, aligned_i32vec3, 16)
 Default qualifier 32 bit signed integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i32vec4, aligned_i32vec4, 16)
 Default qualifier 32 bit signed integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i64vec1, aligned_i64vec1, 8)
 Default qualifier 64 bit signed integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (i64vec2, aligned_i64vec2, 16)
 Default qualifier 64 bit signed integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i64vec3, aligned_i64vec3, 32)
 Default qualifier 64 bit signed integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (i64vec4, aligned_i64vec4, 32)
 Default qualifier 64 bit signed integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint8, aligned_lowp_uint8, 1)
 Low qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint16, aligned_lowp_uint16, 2)
 Low qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint32, aligned_lowp_uint32, 4)
 Low qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint64, aligned_lowp_uint64, 8)
 Low qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint8_t, aligned_lowp_uint8_t, 1)
 Low qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint16_t, aligned_lowp_uint16_t, 2)
 Low qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint32_t, aligned_lowp_uint32_t, 4)
 Low qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_uint64_t, aligned_lowp_uint64_t, 8)
 Low qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_u8, aligned_lowp_u8, 1)
 Low qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_u16, aligned_lowp_u16, 2)
 Low qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_u32, aligned_lowp_u32, 4)
 Low qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (lowp_u64, aligned_lowp_u64, 8)
 Low qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint8, aligned_mediump_uint8, 1)
 Medium qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint16, aligned_mediump_uint16, 2)
 Medium qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint32, aligned_mediump_uint32, 4)
 Medium qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint64, aligned_mediump_uint64, 8)
 Medium qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint8_t, aligned_mediump_uint8_t, 1)
 Medium qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint16_t, aligned_mediump_uint16_t, 2)
 Medium qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint32_t, aligned_mediump_uint32_t, 4)
 Medium qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_uint64_t, aligned_mediump_uint64_t, 8)
 Medium qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_u8, aligned_mediump_u8, 1)
 Medium qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_u16, aligned_mediump_u16, 2)
 Medium qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_u32, aligned_mediump_u32, 4)
 Medium qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (mediump_u64, aligned_mediump_u64, 8)
 Medium qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint8, aligned_highp_uint8, 1)
 High qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint16, aligned_highp_uint16, 2)
 High qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint32, aligned_highp_uint32, 4)
 High qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint64, aligned_highp_uint64, 8)
 High qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint8_t, aligned_highp_uint8_t, 1)
 High qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint16_t, aligned_highp_uint16_t, 2)
 High qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint32_t, aligned_highp_uint32_t, 4)
 High qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_uint64_t, aligned_highp_uint64_t, 8)
 High qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_u8, aligned_highp_u8, 1)
 High qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_u16, aligned_highp_u16, 2)
 High qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_u32, aligned_highp_u32, 4)
 High qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (highp_u64, aligned_highp_u64, 8)
 High qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint8, aligned_uint8, 1)
 Default qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint16, aligned_uint16, 2)
 Default qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint32, aligned_uint32, 4)
 Default qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint64, aligned_uint64, 8)
 Default qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint8_t, aligned_uint8_t, 1)
 Default qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint16_t, aligned_uint16_t, 2)
 Default qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint32_t, aligned_uint32_t, 4)
 Default qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uint64_t, aligned_uint64_t, 8)
 Default qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u8, aligned_u8, 1)
 Default qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u16, aligned_u16, 2)
 Default qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u32, aligned_u32, 4)
 Default qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u64, aligned_u64, 8)
 Default qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uvec1, aligned_uvec1, 4)
 Default qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (uvec2, aligned_uvec2, 8)
 Default qualifier 32 bit unsigned integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (uvec3, aligned_uvec3, 16)
 Default qualifier 32 bit unsigned integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (uvec4, aligned_uvec4, 16)
 Default qualifier 32 bit unsigned integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u8vec1, aligned_u8vec1, 1)
 Default qualifier 8 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u8vec2, aligned_u8vec2, 2)
 Default qualifier 8 bit unsigned integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u8vec3, aligned_u8vec3, 4)
 Default qualifier 8 bit unsigned integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u8vec4, aligned_u8vec4, 4)
 Default qualifier 8 bit unsigned integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u16vec1, aligned_u16vec1, 2)
 Default qualifier 16 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u16vec2, aligned_u16vec2, 4)
 Default qualifier 16 bit unsigned integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u16vec3, aligned_u16vec3, 8)
 Default qualifier 16 bit unsigned integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u16vec4, aligned_u16vec4, 8)
 Default qualifier 16 bit unsigned integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u32vec1, aligned_u32vec1, 4)
 Default qualifier 32 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u32vec2, aligned_u32vec2, 8)
 Default qualifier 32 bit unsigned integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u32vec3, aligned_u32vec3, 16)
 Default qualifier 32 bit unsigned integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u32vec4, aligned_u32vec4, 16)
 Default qualifier 32 bit unsigned integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u64vec1, aligned_u64vec1, 8)
 Default qualifier 64 bit unsigned integer aligned scalar type. More...
 
 GLM_ALIGNED_TYPEDEF (u64vec2, aligned_u64vec2, 16)
 Default qualifier 64 bit unsigned integer aligned vector of 2 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u64vec3, aligned_u64vec3, 32)
 Default qualifier 64 bit unsigned integer aligned vector of 3 components type. More...
 
 GLM_ALIGNED_TYPEDEF (u64vec4, aligned_u64vec4, 32)
 Default qualifier 64 bit unsigned integer aligned vector of 4 components type. More...
 
 GLM_ALIGNED_TYPEDEF (float32, aligned_float32, 4)
 32 bit single-qualifier floating-point aligned scalar. More...
 
 GLM_ALIGNED_TYPEDEF (float32_t, aligned_float32_t, 4)
 32 bit single-qualifier floating-point aligned scalar. More...
 
 GLM_ALIGNED_TYPEDEF (float32, aligned_f32, 4)
 32 bit single-qualifier floating-point aligned scalar. More...
 
 GLM_ALIGNED_TYPEDEF (float64, aligned_float64, 8)
 64 bit double-qualifier floating-point aligned scalar. More...
 
 GLM_ALIGNED_TYPEDEF (float64_t, aligned_float64_t, 8)
 64 bit double-qualifier floating-point aligned scalar. More...
 
 GLM_ALIGNED_TYPEDEF (float64, aligned_f64, 8)
 64 bit double-qualifier floating-point aligned scalar. More...
 
 GLM_ALIGNED_TYPEDEF (vec1, aligned_vec1, 4)
 Single-qualifier floating-point aligned vector of 1 component. More...
 
 GLM_ALIGNED_TYPEDEF (vec2, aligned_vec2, 8)
 Single-qualifier floating-point aligned vector of 2 components. More...
 
 GLM_ALIGNED_TYPEDEF (vec3, aligned_vec3, 16)
 Single-qualifier floating-point aligned vector of 3 components. More...
 
 GLM_ALIGNED_TYPEDEF (vec4, aligned_vec4, 16)
 Single-qualifier floating-point aligned vector of 4 components. More...
 
 GLM_ALIGNED_TYPEDEF (fvec1, aligned_fvec1, 4)
 Single-qualifier floating-point aligned vector of 1 component. More...
 
 GLM_ALIGNED_TYPEDEF (fvec2, aligned_fvec2, 8)
 Single-qualifier floating-point aligned vector of 2 components. More...
 
 GLM_ALIGNED_TYPEDEF (fvec3, aligned_fvec3, 16)
 Single-qualifier floating-point aligned vector of 3 components. More...
 
 GLM_ALIGNED_TYPEDEF (fvec4, aligned_fvec4, 16)
 Single-qualifier floating-point aligned vector of 4 components. More...
 
 GLM_ALIGNED_TYPEDEF (f32vec1, aligned_f32vec1, 4)
 Single-qualifier floating-point aligned vector of 1 component. More...
 
 GLM_ALIGNED_TYPEDEF (f32vec2, aligned_f32vec2, 8)
 Single-qualifier floating-point aligned vector of 2 components. More...
 
 GLM_ALIGNED_TYPEDEF (f32vec3, aligned_f32vec3, 16)
 Single-qualifier floating-point aligned vector of 3 components. More...
 
 GLM_ALIGNED_TYPEDEF (f32vec4, aligned_f32vec4, 16)
 Single-qualifier floating-point aligned vector of 4 components. More...
 
 GLM_ALIGNED_TYPEDEF (dvec1, aligned_dvec1, 8)
 Double-qualifier floating-point aligned vector of 1 component. More...
 
 GLM_ALIGNED_TYPEDEF (dvec2, aligned_dvec2, 16)
 Double-qualifier floating-point aligned vector of 2 components. More...
 
 GLM_ALIGNED_TYPEDEF (dvec3, aligned_dvec3, 32)
 Double-qualifier floating-point aligned vector of 3 components. More...
 
 GLM_ALIGNED_TYPEDEF (dvec4, aligned_dvec4, 32)
 Double-qualifier floating-point aligned vector of 4 components. More...
 
 GLM_ALIGNED_TYPEDEF (f64vec1, aligned_f64vec1, 8)
 Double-qualifier floating-point aligned vector of 1 component. More...
 
 GLM_ALIGNED_TYPEDEF (f64vec2, aligned_f64vec2, 16)
 Double-qualifier floating-point aligned vector of 2 components. More...
 
 GLM_ALIGNED_TYPEDEF (f64vec3, aligned_f64vec3, 32)
 Double-qualifier floating-point aligned vector of 3 components. More...
 
 GLM_ALIGNED_TYPEDEF (f64vec4, aligned_f64vec4, 32)
 Double-qualifier floating-point aligned vector of 4 components. More...
 
 GLM_ALIGNED_TYPEDEF (mat2, aligned_mat2, 16)
 Single-qualifier floating-point aligned 1x1 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (mat3, aligned_mat3, 16)
 Single-qualifier floating-point aligned 3x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (mat4, aligned_mat4, 16)
 Single-qualifier floating-point aligned 4x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat2x2, aligned_fmat2, 16)
 Single-qualifier floating-point aligned 1x1 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat3x3, aligned_fmat3, 16)
 Single-qualifier floating-point aligned 3x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat4x4, aligned_fmat4, 16)
 Single-qualifier floating-point aligned 4x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat2x2, aligned_fmat2x2, 16)
 Single-qualifier floating-point aligned 1x1 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat2x3, aligned_fmat2x3, 16)
 Single-qualifier floating-point aligned 2x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat2x4, aligned_fmat2x4, 16)
 Single-qualifier floating-point aligned 2x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat3x2, aligned_fmat3x2, 16)
 Single-qualifier floating-point aligned 3x2 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat3x3, aligned_fmat3x3, 16)
 Single-qualifier floating-point aligned 3x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat3x4, aligned_fmat3x4, 16)
 Single-qualifier floating-point aligned 3x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat4x2, aligned_fmat4x2, 16)
 Single-qualifier floating-point aligned 4x2 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat4x3, aligned_fmat4x3, 16)
 Single-qualifier floating-point aligned 4x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (fmat4x4, aligned_fmat4x4, 16)
 Single-qualifier floating-point aligned 4x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat2x2, aligned_f32mat2, 16)
 Single-qualifier floating-point aligned 1x1 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat3x3, aligned_f32mat3, 16)
 Single-qualifier floating-point aligned 3x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat4x4, aligned_f32mat4, 16)
 Single-qualifier floating-point aligned 4x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat2x2, aligned_f32mat2x2, 16)
 Single-qualifier floating-point aligned 1x1 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat2x3, aligned_f32mat2x3, 16)
 Single-qualifier floating-point aligned 2x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat2x4, aligned_f32mat2x4, 16)
 Single-qualifier floating-point aligned 2x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat3x2, aligned_f32mat3x2, 16)
 Single-qualifier floating-point aligned 3x2 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat3x3, aligned_f32mat3x3, 16)
 Single-qualifier floating-point aligned 3x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat3x4, aligned_f32mat3x4, 16)
 Single-qualifier floating-point aligned 3x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat4x2, aligned_f32mat4x2, 16)
 Single-qualifier floating-point aligned 4x2 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat4x3, aligned_f32mat4x3, 16)
 Single-qualifier floating-point aligned 4x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f32mat4x4, aligned_f32mat4x4, 16)
 Single-qualifier floating-point aligned 4x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat2x2, aligned_f64mat2, 32)
 Double-qualifier floating-point aligned 1x1 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat3x3, aligned_f64mat3, 32)
 Double-qualifier floating-point aligned 3x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat4x4, aligned_f64mat4, 32)
 Double-qualifier floating-point aligned 4x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat2x2, aligned_f64mat2x2, 32)
 Double-qualifier floating-point aligned 1x1 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat2x3, aligned_f64mat2x3, 32)
 Double-qualifier floating-point aligned 2x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat2x4, aligned_f64mat2x4, 32)
 Double-qualifier floating-point aligned 2x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat3x2, aligned_f64mat3x2, 32)
 Double-qualifier floating-point aligned 3x2 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat3x3, aligned_f64mat3x3, 32)
 Double-qualifier floating-point aligned 3x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat3x4, aligned_f64mat3x4, 32)
 Double-qualifier floating-point aligned 3x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat4x2, aligned_f64mat4x2, 32)
 Double-qualifier floating-point aligned 4x2 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat4x3, aligned_f64mat4x3, 32)
 Double-qualifier floating-point aligned 4x3 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (f64mat4x4, aligned_f64mat4x4, 32)
 Double-qualifier floating-point aligned 4x4 matrix. More...
 
 GLM_ALIGNED_TYPEDEF (quat, aligned_quat, 16)
 Single-qualifier floating-point aligned quaternion. More...
 
 GLM_ALIGNED_TYPEDEF (quat, aligned_fquat, 16)
 Single-qualifier floating-point aligned quaternion. More...
 
 GLM_ALIGNED_TYPEDEF (dquat, aligned_dquat, 32)
 Double-qualifier floating-point aligned quaternion. More...
 
 GLM_ALIGNED_TYPEDEF (f32quat, aligned_f32quat, 16)
 Single-qualifier floating-point aligned quaternion. More...
 
 GLM_ALIGNED_TYPEDEF (f64quat, aligned_f64quat, 32)
 Double-qualifier floating-point aligned quaternion. More...
 
-

Detailed Description

-

Include <glm/gtx/type_aligned.hpp> to use the features of this extension.

-

Defines aligned types.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_int8 ,
aligned_lowp_int8 ,
 
)
-
- -

Low qualifier 8 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_int16 ,
aligned_lowp_int16 ,
 
)
-
- -

Low qualifier 16 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_int32 ,
aligned_lowp_int32 ,
 
)
-
- -

Low qualifier 32 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_int64 ,
aligned_lowp_int64 ,
 
)
-
- -

Low qualifier 64 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_int8_t ,
aligned_lowp_int8_t ,
 
)
-
- -

Low qualifier 8 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_int16_t ,
aligned_lowp_int16_t ,
 
)
-
- -

Low qualifier 16 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_int32_t ,
aligned_lowp_int32_t ,
 
)
-
- -

Low qualifier 32 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_int64_t ,
aligned_lowp_int64_t ,
 
)
-
- -

Low qualifier 64 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_i8 ,
aligned_lowp_i8 ,
 
)
-
- -

Low qualifier 8 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_i16 ,
aligned_lowp_i16 ,
 
)
-
- -

Low qualifier 16 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_i32 ,
aligned_lowp_i32 ,
 
)
-
- -

Low qualifier 32 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_i64 ,
aligned_lowp_i64 ,
 
)
-
- -

Low qualifier 64 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_int8 ,
aligned_mediump_int8 ,
 
)
-
- -

Medium qualifier 8 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_int16 ,
aligned_mediump_int16 ,
 
)
-
- -

Medium qualifier 16 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_int32 ,
aligned_mediump_int32 ,
 
)
-
- -

Medium qualifier 32 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_int64 ,
aligned_mediump_int64 ,
 
)
-
- -

Medium qualifier 64 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_int8_t ,
aligned_mediump_int8_t ,
 
)
-
- -

Medium qualifier 8 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_int16_t ,
aligned_mediump_int16_t ,
 
)
-
- -

Medium qualifier 16 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_int32_t ,
aligned_mediump_int32_t ,
 
)
-
- -

Medium qualifier 32 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_int64_t ,
aligned_mediump_int64_t ,
 
)
-
- -

Medium qualifier 64 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_i8 ,
aligned_mediump_i8 ,
 
)
-
- -

Medium qualifier 8 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_i16 ,
aligned_mediump_i16 ,
 
)
-
- -

Medium qualifier 16 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_i32 ,
aligned_mediump_i32 ,
 
)
-
- -

Medium qualifier 32 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_i64 ,
aligned_mediump_i64 ,
 
)
-
- -

Medium qualifier 64 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_int8 ,
aligned_highp_int8 ,
 
)
-
- -

High qualifier 8 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_int16 ,
aligned_highp_int16 ,
 
)
-
- -

High qualifier 16 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_int32 ,
aligned_highp_int32 ,
 
)
-
- -

High qualifier 32 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_int64 ,
aligned_highp_int64 ,
 
)
-
- -

High qualifier 64 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_int8_t ,
aligned_highp_int8_t ,
 
)
-
- -

High qualifier 8 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_int16_t ,
aligned_highp_int16_t ,
 
)
-
- -

High qualifier 16 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_int32_t ,
aligned_highp_int32_t ,
 
)
-
- -

High qualifier 32 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_int64_t ,
aligned_highp_int64_t ,
 
)
-
- -

High qualifier 64 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_i8 ,
aligned_highp_i8 ,
 
)
-
- -

High qualifier 8 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_i16 ,
aligned_highp_i16 ,
 
)
-
- -

High qualifier 16 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_i32 ,
aligned_highp_i32 ,
 
)
-
- -

High qualifier 32 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_i64 ,
aligned_highp_i64 ,
 
)
-
- -

High qualifier 64 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (int8 ,
aligned_int8 ,
 
)
-
- -

Default qualifier 8 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (int16 ,
aligned_int16 ,
 
)
-
- -

Default qualifier 16 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (int32 ,
aligned_int32 ,
 
)
-
- -

Default qualifier 32 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (int64 ,
aligned_int64 ,
 
)
-
- -

Default qualifier 64 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (int8_t ,
aligned_int8_t ,
 
)
-
- -

Default qualifier 8 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (int16_t ,
aligned_int16_t ,
 
)
-
- -

Default qualifier 16 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (int32_t ,
aligned_int32_t ,
 
)
-
- -

Default qualifier 32 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (int64_t ,
aligned_int64_t ,
 
)
-
- -

Default qualifier 64 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i8 ,
aligned_i8 ,
 
)
-
- -

Default qualifier 8 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i16 ,
aligned_i16 ,
 
)
-
- -

Default qualifier 16 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i32 ,
aligned_i32 ,
 
)
-
- -

Default qualifier 32 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i64 ,
aligned_i64 ,
 
)
-
- -

Default qualifier 64 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (ivec1 ,
aligned_ivec1 ,
 
)
-
- -

Default qualifier 32 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (ivec2 ,
aligned_ivec2 ,
 
)
-
- -

Default qualifier 32 bit signed integer aligned vector of 2 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (ivec3 ,
aligned_ivec3 ,
16  
)
-
- -

Default qualifier 32 bit signed integer aligned vector of 3 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (ivec4 ,
aligned_ivec4 ,
16  
)
-
- -

Default qualifier 32 bit signed integer aligned vector of 4 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i8vec1 ,
aligned_i8vec1 ,
 
)
-
- -

Default qualifier 8 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i8vec2 ,
aligned_i8vec2 ,
 
)
-
- -

Default qualifier 8 bit signed integer aligned vector of 2 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i8vec3 ,
aligned_i8vec3 ,
 
)
-
- -

Default qualifier 8 bit signed integer aligned vector of 3 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i8vec4 ,
aligned_i8vec4 ,
 
)
-
- -

Default qualifier 8 bit signed integer aligned vector of 4 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i16vec1 ,
aligned_i16vec1 ,
 
)
-
- -

Default qualifier 16 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i16vec2 ,
aligned_i16vec2 ,
 
)
-
- -

Default qualifier 16 bit signed integer aligned vector of 2 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i16vec3 ,
aligned_i16vec3 ,
 
)
-
- -

Default qualifier 16 bit signed integer aligned vector of 3 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i16vec4 ,
aligned_i16vec4 ,
 
)
-
- -

Default qualifier 16 bit signed integer aligned vector of 4 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i32vec1 ,
aligned_i32vec1 ,
 
)
-
- -

Default qualifier 32 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i32vec2 ,
aligned_i32vec2 ,
 
)
-
- -

Default qualifier 32 bit signed integer aligned vector of 2 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i32vec3 ,
aligned_i32vec3 ,
16  
)
-
- -

Default qualifier 32 bit signed integer aligned vector of 3 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i32vec4 ,
aligned_i32vec4 ,
16  
)
-
- -

Default qualifier 32 bit signed integer aligned vector of 4 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i64vec1 ,
aligned_i64vec1 ,
 
)
-
- -

Default qualifier 64 bit signed integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i64vec2 ,
aligned_i64vec2 ,
16  
)
-
- -

Default qualifier 64 bit signed integer aligned vector of 2 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i64vec3 ,
aligned_i64vec3 ,
32  
)
-
- -

Default qualifier 64 bit signed integer aligned vector of 3 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (i64vec4 ,
aligned_i64vec4 ,
32  
)
-
- -

Default qualifier 64 bit signed integer aligned vector of 4 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_uint8 ,
aligned_lowp_uint8 ,
 
)
-
- -

Low qualifier 8 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_uint16 ,
aligned_lowp_uint16 ,
 
)
-
- -

Low qualifier 16 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_uint32 ,
aligned_lowp_uint32 ,
 
)
-
- -

Low qualifier 32 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_uint64 ,
aligned_lowp_uint64 ,
 
)
-
- -

Low qualifier 64 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_uint8_t ,
aligned_lowp_uint8_t ,
 
)
-
- -

Low qualifier 8 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_uint16_t ,
aligned_lowp_uint16_t ,
 
)
-
- -

Low qualifier 16 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_uint32_t ,
aligned_lowp_uint32_t ,
 
)
-
- -

Low qualifier 32 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_uint64_t ,
aligned_lowp_uint64_t ,
 
)
-
- -

Low qualifier 64 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_u8 ,
aligned_lowp_u8 ,
 
)
-
- -

Low qualifier 8 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_u16 ,
aligned_lowp_u16 ,
 
)
-
- -

Low qualifier 16 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_u32 ,
aligned_lowp_u32 ,
 
)
-
- -

Low qualifier 32 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (lowp_u64 ,
aligned_lowp_u64 ,
 
)
-
- -

Low qualifier 64 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_uint8 ,
aligned_mediump_uint8 ,
 
)
-
- -

Medium qualifier 8 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_uint16 ,
aligned_mediump_uint16 ,
 
)
-
- -

Medium qualifier 16 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_uint32 ,
aligned_mediump_uint32 ,
 
)
-
- -

Medium qualifier 32 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_uint64 ,
aligned_mediump_uint64 ,
 
)
-
- -

Medium qualifier 64 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_uint8_t ,
aligned_mediump_uint8_t ,
 
)
-
- -

Medium qualifier 8 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_uint16_t ,
aligned_mediump_uint16_t ,
 
)
-
- -

Medium qualifier 16 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_uint32_t ,
aligned_mediump_uint32_t ,
 
)
-
- -

Medium qualifier 32 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_uint64_t ,
aligned_mediump_uint64_t ,
 
)
-
- -

Medium qualifier 64 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_u8 ,
aligned_mediump_u8 ,
 
)
-
- -

Medium qualifier 8 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_u16 ,
aligned_mediump_u16 ,
 
)
-
- -

Medium qualifier 16 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_u32 ,
aligned_mediump_u32 ,
 
)
-
- -

Medium qualifier 32 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (mediump_u64 ,
aligned_mediump_u64 ,
 
)
-
- -

Medium qualifier 64 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_uint8 ,
aligned_highp_uint8 ,
 
)
-
- -

High qualifier 8 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_uint16 ,
aligned_highp_uint16 ,
 
)
-
- -

High qualifier 16 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_uint32 ,
aligned_highp_uint32 ,
 
)
-
- -

High qualifier 32 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_uint64 ,
aligned_highp_uint64 ,
 
)
-
- -

High qualifier 64 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_uint8_t ,
aligned_highp_uint8_t ,
 
)
-
- -

High qualifier 8 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_uint16_t ,
aligned_highp_uint16_t ,
 
)
-
- -

High qualifier 16 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_uint32_t ,
aligned_highp_uint32_t ,
 
)
-
- -

High qualifier 32 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_uint64_t ,
aligned_highp_uint64_t ,
 
)
-
- -

High qualifier 64 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_u8 ,
aligned_highp_u8 ,
 
)
-
- -

High qualifier 8 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_u16 ,
aligned_highp_u16 ,
 
)
-
- -

High qualifier 16 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_u32 ,
aligned_highp_u32 ,
 
)
-
- -

High qualifier 32 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (highp_u64 ,
aligned_highp_u64 ,
 
)
-
- -

High qualifier 64 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (uint8 ,
aligned_uint8 ,
 
)
-
- -

Default qualifier 8 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (uint16 ,
aligned_uint16 ,
 
)
-
- -

Default qualifier 16 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (uint32 ,
aligned_uint32 ,
 
)
-
- -

Default qualifier 32 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (uint64 ,
aligned_uint64 ,
 
)
-
- -

Default qualifier 64 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (uint8_t ,
aligned_uint8_t ,
 
)
-
- -

Default qualifier 8 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (uint16_t ,
aligned_uint16_t ,
 
)
-
- -

Default qualifier 16 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (uint32_t ,
aligned_uint32_t ,
 
)
-
- -

Default qualifier 32 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (uint64_t ,
aligned_uint64_t ,
 
)
-
- -

Default qualifier 64 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u8 ,
aligned_u8 ,
 
)
-
- -

Default qualifier 8 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u16 ,
aligned_u16 ,
 
)
-
- -

Default qualifier 16 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u32 ,
aligned_u32 ,
 
)
-
- -

Default qualifier 32 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u64 ,
aligned_u64 ,
 
)
-
- -

Default qualifier 64 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (uvec1 ,
aligned_uvec1 ,
 
)
-
- -

Default qualifier 32 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (uvec2 ,
aligned_uvec2 ,
 
)
-
- -

Default qualifier 32 bit unsigned integer aligned vector of 2 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (uvec3 ,
aligned_uvec3 ,
16  
)
-
- -

Default qualifier 32 bit unsigned integer aligned vector of 3 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (uvec4 ,
aligned_uvec4 ,
16  
)
-
- -

Default qualifier 32 bit unsigned integer aligned vector of 4 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u8vec1 ,
aligned_u8vec1 ,
 
)
-
- -

Default qualifier 8 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u8vec2 ,
aligned_u8vec2 ,
 
)
-
- -

Default qualifier 8 bit unsigned integer aligned vector of 2 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u8vec3 ,
aligned_u8vec3 ,
 
)
-
- -

Default qualifier 8 bit unsigned integer aligned vector of 3 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u8vec4 ,
aligned_u8vec4 ,
 
)
-
- -

Default qualifier 8 bit unsigned integer aligned vector of 4 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u16vec1 ,
aligned_u16vec1 ,
 
)
-
- -

Default qualifier 16 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u16vec2 ,
aligned_u16vec2 ,
 
)
-
- -

Default qualifier 16 bit unsigned integer aligned vector of 2 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u16vec3 ,
aligned_u16vec3 ,
 
)
-
- -

Default qualifier 16 bit unsigned integer aligned vector of 3 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u16vec4 ,
aligned_u16vec4 ,
 
)
-
- -

Default qualifier 16 bit unsigned integer aligned vector of 4 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u32vec1 ,
aligned_u32vec1 ,
 
)
-
- -

Default qualifier 32 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u32vec2 ,
aligned_u32vec2 ,
 
)
-
- -

Default qualifier 32 bit unsigned integer aligned vector of 2 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u32vec3 ,
aligned_u32vec3 ,
16  
)
-
- -

Default qualifier 32 bit unsigned integer aligned vector of 3 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u32vec4 ,
aligned_u32vec4 ,
16  
)
-
- -

Default qualifier 32 bit unsigned integer aligned vector of 4 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u64vec1 ,
aligned_u64vec1 ,
 
)
-
- -

Default qualifier 64 bit unsigned integer aligned scalar type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u64vec2 ,
aligned_u64vec2 ,
16  
)
-
- -

Default qualifier 64 bit unsigned integer aligned vector of 2 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u64vec3 ,
aligned_u64vec3 ,
32  
)
-
- -

Default qualifier 64 bit unsigned integer aligned vector of 3 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (u64vec4 ,
aligned_u64vec4 ,
32  
)
-
- -

Default qualifier 64 bit unsigned integer aligned vector of 4 components type.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (float32 ,
aligned_float32 ,
 
)
-
- -

32 bit single-qualifier floating-point aligned scalar.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (float32_t ,
aligned_float32_t ,
 
)
-
- -

32 bit single-qualifier floating-point aligned scalar.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (float32 ,
aligned_f32 ,
 
)
-
- -

32 bit single-qualifier floating-point aligned scalar.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (float64 ,
aligned_float64 ,
 
)
-
- -

64 bit double-qualifier floating-point aligned scalar.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (float64_t ,
aligned_float64_t ,
 
)
-
- -

64 bit double-qualifier floating-point aligned scalar.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (float64 ,
aligned_f64 ,
 
)
-
- -

64 bit double-qualifier floating-point aligned scalar.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (vec1 ,
aligned_vec1 ,
 
)
-
- -

Single-qualifier floating-point aligned vector of 1 component.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (vec2 ,
aligned_vec2 ,
 
)
-
- -

Single-qualifier floating-point aligned vector of 2 components.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (vec3 ,
aligned_vec3 ,
16  
)
-
- -

Single-qualifier floating-point aligned vector of 3 components.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (vec4 ,
aligned_vec4 ,
16  
)
-
- -

Single-qualifier floating-point aligned vector of 4 components.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fvec1 ,
aligned_fvec1 ,
 
)
-
- -

Single-qualifier floating-point aligned vector of 1 component.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fvec2 ,
aligned_fvec2 ,
 
)
-
- -

Single-qualifier floating-point aligned vector of 2 components.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fvec3 ,
aligned_fvec3 ,
16  
)
-
- -

Single-qualifier floating-point aligned vector of 3 components.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fvec4 ,
aligned_fvec4 ,
16  
)
-
- -

Single-qualifier floating-point aligned vector of 4 components.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32vec1 ,
aligned_f32vec1 ,
 
)
-
- -

Single-qualifier floating-point aligned vector of 1 component.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32vec2 ,
aligned_f32vec2 ,
 
)
-
- -

Single-qualifier floating-point aligned vector of 2 components.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32vec3 ,
aligned_f32vec3 ,
16  
)
-
- -

Single-qualifier floating-point aligned vector of 3 components.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32vec4 ,
aligned_f32vec4 ,
16  
)
-
- -

Single-qualifier floating-point aligned vector of 4 components.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (dvec1 ,
aligned_dvec1 ,
 
)
-
- -

Double-qualifier floating-point aligned vector of 1 component.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (dvec2 ,
aligned_dvec2 ,
16  
)
-
- -

Double-qualifier floating-point aligned vector of 2 components.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (dvec3 ,
aligned_dvec3 ,
32  
)
-
- -

Double-qualifier floating-point aligned vector of 3 components.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (dvec4 ,
aligned_dvec4 ,
32  
)
-
- -

Double-qualifier floating-point aligned vector of 4 components.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64vec1 ,
aligned_f64vec1 ,
 
)
-
- -

Double-qualifier floating-point aligned vector of 1 component.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64vec2 ,
aligned_f64vec2 ,
16  
)
-
- -

Double-qualifier floating-point aligned vector of 2 components.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64vec3 ,
aligned_f64vec3 ,
32  
)
-
- -

Double-qualifier floating-point aligned vector of 3 components.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64vec4 ,
aligned_f64vec4 ,
32  
)
-
- -

Double-qualifier floating-point aligned vector of 4 components.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_ALIGNED_TYPEDEF (mat2 ,
aligned_mat2 ,
16  
)
-
- -

Single-qualifier floating-point aligned 1x1 matrix.

-
See also
GLM_GTX_type_aligned Single-qualifier floating-point aligned 2x2 matrix.
-
-GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_ALIGNED_TYPEDEF (mat3 ,
aligned_mat3 ,
16  
)
-
- -

Single-qualifier floating-point aligned 3x3 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_ALIGNED_TYPEDEF (mat4 ,
aligned_mat4 ,
16  
)
-
- -

Single-qualifier floating-point aligned 4x4 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fmat2x2 ,
aligned_fmat2 ,
16  
)
-
- -

Single-qualifier floating-point aligned 1x1 matrix.

-
See also
GLM_GTX_type_aligned Single-qualifier floating-point aligned 2x2 matrix.
-
-GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fmat3x3 ,
aligned_fmat3 ,
16  
)
-
- -

Single-qualifier floating-point aligned 3x3 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fmat4x4 ,
aligned_fmat4 ,
16  
)
-
- -

Single-qualifier floating-point aligned 4x4 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fmat2x2 ,
aligned_fmat2x2 ,
16  
)
-
- -

Single-qualifier floating-point aligned 1x1 matrix.

-
See also
GLM_GTX_type_aligned Single-qualifier floating-point aligned 2x2 matrix.
-
-GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fmat2x3 ,
aligned_fmat2x3 ,
16  
)
-
- -

Single-qualifier floating-point aligned 2x3 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fmat2x4 ,
aligned_fmat2x4 ,
16  
)
-
- -

Single-qualifier floating-point aligned 2x4 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fmat3x2 ,
aligned_fmat3x2 ,
16  
)
-
- -

Single-qualifier floating-point aligned 3x2 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fmat3x3 ,
aligned_fmat3x3 ,
16  
)
-
- -

Single-qualifier floating-point aligned 3x3 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fmat3x4 ,
aligned_fmat3x4 ,
16  
)
-
- -

Single-qualifier floating-point aligned 3x4 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fmat4x2 ,
aligned_fmat4x2 ,
16  
)
-
- -

Single-qualifier floating-point aligned 4x2 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fmat4x3 ,
aligned_fmat4x3 ,
16  
)
-
- -

Single-qualifier floating-point aligned 4x3 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (fmat4x4 ,
aligned_fmat4x4 ,
16  
)
-
- -

Single-qualifier floating-point aligned 4x4 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32mat2x2 ,
aligned_f32mat2 ,
16  
)
-
- -

Single-qualifier floating-point aligned 1x1 matrix.

-
See also
GLM_GTX_type_aligned Single-qualifier floating-point aligned 2x2 matrix.
-
-GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32mat3x3 ,
aligned_f32mat3 ,
16  
)
-
- -

Single-qualifier floating-point aligned 3x3 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32mat4x4 ,
aligned_f32mat4 ,
16  
)
-
- -

Single-qualifier floating-point aligned 4x4 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32mat2x2 ,
aligned_f32mat2x2 ,
16  
)
-
- -

Single-qualifier floating-point aligned 1x1 matrix.

-
See also
GLM_GTX_type_aligned Single-qualifier floating-point aligned 2x2 matrix.
-
-GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32mat2x3 ,
aligned_f32mat2x3 ,
16  
)
-
- -

Single-qualifier floating-point aligned 2x3 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32mat2x4 ,
aligned_f32mat2x4 ,
16  
)
-
- -

Single-qualifier floating-point aligned 2x4 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32mat3x2 ,
aligned_f32mat3x2 ,
16  
)
-
- -

Single-qualifier floating-point aligned 3x2 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32mat3x3 ,
aligned_f32mat3x3 ,
16  
)
-
- -

Single-qualifier floating-point aligned 3x3 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32mat3x4 ,
aligned_f32mat3x4 ,
16  
)
-
- -

Single-qualifier floating-point aligned 3x4 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32mat4x2 ,
aligned_f32mat4x2 ,
16  
)
-
- -

Single-qualifier floating-point aligned 4x2 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32mat4x3 ,
aligned_f32mat4x3 ,
16  
)
-
- -

Single-qualifier floating-point aligned 4x3 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32mat4x4 ,
aligned_f32mat4x4 ,
16  
)
-
- -

Single-qualifier floating-point aligned 4x4 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64mat2x2 ,
aligned_f64mat2 ,
32  
)
-
- -

Double-qualifier floating-point aligned 1x1 matrix.

-
See also
GLM_GTX_type_aligned Double-qualifier floating-point aligned 2x2 matrix.
-
-GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64mat3x3 ,
aligned_f64mat3 ,
32  
)
-
- -

Double-qualifier floating-point aligned 3x3 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64mat4x4 ,
aligned_f64mat4 ,
32  
)
-
- -

Double-qualifier floating-point aligned 4x4 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64mat2x2 ,
aligned_f64mat2x2 ,
32  
)
-
- -

Double-qualifier floating-point aligned 1x1 matrix.

-
See also
GLM_GTX_type_aligned Double-qualifier floating-point aligned 2x2 matrix.
-
-GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64mat2x3 ,
aligned_f64mat2x3 ,
32  
)
-
- -

Double-qualifier floating-point aligned 2x3 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64mat2x4 ,
aligned_f64mat2x4 ,
32  
)
-
- -

Double-qualifier floating-point aligned 2x4 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64mat3x2 ,
aligned_f64mat3x2 ,
32  
)
-
- -

Double-qualifier floating-point aligned 3x2 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64mat3x3 ,
aligned_f64mat3x3 ,
32  
)
-
- -

Double-qualifier floating-point aligned 3x3 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64mat3x4 ,
aligned_f64mat3x4 ,
32  
)
-
- -

Double-qualifier floating-point aligned 3x4 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64mat4x2 ,
aligned_f64mat4x2 ,
32  
)
-
- -

Double-qualifier floating-point aligned 4x2 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64mat4x3 ,
aligned_f64mat4x3 ,
32  
)
-
- -

Double-qualifier floating-point aligned 4x3 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64mat4x4 ,
aligned_f64mat4x4 ,
32  
)
-
- -

Double-qualifier floating-point aligned 4x4 matrix.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (quat ,
aligned_quat ,
16  
)
-
- -

Single-qualifier floating-point aligned quaternion.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (quat ,
aligned_fquat ,
16  
)
-
- -

Single-qualifier floating-point aligned quaternion.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (dquat ,
aligned_dquat ,
32  
)
-
- -

Double-qualifier floating-point aligned quaternion.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f32quat ,
aligned_f32quat ,
16  
)
-
- -

Single-qualifier floating-point aligned quaternion.

-
See also
GLM_GTX_type_aligned
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
glm::GLM_ALIGNED_TYPEDEF (f64quat ,
aligned_f64quat ,
32  
)
-
- -

Double-qualifier floating-point aligned quaternion.

-
See also
GLM_GTX_type_aligned
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00365.html b/tests/OpenGL/package/glm/doc/api/a00365.html deleted file mode 100644 index 5d673dea..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00365.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_type_trait - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
-
-
GLM_GTX_type_trait
-
-
- -

Include <glm/gtx/type_trait.hpp> to use the features of this extension. -More...

-

Detailed Description

-

Include <glm/gtx/type_trait.hpp> to use the features of this extension.

-

Defines traits for each type.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00366.html b/tests/OpenGL/package/glm/doc/api/a00366.html deleted file mode 100644 index 4cc45b53..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00366.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_vec_swizzle - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
-
-
GLM_GTX_vec_swizzle
-
-
- -

Include <glm/gtx/vec_swizzle.hpp> to use the features of this extension. -More...

-

Include <glm/gtx/vec_swizzle.hpp> to use the features of this extension.

-

Functions to perform swizzle operation.

-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00367.html b/tests/OpenGL/package/glm/doc/api/a00367.html deleted file mode 100644 index 2b76d356..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00367.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_vector_angle - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_vector_angle
-
-
- -

Include <glm/gtx/vector_angle.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL T angle (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the absolute angle between two vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T orientedAngle (vec< 2, T, Q > const &x, vec< 2, T, Q > const &y)
 Returns the oriented angle between two 2d vectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL T orientedAngle (vec< 3, T, Q > const &x, vec< 3, T, Q > const &y, vec< 3, T, Q > const &ref)
 Returns the oriented angle between two 3d vectors based from a reference axis. More...
 
-

Detailed Description

-

Include <glm/gtx/vector_angle.hpp> to use the features of this extension.

-

Compute angle between vectors

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::angle (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Returns the absolute angle between two vectors.

-

Parameters need to be normalized.

See also
GLM_GTX_vector_angle extension.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::orientedAngle (vec< 2, T, Q > const & x,
vec< 2, T, Q > const & y 
)
-
- -

Returns the oriented angle between two 2d vectors.

-

Parameters need to be normalized.

See also
GLM_GTX_vector_angle extension.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL T glm::orientedAngle (vec< 3, T, Q > const & x,
vec< 3, T, Q > const & y,
vec< 3, T, Q > const & ref 
)
-
- -

Returns the oriented angle between two 3d vectors based from a reference axis.

-

Parameters need to be normalized.

See also
GLM_GTX_vector_angle extension.
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00368.html b/tests/OpenGL/package/glm/doc/api/a00368.html deleted file mode 100644 index 935786a9..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00368.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_vector_query - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
GLM_GTX_vector_query
-
-
- -

Include <glm/gtx/vector_query.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL bool areCollinear (vec< L, T, Q > const &v0, vec< L, T, Q > const &v1, T const &epsilon)
 Check whether two vectors are collinears. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL bool areOrthogonal (vec< L, T, Q > const &v0, vec< L, T, Q > const &v1, T const &epsilon)
 Check whether two vectors are orthogonals. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL bool areOrthonormal (vec< L, T, Q > const &v0, vec< L, T, Q > const &v1, T const &epsilon)
 Check whether two vectors are orthonormal. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, bool, Q > isCompNull (vec< L, T, Q > const &v, T const &epsilon)
 Check whether a each component of a vector is null. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL bool isNormalized (vec< L, T, Q > const &v, T const &epsilon)
 Check whether a vector is normalized. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL bool isNull (vec< L, T, Q > const &v, T const &epsilon)
 Check whether a vector is null. More...
 
-

Detailed Description

-

Include <glm/gtx/vector_query.hpp> to use the features of this extension.

-

Query informations of vector types

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::areCollinear (vec< L, T, Q > const & v0,
vec< L, T, Q > const & v1,
T const & epsilon 
)
-
- -

Check whether two vectors are collinears.

-
See also
GLM_GTX_vector_query extensions.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::areOrthogonal (vec< L, T, Q > const & v0,
vec< L, T, Q > const & v1,
T const & epsilon 
)
-
- -

Check whether two vectors are orthogonals.

-
See also
GLM_GTX_vector_query extensions.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::areOrthonormal (vec< L, T, Q > const & v0,
vec< L, T, Q > const & v1,
T const & epsilon 
)
-
- -

Check whether two vectors are orthonormal.

-
See also
GLM_GTX_vector_query extensions.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, bool, Q> glm::isCompNull (vec< L, T, Q > const & v,
T const & epsilon 
)
-
- -

Check whether a each component of a vector is null.

-
See also
GLM_GTX_vector_query extensions.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::isNormalized (vec< L, T, Q > const & v,
T const & epsilon 
)
-
- -

Check whether a vector is normalized.

-
See also
GLM_GTX_vector_query extensions.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL bool glm::isNull (vec< L, T, Q > const & v,
T const & epsilon 
)
-
- -

Check whether a vector is null.

-
See also
GLM_GTX_vector_query extensions.
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00369.html b/tests/OpenGL/package/glm/doc/api/a00369.html deleted file mode 100644 index c2496349..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00369.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - -0.9.9 API documentation: GLM_GTX_wrap - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- - -
-
- -

Include <glm/gtx/wrap.hpp> to use the features of this extension. -More...

- - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL genType clamp (genType const &Texcoord)
 Simulate GL_CLAMP OpenGL wrap mode. More...
 
template<typename genType >
GLM_FUNC_DECL genType mirrorClamp (genType const &Texcoord)
 Simulate GL_MIRRORED_REPEAT OpenGL wrap mode. More...
 
template<typename genType >
GLM_FUNC_DECL genType mirrorRepeat (genType const &Texcoord)
 Simulate GL_MIRROR_REPEAT OpenGL wrap mode. More...
 
template<typename genType >
GLM_FUNC_DECL genType repeat (genType const &Texcoord)
 Simulate GL_REPEAT OpenGL wrap mode. More...
 
-

Detailed Description

-

Include <glm/gtx/wrap.hpp> to use the features of this extension.

-

Wrapping mode of texture coordinates.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::clamp (genType const & Texcoord)
-
- -

Simulate GL_CLAMP OpenGL wrap mode.

-
See also
GLM_GTX_wrap extension.
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::mirrorClamp (genType const & Texcoord)
-
- -

Simulate GL_MIRRORED_REPEAT OpenGL wrap mode.

-
See also
GLM_GTX_wrap extension.
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::mirrorRepeat (genType const & Texcoord)
-
- -

Simulate GL_MIRROR_REPEAT OpenGL wrap mode.

-
See also
GLM_GTX_wrap extension.
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL genType glm::repeat (genType const & Texcoord)
-
- -

Simulate GL_REPEAT OpenGL wrap mode.

-
See also
GLM_GTX_wrap extension.
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00370.html b/tests/OpenGL/package/glm/doc/api/a00370.html deleted file mode 100644 index d829e28b..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00370.html +++ /dev/null @@ -1,639 +0,0 @@ - - - - - - -0.9.9 API documentation: Integer functions - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Integer functions
-
-
- -

Provides GLSL functions on integer types. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename genType >
GLM_FUNC_DECL int bitCount (genType v)
 Returns the number of bits set to 1 in the binary representation of value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, int, Q > bitCount (vec< L, T, Q > const &v)
 Returns the number of bits set to 1 in the binary representation of value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > bitfieldExtract (vec< L, T, Q > const &Value, int Offset, int Bits)
 Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of the result. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > bitfieldInsert (vec< L, T, Q > const &Base, vec< L, T, Q > const &Insert, int Offset, int Bits)
 Returns the insertion the bits least-significant bits of insert into base. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > bitfieldReverse (vec< L, T, Q > const &v)
 Returns the reversal of the bits of value. More...
 
template<typename genIUType >
GLM_FUNC_DECL int findLSB (genIUType x)
 Returns the bit number of the least significant bit set to 1 in the binary representation of value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, int, Q > findLSB (vec< L, T, Q > const &v)
 Returns the bit number of the least significant bit set to 1 in the binary representation of value. More...
 
template<typename genIUType >
GLM_FUNC_DECL int findMSB (genIUType x)
 Returns the bit number of the most significant bit in the binary representation of value. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, int, Q > findMSB (vec< L, T, Q > const &v)
 Returns the bit number of the most significant bit in the binary representation of value. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL void imulExtended (vec< L, int, Q > const &x, vec< L, int, Q > const &y, vec< L, int, Q > &msb, vec< L, int, Q > &lsb)
 Multiplies 32-bit integers x and y, producing a 64-bit result. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, uint, Q > uaddCarry (vec< L, uint, Q > const &x, vec< L, uint, Q > const &y, vec< L, uint, Q > &carry)
 Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32). More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL void umulExtended (vec< L, uint, Q > const &x, vec< L, uint, Q > const &y, vec< L, uint, Q > &msb, vec< L, uint, Q > &lsb)
 Multiplies 32-bit integers x and y, producing a 64-bit result. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL vec< L, uint, Q > usubBorrow (vec< L, uint, Q > const &x, vec< L, uint, Q > const &y, vec< L, uint, Q > &borrow)
 Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise. More...
 
-

Detailed Description

-

Provides GLSL functions on integer types.

-

These all operate component-wise. The description is per component. The notation [a, b] means the set of bits from bit-number a through bit-number b, inclusive. The lowest-order bit is bit 0.

-

Include <glm/integer.hpp> to use these core features.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL int glm::bitCount (genType v)
-
- -

Returns the number of bits set to 1 in the binary representation of value.

-
Template Parameters
- - -
genTypeSigned or unsigned integer scalar or vector types.
-
-
-
See also
GLSL bitCount man page
-
-GLSL 4.20.8 specification, section 8.8 Integer Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, int, Q> glm::bitCount (vec< L, T, Q > const & v)
-
- -

Returns the number of bits set to 1 in the binary representation of value.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TSigned or unsigned integer scalar or vector types.
-
-
-
See also
GLSL bitCount man page
-
-GLSL 4.20.8 specification, section 8.8 Integer Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::bitfieldExtract (vec< L, T, Q > const & Value,
int Offset,
int Bits 
)
-
- -

Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of the result.

-

For unsigned data types, the most significant bits of the result will be set to zero. For signed data types, the most significant bits will be set to the value of bit offset + base - 1.

-

If bits is zero, the result will be zero. The result will be undefined if offset or bits is negative, or if the sum of offset and bits is greater than the number of bits used to store the operand.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TSigned or unsigned integer scalar types.
-
-
-
See also
GLSL bitfieldExtract man page
-
-GLSL 4.20.8 specification, section 8.8 Integer Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::bitfieldInsert (vec< L, T, Q > const & Base,
vec< L, T, Q > const & Insert,
int Offset,
int Bits 
)
-
- -

Returns the insertion the bits least-significant bits of insert into base.

-

The result will have bits [offset, offset + bits - 1] taken from bits [0, bits - 1] of insert, and all other bits taken directly from the corresponding bits of base. If bits is zero, the result will simply be base. The result will be undefined if offset or bits is negative, or if the sum of offset and bits is greater than the number of bits used to store the operand.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TSigned or unsigned integer scalar or vector types.
-
-
-
See also
GLSL bitfieldInsert man page
-
-GLSL 4.20.8 specification, section 8.8 Integer Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::bitfieldReverse (vec< L, T, Q > const & v)
-
- -

Returns the reversal of the bits of value.

-

The bit numbered n of the result will be taken from bit (bits - 1) - n of value, where bits is the total number of bits used to represent value.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TSigned or unsigned integer scalar or vector types.
-
-
-
See also
GLSL bitfieldReverse man page
-
-GLSL 4.20.8 specification, section 8.8 Integer Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL int glm::findLSB (genIUType x)
-
- -

Returns the bit number of the least significant bit set to 1 in the binary representation of value.

-

If value is zero, -1 will be returned.

-
Template Parameters
- - -
genIUTypeSigned or unsigned integer scalar types.
-
-
-
See also
GLSL findLSB man page
-
-GLSL 4.20.8 specification, section 8.8 Integer Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, int, Q> glm::findLSB (vec< L, T, Q > const & v)
-
- -

Returns the bit number of the least significant bit set to 1 in the binary representation of value.

-

If value is zero, -1 will be returned.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TSigned or unsigned integer scalar types.
-
-
-
See also
GLSL findLSB man page
-
-GLSL 4.20.8 specification, section 8.8 Integer Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL int glm::findMSB (genIUType x)
-
- -

Returns the bit number of the most significant bit in the binary representation of value.

-

For positive integers, the result will be the bit number of the most significant bit set to 1. For negative integers, the result will be the bit number of the most significant bit set to 0. For a value of zero or negative one, -1 will be returned.

-
Template Parameters
- - -
genIUTypeSigned or unsigned integer scalar types.
-
-
-
See also
GLSL findMSB man page
-
-GLSL 4.20.8 specification, section 8.8 Integer Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, int, Q> glm::findMSB (vec< L, T, Q > const & v)
-
- -

Returns the bit number of the most significant bit in the binary representation of value.

-

For positive integers, the result will be the bit number of the most significant bit set to 1. For negative integers, the result will be the bit number of the most significant bit set to 0. For a value of zero or negative one, -1 will be returned.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TSigned or unsigned integer scalar types.
-
-
-
See also
GLSL findMSB man page
-
-GLSL 4.20.8 specification, section 8.8 Integer Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL void glm::imulExtended (vec< L, int, Q > const & x,
vec< L, int, Q > const & y,
vec< L, int, Q > & msb,
vec< L, int, Q > & lsb 
)
-
- -

Multiplies 32-bit integers x and y, producing a 64-bit result.

-

The 32 least-significant bits are returned in lsb. The 32 most-significant bits are returned in msb.

-
Template Parameters
- - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
-
-
-
See also
GLSL imulExtended man page
-
-GLSL 4.20.8 specification, section 8.8 Integer Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, uint, Q> glm::uaddCarry (vec< L, uint, Q > const & x,
vec< L, uint, Q > const & y,
vec< L, uint, Q > & carry 
)
-
- -

Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32).

-

The value carry is set to 0 if the sum was less than pow(2, 32), or to 1 otherwise.

-
Template Parameters
- - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
-
-
-
See also
GLSL uaddCarry man page
-
-GLSL 4.20.8 specification, section 8.8 Integer Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL void glm::umulExtended (vec< L, uint, Q > const & x,
vec< L, uint, Q > const & y,
vec< L, uint, Q > & msb,
vec< L, uint, Q > & lsb 
)
-
- -

Multiplies 32-bit integers x and y, producing a 64-bit result.

-

The 32 least-significant bits are returned in lsb. The 32 most-significant bits are returned in msb.

-
Template Parameters
- - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
-
-
-
See also
GLSL umulExtended man page
-
-GLSL 4.20.8 specification, section 8.8 Integer Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, uint, Q> glm::usubBorrow (vec< L, uint, Q > const & x,
vec< L, uint, Q > const & y,
vec< L, uint, Q > & borrow 
)
-
- -

Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise.

-

The value borrow is set to 0 if x >= y, or to 1 otherwise.

-
Template Parameters
- - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
-
-
-
See also
GLSL usubBorrow man page
-
-GLSL 4.20.8 specification, section 8.8 Integer Functions
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00371.html b/tests/OpenGL/package/glm/doc/api/a00371.html deleted file mode 100644 index 055d1d05..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00371.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - -0.9.9 API documentation: Matrix functions - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Matrix functions
-
-
- -

Provides GLSL matrix functions. -More...

- - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL T determinant (mat< C, R, T, Q > const &m)
 Return the determinant of a squared matrix. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL mat< C, R, T, Q > inverse (mat< C, R, T, Q > const &m)
 Return the inverse of a squared matrix. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL mat< C, R, T, Q > matrixCompMult (mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y)
 Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and y[i][j]. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL detail::outerProduct_trait< C, R, T, Q >::type outerProduct (vec< C, T, Q > const &c, vec< R, T, Q > const &r)
 Treats the first parameter c as a column vector and the second parameter r as a row vector and does a linear algebraic matrix multiply c * r. More...
 
template<length_t C, length_t R, typename T , qualifier Q>
GLM_FUNC_DECL mat< C, R, T, Q >::transpose_type transpose (mat< C, R, T, Q > const &x)
 Returns the transposed matrix of x. More...
 
-

Detailed Description

-

Provides GLSL matrix functions.

-

Include <glm/matrix.hpp> to use these core features.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL T glm::determinant (mat< C, R, T, Q > const & m)
-
- -

Return the determinant of a squared matrix.

-
Template Parameters
- - - - - -
CInteger between 1 and 4 included that qualify the number a column
RInteger between 1 and 4 included that qualify the number a row
TFloating-point or signed integer scalar types
QValue from qualifier enum
-
-
-
See also
GLSL determinant man page
-
-GLSL 4.20.8 specification, section 8.6 Matrix Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<C, R, T, Q> glm::inverse (mat< C, R, T, Q > const & m)
-
- -

Return the inverse of a squared matrix.

-
Template Parameters
- - - - - -
CInteger between 1 and 4 included that qualify the number a column
RInteger between 1 and 4 included that qualify the number a row
TFloating-point or signed integer scalar types
QValue from qualifier enum
-
-
-
See also
GLSL inverse man page
-
-GLSL 4.20.8 specification, section 8.6 Matrix Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL mat<C, R, T, Q> glm::matrixCompMult (mat< C, R, T, Q > const & x,
mat< C, R, T, Q > const & y 
)
-
- -

Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and y[i][j].

-
Template Parameters
- - - - - -
CInteger between 1 and 4 included that qualify the number a column
RInteger between 1 and 4 included that qualify the number a row
TFloating-point or signed integer scalar types
QValue from qualifier enum
-
-
-
See also
GLSL matrixCompMult man page
-
-GLSL 4.20.8 specification, section 8.6 Matrix Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL detail::outerProduct_trait<C, R, T, Q>::type glm::outerProduct (vec< C, T, Q > const & c,
vec< R, T, Q > const & r 
)
-
- -

Treats the first parameter c as a column vector and the second parameter r as a row vector and does a linear algebraic matrix multiply c * r.

-
Template Parameters
- - - - - -
CInteger between 1 and 4 included that qualify the number a column
RInteger between 1 and 4 included that qualify the number a row
TFloating-point or signed integer scalar types
QValue from qualifier enum
-
-
-
See also
GLSL outerProduct man page
-
-GLSL 4.20.8 specification, section 8.6 Matrix Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL mat<C, R, T, Q>::transpose_type glm::transpose (mat< C, R, T, Q > const & x)
-
- -

Returns the transposed matrix of x.

-
Template Parameters
- - - - - -
CInteger between 1 and 4 included that qualify the number a column
RInteger between 1 and 4 included that qualify the number a row
TFloating-point or signed integer scalar types
QValue from qualifier enum
-
-
-
See also
GLSL transpose man page
-
-GLSL 4.20.8 specification, section 8.6 Matrix Functions
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00372.html b/tests/OpenGL/package/glm/doc/api/a00372.html deleted file mode 100644 index 23b704c1..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00372.html +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - -0.9.9 API documentation: Floating-Point Pack and Unpack Functions - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Floating-Point Pack and Unpack Functions
-
-
- -

Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GLM_FUNC_DECL double packDouble2x32 (uvec2 const &v)
 Returns a double-qualifier value obtained by packing the components of v into a 64-bit value. More...
 
GLM_FUNC_DECL uint packHalf2x16 (vec2 const &v)
 Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these two 16- bit integers into a 32-bit unsigned integer. More...
 
GLM_FUNC_DECL uint packSnorm2x16 (vec2 const &v)
 First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. More...
 
GLM_FUNC_DECL uint packSnorm4x8 (vec4 const &v)
 First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. More...
 
GLM_FUNC_DECL uint packUnorm2x16 (vec2 const &v)
 First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. More...
 
GLM_FUNC_DECL uint packUnorm4x8 (vec4 const &v)
 First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. More...
 
GLM_FUNC_DECL uvec2 unpackDouble2x32 (double v)
 Returns a two-component unsigned integer vector representation of v. More...
 
GLM_FUNC_DECL vec2 unpackHalf2x16 (uint v)
 Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values. More...
 
GLM_FUNC_DECL vec2 unpackSnorm2x16 (uint p)
 First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. More...
 
GLM_FUNC_DECL vec4 unpackSnorm4x8 (uint p)
 First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. More...
 
GLM_FUNC_DECL vec2 unpackUnorm2x16 (uint p)
 First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. More...
 
GLM_FUNC_DECL vec4 unpackUnorm4x8 (uint p)
 First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. More...
 
-

Detailed Description

-

Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types.

-

These functions do not operate component-wise, rather as described in each case.

-

Include <glm/packing.hpp> to use these core features.

-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL double glm::packDouble2x32 (uvec2 const & v)
-
- -

Returns a double-qualifier value obtained by packing the components of v into a 64-bit value.

-

If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit- level representation of v is preserved. The first vector component specifies the 32 least significant bits; the second component specifies the 32 most significant bits.

-
See also
GLSL packDouble2x32 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint glm::packHalf2x16 (vec2 const & v)
-
- -

Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these two 16- bit integers into a 32-bit unsigned integer.

-

The first vector component specifies the 16 least-significant bits of the result; the second component specifies the 16 most-significant bits.

-
See also
GLSL packHalf2x16 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint glm::packSnorm2x16 (vec2 const & v)
-
- -

First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

-

Then, the results are packed into the returned 32-bit unsigned integer.

-

The conversion for component c of v to fixed point is done as follows: packSnorm2x16: round(clamp(v, -1, +1) * 32767.0)

-

The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

-
See also
GLSL packSnorm2x16 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint glm::packSnorm4x8 (vec4 const & v)
-
- -

First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

-

Then, the results are packed into the returned 32-bit unsigned integer.

-

The conversion for component c of v to fixed point is done as follows: packSnorm4x8: round(clamp(c, -1, +1) * 127.0)

-

The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

-
See also
GLSL packSnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint glm::packUnorm2x16 (vec2 const & v)
-
- -

First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

-

Then, the results are packed into the returned 32-bit unsigned integer.

-

The conversion for component c of v to fixed point is done as follows: packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)

-

The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

-
See also
GLSL packUnorm2x16 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uint glm::packUnorm4x8 (vec4 const & v)
-
- -

First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.

-

Then, the results are packed into the returned 32-bit unsigned integer.

-

The conversion for component c of v to fixed point is done as follows: packUnorm4x8: round(clamp(c, 0, +1) * 255.0)

-

The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.

-
See also
GLSL packUnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL uvec2 glm::unpackDouble2x32 (double v)
-
- -

Returns a two-component unsigned integer vector representation of v.

-

The bit-level representation of v is preserved. The first component of the vector contains the 32 least significant bits of the double; the second component consists the 32 most significant bits.

-
See also
GLSL unpackDouble2x32 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec2 glm::unpackHalf2x16 (uint v)
-
- -

Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.

-

The first component of the vector is obtained from the 16 least-significant bits of v; the second component is obtained from the 16 most-significant bits of v.

-
See also
GLSL unpackHalf2x16 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec2 glm::unpackSnorm2x16 (uint p)
-
- -

First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

-

Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

-

The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm2x16: clamp(f / 32767.0, -1, +1)

-

The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

-
See also
GLSL unpackSnorm2x16 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec4 glm::unpackSnorm4x8 (uint p)
-
- -

First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

-

Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

-

The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm4x8: clamp(f / 127.0, -1, +1)

-

The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

-
See also
GLSL unpackSnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec2 glm::unpackUnorm2x16 (uint p)
-
- -

First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

-

Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

-

The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm2x16: f / 65535.0

-

The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

-
See also
GLSL unpackUnorm2x16 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec4 glm::unpackUnorm4x8 (uint p)
-
- -

First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.

-

Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.

-

The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0

-

The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.

-
See also
GLSL unpackUnorm4x8 man page
-
-GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00373.html b/tests/OpenGL/package/glm/doc/api/a00373.html deleted file mode 100644 index 7f6e4685..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00373.html +++ /dev/null @@ -1,621 +0,0 @@ - - - - - - -0.9.9 API documentation: Angle and Trigonometry Functions - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Angle and Trigonometry Functions
-
-
- -

Function parameters specified as angle are assumed to be in units of radians. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > acos (vec< L, T, Q > const &x)
 Arc cosine. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > acosh (vec< L, T, Q > const &x)
 Arc hyperbolic cosine; returns the non-negative inverse of cosh. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > asin (vec< L, T, Q > const &x)
 Arc sine. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > asinh (vec< L, T, Q > const &x)
 Arc hyperbolic sine; returns the inverse of sinh. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > atan (vec< L, T, Q > const &y, vec< L, T, Q > const &x)
 Arc tangent. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > atan (vec< L, T, Q > const &y_over_x)
 Arc tangent. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > atanh (vec< L, T, Q > const &x)
 Arc hyperbolic tangent; returns the inverse of tanh. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > cos (vec< L, T, Q > const &angle)
 The standard trigonometric cosine function. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > cosh (vec< L, T, Q > const &angle)
 Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > degrees (vec< L, T, Q > const &radians)
 Converts radians to degrees and returns the result. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > radians (vec< L, T, Q > const &degrees)
 Converts degrees to radians and returns the result. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > sin (vec< L, T, Q > const &angle)
 The standard trigonometric sine function. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > sinh (vec< L, T, Q > const &angle)
 Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > tan (vec< L, T, Q > const &angle)
 The standard trigonometric tangent function. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL vec< L, T, Q > tanh (vec< L, T, Q > const &angle)
 Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) More...
 
-

Detailed Description

-

Function parameters specified as angle are assumed to be in units of radians.

-

In no case will any of these functions result in a divide by zero error. If the divisor of a ratio is 0, then results will be undefined.

-

These all operate component-wise. The description is per component.

-

Include <glm/trigonometric.hpp> to use these core features.

-
See also
ext_vector_trigonometric
-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::acos (vec< L, T, Q > const & x)
-
- -

Arc cosine.

-

Returns an angle whose sine is x. The range of values returned by this function is [0, PI]. Results are undefined if |x| > 1.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL acos man page
-
-GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::acosh (vec< L, T, Q > const & x)
-
- -

Arc hyperbolic cosine; returns the non-negative inverse of cosh.

-

Results are undefined if x < 1.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL acosh man page
-
-GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::asin (vec< L, T, Q > const & x)
-
- -

Arc sine.

-

Returns an angle whose sine is x. The range of values returned by this function is [-PI/2, PI/2]. Results are undefined if |x| > 1.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL asin man page
-
-GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::asinh (vec< L, T, Q > const & x)
-
- -

Arc hyperbolic sine; returns the inverse of sinh.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL asinh man page
-
-GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::atan (vec< L, T, Q > const & y,
vec< L, T, Q > const & x 
)
-
- -

Arc tangent.

-

Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL atan man page
-
-GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
- -

Referenced by glm::atan2().

- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::atan (vec< L, T, Q > const & y_over_x)
-
- -

Arc tangent.

-

Returns an angle whose tangent is y_over_x. The range of values returned by this function is [-PI/2, PI/2].

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL atan man page
-
-GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::atanh (vec< L, T, Q > const & x)
-
- -

Arc hyperbolic tangent; returns the inverse of tanh.

-

Results are undefined if abs(x) >= 1.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL atanh man page
-
-GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::cos (vec< L, T, Q > const & angle)
-
- -

The standard trigonometric cosine function.

-

The values returned by this function will range from [-1, 1].

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL cos man page
-
-GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::cosh (vec< L, T, Q > const & angle)
-
- -

Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL cosh man page
-
-GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> glm::degrees (vec< L, T, Q > const & radians)
-
- -

Converts radians to degrees and returns the result.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL degrees man page
-
-GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> glm::radians (vec< L, T, Q > const & degrees)
-
- -

Converts degrees to radians and returns the result.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL radians man page
-
-GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::sin (vec< L, T, Q > const & angle)
-
- -

The standard trigonometric sine function.

-

The values returned by this function will range from [-1, 1].

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL sin man page
-
-GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::sinh (vec< L, T, Q > const & angle)
-
- -

Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL sinh man page
-
-GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::tan (vec< L, T, Q > const & angle)
-
- -

The standard trigonometric tangent function.

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL tan man page
-
-GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL vec<L, T, Q> glm::tanh (vec< L, T, Q > const & angle)
-
- -

Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)

-
Template Parameters
- - - - -
LInteger between 1 and 4 included that qualify the dimension of the vector
TFloating-point scalar types
QValue from qualifier enum
-
-
-
See also
GLSL tanh man page
-
-GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/a00374.html b/tests/OpenGL/package/glm/doc/api/a00374.html deleted file mode 100644 index 114bd700..00000000 --- a/tests/OpenGL/package/glm/doc/api/a00374.html +++ /dev/null @@ -1,452 +0,0 @@ - - - - - - -0.9.9 API documentation: Vector Relational Functions - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
- -
-
Vector Relational Functions
-
-
- -

Relational and equality operators (<, <=, >, >=, ==, !=) are defined to operate on scalars and produce scalar Boolean results. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<length_t L, qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR bool all (vec< L, bool, Q > const &v)
 Returns true if all components of x are true. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR bool any (vec< L, bool, Q > const &v)
 Returns true if any component of x is true. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > equal (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the component-wise comparison of result x == y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > greaterThan (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the component-wise comparison of result x > y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > greaterThanEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the component-wise comparison of result x >= y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > lessThan (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the component-wise comparison result of x < y. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > lessThanEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the component-wise comparison of result x <= y. More...
 
template<length_t L, qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > not_ (vec< L, bool, Q > const &v)
 Returns the component-wise logical complement of x. More...
 
template<length_t L, typename T , qualifier Q>
GLM_FUNC_DECL GLM_CONSTEXPR vec< L, bool, Q > notEqual (vec< L, T, Q > const &x, vec< L, T, Q > const &y)
 Returns the component-wise comparison of result x != y. More...
 
-

Detailed Description

-

Relational and equality operators (<, <=, >, >=, ==, !=) are defined to operate on scalars and produce scalar Boolean results.

-

For vector results, use the following built-in functions.

-

In all cases, the sizes of all the input and return vectors for any particular call must match.

-

Include <glm/vector_relational.hpp> to use these core features.

-
See also
GLM_EXT_vector_relational
-

Function Documentation

- -
-
- - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR bool glm::all (vec< L, bool, Q > const & v)
-
- -

Returns true if all components of x are true.

-
Template Parameters
- - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
-
-
-
See also
GLSL all man page
-
-GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR bool glm::any (vec< L, bool, Q > const & v)
-
- -

Returns true if any component of x is true.

-
Template Parameters
- - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
-
-
-
See also
GLSL any man page
-
-GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> glm::equal (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Returns the component-wise comparison of result x == y.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TA floating-point, integer or bool scalar type.
-
-
-
See also
GLSL equal man page
-
-GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> glm::greaterThan (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Returns the component-wise comparison of result x > y.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TA floating-point or integer scalar type.
-
-
-
See also
GLSL greaterThan man page
-
-GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> glm::greaterThanEqual (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Returns the component-wise comparison of result x >= y.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TA floating-point or integer scalar type.
-
-
-
See also
GLSL greaterThanEqual man page
-
-GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> glm::lessThan (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Returns the component-wise comparison result of x < y.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TA floating-point or integer scalar type.
-
-
-
See also
GLSL lessThan man page
-
-GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> glm::lessThanEqual (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Returns the component-wise comparison of result x <= y.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TA floating-point or integer scalar type.
-
-
-
See also
GLSL lessThanEqual man page
-
-GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
- -
-
- -
-
- - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> glm::not_ (vec< L, bool, Q > const & v)
-
- -

Returns the component-wise logical complement of x.

-

/!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead.

-
Template Parameters
- - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
-
-
-
See also
GLSL not man page
-
-GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> glm::notEqual (vec< L, T, Q > const & x,
vec< L, T, Q > const & y 
)
-
- -

Returns the component-wise comparison of result x != y.

-
Template Parameters
- - - -
LAn integer between 1 and 4 included that qualify the dimension of the vector.
TA floating-point, integer or bool scalar type.
-
-
-
See also
GLSL notEqual man page
-
-GLSL 4.20.8 specification, section 8.7 Vector Relational Functions
- -
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/arrowdown.png b/tests/OpenGL/package/glm/doc/api/arrowdown.png deleted file mode 100644 index 0b63f6d38c4b9ec907b820192ebe9724ed6eca22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 diff --git a/tests/OpenGL/package/glm/doc/api/arrowright.png b/tests/OpenGL/package/glm/doc/api/arrowright.png deleted file mode 100644 index c6ee22f937a07d1dbfc27c669d11f8ed13e2f152..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K diff --git a/tests/OpenGL/package/glm/doc/api/bc_s.png b/tests/OpenGL/package/glm/doc/api/bc_s.png deleted file mode 100644 index a274117185b99f403e7ec5e6cebee7c654c143a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 600 zcmV-e0;m0nP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;(#7eog=Y0m(^3K~y+TZIaDPTTu|j2Lz>{XoY~)O$Dh| zyATzzHBg9MRHTI#H!3blsS7J85z%UG6UjnE$Rdj_0tOx!N`ycQZxP)KVuDf^6-2=g zs8A4d{sPa0+{eo^i{CKk++pT^3F3h~GAoJ?Km6i_q2EG!Du+yXj=Aa*7+&-u{^}nx zp>t9}t)7D*)}!pg4*o@E>1|Ovm}DH*`y&=?yB8IPZl#jq8ut8u*k9Ufpw*5(=XLDn!P;W!VULw%T6sc9+zVciNQSY?B0NY=1 z{&7(|2$l_0;M)2)@f4A`kZw?MN_JU4kGi{9etMSZ{mI mTy+UL=Lpd!dstz950N_+H^+xJK<-@t0000_E)H!3HEvS)PI@#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S`0VrE{6US4X6f{C7i zo@I`4ogYw*rKgKyh(vg@1KWHx>A&qphK!k$92(g)gk6Pn_=FlX8$6qSB$)Ly_OfZZ mgfSd0Sbc!OlQE>Jk&%J1|%O$WD@{VjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCf`#@Q5sCVBk9p!i>lBSEK+1B}!Z)N`mv#O3D+9QW**oGxJLH@={9_O!N%& zEOU(O{D5kVJzX3_G=h^I*ypQB|7|xaWS*eZ#Fg0fLCYnqC0KEn(i$#KEe6IWE{BE% gOacc&4jf=$xZ3Z0eESR?CZKi(Pgg&ebxsLQ0ArjqIRF3v diff --git a/tests/OpenGL/package/glm/doc/api/dir_033f5edb0915b828d2c46ed4804e5503.html b/tests/OpenGL/package/glm/doc/api/dir_033f5edb0915b828d2c46ed4804e5503.html deleted file mode 100644 index a6d3c488..00000000 --- a/tests/OpenGL/package/glm/doc/api/dir_033f5edb0915b828d2c46ed4804e5503.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - -0.9.9 API documentation: detail Directory Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
detail Directory Reference
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Files

file  _features.hpp [code]
 
file  _fixes.hpp [code]
 
file  _noise.hpp [code]
 
file  _swizzle.hpp [code]
 
file  _swizzle_func.hpp [code]
 
file  _vectorize.hpp [code]
 
file  compute_common.hpp [code]
 
file  compute_vector_relational.hpp [code]
 
file  qualifier.hpp [code]
 
file  setup.hpp [code]
 
file  type_float.hpp [code]
 
file  type_half.hpp [code]
 
file  type_mat2x2.hpp [code]
 Core features
 
file  type_mat2x3.hpp [code]
 Core features
 
file  type_mat2x4.hpp [code]
 Core features
 
file  type_mat3x2.hpp [code]
 Core features
 
file  type_mat3x3.hpp [code]
 Core features
 
file  type_mat3x4.hpp [code]
 Core features
 
file  type_mat4x2.hpp [code]
 Core features
 
file  type_mat4x3.hpp [code]
 Core features
 
file  type_mat4x4.hpp [code]
 Core features
 
file  type_quat.hpp [code]
 Core features
 
file  type_vec1.hpp [code]
 Core features
 
file  type_vec2.hpp [code]
 Core features
 
file  type_vec3.hpp [code]
 Core features
 
file  type_vec4.hpp [code]
 Core features
 
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/dir_3a581ba30d25676e4b797b1f96d53b45.html b/tests/OpenGL/package/glm/doc/api/dir_3a581ba30d25676e4b797b1f96d53b45.html deleted file mode 100644 index 4fbf6250..00000000 --- a/tests/OpenGL/package/glm/doc/api/dir_3a581ba30d25676e4b797b1f96d53b45.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -0.9.9 API documentation: F: Directory Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
F: Directory Reference
-
-
- - - - -

-Directories

directory  G-Truc
 
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/dir_44e5e654415abd9ca6fdeaddaff8565e.html b/tests/OpenGL/package/glm/doc/api/dir_44e5e654415abd9ca6fdeaddaff8565e.html deleted file mode 100644 index 0e3b7743..00000000 --- a/tests/OpenGL/package/glm/doc/api/dir_44e5e654415abd9ca6fdeaddaff8565e.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - -0.9.9 API documentation: glm Directory Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
glm Directory Reference
-
-
- - - - - - -

-Directories

directory  doc
 
directory  glm
 
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/dir_4c6bd29c73fa4e5a2509e1c15f846751.html b/tests/OpenGL/package/glm/doc/api/dir_4c6bd29c73fa4e5a2509e1c15f846751.html deleted file mode 100644 index 006a7cbe..00000000 --- a/tests/OpenGL/package/glm/doc/api/dir_4c6bd29c73fa4e5a2509e1c15f846751.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -0.9.9 API documentation: gtc Directory Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
gtc Directory Reference
-
- - - - - diff --git a/tests/OpenGL/package/glm/doc/api/dir_5189610d3ba09ec39b766fb99b34cd93.html b/tests/OpenGL/package/glm/doc/api/dir_5189610d3ba09ec39b766fb99b34cd93.html deleted file mode 100644 index 10dd489d..00000000 --- a/tests/OpenGL/package/glm/doc/api/dir_5189610d3ba09ec39b766fb99b34cd93.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -0.9.9 API documentation: doc Directory Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
doc Directory Reference
-
-
- - - - -

-Files

file  man.doxy [code]
 
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/dir_6b66465792d005310484819a0eb0b0d3.html b/tests/OpenGL/package/glm/doc/api/dir_6b66465792d005310484819a0eb0b0d3.html deleted file mode 100644 index e2821d0c..00000000 --- a/tests/OpenGL/package/glm/doc/api/dir_6b66465792d005310484819a0eb0b0d3.html +++ /dev/null @@ -1,403 +0,0 @@ - - - - - - -0.9.9 API documentation: ext Directory Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
ext Directory Reference
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Files

file  matrix_clip_space.hpp [code]
 GLM_EXT_matrix_clip_space
 
file  matrix_common.hpp [code]
 GLM_EXT_matrix_common
 
file  matrix_double2x2.hpp [code]
 Core features
 
file  matrix_double2x2_precision.hpp [code]
 Core features
 
file  matrix_double2x3.hpp [code]
 Core features
 
file  matrix_double2x3_precision.hpp [code]
 Core features
 
file  matrix_double2x4.hpp [code]
 Core features
 
file  matrix_double2x4_precision.hpp [code]
 Core features
 
file  matrix_double3x2.hpp [code]
 Core features
 
file  matrix_double3x2_precision.hpp [code]
 Core features
 
file  matrix_double3x3.hpp [code]
 Core features
 
file  matrix_double3x3_precision.hpp [code]
 Core features
 
file  matrix_double3x4.hpp [code]
 Core features
 
file  matrix_double3x4_precision.hpp [code]
 Core features
 
file  matrix_double4x2.hpp [code]
 Core features
 
file  matrix_double4x2_precision.hpp [code]
 Core features
 
file  matrix_double4x3.hpp [code]
 Core features
 
file  matrix_double4x3_precision.hpp [code]
 Core features
 
file  matrix_double4x4.hpp [code]
 Core features
 
file  matrix_double4x4_precision.hpp [code]
 Core features
 
file  matrix_float2x2.hpp [code]
 Core features
 
file  matrix_float2x2_precision.hpp [code]
 Core features
 
file  matrix_float2x3.hpp [code]
 Core features
 
file  matrix_float2x3_precision.hpp [code]
 Core features
 
file  matrix_float2x4.hpp [code]
 Core features
 
file  matrix_float2x4_precision.hpp [code]
 Core features
 
file  matrix_float3x2.hpp [code]
 Core features
 
file  matrix_float3x2_precision.hpp [code]
 Core features
 
file  matrix_float3x3.hpp [code]
 Core features
 
file  matrix_float3x3_precision.hpp [code]
 Core features
 
file  matrix_float3x4.hpp [code]
 Core features
 
file  matrix_float3x4_precision.hpp [code]
 Core features
 
file  matrix_float4x2.hpp [code]
 Core features
 
file  matrix_float4x2_precision.hpp [code]
 
file  matrix_float4x3.hpp [code]
 Core features
 
file  matrix_float4x3_precision.hpp [code]
 Core features
 
file  matrix_float4x4.hpp [code]
 Core features
 
file  matrix_float4x4_precision.hpp [code]
 Core features
 
file  matrix_projection.hpp [code]
 GLM_EXT_matrix_projection
 
file  matrix_relational.hpp [code]
 GLM_EXT_matrix_relational
 
file  ext/matrix_transform.hpp [code]
 GLM_EXT_matrix_transform
 
file  quaternion_common.hpp [code]
 GLM_EXT_quaternion_common
 
file  quaternion_double.hpp [code]
 GLM_EXT_quaternion_double
 
file  quaternion_double_precision.hpp [code]
 GLM_EXT_quaternion_double_precision
 
file  quaternion_exponential.hpp [code]
 GLM_EXT_quaternion_exponential
 
file  quaternion_float.hpp [code]
 GLM_EXT_quaternion_float
 
file  quaternion_float_precision.hpp [code]
 GLM_EXT_quaternion_float_precision
 
file  quaternion_geometric.hpp [code]
 GLM_EXT_quaternion_geometric
 
file  quaternion_relational.hpp [code]
 GLM_EXT_quaternion_relational
 
file  quaternion_transform.hpp [code]
 GLM_EXT_quaternion_transform
 
file  quaternion_trigonometric.hpp [code]
 GLM_EXT_quaternion_trigonometric
 
file  scalar_common.hpp [code]
 GLM_EXT_scalar_common
 
file  scalar_constants.hpp [code]
 GLM_EXT_scalar_constants
 
file  scalar_int_sized.hpp [code]
 GLM_EXT_scalar_int_sized
 
file  scalar_integer.hpp [code]
 GLM_EXT_scalar_integer
 
file  ext/scalar_relational.hpp [code]
 GLM_EXT_scalar_relational
 
file  scalar_uint_sized.hpp [code]
 GLM_EXT_scalar_uint_sized
 
file  scalar_ulp.hpp [code]
 GLM_EXT_scalar_ulp
 
file  vector_bool1.hpp [code]
 GLM_EXT_vector_bool1
 
file  vector_bool1_precision.hpp [code]
 GLM_EXT_vector_bool1_precision
 
file  vector_bool2.hpp [code]
 Core features
 
file  vector_bool2_precision.hpp [code]
 Core features
 
file  vector_bool3.hpp [code]
 Core features
 
file  vector_bool3_precision.hpp [code]
 Core features
 
file  vector_bool4.hpp [code]
 Core features
 
file  vector_bool4_precision.hpp [code]
 Core features
 
file  vector_common.hpp [code]
 GLM_EXT_vector_common
 
file  vector_double1.hpp [code]
 GLM_EXT_vector_double1
 
file  vector_double1_precision.hpp [code]
 GLM_EXT_vector_double1_precision
 
file  vector_double2.hpp [code]
 Core features
 
file  vector_double2_precision.hpp [code]
 Core features
 
file  vector_double3.hpp [code]
 Core features
 
file  vector_double3_precision.hpp [code]
 Core features
 
file  vector_double4.hpp [code]
 Core features
 
file  vector_double4_precision.hpp [code]
 Core features
 
file  vector_float1.hpp [code]
 GLM_EXT_vector_float1
 
file  vector_float1_precision.hpp [code]
 GLM_EXT_vector_float1_precision
 
file  vector_float2.hpp [code]
 Core features
 
file  vector_float2_precision.hpp [code]
 Core features
 
file  vector_float3.hpp [code]
 Core features
 
file  vector_float3_precision.hpp [code]
 Core features
 
file  vector_float4.hpp [code]
 Core features
 
file  vector_float4_precision.hpp [code]
 Core features
 
file  vector_int1.hpp [code]
 GLM_EXT_vector_int1
 
file  vector_int1_precision.hpp [code]
 GLM_EXT_vector_int1_precision
 
file  vector_int2.hpp [code]
 Core features
 
file  vector_int2_precision.hpp [code]
 Core features
 
file  vector_int3.hpp [code]
 Core features
 
file  vector_int3_precision.hpp [code]
 Core features
 
file  vector_int4.hpp [code]
 Core features
 
file  vector_int4_precision.hpp [code]
 Core features
 
file  vector_integer.hpp [code]
 GLM_EXT_vector_integer
 
file  ext/vector_relational.hpp [code]
 GLM_EXT_vector_relational
 
file  vector_uint1.hpp [code]
 GLM_EXT_vector_uint1
 
file  vector_uint1_precision.hpp [code]
 GLM_EXT_vector_uint1_precision
 
file  vector_uint2.hpp [code]
 Core features
 
file  vector_uint2_precision.hpp [code]
 Core features
 
file  vector_uint3.hpp [code]
 Core features
 
file  vector_uint3_precision.hpp [code]
 Core features
 
file  vector_uint4.hpp [code]
 Core features
 
file  vector_uint4_precision.hpp [code]
 Core features
 
file  vector_ulp.hpp [code]
 GLM_EXT_vector_ulp
 
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/dir_9e5fe034a00e89334fd5186c3e7db156.html b/tests/OpenGL/package/glm/doc/api/dir_9e5fe034a00e89334fd5186c3e7db156.html deleted file mode 100644 index 1f566e99..00000000 --- a/tests/OpenGL/package/glm/doc/api/dir_9e5fe034a00e89334fd5186c3e7db156.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -0.9.9 API documentation: G-Truc Directory Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
G-Truc Directory Reference
-
-
- - - - -

-Directories

directory  Source
 
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/dir_a8bee7be44182a33f3820393ae0b105d.html b/tests/OpenGL/package/glm/doc/api/dir_a8bee7be44182a33f3820393ae0b105d.html deleted file mode 100644 index 55fb6cc9..00000000 --- a/tests/OpenGL/package/glm/doc/api/dir_a8bee7be44182a33f3820393ae0b105d.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -0.9.9 API documentation: G-Truc Directory Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
G-Truc Directory Reference
-
-
- - - - -

-Directories

directory  glm
 
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/dir_cef2d71d502cb69a9252bca2297d9549.html b/tests/OpenGL/package/glm/doc/api/dir_cef2d71d502cb69a9252bca2297d9549.html deleted file mode 100644 index 15e72a45..00000000 --- a/tests/OpenGL/package/glm/doc/api/dir_cef2d71d502cb69a9252bca2297d9549.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - -0.9.9 API documentation: glm Directory Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
glm Directory Reference
-
-
- - - - - - - - - - -

-Directories

directory  detail
 
directory  ext
 
directory  gtc
 
directory  gtx
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Files

file  common.hpp [code]
 Core features
 
file  exponential.hpp [code]
 Core features
 
file  ext.hpp [code]
 Core features (Dependence)
 
file  fwd.hpp [code]
 
file  geometric.hpp [code]
 Core features
 
file  glm.hpp [code]
 Core features
 
file  integer.hpp [code]
 Core features
 
file  mat2x2.hpp [code]
 Core features
 
file  mat2x3.hpp [code]
 Core features
 
file  mat2x4.hpp [code]
 Core features
 
file  mat3x2.hpp [code]
 Core features
 
file  mat3x3.hpp [code]
 Core features
 
file  mat3x4.hpp [code]
 Core features
 
file  mat4x2.hpp [code]
 Core features
 
file  mat4x3.hpp [code]
 Core features
 
file  mat4x4.hpp [code]
 Core features
 
file  matrix.hpp [code]
 Core features
 
file  packing.hpp [code]
 Core features
 
file  trigonometric.hpp [code]
 Core features
 
file  vec2.hpp [code]
 Core features
 
file  vec3.hpp [code]
 Core features
 
file  vec4.hpp [code]
 Core features
 
file  vector_relational.hpp [code]
 Core features
 
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/dir_d9496f0844b48bc7e53b5af8c99b9ab2.html b/tests/OpenGL/package/glm/doc/api/dir_d9496f0844b48bc7e53b5af8c99b9ab2.html deleted file mode 100644 index 199ee8f6..00000000 --- a/tests/OpenGL/package/glm/doc/api/dir_d9496f0844b48bc7e53b5af8c99b9ab2.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -0.9.9 API documentation: Source Directory Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
Source Directory Reference
-
-
- - - - -

-Directories

directory  G-Truc
 
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/dir_f35778ec600a1b9bbc4524e62e226aa2.html b/tests/OpenGL/package/glm/doc/api/dir_f35778ec600a1b9bbc4524e62e226aa2.html deleted file mode 100644 index be7d433d..00000000 --- a/tests/OpenGL/package/glm/doc/api/dir_f35778ec600a1b9bbc4524e62e226aa2.html +++ /dev/null @@ -1,287 +0,0 @@ - - - - - - -0.9.9 API documentation: gtx Directory Reference - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - -
-
- - -
- -
- - -
-
-
-
gtx Directory Reference
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Files

file  associated_min_max.hpp [code]
 GLM_GTX_associated_min_max
 
file  bit.hpp [code]
 GLM_GTX_bit
 
file  closest_point.hpp [code]
 GLM_GTX_closest_point
 
file  color_encoding.hpp [code]
 GLM_GTX_color_encoding
 
file  gtx/color_space.hpp [code]
 GLM_GTX_color_space
 
file  color_space_YCoCg.hpp [code]
 GLM_GTX_color_space_YCoCg
 
file  gtx/common.hpp [code]
 GLM_GTX_common
 
file  compatibility.hpp [code]
 GLM_GTX_compatibility
 
file  component_wise.hpp [code]
 GLM_GTX_component_wise
 
file  dual_quaternion.hpp [code]
 GLM_GTX_dual_quaternion
 
file  easing.hpp [code]
 GLM_GTX_easing
 
file  euler_angles.hpp [code]
 GLM_GTX_euler_angles
 
file  extend.hpp [code]
 GLM_GTX_extend
 
file  extended_min_max.hpp [code]
 GLM_GTX_extented_min_max
 
file  exterior_product.hpp [code]
 GLM_GTX_exterior_product
 
file  fast_exponential.hpp [code]
 GLM_GTX_fast_exponential
 
file  fast_square_root.hpp [code]
 GLM_GTX_fast_square_root
 
file  fast_trigonometry.hpp [code]
 GLM_GTX_fast_trigonometry
 
file  functions.hpp [code]
 GLM_GTX_functions
 
file  gradient_paint.hpp [code]
 GLM_GTX_gradient_paint
 
file  handed_coordinate_space.hpp [code]
 GLM_GTX_handed_coordinate_space
 
file  hash.hpp [code]
 GLM_GTX_hash
 
file  gtx/integer.hpp [code]
 GLM_GTX_integer
 
file  intersect.hpp [code]
 GLM_GTX_intersect
 
file  io.hpp [code]
 GLM_GTX_io
 
file  log_base.hpp [code]
 GLM_GTX_log_base
 
file  matrix_cross_product.hpp [code]
 GLM_GTX_matrix_cross_product
 
file  matrix_decompose.hpp [code]
 GLM_GTX_matrix_decompose
 
file  matrix_factorisation.hpp [code]
 GLM_GTX_matrix_factorisation
 
file  matrix_interpolation.hpp [code]
 GLM_GTX_matrix_interpolation
 
file  matrix_major_storage.hpp [code]
 GLM_GTX_matrix_major_storage
 
file  matrix_operation.hpp [code]
 GLM_GTX_matrix_operation
 
file  matrix_query.hpp [code]
 GLM_GTX_matrix_query
 
file  matrix_transform_2d.hpp [code]
 GLM_GTX_matrix_transform_2d
 
file  mixed_product.hpp [code]
 GLM_GTX_mixed_producte
 
file  norm.hpp [code]
 GLM_GTX_norm
 
file  normal.hpp [code]
 GLM_GTX_normal
 
file  normalize_dot.hpp [code]
 GLM_GTX_normalize_dot
 
file  number_precision.hpp [code]
 GLM_GTX_number_precision
 
file  optimum_pow.hpp [code]
 GLM_GTX_optimum_pow
 
file  orthonormalize.hpp [code]
 GLM_GTX_orthonormalize
 
file  perpendicular.hpp [code]
 GLM_GTX_perpendicular
 
file  polar_coordinates.hpp [code]
 GLM_GTX_polar_coordinates
 
file  projection.hpp [code]
 GLM_GTX_projection
 
file  gtx/quaternion.hpp [code]
 GLM_GTX_quaternion
 
file  range.hpp [code]
 GLM_GTX_range
 
file  raw_data.hpp [code]
 GLM_GTX_raw_data
 
file  rotate_normalized_axis.hpp [code]
 GLM_GTX_rotate_normalized_axis
 
file  rotate_vector.hpp [code]
 GLM_GTX_rotate_vector
 
file  scalar_multiplication.hpp [code]
 Experimental extensions
 
file  gtx/scalar_relational.hpp [code]
 GLM_GTX_scalar_relational
 
file  spline.hpp [code]
 GLM_GTX_spline
 
file  std_based_type.hpp [code]
 GLM_GTX_std_based_type
 
file  string_cast.hpp [code]
 GLM_GTX_string_cast
 
file  texture.hpp [code]
 GLM_GTX_texture
 
file  transform.hpp [code]
 GLM_GTX_transform
 
file  transform2.hpp [code]
 GLM_GTX_transform2
 
file  gtx/type_aligned.hpp [code]
 GLM_GTX_type_aligned
 
file  type_trait.hpp [code]
 GLM_GTX_type_trait
 
file  vec_swizzle.hpp [code]
 GLM_GTX_vec_swizzle
 
file  vector_angle.hpp [code]
 GLM_GTX_vector_angle
 
file  vector_query.hpp [code]
 GLM_GTX_vector_query
 
file  wrap.hpp [code]
 GLM_GTX_wrap
 
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/doc.png b/tests/OpenGL/package/glm/doc/api/doc.png deleted file mode 100644 index f3953d1fce2c582d87c6434d2fea7607ccc943ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 624 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 l6o~({xp0XF+gvE9 - - - - - -0.9.9 API documentation: File List - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - - -
- -
-
- - -
- -
- -
-
-
File List
-
-
-
Here is a list of all documented files with brief descriptions:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 _features.hpp
 _fixes.hpp
 _noise.hpp
 _swizzle.hpp
 _swizzle_func.hpp
 _vectorize.hpp
 associated_min_max.hppGLM_GTX_associated_min_max
 bit.hppGLM_GTX_bit
 bitfield.hppGLM_GTC_bitfield
 closest_point.hppGLM_GTX_closest_point
 color_encoding.hppGLM_GTX_color_encoding
 gtc/color_space.hppGLM_GTC_color_space
 gtx/color_space.hppGLM_GTX_color_space
 color_space_YCoCg.hppGLM_GTX_color_space_YCoCg
 common.hppCore features
 gtx/common.hppGLM_GTX_common
 compatibility.hppGLM_GTX_compatibility
 component_wise.hppGLM_GTX_component_wise
 compute_common.hpp
 compute_vector_relational.hpp
 constants.hppGLM_GTC_constants
 dual_quaternion.hppGLM_GTX_dual_quaternion
 easing.hppGLM_GTX_easing
 epsilon.hppGLM_GTC_epsilon
 euler_angles.hppGLM_GTX_euler_angles
 exponential.hppCore features
 ext.hppCore features (Dependence)
 extend.hppGLM_GTX_extend
 extended_min_max.hppGLM_GTX_extented_min_max
 exterior_product.hppGLM_GTX_exterior_product
 fast_exponential.hppGLM_GTX_fast_exponential
 fast_square_root.hppGLM_GTX_fast_square_root
 fast_trigonometry.hppGLM_GTX_fast_trigonometry
 functions.hppGLM_GTX_functions
 fwd.hpp
 geometric.hppCore features
 glm.hppCore features
 gradient_paint.hppGLM_GTX_gradient_paint
 handed_coordinate_space.hppGLM_GTX_handed_coordinate_space
 hash.hppGLM_GTX_hash
 gtc/integer.hppGLM_GTC_integer
 gtx/integer.hppGLM_GTX_integer
 integer.hppCore features
 intersect.hppGLM_GTX_intersect
 io.hppGLM_GTX_io
 log_base.hppGLM_GTX_log_base
 man.doxy
 mat2x2.hppCore features
 mat2x3.hppCore features
 mat2x4.hppCore features
 mat3x2.hppCore features
 mat3x3.hppCore features
 mat3x4.hppCore features
 mat4x2.hppCore features
 mat4x3.hppCore features
 mat4x4.hppCore features
 matrix.hppCore features
 matrix_access.hppGLM_GTC_matrix_access
 matrix_clip_space.hppGLM_EXT_matrix_clip_space
 matrix_common.hppGLM_EXT_matrix_common
 matrix_cross_product.hppGLM_GTX_matrix_cross_product
 matrix_decompose.hppGLM_GTX_matrix_decompose
 matrix_double2x2.hppCore features
 matrix_double2x2_precision.hppCore features
 matrix_double2x3.hppCore features
 matrix_double2x3_precision.hppCore features
 matrix_double2x4.hppCore features
 matrix_double2x4_precision.hppCore features
 matrix_double3x2.hppCore features
 matrix_double3x2_precision.hppCore features
 matrix_double3x3.hppCore features
 matrix_double3x3_precision.hppCore features
 matrix_double3x4.hppCore features
 matrix_double3x4_precision.hppCore features
 matrix_double4x2.hppCore features
 matrix_double4x2_precision.hppCore features
 matrix_double4x3.hppCore features
 matrix_double4x3_precision.hppCore features
 matrix_double4x4.hppCore features
 matrix_double4x4_precision.hppCore features
 matrix_factorisation.hppGLM_GTX_matrix_factorisation
 matrix_float2x2.hppCore features
 matrix_float2x2_precision.hppCore features
 matrix_float2x3.hppCore features
 matrix_float2x3_precision.hppCore features
 matrix_float2x4.hppCore features
 matrix_float2x4_precision.hppCore features
 matrix_float3x2.hppCore features
 matrix_float3x2_precision.hppCore features
 matrix_float3x3.hppCore features
 matrix_float3x3_precision.hppCore features
 matrix_float3x4.hppCore features
 matrix_float3x4_precision.hppCore features
 matrix_float4x2.hppCore features
 matrix_float4x2_precision.hpp
 matrix_float4x3.hppCore features
 matrix_float4x3_precision.hppCore features
 matrix_float4x4.hppCore features
 matrix_float4x4_precision.hppCore features
 matrix_integer.hppGLM_GTC_matrix_integer
 matrix_interpolation.hppGLM_GTX_matrix_interpolation
 matrix_inverse.hppGLM_GTC_matrix_inverse
 matrix_major_storage.hppGLM_GTX_matrix_major_storage
 matrix_operation.hppGLM_GTX_matrix_operation
 matrix_projection.hppGLM_EXT_matrix_projection
 matrix_query.hppGLM_GTX_matrix_query
 matrix_relational.hppGLM_EXT_matrix_relational
 ext/matrix_transform.hppGLM_EXT_matrix_transform
 gtc/matrix_transform.hppGLM_GTC_matrix_transform
 matrix_transform_2d.hppGLM_GTX_matrix_transform_2d
 mixed_product.hppGLM_GTX_mixed_producte
 noise.hppGLM_GTC_noise
 norm.hppGLM_GTX_norm
 normal.hppGLM_GTX_normal
 normalize_dot.hppGLM_GTX_normalize_dot
 number_precision.hppGLM_GTX_number_precision
 optimum_pow.hppGLM_GTX_optimum_pow
 orthonormalize.hppGLM_GTX_orthonormalize
 gtc/packing.hppGLM_GTC_packing
 packing.hppCore features
 perpendicular.hppGLM_GTX_perpendicular
 polar_coordinates.hppGLM_GTX_polar_coordinates
 projection.hppGLM_GTX_projection
 qualifier.hpp
 gtc/quaternion.hppGLM_GTC_quaternion
 gtx/quaternion.hppGLM_GTX_quaternion
 quaternion_common.hppGLM_EXT_quaternion_common
 quaternion_double.hppGLM_EXT_quaternion_double
 quaternion_double_precision.hppGLM_EXT_quaternion_double_precision
 quaternion_exponential.hppGLM_EXT_quaternion_exponential
 quaternion_float.hppGLM_EXT_quaternion_float
 quaternion_float_precision.hppGLM_EXT_quaternion_float_precision
 quaternion_geometric.hppGLM_EXT_quaternion_geometric
 quaternion_relational.hppGLM_EXT_quaternion_relational
 quaternion_transform.hppGLM_EXT_quaternion_transform
 quaternion_trigonometric.hppGLM_EXT_quaternion_trigonometric
 random.hppGLM_GTC_random
 range.hppGLM_GTX_range
 raw_data.hppGLM_GTX_raw_data
 reciprocal.hppGLM_GTC_reciprocal
 rotate_normalized_axis.hppGLM_GTX_rotate_normalized_axis
 rotate_vector.hppGLM_GTX_rotate_vector
 round.hppGLM_GTC_round
 scalar_common.hppGLM_EXT_scalar_common
 scalar_constants.hppGLM_EXT_scalar_constants
 scalar_int_sized.hppGLM_EXT_scalar_int_sized
 scalar_integer.hppGLM_EXT_scalar_integer
 scalar_multiplication.hppExperimental extensions
 ext/scalar_relational.hppGLM_EXT_scalar_relational
 gtx/scalar_relational.hppGLM_GTX_scalar_relational
 scalar_uint_sized.hppGLM_EXT_scalar_uint_sized
 scalar_ulp.hppGLM_EXT_scalar_ulp
 setup.hpp
 spline.hppGLM_GTX_spline
 std_based_type.hppGLM_GTX_std_based_type
 string_cast.hppGLM_GTX_string_cast
 texture.hppGLM_GTX_texture
 transform.hppGLM_GTX_transform
 transform2.hppGLM_GTX_transform2
 trigonometric.hppCore features
 gtc/type_aligned.hppGLM_GTC_type_aligned
 gtx/type_aligned.hppGLM_GTX_type_aligned
 type_float.hpp
 type_half.hpp
 type_mat2x2.hppCore features
 type_mat2x3.hppCore features
 type_mat2x4.hppCore features
 type_mat3x2.hppCore features
 type_mat3x3.hppCore features
 type_mat3x4.hppCore features
 type_mat4x2.hppCore features
 type_mat4x3.hppCore features
 type_mat4x4.hppCore features
 type_precision.hppGLM_GTC_type_precision
 type_ptr.hppGLM_GTC_type_ptr
 type_quat.hppCore features
 type_trait.hppGLM_GTX_type_trait
 type_vec1.hppCore features
 type_vec2.hppCore features
 type_vec3.hppCore features
 type_vec4.hppCore features
 ulp.hppGLM_GTC_ulp
 vec1.hppGLM_GTC_vec1
 vec2.hppCore features
 vec3.hppCore features
 vec4.hppCore features
 vec_swizzle.hppGLM_GTX_vec_swizzle
 vector_angle.hppGLM_GTX_vector_angle
 vector_bool1.hppGLM_EXT_vector_bool1
 vector_bool1_precision.hppGLM_EXT_vector_bool1_precision
 vector_bool2.hppCore features
 vector_bool2_precision.hppCore features
 vector_bool3.hppCore features
 vector_bool3_precision.hppCore features
 vector_bool4.hppCore features
 vector_bool4_precision.hppCore features
 vector_common.hppGLM_EXT_vector_common
 vector_double1.hppGLM_EXT_vector_double1
 vector_double1_precision.hppGLM_EXT_vector_double1_precision
 vector_double2.hppCore features
 vector_double2_precision.hppCore features
 vector_double3.hppCore features
 vector_double3_precision.hppCore features
 vector_double4.hppCore features
 vector_double4_precision.hppCore features
 vector_float1.hppGLM_EXT_vector_float1
 vector_float1_precision.hppGLM_EXT_vector_float1_precision
 vector_float2.hppCore features
 vector_float2_precision.hppCore features
 vector_float3.hppCore features
 vector_float3_precision.hppCore features
 vector_float4.hppCore features
 vector_float4_precision.hppCore features
 vector_int1.hppGLM_EXT_vector_int1
 vector_int1_precision.hppGLM_EXT_vector_int1_precision
 vector_int2.hppCore features
 vector_int2_precision.hppCore features
 vector_int3.hppCore features
 vector_int3_precision.hppCore features
 vector_int4.hppCore features
 vector_int4_precision.hppCore features
 vector_integer.hppGLM_EXT_vector_integer
 vector_query.hppGLM_GTX_vector_query
 ext/vector_relational.hppGLM_EXT_vector_relational
 vector_relational.hppCore features
 vector_uint1.hppGLM_EXT_vector_uint1
 vector_uint1_precision.hppGLM_EXT_vector_uint1_precision
 vector_uint2.hppCore features
 vector_uint2_precision.hppCore features
 vector_uint3.hppCore features
 vector_uint3_precision.hppCore features
 vector_uint4.hppCore features
 vector_uint4_precision.hppCore features
 vector_ulp.hppGLM_EXT_vector_ulp
 wrap.hppGLM_GTX_wrap
-
-
- - - - diff --git a/tests/OpenGL/package/glm/doc/api/folderclosed.png b/tests/OpenGL/package/glm/doc/api/folderclosed.png deleted file mode 100644 index 2a4bb4a518c6acc32a6ebd2ab728b603c1d7bc1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 573 zcmV-D0>b@?P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;(#7eog=Y0j^0zK~zXfwbQ#wLqQM*;Jku`45rJBQ{G)k+Vh~a_|I?kd;G1{Q`+V1KNk6 z{?Li_6x_>LyHYOY|A*FY1MqdfZ{fy>o>ZHf;V1}(W+(`!VhKhfWhFSNd(>a%7U z-hKA_>a)f(Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;(#7eog=Y0mVr~K~zXfwUoO~0znjpc?Am}!q^zKFd7@R z@zQuJyfoe#wJ=&Jp+SQ-YAD!9;VnT!K>`|+H9@5?k!V3dVPV2soEI4XGc)V5!(b?u z;>(%yGw1)8VVMXKwH2!vCRQ;_tYVm0MM>>b(0dY`3o4xmDjo^?eiqif|6mm*Y+ij7 z^z$aD_Mve11U>C23fro(<{mT+wu+L{v7pMG4tYU98TA$Y1IXjEdqH0}g34(XWb*)x zVs2H??YN-JG0mt?dKh&?!Rz!87!;HmP~=t`f&z_%2l%|1Qo>&s;~?ha?yKYBqbh8I zEfr$;1sVwl@R|M@MK#(`o - - - - - -0.9.9 API documentation: OpenGL Mathematics (GLM) - - - - - - - - - - -
-
- - - - - - - -
-
0.9.9 API documentation -
-
-
- - - - -
- -
-
- - -
- -
- -
-
-
OpenGL Mathematics (GLM)
-
- - - - - diff --git a/tests/OpenGL/package/glm/doc/api/jquery.js b/tests/OpenGL/package/glm/doc/api/jquery.js deleted file mode 100644 index 1f4d0b47..00000000 --- a/tests/OpenGL/package/glm/doc/api/jquery.js +++ /dev/null @@ -1,68 +0,0 @@ -/*! - * jQuery JavaScript Library v1.7.1 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Mon Nov 21 21:11:03 2011 -0500 - */ -(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); -/*! - * Sizzle CSS Selector Engine - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! - * jQuery UI 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! - * jQuery UI Widget 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! - * jQuery UI Mouse 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! - * jQuery hashchange event - v1.3 - 7/21/2010 - * http://benalman.com/projects/jquery-hashchange-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ -(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' - - -
-
-
Modules
-
-
-
Here is a list of all modules:
-
[detail level 12]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Core featuresFeatures that implement in C++ the GLSL specification as closely as possible
 Stable extensionsAdditional features not specified by GLSL specification
 Recommended extensionsAdditional features not specified by GLSL specification
 Experimental extensionsExperimental features not specified by GLSL specification
- - - - - - diff --git a/tests/OpenGL/package/glm/doc/api/nav_f.png b/tests/OpenGL/package/glm/doc/api/nav_f.png deleted file mode 100644 index c77a42e73e0d578c24e875d78248305b3f2cefaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUl2^0spJ29*~C-V}>VM%xNb!1@J z*w6hZkrl}2EbxddW?->OfqC8z3LnOj`&slOcI0(30-1UEw^#93M zy-Qhm+)ew+xs;4W6WN4bTnhB&y&4ke$$I5Uz{xoxx7h!CzUZ_&qTkuR_xRrj9%YQP Yo=$vuW&M?pKwB6*UHx3vIVCg!0El2spa1{> diff --git a/tests/OpenGL/package/glm/doc/api/nav_g.png b/tests/OpenGL/package/glm/doc/api/nav_g.png deleted file mode 100644 index 2093a237a94f6c83e19ec6e5fd42f7ddabdafa81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KanMprAyFYeY$Kep*R+Vo@qXL1JcJiC$i6iGqoq zfu3cKah)GfjjpGQV~9jJ@8Of23^Ze#Ft^>bP0l+XkKPlYoV diff --git a/tests/OpenGL/package/glm/doc/api/open.png b/tests/OpenGL/package/glm/doc/api/open.png deleted file mode 100644 index a4d7097583a38ed1636084bf63588f1dbc1461d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCf`#@Q5sCVBk9p!i>lBSEK+1B}!Z)N`mv#O3D+9QW**oGxJLH@={9_O!N%& zEOU(O{D5kdJY5_^G=h^QdLCR(S^U4nz_B%f)xaTukw+kefq4d(gakvRs`GIt?*0cr O)eN4lelF{r5}E)Iel0}+ diff --git a/tests/OpenGL/package/glm/doc/api/search/all_0.html b/tests/OpenGL/package/glm/doc/api/search/all_0.html deleted file mode 100644 index 1d469500..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_0.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_0.js b/tests/OpenGL/package/glm/doc/api/search/all_0.js deleted file mode 100644 index 448238b8..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_0.js +++ /dev/null @@ -1,209 +0,0 @@ -var searchData= -[ - ['abs',['abs',['../a00241.html#ga439e60a72eadecfeda2df5449c613a64',1,'glm::abs(genType x)'],['../a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6',1,'glm::abs(vec< L, T, Q > const &x)']]], - ['acos',['acos',['../a00373.html#gacc9b092df8257c68f19c9053703e2563',1,'glm']]], - ['acosh',['acosh',['../a00373.html#ga858f35dc66fd2688f20c52b5f25be76a',1,'glm']]], - ['acot',['acot',['../a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d',1,'glm']]], - ['acoth',['acoth',['../a00301.html#gafaca98a7100170db8841f446282debfa',1,'glm']]], - ['acsc',['acsc',['../a00301.html#ga1b4bed91476b9b915e76b4a30236d330',1,'glm']]], - ['acsch',['acsch',['../a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576',1,'glm']]], - ['adjugate',['adjugate',['../a00339.html#ga40a38402a30860af6e508fe76211e659',1,'glm::adjugate(mat< 2, 2, T, Q > const &m)'],['../a00339.html#gaddb09f7abc1a9c56a243d32ff3538be6',1,'glm::adjugate(mat< 3, 3, T, Q > const &m)'],['../a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8',1,'glm::adjugate(mat< 4, 4, T, Q > const &m)']]], - ['affineinverse',['affineInverse',['../a00295.html#gae0fcc5fc8783291f9702272de428fa0e',1,'glm']]], - ['aligned_5fbvec1',['aligned_bvec1',['../a00303.html#ga780a35f764020f553a9601a3fcdcd059',1,'glm']]], - ['aligned_5fbvec2',['aligned_bvec2',['../a00303.html#gae766b317c5afec852bfb3d74a3c54bc8',1,'glm']]], - ['aligned_5fbvec3',['aligned_bvec3',['../a00303.html#gae1964ba70d15915e5b710926decbb3cb',1,'glm']]], - ['aligned_5fbvec4',['aligned_bvec4',['../a00303.html#gae164a1f7879f828bc35e50b79d786b05',1,'glm']]], - ['aligned_5fdmat2',['aligned_dmat2',['../a00303.html#ga6783859382677d35fcd5dac7dcbefdbd',1,'glm']]], - ['aligned_5fdmat2x2',['aligned_dmat2x2',['../a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388',1,'glm']]], - ['aligned_5fdmat2x3',['aligned_dmat2x3',['../a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1',1,'glm']]], - ['aligned_5fdmat2x4',['aligned_dmat2x4',['../a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0',1,'glm']]], - ['aligned_5fdmat3',['aligned_dmat3',['../a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de',1,'glm']]], - ['aligned_5fdmat3x2',['aligned_dmat3x2',['../a00303.html#ga5f5123d834bd1170edf8c386834e112c',1,'glm']]], - ['aligned_5fdmat3x3',['aligned_dmat3x3',['../a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f',1,'glm']]], - ['aligned_5fdmat3x4',['aligned_dmat3x4',['../a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d',1,'glm']]], - ['aligned_5fdmat4',['aligned_dmat4',['../a00303.html#ga001bb387ae8192fa94dbd8b23b600439',1,'glm']]], - ['aligned_5fdmat4x2',['aligned_dmat4x2',['../a00303.html#gaa409cfb737bd59b68dc683e9b03930cc',1,'glm']]], - ['aligned_5fdmat4x3',['aligned_dmat4x3',['../a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121',1,'glm']]], - ['aligned_5fdmat4x4',['aligned_dmat4x4',['../a00303.html#gac9bda778d0b7ad82f656dab99b71857a',1,'glm']]], - ['aligned_5fdvec1',['aligned_dvec1',['../a00303.html#ga4974f46ae5a19415d91316960a53617a',1,'glm']]], - ['aligned_5fdvec2',['aligned_dvec2',['../a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0',1,'glm']]], - ['aligned_5fdvec3',['aligned_dvec3',['../a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0',1,'glm']]], - ['aligned_5fdvec4',['aligned_dvec4',['../a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5',1,'glm']]], - ['aligned_5fhighp_5fbvec1',['aligned_highp_bvec1',['../a00303.html#ga862843a45b01c35ffe4d44c47ea774ad',1,'glm']]], - ['aligned_5fhighp_5fbvec2',['aligned_highp_bvec2',['../a00303.html#ga0731b593c5e33559954c80f8687e76c6',1,'glm']]], - ['aligned_5fhighp_5fbvec3',['aligned_highp_bvec3',['../a00303.html#ga0913bdf048d0cb74af1d2512aec675bc',1,'glm']]], - ['aligned_5fhighp_5fbvec4',['aligned_highp_bvec4',['../a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f',1,'glm']]], - ['aligned_5fhighp_5fdmat2',['aligned_highp_dmat2',['../a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45',1,'glm']]], - ['aligned_5fhighp_5fdmat2x2',['aligned_highp_dmat2x2',['../a00303.html#gaef26dfe3855a91644665b55c9096a8c8',1,'glm']]], - ['aligned_5fhighp_5fdmat2x3',['aligned_highp_dmat2x3',['../a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b',1,'glm']]], - ['aligned_5fhighp_5fdmat2x4',['aligned_highp_dmat2x4',['../a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced',1,'glm']]], - ['aligned_5fhighp_5fdmat3',['aligned_highp_dmat3',['../a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8',1,'glm']]], - ['aligned_5fhighp_5fdmat3x2',['aligned_highp_dmat3x2',['../a00303.html#gab069b2fc2ec785fc4e193cf26c022679',1,'glm']]], - ['aligned_5fhighp_5fdmat3x3',['aligned_highp_dmat3x3',['../a00303.html#ga66073b1ddef34b681741f572338ddb8e',1,'glm']]], - ['aligned_5fhighp_5fdmat3x4',['aligned_highp_dmat3x4',['../a00303.html#ga683c8ca66de323ea533a760abedd0efc',1,'glm']]], - ['aligned_5fhighp_5fdmat4',['aligned_highp_dmat4',['../a00303.html#gacaa7407ea00ffdd322ce86a57adb547e',1,'glm']]], - ['aligned_5fhighp_5fdmat4x2',['aligned_highp_dmat4x2',['../a00303.html#ga93a23ca3d42818d56e0702213c66354b',1,'glm']]], - ['aligned_5fhighp_5fdmat4x3',['aligned_highp_dmat4x3',['../a00303.html#gacab7374b560745cb1d0a306a90353f58',1,'glm']]], - ['aligned_5fhighp_5fdmat4x4',['aligned_highp_dmat4x4',['../a00303.html#ga1fbfba14368b742972d3b58a0a303682',1,'glm']]], - ['aligned_5fhighp_5fdvec1',['aligned_highp_dvec1',['../a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc',1,'glm']]], - ['aligned_5fhighp_5fdvec2',['aligned_highp_dvec2',['../a00303.html#gab173a333e6b7ce153ceba66ac4a321cf',1,'glm']]], - ['aligned_5fhighp_5fdvec3',['aligned_highp_dvec3',['../a00303.html#gae94ef61edfa047d05bc69b6065fc42ba',1,'glm']]], - ['aligned_5fhighp_5fdvec4',['aligned_highp_dvec4',['../a00303.html#ga8fad35c5677f228e261fe541f15363a4',1,'glm']]], - ['aligned_5fhighp_5fivec1',['aligned_highp_ivec1',['../a00303.html#gad63b8c5b4dc0500d54d7414ef555178f',1,'glm']]], - ['aligned_5fhighp_5fivec2',['aligned_highp_ivec2',['../a00303.html#ga41563650f36cb7f479e080de21e08418',1,'glm']]], - ['aligned_5fhighp_5fivec3',['aligned_highp_ivec3',['../a00303.html#ga6eca5170bb35eac90b4972590fd31a06',1,'glm']]], - ['aligned_5fhighp_5fivec4',['aligned_highp_ivec4',['../a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91',1,'glm']]], - ['aligned_5fhighp_5fmat2',['aligned_highp_mat2',['../a00303.html#gaf9db5e8a929c317da5aa12cc53741b63',1,'glm']]], - ['aligned_5fhighp_5fmat2x2',['aligned_highp_mat2x2',['../a00303.html#gab559d943abf92bc588bcd3f4c0e4664b',1,'glm']]], - ['aligned_5fhighp_5fmat2x3',['aligned_highp_mat2x3',['../a00303.html#ga50c9af5aa3a848956d625fc64dc8488e',1,'glm']]], - ['aligned_5fhighp_5fmat2x4',['aligned_highp_mat2x4',['../a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a',1,'glm']]], - ['aligned_5fhighp_5fmat3',['aligned_highp_mat3',['../a00303.html#gabab3afcc04459c7b123604ae5dc663f6',1,'glm']]], - ['aligned_5fhighp_5fmat3x2',['aligned_highp_mat3x2',['../a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75',1,'glm']]], - ['aligned_5fhighp_5fmat3x3',['aligned_highp_mat3x3',['../a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259',1,'glm']]], - ['aligned_5fhighp_5fmat3x4',['aligned_highp_mat3x4',['../a00303.html#ga52e00afd0eb181e6738f40cf41787049',1,'glm']]], - ['aligned_5fhighp_5fmat4',['aligned_highp_mat4',['../a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba',1,'glm']]], - ['aligned_5fhighp_5fmat4x2',['aligned_highp_mat4x2',['../a00303.html#ga84e1f5e0718952a079b748825c03f956',1,'glm']]], - ['aligned_5fhighp_5fmat4x3',['aligned_highp_mat4x3',['../a00303.html#gafff1684c4ff19b4a818138ccacc1e78d',1,'glm']]], - ['aligned_5fhighp_5fmat4x4',['aligned_highp_mat4x4',['../a00303.html#ga40d49648083a0498a12a4bb41ae6ece8',1,'glm']]], - ['aligned_5fhighp_5fuvec1',['aligned_highp_uvec1',['../a00303.html#ga5b80e28396c6ef7d32c6fd18df498451',1,'glm']]], - ['aligned_5fhighp_5fuvec2',['aligned_highp_uvec2',['../a00303.html#ga04db692662a4908beeaf5a5ba6e19483',1,'glm']]], - ['aligned_5fhighp_5fuvec3',['aligned_highp_uvec3',['../a00303.html#ga073fd6e8b241afade6d8afbd676b2667',1,'glm']]], - ['aligned_5fhighp_5fuvec4',['aligned_highp_uvec4',['../a00303.html#gabdd60462042859f876c17c7346c732a5',1,'glm']]], - ['aligned_5fhighp_5fvec1',['aligned_highp_vec1',['../a00303.html#ga4d0bd70d5fac49b800546d608b707513',1,'glm']]], - ['aligned_5fhighp_5fvec2',['aligned_highp_vec2',['../a00303.html#gac9f8482dde741fb6bab7248b81a45465',1,'glm']]], - ['aligned_5fhighp_5fvec3',['aligned_highp_vec3',['../a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2',1,'glm']]], - ['aligned_5fhighp_5fvec4',['aligned_highp_vec4',['../a00303.html#ga7cb26d354dd69d23849c34c4fba88da9',1,'glm']]], - ['aligned_5fivec1',['aligned_ivec1',['../a00303.html#ga76298aed82a439063c3d55980c84aa0b',1,'glm']]], - ['aligned_5fivec2',['aligned_ivec2',['../a00303.html#gae4f38fd2c86cee6940986197777b3ca4',1,'glm']]], - ['aligned_5fivec3',['aligned_ivec3',['../a00303.html#ga32794322d294e5ace7fed4a61896f270',1,'glm']]], - ['aligned_5fivec4',['aligned_ivec4',['../a00303.html#ga7f79eae5927c9033d84617e49f6f34e4',1,'glm']]], - ['aligned_5flowp_5fbvec1',['aligned_lowp_bvec1',['../a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9',1,'glm']]], - ['aligned_5flowp_5fbvec2',['aligned_lowp_bvec2',['../a00303.html#ga59fadcd3835646e419372ae8b43c5d37',1,'glm']]], - ['aligned_5flowp_5fbvec3',['aligned_lowp_bvec3',['../a00303.html#ga83aab4d191053f169c93a3e364f2e118',1,'glm']]], - ['aligned_5flowp_5fbvec4',['aligned_lowp_bvec4',['../a00303.html#gaa7a76555ee4853614e5755181a8dd54e',1,'glm']]], - ['aligned_5flowp_5fdmat2',['aligned_lowp_dmat2',['../a00303.html#ga79a90173d8faa9816dc852ce447d66ca',1,'glm']]], - ['aligned_5flowp_5fdmat2x2',['aligned_lowp_dmat2x2',['../a00303.html#ga07cb8e846666cbf56045b064fb553d2e',1,'glm']]], - ['aligned_5flowp_5fdmat2x3',['aligned_lowp_dmat2x3',['../a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b',1,'glm']]], - ['aligned_5flowp_5fdmat2x4',['aligned_lowp_dmat2x4',['../a00303.html#gab0cf4f7c9a264941519acad286e055ea',1,'glm']]], - ['aligned_5flowp_5fdmat3',['aligned_lowp_dmat3',['../a00303.html#gac00e15efded8a57c9dec3aed0fb547e7',1,'glm']]], - ['aligned_5flowp_5fdmat3x2',['aligned_lowp_dmat3x2',['../a00303.html#gaa281a47d5d627313984d0f8df993b648',1,'glm']]], - ['aligned_5flowp_5fdmat3x3',['aligned_lowp_dmat3x3',['../a00303.html#ga7f3148a72355e39932d6855baca42ebc',1,'glm']]], - ['aligned_5flowp_5fdmat3x4',['aligned_lowp_dmat3x4',['../a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3',1,'glm']]], - ['aligned_5flowp_5fdmat4',['aligned_lowp_dmat4',['../a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b',1,'glm']]], - ['aligned_5flowp_5fdmat4x2',['aligned_lowp_dmat4x2',['../a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce',1,'glm']]], - ['aligned_5flowp_5fdmat4x3',['aligned_lowp_dmat4x3',['../a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d',1,'glm']]], - ['aligned_5flowp_5fdmat4x4',['aligned_lowp_dmat4x4',['../a00303.html#gad8220a93d2fca2dd707821b4ab6f809e',1,'glm']]], - ['aligned_5flowp_5fdvec1',['aligned_lowp_dvec1',['../a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62',1,'glm']]], - ['aligned_5flowp_5fdvec2',['aligned_lowp_dvec2',['../a00303.html#ga0e37cff4a43cca866101f0a35f01db6d',1,'glm']]], - ['aligned_5flowp_5fdvec3',['aligned_lowp_dvec3',['../a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59',1,'glm']]], - ['aligned_5flowp_5fdvec4',['aligned_lowp_dvec4',['../a00303.html#ga226f5ec7a953cea559c16fe3aff9924f',1,'glm']]], - ['aligned_5flowp_5fivec1',['aligned_lowp_ivec1',['../a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1',1,'glm']]], - ['aligned_5flowp_5fivec2',['aligned_lowp_ivec2',['../a00303.html#ga44c4accad582cfbd7226a19b83b0cadc',1,'glm']]], - ['aligned_5flowp_5fivec3',['aligned_lowp_ivec3',['../a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d',1,'glm']]], - ['aligned_5flowp_5fivec4',['aligned_lowp_ivec4',['../a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419',1,'glm']]], - ['aligned_5flowp_5fmat2',['aligned_lowp_mat2',['../a00303.html#ga17c424412207b00dba1cf587b099eea3',1,'glm']]], - ['aligned_5flowp_5fmat2x2',['aligned_lowp_mat2x2',['../a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f',1,'glm']]], - ['aligned_5flowp_5fmat2x3',['aligned_lowp_mat2x3',['../a00303.html#ga7dec6d96bc61312b1e56d137c9c74030',1,'glm']]], - ['aligned_5flowp_5fmat2x4',['aligned_lowp_mat2x4',['../a00303.html#gaa694fab1f8df5f658846573ba8ffc563',1,'glm']]], - ['aligned_5flowp_5fmat3',['aligned_lowp_mat3',['../a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5',1,'glm']]], - ['aligned_5flowp_5fmat3x2',['aligned_lowp_mat3x2',['../a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc',1,'glm']]], - ['aligned_5flowp_5fmat3x3',['aligned_lowp_mat3x3',['../a00303.html#gaeaab04e378a90956eec8d68a99d777ed',1,'glm']]], - ['aligned_5flowp_5fmat3x4',['aligned_lowp_mat3x4',['../a00303.html#ga1f03696ab066572c6c044e63edf635a2',1,'glm']]], - ['aligned_5flowp_5fmat4',['aligned_lowp_mat4',['../a00303.html#ga25ea2f684e36aa5e978b4f2f86593824',1,'glm']]], - ['aligned_5flowp_5fmat4x2',['aligned_lowp_mat4x2',['../a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4',1,'glm']]], - ['aligned_5flowp_5fmat4x3',['aligned_lowp_mat4x3',['../a00303.html#ga7e96981e872f17a780d9f1c22dc1f512',1,'glm']]], - ['aligned_5flowp_5fmat4x4',['aligned_lowp_mat4x4',['../a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719',1,'glm']]], - ['aligned_5flowp_5fuvec1',['aligned_lowp_uvec1',['../a00303.html#gad09b93acc43c43423408d17a64f6d7ca',1,'glm']]], - ['aligned_5flowp_5fuvec2',['aligned_lowp_uvec2',['../a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a',1,'glm']]], - ['aligned_5flowp_5fuvec3',['aligned_lowp_uvec3',['../a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c',1,'glm']]], - ['aligned_5flowp_5fuvec4',['aligned_lowp_uvec4',['../a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc',1,'glm']]], - ['aligned_5flowp_5fvec1',['aligned_lowp_vec1',['../a00303.html#gab34aee3d5e121c543fea11d2c50ecc43',1,'glm']]], - ['aligned_5flowp_5fvec2',['aligned_lowp_vec2',['../a00303.html#ga53ac5d252317f1fa43c2ef921857bf13',1,'glm']]], - ['aligned_5flowp_5fvec3',['aligned_lowp_vec3',['../a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e',1,'glm']]], - ['aligned_5flowp_5fvec4',['aligned_lowp_vec4',['../a00303.html#ga82f7275d6102593a69ce38cdad680409',1,'glm']]], - ['aligned_5fmat2',['aligned_mat2',['../a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9',1,'glm']]], - ['aligned_5fmat2x2',['aligned_mat2x2',['../a00303.html#gabb04f459d81d753d278b2072e2375e8e',1,'glm']]], - ['aligned_5fmat2x3',['aligned_mat2x3',['../a00303.html#ga832476bb1c59ef673db37433ff34e399',1,'glm']]], - ['aligned_5fmat2x4',['aligned_mat2x4',['../a00303.html#gadab11a7504430825b648ff7c7e36b725',1,'glm']]], - ['aligned_5fmat3',['aligned_mat3',['../a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714',1,'glm']]], - ['aligned_5fmat3x2',['aligned_mat3x2',['../a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed',1,'glm']]], - ['aligned_5fmat3x3',['aligned_mat3x3',['../a00303.html#gadb065dbe5c11271fef8cf2ea8608f187',1,'glm']]], - ['aligned_5fmat3x4',['aligned_mat3x4',['../a00303.html#ga88061c72c997b94c420f2b0a60d9df26',1,'glm']]], - ['aligned_5fmat4',['aligned_mat4',['../a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8',1,'glm']]], - ['aligned_5fmat4x2',['aligned_mat4x2',['../a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3',1,'glm']]], - ['aligned_5fmat4x3',['aligned_mat4x3',['../a00303.html#ga452bbbfd26e244de216e4d004d50bb74',1,'glm']]], - ['aligned_5fmat4x4',['aligned_mat4x4',['../a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1',1,'glm']]], - ['aligned_5fmediump_5fbvec1',['aligned_mediump_bvec1',['../a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e',1,'glm']]], - ['aligned_5fmediump_5fbvec2',['aligned_mediump_bvec2',['../a00303.html#gacb183eb5e67ec0d0ea5a016cba962810',1,'glm']]], - ['aligned_5fmediump_5fbvec3',['aligned_mediump_bvec3',['../a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587',1,'glm']]], - ['aligned_5fmediump_5fbvec4',['aligned_mediump_bvec4',['../a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c',1,'glm']]], - ['aligned_5fmediump_5fdmat2',['aligned_mediump_dmat2',['../a00303.html#ga62a2dfd668c91072b72c3109fc6cda28',1,'glm']]], - ['aligned_5fmediump_5fdmat2x2',['aligned_mediump_dmat2x2',['../a00303.html#ga9b7feec247d378dd407ba81f56ea96c8',1,'glm']]], - ['aligned_5fmediump_5fdmat2x3',['aligned_mediump_dmat2x3',['../a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8',1,'glm']]], - ['aligned_5fmediump_5fdmat2x4',['aligned_mediump_dmat2x4',['../a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e',1,'glm']]], - ['aligned_5fmediump_5fdmat3',['aligned_mediump_dmat3',['../a00303.html#ga6dc2832b747c00e0a0df621aba196960',1,'glm']]], - ['aligned_5fmediump_5fdmat3x2',['aligned_mediump_dmat3x2',['../a00303.html#ga5a97f0355d801de3444d42c1d5b40438',1,'glm']]], - ['aligned_5fmediump_5fdmat3x3',['aligned_mediump_dmat3x3',['../a00303.html#ga649d0acf01054b17e679cf00e150e025',1,'glm']]], - ['aligned_5fmediump_5fdmat3x4',['aligned_mediump_dmat3x4',['../a00303.html#ga45e155a4840f69b2fa4ed8047a676860',1,'glm']]], - ['aligned_5fmediump_5fdmat4',['aligned_mediump_dmat4',['../a00303.html#ga8a9376d82f0e946e25137eb55543e6ce',1,'glm']]], - ['aligned_5fmediump_5fdmat4x2',['aligned_mediump_dmat4x2',['../a00303.html#gabc25e547f4de4af62403492532cd1b6d',1,'glm']]], - ['aligned_5fmediump_5fdmat4x3',['aligned_mediump_dmat4x3',['../a00303.html#gae84f4763ecdc7457ecb7930bad12057c',1,'glm']]], - ['aligned_5fmediump_5fdmat4x4',['aligned_mediump_dmat4x4',['../a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247',1,'glm']]], - ['aligned_5fmediump_5fdvec1',['aligned_mediump_dvec1',['../a00303.html#ga7180b685c581adb224406a7f831608e3',1,'glm']]], - ['aligned_5fmediump_5fdvec2',['aligned_mediump_dvec2',['../a00303.html#ga9af1eabe22f569e70d9893be72eda0f5',1,'glm']]], - ['aligned_5fmediump_5fdvec3',['aligned_mediump_dvec3',['../a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953',1,'glm']]], - ['aligned_5fmediump_5fdvec4',['aligned_mediump_dvec4',['../a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21',1,'glm']]], - ['aligned_5fmediump_5fivec1',['aligned_mediump_ivec1',['../a00303.html#ga20e63dd980b81af10cadbbe219316650',1,'glm']]], - ['aligned_5fmediump_5fivec2',['aligned_mediump_ivec2',['../a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2',1,'glm']]], - ['aligned_5fmediump_5fivec3',['aligned_mediump_ivec3',['../a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd',1,'glm']]], - ['aligned_5fmediump_5fivec4',['aligned_mediump_ivec4',['../a00303.html#ga6099dd7878d0a78101a4250d8cd2d736',1,'glm']]], - ['aligned_5fmediump_5fmat2',['aligned_mediump_mat2',['../a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3',1,'glm']]], - ['aligned_5fmediump_5fmat2x2',['aligned_mediump_mat2x2',['../a00303.html#ga04bf49316ee777d42fcfe681ee37d7be',1,'glm']]], - ['aligned_5fmediump_5fmat2x3',['aligned_mediump_mat2x3',['../a00303.html#ga26a0b61e444a51a37b9737cf4d84291b',1,'glm']]], - ['aligned_5fmediump_5fmat2x4',['aligned_mediump_mat2x4',['../a00303.html#ga163facc9ed2692ea1300ed57c5d12b17',1,'glm']]], - ['aligned_5fmediump_5fmat3',['aligned_mediump_mat3',['../a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c',1,'glm']]], - ['aligned_5fmediump_5fmat3x2',['aligned_mediump_mat3x2',['../a00303.html#ga80dee705d714300378e0847f45059097',1,'glm']]], - ['aligned_5fmediump_5fmat3x3',['aligned_mediump_mat3x3',['../a00303.html#ga721f5404caf40d68962dcc0529de71d9',1,'glm']]], - ['aligned_5fmediump_5fmat3x4',['aligned_mediump_mat3x4',['../a00303.html#ga98f4dc6722a2541a990918c074075359',1,'glm']]], - ['aligned_5fmediump_5fmat4',['aligned_mediump_mat4',['../a00303.html#gaeefee8317192174596852ce19b602720',1,'glm']]], - ['aligned_5fmediump_5fmat4x2',['aligned_mediump_mat4x2',['../a00303.html#ga46f372a006345c252a41267657cc22c0',1,'glm']]], - ['aligned_5fmediump_5fmat4x3',['aligned_mediump_mat4x3',['../a00303.html#ga0effece4545acdebdc2a5512a303110e',1,'glm']]], - ['aligned_5fmediump_5fmat4x4',['aligned_mediump_mat4x4',['../a00303.html#ga312864244cae4e8f10f478cffd0f76de',1,'glm']]], - ['aligned_5fmediump_5fuvec1',['aligned_mediump_uvec1',['../a00303.html#gacb78126ea2eb779b41c7511128ff1283',1,'glm']]], - ['aligned_5fmediump_5fuvec2',['aligned_mediump_uvec2',['../a00303.html#ga081d53e0a71443d0b68ea61c870f9adc',1,'glm']]], - ['aligned_5fmediump_5fuvec3',['aligned_mediump_uvec3',['../a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379',1,'glm']]], - ['aligned_5fmediump_5fuvec4',['aligned_mediump_uvec4',['../a00303.html#ga73ea0c1ba31580e107d21270883f51fc',1,'glm']]], - ['aligned_5fmediump_5fvec1',['aligned_mediump_vec1',['../a00303.html#ga6b797eec76fa471e300158f3453b3b2e',1,'glm']]], - ['aligned_5fmediump_5fvec2',['aligned_mediump_vec2',['../a00303.html#ga026a55ddbf2bafb1432f1157a2708616',1,'glm']]], - ['aligned_5fmediump_5fvec3',['aligned_mediump_vec3',['../a00303.html#ga3a25e494173f6a64637b08a1b50a2132',1,'glm']]], - ['aligned_5fmediump_5fvec4',['aligned_mediump_vec4',['../a00303.html#ga320d1c661cff2ef214eb50241f2928b2',1,'glm']]], - ['aligned_5fuvec1',['aligned_uvec1',['../a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548',1,'glm']]], - ['aligned_5fuvec2',['aligned_uvec2',['../a00303.html#ga074137e3be58528d67041c223d49f398',1,'glm']]], - ['aligned_5fuvec3',['aligned_uvec3',['../a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0',1,'glm']]], - ['aligned_5fuvec4',['aligned_uvec4',['../a00303.html#gabf842c45eea186170c267a328e3f3b7d',1,'glm']]], - ['aligned_5fvec1',['aligned_vec1',['../a00303.html#ga05e6d4c908965d04191c2070a8d0a65e',1,'glm']]], - ['aligned_5fvec2',['aligned_vec2',['../a00303.html#ga0682462f8096a226773e20fac993cde5',1,'glm']]], - ['aligned_5fvec3',['aligned_vec3',['../a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0',1,'glm']]], - ['aligned_5fvec4',['aligned_vec4',['../a00303.html#ga85d89e83cb8137e1be1446de8c3b643a',1,'glm']]], - ['all',['all',['../a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd',1,'glm']]], - ['angle',['angle',['../a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8',1,'glm::angle(qua< T, Q > const &x)'],['../a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1',1,'glm::angle(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['angleaxis',['angleAxis',['../a00257.html#ga5c0095cfcb218c75a4b79d7687950036',1,'glm']]], - ['any',['any',['../a00374.html#ga911b3f8e41459dd551ccb6d385d91061',1,'glm']]], - ['arecollinear',['areCollinear',['../a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4',1,'glm']]], - ['areorthogonal',['areOrthogonal',['../a00368.html#gac7b95b3f798e3c293262b2bdaad47c57',1,'glm']]], - ['areorthonormal',['areOrthonormal',['../a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3',1,'glm']]], - ['asec',['asec',['../a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10',1,'glm']]], - ['asech',['asech',['../a00301.html#gaec7586dccfe431f850d006f3824b8ca6',1,'glm']]], - ['asin',['asin',['../a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73',1,'glm']]], - ['asinh',['asinh',['../a00373.html#ga3ef16b501ee859fddde88e22192a5950',1,'glm']]], - ['associated_5fmin_5fmax_2ehpp',['associated_min_max.hpp',['../a00007.html',1,'']]], - ['associatedmax',['associatedMax',['../a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45',1,'glm::associatedMax(T x, U a, T y, U b)'],['../a00308.html#ga5c6758bc50aa7fbe700f87123a045aad',1,'glm::associatedMax(vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b)'],['../a00308.html#ga0d169d6ce26b03248df175f39005d77f',1,'glm::associatedMax(T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b)'],['../a00308.html#ga4086269afabcb81dd7ded33cb3448653',1,'glm::associatedMax(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b)'],['../a00308.html#gaec891e363d91abbf3a4443cf2f652209',1,'glm::associatedMax(T x, U a, T y, U b, T z, U c)'],['../a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c',1,'glm::associatedMax(vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c)'],['../a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba',1,'glm::associatedMax(T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c)'],['../a00308.html#ga19f59d1141a51a3b2108a9807af78f7f',1,'glm::associatedMax(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c)'],['../a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc',1,'glm::associatedMax(T x, U a, T y, U b, T z, U c, T w, U d)'],['../a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6',1,'glm::associatedMax(vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c, vec< L, T, Q > const &w, vec< L, U, Q > const &d)'],['../a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d',1,'glm::associatedMax(T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c, T w, vec< L, U, Q > const &d)'],['../a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb',1,'glm::associatedMax(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &w, U d)']]], - ['associatedmin',['associatedMin',['../a00308.html#gacc01bd272359572fc28437ae214a02df',1,'glm::associatedMin(T x, U a, T y, U b)'],['../a00308.html#gac2f0dff90948f2e44386a5eafd941d1c',1,'glm::associatedMin(vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b)'],['../a00308.html#gacfec519c820331d023ef53a511749319',1,'glm::associatedMin(T x, const vec< L, U, Q > &a, T y, const vec< L, U, Q > &b)'],['../a00308.html#ga4757c7cab2d809124a8525d0a9deeb37',1,'glm::associatedMin(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b)'],['../a00308.html#gad0aa8f86259a26d839d34a3577a923fc',1,'glm::associatedMin(T x, U a, T y, U b, T z, U c)'],['../a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d',1,'glm::associatedMin(vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c)'],['../a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6',1,'glm::associatedMin(T x, U a, T y, U b, T z, U c, T w, U d)'],['../a00308.html#ga66b08118bc88f0494bcacb7cdb940556',1,'glm::associatedMin(vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c, vec< L, T, Q > const &w, vec< L, U, Q > const &d)'],['../a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68',1,'glm::associatedMin(T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c, T w, vec< L, U, Q > const &d)'],['../a00308.html#ga2db7e351994baee78540a562d4bb6d3b',1,'glm::associatedMin(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &w, U d)']]], - ['atan',['atan',['../a00373.html#gac61629f3a4aa14057e7a8cae002291db',1,'glm::atan(vec< L, T, Q > const &y, vec< L, T, Q > const &x)'],['../a00373.html#ga5229f087eaccbc466f1c609ce3107b95',1,'glm::atan(vec< L, T, Q > const &y_over_x)']]], - ['atan2',['atan2',['../a00315.html#gac63011205bf6d0be82589dc56dd26708',1,'glm::atan2(T x, T y)'],['../a00315.html#ga83bc41bd6f89113ee8006576b12bfc50',1,'glm::atan2(const vec< 2, T, Q > &x, const vec< 2, T, Q > &y)'],['../a00315.html#gac39314f5087e7e51e592897cabbc1927',1,'glm::atan2(const vec< 3, T, Q > &x, const vec< 3, T, Q > &y)'],['../a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3',1,'glm::atan2(const vec< 4, T, Q > &x, const vec< 4, T, Q > &y)']]], - ['atanh',['atanh',['../a00373.html#gabc925650e618357d07da255531658b87',1,'glm']]], - ['axis',['axis',['../a00257.html#ga764254f10248b505e936e5309a88c23d',1,'glm']]], - ['axisangle',['axisAngle',['../a00337.html#gafefe32ce5a90a135287ba34fac3623bc',1,'glm']]], - ['axisanglematrix',['axisAngleMatrix',['../a00337.html#ga3a788e2f5223397df5c426413ecc2f6b',1,'glm']]], - ['angle_20and_20trigonometry_20functions',['Angle and Trigonometry Functions',['../a00373.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_1.html b/tests/OpenGL/package/glm/doc/api/search/all_1.html deleted file mode 100644 index 1fbc509c..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_1.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_1.js b/tests/OpenGL/package/glm/doc/api/search/all_1.js deleted file mode 100644 index aad8fc7f..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_1.js +++ /dev/null @@ -1,41 +0,0 @@ -var searchData= -[ - ['backeasein',['backEaseIn',['../a00318.html#ga93cddcdb6347a44d5927cc2bf2570816',1,'glm::backEaseIn(genType const &a)'],['../a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36',1,'glm::backEaseIn(genType const &a, genType const &o)']]], - ['backeaseinout',['backEaseInOut',['../a00318.html#gace6d24722a2f6722b56398206eb810bb',1,'glm::backEaseInOut(genType const &a)'],['../a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1',1,'glm::backEaseInOut(genType const &a, genType const &o)']]], - ['backeaseout',['backEaseOut',['../a00318.html#gabf25069fa906413c858fd46903d520b9',1,'glm::backEaseOut(genType const &a)'],['../a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f',1,'glm::backEaseOut(genType const &a, genType const &o)']]], - ['ballrand',['ballRand',['../a00300.html#ga7c53b7797f3147af68a11c767679fa3f',1,'glm']]], - ['bit_2ehpp',['bit.hpp',['../a00008.html',1,'']]], - ['bitcount',['bitCount',['../a00370.html#ga44abfe3379e11cbd29425a843420d0d6',1,'glm::bitCount(genType v)'],['../a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5',1,'glm::bitCount(vec< L, T, Q > const &v)']]], - ['bitfield_2ehpp',['bitfield.hpp',['../a00009.html',1,'']]], - ['bitfielddeinterleave',['bitfieldDeinterleave',['../a00288.html#ga091d934233a2e121df91b8c7230357c8',1,'glm::bitfieldDeinterleave(glm::uint16 x)'],['../a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98',1,'glm::bitfieldDeinterleave(glm::uint32 x)'],['../a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60',1,'glm::bitfieldDeinterleave(glm::uint64 x)']]], - ['bitfieldextract',['bitfieldExtract',['../a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2',1,'glm']]], - ['bitfieldfillone',['bitfieldFillOne',['../a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a',1,'glm::bitfieldFillOne(genIUType Value, int FirstBit, int BitCount)'],['../a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1',1,'glm::bitfieldFillOne(vec< L, T, Q > const &Value, int FirstBit, int BitCount)']]], - ['bitfieldfillzero',['bitfieldFillZero',['../a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee',1,'glm::bitfieldFillZero(genIUType Value, int FirstBit, int BitCount)'],['../a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2',1,'glm::bitfieldFillZero(vec< L, T, Q > const &Value, int FirstBit, int BitCount)']]], - ['bitfieldinsert',['bitfieldInsert',['../a00370.html#ga2e82992340d421fadb61a473df699b20',1,'glm']]], - ['bitfieldinterleave',['bitfieldInterleave',['../a00288.html#ga24cad0069f9a0450abd80b3e89501adf',1,'glm::bitfieldInterleave(int8 x, int8 y)'],['../a00288.html#ga9a4976a529aec2cee56525e1165da484',1,'glm::bitfieldInterleave(uint8 x, uint8 y)'],['../a00288.html#ga4a76bbca39c40153f3203d0a1926e142',1,'glm::bitfieldInterleave(u8vec2 const &v)'],['../a00288.html#gac51c33a394593f0631fa3aa5bb778809',1,'glm::bitfieldInterleave(int16 x, int16 y)'],['../a00288.html#ga94f3646a5667f4be56f8dcf3310e963f',1,'glm::bitfieldInterleave(uint16 x, uint16 y)'],['../a00288.html#ga406c4ee56af4ca37a73f449f154eca3e',1,'glm::bitfieldInterleave(u16vec2 const &v)'],['../a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a',1,'glm::bitfieldInterleave(int32 x, int32 y)'],['../a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd',1,'glm::bitfieldInterleave(uint32 x, uint32 y)'],['../a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78',1,'glm::bitfieldInterleave(u32vec2 const &v)'],['../a00288.html#ga8fdb724dccd4a07d57efc01147102137',1,'glm::bitfieldInterleave(int8 x, int8 y, int8 z)'],['../a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93',1,'glm::bitfieldInterleave(uint8 x, uint8 y, uint8 z)'],['../a00288.html#gaa901c36a842fa5d126ea650549f17b24',1,'glm::bitfieldInterleave(int16 x, int16 y, int16 z)'],['../a00288.html#ga3afd6d38881fe3948c53d4214d2197fd',1,'glm::bitfieldInterleave(uint16 x, uint16 y, uint16 z)'],['../a00288.html#gad2075d96a6640121edaa98ea534102ca',1,'glm::bitfieldInterleave(int32 x, int32 y, int32 z)'],['../a00288.html#gab19fbc739fc0cf7247978602c36f7da8',1,'glm::bitfieldInterleave(uint32 x, uint32 y, uint32 z)'],['../a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d',1,'glm::bitfieldInterleave(int8 x, int8 y, int8 z, int8 w)'],['../a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36',1,'glm::bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w)'],['../a00288.html#ga180a63161e1319fbd5a53c84d0429c7a',1,'glm::bitfieldInterleave(int16 x, int16 y, int16 z, int16 w)'],['../a00288.html#gafca8768671a14c8016facccb66a89f26',1,'glm::bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w)']]], - ['bitfieldreverse',['bitfieldReverse',['../a00370.html#ga750a1d92464489b7711dee67aa3441b6',1,'glm']]], - ['bitfieldrotateleft',['bitfieldRotateLeft',['../a00288.html#ga2eb49678a344ce1495bdb5586d9896b9',1,'glm::bitfieldRotateLeft(genIUType In, int Shift)'],['../a00288.html#gae186317091b1a39214ebf79008d44a1e',1,'glm::bitfieldRotateLeft(vec< L, T, Q > const &In, int Shift)']]], - ['bitfieldrotateright',['bitfieldRotateRight',['../a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca',1,'glm::bitfieldRotateRight(genIUType In, int Shift)'],['../a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88',1,'glm::bitfieldRotateRight(vec< L, T, Q > const &In, int Shift)']]], - ['bool1',['bool1',['../a00315.html#gaddcd7aa2e30e61af5b38660613d3979e',1,'glm']]], - ['bool1x1',['bool1x1',['../a00315.html#ga7f895c936f0c29c8729afbbf22806090',1,'glm']]], - ['bool2',['bool2',['../a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9',1,'glm']]], - ['bool2x2',['bool2x2',['../a00315.html#gadb3703955e513632f98ba12fe051ba3e',1,'glm']]], - ['bool2x3',['bool2x3',['../a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0',1,'glm']]], - ['bool2x4',['bool2x4',['../a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f',1,'glm']]], - ['bool3',['bool3',['../a00315.html#ga99629f818737f342204071ef8296b2ed',1,'glm']]], - ['bool3x2',['bool3x2',['../a00315.html#gac7d7311f7e0fa8b6163d96dab033a755',1,'glm']]], - ['bool3x3',['bool3x3',['../a00315.html#ga6c97b99aac3e302053ffb58aace9033c',1,'glm']]], - ['bool3x4',['bool3x4',['../a00315.html#gae7d6b679463d37d6c527d478fb470fdf',1,'glm']]], - ['bool4',['bool4',['../a00315.html#ga13c3200b82708f73faac6d7f09ec91a3',1,'glm']]], - ['bool4x2',['bool4x2',['../a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0',1,'glm']]], - ['bool4x3',['bool4x3',['../a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe',1,'glm']]], - ['bool4x4',['bool4x4',['../a00315.html#ga7d2a7d13986602ae2896bfaa394235d4',1,'glm']]], - ['bounceeasein',['bounceEaseIn',['../a00318.html#gaac30767f2e430b0c3fc859a4d59c7b5b',1,'glm']]], - ['bounceeaseinout',['bounceEaseInOut',['../a00318.html#gadf9f38eff1e5f4c2fa5b629a25ae413e',1,'glm']]], - ['bounceeaseout',['bounceEaseOut',['../a00318.html#ga94007005ff0dcfa0749ebfa2aec540b2',1,'glm']]], - ['bvec1',['bvec1',['../a00265.html#ga067af382616d93f8e850baae5154cdcc',1,'glm']]], - ['bvec2',['bvec2',['../a00281.html#ga0b6123e03653cc1bbe366fc55238a934',1,'glm']]], - ['bvec3',['bvec3',['../a00281.html#ga197151b72dfaf289daf98b361760ffe7',1,'glm']]], - ['bvec4',['bvec4',['../a00281.html#ga9f7b9712373ff4342d9114619b55f5e3',1,'glm']]], - ['byte',['byte',['../a00354.html#ga3005cb0d839d546c616becfa6602c607',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_10.html b/tests/OpenGL/package/glm/doc/api/search/all_10.html deleted file mode 100644 index 80581d5a..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_10.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_10.js b/tests/OpenGL/package/glm/doc/api/search/all_10.js deleted file mode 100644 index 481be8c2..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_10.js +++ /dev/null @@ -1,50 +0,0 @@ -var searchData= -[ - ['stable_20extensions',['Stable extensions',['../a00285.html',1,'']]], - ['saturate',['saturate',['../a00315.html#ga0fd09e616d122bc2ed9726682ffd44b7',1,'glm::saturate(T x)'],['../a00315.html#gaee97b8001c794a78a44f5d59f62a8aba',1,'glm::saturate(const vec< 2, T, Q > &x)'],['../a00315.html#ga39bfe3a421286ee31680d45c31ccc161',1,'glm::saturate(const vec< 3, T, Q > &x)'],['../a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183',1,'glm::saturate(const vec< 4, T, Q > &x)']]], - ['saturation',['saturation',['../a00312.html#ga01a97152b44e1550edcac60bd849e884',1,'glm::saturation(T const s)'],['../a00312.html#ga2156cea600e90148ece5bc96fd6db43a',1,'glm::saturation(T const s, vec< 3, T, Q > const &color)'],['../a00312.html#gaba0eacee0736dae860e9371cc1ae4785',1,'glm::saturation(T const s, vec< 4, T, Q > const &color)']]], - ['scalar_5fcommon_2ehpp',['scalar_common.hpp',['../a00144.html',1,'']]], - ['scalar_5fconstants_2ehpp',['scalar_constants.hpp',['../a00145.html',1,'']]], - ['scalar_5fint_5fsized_2ehpp',['scalar_int_sized.hpp',['../a00146.html',1,'']]], - ['scalar_5finteger_2ehpp',['scalar_integer.hpp',['../a00147.html',1,'']]], - ['scalar_5fmultiplication_2ehpp',['scalar_multiplication.hpp',['../a00148.html',1,'']]], - ['scalar_5fuint_5fsized_2ehpp',['scalar_uint_sized.hpp',['../a00151.html',1,'']]], - ['scalar_5fulp_2ehpp',['scalar_ulp.hpp',['../a00152.html',1,'']]], - ['scale',['scale',['../a00247.html#ga05051adbee603fb3c5095d8cf5cc229b',1,'glm::scale(mat< 4, 4, T, Q > const &m, vec< 3, T, Q > const &v)'],['../a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e',1,'glm::scale(mat< 3, 3, T, Q > const &m, vec< 2, T, Q > const &v)'],['../a00362.html#gafbeefee8fec884d566e4ada0049174d7',1,'glm::scale(vec< 3, T, Q > const &v)']]], - ['scalebias',['scaleBias',['../a00363.html#gabf249498b236e62c983d90d30d63c99c',1,'glm::scaleBias(T scale, T bias)'],['../a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e',1,'glm::scaleBias(mat< 4, 4, T, Q > const &m, T scale, T bias)']]], - ['sec',['sec',['../a00301.html#gae4bcbebee670c5ea155f0777b3acbd84',1,'glm']]], - ['sech',['sech',['../a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae',1,'glm']]], - ['shearx',['shearX',['../a00341.html#ga2a118ece5db1e2022112b954846012af',1,'glm']]], - ['shearx2d',['shearX2D',['../a00363.html#gabf714b8a358181572b32a45555f71948',1,'glm']]], - ['shearx3d',['shearX3D',['../a00363.html#ga73e867c6cd4d700fe2054437e56106c4',1,'glm']]], - ['sheary',['shearY',['../a00341.html#ga717f1833369c1ac4a40e4ac015af885e',1,'glm']]], - ['sheary2d',['shearY2D',['../a00363.html#gac7998d0763d9181550c77e8af09a182c',1,'glm']]], - ['sheary3d',['shearY3D',['../a00363.html#gade5bb65ffcb513973db1a1314fb5cfac',1,'glm']]], - ['shearz3d',['shearZ3D',['../a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255',1,'glm']]], - ['shortmix',['shortMix',['../a00352.html#gadc576cc957adc2a568cdcbc3799175bc',1,'glm']]], - ['sign',['sign',['../a00241.html#ga1e2e5cfff800056540e32f6c9b604b28',1,'glm::sign(vec< L, T, Q > const &x)'],['../a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0',1,'glm::sign(vec< L, T, Q > const &x, vec< L, T, Q > const &base)']]], - ['simplex',['simplex',['../a00297.html#ga8122468c69015ff397349a7dcc638b27',1,'glm']]], - ['sin',['sin',['../a00373.html#ga29747fd108cb7292ae5a284f69691a69',1,'glm']]], - ['sineeasein',['sineEaseIn',['../a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf',1,'glm']]], - ['sineeaseinout',['sineEaseInOut',['../a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7',1,'glm']]], - ['sineeaseout',['sineEaseOut',['../a00318.html#gab3e454f883afc1606ef91363881bf5a3',1,'glm']]], - ['sinh',['sinh',['../a00373.html#gac7c39ff21809e281552b4dbe46f4a39d',1,'glm']]], - ['sint',['sint',['../a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40',1,'glm']]], - ['size1',['size1',['../a00359.html#gaeb877ac8f9a3703961736c1c5072cf68',1,'glm']]], - ['size1_5ft',['size1_t',['../a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f',1,'glm']]], - ['size2',['size2',['../a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe',1,'glm']]], - ['size2_5ft',['size2_t',['../a00359.html#ga5976c25657d4e2b5f73f39364c3845d6',1,'glm']]], - ['size3',['size3',['../a00359.html#gae1c72956d0359b0db332c6c8774d3b04',1,'glm']]], - ['size3_5ft',['size3_t',['../a00359.html#gaf2654983c60d641fd3808e65a8dfad8d',1,'glm']]], - ['size4',['size4',['../a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa',1,'glm']]], - ['size4_5ft',['size4_t',['../a00359.html#gaa423efcea63675a2df26990dbcb58656',1,'glm']]], - ['slerp',['slerp',['../a00248.html#gae7fc3c945be366b9942b842f55da428a',1,'glm::slerp(qua< T, Q > const &x, qua< T, Q > const &y, T a)'],['../a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee',1,'glm::slerp(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y, T const &a)']]], - ['smoothstep',['smoothstep',['../a00241.html#ga562edf7eca082cc5b7a0aaf180436daf',1,'glm']]], - ['sphericalrand',['sphericalRand',['../a00300.html#ga22f90fcaccdf001c516ca90f6428e138',1,'glm']]], - ['spline_2ehpp',['spline.hpp',['../a00154.html',1,'']]], - ['sqrt',['sqrt',['../a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c',1,'glm::sqrt(vec< L, T, Q > const &v)'],['../a00256.html#ga64b7b255ed7bcba616fe6b44470b022e',1,'glm::sqrt(qua< T, Q > const &q)'],['../a00330.html#ga7ce36693a75879ccd9bb10167cfa722d',1,'glm::sqrt(int x)'],['../a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc',1,'glm::sqrt(uint x)']]], - ['squad',['squad',['../a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35',1,'glm']]], - ['std_5fbased_5ftype_2ehpp',['std_based_type.hpp',['../a00155.html',1,'']]], - ['step',['step',['../a00241.html#ga015a1261ff23e12650211aa872863cce',1,'glm::step(genType edge, genType x)'],['../a00241.html#ga8f9a911a48ef244b51654eaefc81c551',1,'glm::step(T edge, vec< L, T, Q > const &x)'],['../a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f',1,'glm::step(vec< L, T, Q > const &edge, vec< L, T, Q > const &x)']]], - ['string_5fcast_2ehpp',['string_cast.hpp',['../a00156.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_11.html b/tests/OpenGL/package/glm/doc/api/search/all_11.html deleted file mode 100644 index bb6241be..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_11.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_11.js b/tests/OpenGL/package/glm/doc/api/search/all_11.js deleted file mode 100644 index 9ae88efd..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_11.js +++ /dev/null @@ -1,41 +0,0 @@ -var searchData= -[ - ['tan',['tan',['../a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f',1,'glm']]], - ['tanh',['tanh',['../a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1',1,'glm']]], - ['texture_2ehpp',['texture.hpp',['../a00157.html',1,'']]], - ['third',['third',['../a00290.html#ga3077c6311010a214b69ddc8214ec13b5',1,'glm']]], - ['three_5fover_5ftwo_5fpi',['three_over_two_pi',['../a00290.html#gae94950df74b0ce382b1fc1d978ef7394',1,'glm']]], - ['to_5fstring',['to_string',['../a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5',1,'glm']]], - ['tomat3',['toMat3',['../a00352.html#gaab0afabb894b28a983fb8ec610409d56',1,'glm']]], - ['tomat4',['toMat4',['../a00352.html#gadfa2c77094e8cc9adad321d938855ffb',1,'glm']]], - ['toquat',['toQuat',['../a00352.html#ga798de5d186499c9a9231cd92c8afaef1',1,'glm::toQuat(mat< 3, 3, T, Q > const &x)'],['../a00352.html#ga5eb36f51e1638e710451eba194dbc011',1,'glm::toQuat(mat< 4, 4, T, Q > const &x)']]], - ['transform_2ehpp',['transform.hpp',['../a00158.html',1,'']]], - ['transform2_2ehpp',['transform2.hpp',['../a00159.html',1,'']]], - ['translate',['translate',['../a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284',1,'glm::translate(mat< 4, 4, T, Q > const &m, vec< 3, T, Q > const &v)'],['../a00341.html#gaf4573ae47c80938aa9053ef6a33755ab',1,'glm::translate(mat< 3, 3, T, Q > const &m, vec< 2, T, Q > const &v)'],['../a00362.html#ga309a30e652e58c396e2c3d4db3ee7658',1,'glm::translate(vec< 3, T, Q > const &v)']]], - ['transpose',['transpose',['../a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35',1,'glm']]], - ['trianglenormal',['triangleNormal',['../a00344.html#gaff1cb5496925dfa7962df457772a7f35',1,'glm']]], - ['trigonometric_2ehpp',['trigonometric.hpp',['../a00160.html',1,'']]], - ['trunc',['trunc',['../a00241.html#gaf9375e3e06173271d49e6ffa3a334259',1,'glm']]], - ['tweakedinfiniteperspective',['tweakedInfinitePerspective',['../a00243.html#gaaeacc04a2a6f4b18c5899d37e7bb3ef9',1,'glm::tweakedInfinitePerspective(T fovy, T aspect, T near)'],['../a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8',1,'glm::tweakedInfinitePerspective(T fovy, T aspect, T near, T ep)']]], - ['two_5fover_5fpi',['two_over_pi',['../a00290.html#ga74eadc8a211253079683219a3ea0462a',1,'glm']]], - ['two_5fover_5froot_5fpi',['two_over_root_pi',['../a00290.html#ga5827301817640843cf02026a8d493894',1,'glm']]], - ['two_5fpi',['two_pi',['../a00290.html#gaa5276a4617566abcfe49286f40e3a256',1,'glm']]], - ['two_5fthirds',['two_thirds',['../a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5',1,'glm']]], - ['type_5fmat2x2_2ehpp',['type_mat2x2.hpp',['../a00165.html',1,'']]], - ['type_5fmat2x3_2ehpp',['type_mat2x3.hpp',['../a00166.html',1,'']]], - ['type_5fmat2x4_2ehpp',['type_mat2x4.hpp',['../a00167.html',1,'']]], - ['type_5fmat3x2_2ehpp',['type_mat3x2.hpp',['../a00168.html',1,'']]], - ['type_5fmat3x3_2ehpp',['type_mat3x3.hpp',['../a00169.html',1,'']]], - ['type_5fmat3x4_2ehpp',['type_mat3x4.hpp',['../a00170.html',1,'']]], - ['type_5fmat4x2_2ehpp',['type_mat4x2.hpp',['../a00171.html',1,'']]], - ['type_5fmat4x3_2ehpp',['type_mat4x3.hpp',['../a00172.html',1,'']]], - ['type_5fmat4x4_2ehpp',['type_mat4x4.hpp',['../a00173.html',1,'']]], - ['type_5fprecision_2ehpp',['type_precision.hpp',['../a00174.html',1,'']]], - ['type_5fptr_2ehpp',['type_ptr.hpp',['../a00175.html',1,'']]], - ['type_5fquat_2ehpp',['type_quat.hpp',['../a00176.html',1,'']]], - ['type_5ftrait_2ehpp',['type_trait.hpp',['../a00177.html',1,'']]], - ['type_5fvec1_2ehpp',['type_vec1.hpp',['../a00178.html',1,'']]], - ['type_5fvec2_2ehpp',['type_vec2.hpp',['../a00179.html',1,'']]], - ['type_5fvec3_2ehpp',['type_vec3.hpp',['../a00180.html',1,'']]], - ['type_5fvec4_2ehpp',['type_vec4.hpp',['../a00181.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_12.html b/tests/OpenGL/package/glm/doc/api/search/all_12.html deleted file mode 100644 index fe93a5bf..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_12.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_12.js b/tests/OpenGL/package/glm/doc/api/search/all_12.js deleted file mode 100644 index a7435af9..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_12.js +++ /dev/null @@ -1,97 +0,0 @@ -var searchData= -[ - ['u16',['u16',['../a00304.html#gaa2d7acc0adb536fab71fe261232a40ff',1,'glm']]], - ['u16vec1',['u16vec1',['../a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5',1,'glm::u16vec1()'],['../a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0',1,'glm::gtx::u16vec1()']]], - ['u16vec2',['u16vec2',['../a00304.html#ga2a78447eb9d66a114b193f4a25899c16',1,'glm']]], - ['u16vec3',['u16vec3',['../a00304.html#ga1c522ca821c27b862fe51cf4024b064b',1,'glm']]], - ['u16vec4',['u16vec4',['../a00304.html#ga529496d75775fb656a07993ea9af2450',1,'glm']]], - ['u32',['u32',['../a00304.html#ga8165913e068444f7842302d40ba897b9',1,'glm']]], - ['u32vec1',['u32vec1',['../a00304.html#gae627372cfd5f20dd87db490387b71195',1,'glm::u32vec1()'],['../a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3',1,'glm::gtx::u32vec1()']]], - ['u32vec2',['u32vec2',['../a00304.html#ga2a266e46ee218d0c680f12b35c500cc0',1,'glm']]], - ['u32vec3',['u32vec3',['../a00304.html#gae267358ff2a41d156d97f5762630235a',1,'glm']]], - ['u32vec4',['u32vec4',['../a00304.html#ga31cef34e4cd04840c54741ff2f7005f0',1,'glm']]], - ['u64',['u64',['../a00304.html#gaf3f312156984c365e9f65620354da70b',1,'glm']]], - ['u64vec1',['u64vec1',['../a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd',1,'glm::u64vec1()'],['../a00346.html#ga818de170e2584ab037130f2881925974',1,'glm::gtx::u64vec1()']]], - ['u64vec2',['u64vec2',['../a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5',1,'glm']]], - ['u64vec3',['u64vec3',['../a00304.html#ga489b89ba93d4f7b3934df78debc52276',1,'glm']]], - ['u64vec4',['u64vec4',['../a00304.html#ga3945dd6515d4498cb603e65ff867ab03',1,'glm']]], - ['u8',['u8',['../a00304.html#gaecc7082561fc9028b844b6cf3d305d36',1,'glm']]], - ['u8vec1',['u8vec1',['../a00304.html#ga29b349e037f0b24320b4548a143daee2',1,'glm::u8vec1()'],['../a00346.html#ga5853fe457f4c8a6bc09343d0e9833980',1,'glm::gtx::u8vec1()']]], - ['u8vec2',['u8vec2',['../a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611',1,'glm']]], - ['u8vec3',['u8vec3',['../a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2',1,'glm']]], - ['u8vec4',['u8vec4',['../a00304.html#ga20779a61de2fd526a17f12fe53ec46b1',1,'glm']]], - ['uaddcarry',['uaddCarry',['../a00370.html#gaedcec48743632dff6786bcc492074b1b',1,'glm']]], - ['uint16',['uint16',['../a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e',1,'glm']]], - ['uint16_5ft',['uint16_t',['../a00304.html#ga91f91f411080c37730856ff5887f5bcf',1,'glm']]], - ['uint32',['uint32',['../a00263.html#ga1134b580f8da4de94ca6b1de4d37975e',1,'glm']]], - ['uint32_5ft',['uint32_t',['../a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac',1,'glm']]], - ['uint64',['uint64',['../a00263.html#gab630f76c26b50298187f7889104d4b9c',1,'glm']]], - ['uint64_5ft',['uint64_t',['../a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee',1,'glm']]], - ['uint8',['uint8',['../a00263.html#gadde6aaee8457bee49c2a92621fe22b79',1,'glm']]], - ['uint8_5ft',['uint8_t',['../a00304.html#ga28d97808322d3c92186e4a0c067d7e8e',1,'glm']]], - ['uintbitstofloat',['uintBitsToFloat',['../a00241.html#gab2bae0d15dcdca6093f88f76b3975d97',1,'glm::uintBitsToFloat(uint const &v)'],['../a00241.html#ga97f46b5f7b42fe44482e13356eb394ae',1,'glm::uintBitsToFloat(vec< L, uint, Q > const &v)']]], - ['ulp_2ehpp',['ulp.hpp',['../a00182.html',1,'']]], - ['umat2',['umat2',['../a00294.html#ga4cae85566f900debf930c41944b64691',1,'glm']]], - ['umat2x2',['umat2x2',['../a00294.html#gabf8acdd33ce8951051edbca5200898aa',1,'glm']]], - ['umat2x3',['umat2x3',['../a00294.html#ga1870da7578d5022b973a83155d386ab3',1,'glm']]], - ['umat2x4',['umat2x4',['../a00294.html#ga57936a3998e992370e59a223e0ee4fd4',1,'glm']]], - ['umat3',['umat3',['../a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6',1,'glm']]], - ['umat3x2',['umat3x2',['../a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a',1,'glm']]], - ['umat3x3',['umat3x3',['../a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb',1,'glm']]], - ['umat3x4',['umat3x4',['../a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba',1,'glm']]], - ['umat4',['umat4',['../a00294.html#ga38bc7bb6494e344185df596deeb4544c',1,'glm']]], - ['umat4x2',['umat4x2',['../a00294.html#ga70fa2d05896aa83cbc8c07672a429b53',1,'glm']]], - ['umat4x3',['umat4x3',['../a00294.html#ga87581417945411f75cb31dd6ca1dba98',1,'glm']]], - ['umat4x4',['umat4x4',['../a00294.html#gaf72e6d399c42985db6872c50f53d7eb8',1,'glm']]], - ['umulextended',['umulExtended',['../a00370.html#ga732e2fb56db57ea541c7e5c92b7121be',1,'glm']]], - ['unpackdouble2x32',['unpackDouble2x32',['../a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483',1,'glm']]], - ['unpackf2x11_5f1x10',['unpackF2x11_1x10',['../a00298.html#ga2b1fd1e854705b1345e98409e0a25e50',1,'glm']]], - ['unpackf3x9_5fe1x5',['unpackF3x9_E1x5',['../a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e',1,'glm']]], - ['unpackhalf',['unpackHalf',['../a00298.html#ga30d6b2f1806315bcd6047131f547d33b',1,'glm']]], - ['unpackhalf1x16',['unpackHalf1x16',['../a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf',1,'glm']]], - ['unpackhalf2x16',['unpackHalf2x16',['../a00372.html#gaf59b52e6b28da9335322c4ae19b5d745',1,'glm']]], - ['unpackhalf4x16',['unpackHalf4x16',['../a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd',1,'glm']]], - ['unpacki3x10_5f1x2',['unpackI3x10_1x2',['../a00298.html#ga9a05330e5490be0908d3b117d82aff56',1,'glm']]], - ['unpackint2x16',['unpackInt2x16',['../a00298.html#gaccde055882918a3175de82f4ca8b7d8e',1,'glm']]], - ['unpackint2x32',['unpackInt2x32',['../a00298.html#gab297c0bfd38433524791eb0584d8f08d',1,'glm']]], - ['unpackint2x8',['unpackInt2x8',['../a00298.html#gab0c59f1e259fca9e68adb2207a6b665e',1,'glm']]], - ['unpackint4x16',['unpackInt4x16',['../a00298.html#ga52c154a9b232b62c22517a700cc0c78c',1,'glm']]], - ['unpackint4x8',['unpackInt4x8',['../a00298.html#ga1cd8d2038cdd33a860801aa155a26221',1,'glm']]], - ['unpackrgbm',['unpackRGBM',['../a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02',1,'glm']]], - ['unpacksnorm',['unpackSnorm',['../a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482',1,'glm']]], - ['unpacksnorm1x16',['unpackSnorm1x16',['../a00298.html#ga96dd15002370627a443c835ab03a766c',1,'glm']]], - ['unpacksnorm1x8',['unpackSnorm1x8',['../a00298.html#ga4851ff86678aa1c7ace9d67846894285',1,'glm']]], - ['unpacksnorm2x16',['unpackSnorm2x16',['../a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38',1,'glm']]], - ['unpacksnorm2x8',['unpackSnorm2x8',['../a00298.html#ga8b128e89be449fc71336968a66bf6e1a',1,'glm']]], - ['unpacksnorm3x10_5f1x2',['unpackSnorm3x10_1x2',['../a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b',1,'glm']]], - ['unpacksnorm4x16',['unpackSnorm4x16',['../a00298.html#gaaddf9c353528fe896106f7181219c7f4',1,'glm']]], - ['unpacksnorm4x8',['unpackSnorm4x8',['../a00372.html#ga2db488646d48b7c43d3218954523fe82',1,'glm']]], - ['unpacku3x10_5f1x2',['unpackU3x10_1x2',['../a00298.html#ga48df3042a7d079767f5891a1bfd8a60a',1,'glm']]], - ['unpackuint2x16',['unpackUint2x16',['../a00298.html#ga035bbbeab7ec2b28c0529757395b645b',1,'glm']]], - ['unpackuint2x32',['unpackUint2x32',['../a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab',1,'glm']]], - ['unpackuint2x8',['unpackUint2x8',['../a00298.html#gaa7600a6c71784b637a410869d2a5adcd',1,'glm']]], - ['unpackuint4x16',['unpackUint4x16',['../a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc',1,'glm']]], - ['unpackuint4x8',['unpackUint4x8',['../a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1',1,'glm']]], - ['unpackunorm',['unpackUnorm',['../a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f',1,'glm']]], - ['unpackunorm1x16',['unpackUnorm1x16',['../a00298.html#ga83d34160a5cb7bcb5339823210fc7501',1,'glm']]], - ['unpackunorm1x5_5f1x6_5f1x5',['unpackUnorm1x5_1x6_1x5',['../a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a',1,'glm']]], - ['unpackunorm1x8',['unpackUnorm1x8',['../a00298.html#ga1319207e30874fb4931a9ee913983ee1',1,'glm']]], - ['unpackunorm2x16',['unpackUnorm2x16',['../a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007',1,'glm']]], - ['unpackunorm2x3_5f1x2',['unpackUnorm2x3_1x2',['../a00298.html#ga6abd5a9014df3b5ce4059008d2491260',1,'glm']]], - ['unpackunorm2x4',['unpackUnorm2x4',['../a00298.html#ga2e50476132fe5f27f08e273d9c70d85b',1,'glm']]], - ['unpackunorm2x8',['unpackUnorm2x8',['../a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f',1,'glm']]], - ['unpackunorm3x10_5f1x2',['unpackUnorm3x10_1x2',['../a00298.html#ga5156d3060355fe332865da2c7f78815f',1,'glm']]], - ['unpackunorm3x5_5f1x1',['unpackUnorm3x5_1x1',['../a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d',1,'glm']]], - ['unpackunorm4x16',['unpackUnorm4x16',['../a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d',1,'glm']]], - ['unpackunorm4x4',['unpackUnorm4x4',['../a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d',1,'glm']]], - ['unpackunorm4x8',['unpackUnorm4x8',['../a00372.html#ga7f903259150b67e9466f5f8edffcd197',1,'glm']]], - ['unproject',['unProject',['../a00245.html#ga36641e5d60f994e01c3d8f56b10263d2',1,'glm']]], - ['unprojectno',['unProjectNO',['../a00245.html#gae089ba9fc150ff69c252a20e508857b5',1,'glm']]], - ['unprojectzo',['unProjectZO',['../a00245.html#gade5136413ce530f8e606124d570fba32',1,'glm']]], - ['uround',['uround',['../a00292.html#ga6715b9d573972a0f7763d30d45bcaec4',1,'glm']]], - ['usubborrow',['usubBorrow',['../a00370.html#gae3316ba1229ad9b9f09480833321b053',1,'glm']]], - ['uvec1',['uvec1',['../a00276.html#gac3bdd96183d23876c58a1424585fefe7',1,'glm']]], - ['uvec2',['uvec2',['../a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb',1,'glm']]], - ['uvec3',['uvec3',['../a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418',1,'glm']]], - ['uvec4',['uvec4',['../a00281.html#gaa57e96bb337867329d5f43bcc27c1095',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_13.html b/tests/OpenGL/package/glm/doc/api/search/all_13.html deleted file mode 100644 index cb938b91..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_13.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_13.js b/tests/OpenGL/package/glm/doc/api/search/all_13.js deleted file mode 100644 index 22d14f56..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_13.js +++ /dev/null @@ -1,62 +0,0 @@ -var searchData= -[ - ['vector_20relational_20functions',['Vector Relational Functions',['../a00374.html',1,'']]], - ['vector_20types',['Vector types',['../a00281.html',1,'']]], - ['vector_20types_20with_20precision_20qualifiers',['Vector types with precision qualifiers',['../a00282.html',1,'']]], - ['value_5fptr',['value_ptr',['../a00305.html#ga1c64669e1ba1160ad9386e43dc57569a',1,'glm']]], - ['vec1',['vec1',['../a00270.html#gadfc071d934d8dae7955a1d530a3cf656',1,'glm']]], - ['vec1_2ehpp',['vec1.hpp',['../a00183.html',1,'']]], - ['vec2',['vec2',['../a00281.html#gabe65c061834f61b4f7cb6037b19006a4',1,'glm']]], - ['vec2_2ehpp',['vec2.hpp',['../a00184.html',1,'']]], - ['vec3',['vec3',['../a00281.html#ga9c3019b13faf179e4ad3626ea66df334',1,'glm']]], - ['vec3_2ehpp',['vec3.hpp',['../a00185.html',1,'']]], - ['vec4',['vec4',['../a00281.html#gac215a35481a6597d1bf622a382e9d6e2',1,'glm']]], - ['vec4_2ehpp',['vec4.hpp',['../a00186.html',1,'']]], - ['vec_5fswizzle_2ehpp',['vec_swizzle.hpp',['../a00187.html',1,'']]], - ['vector_5fangle_2ehpp',['vector_angle.hpp',['../a00188.html',1,'']]], - ['vector_5fbool1_2ehpp',['vector_bool1.hpp',['../a00189.html',1,'']]], - ['vector_5fbool1_5fprecision_2ehpp',['vector_bool1_precision.hpp',['../a00190.html',1,'']]], - ['vector_5fbool2_2ehpp',['vector_bool2.hpp',['../a00191.html',1,'']]], - ['vector_5fbool2_5fprecision_2ehpp',['vector_bool2_precision.hpp',['../a00192.html',1,'']]], - ['vector_5fbool3_2ehpp',['vector_bool3.hpp',['../a00193.html',1,'']]], - ['vector_5fbool3_5fprecision_2ehpp',['vector_bool3_precision.hpp',['../a00194.html',1,'']]], - ['vector_5fbool4_2ehpp',['vector_bool4.hpp',['../a00195.html',1,'']]], - ['vector_5fbool4_5fprecision_2ehpp',['vector_bool4_precision.hpp',['../a00196.html',1,'']]], - ['vector_5fcommon_2ehpp',['vector_common.hpp',['../a00197.html',1,'']]], - ['vector_5fdouble1_2ehpp',['vector_double1.hpp',['../a00198.html',1,'']]], - ['vector_5fdouble1_5fprecision_2ehpp',['vector_double1_precision.hpp',['../a00199.html',1,'']]], - ['vector_5fdouble2_2ehpp',['vector_double2.hpp',['../a00200.html',1,'']]], - ['vector_5fdouble2_5fprecision_2ehpp',['vector_double2_precision.hpp',['../a00201.html',1,'']]], - ['vector_5fdouble3_2ehpp',['vector_double3.hpp',['../a00202.html',1,'']]], - ['vector_5fdouble3_5fprecision_2ehpp',['vector_double3_precision.hpp',['../a00203.html',1,'']]], - ['vector_5fdouble4_2ehpp',['vector_double4.hpp',['../a00204.html',1,'']]], - ['vector_5fdouble4_5fprecision_2ehpp',['vector_double4_precision.hpp',['../a00205.html',1,'']]], - ['vector_5ffloat1_2ehpp',['vector_float1.hpp',['../a00206.html',1,'']]], - ['vector_5ffloat1_5fprecision_2ehpp',['vector_float1_precision.hpp',['../a00207.html',1,'']]], - ['vector_5ffloat2_2ehpp',['vector_float2.hpp',['../a00208.html',1,'']]], - ['vector_5ffloat2_5fprecision_2ehpp',['vector_float2_precision.hpp',['../a00209.html',1,'']]], - ['vector_5ffloat3_2ehpp',['vector_float3.hpp',['../a00210.html',1,'']]], - ['vector_5ffloat3_5fprecision_2ehpp',['vector_float3_precision.hpp',['../a00211.html',1,'']]], - ['vector_5ffloat4_2ehpp',['vector_float4.hpp',['../a00212.html',1,'']]], - ['vector_5ffloat4_5fprecision_2ehpp',['vector_float4_precision.hpp',['../a00213.html',1,'']]], - ['vector_5fint1_2ehpp',['vector_int1.hpp',['../a00214.html',1,'']]], - ['vector_5fint1_5fprecision_2ehpp',['vector_int1_precision.hpp',['../a00215.html',1,'']]], - ['vector_5fint2_2ehpp',['vector_int2.hpp',['../a00216.html',1,'']]], - ['vector_5fint2_5fprecision_2ehpp',['vector_int2_precision.hpp',['../a00217.html',1,'']]], - ['vector_5fint3_2ehpp',['vector_int3.hpp',['../a00218.html',1,'']]], - ['vector_5fint3_5fprecision_2ehpp',['vector_int3_precision.hpp',['../a00219.html',1,'']]], - ['vector_5fint4_2ehpp',['vector_int4.hpp',['../a00220.html',1,'']]], - ['vector_5fint4_5fprecision_2ehpp',['vector_int4_precision.hpp',['../a00221.html',1,'']]], - ['vector_5finteger_2ehpp',['vector_integer.hpp',['../a00222.html',1,'']]], - ['vector_5fquery_2ehpp',['vector_query.hpp',['../a00223.html',1,'']]], - ['vector_5frelational_2ehpp',['vector_relational.hpp',['../a00225.html',1,'']]], - ['vector_5fuint1_2ehpp',['vector_uint1.hpp',['../a00226.html',1,'']]], - ['vector_5fuint1_5fprecision_2ehpp',['vector_uint1_precision.hpp',['../a00227.html',1,'']]], - ['vector_5fuint2_2ehpp',['vector_uint2.hpp',['../a00228.html',1,'']]], - ['vector_5fuint2_5fprecision_2ehpp',['vector_uint2_precision.hpp',['../a00229.html',1,'']]], - ['vector_5fuint3_2ehpp',['vector_uint3.hpp',['../a00230.html',1,'']]], - ['vector_5fuint3_5fprecision_2ehpp',['vector_uint3_precision.hpp',['../a00231.html',1,'']]], - ['vector_5fuint4_2ehpp',['vector_uint4.hpp',['../a00232.html',1,'']]], - ['vector_5fuint4_5fprecision_2ehpp',['vector_uint4_precision.hpp',['../a00233.html',1,'']]], - ['vector_5fulp_2ehpp',['vector_ulp.hpp',['../a00234.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_14.html b/tests/OpenGL/package/glm/doc/api/search/all_14.html deleted file mode 100644 index 2fcfb13a..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_14.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_14.js b/tests/OpenGL/package/glm/doc/api/search/all_14.js deleted file mode 100644 index e06e2e2b..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_14.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['word',['word',['../a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5',1,'glm']]], - ['wrap_2ehpp',['wrap.hpp',['../a00235.html',1,'']]], - ['wrapangle',['wrapAngle',['../a00325.html#ga069527c6dbd64f53435b8ebc4878b473',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_15.html b/tests/OpenGL/package/glm/doc/api/search/all_15.html deleted file mode 100644 index a31c6e8f..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_15.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_15.js b/tests/OpenGL/package/glm/doc/api/search/all_15.js deleted file mode 100644 index 4153a6e0..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_15.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['yaw',['yaw',['../a00299.html#ga8da38cdfdc452dafa660c2f46506bad5',1,'glm']]], - ['yawpitchroll',['yawPitchRoll',['../a00319.html#gae6aa26ccb020d281b449619e419a609e',1,'glm']]], - ['ycocg2rgb',['YCoCg2rgb',['../a00313.html#ga163596b804c7241810b2534a99eb1343',1,'glm']]], - ['ycocgr2rgb',['YCoCgR2rgb',['../a00313.html#gaf8d30574c8576838097d8e20c295384a',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_16.html b/tests/OpenGL/package/glm/doc/api/search/all_16.html deleted file mode 100644 index 6343dec5..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_16.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_16.js b/tests/OpenGL/package/glm/doc/api/search/all_16.js deleted file mode 100644 index 66a52170..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_16.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['zero',['zero',['../a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_2.html b/tests/OpenGL/package/glm/doc/api/search/all_2.html deleted file mode 100644 index 93962b72..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_2.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_2.js b/tests/OpenGL/package/glm/doc/api/search/all_2.js deleted file mode 100644 index 24ec01ad..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_2.js +++ /dev/null @@ -1,51 +0,0 @@ -var searchData= -[ - ['catmullrom',['catmullRom',['../a00358.html#ga8119c04f8210fd0d292757565cd6918d',1,'glm']]], - ['ceil',['ceil',['../a00241.html#gafb9d2a645a23aca12d4d6de0104b7657',1,'glm']]], - ['ceilmultiple',['ceilMultiple',['../a00302.html#ga1d89ac88582aaf4d5dfa5feb4a376fd4',1,'glm::ceilMultiple(genType v, genType Multiple)'],['../a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d',1,'glm::ceilMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)']]], - ['ceilpoweroftwo',['ceilPowerOfTwo',['../a00302.html#ga5c3ef36ae32aa4271f1544f92bd578b6',1,'glm::ceilPowerOfTwo(genIUType v)'],['../a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2',1,'glm::ceilPowerOfTwo(vec< L, T, Q > const &v)']]], - ['circulareasein',['circularEaseIn',['../a00318.html#ga34508d4b204a321ec26d6086aa047997',1,'glm']]], - ['circulareaseinout',['circularEaseInOut',['../a00318.html#ga0c1027637a5b02d4bb3612aa12599d69',1,'glm']]], - ['circulareaseout',['circularEaseOut',['../a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7',1,'glm']]], - ['circularrand',['circularRand',['../a00300.html#ga9dd05c36025088fae25b97c869e88517',1,'glm']]], - ['clamp',['clamp',['../a00241.html#ga7cd77683da6361e297c56443fc70806d',1,'glm::clamp(genType x, genType minVal, genType maxVal)'],['../a00241.html#gafba2e0674deb5953878d89483cd6323d',1,'glm::clamp(vec< L, T, Q > const &x, T minVal, T maxVal)'],['../a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d',1,'glm::clamp(vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &maxVal)'],['../a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33',1,'glm::clamp(genType const &Texcoord)']]], - ['closebounded',['closeBounded',['../a00314.html#gab7d89c14c48ad01f720fb5daf8813161',1,'glm']]], - ['closest_5fpoint_2ehpp',['closest_point.hpp',['../a00010.html',1,'']]], - ['closestpointonline',['closestPointOnLine',['../a00310.html#ga36529c278ef716986151d58d151d697d',1,'glm::closestPointOnLine(vec< 3, T, Q > const &point, vec< 3, T, Q > const &a, vec< 3, T, Q > const &b)'],['../a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0',1,'glm::closestPointOnLine(vec< 2, T, Q > const &point, vec< 2, T, Q > const &a, vec< 2, T, Q > const &b)']]], - ['colmajor2',['colMajor2',['../a00338.html#gaaff72f11286e59a4a88ed21a347f284c',1,'glm::colMajor2(vec< 2, T, Q > const &v1, vec< 2, T, Q > const &v2)'],['../a00338.html#gafc25fd44196c92b1397b127aec1281ab',1,'glm::colMajor2(mat< 2, 2, T, Q > const &m)']]], - ['colmajor3',['colMajor3',['../a00338.html#ga1e25b72b085087740c92f5c70f3b051f',1,'glm::colMajor3(vec< 3, T, Q > const &v1, vec< 3, T, Q > const &v2, vec< 3, T, Q > const &v3)'],['../a00338.html#ga86bd0656e787bb7f217607572590af27',1,'glm::colMajor3(mat< 3, 3, T, Q > const &m)']]], - ['colmajor4',['colMajor4',['../a00338.html#gaf4aa6c7e17bfce41a6c13bf6469fab05',1,'glm::colMajor4(vec< 4, T, Q > const &v1, vec< 4, T, Q > const &v2, vec< 4, T, Q > const &v3, vec< 4, T, Q > const &v4)'],['../a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3',1,'glm::colMajor4(mat< 4, 4, T, Q > const &m)']]], - ['color_5fencoding_2ehpp',['color_encoding.hpp',['../a00011.html',1,'']]], - ['color_5fspace_5fycocg_2ehpp',['color_space_YCoCg.hpp',['../a00014.html',1,'']]], - ['column',['column',['../a00293.html#ga96022eb0d3fae39d89fc7a954e59b374',1,'glm::column(genType const &m, length_t index)'],['../a00293.html#ga9e757377523890e8b80c5843dbe4dd15',1,'glm::column(genType const &m, length_t index, typename genType::col_type const &x)']]], - ['common_2ehpp',['common.hpp',['../a00015.html',1,'']]], - ['compadd',['compAdd',['../a00316.html#gaf71833350e15e74d31cbf8a3e7f27051',1,'glm']]], - ['compatibility_2ehpp',['compatibility.hpp',['../a00017.html',1,'']]], - ['compmax',['compMax',['../a00316.html#gabfa4bb19298c8c73d4217ba759c496b6',1,'glm']]], - ['compmin',['compMin',['../a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425',1,'glm']]], - ['compmul',['compMul',['../a00316.html#gae8ab88024197202c9479d33bdc5a8a5d',1,'glm']]], - ['compnormalize',['compNormalize',['../a00316.html#ga8f2b81ada8515875e58cb1667b6b9908',1,'glm']]], - ['component_5fwise_2ehpp',['component_wise.hpp',['../a00018.html',1,'']]], - ['compscale',['compScale',['../a00316.html#ga80abc2980d65d675f435d178c36880eb',1,'glm']]], - ['conjugate',['conjugate',['../a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b',1,'glm']]], - ['constants_2ehpp',['constants.hpp',['../a00021.html',1,'']]], - ['convertd65xyztod50xyz',['convertD65XYZToD50XYZ',['../a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48',1,'glm']]], - ['convertd65xyztolinearsrgb',['convertD65XYZToLinearSRGB',['../a00311.html#ga5265386fc3ac29e4c580d37ed470859c',1,'glm']]], - ['convertlinearsrgbtod50xyz',['convertLinearSRGBToD50XYZ',['../a00311.html#ga1522ba180e3d83d554a734056da031f9',1,'glm']]], - ['convertlinearsrgbtod65xyz',['convertLinearSRGBToD65XYZ',['../a00311.html#gaf9e130d9d4ccf51cc99317de7449f369',1,'glm']]], - ['convertlineartosrgb',['convertLinearToSRGB',['../a00289.html#ga42239e7b3da900f7ef37cec7e2476579',1,'glm::convertLinearToSRGB(vec< L, T, Q > const &ColorLinear)'],['../a00289.html#gaace0a21167d13d26116c283009af57f6',1,'glm::convertLinearToSRGB(vec< L, T, Q > const &ColorLinear, T Gamma)']]], - ['convertsrgbtolinear',['convertSRGBToLinear',['../a00289.html#ga16c798b7a226b2c3079dedc55083d187',1,'glm::convertSRGBToLinear(vec< L, T, Q > const &ColorSRGB)'],['../a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200',1,'glm::convertSRGBToLinear(vec< L, T, Q > const &ColorSRGB, T Gamma)']]], - ['core_20features',['Core features',['../a00280.html',1,'']]], - ['common_20functions',['Common functions',['../a00241.html',1,'']]], - ['cos',['cos',['../a00373.html#ga6a41efc740e3b3c937447d3a6284130e',1,'glm']]], - ['cosh',['cosh',['../a00373.html#ga4e260e372742c5f517aca196cf1e62b3',1,'glm']]], - ['cot',['cot',['../a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314',1,'glm']]], - ['coth',['coth',['../a00301.html#ga6b8b770eb7198e4dea59d52e6db81442',1,'glm']]], - ['cross',['cross',['../a00254.html#ga755beaa929c75751dee646cccba37e4c',1,'glm::cross(qua< T, Q > const &q1, qua< T, Q > const &q2)'],['../a00279.html#gaeeec0794212fe84fc9d261de067c9587',1,'glm::cross(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)'],['../a00322.html#gac36e72b934ea6a9dd313772d7e78fa93',1,'glm::cross(vec< 2, T, Q > const &v, vec< 2, T, Q > const &u)'],['../a00352.html#ga2f32f970411c44cdd38bb98960198385',1,'glm::cross(qua< T, Q > const &q, vec< 3, T, Q > const &v)'],['../a00352.html#ga9f5f77255756e5668dfee7f0d07ed021',1,'glm::cross(vec< 3, T, Q > const &v, qua< T, Q > const &q)']]], - ['csc',['csc',['../a00301.html#ga59dd0005b6474eea48af743b4f14ebbb',1,'glm']]], - ['csch',['csch',['../a00301.html#ga6d95843ff3ca6472ab399ba171d290a0',1,'glm']]], - ['cubic',['cubic',['../a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70',1,'glm']]], - ['cubiceasein',['cubicEaseIn',['../a00318.html#gaff52f746102b94864d105563ba8895ae',1,'glm']]], - ['cubiceaseinout',['cubicEaseInOut',['../a00318.html#ga55134072b42d75452189321d4a2ad91c',1,'glm']]], - ['cubiceaseout',['cubicEaseOut',['../a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_3.html b/tests/OpenGL/package/glm/doc/api/search/all_3.html deleted file mode 100644 index 679f93ca..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_3.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_3.js b/tests/OpenGL/package/glm/doc/api/search/all_3.js deleted file mode 100644 index 879655de..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_3.js +++ /dev/null @@ -1,59 +0,0 @@ -var searchData= -[ - ['ddualquat',['ddualquat',['../a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6',1,'glm']]], - ['decompose',['decompose',['../a00335.html#gac0e342656ba09a9bc97c57182ba73124',1,'glm']]], - ['degrees',['degrees',['../a00373.html#ga8faec9e303538065911ba8b3caf7326b',1,'glm']]], - ['derivedeuleranglex',['derivedEulerAngleX',['../a00319.html#ga994b8186b3b80d91cf90bc403164692f',1,'glm']]], - ['derivedeulerangley',['derivedEulerAngleY',['../a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10',1,'glm']]], - ['derivedeuleranglez',['derivedEulerAngleZ',['../a00319.html#gae8b397348201c42667be983ba3f344df',1,'glm']]], - ['determinant',['determinant',['../a00371.html#gad7928795124768e058f99dce270f5c8d',1,'glm']]], - ['diagonal2x2',['diagonal2x2',['../a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac',1,'glm']]], - ['diagonal2x3',['diagonal2x3',['../a00339.html#gab69f900206a430e2875a5a073851e175',1,'glm']]], - ['diagonal2x4',['diagonal2x4',['../a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549',1,'glm']]], - ['diagonal3x2',['diagonal3x2',['../a00339.html#ga832c805d5130d28ad76236958d15b47d',1,'glm']]], - ['diagonal3x3',['diagonal3x3',['../a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0',1,'glm']]], - ['diagonal3x4',['diagonal3x4',['../a00339.html#gad7551139cff0c4208d27f0ad3437833e',1,'glm']]], - ['diagonal4x2',['diagonal4x2',['../a00339.html#gacb8969e6543ba775c6638161a37ac330',1,'glm']]], - ['diagonal4x3',['diagonal4x3',['../a00339.html#gae235def5049d6740f0028433f5e13f90',1,'glm']]], - ['diagonal4x4',['diagonal4x4',['../a00339.html#ga0b4cd8dea436791b072356231ee8578f',1,'glm']]], - ['diskrand',['diskRand',['../a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73',1,'glm']]], - ['distance',['distance',['../a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f',1,'glm']]], - ['distance2',['distance2',['../a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f',1,'glm']]], - ['dmat2',['dmat2',['../a00283.html#ga21dbd1f987775d7cc7607c139531c7e6',1,'glm']]], - ['dmat2x2',['dmat2x2',['../a00283.html#ga66b6a9af787e468a46dfe24189e87f9b',1,'glm']]], - ['dmat2x3',['dmat2x3',['../a00283.html#ga92cd388753d48e20de69ea2dbedf826a',1,'glm']]], - ['dmat2x4',['dmat2x4',['../a00283.html#gaef2198807e937072803ae0ae45e1965e',1,'glm']]], - ['dmat3',['dmat3',['../a00283.html#ga6f40aa56265b4b0ccad41b86802efe33',1,'glm']]], - ['dmat3x2',['dmat3x2',['../a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39',1,'glm']]], - ['dmat3x3',['dmat3x3',['../a00283.html#ga970cb3306be25a5ca5db5a9456831228',1,'glm']]], - ['dmat3x4',['dmat3x4',['../a00283.html#ga0412a634d183587e6188e9b11869f8f4',1,'glm']]], - ['dmat4',['dmat4',['../a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca',1,'glm']]], - ['dmat4x2',['dmat4x2',['../a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156',1,'glm']]], - ['dmat4x3',['dmat4x3',['../a00283.html#gacd18864049f8c83799babe7e596ca05b',1,'glm']]], - ['dmat4x4',['dmat4x4',['../a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10',1,'glm']]], - ['dot',['dot',['../a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc',1,'glm::dot(qua< T, Q > const &x, qua< T, Q > const &y)'],['../a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a',1,'glm::dot(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['double1',['double1',['../a00315.html#ga20b861a9b6e2a300323671c57a02525b',1,'glm']]], - ['double1x1',['double1x1',['../a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8',1,'glm']]], - ['double2',['double2',['../a00315.html#ga31b729b04facccda73f07ed26958b3c2',1,'glm']]], - ['double2x2',['double2x2',['../a00315.html#gae57d0201096834d25f2b91b319e7cdbd',1,'glm']]], - ['double2x3',['double2x3',['../a00315.html#ga3655bc324008553ca61f39952d0b2d08',1,'glm']]], - ['double2x4',['double2x4',['../a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a',1,'glm']]], - ['double3',['double3',['../a00315.html#ga3d8b9028a1053a44a98902cd1c389472',1,'glm']]], - ['double3x2',['double3x2',['../a00315.html#ga5ec08fc39c9d783dfcc488be240fe975',1,'glm']]], - ['double3x3',['double3x3',['../a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180',1,'glm']]], - ['double3x4',['double3x4',['../a00315.html#ga2ef022e453d663d70aec414b2a80f756',1,'glm']]], - ['double4',['double4',['../a00315.html#gaf92f58af24f35617518aeb3d4f63fda6',1,'glm']]], - ['double4x2',['double4x2',['../a00315.html#gabca29ccceea53669618b751aae0ba83d',1,'glm']]], - ['double4x3',['double4x3',['../a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c',1,'glm']]], - ['double4x4',['double4x4',['../a00315.html#gaab541bed2e788e4537852a2492860806',1,'glm']]], - ['dquat',['dquat',['../a00249.html#ga1181459aa5d640a3ea43861b118f3f0b',1,'glm']]], - ['dual_5fquat_5fidentity',['dual_quat_identity',['../a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0',1,'glm']]], - ['dual_5fquaternion_2ehpp',['dual_quaternion.hpp',['../a00022.html',1,'']]], - ['dualquat',['dualquat',['../a00317.html#gae93abee0c979902fbec6a7bee0f6fae1',1,'glm']]], - ['dualquat_5fcast',['dualquat_cast',['../a00317.html#gac4064ff813759740201765350eac4236',1,'glm::dualquat_cast(mat< 2, 4, T, Q > const &x)'],['../a00317.html#ga91025ebdca0f4ea54da08497b00e8c84',1,'glm::dualquat_cast(mat< 3, 4, T, Q > const &x)']]], - ['dvec1',['dvec1',['../a00268.html#ga6221af17edc2d4477a4583d2cd53e569',1,'glm']]], - ['dvec2',['dvec2',['../a00281.html#ga8b09c71aaac7da7867ae58377fe219a8',1,'glm']]], - ['dvec3',['dvec3',['../a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0',1,'glm']]], - ['dvec4',['dvec4',['../a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac',1,'glm']]], - ['dword',['dword',['../a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_4.html b/tests/OpenGL/package/glm/doc/api/search/all_4.html deleted file mode 100644 index adc99fbb..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_4.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_4.js b/tests/OpenGL/package/glm/doc/api/search/all_4.js deleted file mode 100644 index 8b0ab1f8..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_4.js +++ /dev/null @@ -1,68 +0,0 @@ -var searchData= -[ - ['exponential_20functions',['Exponential functions',['../a00242.html',1,'']]], - ['e',['e',['../a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139',1,'glm']]], - ['easing_2ehpp',['easing.hpp',['../a00023.html',1,'']]], - ['elasticeasein',['elasticEaseIn',['../a00318.html#ga230918eccee4e113d10ec5b8cdc58695',1,'glm']]], - ['elasticeaseinout',['elasticEaseInOut',['../a00318.html#ga2db4ac8959559b11b4029e54812908d6',1,'glm']]], - ['elasticeaseout',['elasticEaseOut',['../a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365',1,'glm']]], - ['epsilon',['epsilon',['../a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429',1,'glm']]], - ['epsilon_2ehpp',['epsilon.hpp',['../a00024.html',1,'']]], - ['epsilonequal',['epsilonEqual',['../a00291.html#ga91b417866cafadd076004778217a1844',1,'glm::epsilonEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y, T const &epsilon)'],['../a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb',1,'glm::epsilonEqual(genType const &x, genType const &y, genType const &epsilon)']]], - ['epsilonnotequal',['epsilonNotEqual',['../a00291.html#gaf840d33b9a5261ec78dcd5125743b025',1,'glm::epsilonNotEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y, T const &epsilon)'],['../a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf',1,'glm::epsilonNotEqual(genType const &x, genType const &y, genType const &epsilon)']]], - ['equal',['equal',['../a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f',1,'glm::equal(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y)'],['../a00246.html#gaf5d687d70d11708b68c36c6db5777040',1,'glm::equal(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, T epsilon)'],['../a00246.html#gafa6a053e81179fa4292b35651c83c3fb',1,'glm::equal(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, T, Q > const &epsilon)'],['../a00246.html#gab3a93f19e72e9141f50527c9de21d0c0',1,'glm::equal(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, int ULPs)'],['../a00246.html#ga5305af376173f1902719fa309bbae671',1,'glm::equal(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, int, Q > const &ULPs)'],['../a00255.html#gad7827af0549504ff1cd6a359786acc7a',1,'glm::equal(qua< T, Q > const &x, qua< T, Q > const &y)'],['../a00255.html#gaa001eecb91106463169a8e5ef1577b39',1,'glm::equal(qua< T, Q > const &x, qua< T, Q > const &y, T epsilon)'],['../a00275.html#ga2ac7651a2fa7354f2da610dbd50d28e2',1,'glm::equal(vec< L, T, Q > const &x, vec< L, T, Q > const &y, T epsilon)'],['../a00275.html#ga37d261a65f69babc82cec2ae1af7145f',1,'glm::equal(vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &epsilon)'],['../a00275.html#ga2b46cb50911e97b32f4cd743c2c69771',1,'glm::equal(vec< L, T, Q > const &x, vec< L, T, Q > const &y, int ULPs)'],['../a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581',1,'glm::equal(vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, int, Q > const &ULPs)'],['../a00374.html#gab4c5cfdaa70834421397a85aa83ad946',1,'glm::equal(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['euclidean',['euclidean',['../a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8',1,'glm']]], - ['euler',['euler',['../a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42',1,'glm']]], - ['euler_5fangles_2ehpp',['euler_angles.hpp',['../a00025.html',1,'']]], - ['eulerangles',['eulerAngles',['../a00299.html#gaf4dd967dead22dd932fc7460ceecb03f',1,'glm']]], - ['euleranglex',['eulerAngleX',['../a00319.html#gafba6282e4ed3ff8b5c75331abfba3489',1,'glm']]], - ['euleranglexy',['eulerAngleXY',['../a00319.html#ga64036577ee17a2d24be0dbc05881d4e2',1,'glm']]], - ['euleranglexyx',['eulerAngleXYX',['../a00319.html#ga29bd0787a28a6648159c0d6e69706066',1,'glm']]], - ['euleranglexyz',['eulerAngleXYZ',['../a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645',1,'glm']]], - ['euleranglexz',['eulerAngleXZ',['../a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9',1,'glm']]], - ['euleranglexzx',['eulerAngleXZX',['../a00319.html#ga60171c79a17aec85d7891ae1d1533ec9',1,'glm']]], - ['euleranglexzy',['eulerAngleXZY',['../a00319.html#ga996dce12a60d8a674ba6737a535fa910',1,'glm']]], - ['eulerangley',['eulerAngleY',['../a00319.html#gab84bf4746805fd69b8ecbb230e3974c5',1,'glm']]], - ['eulerangleyx',['eulerAngleYX',['../a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d',1,'glm']]], - ['eulerangleyxy',['eulerAngleYXY',['../a00319.html#ga750fba9894117f87bcc529d7349d11de',1,'glm']]], - ['eulerangleyxz',['eulerAngleYXZ',['../a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10',1,'glm']]], - ['eulerangleyz',['eulerAngleYZ',['../a00319.html#ga220379e10ac8cca55e275f0c9018fed9',1,'glm']]], - ['eulerangleyzx',['eulerAngleYZX',['../a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848',1,'glm']]], - ['eulerangleyzy',['eulerAngleYZY',['../a00319.html#ga5e5e40abc27630749b42b3327c76d6e4',1,'glm']]], - ['euleranglez',['eulerAngleZ',['../a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251',1,'glm']]], - ['euleranglezx',['eulerAngleZX',['../a00319.html#ga483903115cd4059228961046a28d69b5',1,'glm']]], - ['euleranglezxy',['eulerAngleZXY',['../a00319.html#gab4505c54d2dd654df4569fd1f04c43aa',1,'glm']]], - ['euleranglezxz',['eulerAngleZXZ',['../a00319.html#ga178f966c52b01e4d65e31ebd007e3247',1,'glm']]], - ['euleranglezy',['eulerAngleZY',['../a00319.html#ga400b2bd5984999efab663f3a68e1d020',1,'glm']]], - ['euleranglezyx',['eulerAngleZYX',['../a00319.html#ga2e61f1e39069c47530acab9167852dd6',1,'glm']]], - ['euleranglezyz',['eulerAngleZYZ',['../a00319.html#gacd795f1dbecaf74974f9c76bbcca6830',1,'glm']]], - ['exp',['exp',['../a00242.html#ga071566cadc7505455e611f2a0353f4d4',1,'glm::exp(vec< L, T, Q > const &v)'],['../a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac',1,'glm::exp(qua< T, Q > const &q)']]], - ['exp2',['exp2',['../a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16',1,'glm']]], - ['exponential_2ehpp',['exponential.hpp',['../a00026.html',1,'']]], - ['exponentialeasein',['exponentialEaseIn',['../a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c',1,'glm']]], - ['exponentialeaseinout',['exponentialEaseInOut',['../a00318.html#ga232fb6dc093c5ce94bee105ff2947501',1,'glm']]], - ['exponentialeaseout',['exponentialEaseOut',['../a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3',1,'glm']]], - ['ext_2ehpp',['ext.hpp',['../a00027.html',1,'']]], - ['extend',['extend',['../a00320.html#ga8140caae613b0f847ab0d7175dc03a37',1,'glm']]], - ['extend_2ehpp',['extend.hpp',['../a00028.html',1,'']]], - ['extended_5fmin_5fmax_2ehpp',['extended_min_max.hpp',['../a00029.html',1,'']]], - ['exterior_5fproduct_2ehpp',['exterior_product.hpp',['../a00030.html',1,'']]], - ['extracteuleranglexyx',['extractEulerAngleXYX',['../a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7',1,'glm']]], - ['extracteuleranglexyz',['extractEulerAngleXYZ',['../a00319.html#gacea701562f778c1da4d3a0a1cf091000',1,'glm']]], - ['extracteuleranglexzx',['extractEulerAngleXZX',['../a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0',1,'glm']]], - ['extracteuleranglexzy',['extractEulerAngleXZY',['../a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed',1,'glm']]], - ['extracteulerangleyxy',['extractEulerAngleYXY',['../a00319.html#gaab8868556361a190db94374e9983ed39',1,'glm']]], - ['extracteulerangleyxz',['extractEulerAngleYXZ',['../a00319.html#gaf0937518e63037335a0e8358b6f053c5',1,'glm']]], - ['extracteulerangleyzx',['extractEulerAngleYZX',['../a00319.html#ga9049b78466796c0de2971756e25b93d3',1,'glm']]], - ['extracteulerangleyzy',['extractEulerAngleYZY',['../a00319.html#ga11dad972c109e4bf8694c915017c44a6',1,'glm']]], - ['extracteuleranglezxy',['extractEulerAngleZXY',['../a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363',1,'glm']]], - ['extracteuleranglezxz',['extractEulerAngleZXZ',['../a00319.html#ga59359fef9bad92afaca55e193f91e702',1,'glm']]], - ['extracteuleranglezyx',['extractEulerAngleZYX',['../a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665',1,'glm']]], - ['extracteuleranglezyz',['extractEulerAngleZYZ',['../a00319.html#gafdfa880a64b565223550c2d3938b1aeb',1,'glm']]], - ['extractmatrixrotation',['extractMatrixRotation',['../a00337.html#gabbc1c7385a145f04b5c54228965df145',1,'glm']]], - ['extractrealcomponent',['extractRealComponent',['../a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b',1,'glm']]], - ['experimental_20extensions',['Experimental extensions',['../a00287.html',1,'']]], - ['matrix_5ftransform_2ehpp',['matrix_transform.hpp',['../a00108.html',1,'']]], - ['scalar_5frelational_2ehpp',['scalar_relational.hpp',['../a00149.html',1,'']]], - ['vector_5frelational_2ehpp',['vector_relational.hpp',['../a00224.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_5.html b/tests/OpenGL/package/glm/doc/api/search/all_5.html deleted file mode 100644 index a9fcd170..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_5.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_5.js b/tests/OpenGL/package/glm/doc/api/search/all_5.js deleted file mode 100644 index 0273a3fc..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_5.js +++ /dev/null @@ -1,131 +0,0 @@ -var searchData= -[ - ['floating_2dpoint_20pack_20and_20unpack_20functions',['Floating-Point Pack and Unpack Functions',['../a00372.html',1,'']]], - ['f32',['f32',['../a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7',1,'glm']]], - ['f32mat1',['f32mat1',['../a00346.html#ga145ad477a2a3e152855511c3b52469a6',1,'glm::gtx']]], - ['f32mat1x1',['f32mat1x1',['../a00346.html#gac88c6a4dbfc380aa26e3adbbade36348',1,'glm::gtx']]], - ['f32mat2',['f32mat2',['../a00304.html#gab12383ed6ac7595ed6fde4d266c58425',1,'glm']]], - ['f32mat2x2',['f32mat2x2',['../a00304.html#ga04100c76f7d55a0dd0983ccf05142bff',1,'glm']]], - ['f32mat2x3',['f32mat2x3',['../a00304.html#gab256cdab5eb582e426d749ae77b5b566',1,'glm']]], - ['f32mat2x4',['f32mat2x4',['../a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8',1,'glm']]], - ['f32mat3',['f32mat3',['../a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be',1,'glm']]], - ['f32mat3x2',['f32mat3x2',['../a00304.html#ga1320a08e14fdff3821241eefab6947e9',1,'glm']]], - ['f32mat3x3',['f32mat3x3',['../a00304.html#ga65261fa8a21045c8646ddff114a56174',1,'glm']]], - ['f32mat3x4',['f32mat3x4',['../a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d',1,'glm']]], - ['f32mat4',['f32mat4',['../a00304.html#ga99d1b85ff99956b33da7e9992aad129a',1,'glm']]], - ['f32mat4x2',['f32mat4x2',['../a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20',1,'glm']]], - ['f32mat4x3',['f32mat4x3',['../a00304.html#ga239b96198771b7add8eea7e6b59840c0',1,'glm']]], - ['f32mat4x4',['f32mat4x4',['../a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3',1,'glm']]], - ['f32quat',['f32quat',['../a00304.html#ga38e674196ba411d642be40c47bf33939',1,'glm']]], - ['f32vec1',['f32vec1',['../a00304.html#ga701f32ab5b3fb06996b41f5c0d643805',1,'glm::f32vec1()'],['../a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943',1,'glm::gtx::f32vec1()']]], - ['f32vec2',['f32vec2',['../a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8',1,'glm']]], - ['f32vec3',['f32vec3',['../a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79',1,'glm']]], - ['f32vec4',['f32vec4',['../a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8',1,'glm']]], - ['f64',['f64',['../a00304.html#ga1d794d240091678f602e8de225b8d8c9',1,'glm']]], - ['f64mat1',['f64mat1',['../a00346.html#ga59bfa589419b5265d01314fcecd33435',1,'glm::gtx']]], - ['f64mat1x1',['f64mat1x1',['../a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd',1,'glm::gtx']]], - ['f64mat2',['f64mat2',['../a00304.html#gad9771450a54785d13080cdde0fe20c1d',1,'glm']]], - ['f64mat2x2',['f64mat2x2',['../a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37',1,'glm']]], - ['f64mat2x3',['f64mat2x3',['../a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a',1,'glm']]], - ['f64mat2x4',['f64mat2x4',['../a00304.html#gac87278e0c702ba8afff76316d4eeb769',1,'glm']]], - ['f64mat3',['f64mat3',['../a00304.html#ga9b69181efbf8f37ae934f135137b29c0',1,'glm']]], - ['f64mat3x2',['f64mat3x2',['../a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7',1,'glm']]], - ['f64mat3x3',['f64mat3x3',['../a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185',1,'glm']]], - ['f64mat3x4',['f64mat3x4',['../a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675',1,'glm']]], - ['f64mat4',['f64mat4',['../a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc',1,'glm']]], - ['f64mat4x2',['f64mat4x2',['../a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512',1,'glm']]], - ['f64mat4x3',['f64mat4x3',['../a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110',1,'glm']]], - ['f64mat4x4',['f64mat4x4',['../a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e',1,'glm']]], - ['f64quat',['f64quat',['../a00304.html#ga2b114a2f2af0fe1dfeb569c767822940',1,'glm']]], - ['f64vec1',['f64vec1',['../a00304.html#gade502df1ce14f837fae7f60a03ddb9b0',1,'glm::f64vec1()'],['../a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1',1,'glm::gtx::f64vec1()']]], - ['f64vec2',['f64vec2',['../a00304.html#gadc4e1594f9555d919131ee02b17822a2',1,'glm']]], - ['f64vec3',['f64vec3',['../a00304.html#gaa7a1ddca75c5f629173bf4772db7a635',1,'glm']]], - ['f64vec4',['f64vec4',['../a00304.html#ga66e92e57260bdb910609b9a56bf83e97',1,'glm']]], - ['faceforward',['faceforward',['../a00279.html#ga7aed0a36c738169402404a3a5d54e43b',1,'glm']]], - ['factorial',['factorial',['../a00330.html#ga8cbd3120905f398ec321b5d1836e08fb',1,'glm']]], - ['fast_5fexponential_2ehpp',['fast_exponential.hpp',['../a00031.html',1,'']]], - ['fast_5fsquare_5froot_2ehpp',['fast_square_root.hpp',['../a00032.html',1,'']]], - ['fast_5ftrigonometry_2ehpp',['fast_trigonometry.hpp',['../a00033.html',1,'']]], - ['fastacos',['fastAcos',['../a00325.html#ga9721d63356e5d94fdc4b393a426ab26b',1,'glm']]], - ['fastasin',['fastAsin',['../a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f',1,'glm']]], - ['fastatan',['fastAtan',['../a00325.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c',1,'glm::fastAtan(T y, T x)'],['../a00325.html#gae25de86a968490ff56856fa425ec9d30',1,'glm::fastAtan(T angle)']]], - ['fastcos',['fastCos',['../a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a',1,'glm']]], - ['fastdistance',['fastDistance',['../a00324.html#gaac333418d0c4e0cc6d3d219ed606c238',1,'glm::fastDistance(genType x, genType y)'],['../a00324.html#ga42d3e771fa7cb3c60d828e315829df19',1,'glm::fastDistance(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['fastexp',['fastExp',['../a00323.html#gaa3180ac8f96ab37ab96e0cacaf608e10',1,'glm::fastExp(T x)'],['../a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58',1,'glm::fastExp(vec< L, T, Q > const &x)']]], - ['fastexp2',['fastExp2',['../a00323.html#ga0af50585955eb14c60bb286297fabab2',1,'glm::fastExp2(T x)'],['../a00323.html#gacaaed8b67d20d244b7de217e7816c1b6',1,'glm::fastExp2(vec< L, T, Q > const &x)']]], - ['fastinversesqrt',['fastInverseSqrt',['../a00324.html#ga7f081b14d9c7035c8714eba5f7f75a8f',1,'glm::fastInverseSqrt(genType x)'],['../a00324.html#gadcd7be12b1e5ee182141359d4c45dd24',1,'glm::fastInverseSqrt(vec< L, T, Q > const &x)']]], - ['fastlength',['fastLength',['../a00324.html#gafe697d6287719538346bbdf8b1367c59',1,'glm::fastLength(genType x)'],['../a00324.html#ga90f66be92ef61e705c005e7b3209edb8',1,'glm::fastLength(vec< L, T, Q > const &x)']]], - ['fastlog',['fastLog',['../a00323.html#gae1bdc97b7f96a600e29c753f1cd4388a',1,'glm::fastLog(T x)'],['../a00323.html#ga937256993a7219e73f186bb348fe6be8',1,'glm::fastLog(vec< L, T, Q > const &x)']]], - ['fastlog2',['fastLog2',['../a00323.html#ga6e98118685f6dc9e05fbb13dd5e5234e',1,'glm::fastLog2(T x)'],['../a00323.html#ga7562043539194ccc24649f8475bc5584',1,'glm::fastLog2(vec< L, T, Q > const &x)']]], - ['fastmix',['fastMix',['../a00352.html#ga264e10708d58dd0ff53b7902a2bd2561',1,'glm']]], - ['fastnormalize',['fastNormalize',['../a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c',1,'glm']]], - ['fastnormalizedot',['fastNormalizeDot',['../a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e',1,'glm']]], - ['fastpow',['fastPow',['../a00323.html#ga5340e98a11fcbbd936ba6e983a154d50',1,'glm::fastPow(genType x, genType y)'],['../a00323.html#ga15325a8ed2d1c4ed2412c4b3b3927aa2',1,'glm::fastPow(vec< L, T, Q > const &x, vec< L, T, Q > const &y)'],['../a00323.html#ga7f2562db9c3e02ae76169c36b086c3f6',1,'glm::fastPow(genTypeT x, genTypeU y)'],['../a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5',1,'glm::fastPow(vec< L, T, Q > const &x)']]], - ['fastsin',['fastSin',['../a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915',1,'glm']]], - ['fastsqrt',['fastSqrt',['../a00324.html#ga6c460e9414a50b2fc455c8f64c86cdc9',1,'glm::fastSqrt(genType x)'],['../a00324.html#gae83f0c03614f73eae5478c5b6274ee6d',1,'glm::fastSqrt(vec< L, T, Q > const &x)']]], - ['fasttan',['fastTan',['../a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2',1,'glm']]], - ['fclamp',['fclamp',['../a00321.html#ga1e28539d3a46965ed9ef92ec7cb3b18a',1,'glm::fclamp(genType x, genType minVal, genType maxVal)'],['../a00321.html#ga60796d08903489ee185373593bc16b9d',1,'glm::fclamp(vec< L, T, Q > const &x, T minVal, T maxVal)'],['../a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297',1,'glm::fclamp(vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &maxVal)']]], - ['fdualquat',['fdualquat',['../a00317.html#ga237c2b9b42c9a930e49de5840ae0f930',1,'glm']]], - ['findlsb',['findLSB',['../a00370.html#gaf74c4d969fa34ab8acb9d390f5ca5274',1,'glm::findLSB(genIUType x)'],['../a00370.html#ga4454c0331d6369888c28ab677f4810c7',1,'glm::findLSB(vec< L, T, Q > const &v)']]], - ['findmsb',['findMSB',['../a00370.html#ga7e4a794d766861c70bc961630f8ef621',1,'glm::findMSB(genIUType x)'],['../a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872',1,'glm::findMSB(vec< L, T, Q > const &v)']]], - ['findnsb',['findNSB',['../a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075',1,'glm::findNSB(genIUType x, int significantBitCount)'],['../a00274.html#gaff61eca266da315002a3db92ff0dd604',1,'glm::findNSB(vec< L, T, Q > const &Source, vec< L, int, Q > SignificantBitCount)']]], - ['fliplr',['fliplr',['../a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb',1,'glm']]], - ['flipud',['flipud',['../a00336.html#ga85003371f0ba97380dd25e8905de1870',1,'glm']]], - ['float1',['float1',['../a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead',1,'glm']]], - ['float1x1',['float1x1',['../a00315.html#ga73720b8dc4620835b17f74d428f98c0c',1,'glm']]], - ['float2',['float2',['../a00315.html#ga02d3c013982c183906c61d74aa3166ce',1,'glm']]], - ['float2x2',['float2x2',['../a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f',1,'glm']]], - ['float2x3',['float2x3',['../a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe',1,'glm']]], - ['float2x4',['float2x4',['../a00315.html#gafec3cfd901ab334a92e0242b8f2269b4',1,'glm']]], - ['float3',['float3',['../a00315.html#ga821ff110fc8533a053cbfcc93e078cc0',1,'glm']]], - ['float32',['float32',['../a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1',1,'glm']]], - ['float32_5ft',['float32_t',['../a00304.html#gaa4947bc8b47c72fceea9bda730ecf603',1,'glm']]], - ['float3x2',['float3x2',['../a00315.html#gaa6c69f04ba95f3faedf95dae874de576',1,'glm']]], - ['float3x3',['float3x3',['../a00315.html#ga6ceb5d38a58becdf420026e12a6562f3',1,'glm']]], - ['float3x4',['float3x4',['../a00315.html#ga4d2679c321b793ca3784fe0315bb5332',1,'glm']]], - ['float4',['float4',['../a00315.html#gae2da7345087db3815a25d8837a727ef1',1,'glm']]], - ['float4x2',['float4x2',['../a00315.html#ga308b9af0c221145bcfe9bfc129d9098e',1,'glm']]], - ['float4x3',['float4x3',['../a00315.html#gac0a51b4812038aa81d73ffcc37f741ac',1,'glm']]], - ['float4x4',['float4x4',['../a00315.html#gad3051649b3715d828a4ab92cdae7c3bf',1,'glm']]], - ['float64',['float64',['../a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80',1,'glm']]], - ['float64_5ft',['float64_t',['../a00304.html#ga728366fef72cd96f0a5fa6429f05469e',1,'glm']]], - ['floatbitstoint',['floatBitsToInt',['../a00241.html#ga1425c1c3160ec51214b03a0469a3013d',1,'glm::floatBitsToInt(float const &v)'],['../a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed',1,'glm::floatBitsToInt(vec< L, float, Q > const &v)']]], - ['floatbitstouint',['floatBitsToUint',['../a00241.html#ga70e0271c34af52f3100c7960e18c3f2b',1,'glm::floatBitsToUint(float const &v)'],['../a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db',1,'glm::floatBitsToUint(vec< L, float, Q > const &v)']]], - ['floor',['floor',['../a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d',1,'glm']]], - ['floor_5flog2',['floor_log2',['../a00330.html#ga7011b4e1c1e1ed492149b028feacc00e',1,'glm']]], - ['floormultiple',['floorMultiple',['../a00302.html#ga2ffa3cd5f2ea746ee1bf57c46da6315e',1,'glm::floorMultiple(genType v, genType Multiple)'],['../a00302.html#gacdd8901448f51f0b192380e422fae3e4',1,'glm::floorMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)']]], - ['floorpoweroftwo',['floorPowerOfTwo',['../a00302.html#gafe273a57935d04c9db677bf67f9a71f4',1,'glm::floorPowerOfTwo(genIUType v)'],['../a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d',1,'glm::floorPowerOfTwo(vec< L, T, Q > const &v)']]], - ['fma',['fma',['../a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2',1,'glm']]], - ['fmat2',['fmat2',['../a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280',1,'glm']]], - ['fmat2x2',['fmat2x2',['../a00304.html#ga3350c93c3275298f940a42875388e4b4',1,'glm']]], - ['fmat2x3',['fmat2x3',['../a00304.html#ga55a2d2a8eb09b5633668257eb3cad453',1,'glm']]], - ['fmat2x4',['fmat2x4',['../a00304.html#ga681381f19f11c9e5ee45cda2c56937ff',1,'glm']]], - ['fmat3',['fmat3',['../a00304.html#ga253d453c20e037730023fea0215cb6f6',1,'glm']]], - ['fmat3x2',['fmat3x2',['../a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f',1,'glm']]], - ['fmat3x3',['fmat3x3',['../a00304.html#gaa07c86650253672a19dbfb898f3265b8',1,'glm']]], - ['fmat3x4',['fmat3x4',['../a00304.html#ga44e158af77a670ee1b58c03cda9e1619',1,'glm']]], - ['fmat4',['fmat4',['../a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca',1,'glm']]], - ['fmat4x2',['fmat4x2',['../a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774',1,'glm']]], - ['fmat4x3',['fmat4x3',['../a00304.html#ga4295048a78bdf46b8a7de77ec665b497',1,'glm']]], - ['fmat4x4',['fmat4x4',['../a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3',1,'glm']]], - ['fmax',['fmax',['../a00258.html#ga36920478565cf608e93064283ce06421',1,'glm::fmax(T a, T b)'],['../a00258.html#ga0007bba71ca451ac70e99d28dfbeaab9',1,'glm::fmax(T a, T b, T C)'],['../a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08',1,'glm::fmax(T a, T b, T C, T D)'],['../a00267.html#gad66b6441f7200db16c9f341711733c56',1,'glm::fmax(vec< L, T, Q > const &a, T b)'],['../a00267.html#ga8df4be3f48d6717c40ea788fd30deebf',1,'glm::fmax(vec< L, T, Q > const &a, vec< L, T, Q > const &b)'],['../a00267.html#ga0f04ba924294dae4234ca93ede23229a',1,'glm::fmax(vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c)'],['../a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230',1,'glm::fmax(vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c, vec< L, T, Q > const &d)'],['../a00321.html#gae5792cb2b51190057e4aea027eb56f81',1,'glm::fmax(genType x, genType y)']]], - ['fmin',['fmin',['../a00258.html#ga7b2b438a765e2a62098c79eb212f28f0',1,'glm::fmin(T a, T b)'],['../a00258.html#ga1a95fe4cf5437e8133f1093fe9726a64',1,'glm::fmin(T a, T b, T c)'],['../a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661',1,'glm::fmin(T a, T b, T c, T d)'],['../a00267.html#gae989203363cff9eab5093630df4fe071',1,'glm::fmin(vec< L, T, Q > const &x, T y)'],['../a00267.html#ga7c42e93cd778c9181d1cdeea4d3e43bd',1,'glm::fmin(vec< L, T, Q > const &x, vec< L, T, Q > const &y)'],['../a00267.html#ga7e62739055b49189d9355471f78fe000',1,'glm::fmin(vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c)'],['../a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c',1,'glm::fmin(vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c, vec< L, T, Q > const &d)'],['../a00321.html#gaa3200559611ac5b9b9ae7283547916a7',1,'glm::fmin(genType x, genType y)']]], - ['fmod',['fmod',['../a00314.html#gae5e80425df9833164ad469e83b475fb4',1,'glm']]], - ['four_5fover_5fpi',['four_over_pi',['../a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09',1,'glm']]], - ['fract',['fract',['../a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7',1,'glm::fract(genType x)'],['../a00241.html#ga2df623004f634b440d61e018d62c751b',1,'glm::fract(vec< L, T, Q > const &x)']]], - ['frexp',['frexp',['../a00241.html#gaddf5ef73283c171730e0bcc11833fa81',1,'glm']]], - ['frustum',['frustum',['../a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9',1,'glm']]], - ['frustumlh',['frustumLH',['../a00243.html#gae4277c37f61d81da01bc9db14ea90296',1,'glm']]], - ['frustumlh_5fno',['frustumLH_NO',['../a00243.html#ga259520cad03b3f8bca9417920035ed01',1,'glm']]], - ['frustumlh_5fzo',['frustumLH_ZO',['../a00243.html#ga94218b094862d17798370242680b9030',1,'glm']]], - ['frustumno',['frustumNO',['../a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90',1,'glm']]], - ['frustumrh',['frustumRH',['../a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136',1,'glm']]], - ['frustumrh_5fno',['frustumRH_NO',['../a00243.html#ga9236c8439f21be186b79c97b588836b9',1,'glm']]], - ['frustumrh_5fzo',['frustumRH_ZO',['../a00243.html#ga7654a9227f14d5382786b9fc0eb5692d',1,'glm']]], - ['frustumzo',['frustumZO',['../a00243.html#gaa73322e152edf50cf30a6edac342a757',1,'glm']]], - ['functions_2ehpp',['functions.hpp',['../a00034.html',1,'']]], - ['fvec1',['fvec1',['../a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f',1,'glm']]], - ['fvec2',['fvec2',['../a00304.html#ga24273aa02abaecaab7f160bac437a339',1,'glm']]], - ['fvec3',['fvec3',['../a00304.html#ga89930533646b30d021759298aa6bf04a',1,'glm']]], - ['fvec4',['fvec4',['../a00304.html#ga713c796c54875cf4092d42ff9d9096b0',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_6.html b/tests/OpenGL/package/glm/doc/api/search/all_6.html deleted file mode 100644 index 821c374d..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_6.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_6.js b/tests/OpenGL/package/glm/doc/api/search/all_6.js deleted file mode 100644 index b67e426f..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_6.js +++ /dev/null @@ -1,143 +0,0 @@ -var searchData= -[ - ['color_5fspace_2ehpp',['color_space.hpp',['../a00012.html',1,'']]], - ['color_5fspace_2ehpp',['color_space.hpp',['../a00013.html',1,'']]], - ['common_2ehpp',['common.hpp',['../a00016.html',1,'']]], - ['geometric_20functions',['Geometric functions',['../a00279.html',1,'']]], - ['glm_5fext_5fmatrix_5fclip_5fspace',['GLM_EXT_matrix_clip_space',['../a00243.html',1,'']]], - ['glm_5fext_5fmatrix_5fcommon',['GLM_EXT_matrix_common',['../a00244.html',1,'']]], - ['glm_5fext_5fmatrix_5fprojection',['GLM_EXT_matrix_projection',['../a00245.html',1,'']]], - ['glm_5fext_5fmatrix_5frelational',['GLM_EXT_matrix_relational',['../a00246.html',1,'']]], - ['glm_5fext_5fmatrix_5ftransform',['GLM_EXT_matrix_transform',['../a00247.html',1,'']]], - ['glm_5fext_5fquaternion_5fcommon',['GLM_EXT_quaternion_common',['../a00248.html',1,'']]], - ['glm_5fext_5fquaternion_5fdouble',['GLM_EXT_quaternion_double',['../a00249.html',1,'']]], - ['glm_5fext_5fquaternion_5fdouble_5fprecision',['GLM_EXT_quaternion_double_precision',['../a00250.html',1,'']]], - ['glm_5fext_5fquaternion_5fexponential',['GLM_EXT_quaternion_exponential',['../a00251.html',1,'']]], - ['glm_5fext_5fquaternion_5ffloat',['GLM_EXT_quaternion_float',['../a00252.html',1,'']]], - ['glm_5fext_5fquaternion_5ffloat_5fprecision',['GLM_EXT_quaternion_float_precision',['../a00253.html',1,'']]], - ['glm_5fext_5fquaternion_5fgeometric',['GLM_EXT_quaternion_geometric',['../a00254.html',1,'']]], - ['glm_5fext_5fquaternion_5frelational',['GLM_EXT_quaternion_relational',['../a00255.html',1,'']]], - ['glm_5fext_5fquaternion_5ftransform',['GLM_EXT_quaternion_transform',['../a00256.html',1,'']]], - ['glm_5fext_5fquaternion_5ftrigonometric',['GLM_EXT_quaternion_trigonometric',['../a00257.html',1,'']]], - ['glm_5fext_5fscalar_5fcommon',['GLM_EXT_scalar_common',['../a00258.html',1,'']]], - ['glm_5fext_5fscalar_5fconstants',['GLM_EXT_scalar_constants',['../a00259.html',1,'']]], - ['glm_5fext_5fscalar_5fint_5fsized',['GLM_EXT_scalar_int_sized',['../a00260.html',1,'']]], - ['glm_5fext_5fscalar_5finteger',['GLM_EXT_scalar_integer',['../a00261.html',1,'']]], - ['glm_5fext_5fscalar_5frelational',['GLM_EXT_scalar_relational',['../a00262.html',1,'']]], - ['glm_5fext_5fscalar_5fuint_5fsized',['GLM_EXT_scalar_uint_sized',['../a00263.html',1,'']]], - ['glm_5fext_5fscalar_5fulp',['GLM_EXT_scalar_ulp',['../a00264.html',1,'']]], - ['glm_5fext_5fvector_5fbool1',['GLM_EXT_vector_bool1',['../a00265.html',1,'']]], - ['glm_5fext_5fvector_5fbool1_5fprecision',['GLM_EXT_vector_bool1_precision',['../a00266.html',1,'']]], - ['glm_5fext_5fvector_5fcommon',['GLM_EXT_vector_common',['../a00267.html',1,'']]], - ['glm_5fext_5fvector_5fdouble1',['GLM_EXT_vector_double1',['../a00268.html',1,'']]], - ['glm_5fext_5fvector_5fdouble1_5fprecision',['GLM_EXT_vector_double1_precision',['../a00269.html',1,'']]], - ['glm_5fext_5fvector_5ffloat1',['GLM_EXT_vector_float1',['../a00270.html',1,'']]], - ['glm_5fext_5fvector_5ffloat1_5fprecision',['GLM_EXT_vector_float1_precision',['../a00271.html',1,'']]], - ['glm_5fext_5fvector_5fint1',['GLM_EXT_vector_int1',['../a00272.html',1,'']]], - ['glm_5fext_5fvector_5fint1_5fprecision',['GLM_EXT_vector_int1_precision',['../a00273.html',1,'']]], - ['glm_5fext_5fvector_5finteger',['GLM_EXT_vector_integer',['../a00274.html',1,'']]], - ['glm_5fext_5fvector_5frelational',['GLM_EXT_vector_relational',['../a00275.html',1,'']]], - ['glm_5fext_5fvector_5fuint1',['GLM_EXT_vector_uint1',['../a00276.html',1,'']]], - ['glm_5fext_5fvector_5fuint1_5fprecision',['GLM_EXT_vector_uint1_precision',['../a00277.html',1,'']]], - ['glm_5fext_5fvector_5fulp',['GLM_EXT_vector_ulp',['../a00278.html',1,'']]], - ['gauss',['gauss',['../a00326.html#ga0b50b197ff74261a0fad90f4b8d24702',1,'glm::gauss(T x, T ExpectedValue, T StandardDeviation)'],['../a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab',1,'glm::gauss(vec< 2, T, Q > const &Coord, vec< 2, T, Q > const &ExpectedValue, vec< 2, T, Q > const &StandardDeviation)']]], - ['gaussrand',['gaussRand',['../a00300.html#ga5193a83e49e4fdc5652c084711083574',1,'glm']]], - ['geometric_2ehpp',['geometric.hpp',['../a00036.html',1,'']]], - ['glm_2ehpp',['glm.hpp',['../a00037.html',1,'']]], - ['glm_5faligned_5ftypedef',['GLM_ALIGNED_TYPEDEF',['../a00364.html#gab5cd5c5fad228b25c782084f1cc30114',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1)'],['../a00364.html#ga5bb5dd895ef625c1b113f2cf400186b0',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2)'],['../a00364.html#gac6efa54cf7c6c86f7158922abdb1a430',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4)'],['../a00364.html#ga6612eb77c8607048e7552279a11eeb5f',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8)'],['../a00364.html#ga7ddc1848ff2223026db8968ce0c97497',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1)'],['../a00364.html#ga22240dd9458b0f8c11fbcc4f48714f68',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2)'],['../a00364.html#ga8130ea381d76a2cc34a93ccbb6cf487d',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4)'],['../a00364.html#ga7ccb60f3215d293fd62b33b31ed0e7be',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8)'],['../a00364.html#gac20d508d2ef5cc95ad3daf083c57ec2a',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1)'],['../a00364.html#ga50257b48069a31d0c8d9c1f644d267de',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2)'],['../a00364.html#gaa07e98e67b7a3435c0746018c7a2a839',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4)'],['../a00364.html#ga62601fc6f8ca298b77285bedf03faffd',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8)'],['../a00364.html#gac8cff825951aeb54dd846037113c72db',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1)'],['../a00364.html#ga78f443d88f438575a62b5df497cdf66b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2)'],['../a00364.html#ga0680cd3b5d4e8006985fb41a4f9b57af',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4)'],['../a00364.html#gad9e5babb1dd3e3531b42c37bf25dd951',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8)'],['../a00364.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1)'],['../a00364.html#ga2196442c0e5c5e8c77842de388c42521',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2)'],['../a00364.html#ga1284488189daf897cf095c5eefad9744',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4)'],['../a00364.html#ga73fdc86a539808af58808b7c60a1c4d8',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8)'],['../a00364.html#gafafeea923e1983262c972e2b83922d3b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1)'],['../a00364.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2)'],['../a00364.html#ga63b882e29170d428463d99c3d630acc6',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4)'],['../a00364.html#ga8b20507bb048c1edea2d441cc953e6f0',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8)'],['../a00364.html#ga56c5ca60813027b603c7b61425a0479d',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1)'],['../a00364.html#ga7a751b3aff24c0259f4a7357c2969089',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2)'],['../a00364.html#ga70cd2144351c556469ee6119e59971fc',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4)'],['../a00364.html#ga46bbf08dc004d8c433041e0b5018a5d3',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8)'],['../a00364.html#gab3e10c77a20d1abad2de1c561c7a5c18',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1)'],['../a00364.html#ga968f30319ebeaca9ebcd3a25a8e139fb',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2)'],['../a00364.html#gaae773c28e6390c6aa76f5b678b7098a3',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4)'],['../a00364.html#ga790cfff1ca39d0ed696ffed980809311',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8)'],['../a00364.html#ga8265b91eb23c120a9b0c3e381bc37b96',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1)'],['../a00364.html#gae6d384de17588d8edb894fbe06e0d410',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2)'],['../a00364.html#ga9c8172b745ee03fc5b2b91c350c2922f',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4)'],['../a00364.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8)'],['../a00364.html#gabd82b9faa9d4d618dbbe0fc8a1efee63',1,'glm::GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1)'],['../a00364.html#ga285649744560be21000cfd81bbb5d507',1,'glm::GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2)'],['../a00364.html#ga07732da630b2deda428ce95c0ecaf3ff',1,'glm::GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4)'],['../a00364.html#ga1a8da2a8c51f69c07a2e7f473aa420f4',1,'glm::GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8)'],['../a00364.html#ga848aedf13e2d9738acf0bb482c590174',1,'glm::GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1)'],['../a00364.html#gafd2803d39049dd45a37a63931e25d943',1,'glm::GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2)'],['../a00364.html#gae553b33349d6da832cf0724f1e024094',1,'glm::GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4)'],['../a00364.html#ga16d223a2b3409e812e1d3bd87f0e9e5c',1,'glm::GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8)'],['../a00364.html#ga2de065d2ddfdb366bcd0febca79ae2ad',1,'glm::GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1)'],['../a00364.html#gabd786bdc20a11c8cb05c92c8212e28d3',1,'glm::GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2)'],['../a00364.html#gad4aefe56691cdb640c72f0d46d3fb532',1,'glm::GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4)'],['../a00364.html#ga8fe9745f7de24a8394518152ff9fccdc',1,'glm::GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8)'],['../a00364.html#gaaad735483450099f7f882d4e3a3569bd',1,'glm::GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4)'],['../a00364.html#gac7b6f823802edbd6edbaf70ea25bf068',1,'glm::GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8)'],['../a00364.html#ga3e235bcd2b8029613f25b8d40a2d3ef7',1,'glm::GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16)'],['../a00364.html#ga50d8a9523968c77f8325b4c9bfbff41e',1,'glm::GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16)'],['../a00364.html#ga9ec20fdfb729c702032da9378c79679f',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1)'],['../a00364.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2)'],['../a00364.html#ga2958f907719d94d8109b562540c910e2',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4)'],['../a00364.html#ga1fe6fc032a978f1c845fac9aa0668714',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4)'],['../a00364.html#gaa4161e7a496dc96972254143fe873e55',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2)'],['../a00364.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4)'],['../a00364.html#gaaee91dd2ab34423bcc11072ef6bd0f02',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8)'],['../a00364.html#ga49f047ccaa8b31fad9f26c67bf9b3510',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8)'],['../a00364.html#ga904e9c2436bb099397c0823506a0771f',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4)'],['../a00364.html#gaf90651cf2f5e7ee2b11cfdc5a6749534',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8)'],['../a00364.html#ga7354a4ead8cb17868aec36b9c30d6010',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16)'],['../a00364.html#gad2ecbdea18732163e2636e27b37981ee',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16)'],['../a00364.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8)'],['../a00364.html#ga1f9e9c2ea2768675dff9bae5cde2d829',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16)'],['../a00364.html#gad77c317b7d942322cd5be4c8127b3187',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32)'],['../a00364.html#ga716f8ea809bdb11b5b542d8b71aeb04f',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32)'],['../a00364.html#gad46f8e9082d5878b1bc04f9c1471cdaa',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1)'],['../a00364.html#ga1246094581af624aca6c7499aaabf801',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2)'],['../a00364.html#ga7a5009a1d0196bbf21dd7518f61f0249',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4)'],['../a00364.html#ga45213fd18b3bb1df391671afefe4d1e7',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8)'],['../a00364.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1)'],['../a00364.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2)'],['../a00364.html#gadc246401847dcba155f0699425e49dcd',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4)'],['../a00364.html#gaace64bddf51a9def01498da9a94fb01c',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8)'],['../a00364.html#gad7bb97c29d664bd86ffb1bed4abc5534',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1)'],['../a00364.html#ga404bba7785130e0b1384d695a9450b28',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2)'],['../a00364.html#ga31ba41fd896257536958ec6080203d2a',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4)'],['../a00364.html#gacca5f13627f57b3505676e40a6e43e5e',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8)'],['../a00364.html#ga5faf1d3e70bf33174dd7f3d01d5b883b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1)'],['../a00364.html#ga727e2bf2c433bb3b0182605860a48363',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2)'],['../a00364.html#ga12566ca66d5962dadb4a5eb4c74e891e',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4)'],['../a00364.html#ga7b66a97a8acaa35c5a377b947318c6bc',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8)'],['../a00364.html#gaa9cde002439b74fa66120a16a9f55fcc',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1)'],['../a00364.html#ga1ca98c67f7d1e975f7c5202f1da1df1f',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2)'],['../a00364.html#ga1dc8bc6199d785f235576948d80a597c',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4)'],['../a00364.html#gad14a0f2ec93519682b73d70b8e401d81',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8)'],['../a00364.html#gada8b996eb6526dc1ead813bd49539d1b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1)'],['../a00364.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2)'],['../a00364.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4)'],['../a00364.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8)'],['../a00364.html#ga0ee829f7b754b262bbfe6317c0d678ac',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1)'],['../a00364.html#ga447848a817a626cae08cedc9778b331c',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2)'],['../a00364.html#ga6027ae13b2734f542a6e7beee11b8820',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4)'],['../a00364.html#ga2aca46c8608c95ef991ee4c332acde5f',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8)'],['../a00364.html#gaff50b10dd1c48be324fdaffd18e2c7ea',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1)'],['../a00364.html#ga9fc4421dbb833d5461e6d4e59dcfde55',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2)'],['../a00364.html#ga329f1e2b94b33ba5e3918197030bcf03',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4)'],['../a00364.html#ga71e646f7e301aa422328194162c9c998',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8)'],['../a00364.html#ga8942e09f479489441a7a5004c6d8cb66',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1)'],['../a00364.html#gaab32497d6e4db16ee439dbedd64c5865',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2)'],['../a00364.html#gaaadbb34952eca8e3d7fe122c3e167742',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4)'],['../a00364.html#ga92024d27c74a3650afb55ec8e024ed25',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8)'],['../a00364.html#gabde1d0b4072df35453db76075ab896a6',1,'glm::GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1)'],['../a00364.html#ga06c296c9e398b294c8c9dd2a7693dcbb',1,'glm::GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2)'],['../a00364.html#gacf1744488c96ebd33c9f36ad33b2010a',1,'glm::GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4)'],['../a00364.html#ga3328061a64c20ba59d5f9da24c2cd059',1,'glm::GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8)'],['../a00364.html#gaf6ced36f13bae57f377bafa6f5fcc299',1,'glm::GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1)'],['../a00364.html#gafbc7fb7847bfc78a339d1d371c915c73',1,'glm::GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2)'],['../a00364.html#gaa86bc56a73fd8120b1121b5f5e6245ae',1,'glm::GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4)'],['../a00364.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8',1,'glm::GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8)'],['../a00364.html#ga4f3bab577daf3343e99cc005134bce86',1,'glm::GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1)'],['../a00364.html#ga13a2391339d0790d43b76d00a7611c4f',1,'glm::GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2)'],['../a00364.html#ga197570e03acbc3d18ab698e342971e8f',1,'glm::GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4)'],['../a00364.html#ga0f033b21e145a1faa32c62ede5878993',1,'glm::GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8)'],['../a00364.html#ga509af83527f5cd512e9a7873590663aa',1,'glm::GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4)'],['../a00364.html#ga94e86186978c502c6dc0c0d9c4a30679',1,'glm::GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8)'],['../a00364.html#ga5cec574686a7f3c8ed24bb195c5e2d0a',1,'glm::GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16)'],['../a00364.html#ga47edfdcee9c89b1ebdaf20450323b1d4',1,'glm::GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16)'],['../a00364.html#ga5611d6718e3a00096918a64192e73a45',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1)'],['../a00364.html#ga19837e6f72b60d994a805ef564c6c326',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2)'],['../a00364.html#ga9740cf8e34f068049b42a2753f9601c2',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4)'],['../a00364.html#ga8b8588bb221448f5541a858903822a57',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4)'],['../a00364.html#ga991abe990c16de26b2129d6bc2f4c051',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2)'],['../a00364.html#gac01bb9fc32a1cd76c2b80d030f71df4c',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4)'],['../a00364.html#ga09540dbca093793a36a8997e0d4bee77',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8)'],['../a00364.html#gaecafb5996f5a44f57e34d29c8670741e',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8)'],['../a00364.html#gac6b161a04d2f8408fe1c9d857e8daac0',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4)'],['../a00364.html#ga1fa0dfc8feb0fa17dab2acd43e05342b',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8)'],['../a00364.html#ga0019500abbfa9c66eff61ca75eaaed94',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16)'],['../a00364.html#ga14fd29d01dae7b08a04e9facbcc18824',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16)'],['../a00364.html#gab253845f534a67136f9619843cade903',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8)'],['../a00364.html#ga929427a7627940cdf3304f9c050b677d',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16)'],['../a00364.html#gae373b6c04fdf9879f33d63e6949c037e',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32)'],['../a00364.html#ga53a8a03dca2015baec4584f45b8e9cdc',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32)'],['../a00364.html#gab3301bae94ef5bf59fbdd9a24e7d2a01',1,'glm::GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4)'],['../a00364.html#gada9b0bea273d3ae0286f891533b9568f',1,'glm::GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4)'],['../a00364.html#gadbce23b9f23d77bb3884e289a574ebd5',1,'glm::GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4)'],['../a00364.html#ga75930684ff2233171c573e603f216162',1,'glm::GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8)'],['../a00364.html#ga6e3a2d83b131336219a0f4c7cbba2a48',1,'glm::GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8)'],['../a00364.html#gaa4deaa0dea930c393d55e7a4352b0a20',1,'glm::GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8)'],['../a00364.html#ga81bc497b2bfc6f80bab690c6ee28f0f9',1,'glm::GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4)'],['../a00364.html#gada3e8f783e9d4b90006695a16c39d4d4',1,'glm::GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8)'],['../a00364.html#gab8d081fac3a38d6f55fa552f32168d32',1,'glm::GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16)'],['../a00364.html#ga12fe7b9769c964c5b48dcfd8b7f40198',1,'glm::GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16)'],['../a00364.html#gaefab04611c7f8fe1fd9be3071efea6cc',1,'glm::GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4)'],['../a00364.html#ga2543c05ba19b3bd19d45b1227390c5b4',1,'glm::GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8)'],['../a00364.html#ga009afd727fd657ef33a18754d6d28f60',1,'glm::GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16)'],['../a00364.html#ga2f26177e74bfb301a3d0e02ec3c3ef53',1,'glm::GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16)'],['../a00364.html#ga309f495a1d6b75ddf195b674b65cb1e4',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4)'],['../a00364.html#ga5e185865a2217d0cd47187644683a8c3',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8)'],['../a00364.html#gade4458b27b039b9ca34f8ec049f3115a',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16)'],['../a00364.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16)'],['../a00364.html#ga3e0f35fa0c626285a8bad41707e7316c',1,'glm::GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8)'],['../a00364.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8',1,'glm::GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16)'],['../a00364.html#ga01fe6fee6db5df580b6724a7e681f069',1,'glm::GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32)'],['../a00364.html#ga687d5b8f551d5af32425c0b2fba15e99',1,'glm::GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32)'],['../a00364.html#ga8e842371d46842ff8f1813419ba49d0f',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8)'],['../a00364.html#ga32814aa0f19316b43134fc25f2aad2b9',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16)'],['../a00364.html#gaf3d3bbc1e93909b689123b085e177a14',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32)'],['../a00364.html#ga804c654cead1139bd250f90f9bb01fad',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32)'],['../a00364.html#gacce4ac532880b8c7469d3c31974420a1',1,'glm::GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16)'],['../a00364.html#ga0498e0e249a6faddaf96aa55d7f81c3b',1,'glm::GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16)'],['../a00364.html#ga7435d87de82a0d652b35dc5b9cc718d5',1,'glm::GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16)'],['../a00364.html#ga719da577361541a4c43a2dd1d0e361e1',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16)'],['../a00364.html#ga6e7ee4f541e1d7db66cd1a224caacafb',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16)'],['../a00364.html#gae5d672d359f2a39f63f98c7975057486',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16)'],['../a00364.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16)'],['../a00364.html#ga0743b4f4f69a3227b82ff58f6abbad62',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16)'],['../a00364.html#ga1a76b325fdf70f961d835edd182c63dd',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16)'],['../a00364.html#ga4b4e181cd041ba28c3163e7b8074aef0',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16)'],['../a00364.html#ga27b13f465abc8a40705698145e222c3f',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16)'],['../a00364.html#ga2608d19cc275830a6f8c0b6405625a4f',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16)'],['../a00364.html#ga93f09768241358a287c4cca538f1f7e7',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16)'],['../a00364.html#ga7c117e3ecca089e10247b1d41d88aff9',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16)'],['../a00364.html#ga07c75cd04ba42dc37fa3e105f89455c5',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16)'],['../a00364.html#ga65ff0d690a34a4d7f46f9b2eb51525ee',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16)'],['../a00364.html#gadd8ddbe2bf65ccede865ba2f510176dc',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16)'],['../a00364.html#gaf18dbff14bf13d3ff540c517659ec045',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16)'],['../a00364.html#ga66339f6139bf7ff19e245beb33f61cc8',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16)'],['../a00364.html#ga1558a48b3934011b52612809f443e46d',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16)'],['../a00364.html#gaa52e5732daa62851627021ad551c7680',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16)'],['../a00364.html#gac09663c42566bcb58d23c6781ac4e85a',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16)'],['../a00364.html#ga3f510999e59e1b309113e1d561162b29',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16)'],['../a00364.html#ga2c9c94f0c89cd71ce56551db6cf4aaec',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16)'],['../a00364.html#ga99ce8274c750fbfdf0e70c95946a2875',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16)'],['../a00364.html#ga9476ef66790239df53dbe66f3989c3b5',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16)'],['../a00364.html#gacc429b3b0b49921e12713b6d31e14e1d',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16)'],['../a00364.html#ga88f6c6fa06e6e64479763e69444669cf',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32)'],['../a00364.html#gaae8e4639c991e64754145ab8e4c32083',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32)'],['../a00364.html#ga6e9094f3feb3b5b49d0f83683a101fde',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32)'],['../a00364.html#gadbd2c639c03de1c3e9591b5a39f65559',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32)'],['../a00364.html#gab059d7b9fe2094acc563b7223987499f',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32)'],['../a00364.html#gabbc811d1c52ed2b8cfcaff1378f75c69',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32)'],['../a00364.html#ga9ddf5212777734d2fd841a84439f3bdf',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32)'],['../a00364.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32)'],['../a00364.html#ga5875e0fa72f07e271e7931811cbbf31a',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32)'],['../a00364.html#ga41e82cd6ac07f912ba2a2d45799dcf0d',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32)'],['../a00364.html#ga0892638d6ba773043b3d63d1d092622e',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32)'],['../a00364.html#ga912a16432608b822f1e13607529934c1',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32)'],['../a00364.html#gafd945a8ea86b042aba410e0560df9a3d',1,'glm::GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16)'],['../a00364.html#ga19c2ba545d1f2f36bcb7b60c9a228622',1,'glm::GLM_ALIGNED_TYPEDEF(quat, aligned_fquat, 16)'],['../a00364.html#gaabc28c84a3288b697605d4688686f9a9',1,'glm::GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32)'],['../a00364.html#ga1ed8aeb5ca67fade269a46105f1bf273',1,'glm::GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16)'],['../a00364.html#ga95cc03b8b475993fa50e05e38e203303',1,'glm::GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32)']]], - ['golden_5fratio',['golden_ratio',['../a00290.html#ga748cf8642830657c5b7eae04d0a80899',1,'glm']]], - ['gradient_5fpaint_2ehpp',['gradient_paint.hpp',['../a00038.html',1,'']]], - ['greaterthan',['greaterThan',['../a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b',1,'glm::greaterThan(qua< T, Q > const &x, qua< T, Q > const &y)'],['../a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4',1,'glm::greaterThan(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['greaterthanequal',['greaterThanEqual',['../a00299.html#ga388cbeba987dae7b5937f742efa49a5a',1,'glm::greaterThanEqual(qua< T, Q > const &x, qua< T, Q > const &y)'],['../a00374.html#ga859975f538940f8d18fe62f916b9abd7',1,'glm::greaterThanEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['glm_5fgtc_5fbitfield',['GLM_GTC_bitfield',['../a00288.html',1,'']]], - ['glm_5fgtc_5fcolor_5fspace',['GLM_GTC_color_space',['../a00289.html',1,'']]], - ['glm_5fgtc_5fconstants',['GLM_GTC_constants',['../a00290.html',1,'']]], - ['glm_5fgtc_5fepsilon',['GLM_GTC_epsilon',['../a00291.html',1,'']]], - ['glm_5fgtc_5finteger',['GLM_GTC_integer',['../a00292.html',1,'']]], - ['glm_5fgtc_5fmatrix_5faccess',['GLM_GTC_matrix_access',['../a00293.html',1,'']]], - ['glm_5fgtc_5fmatrix_5finteger',['GLM_GTC_matrix_integer',['../a00294.html',1,'']]], - ['glm_5fgtc_5fmatrix_5finverse',['GLM_GTC_matrix_inverse',['../a00295.html',1,'']]], - ['glm_5fgtc_5fmatrix_5ftransform',['GLM_GTC_matrix_transform',['../a00296.html',1,'']]], - ['glm_5fgtc_5fnoise',['GLM_GTC_noise',['../a00297.html',1,'']]], - ['glm_5fgtc_5fpacking',['GLM_GTC_packing',['../a00298.html',1,'']]], - ['glm_5fgtc_5fquaternion',['GLM_GTC_quaternion',['../a00299.html',1,'']]], - ['glm_5fgtc_5frandom',['GLM_GTC_random',['../a00300.html',1,'']]], - ['glm_5fgtc_5freciprocal',['GLM_GTC_reciprocal',['../a00301.html',1,'']]], - ['glm_5fgtc_5fround',['GLM_GTC_round',['../a00302.html',1,'']]], - ['glm_5fgtc_5ftype_5faligned',['GLM_GTC_type_aligned',['../a00303.html',1,'']]], - ['glm_5fgtc_5ftype_5fprecision',['GLM_GTC_type_precision',['../a00304.html',1,'']]], - ['glm_5fgtc_5ftype_5fptr',['GLM_GTC_type_ptr',['../a00305.html',1,'']]], - ['glm_5fgtc_5fulp',['GLM_GTC_ulp',['../a00306.html',1,'']]], - ['glm_5fgtc_5fvec1',['GLM_GTC_vec1',['../a00307.html',1,'']]], - ['glm_5fgtx_5fassociated_5fmin_5fmax',['GLM_GTX_associated_min_max',['../a00308.html',1,'']]], - ['glm_5fgtx_5fbit',['GLM_GTX_bit',['../a00309.html',1,'']]], - ['glm_5fgtx_5fclosest_5fpoint',['GLM_GTX_closest_point',['../a00310.html',1,'']]], - ['glm_5fgtx_5fcolor_5fencoding',['GLM_GTX_color_encoding',['../a00311.html',1,'']]], - ['glm_5fgtx_5fcolor_5fspace',['GLM_GTX_color_space',['../a00312.html',1,'']]], - ['glm_5fgtx_5fcolor_5fspace_5fycocg',['GLM_GTX_color_space_YCoCg',['../a00313.html',1,'']]], - ['glm_5fgtx_5fcommon',['GLM_GTX_common',['../a00314.html',1,'']]], - ['glm_5fgtx_5fcompatibility',['GLM_GTX_compatibility',['../a00315.html',1,'']]], - ['glm_5fgtx_5fcomponent_5fwise',['GLM_GTX_component_wise',['../a00316.html',1,'']]], - ['glm_5fgtx_5fdual_5fquaternion',['GLM_GTX_dual_quaternion',['../a00317.html',1,'']]], - ['glm_5fgtx_5feasing',['GLM_GTX_easing',['../a00318.html',1,'']]], - ['glm_5fgtx_5feuler_5fangles',['GLM_GTX_euler_angles',['../a00319.html',1,'']]], - ['glm_5fgtx_5fextend',['GLM_GTX_extend',['../a00320.html',1,'']]], - ['glm_5fgtx_5fextented_5fmin_5fmax',['GLM_GTX_extented_min_max',['../a00321.html',1,'']]], - ['glm_5fgtx_5fexterior_5fproduct',['GLM_GTX_exterior_product',['../a00322.html',1,'']]], - ['glm_5fgtx_5ffast_5fexponential',['GLM_GTX_fast_exponential',['../a00323.html',1,'']]], - ['glm_5fgtx_5ffast_5fsquare_5froot',['GLM_GTX_fast_square_root',['../a00324.html',1,'']]], - ['glm_5fgtx_5ffast_5ftrigonometry',['GLM_GTX_fast_trigonometry',['../a00325.html',1,'']]], - ['glm_5fgtx_5ffunctions',['GLM_GTX_functions',['../a00326.html',1,'']]], - ['glm_5fgtx_5fgradient_5fpaint',['GLM_GTX_gradient_paint',['../a00327.html',1,'']]], - ['glm_5fgtx_5fhanded_5fcoordinate_5fspace',['GLM_GTX_handed_coordinate_space',['../a00328.html',1,'']]], - ['glm_5fgtx_5fhash',['GLM_GTX_hash',['../a00329.html',1,'']]], - ['glm_5fgtx_5finteger',['GLM_GTX_integer',['../a00330.html',1,'']]], - ['glm_5fgtx_5fintersect',['GLM_GTX_intersect',['../a00331.html',1,'']]], - ['glm_5fgtx_5fio',['GLM_GTX_io',['../a00332.html',1,'']]], - ['glm_5fgtx_5flog_5fbase',['GLM_GTX_log_base',['../a00333.html',1,'']]], - ['glm_5fgtx_5fmatrix_5fcross_5fproduct',['GLM_GTX_matrix_cross_product',['../a00334.html',1,'']]], - ['glm_5fgtx_5fmatrix_5fdecompose',['GLM_GTX_matrix_decompose',['../a00335.html',1,'']]], - ['glm_5fgtx_5fmatrix_5ffactorisation',['GLM_GTX_matrix_factorisation',['../a00336.html',1,'']]], - ['glm_5fgtx_5fmatrix_5finterpolation',['GLM_GTX_matrix_interpolation',['../a00337.html',1,'']]], - ['glm_5fgtx_5fmatrix_5fmajor_5fstorage',['GLM_GTX_matrix_major_storage',['../a00338.html',1,'']]], - ['glm_5fgtx_5fmatrix_5foperation',['GLM_GTX_matrix_operation',['../a00339.html',1,'']]], - ['glm_5fgtx_5fmatrix_5fquery',['GLM_GTX_matrix_query',['../a00340.html',1,'']]], - ['glm_5fgtx_5fmatrix_5ftransform_5f2d',['GLM_GTX_matrix_transform_2d',['../a00341.html',1,'']]], - ['glm_5fgtx_5fmixed_5fproducte',['GLM_GTX_mixed_producte',['../a00342.html',1,'']]], - ['glm_5fgtx_5fnorm',['GLM_GTX_norm',['../a00343.html',1,'']]], - ['glm_5fgtx_5fnormal',['GLM_GTX_normal',['../a00344.html',1,'']]], - ['glm_5fgtx_5fnormalize_5fdot',['GLM_GTX_normalize_dot',['../a00345.html',1,'']]], - ['glm_5fgtx_5fnumber_5fprecision',['GLM_GTX_number_precision',['../a00346.html',1,'']]], - ['glm_5fgtx_5foptimum_5fpow',['GLM_GTX_optimum_pow',['../a00347.html',1,'']]], - ['glm_5fgtx_5forthonormalize',['GLM_GTX_orthonormalize',['../a00348.html',1,'']]], - ['glm_5fgtx_5fperpendicular',['GLM_GTX_perpendicular',['../a00349.html',1,'']]], - ['glm_5fgtx_5fpolar_5fcoordinates',['GLM_GTX_polar_coordinates',['../a00350.html',1,'']]], - ['glm_5fgtx_5fprojection',['GLM_GTX_projection',['../a00351.html',1,'']]], - ['glm_5fgtx_5fquaternion',['GLM_GTX_quaternion',['../a00352.html',1,'']]], - ['glm_5fgtx_5frange',['GLM_GTX_range',['../a00353.html',1,'']]], - ['glm_5fgtx_5fraw_5fdata',['GLM_GTX_raw_data',['../a00354.html',1,'']]], - ['glm_5fgtx_5frotate_5fnormalized_5faxis',['GLM_GTX_rotate_normalized_axis',['../a00355.html',1,'']]], - ['glm_5fgtx_5frotate_5fvector',['GLM_GTX_rotate_vector',['../a00356.html',1,'']]], - ['glm_5fgtx_5fscalar_5frelational',['GLM_GTX_scalar_relational',['../a00357.html',1,'']]], - ['glm_5fgtx_5fspline',['GLM_GTX_spline',['../a00358.html',1,'']]], - ['glm_5fgtx_5fstd_5fbased_5ftype',['GLM_GTX_std_based_type',['../a00359.html',1,'']]], - ['glm_5fgtx_5fstring_5fcast',['GLM_GTX_string_cast',['../a00360.html',1,'']]], - ['glm_5fgtx_5ftexture',['GLM_GTX_texture',['../a00361.html',1,'']]], - ['glm_5fgtx_5ftransform',['GLM_GTX_transform',['../a00362.html',1,'']]], - ['glm_5fgtx_5ftransform2',['GLM_GTX_transform2',['../a00363.html',1,'']]], - ['glm_5fgtx_5ftype_5faligned',['GLM_GTX_type_aligned',['../a00364.html',1,'']]], - ['glm_5fgtx_5ftype_5ftrait',['GLM_GTX_type_trait',['../a00365.html',1,'']]], - ['glm_5fgtx_5fvec_5fswizzle',['GLM_GTX_vec_swizzle',['../a00366.html',1,'']]], - ['glm_5fgtx_5fvector_5fangle',['GLM_GTX_vector_angle',['../a00367.html',1,'']]], - ['glm_5fgtx_5fvector_5fquery',['GLM_GTX_vector_query',['../a00368.html',1,'']]], - ['glm_5fgtx_5fwrap',['GLM_GTX_wrap',['../a00369.html',1,'']]], - ['integer_2ehpp',['integer.hpp',['../a00042.html',1,'']]], - ['integer_2ehpp',['integer.hpp',['../a00041.html',1,'']]], - ['matrix_5ftransform_2ehpp',['matrix_transform.hpp',['../a00109.html',1,'']]], - ['packing_2ehpp',['packing.hpp',['../a00119.html',1,'']]], - ['quaternion_2ehpp',['quaternion.hpp',['../a00126.html',1,'']]], - ['quaternion_2ehpp',['quaternion.hpp',['../a00125.html',1,'']]], - ['scalar_5frelational_2ehpp',['scalar_relational.hpp',['../a00150.html',1,'']]], - ['type_5faligned_2ehpp',['type_aligned.hpp',['../a00161.html',1,'']]], - ['type_5faligned_2ehpp',['type_aligned.hpp',['../a00162.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_7.html b/tests/OpenGL/package/glm/doc/api/search/all_7.html deleted file mode 100644 index 38c6c000..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_7.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_7.js b/tests/OpenGL/package/glm/doc/api/search/all_7.js deleted file mode 100644 index 3ac6a3ee..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_7.js +++ /dev/null @@ -1,194 +0,0 @@ -var searchData= -[ - ['half_5fpi',['half_pi',['../a00290.html#ga0c36b41d462e45641faf7d7938948bac',1,'glm']]], - ['handed_5fcoordinate_5fspace_2ehpp',['handed_coordinate_space.hpp',['../a00039.html',1,'']]], - ['hash_2ehpp',['hash.hpp',['../a00040.html',1,'']]], - ['hermite',['hermite',['../a00358.html#gaa69e143f6374d32f934a8edeaa50bac9',1,'glm']]], - ['highestbitvalue',['highestBitValue',['../a00309.html#ga0dcc8fe7c3d3ad60dea409281efa3d05',1,'glm::highestBitValue(genIUType Value)'],['../a00309.html#ga898ef075ccf809a1e480faab48fe96bf',1,'glm::highestBitValue(vec< L, T, Q > const &value)']]], - ['highp_5fbvec1',['highp_bvec1',['../a00266.html#gae8a1e14abae1387274f57741750c06a2',1,'glm']]], - ['highp_5fbvec2',['highp_bvec2',['../a00282.html#gac6c781a85f012d77a75310a3058702c2',1,'glm']]], - ['highp_5fbvec3',['highp_bvec3',['../a00282.html#gaedb70027d89a0a405046aefda4eabaa6',1,'glm']]], - ['highp_5fbvec4',['highp_bvec4',['../a00282.html#gaee663ff64429443ab07a5327074192f6',1,'glm']]], - ['highp_5fddualquat',['highp_ddualquat',['../a00317.html#ga8f67eafa7197d7a668dad5105a463d2a',1,'glm']]], - ['highp_5fdmat2',['highp_dmat2',['../a00284.html#ga369b447bb1b312449b679ea1f90f3cea',1,'glm']]], - ['highp_5fdmat2x2',['highp_dmat2x2',['../a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7',1,'glm']]], - ['highp_5fdmat2x3',['highp_dmat2x3',['../a00284.html#gad4689ec33bc2c26e10132b174b49001a',1,'glm']]], - ['highp_5fdmat2x4',['highp_dmat2x4',['../a00284.html#ga5ceeb46670fdc000a0701910cc5061c9',1,'glm']]], - ['highp_5fdmat3',['highp_dmat3',['../a00284.html#ga86d6d4dbad92ffdcc759773340e15a97',1,'glm']]], - ['highp_5fdmat3x2',['highp_dmat3x2',['../a00284.html#ga3647309010a2160e9ec89bc6f7c95c35',1,'glm']]], - ['highp_5fdmat3x3',['highp_dmat3x3',['../a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce',1,'glm']]], - ['highp_5fdmat3x4',['highp_dmat3x4',['../a00284.html#ga6543eeeb64f48d79a0b96484308c50f0',1,'glm']]], - ['highp_5fdmat4',['highp_dmat4',['../a00284.html#ga945254f459860741138bceb74da496b9',1,'glm']]], - ['highp_5fdmat4x2',['highp_dmat4x2',['../a00284.html#gaeda1f474c668eaecc443bea85a4a4eca',1,'glm']]], - ['highp_5fdmat4x3',['highp_dmat4x3',['../a00284.html#gacf237c2d8832fe8db2d7e187585d34bd',1,'glm']]], - ['highp_5fdmat4x4',['highp_dmat4x4',['../a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a',1,'glm']]], - ['highp_5fdquat',['highp_dquat',['../a00250.html#gaf13a25f41afc03480b40fc71bd249cec',1,'glm']]], - ['highp_5fdualquat',['highp_dualquat',['../a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf',1,'glm']]], - ['highp_5fdvec1',['highp_dvec1',['../a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe',1,'glm']]], - ['highp_5fdvec2',['highp_dvec2',['../a00282.html#gab98d77cca255914f5e29697fcbc2d975',1,'glm']]], - ['highp_5fdvec3',['highp_dvec3',['../a00282.html#gab24dc20dcdc5b71282634bdbf6b70105',1,'glm']]], - ['highp_5fdvec4',['highp_dvec4',['../a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590',1,'glm']]], - ['highp_5ff32',['highp_f32',['../a00304.html#ga6906e1ef0b34064b4b675489c5c38725',1,'glm']]], - ['highp_5ff32mat2',['highp_f32mat2',['../a00304.html#ga298f7d4d273678d0282812368da27fda',1,'glm']]], - ['highp_5ff32mat2x2',['highp_f32mat2x2',['../a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968',1,'glm']]], - ['highp_5ff32mat2x3',['highp_f32mat2x3',['../a00304.html#ga0aeb5cb001473b08c88175012708a379',1,'glm']]], - ['highp_5ff32mat2x4',['highp_f32mat2x4',['../a00304.html#ga88938ee1e7981fa3402e88da6ad74531',1,'glm']]], - ['highp_5ff32mat3',['highp_f32mat3',['../a00304.html#ga24f9ef3263b1638564713892cc37981f',1,'glm']]], - ['highp_5ff32mat3x2',['highp_f32mat3x2',['../a00304.html#ga36537e701456f12c20e73f469cac4967',1,'glm']]], - ['highp_5ff32mat3x3',['highp_f32mat3x3',['../a00304.html#gaab691ae40c37976d268d8cac0096e0e1',1,'glm']]], - ['highp_5ff32mat3x4',['highp_f32mat3x4',['../a00304.html#gaa5086dbd6efb272d13fc88829330861d',1,'glm']]], - ['highp_5ff32mat4',['highp_f32mat4',['../a00304.html#ga14c90ca49885723f51d06e295587236f',1,'glm']]], - ['highp_5ff32mat4x2',['highp_f32mat4x2',['../a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f',1,'glm']]], - ['highp_5ff32mat4x3',['highp_f32mat4x3',['../a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59',1,'glm']]], - ['highp_5ff32mat4x4',['highp_f32mat4x4',['../a00304.html#gaf1b712b97b2322685fbbed28febe5f84',1,'glm']]], - ['highp_5ff32quat',['highp_f32quat',['../a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3',1,'glm']]], - ['highp_5ff32vec1',['highp_f32vec1',['../a00304.html#gab1b1c9e8667902b78b2c330e4d383a61',1,'glm']]], - ['highp_5ff32vec2',['highp_f32vec2',['../a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77',1,'glm']]], - ['highp_5ff32vec3',['highp_f32vec3',['../a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c',1,'glm']]], - ['highp_5ff32vec4',['highp_f32vec4',['../a00304.html#ga0f038d4e09862a74f03d102c59eda73e',1,'glm']]], - ['highp_5ff64',['highp_f64',['../a00304.html#ga51d5266017d88f62737c1973923a7cf4',1,'glm']]], - ['highp_5ff64mat2',['highp_f64mat2',['../a00304.html#gaf7adb92ce8de0afaff01436b039fd924',1,'glm']]], - ['highp_5ff64mat2x2',['highp_f64mat2x2',['../a00304.html#ga773ea237a051827cfc20de960bc73ff0',1,'glm']]], - ['highp_5ff64mat2x3',['highp_f64mat2x3',['../a00304.html#ga8342c7469384c6d769cacc9e309278d9',1,'glm']]], - ['highp_5ff64mat2x4',['highp_f64mat2x4',['../a00304.html#ga5a67a7440b9c0d1538533540f99036a5',1,'glm']]], - ['highp_5ff64mat3',['highp_f64mat3',['../a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546',1,'glm']]], - ['highp_5ff64mat3x2',['highp_f64mat3x2',['../a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a',1,'glm']]], - ['highp_5ff64mat3x3',['highp_f64mat3x3',['../a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4',1,'glm']]], - ['highp_5ff64mat3x4',['highp_f64mat3x4',['../a00304.html#gad310b1dddeec9ec837a104e7db8de580',1,'glm']]], - ['highp_5ff64mat4',['highp_f64mat4',['../a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5',1,'glm']]], - ['highp_5ff64mat4x2',['highp_f64mat4x2',['../a00304.html#ga58c4631421e323e252fc716b6103e38c',1,'glm']]], - ['highp_5ff64mat4x3',['highp_f64mat4x3',['../a00304.html#gae94823d65648e44d972863c6caa13103',1,'glm']]], - ['highp_5ff64mat4x4',['highp_f64mat4x4',['../a00304.html#ga09a2374b725c4246d263ee36fb66434c',1,'glm']]], - ['highp_5ff64quat',['highp_f64quat',['../a00304.html#gafcfdd74a115163af2ce1093551747352',1,'glm']]], - ['highp_5ff64vec1',['highp_f64vec1',['../a00304.html#ga62c31b133ceee9984fbee05ac4c434a9',1,'glm']]], - ['highp_5ff64vec2',['highp_f64vec2',['../a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2',1,'glm']]], - ['highp_5ff64vec3',['highp_f64vec3',['../a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851',1,'glm']]], - ['highp_5ff64vec4',['highp_f64vec4',['../a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444',1,'glm']]], - ['highp_5ffdualquat',['highp_fdualquat',['../a00317.html#ga4c4e55e9c99dc57b299ed590968da564',1,'glm']]], - ['highp_5ffloat32',['highp_float32',['../a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea',1,'glm']]], - ['highp_5ffloat32_5ft',['highp_float32_t',['../a00304.html#ga5376ef18dca9d248897c3363ef5a06b2',1,'glm']]], - ['highp_5ffloat64',['highp_float64',['../a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215',1,'glm']]], - ['highp_5ffloat64_5ft',['highp_float64_t',['../a00304.html#gaaeeb0077198cff40e3f48b1108ece139',1,'glm']]], - ['highp_5ffmat2',['highp_fmat2',['../a00304.html#gae98c88d9a7befa9b5877f49176225535',1,'glm']]], - ['highp_5ffmat2x2',['highp_fmat2x2',['../a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad',1,'glm']]], - ['highp_5ffmat2x3',['highp_fmat2x3',['../a00304.html#gacf111095594996fef29067b2454fccad',1,'glm']]], - ['highp_5ffmat2x4',['highp_fmat2x4',['../a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2',1,'glm']]], - ['highp_5ffmat3',['highp_fmat3',['../a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75',1,'glm']]], - ['highp_5ffmat3x2',['highp_fmat3x2',['../a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19',1,'glm']]], - ['highp_5ffmat3x3',['highp_fmat3x3',['../a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e',1,'glm']]], - ['highp_5ffmat3x4',['highp_fmat3x4',['../a00304.html#ga961fac2a885907ffcf4d40daac6615c5',1,'glm']]], - ['highp_5ffmat4',['highp_fmat4',['../a00304.html#gabf28443ce0cc0959077ec39b21f32c39',1,'glm']]], - ['highp_5ffmat4x2',['highp_fmat4x2',['../a00304.html#ga076961cf2d120c7168b957cb2ed107b3',1,'glm']]], - ['highp_5ffmat4x3',['highp_fmat4x3',['../a00304.html#gae406ec670f64170a7437b5e302eeb2cb',1,'glm']]], - ['highp_5ffmat4x4',['highp_fmat4x4',['../a00304.html#gaee80c7cd3caa0f2635058656755f6f69',1,'glm']]], - ['highp_5ffvec1',['highp_fvec1',['../a00304.html#gaa1040342c4efdedc8f90e6267db8d41c',1,'glm']]], - ['highp_5ffvec2',['highp_fvec2',['../a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae',1,'glm']]], - ['highp_5ffvec3',['highp_fvec3',['../a00304.html#ga6ef77413883f48d6b53b4169b25edbd0',1,'glm']]], - ['highp_5ffvec4',['highp_fvec4',['../a00304.html#ga8b839abbb44f5102609eed89f6ed61f7',1,'glm']]], - ['highp_5fi16',['highp_i16',['../a00304.html#ga0336abc2604dd2c20c30e036454b64f8',1,'glm']]], - ['highp_5fi16vec1',['highp_i16vec1',['../a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19',1,'glm']]], - ['highp_5fi16vec2',['highp_i16vec2',['../a00304.html#gaa7db3ad10947cf70cae6474d05ebd227',1,'glm']]], - ['highp_5fi16vec3',['highp_i16vec3',['../a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96',1,'glm']]], - ['highp_5fi16vec4',['highp_i16vec4',['../a00304.html#ga7a18659438828f91ccca28f1a1e067b4',1,'glm']]], - ['highp_5fi32',['highp_i32',['../a00304.html#ga727675ac6b5d2fc699520e0059735e25',1,'glm']]], - ['highp_5fi32vec1',['highp_i32vec1',['../a00304.html#ga6a9d71cc62745302f70422b7dc98755c',1,'glm']]], - ['highp_5fi32vec2',['highp_i32vec2',['../a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530',1,'glm']]], - ['highp_5fi32vec3',['highp_i32vec3',['../a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1',1,'glm']]], - ['highp_5fi32vec4',['highp_i32vec4',['../a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902',1,'glm']]], - ['highp_5fi64',['highp_i64',['../a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd',1,'glm']]], - ['highp_5fi64vec1',['highp_i64vec1',['../a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4',1,'glm']]], - ['highp_5fi64vec2',['highp_i64vec2',['../a00304.html#gad9d1903cb20899966e8ebe0670889a5f',1,'glm']]], - ['highp_5fi64vec3',['highp_i64vec3',['../a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a',1,'glm']]], - ['highp_5fi64vec4',['highp_i64vec4',['../a00304.html#gad23b1be9b3bf20352089a6b738f0ebba',1,'glm']]], - ['highp_5fi8',['highp_i8',['../a00304.html#gacb88796f2d08ef253d0345aff20c3aee',1,'glm']]], - ['highp_5fi8vec1',['highp_i8vec1',['../a00304.html#ga1d8c10949691b0fd990253476f47beb3',1,'glm']]], - ['highp_5fi8vec2',['highp_i8vec2',['../a00304.html#ga50542e4cb9b2f9bec213b66e06145d07',1,'glm']]], - ['highp_5fi8vec3',['highp_i8vec3',['../a00304.html#ga8396bfdc081d9113190d0c39c9f67084',1,'glm']]], - ['highp_5fi8vec4',['highp_i8vec4',['../a00304.html#ga4824e3ddf6e608117dfe4809430737b4',1,'glm']]], - ['highp_5fimat2',['highp_imat2',['../a00294.html#ga8499cc3b016003f835314c1c756e9db9',1,'glm']]], - ['highp_5fimat2x2',['highp_imat2x2',['../a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3',1,'glm']]], - ['highp_5fimat2x3',['highp_imat2x3',['../a00294.html#gaba49d890e06c9444795f5a133fbf1336',1,'glm']]], - ['highp_5fimat2x4',['highp_imat2x4',['../a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b',1,'glm']]], - ['highp_5fimat3',['highp_imat3',['../a00294.html#gaca4506a3efa679eff7c006d9826291fd',1,'glm']]], - ['highp_5fimat3x2',['highp_imat3x2',['../a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb',1,'glm']]], - ['highp_5fimat3x3',['highp_imat3x3',['../a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41',1,'glm']]], - ['highp_5fimat3x4',['highp_imat3x4',['../a00294.html#ga53008f580be99018a17b357b5a4ffc0d',1,'glm']]], - ['highp_5fimat4',['highp_imat4',['../a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56',1,'glm']]], - ['highp_5fimat4x2',['highp_imat4x2',['../a00294.html#ga1858820fb292cae396408b2034407f72',1,'glm']]], - ['highp_5fimat4x3',['highp_imat4x3',['../a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5',1,'glm']]], - ['highp_5fimat4x4',['highp_imat4x4',['../a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44',1,'glm']]], - ['highp_5fint16',['highp_int16',['../a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718',1,'glm']]], - ['highp_5fint16_5ft',['highp_int16_t',['../a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff',1,'glm']]], - ['highp_5fint32',['highp_int32',['../a00304.html#ga84ed04b4e0de18c977e932d617e7c223',1,'glm']]], - ['highp_5fint32_5ft',['highp_int32_t',['../a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f',1,'glm']]], - ['highp_5fint64',['highp_int64',['../a00304.html#ga226a8d52b4e3f77aaa6231135e886aac',1,'glm']]], - ['highp_5fint64_5ft',['highp_int64_t',['../a00304.html#ga73c6abb280a45feeff60f9accaee91f3',1,'glm']]], - ['highp_5fint8',['highp_int8',['../a00304.html#gad0549c902a96a7164e4ac858d5f39dbf',1,'glm']]], - ['highp_5fint8_5ft',['highp_int8_t',['../a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5',1,'glm']]], - ['highp_5fivec1',['highp_ivec1',['../a00273.html#ga7e02566f2bd2caa68e61be45a477c77e',1,'glm']]], - ['highp_5fivec2',['highp_ivec2',['../a00282.html#gaa18f6b80b41c214f10666948539c1f93',1,'glm']]], - ['highp_5fivec3',['highp_ivec3',['../a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18',1,'glm']]], - ['highp_5fivec4',['highp_ivec4',['../a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e',1,'glm']]], - ['highp_5fmat2',['highp_mat2',['../a00284.html#ga4d5a0055544a516237dcdace049b143d',1,'glm']]], - ['highp_5fmat2x2',['highp_mat2x2',['../a00284.html#ga2352ae43b284c9f71446674c0208c05d',1,'glm']]], - ['highp_5fmat2x3',['highp_mat2x3',['../a00284.html#ga7a0e3fe41512b0494e598f5c58722f19',1,'glm']]], - ['highp_5fmat2x4',['highp_mat2x4',['../a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f',1,'glm']]], - ['highp_5fmat3',['highp_mat3',['../a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e',1,'glm']]], - ['highp_5fmat3x2',['highp_mat3x2',['../a00284.html#ga1eda47a00027ec440eac05d63739c71b',1,'glm']]], - ['highp_5fmat3x3',['highp_mat3x3',['../a00284.html#ga2ea82e12f4d7afcfce8f59894d400230',1,'glm']]], - ['highp_5fmat3x4',['highp_mat3x4',['../a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7',1,'glm']]], - ['highp_5fmat4',['highp_mat4',['../a00284.html#gad72e13d669d039f12ae5afa23148adc1',1,'glm']]], - ['highp_5fmat4x2',['highp_mat4x2',['../a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5',1,'glm']]], - ['highp_5fmat4x3',['highp_mat4x3',['../a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38',1,'glm']]], - ['highp_5fmat4x4',['highp_mat4x4',['../a00284.html#ga58cc504be0e3b61c48bc91554a767b9f',1,'glm']]], - ['highp_5fquat',['highp_quat',['../a00253.html#gaa2fd8085774376310aeb80588e0eab6e',1,'glm']]], - ['highp_5fu16',['highp_u16',['../a00304.html#ga8e62c883d13f47015f3b70ed88751369',1,'glm']]], - ['highp_5fu16vec1',['highp_u16vec1',['../a00304.html#gad064202b4cf9a2972475c03de657cb39',1,'glm']]], - ['highp_5fu16vec2',['highp_u16vec2',['../a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159',1,'glm']]], - ['highp_5fu16vec3',['highp_u16vec3',['../a00304.html#gacfd806749008f0ade6ac4bb9dd91082f',1,'glm']]], - ['highp_5fu16vec4',['highp_u16vec4',['../a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61',1,'glm']]], - ['highp_5fu32',['highp_u32',['../a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf',1,'glm']]], - ['highp_5fu32vec1',['highp_u32vec1',['../a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3',1,'glm']]], - ['highp_5fu32vec2',['highp_u32vec2',['../a00304.html#ga2f256334f83fba4c2d219e414b51df6c',1,'glm']]], - ['highp_5fu32vec3',['highp_u32vec3',['../a00304.html#gaf14d7a50502464e7cbfa074f24684cb1',1,'glm']]], - ['highp_5fu32vec4',['highp_u32vec4',['../a00304.html#ga22166f0da65038b447f3c5e534fff1c2',1,'glm']]], - ['highp_5fu64',['highp_u64',['../a00304.html#ga0c181fdf06a309691999926b6690c969',1,'glm']]], - ['highp_5fu64vec1',['highp_u64vec1',['../a00304.html#gae4fe774744852c4d7d069be2e05257ab',1,'glm']]], - ['highp_5fu64vec2',['highp_u64vec2',['../a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d',1,'glm']]], - ['highp_5fu64vec3',['highp_u64vec3',['../a00304.html#ga41bdabea6e589029659331ba47eb78c1',1,'glm']]], - ['highp_5fu64vec4',['highp_u64vec4',['../a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325',1,'glm']]], - ['highp_5fu8',['highp_u8',['../a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c',1,'glm']]], - ['highp_5fu8vec1',['highp_u8vec1',['../a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2',1,'glm']]], - ['highp_5fu8vec2',['highp_u8vec2',['../a00304.html#ga27585b7c3ab300059f11fcba465f6fd2',1,'glm']]], - ['highp_5fu8vec3',['highp_u8vec3',['../a00304.html#ga45721c13b956eb691cbd6c6c1429167a',1,'glm']]], - ['highp_5fu8vec4',['highp_u8vec4',['../a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060',1,'glm']]], - ['highp_5fuint16',['highp_uint16',['../a00304.html#ga746dc6da204f5622e395f492997dbf57',1,'glm']]], - ['highp_5fuint16_5ft',['highp_uint16_t',['../a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7',1,'glm']]], - ['highp_5fuint32',['highp_uint32',['../a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3',1,'glm']]], - ['highp_5fuint32_5ft',['highp_uint32_t',['../a00304.html#gae978599c9711ac263ba732d4ac225b0e',1,'glm']]], - ['highp_5fuint64',['highp_uint64',['../a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce',1,'glm']]], - ['highp_5fuint64_5ft',['highp_uint64_t',['../a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08',1,'glm']]], - ['highp_5fuint8',['highp_uint8',['../a00304.html#ga97432f9979e73e66567361fd01e4cffb',1,'glm']]], - ['highp_5fuint8_5ft',['highp_uint8_t',['../a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5',1,'glm']]], - ['highp_5fumat2',['highp_umat2',['../a00294.html#ga42cbce64c4c1cd121b8437daa6e110de',1,'glm']]], - ['highp_5fumat2x2',['highp_umat2x2',['../a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28',1,'glm']]], - ['highp_5fumat2x3',['highp_umat2x3',['../a00294.html#ga90718c7128320b24b52f9ea70e643ad4',1,'glm']]], - ['highp_5fumat2x4',['highp_umat2x4',['../a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b',1,'glm']]], - ['highp_5fumat3',['highp_umat3',['../a00294.html#gaa1143120339b7d2d469d327662e8a172',1,'glm']]], - ['highp_5fumat3x2',['highp_umat3x2',['../a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4',1,'glm']]], - ['highp_5fumat3x3',['highp_umat3x3',['../a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2',1,'glm']]], - ['highp_5fumat3x4',['highp_umat3x4',['../a00294.html#ga25ee15c323924f2d0fe9896d329e5086',1,'glm']]], - ['highp_5fumat4',['highp_umat4',['../a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9',1,'glm']]], - ['highp_5fumat4x2',['highp_umat4x2',['../a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801',1,'glm']]], - ['highp_5fumat4x3',['highp_umat4x3',['../a00294.html#ga45a8163d02c43216252056b0c120f3a5',1,'glm']]], - ['highp_5fumat4x4',['highp_umat4x4',['../a00294.html#ga6a56cbb769aed334c95241664415f9ba',1,'glm']]], - ['highp_5fuvec1',['highp_uvec1',['../a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39',1,'glm']]], - ['highp_5fuvec2',['highp_uvec2',['../a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8',1,'glm']]], - ['highp_5fuvec3',['highp_uvec3',['../a00282.html#gaef61508dd40ec523416697982f9ceaae',1,'glm']]], - ['highp_5fuvec4',['highp_uvec4',['../a00282.html#gaeebd7dd9f3e678691f8620241e5f9221',1,'glm']]], - ['highp_5fvec1',['highp_vec1',['../a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9',1,'glm']]], - ['highp_5fvec2',['highp_vec2',['../a00282.html#gaa92c1954d71b1e7914874bd787b43d1c',1,'glm']]], - ['highp_5fvec3',['highp_vec3',['../a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9',1,'glm']]], - ['highp_5fvec4',['highp_vec4',['../a00282.html#gad281decae52948b82feb3a9db8f63a7b',1,'glm']]], - ['hsvcolor',['hsvColor',['../a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_8.html b/tests/OpenGL/package/glm/doc/api/search/all_8.html deleted file mode 100644 index 2a22cd52..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_8.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_8.js b/tests/OpenGL/package/glm/doc/api/search/all_8.js deleted file mode 100644 index 67374723..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_8.js +++ /dev/null @@ -1,93 +0,0 @@ -var searchData= -[ - ['integer_20functions',['Integer functions',['../a00370.html',1,'']]], - ['i16',['i16',['../a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699',1,'glm']]], - ['i16vec1',['i16vec1',['../a00304.html#gafe730798732aa7b0647096a004db1b1c',1,'glm']]], - ['i16vec2',['i16vec2',['../a00304.html#ga2996630ba7b10535af8e065cf326f761',1,'glm']]], - ['i16vec3',['i16vec3',['../a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b',1,'glm']]], - ['i16vec4',['i16vec4',['../a00304.html#ga550831bfc26d1e0101c1cb3d79938c06',1,'glm']]], - ['i32',['i32',['../a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb',1,'glm']]], - ['i32vec1',['i32vec1',['../a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf',1,'glm']]], - ['i32vec2',['i32vec2',['../a00304.html#ga8b44026374982dcd1e52d22bac99247e',1,'glm']]], - ['i32vec3',['i32vec3',['../a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e',1,'glm']]], - ['i32vec4',['i32vec4',['../a00304.html#ga866a05905c49912309ed1fa5f5980e61',1,'glm']]], - ['i64',['i64',['../a00304.html#gadb997e409103d4da18abd837e636a496',1,'glm']]], - ['i64vec1',['i64vec1',['../a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50',1,'glm']]], - ['i64vec2',['i64vec2',['../a00304.html#ga48310188e1d0c616bf8d78c92447523b',1,'glm']]], - ['i64vec3',['i64vec3',['../a00304.html#ga667948cfe6fb3d6606c750729ec49f77',1,'glm']]], - ['i64vec4',['i64vec4',['../a00304.html#gaa4e31c3d9de067029efeb161a44b0232',1,'glm']]], - ['i8',['i8',['../a00304.html#ga302ec977b0c0c3ea245b6c9275495355',1,'glm']]], - ['i8vec1',['i8vec1',['../a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b',1,'glm']]], - ['i8vec2',['i8vec2',['../a00304.html#gad06935764d78f43f9d542c784c2212ec',1,'glm']]], - ['i8vec3',['i8vec3',['../a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e',1,'glm']]], - ['i8vec4',['i8vec4',['../a00304.html#ga4177a44206121dabc8c4ff1c0f544574',1,'glm']]], - ['identity',['identity',['../a00247.html#ga81696f2b8d1db02ea1aff8da8f269314',1,'glm']]], - ['imat2',['imat2',['../a00294.html#gaabe04f9948d4a213bb1c20137de03e01',1,'glm']]], - ['imat2x2',['imat2x2',['../a00294.html#gaa4732a240522ad9bc28144fda2fc14ec',1,'glm']]], - ['imat2x3',['imat2x3',['../a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605',1,'glm']]], - ['imat2x4',['imat2x4',['../a00294.html#ga9d8faafdca42583d67e792dd038fc668',1,'glm']]], - ['imat3',['imat3',['../a00294.html#ga038f68437155ffa3c2583a15264a8195',1,'glm']]], - ['imat3x2',['imat3x2',['../a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f',1,'glm']]], - ['imat3x3',['imat3x3',['../a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4',1,'glm']]], - ['imat3x4',['imat3x4',['../a00294.html#ga6e9ce23496d8b08dfc302d4039694b58',1,'glm']]], - ['imat4',['imat4',['../a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb',1,'glm']]], - ['imat4x2',['imat4x2',['../a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa',1,'glm']]], - ['imat4x3',['imat4x3',['../a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5',1,'glm']]], - ['imat4x4',['imat4x4',['../a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b',1,'glm']]], - ['imulextended',['imulExtended',['../a00370.html#gac0c510a70e852f57594a9141848642e3',1,'glm']]], - ['infiniteperspective',['infinitePerspective',['../a00243.html#ga44fa38a18349450325cae2661bb115ca',1,'glm']]], - ['infiniteperspectivelh',['infinitePerspectiveLH',['../a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9',1,'glm']]], - ['infiniteperspectiverh',['infinitePerspectiveRH',['../a00243.html#ga99672ffe5714ef478dab2437255fe7e1',1,'glm']]], - ['int1',['int1',['../a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3',1,'glm']]], - ['int16',['int16',['../a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9',1,'glm']]], - ['int16_5ft',['int16_t',['../a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede',1,'glm']]], - ['int1x1',['int1x1',['../a00315.html#ga056ffe02d3a45af626f8e62221881c7a',1,'glm']]], - ['int2',['int2',['../a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a',1,'glm']]], - ['int2x2',['int2x2',['../a00315.html#ga4e5ce477c15836b21e3c42daac68554d',1,'glm']]], - ['int2x3',['int2x3',['../a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3',1,'glm']]], - ['int2x4',['int2x4',['../a00315.html#ga2749d59a7fddbac44f34ba78e57ef807',1,'glm']]], - ['int3',['int3',['../a00315.html#ga909c38a425f215a50c847145d7da09f0',1,'glm']]], - ['int32',['int32',['../a00260.html#ga43d43196463bde49cb067f5c20ab8481',1,'glm']]], - ['int32_5ft',['int32_t',['../a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710',1,'glm']]], - ['int3x2',['int3x2',['../a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8',1,'glm']]], - ['int3x3',['int3x3',['../a00315.html#ga15c9649286f0bf431bdf9b3509580048',1,'glm']]], - ['int3x4',['int3x4',['../a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f',1,'glm']]], - ['int4',['int4',['../a00315.html#gaecdef18c819c205aeee9f94dc93de56a',1,'glm']]], - ['int4x2',['int4x2',['../a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1',1,'glm']]], - ['int4x3',['int4x3',['../a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d',1,'glm']]], - ['int4x4',['int4x4',['../a00315.html#ga04dee1552424198b8f58b377c2ee00d8',1,'glm']]], - ['int64',['int64',['../a00260.html#gaff5189f97f9e842d9636a0f240001b2e',1,'glm']]], - ['int64_5ft',['int64_t',['../a00304.html#ga322a7d7d2c2c68994dc872a33de63c61',1,'glm']]], - ['int8',['int8',['../a00260.html#ga1b956fe1df85f3c132b21edb4e116458',1,'glm']]], - ['int8_5ft',['int8_t',['../a00304.html#ga4bf09d8838a86866b39ee6e109341645',1,'glm']]], - ['intbitstofloat',['intBitsToFloat',['../a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4',1,'glm::intBitsToFloat(int const &v)'],['../a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0',1,'glm::intBitsToFloat(vec< L, int, Q > const &v)']]], - ['integer_2ehpp',['integer.hpp',['../a00043.html',1,'']]], - ['intermediate',['intermediate',['../a00352.html#gacc5cd5f3e78de61d141c2355417424de',1,'glm']]], - ['interpolate',['interpolate',['../a00337.html#ga4e67863d150724b10c1ac00972dc958c',1,'glm']]], - ['intersect_2ehpp',['intersect.hpp',['../a00044.html',1,'']]], - ['intersectlinesphere',['intersectLineSphere',['../a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7',1,'glm']]], - ['intersectlinetriangle',['intersectLineTriangle',['../a00331.html#ga9d29b9b3acb504d43986502f42740df4',1,'glm']]], - ['intersectrayplane',['intersectRayPlane',['../a00331.html#gad3697a9700ea379739a667ea02573488',1,'glm']]], - ['intersectraysphere',['intersectRaySphere',['../a00331.html#gac88f8cd84c4bcb5b947d56acbbcfa56e',1,'glm::intersectRaySphere(genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, typename genType::value_type const sphereRadiusSquered, typename genType::value_type &intersectionDistance)'],['../a00331.html#gad28c00515b823b579c608aafa1100c1d',1,'glm::intersectRaySphere(genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)']]], - ['intersectraytriangle',['intersectRayTriangle',['../a00331.html#ga65bf2c594482f04881c36bc761f9e946',1,'glm']]], - ['inverse',['inverse',['../a00248.html#gab41da854ae678e23e114b598cbca4065',1,'glm::inverse(qua< T, Q > const &q)'],['../a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e',1,'glm::inverse(tdualquat< T, Q > const &q)'],['../a00371.html#gaed509fe8129b01e4f20a6d0de5690091',1,'glm::inverse(mat< C, R, T, Q > const &m)']]], - ['inversesqrt',['inversesqrt',['../a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a',1,'glm']]], - ['inversetranspose',['inverseTranspose',['../a00295.html#gab213cd0e3ead5f316d583f99d6312008',1,'glm']]], - ['io_2ehpp',['io.hpp',['../a00045.html',1,'']]], - ['iround',['iround',['../a00292.html#ga57824268ebe13a922f1d69a5d37f637f',1,'glm']]], - ['iscompnull',['isCompNull',['../a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76',1,'glm']]], - ['isdenormal',['isdenormal',['../a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91',1,'glm']]], - ['isfinite',['isfinite',['../a00315.html#gaf4b04dcd3526996d68c1bfe17bfc8657',1,'glm::isfinite(genType const &x)'],['../a00315.html#gac3b12b8ac3014418fe53c299478b6603',1,'glm::isfinite(const vec< 1, T, Q > &x)'],['../a00315.html#ga8e76dc3e406ce6a4155c2b12a2e4b084',1,'glm::isfinite(const vec< 2, T, Q > &x)'],['../a00315.html#ga929ef27f896d902c1771a2e5e150fc97',1,'glm::isfinite(const vec< 3, T, Q > &x)'],['../a00315.html#ga19925badbe10ce61df1d0de00be0b5ad',1,'glm::isfinite(const vec< 4, T, Q > &x)']]], - ['isidentity',['isIdentity',['../a00340.html#gaee935d145581c82e82b154ccfd78ad91',1,'glm']]], - ['isinf',['isinf',['../a00241.html#ga2885587c23a106301f20443896365b62',1,'glm::isinf(vec< L, T, Q > const &x)'],['../a00248.html#ga45722741ea266b4e861938b365c5f362',1,'glm::isinf(qua< T, Q > const &x)']]], - ['ismultiple',['isMultiple',['../a00261.html#gaec593d33956a8fe43f78fccc63ddde9a',1,'glm::isMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#ga354caf634ef333d9cb4844407416256a',1,'glm::isMultiple(vec< L, T, Q > const &v, T Multiple)'],['../a00274.html#gabb4360e38c0943d8981ba965dead519d',1,'glm::isMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)']]], - ['isnan',['isnan',['../a00241.html#ga29ef934c00306490de837b4746b4e14d',1,'glm::isnan(vec< L, T, Q > const &x)'],['../a00248.html#ga1bb55f8963616502e96dc564384d8a03',1,'glm::isnan(qua< T, Q > const &x)']]], - ['isnormalized',['isNormalized',['../a00340.html#gae785af56f47ce220a1609f7f84aa077a',1,'glm::isNormalized(mat< 2, 2, T, Q > const &m, T const &epsilon)'],['../a00340.html#gaa068311695f28f5f555f5f746a6a66fb',1,'glm::isNormalized(mat< 3, 3, T, Q > const &m, T const &epsilon)'],['../a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad',1,'glm::isNormalized(mat< 4, 4, T, Q > const &m, T const &epsilon)'],['../a00368.html#gac3c974f459fd75453134fad7ae89a39e',1,'glm::isNormalized(vec< L, T, Q > const &v, T const &epsilon)']]], - ['isnull',['isNull',['../a00340.html#ga9790ec222ce948c0ff0d8ce927340dba',1,'glm::isNull(mat< 2, 2, T, Q > const &m, T const &epsilon)'],['../a00340.html#gae14501c6b14ccda6014cc5350080103d',1,'glm::isNull(mat< 3, 3, T, Q > const &m, T const &epsilon)'],['../a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b',1,'glm::isNull(mat< 4, 4, T, Q > const &m, T const &epsilon)'],['../a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495',1,'glm::isNull(vec< L, T, Q > const &v, T const &epsilon)']]], - ['isorthogonal',['isOrthogonal',['../a00340.html#ga58f3289f74dcab653387dd78ad93ca40',1,'glm']]], - ['ispoweroftwo',['isPowerOfTwo',['../a00261.html#gadf491730354aa7da67fbe23d4d688763',1,'glm::isPowerOfTwo(genIUType v)'],['../a00274.html#gabf2b61ded7049bcb13e25164f832a290',1,'glm::isPowerOfTwo(vec< L, T, Q > const &v)']]], - ['ivec1',['ivec1',['../a00272.html#gaedd0562c2e77714929d7723a7e2e0dba',1,'glm']]], - ['ivec2',['ivec2',['../a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560',1,'glm']]], - ['ivec3',['ivec3',['../a00281.html#gad0d784d8eee201aca362484d2daee46c',1,'glm']]], - ['ivec4',['ivec4',['../a00281.html#ga5abb4603dae0ce58c595e66d9123d812',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_9.html b/tests/OpenGL/package/glm/doc/api/search/all_9.html deleted file mode 100644 index bd9b05c3..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_9.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_9.js b/tests/OpenGL/package/glm/doc/api/search/all_9.js deleted file mode 100644 index 5752ecfc..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_9.js +++ /dev/null @@ -1,214 +0,0 @@ -var searchData= -[ - ['l1norm',['l1Norm',['../a00343.html#gae2fc0b2aa967bebfd6a244700bff6997',1,'glm::l1Norm(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)'],['../a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be',1,'glm::l1Norm(vec< 3, T, Q > const &v)']]], - ['l2norm',['l2Norm',['../a00343.html#ga41340b2ef40a9307ab0f137181565168',1,'glm::l2Norm(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)'],['../a00343.html#gae288bde8f0e41fb4ed62e65137b18cba',1,'glm::l2Norm(vec< 3, T, Q > const &x)']]], - ['ldexp',['ldexp',['../a00241.html#gac3010e0a0c35a1b514540f2fb579c58c',1,'glm']]], - ['lefthanded',['leftHanded',['../a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3',1,'glm']]], - ['length',['length',['../a00254.html#gab703732449be6c7199369b3f9a91ed38',1,'glm::length(qua< T, Q > const &q)'],['../a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263',1,'glm::length(vec< L, T, Q > const &x)']]], - ['length2',['length2',['../a00343.html#ga8d1789651050adb7024917984b41c3de',1,'glm::length2(vec< L, T, Q > const &x)'],['../a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b',1,'glm::length2(qua< T, Q > const &q)']]], - ['lerp',['lerp',['../a00248.html#ga6033dc0741051fa463a0a147ba29f293',1,'glm::lerp(qua< T, Q > const &x, qua< T, Q > const &y, T a)'],['../a00315.html#ga5494ba3a95ea6594c86fc75236886864',1,'glm::lerp(T x, T y, T a)'],['../a00315.html#gaa551c0a0e16d2d4608e49f7696df897f',1,'glm::lerp(const vec< 2, T, Q > &x, const vec< 2, T, Q > &y, T a)'],['../a00315.html#ga44a8b5fd776320f1713413dec959b32a',1,'glm::lerp(const vec< 3, T, Q > &x, const vec< 3, T, Q > &y, T a)'],['../a00315.html#ga89ac8e000199292ec7875519d27e214b',1,'glm::lerp(const vec< 4, T, Q > &x, const vec< 4, T, Q > &y, T a)'],['../a00315.html#gaf68de5baf72d16135368b8ef4f841604',1,'glm::lerp(const vec< 2, T, Q > &x, const vec< 2, T, Q > &y, const vec< 2, T, Q > &a)'],['../a00315.html#ga4ae1a616c8540a2649eab8e0cd051bb3',1,'glm::lerp(const vec< 3, T, Q > &x, const vec< 3, T, Q > &y, const vec< 3, T, Q > &a)'],['../a00315.html#gab5477ab69c40de4db5d58d3359529724',1,'glm::lerp(const vec< 4, T, Q > &x, const vec< 4, T, Q > &y, const vec< 4, T, Q > &a)'],['../a00317.html#gace8380112d16d33f520839cb35a4d173',1,'glm::lerp(tdualquat< T, Q > const &x, tdualquat< T, Q > const &y, T const &a)']]], - ['lessthan',['lessThan',['../a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4',1,'glm::lessThan(qua< T, Q > const &x, qua< T, Q > const &y)'],['../a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6',1,'glm::lessThan(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['lessthanequal',['lessThanEqual',['../a00299.html#gac00012eea281800d2403f4ea8443134d',1,'glm::lessThanEqual(qua< T, Q > const &x, qua< T, Q > const &y)'],['../a00374.html#gab0bdafc019d227257ff73fb5bcca1718',1,'glm::lessThanEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['levels',['levels',['../a00361.html#gaa8c377f4e63486db4fa872d77880da73',1,'glm']]], - ['lineargradient',['linearGradient',['../a00327.html#ga849241df1e55129b8ce9476200307419',1,'glm']]], - ['linearinterpolation',['linearInterpolation',['../a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649',1,'glm']]], - ['linearrand',['linearRand',['../a00300.html#ga04e241ab88374a477a2c2ceadd2fa03d',1,'glm::linearRand(genType Min, genType Max)'],['../a00300.html#ga94731130c298a9ff5e5025fdee6d97a0',1,'glm::linearRand(vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)']]], - ['lmaxnorm',['lMaxNorm',['../a00343.html#gad58a8231fc32e38104a9e1c4d3c0cb64',1,'glm::lMaxNorm(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)'],['../a00343.html#ga6968a324837a8e899396d44de23d5aae',1,'glm::lMaxNorm(vec< 3, T, Q > const &x)']]], - ['ln_5fln_5ftwo',['ln_ln_two',['../a00290.html#gaca94292c839ed31a405ab7a81ae7e850',1,'glm']]], - ['ln_5ften',['ln_ten',['../a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c',1,'glm']]], - ['ln_5ftwo',['ln_two',['../a00290.html#ga24f4d27765678116f41a2f336ab7975c',1,'glm']]], - ['log',['log',['../a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9',1,'glm::log(vec< L, T, Q > const &v)'],['../a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473',1,'glm::log(qua< T, Q > const &q)'],['../a00333.html#ga60a7b0a401da660869946b2b77c710c9',1,'glm::log(genType const &x, genType const &base)']]], - ['log2',['log2',['../a00242.html#ga82831c7d9cca777cebedfe03a19c8d75',1,'glm::log2(vec< L, T, Q > const &v)'],['../a00292.html#ga9bd682e74bfacb005c735305207ec417',1,'glm::log2(genIUType x)']]], - ['log_5fbase_2ehpp',['log_base.hpp',['../a00046.html',1,'']]], - ['lookat',['lookAt',['../a00247.html#gaa64aa951a0e99136bba9008d2b59c78e',1,'glm']]], - ['lookatlh',['lookAtLH',['../a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0',1,'glm']]], - ['lookatrh',['lookAtRH',['../a00247.html#gacfa12c8889c754846bc20c65d9b5c701',1,'glm']]], - ['lowestbitvalue',['lowestBitValue',['../a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f',1,'glm']]], - ['lowp_5fbvec1',['lowp_bvec1',['../a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9',1,'glm']]], - ['lowp_5fbvec2',['lowp_bvec2',['../a00282.html#ga5a5452140650988b94d5716e4d872465',1,'glm']]], - ['lowp_5fbvec3',['lowp_bvec3',['../a00282.html#ga79e0922a977662a8fd39d7829be3908b',1,'glm']]], - ['lowp_5fbvec4',['lowp_bvec4',['../a00282.html#ga15ac87724048ab7169bb5d3572939dd3',1,'glm']]], - ['lowp_5fddualquat',['lowp_ddualquat',['../a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a',1,'glm']]], - ['lowp_5fdmat2',['lowp_dmat2',['../a00284.html#gad8e2727a6e7aa68280245bb0022118e1',1,'glm']]], - ['lowp_5fdmat2x2',['lowp_dmat2x2',['../a00284.html#gac61b94f5d9775f83f321bac899322fe2',1,'glm']]], - ['lowp_5fdmat2x3',['lowp_dmat2x3',['../a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af',1,'glm']]], - ['lowp_5fdmat2x4',['lowp_dmat2x4',['../a00284.html#ga97507a31ecee8609887d0f23bbde92c7',1,'glm']]], - ['lowp_5fdmat3',['lowp_dmat3',['../a00284.html#ga0cab80beee64a5f8d2ae4e823983063a',1,'glm']]], - ['lowp_5fdmat3x2',['lowp_dmat3x2',['../a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b',1,'glm']]], - ['lowp_5fdmat3x3',['lowp_dmat3x3',['../a00284.html#gac017848a9df570f60916a21a297b1e8e',1,'glm']]], - ['lowp_5fdmat3x4',['lowp_dmat3x4',['../a00284.html#ga93add35d2a44c5830978b827e8c295e8',1,'glm']]], - ['lowp_5fdmat4',['lowp_dmat4',['../a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd',1,'glm']]], - ['lowp_5fdmat4x2',['lowp_dmat4x2',['../a00284.html#ga382dc5295cead78766239a8457abfa98',1,'glm']]], - ['lowp_5fdmat4x3',['lowp_dmat4x3',['../a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e',1,'glm']]], - ['lowp_5fdmat4x4',['lowp_dmat4x4',['../a00284.html#ga5b0413198b7e9f061f7534a221c9dac9',1,'glm']]], - ['lowp_5fdquat',['lowp_dquat',['../a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c',1,'glm']]], - ['lowp_5fdualquat',['lowp_dualquat',['../a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa',1,'glm']]], - ['lowp_5fdvec1',['lowp_dvec1',['../a00269.html#gaf906eb86b6e96c35138d0e4928e1435a',1,'glm']]], - ['lowp_5fdvec2',['lowp_dvec2',['../a00282.html#ga108086730d086b7f6f7a033955dfb9c3',1,'glm']]], - ['lowp_5fdvec3',['lowp_dvec3',['../a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2',1,'glm']]], - ['lowp_5fdvec4',['lowp_dvec4',['../a00282.html#ga0b4432cb8d910e406576d10d802e190d',1,'glm']]], - ['lowp_5ff32',['lowp_f32',['../a00304.html#gaeea53879fc327293cf3352a409b7867b',1,'glm']]], - ['lowp_5ff32mat2',['lowp_f32mat2',['../a00304.html#ga52409bc6d4a2ce3421526c069220d685',1,'glm']]], - ['lowp_5ff32mat2x2',['lowp_f32mat2x2',['../a00304.html#ga1d091b6abfba1772450e1745a06525bc',1,'glm']]], - ['lowp_5ff32mat2x3',['lowp_f32mat2x3',['../a00304.html#ga961ccb34cd1a5654c772c8709e001dc5',1,'glm']]], - ['lowp_5ff32mat2x4',['lowp_f32mat2x4',['../a00304.html#gacc6bf0209dda0c7c14851a646071c974',1,'glm']]], - ['lowp_5ff32mat3',['lowp_f32mat3',['../a00304.html#ga4187f89f196505b40e63f516139511e5',1,'glm']]], - ['lowp_5ff32mat3x2',['lowp_f32mat3x2',['../a00304.html#gac53f9d7ab04eace67adad026092fb1e8',1,'glm']]], - ['lowp_5ff32mat3x3',['lowp_f32mat3x3',['../a00304.html#ga841211b641cff1fcf861bdb14e5e4abc',1,'glm']]], - ['lowp_5ff32mat3x4',['lowp_f32mat3x4',['../a00304.html#ga21b1b22dec013a72656e3644baf8a1e1',1,'glm']]], - ['lowp_5ff32mat4',['lowp_f32mat4',['../a00304.html#ga766aed2871e6173a81011a877f398f04',1,'glm']]], - ['lowp_5ff32mat4x2',['lowp_f32mat4x2',['../a00304.html#gae6f3fcb702a666de07650c149cfa845a',1,'glm']]], - ['lowp_5ff32mat4x3',['lowp_f32mat4x3',['../a00304.html#gac21eda58a1475449a5709b412ebd776c',1,'glm']]], - ['lowp_5ff32mat4x4',['lowp_f32mat4x4',['../a00304.html#ga4143d129898f91545948c46859adce44',1,'glm']]], - ['lowp_5ff32quat',['lowp_f32quat',['../a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347',1,'glm']]], - ['lowp_5ff32vec1',['lowp_f32vec1',['../a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e',1,'glm']]], - ['lowp_5ff32vec2',['lowp_f32vec2',['../a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0',1,'glm']]], - ['lowp_5ff32vec3',['lowp_f32vec3',['../a00304.html#gaf739a2cd7b81783a43148b53e40d983b',1,'glm']]], - ['lowp_5ff32vec4',['lowp_f32vec4',['../a00304.html#ga4e2e1debe022074ab224c9faf856d374',1,'glm']]], - ['lowp_5ff64',['lowp_f64',['../a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679',1,'glm']]], - ['lowp_5ff64mat2',['lowp_f64mat2',['../a00304.html#gafc730f6b4242763b0eda0ffa25150292',1,'glm']]], - ['lowp_5ff64mat2x2',['lowp_f64mat2x2',['../a00304.html#ga771fda9109933db34f808d92b9b84d7e',1,'glm']]], - ['lowp_5ff64mat2x3',['lowp_f64mat2x3',['../a00304.html#ga39e90adcffe33264bd608fa9c6bd184b',1,'glm']]], - ['lowp_5ff64mat2x4',['lowp_f64mat2x4',['../a00304.html#ga50265a202fbfe0a25fc70066c31d9336',1,'glm']]], - ['lowp_5ff64mat3',['lowp_f64mat3',['../a00304.html#ga58119a41d143ebaea0df70fe882e8a40',1,'glm']]], - ['lowp_5ff64mat3x2',['lowp_f64mat3x2',['../a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad',1,'glm']]], - ['lowp_5ff64mat3x3',['lowp_f64mat3x3',['../a00304.html#gac8f8a12ee03105ef8861dc652434e3b7',1,'glm']]], - ['lowp_5ff64mat3x4',['lowp_f64mat3x4',['../a00304.html#gade8d1edfb23996ab6c622e65e3893271',1,'glm']]], - ['lowp_5ff64mat4',['lowp_f64mat4',['../a00304.html#ga7451266e67794bd1125163502bc4a570',1,'glm']]], - ['lowp_5ff64mat4x2',['lowp_f64mat4x2',['../a00304.html#gab0cecb80fd106bc369b9e46a165815ce',1,'glm']]], - ['lowp_5ff64mat4x3',['lowp_f64mat4x3',['../a00304.html#gae731613b25db3a5ef5a05d21e57a57d3',1,'glm']]], - ['lowp_5ff64mat4x4',['lowp_f64mat4x4',['../a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95',1,'glm']]], - ['lowp_5ff64quat',['lowp_f64quat',['../a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae',1,'glm']]], - ['lowp_5ff64vec1',['lowp_f64vec1',['../a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b',1,'glm']]], - ['lowp_5ff64vec2',['lowp_f64vec2',['../a00304.html#ga4e641a54d70c81eabf56c25c966d04bd',1,'glm']]], - ['lowp_5ff64vec3',['lowp_f64vec3',['../a00304.html#gae7a4711107b7d078fc5f03ce2227b90b',1,'glm']]], - ['lowp_5ff64vec4',['lowp_f64vec4',['../a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4',1,'glm']]], - ['lowp_5ffdualquat',['lowp_fdualquat',['../a00317.html#gaa38f671be25a7f3b136a452a8bb42860',1,'glm']]], - ['lowp_5ffloat32',['lowp_float32',['../a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8',1,'glm']]], - ['lowp_5ffloat32_5ft',['lowp_float32_t',['../a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b',1,'glm']]], - ['lowp_5ffloat64',['lowp_float64',['../a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f',1,'glm']]], - ['lowp_5ffloat64_5ft',['lowp_float64_t',['../a00304.html#ga7286a37076a09da140df18bfa75d4e38',1,'glm']]], - ['lowp_5ffmat2',['lowp_fmat2',['../a00304.html#ga5bba0ce31210e274f73efacd3364c03f',1,'glm']]], - ['lowp_5ffmat2x2',['lowp_fmat2x2',['../a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066',1,'glm']]], - ['lowp_5ffmat2x3',['lowp_fmat2x3',['../a00304.html#ga71cdb53801ed4c3aadb3603c04723210',1,'glm']]], - ['lowp_5ffmat2x4',['lowp_fmat2x4',['../a00304.html#gaab217601c74974a84acbca428123ecf7',1,'glm']]], - ['lowp_5ffmat3',['lowp_fmat3',['../a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b',1,'glm']]], - ['lowp_5ffmat3x2',['lowp_fmat3x2',['../a00304.html#ga49b98e7d71804af45d86886a489e633c',1,'glm']]], - ['lowp_5ffmat3x3',['lowp_fmat3x3',['../a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4',1,'glm']]], - ['lowp_5ffmat3x4',['lowp_fmat3x4',['../a00304.html#ga28733aec7288191b314d42154fd0b690',1,'glm']]], - ['lowp_5ffmat4',['lowp_fmat4',['../a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f',1,'glm']]], - ['lowp_5ffmat4x2',['lowp_fmat4x2',['../a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c',1,'glm']]], - ['lowp_5ffmat4x3',['lowp_fmat4x3',['../a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444',1,'glm']]], - ['lowp_5ffmat4x4',['lowp_fmat4x4',['../a00304.html#gac2f5263708ac847b361a9841e74ddf9f',1,'glm']]], - ['lowp_5ffvec1',['lowp_fvec1',['../a00304.html#ga346b2336fff168a7e0df1583aae3e5a5',1,'glm']]], - ['lowp_5ffvec2',['lowp_fvec2',['../a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d',1,'glm']]], - ['lowp_5ffvec3',['lowp_fvec3',['../a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa',1,'glm']]], - ['lowp_5ffvec4',['lowp_fvec4',['../a00304.html#ga755484ffbe39ae3db2875953ed04e7b7',1,'glm']]], - ['lowp_5fi16',['lowp_i16',['../a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7',1,'glm']]], - ['lowp_5fi16vec1',['lowp_i16vec1',['../a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6',1,'glm']]], - ['lowp_5fi16vec2',['lowp_i16vec2',['../a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b',1,'glm']]], - ['lowp_5fi16vec3',['lowp_i16vec3',['../a00304.html#gab69ef9cbc2a9214bf5596c528c801b72',1,'glm']]], - ['lowp_5fi16vec4',['lowp_i16vec4',['../a00304.html#ga1d47d94d17c2406abdd1f087a816e387',1,'glm']]], - ['lowp_5fi32',['lowp_i32',['../a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac',1,'glm']]], - ['lowp_5fi32vec1',['lowp_i32vec1',['../a00304.html#gae31ac3608cf643ceffd6554874bec4a0',1,'glm']]], - ['lowp_5fi32vec2',['lowp_i32vec2',['../a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd',1,'glm']]], - ['lowp_5fi32vec3',['lowp_i32vec3',['../a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d',1,'glm']]], - ['lowp_5fi32vec4',['lowp_i32vec4',['../a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08',1,'glm']]], - ['lowp_5fi64',['lowp_i64',['../a00304.html#ga354736e0c645099cd44c42fb2f87c2b8',1,'glm']]], - ['lowp_5fi64vec1',['lowp_i64vec1',['../a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437',1,'glm']]], - ['lowp_5fi64vec2',['lowp_i64vec2',['../a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c',1,'glm']]], - ['lowp_5fi64vec3',['lowp_i64vec3',['../a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c',1,'glm']]], - ['lowp_5fi64vec4',['lowp_i64vec4',['../a00304.html#gabb4229a4c1488bf063eed0c45355bb9c',1,'glm']]], - ['lowp_5fi8',['lowp_i8',['../a00304.html#ga552a6bde5e75984efb0f863278da2e54',1,'glm']]], - ['lowp_5fi8vec1',['lowp_i8vec1',['../a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c',1,'glm']]], - ['lowp_5fi8vec2',['lowp_i8vec2',['../a00304.html#gac03e5099d27eeaa74b6016ea435a1df2',1,'glm']]], - ['lowp_5fi8vec3',['lowp_i8vec3',['../a00304.html#gae2f43ace6b5b33ab49516d9e40af1845',1,'glm']]], - ['lowp_5fi8vec4',['lowp_i8vec4',['../a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5',1,'glm']]], - ['lowp_5fimat2',['lowp_imat2',['../a00294.html#gaa0bff0be804142bb16d441aec0a7962e',1,'glm']]], - ['lowp_5fimat2x2',['lowp_imat2x2',['../a00294.html#ga92b95b679975d408645547ab45a8dcd8',1,'glm']]], - ['lowp_5fimat2x3',['lowp_imat2x3',['../a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65',1,'glm']]], - ['lowp_5fimat2x4',['lowp_imat2x4',['../a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e',1,'glm']]], - ['lowp_5fimat3',['lowp_imat3',['../a00294.html#ga69bfe668f4170379fc1f35d82b060c43',1,'glm']]], - ['lowp_5fimat3x2',['lowp_imat3x2',['../a00294.html#ga33db8f27491d30906cd37c0d86b3f432',1,'glm']]], - ['lowp_5fimat3x3',['lowp_imat3x3',['../a00294.html#ga664f061df00020048c3f8530329ace45',1,'glm']]], - ['lowp_5fimat3x4',['lowp_imat3x4',['../a00294.html#ga9273faab33623d944af4080befbb2c80',1,'glm']]], - ['lowp_5fimat4',['lowp_imat4',['../a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c',1,'glm']]], - ['lowp_5fimat4x2',['lowp_imat4x2',['../a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09',1,'glm']]], - ['lowp_5fimat4x3',['lowp_imat4x3',['../a00294.html#ga8f40483a3ae634ead8ad22272c543a33',1,'glm']]], - ['lowp_5fimat4x4',['lowp_imat4x4',['../a00294.html#gaf65677e53ac8e31a107399340d5e2451',1,'glm']]], - ['lowp_5fint16',['lowp_int16',['../a00304.html#ga698e36b01167fc0f037889334dce8def',1,'glm']]], - ['lowp_5fint16_5ft',['lowp_int16_t',['../a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a',1,'glm']]], - ['lowp_5fint32',['lowp_int32',['../a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02',1,'glm']]], - ['lowp_5fint32_5ft',['lowp_int32_t',['../a00304.html#ga0350631d35ff800e6133ac6243b13cbc',1,'glm']]], - ['lowp_5fint64',['lowp_int64',['../a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c',1,'glm']]], - ['lowp_5fint64_5ft',['lowp_int64_t',['../a00304.html#gaebf341fc4a5be233f7dde962c2e33847',1,'glm']]], - ['lowp_5fint8',['lowp_int8',['../a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6',1,'glm']]], - ['lowp_5fint8_5ft',['lowp_int8_t',['../a00304.html#ga119c41d73fe9977358174eb3ac1035a3',1,'glm']]], - ['lowp_5fivec1',['lowp_ivec1',['../a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc',1,'glm']]], - ['lowp_5fivec2',['lowp_ivec2',['../a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0',1,'glm']]], - ['lowp_5fivec3',['lowp_ivec3',['../a00282.html#gac1a86a75b3c68ebb704d7094043669d6',1,'glm']]], - ['lowp_5fivec4',['lowp_ivec4',['../a00282.html#ga27fc23da61859cd6356326c5f1c796de',1,'glm']]], - ['lowp_5fmat2',['lowp_mat2',['../a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a',1,'glm']]], - ['lowp_5fmat2x2',['lowp_mat2x2',['../a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694',1,'glm']]], - ['lowp_5fmat2x3',['lowp_mat2x3',['../a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb',1,'glm']]], - ['lowp_5fmat2x4',['lowp_mat2x4',['../a00284.html#gade27f8324a16626cbce5d3e7da66b070',1,'glm']]], - ['lowp_5fmat3',['lowp_mat3',['../a00284.html#ga6271ebc85ed778ccc15458c3d86fc854',1,'glm']]], - ['lowp_5fmat3x2',['lowp_mat3x2',['../a00284.html#gaabf6cf90fd31efe25c94965507e98390',1,'glm']]], - ['lowp_5fmat3x3',['lowp_mat3x3',['../a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84',1,'glm']]], - ['lowp_5fmat3x4',['lowp_mat3x4',['../a00284.html#gac5fc6786688eff02904ca5e7d6960092',1,'glm']]], - ['lowp_5fmat4',['lowp_mat4',['../a00284.html#ga2dedee030500865267cd5851c00c139d',1,'glm']]], - ['lowp_5fmat4x2',['lowp_mat4x2',['../a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21',1,'glm']]], - ['lowp_5fmat4x3',['lowp_mat4x3',['../a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77',1,'glm']]], - ['lowp_5fmat4x4',['lowp_mat4x4',['../a00284.html#ga686468a9a815bd4db8cddae42a6d6b87',1,'glm']]], - ['lowp_5fquat',['lowp_quat',['../a00253.html#gade62c5316c1c11a79c34c00c189558eb',1,'glm']]], - ['lowp_5fu16',['lowp_u16',['../a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126',1,'glm']]], - ['lowp_5fu16vec1',['lowp_u16vec1',['../a00304.html#gaa6aab4ee7189b86716f5d7015d43021d',1,'glm']]], - ['lowp_5fu16vec2',['lowp_u16vec2',['../a00304.html#ga2a7d997da9ac29cb931e35bd399f58df',1,'glm']]], - ['lowp_5fu16vec3',['lowp_u16vec3',['../a00304.html#gac0253db6c3d3bae1f591676307a9dd8c',1,'glm']]], - ['lowp_5fu16vec4',['lowp_u16vec4',['../a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1',1,'glm']]], - ['lowp_5fu32',['lowp_u32',['../a00304.html#ga4f072ada9552e1e480bbb3b1acde5250',1,'glm']]], - ['lowp_5fu32vec1',['lowp_u32vec1',['../a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4',1,'glm']]], - ['lowp_5fu32vec2',['lowp_u32vec2',['../a00304.html#gaf7e286e81347011e257ee779524e73b9',1,'glm']]], - ['lowp_5fu32vec3',['lowp_u32vec3',['../a00304.html#gad3ad390560a671b1f676fbf03cd3aa15',1,'glm']]], - ['lowp_5fu32vec4',['lowp_u32vec4',['../a00304.html#ga4502885718742aa238c36a312c3f3f20',1,'glm']]], - ['lowp_5fu64',['lowp_u64',['../a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed',1,'glm']]], - ['lowp_5fu64vec1',['lowp_u64vec1',['../a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6',1,'glm']]], - ['lowp_5fu64vec2',['lowp_u64vec2',['../a00304.html#ga581485db4ba6ddb501505ee711fd8e42',1,'glm']]], - ['lowp_5fu64vec3',['lowp_u64vec3',['../a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1',1,'glm']]], - ['lowp_5fu64vec4',['lowp_u64vec4',['../a00304.html#ga6fccc89c34045c86339f6fa781ce96de',1,'glm']]], - ['lowp_5fu8',['lowp_u8',['../a00304.html#ga1b09f03da7ac43055c68a349d5445083',1,'glm']]], - ['lowp_5fu8vec1',['lowp_u8vec1',['../a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec',1,'glm']]], - ['lowp_5fu8vec2',['lowp_u8vec2',['../a00304.html#gae6f63fa38635431e51a8f2602f15c566',1,'glm']]], - ['lowp_5fu8vec3',['lowp_u8vec3',['../a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd',1,'glm']]], - ['lowp_5fu8vec4',['lowp_u8vec4',['../a00304.html#ga9910927f3a4d1addb3da6a82542a8287',1,'glm']]], - ['lowp_5fuint16',['lowp_uint16',['../a00304.html#gad68bfd9f881856fc863a6ebca0b67f78',1,'glm']]], - ['lowp_5fuint16_5ft',['lowp_uint16_t',['../a00304.html#ga91c4815f93177eb423362fd296a87e9f',1,'glm']]], - ['lowp_5fuint32',['lowp_uint32',['../a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b',1,'glm']]], - ['lowp_5fuint32_5ft',['lowp_uint32_t',['../a00304.html#gaf1b735b4b1145174f4e4167d13778f9b',1,'glm']]], - ['lowp_5fuint64',['lowp_uint64',['../a00304.html#gaa212b805736a759998e312cbdd550fae',1,'glm']]], - ['lowp_5fuint64_5ft',['lowp_uint64_t',['../a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153',1,'glm']]], - ['lowp_5fuint8',['lowp_uint8',['../a00304.html#gaf49470869e9be2c059629b250619804e',1,'glm']]], - ['lowp_5fuint8_5ft',['lowp_uint8_t',['../a00304.html#ga667b2ece2b258be898812dc2177995d1',1,'glm']]], - ['lowp_5fumat2',['lowp_umat2',['../a00294.html#gaf2fba702d990437fc88ff3f3a76846ee',1,'glm']]], - ['lowp_5fumat2x2',['lowp_umat2x2',['../a00294.html#ga7b2e9d89745f7175051284e54c81d81c',1,'glm']]], - ['lowp_5fumat2x3',['lowp_umat2x3',['../a00294.html#ga3072f90fd86f17a862e21589fbb14c0f',1,'glm']]], - ['lowp_5fumat2x4',['lowp_umat2x4',['../a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d',1,'glm']]], - ['lowp_5fumat3',['lowp_umat3',['../a00294.html#gaf1145f72bcdd590f5808c4bc170c2924',1,'glm']]], - ['lowp_5fumat3x2',['lowp_umat3x2',['../a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b',1,'glm']]], - ['lowp_5fumat3x3',['lowp_umat3x3',['../a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5',1,'glm']]], - ['lowp_5fumat3x4',['lowp_umat3x4',['../a00294.html#gaec3d624306bd59649f021864709d56b5',1,'glm']]], - ['lowp_5fumat4',['lowp_umat4',['../a00294.html#gac092c6105827bf9ea080db38074b78eb',1,'glm']]], - ['lowp_5fumat4x2',['lowp_umat4x2',['../a00294.html#ga7716c2b210d141846f1ac4e774adef5e',1,'glm']]], - ['lowp_5fumat4x3',['lowp_umat4x3',['../a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff',1,'glm']]], - ['lowp_5fumat4x4',['lowp_umat4x4',['../a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0',1,'glm']]], - ['lowp_5fuvec1',['lowp_uvec1',['../a00277.html#ga8bf3fc8a7863d140f48b29341c750402',1,'glm']]], - ['lowp_5fuvec2',['lowp_uvec2',['../a00282.html#ga752ee45136011301b64afd8c310c47a4',1,'glm']]], - ['lowp_5fuvec3',['lowp_uvec3',['../a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292',1,'glm']]], - ['lowp_5fuvec4',['lowp_uvec4',['../a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e',1,'glm']]], - ['lowp_5fvec1',['lowp_vec1',['../a00271.html#ga0a57630f03031706b1d26a7d70d9184c',1,'glm']]], - ['lowp_5fvec2',['lowp_vec2',['../a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9',1,'glm']]], - ['lowp_5fvec3',['lowp_vec3',['../a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79',1,'glm']]], - ['lowp_5fvec4',['lowp_vec4',['../a00282.html#gace3acb313c800552a9411953eb8b2ed7',1,'glm']]], - ['luminosity',['luminosity',['../a00312.html#gad028e0a4f1a9c812b39439b746295b34',1,'glm']]], - ['lxnorm',['lxNorm',['../a00343.html#gacad23d30497eb16f67709f2375d1f66a',1,'glm::lxNorm(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y, unsigned int Depth)'],['../a00343.html#gac61b6d81d796d6eb4d4183396a19ab91',1,'glm::lxNorm(vec< 3, T, Q > const &x, unsigned int Depth)']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_a.html b/tests/OpenGL/package/glm/doc/api/search/all_a.html deleted file mode 100644 index 4a25af1c..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_a.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_a.js b/tests/OpenGL/package/glm/doc/api/search/all_a.js deleted file mode 100644 index df2ba5cb..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_a.js +++ /dev/null @@ -1,297 +0,0 @@ -var searchData= -[ - ['matrix_20functions',['Matrix functions',['../a00371.html',1,'']]], - ['matrix_20types',['Matrix types',['../a00283.html',1,'']]], - ['matrix_20types_20with_20precision_20qualifiers',['Matrix types with precision qualifiers',['../a00284.html',1,'']]], - ['make_5fmat2',['make_mat2',['../a00305.html#ga04409e74dc3da251d2501acf5b4b546c',1,'glm']]], - ['make_5fmat2x2',['make_mat2x2',['../a00305.html#gae49e1c7bcd5abec74d1c34155031f663',1,'glm']]], - ['make_5fmat2x3',['make_mat2x3',['../a00305.html#ga21982104164789cf8985483aaefc25e8',1,'glm']]], - ['make_5fmat2x4',['make_mat2x4',['../a00305.html#ga078b862c90b0e9a79ed43a58997d8388',1,'glm']]], - ['make_5fmat3',['make_mat3',['../a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f',1,'glm']]], - ['make_5fmat3x2',['make_mat3x2',['../a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8',1,'glm']]], - ['make_5fmat3x3',['make_mat3x3',['../a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536',1,'glm']]], - ['make_5fmat3x4',['make_mat3x4',['../a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b',1,'glm']]], - ['make_5fmat4',['make_mat4',['../a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a',1,'glm']]], - ['make_5fmat4x2',['make_mat4x2',['../a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c',1,'glm']]], - ['make_5fmat4x3',['make_mat4x3',['../a00305.html#ga0330bf6640092d7985fac92927bbd42b',1,'glm']]], - ['make_5fmat4x4',['make_mat4x4',['../a00305.html#ga8f084be30e404844bfbb4a551ac2728c',1,'glm']]], - ['make_5fquat',['make_quat',['../a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246',1,'glm']]], - ['make_5fvec1',['make_vec1',['../a00305.html#ga4135f03f3049f0a4eb76545c4967957c',1,'glm::make_vec1(vec< 1, T, Q > const &v)'],['../a00305.html#ga13c92b81e55f201b052a6404d57da220',1,'glm::make_vec1(vec< 2, T, Q > const &v)'],['../a00305.html#ga3c23cc74086d361e22bbd5e91a334e03',1,'glm::make_vec1(vec< 3, T, Q > const &v)'],['../a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419',1,'glm::make_vec1(vec< 4, T, Q > const &v)']]], - ['make_5fvec2',['make_vec2',['../a00305.html#ga8476d0e6f1b9b4a6193cc25f59d8a896',1,'glm::make_vec2(vec< 1, T, Q > const &v)'],['../a00305.html#gae54bd325a08ad26edf63929201adebc7',1,'glm::make_vec2(vec< 2, T, Q > const &v)'],['../a00305.html#ga0084fea4694cf47276e9cccbe7b1015a',1,'glm::make_vec2(vec< 3, T, Q > const &v)'],['../a00305.html#ga2b81f71f3a222fe5bba81e3983751249',1,'glm::make_vec2(vec< 4, T, Q > const &v)'],['../a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824',1,'glm::make_vec2(T const *const ptr)']]], - ['make_5fvec3',['make_vec3',['../a00305.html#ga9147e4b3a5d0f4772edfbfd179d7ea0b',1,'glm::make_vec3(vec< 1, T, Q > const &v)'],['../a00305.html#ga482b60a842a5b154d3eed392417a9511',1,'glm::make_vec3(vec< 2, T, Q > const &v)'],['../a00305.html#gacd57046034df557b8b1c457f58613623',1,'glm::make_vec3(vec< 3, T, Q > const &v)'],['../a00305.html#ga8b589ed7d41a298b516d2a69169248f1',1,'glm::make_vec3(vec< 4, T, Q > const &v)'],['../a00305.html#gad9e0d36ff489cb30c65ad1fa40351651',1,'glm::make_vec3(T const *const ptr)']]], - ['make_5fvec4',['make_vec4',['../a00305.html#ga600cb97f70c5d50d3a4a145e1cafbf37',1,'glm::make_vec4(vec< 1, T, Q > const &v)'],['../a00305.html#gaa9bd116caf28196fd1cf00b278286fa7',1,'glm::make_vec4(vec< 2, T, Q > const &v)'],['../a00305.html#ga4036328ba4702c74cbdfad1fc03d1b8f',1,'glm::make_vec4(vec< 3, T, Q > const &v)'],['../a00305.html#gaa95cb15732f708f613e65a0578895ae5',1,'glm::make_vec4(vec< 4, T, Q > const &v)'],['../a00305.html#ga63f576518993efc22a969f18f80e29bb',1,'glm::make_vec4(T const *const ptr)']]], - ['mask',['mask',['../a00288.html#gad7eba518a0b71662114571ee76939f8a',1,'glm::mask(genIUType Bits)'],['../a00288.html#ga2e64e3b922a296033b825311e7f5fff1',1,'glm::mask(vec< L, T, Q > const &v)']]], - ['mat2',['mat2',['../a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba',1,'glm']]], - ['mat2x2',['mat2x2',['../a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb',1,'glm']]], - ['mat2x2_2ehpp',['mat2x2.hpp',['../a00048.html',1,'']]], - ['mat2x3',['mat2x3',['../a00283.html#ga493ab21243abe564b3f7d381e677d29a',1,'glm']]], - ['mat2x3_2ehpp',['mat2x3.hpp',['../a00049.html',1,'']]], - ['mat2x4',['mat2x4',['../a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40',1,'glm']]], - ['mat2x4_2ehpp',['mat2x4.hpp',['../a00050.html',1,'']]], - ['mat2x4_5fcast',['mat2x4_cast',['../a00317.html#gae99d143b37f9cad4cd9285571aab685a',1,'glm']]], - ['mat3',['mat3',['../a00283.html#gaefb0fc7a4960b782c18708bb6b655262',1,'glm']]], - ['mat3_5fcast',['mat3_cast',['../a00299.html#ga333ab70047fbe4132406100c292dbc89',1,'glm']]], - ['mat3x2',['mat3x2',['../a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2',1,'glm']]], - ['mat3x2_2ehpp',['mat3x2.hpp',['../a00051.html',1,'']]], - ['mat3x3',['mat3x3',['../a00283.html#gab91887d7565059dac640e3a1921c914a',1,'glm']]], - ['mat3x3_2ehpp',['mat3x3.hpp',['../a00052.html',1,'']]], - ['mat3x4',['mat3x4',['../a00283.html#gaf991cad0b34f64e33af186326dbc4d66',1,'glm']]], - ['mat3x4_2ehpp',['mat3x4.hpp',['../a00053.html',1,'']]], - ['mat3x4_5fcast',['mat3x4_cast',['../a00317.html#gaf59f5bb69620d2891c3795c6f2639179',1,'glm']]], - ['mat4',['mat4',['../a00283.html#ga0db98d836c5549d31cf64ecd043b7af7',1,'glm']]], - ['mat4_5fcast',['mat4_cast',['../a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3',1,'glm']]], - ['mat4x2',['mat4x2',['../a00283.html#gad941c947ad6cdd117a0e8554a4754983',1,'glm']]], - ['mat4x2_2ehpp',['mat4x2.hpp',['../a00054.html',1,'']]], - ['mat4x3',['mat4x3',['../a00283.html#gac7574544bb94777bdbd2eb224eb72fd0',1,'glm']]], - ['mat4x3_2ehpp',['mat4x3.hpp',['../a00055.html',1,'']]], - ['mat4x4',['mat4x4',['../a00283.html#gab2d35cc2655f44d60958d60a1de34e81',1,'glm']]], - ['mat4x4_2ehpp',['mat4x4.hpp',['../a00056.html',1,'']]], - ['matrix_2ehpp',['matrix.hpp',['../a00057.html',1,'']]], - ['matrix_5faccess_2ehpp',['matrix_access.hpp',['../a00058.html',1,'']]], - ['matrix_5fclip_5fspace_2ehpp',['matrix_clip_space.hpp',['../a00059.html',1,'']]], - ['matrix_5fcommon_2ehpp',['matrix_common.hpp',['../a00060.html',1,'']]], - ['matrix_5fcross_5fproduct_2ehpp',['matrix_cross_product.hpp',['../a00061.html',1,'']]], - ['matrix_5fdecompose_2ehpp',['matrix_decompose.hpp',['../a00062.html',1,'']]], - ['matrix_5fdouble2x2_2ehpp',['matrix_double2x2.hpp',['../a00063.html',1,'']]], - ['matrix_5fdouble2x2_5fprecision_2ehpp',['matrix_double2x2_precision.hpp',['../a00064.html',1,'']]], - ['matrix_5fdouble2x3_2ehpp',['matrix_double2x3.hpp',['../a00065.html',1,'']]], - ['matrix_5fdouble2x3_5fprecision_2ehpp',['matrix_double2x3_precision.hpp',['../a00066.html',1,'']]], - ['matrix_5fdouble2x4_2ehpp',['matrix_double2x4.hpp',['../a00067.html',1,'']]], - ['matrix_5fdouble2x4_5fprecision_2ehpp',['matrix_double2x4_precision.hpp',['../a00068.html',1,'']]], - ['matrix_5fdouble3x2_2ehpp',['matrix_double3x2.hpp',['../a00069.html',1,'']]], - ['matrix_5fdouble3x2_5fprecision_2ehpp',['matrix_double3x2_precision.hpp',['../a00070.html',1,'']]], - ['matrix_5fdouble3x3_2ehpp',['matrix_double3x3.hpp',['../a00071.html',1,'']]], - ['matrix_5fdouble3x3_5fprecision_2ehpp',['matrix_double3x3_precision.hpp',['../a00072.html',1,'']]], - ['matrix_5fdouble3x4_2ehpp',['matrix_double3x4.hpp',['../a00073.html',1,'']]], - ['matrix_5fdouble3x4_5fprecision_2ehpp',['matrix_double3x4_precision.hpp',['../a00074.html',1,'']]], - ['matrix_5fdouble4x2_2ehpp',['matrix_double4x2.hpp',['../a00075.html',1,'']]], - ['matrix_5fdouble4x2_5fprecision_2ehpp',['matrix_double4x2_precision.hpp',['../a00076.html',1,'']]], - ['matrix_5fdouble4x3_2ehpp',['matrix_double4x3.hpp',['../a00077.html',1,'']]], - ['matrix_5fdouble4x3_5fprecision_2ehpp',['matrix_double4x3_precision.hpp',['../a00078.html',1,'']]], - ['matrix_5fdouble4x4_2ehpp',['matrix_double4x4.hpp',['../a00079.html',1,'']]], - ['matrix_5fdouble4x4_5fprecision_2ehpp',['matrix_double4x4_precision.hpp',['../a00080.html',1,'']]], - ['matrix_5ffactorisation_2ehpp',['matrix_factorisation.hpp',['../a00081.html',1,'']]], - ['matrix_5ffloat2x2_2ehpp',['matrix_float2x2.hpp',['../a00082.html',1,'']]], - ['matrix_5ffloat2x2_5fprecision_2ehpp',['matrix_float2x2_precision.hpp',['../a00083.html',1,'']]], - ['matrix_5ffloat2x3_2ehpp',['matrix_float2x3.hpp',['../a00084.html',1,'']]], - ['matrix_5ffloat2x3_5fprecision_2ehpp',['matrix_float2x3_precision.hpp',['../a00085.html',1,'']]], - ['matrix_5ffloat2x4_2ehpp',['matrix_float2x4.hpp',['../a00086.html',1,'']]], - ['matrix_5ffloat2x4_5fprecision_2ehpp',['matrix_float2x4_precision.hpp',['../a00087.html',1,'']]], - ['matrix_5ffloat3x2_2ehpp',['matrix_float3x2.hpp',['../a00088.html',1,'']]], - ['matrix_5ffloat3x2_5fprecision_2ehpp',['matrix_float3x2_precision.hpp',['../a00089.html',1,'']]], - ['matrix_5ffloat3x3_2ehpp',['matrix_float3x3.hpp',['../a00090.html',1,'']]], - ['matrix_5ffloat3x3_5fprecision_2ehpp',['matrix_float3x3_precision.hpp',['../a00091.html',1,'']]], - ['matrix_5ffloat3x4_2ehpp',['matrix_float3x4.hpp',['../a00092.html',1,'']]], - ['matrix_5ffloat3x4_5fprecision_2ehpp',['matrix_float3x4_precision.hpp',['../a00093.html',1,'']]], - ['matrix_5ffloat4x2_2ehpp',['matrix_float4x2.hpp',['../a00094.html',1,'']]], - ['matrix_5ffloat4x3_2ehpp',['matrix_float4x3.hpp',['../a00096.html',1,'']]], - ['matrix_5ffloat4x3_5fprecision_2ehpp',['matrix_float4x3_precision.hpp',['../a00097.html',1,'']]], - ['matrix_5ffloat4x4_2ehpp',['matrix_float4x4.hpp',['../a00098.html',1,'']]], - ['matrix_5ffloat4x4_5fprecision_2ehpp',['matrix_float4x4_precision.hpp',['../a00099.html',1,'']]], - ['matrix_5finteger_2ehpp',['matrix_integer.hpp',['../a00100.html',1,'']]], - ['matrix_5finterpolation_2ehpp',['matrix_interpolation.hpp',['../a00101.html',1,'']]], - ['matrix_5finverse_2ehpp',['matrix_inverse.hpp',['../a00102.html',1,'']]], - ['matrix_5fmajor_5fstorage_2ehpp',['matrix_major_storage.hpp',['../a00103.html',1,'']]], - ['matrix_5foperation_2ehpp',['matrix_operation.hpp',['../a00104.html',1,'']]], - ['matrix_5fprojection_2ehpp',['matrix_projection.hpp',['../a00105.html',1,'']]], - ['matrix_5fquery_2ehpp',['matrix_query.hpp',['../a00106.html',1,'']]], - ['matrix_5frelational_2ehpp',['matrix_relational.hpp',['../a00107.html',1,'']]], - ['matrix_5ftransform_5f2d_2ehpp',['matrix_transform_2d.hpp',['../a00110.html',1,'']]], - ['matrixcompmult',['matrixCompMult',['../a00371.html#gaf14569404c779fedca98d0b9b8e58c1f',1,'glm']]], - ['matrixcross3',['matrixCross3',['../a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff',1,'glm']]], - ['matrixcross4',['matrixCross4',['../a00334.html#ga20057fff91ddafa102934adb25458cde',1,'glm']]], - ['max',['max',['../a00241.html#gae02d42887fc5570451f880e3c624b9ac',1,'glm::max(genType x, genType y)'],['../a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31',1,'glm::max(vec< L, T, Q > const &x, T y)'],['../a00241.html#gac1fec0c3303b572a6d4697a637213870',1,'glm::max(vec< L, T, Q > const &x, vec< L, T, Q > const &y)'],['../a00258.html#gaa20839d9ab14514f8966f69877ea0de8',1,'glm::max(T a, T b, T c)'],['../a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67',1,'glm::max(T a, T b, T c, T d)'],['../a00267.html#gaa45d34f6a2906f8bf58ab2ba5429234d',1,'glm::max(vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &z)'],['../a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10',1,'glm::max(vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &z, vec< L, T, Q > const &w)'],['../a00321.html#ga04991ccb9865c4c4e58488cfb209ce69',1,'glm::max(T const &x, T const &y, T const &z)'],['../a00321.html#gae1b7bbe5c91de4924835ea3e14530744',1,'glm::max(C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)'],['../a00321.html#gaf832e9d4ab4826b2dda2fda25935a3a4',1,'glm::max(C< T > const &x, C< T > const &y, C< T > const &z)'],['../a00321.html#ga78e04a0cef1c4863fcae1a2130500d87',1,'glm::max(T const &x, T const &y, T const &z, T const &w)'],['../a00321.html#ga7cca8b53cfda402040494cdf40fbdf4a',1,'glm::max(C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)'],['../a00321.html#gaacffbc466c2d08c140b181e7fd8a4858',1,'glm::max(C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)']]], - ['mediump_5fbvec1',['mediump_bvec1',['../a00266.html#ga7b4ccb989ba179fa44f7b0879c782621',1,'glm']]], - ['mediump_5fbvec2',['mediump_bvec2',['../a00282.html#ga1e743764869efa9223c2bcefccedaddc',1,'glm']]], - ['mediump_5fbvec3',['mediump_bvec3',['../a00282.html#ga50c783c25082882ef00fe2e5cddba4aa',1,'glm']]], - ['mediump_5fbvec4',['mediump_bvec4',['../a00282.html#ga0be2c682258604a35004f088782a9645',1,'glm']]], - ['mediump_5fddualquat',['mediump_ddualquat',['../a00317.html#ga0fb11e48e2d16348ccb06a25213641b4',1,'glm']]], - ['mediump_5fdmat2',['mediump_dmat2',['../a00284.html#ga6205fd19be355600334edef6af0b27cb',1,'glm']]], - ['mediump_5fdmat2x2',['mediump_dmat2x2',['../a00284.html#ga51dc36a7719cb458fa5114831c20d64f',1,'glm']]], - ['mediump_5fdmat2x3',['mediump_dmat2x3',['../a00284.html#ga741e05adf1f12d5d913f67088db1009a',1,'glm']]], - ['mediump_5fdmat2x4',['mediump_dmat2x4',['../a00284.html#ga685bda24922d112786af385deb4deb43',1,'glm']]], - ['mediump_5fdmat3',['mediump_dmat3',['../a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2',1,'glm']]], - ['mediump_5fdmat3x2',['mediump_dmat3x2',['../a00284.html#ga2076157df85e49b8c021e03e46a376c1',1,'glm']]], - ['mediump_5fdmat3x3',['mediump_dmat3x3',['../a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6',1,'glm']]], - ['mediump_5fdmat3x4',['mediump_dmat3x4',['../a00284.html#ga3a132bd05675c2e46556f67cf738600b',1,'glm']]], - ['mediump_5fdmat4',['mediump_dmat4',['../a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378',1,'glm']]], - ['mediump_5fdmat4x2',['mediump_dmat4x2',['../a00284.html#gae220fa4c5a7b13ef2ab0420340de645c',1,'glm']]], - ['mediump_5fdmat4x3',['mediump_dmat4x3',['../a00284.html#ga43ef60e4d996db15c9c8f069a96ff763',1,'glm']]], - ['mediump_5fdmat4x4',['mediump_dmat4x4',['../a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3',1,'glm']]], - ['mediump_5fdquat',['mediump_dquat',['../a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14',1,'glm']]], - ['mediump_5fdualquat',['mediump_dualquat',['../a00317.html#gaa7aeb54c167712b38f2178a1be2360ad',1,'glm']]], - ['mediump_5fdvec1',['mediump_dvec1',['../a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd',1,'glm']]], - ['mediump_5fdvec2',['mediump_dvec2',['../a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3',1,'glm']]], - ['mediump_5fdvec3',['mediump_dvec3',['../a00282.html#ga61c3b1dff4ec7c878af80503141b9f37',1,'glm']]], - ['mediump_5fdvec4',['mediump_dvec4',['../a00282.html#ga23a8bca00914a51542bfea13a4778186',1,'glm']]], - ['mediump_5ff32',['mediump_f32',['../a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80',1,'glm']]], - ['mediump_5ff32mat2',['mediump_f32mat2',['../a00304.html#gaf9020c6176a75bc84828ab01ea7dac25',1,'glm']]], - ['mediump_5ff32mat2x2',['mediump_f32mat2x2',['../a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f',1,'glm']]], - ['mediump_5ff32mat2x3',['mediump_f32mat2x3',['../a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf',1,'glm']]], - ['mediump_5ff32mat2x4',['mediump_f32mat2x4',['../a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1',1,'glm']]], - ['mediump_5ff32mat3',['mediump_f32mat3',['../a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8',1,'glm']]], - ['mediump_5ff32mat3x2',['mediump_f32mat3x2',['../a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f',1,'glm']]], - ['mediump_5ff32mat3x3',['mediump_f32mat3x3',['../a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f',1,'glm']]], - ['mediump_5ff32mat3x4',['mediump_f32mat3x4',['../a00304.html#ga8df705d775b776f5ae6b39e2ab892899',1,'glm']]], - ['mediump_5ff32mat4',['mediump_f32mat4',['../a00304.html#ga4491baaebbc46a20f1cb5da985576bf4',1,'glm']]], - ['mediump_5ff32mat4x2',['mediump_f32mat4x2',['../a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f',1,'glm']]], - ['mediump_5ff32mat4x3',['mediump_f32mat4x3',['../a00304.html#gade108f16633cf95fa500b5b8c36c8b00',1,'glm']]], - ['mediump_5ff32mat4x4',['mediump_f32mat4x4',['../a00304.html#ga936e95b881ecd2d109459ca41913fa99',1,'glm']]], - ['mediump_5ff32quat',['mediump_f32quat',['../a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3',1,'glm']]], - ['mediump_5ff32vec1',['mediump_f32vec1',['../a00304.html#gabb33cab7d7c74cc14aa95455d0690865',1,'glm']]], - ['mediump_5ff32vec2',['mediump_f32vec2',['../a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b',1,'glm']]], - ['mediump_5ff32vec3',['mediump_f32vec3',['../a00304.html#ga062ffef2973bd8241df993c3b30b327c',1,'glm']]], - ['mediump_5ff32vec4',['mediump_f32vec4',['../a00304.html#gad80c84bcd5f585840faa6179f6fd446c',1,'glm']]], - ['mediump_5ff64',['mediump_f64',['../a00304.html#ga6d40381d78472553f878f66e443feeef',1,'glm']]], - ['mediump_5ff64mat2',['mediump_f64mat2',['../a00304.html#gac1281da5ded55047e8892b0e1f1ae965',1,'glm']]], - ['mediump_5ff64mat2x2',['mediump_f64mat2x2',['../a00304.html#ga4fd527644cccbca4cb205320eab026f3',1,'glm']]], - ['mediump_5ff64mat2x3',['mediump_f64mat2x3',['../a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54',1,'glm']]], - ['mediump_5ff64mat2x4',['mediump_f64mat2x4',['../a00304.html#gaf306dd69e53633636aee38cea79d4cb7',1,'glm']]], - ['mediump_5ff64mat3',['mediump_f64mat3',['../a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776',1,'glm']]], - ['mediump_5ff64mat3x2',['mediump_f64mat3x2',['../a00304.html#gacd926d36a72433f6cac51dd60fa13107',1,'glm']]], - ['mediump_5ff64mat3x3',['mediump_f64mat3x3',['../a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e',1,'glm']]], - ['mediump_5ff64mat3x4',['mediump_f64mat3x4',['../a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2',1,'glm']]], - ['mediump_5ff64mat4',['mediump_f64mat4',['../a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5',1,'glm']]], - ['mediump_5ff64mat4x2',['mediump_f64mat4x2',['../a00304.html#ga17d36f0ea22314117e1cec9594b33945',1,'glm']]], - ['mediump_5ff64mat4x3',['mediump_f64mat4x3',['../a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d',1,'glm']]], - ['mediump_5ff64mat4x4',['mediump_f64mat4x4',['../a00304.html#ga66edb8de17b9235029472f043ae107e9',1,'glm']]], - ['mediump_5ff64quat',['mediump_f64quat',['../a00304.html#ga5e52f485059ce6e3010c590b882602c9',1,'glm']]], - ['mediump_5ff64vec1',['mediump_f64vec1',['../a00304.html#gac30fdf8afa489400053275b6a3350127',1,'glm']]], - ['mediump_5ff64vec2',['mediump_f64vec2',['../a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b',1,'glm']]], - ['mediump_5ff64vec3',['mediump_f64vec3',['../a00304.html#ga461c4c7d0757404dd0dba931760b25cf',1,'glm']]], - ['mediump_5ff64vec4',['mediump_f64vec4',['../a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e',1,'glm']]], - ['mediump_5ffdualquat',['mediump_fdualquat',['../a00317.html#ga4a6b594ff7e81150d8143001367a9431',1,'glm']]], - ['mediump_5ffloat32',['mediump_float32',['../a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7',1,'glm']]], - ['mediump_5ffloat32_5ft',['mediump_float32_t',['../a00304.html#gae4dee61f8fe1caccec309fbed02faf12',1,'glm']]], - ['mediump_5ffloat64',['mediump_float64',['../a00304.html#gab83d8aae6e4f115e97a785e8574a115f',1,'glm']]], - ['mediump_5ffloat64_5ft',['mediump_float64_t',['../a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e',1,'glm']]], - ['mediump_5ffmat2',['mediump_fmat2',['../a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff',1,'glm']]], - ['mediump_5ffmat2x2',['mediump_fmat2x2',['../a00304.html#ga98a687c17b174ea316b5f397b64f44bc',1,'glm']]], - ['mediump_5ffmat2x3',['mediump_fmat2x3',['../a00304.html#gaa03f939d90d5ef157df957d93f0b9a64',1,'glm']]], - ['mediump_5ffmat2x4',['mediump_fmat2x4',['../a00304.html#ga35223623e9ccebd8a281873b71b7d213',1,'glm']]], - ['mediump_5ffmat3',['mediump_fmat3',['../a00304.html#ga80823dfad5dba98512c76af498343847',1,'glm']]], - ['mediump_5ffmat3x2',['mediump_fmat3x2',['../a00304.html#ga42569e5b92f8635cedeadb1457ee1467',1,'glm']]], - ['mediump_5ffmat3x3',['mediump_fmat3x3',['../a00304.html#gaa6f526388c74a66b3d52315a14d434ae',1,'glm']]], - ['mediump_5ffmat3x4',['mediump_fmat3x4',['../a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4',1,'glm']]], - ['mediump_5ffmat4',['mediump_fmat4',['../a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9',1,'glm']]], - ['mediump_5ffmat4x2',['mediump_fmat4x2',['../a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf',1,'glm']]], - ['mediump_5ffmat4x3',['mediump_fmat4x3',['../a00304.html#ga41ad497f7eae211556aefd783cb02b90',1,'glm']]], - ['mediump_5ffmat4x4',['mediump_fmat4x4',['../a00304.html#ga22e27beead07bff4d5ce9d6065a57279',1,'glm']]], - ['mediump_5ffvec1',['mediump_fvec1',['../a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b',1,'glm']]], - ['mediump_5ffvec2',['mediump_fvec2',['../a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6',1,'glm']]], - ['mediump_5ffvec3',['mediump_fvec3',['../a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07',1,'glm']]], - ['mediump_5ffvec4',['mediump_fvec4',['../a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb',1,'glm']]], - ['mediump_5fi16',['mediump_i16',['../a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a',1,'glm']]], - ['mediump_5fi16vec1',['mediump_i16vec1',['../a00304.html#gacc44265ed440bf5e6e566782570de842',1,'glm']]], - ['mediump_5fi16vec2',['mediump_i16vec2',['../a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88',1,'glm']]], - ['mediump_5fi16vec3',['mediump_i16vec3',['../a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633',1,'glm']]], - ['mediump_5fi16vec4',['mediump_i16vec4',['../a00304.html#gaf52982bb23e3a3772649b2c5bb84b107',1,'glm']]], - ['mediump_5fi32',['mediump_i32',['../a00304.html#gaf5e94bf2a20af7601787c154751dc2e1',1,'glm']]], - ['mediump_5fi32vec1',['mediump_i32vec1',['../a00304.html#ga46a57f71e430637559097a732b550a7e',1,'glm']]], - ['mediump_5fi32vec2',['mediump_i32vec2',['../a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219',1,'glm']]], - ['mediump_5fi32vec3',['mediump_i32vec3',['../a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a',1,'glm']]], - ['mediump_5fi32vec4',['mediump_i32vec4',['../a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8',1,'glm']]], - ['mediump_5fi64',['mediump_i64',['../a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f',1,'glm']]], - ['mediump_5fi64vec1',['mediump_i64vec1',['../a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e',1,'glm']]], - ['mediump_5fi64vec2',['mediump_i64vec2',['../a00304.html#ga2c94aeae3457325944ca1059b0b68330',1,'glm']]], - ['mediump_5fi64vec3',['mediump_i64vec3',['../a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e',1,'glm']]], - ['mediump_5fi64vec4',['mediump_i64vec4',['../a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1',1,'glm']]], - ['mediump_5fi8',['mediump_i8',['../a00304.html#gacf1ded173e1e2d049c511d095b259e21',1,'glm']]], - ['mediump_5fi8vec1',['mediump_i8vec1',['../a00304.html#ga85e8893f4ae3630065690a9000c0c483',1,'glm']]], - ['mediump_5fi8vec2',['mediump_i8vec2',['../a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67',1,'glm']]], - ['mediump_5fi8vec3',['mediump_i8vec3',['../a00304.html#ga6dd1c1618378c6f94d522a61c28773c9',1,'glm']]], - ['mediump_5fi8vec4',['mediump_i8vec4',['../a00304.html#gac7bb04fb857ef7b520e49f6c381432be',1,'glm']]], - ['mediump_5fimat2',['mediump_imat2',['../a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378',1,'glm']]], - ['mediump_5fimat2x2',['mediump_imat2x2',['../a00294.html#ga4b2aeb11a329940721dda9583e71f856',1,'glm']]], - ['mediump_5fimat2x3',['mediump_imat2x3',['../a00294.html#ga74362470ba99843ac70aee5ac38cc674',1,'glm']]], - ['mediump_5fimat2x4',['mediump_imat2x4',['../a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09',1,'glm']]], - ['mediump_5fimat3',['mediump_imat3',['../a00294.html#ga6c63bdc736efd3466e0730de0251cb71',1,'glm']]], - ['mediump_5fimat3x2',['mediump_imat3x2',['../a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809',1,'glm']]], - ['mediump_5fimat3x3',['mediump_imat3x3',['../a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12',1,'glm']]], - ['mediump_5fimat3x4',['mediump_imat3x4',['../a00294.html#ga67689a518b181a26540bc44a163525cd',1,'glm']]], - ['mediump_5fimat4',['mediump_imat4',['../a00294.html#gaf348552978553630d2a00b78eb887ced',1,'glm']]], - ['mediump_5fimat4x2',['mediump_imat4x2',['../a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc',1,'glm']]], - ['mediump_5fimat4x3',['mediump_imat4x3',['../a00294.html#ga5b10acc696759e03f6ab918f4467e94c',1,'glm']]], - ['mediump_5fimat4x4',['mediump_imat4x4',['../a00294.html#ga2596869d154dec1180beadbb9df80501',1,'glm']]], - ['mediump_5fint16',['mediump_int16',['../a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d',1,'glm']]], - ['mediump_5fint16_5ft',['mediump_int16_t',['../a00304.html#ga80e72fe94c88498537e8158ba7591c54',1,'glm']]], - ['mediump_5fint32',['mediump_int32',['../a00304.html#ga5244cef85d6e870e240c76428a262ae8',1,'glm']]], - ['mediump_5fint32_5ft',['mediump_int32_t',['../a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180',1,'glm']]], - ['mediump_5fint64',['mediump_int64',['../a00304.html#ga7b968f2b86a0442a89c7359171e1d866',1,'glm']]], - ['mediump_5fint64_5ft',['mediump_int64_t',['../a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64',1,'glm']]], - ['mediump_5fint8',['mediump_int8',['../a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e',1,'glm']]], - ['mediump_5fint8_5ft',['mediump_int8_t',['../a00304.html#ga6d7b3789ecb932c26430009478cac7ae',1,'glm']]], - ['mediump_5fivec1',['mediump_ivec1',['../a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56',1,'glm']]], - ['mediump_5fivec2',['mediump_ivec2',['../a00282.html#gac57496299d276ed97044074097bd5e2c',1,'glm']]], - ['mediump_5fivec3',['mediump_ivec3',['../a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466',1,'glm']]], - ['mediump_5fivec4',['mediump_ivec4',['../a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5',1,'glm']]], - ['mediump_5fmat2',['mediump_mat2',['../a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3',1,'glm']]], - ['mediump_5fmat2x2',['mediump_mat2x2',['../a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d',1,'glm']]], - ['mediump_5fmat2x3',['mediump_mat2x3',['../a00284.html#ga497d513d552d927537d61fa11e3701ab',1,'glm']]], - ['mediump_5fmat2x4',['mediump_mat2x4',['../a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5',1,'glm']]], - ['mediump_5fmat3',['mediump_mat3',['../a00284.html#ga5aae49834d02732942f44e61d7bce136',1,'glm']]], - ['mediump_5fmat3x2',['mediump_mat3x2',['../a00284.html#ga9e1c9ee65fef547bde793e69723e24eb',1,'glm']]], - ['mediump_5fmat3x3',['mediump_mat3x3',['../a00284.html#gabc0f2f4ad21c90b341881cf056f8650e',1,'glm']]], - ['mediump_5fmat3x4',['mediump_mat3x4',['../a00284.html#gaa669c6675c3405f76c0b14020d1c0d61',1,'glm']]], - ['mediump_5fmat4',['mediump_mat4',['../a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7',1,'glm']]], - ['mediump_5fmat4x2',['mediump_mat4x2',['../a00284.html#gad75706b70545412ba9ac27d5ee210f66',1,'glm']]], - ['mediump_5fmat4x3',['mediump_mat4x3',['../a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770',1,'glm']]], - ['mediump_5fmat4x4',['mediump_mat4x4',['../a00284.html#ga15bca2b70917d9752231160d9da74b01',1,'glm']]], - ['mediump_5fquat',['mediump_quat',['../a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d',1,'glm']]], - ['mediump_5fu16',['mediump_u16',['../a00304.html#ga9df98857be695d5a30cb30f5bfa38a80',1,'glm']]], - ['mediump_5fu16vec1',['mediump_u16vec1',['../a00304.html#ga400ce8cc566de093a9b28e59e220d6e4',1,'glm']]], - ['mediump_5fu16vec2',['mediump_u16vec2',['../a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1',1,'glm']]], - ['mediump_5fu16vec3',['mediump_u16vec3',['../a00304.html#gac9ba20234b0c3751d45ce575fc71e551',1,'glm']]], - ['mediump_5fu16vec4',['mediump_u16vec4',['../a00304.html#ga5793393686ce5bd2d5968ff9144762b8',1,'glm']]], - ['mediump_5fu32',['mediump_u32',['../a00304.html#ga1bd0e914158bf03135f8a317de6debe9',1,'glm']]], - ['mediump_5fu32vec1',['mediump_u32vec1',['../a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee',1,'glm']]], - ['mediump_5fu32vec2',['mediump_u32vec2',['../a00304.html#ga94f74851fce338549c705b5f0d601c4f',1,'glm']]], - ['mediump_5fu32vec3',['mediump_u32vec3',['../a00304.html#ga012c24c8fc69707b90260474c70275a2',1,'glm']]], - ['mediump_5fu32vec4',['mediump_u32vec4',['../a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a',1,'glm']]], - ['mediump_5fu64',['mediump_u64',['../a00304.html#ga2af9490085ae3bdf36a544e9dd073610',1,'glm']]], - ['mediump_5fu64vec1',['mediump_u64vec1',['../a00304.html#ga659f372ccb8307d5db5beca942cde5e8',1,'glm']]], - ['mediump_5fu64vec2',['mediump_u64vec2',['../a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d',1,'glm']]], - ['mediump_5fu64vec3',['mediump_u64vec3',['../a00304.html#ga1900c6ab74acd392809425953359ef52',1,'glm']]], - ['mediump_5fu64vec4',['mediump_u64vec4',['../a00304.html#gaec7ee455cb379ec2993e81482123e1cc',1,'glm']]], - ['mediump_5fu8',['mediump_u8',['../a00304.html#gad1213a22bbb9e4107f07eaa4956f8281',1,'glm']]], - ['mediump_5fu8vec1',['mediump_u8vec1',['../a00304.html#ga4a43050843b141bdc7e85437faef6f55',1,'glm']]], - ['mediump_5fu8vec2',['mediump_u8vec2',['../a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194',1,'glm']]], - ['mediump_5fu8vec3',['mediump_u8vec3',['../a00304.html#gaddc6f7748b699254942c5216b68f8f7f',1,'glm']]], - ['mediump_5fu8vec4',['mediump_u8vec4',['../a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b',1,'glm']]], - ['mediump_5fuint16',['mediump_uint16',['../a00304.html#ga2885a6c89916911e418c06bb76b9bdbb',1,'glm']]], - ['mediump_5fuint16_5ft',['mediump_uint16_t',['../a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e',1,'glm']]], - ['mediump_5fuint32',['mediump_uint32',['../a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f',1,'glm']]], - ['mediump_5fuint32_5ft',['mediump_uint32_t',['../a00304.html#gaf4dae276fd29623950de14a6ca2586b5',1,'glm']]], - ['mediump_5fuint64',['mediump_uint64',['../a00304.html#ga30652709815ad9404272a31957daa59e',1,'glm']]], - ['mediump_5fuint64_5ft',['mediump_uint64_t',['../a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9',1,'glm']]], - ['mediump_5fuint8',['mediump_uint8',['../a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3',1,'glm']]], - ['mediump_5fuint8_5ft',['mediump_uint8_t',['../a00304.html#gadfe65c78231039e90507770db50c98c7',1,'glm']]], - ['mediump_5fumat2',['mediump_umat2',['../a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee',1,'glm']]], - ['mediump_5fumat2x2',['mediump_umat2x2',['../a00294.html#ga3b209b1b751f041422137e3c065dfa98',1,'glm']]], - ['mediump_5fumat2x3',['mediump_umat2x3',['../a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306',1,'glm']]], - ['mediump_5fumat2x4',['mediump_umat2x4',['../a00294.html#gae1317ddca16d01e119a40b7f0ee85f95',1,'glm']]], - ['mediump_5fumat3',['mediump_umat3',['../a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a',1,'glm']]], - ['mediump_5fumat3x2',['mediump_umat3x2',['../a00294.html#gaadc28bfdc8ebca81ae85121b11994970',1,'glm']]], - ['mediump_5fumat3x3',['mediump_umat3x3',['../a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d',1,'glm']]], - ['mediump_5fumat3x4',['mediump_umat3x4',['../a00294.html#ga78009a1e4ca64217e46b418535e52546',1,'glm']]], - ['mediump_5fumat4',['mediump_umat4',['../a00294.html#ga5087c2beb26a11d9af87432e554cf9d1',1,'glm']]], - ['mediump_5fumat4x2',['mediump_umat4x2',['../a00294.html#gaf35aefd81cc13718f6b059623f7425fa',1,'glm']]], - ['mediump_5fumat4x3',['mediump_umat4x3',['../a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb',1,'glm']]], - ['mediump_5fumat4x4',['mediump_umat4x4',['../a00294.html#gaa9428fc8430dc552aad920653f822ef3',1,'glm']]], - ['mediump_5fuvec1',['mediump_uvec1',['../a00277.html#ga38fde73aaf1420175ece8d4882558a3f',1,'glm']]], - ['mediump_5fuvec2',['mediump_uvec2',['../a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b',1,'glm']]], - ['mediump_5fuvec3',['mediump_uvec3',['../a00282.html#ga83b7df38feefbb357f3673d950fafef7',1,'glm']]], - ['mediump_5fuvec4',['mediump_uvec4',['../a00282.html#ga64ed0deb6573375b7016daf82ffd53a7',1,'glm']]], - ['mediump_5fvec1',['mediump_vec1',['../a00271.html#ga645f53e6b8056609023a894b4e2beef4',1,'glm']]], - ['mediump_5fvec2',['mediump_vec2',['../a00282.html#gabc61976261c406520c7a8e4d946dc3f0',1,'glm']]], - ['mediump_5fvec3',['mediump_vec3',['../a00282.html#ga2384e263df19f1404b733016eff78fca',1,'glm']]], - ['mediump_5fvec4',['mediump_vec4',['../a00282.html#ga5c6978d3ffba06738416a33083853fc0',1,'glm']]], - ['min',['min',['../a00241.html#ga6cf8098827054a270ee36b18e30d471d',1,'glm::min(genType x, genType y)'],['../a00241.html#gaa7d015eba1f9f48519251f4abe69b14d',1,'glm::min(vec< L, T, Q > const &x, T y)'],['../a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48',1,'glm::min(vec< L, T, Q > const &x, vec< L, T, Q > const &y)'],['../a00258.html#ga420b37cbd98c395b93dab0278305cd46',1,'glm::min(T a, T b, T c)'],['../a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d',1,'glm::min(T a, T b, T c, T d)'],['../a00267.html#ga3cd83d80fd4f433d8e333593ec56dddf',1,'glm::min(vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c)'],['../a00267.html#gab66920ed064ab518d6859c5a889c4be4',1,'glm::min(vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c, vec< L, T, Q > const &d)'],['../a00321.html#ga713d3f9b3e76312c0d314e0c8611a6a6',1,'glm::min(T const &x, T const &y, T const &z)'],['../a00321.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4',1,'glm::min(C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)'],['../a00321.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0',1,'glm::min(C< T > const &x, C< T > const &y, C< T > const &z)'],['../a00321.html#ga95466987024d03039607f09e69813d69',1,'glm::min(T const &x, T const &y, T const &z, T const &w)'],['../a00321.html#ga4fe35dd31dd0c45693c9b60b830b8d47',1,'glm::min(C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)'],['../a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead',1,'glm::min(C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)']]], - ['mirrorclamp',['mirrorClamp',['../a00369.html#gaa6856a0a048d2749252848da35e10c8b',1,'glm']]], - ['mirrorrepeat',['mirrorRepeat',['../a00369.html#ga16a89b0661b60d5bea85137bbae74d73',1,'glm']]], - ['mix',['mix',['../a00241.html#ga8e93f374aae27d1a88b921860351f8d4',1,'glm::mix(genTypeT x, genTypeT y, genTypeU a)'],['../a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2',1,'glm::mix(qua< T, Q > const &x, qua< T, Q > const &y, T a)']]], - ['mixed_5fproduct_2ehpp',['mixed_product.hpp',['../a00111.html',1,'']]], - ['mixedproduct',['mixedProduct',['../a00342.html#gab3c6048fbb67f7243b088a4fee48d020',1,'glm']]], - ['mod',['mod',['../a00241.html#ga9b197a452cd52db3c5c18bac72bd7798',1,'glm::mod(vec< L, T, Q > const &x, vec< L, T, Q > const &y)'],['../a00330.html#gaabfbb41531ab7ad8d06fc176edfba785',1,'glm::mod(int x, int y)'],['../a00330.html#ga63fc8d63e7da1706439233b386ba8b6f',1,'glm::mod(uint x, uint y)']]], - ['modf',['modf',['../a00241.html#ga85e33f139b8db1b39b590a5713b9e679',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_b.html b/tests/OpenGL/package/glm/doc/api/search/all_b.html deleted file mode 100644 index a92de485..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_b.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_b.js b/tests/OpenGL/package/glm/doc/api/search/all_b.js deleted file mode 100644 index 59d726bc..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_b.js +++ /dev/null @@ -1,15 +0,0 @@ -var searchData= -[ - ['nextmultiple',['nextMultiple',['../a00261.html#gab770a3835c44c8a6fd225be4f4e6b317',1,'glm::nextMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#gace38d00601cbf49cd4dc03f003ab42b7',1,'glm::nextMultiple(vec< L, T, Q > const &v, T Multiple)'],['../a00274.html#gacda365edad320c7aff19cc283a3b8ca2',1,'glm::nextMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)']]], - ['nextpoweroftwo',['nextPowerOfTwo',['../a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc',1,'glm::nextPowerOfTwo(genIUType v)'],['../a00274.html#gabba67f8aac9915e10fca727277274502',1,'glm::nextPowerOfTwo(vec< L, T, Q > const &v)']]], - ['nlz',['nlz',['../a00330.html#ga78dff8bdb361bf0061194c93e003d189',1,'glm']]], - ['noise_2ehpp',['noise.hpp',['../a00112.html',1,'']]], - ['norm_2ehpp',['norm.hpp',['../a00113.html',1,'']]], - ['normal_2ehpp',['normal.hpp',['../a00114.html',1,'']]], - ['normalize',['normalize',['../a00254.html#gabf30e3263fffe8dcc6659aea76ae8927',1,'glm::normalize(qua< T, Q > const &q)'],['../a00279.html#ga3b8d3dcae77870781392ed2902cce597',1,'glm::normalize(vec< L, T, Q > const &x)'],['../a00317.html#ga299b8641509606b1958ffa104a162cfe',1,'glm::normalize(tdualquat< T, Q > const &q)']]], - ['normalize_5fdot_2ehpp',['normalize_dot.hpp',['../a00115.html',1,'']]], - ['normalizedot',['normalizeDot',['../a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa',1,'glm']]], - ['not_5f',['not_',['../a00374.html#ga610fcd175791fd246e328ffee10dbf1e',1,'glm']]], - ['notequal',['notEqual',['../a00246.html#ga8504f18a7e2bf315393032c2137dad83',1,'glm::notEqual(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y)'],['../a00246.html#ga29071147d118569344d10944b7d5c378',1,'glm::notEqual(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, T epsilon)'],['../a00246.html#gad7959e14fbc35b4ed2617daf4d67f6cd',1,'glm::notEqual(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, T, Q > const &epsilon)'],['../a00246.html#gaa1cd7fc228ef6e26c73583fd0d9c6552',1,'glm::notEqual(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, int ULPs)'],['../a00246.html#gaa5517341754149ffba742d230afd1f32',1,'glm::notEqual(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, int, Q > const &ULPs)'],['../a00255.html#gab441cee0de5867a868f3a586ee68cfe1',1,'glm::notEqual(qua< T, Q > const &x, qua< T, Q > const &y)'],['../a00255.html#ga5117a44c1bf21af857cd23e44a96d313',1,'glm::notEqual(qua< T, Q > const &x, qua< T, Q > const &y, T epsilon)'],['../a00275.html#ga4a99cc41341567567a608719449c1fac',1,'glm::notEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y, T epsilon)'],['../a00275.html#ga417cf51304359db18e819dda9bce5767',1,'glm::notEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &epsilon)'],['../a00275.html#ga8b5c2c3f83422ae5b71fa960d03b0339',1,'glm::notEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y, int ULPs)'],['../a00275.html#ga0b15ffe32987a6029b14398eb0def01a',1,'glm::notEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, int, Q > const &ULPs)'],['../a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27',1,'glm::notEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['number_5fprecision_2ehpp',['number_precision.hpp',['../a00116.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_c.html b/tests/OpenGL/package/glm/doc/api/search/all_c.html deleted file mode 100644 index 20cdfbcf..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_c.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_c.js b/tests/OpenGL/package/glm/doc/api/search/all_c.js deleted file mode 100644 index bac22348..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_c.js +++ /dev/null @@ -1,27 +0,0 @@ -var searchData= -[ - ['opengl_20mathematics_20_28glm_29',['OpenGL Mathematics (GLM)',['../index.html',1,'']]], - ['one',['one',['../a00290.html#ga39c2fb227631ca25894326529bdd1ee5',1,'glm']]], - ['one_5fover_5fpi',['one_over_pi',['../a00290.html#ga555150da2b06d23c8738981d5013e0eb',1,'glm']]], - ['one_5fover_5froot_5ftwo',['one_over_root_two',['../a00290.html#ga788fa23a0939bac4d1d0205fb4f35818',1,'glm']]], - ['one_5fover_5ftwo_5fpi',['one_over_two_pi',['../a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc',1,'glm']]], - ['openbounded',['openBounded',['../a00314.html#gafd303042ba2ba695bf53b2315f53f93f',1,'glm']]], - ['optimum_5fpow_2ehpp',['optimum_pow.hpp',['../a00117.html',1,'']]], - ['orientate2',['orientate2',['../a00319.html#gae16738a9f1887cf4e4db6a124637608d',1,'glm']]], - ['orientate3',['orientate3',['../a00319.html#ga7ca98668a5786f19c7b38299ebbc9b4c',1,'glm::orientate3(T const &angle)'],['../a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb',1,'glm::orientate3(vec< 3, T, Q > const &angles)']]], - ['orientate4',['orientate4',['../a00319.html#ga4a044653f71a4ecec68e0b623382b48a',1,'glm']]], - ['orientation',['orientation',['../a00356.html#ga1a32fceb71962e6160e8af295c91930a',1,'glm']]], - ['orientedangle',['orientedAngle',['../a00367.html#ga9556a803dce87fe0f42fdabe4ebba1d5',1,'glm::orientedAngle(vec< 2, T, Q > const &x, vec< 2, T, Q > const &y)'],['../a00367.html#ga706fce3d111f485839756a64f5a48553',1,'glm::orientedAngle(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y, vec< 3, T, Q > const &ref)']]], - ['ortho',['ortho',['../a00243.html#gae5b6b40ed882cd56cd7cb97701909c06',1,'glm::ortho(T left, T right, T bottom, T top)'],['../a00243.html#ga6615d8a9d39432e279c4575313ecb456',1,'glm::ortho(T left, T right, T bottom, T top, T zNear, T zFar)']]], - ['ortholh',['orthoLH',['../a00243.html#gad122a79aadaa5529cec4ac197203db7f',1,'glm']]], - ['ortholh_5fno',['orthoLH_NO',['../a00243.html#ga526416735ea7c5c5cd255bf99d051bd8',1,'glm']]], - ['ortholh_5fzo',['orthoLH_ZO',['../a00243.html#gab37ac3eec8d61f22fceda7775e836afa',1,'glm']]], - ['orthono',['orthoNO',['../a00243.html#gab219d28a8f178d4517448fcd6395a073',1,'glm']]], - ['orthonormalize',['orthonormalize',['../a00348.html#ga4cab5d698e6e2eccea30c8e81c74371f',1,'glm::orthonormalize(mat< 3, 3, T, Q > const &m)'],['../a00348.html#gac3bc7ef498815026bc3d361ae0b7138e',1,'glm::orthonormalize(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)']]], - ['orthonormalize_2ehpp',['orthonormalize.hpp',['../a00118.html',1,'']]], - ['orthorh',['orthoRH',['../a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4',1,'glm']]], - ['orthorh_5fno',['orthoRH_NO',['../a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780',1,'glm']]], - ['orthorh_5fzo',['orthoRH_ZO',['../a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588',1,'glm']]], - ['orthozo',['orthoZO',['../a00243.html#gaea11a70817af2c0801c869dea0b7a5bc',1,'glm']]], - ['outerproduct',['outerProduct',['../a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_d.html b/tests/OpenGL/package/glm/doc/api/search/all_d.html deleted file mode 100644 index 00b28ed8..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_d.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_d.js b/tests/OpenGL/package/glm/doc/api/search/all_d.js deleted file mode 100644 index 988ea8f9..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_d.js +++ /dev/null @@ -1,263 +0,0 @@ -var searchData= -[ - ['packdouble2x32',['packDouble2x32',['../a00372.html#gaa916ca426b2bb0343ba17e3753e245c2',1,'glm']]], - ['packed_5fbvec1',['packed_bvec1',['../a00303.html#ga88632cea9008ac0ac1388e94e804a53c',1,'glm']]], - ['packed_5fbvec2',['packed_bvec2',['../a00303.html#gab85245913eaa40ab82adabcae37086cb',1,'glm']]], - ['packed_5fbvec3',['packed_bvec3',['../a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd',1,'glm']]], - ['packed_5fbvec4',['packed_bvec4',['../a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed',1,'glm']]], - ['packed_5fdmat2',['packed_dmat2',['../a00303.html#gad87408a8350918711f845f071bbe43fb',1,'glm']]], - ['packed_5fdmat2x2',['packed_dmat2x2',['../a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9',1,'glm']]], - ['packed_5fdmat2x3',['packed_dmat2x3',['../a00303.html#gac3a5315f588ba04ad255188071ec4e22',1,'glm']]], - ['packed_5fdmat2x4',['packed_dmat2x4',['../a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4',1,'glm']]], - ['packed_5fdmat3',['packed_dmat3',['../a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245',1,'glm']]], - ['packed_5fdmat3x2',['packed_dmat3x2',['../a00303.html#gae36de20a4c0e0b1444b7903ae811d94e',1,'glm']]], - ['packed_5fdmat3x3',['packed_dmat3x3',['../a00303.html#gab9b909f1392d86854334350efcae85f5',1,'glm']]], - ['packed_5fdmat3x4',['packed_dmat3x4',['../a00303.html#ga199131fd279c92c2ac12df6d978f1dd6',1,'glm']]], - ['packed_5fdmat4',['packed_dmat4',['../a00303.html#gada980a3485640aa8151f368f17ad3086',1,'glm']]], - ['packed_5fdmat4x2',['packed_dmat4x2',['../a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72',1,'glm']]], - ['packed_5fdmat4x3',['packed_dmat4x3',['../a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764',1,'glm']]], - ['packed_5fdmat4x4',['packed_dmat4x4',['../a00303.html#gae20617435a6d042d7c38da2badd64a09',1,'glm']]], - ['packed_5fdvec1',['packed_dvec1',['../a00303.html#ga532f0c940649b1ee303acd572fc35531',1,'glm']]], - ['packed_5fdvec2',['packed_dvec2',['../a00303.html#ga5c194b11fbda636f2ab20c3bd0079196',1,'glm']]], - ['packed_5fdvec3',['packed_dvec3',['../a00303.html#ga0581ea552d86b2b5de7a2804bed80e72',1,'glm']]], - ['packed_5fdvec4',['packed_dvec4',['../a00303.html#gae8a9b181f9dc813ad6e125a52b14b935',1,'glm']]], - ['packed_5fhighp_5fbvec1',['packed_highp_bvec1',['../a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a',1,'glm']]], - ['packed_5fhighp_5fbvec2',['packed_highp_bvec2',['../a00303.html#gad791d671f4fcf1ed1ea41f752916b70a',1,'glm']]], - ['packed_5fhighp_5fbvec3',['packed_highp_bvec3',['../a00303.html#ga6a5a3250b57dfadc66735bc72911437f',1,'glm']]], - ['packed_5fhighp_5fbvec4',['packed_highp_bvec4',['../a00303.html#ga09f517d88b996ef1b2f42fd54222b82d',1,'glm']]], - ['packed_5fhighp_5fdmat2',['packed_highp_dmat2',['../a00303.html#gae29686632fd05efac0675d9a6370d77b',1,'glm']]], - ['packed_5fhighp_5fdmat2x2',['packed_highp_dmat2x2',['../a00303.html#ga22bd6382b16052e301edbfc031b9f37a',1,'glm']]], - ['packed_5fhighp_5fdmat2x3',['packed_highp_dmat2x3',['../a00303.html#ga999d82719696d4c59f4d236dd08f273d',1,'glm']]], - ['packed_5fhighp_5fdmat2x4',['packed_highp_dmat2x4',['../a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0',1,'glm']]], - ['packed_5fhighp_5fdmat3',['packed_highp_dmat3',['../a00303.html#gadac7c040c4810dd52b36fcd09d097400',1,'glm']]], - ['packed_5fhighp_5fdmat3x2',['packed_highp_dmat3x2',['../a00303.html#gab462744977beb85fb5c782bc2eea7b15',1,'glm']]], - ['packed_5fhighp_5fdmat3x3',['packed_highp_dmat3x3',['../a00303.html#ga49e5a709d098523823b2f824e48672a6',1,'glm']]], - ['packed_5fhighp_5fdmat3x4',['packed_highp_dmat3x4',['../a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7',1,'glm']]], - ['packed_5fhighp_5fdmat4',['packed_highp_dmat4',['../a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6',1,'glm']]], - ['packed_5fhighp_5fdmat4x2',['packed_highp_dmat4x2',['../a00303.html#ga12e39e797fb724a5b51fcbea2513a7da',1,'glm']]], - ['packed_5fhighp_5fdmat4x3',['packed_highp_dmat4x3',['../a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e',1,'glm']]], - ['packed_5fhighp_5fdmat4x4',['packed_highp_dmat4x4',['../a00303.html#ga2df58e03e5afded28707b4f7d077afb4',1,'glm']]], - ['packed_5fhighp_5fdvec1',['packed_highp_dvec1',['../a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1',1,'glm']]], - ['packed_5fhighp_5fdvec2',['packed_highp_dvec2',['../a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63',1,'glm']]], - ['packed_5fhighp_5fdvec3',['packed_highp_dvec3',['../a00303.html#gaaac6b356ef00154da41aaae7d1549193',1,'glm']]], - ['packed_5fhighp_5fdvec4',['packed_highp_dvec4',['../a00303.html#ga81b5368fe485e2630aa9b44832d592e7',1,'glm']]], - ['packed_5fhighp_5fivec1',['packed_highp_ivec1',['../a00303.html#ga7245acc887a5438f46fd85fdf076bb3b',1,'glm']]], - ['packed_5fhighp_5fivec2',['packed_highp_ivec2',['../a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7',1,'glm']]], - ['packed_5fhighp_5fivec3',['packed_highp_ivec3',['../a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628',1,'glm']]], - ['packed_5fhighp_5fivec4',['packed_highp_ivec4',['../a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895',1,'glm']]], - ['packed_5fhighp_5fmat2',['packed_highp_mat2',['../a00303.html#ga2f2d913d8cca2f935b2522964408c0b2',1,'glm']]], - ['packed_5fhighp_5fmat2x2',['packed_highp_mat2x2',['../a00303.html#ga245c12d2daf67feecaa2d3277c8f6661',1,'glm']]], - ['packed_5fhighp_5fmat2x3',['packed_highp_mat2x3',['../a00303.html#ga069cc8892aadae144c00f35297617d44',1,'glm']]], - ['packed_5fhighp_5fmat2x4',['packed_highp_mat2x4',['../a00303.html#ga6904d09b62141d09712b76983892f95b',1,'glm']]], - ['packed_5fhighp_5fmat3',['packed_highp_mat3',['../a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe',1,'glm']]], - ['packed_5fhighp_5fmat3x2',['packed_highp_mat3x2',['../a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9',1,'glm']]], - ['packed_5fhighp_5fmat3x3',['packed_highp_mat3x3',['../a00303.html#gaf2e07527d678440bf0c20adbeb9177c5',1,'glm']]], - ['packed_5fhighp_5fmat3x4',['packed_highp_mat3x4',['../a00303.html#ga72102fa6ac2445aa3bb203128ad52449',1,'glm']]], - ['packed_5fhighp_5fmat4',['packed_highp_mat4',['../a00303.html#ga253e8379b08d2dc6fe2800b2fb913203',1,'glm']]], - ['packed_5fhighp_5fmat4x2',['packed_highp_mat4x2',['../a00303.html#gae389c2071cf3cdb33e7812c6fd156710',1,'glm']]], - ['packed_5fhighp_5fmat4x3',['packed_highp_mat4x3',['../a00303.html#ga4584f64394bd7123b7a8534741e4916c',1,'glm']]], - ['packed_5fhighp_5fmat4x4',['packed_highp_mat4x4',['../a00303.html#ga0149fe15668925147e07c94fd2c2d6ae',1,'glm']]], - ['packed_5fhighp_5fuvec1',['packed_highp_uvec1',['../a00303.html#ga8c32b53f628a3616aa5061e58d66fe74',1,'glm']]], - ['packed_5fhighp_5fuvec2',['packed_highp_uvec2',['../a00303.html#gab704d4fb15f6f96d70e363d5db7060cd',1,'glm']]], - ['packed_5fhighp_5fuvec3',['packed_highp_uvec3',['../a00303.html#ga0b570da473fec4619db5aa0dce5133b0',1,'glm']]], - ['packed_5fhighp_5fuvec4',['packed_highp_uvec4',['../a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6',1,'glm']]], - ['packed_5fhighp_5fvec1',['packed_highp_vec1',['../a00303.html#ga56473759d2702ee19ab7f91d0017fa70',1,'glm']]], - ['packed_5fhighp_5fvec2',['packed_highp_vec2',['../a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d',1,'glm']]], - ['packed_5fhighp_5fvec3',['packed_highp_vec3',['../a00303.html#ga3815661df0e2de79beff8168c09adf1e',1,'glm']]], - ['packed_5fhighp_5fvec4',['packed_highp_vec4',['../a00303.html#ga4015f36bf5a5adb6ac5d45beed959867',1,'glm']]], - ['packed_5fivec1',['packed_ivec1',['../a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c',1,'glm']]], - ['packed_5fivec2',['packed_ivec2',['../a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7',1,'glm']]], - ['packed_5fivec3',['packed_ivec3',['../a00303.html#gae157682a7847161787951ba1db4cf325',1,'glm']]], - ['packed_5fivec4',['packed_ivec4',['../a00303.html#gac228b70372abd561340d5f926a7c1778',1,'glm']]], - ['packed_5flowp_5fbvec1',['packed_lowp_bvec1',['../a00303.html#gae3c8750f53259ece334d3aa3b3649a40',1,'glm']]], - ['packed_5flowp_5fbvec2',['packed_lowp_bvec2',['../a00303.html#gac969befedbda69eb78d4e23f751fdbee',1,'glm']]], - ['packed_5flowp_5fbvec3',['packed_lowp_bvec3',['../a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954',1,'glm']]], - ['packed_5flowp_5fbvec4',['packed_lowp_bvec4',['../a00303.html#gae473587cff3092edc0877fc691c26a0b',1,'glm']]], - ['packed_5flowp_5fdmat2',['packed_lowp_dmat2',['../a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097',1,'glm']]], - ['packed_5flowp_5fdmat2x2',['packed_lowp_dmat2x2',['../a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea',1,'glm']]], - ['packed_5flowp_5fdmat2x3',['packed_lowp_dmat2x3',['../a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2',1,'glm']]], - ['packed_5flowp_5fdmat2x4',['packed_lowp_dmat2x4',['../a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1',1,'glm']]], - ['packed_5flowp_5fdmat3',['packed_lowp_dmat3',['../a00303.html#ga3894a059eeaacec8791c25de398d9955',1,'glm']]], - ['packed_5flowp_5fdmat3x2',['packed_lowp_dmat3x2',['../a00303.html#ga23ec236950f5859f59197663266b535d',1,'glm']]], - ['packed_5flowp_5fdmat3x3',['packed_lowp_dmat3x3',['../a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c',1,'glm']]], - ['packed_5flowp_5fdmat3x4',['packed_lowp_dmat3x4',['../a00303.html#ga8fc0e66da83599071b7ec17510686cd9',1,'glm']]], - ['packed_5flowp_5fdmat4',['packed_lowp_dmat4',['../a00303.html#ga03e1edf5666c40affe39aee35c87956f',1,'glm']]], - ['packed_5flowp_5fdmat4x2',['packed_lowp_dmat4x2',['../a00303.html#ga39658fb13369db869d363684bd8399c0',1,'glm']]], - ['packed_5flowp_5fdmat4x3',['packed_lowp_dmat4x3',['../a00303.html#ga30b0351eebc18c6056101359bdd3a359',1,'glm']]], - ['packed_5flowp_5fdmat4x4',['packed_lowp_dmat4x4',['../a00303.html#ga0294d4c45151425c86a11deee7693c0e',1,'glm']]], - ['packed_5flowp_5fdvec1',['packed_lowp_dvec1',['../a00303.html#ga054050e9d4e78d81db0e6d1573b1c624',1,'glm']]], - ['packed_5flowp_5fdvec2',['packed_lowp_dvec2',['../a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93',1,'glm']]], - ['packed_5flowp_5fdvec3',['packed_lowp_dvec3',['../a00303.html#ga9189210cabd6651a5e14a4c46fb20598',1,'glm']]], - ['packed_5flowp_5fdvec4',['packed_lowp_dvec4',['../a00303.html#ga262dafd0c001c3a38d1cc91d024ca738',1,'glm']]], - ['packed_5flowp_5fivec1',['packed_lowp_ivec1',['../a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c',1,'glm']]], - ['packed_5flowp_5fivec2',['packed_lowp_ivec2',['../a00303.html#ga52635859f5ef660ab999d22c11b7867f',1,'glm']]], - ['packed_5flowp_5fivec3',['packed_lowp_ivec3',['../a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d',1,'glm']]], - ['packed_5flowp_5fivec4',['packed_lowp_ivec4',['../a00303.html#ga931731b8ae3b54c7ecc221509dae96bc',1,'glm']]], - ['packed_5flowp_5fmat2',['packed_lowp_mat2',['../a00303.html#ga70dcb9ef0b24e832772a7405efa9669a',1,'glm']]], - ['packed_5flowp_5fmat2x2',['packed_lowp_mat2x2',['../a00303.html#gac70667c7642ec8d50245e6e6936a3927',1,'glm']]], - ['packed_5flowp_5fmat2x3',['packed_lowp_mat2x3',['../a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234',1,'glm']]], - ['packed_5flowp_5fmat2x4',['packed_lowp_mat2x4',['../a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3',1,'glm']]], - ['packed_5flowp_5fmat3',['packed_lowp_mat3',['../a00303.html#ga0d22400969dd223465b2900fecfb4f53',1,'glm']]], - ['packed_5flowp_5fmat3x2',['packed_lowp_mat3x2',['../a00303.html#ga128cd52649621861635fab746df91735',1,'glm']]], - ['packed_5flowp_5fmat3x3',['packed_lowp_mat3x3',['../a00303.html#ga5adf1802c5375a9dfb1729691bedd94e',1,'glm']]], - ['packed_5flowp_5fmat3x4',['packed_lowp_mat3x4',['../a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f',1,'glm']]], - ['packed_5flowp_5fmat4',['packed_lowp_mat4',['../a00303.html#ga2a1dd2387725a335413d4c4fee8609c4',1,'glm']]], - ['packed_5flowp_5fmat4x2',['packed_lowp_mat4x2',['../a00303.html#ga8f22607dcd090cd280071ccc689f4079',1,'glm']]], - ['packed_5flowp_5fmat4x3',['packed_lowp_mat4x3',['../a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c',1,'glm']]], - ['packed_5flowp_5fmat4x4',['packed_lowp_mat4x4',['../a00303.html#ga776f18d1a6e7d399f05d386167dc60f5',1,'glm']]], - ['packed_5flowp_5fuvec1',['packed_lowp_uvec1',['../a00303.html#gaf111fed760ecce16cb1988807569bee5',1,'glm']]], - ['packed_5flowp_5fuvec2',['packed_lowp_uvec2',['../a00303.html#ga958210fe245a75b058325d367c951132',1,'glm']]], - ['packed_5flowp_5fuvec3',['packed_lowp_uvec3',['../a00303.html#ga576a3f8372197a56a79dee1c8280f485',1,'glm']]], - ['packed_5flowp_5fuvec4',['packed_lowp_uvec4',['../a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da',1,'glm']]], - ['packed_5flowp_5fvec1',['packed_lowp_vec1',['../a00303.html#ga0a6198fe64166a6a61084d43c71518a9',1,'glm']]], - ['packed_5flowp_5fvec2',['packed_lowp_vec2',['../a00303.html#gafbf1c2cce307c5594b165819ed83bf5d',1,'glm']]], - ['packed_5flowp_5fvec3',['packed_lowp_vec3',['../a00303.html#ga3a30c137c1f8cce478c28eab0427a570',1,'glm']]], - ['packed_5flowp_5fvec4',['packed_lowp_vec4',['../a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a',1,'glm']]], - ['packed_5fmat2',['packed_mat2',['../a00303.html#gadd019b43fcf42e1590d45dddaa504a1a',1,'glm']]], - ['packed_5fmat2x2',['packed_mat2x2',['../a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517',1,'glm']]], - ['packed_5fmat2x3',['packed_mat2x3',['../a00303.html#ga301b76a89b8a9625501ca58815017f20',1,'glm']]], - ['packed_5fmat2x4',['packed_mat2x4',['../a00303.html#gac401da1dd9177ad81d7618a2a5541e23',1,'glm']]], - ['packed_5fmat3',['packed_mat3',['../a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a',1,'glm']]], - ['packed_5fmat3x2',['packed_mat3x2',['../a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa',1,'glm']]], - ['packed_5fmat3x3',['packed_mat3x3',['../a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99',1,'glm']]], - ['packed_5fmat3x4',['packed_mat3x4',['../a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8',1,'glm']]], - ['packed_5fmat4',['packed_mat4',['../a00303.html#ga2c139854e5b04cf08a957dee3b510441',1,'glm']]], - ['packed_5fmat4x2',['packed_mat4x2',['../a00303.html#ga379c1153f1339bdeaefd592bebf538e8',1,'glm']]], - ['packed_5fmat4x3',['packed_mat4x3',['../a00303.html#gab286466e19f7399c8d25089da9400d43',1,'glm']]], - ['packed_5fmat4x4',['packed_mat4x4',['../a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374',1,'glm']]], - ['packed_5fmediump_5fbvec1',['packed_mediump_bvec1',['../a00303.html#ga5546d828d63010a8f9cf81161ad0275a',1,'glm']]], - ['packed_5fmediump_5fbvec2',['packed_mediump_bvec2',['../a00303.html#gab4c6414a59539e66a242ad4cf4b476b4',1,'glm']]], - ['packed_5fmediump_5fbvec3',['packed_mediump_bvec3',['../a00303.html#ga70147763edff3fe96b03a0b98d6339a2',1,'glm']]], - ['packed_5fmediump_5fbvec4',['packed_mediump_bvec4',['../a00303.html#ga7b1620f259595b9da47a6374fc44588a',1,'glm']]], - ['packed_5fmediump_5fdmat2',['packed_mediump_dmat2',['../a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57',1,'glm']]], - ['packed_5fmediump_5fdmat2x2',['packed_mediump_dmat2x2',['../a00303.html#ga39e8bb9b70e5694964e8266a21ba534e',1,'glm']]], - ['packed_5fmediump_5fdmat2x3',['packed_mediump_dmat2x3',['../a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430',1,'glm']]], - ['packed_5fmediump_5fdmat2x4',['packed_mediump_dmat2x4',['../a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb',1,'glm']]], - ['packed_5fmediump_5fdmat3',['packed_mediump_dmat3',['../a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6',1,'glm']]], - ['packed_5fmediump_5fdmat3x2',['packed_mediump_dmat3x2',['../a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a',1,'glm']]], - ['packed_5fmediump_5fdmat3x3',['packed_mediump_dmat3x3',['../a00303.html#gaf85877d38d8cfbc21d59d939afd72375',1,'glm']]], - ['packed_5fmediump_5fdmat3x4',['packed_mediump_dmat3x4',['../a00303.html#gad5dcaf93df267bc3029174e430e0907f',1,'glm']]], - ['packed_5fmediump_5fdmat4',['packed_mediump_dmat4',['../a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332',1,'glm']]], - ['packed_5fmediump_5fdmat4x2',['packed_mediump_dmat4x2',['../a00303.html#ga9a15514a0631f700de6312b9d5db3a73',1,'glm']]], - ['packed_5fmediump_5fdmat4x3',['packed_mediump_dmat4x3',['../a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713',1,'glm']]], - ['packed_5fmediump_5fdmat4x4',['packed_mediump_dmat4x4',['../a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4',1,'glm']]], - ['packed_5fmediump_5fdvec1',['packed_mediump_dvec1',['../a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd',1,'glm']]], - ['packed_5fmediump_5fdvec2',['packed_mediump_dvec2',['../a00303.html#ga0c754a783b6fcf80374c013371c4dae9',1,'glm']]], - ['packed_5fmediump_5fdvec3',['packed_mediump_dvec3',['../a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4',1,'glm']]], - ['packed_5fmediump_5fdvec4',['packed_mediump_dvec4',['../a00303.html#ga568b850f1116b667043533cf77826968',1,'glm']]], - ['packed_5fmediump_5fivec1',['packed_mediump_ivec1',['../a00303.html#ga09507ef020a49517a7bcd50438f05056',1,'glm']]], - ['packed_5fmediump_5fivec2',['packed_mediump_ivec2',['../a00303.html#gaaa891048dddef4627df33809ec726219',1,'glm']]], - ['packed_5fmediump_5fivec3',['packed_mediump_ivec3',['../a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2',1,'glm']]], - ['packed_5fmediump_5fivec4',['packed_mediump_ivec4',['../a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8',1,'glm']]], - ['packed_5fmediump_5fmat2',['packed_mediump_mat2',['../a00303.html#ga43cd36d430c5187bfdca34a23cb41581',1,'glm']]], - ['packed_5fmediump_5fmat2x2',['packed_mediump_mat2x2',['../a00303.html#ga2d2a73e662759e301c22b8931ff6a526',1,'glm']]], - ['packed_5fmediump_5fmat2x3',['packed_mediump_mat2x3',['../a00303.html#ga99049db01faf1e95ed9fb875a47dffe2',1,'glm']]], - ['packed_5fmediump_5fmat2x4',['packed_mediump_mat2x4',['../a00303.html#gad43a240533f388ce0504b495d9df3d52',1,'glm']]], - ['packed_5fmediump_5fmat3',['packed_mediump_mat3',['../a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55',1,'glm']]], - ['packed_5fmediump_5fmat3x2',['packed_mediump_mat3x2',['../a00303.html#ga04cfaf1421284df3c24ea0985dab24e7',1,'glm']]], - ['packed_5fmediump_5fmat3x3',['packed_mediump_mat3x3',['../a00303.html#gaaa9cea174d342dd9650e3436823cab23',1,'glm']]], - ['packed_5fmediump_5fmat3x4',['packed_mediump_mat3x4',['../a00303.html#gabc93a9560593bd32e099c908531305f5',1,'glm']]], - ['packed_5fmediump_5fmat4',['packed_mediump_mat4',['../a00303.html#gae89d72ffc149147f61df701bbc8755bf',1,'glm']]], - ['packed_5fmediump_5fmat4x2',['packed_mediump_mat4x2',['../a00303.html#gaa458f9d9e0934bae3097e2a373b24707',1,'glm']]], - ['packed_5fmediump_5fmat4x3',['packed_mediump_mat4x3',['../a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6',1,'glm']]], - ['packed_5fmediump_5fmat4x4',['packed_mediump_mat4x4',['../a00303.html#gaf304f64c06743c1571401504d3f50259',1,'glm']]], - ['packed_5fmediump_5fuvec1',['packed_mediump_uvec1',['../a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34',1,'glm']]], - ['packed_5fmediump_5fuvec2',['packed_mediump_uvec2',['../a00303.html#gaa1f95690a78dc12e39da32943243aeef',1,'glm']]], - ['packed_5fmediump_5fuvec3',['packed_mediump_uvec3',['../a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab',1,'glm']]], - ['packed_5fmediump_5fuvec4',['packed_mediump_uvec4',['../a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45',1,'glm']]], - ['packed_5fmediump_5fvec1',['packed_mediump_vec1',['../a00303.html#ga71d63cead1e113fca0bcdaaa33aad050',1,'glm']]], - ['packed_5fmediump_5fvec2',['packed_mediump_vec2',['../a00303.html#ga6844c6f4691d1bf67673240850430948',1,'glm']]], - ['packed_5fmediump_5fvec3',['packed_mediump_vec3',['../a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8',1,'glm']]], - ['packed_5fmediump_5fvec4',['packed_mediump_vec4',['../a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e',1,'glm']]], - ['packed_5fuvec1',['packed_uvec1',['../a00303.html#ga5621493caac01bdd22ab6be4416b0314',1,'glm']]], - ['packed_5fuvec2',['packed_uvec2',['../a00303.html#gabcc33efb4d5e83b8fe4706360e75b932',1,'glm']]], - ['packed_5fuvec3',['packed_uvec3',['../a00303.html#gab96804e99e3a72a35740fec690c79617',1,'glm']]], - ['packed_5fuvec4',['packed_uvec4',['../a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2',1,'glm']]], - ['packed_5fvec1',['packed_vec1',['../a00303.html#ga14741e3d9da9ae83765389927f837331',1,'glm']]], - ['packed_5fvec2',['packed_vec2',['../a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66',1,'glm']]], - ['packed_5fvec3',['packed_vec3',['../a00303.html#gaccccd090e185450caa28b5b63ad4e8f0',1,'glm']]], - ['packed_5fvec4',['packed_vec4',['../a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d',1,'glm']]], - ['packf2x11_5f1x10',['packF2x11_1x10',['../a00298.html#ga4944ad465ff950e926d49621f916c78d',1,'glm']]], - ['packf3x9_5fe1x5',['packF3x9_E1x5',['../a00298.html#ga3f648fc205467792dc6d8c59c748f8a6',1,'glm']]], - ['packhalf',['packHalf',['../a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251',1,'glm']]], - ['packhalf1x16',['packHalf1x16',['../a00298.html#ga43f2093b6ff192a79058ff7834fc3528',1,'glm']]], - ['packhalf2x16',['packHalf2x16',['../a00372.html#ga20f134b07db3a3d3a38efb2617388c92',1,'glm']]], - ['packhalf4x16',['packHalf4x16',['../a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6',1,'glm']]], - ['packi3x10_5f1x2',['packI3x10_1x2',['../a00298.html#ga06ecb6afb902dba45419008171db9023',1,'glm']]], - ['packing_2ehpp',['packing.hpp',['../a00120.html',1,'']]], - ['packint2x16',['packInt2x16',['../a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e',1,'glm']]], - ['packint2x32',['packInt2x32',['../a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a',1,'glm']]], - ['packint2x8',['packInt2x8',['../a00298.html#ga8884b1f2292414f36d59ef3be5d62914',1,'glm']]], - ['packint4x16',['packInt4x16',['../a00298.html#ga1989f093a27ae69cf9207145be48b3d7',1,'glm']]], - ['packint4x8',['packInt4x8',['../a00298.html#gaf2238401d5ce2aaade1a44ba19709072',1,'glm']]], - ['packrgbm',['packRGBM',['../a00298.html#ga0466daf4c90f76cc64b3f105ce727295',1,'glm']]], - ['packsnorm',['packSnorm',['../a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8',1,'glm']]], - ['packsnorm1x16',['packSnorm1x16',['../a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af',1,'glm']]], - ['packsnorm1x8',['packSnorm1x8',['../a00298.html#gae3592e0795e62aaa1865b3a10496a7a1',1,'glm']]], - ['packsnorm2x16',['packSnorm2x16',['../a00372.html#ga977ab172da5494e5ac63e952afacfbe2',1,'glm']]], - ['packsnorm2x8',['packSnorm2x8',['../a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e',1,'glm']]], - ['packsnorm3x10_5f1x2',['packSnorm3x10_1x2',['../a00298.html#gab997545661877d2c7362a5084d3897d3',1,'glm']]], - ['packsnorm4x16',['packSnorm4x16',['../a00298.html#ga358943934d21da947d5bcc88c2ab7832',1,'glm']]], - ['packsnorm4x8',['packSnorm4x8',['../a00372.html#ga85e8f17627516445026ab7a9c2e3531a',1,'glm']]], - ['packu3x10_5f1x2',['packU3x10_1x2',['../a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0',1,'glm']]], - ['packuint2x16',['packUint2x16',['../a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19',1,'glm']]], - ['packuint2x32',['packUint2x32',['../a00298.html#gaa864081097b86e83d8e4a4d79c382b22',1,'glm']]], - ['packuint2x8',['packUint2x8',['../a00298.html#ga3c3c9fb53ae7823b10fa083909357590',1,'glm']]], - ['packuint4x16',['packUint4x16',['../a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9',1,'glm']]], - ['packuint4x8',['packUint4x8',['../a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab',1,'glm']]], - ['packunorm',['packUnorm',['../a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a',1,'glm']]], - ['packunorm1x16',['packUnorm1x16',['../a00298.html#ga9f82737bf2a44bedff1d286b76837886',1,'glm']]], - ['packunorm1x5_5f1x6_5f1x5',['packUnorm1x5_1x6_1x5',['../a00298.html#ga768e0337dd6246773f14aa0a421fe9a8',1,'glm']]], - ['packunorm1x8',['packUnorm1x8',['../a00298.html#ga4b2fa60df3460403817d28b082ee0736',1,'glm']]], - ['packunorm2x16',['packUnorm2x16',['../a00372.html#ga0e2d107039fe608a209497af867b85fb',1,'glm']]], - ['packunorm2x3_5f1x2',['packUnorm2x3_1x2',['../a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d',1,'glm']]], - ['packunorm2x4',['packUnorm2x4',['../a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c',1,'glm']]], - ['packunorm2x8',['packUnorm2x8',['../a00298.html#ga9a666b1c688ab54100061ed06526de6e',1,'glm']]], - ['packunorm3x10_5f1x2',['packUnorm3x10_1x2',['../a00298.html#ga8a1ee625d2707c60530fb3fca2980b19',1,'glm']]], - ['packunorm3x5_5f1x1',['packUnorm3x5_1x1',['../a00298.html#gaec4112086d7fb133bea104a7c237de52',1,'glm']]], - ['packunorm4x16',['packUnorm4x16',['../a00298.html#ga1f63c264e7ab63264e2b2a99fd393897',1,'glm']]], - ['packunorm4x4',['packUnorm4x4',['../a00298.html#gad3e7e3ce521513584a53aedc5f9765c1',1,'glm']]], - ['packunorm4x8',['packUnorm4x8',['../a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2',1,'glm']]], - ['perlin',['perlin',['../a00297.html#ga1e043ce3b51510e9bc4469227cefc38a',1,'glm::perlin(vec< L, T, Q > const &p)'],['../a00297.html#gac270edc54c5fc52f5985a45f940bb103',1,'glm::perlin(vec< L, T, Q > const &p, vec< L, T, Q > const &rep)']]], - ['perp',['perp',['../a00349.html#ga264cfc4e180cf9b852e943b35089003c',1,'glm']]], - ['perpendicular_2ehpp',['perpendicular.hpp',['../a00121.html',1,'']]], - ['perspective',['perspective',['../a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787',1,'glm']]], - ['perspectivefov',['perspectiveFov',['../a00243.html#gaebd02240fd36e85ad754f02ddd9a560d',1,'glm']]], - ['perspectivefovlh',['perspectiveFovLH',['../a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa',1,'glm']]], - ['perspectivefovlh_5fno',['perspectiveFovLH_NO',['../a00243.html#gad18a4495b77530317327e8d466488c1a',1,'glm']]], - ['perspectivefovlh_5fzo',['perspectiveFovLH_ZO',['../a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c',1,'glm']]], - ['perspectivefovno',['perspectiveFovNO',['../a00243.html#gaf30e7bd3b1387a6776433dd5383e6633',1,'glm']]], - ['perspectivefovrh',['perspectiveFovRH',['../a00243.html#gaf32bf563f28379c68554a44ee60c6a85',1,'glm']]], - ['perspectivefovrh_5fno',['perspectiveFovRH_NO',['../a00243.html#ga257b733ff883c9a065801023cf243eb2',1,'glm']]], - ['perspectivefovrh_5fzo',['perspectiveFovRH_ZO',['../a00243.html#ga7dcbb25331676f5b0795aced1a905c44',1,'glm']]], - ['perspectivefovzo',['perspectiveFovZO',['../a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b',1,'glm']]], - ['perspectivelh',['perspectiveLH',['../a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f',1,'glm']]], - ['perspectivelh_5fno',['perspectiveLH_NO',['../a00243.html#gaead4d049d1feab463b700b5641aa590e',1,'glm']]], - ['perspectivelh_5fzo',['perspectiveLH_ZO',['../a00243.html#gaca32af88c2719005c02817ad1142986c',1,'glm']]], - ['perspectiveno',['perspectiveNO',['../a00243.html#gaf497e6bca61e7c87088370b126a93758',1,'glm']]], - ['perspectiverh',['perspectiveRH',['../a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1',1,'glm']]], - ['perspectiverh_5fno',['perspectiveRH_NO',['../a00243.html#gad1526cb2cbe796095284e8f34b01c582',1,'glm']]], - ['perspectiverh_5fzo',['perspectiveRH_ZO',['../a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a',1,'glm']]], - ['perspectivezo',['perspectiveZO',['../a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47',1,'glm']]], - ['pi',['pi',['../a00259.html#ga94bafeb2a0f23ab6450fed1f98ee4e45',1,'glm']]], - ['pickmatrix',['pickMatrix',['../a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82',1,'glm']]], - ['pitch',['pitch',['../a00299.html#ga7603e81477b46ddb448896909bc04928',1,'glm']]], - ['polar',['polar',['../a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d',1,'glm']]], - ['polar_5fcoordinates_2ehpp',['polar_coordinates.hpp',['../a00122.html',1,'']]], - ['pow',['pow',['../a00242.html#ga2254981952d4f333b900a6bf5167a6c4',1,'glm::pow(vec< L, T, Q > const &base, vec< L, T, Q > const &exponent)'],['../a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e',1,'glm::pow(qua< T, Q > const &q, T y)'],['../a00330.html#ga465016030a81d513fa2fac881ebdaa83',1,'glm::pow(int x, uint y)'],['../a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0',1,'glm::pow(uint x, uint y)']]], - ['pow2',['pow2',['../a00347.html#ga19aaff3213bf23bdec3ef124ace237e9',1,'glm::gtx']]], - ['pow3',['pow3',['../a00347.html#ga35689d03cd434d6ea819f1942d3bf82e',1,'glm::gtx']]], - ['pow4',['pow4',['../a00347.html#gacef0968763026e180e53e735007dbf5a',1,'glm::gtx']]], - ['poweroftwoabove',['powerOfTwoAbove',['../a00309.html#ga8cda2459871f574a0aecbe702ac93291',1,'glm::powerOfTwoAbove(genIUType Value)'],['../a00309.html#ga2bbded187c5febfefc1e524ba31b3fab',1,'glm::powerOfTwoAbove(vec< L, T, Q > const &value)']]], - ['poweroftwobelow',['powerOfTwoBelow',['../a00309.html#ga3de7df63c589325101a2817a56f8e29d',1,'glm::powerOfTwoBelow(genIUType Value)'],['../a00309.html#gaf78ddcc4152c051b2a21e68fecb10980',1,'glm::powerOfTwoBelow(vec< L, T, Q > const &value)']]], - ['poweroftwonearest',['powerOfTwoNearest',['../a00309.html#ga5f65973a5d2ea38c719e6a663149ead9',1,'glm::powerOfTwoNearest(genIUType Value)'],['../a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b',1,'glm::powerOfTwoNearest(vec< L, T, Q > const &value)']]], - ['prevmultiple',['prevMultiple',['../a00261.html#gada3bdd871ffe31f2d484aa668362f636',1,'glm::prevMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#ga7b3915a7cd3d50ff4976ab7a75a6880a',1,'glm::prevMultiple(vec< L, T, Q > const &v, T Multiple)'],['../a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9',1,'glm::prevMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)']]], - ['prevpoweroftwo',['prevPowerOfTwo',['../a00261.html#gab21902a0e7e5a8451a7ad80333618727',1,'glm::prevPowerOfTwo(genIUType v)'],['../a00274.html#ga759db73f14d79f63612bd2398b577e7a',1,'glm::prevPowerOfTwo(vec< L, T, Q > const &v)']]], - ['proj',['proj',['../a00351.html#ga58384b7170801dd513de46f87c7fb00e',1,'glm']]], - ['proj2d',['proj2D',['../a00363.html#ga5b992a0cdc8298054edb68e228f0d93e',1,'glm']]], - ['proj3d',['proj3D',['../a00363.html#gaa2b7f4f15b98f697caede11bef50509e',1,'glm']]], - ['project',['project',['../a00245.html#gaf36e96033f456659e6705472a06b6e11',1,'glm']]], - ['projection_2ehpp',['projection.hpp',['../a00123.html',1,'']]], - ['projectno',['projectNO',['../a00245.html#ga05249751f48d14cb282e4979802b8111',1,'glm']]], - ['projectzo',['projectZO',['../a00245.html#ga77d157525063dec83a557186873ee080',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_e.html b/tests/OpenGL/package/glm/doc/api/search/all_e.html deleted file mode 100644 index 07d52599..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_e.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_e.js b/tests/OpenGL/package/glm/doc/api/search/all_e.js deleted file mode 100644 index 5c191852..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_e.js +++ /dev/null @@ -1,31 +0,0 @@ -var searchData= -[ - ['qr_5fdecompose',['qr_decompose',['../a00336.html#gac62d7bfc8dc661e616620d70552cd566',1,'glm']]], - ['quadraticeasein',['quadraticEaseIn',['../a00318.html#gaf42089d35855695132d217cd902304a0',1,'glm']]], - ['quadraticeaseinout',['quadraticEaseInOut',['../a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea',1,'glm']]], - ['quadraticeaseout',['quadraticEaseOut',['../a00318.html#ga283717bc2d937547ad34ec0472234ee3',1,'glm']]], - ['quarter_5fpi',['quarter_pi',['../a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0',1,'glm']]], - ['quarticeasein',['quarticEaseIn',['../a00318.html#ga808b41f14514f47dad5dcc69eb924afd',1,'glm']]], - ['quarticeaseinout',['quarticEaseInOut',['../a00318.html#ga6d000f852de12b197e154f234b20c505',1,'glm']]], - ['quarticeaseout',['quarticEaseOut',['../a00318.html#ga4dfb33fa7664aa888eb647999d329b98',1,'glm']]], - ['quat',['quat',['../a00252.html#gab0b441adb4509bc58d2946c2239a8942',1,'glm']]], - ['quat_5fcast',['quat_cast',['../a00299.html#ga1108a4ab88ca87bac321454eea7702f8',1,'glm::quat_cast(mat< 3, 3, T, Q > const &x)'],['../a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58',1,'glm::quat_cast(mat< 4, 4, T, Q > const &x)']]], - ['quat_5fidentity',['quat_identity',['../a00352.html#ga5ee8332600b2aca3a77622a28d857b55',1,'glm']]], - ['quaternion_5fcommon_2ehpp',['quaternion_common.hpp',['../a00127.html',1,'']]], - ['quaternion_5fdouble_2ehpp',['quaternion_double.hpp',['../a00128.html',1,'']]], - ['quaternion_5fdouble_5fprecision_2ehpp',['quaternion_double_precision.hpp',['../a00129.html',1,'']]], - ['quaternion_5fexponential_2ehpp',['quaternion_exponential.hpp',['../a00130.html',1,'']]], - ['quaternion_5ffloat_2ehpp',['quaternion_float.hpp',['../a00131.html',1,'']]], - ['quaternion_5ffloat_5fprecision_2ehpp',['quaternion_float_precision.hpp',['../a00132.html',1,'']]], - ['quaternion_5fgeometric_2ehpp',['quaternion_geometric.hpp',['../a00133.html',1,'']]], - ['quaternion_5frelational_2ehpp',['quaternion_relational.hpp',['../a00134.html',1,'']]], - ['quaternion_5ftransform_2ehpp',['quaternion_transform.hpp',['../a00135.html',1,'']]], - ['quaternion_5ftrigonometric_2ehpp',['quaternion_trigonometric.hpp',['../a00136.html',1,'']]], - ['quatlookat',['quatLookAt',['../a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f',1,'glm']]], - ['quatlookatlh',['quatLookAtLH',['../a00299.html#ga2da350c73411be3bb19441b226b81a74',1,'glm']]], - ['quatlookatrh',['quatLookAtRH',['../a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8',1,'glm']]], - ['quinticeasein',['quinticEaseIn',['../a00318.html#ga097579d8e087dcf48037588140a21640',1,'glm']]], - ['quinticeaseinout',['quinticEaseInOut',['../a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934',1,'glm']]], - ['quinticeaseout',['quinticEaseOut',['../a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7',1,'glm']]], - ['qword',['qword',['../a00354.html#ga4021754ffb8e5ef14c75802b15657714',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/all_f.html b/tests/OpenGL/package/glm/doc/api/search/all_f.html deleted file mode 100644 index 2213eb20..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_f.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/all_f.js b/tests/OpenGL/package/glm/doc/api/search/all_f.js deleted file mode 100644 index 5c57a49a..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/all_f.js +++ /dev/null @@ -1,43 +0,0 @@ -var searchData= -[ - ['recommended_20extensions',['Recommended extensions',['../a00286.html',1,'']]], - ['radialgradient',['radialGradient',['../a00327.html#gaaecb1e93de4cbe0758b882812d4da294',1,'glm']]], - ['radians',['radians',['../a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68',1,'glm']]], - ['random_2ehpp',['random.hpp',['../a00137.html',1,'']]], - ['range_2ehpp',['range.hpp',['../a00138.html',1,'']]], - ['raw_5fdata_2ehpp',['raw_data.hpp',['../a00139.html',1,'']]], - ['reciprocal_2ehpp',['reciprocal.hpp',['../a00140.html',1,'']]], - ['reflect',['reflect',['../a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905',1,'glm']]], - ['refract',['refract',['../a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74',1,'glm']]], - ['repeat',['repeat',['../a00369.html#ga809650c6310ea7c42666e918c117fb6f',1,'glm']]], - ['rgb2ycocg',['rgb2YCoCg',['../a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5',1,'glm']]], - ['rgb2ycocgr',['rgb2YCoCgR',['../a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898',1,'glm']]], - ['rgbcolor',['rgbColor',['../a00312.html#ga5f9193be46f45f0655c05a0cdca006db',1,'glm']]], - ['righthanded',['rightHanded',['../a00328.html#ga99386a5ab5491871b947076e21699cc8',1,'glm']]], - ['roll',['roll',['../a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13',1,'glm']]], - ['root_5ffive',['root_five',['../a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2',1,'glm']]], - ['root_5fhalf_5fpi',['root_half_pi',['../a00290.html#ga4e276cb823cc5e612d4f89ed99c75039',1,'glm']]], - ['root_5fln_5ffour',['root_ln_four',['../a00290.html#ga4129412e96b33707a77c1a07652e23e2',1,'glm']]], - ['root_5fpi',['root_pi',['../a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9',1,'glm']]], - ['root_5fthree',['root_three',['../a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e',1,'glm']]], - ['root_5ftwo',['root_two',['../a00290.html#ga74e607d29020f100c0d0dc46ce2ca950',1,'glm']]], - ['root_5ftwo_5fpi',['root_two_pi',['../a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3',1,'glm']]], - ['rotate',['rotate',['../a00247.html#gaee9e865eaa9776370996da2940873fd4',1,'glm::rotate(mat< 4, 4, T, Q > const &m, T angle, vec< 3, T, Q > const &axis)'],['../a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5',1,'glm::rotate(qua< T, Q > const &q, T const &angle, vec< 3, T, Q > const &axis)'],['../a00341.html#gad5c84a4932a758f385a87098ce1b1660',1,'glm::rotate(mat< 3, 3, T, Q > const &m, T angle)'],['../a00352.html#ga07da6ef58646442efe93b0c273d73776',1,'glm::rotate(qua< T, Q > const &q, vec< 3, T, Q > const &v)'],['../a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196',1,'glm::rotate(qua< T, Q > const &q, vec< 4, T, Q > const &v)'],['../a00356.html#gab64a67b52ff4f86c3ba16595a5a25af6',1,'glm::rotate(vec< 2, T, Q > const &v, T const &angle)'],['../a00356.html#ga1ba501ef83d1a009a17ac774cc560f21',1,'glm::rotate(vec< 3, T, Q > const &v, T const &angle, vec< 3, T, Q > const &normal)'],['../a00356.html#ga1005f1267ed9c57faa3f24cf6873b961',1,'glm::rotate(vec< 4, T, Q > const &v, T const &angle, vec< 3, T, Q > const &normal)'],['../a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b',1,'glm::rotate(T angle, vec< 3, T, Q > const &v)']]], - ['rotate_5fnormalized_5faxis_2ehpp',['rotate_normalized_axis.hpp',['../a00141.html',1,'']]], - ['rotate_5fvector_2ehpp',['rotate_vector.hpp',['../a00142.html',1,'']]], - ['rotatenormalizedaxis',['rotateNormalizedAxis',['../a00355.html#ga50efd7ebca0f7a603bb3cc11e34c708d',1,'glm::rotateNormalizedAxis(mat< 4, 4, T, Q > const &m, T const &angle, vec< 3, T, Q > const &axis)'],['../a00355.html#ga08f9c5411437d528019a25bfc01473d1',1,'glm::rotateNormalizedAxis(qua< T, Q > const &q, T const &angle, vec< 3, T, Q > const &axis)']]], - ['rotatex',['rotateX',['../a00356.html#ga059fdbdba4cca35cdff172a9d0d0afc9',1,'glm::rotateX(vec< 3, T, Q > const &v, T const &angle)'],['../a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a',1,'glm::rotateX(vec< 4, T, Q > const &v, T const &angle)']]], - ['rotatey',['rotateY',['../a00356.html#gaebdc8b054ace27d9f62e054531c6f44d',1,'glm::rotateY(vec< 3, T, Q > const &v, T const &angle)'],['../a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b',1,'glm::rotateY(vec< 4, T, Q > const &v, T const &angle)']]], - ['rotatez',['rotateZ',['../a00356.html#ga5a048838a03f6249acbacb4dbacf79c4',1,'glm::rotateZ(vec< 3, T, Q > const &v, T const &angle)'],['../a00356.html#ga923b75c6448161053768822d880702e6',1,'glm::rotateZ(vec< 4, T, Q > const &v, T const &angle)']]], - ['rotation',['rotation',['../a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5',1,'glm']]], - ['round',['round',['../a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e',1,'glm']]], - ['round_2ehpp',['round.hpp',['../a00143.html',1,'']]], - ['roundeven',['roundEven',['../a00241.html#ga76b81785045a057989a84d99aeeb1578',1,'glm']]], - ['roundmultiple',['roundMultiple',['../a00302.html#gab892defcc9c0b0618df7251253dc0fbb',1,'glm::roundMultiple(genType v, genType Multiple)'],['../a00302.html#ga2f1a68332d761804c054460a612e3a4b',1,'glm::roundMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)']]], - ['roundpoweroftwo',['roundPowerOfTwo',['../a00302.html#gae4e1bf5d1cd179f59261a7342bdcafca',1,'glm::roundPowerOfTwo(genIUType v)'],['../a00302.html#ga258802a7d55c03c918f28cf4d241c4d0',1,'glm::roundPowerOfTwo(vec< L, T, Q > const &v)']]], - ['row',['row',['../a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba',1,'glm::row(genType const &m, length_t index)'],['../a00293.html#gaadcc64829aadf4103477679e48c7594f',1,'glm::row(genType const &m, length_t index, typename genType::row_type const &x)']]], - ['rowmajor2',['rowMajor2',['../a00338.html#gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8',1,'glm::rowMajor2(vec< 2, T, Q > const &v1, vec< 2, T, Q > const &v2)'],['../a00338.html#gaf66c75ed69ca9e87462550708c2c6726',1,'glm::rowMajor2(mat< 2, 2, T, Q > const &m)']]], - ['rowmajor3',['rowMajor3',['../a00338.html#ga2ae46497493339f745754e40f438442e',1,'glm::rowMajor3(vec< 3, T, Q > const &v1, vec< 3, T, Q > const &v2, vec< 3, T, Q > const &v3)'],['../a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77',1,'glm::rowMajor3(mat< 3, 3, T, Q > const &m)']]], - ['rowmajor4',['rowMajor4',['../a00338.html#ga9636cd6bbe2c32a8d0c03ffb8b1ef284',1,'glm::rowMajor4(vec< 4, T, Q > const &v1, vec< 4, T, Q > const &v2, vec< 4, T, Q > const &v3, vec< 4, T, Q > const &v4)'],['../a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b',1,'glm::rowMajor4(mat< 4, 4, T, Q > const &m)']]], - ['rq_5fdecompose',['rq_decompose',['../a00336.html#ga82874e2ebe891ba35ac21d9993873758',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/close.png b/tests/OpenGL/package/glm/doc/api/search/close.png deleted file mode 100644 index 9342d3dfeea7b7c4ee610987e717804b5a42ceb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN diff --git a/tests/OpenGL/package/glm/doc/api/search/files_0.html b/tests/OpenGL/package/glm/doc/api/search/files_0.html deleted file mode 100644 index a2ec540b..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_0.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_0.js b/tests/OpenGL/package/glm/doc/api/search/files_0.js deleted file mode 100644 index 982f2481..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['associated_5fmin_5fmax_2ehpp',['associated_min_max.hpp',['../a00007.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_1.html b/tests/OpenGL/package/glm/doc/api/search/files_1.html deleted file mode 100644 index 9e974daa..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_1.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_1.js b/tests/OpenGL/package/glm/doc/api/search/files_1.js deleted file mode 100644 index dbaf5217..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_1.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['bit_2ehpp',['bit.hpp',['../a00008.html',1,'']]], - ['bitfield_2ehpp',['bitfield.hpp',['../a00009.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_10.html b/tests/OpenGL/package/glm/doc/api/search/files_10.html deleted file mode 100644 index 940ba517..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_10.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_10.js b/tests/OpenGL/package/glm/doc/api/search/files_10.js deleted file mode 100644 index 483e4e9c..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_10.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['scalar_5fcommon_2ehpp',['scalar_common.hpp',['../a00144.html',1,'']]], - ['scalar_5fconstants_2ehpp',['scalar_constants.hpp',['../a00145.html',1,'']]], - ['scalar_5fint_5fsized_2ehpp',['scalar_int_sized.hpp',['../a00146.html',1,'']]], - ['scalar_5finteger_2ehpp',['scalar_integer.hpp',['../a00147.html',1,'']]], - ['scalar_5fmultiplication_2ehpp',['scalar_multiplication.hpp',['../a00148.html',1,'']]], - ['scalar_5fuint_5fsized_2ehpp',['scalar_uint_sized.hpp',['../a00151.html',1,'']]], - ['scalar_5fulp_2ehpp',['scalar_ulp.hpp',['../a00152.html',1,'']]], - ['spline_2ehpp',['spline.hpp',['../a00154.html',1,'']]], - ['std_5fbased_5ftype_2ehpp',['std_based_type.hpp',['../a00155.html',1,'']]], - ['string_5fcast_2ehpp',['string_cast.hpp',['../a00156.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_11.html b/tests/OpenGL/package/glm/doc/api/search/files_11.html deleted file mode 100644 index f00dc5e1..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_11.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_11.js b/tests/OpenGL/package/glm/doc/api/search/files_11.js deleted file mode 100644 index ca073366..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_11.js +++ /dev/null @@ -1,24 +0,0 @@ -var searchData= -[ - ['texture_2ehpp',['texture.hpp',['../a00157.html',1,'']]], - ['transform_2ehpp',['transform.hpp',['../a00158.html',1,'']]], - ['transform2_2ehpp',['transform2.hpp',['../a00159.html',1,'']]], - ['trigonometric_2ehpp',['trigonometric.hpp',['../a00160.html',1,'']]], - ['type_5fmat2x2_2ehpp',['type_mat2x2.hpp',['../a00165.html',1,'']]], - ['type_5fmat2x3_2ehpp',['type_mat2x3.hpp',['../a00166.html',1,'']]], - ['type_5fmat2x4_2ehpp',['type_mat2x4.hpp',['../a00167.html',1,'']]], - ['type_5fmat3x2_2ehpp',['type_mat3x2.hpp',['../a00168.html',1,'']]], - ['type_5fmat3x3_2ehpp',['type_mat3x3.hpp',['../a00169.html',1,'']]], - ['type_5fmat3x4_2ehpp',['type_mat3x4.hpp',['../a00170.html',1,'']]], - ['type_5fmat4x2_2ehpp',['type_mat4x2.hpp',['../a00171.html',1,'']]], - ['type_5fmat4x3_2ehpp',['type_mat4x3.hpp',['../a00172.html',1,'']]], - ['type_5fmat4x4_2ehpp',['type_mat4x4.hpp',['../a00173.html',1,'']]], - ['type_5fprecision_2ehpp',['type_precision.hpp',['../a00174.html',1,'']]], - ['type_5fptr_2ehpp',['type_ptr.hpp',['../a00175.html',1,'']]], - ['type_5fquat_2ehpp',['type_quat.hpp',['../a00176.html',1,'']]], - ['type_5ftrait_2ehpp',['type_trait.hpp',['../a00177.html',1,'']]], - ['type_5fvec1_2ehpp',['type_vec1.hpp',['../a00178.html',1,'']]], - ['type_5fvec2_2ehpp',['type_vec2.hpp',['../a00179.html',1,'']]], - ['type_5fvec3_2ehpp',['type_vec3.hpp',['../a00180.html',1,'']]], - ['type_5fvec4_2ehpp',['type_vec4.hpp',['../a00181.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_12.html b/tests/OpenGL/package/glm/doc/api/search/files_12.html deleted file mode 100644 index 7f023c91..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_12.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_12.js b/tests/OpenGL/package/glm/doc/api/search/files_12.js deleted file mode 100644 index b5cd4a3b..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_12.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['ulp_2ehpp',['ulp.hpp',['../a00182.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_13.html b/tests/OpenGL/package/glm/doc/api/search/files_13.html deleted file mode 100644 index dc6bd8a9..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_13.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_13.js b/tests/OpenGL/package/glm/doc/api/search/files_13.js deleted file mode 100644 index ffefcf3c..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_13.js +++ /dev/null @@ -1,54 +0,0 @@ -var searchData= -[ - ['vec1_2ehpp',['vec1.hpp',['../a00183.html',1,'']]], - ['vec2_2ehpp',['vec2.hpp',['../a00184.html',1,'']]], - ['vec3_2ehpp',['vec3.hpp',['../a00185.html',1,'']]], - ['vec4_2ehpp',['vec4.hpp',['../a00186.html',1,'']]], - ['vec_5fswizzle_2ehpp',['vec_swizzle.hpp',['../a00187.html',1,'']]], - ['vector_5fangle_2ehpp',['vector_angle.hpp',['../a00188.html',1,'']]], - ['vector_5fbool1_2ehpp',['vector_bool1.hpp',['../a00189.html',1,'']]], - ['vector_5fbool1_5fprecision_2ehpp',['vector_bool1_precision.hpp',['../a00190.html',1,'']]], - ['vector_5fbool2_2ehpp',['vector_bool2.hpp',['../a00191.html',1,'']]], - ['vector_5fbool2_5fprecision_2ehpp',['vector_bool2_precision.hpp',['../a00192.html',1,'']]], - ['vector_5fbool3_2ehpp',['vector_bool3.hpp',['../a00193.html',1,'']]], - ['vector_5fbool3_5fprecision_2ehpp',['vector_bool3_precision.hpp',['../a00194.html',1,'']]], - ['vector_5fbool4_2ehpp',['vector_bool4.hpp',['../a00195.html',1,'']]], - ['vector_5fbool4_5fprecision_2ehpp',['vector_bool4_precision.hpp',['../a00196.html',1,'']]], - ['vector_5fcommon_2ehpp',['vector_common.hpp',['../a00197.html',1,'']]], - ['vector_5fdouble1_2ehpp',['vector_double1.hpp',['../a00198.html',1,'']]], - ['vector_5fdouble1_5fprecision_2ehpp',['vector_double1_precision.hpp',['../a00199.html',1,'']]], - ['vector_5fdouble2_2ehpp',['vector_double2.hpp',['../a00200.html',1,'']]], - ['vector_5fdouble2_5fprecision_2ehpp',['vector_double2_precision.hpp',['../a00201.html',1,'']]], - ['vector_5fdouble3_2ehpp',['vector_double3.hpp',['../a00202.html',1,'']]], - ['vector_5fdouble3_5fprecision_2ehpp',['vector_double3_precision.hpp',['../a00203.html',1,'']]], - ['vector_5fdouble4_2ehpp',['vector_double4.hpp',['../a00204.html',1,'']]], - ['vector_5fdouble4_5fprecision_2ehpp',['vector_double4_precision.hpp',['../a00205.html',1,'']]], - ['vector_5ffloat1_2ehpp',['vector_float1.hpp',['../a00206.html',1,'']]], - ['vector_5ffloat1_5fprecision_2ehpp',['vector_float1_precision.hpp',['../a00207.html',1,'']]], - ['vector_5ffloat2_2ehpp',['vector_float2.hpp',['../a00208.html',1,'']]], - ['vector_5ffloat2_5fprecision_2ehpp',['vector_float2_precision.hpp',['../a00209.html',1,'']]], - ['vector_5ffloat3_2ehpp',['vector_float3.hpp',['../a00210.html',1,'']]], - ['vector_5ffloat3_5fprecision_2ehpp',['vector_float3_precision.hpp',['../a00211.html',1,'']]], - ['vector_5ffloat4_2ehpp',['vector_float4.hpp',['../a00212.html',1,'']]], - ['vector_5ffloat4_5fprecision_2ehpp',['vector_float4_precision.hpp',['../a00213.html',1,'']]], - ['vector_5fint1_2ehpp',['vector_int1.hpp',['../a00214.html',1,'']]], - ['vector_5fint1_5fprecision_2ehpp',['vector_int1_precision.hpp',['../a00215.html',1,'']]], - ['vector_5fint2_2ehpp',['vector_int2.hpp',['../a00216.html',1,'']]], - ['vector_5fint2_5fprecision_2ehpp',['vector_int2_precision.hpp',['../a00217.html',1,'']]], - ['vector_5fint3_2ehpp',['vector_int3.hpp',['../a00218.html',1,'']]], - ['vector_5fint3_5fprecision_2ehpp',['vector_int3_precision.hpp',['../a00219.html',1,'']]], - ['vector_5fint4_2ehpp',['vector_int4.hpp',['../a00220.html',1,'']]], - ['vector_5fint4_5fprecision_2ehpp',['vector_int4_precision.hpp',['../a00221.html',1,'']]], - ['vector_5finteger_2ehpp',['vector_integer.hpp',['../a00222.html',1,'']]], - ['vector_5fquery_2ehpp',['vector_query.hpp',['../a00223.html',1,'']]], - ['vector_5frelational_2ehpp',['vector_relational.hpp',['../a00225.html',1,'']]], - ['vector_5fuint1_2ehpp',['vector_uint1.hpp',['../a00226.html',1,'']]], - ['vector_5fuint1_5fprecision_2ehpp',['vector_uint1_precision.hpp',['../a00227.html',1,'']]], - ['vector_5fuint2_2ehpp',['vector_uint2.hpp',['../a00228.html',1,'']]], - ['vector_5fuint2_5fprecision_2ehpp',['vector_uint2_precision.hpp',['../a00229.html',1,'']]], - ['vector_5fuint3_2ehpp',['vector_uint3.hpp',['../a00230.html',1,'']]], - ['vector_5fuint3_5fprecision_2ehpp',['vector_uint3_precision.hpp',['../a00231.html',1,'']]], - ['vector_5fuint4_2ehpp',['vector_uint4.hpp',['../a00232.html',1,'']]], - ['vector_5fuint4_5fprecision_2ehpp',['vector_uint4_precision.hpp',['../a00233.html',1,'']]], - ['vector_5fulp_2ehpp',['vector_ulp.hpp',['../a00234.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_14.html b/tests/OpenGL/package/glm/doc/api/search/files_14.html deleted file mode 100644 index 6f6f1a2e..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_14.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_14.js b/tests/OpenGL/package/glm/doc/api/search/files_14.js deleted file mode 100644 index 459eecd8..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_14.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['wrap_2ehpp',['wrap.hpp',['../a00235.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_2.html b/tests/OpenGL/package/glm/doc/api/search/files_2.html deleted file mode 100644 index 04348f90..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_2.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_2.js b/tests/OpenGL/package/glm/doc/api/search/files_2.js deleted file mode 100644 index 67e6bfee..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_2.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['closest_5fpoint_2ehpp',['closest_point.hpp',['../a00010.html',1,'']]], - ['color_5fencoding_2ehpp',['color_encoding.hpp',['../a00011.html',1,'']]], - ['color_5fspace_5fycocg_2ehpp',['color_space_YCoCg.hpp',['../a00014.html',1,'']]], - ['common_2ehpp',['common.hpp',['../a00015.html',1,'']]], - ['compatibility_2ehpp',['compatibility.hpp',['../a00017.html',1,'']]], - ['component_5fwise_2ehpp',['component_wise.hpp',['../a00018.html',1,'']]], - ['constants_2ehpp',['constants.hpp',['../a00021.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_3.html b/tests/OpenGL/package/glm/doc/api/search/files_3.html deleted file mode 100644 index 77942003..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_3.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_3.js b/tests/OpenGL/package/glm/doc/api/search/files_3.js deleted file mode 100644 index 86a16b80..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['dual_5fquaternion_2ehpp',['dual_quaternion.hpp',['../a00022.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_4.html b/tests/OpenGL/package/glm/doc/api/search/files_4.html deleted file mode 100644 index e6bc2852..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_4.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_4.js b/tests/OpenGL/package/glm/doc/api/search/files_4.js deleted file mode 100644 index ac40ef7d..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_4.js +++ /dev/null @@ -1,14 +0,0 @@ -var searchData= -[ - ['easing_2ehpp',['easing.hpp',['../a00023.html',1,'']]], - ['epsilon_2ehpp',['epsilon.hpp',['../a00024.html',1,'']]], - ['euler_5fangles_2ehpp',['euler_angles.hpp',['../a00025.html',1,'']]], - ['exponential_2ehpp',['exponential.hpp',['../a00026.html',1,'']]], - ['ext_2ehpp',['ext.hpp',['../a00027.html',1,'']]], - ['extend_2ehpp',['extend.hpp',['../a00028.html',1,'']]], - ['extended_5fmin_5fmax_2ehpp',['extended_min_max.hpp',['../a00029.html',1,'']]], - ['exterior_5fproduct_2ehpp',['exterior_product.hpp',['../a00030.html',1,'']]], - ['matrix_5ftransform_2ehpp',['matrix_transform.hpp',['../a00108.html',1,'']]], - ['scalar_5frelational_2ehpp',['scalar_relational.hpp',['../a00149.html',1,'']]], - ['vector_5frelational_2ehpp',['vector_relational.hpp',['../a00224.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_5.html b/tests/OpenGL/package/glm/doc/api/search/files_5.html deleted file mode 100644 index 5ab2ed6a..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_5.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_5.js b/tests/OpenGL/package/glm/doc/api/search/files_5.js deleted file mode 100644 index 828375ff..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_5.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['fast_5fexponential_2ehpp',['fast_exponential.hpp',['../a00031.html',1,'']]], - ['fast_5fsquare_5froot_2ehpp',['fast_square_root.hpp',['../a00032.html',1,'']]], - ['fast_5ftrigonometry_2ehpp',['fast_trigonometry.hpp',['../a00033.html',1,'']]], - ['functions_2ehpp',['functions.hpp',['../a00034.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_6.html b/tests/OpenGL/package/glm/doc/api/search/files_6.html deleted file mode 100644 index 9453495a..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_6.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_6.js b/tests/OpenGL/package/glm/doc/api/search/files_6.js deleted file mode 100644 index 4221be56..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_6.js +++ /dev/null @@ -1,18 +0,0 @@ -var searchData= -[ - ['color_5fspace_2ehpp',['color_space.hpp',['../a00012.html',1,'']]], - ['color_5fspace_2ehpp',['color_space.hpp',['../a00013.html',1,'']]], - ['common_2ehpp',['common.hpp',['../a00016.html',1,'']]], - ['geometric_2ehpp',['geometric.hpp',['../a00036.html',1,'']]], - ['glm_2ehpp',['glm.hpp',['../a00037.html',1,'']]], - ['gradient_5fpaint_2ehpp',['gradient_paint.hpp',['../a00038.html',1,'']]], - ['integer_2ehpp',['integer.hpp',['../a00042.html',1,'']]], - ['integer_2ehpp',['integer.hpp',['../a00041.html',1,'']]], - ['matrix_5ftransform_2ehpp',['matrix_transform.hpp',['../a00109.html',1,'']]], - ['packing_2ehpp',['packing.hpp',['../a00119.html',1,'']]], - ['quaternion_2ehpp',['quaternion.hpp',['../a00125.html',1,'']]], - ['quaternion_2ehpp',['quaternion.hpp',['../a00126.html',1,'']]], - ['scalar_5frelational_2ehpp',['scalar_relational.hpp',['../a00150.html',1,'']]], - ['type_5faligned_2ehpp',['type_aligned.hpp',['../a00162.html',1,'']]], - ['type_5faligned_2ehpp',['type_aligned.hpp',['../a00161.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_7.html b/tests/OpenGL/package/glm/doc/api/search/files_7.html deleted file mode 100644 index d3f65339..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_7.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_7.js b/tests/OpenGL/package/glm/doc/api/search/files_7.js deleted file mode 100644 index 4f23c6e5..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_7.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['handed_5fcoordinate_5fspace_2ehpp',['handed_coordinate_space.hpp',['../a00039.html',1,'']]], - ['hash_2ehpp',['hash.hpp',['../a00040.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_8.html b/tests/OpenGL/package/glm/doc/api/search/files_8.html deleted file mode 100644 index ec56765f..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_8.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_8.js b/tests/OpenGL/package/glm/doc/api/search/files_8.js deleted file mode 100644 index f3efa1d6..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_8.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['integer_2ehpp',['integer.hpp',['../a00043.html',1,'']]], - ['intersect_2ehpp',['intersect.hpp',['../a00044.html',1,'']]], - ['io_2ehpp',['io.hpp',['../a00045.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_9.html b/tests/OpenGL/package/glm/doc/api/search/files_9.html deleted file mode 100644 index 62a6c97a..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_9.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_9.js b/tests/OpenGL/package/glm/doc/api/search/files_9.js deleted file mode 100644 index 70f58791..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_9.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['log_5fbase_2ehpp',['log_base.hpp',['../a00046.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_a.html b/tests/OpenGL/package/glm/doc/api/search/files_a.html deleted file mode 100644 index d0b6fa89..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_a.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_a.js b/tests/OpenGL/package/glm/doc/api/search/files_a.js deleted file mode 100644 index e7ae0a31..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_a.js +++ /dev/null @@ -1,64 +0,0 @@ -var searchData= -[ - ['mat2x2_2ehpp',['mat2x2.hpp',['../a00048.html',1,'']]], - ['mat2x3_2ehpp',['mat2x3.hpp',['../a00049.html',1,'']]], - ['mat2x4_2ehpp',['mat2x4.hpp',['../a00050.html',1,'']]], - ['mat3x2_2ehpp',['mat3x2.hpp',['../a00051.html',1,'']]], - ['mat3x3_2ehpp',['mat3x3.hpp',['../a00052.html',1,'']]], - ['mat3x4_2ehpp',['mat3x4.hpp',['../a00053.html',1,'']]], - ['mat4x2_2ehpp',['mat4x2.hpp',['../a00054.html',1,'']]], - ['mat4x3_2ehpp',['mat4x3.hpp',['../a00055.html',1,'']]], - ['mat4x4_2ehpp',['mat4x4.hpp',['../a00056.html',1,'']]], - ['matrix_2ehpp',['matrix.hpp',['../a00057.html',1,'']]], - ['matrix_5faccess_2ehpp',['matrix_access.hpp',['../a00058.html',1,'']]], - ['matrix_5fclip_5fspace_2ehpp',['matrix_clip_space.hpp',['../a00059.html',1,'']]], - ['matrix_5fcommon_2ehpp',['matrix_common.hpp',['../a00060.html',1,'']]], - ['matrix_5fcross_5fproduct_2ehpp',['matrix_cross_product.hpp',['../a00061.html',1,'']]], - ['matrix_5fdecompose_2ehpp',['matrix_decompose.hpp',['../a00062.html',1,'']]], - ['matrix_5fdouble2x2_2ehpp',['matrix_double2x2.hpp',['../a00063.html',1,'']]], - ['matrix_5fdouble2x2_5fprecision_2ehpp',['matrix_double2x2_precision.hpp',['../a00064.html',1,'']]], - ['matrix_5fdouble2x3_2ehpp',['matrix_double2x3.hpp',['../a00065.html',1,'']]], - ['matrix_5fdouble2x3_5fprecision_2ehpp',['matrix_double2x3_precision.hpp',['../a00066.html',1,'']]], - ['matrix_5fdouble2x4_2ehpp',['matrix_double2x4.hpp',['../a00067.html',1,'']]], - ['matrix_5fdouble2x4_5fprecision_2ehpp',['matrix_double2x4_precision.hpp',['../a00068.html',1,'']]], - ['matrix_5fdouble3x2_2ehpp',['matrix_double3x2.hpp',['../a00069.html',1,'']]], - ['matrix_5fdouble3x2_5fprecision_2ehpp',['matrix_double3x2_precision.hpp',['../a00070.html',1,'']]], - ['matrix_5fdouble3x3_2ehpp',['matrix_double3x3.hpp',['../a00071.html',1,'']]], - ['matrix_5fdouble3x3_5fprecision_2ehpp',['matrix_double3x3_precision.hpp',['../a00072.html',1,'']]], - ['matrix_5fdouble3x4_2ehpp',['matrix_double3x4.hpp',['../a00073.html',1,'']]], - ['matrix_5fdouble3x4_5fprecision_2ehpp',['matrix_double3x4_precision.hpp',['../a00074.html',1,'']]], - ['matrix_5fdouble4x2_2ehpp',['matrix_double4x2.hpp',['../a00075.html',1,'']]], - ['matrix_5fdouble4x2_5fprecision_2ehpp',['matrix_double4x2_precision.hpp',['../a00076.html',1,'']]], - ['matrix_5fdouble4x3_2ehpp',['matrix_double4x3.hpp',['../a00077.html',1,'']]], - ['matrix_5fdouble4x3_5fprecision_2ehpp',['matrix_double4x3_precision.hpp',['../a00078.html',1,'']]], - ['matrix_5fdouble4x4_2ehpp',['matrix_double4x4.hpp',['../a00079.html',1,'']]], - ['matrix_5fdouble4x4_5fprecision_2ehpp',['matrix_double4x4_precision.hpp',['../a00080.html',1,'']]], - ['matrix_5ffactorisation_2ehpp',['matrix_factorisation.hpp',['../a00081.html',1,'']]], - ['matrix_5ffloat2x2_2ehpp',['matrix_float2x2.hpp',['../a00082.html',1,'']]], - ['matrix_5ffloat2x2_5fprecision_2ehpp',['matrix_float2x2_precision.hpp',['../a00083.html',1,'']]], - ['matrix_5ffloat2x3_2ehpp',['matrix_float2x3.hpp',['../a00084.html',1,'']]], - ['matrix_5ffloat2x3_5fprecision_2ehpp',['matrix_float2x3_precision.hpp',['../a00085.html',1,'']]], - ['matrix_5ffloat2x4_2ehpp',['matrix_float2x4.hpp',['../a00086.html',1,'']]], - ['matrix_5ffloat2x4_5fprecision_2ehpp',['matrix_float2x4_precision.hpp',['../a00087.html',1,'']]], - ['matrix_5ffloat3x2_2ehpp',['matrix_float3x2.hpp',['../a00088.html',1,'']]], - ['matrix_5ffloat3x2_5fprecision_2ehpp',['matrix_float3x2_precision.hpp',['../a00089.html',1,'']]], - ['matrix_5ffloat3x3_2ehpp',['matrix_float3x3.hpp',['../a00090.html',1,'']]], - ['matrix_5ffloat3x3_5fprecision_2ehpp',['matrix_float3x3_precision.hpp',['../a00091.html',1,'']]], - ['matrix_5ffloat3x4_2ehpp',['matrix_float3x4.hpp',['../a00092.html',1,'']]], - ['matrix_5ffloat3x4_5fprecision_2ehpp',['matrix_float3x4_precision.hpp',['../a00093.html',1,'']]], - ['matrix_5ffloat4x2_2ehpp',['matrix_float4x2.hpp',['../a00094.html',1,'']]], - ['matrix_5ffloat4x3_2ehpp',['matrix_float4x3.hpp',['../a00096.html',1,'']]], - ['matrix_5ffloat4x3_5fprecision_2ehpp',['matrix_float4x3_precision.hpp',['../a00097.html',1,'']]], - ['matrix_5ffloat4x4_2ehpp',['matrix_float4x4.hpp',['../a00098.html',1,'']]], - ['matrix_5ffloat4x4_5fprecision_2ehpp',['matrix_float4x4_precision.hpp',['../a00099.html',1,'']]], - ['matrix_5finteger_2ehpp',['matrix_integer.hpp',['../a00100.html',1,'']]], - ['matrix_5finterpolation_2ehpp',['matrix_interpolation.hpp',['../a00101.html',1,'']]], - ['matrix_5finverse_2ehpp',['matrix_inverse.hpp',['../a00102.html',1,'']]], - ['matrix_5fmajor_5fstorage_2ehpp',['matrix_major_storage.hpp',['../a00103.html',1,'']]], - ['matrix_5foperation_2ehpp',['matrix_operation.hpp',['../a00104.html',1,'']]], - ['matrix_5fprojection_2ehpp',['matrix_projection.hpp',['../a00105.html',1,'']]], - ['matrix_5fquery_2ehpp',['matrix_query.hpp',['../a00106.html',1,'']]], - ['matrix_5frelational_2ehpp',['matrix_relational.hpp',['../a00107.html',1,'']]], - ['matrix_5ftransform_5f2d_2ehpp',['matrix_transform_2d.hpp',['../a00110.html',1,'']]], - ['mixed_5fproduct_2ehpp',['mixed_product.hpp',['../a00111.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_b.html b/tests/OpenGL/package/glm/doc/api/search/files_b.html deleted file mode 100644 index 5d4f0231..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_b.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_b.js b/tests/OpenGL/package/glm/doc/api/search/files_b.js deleted file mode 100644 index 0ac9ed3f..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_b.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['noise_2ehpp',['noise.hpp',['../a00112.html',1,'']]], - ['norm_2ehpp',['norm.hpp',['../a00113.html',1,'']]], - ['normal_2ehpp',['normal.hpp',['../a00114.html',1,'']]], - ['normalize_5fdot_2ehpp',['normalize_dot.hpp',['../a00115.html',1,'']]], - ['number_5fprecision_2ehpp',['number_precision.hpp',['../a00116.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_c.html b/tests/OpenGL/package/glm/doc/api/search/files_c.html deleted file mode 100644 index 888d5dfd..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_c.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_c.js b/tests/OpenGL/package/glm/doc/api/search/files_c.js deleted file mode 100644 index 9f04be85..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_c.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['optimum_5fpow_2ehpp',['optimum_pow.hpp',['../a00117.html',1,'']]], - ['orthonormalize_2ehpp',['orthonormalize.hpp',['../a00118.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_d.html b/tests/OpenGL/package/glm/doc/api/search/files_d.html deleted file mode 100644 index b4496e5a..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_d.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_d.js b/tests/OpenGL/package/glm/doc/api/search/files_d.js deleted file mode 100644 index 128bcb4b..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_d.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['packing_2ehpp',['packing.hpp',['../a00120.html',1,'']]], - ['perpendicular_2ehpp',['perpendicular.hpp',['../a00121.html',1,'']]], - ['polar_5fcoordinates_2ehpp',['polar_coordinates.hpp',['../a00122.html',1,'']]], - ['projection_2ehpp',['projection.hpp',['../a00123.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_e.html b/tests/OpenGL/package/glm/doc/api/search/files_e.html deleted file mode 100644 index 52be6aaa..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_e.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_e.js b/tests/OpenGL/package/glm/doc/api/search/files_e.js deleted file mode 100644 index 197e97a5..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_e.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['quaternion_5fcommon_2ehpp',['quaternion_common.hpp',['../a00127.html',1,'']]], - ['quaternion_5fdouble_2ehpp',['quaternion_double.hpp',['../a00128.html',1,'']]], - ['quaternion_5fdouble_5fprecision_2ehpp',['quaternion_double_precision.hpp',['../a00129.html',1,'']]], - ['quaternion_5fexponential_2ehpp',['quaternion_exponential.hpp',['../a00130.html',1,'']]], - ['quaternion_5ffloat_2ehpp',['quaternion_float.hpp',['../a00131.html',1,'']]], - ['quaternion_5ffloat_5fprecision_2ehpp',['quaternion_float_precision.hpp',['../a00132.html',1,'']]], - ['quaternion_5fgeometric_2ehpp',['quaternion_geometric.hpp',['../a00133.html',1,'']]], - ['quaternion_5frelational_2ehpp',['quaternion_relational.hpp',['../a00134.html',1,'']]], - ['quaternion_5ftransform_2ehpp',['quaternion_transform.hpp',['../a00135.html',1,'']]], - ['quaternion_5ftrigonometric_2ehpp',['quaternion_trigonometric.hpp',['../a00136.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/files_f.html b/tests/OpenGL/package/glm/doc/api/search/files_f.html deleted file mode 100644 index 3249d425..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_f.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/files_f.js b/tests/OpenGL/package/glm/doc/api/search/files_f.js deleted file mode 100644 index d8f7ae1d..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/files_f.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['random_2ehpp',['random.hpp',['../a00137.html',1,'']]], - ['range_2ehpp',['range.hpp',['../a00138.html',1,'']]], - ['raw_5fdata_2ehpp',['raw_data.hpp',['../a00139.html',1,'']]], - ['reciprocal_2ehpp',['reciprocal.hpp',['../a00140.html',1,'']]], - ['rotate_5fnormalized_5faxis_2ehpp',['rotate_normalized_axis.hpp',['../a00141.html',1,'']]], - ['rotate_5fvector_2ehpp',['rotate_vector.hpp',['../a00142.html',1,'']]], - ['round_2ehpp',['round.hpp',['../a00143.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_0.html b/tests/OpenGL/package/glm/doc/api/search/functions_0.html deleted file mode 100644 index 246d1672..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_0.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_0.js b/tests/OpenGL/package/glm/doc/api/search/functions_0.js deleted file mode 100644 index f23832ad..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_0.js +++ /dev/null @@ -1,31 +0,0 @@ -var searchData= -[ - ['abs',['abs',['../a00241.html#ga439e60a72eadecfeda2df5449c613a64',1,'glm::abs(genType x)'],['../a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6',1,'glm::abs(vec< L, T, Q > const &x)']]], - ['acos',['acos',['../a00373.html#gacc9b092df8257c68f19c9053703e2563',1,'glm']]], - ['acosh',['acosh',['../a00373.html#ga858f35dc66fd2688f20c52b5f25be76a',1,'glm']]], - ['acot',['acot',['../a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d',1,'glm']]], - ['acoth',['acoth',['../a00301.html#gafaca98a7100170db8841f446282debfa',1,'glm']]], - ['acsc',['acsc',['../a00301.html#ga1b4bed91476b9b915e76b4a30236d330',1,'glm']]], - ['acsch',['acsch',['../a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576',1,'glm']]], - ['adjugate',['adjugate',['../a00339.html#ga40a38402a30860af6e508fe76211e659',1,'glm::adjugate(mat< 2, 2, T, Q > const &m)'],['../a00339.html#gaddb09f7abc1a9c56a243d32ff3538be6',1,'glm::adjugate(mat< 3, 3, T, Q > const &m)'],['../a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8',1,'glm::adjugate(mat< 4, 4, T, Q > const &m)']]], - ['affineinverse',['affineInverse',['../a00295.html#gae0fcc5fc8783291f9702272de428fa0e',1,'glm']]], - ['all',['all',['../a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd',1,'glm']]], - ['angle',['angle',['../a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8',1,'glm::angle(qua< T, Q > const &x)'],['../a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1',1,'glm::angle(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['angleaxis',['angleAxis',['../a00257.html#ga5c0095cfcb218c75a4b79d7687950036',1,'glm']]], - ['any',['any',['../a00374.html#ga911b3f8e41459dd551ccb6d385d91061',1,'glm']]], - ['arecollinear',['areCollinear',['../a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4',1,'glm']]], - ['areorthogonal',['areOrthogonal',['../a00368.html#gac7b95b3f798e3c293262b2bdaad47c57',1,'glm']]], - ['areorthonormal',['areOrthonormal',['../a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3',1,'glm']]], - ['asec',['asec',['../a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10',1,'glm']]], - ['asech',['asech',['../a00301.html#gaec7586dccfe431f850d006f3824b8ca6',1,'glm']]], - ['asin',['asin',['../a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73',1,'glm']]], - ['asinh',['asinh',['../a00373.html#ga3ef16b501ee859fddde88e22192a5950',1,'glm']]], - ['associatedmax',['associatedMax',['../a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45',1,'glm::associatedMax(T x, U a, T y, U b)'],['../a00308.html#ga5c6758bc50aa7fbe700f87123a045aad',1,'glm::associatedMax(vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b)'],['../a00308.html#ga0d169d6ce26b03248df175f39005d77f',1,'glm::associatedMax(T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b)'],['../a00308.html#ga4086269afabcb81dd7ded33cb3448653',1,'glm::associatedMax(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b)'],['../a00308.html#gaec891e363d91abbf3a4443cf2f652209',1,'glm::associatedMax(T x, U a, T y, U b, T z, U c)'],['../a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c',1,'glm::associatedMax(vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c)'],['../a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba',1,'glm::associatedMax(T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c)'],['../a00308.html#ga19f59d1141a51a3b2108a9807af78f7f',1,'glm::associatedMax(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c)'],['../a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc',1,'glm::associatedMax(T x, U a, T y, U b, T z, U c, T w, U d)'],['../a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6',1,'glm::associatedMax(vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c, vec< L, T, Q > const &w, vec< L, U, Q > const &d)'],['../a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d',1,'glm::associatedMax(T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c, T w, vec< L, U, Q > const &d)'],['../a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb',1,'glm::associatedMax(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &w, U d)']]], - ['associatedmin',['associatedMin',['../a00308.html#gacc01bd272359572fc28437ae214a02df',1,'glm::associatedMin(T x, U a, T y, U b)'],['../a00308.html#gac2f0dff90948f2e44386a5eafd941d1c',1,'glm::associatedMin(vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b)'],['../a00308.html#gacfec519c820331d023ef53a511749319',1,'glm::associatedMin(T x, const vec< L, U, Q > &a, T y, const vec< L, U, Q > &b)'],['../a00308.html#ga4757c7cab2d809124a8525d0a9deeb37',1,'glm::associatedMin(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b)'],['../a00308.html#gad0aa8f86259a26d839d34a3577a923fc',1,'glm::associatedMin(T x, U a, T y, U b, T z, U c)'],['../a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d',1,'glm::associatedMin(vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c)'],['../a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6',1,'glm::associatedMin(T x, U a, T y, U b, T z, U c, T w, U d)'],['../a00308.html#ga66b08118bc88f0494bcacb7cdb940556',1,'glm::associatedMin(vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c, vec< L, T, Q > const &w, vec< L, U, Q > const &d)'],['../a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68',1,'glm::associatedMin(T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c, T w, vec< L, U, Q > const &d)'],['../a00308.html#ga2db7e351994baee78540a562d4bb6d3b',1,'glm::associatedMin(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &w, U d)']]], - ['atan',['atan',['../a00373.html#gac61629f3a4aa14057e7a8cae002291db',1,'glm::atan(vec< L, T, Q > const &y, vec< L, T, Q > const &x)'],['../a00373.html#ga5229f087eaccbc466f1c609ce3107b95',1,'glm::atan(vec< L, T, Q > const &y_over_x)']]], - ['atan2',['atan2',['../a00315.html#gac63011205bf6d0be82589dc56dd26708',1,'glm::atan2(T x, T y)'],['../a00315.html#ga83bc41bd6f89113ee8006576b12bfc50',1,'glm::atan2(const vec< 2, T, Q > &x, const vec< 2, T, Q > &y)'],['../a00315.html#gac39314f5087e7e51e592897cabbc1927',1,'glm::atan2(const vec< 3, T, Q > &x, const vec< 3, T, Q > &y)'],['../a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3',1,'glm::atan2(const vec< 4, T, Q > &x, const vec< 4, T, Q > &y)']]], - ['atanh',['atanh',['../a00373.html#gabc925650e618357d07da255531658b87',1,'glm']]], - ['axis',['axis',['../a00257.html#ga764254f10248b505e936e5309a88c23d',1,'glm']]], - ['axisangle',['axisAngle',['../a00337.html#gafefe32ce5a90a135287ba34fac3623bc',1,'glm']]], - ['axisanglematrix',['axisAngleMatrix',['../a00337.html#ga3a788e2f5223397df5c426413ecc2f6b',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_1.html b/tests/OpenGL/package/glm/doc/api/search/functions_1.html deleted file mode 100644 index 5f14d674..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_1.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_1.js b/tests/OpenGL/package/glm/doc/api/search/functions_1.js deleted file mode 100644 index bf498fce..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_1.js +++ /dev/null @@ -1,20 +0,0 @@ -var searchData= -[ - ['backeasein',['backEaseIn',['../a00318.html#ga93cddcdb6347a44d5927cc2bf2570816',1,'glm::backEaseIn(genType const &a)'],['../a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36',1,'glm::backEaseIn(genType const &a, genType const &o)']]], - ['backeaseinout',['backEaseInOut',['../a00318.html#gace6d24722a2f6722b56398206eb810bb',1,'glm::backEaseInOut(genType const &a)'],['../a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1',1,'glm::backEaseInOut(genType const &a, genType const &o)']]], - ['backeaseout',['backEaseOut',['../a00318.html#gabf25069fa906413c858fd46903d520b9',1,'glm::backEaseOut(genType const &a)'],['../a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f',1,'glm::backEaseOut(genType const &a, genType const &o)']]], - ['ballrand',['ballRand',['../a00300.html#ga7c53b7797f3147af68a11c767679fa3f',1,'glm']]], - ['bitcount',['bitCount',['../a00370.html#ga44abfe3379e11cbd29425a843420d0d6',1,'glm::bitCount(genType v)'],['../a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5',1,'glm::bitCount(vec< L, T, Q > const &v)']]], - ['bitfielddeinterleave',['bitfieldDeinterleave',['../a00288.html#ga091d934233a2e121df91b8c7230357c8',1,'glm::bitfieldDeinterleave(glm::uint16 x)'],['../a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98',1,'glm::bitfieldDeinterleave(glm::uint32 x)'],['../a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60',1,'glm::bitfieldDeinterleave(glm::uint64 x)']]], - ['bitfieldextract',['bitfieldExtract',['../a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2',1,'glm']]], - ['bitfieldfillone',['bitfieldFillOne',['../a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a',1,'glm::bitfieldFillOne(genIUType Value, int FirstBit, int BitCount)'],['../a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1',1,'glm::bitfieldFillOne(vec< L, T, Q > const &Value, int FirstBit, int BitCount)']]], - ['bitfieldfillzero',['bitfieldFillZero',['../a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee',1,'glm::bitfieldFillZero(genIUType Value, int FirstBit, int BitCount)'],['../a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2',1,'glm::bitfieldFillZero(vec< L, T, Q > const &Value, int FirstBit, int BitCount)']]], - ['bitfieldinsert',['bitfieldInsert',['../a00370.html#ga2e82992340d421fadb61a473df699b20',1,'glm']]], - ['bitfieldinterleave',['bitfieldInterleave',['../a00288.html#ga24cad0069f9a0450abd80b3e89501adf',1,'glm::bitfieldInterleave(int8 x, int8 y)'],['../a00288.html#ga9a4976a529aec2cee56525e1165da484',1,'glm::bitfieldInterleave(uint8 x, uint8 y)'],['../a00288.html#ga4a76bbca39c40153f3203d0a1926e142',1,'glm::bitfieldInterleave(u8vec2 const &v)'],['../a00288.html#gac51c33a394593f0631fa3aa5bb778809',1,'glm::bitfieldInterleave(int16 x, int16 y)'],['../a00288.html#ga94f3646a5667f4be56f8dcf3310e963f',1,'glm::bitfieldInterleave(uint16 x, uint16 y)'],['../a00288.html#ga406c4ee56af4ca37a73f449f154eca3e',1,'glm::bitfieldInterleave(u16vec2 const &v)'],['../a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a',1,'glm::bitfieldInterleave(int32 x, int32 y)'],['../a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd',1,'glm::bitfieldInterleave(uint32 x, uint32 y)'],['../a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78',1,'glm::bitfieldInterleave(u32vec2 const &v)'],['../a00288.html#ga8fdb724dccd4a07d57efc01147102137',1,'glm::bitfieldInterleave(int8 x, int8 y, int8 z)'],['../a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93',1,'glm::bitfieldInterleave(uint8 x, uint8 y, uint8 z)'],['../a00288.html#gaa901c36a842fa5d126ea650549f17b24',1,'glm::bitfieldInterleave(int16 x, int16 y, int16 z)'],['../a00288.html#ga3afd6d38881fe3948c53d4214d2197fd',1,'glm::bitfieldInterleave(uint16 x, uint16 y, uint16 z)'],['../a00288.html#gad2075d96a6640121edaa98ea534102ca',1,'glm::bitfieldInterleave(int32 x, int32 y, int32 z)'],['../a00288.html#gab19fbc739fc0cf7247978602c36f7da8',1,'glm::bitfieldInterleave(uint32 x, uint32 y, uint32 z)'],['../a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d',1,'glm::bitfieldInterleave(int8 x, int8 y, int8 z, int8 w)'],['../a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36',1,'glm::bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w)'],['../a00288.html#ga180a63161e1319fbd5a53c84d0429c7a',1,'glm::bitfieldInterleave(int16 x, int16 y, int16 z, int16 w)'],['../a00288.html#gafca8768671a14c8016facccb66a89f26',1,'glm::bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w)']]], - ['bitfieldreverse',['bitfieldReverse',['../a00370.html#ga750a1d92464489b7711dee67aa3441b6',1,'glm']]], - ['bitfieldrotateleft',['bitfieldRotateLeft',['../a00288.html#ga2eb49678a344ce1495bdb5586d9896b9',1,'glm::bitfieldRotateLeft(genIUType In, int Shift)'],['../a00288.html#gae186317091b1a39214ebf79008d44a1e',1,'glm::bitfieldRotateLeft(vec< L, T, Q > const &In, int Shift)']]], - ['bitfieldrotateright',['bitfieldRotateRight',['../a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca',1,'glm::bitfieldRotateRight(genIUType In, int Shift)'],['../a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88',1,'glm::bitfieldRotateRight(vec< L, T, Q > const &In, int Shift)']]], - ['bounceeasein',['bounceEaseIn',['../a00318.html#gaac30767f2e430b0c3fc859a4d59c7b5b',1,'glm']]], - ['bounceeaseinout',['bounceEaseInOut',['../a00318.html#gadf9f38eff1e5f4c2fa5b629a25ae413e',1,'glm']]], - ['bounceeaseout',['bounceEaseOut',['../a00318.html#ga94007005ff0dcfa0749ebfa2aec540b2',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_10.html b/tests/OpenGL/package/glm/doc/api/search/functions_10.html deleted file mode 100644 index c322f408..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_10.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_10.js b/tests/OpenGL/package/glm/doc/api/search/functions_10.js deleted file mode 100644 index cf1f1d0a..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_10.js +++ /dev/null @@ -1,30 +0,0 @@ -var searchData= -[ - ['saturate',['saturate',['../a00315.html#ga0fd09e616d122bc2ed9726682ffd44b7',1,'glm::saturate(T x)'],['../a00315.html#gaee97b8001c794a78a44f5d59f62a8aba',1,'glm::saturate(const vec< 2, T, Q > &x)'],['../a00315.html#ga39bfe3a421286ee31680d45c31ccc161',1,'glm::saturate(const vec< 3, T, Q > &x)'],['../a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183',1,'glm::saturate(const vec< 4, T, Q > &x)']]], - ['saturation',['saturation',['../a00312.html#ga01a97152b44e1550edcac60bd849e884',1,'glm::saturation(T const s)'],['../a00312.html#ga2156cea600e90148ece5bc96fd6db43a',1,'glm::saturation(T const s, vec< 3, T, Q > const &color)'],['../a00312.html#gaba0eacee0736dae860e9371cc1ae4785',1,'glm::saturation(T const s, vec< 4, T, Q > const &color)']]], - ['scale',['scale',['../a00247.html#ga05051adbee603fb3c5095d8cf5cc229b',1,'glm::scale(mat< 4, 4, T, Q > const &m, vec< 3, T, Q > const &v)'],['../a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e',1,'glm::scale(mat< 3, 3, T, Q > const &m, vec< 2, T, Q > const &v)'],['../a00362.html#gafbeefee8fec884d566e4ada0049174d7',1,'glm::scale(vec< 3, T, Q > const &v)']]], - ['scalebias',['scaleBias',['../a00363.html#gabf249498b236e62c983d90d30d63c99c',1,'glm::scaleBias(T scale, T bias)'],['../a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e',1,'glm::scaleBias(mat< 4, 4, T, Q > const &m, T scale, T bias)']]], - ['sec',['sec',['../a00301.html#gae4bcbebee670c5ea155f0777b3acbd84',1,'glm']]], - ['sech',['sech',['../a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae',1,'glm']]], - ['shearx',['shearX',['../a00341.html#ga2a118ece5db1e2022112b954846012af',1,'glm']]], - ['shearx2d',['shearX2D',['../a00363.html#gabf714b8a358181572b32a45555f71948',1,'glm']]], - ['shearx3d',['shearX3D',['../a00363.html#ga73e867c6cd4d700fe2054437e56106c4',1,'glm']]], - ['sheary',['shearY',['../a00341.html#ga717f1833369c1ac4a40e4ac015af885e',1,'glm']]], - ['sheary2d',['shearY2D',['../a00363.html#gac7998d0763d9181550c77e8af09a182c',1,'glm']]], - ['sheary3d',['shearY3D',['../a00363.html#gade5bb65ffcb513973db1a1314fb5cfac',1,'glm']]], - ['shearz3d',['shearZ3D',['../a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255',1,'glm']]], - ['shortmix',['shortMix',['../a00352.html#gadc576cc957adc2a568cdcbc3799175bc',1,'glm']]], - ['sign',['sign',['../a00241.html#ga1e2e5cfff800056540e32f6c9b604b28',1,'glm::sign(vec< L, T, Q > const &x)'],['../a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0',1,'glm::sign(vec< L, T, Q > const &x, vec< L, T, Q > const &base)']]], - ['simplex',['simplex',['../a00297.html#ga8122468c69015ff397349a7dcc638b27',1,'glm']]], - ['sin',['sin',['../a00373.html#ga29747fd108cb7292ae5a284f69691a69',1,'glm']]], - ['sineeasein',['sineEaseIn',['../a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf',1,'glm']]], - ['sineeaseinout',['sineEaseInOut',['../a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7',1,'glm']]], - ['sineeaseout',['sineEaseOut',['../a00318.html#gab3e454f883afc1606ef91363881bf5a3',1,'glm']]], - ['sinh',['sinh',['../a00373.html#gac7c39ff21809e281552b4dbe46f4a39d',1,'glm']]], - ['slerp',['slerp',['../a00248.html#gae7fc3c945be366b9942b842f55da428a',1,'glm::slerp(qua< T, Q > const &x, qua< T, Q > const &y, T a)'],['../a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee',1,'glm::slerp(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y, T const &a)']]], - ['smoothstep',['smoothstep',['../a00241.html#ga562edf7eca082cc5b7a0aaf180436daf',1,'glm']]], - ['sphericalrand',['sphericalRand',['../a00300.html#ga22f90fcaccdf001c516ca90f6428e138',1,'glm']]], - ['sqrt',['sqrt',['../a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c',1,'glm::sqrt(vec< L, T, Q > const &v)'],['../a00256.html#ga64b7b255ed7bcba616fe6b44470b022e',1,'glm::sqrt(qua< T, Q > const &q)'],['../a00330.html#ga7ce36693a75879ccd9bb10167cfa722d',1,'glm::sqrt(int x)'],['../a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc',1,'glm::sqrt(uint x)']]], - ['squad',['squad',['../a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35',1,'glm']]], - ['step',['step',['../a00241.html#ga015a1261ff23e12650211aa872863cce',1,'glm::step(genType edge, genType x)'],['../a00241.html#ga8f9a911a48ef244b51654eaefc81c551',1,'glm::step(T edge, vec< L, T, Q > const &x)'],['../a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f',1,'glm::step(vec< L, T, Q > const &edge, vec< L, T, Q > const &x)']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_11.html b/tests/OpenGL/package/glm/doc/api/search/functions_11.html deleted file mode 100644 index c49fcd4c..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_11.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_11.js b/tests/OpenGL/package/glm/doc/api/search/functions_11.js deleted file mode 100644 index 6c1dff5a..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_11.js +++ /dev/null @@ -1,20 +0,0 @@ -var searchData= -[ - ['tan',['tan',['../a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f',1,'glm']]], - ['tanh',['tanh',['../a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1',1,'glm']]], - ['third',['third',['../a00290.html#ga3077c6311010a214b69ddc8214ec13b5',1,'glm']]], - ['three_5fover_5ftwo_5fpi',['three_over_two_pi',['../a00290.html#gae94950df74b0ce382b1fc1d978ef7394',1,'glm']]], - ['to_5fstring',['to_string',['../a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5',1,'glm']]], - ['tomat3',['toMat3',['../a00352.html#gaab0afabb894b28a983fb8ec610409d56',1,'glm']]], - ['tomat4',['toMat4',['../a00352.html#gadfa2c77094e8cc9adad321d938855ffb',1,'glm']]], - ['toquat',['toQuat',['../a00352.html#ga798de5d186499c9a9231cd92c8afaef1',1,'glm::toQuat(mat< 3, 3, T, Q > const &x)'],['../a00352.html#ga5eb36f51e1638e710451eba194dbc011',1,'glm::toQuat(mat< 4, 4, T, Q > const &x)']]], - ['translate',['translate',['../a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284',1,'glm::translate(mat< 4, 4, T, Q > const &m, vec< 3, T, Q > const &v)'],['../a00341.html#gaf4573ae47c80938aa9053ef6a33755ab',1,'glm::translate(mat< 3, 3, T, Q > const &m, vec< 2, T, Q > const &v)'],['../a00362.html#ga309a30e652e58c396e2c3d4db3ee7658',1,'glm::translate(vec< 3, T, Q > const &v)']]], - ['transpose',['transpose',['../a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35',1,'glm']]], - ['trianglenormal',['triangleNormal',['../a00344.html#gaff1cb5496925dfa7962df457772a7f35',1,'glm']]], - ['trunc',['trunc',['../a00241.html#gaf9375e3e06173271d49e6ffa3a334259',1,'glm']]], - ['tweakedinfiniteperspective',['tweakedInfinitePerspective',['../a00243.html#gaaeacc04a2a6f4b18c5899d37e7bb3ef9',1,'glm::tweakedInfinitePerspective(T fovy, T aspect, T near)'],['../a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8',1,'glm::tweakedInfinitePerspective(T fovy, T aspect, T near, T ep)']]], - ['two_5fover_5fpi',['two_over_pi',['../a00290.html#ga74eadc8a211253079683219a3ea0462a',1,'glm']]], - ['two_5fover_5froot_5fpi',['two_over_root_pi',['../a00290.html#ga5827301817640843cf02026a8d493894',1,'glm']]], - ['two_5fpi',['two_pi',['../a00290.html#gaa5276a4617566abcfe49286f40e3a256',1,'glm']]], - ['two_5fthirds',['two_thirds',['../a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_12.html b/tests/OpenGL/package/glm/doc/api/search/functions_12.html deleted file mode 100644 index 6a027720..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_12.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_12.js b/tests/OpenGL/package/glm/doc/api/search/functions_12.js deleted file mode 100644 index 221b3286..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_12.js +++ /dev/null @@ -1,52 +0,0 @@ -var searchData= -[ - ['uaddcarry',['uaddCarry',['../a00370.html#gaedcec48743632dff6786bcc492074b1b',1,'glm']]], - ['uintbitstofloat',['uintBitsToFloat',['../a00241.html#gab2bae0d15dcdca6093f88f76b3975d97',1,'glm::uintBitsToFloat(uint const &v)'],['../a00241.html#ga97f46b5f7b42fe44482e13356eb394ae',1,'glm::uintBitsToFloat(vec< L, uint, Q > const &v)']]], - ['umulextended',['umulExtended',['../a00370.html#ga732e2fb56db57ea541c7e5c92b7121be',1,'glm']]], - ['unpackdouble2x32',['unpackDouble2x32',['../a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483',1,'glm']]], - ['unpackf2x11_5f1x10',['unpackF2x11_1x10',['../a00298.html#ga2b1fd1e854705b1345e98409e0a25e50',1,'glm']]], - ['unpackf3x9_5fe1x5',['unpackF3x9_E1x5',['../a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e',1,'glm']]], - ['unpackhalf',['unpackHalf',['../a00298.html#ga30d6b2f1806315bcd6047131f547d33b',1,'glm']]], - ['unpackhalf1x16',['unpackHalf1x16',['../a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf',1,'glm']]], - ['unpackhalf2x16',['unpackHalf2x16',['../a00372.html#gaf59b52e6b28da9335322c4ae19b5d745',1,'glm']]], - ['unpackhalf4x16',['unpackHalf4x16',['../a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd',1,'glm']]], - ['unpacki3x10_5f1x2',['unpackI3x10_1x2',['../a00298.html#ga9a05330e5490be0908d3b117d82aff56',1,'glm']]], - ['unpackint2x16',['unpackInt2x16',['../a00298.html#gaccde055882918a3175de82f4ca8b7d8e',1,'glm']]], - ['unpackint2x32',['unpackInt2x32',['../a00298.html#gab297c0bfd38433524791eb0584d8f08d',1,'glm']]], - ['unpackint2x8',['unpackInt2x8',['../a00298.html#gab0c59f1e259fca9e68adb2207a6b665e',1,'glm']]], - ['unpackint4x16',['unpackInt4x16',['../a00298.html#ga52c154a9b232b62c22517a700cc0c78c',1,'glm']]], - ['unpackint4x8',['unpackInt4x8',['../a00298.html#ga1cd8d2038cdd33a860801aa155a26221',1,'glm']]], - ['unpackrgbm',['unpackRGBM',['../a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02',1,'glm']]], - ['unpacksnorm',['unpackSnorm',['../a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482',1,'glm']]], - ['unpacksnorm1x16',['unpackSnorm1x16',['../a00298.html#ga96dd15002370627a443c835ab03a766c',1,'glm']]], - ['unpacksnorm1x8',['unpackSnorm1x8',['../a00298.html#ga4851ff86678aa1c7ace9d67846894285',1,'glm']]], - ['unpacksnorm2x16',['unpackSnorm2x16',['../a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38',1,'glm']]], - ['unpacksnorm2x8',['unpackSnorm2x8',['../a00298.html#ga8b128e89be449fc71336968a66bf6e1a',1,'glm']]], - ['unpacksnorm3x10_5f1x2',['unpackSnorm3x10_1x2',['../a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b',1,'glm']]], - ['unpacksnorm4x16',['unpackSnorm4x16',['../a00298.html#gaaddf9c353528fe896106f7181219c7f4',1,'glm']]], - ['unpacksnorm4x8',['unpackSnorm4x8',['../a00372.html#ga2db488646d48b7c43d3218954523fe82',1,'glm']]], - ['unpacku3x10_5f1x2',['unpackU3x10_1x2',['../a00298.html#ga48df3042a7d079767f5891a1bfd8a60a',1,'glm']]], - ['unpackuint2x16',['unpackUint2x16',['../a00298.html#ga035bbbeab7ec2b28c0529757395b645b',1,'glm']]], - ['unpackuint2x32',['unpackUint2x32',['../a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab',1,'glm']]], - ['unpackuint2x8',['unpackUint2x8',['../a00298.html#gaa7600a6c71784b637a410869d2a5adcd',1,'glm']]], - ['unpackuint4x16',['unpackUint4x16',['../a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc',1,'glm']]], - ['unpackuint4x8',['unpackUint4x8',['../a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1',1,'glm']]], - ['unpackunorm',['unpackUnorm',['../a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f',1,'glm']]], - ['unpackunorm1x16',['unpackUnorm1x16',['../a00298.html#ga83d34160a5cb7bcb5339823210fc7501',1,'glm']]], - ['unpackunorm1x5_5f1x6_5f1x5',['unpackUnorm1x5_1x6_1x5',['../a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a',1,'glm']]], - ['unpackunorm1x8',['unpackUnorm1x8',['../a00298.html#ga1319207e30874fb4931a9ee913983ee1',1,'glm']]], - ['unpackunorm2x16',['unpackUnorm2x16',['../a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007',1,'glm']]], - ['unpackunorm2x3_5f1x2',['unpackUnorm2x3_1x2',['../a00298.html#ga6abd5a9014df3b5ce4059008d2491260',1,'glm']]], - ['unpackunorm2x4',['unpackUnorm2x4',['../a00298.html#ga2e50476132fe5f27f08e273d9c70d85b',1,'glm']]], - ['unpackunorm2x8',['unpackUnorm2x8',['../a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f',1,'glm']]], - ['unpackunorm3x10_5f1x2',['unpackUnorm3x10_1x2',['../a00298.html#ga5156d3060355fe332865da2c7f78815f',1,'glm']]], - ['unpackunorm3x5_5f1x1',['unpackUnorm3x5_1x1',['../a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d',1,'glm']]], - ['unpackunorm4x16',['unpackUnorm4x16',['../a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d',1,'glm']]], - ['unpackunorm4x4',['unpackUnorm4x4',['../a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d',1,'glm']]], - ['unpackunorm4x8',['unpackUnorm4x8',['../a00372.html#ga7f903259150b67e9466f5f8edffcd197',1,'glm']]], - ['unproject',['unProject',['../a00245.html#ga36641e5d60f994e01c3d8f56b10263d2',1,'glm']]], - ['unprojectno',['unProjectNO',['../a00245.html#gae089ba9fc150ff69c252a20e508857b5',1,'glm']]], - ['unprojectzo',['unProjectZO',['../a00245.html#gade5136413ce530f8e606124d570fba32',1,'glm']]], - ['uround',['uround',['../a00292.html#ga6715b9d573972a0f7763d30d45bcaec4',1,'glm']]], - ['usubborrow',['usubBorrow',['../a00370.html#gae3316ba1229ad9b9f09480833321b053',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_13.html b/tests/OpenGL/package/glm/doc/api/search/functions_13.html deleted file mode 100644 index 23ac5dac..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_13.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_13.js b/tests/OpenGL/package/glm/doc/api/search/functions_13.js deleted file mode 100644 index 1aa7ad58..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_13.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['value_5fptr',['value_ptr',['../a00305.html#ga1c64669e1ba1160ad9386e43dc57569a',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_14.html b/tests/OpenGL/package/glm/doc/api/search/functions_14.html deleted file mode 100644 index 16e2625a..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_14.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_14.js b/tests/OpenGL/package/glm/doc/api/search/functions_14.js deleted file mode 100644 index 58cc50ac..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_14.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['wrapangle',['wrapAngle',['../a00325.html#ga069527c6dbd64f53435b8ebc4878b473',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_15.html b/tests/OpenGL/package/glm/doc/api/search/functions_15.html deleted file mode 100644 index 9c2374c9..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_15.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_15.js b/tests/OpenGL/package/glm/doc/api/search/functions_15.js deleted file mode 100644 index 4153a6e0..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_15.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['yaw',['yaw',['../a00299.html#ga8da38cdfdc452dafa660c2f46506bad5',1,'glm']]], - ['yawpitchroll',['yawPitchRoll',['../a00319.html#gae6aa26ccb020d281b449619e419a609e',1,'glm']]], - ['ycocg2rgb',['YCoCg2rgb',['../a00313.html#ga163596b804c7241810b2534a99eb1343',1,'glm']]], - ['ycocgr2rgb',['YCoCgR2rgb',['../a00313.html#gaf8d30574c8576838097d8e20c295384a',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_16.html b/tests/OpenGL/package/glm/doc/api/search/functions_16.html deleted file mode 100644 index 39a0e644..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_16.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_16.js b/tests/OpenGL/package/glm/doc/api/search/functions_16.js deleted file mode 100644 index 66a52170..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_16.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['zero',['zero',['../a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_2.html b/tests/OpenGL/package/glm/doc/api/search/functions_2.html deleted file mode 100644 index 3995cf8c..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_2.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_2.js b/tests/OpenGL/package/glm/doc/api/search/functions_2.js deleted file mode 100644 index 1e9c9843..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_2.js +++ /dev/null @@ -1,42 +0,0 @@ -var searchData= -[ - ['catmullrom',['catmullRom',['../a00358.html#ga8119c04f8210fd0d292757565cd6918d',1,'glm']]], - ['ceil',['ceil',['../a00241.html#gafb9d2a645a23aca12d4d6de0104b7657',1,'glm']]], - ['ceilmultiple',['ceilMultiple',['../a00302.html#ga1d89ac88582aaf4d5dfa5feb4a376fd4',1,'glm::ceilMultiple(genType v, genType Multiple)'],['../a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d',1,'glm::ceilMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)']]], - ['ceilpoweroftwo',['ceilPowerOfTwo',['../a00302.html#ga5c3ef36ae32aa4271f1544f92bd578b6',1,'glm::ceilPowerOfTwo(genIUType v)'],['../a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2',1,'glm::ceilPowerOfTwo(vec< L, T, Q > const &v)']]], - ['circulareasein',['circularEaseIn',['../a00318.html#ga34508d4b204a321ec26d6086aa047997',1,'glm']]], - ['circulareaseinout',['circularEaseInOut',['../a00318.html#ga0c1027637a5b02d4bb3612aa12599d69',1,'glm']]], - ['circulareaseout',['circularEaseOut',['../a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7',1,'glm']]], - ['circularrand',['circularRand',['../a00300.html#ga9dd05c36025088fae25b97c869e88517',1,'glm']]], - ['clamp',['clamp',['../a00241.html#ga7cd77683da6361e297c56443fc70806d',1,'glm::clamp(genType x, genType minVal, genType maxVal)'],['../a00241.html#gafba2e0674deb5953878d89483cd6323d',1,'glm::clamp(vec< L, T, Q > const &x, T minVal, T maxVal)'],['../a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d',1,'glm::clamp(vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &maxVal)'],['../a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33',1,'glm::clamp(genType const &Texcoord)']]], - ['closebounded',['closeBounded',['../a00314.html#gab7d89c14c48ad01f720fb5daf8813161',1,'glm']]], - ['closestpointonline',['closestPointOnLine',['../a00310.html#ga36529c278ef716986151d58d151d697d',1,'glm::closestPointOnLine(vec< 3, T, Q > const &point, vec< 3, T, Q > const &a, vec< 3, T, Q > const &b)'],['../a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0',1,'glm::closestPointOnLine(vec< 2, T, Q > const &point, vec< 2, T, Q > const &a, vec< 2, T, Q > const &b)']]], - ['colmajor2',['colMajor2',['../a00338.html#gaaff72f11286e59a4a88ed21a347f284c',1,'glm::colMajor2(vec< 2, T, Q > const &v1, vec< 2, T, Q > const &v2)'],['../a00338.html#gafc25fd44196c92b1397b127aec1281ab',1,'glm::colMajor2(mat< 2, 2, T, Q > const &m)']]], - ['colmajor3',['colMajor3',['../a00338.html#ga1e25b72b085087740c92f5c70f3b051f',1,'glm::colMajor3(vec< 3, T, Q > const &v1, vec< 3, T, Q > const &v2, vec< 3, T, Q > const &v3)'],['../a00338.html#ga86bd0656e787bb7f217607572590af27',1,'glm::colMajor3(mat< 3, 3, T, Q > const &m)']]], - ['colmajor4',['colMajor4',['../a00338.html#gaf4aa6c7e17bfce41a6c13bf6469fab05',1,'glm::colMajor4(vec< 4, T, Q > const &v1, vec< 4, T, Q > const &v2, vec< 4, T, Q > const &v3, vec< 4, T, Q > const &v4)'],['../a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3',1,'glm::colMajor4(mat< 4, 4, T, Q > const &m)']]], - ['column',['column',['../a00293.html#ga96022eb0d3fae39d89fc7a954e59b374',1,'glm::column(genType const &m, length_t index)'],['../a00293.html#ga9e757377523890e8b80c5843dbe4dd15',1,'glm::column(genType const &m, length_t index, typename genType::col_type const &x)']]], - ['compadd',['compAdd',['../a00316.html#gaf71833350e15e74d31cbf8a3e7f27051',1,'glm']]], - ['compmax',['compMax',['../a00316.html#gabfa4bb19298c8c73d4217ba759c496b6',1,'glm']]], - ['compmin',['compMin',['../a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425',1,'glm']]], - ['compmul',['compMul',['../a00316.html#gae8ab88024197202c9479d33bdc5a8a5d',1,'glm']]], - ['compnormalize',['compNormalize',['../a00316.html#ga8f2b81ada8515875e58cb1667b6b9908',1,'glm']]], - ['compscale',['compScale',['../a00316.html#ga80abc2980d65d675f435d178c36880eb',1,'glm']]], - ['conjugate',['conjugate',['../a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b',1,'glm']]], - ['convertd65xyztod50xyz',['convertD65XYZToD50XYZ',['../a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48',1,'glm']]], - ['convertd65xyztolinearsrgb',['convertD65XYZToLinearSRGB',['../a00311.html#ga5265386fc3ac29e4c580d37ed470859c',1,'glm']]], - ['convertlinearsrgbtod50xyz',['convertLinearSRGBToD50XYZ',['../a00311.html#ga1522ba180e3d83d554a734056da031f9',1,'glm']]], - ['convertlinearsrgbtod65xyz',['convertLinearSRGBToD65XYZ',['../a00311.html#gaf9e130d9d4ccf51cc99317de7449f369',1,'glm']]], - ['convertlineartosrgb',['convertLinearToSRGB',['../a00289.html#ga42239e7b3da900f7ef37cec7e2476579',1,'glm::convertLinearToSRGB(vec< L, T, Q > const &ColorLinear)'],['../a00289.html#gaace0a21167d13d26116c283009af57f6',1,'glm::convertLinearToSRGB(vec< L, T, Q > const &ColorLinear, T Gamma)']]], - ['convertsrgbtolinear',['convertSRGBToLinear',['../a00289.html#ga16c798b7a226b2c3079dedc55083d187',1,'glm::convertSRGBToLinear(vec< L, T, Q > const &ColorSRGB)'],['../a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200',1,'glm::convertSRGBToLinear(vec< L, T, Q > const &ColorSRGB, T Gamma)']]], - ['cos',['cos',['../a00373.html#ga6a41efc740e3b3c937447d3a6284130e',1,'glm']]], - ['cosh',['cosh',['../a00373.html#ga4e260e372742c5f517aca196cf1e62b3',1,'glm']]], - ['cot',['cot',['../a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314',1,'glm']]], - ['coth',['coth',['../a00301.html#ga6b8b770eb7198e4dea59d52e6db81442',1,'glm']]], - ['cross',['cross',['../a00254.html#ga755beaa929c75751dee646cccba37e4c',1,'glm::cross(qua< T, Q > const &q1, qua< T, Q > const &q2)'],['../a00279.html#gaeeec0794212fe84fc9d261de067c9587',1,'glm::cross(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)'],['../a00322.html#gac36e72b934ea6a9dd313772d7e78fa93',1,'glm::cross(vec< 2, T, Q > const &v, vec< 2, T, Q > const &u)'],['../a00352.html#ga2f32f970411c44cdd38bb98960198385',1,'glm::cross(qua< T, Q > const &q, vec< 3, T, Q > const &v)'],['../a00352.html#ga9f5f77255756e5668dfee7f0d07ed021',1,'glm::cross(vec< 3, T, Q > const &v, qua< T, Q > const &q)']]], - ['csc',['csc',['../a00301.html#ga59dd0005b6474eea48af743b4f14ebbb',1,'glm']]], - ['csch',['csch',['../a00301.html#ga6d95843ff3ca6472ab399ba171d290a0',1,'glm']]], - ['cubic',['cubic',['../a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70',1,'glm']]], - ['cubiceasein',['cubicEaseIn',['../a00318.html#gaff52f746102b94864d105563ba8895ae',1,'glm']]], - ['cubiceaseinout',['cubicEaseInOut',['../a00318.html#ga55134072b42d75452189321d4a2ad91c',1,'glm']]], - ['cubiceaseout',['cubicEaseOut',['../a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_3.html b/tests/OpenGL/package/glm/doc/api/search/functions_3.html deleted file mode 100644 index 4e302d69..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_3.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_3.js b/tests/OpenGL/package/glm/doc/api/search/functions_3.js deleted file mode 100644 index 5ae63635..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_3.js +++ /dev/null @@ -1,24 +0,0 @@ -var searchData= -[ - ['decompose',['decompose',['../a00335.html#gac0e342656ba09a9bc97c57182ba73124',1,'glm']]], - ['degrees',['degrees',['../a00373.html#ga8faec9e303538065911ba8b3caf7326b',1,'glm']]], - ['derivedeuleranglex',['derivedEulerAngleX',['../a00319.html#ga994b8186b3b80d91cf90bc403164692f',1,'glm']]], - ['derivedeulerangley',['derivedEulerAngleY',['../a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10',1,'glm']]], - ['derivedeuleranglez',['derivedEulerAngleZ',['../a00319.html#gae8b397348201c42667be983ba3f344df',1,'glm']]], - ['determinant',['determinant',['../a00371.html#gad7928795124768e058f99dce270f5c8d',1,'glm']]], - ['diagonal2x2',['diagonal2x2',['../a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac',1,'glm']]], - ['diagonal2x3',['diagonal2x3',['../a00339.html#gab69f900206a430e2875a5a073851e175',1,'glm']]], - ['diagonal2x4',['diagonal2x4',['../a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549',1,'glm']]], - ['diagonal3x2',['diagonal3x2',['../a00339.html#ga832c805d5130d28ad76236958d15b47d',1,'glm']]], - ['diagonal3x3',['diagonal3x3',['../a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0',1,'glm']]], - ['diagonal3x4',['diagonal3x4',['../a00339.html#gad7551139cff0c4208d27f0ad3437833e',1,'glm']]], - ['diagonal4x2',['diagonal4x2',['../a00339.html#gacb8969e6543ba775c6638161a37ac330',1,'glm']]], - ['diagonal4x3',['diagonal4x3',['../a00339.html#gae235def5049d6740f0028433f5e13f90',1,'glm']]], - ['diagonal4x4',['diagonal4x4',['../a00339.html#ga0b4cd8dea436791b072356231ee8578f',1,'glm']]], - ['diskrand',['diskRand',['../a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73',1,'glm']]], - ['distance',['distance',['../a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f',1,'glm']]], - ['distance2',['distance2',['../a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f',1,'glm']]], - ['dot',['dot',['../a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc',1,'glm::dot(qua< T, Q > const &x, qua< T, Q > const &y)'],['../a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a',1,'glm::dot(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['dual_5fquat_5fidentity',['dual_quat_identity',['../a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0',1,'glm']]], - ['dualquat_5fcast',['dualquat_cast',['../a00317.html#gac4064ff813759740201765350eac4236',1,'glm::dualquat_cast(mat< 2, 4, T, Q > const &x)'],['../a00317.html#ga91025ebdca0f4ea54da08497b00e8c84',1,'glm::dualquat_cast(mat< 3, 4, T, Q > const &x)']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_4.html b/tests/OpenGL/package/glm/doc/api/search/functions_4.html deleted file mode 100644 index 58ca83a6..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_4.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_4.js b/tests/OpenGL/package/glm/doc/api/search/functions_4.js deleted file mode 100644 index 5937b38a..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_4.js +++ /dev/null @@ -1,55 +0,0 @@ -var searchData= -[ - ['e',['e',['../a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139',1,'glm']]], - ['elasticeasein',['elasticEaseIn',['../a00318.html#ga230918eccee4e113d10ec5b8cdc58695',1,'glm']]], - ['elasticeaseinout',['elasticEaseInOut',['../a00318.html#ga2db4ac8959559b11b4029e54812908d6',1,'glm']]], - ['elasticeaseout',['elasticEaseOut',['../a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365',1,'glm']]], - ['epsilon',['epsilon',['../a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429',1,'glm']]], - ['epsilonequal',['epsilonEqual',['../a00291.html#ga91b417866cafadd076004778217a1844',1,'glm::epsilonEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y, T const &epsilon)'],['../a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb',1,'glm::epsilonEqual(genType const &x, genType const &y, genType const &epsilon)']]], - ['epsilonnotequal',['epsilonNotEqual',['../a00291.html#gaf840d33b9a5261ec78dcd5125743b025',1,'glm::epsilonNotEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y, T const &epsilon)'],['../a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf',1,'glm::epsilonNotEqual(genType const &x, genType const &y, genType const &epsilon)']]], - ['equal',['equal',['../a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f',1,'glm::equal(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y)'],['../a00246.html#gaf5d687d70d11708b68c36c6db5777040',1,'glm::equal(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, T epsilon)'],['../a00246.html#gafa6a053e81179fa4292b35651c83c3fb',1,'glm::equal(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, T, Q > const &epsilon)'],['../a00246.html#gab3a93f19e72e9141f50527c9de21d0c0',1,'glm::equal(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, int ULPs)'],['../a00246.html#ga5305af376173f1902719fa309bbae671',1,'glm::equal(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, int, Q > const &ULPs)'],['../a00255.html#gad7827af0549504ff1cd6a359786acc7a',1,'glm::equal(qua< T, Q > const &x, qua< T, Q > const &y)'],['../a00255.html#gaa001eecb91106463169a8e5ef1577b39',1,'glm::equal(qua< T, Q > const &x, qua< T, Q > const &y, T epsilon)'],['../a00275.html#ga2ac7651a2fa7354f2da610dbd50d28e2',1,'glm::equal(vec< L, T, Q > const &x, vec< L, T, Q > const &y, T epsilon)'],['../a00275.html#ga37d261a65f69babc82cec2ae1af7145f',1,'glm::equal(vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &epsilon)'],['../a00275.html#ga2b46cb50911e97b32f4cd743c2c69771',1,'glm::equal(vec< L, T, Q > const &x, vec< L, T, Q > const &y, int ULPs)'],['../a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581',1,'glm::equal(vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, int, Q > const &ULPs)'],['../a00374.html#gab4c5cfdaa70834421397a85aa83ad946',1,'glm::equal(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['euclidean',['euclidean',['../a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8',1,'glm']]], - ['euler',['euler',['../a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42',1,'glm']]], - ['eulerangles',['eulerAngles',['../a00299.html#gaf4dd967dead22dd932fc7460ceecb03f',1,'glm']]], - ['euleranglex',['eulerAngleX',['../a00319.html#gafba6282e4ed3ff8b5c75331abfba3489',1,'glm']]], - ['euleranglexy',['eulerAngleXY',['../a00319.html#ga64036577ee17a2d24be0dbc05881d4e2',1,'glm']]], - ['euleranglexyx',['eulerAngleXYX',['../a00319.html#ga29bd0787a28a6648159c0d6e69706066',1,'glm']]], - ['euleranglexyz',['eulerAngleXYZ',['../a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645',1,'glm']]], - ['euleranglexz',['eulerAngleXZ',['../a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9',1,'glm']]], - ['euleranglexzx',['eulerAngleXZX',['../a00319.html#ga60171c79a17aec85d7891ae1d1533ec9',1,'glm']]], - ['euleranglexzy',['eulerAngleXZY',['../a00319.html#ga996dce12a60d8a674ba6737a535fa910',1,'glm']]], - ['eulerangley',['eulerAngleY',['../a00319.html#gab84bf4746805fd69b8ecbb230e3974c5',1,'glm']]], - ['eulerangleyx',['eulerAngleYX',['../a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d',1,'glm']]], - ['eulerangleyxy',['eulerAngleYXY',['../a00319.html#ga750fba9894117f87bcc529d7349d11de',1,'glm']]], - ['eulerangleyxz',['eulerAngleYXZ',['../a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10',1,'glm']]], - ['eulerangleyz',['eulerAngleYZ',['../a00319.html#ga220379e10ac8cca55e275f0c9018fed9',1,'glm']]], - ['eulerangleyzx',['eulerAngleYZX',['../a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848',1,'glm']]], - ['eulerangleyzy',['eulerAngleYZY',['../a00319.html#ga5e5e40abc27630749b42b3327c76d6e4',1,'glm']]], - ['euleranglez',['eulerAngleZ',['../a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251',1,'glm']]], - ['euleranglezx',['eulerAngleZX',['../a00319.html#ga483903115cd4059228961046a28d69b5',1,'glm']]], - ['euleranglezxy',['eulerAngleZXY',['../a00319.html#gab4505c54d2dd654df4569fd1f04c43aa',1,'glm']]], - ['euleranglezxz',['eulerAngleZXZ',['../a00319.html#ga178f966c52b01e4d65e31ebd007e3247',1,'glm']]], - ['euleranglezy',['eulerAngleZY',['../a00319.html#ga400b2bd5984999efab663f3a68e1d020',1,'glm']]], - ['euleranglezyx',['eulerAngleZYX',['../a00319.html#ga2e61f1e39069c47530acab9167852dd6',1,'glm']]], - ['euleranglezyz',['eulerAngleZYZ',['../a00319.html#gacd795f1dbecaf74974f9c76bbcca6830',1,'glm']]], - ['exp',['exp',['../a00242.html#ga071566cadc7505455e611f2a0353f4d4',1,'glm::exp(vec< L, T, Q > const &v)'],['../a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac',1,'glm::exp(qua< T, Q > const &q)']]], - ['exp2',['exp2',['../a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16',1,'glm']]], - ['exponentialeasein',['exponentialEaseIn',['../a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c',1,'glm']]], - ['exponentialeaseinout',['exponentialEaseInOut',['../a00318.html#ga232fb6dc093c5ce94bee105ff2947501',1,'glm']]], - ['exponentialeaseout',['exponentialEaseOut',['../a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3',1,'glm']]], - ['extend',['extend',['../a00320.html#ga8140caae613b0f847ab0d7175dc03a37',1,'glm']]], - ['extracteuleranglexyx',['extractEulerAngleXYX',['../a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7',1,'glm']]], - ['extracteuleranglexyz',['extractEulerAngleXYZ',['../a00319.html#gacea701562f778c1da4d3a0a1cf091000',1,'glm']]], - ['extracteuleranglexzx',['extractEulerAngleXZX',['../a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0',1,'glm']]], - ['extracteuleranglexzy',['extractEulerAngleXZY',['../a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed',1,'glm']]], - ['extracteulerangleyxy',['extractEulerAngleYXY',['../a00319.html#gaab8868556361a190db94374e9983ed39',1,'glm']]], - ['extracteulerangleyxz',['extractEulerAngleYXZ',['../a00319.html#gaf0937518e63037335a0e8358b6f053c5',1,'glm']]], - ['extracteulerangleyzx',['extractEulerAngleYZX',['../a00319.html#ga9049b78466796c0de2971756e25b93d3',1,'glm']]], - ['extracteulerangleyzy',['extractEulerAngleYZY',['../a00319.html#ga11dad972c109e4bf8694c915017c44a6',1,'glm']]], - ['extracteuleranglezxy',['extractEulerAngleZXY',['../a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363',1,'glm']]], - ['extracteuleranglezxz',['extractEulerAngleZXZ',['../a00319.html#ga59359fef9bad92afaca55e193f91e702',1,'glm']]], - ['extracteuleranglezyx',['extractEulerAngleZYX',['../a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665',1,'glm']]], - ['extracteuleranglezyz',['extractEulerAngleZYZ',['../a00319.html#gafdfa880a64b565223550c2d3938b1aeb',1,'glm']]], - ['extractmatrixrotation',['extractMatrixRotation',['../a00337.html#gabbc1c7385a145f04b5c54228965df145',1,'glm']]], - ['extractrealcomponent',['extractRealComponent',['../a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_5.html b/tests/OpenGL/package/glm/doc/api/search/functions_5.html deleted file mode 100644 index 5f9f05ae..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_5.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_5.js b/tests/OpenGL/package/glm/doc/api/search/functions_5.js deleted file mode 100644 index 7eab90b7..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_5.js +++ /dev/null @@ -1,51 +0,0 @@ -var searchData= -[ - ['faceforward',['faceforward',['../a00279.html#ga7aed0a36c738169402404a3a5d54e43b',1,'glm']]], - ['factorial',['factorial',['../a00330.html#ga8cbd3120905f398ec321b5d1836e08fb',1,'glm']]], - ['fastacos',['fastAcos',['../a00325.html#ga9721d63356e5d94fdc4b393a426ab26b',1,'glm']]], - ['fastasin',['fastAsin',['../a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f',1,'glm']]], - ['fastatan',['fastAtan',['../a00325.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c',1,'glm::fastAtan(T y, T x)'],['../a00325.html#gae25de86a968490ff56856fa425ec9d30',1,'glm::fastAtan(T angle)']]], - ['fastcos',['fastCos',['../a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a',1,'glm']]], - ['fastdistance',['fastDistance',['../a00324.html#gaac333418d0c4e0cc6d3d219ed606c238',1,'glm::fastDistance(genType x, genType y)'],['../a00324.html#ga42d3e771fa7cb3c60d828e315829df19',1,'glm::fastDistance(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['fastexp',['fastExp',['../a00323.html#gaa3180ac8f96ab37ab96e0cacaf608e10',1,'glm::fastExp(T x)'],['../a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58',1,'glm::fastExp(vec< L, T, Q > const &x)']]], - ['fastexp2',['fastExp2',['../a00323.html#ga0af50585955eb14c60bb286297fabab2',1,'glm::fastExp2(T x)'],['../a00323.html#gacaaed8b67d20d244b7de217e7816c1b6',1,'glm::fastExp2(vec< L, T, Q > const &x)']]], - ['fastinversesqrt',['fastInverseSqrt',['../a00324.html#ga7f081b14d9c7035c8714eba5f7f75a8f',1,'glm::fastInverseSqrt(genType x)'],['../a00324.html#gadcd7be12b1e5ee182141359d4c45dd24',1,'glm::fastInverseSqrt(vec< L, T, Q > const &x)']]], - ['fastlength',['fastLength',['../a00324.html#gafe697d6287719538346bbdf8b1367c59',1,'glm::fastLength(genType x)'],['../a00324.html#ga90f66be92ef61e705c005e7b3209edb8',1,'glm::fastLength(vec< L, T, Q > const &x)']]], - ['fastlog',['fastLog',['../a00323.html#gae1bdc97b7f96a600e29c753f1cd4388a',1,'glm::fastLog(T x)'],['../a00323.html#ga937256993a7219e73f186bb348fe6be8',1,'glm::fastLog(vec< L, T, Q > const &x)']]], - ['fastlog2',['fastLog2',['../a00323.html#ga6e98118685f6dc9e05fbb13dd5e5234e',1,'glm::fastLog2(T x)'],['../a00323.html#ga7562043539194ccc24649f8475bc5584',1,'glm::fastLog2(vec< L, T, Q > const &x)']]], - ['fastmix',['fastMix',['../a00352.html#ga264e10708d58dd0ff53b7902a2bd2561',1,'glm']]], - ['fastnormalize',['fastNormalize',['../a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c',1,'glm']]], - ['fastnormalizedot',['fastNormalizeDot',['../a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e',1,'glm']]], - ['fastpow',['fastPow',['../a00323.html#ga5340e98a11fcbbd936ba6e983a154d50',1,'glm::fastPow(genType x, genType y)'],['../a00323.html#ga15325a8ed2d1c4ed2412c4b3b3927aa2',1,'glm::fastPow(vec< L, T, Q > const &x, vec< L, T, Q > const &y)'],['../a00323.html#ga7f2562db9c3e02ae76169c36b086c3f6',1,'glm::fastPow(genTypeT x, genTypeU y)'],['../a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5',1,'glm::fastPow(vec< L, T, Q > const &x)']]], - ['fastsin',['fastSin',['../a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915',1,'glm']]], - ['fastsqrt',['fastSqrt',['../a00324.html#ga6c460e9414a50b2fc455c8f64c86cdc9',1,'glm::fastSqrt(genType x)'],['../a00324.html#gae83f0c03614f73eae5478c5b6274ee6d',1,'glm::fastSqrt(vec< L, T, Q > const &x)']]], - ['fasttan',['fastTan',['../a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2',1,'glm']]], - ['fclamp',['fclamp',['../a00321.html#ga1e28539d3a46965ed9ef92ec7cb3b18a',1,'glm::fclamp(genType x, genType minVal, genType maxVal)'],['../a00321.html#ga60796d08903489ee185373593bc16b9d',1,'glm::fclamp(vec< L, T, Q > const &x, T minVal, T maxVal)'],['../a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297',1,'glm::fclamp(vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &maxVal)']]], - ['findlsb',['findLSB',['../a00370.html#gaf74c4d969fa34ab8acb9d390f5ca5274',1,'glm::findLSB(genIUType x)'],['../a00370.html#ga4454c0331d6369888c28ab677f4810c7',1,'glm::findLSB(vec< L, T, Q > const &v)']]], - ['findmsb',['findMSB',['../a00370.html#ga7e4a794d766861c70bc961630f8ef621',1,'glm::findMSB(genIUType x)'],['../a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872',1,'glm::findMSB(vec< L, T, Q > const &v)']]], - ['findnsb',['findNSB',['../a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075',1,'glm::findNSB(genIUType x, int significantBitCount)'],['../a00274.html#gaff61eca266da315002a3db92ff0dd604',1,'glm::findNSB(vec< L, T, Q > const &Source, vec< L, int, Q > SignificantBitCount)']]], - ['fliplr',['fliplr',['../a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb',1,'glm']]], - ['flipud',['flipud',['../a00336.html#ga85003371f0ba97380dd25e8905de1870',1,'glm']]], - ['floatbitstoint',['floatBitsToInt',['../a00241.html#ga1425c1c3160ec51214b03a0469a3013d',1,'glm::floatBitsToInt(float const &v)'],['../a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed',1,'glm::floatBitsToInt(vec< L, float, Q > const &v)']]], - ['floatbitstouint',['floatBitsToUint',['../a00241.html#ga70e0271c34af52f3100c7960e18c3f2b',1,'glm::floatBitsToUint(float const &v)'],['../a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db',1,'glm::floatBitsToUint(vec< L, float, Q > const &v)']]], - ['floor',['floor',['../a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d',1,'glm']]], - ['floor_5flog2',['floor_log2',['../a00330.html#ga7011b4e1c1e1ed492149b028feacc00e',1,'glm']]], - ['floormultiple',['floorMultiple',['../a00302.html#ga2ffa3cd5f2ea746ee1bf57c46da6315e',1,'glm::floorMultiple(genType v, genType Multiple)'],['../a00302.html#gacdd8901448f51f0b192380e422fae3e4',1,'glm::floorMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)']]], - ['floorpoweroftwo',['floorPowerOfTwo',['../a00302.html#gafe273a57935d04c9db677bf67f9a71f4',1,'glm::floorPowerOfTwo(genIUType v)'],['../a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d',1,'glm::floorPowerOfTwo(vec< L, T, Q > const &v)']]], - ['fma',['fma',['../a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2',1,'glm']]], - ['fmax',['fmax',['../a00258.html#ga36920478565cf608e93064283ce06421',1,'glm::fmax(T a, T b)'],['../a00258.html#ga0007bba71ca451ac70e99d28dfbeaab9',1,'glm::fmax(T a, T b, T C)'],['../a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08',1,'glm::fmax(T a, T b, T C, T D)'],['../a00267.html#gad66b6441f7200db16c9f341711733c56',1,'glm::fmax(vec< L, T, Q > const &a, T b)'],['../a00267.html#ga8df4be3f48d6717c40ea788fd30deebf',1,'glm::fmax(vec< L, T, Q > const &a, vec< L, T, Q > const &b)'],['../a00267.html#ga0f04ba924294dae4234ca93ede23229a',1,'glm::fmax(vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c)'],['../a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230',1,'glm::fmax(vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c, vec< L, T, Q > const &d)'],['../a00321.html#gae5792cb2b51190057e4aea027eb56f81',1,'glm::fmax(genType x, genType y)']]], - ['fmin',['fmin',['../a00258.html#ga7b2b438a765e2a62098c79eb212f28f0',1,'glm::fmin(T a, T b)'],['../a00258.html#ga1a95fe4cf5437e8133f1093fe9726a64',1,'glm::fmin(T a, T b, T c)'],['../a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661',1,'glm::fmin(T a, T b, T c, T d)'],['../a00267.html#gae989203363cff9eab5093630df4fe071',1,'glm::fmin(vec< L, T, Q > const &x, T y)'],['../a00267.html#ga7c42e93cd778c9181d1cdeea4d3e43bd',1,'glm::fmin(vec< L, T, Q > const &x, vec< L, T, Q > const &y)'],['../a00267.html#ga7e62739055b49189d9355471f78fe000',1,'glm::fmin(vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c)'],['../a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c',1,'glm::fmin(vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c, vec< L, T, Q > const &d)'],['../a00321.html#gaa3200559611ac5b9b9ae7283547916a7',1,'glm::fmin(genType x, genType y)']]], - ['fmod',['fmod',['../a00314.html#gae5e80425df9833164ad469e83b475fb4',1,'glm']]], - ['four_5fover_5fpi',['four_over_pi',['../a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09',1,'glm']]], - ['fract',['fract',['../a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7',1,'glm::fract(genType x)'],['../a00241.html#ga2df623004f634b440d61e018d62c751b',1,'glm::fract(vec< L, T, Q > const &x)']]], - ['frexp',['frexp',['../a00241.html#gaddf5ef73283c171730e0bcc11833fa81',1,'glm']]], - ['frustum',['frustum',['../a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9',1,'glm']]], - ['frustumlh',['frustumLH',['../a00243.html#gae4277c37f61d81da01bc9db14ea90296',1,'glm']]], - ['frustumlh_5fno',['frustumLH_NO',['../a00243.html#ga259520cad03b3f8bca9417920035ed01',1,'glm']]], - ['frustumlh_5fzo',['frustumLH_ZO',['../a00243.html#ga94218b094862d17798370242680b9030',1,'glm']]], - ['frustumno',['frustumNO',['../a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90',1,'glm']]], - ['frustumrh',['frustumRH',['../a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136',1,'glm']]], - ['frustumrh_5fno',['frustumRH_NO',['../a00243.html#ga9236c8439f21be186b79c97b588836b9',1,'glm']]], - ['frustumrh_5fzo',['frustumRH_ZO',['../a00243.html#ga7654a9227f14d5382786b9fc0eb5692d',1,'glm']]], - ['frustumzo',['frustumZO',['../a00243.html#gaa73322e152edf50cf30a6edac342a757',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_6.html b/tests/OpenGL/package/glm/doc/api/search/functions_6.html deleted file mode 100644 index c980da25..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_6.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_6.js b/tests/OpenGL/package/glm/doc/api/search/functions_6.js deleted file mode 100644 index d99a7ae6..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_6.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['gauss',['gauss',['../a00326.html#ga0b50b197ff74261a0fad90f4b8d24702',1,'glm::gauss(T x, T ExpectedValue, T StandardDeviation)'],['../a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab',1,'glm::gauss(vec< 2, T, Q > const &Coord, vec< 2, T, Q > const &ExpectedValue, vec< 2, T, Q > const &StandardDeviation)']]], - ['gaussrand',['gaussRand',['../a00300.html#ga5193a83e49e4fdc5652c084711083574',1,'glm']]], - ['glm_5faligned_5ftypedef',['GLM_ALIGNED_TYPEDEF',['../a00364.html#gab5cd5c5fad228b25c782084f1cc30114',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1)'],['../a00364.html#ga5bb5dd895ef625c1b113f2cf400186b0',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2)'],['../a00364.html#gac6efa54cf7c6c86f7158922abdb1a430',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4)'],['../a00364.html#ga6612eb77c8607048e7552279a11eeb5f',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8)'],['../a00364.html#ga7ddc1848ff2223026db8968ce0c97497',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1)'],['../a00364.html#ga22240dd9458b0f8c11fbcc4f48714f68',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2)'],['../a00364.html#ga8130ea381d76a2cc34a93ccbb6cf487d',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4)'],['../a00364.html#ga7ccb60f3215d293fd62b33b31ed0e7be',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8)'],['../a00364.html#gac20d508d2ef5cc95ad3daf083c57ec2a',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1)'],['../a00364.html#ga50257b48069a31d0c8d9c1f644d267de',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2)'],['../a00364.html#gaa07e98e67b7a3435c0746018c7a2a839',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4)'],['../a00364.html#ga62601fc6f8ca298b77285bedf03faffd',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8)'],['../a00364.html#gac8cff825951aeb54dd846037113c72db',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1)'],['../a00364.html#ga78f443d88f438575a62b5df497cdf66b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2)'],['../a00364.html#ga0680cd3b5d4e8006985fb41a4f9b57af',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4)'],['../a00364.html#gad9e5babb1dd3e3531b42c37bf25dd951',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8)'],['../a00364.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1)'],['../a00364.html#ga2196442c0e5c5e8c77842de388c42521',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2)'],['../a00364.html#ga1284488189daf897cf095c5eefad9744',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4)'],['../a00364.html#ga73fdc86a539808af58808b7c60a1c4d8',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8)'],['../a00364.html#gafafeea923e1983262c972e2b83922d3b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1)'],['../a00364.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2)'],['../a00364.html#ga63b882e29170d428463d99c3d630acc6',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4)'],['../a00364.html#ga8b20507bb048c1edea2d441cc953e6f0',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8)'],['../a00364.html#ga56c5ca60813027b603c7b61425a0479d',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1)'],['../a00364.html#ga7a751b3aff24c0259f4a7357c2969089',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2)'],['../a00364.html#ga70cd2144351c556469ee6119e59971fc',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4)'],['../a00364.html#ga46bbf08dc004d8c433041e0b5018a5d3',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8)'],['../a00364.html#gab3e10c77a20d1abad2de1c561c7a5c18',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1)'],['../a00364.html#ga968f30319ebeaca9ebcd3a25a8e139fb',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2)'],['../a00364.html#gaae773c28e6390c6aa76f5b678b7098a3',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4)'],['../a00364.html#ga790cfff1ca39d0ed696ffed980809311',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8)'],['../a00364.html#ga8265b91eb23c120a9b0c3e381bc37b96',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1)'],['../a00364.html#gae6d384de17588d8edb894fbe06e0d410',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2)'],['../a00364.html#ga9c8172b745ee03fc5b2b91c350c2922f',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4)'],['../a00364.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8)'],['../a00364.html#gabd82b9faa9d4d618dbbe0fc8a1efee63',1,'glm::GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1)'],['../a00364.html#ga285649744560be21000cfd81bbb5d507',1,'glm::GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2)'],['../a00364.html#ga07732da630b2deda428ce95c0ecaf3ff',1,'glm::GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4)'],['../a00364.html#ga1a8da2a8c51f69c07a2e7f473aa420f4',1,'glm::GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8)'],['../a00364.html#ga848aedf13e2d9738acf0bb482c590174',1,'glm::GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1)'],['../a00364.html#gafd2803d39049dd45a37a63931e25d943',1,'glm::GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2)'],['../a00364.html#gae553b33349d6da832cf0724f1e024094',1,'glm::GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4)'],['../a00364.html#ga16d223a2b3409e812e1d3bd87f0e9e5c',1,'glm::GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8)'],['../a00364.html#ga2de065d2ddfdb366bcd0febca79ae2ad',1,'glm::GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1)'],['../a00364.html#gabd786bdc20a11c8cb05c92c8212e28d3',1,'glm::GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2)'],['../a00364.html#gad4aefe56691cdb640c72f0d46d3fb532',1,'glm::GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4)'],['../a00364.html#ga8fe9745f7de24a8394518152ff9fccdc',1,'glm::GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8)'],['../a00364.html#gaaad735483450099f7f882d4e3a3569bd',1,'glm::GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4)'],['../a00364.html#gac7b6f823802edbd6edbaf70ea25bf068',1,'glm::GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8)'],['../a00364.html#ga3e235bcd2b8029613f25b8d40a2d3ef7',1,'glm::GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16)'],['../a00364.html#ga50d8a9523968c77f8325b4c9bfbff41e',1,'glm::GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16)'],['../a00364.html#ga9ec20fdfb729c702032da9378c79679f',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1)'],['../a00364.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2)'],['../a00364.html#ga2958f907719d94d8109b562540c910e2',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4)'],['../a00364.html#ga1fe6fc032a978f1c845fac9aa0668714',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4)'],['../a00364.html#gaa4161e7a496dc96972254143fe873e55',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2)'],['../a00364.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4)'],['../a00364.html#gaaee91dd2ab34423bcc11072ef6bd0f02',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8)'],['../a00364.html#ga49f047ccaa8b31fad9f26c67bf9b3510',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8)'],['../a00364.html#ga904e9c2436bb099397c0823506a0771f',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4)'],['../a00364.html#gaf90651cf2f5e7ee2b11cfdc5a6749534',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8)'],['../a00364.html#ga7354a4ead8cb17868aec36b9c30d6010',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16)'],['../a00364.html#gad2ecbdea18732163e2636e27b37981ee',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16)'],['../a00364.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8)'],['../a00364.html#ga1f9e9c2ea2768675dff9bae5cde2d829',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16)'],['../a00364.html#gad77c317b7d942322cd5be4c8127b3187',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32)'],['../a00364.html#ga716f8ea809bdb11b5b542d8b71aeb04f',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32)'],['../a00364.html#gad46f8e9082d5878b1bc04f9c1471cdaa',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1)'],['../a00364.html#ga1246094581af624aca6c7499aaabf801',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2)'],['../a00364.html#ga7a5009a1d0196bbf21dd7518f61f0249',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4)'],['../a00364.html#ga45213fd18b3bb1df391671afefe4d1e7',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8)'],['../a00364.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1)'],['../a00364.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2)'],['../a00364.html#gadc246401847dcba155f0699425e49dcd',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4)'],['../a00364.html#gaace64bddf51a9def01498da9a94fb01c',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8)'],['../a00364.html#gad7bb97c29d664bd86ffb1bed4abc5534',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1)'],['../a00364.html#ga404bba7785130e0b1384d695a9450b28',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2)'],['../a00364.html#ga31ba41fd896257536958ec6080203d2a',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4)'],['../a00364.html#gacca5f13627f57b3505676e40a6e43e5e',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8)'],['../a00364.html#ga5faf1d3e70bf33174dd7f3d01d5b883b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1)'],['../a00364.html#ga727e2bf2c433bb3b0182605860a48363',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2)'],['../a00364.html#ga12566ca66d5962dadb4a5eb4c74e891e',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4)'],['../a00364.html#ga7b66a97a8acaa35c5a377b947318c6bc',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8)'],['../a00364.html#gaa9cde002439b74fa66120a16a9f55fcc',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1)'],['../a00364.html#ga1ca98c67f7d1e975f7c5202f1da1df1f',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2)'],['../a00364.html#ga1dc8bc6199d785f235576948d80a597c',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4)'],['../a00364.html#gad14a0f2ec93519682b73d70b8e401d81',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8)'],['../a00364.html#gada8b996eb6526dc1ead813bd49539d1b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1)'],['../a00364.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2)'],['../a00364.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4)'],['../a00364.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8)'],['../a00364.html#ga0ee829f7b754b262bbfe6317c0d678ac',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1)'],['../a00364.html#ga447848a817a626cae08cedc9778b331c',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2)'],['../a00364.html#ga6027ae13b2734f542a6e7beee11b8820',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4)'],['../a00364.html#ga2aca46c8608c95ef991ee4c332acde5f',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8)'],['../a00364.html#gaff50b10dd1c48be324fdaffd18e2c7ea',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1)'],['../a00364.html#ga9fc4421dbb833d5461e6d4e59dcfde55',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2)'],['../a00364.html#ga329f1e2b94b33ba5e3918197030bcf03',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4)'],['../a00364.html#ga71e646f7e301aa422328194162c9c998',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8)'],['../a00364.html#ga8942e09f479489441a7a5004c6d8cb66',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1)'],['../a00364.html#gaab32497d6e4db16ee439dbedd64c5865',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2)'],['../a00364.html#gaaadbb34952eca8e3d7fe122c3e167742',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4)'],['../a00364.html#ga92024d27c74a3650afb55ec8e024ed25',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8)'],['../a00364.html#gabde1d0b4072df35453db76075ab896a6',1,'glm::GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1)'],['../a00364.html#ga06c296c9e398b294c8c9dd2a7693dcbb',1,'glm::GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2)'],['../a00364.html#gacf1744488c96ebd33c9f36ad33b2010a',1,'glm::GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4)'],['../a00364.html#ga3328061a64c20ba59d5f9da24c2cd059',1,'glm::GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8)'],['../a00364.html#gaf6ced36f13bae57f377bafa6f5fcc299',1,'glm::GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1)'],['../a00364.html#gafbc7fb7847bfc78a339d1d371c915c73',1,'glm::GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2)'],['../a00364.html#gaa86bc56a73fd8120b1121b5f5e6245ae',1,'glm::GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4)'],['../a00364.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8',1,'glm::GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8)'],['../a00364.html#ga4f3bab577daf3343e99cc005134bce86',1,'glm::GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1)'],['../a00364.html#ga13a2391339d0790d43b76d00a7611c4f',1,'glm::GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2)'],['../a00364.html#ga197570e03acbc3d18ab698e342971e8f',1,'glm::GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4)'],['../a00364.html#ga0f033b21e145a1faa32c62ede5878993',1,'glm::GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8)'],['../a00364.html#ga509af83527f5cd512e9a7873590663aa',1,'glm::GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4)'],['../a00364.html#ga94e86186978c502c6dc0c0d9c4a30679',1,'glm::GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8)'],['../a00364.html#ga5cec574686a7f3c8ed24bb195c5e2d0a',1,'glm::GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16)'],['../a00364.html#ga47edfdcee9c89b1ebdaf20450323b1d4',1,'glm::GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16)'],['../a00364.html#ga5611d6718e3a00096918a64192e73a45',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1)'],['../a00364.html#ga19837e6f72b60d994a805ef564c6c326',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2)'],['../a00364.html#ga9740cf8e34f068049b42a2753f9601c2',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4)'],['../a00364.html#ga8b8588bb221448f5541a858903822a57',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4)'],['../a00364.html#ga991abe990c16de26b2129d6bc2f4c051',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2)'],['../a00364.html#gac01bb9fc32a1cd76c2b80d030f71df4c',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4)'],['../a00364.html#ga09540dbca093793a36a8997e0d4bee77',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8)'],['../a00364.html#gaecafb5996f5a44f57e34d29c8670741e',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8)'],['../a00364.html#gac6b161a04d2f8408fe1c9d857e8daac0',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4)'],['../a00364.html#ga1fa0dfc8feb0fa17dab2acd43e05342b',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8)'],['../a00364.html#ga0019500abbfa9c66eff61ca75eaaed94',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16)'],['../a00364.html#ga14fd29d01dae7b08a04e9facbcc18824',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16)'],['../a00364.html#gab253845f534a67136f9619843cade903',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8)'],['../a00364.html#ga929427a7627940cdf3304f9c050b677d',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16)'],['../a00364.html#gae373b6c04fdf9879f33d63e6949c037e',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32)'],['../a00364.html#ga53a8a03dca2015baec4584f45b8e9cdc',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32)'],['../a00364.html#gab3301bae94ef5bf59fbdd9a24e7d2a01',1,'glm::GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4)'],['../a00364.html#gada9b0bea273d3ae0286f891533b9568f',1,'glm::GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4)'],['../a00364.html#gadbce23b9f23d77bb3884e289a574ebd5',1,'glm::GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4)'],['../a00364.html#ga75930684ff2233171c573e603f216162',1,'glm::GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8)'],['../a00364.html#ga6e3a2d83b131336219a0f4c7cbba2a48',1,'glm::GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8)'],['../a00364.html#gaa4deaa0dea930c393d55e7a4352b0a20',1,'glm::GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8)'],['../a00364.html#ga81bc497b2bfc6f80bab690c6ee28f0f9',1,'glm::GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4)'],['../a00364.html#gada3e8f783e9d4b90006695a16c39d4d4',1,'glm::GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8)'],['../a00364.html#gab8d081fac3a38d6f55fa552f32168d32',1,'glm::GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16)'],['../a00364.html#ga12fe7b9769c964c5b48dcfd8b7f40198',1,'glm::GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16)'],['../a00364.html#gaefab04611c7f8fe1fd9be3071efea6cc',1,'glm::GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4)'],['../a00364.html#ga2543c05ba19b3bd19d45b1227390c5b4',1,'glm::GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8)'],['../a00364.html#ga009afd727fd657ef33a18754d6d28f60',1,'glm::GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16)'],['../a00364.html#ga2f26177e74bfb301a3d0e02ec3c3ef53',1,'glm::GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16)'],['../a00364.html#ga309f495a1d6b75ddf195b674b65cb1e4',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4)'],['../a00364.html#ga5e185865a2217d0cd47187644683a8c3',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8)'],['../a00364.html#gade4458b27b039b9ca34f8ec049f3115a',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16)'],['../a00364.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16)'],['../a00364.html#ga3e0f35fa0c626285a8bad41707e7316c',1,'glm::GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8)'],['../a00364.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8',1,'glm::GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16)'],['../a00364.html#ga01fe6fee6db5df580b6724a7e681f069',1,'glm::GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32)'],['../a00364.html#ga687d5b8f551d5af32425c0b2fba15e99',1,'glm::GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32)'],['../a00364.html#ga8e842371d46842ff8f1813419ba49d0f',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8)'],['../a00364.html#ga32814aa0f19316b43134fc25f2aad2b9',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16)'],['../a00364.html#gaf3d3bbc1e93909b689123b085e177a14',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32)'],['../a00364.html#ga804c654cead1139bd250f90f9bb01fad',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32)'],['../a00364.html#gacce4ac532880b8c7469d3c31974420a1',1,'glm::GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16)'],['../a00364.html#ga0498e0e249a6faddaf96aa55d7f81c3b',1,'glm::GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16)'],['../a00364.html#ga7435d87de82a0d652b35dc5b9cc718d5',1,'glm::GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16)'],['../a00364.html#ga719da577361541a4c43a2dd1d0e361e1',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16)'],['../a00364.html#ga6e7ee4f541e1d7db66cd1a224caacafb',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16)'],['../a00364.html#gae5d672d359f2a39f63f98c7975057486',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16)'],['../a00364.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16)'],['../a00364.html#ga0743b4f4f69a3227b82ff58f6abbad62',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16)'],['../a00364.html#ga1a76b325fdf70f961d835edd182c63dd',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16)'],['../a00364.html#ga4b4e181cd041ba28c3163e7b8074aef0',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16)'],['../a00364.html#ga27b13f465abc8a40705698145e222c3f',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16)'],['../a00364.html#ga2608d19cc275830a6f8c0b6405625a4f',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16)'],['../a00364.html#ga93f09768241358a287c4cca538f1f7e7',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16)'],['../a00364.html#ga7c117e3ecca089e10247b1d41d88aff9',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16)'],['../a00364.html#ga07c75cd04ba42dc37fa3e105f89455c5',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16)'],['../a00364.html#ga65ff0d690a34a4d7f46f9b2eb51525ee',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16)'],['../a00364.html#gadd8ddbe2bf65ccede865ba2f510176dc',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16)'],['../a00364.html#gaf18dbff14bf13d3ff540c517659ec045',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16)'],['../a00364.html#ga66339f6139bf7ff19e245beb33f61cc8',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16)'],['../a00364.html#ga1558a48b3934011b52612809f443e46d',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16)'],['../a00364.html#gaa52e5732daa62851627021ad551c7680',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16)'],['../a00364.html#gac09663c42566bcb58d23c6781ac4e85a',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16)'],['../a00364.html#ga3f510999e59e1b309113e1d561162b29',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16)'],['../a00364.html#ga2c9c94f0c89cd71ce56551db6cf4aaec',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16)'],['../a00364.html#ga99ce8274c750fbfdf0e70c95946a2875',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16)'],['../a00364.html#ga9476ef66790239df53dbe66f3989c3b5',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16)'],['../a00364.html#gacc429b3b0b49921e12713b6d31e14e1d',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16)'],['../a00364.html#ga88f6c6fa06e6e64479763e69444669cf',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32)'],['../a00364.html#gaae8e4639c991e64754145ab8e4c32083',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32)'],['../a00364.html#ga6e9094f3feb3b5b49d0f83683a101fde',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32)'],['../a00364.html#gadbd2c639c03de1c3e9591b5a39f65559',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32)'],['../a00364.html#gab059d7b9fe2094acc563b7223987499f',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32)'],['../a00364.html#gabbc811d1c52ed2b8cfcaff1378f75c69',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32)'],['../a00364.html#ga9ddf5212777734d2fd841a84439f3bdf',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32)'],['../a00364.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32)'],['../a00364.html#ga5875e0fa72f07e271e7931811cbbf31a',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32)'],['../a00364.html#ga41e82cd6ac07f912ba2a2d45799dcf0d',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32)'],['../a00364.html#ga0892638d6ba773043b3d63d1d092622e',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32)'],['../a00364.html#ga912a16432608b822f1e13607529934c1',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32)'],['../a00364.html#gafd945a8ea86b042aba410e0560df9a3d',1,'glm::GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16)'],['../a00364.html#ga19c2ba545d1f2f36bcb7b60c9a228622',1,'glm::GLM_ALIGNED_TYPEDEF(quat, aligned_fquat, 16)'],['../a00364.html#gaabc28c84a3288b697605d4688686f9a9',1,'glm::GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32)'],['../a00364.html#ga1ed8aeb5ca67fade269a46105f1bf273',1,'glm::GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16)'],['../a00364.html#ga95cc03b8b475993fa50e05e38e203303',1,'glm::GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32)']]], - ['golden_5fratio',['golden_ratio',['../a00290.html#ga748cf8642830657c5b7eae04d0a80899',1,'glm']]], - ['greaterthan',['greaterThan',['../a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b',1,'glm::greaterThan(qua< T, Q > const &x, qua< T, Q > const &y)'],['../a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4',1,'glm::greaterThan(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['greaterthanequal',['greaterThanEqual',['../a00299.html#ga388cbeba987dae7b5937f742efa49a5a',1,'glm::greaterThanEqual(qua< T, Q > const &x, qua< T, Q > const &y)'],['../a00374.html#ga859975f538940f8d18fe62f916b9abd7',1,'glm::greaterThanEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_7.html b/tests/OpenGL/package/glm/doc/api/search/functions_7.html deleted file mode 100644 index 38573293..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_7.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_7.js b/tests/OpenGL/package/glm/doc/api/search/functions_7.js deleted file mode 100644 index 85d4bbea..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_7.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['half_5fpi',['half_pi',['../a00290.html#ga0c36b41d462e45641faf7d7938948bac',1,'glm']]], - ['hermite',['hermite',['../a00358.html#gaa69e143f6374d32f934a8edeaa50bac9',1,'glm']]], - ['highestbitvalue',['highestBitValue',['../a00309.html#ga0dcc8fe7c3d3ad60dea409281efa3d05',1,'glm::highestBitValue(genIUType Value)'],['../a00309.html#ga898ef075ccf809a1e480faab48fe96bf',1,'glm::highestBitValue(vec< L, T, Q > const &value)']]], - ['hsvcolor',['hsvColor',['../a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_8.html b/tests/OpenGL/package/glm/doc/api/search/functions_8.html deleted file mode 100644 index 088e437f..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_8.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_8.js b/tests/OpenGL/package/glm/doc/api/search/functions_8.js deleted file mode 100644 index fcf43b87..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_8.js +++ /dev/null @@ -1,31 +0,0 @@ -var searchData= -[ - ['identity',['identity',['../a00247.html#ga81696f2b8d1db02ea1aff8da8f269314',1,'glm']]], - ['imulextended',['imulExtended',['../a00370.html#gac0c510a70e852f57594a9141848642e3',1,'glm']]], - ['infiniteperspective',['infinitePerspective',['../a00243.html#ga44fa38a18349450325cae2661bb115ca',1,'glm']]], - ['infiniteperspectivelh',['infinitePerspectiveLH',['../a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9',1,'glm']]], - ['infiniteperspectiverh',['infinitePerspectiveRH',['../a00243.html#ga99672ffe5714ef478dab2437255fe7e1',1,'glm']]], - ['intbitstofloat',['intBitsToFloat',['../a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4',1,'glm::intBitsToFloat(int const &v)'],['../a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0',1,'glm::intBitsToFloat(vec< L, int, Q > const &v)']]], - ['intermediate',['intermediate',['../a00352.html#gacc5cd5f3e78de61d141c2355417424de',1,'glm']]], - ['interpolate',['interpolate',['../a00337.html#ga4e67863d150724b10c1ac00972dc958c',1,'glm']]], - ['intersectlinesphere',['intersectLineSphere',['../a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7',1,'glm']]], - ['intersectlinetriangle',['intersectLineTriangle',['../a00331.html#ga9d29b9b3acb504d43986502f42740df4',1,'glm']]], - ['intersectrayplane',['intersectRayPlane',['../a00331.html#gad3697a9700ea379739a667ea02573488',1,'glm']]], - ['intersectraysphere',['intersectRaySphere',['../a00331.html#gac88f8cd84c4bcb5b947d56acbbcfa56e',1,'glm::intersectRaySphere(genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, typename genType::value_type const sphereRadiusSquered, typename genType::value_type &intersectionDistance)'],['../a00331.html#gad28c00515b823b579c608aafa1100c1d',1,'glm::intersectRaySphere(genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)']]], - ['intersectraytriangle',['intersectRayTriangle',['../a00331.html#ga65bf2c594482f04881c36bc761f9e946',1,'glm']]], - ['inverse',['inverse',['../a00248.html#gab41da854ae678e23e114b598cbca4065',1,'glm::inverse(qua< T, Q > const &q)'],['../a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e',1,'glm::inverse(tdualquat< T, Q > const &q)'],['../a00371.html#gaed509fe8129b01e4f20a6d0de5690091',1,'glm::inverse(mat< C, R, T, Q > const &m)']]], - ['inversesqrt',['inversesqrt',['../a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a',1,'glm']]], - ['inversetranspose',['inverseTranspose',['../a00295.html#gab213cd0e3ead5f316d583f99d6312008',1,'glm']]], - ['iround',['iround',['../a00292.html#ga57824268ebe13a922f1d69a5d37f637f',1,'glm']]], - ['iscompnull',['isCompNull',['../a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76',1,'glm']]], - ['isdenormal',['isdenormal',['../a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91',1,'glm']]], - ['isfinite',['isfinite',['../a00315.html#gaf4b04dcd3526996d68c1bfe17bfc8657',1,'glm::isfinite(genType const &x)'],['../a00315.html#gac3b12b8ac3014418fe53c299478b6603',1,'glm::isfinite(const vec< 1, T, Q > &x)'],['../a00315.html#ga8e76dc3e406ce6a4155c2b12a2e4b084',1,'glm::isfinite(const vec< 2, T, Q > &x)'],['../a00315.html#ga929ef27f896d902c1771a2e5e150fc97',1,'glm::isfinite(const vec< 3, T, Q > &x)'],['../a00315.html#ga19925badbe10ce61df1d0de00be0b5ad',1,'glm::isfinite(const vec< 4, T, Q > &x)']]], - ['isidentity',['isIdentity',['../a00340.html#gaee935d145581c82e82b154ccfd78ad91',1,'glm']]], - ['isinf',['isinf',['../a00241.html#ga2885587c23a106301f20443896365b62',1,'glm::isinf(vec< L, T, Q > const &x)'],['../a00248.html#ga45722741ea266b4e861938b365c5f362',1,'glm::isinf(qua< T, Q > const &x)']]], - ['ismultiple',['isMultiple',['../a00261.html#gaec593d33956a8fe43f78fccc63ddde9a',1,'glm::isMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#ga354caf634ef333d9cb4844407416256a',1,'glm::isMultiple(vec< L, T, Q > const &v, T Multiple)'],['../a00274.html#gabb4360e38c0943d8981ba965dead519d',1,'glm::isMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)']]], - ['isnan',['isnan',['../a00241.html#ga29ef934c00306490de837b4746b4e14d',1,'glm::isnan(vec< L, T, Q > const &x)'],['../a00248.html#ga1bb55f8963616502e96dc564384d8a03',1,'glm::isnan(qua< T, Q > const &x)']]], - ['isnormalized',['isNormalized',['../a00340.html#gae785af56f47ce220a1609f7f84aa077a',1,'glm::isNormalized(mat< 2, 2, T, Q > const &m, T const &epsilon)'],['../a00340.html#gaa068311695f28f5f555f5f746a6a66fb',1,'glm::isNormalized(mat< 3, 3, T, Q > const &m, T const &epsilon)'],['../a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad',1,'glm::isNormalized(mat< 4, 4, T, Q > const &m, T const &epsilon)'],['../a00368.html#gac3c974f459fd75453134fad7ae89a39e',1,'glm::isNormalized(vec< L, T, Q > const &v, T const &epsilon)']]], - ['isnull',['isNull',['../a00340.html#ga9790ec222ce948c0ff0d8ce927340dba',1,'glm::isNull(mat< 2, 2, T, Q > const &m, T const &epsilon)'],['../a00340.html#gae14501c6b14ccda6014cc5350080103d',1,'glm::isNull(mat< 3, 3, T, Q > const &m, T const &epsilon)'],['../a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b',1,'glm::isNull(mat< 4, 4, T, Q > const &m, T const &epsilon)'],['../a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495',1,'glm::isNull(vec< L, T, Q > const &v, T const &epsilon)']]], - ['isorthogonal',['isOrthogonal',['../a00340.html#ga58f3289f74dcab653387dd78ad93ca40',1,'glm']]], - ['ispoweroftwo',['isPowerOfTwo',['../a00261.html#gadf491730354aa7da67fbe23d4d688763',1,'glm::isPowerOfTwo(genIUType v)'],['../a00274.html#gabf2b61ded7049bcb13e25164f832a290',1,'glm::isPowerOfTwo(vec< L, T, Q > const &v)']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_9.html b/tests/OpenGL/package/glm/doc/api/search/functions_9.html deleted file mode 100644 index 61de44ad..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_9.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_9.js b/tests/OpenGL/package/glm/doc/api/search/functions_9.js deleted file mode 100644 index a62d9c3f..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_9.js +++ /dev/null @@ -1,28 +0,0 @@ -var searchData= -[ - ['l1norm',['l1Norm',['../a00343.html#gae2fc0b2aa967bebfd6a244700bff6997',1,'glm::l1Norm(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)'],['../a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be',1,'glm::l1Norm(vec< 3, T, Q > const &v)']]], - ['l2norm',['l2Norm',['../a00343.html#ga41340b2ef40a9307ab0f137181565168',1,'glm::l2Norm(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)'],['../a00343.html#gae288bde8f0e41fb4ed62e65137b18cba',1,'glm::l2Norm(vec< 3, T, Q > const &x)']]], - ['ldexp',['ldexp',['../a00241.html#gac3010e0a0c35a1b514540f2fb579c58c',1,'glm']]], - ['lefthanded',['leftHanded',['../a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3',1,'glm']]], - ['length',['length',['../a00254.html#gab703732449be6c7199369b3f9a91ed38',1,'glm::length(qua< T, Q > const &q)'],['../a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263',1,'glm::length(vec< L, T, Q > const &x)']]], - ['length2',['length2',['../a00343.html#ga8d1789651050adb7024917984b41c3de',1,'glm::length2(vec< L, T, Q > const &x)'],['../a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b',1,'glm::length2(qua< T, Q > const &q)']]], - ['lerp',['lerp',['../a00248.html#ga6033dc0741051fa463a0a147ba29f293',1,'glm::lerp(qua< T, Q > const &x, qua< T, Q > const &y, T a)'],['../a00315.html#ga5494ba3a95ea6594c86fc75236886864',1,'glm::lerp(T x, T y, T a)'],['../a00315.html#gaa551c0a0e16d2d4608e49f7696df897f',1,'glm::lerp(const vec< 2, T, Q > &x, const vec< 2, T, Q > &y, T a)'],['../a00315.html#ga44a8b5fd776320f1713413dec959b32a',1,'glm::lerp(const vec< 3, T, Q > &x, const vec< 3, T, Q > &y, T a)'],['../a00315.html#ga89ac8e000199292ec7875519d27e214b',1,'glm::lerp(const vec< 4, T, Q > &x, const vec< 4, T, Q > &y, T a)'],['../a00315.html#gaf68de5baf72d16135368b8ef4f841604',1,'glm::lerp(const vec< 2, T, Q > &x, const vec< 2, T, Q > &y, const vec< 2, T, Q > &a)'],['../a00315.html#ga4ae1a616c8540a2649eab8e0cd051bb3',1,'glm::lerp(const vec< 3, T, Q > &x, const vec< 3, T, Q > &y, const vec< 3, T, Q > &a)'],['../a00315.html#gab5477ab69c40de4db5d58d3359529724',1,'glm::lerp(const vec< 4, T, Q > &x, const vec< 4, T, Q > &y, const vec< 4, T, Q > &a)'],['../a00317.html#gace8380112d16d33f520839cb35a4d173',1,'glm::lerp(tdualquat< T, Q > const &x, tdualquat< T, Q > const &y, T const &a)']]], - ['lessthan',['lessThan',['../a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4',1,'glm::lessThan(qua< T, Q > const &x, qua< T, Q > const &y)'],['../a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6',1,'glm::lessThan(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['lessthanequal',['lessThanEqual',['../a00299.html#gac00012eea281800d2403f4ea8443134d',1,'glm::lessThanEqual(qua< T, Q > const &x, qua< T, Q > const &y)'],['../a00374.html#gab0bdafc019d227257ff73fb5bcca1718',1,'glm::lessThanEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]], - ['levels',['levels',['../a00361.html#gaa8c377f4e63486db4fa872d77880da73',1,'glm']]], - ['lineargradient',['linearGradient',['../a00327.html#ga849241df1e55129b8ce9476200307419',1,'glm']]], - ['linearinterpolation',['linearInterpolation',['../a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649',1,'glm']]], - ['linearrand',['linearRand',['../a00300.html#ga04e241ab88374a477a2c2ceadd2fa03d',1,'glm::linearRand(genType Min, genType Max)'],['../a00300.html#ga94731130c298a9ff5e5025fdee6d97a0',1,'glm::linearRand(vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)']]], - ['lmaxnorm',['lMaxNorm',['../a00343.html#gad58a8231fc32e38104a9e1c4d3c0cb64',1,'glm::lMaxNorm(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)'],['../a00343.html#ga6968a324837a8e899396d44de23d5aae',1,'glm::lMaxNorm(vec< 3, T, Q > const &x)']]], - ['ln_5fln_5ftwo',['ln_ln_two',['../a00290.html#gaca94292c839ed31a405ab7a81ae7e850',1,'glm']]], - ['ln_5ften',['ln_ten',['../a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c',1,'glm']]], - ['ln_5ftwo',['ln_two',['../a00290.html#ga24f4d27765678116f41a2f336ab7975c',1,'glm']]], - ['log',['log',['../a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9',1,'glm::log(vec< L, T, Q > const &v)'],['../a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473',1,'glm::log(qua< T, Q > const &q)'],['../a00333.html#ga60a7b0a401da660869946b2b77c710c9',1,'glm::log(genType const &x, genType const &base)']]], - ['log2',['log2',['../a00242.html#ga82831c7d9cca777cebedfe03a19c8d75',1,'glm::log2(vec< L, T, Q > const &v)'],['../a00292.html#ga9bd682e74bfacb005c735305207ec417',1,'glm::log2(genIUType x)']]], - ['lookat',['lookAt',['../a00247.html#gaa64aa951a0e99136bba9008d2b59c78e',1,'glm']]], - ['lookatlh',['lookAtLH',['../a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0',1,'glm']]], - ['lookatrh',['lookAtRH',['../a00247.html#gacfa12c8889c754846bc20c65d9b5c701',1,'glm']]], - ['lowestbitvalue',['lowestBitValue',['../a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f',1,'glm']]], - ['luminosity',['luminosity',['../a00312.html#gad028e0a4f1a9c812b39439b746295b34',1,'glm']]], - ['lxnorm',['lxNorm',['../a00343.html#gacad23d30497eb16f67709f2375d1f66a',1,'glm::lxNorm(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y, unsigned int Depth)'],['../a00343.html#gac61b6d81d796d6eb4d4183396a19ab91',1,'glm::lxNorm(vec< 3, T, Q > const &x, unsigned int Depth)']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_a.html b/tests/OpenGL/package/glm/doc/api/search/functions_a.html deleted file mode 100644 index a46b662e..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_a.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_a.js b/tests/OpenGL/package/glm/doc/api/search/functions_a.js deleted file mode 100644 index 6cd74286..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_a.js +++ /dev/null @@ -1,36 +0,0 @@ -var searchData= -[ - ['make_5fmat2',['make_mat2',['../a00305.html#ga04409e74dc3da251d2501acf5b4b546c',1,'glm']]], - ['make_5fmat2x2',['make_mat2x2',['../a00305.html#gae49e1c7bcd5abec74d1c34155031f663',1,'glm']]], - ['make_5fmat2x3',['make_mat2x3',['../a00305.html#ga21982104164789cf8985483aaefc25e8',1,'glm']]], - ['make_5fmat2x4',['make_mat2x4',['../a00305.html#ga078b862c90b0e9a79ed43a58997d8388',1,'glm']]], - ['make_5fmat3',['make_mat3',['../a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f',1,'glm']]], - ['make_5fmat3x2',['make_mat3x2',['../a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8',1,'glm']]], - ['make_5fmat3x3',['make_mat3x3',['../a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536',1,'glm']]], - ['make_5fmat3x4',['make_mat3x4',['../a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b',1,'glm']]], - ['make_5fmat4',['make_mat4',['../a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a',1,'glm']]], - ['make_5fmat4x2',['make_mat4x2',['../a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c',1,'glm']]], - ['make_5fmat4x3',['make_mat4x3',['../a00305.html#ga0330bf6640092d7985fac92927bbd42b',1,'glm']]], - ['make_5fmat4x4',['make_mat4x4',['../a00305.html#ga8f084be30e404844bfbb4a551ac2728c',1,'glm']]], - ['make_5fquat',['make_quat',['../a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246',1,'glm']]], - ['make_5fvec1',['make_vec1',['../a00305.html#ga4135f03f3049f0a4eb76545c4967957c',1,'glm::make_vec1(vec< 1, T, Q > const &v)'],['../a00305.html#ga13c92b81e55f201b052a6404d57da220',1,'glm::make_vec1(vec< 2, T, Q > const &v)'],['../a00305.html#ga3c23cc74086d361e22bbd5e91a334e03',1,'glm::make_vec1(vec< 3, T, Q > const &v)'],['../a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419',1,'glm::make_vec1(vec< 4, T, Q > const &v)']]], - ['make_5fvec2',['make_vec2',['../a00305.html#ga8476d0e6f1b9b4a6193cc25f59d8a896',1,'glm::make_vec2(vec< 1, T, Q > const &v)'],['../a00305.html#gae54bd325a08ad26edf63929201adebc7',1,'glm::make_vec2(vec< 2, T, Q > const &v)'],['../a00305.html#ga0084fea4694cf47276e9cccbe7b1015a',1,'glm::make_vec2(vec< 3, T, Q > const &v)'],['../a00305.html#ga2b81f71f3a222fe5bba81e3983751249',1,'glm::make_vec2(vec< 4, T, Q > const &v)'],['../a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824',1,'glm::make_vec2(T const *const ptr)']]], - ['make_5fvec3',['make_vec3',['../a00305.html#ga9147e4b3a5d0f4772edfbfd179d7ea0b',1,'glm::make_vec3(vec< 1, T, Q > const &v)'],['../a00305.html#ga482b60a842a5b154d3eed392417a9511',1,'glm::make_vec3(vec< 2, T, Q > const &v)'],['../a00305.html#gacd57046034df557b8b1c457f58613623',1,'glm::make_vec3(vec< 3, T, Q > const &v)'],['../a00305.html#ga8b589ed7d41a298b516d2a69169248f1',1,'glm::make_vec3(vec< 4, T, Q > const &v)'],['../a00305.html#gad9e0d36ff489cb30c65ad1fa40351651',1,'glm::make_vec3(T const *const ptr)']]], - ['make_5fvec4',['make_vec4',['../a00305.html#ga600cb97f70c5d50d3a4a145e1cafbf37',1,'glm::make_vec4(vec< 1, T, Q > const &v)'],['../a00305.html#gaa9bd116caf28196fd1cf00b278286fa7',1,'glm::make_vec4(vec< 2, T, Q > const &v)'],['../a00305.html#ga4036328ba4702c74cbdfad1fc03d1b8f',1,'glm::make_vec4(vec< 3, T, Q > const &v)'],['../a00305.html#gaa95cb15732f708f613e65a0578895ae5',1,'glm::make_vec4(vec< 4, T, Q > const &v)'],['../a00305.html#ga63f576518993efc22a969f18f80e29bb',1,'glm::make_vec4(T const *const ptr)']]], - ['mask',['mask',['../a00288.html#gad7eba518a0b71662114571ee76939f8a',1,'glm::mask(genIUType Bits)'],['../a00288.html#ga2e64e3b922a296033b825311e7f5fff1',1,'glm::mask(vec< L, T, Q > const &v)']]], - ['mat2x4_5fcast',['mat2x4_cast',['../a00317.html#gae99d143b37f9cad4cd9285571aab685a',1,'glm']]], - ['mat3_5fcast',['mat3_cast',['../a00299.html#ga333ab70047fbe4132406100c292dbc89',1,'glm']]], - ['mat3x4_5fcast',['mat3x4_cast',['../a00317.html#gaf59f5bb69620d2891c3795c6f2639179',1,'glm']]], - ['mat4_5fcast',['mat4_cast',['../a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3',1,'glm']]], - ['matrixcompmult',['matrixCompMult',['../a00371.html#gaf14569404c779fedca98d0b9b8e58c1f',1,'glm']]], - ['matrixcross3',['matrixCross3',['../a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff',1,'glm']]], - ['matrixcross4',['matrixCross4',['../a00334.html#ga20057fff91ddafa102934adb25458cde',1,'glm']]], - ['max',['max',['../a00241.html#gae02d42887fc5570451f880e3c624b9ac',1,'glm::max(genType x, genType y)'],['../a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31',1,'glm::max(vec< L, T, Q > const &x, T y)'],['../a00241.html#gac1fec0c3303b572a6d4697a637213870',1,'glm::max(vec< L, T, Q > const &x, vec< L, T, Q > const &y)'],['../a00258.html#gaa20839d9ab14514f8966f69877ea0de8',1,'glm::max(T a, T b, T c)'],['../a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67',1,'glm::max(T a, T b, T c, T d)'],['../a00267.html#gaa45d34f6a2906f8bf58ab2ba5429234d',1,'glm::max(vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &z)'],['../a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10',1,'glm::max(vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &z, vec< L, T, Q > const &w)'],['../a00321.html#ga04991ccb9865c4c4e58488cfb209ce69',1,'glm::max(T const &x, T const &y, T const &z)'],['../a00321.html#gae1b7bbe5c91de4924835ea3e14530744',1,'glm::max(C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)'],['../a00321.html#gaf832e9d4ab4826b2dda2fda25935a3a4',1,'glm::max(C< T > const &x, C< T > const &y, C< T > const &z)'],['../a00321.html#ga78e04a0cef1c4863fcae1a2130500d87',1,'glm::max(T const &x, T const &y, T const &z, T const &w)'],['../a00321.html#ga7cca8b53cfda402040494cdf40fbdf4a',1,'glm::max(C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)'],['../a00321.html#gaacffbc466c2d08c140b181e7fd8a4858',1,'glm::max(C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)']]], - ['min',['min',['../a00241.html#ga6cf8098827054a270ee36b18e30d471d',1,'glm::min(genType x, genType y)'],['../a00241.html#gaa7d015eba1f9f48519251f4abe69b14d',1,'glm::min(vec< L, T, Q > const &x, T y)'],['../a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48',1,'glm::min(vec< L, T, Q > const &x, vec< L, T, Q > const &y)'],['../a00258.html#ga420b37cbd98c395b93dab0278305cd46',1,'glm::min(T a, T b, T c)'],['../a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d',1,'glm::min(T a, T b, T c, T d)'],['../a00267.html#ga3cd83d80fd4f433d8e333593ec56dddf',1,'glm::min(vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c)'],['../a00267.html#gab66920ed064ab518d6859c5a889c4be4',1,'glm::min(vec< L, T, Q > const &a, vec< L, T, Q > const &b, vec< L, T, Q > const &c, vec< L, T, Q > const &d)'],['../a00321.html#ga713d3f9b3e76312c0d314e0c8611a6a6',1,'glm::min(T const &x, T const &y, T const &z)'],['../a00321.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4',1,'glm::min(C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)'],['../a00321.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0',1,'glm::min(C< T > const &x, C< T > const &y, C< T > const &z)'],['../a00321.html#ga95466987024d03039607f09e69813d69',1,'glm::min(T const &x, T const &y, T const &z, T const &w)'],['../a00321.html#ga4fe35dd31dd0c45693c9b60b830b8d47',1,'glm::min(C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)'],['../a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead',1,'glm::min(C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)']]], - ['mirrorclamp',['mirrorClamp',['../a00369.html#gaa6856a0a048d2749252848da35e10c8b',1,'glm']]], - ['mirrorrepeat',['mirrorRepeat',['../a00369.html#ga16a89b0661b60d5bea85137bbae74d73',1,'glm']]], - ['mix',['mix',['../a00241.html#ga8e93f374aae27d1a88b921860351f8d4',1,'glm::mix(genTypeT x, genTypeT y, genTypeU a)'],['../a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2',1,'glm::mix(qua< T, Q > const &x, qua< T, Q > const &y, T a)']]], - ['mixedproduct',['mixedProduct',['../a00342.html#gab3c6048fbb67f7243b088a4fee48d020',1,'glm']]], - ['mod',['mod',['../a00241.html#ga9b197a452cd52db3c5c18bac72bd7798',1,'glm::mod(vec< L, T, Q > const &x, vec< L, T, Q > const &y)'],['../a00330.html#gaabfbb41531ab7ad8d06fc176edfba785',1,'glm::mod(int x, int y)'],['../a00330.html#ga63fc8d63e7da1706439233b386ba8b6f',1,'glm::mod(uint x, uint y)']]], - ['modf',['modf',['../a00241.html#ga85e33f139b8db1b39b590a5713b9e679',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_b.html b/tests/OpenGL/package/glm/doc/api/search/functions_b.html deleted file mode 100644 index 3b49416d..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_b.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_b.js b/tests/OpenGL/package/glm/doc/api/search/functions_b.js deleted file mode 100644 index 827bbd43..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_b.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['nextmultiple',['nextMultiple',['../a00261.html#gab770a3835c44c8a6fd225be4f4e6b317',1,'glm::nextMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#gace38d00601cbf49cd4dc03f003ab42b7',1,'glm::nextMultiple(vec< L, T, Q > const &v, T Multiple)'],['../a00274.html#gacda365edad320c7aff19cc283a3b8ca2',1,'glm::nextMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)']]], - ['nextpoweroftwo',['nextPowerOfTwo',['../a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc',1,'glm::nextPowerOfTwo(genIUType v)'],['../a00274.html#gabba67f8aac9915e10fca727277274502',1,'glm::nextPowerOfTwo(vec< L, T, Q > const &v)']]], - ['nlz',['nlz',['../a00330.html#ga78dff8bdb361bf0061194c93e003d189',1,'glm']]], - ['normalize',['normalize',['../a00254.html#gabf30e3263fffe8dcc6659aea76ae8927',1,'glm::normalize(qua< T, Q > const &q)'],['../a00279.html#ga3b8d3dcae77870781392ed2902cce597',1,'glm::normalize(vec< L, T, Q > const &x)'],['../a00317.html#ga299b8641509606b1958ffa104a162cfe',1,'glm::normalize(tdualquat< T, Q > const &q)']]], - ['normalizedot',['normalizeDot',['../a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa',1,'glm']]], - ['not_5f',['not_',['../a00374.html#ga610fcd175791fd246e328ffee10dbf1e',1,'glm']]], - ['notequal',['notEqual',['../a00246.html#ga8504f18a7e2bf315393032c2137dad83',1,'glm::notEqual(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y)'],['../a00246.html#ga29071147d118569344d10944b7d5c378',1,'glm::notEqual(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, T epsilon)'],['../a00246.html#gad7959e14fbc35b4ed2617daf4d67f6cd',1,'glm::notEqual(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, T, Q > const &epsilon)'],['../a00246.html#gaa1cd7fc228ef6e26c73583fd0d9c6552',1,'glm::notEqual(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, int ULPs)'],['../a00246.html#gaa5517341754149ffba742d230afd1f32',1,'glm::notEqual(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y, vec< C, int, Q > const &ULPs)'],['../a00255.html#gab441cee0de5867a868f3a586ee68cfe1',1,'glm::notEqual(qua< T, Q > const &x, qua< T, Q > const &y)'],['../a00255.html#ga5117a44c1bf21af857cd23e44a96d313',1,'glm::notEqual(qua< T, Q > const &x, qua< T, Q > const &y, T epsilon)'],['../a00275.html#ga4a99cc41341567567a608719449c1fac',1,'glm::notEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y, T epsilon)'],['../a00275.html#ga417cf51304359db18e819dda9bce5767',1,'glm::notEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, T, Q > const &epsilon)'],['../a00275.html#ga8b5c2c3f83422ae5b71fa960d03b0339',1,'glm::notEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y, int ULPs)'],['../a00275.html#ga0b15ffe32987a6029b14398eb0def01a',1,'glm::notEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y, vec< L, int, Q > const &ULPs)'],['../a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27',1,'glm::notEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y)']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_c.html b/tests/OpenGL/package/glm/doc/api/search/functions_c.html deleted file mode 100644 index 57c64555..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_c.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_c.js b/tests/OpenGL/package/glm/doc/api/search/functions_c.js deleted file mode 100644 index 0b832b7b..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_c.js +++ /dev/null @@ -1,24 +0,0 @@ -var searchData= -[ - ['one',['one',['../a00290.html#ga39c2fb227631ca25894326529bdd1ee5',1,'glm']]], - ['one_5fover_5fpi',['one_over_pi',['../a00290.html#ga555150da2b06d23c8738981d5013e0eb',1,'glm']]], - ['one_5fover_5froot_5ftwo',['one_over_root_two',['../a00290.html#ga788fa23a0939bac4d1d0205fb4f35818',1,'glm']]], - ['one_5fover_5ftwo_5fpi',['one_over_two_pi',['../a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc',1,'glm']]], - ['openbounded',['openBounded',['../a00314.html#gafd303042ba2ba695bf53b2315f53f93f',1,'glm']]], - ['orientate2',['orientate2',['../a00319.html#gae16738a9f1887cf4e4db6a124637608d',1,'glm']]], - ['orientate3',['orientate3',['../a00319.html#ga7ca98668a5786f19c7b38299ebbc9b4c',1,'glm::orientate3(T const &angle)'],['../a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb',1,'glm::orientate3(vec< 3, T, Q > const &angles)']]], - ['orientate4',['orientate4',['../a00319.html#ga4a044653f71a4ecec68e0b623382b48a',1,'glm']]], - ['orientation',['orientation',['../a00356.html#ga1a32fceb71962e6160e8af295c91930a',1,'glm']]], - ['orientedangle',['orientedAngle',['../a00367.html#ga9556a803dce87fe0f42fdabe4ebba1d5',1,'glm::orientedAngle(vec< 2, T, Q > const &x, vec< 2, T, Q > const &y)'],['../a00367.html#ga706fce3d111f485839756a64f5a48553',1,'glm::orientedAngle(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y, vec< 3, T, Q > const &ref)']]], - ['ortho',['ortho',['../a00243.html#gae5b6b40ed882cd56cd7cb97701909c06',1,'glm::ortho(T left, T right, T bottom, T top)'],['../a00243.html#ga6615d8a9d39432e279c4575313ecb456',1,'glm::ortho(T left, T right, T bottom, T top, T zNear, T zFar)']]], - ['ortholh',['orthoLH',['../a00243.html#gad122a79aadaa5529cec4ac197203db7f',1,'glm']]], - ['ortholh_5fno',['orthoLH_NO',['../a00243.html#ga526416735ea7c5c5cd255bf99d051bd8',1,'glm']]], - ['ortholh_5fzo',['orthoLH_ZO',['../a00243.html#gab37ac3eec8d61f22fceda7775e836afa',1,'glm']]], - ['orthono',['orthoNO',['../a00243.html#gab219d28a8f178d4517448fcd6395a073',1,'glm']]], - ['orthonormalize',['orthonormalize',['../a00348.html#ga4cab5d698e6e2eccea30c8e81c74371f',1,'glm::orthonormalize(mat< 3, 3, T, Q > const &m)'],['../a00348.html#gac3bc7ef498815026bc3d361ae0b7138e',1,'glm::orthonormalize(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)']]], - ['orthorh',['orthoRH',['../a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4',1,'glm']]], - ['orthorh_5fno',['orthoRH_NO',['../a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780',1,'glm']]], - ['orthorh_5fzo',['orthoRH_ZO',['../a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588',1,'glm']]], - ['orthozo',['orthoZO',['../a00243.html#gaea11a70817af2c0801c869dea0b7a5bc',1,'glm']]], - ['outerproduct',['outerProduct',['../a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_d.html b/tests/OpenGL/package/glm/doc/api/search/functions_d.html deleted file mode 100644 index 58b3d31f..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_d.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_d.js b/tests/OpenGL/package/glm/doc/api/search/functions_d.js deleted file mode 100644 index 06f07e20..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_d.js +++ /dev/null @@ -1,83 +0,0 @@ -var searchData= -[ - ['packdouble2x32',['packDouble2x32',['../a00372.html#gaa916ca426b2bb0343ba17e3753e245c2',1,'glm']]], - ['packf2x11_5f1x10',['packF2x11_1x10',['../a00298.html#ga4944ad465ff950e926d49621f916c78d',1,'glm']]], - ['packf3x9_5fe1x5',['packF3x9_E1x5',['../a00298.html#ga3f648fc205467792dc6d8c59c748f8a6',1,'glm']]], - ['packhalf',['packHalf',['../a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251',1,'glm']]], - ['packhalf1x16',['packHalf1x16',['../a00298.html#ga43f2093b6ff192a79058ff7834fc3528',1,'glm']]], - ['packhalf2x16',['packHalf2x16',['../a00372.html#ga20f134b07db3a3d3a38efb2617388c92',1,'glm']]], - ['packhalf4x16',['packHalf4x16',['../a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6',1,'glm']]], - ['packi3x10_5f1x2',['packI3x10_1x2',['../a00298.html#ga06ecb6afb902dba45419008171db9023',1,'glm']]], - ['packint2x16',['packInt2x16',['../a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e',1,'glm']]], - ['packint2x32',['packInt2x32',['../a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a',1,'glm']]], - ['packint2x8',['packInt2x8',['../a00298.html#ga8884b1f2292414f36d59ef3be5d62914',1,'glm']]], - ['packint4x16',['packInt4x16',['../a00298.html#ga1989f093a27ae69cf9207145be48b3d7',1,'glm']]], - ['packint4x8',['packInt4x8',['../a00298.html#gaf2238401d5ce2aaade1a44ba19709072',1,'glm']]], - ['packrgbm',['packRGBM',['../a00298.html#ga0466daf4c90f76cc64b3f105ce727295',1,'glm']]], - ['packsnorm',['packSnorm',['../a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8',1,'glm']]], - ['packsnorm1x16',['packSnorm1x16',['../a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af',1,'glm']]], - ['packsnorm1x8',['packSnorm1x8',['../a00298.html#gae3592e0795e62aaa1865b3a10496a7a1',1,'glm']]], - ['packsnorm2x16',['packSnorm2x16',['../a00372.html#ga977ab172da5494e5ac63e952afacfbe2',1,'glm']]], - ['packsnorm2x8',['packSnorm2x8',['../a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e',1,'glm']]], - ['packsnorm3x10_5f1x2',['packSnorm3x10_1x2',['../a00298.html#gab997545661877d2c7362a5084d3897d3',1,'glm']]], - ['packsnorm4x16',['packSnorm4x16',['../a00298.html#ga358943934d21da947d5bcc88c2ab7832',1,'glm']]], - ['packsnorm4x8',['packSnorm4x8',['../a00372.html#ga85e8f17627516445026ab7a9c2e3531a',1,'glm']]], - ['packu3x10_5f1x2',['packU3x10_1x2',['../a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0',1,'glm']]], - ['packuint2x16',['packUint2x16',['../a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19',1,'glm']]], - ['packuint2x32',['packUint2x32',['../a00298.html#gaa864081097b86e83d8e4a4d79c382b22',1,'glm']]], - ['packuint2x8',['packUint2x8',['../a00298.html#ga3c3c9fb53ae7823b10fa083909357590',1,'glm']]], - ['packuint4x16',['packUint4x16',['../a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9',1,'glm']]], - ['packuint4x8',['packUint4x8',['../a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab',1,'glm']]], - ['packunorm',['packUnorm',['../a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a',1,'glm']]], - ['packunorm1x16',['packUnorm1x16',['../a00298.html#ga9f82737bf2a44bedff1d286b76837886',1,'glm']]], - ['packunorm1x5_5f1x6_5f1x5',['packUnorm1x5_1x6_1x5',['../a00298.html#ga768e0337dd6246773f14aa0a421fe9a8',1,'glm']]], - ['packunorm1x8',['packUnorm1x8',['../a00298.html#ga4b2fa60df3460403817d28b082ee0736',1,'glm']]], - ['packunorm2x16',['packUnorm2x16',['../a00372.html#ga0e2d107039fe608a209497af867b85fb',1,'glm']]], - ['packunorm2x3_5f1x2',['packUnorm2x3_1x2',['../a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d',1,'glm']]], - ['packunorm2x4',['packUnorm2x4',['../a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c',1,'glm']]], - ['packunorm2x8',['packUnorm2x8',['../a00298.html#ga9a666b1c688ab54100061ed06526de6e',1,'glm']]], - ['packunorm3x10_5f1x2',['packUnorm3x10_1x2',['../a00298.html#ga8a1ee625d2707c60530fb3fca2980b19',1,'glm']]], - ['packunorm3x5_5f1x1',['packUnorm3x5_1x1',['../a00298.html#gaec4112086d7fb133bea104a7c237de52',1,'glm']]], - ['packunorm4x16',['packUnorm4x16',['../a00298.html#ga1f63c264e7ab63264e2b2a99fd393897',1,'glm']]], - ['packunorm4x4',['packUnorm4x4',['../a00298.html#gad3e7e3ce521513584a53aedc5f9765c1',1,'glm']]], - ['packunorm4x8',['packUnorm4x8',['../a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2',1,'glm']]], - ['perlin',['perlin',['../a00297.html#ga1e043ce3b51510e9bc4469227cefc38a',1,'glm::perlin(vec< L, T, Q > const &p)'],['../a00297.html#gac270edc54c5fc52f5985a45f940bb103',1,'glm::perlin(vec< L, T, Q > const &p, vec< L, T, Q > const &rep)']]], - ['perp',['perp',['../a00349.html#ga264cfc4e180cf9b852e943b35089003c',1,'glm']]], - ['perspective',['perspective',['../a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787',1,'glm']]], - ['perspectivefov',['perspectiveFov',['../a00243.html#gaebd02240fd36e85ad754f02ddd9a560d',1,'glm']]], - ['perspectivefovlh',['perspectiveFovLH',['../a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa',1,'glm']]], - ['perspectivefovlh_5fno',['perspectiveFovLH_NO',['../a00243.html#gad18a4495b77530317327e8d466488c1a',1,'glm']]], - ['perspectivefovlh_5fzo',['perspectiveFovLH_ZO',['../a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c',1,'glm']]], - ['perspectivefovno',['perspectiveFovNO',['../a00243.html#gaf30e7bd3b1387a6776433dd5383e6633',1,'glm']]], - ['perspectivefovrh',['perspectiveFovRH',['../a00243.html#gaf32bf563f28379c68554a44ee60c6a85',1,'glm']]], - ['perspectivefovrh_5fno',['perspectiveFovRH_NO',['../a00243.html#ga257b733ff883c9a065801023cf243eb2',1,'glm']]], - ['perspectivefovrh_5fzo',['perspectiveFovRH_ZO',['../a00243.html#ga7dcbb25331676f5b0795aced1a905c44',1,'glm']]], - ['perspectivefovzo',['perspectiveFovZO',['../a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b',1,'glm']]], - ['perspectivelh',['perspectiveLH',['../a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f',1,'glm']]], - ['perspectivelh_5fno',['perspectiveLH_NO',['../a00243.html#gaead4d049d1feab463b700b5641aa590e',1,'glm']]], - ['perspectivelh_5fzo',['perspectiveLH_ZO',['../a00243.html#gaca32af88c2719005c02817ad1142986c',1,'glm']]], - ['perspectiveno',['perspectiveNO',['../a00243.html#gaf497e6bca61e7c87088370b126a93758',1,'glm']]], - ['perspectiverh',['perspectiveRH',['../a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1',1,'glm']]], - ['perspectiverh_5fno',['perspectiveRH_NO',['../a00243.html#gad1526cb2cbe796095284e8f34b01c582',1,'glm']]], - ['perspectiverh_5fzo',['perspectiveRH_ZO',['../a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a',1,'glm']]], - ['perspectivezo',['perspectiveZO',['../a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47',1,'glm']]], - ['pi',['pi',['../a00259.html#ga94bafeb2a0f23ab6450fed1f98ee4e45',1,'glm']]], - ['pickmatrix',['pickMatrix',['../a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82',1,'glm']]], - ['pitch',['pitch',['../a00299.html#ga7603e81477b46ddb448896909bc04928',1,'glm']]], - ['polar',['polar',['../a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d',1,'glm']]], - ['pow',['pow',['../a00242.html#ga2254981952d4f333b900a6bf5167a6c4',1,'glm::pow(vec< L, T, Q > const &base, vec< L, T, Q > const &exponent)'],['../a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e',1,'glm::pow(qua< T, Q > const &q, T y)'],['../a00330.html#ga465016030a81d513fa2fac881ebdaa83',1,'glm::pow(int x, uint y)'],['../a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0',1,'glm::pow(uint x, uint y)']]], - ['pow2',['pow2',['../a00347.html#ga19aaff3213bf23bdec3ef124ace237e9',1,'glm::gtx']]], - ['pow3',['pow3',['../a00347.html#ga35689d03cd434d6ea819f1942d3bf82e',1,'glm::gtx']]], - ['pow4',['pow4',['../a00347.html#gacef0968763026e180e53e735007dbf5a',1,'glm::gtx']]], - ['poweroftwoabove',['powerOfTwoAbove',['../a00309.html#ga8cda2459871f574a0aecbe702ac93291',1,'glm::powerOfTwoAbove(genIUType Value)'],['../a00309.html#ga2bbded187c5febfefc1e524ba31b3fab',1,'glm::powerOfTwoAbove(vec< L, T, Q > const &value)']]], - ['poweroftwobelow',['powerOfTwoBelow',['../a00309.html#ga3de7df63c589325101a2817a56f8e29d',1,'glm::powerOfTwoBelow(genIUType Value)'],['../a00309.html#gaf78ddcc4152c051b2a21e68fecb10980',1,'glm::powerOfTwoBelow(vec< L, T, Q > const &value)']]], - ['poweroftwonearest',['powerOfTwoNearest',['../a00309.html#ga5f65973a5d2ea38c719e6a663149ead9',1,'glm::powerOfTwoNearest(genIUType Value)'],['../a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b',1,'glm::powerOfTwoNearest(vec< L, T, Q > const &value)']]], - ['prevmultiple',['prevMultiple',['../a00261.html#gada3bdd871ffe31f2d484aa668362f636',1,'glm::prevMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#ga7b3915a7cd3d50ff4976ab7a75a6880a',1,'glm::prevMultiple(vec< L, T, Q > const &v, T Multiple)'],['../a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9',1,'glm::prevMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)']]], - ['prevpoweroftwo',['prevPowerOfTwo',['../a00261.html#gab21902a0e7e5a8451a7ad80333618727',1,'glm::prevPowerOfTwo(genIUType v)'],['../a00274.html#ga759db73f14d79f63612bd2398b577e7a',1,'glm::prevPowerOfTwo(vec< L, T, Q > const &v)']]], - ['proj',['proj',['../a00351.html#ga58384b7170801dd513de46f87c7fb00e',1,'glm']]], - ['proj2d',['proj2D',['../a00363.html#ga5b992a0cdc8298054edb68e228f0d93e',1,'glm']]], - ['proj3d',['proj3D',['../a00363.html#gaa2b7f4f15b98f697caede11bef50509e',1,'glm']]], - ['project',['project',['../a00245.html#gaf36e96033f456659e6705472a06b6e11',1,'glm']]], - ['projectno',['projectNO',['../a00245.html#ga05249751f48d14cb282e4979802b8111',1,'glm']]], - ['projectzo',['projectZO',['../a00245.html#ga77d157525063dec83a557186873ee080',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_e.html b/tests/OpenGL/package/glm/doc/api/search/functions_e.html deleted file mode 100644 index b44e5c5f..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_e.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_e.js b/tests/OpenGL/package/glm/doc/api/search/functions_e.js deleted file mode 100644 index abcb9987..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_e.js +++ /dev/null @@ -1,19 +0,0 @@ -var searchData= -[ - ['qr_5fdecompose',['qr_decompose',['../a00336.html#gac62d7bfc8dc661e616620d70552cd566',1,'glm']]], - ['quadraticeasein',['quadraticEaseIn',['../a00318.html#gaf42089d35855695132d217cd902304a0',1,'glm']]], - ['quadraticeaseinout',['quadraticEaseInOut',['../a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea',1,'glm']]], - ['quadraticeaseout',['quadraticEaseOut',['../a00318.html#ga283717bc2d937547ad34ec0472234ee3',1,'glm']]], - ['quarter_5fpi',['quarter_pi',['../a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0',1,'glm']]], - ['quarticeasein',['quarticEaseIn',['../a00318.html#ga808b41f14514f47dad5dcc69eb924afd',1,'glm']]], - ['quarticeaseinout',['quarticEaseInOut',['../a00318.html#ga6d000f852de12b197e154f234b20c505',1,'glm']]], - ['quarticeaseout',['quarticEaseOut',['../a00318.html#ga4dfb33fa7664aa888eb647999d329b98',1,'glm']]], - ['quat_5fcast',['quat_cast',['../a00299.html#ga1108a4ab88ca87bac321454eea7702f8',1,'glm::quat_cast(mat< 3, 3, T, Q > const &x)'],['../a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58',1,'glm::quat_cast(mat< 4, 4, T, Q > const &x)']]], - ['quat_5fidentity',['quat_identity',['../a00352.html#ga5ee8332600b2aca3a77622a28d857b55',1,'glm']]], - ['quatlookat',['quatLookAt',['../a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f',1,'glm']]], - ['quatlookatlh',['quatLookAtLH',['../a00299.html#ga2da350c73411be3bb19441b226b81a74',1,'glm']]], - ['quatlookatrh',['quatLookAtRH',['../a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8',1,'glm']]], - ['quinticeasein',['quinticEaseIn',['../a00318.html#ga097579d8e087dcf48037588140a21640',1,'glm']]], - ['quinticeaseinout',['quinticEaseInOut',['../a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934',1,'glm']]], - ['quinticeaseout',['quinticEaseOut',['../a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_f.html b/tests/OpenGL/package/glm/doc/api/search/functions_f.html deleted file mode 100644 index db9a07c0..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_f.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/functions_f.js b/tests/OpenGL/package/glm/doc/api/search/functions_f.js deleted file mode 100644 index a48bd4f5..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/functions_f.js +++ /dev/null @@ -1,35 +0,0 @@ -var searchData= -[ - ['radialgradient',['radialGradient',['../a00327.html#gaaecb1e93de4cbe0758b882812d4da294',1,'glm']]], - ['radians',['radians',['../a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68',1,'glm']]], - ['reflect',['reflect',['../a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905',1,'glm']]], - ['refract',['refract',['../a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74',1,'glm']]], - ['repeat',['repeat',['../a00369.html#ga809650c6310ea7c42666e918c117fb6f',1,'glm']]], - ['rgb2ycocg',['rgb2YCoCg',['../a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5',1,'glm']]], - ['rgb2ycocgr',['rgb2YCoCgR',['../a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898',1,'glm']]], - ['rgbcolor',['rgbColor',['../a00312.html#ga5f9193be46f45f0655c05a0cdca006db',1,'glm']]], - ['righthanded',['rightHanded',['../a00328.html#ga99386a5ab5491871b947076e21699cc8',1,'glm']]], - ['roll',['roll',['../a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13',1,'glm']]], - ['root_5ffive',['root_five',['../a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2',1,'glm']]], - ['root_5fhalf_5fpi',['root_half_pi',['../a00290.html#ga4e276cb823cc5e612d4f89ed99c75039',1,'glm']]], - ['root_5fln_5ffour',['root_ln_four',['../a00290.html#ga4129412e96b33707a77c1a07652e23e2',1,'glm']]], - ['root_5fpi',['root_pi',['../a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9',1,'glm']]], - ['root_5fthree',['root_three',['../a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e',1,'glm']]], - ['root_5ftwo',['root_two',['../a00290.html#ga74e607d29020f100c0d0dc46ce2ca950',1,'glm']]], - ['root_5ftwo_5fpi',['root_two_pi',['../a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3',1,'glm']]], - ['rotate',['rotate',['../a00247.html#gaee9e865eaa9776370996da2940873fd4',1,'glm::rotate(mat< 4, 4, T, Q > const &m, T angle, vec< 3, T, Q > const &axis)'],['../a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5',1,'glm::rotate(qua< T, Q > const &q, T const &angle, vec< 3, T, Q > const &axis)'],['../a00341.html#gad5c84a4932a758f385a87098ce1b1660',1,'glm::rotate(mat< 3, 3, T, Q > const &m, T angle)'],['../a00352.html#ga07da6ef58646442efe93b0c273d73776',1,'glm::rotate(qua< T, Q > const &q, vec< 3, T, Q > const &v)'],['../a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196',1,'glm::rotate(qua< T, Q > const &q, vec< 4, T, Q > const &v)'],['../a00356.html#gab64a67b52ff4f86c3ba16595a5a25af6',1,'glm::rotate(vec< 2, T, Q > const &v, T const &angle)'],['../a00356.html#ga1ba501ef83d1a009a17ac774cc560f21',1,'glm::rotate(vec< 3, T, Q > const &v, T const &angle, vec< 3, T, Q > const &normal)'],['../a00356.html#ga1005f1267ed9c57faa3f24cf6873b961',1,'glm::rotate(vec< 4, T, Q > const &v, T const &angle, vec< 3, T, Q > const &normal)'],['../a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b',1,'glm::rotate(T angle, vec< 3, T, Q > const &v)']]], - ['rotatenormalizedaxis',['rotateNormalizedAxis',['../a00355.html#ga50efd7ebca0f7a603bb3cc11e34c708d',1,'glm::rotateNormalizedAxis(mat< 4, 4, T, Q > const &m, T const &angle, vec< 3, T, Q > const &axis)'],['../a00355.html#ga08f9c5411437d528019a25bfc01473d1',1,'glm::rotateNormalizedAxis(qua< T, Q > const &q, T const &angle, vec< 3, T, Q > const &axis)']]], - ['rotatex',['rotateX',['../a00356.html#ga059fdbdba4cca35cdff172a9d0d0afc9',1,'glm::rotateX(vec< 3, T, Q > const &v, T const &angle)'],['../a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a',1,'glm::rotateX(vec< 4, T, Q > const &v, T const &angle)']]], - ['rotatey',['rotateY',['../a00356.html#gaebdc8b054ace27d9f62e054531c6f44d',1,'glm::rotateY(vec< 3, T, Q > const &v, T const &angle)'],['../a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b',1,'glm::rotateY(vec< 4, T, Q > const &v, T const &angle)']]], - ['rotatez',['rotateZ',['../a00356.html#ga5a048838a03f6249acbacb4dbacf79c4',1,'glm::rotateZ(vec< 3, T, Q > const &v, T const &angle)'],['../a00356.html#ga923b75c6448161053768822d880702e6',1,'glm::rotateZ(vec< 4, T, Q > const &v, T const &angle)']]], - ['rotation',['rotation',['../a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5',1,'glm']]], - ['round',['round',['../a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e',1,'glm']]], - ['roundeven',['roundEven',['../a00241.html#ga76b81785045a057989a84d99aeeb1578',1,'glm']]], - ['roundmultiple',['roundMultiple',['../a00302.html#gab892defcc9c0b0618df7251253dc0fbb',1,'glm::roundMultiple(genType v, genType Multiple)'],['../a00302.html#ga2f1a68332d761804c054460a612e3a4b',1,'glm::roundMultiple(vec< L, T, Q > const &v, vec< L, T, Q > const &Multiple)']]], - ['roundpoweroftwo',['roundPowerOfTwo',['../a00302.html#gae4e1bf5d1cd179f59261a7342bdcafca',1,'glm::roundPowerOfTwo(genIUType v)'],['../a00302.html#ga258802a7d55c03c918f28cf4d241c4d0',1,'glm::roundPowerOfTwo(vec< L, T, Q > const &v)']]], - ['row',['row',['../a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba',1,'glm::row(genType const &m, length_t index)'],['../a00293.html#gaadcc64829aadf4103477679e48c7594f',1,'glm::row(genType const &m, length_t index, typename genType::row_type const &x)']]], - ['rowmajor2',['rowMajor2',['../a00338.html#gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8',1,'glm::rowMajor2(vec< 2, T, Q > const &v1, vec< 2, T, Q > const &v2)'],['../a00338.html#gaf66c75ed69ca9e87462550708c2c6726',1,'glm::rowMajor2(mat< 2, 2, T, Q > const &m)']]], - ['rowmajor3',['rowMajor3',['../a00338.html#ga2ae46497493339f745754e40f438442e',1,'glm::rowMajor3(vec< 3, T, Q > const &v1, vec< 3, T, Q > const &v2, vec< 3, T, Q > const &v3)'],['../a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77',1,'glm::rowMajor3(mat< 3, 3, T, Q > const &m)']]], - ['rowmajor4',['rowMajor4',['../a00338.html#ga9636cd6bbe2c32a8d0c03ffb8b1ef284',1,'glm::rowMajor4(vec< 4, T, Q > const &v1, vec< 4, T, Q > const &v2, vec< 4, T, Q > const &v3, vec< 4, T, Q > const &v4)'],['../a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b',1,'glm::rowMajor4(mat< 4, 4, T, Q > const &m)']]], - ['rq_5fdecompose',['rq_decompose',['../a00336.html#ga82874e2ebe891ba35ac21d9993873758',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_0.html b/tests/OpenGL/package/glm/doc/api/search/groups_0.html deleted file mode 100644 index aaba07e5..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_0.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_0.js b/tests/OpenGL/package/glm/doc/api/search/groups_0.js deleted file mode 100644 index 73fd73e4..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['angle_20and_20trigonometry_20functions',['Angle and Trigonometry Functions',['../a00373.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_1.html b/tests/OpenGL/package/glm/doc/api/search/groups_1.html deleted file mode 100644 index d287bfa3..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_1.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_1.js b/tests/OpenGL/package/glm/doc/api/search/groups_1.js deleted file mode 100644 index 8ff844ab..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_1.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['core_20features',['Core features',['../a00280.html',1,'']]], - ['common_20functions',['Common functions',['../a00241.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_2.html b/tests/OpenGL/package/glm/doc/api/search/groups_2.html deleted file mode 100644 index 29681b20..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_2.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_2.js b/tests/OpenGL/package/glm/doc/api/search/groups_2.js deleted file mode 100644 index f2535119..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_2.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['exponential_20functions',['Exponential functions',['../a00242.html',1,'']]], - ['experimental_20extensions',['Experimental extensions',['../a00287.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_3.html b/tests/OpenGL/package/glm/doc/api/search/groups_3.html deleted file mode 100644 index b51e57ff..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_3.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_3.js b/tests/OpenGL/package/glm/doc/api/search/groups_3.js deleted file mode 100644 index 4ae9ff3e..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['floating_2dpoint_20pack_20and_20unpack_20functions',['Floating-Point Pack and Unpack Functions',['../a00372.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_4.html b/tests/OpenGL/package/glm/doc/api/search/groups_4.html deleted file mode 100644 index 987621be..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_4.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_4.js b/tests/OpenGL/package/glm/doc/api/search/groups_4.js deleted file mode 100644 index 8bb9f41f..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_4.js +++ /dev/null @@ -1,122 +0,0 @@ -var searchData= -[ - ['geometric_20functions',['Geometric functions',['../a00279.html',1,'']]], - ['glm_5fext_5fmatrix_5fclip_5fspace',['GLM_EXT_matrix_clip_space',['../a00243.html',1,'']]], - ['glm_5fext_5fmatrix_5fcommon',['GLM_EXT_matrix_common',['../a00244.html',1,'']]], - ['glm_5fext_5fmatrix_5fprojection',['GLM_EXT_matrix_projection',['../a00245.html',1,'']]], - ['glm_5fext_5fmatrix_5frelational',['GLM_EXT_matrix_relational',['../a00246.html',1,'']]], - ['glm_5fext_5fmatrix_5ftransform',['GLM_EXT_matrix_transform',['../a00247.html',1,'']]], - ['glm_5fext_5fquaternion_5fcommon',['GLM_EXT_quaternion_common',['../a00248.html',1,'']]], - ['glm_5fext_5fquaternion_5fdouble',['GLM_EXT_quaternion_double',['../a00249.html',1,'']]], - ['glm_5fext_5fquaternion_5fdouble_5fprecision',['GLM_EXT_quaternion_double_precision',['../a00250.html',1,'']]], - ['glm_5fext_5fquaternion_5fexponential',['GLM_EXT_quaternion_exponential',['../a00251.html',1,'']]], - ['glm_5fext_5fquaternion_5ffloat',['GLM_EXT_quaternion_float',['../a00252.html',1,'']]], - ['glm_5fext_5fquaternion_5ffloat_5fprecision',['GLM_EXT_quaternion_float_precision',['../a00253.html',1,'']]], - ['glm_5fext_5fquaternion_5fgeometric',['GLM_EXT_quaternion_geometric',['../a00254.html',1,'']]], - ['glm_5fext_5fquaternion_5frelational',['GLM_EXT_quaternion_relational',['../a00255.html',1,'']]], - ['glm_5fext_5fquaternion_5ftransform',['GLM_EXT_quaternion_transform',['../a00256.html',1,'']]], - ['glm_5fext_5fquaternion_5ftrigonometric',['GLM_EXT_quaternion_trigonometric',['../a00257.html',1,'']]], - ['glm_5fext_5fscalar_5fcommon',['GLM_EXT_scalar_common',['../a00258.html',1,'']]], - ['glm_5fext_5fscalar_5fconstants',['GLM_EXT_scalar_constants',['../a00259.html',1,'']]], - ['glm_5fext_5fscalar_5fint_5fsized',['GLM_EXT_scalar_int_sized',['../a00260.html',1,'']]], - ['glm_5fext_5fscalar_5finteger',['GLM_EXT_scalar_integer',['../a00261.html',1,'']]], - ['glm_5fext_5fscalar_5frelational',['GLM_EXT_scalar_relational',['../a00262.html',1,'']]], - ['glm_5fext_5fscalar_5fuint_5fsized',['GLM_EXT_scalar_uint_sized',['../a00263.html',1,'']]], - ['glm_5fext_5fscalar_5fulp',['GLM_EXT_scalar_ulp',['../a00264.html',1,'']]], - ['glm_5fext_5fvector_5fbool1',['GLM_EXT_vector_bool1',['../a00265.html',1,'']]], - ['glm_5fext_5fvector_5fbool1_5fprecision',['GLM_EXT_vector_bool1_precision',['../a00266.html',1,'']]], - ['glm_5fext_5fvector_5fcommon',['GLM_EXT_vector_common',['../a00267.html',1,'']]], - ['glm_5fext_5fvector_5fdouble1',['GLM_EXT_vector_double1',['../a00268.html',1,'']]], - ['glm_5fext_5fvector_5fdouble1_5fprecision',['GLM_EXT_vector_double1_precision',['../a00269.html',1,'']]], - ['glm_5fext_5fvector_5ffloat1',['GLM_EXT_vector_float1',['../a00270.html',1,'']]], - ['glm_5fext_5fvector_5ffloat1_5fprecision',['GLM_EXT_vector_float1_precision',['../a00271.html',1,'']]], - ['glm_5fext_5fvector_5fint1',['GLM_EXT_vector_int1',['../a00272.html',1,'']]], - ['glm_5fext_5fvector_5fint1_5fprecision',['GLM_EXT_vector_int1_precision',['../a00273.html',1,'']]], - ['glm_5fext_5fvector_5finteger',['GLM_EXT_vector_integer',['../a00274.html',1,'']]], - ['glm_5fext_5fvector_5frelational',['GLM_EXT_vector_relational',['../a00275.html',1,'']]], - ['glm_5fext_5fvector_5fuint1',['GLM_EXT_vector_uint1',['../a00276.html',1,'']]], - ['glm_5fext_5fvector_5fuint1_5fprecision',['GLM_EXT_vector_uint1_precision',['../a00277.html',1,'']]], - ['glm_5fext_5fvector_5fulp',['GLM_EXT_vector_ulp',['../a00278.html',1,'']]], - ['glm_5fgtc_5fbitfield',['GLM_GTC_bitfield',['../a00288.html',1,'']]], - ['glm_5fgtc_5fcolor_5fspace',['GLM_GTC_color_space',['../a00289.html',1,'']]], - ['glm_5fgtc_5fconstants',['GLM_GTC_constants',['../a00290.html',1,'']]], - ['glm_5fgtc_5fepsilon',['GLM_GTC_epsilon',['../a00291.html',1,'']]], - ['glm_5fgtc_5finteger',['GLM_GTC_integer',['../a00292.html',1,'']]], - ['glm_5fgtc_5fmatrix_5faccess',['GLM_GTC_matrix_access',['../a00293.html',1,'']]], - ['glm_5fgtc_5fmatrix_5finteger',['GLM_GTC_matrix_integer',['../a00294.html',1,'']]], - ['glm_5fgtc_5fmatrix_5finverse',['GLM_GTC_matrix_inverse',['../a00295.html',1,'']]], - ['glm_5fgtc_5fmatrix_5ftransform',['GLM_GTC_matrix_transform',['../a00296.html',1,'']]], - ['glm_5fgtc_5fnoise',['GLM_GTC_noise',['../a00297.html',1,'']]], - ['glm_5fgtc_5fpacking',['GLM_GTC_packing',['../a00298.html',1,'']]], - ['glm_5fgtc_5fquaternion',['GLM_GTC_quaternion',['../a00299.html',1,'']]], - ['glm_5fgtc_5frandom',['GLM_GTC_random',['../a00300.html',1,'']]], - ['glm_5fgtc_5freciprocal',['GLM_GTC_reciprocal',['../a00301.html',1,'']]], - ['glm_5fgtc_5fround',['GLM_GTC_round',['../a00302.html',1,'']]], - ['glm_5fgtc_5ftype_5faligned',['GLM_GTC_type_aligned',['../a00303.html',1,'']]], - ['glm_5fgtc_5ftype_5fprecision',['GLM_GTC_type_precision',['../a00304.html',1,'']]], - ['glm_5fgtc_5ftype_5fptr',['GLM_GTC_type_ptr',['../a00305.html',1,'']]], - ['glm_5fgtc_5fulp',['GLM_GTC_ulp',['../a00306.html',1,'']]], - ['glm_5fgtc_5fvec1',['GLM_GTC_vec1',['../a00307.html',1,'']]], - ['glm_5fgtx_5fassociated_5fmin_5fmax',['GLM_GTX_associated_min_max',['../a00308.html',1,'']]], - ['glm_5fgtx_5fbit',['GLM_GTX_bit',['../a00309.html',1,'']]], - ['glm_5fgtx_5fclosest_5fpoint',['GLM_GTX_closest_point',['../a00310.html',1,'']]], - ['glm_5fgtx_5fcolor_5fencoding',['GLM_GTX_color_encoding',['../a00311.html',1,'']]], - ['glm_5fgtx_5fcolor_5fspace',['GLM_GTX_color_space',['../a00312.html',1,'']]], - ['glm_5fgtx_5fcolor_5fspace_5fycocg',['GLM_GTX_color_space_YCoCg',['../a00313.html',1,'']]], - ['glm_5fgtx_5fcommon',['GLM_GTX_common',['../a00314.html',1,'']]], - ['glm_5fgtx_5fcompatibility',['GLM_GTX_compatibility',['../a00315.html',1,'']]], - ['glm_5fgtx_5fcomponent_5fwise',['GLM_GTX_component_wise',['../a00316.html',1,'']]], - ['glm_5fgtx_5fdual_5fquaternion',['GLM_GTX_dual_quaternion',['../a00317.html',1,'']]], - ['glm_5fgtx_5feasing',['GLM_GTX_easing',['../a00318.html',1,'']]], - ['glm_5fgtx_5feuler_5fangles',['GLM_GTX_euler_angles',['../a00319.html',1,'']]], - ['glm_5fgtx_5fextend',['GLM_GTX_extend',['../a00320.html',1,'']]], - ['glm_5fgtx_5fextented_5fmin_5fmax',['GLM_GTX_extented_min_max',['../a00321.html',1,'']]], - ['glm_5fgtx_5fexterior_5fproduct',['GLM_GTX_exterior_product',['../a00322.html',1,'']]], - ['glm_5fgtx_5ffast_5fexponential',['GLM_GTX_fast_exponential',['../a00323.html',1,'']]], - ['glm_5fgtx_5ffast_5fsquare_5froot',['GLM_GTX_fast_square_root',['../a00324.html',1,'']]], - ['glm_5fgtx_5ffast_5ftrigonometry',['GLM_GTX_fast_trigonometry',['../a00325.html',1,'']]], - ['glm_5fgtx_5ffunctions',['GLM_GTX_functions',['../a00326.html',1,'']]], - ['glm_5fgtx_5fgradient_5fpaint',['GLM_GTX_gradient_paint',['../a00327.html',1,'']]], - ['glm_5fgtx_5fhanded_5fcoordinate_5fspace',['GLM_GTX_handed_coordinate_space',['../a00328.html',1,'']]], - ['glm_5fgtx_5fhash',['GLM_GTX_hash',['../a00329.html',1,'']]], - ['glm_5fgtx_5finteger',['GLM_GTX_integer',['../a00330.html',1,'']]], - ['glm_5fgtx_5fintersect',['GLM_GTX_intersect',['../a00331.html',1,'']]], - ['glm_5fgtx_5fio',['GLM_GTX_io',['../a00332.html',1,'']]], - ['glm_5fgtx_5flog_5fbase',['GLM_GTX_log_base',['../a00333.html',1,'']]], - ['glm_5fgtx_5fmatrix_5fcross_5fproduct',['GLM_GTX_matrix_cross_product',['../a00334.html',1,'']]], - ['glm_5fgtx_5fmatrix_5fdecompose',['GLM_GTX_matrix_decompose',['../a00335.html',1,'']]], - ['glm_5fgtx_5fmatrix_5ffactorisation',['GLM_GTX_matrix_factorisation',['../a00336.html',1,'']]], - ['glm_5fgtx_5fmatrix_5finterpolation',['GLM_GTX_matrix_interpolation',['../a00337.html',1,'']]], - ['glm_5fgtx_5fmatrix_5fmajor_5fstorage',['GLM_GTX_matrix_major_storage',['../a00338.html',1,'']]], - ['glm_5fgtx_5fmatrix_5foperation',['GLM_GTX_matrix_operation',['../a00339.html',1,'']]], - ['glm_5fgtx_5fmatrix_5fquery',['GLM_GTX_matrix_query',['../a00340.html',1,'']]], - ['glm_5fgtx_5fmatrix_5ftransform_5f2d',['GLM_GTX_matrix_transform_2d',['../a00341.html',1,'']]], - ['glm_5fgtx_5fmixed_5fproducte',['GLM_GTX_mixed_producte',['../a00342.html',1,'']]], - ['glm_5fgtx_5fnorm',['GLM_GTX_norm',['../a00343.html',1,'']]], - ['glm_5fgtx_5fnormal',['GLM_GTX_normal',['../a00344.html',1,'']]], - ['glm_5fgtx_5fnormalize_5fdot',['GLM_GTX_normalize_dot',['../a00345.html',1,'']]], - ['glm_5fgtx_5fnumber_5fprecision',['GLM_GTX_number_precision',['../a00346.html',1,'']]], - ['glm_5fgtx_5foptimum_5fpow',['GLM_GTX_optimum_pow',['../a00347.html',1,'']]], - ['glm_5fgtx_5forthonormalize',['GLM_GTX_orthonormalize',['../a00348.html',1,'']]], - ['glm_5fgtx_5fperpendicular',['GLM_GTX_perpendicular',['../a00349.html',1,'']]], - ['glm_5fgtx_5fpolar_5fcoordinates',['GLM_GTX_polar_coordinates',['../a00350.html',1,'']]], - ['glm_5fgtx_5fprojection',['GLM_GTX_projection',['../a00351.html',1,'']]], - ['glm_5fgtx_5fquaternion',['GLM_GTX_quaternion',['../a00352.html',1,'']]], - ['glm_5fgtx_5frange',['GLM_GTX_range',['../a00353.html',1,'']]], - ['glm_5fgtx_5fraw_5fdata',['GLM_GTX_raw_data',['../a00354.html',1,'']]], - ['glm_5fgtx_5frotate_5fnormalized_5faxis',['GLM_GTX_rotate_normalized_axis',['../a00355.html',1,'']]], - ['glm_5fgtx_5frotate_5fvector',['GLM_GTX_rotate_vector',['../a00356.html',1,'']]], - ['glm_5fgtx_5fscalar_5frelational',['GLM_GTX_scalar_relational',['../a00357.html',1,'']]], - ['glm_5fgtx_5fspline',['GLM_GTX_spline',['../a00358.html',1,'']]], - ['glm_5fgtx_5fstd_5fbased_5ftype',['GLM_GTX_std_based_type',['../a00359.html',1,'']]], - ['glm_5fgtx_5fstring_5fcast',['GLM_GTX_string_cast',['../a00360.html',1,'']]], - ['glm_5fgtx_5ftexture',['GLM_GTX_texture',['../a00361.html',1,'']]], - ['glm_5fgtx_5ftransform',['GLM_GTX_transform',['../a00362.html',1,'']]], - ['glm_5fgtx_5ftransform2',['GLM_GTX_transform2',['../a00363.html',1,'']]], - ['glm_5fgtx_5ftype_5faligned',['GLM_GTX_type_aligned',['../a00364.html',1,'']]], - ['glm_5fgtx_5ftype_5ftrait',['GLM_GTX_type_trait',['../a00365.html',1,'']]], - ['glm_5fgtx_5fvec_5fswizzle',['GLM_GTX_vec_swizzle',['../a00366.html',1,'']]], - ['glm_5fgtx_5fvector_5fangle',['GLM_GTX_vector_angle',['../a00367.html',1,'']]], - ['glm_5fgtx_5fvector_5fquery',['GLM_GTX_vector_query',['../a00368.html',1,'']]], - ['glm_5fgtx_5fwrap',['GLM_GTX_wrap',['../a00369.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_5.html b/tests/OpenGL/package/glm/doc/api/search/groups_5.html deleted file mode 100644 index 2ccec277..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_5.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_5.js b/tests/OpenGL/package/glm/doc/api/search/groups_5.js deleted file mode 100644 index daa0eab4..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_5.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['integer_20functions',['Integer functions',['../a00370.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_6.html b/tests/OpenGL/package/glm/doc/api/search/groups_6.html deleted file mode 100644 index ed69c070..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_6.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_6.js b/tests/OpenGL/package/glm/doc/api/search/groups_6.js deleted file mode 100644 index 818cd91e..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_6.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['matrix_20functions',['Matrix functions',['../a00371.html',1,'']]], - ['matrix_20types',['Matrix types',['../a00283.html',1,'']]], - ['matrix_20types_20with_20precision_20qualifiers',['Matrix types with precision qualifiers',['../a00284.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_7.html b/tests/OpenGL/package/glm/doc/api/search/groups_7.html deleted file mode 100644 index 027daaa1..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_7.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_7.js b/tests/OpenGL/package/glm/doc/api/search/groups_7.js deleted file mode 100644 index a0c18227..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['recommended_20extensions',['Recommended extensions',['../a00286.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_8.html b/tests/OpenGL/package/glm/doc/api/search/groups_8.html deleted file mode 100644 index 936f141d..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_8.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_8.js b/tests/OpenGL/package/glm/doc/api/search/groups_8.js deleted file mode 100644 index b98bb0f0..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_8.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['stable_20extensions',['Stable extensions',['../a00285.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_9.html b/tests/OpenGL/package/glm/doc/api/search/groups_9.html deleted file mode 100644 index c66e6a67..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_9.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/groups_9.js b/tests/OpenGL/package/glm/doc/api/search/groups_9.js deleted file mode 100644 index ceff484b..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/groups_9.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['vector_20relational_20functions',['Vector Relational Functions',['../a00374.html',1,'']]], - ['vector_20types',['Vector types',['../a00281.html',1,'']]], - ['vector_20types_20with_20precision_20qualifiers',['Vector types with precision qualifiers',['../a00282.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/mag_sel.png b/tests/OpenGL/package/glm/doc/api/search/mag_sel.png deleted file mode 100644 index 81f6040a2092402b4d98f9ffa8855d12a0d4ca17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563 zcmV-30?hr1P)zxx&tqG15pu7)IiiXFflOc2k;dXd>%13GZAy? zRz!q0=|E6a6vV)&ZBS~G9oe0kbqyw1*gvY`{Pop2oKq#FlzgXt@Xh-7fxh>}`Fxg> z$%N%{$!4=5nM{(;=c!aG1Ofr^Do{u%Ih{^&Fc@H2)+a-?TBXrw5DW&z%Nb6mQ!L9O zl}b@6mB?f=tX3;#vl)}ggh(Vpyh(IK z(Mb0D{l{U$FsRjP;!{($+bsaaVi8T#1c0V#qEIOCYa9@UVLV`f__E81L;?WEaRA;Y zUH;rZ;vb;mk7JX|$=i3O~&If0O@oZfLg8gfIjW=dcBsz;gI=!{-r4# z4%6v$&~;q^j7Fo67yJ(NJWuX+I~I!tj^nW3?}^9bq|<3^+vapS5sgM^x7!cs(+mMT z&y%j};&~po+YO)3hoUH4E*E;e9>?R6SS&`X)p`njycAVcg{rEb41T{~Hk(bl-7eSb zmFxA2uIqo#@R?lKm50ND`~6Nfn|-b1|L6O98vt3Tx@gKz#isxO002ovPDHLkV1kyW B_l^Jn diff --git a/tests/OpenGL/package/glm/doc/api/search/nomatches.html b/tests/OpenGL/package/glm/doc/api/search/nomatches.html deleted file mode 100644 index b1ded27e..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/nomatches.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - -
-
No Matches
-
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/pages_0.html b/tests/OpenGL/package/glm/doc/api/search/pages_0.html deleted file mode 100644 index 75d203dc..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/pages_0.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/pages_0.js b/tests/OpenGL/package/glm/doc/api/search/pages_0.js deleted file mode 100644 index 5d97ea16..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/pages_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['opengl_20mathematics_20_28glm_29',['OpenGL Mathematics (GLM)',['../index.html',1,'']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/search.css b/tests/OpenGL/package/glm/doc/api/search/search.css deleted file mode 100644 index 4d7612ff..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/search.css +++ /dev/null @@ -1,271 +0,0 @@ -/*---------------- Search Box */ - -#FSearchBox { - float: left; -} - -#MSearchBox { - white-space : nowrap; - position: absolute; - float: none; - display: inline; - margin-top: 8px; - right: 0px; - width: 170px; - z-index: 102; - background-color: white; -} - -#MSearchBox .left -{ - display:block; - position:absolute; - left:10px; - width:20px; - height:19px; - background:url('search_l.png') no-repeat; - background-position:right; -} - -#MSearchSelect { - display:block; - position:absolute; - width:20px; - height:19px; -} - -.left #MSearchSelect { - left:4px; -} - -.right #MSearchSelect { - right:5px; -} - -#MSearchField { - display:block; - position:absolute; - height:19px; - background:url('search_m.png') repeat-x; - border:none; - width:111px; - margin-left:20px; - padding-left:4px; - color: #909090; - outline: none; - font: 9pt Arial, Verdana, sans-serif; -} - -#FSearchBox #MSearchField { - margin-left:15px; -} - -#MSearchBox .right { - display:block; - position:absolute; - right:10px; - top:0px; - width:20px; - height:19px; - background:url('search_r.png') no-repeat; - background-position:left; -} - -#MSearchClose { - display: none; - position: absolute; - top: 4px; - background : none; - border: none; - margin: 0px 4px 0px 0px; - padding: 0px 0px; - outline: none; -} - -.left #MSearchClose { - left: 6px; -} - -.right #MSearchClose { - right: 2px; -} - -.MSearchBoxActive #MSearchField { - color: #000000; -} - -/*---------------- Search filter selection */ - -#MSearchSelectWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #90A5CE; - background-color: #F9FAFC; - z-index: 1; - padding-top: 4px; - padding-bottom: 4px; - -moz-border-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -.SelectItem { - font: 8pt Arial, Verdana, sans-serif; - padding-left: 2px; - padding-right: 12px; - border: 0px; -} - -span.SelectionMark { - margin-right: 4px; - font-family: monospace; - outline-style: none; - text-decoration: none; -} - -a.SelectItem { - display: block; - outline-style: none; - color: #000000; - text-decoration: none; - padding-left: 6px; - padding-right: 12px; -} - -a.SelectItem:focus, -a.SelectItem:active { - color: #000000; - outline-style: none; - text-decoration: none; -} - -a.SelectItem:hover { - color: #FFFFFF; - background-color: #3D578C; - outline-style: none; - text-decoration: none; - cursor: pointer; - display: block; -} - -/*---------------- Search results window */ - -iframe#MSearchResults { - width: 60ex; - height: 15em; -} - -#MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #000; - background-color: #EEF1F7; -} - -/* ----------------------------------- */ - - -#SRIndex { - clear:both; - padding-bottom: 15px; -} - -.SREntry { - font-size: 10pt; - padding-left: 1ex; -} - -.SRPage .SREntry { - font-size: 8pt; - padding: 1px 5px; -} - -body.SRPage { - margin: 5px 2px; -} - -.SRChildren { - padding-left: 3ex; padding-bottom: .5em -} - -.SRPage .SRChildren { - display: none; -} - -.SRSymbol { - font-weight: bold; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRScope { - display: block; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRSymbol:focus, a.SRSymbol:active, -a.SRScope:focus, a.SRScope:active { - text-decoration: underline; -} - -span.SRScope { - padding-left: 4px; -} - -.SRPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; -} - -.SRResult { - display: none; -} - -DIV.searchresults { - margin-left: 10px; - margin-right: 10px; -} - -/*---------------- External search page results */ - -.searchresult { - background-color: #F0F3F8; -} - -.pages b { - color: white; - padding: 5px 5px 3px 5px; - background-image: url("../tab_a.png"); - background-repeat: repeat-x; - text-shadow: 0 1px 1px #000000; -} - -.pages { - line-height: 17px; - margin-left: 4px; - text-decoration: none; -} - -.hl { - font-weight: bold; -} - -#searchresults { - margin-bottom: 20px; -} - -.searchpages { - margin-top: 10px; -} - diff --git a/tests/OpenGL/package/glm/doc/api/search/search.js b/tests/OpenGL/package/glm/doc/api/search/search.js deleted file mode 100644 index dedce3bf..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/search.js +++ /dev/null @@ -1,791 +0,0 @@ -function convertToId(search) -{ - var result = ''; - for (i=0;i do a search - { - this.Search(); - } - } - - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { - this.searchIndex--; - this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { - this.OnSelectItem(this.searchIndex); - this.CloseSelectionWindow(); - this.DOMSearchField().focus(); - } - return false; - } - - // --------- Actions - - // Closes the results window. - this.CloseResultsWindow = function() - { - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.Activate(false); - } - - this.CloseSelectionWindow = function() - { - this.DOMSearchSelectWindow().style.display = 'none'; - } - - // Performs a search. - this.Search = function() - { - this.keyTimeout = 0; - - // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - - var code = searchValue.toLowerCase().charCodeAt(0); - var idxChar = searchValue.substr(0, 1).toLowerCase(); - if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair - { - idxChar = searchValue.substr(0, 2); - } - - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); - if (idx!=-1) - { - var hexCode=idx.toString(16); - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; - } - else // nothing available for this search term - { - resultsPage = this.resultsPath + '/nomatches.html'; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; - } - - window.frames.MSearchResults.location = resultsPageWithSearch; - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (domPopupSearchResultsWindow.style.display!='block') - { - var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline'; - if (this.insideFrame) - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - domPopupSearchResultsWindow.style.position = 'relative'; - domPopupSearchResultsWindow.style.display = 'block'; - var width = document.body.clientWidth - 8; // the -8 is for IE :-( - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResults.style.width = width + 'px'; - } - else - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; - var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - } - } - - this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; - } - - // -------- Activation Functions - - // Activates or deactivates the search panel, resetting things to - // their default values if necessary. - this.Activate = function(isActive) - { - if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { - this.DOMSearchBox().className = 'MSearchBoxActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == this.searchLabel) // clear "Search" term upon entry - { - searchField.value = ''; - this.searchActive = true; - } - } - else if (!isActive) // directly remove the panel - { - this.DOMSearchBox().className = 'MSearchBoxInactive'; - this.DOMSearchField().value = this.searchLabel; - this.searchActive = false; - this.lastSearchValue = '' - this.lastResultsPage = ''; - } - } -} - -// ----------------------------------------------------------------------- - -// The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName == 'DIV' && element.className == 'SRChildren') - { - return element; - } - - if (element.nodeName == 'DIV' && element.hasChildNodes()) - { - element = element.firstChild; - } - else if (element.nextSibling) - { - element = element.nextSibling; - } - else - { - do - { - element = element.parentNode; - } - while (element && element!=parentElement && !element.nextSibling); - - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } - } - } - - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; - } - else - { - element.style.display = 'block'; - } - } - } - - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; - } - - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index++; - } - return focusItem; - } - - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; - } - return focusItem; - } - - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; - } - - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; - } - } - } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - parent.document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); - } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } - - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } -} - -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} - -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} - -function createResults() -{ - var results = document.getElementById("SRResults"); - for (var e=0; ek7RCwB~R6VQOP#AvB$vH7i{6H{96zot$7cZT<7246EF5Np6N}+$IbiG6W zg#87A+NFaX+=_^xM1#gCtshC=E{%9^uQX_%?YwXvo{#q&MnpJ8uh(O?ZRc&~_1%^SsPxG@rfElJg-?U zm!Cz-IOn(qJP3kDp-^~qt+FGbl=5jNli^Wj_xIBG{Rc0en{!oFvyoNC7{V~T8}b>| z=jL2WIReZzX(YN(_9fV;BBD$VXQIxNasAL8ATvEu822WQ%mvv4FO#qs` BFGc_W diff --git a/tests/OpenGL/package/glm/doc/api/search/search_r.png b/tests/OpenGL/package/glm/doc/api/search/search_r.png deleted file mode 100644 index 97ee8b439687084201b79c6f776a41f495c6392a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmV-q0-ODbP)PbXFRCwB?)W514K@j&X?z2*SxFI6-@HT2E2K=9X9%Pb zEK*!TBw&g(DMC;|A)uGlRkOS9vd-?zNs%bR4d$w+ox_iFnE8fvIvv7^5<(>Te12Li z7C)9srCzmK{ZcNM{YIl9j{DePFgOWiS%xG@5CnnnJa4nvY<^glbz7^|-ZY!dUkAwd z{gaTC@_>b5h~;ug#R0wRL0>o5!hxm*s0VW?8dr}O#zXTRTnrQm_Z7z1Mrnx>&p zD4qifUjzLvbVVWi?l?rUzwt^sdb~d!f_LEhsRVIXZtQ=qSxuxqm zEX#tf>$?M_Y1-LSDT)HqG?`%-%ZpY!#{N!rcNIiL;G7F0`l?)mNGTD9;f9F5Up3Kg zw}a<-JylhG&;=!>B+fZaCX+?C+kHYrP%c?X2!Zu_olK|GcS4A70HEy;vn)I0>0kLH z`jc(WIaaHc7!HS@f*^R^Znx8W=_jIl2oWJoQ*h1^$FX!>*PqR1J8k|fw}w_y}TpE>7m8DqDO<3z`OzXt$ccSejbEZCg@0000 - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_0.js b/tests/OpenGL/package/glm/doc/api/search/typedefs_0.js deleted file mode 100644 index 88324995..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_0.js +++ /dev/null @@ -1,179 +0,0 @@ -var searchData= -[ - ['aligned_5fbvec1',['aligned_bvec1',['../a00303.html#ga780a35f764020f553a9601a3fcdcd059',1,'glm']]], - ['aligned_5fbvec2',['aligned_bvec2',['../a00303.html#gae766b317c5afec852bfb3d74a3c54bc8',1,'glm']]], - ['aligned_5fbvec3',['aligned_bvec3',['../a00303.html#gae1964ba70d15915e5b710926decbb3cb',1,'glm']]], - ['aligned_5fbvec4',['aligned_bvec4',['../a00303.html#gae164a1f7879f828bc35e50b79d786b05',1,'glm']]], - ['aligned_5fdmat2',['aligned_dmat2',['../a00303.html#ga6783859382677d35fcd5dac7dcbefdbd',1,'glm']]], - ['aligned_5fdmat2x2',['aligned_dmat2x2',['../a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388',1,'glm']]], - ['aligned_5fdmat2x3',['aligned_dmat2x3',['../a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1',1,'glm']]], - ['aligned_5fdmat2x4',['aligned_dmat2x4',['../a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0',1,'glm']]], - ['aligned_5fdmat3',['aligned_dmat3',['../a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de',1,'glm']]], - ['aligned_5fdmat3x2',['aligned_dmat3x2',['../a00303.html#ga5f5123d834bd1170edf8c386834e112c',1,'glm']]], - ['aligned_5fdmat3x3',['aligned_dmat3x3',['../a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f',1,'glm']]], - ['aligned_5fdmat3x4',['aligned_dmat3x4',['../a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d',1,'glm']]], - ['aligned_5fdmat4',['aligned_dmat4',['../a00303.html#ga001bb387ae8192fa94dbd8b23b600439',1,'glm']]], - ['aligned_5fdmat4x2',['aligned_dmat4x2',['../a00303.html#gaa409cfb737bd59b68dc683e9b03930cc',1,'glm']]], - ['aligned_5fdmat4x3',['aligned_dmat4x3',['../a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121',1,'glm']]], - ['aligned_5fdmat4x4',['aligned_dmat4x4',['../a00303.html#gac9bda778d0b7ad82f656dab99b71857a',1,'glm']]], - ['aligned_5fdvec1',['aligned_dvec1',['../a00303.html#ga4974f46ae5a19415d91316960a53617a',1,'glm']]], - ['aligned_5fdvec2',['aligned_dvec2',['../a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0',1,'glm']]], - ['aligned_5fdvec3',['aligned_dvec3',['../a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0',1,'glm']]], - ['aligned_5fdvec4',['aligned_dvec4',['../a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5',1,'glm']]], - ['aligned_5fhighp_5fbvec1',['aligned_highp_bvec1',['../a00303.html#ga862843a45b01c35ffe4d44c47ea774ad',1,'glm']]], - ['aligned_5fhighp_5fbvec2',['aligned_highp_bvec2',['../a00303.html#ga0731b593c5e33559954c80f8687e76c6',1,'glm']]], - ['aligned_5fhighp_5fbvec3',['aligned_highp_bvec3',['../a00303.html#ga0913bdf048d0cb74af1d2512aec675bc',1,'glm']]], - ['aligned_5fhighp_5fbvec4',['aligned_highp_bvec4',['../a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f',1,'glm']]], - ['aligned_5fhighp_5fdmat2',['aligned_highp_dmat2',['../a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45',1,'glm']]], - ['aligned_5fhighp_5fdmat2x2',['aligned_highp_dmat2x2',['../a00303.html#gaef26dfe3855a91644665b55c9096a8c8',1,'glm']]], - ['aligned_5fhighp_5fdmat2x3',['aligned_highp_dmat2x3',['../a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b',1,'glm']]], - ['aligned_5fhighp_5fdmat2x4',['aligned_highp_dmat2x4',['../a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced',1,'glm']]], - ['aligned_5fhighp_5fdmat3',['aligned_highp_dmat3',['../a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8',1,'glm']]], - ['aligned_5fhighp_5fdmat3x2',['aligned_highp_dmat3x2',['../a00303.html#gab069b2fc2ec785fc4e193cf26c022679',1,'glm']]], - ['aligned_5fhighp_5fdmat3x3',['aligned_highp_dmat3x3',['../a00303.html#ga66073b1ddef34b681741f572338ddb8e',1,'glm']]], - ['aligned_5fhighp_5fdmat3x4',['aligned_highp_dmat3x4',['../a00303.html#ga683c8ca66de323ea533a760abedd0efc',1,'glm']]], - ['aligned_5fhighp_5fdmat4',['aligned_highp_dmat4',['../a00303.html#gacaa7407ea00ffdd322ce86a57adb547e',1,'glm']]], - ['aligned_5fhighp_5fdmat4x2',['aligned_highp_dmat4x2',['../a00303.html#ga93a23ca3d42818d56e0702213c66354b',1,'glm']]], - ['aligned_5fhighp_5fdmat4x3',['aligned_highp_dmat4x3',['../a00303.html#gacab7374b560745cb1d0a306a90353f58',1,'glm']]], - ['aligned_5fhighp_5fdmat4x4',['aligned_highp_dmat4x4',['../a00303.html#ga1fbfba14368b742972d3b58a0a303682',1,'glm']]], - ['aligned_5fhighp_5fdvec1',['aligned_highp_dvec1',['../a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc',1,'glm']]], - ['aligned_5fhighp_5fdvec2',['aligned_highp_dvec2',['../a00303.html#gab173a333e6b7ce153ceba66ac4a321cf',1,'glm']]], - ['aligned_5fhighp_5fdvec3',['aligned_highp_dvec3',['../a00303.html#gae94ef61edfa047d05bc69b6065fc42ba',1,'glm']]], - ['aligned_5fhighp_5fdvec4',['aligned_highp_dvec4',['../a00303.html#ga8fad35c5677f228e261fe541f15363a4',1,'glm']]], - ['aligned_5fhighp_5fivec1',['aligned_highp_ivec1',['../a00303.html#gad63b8c5b4dc0500d54d7414ef555178f',1,'glm']]], - ['aligned_5fhighp_5fivec2',['aligned_highp_ivec2',['../a00303.html#ga41563650f36cb7f479e080de21e08418',1,'glm']]], - ['aligned_5fhighp_5fivec3',['aligned_highp_ivec3',['../a00303.html#ga6eca5170bb35eac90b4972590fd31a06',1,'glm']]], - ['aligned_5fhighp_5fivec4',['aligned_highp_ivec4',['../a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91',1,'glm']]], - ['aligned_5fhighp_5fmat2',['aligned_highp_mat2',['../a00303.html#gaf9db5e8a929c317da5aa12cc53741b63',1,'glm']]], - ['aligned_5fhighp_5fmat2x2',['aligned_highp_mat2x2',['../a00303.html#gab559d943abf92bc588bcd3f4c0e4664b',1,'glm']]], - ['aligned_5fhighp_5fmat2x3',['aligned_highp_mat2x3',['../a00303.html#ga50c9af5aa3a848956d625fc64dc8488e',1,'glm']]], - ['aligned_5fhighp_5fmat2x4',['aligned_highp_mat2x4',['../a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a',1,'glm']]], - ['aligned_5fhighp_5fmat3',['aligned_highp_mat3',['../a00303.html#gabab3afcc04459c7b123604ae5dc663f6',1,'glm']]], - ['aligned_5fhighp_5fmat3x2',['aligned_highp_mat3x2',['../a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75',1,'glm']]], - ['aligned_5fhighp_5fmat3x3',['aligned_highp_mat3x3',['../a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259',1,'glm']]], - ['aligned_5fhighp_5fmat3x4',['aligned_highp_mat3x4',['../a00303.html#ga52e00afd0eb181e6738f40cf41787049',1,'glm']]], - ['aligned_5fhighp_5fmat4',['aligned_highp_mat4',['../a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba',1,'glm']]], - ['aligned_5fhighp_5fmat4x2',['aligned_highp_mat4x2',['../a00303.html#ga84e1f5e0718952a079b748825c03f956',1,'glm']]], - ['aligned_5fhighp_5fmat4x3',['aligned_highp_mat4x3',['../a00303.html#gafff1684c4ff19b4a818138ccacc1e78d',1,'glm']]], - ['aligned_5fhighp_5fmat4x4',['aligned_highp_mat4x4',['../a00303.html#ga40d49648083a0498a12a4bb41ae6ece8',1,'glm']]], - ['aligned_5fhighp_5fuvec1',['aligned_highp_uvec1',['../a00303.html#ga5b80e28396c6ef7d32c6fd18df498451',1,'glm']]], - ['aligned_5fhighp_5fuvec2',['aligned_highp_uvec2',['../a00303.html#ga04db692662a4908beeaf5a5ba6e19483',1,'glm']]], - ['aligned_5fhighp_5fuvec3',['aligned_highp_uvec3',['../a00303.html#ga073fd6e8b241afade6d8afbd676b2667',1,'glm']]], - ['aligned_5fhighp_5fuvec4',['aligned_highp_uvec4',['../a00303.html#gabdd60462042859f876c17c7346c732a5',1,'glm']]], - ['aligned_5fhighp_5fvec1',['aligned_highp_vec1',['../a00303.html#ga4d0bd70d5fac49b800546d608b707513',1,'glm']]], - ['aligned_5fhighp_5fvec2',['aligned_highp_vec2',['../a00303.html#gac9f8482dde741fb6bab7248b81a45465',1,'glm']]], - ['aligned_5fhighp_5fvec3',['aligned_highp_vec3',['../a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2',1,'glm']]], - ['aligned_5fhighp_5fvec4',['aligned_highp_vec4',['../a00303.html#ga7cb26d354dd69d23849c34c4fba88da9',1,'glm']]], - ['aligned_5fivec1',['aligned_ivec1',['../a00303.html#ga76298aed82a439063c3d55980c84aa0b',1,'glm']]], - ['aligned_5fivec2',['aligned_ivec2',['../a00303.html#gae4f38fd2c86cee6940986197777b3ca4',1,'glm']]], - ['aligned_5fivec3',['aligned_ivec3',['../a00303.html#ga32794322d294e5ace7fed4a61896f270',1,'glm']]], - ['aligned_5fivec4',['aligned_ivec4',['../a00303.html#ga7f79eae5927c9033d84617e49f6f34e4',1,'glm']]], - ['aligned_5flowp_5fbvec1',['aligned_lowp_bvec1',['../a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9',1,'glm']]], - ['aligned_5flowp_5fbvec2',['aligned_lowp_bvec2',['../a00303.html#ga59fadcd3835646e419372ae8b43c5d37',1,'glm']]], - ['aligned_5flowp_5fbvec3',['aligned_lowp_bvec3',['../a00303.html#ga83aab4d191053f169c93a3e364f2e118',1,'glm']]], - ['aligned_5flowp_5fbvec4',['aligned_lowp_bvec4',['../a00303.html#gaa7a76555ee4853614e5755181a8dd54e',1,'glm']]], - ['aligned_5flowp_5fdmat2',['aligned_lowp_dmat2',['../a00303.html#ga79a90173d8faa9816dc852ce447d66ca',1,'glm']]], - ['aligned_5flowp_5fdmat2x2',['aligned_lowp_dmat2x2',['../a00303.html#ga07cb8e846666cbf56045b064fb553d2e',1,'glm']]], - ['aligned_5flowp_5fdmat2x3',['aligned_lowp_dmat2x3',['../a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b',1,'glm']]], - ['aligned_5flowp_5fdmat2x4',['aligned_lowp_dmat2x4',['../a00303.html#gab0cf4f7c9a264941519acad286e055ea',1,'glm']]], - ['aligned_5flowp_5fdmat3',['aligned_lowp_dmat3',['../a00303.html#gac00e15efded8a57c9dec3aed0fb547e7',1,'glm']]], - ['aligned_5flowp_5fdmat3x2',['aligned_lowp_dmat3x2',['../a00303.html#gaa281a47d5d627313984d0f8df993b648',1,'glm']]], - ['aligned_5flowp_5fdmat3x3',['aligned_lowp_dmat3x3',['../a00303.html#ga7f3148a72355e39932d6855baca42ebc',1,'glm']]], - ['aligned_5flowp_5fdmat3x4',['aligned_lowp_dmat3x4',['../a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3',1,'glm']]], - ['aligned_5flowp_5fdmat4',['aligned_lowp_dmat4',['../a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b',1,'glm']]], - ['aligned_5flowp_5fdmat4x2',['aligned_lowp_dmat4x2',['../a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce',1,'glm']]], - ['aligned_5flowp_5fdmat4x3',['aligned_lowp_dmat4x3',['../a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d',1,'glm']]], - ['aligned_5flowp_5fdmat4x4',['aligned_lowp_dmat4x4',['../a00303.html#gad8220a93d2fca2dd707821b4ab6f809e',1,'glm']]], - ['aligned_5flowp_5fdvec1',['aligned_lowp_dvec1',['../a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62',1,'glm']]], - ['aligned_5flowp_5fdvec2',['aligned_lowp_dvec2',['../a00303.html#ga0e37cff4a43cca866101f0a35f01db6d',1,'glm']]], - ['aligned_5flowp_5fdvec3',['aligned_lowp_dvec3',['../a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59',1,'glm']]], - ['aligned_5flowp_5fdvec4',['aligned_lowp_dvec4',['../a00303.html#ga226f5ec7a953cea559c16fe3aff9924f',1,'glm']]], - ['aligned_5flowp_5fivec1',['aligned_lowp_ivec1',['../a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1',1,'glm']]], - ['aligned_5flowp_5fivec2',['aligned_lowp_ivec2',['../a00303.html#ga44c4accad582cfbd7226a19b83b0cadc',1,'glm']]], - ['aligned_5flowp_5fivec3',['aligned_lowp_ivec3',['../a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d',1,'glm']]], - ['aligned_5flowp_5fivec4',['aligned_lowp_ivec4',['../a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419',1,'glm']]], - ['aligned_5flowp_5fmat2',['aligned_lowp_mat2',['../a00303.html#ga17c424412207b00dba1cf587b099eea3',1,'glm']]], - ['aligned_5flowp_5fmat2x2',['aligned_lowp_mat2x2',['../a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f',1,'glm']]], - ['aligned_5flowp_5fmat2x3',['aligned_lowp_mat2x3',['../a00303.html#ga7dec6d96bc61312b1e56d137c9c74030',1,'glm']]], - ['aligned_5flowp_5fmat2x4',['aligned_lowp_mat2x4',['../a00303.html#gaa694fab1f8df5f658846573ba8ffc563',1,'glm']]], - ['aligned_5flowp_5fmat3',['aligned_lowp_mat3',['../a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5',1,'glm']]], - ['aligned_5flowp_5fmat3x2',['aligned_lowp_mat3x2',['../a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc',1,'glm']]], - ['aligned_5flowp_5fmat3x3',['aligned_lowp_mat3x3',['../a00303.html#gaeaab04e378a90956eec8d68a99d777ed',1,'glm']]], - ['aligned_5flowp_5fmat3x4',['aligned_lowp_mat3x4',['../a00303.html#ga1f03696ab066572c6c044e63edf635a2',1,'glm']]], - ['aligned_5flowp_5fmat4',['aligned_lowp_mat4',['../a00303.html#ga25ea2f684e36aa5e978b4f2f86593824',1,'glm']]], - ['aligned_5flowp_5fmat4x2',['aligned_lowp_mat4x2',['../a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4',1,'glm']]], - ['aligned_5flowp_5fmat4x3',['aligned_lowp_mat4x3',['../a00303.html#ga7e96981e872f17a780d9f1c22dc1f512',1,'glm']]], - ['aligned_5flowp_5fmat4x4',['aligned_lowp_mat4x4',['../a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719',1,'glm']]], - ['aligned_5flowp_5fuvec1',['aligned_lowp_uvec1',['../a00303.html#gad09b93acc43c43423408d17a64f6d7ca',1,'glm']]], - ['aligned_5flowp_5fuvec2',['aligned_lowp_uvec2',['../a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a',1,'glm']]], - ['aligned_5flowp_5fuvec3',['aligned_lowp_uvec3',['../a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c',1,'glm']]], - ['aligned_5flowp_5fuvec4',['aligned_lowp_uvec4',['../a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc',1,'glm']]], - ['aligned_5flowp_5fvec1',['aligned_lowp_vec1',['../a00303.html#gab34aee3d5e121c543fea11d2c50ecc43',1,'glm']]], - ['aligned_5flowp_5fvec2',['aligned_lowp_vec2',['../a00303.html#ga53ac5d252317f1fa43c2ef921857bf13',1,'glm']]], - ['aligned_5flowp_5fvec3',['aligned_lowp_vec3',['../a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e',1,'glm']]], - ['aligned_5flowp_5fvec4',['aligned_lowp_vec4',['../a00303.html#ga82f7275d6102593a69ce38cdad680409',1,'glm']]], - ['aligned_5fmat2',['aligned_mat2',['../a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9',1,'glm']]], - ['aligned_5fmat2x2',['aligned_mat2x2',['../a00303.html#gabb04f459d81d753d278b2072e2375e8e',1,'glm']]], - ['aligned_5fmat2x3',['aligned_mat2x3',['../a00303.html#ga832476bb1c59ef673db37433ff34e399',1,'glm']]], - ['aligned_5fmat2x4',['aligned_mat2x4',['../a00303.html#gadab11a7504430825b648ff7c7e36b725',1,'glm']]], - ['aligned_5fmat3',['aligned_mat3',['../a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714',1,'glm']]], - ['aligned_5fmat3x2',['aligned_mat3x2',['../a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed',1,'glm']]], - ['aligned_5fmat3x3',['aligned_mat3x3',['../a00303.html#gadb065dbe5c11271fef8cf2ea8608f187',1,'glm']]], - ['aligned_5fmat3x4',['aligned_mat3x4',['../a00303.html#ga88061c72c997b94c420f2b0a60d9df26',1,'glm']]], - ['aligned_5fmat4',['aligned_mat4',['../a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8',1,'glm']]], - ['aligned_5fmat4x2',['aligned_mat4x2',['../a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3',1,'glm']]], - ['aligned_5fmat4x3',['aligned_mat4x3',['../a00303.html#ga452bbbfd26e244de216e4d004d50bb74',1,'glm']]], - ['aligned_5fmat4x4',['aligned_mat4x4',['../a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1',1,'glm']]], - ['aligned_5fmediump_5fbvec1',['aligned_mediump_bvec1',['../a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e',1,'glm']]], - ['aligned_5fmediump_5fbvec2',['aligned_mediump_bvec2',['../a00303.html#gacb183eb5e67ec0d0ea5a016cba962810',1,'glm']]], - ['aligned_5fmediump_5fbvec3',['aligned_mediump_bvec3',['../a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587',1,'glm']]], - ['aligned_5fmediump_5fbvec4',['aligned_mediump_bvec4',['../a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c',1,'glm']]], - ['aligned_5fmediump_5fdmat2',['aligned_mediump_dmat2',['../a00303.html#ga62a2dfd668c91072b72c3109fc6cda28',1,'glm']]], - ['aligned_5fmediump_5fdmat2x2',['aligned_mediump_dmat2x2',['../a00303.html#ga9b7feec247d378dd407ba81f56ea96c8',1,'glm']]], - ['aligned_5fmediump_5fdmat2x3',['aligned_mediump_dmat2x3',['../a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8',1,'glm']]], - ['aligned_5fmediump_5fdmat2x4',['aligned_mediump_dmat2x4',['../a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e',1,'glm']]], - ['aligned_5fmediump_5fdmat3',['aligned_mediump_dmat3',['../a00303.html#ga6dc2832b747c00e0a0df621aba196960',1,'glm']]], - ['aligned_5fmediump_5fdmat3x2',['aligned_mediump_dmat3x2',['../a00303.html#ga5a97f0355d801de3444d42c1d5b40438',1,'glm']]], - ['aligned_5fmediump_5fdmat3x3',['aligned_mediump_dmat3x3',['../a00303.html#ga649d0acf01054b17e679cf00e150e025',1,'glm']]], - ['aligned_5fmediump_5fdmat3x4',['aligned_mediump_dmat3x4',['../a00303.html#ga45e155a4840f69b2fa4ed8047a676860',1,'glm']]], - ['aligned_5fmediump_5fdmat4',['aligned_mediump_dmat4',['../a00303.html#ga8a9376d82f0e946e25137eb55543e6ce',1,'glm']]], - ['aligned_5fmediump_5fdmat4x2',['aligned_mediump_dmat4x2',['../a00303.html#gabc25e547f4de4af62403492532cd1b6d',1,'glm']]], - ['aligned_5fmediump_5fdmat4x3',['aligned_mediump_dmat4x3',['../a00303.html#gae84f4763ecdc7457ecb7930bad12057c',1,'glm']]], - ['aligned_5fmediump_5fdmat4x4',['aligned_mediump_dmat4x4',['../a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247',1,'glm']]], - ['aligned_5fmediump_5fdvec1',['aligned_mediump_dvec1',['../a00303.html#ga7180b685c581adb224406a7f831608e3',1,'glm']]], - ['aligned_5fmediump_5fdvec2',['aligned_mediump_dvec2',['../a00303.html#ga9af1eabe22f569e70d9893be72eda0f5',1,'glm']]], - ['aligned_5fmediump_5fdvec3',['aligned_mediump_dvec3',['../a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953',1,'glm']]], - ['aligned_5fmediump_5fdvec4',['aligned_mediump_dvec4',['../a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21',1,'glm']]], - ['aligned_5fmediump_5fivec1',['aligned_mediump_ivec1',['../a00303.html#ga20e63dd980b81af10cadbbe219316650',1,'glm']]], - ['aligned_5fmediump_5fivec2',['aligned_mediump_ivec2',['../a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2',1,'glm']]], - ['aligned_5fmediump_5fivec3',['aligned_mediump_ivec3',['../a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd',1,'glm']]], - ['aligned_5fmediump_5fivec4',['aligned_mediump_ivec4',['../a00303.html#ga6099dd7878d0a78101a4250d8cd2d736',1,'glm']]], - ['aligned_5fmediump_5fmat2',['aligned_mediump_mat2',['../a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3',1,'glm']]], - ['aligned_5fmediump_5fmat2x2',['aligned_mediump_mat2x2',['../a00303.html#ga04bf49316ee777d42fcfe681ee37d7be',1,'glm']]], - ['aligned_5fmediump_5fmat2x3',['aligned_mediump_mat2x3',['../a00303.html#ga26a0b61e444a51a37b9737cf4d84291b',1,'glm']]], - ['aligned_5fmediump_5fmat2x4',['aligned_mediump_mat2x4',['../a00303.html#ga163facc9ed2692ea1300ed57c5d12b17',1,'glm']]], - ['aligned_5fmediump_5fmat3',['aligned_mediump_mat3',['../a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c',1,'glm']]], - ['aligned_5fmediump_5fmat3x2',['aligned_mediump_mat3x2',['../a00303.html#ga80dee705d714300378e0847f45059097',1,'glm']]], - ['aligned_5fmediump_5fmat3x3',['aligned_mediump_mat3x3',['../a00303.html#ga721f5404caf40d68962dcc0529de71d9',1,'glm']]], - ['aligned_5fmediump_5fmat3x4',['aligned_mediump_mat3x4',['../a00303.html#ga98f4dc6722a2541a990918c074075359',1,'glm']]], - ['aligned_5fmediump_5fmat4',['aligned_mediump_mat4',['../a00303.html#gaeefee8317192174596852ce19b602720',1,'glm']]], - ['aligned_5fmediump_5fmat4x2',['aligned_mediump_mat4x2',['../a00303.html#ga46f372a006345c252a41267657cc22c0',1,'glm']]], - ['aligned_5fmediump_5fmat4x3',['aligned_mediump_mat4x3',['../a00303.html#ga0effece4545acdebdc2a5512a303110e',1,'glm']]], - ['aligned_5fmediump_5fmat4x4',['aligned_mediump_mat4x4',['../a00303.html#ga312864244cae4e8f10f478cffd0f76de',1,'glm']]], - ['aligned_5fmediump_5fuvec1',['aligned_mediump_uvec1',['../a00303.html#gacb78126ea2eb779b41c7511128ff1283',1,'glm']]], - ['aligned_5fmediump_5fuvec2',['aligned_mediump_uvec2',['../a00303.html#ga081d53e0a71443d0b68ea61c870f9adc',1,'glm']]], - ['aligned_5fmediump_5fuvec3',['aligned_mediump_uvec3',['../a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379',1,'glm']]], - ['aligned_5fmediump_5fuvec4',['aligned_mediump_uvec4',['../a00303.html#ga73ea0c1ba31580e107d21270883f51fc',1,'glm']]], - ['aligned_5fmediump_5fvec1',['aligned_mediump_vec1',['../a00303.html#ga6b797eec76fa471e300158f3453b3b2e',1,'glm']]], - ['aligned_5fmediump_5fvec2',['aligned_mediump_vec2',['../a00303.html#ga026a55ddbf2bafb1432f1157a2708616',1,'glm']]], - ['aligned_5fmediump_5fvec3',['aligned_mediump_vec3',['../a00303.html#ga3a25e494173f6a64637b08a1b50a2132',1,'glm']]], - ['aligned_5fmediump_5fvec4',['aligned_mediump_vec4',['../a00303.html#ga320d1c661cff2ef214eb50241f2928b2',1,'glm']]], - ['aligned_5fuvec1',['aligned_uvec1',['../a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548',1,'glm']]], - ['aligned_5fuvec2',['aligned_uvec2',['../a00303.html#ga074137e3be58528d67041c223d49f398',1,'glm']]], - ['aligned_5fuvec3',['aligned_uvec3',['../a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0',1,'glm']]], - ['aligned_5fuvec4',['aligned_uvec4',['../a00303.html#gabf842c45eea186170c267a328e3f3b7d',1,'glm']]], - ['aligned_5fvec1',['aligned_vec1',['../a00303.html#ga05e6d4c908965d04191c2070a8d0a65e',1,'glm']]], - ['aligned_5fvec2',['aligned_vec2',['../a00303.html#ga0682462f8096a226773e20fac993cde5',1,'glm']]], - ['aligned_5fvec3',['aligned_vec3',['../a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0',1,'glm']]], - ['aligned_5fvec4',['aligned_vec4',['../a00303.html#ga85d89e83cb8137e1be1446de8c3b643a',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_1.html b/tests/OpenGL/package/glm/doc/api/search/typedefs_1.html deleted file mode 100644 index c44c36f9..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_1.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_1.js b/tests/OpenGL/package/glm/doc/api/search/typedefs_1.js deleted file mode 100644 index 45d4b645..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_1.js +++ /dev/null @@ -1,22 +0,0 @@ -var searchData= -[ - ['bool1',['bool1',['../a00315.html#gaddcd7aa2e30e61af5b38660613d3979e',1,'glm']]], - ['bool1x1',['bool1x1',['../a00315.html#ga7f895c936f0c29c8729afbbf22806090',1,'glm']]], - ['bool2',['bool2',['../a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9',1,'glm']]], - ['bool2x2',['bool2x2',['../a00315.html#gadb3703955e513632f98ba12fe051ba3e',1,'glm']]], - ['bool2x3',['bool2x3',['../a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0',1,'glm']]], - ['bool2x4',['bool2x4',['../a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f',1,'glm']]], - ['bool3',['bool3',['../a00315.html#ga99629f818737f342204071ef8296b2ed',1,'glm']]], - ['bool3x2',['bool3x2',['../a00315.html#gac7d7311f7e0fa8b6163d96dab033a755',1,'glm']]], - ['bool3x3',['bool3x3',['../a00315.html#ga6c97b99aac3e302053ffb58aace9033c',1,'glm']]], - ['bool3x4',['bool3x4',['../a00315.html#gae7d6b679463d37d6c527d478fb470fdf',1,'glm']]], - ['bool4',['bool4',['../a00315.html#ga13c3200b82708f73faac6d7f09ec91a3',1,'glm']]], - ['bool4x2',['bool4x2',['../a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0',1,'glm']]], - ['bool4x3',['bool4x3',['../a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe',1,'glm']]], - ['bool4x4',['bool4x4',['../a00315.html#ga7d2a7d13986602ae2896bfaa394235d4',1,'glm']]], - ['bvec1',['bvec1',['../a00265.html#ga067af382616d93f8e850baae5154cdcc',1,'glm']]], - ['bvec2',['bvec2',['../a00281.html#ga0b6123e03653cc1bbe366fc55238a934',1,'glm']]], - ['bvec3',['bvec3',['../a00281.html#ga197151b72dfaf289daf98b361760ffe7',1,'glm']]], - ['bvec4',['bvec4',['../a00281.html#ga9f7b9712373ff4342d9114619b55f5e3',1,'glm']]], - ['byte',['byte',['../a00354.html#ga3005cb0d839d546c616becfa6602c607',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_2.html b/tests/OpenGL/package/glm/doc/api/search/typedefs_2.html deleted file mode 100644 index d64bac3c..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_2.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_2.js b/tests/OpenGL/package/glm/doc/api/search/typedefs_2.js deleted file mode 100644 index ad938367..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_2.js +++ /dev/null @@ -1,37 +0,0 @@ -var searchData= -[ - ['ddualquat',['ddualquat',['../a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6',1,'glm']]], - ['dmat2',['dmat2',['../a00283.html#ga21dbd1f987775d7cc7607c139531c7e6',1,'glm']]], - ['dmat2x2',['dmat2x2',['../a00283.html#ga66b6a9af787e468a46dfe24189e87f9b',1,'glm']]], - ['dmat2x3',['dmat2x3',['../a00283.html#ga92cd388753d48e20de69ea2dbedf826a',1,'glm']]], - ['dmat2x4',['dmat2x4',['../a00283.html#gaef2198807e937072803ae0ae45e1965e',1,'glm']]], - ['dmat3',['dmat3',['../a00283.html#ga6f40aa56265b4b0ccad41b86802efe33',1,'glm']]], - ['dmat3x2',['dmat3x2',['../a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39',1,'glm']]], - ['dmat3x3',['dmat3x3',['../a00283.html#ga970cb3306be25a5ca5db5a9456831228',1,'glm']]], - ['dmat3x4',['dmat3x4',['../a00283.html#ga0412a634d183587e6188e9b11869f8f4',1,'glm']]], - ['dmat4',['dmat4',['../a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca',1,'glm']]], - ['dmat4x2',['dmat4x2',['../a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156',1,'glm']]], - ['dmat4x3',['dmat4x3',['../a00283.html#gacd18864049f8c83799babe7e596ca05b',1,'glm']]], - ['dmat4x4',['dmat4x4',['../a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10',1,'glm']]], - ['double1',['double1',['../a00315.html#ga20b861a9b6e2a300323671c57a02525b',1,'glm']]], - ['double1x1',['double1x1',['../a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8',1,'glm']]], - ['double2',['double2',['../a00315.html#ga31b729b04facccda73f07ed26958b3c2',1,'glm']]], - ['double2x2',['double2x2',['../a00315.html#gae57d0201096834d25f2b91b319e7cdbd',1,'glm']]], - ['double2x3',['double2x3',['../a00315.html#ga3655bc324008553ca61f39952d0b2d08',1,'glm']]], - ['double2x4',['double2x4',['../a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a',1,'glm']]], - ['double3',['double3',['../a00315.html#ga3d8b9028a1053a44a98902cd1c389472',1,'glm']]], - ['double3x2',['double3x2',['../a00315.html#ga5ec08fc39c9d783dfcc488be240fe975',1,'glm']]], - ['double3x3',['double3x3',['../a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180',1,'glm']]], - ['double3x4',['double3x4',['../a00315.html#ga2ef022e453d663d70aec414b2a80f756',1,'glm']]], - ['double4',['double4',['../a00315.html#gaf92f58af24f35617518aeb3d4f63fda6',1,'glm']]], - ['double4x2',['double4x2',['../a00315.html#gabca29ccceea53669618b751aae0ba83d',1,'glm']]], - ['double4x3',['double4x3',['../a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c',1,'glm']]], - ['double4x4',['double4x4',['../a00315.html#gaab541bed2e788e4537852a2492860806',1,'glm']]], - ['dquat',['dquat',['../a00249.html#ga1181459aa5d640a3ea43861b118f3f0b',1,'glm']]], - ['dualquat',['dualquat',['../a00317.html#gae93abee0c979902fbec6a7bee0f6fae1',1,'glm']]], - ['dvec1',['dvec1',['../a00268.html#ga6221af17edc2d4477a4583d2cd53e569',1,'glm']]], - ['dvec2',['dvec2',['../a00281.html#ga8b09c71aaac7da7867ae58377fe219a8',1,'glm']]], - ['dvec3',['dvec3',['../a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0',1,'glm']]], - ['dvec4',['dvec4',['../a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac',1,'glm']]], - ['dword',['dword',['../a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_3.html b/tests/OpenGL/package/glm/doc/api/search/typedefs_3.html deleted file mode 100644 index 10b9917f..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_3.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_3.js b/tests/OpenGL/package/glm/doc/api/search/typedefs_3.js deleted file mode 100644 index a64f1295..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_3.js +++ /dev/null @@ -1,78 +0,0 @@ -var searchData= -[ - ['f32',['f32',['../a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7',1,'glm']]], - ['f32mat1',['f32mat1',['../a00346.html#ga145ad477a2a3e152855511c3b52469a6',1,'glm::gtx']]], - ['f32mat1x1',['f32mat1x1',['../a00346.html#gac88c6a4dbfc380aa26e3adbbade36348',1,'glm::gtx']]], - ['f32mat2',['f32mat2',['../a00304.html#gab12383ed6ac7595ed6fde4d266c58425',1,'glm']]], - ['f32mat2x2',['f32mat2x2',['../a00304.html#ga04100c76f7d55a0dd0983ccf05142bff',1,'glm']]], - ['f32mat2x3',['f32mat2x3',['../a00304.html#gab256cdab5eb582e426d749ae77b5b566',1,'glm']]], - ['f32mat2x4',['f32mat2x4',['../a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8',1,'glm']]], - ['f32mat3',['f32mat3',['../a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be',1,'glm']]], - ['f32mat3x2',['f32mat3x2',['../a00304.html#ga1320a08e14fdff3821241eefab6947e9',1,'glm']]], - ['f32mat3x3',['f32mat3x3',['../a00304.html#ga65261fa8a21045c8646ddff114a56174',1,'glm']]], - ['f32mat3x4',['f32mat3x4',['../a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d',1,'glm']]], - ['f32mat4',['f32mat4',['../a00304.html#ga99d1b85ff99956b33da7e9992aad129a',1,'glm']]], - ['f32mat4x2',['f32mat4x2',['../a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20',1,'glm']]], - ['f32mat4x3',['f32mat4x3',['../a00304.html#ga239b96198771b7add8eea7e6b59840c0',1,'glm']]], - ['f32mat4x4',['f32mat4x4',['../a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3',1,'glm']]], - ['f32quat',['f32quat',['../a00304.html#ga38e674196ba411d642be40c47bf33939',1,'glm']]], - ['f32vec1',['f32vec1',['../a00304.html#ga701f32ab5b3fb06996b41f5c0d643805',1,'glm::f32vec1()'],['../a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943',1,'glm::gtx::f32vec1()']]], - ['f32vec2',['f32vec2',['../a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8',1,'glm']]], - ['f32vec3',['f32vec3',['../a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79',1,'glm']]], - ['f32vec4',['f32vec4',['../a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8',1,'glm']]], - ['f64',['f64',['../a00304.html#ga1d794d240091678f602e8de225b8d8c9',1,'glm']]], - ['f64mat1',['f64mat1',['../a00346.html#ga59bfa589419b5265d01314fcecd33435',1,'glm::gtx']]], - ['f64mat1x1',['f64mat1x1',['../a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd',1,'glm::gtx']]], - ['f64mat2',['f64mat2',['../a00304.html#gad9771450a54785d13080cdde0fe20c1d',1,'glm']]], - ['f64mat2x2',['f64mat2x2',['../a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37',1,'glm']]], - ['f64mat2x3',['f64mat2x3',['../a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a',1,'glm']]], - ['f64mat2x4',['f64mat2x4',['../a00304.html#gac87278e0c702ba8afff76316d4eeb769',1,'glm']]], - ['f64mat3',['f64mat3',['../a00304.html#ga9b69181efbf8f37ae934f135137b29c0',1,'glm']]], - ['f64mat3x2',['f64mat3x2',['../a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7',1,'glm']]], - ['f64mat3x3',['f64mat3x3',['../a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185',1,'glm']]], - ['f64mat3x4',['f64mat3x4',['../a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675',1,'glm']]], - ['f64mat4',['f64mat4',['../a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc',1,'glm']]], - ['f64mat4x2',['f64mat4x2',['../a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512',1,'glm']]], - ['f64mat4x3',['f64mat4x3',['../a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110',1,'glm']]], - ['f64mat4x4',['f64mat4x4',['../a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e',1,'glm']]], - ['f64quat',['f64quat',['../a00304.html#ga2b114a2f2af0fe1dfeb569c767822940',1,'glm']]], - ['f64vec1',['f64vec1',['../a00304.html#gade502df1ce14f837fae7f60a03ddb9b0',1,'glm::f64vec1()'],['../a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1',1,'glm::gtx::f64vec1()']]], - ['f64vec2',['f64vec2',['../a00304.html#gadc4e1594f9555d919131ee02b17822a2',1,'glm']]], - ['f64vec3',['f64vec3',['../a00304.html#gaa7a1ddca75c5f629173bf4772db7a635',1,'glm']]], - ['f64vec4',['f64vec4',['../a00304.html#ga66e92e57260bdb910609b9a56bf83e97',1,'glm']]], - ['fdualquat',['fdualquat',['../a00317.html#ga237c2b9b42c9a930e49de5840ae0f930',1,'glm']]], - ['float1',['float1',['../a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead',1,'glm']]], - ['float1x1',['float1x1',['../a00315.html#ga73720b8dc4620835b17f74d428f98c0c',1,'glm']]], - ['float2',['float2',['../a00315.html#ga02d3c013982c183906c61d74aa3166ce',1,'glm']]], - ['float2x2',['float2x2',['../a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f',1,'glm']]], - ['float2x3',['float2x3',['../a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe',1,'glm']]], - ['float2x4',['float2x4',['../a00315.html#gafec3cfd901ab334a92e0242b8f2269b4',1,'glm']]], - ['float3',['float3',['../a00315.html#ga821ff110fc8533a053cbfcc93e078cc0',1,'glm']]], - ['float32',['float32',['../a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1',1,'glm']]], - ['float32_5ft',['float32_t',['../a00304.html#gaa4947bc8b47c72fceea9bda730ecf603',1,'glm']]], - ['float3x2',['float3x2',['../a00315.html#gaa6c69f04ba95f3faedf95dae874de576',1,'glm']]], - ['float3x3',['float3x3',['../a00315.html#ga6ceb5d38a58becdf420026e12a6562f3',1,'glm']]], - ['float3x4',['float3x4',['../a00315.html#ga4d2679c321b793ca3784fe0315bb5332',1,'glm']]], - ['float4',['float4',['../a00315.html#gae2da7345087db3815a25d8837a727ef1',1,'glm']]], - ['float4x2',['float4x2',['../a00315.html#ga308b9af0c221145bcfe9bfc129d9098e',1,'glm']]], - ['float4x3',['float4x3',['../a00315.html#gac0a51b4812038aa81d73ffcc37f741ac',1,'glm']]], - ['float4x4',['float4x4',['../a00315.html#gad3051649b3715d828a4ab92cdae7c3bf',1,'glm']]], - ['float64',['float64',['../a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80',1,'glm']]], - ['float64_5ft',['float64_t',['../a00304.html#ga728366fef72cd96f0a5fa6429f05469e',1,'glm']]], - ['fmat2',['fmat2',['../a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280',1,'glm']]], - ['fmat2x2',['fmat2x2',['../a00304.html#ga3350c93c3275298f940a42875388e4b4',1,'glm']]], - ['fmat2x3',['fmat2x3',['../a00304.html#ga55a2d2a8eb09b5633668257eb3cad453',1,'glm']]], - ['fmat2x4',['fmat2x4',['../a00304.html#ga681381f19f11c9e5ee45cda2c56937ff',1,'glm']]], - ['fmat3',['fmat3',['../a00304.html#ga253d453c20e037730023fea0215cb6f6',1,'glm']]], - ['fmat3x2',['fmat3x2',['../a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f',1,'glm']]], - ['fmat3x3',['fmat3x3',['../a00304.html#gaa07c86650253672a19dbfb898f3265b8',1,'glm']]], - ['fmat3x4',['fmat3x4',['../a00304.html#ga44e158af77a670ee1b58c03cda9e1619',1,'glm']]], - ['fmat4',['fmat4',['../a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca',1,'glm']]], - ['fmat4x2',['fmat4x2',['../a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774',1,'glm']]], - ['fmat4x3',['fmat4x3',['../a00304.html#ga4295048a78bdf46b8a7de77ec665b497',1,'glm']]], - ['fmat4x4',['fmat4x4',['../a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3',1,'glm']]], - ['fvec1',['fvec1',['../a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f',1,'glm']]], - ['fvec2',['fvec2',['../a00304.html#ga24273aa02abaecaab7f160bac437a339',1,'glm']]], - ['fvec3',['fvec3',['../a00304.html#ga89930533646b30d021759298aa6bf04a',1,'glm']]], - ['fvec4',['fvec4',['../a00304.html#ga713c796c54875cf4092d42ff9d9096b0',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_4.html b/tests/OpenGL/package/glm/doc/api/search/typedefs_4.html deleted file mode 100644 index c1ff64d1..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_4.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_4.js b/tests/OpenGL/package/glm/doc/api/search/typedefs_4.js deleted file mode 100644 index acc35736..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_4.js +++ /dev/null @@ -1,188 +0,0 @@ -var searchData= -[ - ['highp_5fbvec1',['highp_bvec1',['../a00266.html#gae8a1e14abae1387274f57741750c06a2',1,'glm']]], - ['highp_5fbvec2',['highp_bvec2',['../a00282.html#gac6c781a85f012d77a75310a3058702c2',1,'glm']]], - ['highp_5fbvec3',['highp_bvec3',['../a00282.html#gaedb70027d89a0a405046aefda4eabaa6',1,'glm']]], - ['highp_5fbvec4',['highp_bvec4',['../a00282.html#gaee663ff64429443ab07a5327074192f6',1,'glm']]], - ['highp_5fddualquat',['highp_ddualquat',['../a00317.html#ga8f67eafa7197d7a668dad5105a463d2a',1,'glm']]], - ['highp_5fdmat2',['highp_dmat2',['../a00284.html#ga369b447bb1b312449b679ea1f90f3cea',1,'glm']]], - ['highp_5fdmat2x2',['highp_dmat2x2',['../a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7',1,'glm']]], - ['highp_5fdmat2x3',['highp_dmat2x3',['../a00284.html#gad4689ec33bc2c26e10132b174b49001a',1,'glm']]], - ['highp_5fdmat2x4',['highp_dmat2x4',['../a00284.html#ga5ceeb46670fdc000a0701910cc5061c9',1,'glm']]], - ['highp_5fdmat3',['highp_dmat3',['../a00284.html#ga86d6d4dbad92ffdcc759773340e15a97',1,'glm']]], - ['highp_5fdmat3x2',['highp_dmat3x2',['../a00284.html#ga3647309010a2160e9ec89bc6f7c95c35',1,'glm']]], - ['highp_5fdmat3x3',['highp_dmat3x3',['../a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce',1,'glm']]], - ['highp_5fdmat3x4',['highp_dmat3x4',['../a00284.html#ga6543eeeb64f48d79a0b96484308c50f0',1,'glm']]], - ['highp_5fdmat4',['highp_dmat4',['../a00284.html#ga945254f459860741138bceb74da496b9',1,'glm']]], - ['highp_5fdmat4x2',['highp_dmat4x2',['../a00284.html#gaeda1f474c668eaecc443bea85a4a4eca',1,'glm']]], - ['highp_5fdmat4x3',['highp_dmat4x3',['../a00284.html#gacf237c2d8832fe8db2d7e187585d34bd',1,'glm']]], - ['highp_5fdmat4x4',['highp_dmat4x4',['../a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a',1,'glm']]], - ['highp_5fdquat',['highp_dquat',['../a00250.html#gaf13a25f41afc03480b40fc71bd249cec',1,'glm']]], - ['highp_5fdualquat',['highp_dualquat',['../a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf',1,'glm']]], - ['highp_5fdvec1',['highp_dvec1',['../a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe',1,'glm']]], - ['highp_5fdvec2',['highp_dvec2',['../a00282.html#gab98d77cca255914f5e29697fcbc2d975',1,'glm']]], - ['highp_5fdvec3',['highp_dvec3',['../a00282.html#gab24dc20dcdc5b71282634bdbf6b70105',1,'glm']]], - ['highp_5fdvec4',['highp_dvec4',['../a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590',1,'glm']]], - ['highp_5ff32',['highp_f32',['../a00304.html#ga6906e1ef0b34064b4b675489c5c38725',1,'glm']]], - ['highp_5ff32mat2',['highp_f32mat2',['../a00304.html#ga298f7d4d273678d0282812368da27fda',1,'glm']]], - ['highp_5ff32mat2x2',['highp_f32mat2x2',['../a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968',1,'glm']]], - ['highp_5ff32mat2x3',['highp_f32mat2x3',['../a00304.html#ga0aeb5cb001473b08c88175012708a379',1,'glm']]], - ['highp_5ff32mat2x4',['highp_f32mat2x4',['../a00304.html#ga88938ee1e7981fa3402e88da6ad74531',1,'glm']]], - ['highp_5ff32mat3',['highp_f32mat3',['../a00304.html#ga24f9ef3263b1638564713892cc37981f',1,'glm']]], - ['highp_5ff32mat3x2',['highp_f32mat3x2',['../a00304.html#ga36537e701456f12c20e73f469cac4967',1,'glm']]], - ['highp_5ff32mat3x3',['highp_f32mat3x3',['../a00304.html#gaab691ae40c37976d268d8cac0096e0e1',1,'glm']]], - ['highp_5ff32mat3x4',['highp_f32mat3x4',['../a00304.html#gaa5086dbd6efb272d13fc88829330861d',1,'glm']]], - ['highp_5ff32mat4',['highp_f32mat4',['../a00304.html#ga14c90ca49885723f51d06e295587236f',1,'glm']]], - ['highp_5ff32mat4x2',['highp_f32mat4x2',['../a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f',1,'glm']]], - ['highp_5ff32mat4x3',['highp_f32mat4x3',['../a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59',1,'glm']]], - ['highp_5ff32mat4x4',['highp_f32mat4x4',['../a00304.html#gaf1b712b97b2322685fbbed28febe5f84',1,'glm']]], - ['highp_5ff32quat',['highp_f32quat',['../a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3',1,'glm']]], - ['highp_5ff32vec1',['highp_f32vec1',['../a00304.html#gab1b1c9e8667902b78b2c330e4d383a61',1,'glm']]], - ['highp_5ff32vec2',['highp_f32vec2',['../a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77',1,'glm']]], - ['highp_5ff32vec3',['highp_f32vec3',['../a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c',1,'glm']]], - ['highp_5ff32vec4',['highp_f32vec4',['../a00304.html#ga0f038d4e09862a74f03d102c59eda73e',1,'glm']]], - ['highp_5ff64',['highp_f64',['../a00304.html#ga51d5266017d88f62737c1973923a7cf4',1,'glm']]], - ['highp_5ff64mat2',['highp_f64mat2',['../a00304.html#gaf7adb92ce8de0afaff01436b039fd924',1,'glm']]], - ['highp_5ff64mat2x2',['highp_f64mat2x2',['../a00304.html#ga773ea237a051827cfc20de960bc73ff0',1,'glm']]], - ['highp_5ff64mat2x3',['highp_f64mat2x3',['../a00304.html#ga8342c7469384c6d769cacc9e309278d9',1,'glm']]], - ['highp_5ff64mat2x4',['highp_f64mat2x4',['../a00304.html#ga5a67a7440b9c0d1538533540f99036a5',1,'glm']]], - ['highp_5ff64mat3',['highp_f64mat3',['../a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546',1,'glm']]], - ['highp_5ff64mat3x2',['highp_f64mat3x2',['../a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a',1,'glm']]], - ['highp_5ff64mat3x3',['highp_f64mat3x3',['../a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4',1,'glm']]], - ['highp_5ff64mat3x4',['highp_f64mat3x4',['../a00304.html#gad310b1dddeec9ec837a104e7db8de580',1,'glm']]], - ['highp_5ff64mat4',['highp_f64mat4',['../a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5',1,'glm']]], - ['highp_5ff64mat4x2',['highp_f64mat4x2',['../a00304.html#ga58c4631421e323e252fc716b6103e38c',1,'glm']]], - ['highp_5ff64mat4x3',['highp_f64mat4x3',['../a00304.html#gae94823d65648e44d972863c6caa13103',1,'glm']]], - ['highp_5ff64mat4x4',['highp_f64mat4x4',['../a00304.html#ga09a2374b725c4246d263ee36fb66434c',1,'glm']]], - ['highp_5ff64quat',['highp_f64quat',['../a00304.html#gafcfdd74a115163af2ce1093551747352',1,'glm']]], - ['highp_5ff64vec1',['highp_f64vec1',['../a00304.html#ga62c31b133ceee9984fbee05ac4c434a9',1,'glm']]], - ['highp_5ff64vec2',['highp_f64vec2',['../a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2',1,'glm']]], - ['highp_5ff64vec3',['highp_f64vec3',['../a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851',1,'glm']]], - ['highp_5ff64vec4',['highp_f64vec4',['../a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444',1,'glm']]], - ['highp_5ffdualquat',['highp_fdualquat',['../a00317.html#ga4c4e55e9c99dc57b299ed590968da564',1,'glm']]], - ['highp_5ffloat32',['highp_float32',['../a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea',1,'glm']]], - ['highp_5ffloat32_5ft',['highp_float32_t',['../a00304.html#ga5376ef18dca9d248897c3363ef5a06b2',1,'glm']]], - ['highp_5ffloat64',['highp_float64',['../a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215',1,'glm']]], - ['highp_5ffloat64_5ft',['highp_float64_t',['../a00304.html#gaaeeb0077198cff40e3f48b1108ece139',1,'glm']]], - ['highp_5ffmat2',['highp_fmat2',['../a00304.html#gae98c88d9a7befa9b5877f49176225535',1,'glm']]], - ['highp_5ffmat2x2',['highp_fmat2x2',['../a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad',1,'glm']]], - ['highp_5ffmat2x3',['highp_fmat2x3',['../a00304.html#gacf111095594996fef29067b2454fccad',1,'glm']]], - ['highp_5ffmat2x4',['highp_fmat2x4',['../a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2',1,'glm']]], - ['highp_5ffmat3',['highp_fmat3',['../a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75',1,'glm']]], - ['highp_5ffmat3x2',['highp_fmat3x2',['../a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19',1,'glm']]], - ['highp_5ffmat3x3',['highp_fmat3x3',['../a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e',1,'glm']]], - ['highp_5ffmat3x4',['highp_fmat3x4',['../a00304.html#ga961fac2a885907ffcf4d40daac6615c5',1,'glm']]], - ['highp_5ffmat4',['highp_fmat4',['../a00304.html#gabf28443ce0cc0959077ec39b21f32c39',1,'glm']]], - ['highp_5ffmat4x2',['highp_fmat4x2',['../a00304.html#ga076961cf2d120c7168b957cb2ed107b3',1,'glm']]], - ['highp_5ffmat4x3',['highp_fmat4x3',['../a00304.html#gae406ec670f64170a7437b5e302eeb2cb',1,'glm']]], - ['highp_5ffmat4x4',['highp_fmat4x4',['../a00304.html#gaee80c7cd3caa0f2635058656755f6f69',1,'glm']]], - ['highp_5ffvec1',['highp_fvec1',['../a00304.html#gaa1040342c4efdedc8f90e6267db8d41c',1,'glm']]], - ['highp_5ffvec2',['highp_fvec2',['../a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae',1,'glm']]], - ['highp_5ffvec3',['highp_fvec3',['../a00304.html#ga6ef77413883f48d6b53b4169b25edbd0',1,'glm']]], - ['highp_5ffvec4',['highp_fvec4',['../a00304.html#ga8b839abbb44f5102609eed89f6ed61f7',1,'glm']]], - ['highp_5fi16',['highp_i16',['../a00304.html#ga0336abc2604dd2c20c30e036454b64f8',1,'glm']]], - ['highp_5fi16vec1',['highp_i16vec1',['../a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19',1,'glm']]], - ['highp_5fi16vec2',['highp_i16vec2',['../a00304.html#gaa7db3ad10947cf70cae6474d05ebd227',1,'glm']]], - ['highp_5fi16vec3',['highp_i16vec3',['../a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96',1,'glm']]], - ['highp_5fi16vec4',['highp_i16vec4',['../a00304.html#ga7a18659438828f91ccca28f1a1e067b4',1,'glm']]], - ['highp_5fi32',['highp_i32',['../a00304.html#ga727675ac6b5d2fc699520e0059735e25',1,'glm']]], - ['highp_5fi32vec1',['highp_i32vec1',['../a00304.html#ga6a9d71cc62745302f70422b7dc98755c',1,'glm']]], - ['highp_5fi32vec2',['highp_i32vec2',['../a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530',1,'glm']]], - ['highp_5fi32vec3',['highp_i32vec3',['../a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1',1,'glm']]], - ['highp_5fi32vec4',['highp_i32vec4',['../a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902',1,'glm']]], - ['highp_5fi64',['highp_i64',['../a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd',1,'glm']]], - ['highp_5fi64vec1',['highp_i64vec1',['../a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4',1,'glm']]], - ['highp_5fi64vec2',['highp_i64vec2',['../a00304.html#gad9d1903cb20899966e8ebe0670889a5f',1,'glm']]], - ['highp_5fi64vec3',['highp_i64vec3',['../a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a',1,'glm']]], - ['highp_5fi64vec4',['highp_i64vec4',['../a00304.html#gad23b1be9b3bf20352089a6b738f0ebba',1,'glm']]], - ['highp_5fi8',['highp_i8',['../a00304.html#gacb88796f2d08ef253d0345aff20c3aee',1,'glm']]], - ['highp_5fi8vec1',['highp_i8vec1',['../a00304.html#ga1d8c10949691b0fd990253476f47beb3',1,'glm']]], - ['highp_5fi8vec2',['highp_i8vec2',['../a00304.html#ga50542e4cb9b2f9bec213b66e06145d07',1,'glm']]], - ['highp_5fi8vec3',['highp_i8vec3',['../a00304.html#ga8396bfdc081d9113190d0c39c9f67084',1,'glm']]], - ['highp_5fi8vec4',['highp_i8vec4',['../a00304.html#ga4824e3ddf6e608117dfe4809430737b4',1,'glm']]], - ['highp_5fimat2',['highp_imat2',['../a00294.html#ga8499cc3b016003f835314c1c756e9db9',1,'glm']]], - ['highp_5fimat2x2',['highp_imat2x2',['../a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3',1,'glm']]], - ['highp_5fimat2x3',['highp_imat2x3',['../a00294.html#gaba49d890e06c9444795f5a133fbf1336',1,'glm']]], - ['highp_5fimat2x4',['highp_imat2x4',['../a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b',1,'glm']]], - ['highp_5fimat3',['highp_imat3',['../a00294.html#gaca4506a3efa679eff7c006d9826291fd',1,'glm']]], - ['highp_5fimat3x2',['highp_imat3x2',['../a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb',1,'glm']]], - ['highp_5fimat3x3',['highp_imat3x3',['../a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41',1,'glm']]], - ['highp_5fimat3x4',['highp_imat3x4',['../a00294.html#ga53008f580be99018a17b357b5a4ffc0d',1,'glm']]], - ['highp_5fimat4',['highp_imat4',['../a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56',1,'glm']]], - ['highp_5fimat4x2',['highp_imat4x2',['../a00294.html#ga1858820fb292cae396408b2034407f72',1,'glm']]], - ['highp_5fimat4x3',['highp_imat4x3',['../a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5',1,'glm']]], - ['highp_5fimat4x4',['highp_imat4x4',['../a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44',1,'glm']]], - ['highp_5fint16',['highp_int16',['../a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718',1,'glm']]], - ['highp_5fint16_5ft',['highp_int16_t',['../a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff',1,'glm']]], - ['highp_5fint32',['highp_int32',['../a00304.html#ga84ed04b4e0de18c977e932d617e7c223',1,'glm']]], - ['highp_5fint32_5ft',['highp_int32_t',['../a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f',1,'glm']]], - ['highp_5fint64',['highp_int64',['../a00304.html#ga226a8d52b4e3f77aaa6231135e886aac',1,'glm']]], - ['highp_5fint64_5ft',['highp_int64_t',['../a00304.html#ga73c6abb280a45feeff60f9accaee91f3',1,'glm']]], - ['highp_5fint8',['highp_int8',['../a00304.html#gad0549c902a96a7164e4ac858d5f39dbf',1,'glm']]], - ['highp_5fint8_5ft',['highp_int8_t',['../a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5',1,'glm']]], - ['highp_5fivec1',['highp_ivec1',['../a00273.html#ga7e02566f2bd2caa68e61be45a477c77e',1,'glm']]], - ['highp_5fivec2',['highp_ivec2',['../a00282.html#gaa18f6b80b41c214f10666948539c1f93',1,'glm']]], - ['highp_5fivec3',['highp_ivec3',['../a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18',1,'glm']]], - ['highp_5fivec4',['highp_ivec4',['../a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e',1,'glm']]], - ['highp_5fmat2',['highp_mat2',['../a00284.html#ga4d5a0055544a516237dcdace049b143d',1,'glm']]], - ['highp_5fmat2x2',['highp_mat2x2',['../a00284.html#ga2352ae43b284c9f71446674c0208c05d',1,'glm']]], - ['highp_5fmat2x3',['highp_mat2x3',['../a00284.html#ga7a0e3fe41512b0494e598f5c58722f19',1,'glm']]], - ['highp_5fmat2x4',['highp_mat2x4',['../a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f',1,'glm']]], - ['highp_5fmat3',['highp_mat3',['../a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e',1,'glm']]], - ['highp_5fmat3x2',['highp_mat3x2',['../a00284.html#ga1eda47a00027ec440eac05d63739c71b',1,'glm']]], - ['highp_5fmat3x3',['highp_mat3x3',['../a00284.html#ga2ea82e12f4d7afcfce8f59894d400230',1,'glm']]], - ['highp_5fmat3x4',['highp_mat3x4',['../a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7',1,'glm']]], - ['highp_5fmat4',['highp_mat4',['../a00284.html#gad72e13d669d039f12ae5afa23148adc1',1,'glm']]], - ['highp_5fmat4x2',['highp_mat4x2',['../a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5',1,'glm']]], - ['highp_5fmat4x3',['highp_mat4x3',['../a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38',1,'glm']]], - ['highp_5fmat4x4',['highp_mat4x4',['../a00284.html#ga58cc504be0e3b61c48bc91554a767b9f',1,'glm']]], - ['highp_5fquat',['highp_quat',['../a00253.html#gaa2fd8085774376310aeb80588e0eab6e',1,'glm']]], - ['highp_5fu16',['highp_u16',['../a00304.html#ga8e62c883d13f47015f3b70ed88751369',1,'glm']]], - ['highp_5fu16vec1',['highp_u16vec1',['../a00304.html#gad064202b4cf9a2972475c03de657cb39',1,'glm']]], - ['highp_5fu16vec2',['highp_u16vec2',['../a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159',1,'glm']]], - ['highp_5fu16vec3',['highp_u16vec3',['../a00304.html#gacfd806749008f0ade6ac4bb9dd91082f',1,'glm']]], - ['highp_5fu16vec4',['highp_u16vec4',['../a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61',1,'glm']]], - ['highp_5fu32',['highp_u32',['../a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf',1,'glm']]], - ['highp_5fu32vec1',['highp_u32vec1',['../a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3',1,'glm']]], - ['highp_5fu32vec2',['highp_u32vec2',['../a00304.html#ga2f256334f83fba4c2d219e414b51df6c',1,'glm']]], - ['highp_5fu32vec3',['highp_u32vec3',['../a00304.html#gaf14d7a50502464e7cbfa074f24684cb1',1,'glm']]], - ['highp_5fu32vec4',['highp_u32vec4',['../a00304.html#ga22166f0da65038b447f3c5e534fff1c2',1,'glm']]], - ['highp_5fu64',['highp_u64',['../a00304.html#ga0c181fdf06a309691999926b6690c969',1,'glm']]], - ['highp_5fu64vec1',['highp_u64vec1',['../a00304.html#gae4fe774744852c4d7d069be2e05257ab',1,'glm']]], - ['highp_5fu64vec2',['highp_u64vec2',['../a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d',1,'glm']]], - ['highp_5fu64vec3',['highp_u64vec3',['../a00304.html#ga41bdabea6e589029659331ba47eb78c1',1,'glm']]], - ['highp_5fu64vec4',['highp_u64vec4',['../a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325',1,'glm']]], - ['highp_5fu8',['highp_u8',['../a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c',1,'glm']]], - ['highp_5fu8vec1',['highp_u8vec1',['../a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2',1,'glm']]], - ['highp_5fu8vec2',['highp_u8vec2',['../a00304.html#ga27585b7c3ab300059f11fcba465f6fd2',1,'glm']]], - ['highp_5fu8vec3',['highp_u8vec3',['../a00304.html#ga45721c13b956eb691cbd6c6c1429167a',1,'glm']]], - ['highp_5fu8vec4',['highp_u8vec4',['../a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060',1,'glm']]], - ['highp_5fuint16',['highp_uint16',['../a00304.html#ga746dc6da204f5622e395f492997dbf57',1,'glm']]], - ['highp_5fuint16_5ft',['highp_uint16_t',['../a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7',1,'glm']]], - ['highp_5fuint32',['highp_uint32',['../a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3',1,'glm']]], - ['highp_5fuint32_5ft',['highp_uint32_t',['../a00304.html#gae978599c9711ac263ba732d4ac225b0e',1,'glm']]], - ['highp_5fuint64',['highp_uint64',['../a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce',1,'glm']]], - ['highp_5fuint64_5ft',['highp_uint64_t',['../a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08',1,'glm']]], - ['highp_5fuint8',['highp_uint8',['../a00304.html#ga97432f9979e73e66567361fd01e4cffb',1,'glm']]], - ['highp_5fuint8_5ft',['highp_uint8_t',['../a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5',1,'glm']]], - ['highp_5fumat2',['highp_umat2',['../a00294.html#ga42cbce64c4c1cd121b8437daa6e110de',1,'glm']]], - ['highp_5fumat2x2',['highp_umat2x2',['../a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28',1,'glm']]], - ['highp_5fumat2x3',['highp_umat2x3',['../a00294.html#ga90718c7128320b24b52f9ea70e643ad4',1,'glm']]], - ['highp_5fumat2x4',['highp_umat2x4',['../a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b',1,'glm']]], - ['highp_5fumat3',['highp_umat3',['../a00294.html#gaa1143120339b7d2d469d327662e8a172',1,'glm']]], - ['highp_5fumat3x2',['highp_umat3x2',['../a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4',1,'glm']]], - ['highp_5fumat3x3',['highp_umat3x3',['../a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2',1,'glm']]], - ['highp_5fumat3x4',['highp_umat3x4',['../a00294.html#ga25ee15c323924f2d0fe9896d329e5086',1,'glm']]], - ['highp_5fumat4',['highp_umat4',['../a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9',1,'glm']]], - ['highp_5fumat4x2',['highp_umat4x2',['../a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801',1,'glm']]], - ['highp_5fumat4x3',['highp_umat4x3',['../a00294.html#ga45a8163d02c43216252056b0c120f3a5',1,'glm']]], - ['highp_5fumat4x4',['highp_umat4x4',['../a00294.html#ga6a56cbb769aed334c95241664415f9ba',1,'glm']]], - ['highp_5fuvec1',['highp_uvec1',['../a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39',1,'glm']]], - ['highp_5fuvec2',['highp_uvec2',['../a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8',1,'glm']]], - ['highp_5fuvec3',['highp_uvec3',['../a00282.html#gaef61508dd40ec523416697982f9ceaae',1,'glm']]], - ['highp_5fuvec4',['highp_uvec4',['../a00282.html#gaeebd7dd9f3e678691f8620241e5f9221',1,'glm']]], - ['highp_5fvec1',['highp_vec1',['../a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9',1,'glm']]], - ['highp_5fvec2',['highp_vec2',['../a00282.html#gaa92c1954d71b1e7914874bd787b43d1c',1,'glm']]], - ['highp_5fvec3',['highp_vec3',['../a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9',1,'glm']]], - ['highp_5fvec4',['highp_vec4',['../a00282.html#gad281decae52948b82feb3a9db8f63a7b',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_5.html b/tests/OpenGL/package/glm/doc/api/search/typedefs_5.html deleted file mode 100644 index 14adc8ed..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_5.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_5.js b/tests/OpenGL/package/glm/doc/api/search/typedefs_5.js deleted file mode 100644 index 39c29f28..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_5.js +++ /dev/null @@ -1,61 +0,0 @@ -var searchData= -[ - ['i16',['i16',['../a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699',1,'glm']]], - ['i16vec1',['i16vec1',['../a00304.html#gafe730798732aa7b0647096a004db1b1c',1,'glm']]], - ['i16vec2',['i16vec2',['../a00304.html#ga2996630ba7b10535af8e065cf326f761',1,'glm']]], - ['i16vec3',['i16vec3',['../a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b',1,'glm']]], - ['i16vec4',['i16vec4',['../a00304.html#ga550831bfc26d1e0101c1cb3d79938c06',1,'glm']]], - ['i32',['i32',['../a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb',1,'glm']]], - ['i32vec1',['i32vec1',['../a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf',1,'glm']]], - ['i32vec2',['i32vec2',['../a00304.html#ga8b44026374982dcd1e52d22bac99247e',1,'glm']]], - ['i32vec3',['i32vec3',['../a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e',1,'glm']]], - ['i32vec4',['i32vec4',['../a00304.html#ga866a05905c49912309ed1fa5f5980e61',1,'glm']]], - ['i64',['i64',['../a00304.html#gadb997e409103d4da18abd837e636a496',1,'glm']]], - ['i64vec1',['i64vec1',['../a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50',1,'glm']]], - ['i64vec2',['i64vec2',['../a00304.html#ga48310188e1d0c616bf8d78c92447523b',1,'glm']]], - ['i64vec3',['i64vec3',['../a00304.html#ga667948cfe6fb3d6606c750729ec49f77',1,'glm']]], - ['i64vec4',['i64vec4',['../a00304.html#gaa4e31c3d9de067029efeb161a44b0232',1,'glm']]], - ['i8',['i8',['../a00304.html#ga302ec977b0c0c3ea245b6c9275495355',1,'glm']]], - ['i8vec1',['i8vec1',['../a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b',1,'glm']]], - ['i8vec2',['i8vec2',['../a00304.html#gad06935764d78f43f9d542c784c2212ec',1,'glm']]], - ['i8vec3',['i8vec3',['../a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e',1,'glm']]], - ['i8vec4',['i8vec4',['../a00304.html#ga4177a44206121dabc8c4ff1c0f544574',1,'glm']]], - ['imat2',['imat2',['../a00294.html#gaabe04f9948d4a213bb1c20137de03e01',1,'glm']]], - ['imat2x2',['imat2x2',['../a00294.html#gaa4732a240522ad9bc28144fda2fc14ec',1,'glm']]], - ['imat2x3',['imat2x3',['../a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605',1,'glm']]], - ['imat2x4',['imat2x4',['../a00294.html#ga9d8faafdca42583d67e792dd038fc668',1,'glm']]], - ['imat3',['imat3',['../a00294.html#ga038f68437155ffa3c2583a15264a8195',1,'glm']]], - ['imat3x2',['imat3x2',['../a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f',1,'glm']]], - ['imat3x3',['imat3x3',['../a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4',1,'glm']]], - ['imat3x4',['imat3x4',['../a00294.html#ga6e9ce23496d8b08dfc302d4039694b58',1,'glm']]], - ['imat4',['imat4',['../a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb',1,'glm']]], - ['imat4x2',['imat4x2',['../a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa',1,'glm']]], - ['imat4x3',['imat4x3',['../a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5',1,'glm']]], - ['imat4x4',['imat4x4',['../a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b',1,'glm']]], - ['int1',['int1',['../a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3',1,'glm']]], - ['int16',['int16',['../a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9',1,'glm']]], - ['int16_5ft',['int16_t',['../a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede',1,'glm']]], - ['int1x1',['int1x1',['../a00315.html#ga056ffe02d3a45af626f8e62221881c7a',1,'glm']]], - ['int2',['int2',['../a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a',1,'glm']]], - ['int2x2',['int2x2',['../a00315.html#ga4e5ce477c15836b21e3c42daac68554d',1,'glm']]], - ['int2x3',['int2x3',['../a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3',1,'glm']]], - ['int2x4',['int2x4',['../a00315.html#ga2749d59a7fddbac44f34ba78e57ef807',1,'glm']]], - ['int3',['int3',['../a00315.html#ga909c38a425f215a50c847145d7da09f0',1,'glm']]], - ['int32',['int32',['../a00260.html#ga43d43196463bde49cb067f5c20ab8481',1,'glm']]], - ['int32_5ft',['int32_t',['../a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710',1,'glm']]], - ['int3x2',['int3x2',['../a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8',1,'glm']]], - ['int3x3',['int3x3',['../a00315.html#ga15c9649286f0bf431bdf9b3509580048',1,'glm']]], - ['int3x4',['int3x4',['../a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f',1,'glm']]], - ['int4',['int4',['../a00315.html#gaecdef18c819c205aeee9f94dc93de56a',1,'glm']]], - ['int4x2',['int4x2',['../a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1',1,'glm']]], - ['int4x3',['int4x3',['../a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d',1,'glm']]], - ['int4x4',['int4x4',['../a00315.html#ga04dee1552424198b8f58b377c2ee00d8',1,'glm']]], - ['int64',['int64',['../a00260.html#gaff5189f97f9e842d9636a0f240001b2e',1,'glm']]], - ['int64_5ft',['int64_t',['../a00304.html#ga322a7d7d2c2c68994dc872a33de63c61',1,'glm']]], - ['int8',['int8',['../a00260.html#ga1b956fe1df85f3c132b21edb4e116458',1,'glm']]], - ['int8_5ft',['int8_t',['../a00304.html#ga4bf09d8838a86866b39ee6e109341645',1,'glm']]], - ['ivec1',['ivec1',['../a00272.html#gaedd0562c2e77714929d7723a7e2e0dba',1,'glm']]], - ['ivec2',['ivec2',['../a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560',1,'glm']]], - ['ivec3',['ivec3',['../a00281.html#gad0d784d8eee201aca362484d2daee46c',1,'glm']]], - ['ivec4',['ivec4',['../a00281.html#ga5abb4603dae0ce58c595e66d9123d812',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_6.html b/tests/OpenGL/package/glm/doc/api/search/typedefs_6.html deleted file mode 100644 index 742e92b5..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_6.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_6.js b/tests/OpenGL/package/glm/doc/api/search/typedefs_6.js deleted file mode 100644 index f6a4f567..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_6.js +++ /dev/null @@ -1,188 +0,0 @@ -var searchData= -[ - ['lowp_5fbvec1',['lowp_bvec1',['../a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9',1,'glm']]], - ['lowp_5fbvec2',['lowp_bvec2',['../a00282.html#ga5a5452140650988b94d5716e4d872465',1,'glm']]], - ['lowp_5fbvec3',['lowp_bvec3',['../a00282.html#ga79e0922a977662a8fd39d7829be3908b',1,'glm']]], - ['lowp_5fbvec4',['lowp_bvec4',['../a00282.html#ga15ac87724048ab7169bb5d3572939dd3',1,'glm']]], - ['lowp_5fddualquat',['lowp_ddualquat',['../a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a',1,'glm']]], - ['lowp_5fdmat2',['lowp_dmat2',['../a00284.html#gad8e2727a6e7aa68280245bb0022118e1',1,'glm']]], - ['lowp_5fdmat2x2',['lowp_dmat2x2',['../a00284.html#gac61b94f5d9775f83f321bac899322fe2',1,'glm']]], - ['lowp_5fdmat2x3',['lowp_dmat2x3',['../a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af',1,'glm']]], - ['lowp_5fdmat2x4',['lowp_dmat2x4',['../a00284.html#ga97507a31ecee8609887d0f23bbde92c7',1,'glm']]], - ['lowp_5fdmat3',['lowp_dmat3',['../a00284.html#ga0cab80beee64a5f8d2ae4e823983063a',1,'glm']]], - ['lowp_5fdmat3x2',['lowp_dmat3x2',['../a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b',1,'glm']]], - ['lowp_5fdmat3x3',['lowp_dmat3x3',['../a00284.html#gac017848a9df570f60916a21a297b1e8e',1,'glm']]], - ['lowp_5fdmat3x4',['lowp_dmat3x4',['../a00284.html#ga93add35d2a44c5830978b827e8c295e8',1,'glm']]], - ['lowp_5fdmat4',['lowp_dmat4',['../a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd',1,'glm']]], - ['lowp_5fdmat4x2',['lowp_dmat4x2',['../a00284.html#ga382dc5295cead78766239a8457abfa98',1,'glm']]], - ['lowp_5fdmat4x3',['lowp_dmat4x3',['../a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e',1,'glm']]], - ['lowp_5fdmat4x4',['lowp_dmat4x4',['../a00284.html#ga5b0413198b7e9f061f7534a221c9dac9',1,'glm']]], - ['lowp_5fdquat',['lowp_dquat',['../a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c',1,'glm']]], - ['lowp_5fdualquat',['lowp_dualquat',['../a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa',1,'glm']]], - ['lowp_5fdvec1',['lowp_dvec1',['../a00269.html#gaf906eb86b6e96c35138d0e4928e1435a',1,'glm']]], - ['lowp_5fdvec2',['lowp_dvec2',['../a00282.html#ga108086730d086b7f6f7a033955dfb9c3',1,'glm']]], - ['lowp_5fdvec3',['lowp_dvec3',['../a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2',1,'glm']]], - ['lowp_5fdvec4',['lowp_dvec4',['../a00282.html#ga0b4432cb8d910e406576d10d802e190d',1,'glm']]], - ['lowp_5ff32',['lowp_f32',['../a00304.html#gaeea53879fc327293cf3352a409b7867b',1,'glm']]], - ['lowp_5ff32mat2',['lowp_f32mat2',['../a00304.html#ga52409bc6d4a2ce3421526c069220d685',1,'glm']]], - ['lowp_5ff32mat2x2',['lowp_f32mat2x2',['../a00304.html#ga1d091b6abfba1772450e1745a06525bc',1,'glm']]], - ['lowp_5ff32mat2x3',['lowp_f32mat2x3',['../a00304.html#ga961ccb34cd1a5654c772c8709e001dc5',1,'glm']]], - ['lowp_5ff32mat2x4',['lowp_f32mat2x4',['../a00304.html#gacc6bf0209dda0c7c14851a646071c974',1,'glm']]], - ['lowp_5ff32mat3',['lowp_f32mat3',['../a00304.html#ga4187f89f196505b40e63f516139511e5',1,'glm']]], - ['lowp_5ff32mat3x2',['lowp_f32mat3x2',['../a00304.html#gac53f9d7ab04eace67adad026092fb1e8',1,'glm']]], - ['lowp_5ff32mat3x3',['lowp_f32mat3x3',['../a00304.html#ga841211b641cff1fcf861bdb14e5e4abc',1,'glm']]], - ['lowp_5ff32mat3x4',['lowp_f32mat3x4',['../a00304.html#ga21b1b22dec013a72656e3644baf8a1e1',1,'glm']]], - ['lowp_5ff32mat4',['lowp_f32mat4',['../a00304.html#ga766aed2871e6173a81011a877f398f04',1,'glm']]], - ['lowp_5ff32mat4x2',['lowp_f32mat4x2',['../a00304.html#gae6f3fcb702a666de07650c149cfa845a',1,'glm']]], - ['lowp_5ff32mat4x3',['lowp_f32mat4x3',['../a00304.html#gac21eda58a1475449a5709b412ebd776c',1,'glm']]], - ['lowp_5ff32mat4x4',['lowp_f32mat4x4',['../a00304.html#ga4143d129898f91545948c46859adce44',1,'glm']]], - ['lowp_5ff32quat',['lowp_f32quat',['../a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347',1,'glm']]], - ['lowp_5ff32vec1',['lowp_f32vec1',['../a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e',1,'glm']]], - ['lowp_5ff32vec2',['lowp_f32vec2',['../a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0',1,'glm']]], - ['lowp_5ff32vec3',['lowp_f32vec3',['../a00304.html#gaf739a2cd7b81783a43148b53e40d983b',1,'glm']]], - ['lowp_5ff32vec4',['lowp_f32vec4',['../a00304.html#ga4e2e1debe022074ab224c9faf856d374',1,'glm']]], - ['lowp_5ff64',['lowp_f64',['../a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679',1,'glm']]], - ['lowp_5ff64mat2',['lowp_f64mat2',['../a00304.html#gafc730f6b4242763b0eda0ffa25150292',1,'glm']]], - ['lowp_5ff64mat2x2',['lowp_f64mat2x2',['../a00304.html#ga771fda9109933db34f808d92b9b84d7e',1,'glm']]], - ['lowp_5ff64mat2x3',['lowp_f64mat2x3',['../a00304.html#ga39e90adcffe33264bd608fa9c6bd184b',1,'glm']]], - ['lowp_5ff64mat2x4',['lowp_f64mat2x4',['../a00304.html#ga50265a202fbfe0a25fc70066c31d9336',1,'glm']]], - ['lowp_5ff64mat3',['lowp_f64mat3',['../a00304.html#ga58119a41d143ebaea0df70fe882e8a40',1,'glm']]], - ['lowp_5ff64mat3x2',['lowp_f64mat3x2',['../a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad',1,'glm']]], - ['lowp_5ff64mat3x3',['lowp_f64mat3x3',['../a00304.html#gac8f8a12ee03105ef8861dc652434e3b7',1,'glm']]], - ['lowp_5ff64mat3x4',['lowp_f64mat3x4',['../a00304.html#gade8d1edfb23996ab6c622e65e3893271',1,'glm']]], - ['lowp_5ff64mat4',['lowp_f64mat4',['../a00304.html#ga7451266e67794bd1125163502bc4a570',1,'glm']]], - ['lowp_5ff64mat4x2',['lowp_f64mat4x2',['../a00304.html#gab0cecb80fd106bc369b9e46a165815ce',1,'glm']]], - ['lowp_5ff64mat4x3',['lowp_f64mat4x3',['../a00304.html#gae731613b25db3a5ef5a05d21e57a57d3',1,'glm']]], - ['lowp_5ff64mat4x4',['lowp_f64mat4x4',['../a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95',1,'glm']]], - ['lowp_5ff64quat',['lowp_f64quat',['../a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae',1,'glm']]], - ['lowp_5ff64vec1',['lowp_f64vec1',['../a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b',1,'glm']]], - ['lowp_5ff64vec2',['lowp_f64vec2',['../a00304.html#ga4e641a54d70c81eabf56c25c966d04bd',1,'glm']]], - ['lowp_5ff64vec3',['lowp_f64vec3',['../a00304.html#gae7a4711107b7d078fc5f03ce2227b90b',1,'glm']]], - ['lowp_5ff64vec4',['lowp_f64vec4',['../a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4',1,'glm']]], - ['lowp_5ffdualquat',['lowp_fdualquat',['../a00317.html#gaa38f671be25a7f3b136a452a8bb42860',1,'glm']]], - ['lowp_5ffloat32',['lowp_float32',['../a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8',1,'glm']]], - ['lowp_5ffloat32_5ft',['lowp_float32_t',['../a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b',1,'glm']]], - ['lowp_5ffloat64',['lowp_float64',['../a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f',1,'glm']]], - ['lowp_5ffloat64_5ft',['lowp_float64_t',['../a00304.html#ga7286a37076a09da140df18bfa75d4e38',1,'glm']]], - ['lowp_5ffmat2',['lowp_fmat2',['../a00304.html#ga5bba0ce31210e274f73efacd3364c03f',1,'glm']]], - ['lowp_5ffmat2x2',['lowp_fmat2x2',['../a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066',1,'glm']]], - ['lowp_5ffmat2x3',['lowp_fmat2x3',['../a00304.html#ga71cdb53801ed4c3aadb3603c04723210',1,'glm']]], - ['lowp_5ffmat2x4',['lowp_fmat2x4',['../a00304.html#gaab217601c74974a84acbca428123ecf7',1,'glm']]], - ['lowp_5ffmat3',['lowp_fmat3',['../a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b',1,'glm']]], - ['lowp_5ffmat3x2',['lowp_fmat3x2',['../a00304.html#ga49b98e7d71804af45d86886a489e633c',1,'glm']]], - ['lowp_5ffmat3x3',['lowp_fmat3x3',['../a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4',1,'glm']]], - ['lowp_5ffmat3x4',['lowp_fmat3x4',['../a00304.html#ga28733aec7288191b314d42154fd0b690',1,'glm']]], - ['lowp_5ffmat4',['lowp_fmat4',['../a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f',1,'glm']]], - ['lowp_5ffmat4x2',['lowp_fmat4x2',['../a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c',1,'glm']]], - ['lowp_5ffmat4x3',['lowp_fmat4x3',['../a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444',1,'glm']]], - ['lowp_5ffmat4x4',['lowp_fmat4x4',['../a00304.html#gac2f5263708ac847b361a9841e74ddf9f',1,'glm']]], - ['lowp_5ffvec1',['lowp_fvec1',['../a00304.html#ga346b2336fff168a7e0df1583aae3e5a5',1,'glm']]], - ['lowp_5ffvec2',['lowp_fvec2',['../a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d',1,'glm']]], - ['lowp_5ffvec3',['lowp_fvec3',['../a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa',1,'glm']]], - ['lowp_5ffvec4',['lowp_fvec4',['../a00304.html#ga755484ffbe39ae3db2875953ed04e7b7',1,'glm']]], - ['lowp_5fi16',['lowp_i16',['../a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7',1,'glm']]], - ['lowp_5fi16vec1',['lowp_i16vec1',['../a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6',1,'glm']]], - ['lowp_5fi16vec2',['lowp_i16vec2',['../a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b',1,'glm']]], - ['lowp_5fi16vec3',['lowp_i16vec3',['../a00304.html#gab69ef9cbc2a9214bf5596c528c801b72',1,'glm']]], - ['lowp_5fi16vec4',['lowp_i16vec4',['../a00304.html#ga1d47d94d17c2406abdd1f087a816e387',1,'glm']]], - ['lowp_5fi32',['lowp_i32',['../a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac',1,'glm']]], - ['lowp_5fi32vec1',['lowp_i32vec1',['../a00304.html#gae31ac3608cf643ceffd6554874bec4a0',1,'glm']]], - ['lowp_5fi32vec2',['lowp_i32vec2',['../a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd',1,'glm']]], - ['lowp_5fi32vec3',['lowp_i32vec3',['../a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d',1,'glm']]], - ['lowp_5fi32vec4',['lowp_i32vec4',['../a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08',1,'glm']]], - ['lowp_5fi64',['lowp_i64',['../a00304.html#ga354736e0c645099cd44c42fb2f87c2b8',1,'glm']]], - ['lowp_5fi64vec1',['lowp_i64vec1',['../a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437',1,'glm']]], - ['lowp_5fi64vec2',['lowp_i64vec2',['../a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c',1,'glm']]], - ['lowp_5fi64vec3',['lowp_i64vec3',['../a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c',1,'glm']]], - ['lowp_5fi64vec4',['lowp_i64vec4',['../a00304.html#gabb4229a4c1488bf063eed0c45355bb9c',1,'glm']]], - ['lowp_5fi8',['lowp_i8',['../a00304.html#ga552a6bde5e75984efb0f863278da2e54',1,'glm']]], - ['lowp_5fi8vec1',['lowp_i8vec1',['../a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c',1,'glm']]], - ['lowp_5fi8vec2',['lowp_i8vec2',['../a00304.html#gac03e5099d27eeaa74b6016ea435a1df2',1,'glm']]], - ['lowp_5fi8vec3',['lowp_i8vec3',['../a00304.html#gae2f43ace6b5b33ab49516d9e40af1845',1,'glm']]], - ['lowp_5fi8vec4',['lowp_i8vec4',['../a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5',1,'glm']]], - ['lowp_5fimat2',['lowp_imat2',['../a00294.html#gaa0bff0be804142bb16d441aec0a7962e',1,'glm']]], - ['lowp_5fimat2x2',['lowp_imat2x2',['../a00294.html#ga92b95b679975d408645547ab45a8dcd8',1,'glm']]], - ['lowp_5fimat2x3',['lowp_imat2x3',['../a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65',1,'glm']]], - ['lowp_5fimat2x4',['lowp_imat2x4',['../a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e',1,'glm']]], - ['lowp_5fimat3',['lowp_imat3',['../a00294.html#ga69bfe668f4170379fc1f35d82b060c43',1,'glm']]], - ['lowp_5fimat3x2',['lowp_imat3x2',['../a00294.html#ga33db8f27491d30906cd37c0d86b3f432',1,'glm']]], - ['lowp_5fimat3x3',['lowp_imat3x3',['../a00294.html#ga664f061df00020048c3f8530329ace45',1,'glm']]], - ['lowp_5fimat3x4',['lowp_imat3x4',['../a00294.html#ga9273faab33623d944af4080befbb2c80',1,'glm']]], - ['lowp_5fimat4',['lowp_imat4',['../a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c',1,'glm']]], - ['lowp_5fimat4x2',['lowp_imat4x2',['../a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09',1,'glm']]], - ['lowp_5fimat4x3',['lowp_imat4x3',['../a00294.html#ga8f40483a3ae634ead8ad22272c543a33',1,'glm']]], - ['lowp_5fimat4x4',['lowp_imat4x4',['../a00294.html#gaf65677e53ac8e31a107399340d5e2451',1,'glm']]], - ['lowp_5fint16',['lowp_int16',['../a00304.html#ga698e36b01167fc0f037889334dce8def',1,'glm']]], - ['lowp_5fint16_5ft',['lowp_int16_t',['../a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a',1,'glm']]], - ['lowp_5fint32',['lowp_int32',['../a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02',1,'glm']]], - ['lowp_5fint32_5ft',['lowp_int32_t',['../a00304.html#ga0350631d35ff800e6133ac6243b13cbc',1,'glm']]], - ['lowp_5fint64',['lowp_int64',['../a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c',1,'glm']]], - ['lowp_5fint64_5ft',['lowp_int64_t',['../a00304.html#gaebf341fc4a5be233f7dde962c2e33847',1,'glm']]], - ['lowp_5fint8',['lowp_int8',['../a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6',1,'glm']]], - ['lowp_5fint8_5ft',['lowp_int8_t',['../a00304.html#ga119c41d73fe9977358174eb3ac1035a3',1,'glm']]], - ['lowp_5fivec1',['lowp_ivec1',['../a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc',1,'glm']]], - ['lowp_5fivec2',['lowp_ivec2',['../a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0',1,'glm']]], - ['lowp_5fivec3',['lowp_ivec3',['../a00282.html#gac1a86a75b3c68ebb704d7094043669d6',1,'glm']]], - ['lowp_5fivec4',['lowp_ivec4',['../a00282.html#ga27fc23da61859cd6356326c5f1c796de',1,'glm']]], - ['lowp_5fmat2',['lowp_mat2',['../a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a',1,'glm']]], - ['lowp_5fmat2x2',['lowp_mat2x2',['../a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694',1,'glm']]], - ['lowp_5fmat2x3',['lowp_mat2x3',['../a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb',1,'glm']]], - ['lowp_5fmat2x4',['lowp_mat2x4',['../a00284.html#gade27f8324a16626cbce5d3e7da66b070',1,'glm']]], - ['lowp_5fmat3',['lowp_mat3',['../a00284.html#ga6271ebc85ed778ccc15458c3d86fc854',1,'glm']]], - ['lowp_5fmat3x2',['lowp_mat3x2',['../a00284.html#gaabf6cf90fd31efe25c94965507e98390',1,'glm']]], - ['lowp_5fmat3x3',['lowp_mat3x3',['../a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84',1,'glm']]], - ['lowp_5fmat3x4',['lowp_mat3x4',['../a00284.html#gac5fc6786688eff02904ca5e7d6960092',1,'glm']]], - ['lowp_5fmat4',['lowp_mat4',['../a00284.html#ga2dedee030500865267cd5851c00c139d',1,'glm']]], - ['lowp_5fmat4x2',['lowp_mat4x2',['../a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21',1,'glm']]], - ['lowp_5fmat4x3',['lowp_mat4x3',['../a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77',1,'glm']]], - ['lowp_5fmat4x4',['lowp_mat4x4',['../a00284.html#ga686468a9a815bd4db8cddae42a6d6b87',1,'glm']]], - ['lowp_5fquat',['lowp_quat',['../a00253.html#gade62c5316c1c11a79c34c00c189558eb',1,'glm']]], - ['lowp_5fu16',['lowp_u16',['../a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126',1,'glm']]], - ['lowp_5fu16vec1',['lowp_u16vec1',['../a00304.html#gaa6aab4ee7189b86716f5d7015d43021d',1,'glm']]], - ['lowp_5fu16vec2',['lowp_u16vec2',['../a00304.html#ga2a7d997da9ac29cb931e35bd399f58df',1,'glm']]], - ['lowp_5fu16vec3',['lowp_u16vec3',['../a00304.html#gac0253db6c3d3bae1f591676307a9dd8c',1,'glm']]], - ['lowp_5fu16vec4',['lowp_u16vec4',['../a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1',1,'glm']]], - ['lowp_5fu32',['lowp_u32',['../a00304.html#ga4f072ada9552e1e480bbb3b1acde5250',1,'glm']]], - ['lowp_5fu32vec1',['lowp_u32vec1',['../a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4',1,'glm']]], - ['lowp_5fu32vec2',['lowp_u32vec2',['../a00304.html#gaf7e286e81347011e257ee779524e73b9',1,'glm']]], - ['lowp_5fu32vec3',['lowp_u32vec3',['../a00304.html#gad3ad390560a671b1f676fbf03cd3aa15',1,'glm']]], - ['lowp_5fu32vec4',['lowp_u32vec4',['../a00304.html#ga4502885718742aa238c36a312c3f3f20',1,'glm']]], - ['lowp_5fu64',['lowp_u64',['../a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed',1,'glm']]], - ['lowp_5fu64vec1',['lowp_u64vec1',['../a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6',1,'glm']]], - ['lowp_5fu64vec2',['lowp_u64vec2',['../a00304.html#ga581485db4ba6ddb501505ee711fd8e42',1,'glm']]], - ['lowp_5fu64vec3',['lowp_u64vec3',['../a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1',1,'glm']]], - ['lowp_5fu64vec4',['lowp_u64vec4',['../a00304.html#ga6fccc89c34045c86339f6fa781ce96de',1,'glm']]], - ['lowp_5fu8',['lowp_u8',['../a00304.html#ga1b09f03da7ac43055c68a349d5445083',1,'glm']]], - ['lowp_5fu8vec1',['lowp_u8vec1',['../a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec',1,'glm']]], - ['lowp_5fu8vec2',['lowp_u8vec2',['../a00304.html#gae6f63fa38635431e51a8f2602f15c566',1,'glm']]], - ['lowp_5fu8vec3',['lowp_u8vec3',['../a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd',1,'glm']]], - ['lowp_5fu8vec4',['lowp_u8vec4',['../a00304.html#ga9910927f3a4d1addb3da6a82542a8287',1,'glm']]], - ['lowp_5fuint16',['lowp_uint16',['../a00304.html#gad68bfd9f881856fc863a6ebca0b67f78',1,'glm']]], - ['lowp_5fuint16_5ft',['lowp_uint16_t',['../a00304.html#ga91c4815f93177eb423362fd296a87e9f',1,'glm']]], - ['lowp_5fuint32',['lowp_uint32',['../a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b',1,'glm']]], - ['lowp_5fuint32_5ft',['lowp_uint32_t',['../a00304.html#gaf1b735b4b1145174f4e4167d13778f9b',1,'glm']]], - ['lowp_5fuint64',['lowp_uint64',['../a00304.html#gaa212b805736a759998e312cbdd550fae',1,'glm']]], - ['lowp_5fuint64_5ft',['lowp_uint64_t',['../a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153',1,'glm']]], - ['lowp_5fuint8',['lowp_uint8',['../a00304.html#gaf49470869e9be2c059629b250619804e',1,'glm']]], - ['lowp_5fuint8_5ft',['lowp_uint8_t',['../a00304.html#ga667b2ece2b258be898812dc2177995d1',1,'glm']]], - ['lowp_5fumat2',['lowp_umat2',['../a00294.html#gaf2fba702d990437fc88ff3f3a76846ee',1,'glm']]], - ['lowp_5fumat2x2',['lowp_umat2x2',['../a00294.html#ga7b2e9d89745f7175051284e54c81d81c',1,'glm']]], - ['lowp_5fumat2x3',['lowp_umat2x3',['../a00294.html#ga3072f90fd86f17a862e21589fbb14c0f',1,'glm']]], - ['lowp_5fumat2x4',['lowp_umat2x4',['../a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d',1,'glm']]], - ['lowp_5fumat3',['lowp_umat3',['../a00294.html#gaf1145f72bcdd590f5808c4bc170c2924',1,'glm']]], - ['lowp_5fumat3x2',['lowp_umat3x2',['../a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b',1,'glm']]], - ['lowp_5fumat3x3',['lowp_umat3x3',['../a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5',1,'glm']]], - ['lowp_5fumat3x4',['lowp_umat3x4',['../a00294.html#gaec3d624306bd59649f021864709d56b5',1,'glm']]], - ['lowp_5fumat4',['lowp_umat4',['../a00294.html#gac092c6105827bf9ea080db38074b78eb',1,'glm']]], - ['lowp_5fumat4x2',['lowp_umat4x2',['../a00294.html#ga7716c2b210d141846f1ac4e774adef5e',1,'glm']]], - ['lowp_5fumat4x3',['lowp_umat4x3',['../a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff',1,'glm']]], - ['lowp_5fumat4x4',['lowp_umat4x4',['../a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0',1,'glm']]], - ['lowp_5fuvec1',['lowp_uvec1',['../a00277.html#ga8bf3fc8a7863d140f48b29341c750402',1,'glm']]], - ['lowp_5fuvec2',['lowp_uvec2',['../a00282.html#ga752ee45136011301b64afd8c310c47a4',1,'glm']]], - ['lowp_5fuvec3',['lowp_uvec3',['../a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292',1,'glm']]], - ['lowp_5fuvec4',['lowp_uvec4',['../a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e',1,'glm']]], - ['lowp_5fvec1',['lowp_vec1',['../a00271.html#ga0a57630f03031706b1d26a7d70d9184c',1,'glm']]], - ['lowp_5fvec2',['lowp_vec2',['../a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9',1,'glm']]], - ['lowp_5fvec3',['lowp_vec3',['../a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79',1,'glm']]], - ['lowp_5fvec4',['lowp_vec4',['../a00282.html#gace3acb313c800552a9411953eb8b2ed7',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_7.html b/tests/OpenGL/package/glm/doc/api/search/typedefs_7.html deleted file mode 100644 index ad03564b..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_7.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_7.js b/tests/OpenGL/package/glm/doc/api/search/typedefs_7.js deleted file mode 100644 index 1df66ce9..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_7.js +++ /dev/null @@ -1,200 +0,0 @@ -var searchData= -[ - ['mat2',['mat2',['../a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba',1,'glm']]], - ['mat2x2',['mat2x2',['../a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb',1,'glm']]], - ['mat2x3',['mat2x3',['../a00283.html#ga493ab21243abe564b3f7d381e677d29a',1,'glm']]], - ['mat2x4',['mat2x4',['../a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40',1,'glm']]], - ['mat3',['mat3',['../a00283.html#gaefb0fc7a4960b782c18708bb6b655262',1,'glm']]], - ['mat3x2',['mat3x2',['../a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2',1,'glm']]], - ['mat3x3',['mat3x3',['../a00283.html#gab91887d7565059dac640e3a1921c914a',1,'glm']]], - ['mat3x4',['mat3x4',['../a00283.html#gaf991cad0b34f64e33af186326dbc4d66',1,'glm']]], - ['mat4',['mat4',['../a00283.html#ga0db98d836c5549d31cf64ecd043b7af7',1,'glm']]], - ['mat4x2',['mat4x2',['../a00283.html#gad941c947ad6cdd117a0e8554a4754983',1,'glm']]], - ['mat4x3',['mat4x3',['../a00283.html#gac7574544bb94777bdbd2eb224eb72fd0',1,'glm']]], - ['mat4x4',['mat4x4',['../a00283.html#gab2d35cc2655f44d60958d60a1de34e81',1,'glm']]], - ['mediump_5fbvec1',['mediump_bvec1',['../a00266.html#ga7b4ccb989ba179fa44f7b0879c782621',1,'glm']]], - ['mediump_5fbvec2',['mediump_bvec2',['../a00282.html#ga1e743764869efa9223c2bcefccedaddc',1,'glm']]], - ['mediump_5fbvec3',['mediump_bvec3',['../a00282.html#ga50c783c25082882ef00fe2e5cddba4aa',1,'glm']]], - ['mediump_5fbvec4',['mediump_bvec4',['../a00282.html#ga0be2c682258604a35004f088782a9645',1,'glm']]], - ['mediump_5fddualquat',['mediump_ddualquat',['../a00317.html#ga0fb11e48e2d16348ccb06a25213641b4',1,'glm']]], - ['mediump_5fdmat2',['mediump_dmat2',['../a00284.html#ga6205fd19be355600334edef6af0b27cb',1,'glm']]], - ['mediump_5fdmat2x2',['mediump_dmat2x2',['../a00284.html#ga51dc36a7719cb458fa5114831c20d64f',1,'glm']]], - ['mediump_5fdmat2x3',['mediump_dmat2x3',['../a00284.html#ga741e05adf1f12d5d913f67088db1009a',1,'glm']]], - ['mediump_5fdmat2x4',['mediump_dmat2x4',['../a00284.html#ga685bda24922d112786af385deb4deb43',1,'glm']]], - ['mediump_5fdmat3',['mediump_dmat3',['../a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2',1,'glm']]], - ['mediump_5fdmat3x2',['mediump_dmat3x2',['../a00284.html#ga2076157df85e49b8c021e03e46a376c1',1,'glm']]], - ['mediump_5fdmat3x3',['mediump_dmat3x3',['../a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6',1,'glm']]], - ['mediump_5fdmat3x4',['mediump_dmat3x4',['../a00284.html#ga3a132bd05675c2e46556f67cf738600b',1,'glm']]], - ['mediump_5fdmat4',['mediump_dmat4',['../a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378',1,'glm']]], - ['mediump_5fdmat4x2',['mediump_dmat4x2',['../a00284.html#gae220fa4c5a7b13ef2ab0420340de645c',1,'glm']]], - ['mediump_5fdmat4x3',['mediump_dmat4x3',['../a00284.html#ga43ef60e4d996db15c9c8f069a96ff763',1,'glm']]], - ['mediump_5fdmat4x4',['mediump_dmat4x4',['../a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3',1,'glm']]], - ['mediump_5fdquat',['mediump_dquat',['../a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14',1,'glm']]], - ['mediump_5fdualquat',['mediump_dualquat',['../a00317.html#gaa7aeb54c167712b38f2178a1be2360ad',1,'glm']]], - ['mediump_5fdvec1',['mediump_dvec1',['../a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd',1,'glm']]], - ['mediump_5fdvec2',['mediump_dvec2',['../a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3',1,'glm']]], - ['mediump_5fdvec3',['mediump_dvec3',['../a00282.html#ga61c3b1dff4ec7c878af80503141b9f37',1,'glm']]], - ['mediump_5fdvec4',['mediump_dvec4',['../a00282.html#ga23a8bca00914a51542bfea13a4778186',1,'glm']]], - ['mediump_5ff32',['mediump_f32',['../a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80',1,'glm']]], - ['mediump_5ff32mat2',['mediump_f32mat2',['../a00304.html#gaf9020c6176a75bc84828ab01ea7dac25',1,'glm']]], - ['mediump_5ff32mat2x2',['mediump_f32mat2x2',['../a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f',1,'glm']]], - ['mediump_5ff32mat2x3',['mediump_f32mat2x3',['../a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf',1,'glm']]], - ['mediump_5ff32mat2x4',['mediump_f32mat2x4',['../a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1',1,'glm']]], - ['mediump_5ff32mat3',['mediump_f32mat3',['../a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8',1,'glm']]], - ['mediump_5ff32mat3x2',['mediump_f32mat3x2',['../a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f',1,'glm']]], - ['mediump_5ff32mat3x3',['mediump_f32mat3x3',['../a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f',1,'glm']]], - ['mediump_5ff32mat3x4',['mediump_f32mat3x4',['../a00304.html#ga8df705d775b776f5ae6b39e2ab892899',1,'glm']]], - ['mediump_5ff32mat4',['mediump_f32mat4',['../a00304.html#ga4491baaebbc46a20f1cb5da985576bf4',1,'glm']]], - ['mediump_5ff32mat4x2',['mediump_f32mat4x2',['../a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f',1,'glm']]], - ['mediump_5ff32mat4x3',['mediump_f32mat4x3',['../a00304.html#gade108f16633cf95fa500b5b8c36c8b00',1,'glm']]], - ['mediump_5ff32mat4x4',['mediump_f32mat4x4',['../a00304.html#ga936e95b881ecd2d109459ca41913fa99',1,'glm']]], - ['mediump_5ff32quat',['mediump_f32quat',['../a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3',1,'glm']]], - ['mediump_5ff32vec1',['mediump_f32vec1',['../a00304.html#gabb33cab7d7c74cc14aa95455d0690865',1,'glm']]], - ['mediump_5ff32vec2',['mediump_f32vec2',['../a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b',1,'glm']]], - ['mediump_5ff32vec3',['mediump_f32vec3',['../a00304.html#ga062ffef2973bd8241df993c3b30b327c',1,'glm']]], - ['mediump_5ff32vec4',['mediump_f32vec4',['../a00304.html#gad80c84bcd5f585840faa6179f6fd446c',1,'glm']]], - ['mediump_5ff64',['mediump_f64',['../a00304.html#ga6d40381d78472553f878f66e443feeef',1,'glm']]], - ['mediump_5ff64mat2',['mediump_f64mat2',['../a00304.html#gac1281da5ded55047e8892b0e1f1ae965',1,'glm']]], - ['mediump_5ff64mat2x2',['mediump_f64mat2x2',['../a00304.html#ga4fd527644cccbca4cb205320eab026f3',1,'glm']]], - ['mediump_5ff64mat2x3',['mediump_f64mat2x3',['../a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54',1,'glm']]], - ['mediump_5ff64mat2x4',['mediump_f64mat2x4',['../a00304.html#gaf306dd69e53633636aee38cea79d4cb7',1,'glm']]], - ['mediump_5ff64mat3',['mediump_f64mat3',['../a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776',1,'glm']]], - ['mediump_5ff64mat3x2',['mediump_f64mat3x2',['../a00304.html#gacd926d36a72433f6cac51dd60fa13107',1,'glm']]], - ['mediump_5ff64mat3x3',['mediump_f64mat3x3',['../a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e',1,'glm']]], - ['mediump_5ff64mat3x4',['mediump_f64mat3x4',['../a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2',1,'glm']]], - ['mediump_5ff64mat4',['mediump_f64mat4',['../a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5',1,'glm']]], - ['mediump_5ff64mat4x2',['mediump_f64mat4x2',['../a00304.html#ga17d36f0ea22314117e1cec9594b33945',1,'glm']]], - ['mediump_5ff64mat4x3',['mediump_f64mat4x3',['../a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d',1,'glm']]], - ['mediump_5ff64mat4x4',['mediump_f64mat4x4',['../a00304.html#ga66edb8de17b9235029472f043ae107e9',1,'glm']]], - ['mediump_5ff64quat',['mediump_f64quat',['../a00304.html#ga5e52f485059ce6e3010c590b882602c9',1,'glm']]], - ['mediump_5ff64vec1',['mediump_f64vec1',['../a00304.html#gac30fdf8afa489400053275b6a3350127',1,'glm']]], - ['mediump_5ff64vec2',['mediump_f64vec2',['../a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b',1,'glm']]], - ['mediump_5ff64vec3',['mediump_f64vec3',['../a00304.html#ga461c4c7d0757404dd0dba931760b25cf',1,'glm']]], - ['mediump_5ff64vec4',['mediump_f64vec4',['../a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e',1,'glm']]], - ['mediump_5ffdualquat',['mediump_fdualquat',['../a00317.html#ga4a6b594ff7e81150d8143001367a9431',1,'glm']]], - ['mediump_5ffloat32',['mediump_float32',['../a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7',1,'glm']]], - ['mediump_5ffloat32_5ft',['mediump_float32_t',['../a00304.html#gae4dee61f8fe1caccec309fbed02faf12',1,'glm']]], - ['mediump_5ffloat64',['mediump_float64',['../a00304.html#gab83d8aae6e4f115e97a785e8574a115f',1,'glm']]], - ['mediump_5ffloat64_5ft',['mediump_float64_t',['../a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e',1,'glm']]], - ['mediump_5ffmat2',['mediump_fmat2',['../a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff',1,'glm']]], - ['mediump_5ffmat2x2',['mediump_fmat2x2',['../a00304.html#ga98a687c17b174ea316b5f397b64f44bc',1,'glm']]], - ['mediump_5ffmat2x3',['mediump_fmat2x3',['../a00304.html#gaa03f939d90d5ef157df957d93f0b9a64',1,'glm']]], - ['mediump_5ffmat2x4',['mediump_fmat2x4',['../a00304.html#ga35223623e9ccebd8a281873b71b7d213',1,'glm']]], - ['mediump_5ffmat3',['mediump_fmat3',['../a00304.html#ga80823dfad5dba98512c76af498343847',1,'glm']]], - ['mediump_5ffmat3x2',['mediump_fmat3x2',['../a00304.html#ga42569e5b92f8635cedeadb1457ee1467',1,'glm']]], - ['mediump_5ffmat3x3',['mediump_fmat3x3',['../a00304.html#gaa6f526388c74a66b3d52315a14d434ae',1,'glm']]], - ['mediump_5ffmat3x4',['mediump_fmat3x4',['../a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4',1,'glm']]], - ['mediump_5ffmat4',['mediump_fmat4',['../a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9',1,'glm']]], - ['mediump_5ffmat4x2',['mediump_fmat4x2',['../a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf',1,'glm']]], - ['mediump_5ffmat4x3',['mediump_fmat4x3',['../a00304.html#ga41ad497f7eae211556aefd783cb02b90',1,'glm']]], - ['mediump_5ffmat4x4',['mediump_fmat4x4',['../a00304.html#ga22e27beead07bff4d5ce9d6065a57279',1,'glm']]], - ['mediump_5ffvec1',['mediump_fvec1',['../a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b',1,'glm']]], - ['mediump_5ffvec2',['mediump_fvec2',['../a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6',1,'glm']]], - ['mediump_5ffvec3',['mediump_fvec3',['../a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07',1,'glm']]], - ['mediump_5ffvec4',['mediump_fvec4',['../a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb',1,'glm']]], - ['mediump_5fi16',['mediump_i16',['../a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a',1,'glm']]], - ['mediump_5fi16vec1',['mediump_i16vec1',['../a00304.html#gacc44265ed440bf5e6e566782570de842',1,'glm']]], - ['mediump_5fi16vec2',['mediump_i16vec2',['../a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88',1,'glm']]], - ['mediump_5fi16vec3',['mediump_i16vec3',['../a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633',1,'glm']]], - ['mediump_5fi16vec4',['mediump_i16vec4',['../a00304.html#gaf52982bb23e3a3772649b2c5bb84b107',1,'glm']]], - ['mediump_5fi32',['mediump_i32',['../a00304.html#gaf5e94bf2a20af7601787c154751dc2e1',1,'glm']]], - ['mediump_5fi32vec1',['mediump_i32vec1',['../a00304.html#ga46a57f71e430637559097a732b550a7e',1,'glm']]], - ['mediump_5fi32vec2',['mediump_i32vec2',['../a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219',1,'glm']]], - ['mediump_5fi32vec3',['mediump_i32vec3',['../a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a',1,'glm']]], - ['mediump_5fi32vec4',['mediump_i32vec4',['../a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8',1,'glm']]], - ['mediump_5fi64',['mediump_i64',['../a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f',1,'glm']]], - ['mediump_5fi64vec1',['mediump_i64vec1',['../a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e',1,'glm']]], - ['mediump_5fi64vec2',['mediump_i64vec2',['../a00304.html#ga2c94aeae3457325944ca1059b0b68330',1,'glm']]], - ['mediump_5fi64vec3',['mediump_i64vec3',['../a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e',1,'glm']]], - ['mediump_5fi64vec4',['mediump_i64vec4',['../a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1',1,'glm']]], - ['mediump_5fi8',['mediump_i8',['../a00304.html#gacf1ded173e1e2d049c511d095b259e21',1,'glm']]], - ['mediump_5fi8vec1',['mediump_i8vec1',['../a00304.html#ga85e8893f4ae3630065690a9000c0c483',1,'glm']]], - ['mediump_5fi8vec2',['mediump_i8vec2',['../a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67',1,'glm']]], - ['mediump_5fi8vec3',['mediump_i8vec3',['../a00304.html#ga6dd1c1618378c6f94d522a61c28773c9',1,'glm']]], - ['mediump_5fi8vec4',['mediump_i8vec4',['../a00304.html#gac7bb04fb857ef7b520e49f6c381432be',1,'glm']]], - ['mediump_5fimat2',['mediump_imat2',['../a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378',1,'glm']]], - ['mediump_5fimat2x2',['mediump_imat2x2',['../a00294.html#ga4b2aeb11a329940721dda9583e71f856',1,'glm']]], - ['mediump_5fimat2x3',['mediump_imat2x3',['../a00294.html#ga74362470ba99843ac70aee5ac38cc674',1,'glm']]], - ['mediump_5fimat2x4',['mediump_imat2x4',['../a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09',1,'glm']]], - ['mediump_5fimat3',['mediump_imat3',['../a00294.html#ga6c63bdc736efd3466e0730de0251cb71',1,'glm']]], - ['mediump_5fimat3x2',['mediump_imat3x2',['../a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809',1,'glm']]], - ['mediump_5fimat3x3',['mediump_imat3x3',['../a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12',1,'glm']]], - ['mediump_5fimat3x4',['mediump_imat3x4',['../a00294.html#ga67689a518b181a26540bc44a163525cd',1,'glm']]], - ['mediump_5fimat4',['mediump_imat4',['../a00294.html#gaf348552978553630d2a00b78eb887ced',1,'glm']]], - ['mediump_5fimat4x2',['mediump_imat4x2',['../a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc',1,'glm']]], - ['mediump_5fimat4x3',['mediump_imat4x3',['../a00294.html#ga5b10acc696759e03f6ab918f4467e94c',1,'glm']]], - ['mediump_5fimat4x4',['mediump_imat4x4',['../a00294.html#ga2596869d154dec1180beadbb9df80501',1,'glm']]], - ['mediump_5fint16',['mediump_int16',['../a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d',1,'glm']]], - ['mediump_5fint16_5ft',['mediump_int16_t',['../a00304.html#ga80e72fe94c88498537e8158ba7591c54',1,'glm']]], - ['mediump_5fint32',['mediump_int32',['../a00304.html#ga5244cef85d6e870e240c76428a262ae8',1,'glm']]], - ['mediump_5fint32_5ft',['mediump_int32_t',['../a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180',1,'glm']]], - ['mediump_5fint64',['mediump_int64',['../a00304.html#ga7b968f2b86a0442a89c7359171e1d866',1,'glm']]], - ['mediump_5fint64_5ft',['mediump_int64_t',['../a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64',1,'glm']]], - ['mediump_5fint8',['mediump_int8',['../a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e',1,'glm']]], - ['mediump_5fint8_5ft',['mediump_int8_t',['../a00304.html#ga6d7b3789ecb932c26430009478cac7ae',1,'glm']]], - ['mediump_5fivec1',['mediump_ivec1',['../a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56',1,'glm']]], - ['mediump_5fivec2',['mediump_ivec2',['../a00282.html#gac57496299d276ed97044074097bd5e2c',1,'glm']]], - ['mediump_5fivec3',['mediump_ivec3',['../a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466',1,'glm']]], - ['mediump_5fivec4',['mediump_ivec4',['../a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5',1,'glm']]], - ['mediump_5fmat2',['mediump_mat2',['../a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3',1,'glm']]], - ['mediump_5fmat2x2',['mediump_mat2x2',['../a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d',1,'glm']]], - ['mediump_5fmat2x3',['mediump_mat2x3',['../a00284.html#ga497d513d552d927537d61fa11e3701ab',1,'glm']]], - ['mediump_5fmat2x4',['mediump_mat2x4',['../a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5',1,'glm']]], - ['mediump_5fmat3',['mediump_mat3',['../a00284.html#ga5aae49834d02732942f44e61d7bce136',1,'glm']]], - ['mediump_5fmat3x2',['mediump_mat3x2',['../a00284.html#ga9e1c9ee65fef547bde793e69723e24eb',1,'glm']]], - ['mediump_5fmat3x3',['mediump_mat3x3',['../a00284.html#gabc0f2f4ad21c90b341881cf056f8650e',1,'glm']]], - ['mediump_5fmat3x4',['mediump_mat3x4',['../a00284.html#gaa669c6675c3405f76c0b14020d1c0d61',1,'glm']]], - ['mediump_5fmat4',['mediump_mat4',['../a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7',1,'glm']]], - ['mediump_5fmat4x2',['mediump_mat4x2',['../a00284.html#gad75706b70545412ba9ac27d5ee210f66',1,'glm']]], - ['mediump_5fmat4x3',['mediump_mat4x3',['../a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770',1,'glm']]], - ['mediump_5fmat4x4',['mediump_mat4x4',['../a00284.html#ga15bca2b70917d9752231160d9da74b01',1,'glm']]], - ['mediump_5fquat',['mediump_quat',['../a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d',1,'glm']]], - ['mediump_5fu16',['mediump_u16',['../a00304.html#ga9df98857be695d5a30cb30f5bfa38a80',1,'glm']]], - ['mediump_5fu16vec1',['mediump_u16vec1',['../a00304.html#ga400ce8cc566de093a9b28e59e220d6e4',1,'glm']]], - ['mediump_5fu16vec2',['mediump_u16vec2',['../a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1',1,'glm']]], - ['mediump_5fu16vec3',['mediump_u16vec3',['../a00304.html#gac9ba20234b0c3751d45ce575fc71e551',1,'glm']]], - ['mediump_5fu16vec4',['mediump_u16vec4',['../a00304.html#ga5793393686ce5bd2d5968ff9144762b8',1,'glm']]], - ['mediump_5fu32',['mediump_u32',['../a00304.html#ga1bd0e914158bf03135f8a317de6debe9',1,'glm']]], - ['mediump_5fu32vec1',['mediump_u32vec1',['../a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee',1,'glm']]], - ['mediump_5fu32vec2',['mediump_u32vec2',['../a00304.html#ga94f74851fce338549c705b5f0d601c4f',1,'glm']]], - ['mediump_5fu32vec3',['mediump_u32vec3',['../a00304.html#ga012c24c8fc69707b90260474c70275a2',1,'glm']]], - ['mediump_5fu32vec4',['mediump_u32vec4',['../a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a',1,'glm']]], - ['mediump_5fu64',['mediump_u64',['../a00304.html#ga2af9490085ae3bdf36a544e9dd073610',1,'glm']]], - ['mediump_5fu64vec1',['mediump_u64vec1',['../a00304.html#ga659f372ccb8307d5db5beca942cde5e8',1,'glm']]], - ['mediump_5fu64vec2',['mediump_u64vec2',['../a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d',1,'glm']]], - ['mediump_5fu64vec3',['mediump_u64vec3',['../a00304.html#ga1900c6ab74acd392809425953359ef52',1,'glm']]], - ['mediump_5fu64vec4',['mediump_u64vec4',['../a00304.html#gaec7ee455cb379ec2993e81482123e1cc',1,'glm']]], - ['mediump_5fu8',['mediump_u8',['../a00304.html#gad1213a22bbb9e4107f07eaa4956f8281',1,'glm']]], - ['mediump_5fu8vec1',['mediump_u8vec1',['../a00304.html#ga4a43050843b141bdc7e85437faef6f55',1,'glm']]], - ['mediump_5fu8vec2',['mediump_u8vec2',['../a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194',1,'glm']]], - ['mediump_5fu8vec3',['mediump_u8vec3',['../a00304.html#gaddc6f7748b699254942c5216b68f8f7f',1,'glm']]], - ['mediump_5fu8vec4',['mediump_u8vec4',['../a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b',1,'glm']]], - ['mediump_5fuint16',['mediump_uint16',['../a00304.html#ga2885a6c89916911e418c06bb76b9bdbb',1,'glm']]], - ['mediump_5fuint16_5ft',['mediump_uint16_t',['../a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e',1,'glm']]], - ['mediump_5fuint32',['mediump_uint32',['../a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f',1,'glm']]], - ['mediump_5fuint32_5ft',['mediump_uint32_t',['../a00304.html#gaf4dae276fd29623950de14a6ca2586b5',1,'glm']]], - ['mediump_5fuint64',['mediump_uint64',['../a00304.html#ga30652709815ad9404272a31957daa59e',1,'glm']]], - ['mediump_5fuint64_5ft',['mediump_uint64_t',['../a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9',1,'glm']]], - ['mediump_5fuint8',['mediump_uint8',['../a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3',1,'glm']]], - ['mediump_5fuint8_5ft',['mediump_uint8_t',['../a00304.html#gadfe65c78231039e90507770db50c98c7',1,'glm']]], - ['mediump_5fumat2',['mediump_umat2',['../a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee',1,'glm']]], - ['mediump_5fumat2x2',['mediump_umat2x2',['../a00294.html#ga3b209b1b751f041422137e3c065dfa98',1,'glm']]], - ['mediump_5fumat2x3',['mediump_umat2x3',['../a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306',1,'glm']]], - ['mediump_5fumat2x4',['mediump_umat2x4',['../a00294.html#gae1317ddca16d01e119a40b7f0ee85f95',1,'glm']]], - ['mediump_5fumat3',['mediump_umat3',['../a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a',1,'glm']]], - ['mediump_5fumat3x2',['mediump_umat3x2',['../a00294.html#gaadc28bfdc8ebca81ae85121b11994970',1,'glm']]], - ['mediump_5fumat3x3',['mediump_umat3x3',['../a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d',1,'glm']]], - ['mediump_5fumat3x4',['mediump_umat3x4',['../a00294.html#ga78009a1e4ca64217e46b418535e52546',1,'glm']]], - ['mediump_5fumat4',['mediump_umat4',['../a00294.html#ga5087c2beb26a11d9af87432e554cf9d1',1,'glm']]], - ['mediump_5fumat4x2',['mediump_umat4x2',['../a00294.html#gaf35aefd81cc13718f6b059623f7425fa',1,'glm']]], - ['mediump_5fumat4x3',['mediump_umat4x3',['../a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb',1,'glm']]], - ['mediump_5fumat4x4',['mediump_umat4x4',['../a00294.html#gaa9428fc8430dc552aad920653f822ef3',1,'glm']]], - ['mediump_5fuvec1',['mediump_uvec1',['../a00277.html#ga38fde73aaf1420175ece8d4882558a3f',1,'glm']]], - ['mediump_5fuvec2',['mediump_uvec2',['../a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b',1,'glm']]], - ['mediump_5fuvec3',['mediump_uvec3',['../a00282.html#ga83b7df38feefbb357f3673d950fafef7',1,'glm']]], - ['mediump_5fuvec4',['mediump_uvec4',['../a00282.html#ga64ed0deb6573375b7016daf82ffd53a7',1,'glm']]], - ['mediump_5fvec1',['mediump_vec1',['../a00271.html#ga645f53e6b8056609023a894b4e2beef4',1,'glm']]], - ['mediump_5fvec2',['mediump_vec2',['../a00282.html#gabc61976261c406520c7a8e4d946dc3f0',1,'glm']]], - ['mediump_5fvec3',['mediump_vec3',['../a00282.html#ga2384e263df19f1404b733016eff78fca',1,'glm']]], - ['mediump_5fvec4',['mediump_vec4',['../a00282.html#ga5c6978d3ffba06738416a33083853fc0',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_8.html b/tests/OpenGL/package/glm/doc/api/search/typedefs_8.html deleted file mode 100644 index 4e9ac73d..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_8.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_8.js b/tests/OpenGL/package/glm/doc/api/search/typedefs_8.js deleted file mode 100644 index 4f7da519..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_8.js +++ /dev/null @@ -1,179 +0,0 @@ -var searchData= -[ - ['packed_5fbvec1',['packed_bvec1',['../a00303.html#ga88632cea9008ac0ac1388e94e804a53c',1,'glm']]], - ['packed_5fbvec2',['packed_bvec2',['../a00303.html#gab85245913eaa40ab82adabcae37086cb',1,'glm']]], - ['packed_5fbvec3',['packed_bvec3',['../a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd',1,'glm']]], - ['packed_5fbvec4',['packed_bvec4',['../a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed',1,'glm']]], - ['packed_5fdmat2',['packed_dmat2',['../a00303.html#gad87408a8350918711f845f071bbe43fb',1,'glm']]], - ['packed_5fdmat2x2',['packed_dmat2x2',['../a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9',1,'glm']]], - ['packed_5fdmat2x3',['packed_dmat2x3',['../a00303.html#gac3a5315f588ba04ad255188071ec4e22',1,'glm']]], - ['packed_5fdmat2x4',['packed_dmat2x4',['../a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4',1,'glm']]], - ['packed_5fdmat3',['packed_dmat3',['../a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245',1,'glm']]], - ['packed_5fdmat3x2',['packed_dmat3x2',['../a00303.html#gae36de20a4c0e0b1444b7903ae811d94e',1,'glm']]], - ['packed_5fdmat3x3',['packed_dmat3x3',['../a00303.html#gab9b909f1392d86854334350efcae85f5',1,'glm']]], - ['packed_5fdmat3x4',['packed_dmat3x4',['../a00303.html#ga199131fd279c92c2ac12df6d978f1dd6',1,'glm']]], - ['packed_5fdmat4',['packed_dmat4',['../a00303.html#gada980a3485640aa8151f368f17ad3086',1,'glm']]], - ['packed_5fdmat4x2',['packed_dmat4x2',['../a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72',1,'glm']]], - ['packed_5fdmat4x3',['packed_dmat4x3',['../a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764',1,'glm']]], - ['packed_5fdmat4x4',['packed_dmat4x4',['../a00303.html#gae20617435a6d042d7c38da2badd64a09',1,'glm']]], - ['packed_5fdvec1',['packed_dvec1',['../a00303.html#ga532f0c940649b1ee303acd572fc35531',1,'glm']]], - ['packed_5fdvec2',['packed_dvec2',['../a00303.html#ga5c194b11fbda636f2ab20c3bd0079196',1,'glm']]], - ['packed_5fdvec3',['packed_dvec3',['../a00303.html#ga0581ea552d86b2b5de7a2804bed80e72',1,'glm']]], - ['packed_5fdvec4',['packed_dvec4',['../a00303.html#gae8a9b181f9dc813ad6e125a52b14b935',1,'glm']]], - ['packed_5fhighp_5fbvec1',['packed_highp_bvec1',['../a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a',1,'glm']]], - ['packed_5fhighp_5fbvec2',['packed_highp_bvec2',['../a00303.html#gad791d671f4fcf1ed1ea41f752916b70a',1,'glm']]], - ['packed_5fhighp_5fbvec3',['packed_highp_bvec3',['../a00303.html#ga6a5a3250b57dfadc66735bc72911437f',1,'glm']]], - ['packed_5fhighp_5fbvec4',['packed_highp_bvec4',['../a00303.html#ga09f517d88b996ef1b2f42fd54222b82d',1,'glm']]], - ['packed_5fhighp_5fdmat2',['packed_highp_dmat2',['../a00303.html#gae29686632fd05efac0675d9a6370d77b',1,'glm']]], - ['packed_5fhighp_5fdmat2x2',['packed_highp_dmat2x2',['../a00303.html#ga22bd6382b16052e301edbfc031b9f37a',1,'glm']]], - ['packed_5fhighp_5fdmat2x3',['packed_highp_dmat2x3',['../a00303.html#ga999d82719696d4c59f4d236dd08f273d',1,'glm']]], - ['packed_5fhighp_5fdmat2x4',['packed_highp_dmat2x4',['../a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0',1,'glm']]], - ['packed_5fhighp_5fdmat3',['packed_highp_dmat3',['../a00303.html#gadac7c040c4810dd52b36fcd09d097400',1,'glm']]], - ['packed_5fhighp_5fdmat3x2',['packed_highp_dmat3x2',['../a00303.html#gab462744977beb85fb5c782bc2eea7b15',1,'glm']]], - ['packed_5fhighp_5fdmat3x3',['packed_highp_dmat3x3',['../a00303.html#ga49e5a709d098523823b2f824e48672a6',1,'glm']]], - ['packed_5fhighp_5fdmat3x4',['packed_highp_dmat3x4',['../a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7',1,'glm']]], - ['packed_5fhighp_5fdmat4',['packed_highp_dmat4',['../a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6',1,'glm']]], - ['packed_5fhighp_5fdmat4x2',['packed_highp_dmat4x2',['../a00303.html#ga12e39e797fb724a5b51fcbea2513a7da',1,'glm']]], - ['packed_5fhighp_5fdmat4x3',['packed_highp_dmat4x3',['../a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e',1,'glm']]], - ['packed_5fhighp_5fdmat4x4',['packed_highp_dmat4x4',['../a00303.html#ga2df58e03e5afded28707b4f7d077afb4',1,'glm']]], - ['packed_5fhighp_5fdvec1',['packed_highp_dvec1',['../a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1',1,'glm']]], - ['packed_5fhighp_5fdvec2',['packed_highp_dvec2',['../a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63',1,'glm']]], - ['packed_5fhighp_5fdvec3',['packed_highp_dvec3',['../a00303.html#gaaac6b356ef00154da41aaae7d1549193',1,'glm']]], - ['packed_5fhighp_5fdvec4',['packed_highp_dvec4',['../a00303.html#ga81b5368fe485e2630aa9b44832d592e7',1,'glm']]], - ['packed_5fhighp_5fivec1',['packed_highp_ivec1',['../a00303.html#ga7245acc887a5438f46fd85fdf076bb3b',1,'glm']]], - ['packed_5fhighp_5fivec2',['packed_highp_ivec2',['../a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7',1,'glm']]], - ['packed_5fhighp_5fivec3',['packed_highp_ivec3',['../a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628',1,'glm']]], - ['packed_5fhighp_5fivec4',['packed_highp_ivec4',['../a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895',1,'glm']]], - ['packed_5fhighp_5fmat2',['packed_highp_mat2',['../a00303.html#ga2f2d913d8cca2f935b2522964408c0b2',1,'glm']]], - ['packed_5fhighp_5fmat2x2',['packed_highp_mat2x2',['../a00303.html#ga245c12d2daf67feecaa2d3277c8f6661',1,'glm']]], - ['packed_5fhighp_5fmat2x3',['packed_highp_mat2x3',['../a00303.html#ga069cc8892aadae144c00f35297617d44',1,'glm']]], - ['packed_5fhighp_5fmat2x4',['packed_highp_mat2x4',['../a00303.html#ga6904d09b62141d09712b76983892f95b',1,'glm']]], - ['packed_5fhighp_5fmat3',['packed_highp_mat3',['../a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe',1,'glm']]], - ['packed_5fhighp_5fmat3x2',['packed_highp_mat3x2',['../a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9',1,'glm']]], - ['packed_5fhighp_5fmat3x3',['packed_highp_mat3x3',['../a00303.html#gaf2e07527d678440bf0c20adbeb9177c5',1,'glm']]], - ['packed_5fhighp_5fmat3x4',['packed_highp_mat3x4',['../a00303.html#ga72102fa6ac2445aa3bb203128ad52449',1,'glm']]], - ['packed_5fhighp_5fmat4',['packed_highp_mat4',['../a00303.html#ga253e8379b08d2dc6fe2800b2fb913203',1,'glm']]], - ['packed_5fhighp_5fmat4x2',['packed_highp_mat4x2',['../a00303.html#gae389c2071cf3cdb33e7812c6fd156710',1,'glm']]], - ['packed_5fhighp_5fmat4x3',['packed_highp_mat4x3',['../a00303.html#ga4584f64394bd7123b7a8534741e4916c',1,'glm']]], - ['packed_5fhighp_5fmat4x4',['packed_highp_mat4x4',['../a00303.html#ga0149fe15668925147e07c94fd2c2d6ae',1,'glm']]], - ['packed_5fhighp_5fuvec1',['packed_highp_uvec1',['../a00303.html#ga8c32b53f628a3616aa5061e58d66fe74',1,'glm']]], - ['packed_5fhighp_5fuvec2',['packed_highp_uvec2',['../a00303.html#gab704d4fb15f6f96d70e363d5db7060cd',1,'glm']]], - ['packed_5fhighp_5fuvec3',['packed_highp_uvec3',['../a00303.html#ga0b570da473fec4619db5aa0dce5133b0',1,'glm']]], - ['packed_5fhighp_5fuvec4',['packed_highp_uvec4',['../a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6',1,'glm']]], - ['packed_5fhighp_5fvec1',['packed_highp_vec1',['../a00303.html#ga56473759d2702ee19ab7f91d0017fa70',1,'glm']]], - ['packed_5fhighp_5fvec2',['packed_highp_vec2',['../a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d',1,'glm']]], - ['packed_5fhighp_5fvec3',['packed_highp_vec3',['../a00303.html#ga3815661df0e2de79beff8168c09adf1e',1,'glm']]], - ['packed_5fhighp_5fvec4',['packed_highp_vec4',['../a00303.html#ga4015f36bf5a5adb6ac5d45beed959867',1,'glm']]], - ['packed_5fivec1',['packed_ivec1',['../a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c',1,'glm']]], - ['packed_5fivec2',['packed_ivec2',['../a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7',1,'glm']]], - ['packed_5fivec3',['packed_ivec3',['../a00303.html#gae157682a7847161787951ba1db4cf325',1,'glm']]], - ['packed_5fivec4',['packed_ivec4',['../a00303.html#gac228b70372abd561340d5f926a7c1778',1,'glm']]], - ['packed_5flowp_5fbvec1',['packed_lowp_bvec1',['../a00303.html#gae3c8750f53259ece334d3aa3b3649a40',1,'glm']]], - ['packed_5flowp_5fbvec2',['packed_lowp_bvec2',['../a00303.html#gac969befedbda69eb78d4e23f751fdbee',1,'glm']]], - ['packed_5flowp_5fbvec3',['packed_lowp_bvec3',['../a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954',1,'glm']]], - ['packed_5flowp_5fbvec4',['packed_lowp_bvec4',['../a00303.html#gae473587cff3092edc0877fc691c26a0b',1,'glm']]], - ['packed_5flowp_5fdmat2',['packed_lowp_dmat2',['../a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097',1,'glm']]], - ['packed_5flowp_5fdmat2x2',['packed_lowp_dmat2x2',['../a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea',1,'glm']]], - ['packed_5flowp_5fdmat2x3',['packed_lowp_dmat2x3',['../a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2',1,'glm']]], - ['packed_5flowp_5fdmat2x4',['packed_lowp_dmat2x4',['../a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1',1,'glm']]], - ['packed_5flowp_5fdmat3',['packed_lowp_dmat3',['../a00303.html#ga3894a059eeaacec8791c25de398d9955',1,'glm']]], - ['packed_5flowp_5fdmat3x2',['packed_lowp_dmat3x2',['../a00303.html#ga23ec236950f5859f59197663266b535d',1,'glm']]], - ['packed_5flowp_5fdmat3x3',['packed_lowp_dmat3x3',['../a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c',1,'glm']]], - ['packed_5flowp_5fdmat3x4',['packed_lowp_dmat3x4',['../a00303.html#ga8fc0e66da83599071b7ec17510686cd9',1,'glm']]], - ['packed_5flowp_5fdmat4',['packed_lowp_dmat4',['../a00303.html#ga03e1edf5666c40affe39aee35c87956f',1,'glm']]], - ['packed_5flowp_5fdmat4x2',['packed_lowp_dmat4x2',['../a00303.html#ga39658fb13369db869d363684bd8399c0',1,'glm']]], - ['packed_5flowp_5fdmat4x3',['packed_lowp_dmat4x3',['../a00303.html#ga30b0351eebc18c6056101359bdd3a359',1,'glm']]], - ['packed_5flowp_5fdmat4x4',['packed_lowp_dmat4x4',['../a00303.html#ga0294d4c45151425c86a11deee7693c0e',1,'glm']]], - ['packed_5flowp_5fdvec1',['packed_lowp_dvec1',['../a00303.html#ga054050e9d4e78d81db0e6d1573b1c624',1,'glm']]], - ['packed_5flowp_5fdvec2',['packed_lowp_dvec2',['../a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93',1,'glm']]], - ['packed_5flowp_5fdvec3',['packed_lowp_dvec3',['../a00303.html#ga9189210cabd6651a5e14a4c46fb20598',1,'glm']]], - ['packed_5flowp_5fdvec4',['packed_lowp_dvec4',['../a00303.html#ga262dafd0c001c3a38d1cc91d024ca738',1,'glm']]], - ['packed_5flowp_5fivec1',['packed_lowp_ivec1',['../a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c',1,'glm']]], - ['packed_5flowp_5fivec2',['packed_lowp_ivec2',['../a00303.html#ga52635859f5ef660ab999d22c11b7867f',1,'glm']]], - ['packed_5flowp_5fivec3',['packed_lowp_ivec3',['../a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d',1,'glm']]], - ['packed_5flowp_5fivec4',['packed_lowp_ivec4',['../a00303.html#ga931731b8ae3b54c7ecc221509dae96bc',1,'glm']]], - ['packed_5flowp_5fmat2',['packed_lowp_mat2',['../a00303.html#ga70dcb9ef0b24e832772a7405efa9669a',1,'glm']]], - ['packed_5flowp_5fmat2x2',['packed_lowp_mat2x2',['../a00303.html#gac70667c7642ec8d50245e6e6936a3927',1,'glm']]], - ['packed_5flowp_5fmat2x3',['packed_lowp_mat2x3',['../a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234',1,'glm']]], - ['packed_5flowp_5fmat2x4',['packed_lowp_mat2x4',['../a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3',1,'glm']]], - ['packed_5flowp_5fmat3',['packed_lowp_mat3',['../a00303.html#ga0d22400969dd223465b2900fecfb4f53',1,'glm']]], - ['packed_5flowp_5fmat3x2',['packed_lowp_mat3x2',['../a00303.html#ga128cd52649621861635fab746df91735',1,'glm']]], - ['packed_5flowp_5fmat3x3',['packed_lowp_mat3x3',['../a00303.html#ga5adf1802c5375a9dfb1729691bedd94e',1,'glm']]], - ['packed_5flowp_5fmat3x4',['packed_lowp_mat3x4',['../a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f',1,'glm']]], - ['packed_5flowp_5fmat4',['packed_lowp_mat4',['../a00303.html#ga2a1dd2387725a335413d4c4fee8609c4',1,'glm']]], - ['packed_5flowp_5fmat4x2',['packed_lowp_mat4x2',['../a00303.html#ga8f22607dcd090cd280071ccc689f4079',1,'glm']]], - ['packed_5flowp_5fmat4x3',['packed_lowp_mat4x3',['../a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c',1,'glm']]], - ['packed_5flowp_5fmat4x4',['packed_lowp_mat4x4',['../a00303.html#ga776f18d1a6e7d399f05d386167dc60f5',1,'glm']]], - ['packed_5flowp_5fuvec1',['packed_lowp_uvec1',['../a00303.html#gaf111fed760ecce16cb1988807569bee5',1,'glm']]], - ['packed_5flowp_5fuvec2',['packed_lowp_uvec2',['../a00303.html#ga958210fe245a75b058325d367c951132',1,'glm']]], - ['packed_5flowp_5fuvec3',['packed_lowp_uvec3',['../a00303.html#ga576a3f8372197a56a79dee1c8280f485',1,'glm']]], - ['packed_5flowp_5fuvec4',['packed_lowp_uvec4',['../a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da',1,'glm']]], - ['packed_5flowp_5fvec1',['packed_lowp_vec1',['../a00303.html#ga0a6198fe64166a6a61084d43c71518a9',1,'glm']]], - ['packed_5flowp_5fvec2',['packed_lowp_vec2',['../a00303.html#gafbf1c2cce307c5594b165819ed83bf5d',1,'glm']]], - ['packed_5flowp_5fvec3',['packed_lowp_vec3',['../a00303.html#ga3a30c137c1f8cce478c28eab0427a570',1,'glm']]], - ['packed_5flowp_5fvec4',['packed_lowp_vec4',['../a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a',1,'glm']]], - ['packed_5fmat2',['packed_mat2',['../a00303.html#gadd019b43fcf42e1590d45dddaa504a1a',1,'glm']]], - ['packed_5fmat2x2',['packed_mat2x2',['../a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517',1,'glm']]], - ['packed_5fmat2x3',['packed_mat2x3',['../a00303.html#ga301b76a89b8a9625501ca58815017f20',1,'glm']]], - ['packed_5fmat2x4',['packed_mat2x4',['../a00303.html#gac401da1dd9177ad81d7618a2a5541e23',1,'glm']]], - ['packed_5fmat3',['packed_mat3',['../a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a',1,'glm']]], - ['packed_5fmat3x2',['packed_mat3x2',['../a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa',1,'glm']]], - ['packed_5fmat3x3',['packed_mat3x3',['../a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99',1,'glm']]], - ['packed_5fmat3x4',['packed_mat3x4',['../a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8',1,'glm']]], - ['packed_5fmat4',['packed_mat4',['../a00303.html#ga2c139854e5b04cf08a957dee3b510441',1,'glm']]], - ['packed_5fmat4x2',['packed_mat4x2',['../a00303.html#ga379c1153f1339bdeaefd592bebf538e8',1,'glm']]], - ['packed_5fmat4x3',['packed_mat4x3',['../a00303.html#gab286466e19f7399c8d25089da9400d43',1,'glm']]], - ['packed_5fmat4x4',['packed_mat4x4',['../a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374',1,'glm']]], - ['packed_5fmediump_5fbvec1',['packed_mediump_bvec1',['../a00303.html#ga5546d828d63010a8f9cf81161ad0275a',1,'glm']]], - ['packed_5fmediump_5fbvec2',['packed_mediump_bvec2',['../a00303.html#gab4c6414a59539e66a242ad4cf4b476b4',1,'glm']]], - ['packed_5fmediump_5fbvec3',['packed_mediump_bvec3',['../a00303.html#ga70147763edff3fe96b03a0b98d6339a2',1,'glm']]], - ['packed_5fmediump_5fbvec4',['packed_mediump_bvec4',['../a00303.html#ga7b1620f259595b9da47a6374fc44588a',1,'glm']]], - ['packed_5fmediump_5fdmat2',['packed_mediump_dmat2',['../a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57',1,'glm']]], - ['packed_5fmediump_5fdmat2x2',['packed_mediump_dmat2x2',['../a00303.html#ga39e8bb9b70e5694964e8266a21ba534e',1,'glm']]], - ['packed_5fmediump_5fdmat2x3',['packed_mediump_dmat2x3',['../a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430',1,'glm']]], - ['packed_5fmediump_5fdmat2x4',['packed_mediump_dmat2x4',['../a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb',1,'glm']]], - ['packed_5fmediump_5fdmat3',['packed_mediump_dmat3',['../a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6',1,'glm']]], - ['packed_5fmediump_5fdmat3x2',['packed_mediump_dmat3x2',['../a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a',1,'glm']]], - ['packed_5fmediump_5fdmat3x3',['packed_mediump_dmat3x3',['../a00303.html#gaf85877d38d8cfbc21d59d939afd72375',1,'glm']]], - ['packed_5fmediump_5fdmat3x4',['packed_mediump_dmat3x4',['../a00303.html#gad5dcaf93df267bc3029174e430e0907f',1,'glm']]], - ['packed_5fmediump_5fdmat4',['packed_mediump_dmat4',['../a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332',1,'glm']]], - ['packed_5fmediump_5fdmat4x2',['packed_mediump_dmat4x2',['../a00303.html#ga9a15514a0631f700de6312b9d5db3a73',1,'glm']]], - ['packed_5fmediump_5fdmat4x3',['packed_mediump_dmat4x3',['../a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713',1,'glm']]], - ['packed_5fmediump_5fdmat4x4',['packed_mediump_dmat4x4',['../a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4',1,'glm']]], - ['packed_5fmediump_5fdvec1',['packed_mediump_dvec1',['../a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd',1,'glm']]], - ['packed_5fmediump_5fdvec2',['packed_mediump_dvec2',['../a00303.html#ga0c754a783b6fcf80374c013371c4dae9',1,'glm']]], - ['packed_5fmediump_5fdvec3',['packed_mediump_dvec3',['../a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4',1,'glm']]], - ['packed_5fmediump_5fdvec4',['packed_mediump_dvec4',['../a00303.html#ga568b850f1116b667043533cf77826968',1,'glm']]], - ['packed_5fmediump_5fivec1',['packed_mediump_ivec1',['../a00303.html#ga09507ef020a49517a7bcd50438f05056',1,'glm']]], - ['packed_5fmediump_5fivec2',['packed_mediump_ivec2',['../a00303.html#gaaa891048dddef4627df33809ec726219',1,'glm']]], - ['packed_5fmediump_5fivec3',['packed_mediump_ivec3',['../a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2',1,'glm']]], - ['packed_5fmediump_5fivec4',['packed_mediump_ivec4',['../a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8',1,'glm']]], - ['packed_5fmediump_5fmat2',['packed_mediump_mat2',['../a00303.html#ga43cd36d430c5187bfdca34a23cb41581',1,'glm']]], - ['packed_5fmediump_5fmat2x2',['packed_mediump_mat2x2',['../a00303.html#ga2d2a73e662759e301c22b8931ff6a526',1,'glm']]], - ['packed_5fmediump_5fmat2x3',['packed_mediump_mat2x3',['../a00303.html#ga99049db01faf1e95ed9fb875a47dffe2',1,'glm']]], - ['packed_5fmediump_5fmat2x4',['packed_mediump_mat2x4',['../a00303.html#gad43a240533f388ce0504b495d9df3d52',1,'glm']]], - ['packed_5fmediump_5fmat3',['packed_mediump_mat3',['../a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55',1,'glm']]], - ['packed_5fmediump_5fmat3x2',['packed_mediump_mat3x2',['../a00303.html#ga04cfaf1421284df3c24ea0985dab24e7',1,'glm']]], - ['packed_5fmediump_5fmat3x3',['packed_mediump_mat3x3',['../a00303.html#gaaa9cea174d342dd9650e3436823cab23',1,'glm']]], - ['packed_5fmediump_5fmat3x4',['packed_mediump_mat3x4',['../a00303.html#gabc93a9560593bd32e099c908531305f5',1,'glm']]], - ['packed_5fmediump_5fmat4',['packed_mediump_mat4',['../a00303.html#gae89d72ffc149147f61df701bbc8755bf',1,'glm']]], - ['packed_5fmediump_5fmat4x2',['packed_mediump_mat4x2',['../a00303.html#gaa458f9d9e0934bae3097e2a373b24707',1,'glm']]], - ['packed_5fmediump_5fmat4x3',['packed_mediump_mat4x3',['../a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6',1,'glm']]], - ['packed_5fmediump_5fmat4x4',['packed_mediump_mat4x4',['../a00303.html#gaf304f64c06743c1571401504d3f50259',1,'glm']]], - ['packed_5fmediump_5fuvec1',['packed_mediump_uvec1',['../a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34',1,'glm']]], - ['packed_5fmediump_5fuvec2',['packed_mediump_uvec2',['../a00303.html#gaa1f95690a78dc12e39da32943243aeef',1,'glm']]], - ['packed_5fmediump_5fuvec3',['packed_mediump_uvec3',['../a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab',1,'glm']]], - ['packed_5fmediump_5fuvec4',['packed_mediump_uvec4',['../a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45',1,'glm']]], - ['packed_5fmediump_5fvec1',['packed_mediump_vec1',['../a00303.html#ga71d63cead1e113fca0bcdaaa33aad050',1,'glm']]], - ['packed_5fmediump_5fvec2',['packed_mediump_vec2',['../a00303.html#ga6844c6f4691d1bf67673240850430948',1,'glm']]], - ['packed_5fmediump_5fvec3',['packed_mediump_vec3',['../a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8',1,'glm']]], - ['packed_5fmediump_5fvec4',['packed_mediump_vec4',['../a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e',1,'glm']]], - ['packed_5fuvec1',['packed_uvec1',['../a00303.html#ga5621493caac01bdd22ab6be4416b0314',1,'glm']]], - ['packed_5fuvec2',['packed_uvec2',['../a00303.html#gabcc33efb4d5e83b8fe4706360e75b932',1,'glm']]], - ['packed_5fuvec3',['packed_uvec3',['../a00303.html#gab96804e99e3a72a35740fec690c79617',1,'glm']]], - ['packed_5fuvec4',['packed_uvec4',['../a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2',1,'glm']]], - ['packed_5fvec1',['packed_vec1',['../a00303.html#ga14741e3d9da9ae83765389927f837331',1,'glm']]], - ['packed_5fvec2',['packed_vec2',['../a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66',1,'glm']]], - ['packed_5fvec3',['packed_vec3',['../a00303.html#gaccccd090e185450caa28b5b63ad4e8f0',1,'glm']]], - ['packed_5fvec4',['packed_vec4',['../a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_9.html b/tests/OpenGL/package/glm/doc/api/search/typedefs_9.html deleted file mode 100644 index b07ee409..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_9.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_9.js b/tests/OpenGL/package/glm/doc/api/search/typedefs_9.js deleted file mode 100644 index 12213dc7..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_9.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['quat',['quat',['../a00252.html#gab0b441adb4509bc58d2946c2239a8942',1,'glm']]], - ['qword',['qword',['../a00354.html#ga4021754ffb8e5ef14c75802b15657714',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_a.html b/tests/OpenGL/package/glm/doc/api/search/typedefs_a.html deleted file mode 100644 index b1a32661..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_a.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_a.js b/tests/OpenGL/package/glm/doc/api/search/typedefs_a.js deleted file mode 100644 index 47df88c5..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_a.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['sint',['sint',['../a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40',1,'glm']]], - ['size1',['size1',['../a00359.html#gaeb877ac8f9a3703961736c1c5072cf68',1,'glm']]], - ['size1_5ft',['size1_t',['../a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f',1,'glm']]], - ['size2',['size2',['../a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe',1,'glm']]], - ['size2_5ft',['size2_t',['../a00359.html#ga5976c25657d4e2b5f73f39364c3845d6',1,'glm']]], - ['size3',['size3',['../a00359.html#gae1c72956d0359b0db332c6c8774d3b04',1,'glm']]], - ['size3_5ft',['size3_t',['../a00359.html#gaf2654983c60d641fd3808e65a8dfad8d',1,'glm']]], - ['size4',['size4',['../a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa',1,'glm']]], - ['size4_5ft',['size4_t',['../a00359.html#gaa423efcea63675a2df26990dbcb58656',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_b.html b/tests/OpenGL/package/glm/doc/api/search/typedefs_b.html deleted file mode 100644 index eded260d..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_b.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_b.js b/tests/OpenGL/package/glm/doc/api/search/typedefs_b.js deleted file mode 100644 index e2eadd53..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_b.js +++ /dev/null @@ -1,47 +0,0 @@ -var searchData= -[ - ['u16',['u16',['../a00304.html#gaa2d7acc0adb536fab71fe261232a40ff',1,'glm']]], - ['u16vec1',['u16vec1',['../a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5',1,'glm::u16vec1()'],['../a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0',1,'glm::gtx::u16vec1()']]], - ['u16vec2',['u16vec2',['../a00304.html#ga2a78447eb9d66a114b193f4a25899c16',1,'glm']]], - ['u16vec3',['u16vec3',['../a00304.html#ga1c522ca821c27b862fe51cf4024b064b',1,'glm']]], - ['u16vec4',['u16vec4',['../a00304.html#ga529496d75775fb656a07993ea9af2450',1,'glm']]], - ['u32',['u32',['../a00304.html#ga8165913e068444f7842302d40ba897b9',1,'glm']]], - ['u32vec1',['u32vec1',['../a00304.html#gae627372cfd5f20dd87db490387b71195',1,'glm::u32vec1()'],['../a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3',1,'glm::gtx::u32vec1()']]], - ['u32vec2',['u32vec2',['../a00304.html#ga2a266e46ee218d0c680f12b35c500cc0',1,'glm']]], - ['u32vec3',['u32vec3',['../a00304.html#gae267358ff2a41d156d97f5762630235a',1,'glm']]], - ['u32vec4',['u32vec4',['../a00304.html#ga31cef34e4cd04840c54741ff2f7005f0',1,'glm']]], - ['u64',['u64',['../a00304.html#gaf3f312156984c365e9f65620354da70b',1,'glm']]], - ['u64vec1',['u64vec1',['../a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd',1,'glm::u64vec1()'],['../a00346.html#ga818de170e2584ab037130f2881925974',1,'glm::gtx::u64vec1()']]], - ['u64vec2',['u64vec2',['../a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5',1,'glm']]], - ['u64vec3',['u64vec3',['../a00304.html#ga489b89ba93d4f7b3934df78debc52276',1,'glm']]], - ['u64vec4',['u64vec4',['../a00304.html#ga3945dd6515d4498cb603e65ff867ab03',1,'glm']]], - ['u8',['u8',['../a00304.html#gaecc7082561fc9028b844b6cf3d305d36',1,'glm']]], - ['u8vec1',['u8vec1',['../a00304.html#ga29b349e037f0b24320b4548a143daee2',1,'glm::u8vec1()'],['../a00346.html#ga5853fe457f4c8a6bc09343d0e9833980',1,'glm::gtx::u8vec1()']]], - ['u8vec2',['u8vec2',['../a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611',1,'glm']]], - ['u8vec3',['u8vec3',['../a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2',1,'glm']]], - ['u8vec4',['u8vec4',['../a00304.html#ga20779a61de2fd526a17f12fe53ec46b1',1,'glm']]], - ['uint16',['uint16',['../a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e',1,'glm']]], - ['uint16_5ft',['uint16_t',['../a00304.html#ga91f91f411080c37730856ff5887f5bcf',1,'glm']]], - ['uint32',['uint32',['../a00263.html#ga1134b580f8da4de94ca6b1de4d37975e',1,'glm']]], - ['uint32_5ft',['uint32_t',['../a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac',1,'glm']]], - ['uint64',['uint64',['../a00263.html#gab630f76c26b50298187f7889104d4b9c',1,'glm']]], - ['uint64_5ft',['uint64_t',['../a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee',1,'glm']]], - ['uint8',['uint8',['../a00263.html#gadde6aaee8457bee49c2a92621fe22b79',1,'glm']]], - ['uint8_5ft',['uint8_t',['../a00304.html#ga28d97808322d3c92186e4a0c067d7e8e',1,'glm']]], - ['umat2',['umat2',['../a00294.html#ga4cae85566f900debf930c41944b64691',1,'glm']]], - ['umat2x2',['umat2x2',['../a00294.html#gabf8acdd33ce8951051edbca5200898aa',1,'glm']]], - ['umat2x3',['umat2x3',['../a00294.html#ga1870da7578d5022b973a83155d386ab3',1,'glm']]], - ['umat2x4',['umat2x4',['../a00294.html#ga57936a3998e992370e59a223e0ee4fd4',1,'glm']]], - ['umat3',['umat3',['../a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6',1,'glm']]], - ['umat3x2',['umat3x2',['../a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a',1,'glm']]], - ['umat3x3',['umat3x3',['../a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb',1,'glm']]], - ['umat3x4',['umat3x4',['../a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba',1,'glm']]], - ['umat4',['umat4',['../a00294.html#ga38bc7bb6494e344185df596deeb4544c',1,'glm']]], - ['umat4x2',['umat4x2',['../a00294.html#ga70fa2d05896aa83cbc8c07672a429b53',1,'glm']]], - ['umat4x3',['umat4x3',['../a00294.html#ga87581417945411f75cb31dd6ca1dba98',1,'glm']]], - ['umat4x4',['umat4x4',['../a00294.html#gaf72e6d399c42985db6872c50f53d7eb8',1,'glm']]], - ['uvec1',['uvec1',['../a00276.html#gac3bdd96183d23876c58a1424585fefe7',1,'glm']]], - ['uvec2',['uvec2',['../a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb',1,'glm']]], - ['uvec3',['uvec3',['../a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418',1,'glm']]], - ['uvec4',['uvec4',['../a00281.html#gaa57e96bb337867329d5f43bcc27c1095',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_c.html b/tests/OpenGL/package/glm/doc/api/search/typedefs_c.html deleted file mode 100644 index 0ff00dda..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_c.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_c.js b/tests/OpenGL/package/glm/doc/api/search/typedefs_c.js deleted file mode 100644 index ff80f0db..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_c.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['vec1',['vec1',['../a00270.html#gadfc071d934d8dae7955a1d530a3cf656',1,'glm']]], - ['vec2',['vec2',['../a00281.html#gabe65c061834f61b4f7cb6037b19006a4',1,'glm']]], - ['vec3',['vec3',['../a00281.html#ga9c3019b13faf179e4ad3626ea66df334',1,'glm']]], - ['vec4',['vec4',['../a00281.html#gac215a35481a6597d1bf622a382e9d6e2',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_d.html b/tests/OpenGL/package/glm/doc/api/search/typedefs_d.html deleted file mode 100644 index 61e1cda8..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_d.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/tests/OpenGL/package/glm/doc/api/search/typedefs_d.js b/tests/OpenGL/package/glm/doc/api/search/typedefs_d.js deleted file mode 100644 index 5e9c6bf4..00000000 --- a/tests/OpenGL/package/glm/doc/api/search/typedefs_d.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['word',['word',['../a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5',1,'glm']]] -]; diff --git a/tests/OpenGL/package/glm/doc/api/splitbar.png b/tests/OpenGL/package/glm/doc/api/splitbar.png deleted file mode 100644 index d5bc78b2826eb4e32c5c7b00247aee6141b2a004..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=JfEakt5%>1oLf!@k0Tzd@zj_(1T>F?!+T=VO9&KmhYdpNbpg3vr z+%-EC_ddO|SvPX|ndHzG0VfVc4C2>Rt!^!Ot9PNXYbX5=(_gQIp#q{ye&u%Vi9ZDQ UeGhkH2Rebl)78&qol`;+0Eb>qmjD0& diff --git a/tests/OpenGL/package/glm/doc/api/sync_off.png b/tests/OpenGL/package/glm/doc/api/sync_off.png deleted file mode 100644 index 9402c109d97fc70608ecf1b419628f8f64ee954c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 zcmV;;0y6!HP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;(#7eog=Y0zOGZK~zXfrPa+#RACebaK(Qi7dJ|CqxJe>kua3jNK)!d919Ya zx97~Ad++<+dm43I{9xw1&pBtl?wt~{twN5&9e4#FU=@DCJoLd`s0OJwM=U})bOH}k zd-x4KPz9k`p#ofk&maveWDRbDG0%7cEwByJfc<&^-b{V?RXFT$*DWv>9D%POg^RHX zC&635U#JvR)OlL2vq+U(cML%(4?hN(d{J{$Q6j!eV~+!MO}qh_0lbK6`P{Zn@q*Ss z5e;V)EsQE6QZ)L|Jk#}DaWbhHMb9runGRmiYZPPkiqapQ#{Di}t4oUdn}V4HFIeyj z!}k?se)vsnaYE7LGw61>*~zG)w%LUFHSO)jIRi3`42hj!IOntbE|Kxvx)Lh74@Lsvgc%nHAe0}VIG%V;X zT!hf9P$7U9J%L&H0({?Ehh<2>Q^ diff --git a/tests/OpenGL/package/glm/doc/api/sync_on.png b/tests/OpenGL/package/glm/doc/api/sync_on.png deleted file mode 100644 index 85d975472a1815401af24942378f2f4942971804..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmV;(0yq7MP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;(#7eog=Y0y#-UK~zXfrPa?%R8bTMaHW4C7cVSxqiF>a zI8&I6-AATD4I=tW#SONRt3%C}S z;~O+UF@O)$wNQ&3m9=oKtl37Pl80AACSMFVutUj&qKR9wm*`ZKe2nlq*)tkB;A)_# zMUE+&9alu8X#A$^$4=?q{IsIMR@vA3Ip9H{s3_i{DE&bX*e!sqEGT+(UakpwNe-B` zieuLmWme5*HaDf{#a+0U7gdxRwbx{`uCH>D1N76%hc-QIZz@OXDP}cn<^wi3fS*7V z>&`fNO!G7Hd*u-) zT#L)m1G%~W0LFh7t_}ZV0E#pH!wdLNehXZiOZf@KcV1v!_#6j*K7NC1SkQB50WnJy u0ywA--oR(z->nT;ge2U7++n(T6@LJKeZ8?m#aR#l0000VM%xNb!1@J z*w6hZkrl}2EbxddW?->OfygXeTLnOj;kDcXpaA074czwCumW0lN58E9lSY&%MY8lMl)7*S`x@4=* zuA-NAOP;&D>f?QVyy>Qro6ie_1>d({i}-a*OIxr`q>53-&2+KIj3XgHQyDy6{an^L HB{Ts5+#p5X diff --git a/tests/OpenGL/package/glm/doc/api/tab_b.png b/tests/OpenGL/package/glm/doc/api/tab_b.png deleted file mode 100644 index e14114dc75fef8984382122e778c4a0948dfcd6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!2^0spJ29*~C-V}>VM%xNb!1@J z*w6hZkrl}2EbxddW?->Of@;qG}LnOjg&sg&{1&FjfjI^Lb%~~M)X&Qgy136-oP4kRDkVa3`h3=FH%?p@ sv!0Uj&0VM%xNb!1@J z*w6hZkrl}2EbxddW?->Of3OrpLLnOkJe{9)0>EY#jWo`cK%NahZD7<6+bh}|k>%+_E*c8?^uDBV+ zc;u)<%#jb7!HkEOms&c^;XM-RFo*NtXWPab+#P!xZ?r$WyvRX;kLgi@0w3d}fHwcr viyAE29$sFhqTts!gV88IQswaSlVS{BcAggT5kfscyBR!P{an^LB{Ts5E4^4Y diff --git a/tests/OpenGL/package/glm/doc/api/tab_s.png b/tests/OpenGL/package/glm/doc/api/tab_s.png deleted file mode 100644 index 8d36eef701f28f3037288ac442aa5c51ea79ed0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!2^0spJ29*~C-V}>VM%xNb!1@J z*w6hZkrl}2EbxddW?->OfNbP0l+XkKBJ5O) diff --git a/tests/OpenGL/package/glm/doc/api/tabs.css b/tests/OpenGL/package/glm/doc/api/tabs.css deleted file mode 100644 index 9cf578f2..00000000 --- a/tests/OpenGL/package/glm/doc/api/tabs.css +++ /dev/null @@ -1,60 +0,0 @@ -.tabs, .tabs2, .tabs3 { - background-image: url('tab_b.png'); - width: 100%; - z-index: 101; - font-size: 13px; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; -} - -.tabs2 { - font-size: 10px; -} -.tabs3 { - font-size: 9px; -} - -.tablist { - margin: 0; - padding: 0; - display: table; -} - -.tablist li { - float: left; - display: table-cell; - background-image: url('tab_b.png'); - line-height: 36px; - list-style: none; -} - -.tablist a { - display: block; - padding: 0 20px; - font-weight: bold; - background-image:url('tab_s.png'); - background-repeat:no-repeat; - background-position:right; - color: #283A5D; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; - outline: none; -} - -.tabs3 .tablist a { - padding: 0 10px; -} - -.tablist a:hover { - background-image: url('tab_h.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); - text-decoration: none; -} - -.tablist li.current a { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} diff --git a/tests/OpenGL/package/glm/doc/man.doxy b/tests/OpenGL/package/glm/doc/man.doxy deleted file mode 100644 index 8eab2f64..00000000 --- a/tests/OpenGL/package/glm/doc/man.doxy +++ /dev/null @@ -1,2415 +0,0 @@ -# Doxyfile 1.8.10 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = "0.9.9 API documentation" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify a logo or an icon that is included -# in the documentation. The maximum height of the logo should not exceed 55 -# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy -# the logo to the output directory. - -PROJECT_LOGO = theme/logo-mini.png - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = . - -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII -# characters to appear in the names of generated files. If set to NO, non-ASCII -# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode -# U+3044. -# The default value is: NO. - -ALLOW_UNICODE_NAMES = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = "The $name class " \ - "The $name widget " \ - "The $name file " \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = NO - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = "C:/Documents and Settings/Groove/ " - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = YES - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = YES - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new -# page for each member. If set to NO, the documentation of a member will be part -# of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:\n" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. -# -# Note: For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by putting a % sign in front of the word or -# globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# If one adds a struct or class to a group and this option is enabled, then also -# any nested class or struct is added to the same group. By default this option -# is disabled and one has to add nested compounds explicitly via \ingroup. -# The default value is: NO. - -GROUP_NESTED_COMPOUNDS = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = NO - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO, -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = NO - -# This flag is only useful for Objective-C code. If set to YES, local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO, only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = YES - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = YES - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = YES - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO, these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = YES - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES, the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = YES - -# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will -# append additional text to a page's title, such as Class Reference. If set to -# YES the compound reference will be hidden. -# The default value is: NO. - -HIDE_COMPOUND_REFERENCE= NO - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = NO - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = NO - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = YES - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = YES - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo -# list. This list is created by putting \todo commands in the documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test -# list. This list is created by putting \test commands in the documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if ... \endif and \cond -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES, the -# list will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = NO - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. See also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = YES - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING -# Note: If this tag is empty the current directory is searched. - -INPUT = ../glm \ - . - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# read by doxygen. -# -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, -# *.vhdl, *.ucf, *.qsf, *.as and *.js. - -FILE_PATTERNS = *.hpp \ - *.doxy - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = * - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# -# -# where is the value of the INPUT_FILTER tag, and is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = YES - -# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. -# Note: The availability of this option depends on whether or not doxygen was -# compiled with the --with-libclang option. -# The default value is: NO. - -CLANG_ASSISTED_PARSING = NO - -# If clang assisted parsing is enabled you can provide the compiler with command -# line options that you would normally use when invoking the compiler. Note that -# the include paths will already be set by doxygen for the files and directories -# specified with INPUT and INCLUDE_PATH. -# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. - -CLANG_OPTIONS = - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = NO - -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# cascading style sheets that are included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefore more robust against future updates. -# Doxygen will copy the style sheet files to the output directory. -# Note: The order of the extra style sheet files is of importance (e.g. the last -# style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = NO - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler (hhc.exe). If non-empty, -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated -# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it -# enables the Previous and Next buttons. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = http://www.mathjax.org/mathjax - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use + S -# (what the is depends on the OS and browser, but it is typically -# , /

:O>:P?;OA(>(=(!;'"9'!8'#6%!5$ 6% 8$9!>#W9-iH9gE4J1%--*WGAUGBRD?OB+$@-&D1+D2+@-&>+$>+$=*#<)#<)";(";(!;)"<)#=+$<*#=*$@.';("?,%=+$=+$?,%=+$=*$?,%?-&=*$;("=*$?,%;(!:'!:' :'!<)#>,%;("9& :(!:'!:'!:'!4!6#<)#;("9& 8%7$6$6#4"4"5#5#4#9'!4"5$6$3!3!3!/01 102 2 .,++,/3M70cLF^IB;)#0115 <%B,&G.$H.$I.&H/'F.&C.%B-$B,&?*$=("<("8$23!2!3"5"5#3!2 100/.,/0.-......./1 2228$G3-[H@[D=E.(2!,--,/*''(,9%C-&A+#4 ,,-+,-..///1 3"4#4"3!6"5!8#9$9$<'"=(#;&<'<' <' =' >'!<' 7$7$29%<( =) ?*!A,#D.%E0'F0'G.$C)H0%U?3U?4?)"=( :&7%7%4#3"3"3!3"5#4#6$5#3"2 113"6%8& 8&!:)#9'"7& ;)#:(#5#6$:(#6$5#5#5#;(!;("<)":' 8&9& :'!<)#:(!:' :' 9' 6$<)#:(!;("<)#=*#@-';)"?,%@-'C0*I6/E2+D1+@.'@-'B/)D1*E2+@-&=*$>+%@-'B/(E3,D1+E0*E/*C.(B,'G1+A,&G1+E1+A/(C1*K81G4.F3,B/)@.'C0*B/(E2,I6/H5.E2+E2+:'!A.'E2+D1*B/(@.'8%9' :' =*#?,%=*#B0)@-'@-'G4-J71D0,H4/L83L83K72L83K72C/+D0+A.)@-(?-'>,&D2,F3.G5/H61G5/D2,D2.J84M;8O>:PA(!>)!>(!?("A)#B+#C-$E.&F.(G/)H0*G0)G/)G0)G0)G/)G0)E.(D-&C,%B+%A*$@*#@*#@*#?)#?)"<%<$9#6#3#2"1 214 9$D/'XCQB;TC(">(">("<& >("A+%A+%@*$D.(A+%;%:$<& @*$B+&<& <& >(">("='!='!>'!='!?)#='!E/)@*$>("@*$;%<& >("?)">( <';'<) =*!=+!@+!B,"E,#D( E(!U5/yZS{^WT80@%>"<#5!1.-.;(#C1+F4.@-'8&9& ;(">,%B0)B/)=)#9#>("A+%='!@*$A+%A+%D-(>("C-'C-'F/*G1,D.(A+%D.(D.(F/*C-'C-'?)#B,&G0+C,'A+%N82H2,='!>("B,&C-'E/*D.(<% ?)#@*$B+&A+%@+%C0)?,%B/(C0)?,%?,%D1*H5.F2,B/(L81J70C0)?,%@-&D1*G4-@-&B,&A+%?)#>("?*#=*$8&@.'?+%B/)@.(B0*G5/G5/1!+-,058"=%<$C*"C)!O5+kQF~dYw\RY>4N4,P6.P80N5/G/)A+%B,&@,%>+$@-&?,%<)":&8$:' ?+$9%8$9%:%:%9%9$8$:%9$;& =("<)"<*#?-&C0)B.(@-&B0)C0)<)#=+$A/(@.'A/(?-&?,%C1*F3-B0)C1*H6/K93M;5P>8P>8M;5R?:L:4K:4O>8Q@;Q@SE@TFAVICWJEWMIYNJ[QOZQO+%$#&&&'%')+-. / 1!3!4!5!7"8#:$;&>(!@)#A+$B+%E.(I2,K4-J3-H1+C,%C,&B+$?("?("@)"@) >(='='=(=(;' 9'8'!7&!5$4#7%6!9"P6,dG;hJ;S8,-*(XHBSD@RC?RE@PB=M>9N;6E1,F2-B.)@,'C/*G3.G3.G3/D0+H4/H40G3.G3.B/*B.)B/*C/*F2-J71H5.B/(D1+@.'?-&A.'?,&@-';("@-'B/)@-&=*#=*#?,%<)#@-'E2,F3,?,&E2+A/(>+%>+$>,%>+%?,%C0*?,&;(":(!<)";(":' :'!:'!9' ;)"@-';(";)">,%>+%<)">,%<)#9' ;("=*$<)#9& :(!<*#;(":(!:'!9&:'!;)"9& 9' :(!9' 6$:'!4!6$9& 9& 8%9& 8&6#5#4"2!4"3"4#6%5$3"4"1 1 3"0.1 2!/01/++-.-/A*$fNGpWQI4.5 0137!?)$D-$F.$H/&I/(G/'D.%C-%A+%?)#=("<'!;'"16#3!3!4"3!2 3!3!1/,,-.0.-----.0 //12234@*"XB:`H@V=6B+$0/1 /0,)&'*9$K5-T>7N903 ,+++,./0///1!3#4"4#5#6"6"8#:% ;&!:& 9$9$;&;&;%<'"=(";& 6#3!4!9&=) >) @+"C-$D.%D.%D.$E+!A(E.#G1&B,"6!:$5"5#5#4"4"4#3!4"4#4"4"2 2 2 3!4#6$7& 8& 7% 7% 7& 8'!:(#9'"6%4#5#5$7% 6$6$8&:'!<*#:' 8&9& :'!<)#9' ;)";)"9' 9' ?-&9' :' 7$9& ?-&?,&@-'?,&@.'C0)C0*@-'@-&B/(B/)C1*D1+@-&@-'@-'A.(D1+E3,B/(B,'@*%?*$C.(J4/J5/M82G3-E3,E3,D1+?,&?,%@-&B/(A/(>+%B/(F3,F3-B/)?,&?,%;)"?,%@-'?,%<)#;(!=*$>,%A.(B/(A.'?,%;(";(!@-'F3-H4/G3.M94N:6M94K72H4/B.)<(#@.(B0*A/*=+%<*$D2-D2,C1+C0+H61N<8N<8P?;SA>RD?UICYMHYNK3:!V8/cF=WB(!?*"?)"@("A*#B+"C-#E.&F.(H0*I1+H1*G0)F/(F.(F/(G0)D-'C,%B+%B+%A*$@*#@)#@)#?)#?(!>'>&:$6$4$3#3!3!3!6"8#>) G2)B-$3.,+*[PL[OIZMHYLEVJBQC;M<5K;4N<6J82I71G4/C1*@-&>+%>,%:' ;& ='!@*$B,&A+%?)#B,&=&!<& =&!<& ='!>(">("=&!;%B,&K5/J4.='!9";$<% >("@*$?)#='!='!;%?)#>("='!@*$B+&>(">(">("J3.E.)B,&B,&<& ='!?(#>(!B,$C.&A.%>+">+"?,"A,"C-#@(B'I,$W71vWPx\TQ5.C' ?#:!4 0/-.<*$?-'=+%B/)A/(9' =+$I70K92B0);' =&!C-'C-'='!@*$A+&C-'F/*C-'F0+A+%D.(B+&?)$A+%C-'E/)I3.A+%G1+I3-I3.H2,C-'H2,WA;C-'<& A+&H2,G1+D.(E/)@*$>(#@*$F0*H2,E/)A.'>+$?,%A.'@-&A.'D1*E2+B/(A.'F3,G3-E1+B/(A.'A.'C/)C0)F0*D.(B,&A+%>)#<)"<*#=+$=*$@-'>,&B/*H60I822"**,/4 7#;&9$@)!A)"K2+eLC{aYu\SX?6Q81P80O70I2+B,%A+%H2,D.(D.(D/)?*$='!?)#>("@)$?(#<& ;%;%;%;%9#9#:$<& <& <& ;& ;'!:(!;)">+$>+$?,&C0*D0*9' :'!F4-=+$?-&D1+A/(C0*G5.E3-E3,H5/J71K93O<7P>8M;5O<6J72K:3P?9Q@;Q@Q@^A38'!/+0 SE@RC?QB>N@;J;6I51G4/P<7M95H4/H4/D0+D0,D1,F3.G3.E1,C/+G3/B/*@,(?,'@-(C0+D1*@-&@.'E2+C0*@-'B/)=+$<)#9' =*$B/)B0)B0*?-'>,%@.(C2+E3-I70@.'A/(@-&>+%?,%=+$:'!=*$@.'@-&<)#;)"<)#;(":(!;(";(":'!=+$>,%=*$=+$=+$<)#=+$7%5"8&<)#<*#<*#:'!;(";)";(":(!:'!7%9' ;("9' 8%9& :'!6#8%7%6$5#4!8%6#9' 9& 6$5"4#4#3"3"4#5#3!3!4"1 1 2!.2 3"/.0/**-../0]C'!//11:(@/%B0#D2%G/'G/'F.&D,%A*$>(";& ;& :& 4!5!3!2!3"3!13!3!3!1.,-.//..--,-////00327 G1([C;`F?O6/3!+,,,2-+**.F0'W@9[D*!A,#C.%C-$B-$D-#F-#F.#D-"D.#=(9$:&9& 7%4#3"3"3!14#3"2!1/1 2 4"4#4"3"6$4"7& 8&!6$;)$6$5#5#5#4#7% 7% 7%7$8&;("9' 9&8%:' <)";)":'!>,%>+%:' 9' A.(<*#7%=+$?,&=+$@-&B0)A.(B/)@-'=*$>+%A.(C1*A/(?-&>,%@-&?-&A.(E2,C0*?+%A,&B-'D/)G1,I3.K5/M72G4.F4.D2+@-&:(!9' >+$B/)C0*E2,I6/H5/H5/F3,D1+B/(>+$=*$>+%:'!:'!?,&D1*@-'E2,F3-?,&9&:'!@-'>+$A-(B/*E1,J61J62K73J61E1,@-(@,'>,&=+&E3->,&A0*Q?:K93K93K93M;6O=:O>:N=:UD@UHCVJDVKFUKG4D&a>2hF:WB<>*%5!5!6"8#:& 8$9$9$8#;&>(!?*#@*#A*#A*#B,#D-$E.&F.(G0)I1+J2,K4-L4.J3,H1*F/)E.'D-'D-&C,%A+$@*#?(">'!<& =&>'=%:#4"2"2!2!3"3#5"224 3,,+))^SN\OJYLFXLDWKCRC;M<5K:4L:4J82F3-D2,@-'=*#<)"<)#;'!='!>("='!='!='!A+%I3.='!<& ;%;$<& >("?)#='!<& ;%='!='!;$<& ?)#='!<& :$?)#D.(@*$:$?)#?)#>("C,'D.(='!='!>(#I3.I3-C-'?)#?)#@)$P:4@*$@*$='!<& ?)#@*$?)"?)">( ?'!A)"E,%P70rYRsZTJ1+A)"<$6"2!00/-8& @-(B0*G5/L:3C0*7%9' C1*M:3L81?(#:$A+%B,&D.(B,&A+%D-(E/)G1+D.(I3-D.)@*$A+%D.(E/)L60H2,L60J4.H2,F0*B,'H2,>("D.(H2,C-'D.(H2,B,&D.(B,&B,&B,&F0*H2,F1+H5.C/)@,&@-&A.'B/(A.'?,%=)#E2+C0)F2,F3,D1*A.'=*#=*#D1*D.(A+&A+%A+%>)#:'!B0)<*#?,%>+%?-'B0*F3.H605%(*+-/3!:' 8&?*%A,&H1,\D?r[ToWPX@9P83O70N70K5-F0)D.(E/)@*$A+%B,&?)#='!@*$A+%B,&>("='"=&!;%:$:$9#8":$='!='"='!=(";(!:'!9& 9&9&:' <*#?,%=+$>,%A/(C1+G5.G5.@.'A/(H6/E3,G4.I70J81M;5R?:L:4K93I71H60L:4P?9P@9RA=VD@TB?UC@TD@QC>RD?WKEXKEYNIXNJZPM\RP -$&'.:$C,&H0)-)((,1234 4"2#3#8#9#9$;%='!>("@*#@*$D-'H1+K5.O82F/)G0*D.'B+%@)#?(!?(!@*"?*!>(!>'!>( >'<%:$9$9& 8&!5#7&!6%6#?)!R;2_H>X@75#)'*WGBRC>N=9K=8H:5H61J61N:6M94F2-K73D1,B.*E2-G3/E1,C0+?,'C/+?,'=)$>*&A-)B.*C1*>,%B0)C1+;)#>,&@.'>-&<*#;)#=+$=+$B1*E3,D3,E3-F4.D3,E3,E3,@.'?-&@-'>+%@.'?,&<)#:(!9' 8&<)#=+$9& 7$8%:(!=*$<)#?,&>,%<)#:(!;("7%9& 9' 8&8& <*#<*#:(!9' 9' 9' 9' 9' 8& 6$7$9& :'!7%8&:'!6$5#6$6#4"7%7$6#6$7%7$3!5#5#4"3!4"4"2!3!3"2!02 -.//2!0 -((*,.30N4,iNGfLEH0)21115#?,$@/"B1$E/%F.&F.&E-%D,&@+%>)#<'!9%6"22!2!2!3"2!2 2 2 2 2!1 /--/.--,++,..-002335P:2_E>Y?8A+$.0-.2,++,8#N80^G?]F=C-%3-+.,.0 1!1!1!0012 3"5#5#4"4"5#6$6$6#7"8$8#7#8#8%7%5#6$17$;'<(?*!A,$C.%B-$A,#C+!G.#G/$C-"E/$;&7"8$8&5$3"3!3!2 1 4#2 1//2!1 5#4"5#6%6$2 3"5$6%6%4"3"5#4"4#5$6%7%5"6$8&8&7%4"8%<)#=*#;)"<)#;(":'!:'!;)"<)#9' <*#;(";)"=+$?-&?-&?-&>+%=*$>+$@.'B/)?,&=*$=+$>+%>+%A.(D2+B/)@,&@+%A+&D/)F0+H2-H3-G2-D2+E3-C1*A.(=*$:(!<)#@.'>+%B/)F3-F3-F3-F4-D1+B/)@.'>+%:(!8%8%9' :' 9& ?,&B/)=*#<*#@.'C0*>+%@,'?+'A.)C0+C0+H40K72D1,C/+D1,B0+A0*I72H60I71L:4L:4L:4P>8M;7O=:P>:N=:SB>THBSGAUJEVKH3L.#cA5cE:N;68% 4 5!7"8$=(#9$9%:$;$=& ?("A*#A*#A*#A+#C-$E.%F.&F.'G/(G/(H1*L4.N60J3,F/(C,&C,&D-&D-&C-&C,&B,%A+$@*#>(">'>&<$9"3!0 001 2"6!2/.-*))'(\QL\OJ[OIZMFVIBTE=N>7L;5N;6K93C1+=+%:(";)"<)#;(!;' >(">(">(">("='!;%9#;% <% ;%:$;%='!='"='!<&!@*$?(#;%8";$?)#>("='!<& ?)#B,&?)#;%@)$?)$>("@*$A+%>("='";%?)#@*$?)#='"<% :$>(":$>("A+%@*$?)$B,&>("@*"A+#A*$C+%E.'P81jRKiQJF/(=&:#5!1!/.0.@.(H60D2,B0*?-&:'!;(":'!7%;(!>*$<& C-(:$B,&E/)C-(C-(G1+G1,@*$9#:$='!?)#D.)K5/D.(F0*K5/K50I3-H2,H2-H2,D.(@*$J4/F0*C-'D.)E/)A+&?)$:$@*$B,'D.(E/)C.(C0)C0)@-&?,%?,%?,&?,%>+$?,%C0)C/)F3,D1*>+$9& 9%8%;(!?*$>("=(">)#;' 7$C0*;)#?,%?-'A/)C1,C1+F4.5%(**+-17%:'!A,&B-'E.)Q:4aIB_GAR:3M50L4.N70O91M70I3-D.(A+%@*$@*$='";%='!='!='";% <&!='!:$9#;%9#9#:$<& ='!<& >(";(";("9'!9&9&:(!;(!?,%?,&?-&@.'D2+I70J81D2+>+%G5.A/(F4-J82E3,I71Q?9L:4K94I71I71M<6M=6O?8P?:Q?;SB>UD@SC?PB=SE@THBWJEVKFXMIYPLXPNZSP&%)4F-%T:3W=56")'),13455!3$4#8#9$:$;%=' >("?)"@*$D-'I2,J4-C,&G0*G0*C,&@)#@)#>' >(!?*#?*$>)#>)#>(!?'>&<$;$:& 7%6$7& 8' 6%8$C,$J3)F.$9&0 ,*QA:M?:H95K94L94L84K72E2-G3/G3.E1-G4/L84D0,A-)A-(C/*@,(<($=)%>*%?,'B/)@.(>-&?-&;)":(!;)":(!:(!=+$C1*<)#=+$@.'C1+E2,B0)G4.E3,E2,C0*A/(C1*@-'B/(A.(>+$:(!:'!7%:'!;(":(!:'!9' 7%8& ;(">+%>+%;(";)":("7%7%9& :'!<)#7$9'!:'!9& 8%6$7%9' 9& 6$5"6$8& 7%7%8%7%6#6#5#6#4!3!5#6$6#5#2 2 4"5"4!5"3!2 2!2!2 0/./0-3".,+)',-02@'bHAmTLP829!1211:*!?."A0#C0$F-$E-%E-%E-&C,&@+%=("9%6"26#1!1 1 2 1/--//.-,....-,,,./.03 06 50@*!T<4Y?8K3,-0--16"-+*+,@*"T=5^G?X@8:#2.//,/1!2"2"1!1 1 1 2!3"5#5#4#4"5#6$7%7$7#9$7$6#7%7%5#3!2 16#9&<(!?+"@+#A,#B,$A+#C)H/%E.$D.$B,#:%47$6$4"2!2!3"2!3!3!10/00011 3!4#4#3!3"4"5#4"3!3!4#4"4"3"5#7$3!5"6$7%6$4"9& ?,&;)"8%7%9' :(!=+$<*#;)";)";)";)"9& :'!;(";)">,%>,%=*$<)";)"<*#@-'<)#>,%B0)B0)?,&>+%=+$=("@+%D/)E0*@*%E0*F1+D0*A/(A/)B/)F3-D2+@.'>+%@.'@-'C0*B/(B0)F3,D2+A.(@-'?,&=*#9& 8&7$6#8&;(";(";("=*$>+$=*$<)#;(">+&A.)C0+B.)@,(B.*F2-B/*F3.G5/H60I71B0*C1+I71H61G50J82N<7M;7N<8N=9O>:P@'!?("?("?("A*"C-#D.%G.%H/&I/'J1)N5-K2*J1)J1)H/(F.&E-&D,%C,%D,&C,%B+%A*$?)#>(">(>'<%8"4 10//0 3 30.-*((()[PK\OI\OIXLDQE=VG?N>7J93K93J82E3-;(#9' <)"?,&>,%;'!>("='"?)#?)#='!;%:$;% <& ;% ;%;%;% <& ='!>("='";%:$<% >("@*$@*$='"='!<&!<& ;% <& @*$?)#;% ='!B,&E0*D.(='"='!C-(H2,G1+A+%<& ='!@*$D.(?)#?)#A+%A+%@*$A+$A+$A*%B*$A*#F/(R:4P82A)#;$:#5"1!/.,0B0*C1+D2-J82@.'A/)9' 7%7$8%;'!>+$<(":& H4.N;4Q=7K71B/(E2+D1*4 <("F2,B/(B.(K71C0)N:4>*$B/(E2+C0)C/(F2+B.'=)#@,&?+$A-'D0)C/)D0*@,&B/(@,&H4.H4.@-&?,%A.';(!A.'E2+D1*@-&;(!9& A.(:'!8%?,%A.'>+$:'!:' 8%8%<)";)"9' 8%7$5!>*%?,'D2,D2-D2-C1+?-(F4.5#*+*,.3!:'!>,%B.(B,&A*%F.)K3-L4-F.(G/*K3-N70O92N81M72H2,E/)B,&@*$>("='"B,&='!;% ;%='!?)#?)#?)#A+%@*$>(#='"='!<'!;%?)#=)#=*$<*#:(!:'!=*#:("@-'H5/B0)>,&B0*H6/M;4A/(G5/C1*C1*A/)>,%F4.VD>L:4L:4M;5K93K93O=7F60K;4N=8N<8P>:Q@TFAWJDWKEYNI[QM\RNZSPXPN)&(2G.'Y@9Y@9<( *(*+03466 3$4$7$9#9$:$<& >(!?("@*#C,&F/)G1*G0)E/(F/)E.(A*$@*#>'!?(!>)#=)#=(#=)"@("@( ?&=%<$<%8$6$6%7& 6& 5#6$7$5!0+#" TB=P?;J96J;6I;6I94J72K72J72L84I51D1,?,'=*%G3.@-(D1,C0+C/*D1,B/*@,'<($=)%>+&@.'B0*>+%A.(?,&?,%?-&=*$:'!A.(?,&=*$?+%A-'C/)@,&?*%B.(D0*A.(C0*@.'<*#@.'A/(=+$:(!;("9' :'!;(";(";)";("9& 8%9' <*#=*$9' 9'!9'!9& 8&8&8%8&:'!:(!:'!:(!8&6#6$7$7%7%5"6$7%8&7%6$6$8%5#5"5#4"3!4!5#6$6$5"3!5#6#5#5"3!2 2!2!2!0/.-1 -00 .+)&*,-14N60]E=P93;$/1217%>+#B.#C/%D,"D,"E-%F.&E.&A,&>)#:& 7#211 1 0 1 1 /-,,--,,,---,+++,-.,1/2413C.%J1*B*$3 -.--1,+*+/E0(WA:\E=J3,5,'+,./0 1!0 0 001 1 1!3"3"3!2!3"5$6%6#7#8%7%7%9' 7%4"2!05#7$9&<(!>*!=) @+"A+#B+"E,"F.$B,"A+"?)!9$5 8%4#3!2 2!3"3!10//0./1 2 2 4"3"3!3"4#4#4"3"3!3!3"3!4"04"6$4"5#7%7%5"5"9& <*#9'!:'!9' 9& ;("=*$;)"<)#<*#<)#:'!7$:(!8%8& <)#<*#;)"5#6#9& =*$@-'A/(?-&<*#9' 9& <)#?*$@+%C-(A+&=("E0*D/)C/)?-'>-&D2+F3-@-'?,%@.'@.'=+$B0)A/(D1+E3,B/)=+$<*#<*#<)":'!8%8%8%<)#;)"8&8%<*#=+$:' 9& :'!>*%F2-H50F3.@,(=)%A-(C0+=)%<*$A0*D2-@/)?.(I71F4/D2,G5/K94J84H62F41H73L=8MA;L@;MB>1!4S7*aC7S:2=)$4 5!6"7#8$9$7#9%;%<& >' >'!>' =& >'!@)!B,#D-$G.&H/'H/'J1)O6-N5-H/'G.&H/'H/&F-%E,$D,$F-%F-%E-%C+#B+#B+$=':%8$5"3!1!1 1 0 0 14 1/-+''']RO]QL\PJZNGUIAOB;WG?M=6F5/F4.F4.C1+G4/@.(A.(>,%<)">*#A+&>(";%<& <& :$9#:$;% ;%;%;%;% <& <& >("='!;%<& ='!='!>("?)$<& :$='!='!;%<&!?)$A+%?)#@*$?)#>(">("='!9#B,&E/)A+&='!<& <& ?)#B,&A,&@*$A,&C-(B,&@*#C-&B+%A*$?(!@(!A*#?(!=&:#;%7$1!/.-.@.(F4/E3-E3-@.'?,&;)#:' 8%9&:' :' =*#:' @-&E2+Q>7M:3?,%D1*@-&H5.J70H5.E2+D1*F3,I6/H5.H5.D1*B/)B/)C0)B0)@-&>+$?,&@-'@-&@-&B/(E2+>+$B/(?,%B/)A.(>+$?,%A.(A.(F3,C0*@-'@-&?,%;(!;(!;(!7$9&9& 8%8%8%7$:'!9&:(!=*$?,&B/(D0+G3.B0*E3-F4.>+&5#;)#E3-6$ ,++--3!8&;)"=)#@+%F0*N61L5.T<6J2,C+&E.(L5.P:3N81M71G1+E/)C.(B,'@*%?)#G1+?)$<& ;% ='!?)#@+%A+%>(#<&!;% ;%;%<&!B,'F0*B.(@.'>,%;(":' =*#9'!>,%D2+@.(>,%@.(>,%C1+C1*C0*B0)A/(A/(E3->,%E3-D2,E3-E3.D2,F4.O=7B2+F6/N=8O>:N<9O>:O>:QA=TD@VGCVIDVJEULGYOKXPMVNK(&(0D,%W>8W?8@+#+)**/2567 3#3$6#8#9$;%<& ='!>("?)#B,&E.(F/)G0*E.(D-'F/(D.'A*#?)"?(">)#;(#;(#=)"@)"A(!@'>%<$<$9#6#5$5%6&"6& 4#10/.+)/ N=9L;7J:6I;6H94F3.F2-H40K73J61E2-B/*A-(@,(@-(A-(@,'A.)H50E1,A.)?+&>*&>+%=)#@,&@+%A-'B.(A,&<'!A,&@+&A,'@*%A,&G2,A,&B-'A,'?*$@+%C/)B/)@-'=+$<*#=+$=+%;(";)";(":(!;(";("9& 9& 8&8&9& :'!=+$;)"8&6$6$8&9'!:'!8& 7$8&;("9& 8& 7%6$6$7$7%:(!6$5#6$7%7%5#6#7%6#5"5#5"4"3 4"6#6$5#4"4"4"4"4!3!11 1 2!1 00-/--1 -,*&)/-,/9"C-&D.(7!-.024"<)#B-$C-$C,"D,"E-$F.&F.&B,%>)#;'!9%6"10 0 1 2!2 1 /.,,++,,./.--,-...--/032/4!3/-+-. - /.,,,/8#E/)P93Q:2>'"40///0 0 0 0 //000//01 1 0 2!4#5$4 6$7%8& 9'!:("7& 3"4"17$8%;'!=)!=)!=( @*!?) C+!C* A* @+!@*!;&8$6#4"2!3"1 1 2 1 00.--..//1 4#3"2 3!4#4"2!4#4"1 03!6%/3"3"4#5#5#7%5$5$8& ;)":("9' 9' :(";)#:(":'!;(";'!:'!9'!9' ;)"8%5#5#8%:(!:'!8%9' :(!;("<*#=+$;)":(!;)">*$@+&?*$B-(>)#@*%E0*A,&A.(C1+B0)A/(B/)>+%=+$?,&=*$<)"?-&=*$B/)C1*?,&9' ;("<)#9' :'!:'!9' =*$;(":(!9' 8%9& ;)":(!:'!:'!>*&D1,D1,G4/D0+>*&@-(G3.A.)A/)H60B1+?-(B1+C1,D2-B0*D2-F4/D2.F41I84I84I;6K?:NB=ND@*/D,!I2&=(!4 13 6"7#8$8#7"8$<%=& =' =' =& =& >'!A*"C,#D-$F-%H/'I0'J1)N5,O6.K2*I0'G.&G.&E-$D+#C+#D,$D,$C+#B*"A*"A*":(8&4$1#1"2"1"1!0!0 1//.-+(&$]SO^RM\PJXLESG?PC(#='!>(#B,&@*%9#9#<'!<& ;% >(#C-'?)$B,'A,&=("='!>("<&!>("?)#A+&D.(E/*E/)C.(E/(A+$C,&B+%B*$A)#=&;#>' ;$;%6#1!0 /-/<*$E3-F4/B0*=+$9' :(!7$7%<)#>,%<)">+%A/(>+$C0)G4.D1+>+%>+$>+$E2+H5/C0)C0)E2,E2,L92C0*O<6A.':'!>+%B/)A.'A.'A.(A.(C0*A.'@.'E2,D1*@-&?,%E2,A.(@-&B/(?,&>+$?,%A.(>,%;(";(!<)#<)"?,%B/(@-'?,%=*#=+$A.'B/)=*#;(!?,%>+%?-&G4.K82D0+E1-C0+>,'B0*F4/D2,@.(6$6$ ,+,--2!7%:("=*#@*%C-'I1,G/)O70I2+C,&C+%E.'F0(D.'F0*D/)F0*I3-I3-C-'<& D.(A+%?)#>(#@*%C.(D.(C-(?)#<&!<& <'!='"='!='"C-(A.'A/(?-&:(!8%<)#7%;(!>,%?-&?-'B0)@.(?-'C1*C1+C1+C1+B0)D2,A/(J82G50F4.F4.A/)?-'J83C2,D3-J:4N=9M;7N=9R@=P?;SB>VFBWIDUHCQFCVKHXPMVOL'%'.A)#T<5V>7C.'+()(,14663"2#5#8"9#;%<& >(!?("?)#C,&E/(F0)H1+F0)D-'D-'D-'B,%?)"?("@*$;)$;($=)#@*"A)!@'=$;":"9#7"6#4#4$ 6% 4#1 0/.+)+N<8L;7I95F83D51A.*A.)C0+E2-F2.F2.E2-E1-A.)@,(?,'?+'>*%C/+B/*@-(?+&?+&?+'=(#;& =("B,'C.)=(#B-'?*$A,&C.(A,&>)$B-(@+%A+&A,'A,'@+%A,'B/(?-&;)":'!=+$<*$=+$;(";("<)#;(";("8%7$6$7$8&7%:'!7%6#6#6$7$8&:'!:'!8& 7$9'!7%6$5#6$7%6$5#7%5#4"7$8&7%5#5"5#6$5#5#4"4"3!3 5"6$4"3!3!3!3!3!2 10/01 00//.+0-+*)(/.,,-.2.*+/13 :'!A+$D,$C,#C+!E-#F.%E.&B,$>*"<'!:& 9%4 7$01 2!3!1 0/-,++,,...-,,++++*)*-....,/*-++--2 ,,,-/047!6 201-/1 1 1!0 0 /0 1 1 0/./0001!3#4!3 5#6%8& :)"9("6%3"117$:' >*$@,#?*!>) >(='D+!=$B+"E/&@+"7"9$4!3"3"1 /00//0/---..-2 4"2!013!2!3"4#4#2 14"3"04#2!2!2 4"7&6$5$8& 9'!8& 7%8& :("9(!8& 9& ;& 7";(!:(!9& 8&9' ;("4"4!7%8& 7&=*$;'";'!=)#?+%<("<(">*$?+%@+%A,&C.)>)#C.(C.(=)#=+$A/)>,&>+%=*$;)"<*#=+$<)#>+%=+$8&A.(A.(;("8&;("<*#9& <*#:(!:'!;(!7$:'!:(!7$6$:'!=*$8%9% A.)E1-@,(?+'>*&<)$@-(B/*?,'@/)E3->,'@.(B0+@.)E3-C1+@.(B0,D3/C2.D40G63J=8MAMB?)-7721135!7#8$8$8$:%:$=& =' =& =& >'!@)"B,#C-$D-$G.%J1(K2*J1)N5-P7/M4+I0(F-%G.&F-%E,$D+#D,$D,$C+#B*"@)!?)!;'9&5%2#1"1!0!0!/!1 1.0.,+(&&[QM\PKZNHVJCQE=M@8L<4J:3J82H60A/)<*%>,&<*#C0*A/);(":%<& ;%:$>(#='":$8#9#9$8"7":$<& <& <& <& >("A+%>(#;% :$;%:$:$8":%8"='!C-(A+%9#;% ='";% ;%?)$E/*B,&@*$?)$<'!='">(#='"@*%?)#='!E/*F1+D/)F1+H2+<&F.)C,&B+$A)#=&;$>' <%:#4"0 0/.1;)#B1+G5/C1+>,&:(!7%5"8%=*#>+%=*$>+$B/(>+$B/(@-&?,%@-&<*#@-'?,%C0)B/(A.(C0*F3-I6/F3-O<6B/(:' <)"@-&?,%B/)E2+B/)B/(@-&?,&B/(>+%?,&?,&F3-@-&>+%D1*@-&>+%>+$>+%>,%>+%>+%?,%=*$>+$>+$?,&>+%<)#>+$E2,J70C1*=*#=*$@.'B0)C1*F3-H4/H4/C0+E3.H60D2-@.)G5/<*$3!++,.03!6$:("?,&D/)D.)H0,I2+K4-J3,H1+F.)D-&F1)G1)F0*B,&D.(J4.L71G1,<'!B-'B,&@+%?)#?*$F0*C-'@*$>("<'!;% :%;%<& <& A,&A-'A.'?-&9' 6#;("7%9' =+$>,%<*#@.(A/(@.'A/(B0*D2+D2,C1*A/)?-&C1+C1+I71R@;E3-I71G50D4-D4-D4.D3/F40L;8P?;N=9Q@;VFAXJEUIDRHDTJFUMJUNK"#%+<&!O93U?:G3.+%''*/3663!2#4#7"9#;%<& ='!>("?)#A+%D-'F0)H2+G1*D.(C-&B+%@)#?("@*#C,&=*$<)$=)$@)"A)!A(?&=$;"8"6"7$5$3#3#3"1 3 1.*(*N<8K;7J:6I;7G94D2.B/*C/*D0,F2.B/*B/*B/*B.*A.)?+&?,'?,'B.*?,';(#<)$>+&;(#<("<&!<&!@+%D/*9#?*%B-'B-(B-'A+&A,&D/)B,'?*$@*%B-'?*%@+%?+%>+%=+$<*#?,&<*#;(":'!9' ;(":'!9' 7$6#5#6#7%6$6$6$6#8%9' 8&7%8&9& 9& 7$7%6$5#5#5#7%6$4"7$8& 5#7%6$6$6$6$6$6$3!4"4!3!3!2 3!5#4"3!3!3!4!3!3!2 101 2 0//-0,..,++),/.+0++,,-01 4!9%@*#F,&D*%C+"E-#F.$E.%C,$?+"=(";& 9% 5!2./1 3!0/.----,,----,+*)((((')++,.*0.,+%)(,*+-01.311001)/000 0 // 0 1 1 0 /./01 1 2!4"3 4!5#6$7& 9("7& 3"1 -3!7$;' >+#@,#?*!?*!>( ?(?&8 Q;2R<3C-%5 4 2 4#2!0/00////.,.//.2!1 //02!2 1 2 3!2!/2 02 3"2!1 03"5#4"3"8%7%6$6#6$7& 7%7%:& ;& 9%:'!9& 9& 9' 9' 9& 5#7%:("9(!8& ;)"8$;& >)$>)#;&!<'"?*%>)$?*%A,'A+&='"?*%?*$?)$@+%B-(@,&?+%<(":& ;'!=)#=)#@-'>+%>+%D2+@.'@.(=*$;)"<*#=*$:'!;)";("9& 7%:(!;)"6#6$;(!=*$9& :'">*%>*%=*%?,'@-(>+&>*%<)$=*%@/)A0*?-'?-(A/)D3-H60?.(>-'?-)C1-E40E41D40F:4K?9LA'<&;%7$5"3 2131135!9&4!-**(&YOK[OIZNHVJCOC;L>7N>7J:3J82F4/B0*>,'=+%?-&D1+H6/?,%>*$@*%>(";%>("=("9$8"8#9#8"7!9#:%;%;%;% >("E/*?*$='">(#>(#<& :$6 <&!9#='"C-'B-'>(#@*%='"<& <'!@+%D.)@*%>("?)#=("='"='!='"A+&>)#<&!@*$A+&D/)G2+C.&?)"G0+C+%>' <%=&=%;$8!:#3!//.-1 <+%C1,E3-A/)>,&=+$7%5"8%:' ;(!=*$=*#=*$;(!@-&>+$?,%C0)A/(E2+C1*C0*F3,E2+C0*E2+E2,I6/K81F3-?,&<*#>+$>+%B/)E3,B/(>+$<)#;(!9&8%>+$B0)B0)=*#=*#A.'?,%@-&A.(A.(@-&?,%@-'C0)B/(>+$=*$@-'@-'>+%A.'I70N;5J70D1+?,%?,&A0)A/)D2+G3.F2-=+%@.(C2,@.(>,'@.)8& 4"++-/.05"8&=*$C.(C-(H1,X@:[C=V?8P82G0*?(!@+#A+$>(":$=("E/*J4.N82I4.H3-D.(@*%>("='"E/)?)#<& =("?)$>(":$:$<& <& @*%?+%=+$=+$8& 6#>,%>+%<*#=+$<*$6$>,&;)#?.'?-&?-'D2+C2+A/)C1*D2,E3-F4/F4/F4/C1+G5/F4/C2,C3,H71J95D2/K:6N=9K;5M=6SC=SE@RF@QHDRIERJFSLJ "#)4B,'H2,>)#*'''(-2564 1"2"7"8#:%<& ='!='!?)"@*$C,&D.'E.(F/)D.'D-'A+$?)"?("?("<&<)"<)$=(#?("@(!@'?&=%<$:#5!6$7& 7&!5$2 2 5"4 /*(*K95I85I95F83C50D3.E1-C0+>+&C0+=)%=*%?,'@-(D1,?,'=+%@-(@.(=+%:("?,&=+$;(">*$@+&>)#>)#@+%;&!<'!>)#?*$B,'<'"='"?*$>)$='"B-'A,'A+&@+%?+%=*$>,&=+$=+%<*#;)";("8&6$9' 9& 6$5#5#5#7%6$6#6$6#6$7%8%6$5#6$7%7$7%6$4"6$6#6$6$5#5#:'!5#5#5#5#5#5#6$5#2 2 4"4"2 2 3!4"4"3!2 2 2 2 2 2 2 1000..+.../,,,++-0+/-+,+,-.1!5#;)"F-(F,'D,$D,"E-#E-$C,$A,#>*#<'!9%7#/6$-/1!2 0.-.///-,-----+*('((()+,-0 ./2.1"-. . -/+*,/0..00100-+//////0 0 00 /.-./001 2!4 6"5#5$5%6%3"/6%1 7%7$8%;'='!>("A+%A+%C*">%F.%`JA]G>>*"5 4 3!4"1 0000//..--./////00.-0/01 2 1 1 2 2!2!1 1 03"3!2 3!7$6%5#5#6$6%6%7%:% :%9% :(!9' 8%6$6#6$6$5#8%7%8' 9& 7";& >)#<'!:% ;&!='">)#>)#@+%@+&?*%A,'?*$@+&B-(C.(B,'@+%<&!:%;% <'!='"<'!?*$@-'B0)C1+@.'<*#<*#=+$=+$;("<)#<)#8& 8%:'!;("7%9& <)#>+%>+%?+';'#=*%>*%=*%?+'@-(=)%;(#=+&@.(@.)@.(=,&?.(=+&:(";)$<*%=,(C2.F51F51E61E93H<6I?:I?;*00/25!4 3 5!6"6"7#8#8#:$<& =' =& =' ?("A+$B,#A+"D,$G.&H0'J1)J2)M5,K3*H/'G.&G.&E-$C+#C*"C*"C+#C+#B+#@)!>'=&;%9%5$3!2001117"B-%K6.D/'0*)'&YNJ\PJXLGUHAPD,&;)$>,&?-&A.'D2+C0*C.(A,&@+%@*$<&!;& 8"9$:$:$:$:$9#9#:%;& ;% ;%@+%8#7!:$<& <& <&!:%='!7":%=("<&!;%<'!:%@*$?)#>(#>(#;& ;% >(#='";& ;% <&!=(">)#>(">(#@+%@*%C-'I4,C.&>'"D-'E.'B*$>' >'!@)#:#7 2 /..-/:("C1,B0+;)#8&;)#9' 4!5"9& <)#=*#=+$?,&=*$C0*B0)D1+H5.E2,H5.D1+A.(E2+H5/F4-C1*E2+C0*A/(?,&<)#:(!=*#A.(?-&>+%=*#:'!<)#@-'?-&<)"E2,C1*D1+B0)A.'@-'=+$<*#B/)A/(=*$;(!=*$C0*E2,?-&A.'C0)B/)B/)F4-L92L93I60E3,@.'<*#<*$@.'D1+<)$=)$;)#=+%>,'<*%<*$9'!8& 7%!-,,/.16$8&:(!A,'B-'K4/fOIkTM`HBR;5H1,A)#B-%A,$='!;% ='!=(">("J5/N82L71F1+C-'C-(B-'E0*>(":%='"@+%@*%<'!:%<& <'!@*%@,%<)#9'!7%:'!7$8& =+$@-'A/(<*$>,&9'!>,&?.'>,%B0*B0*@.'C1+E3-E3-D2,C1,A/*B0+G50E3-A0*A1+C3-L<8O=:I84H73J94M=5O?9OA=PB=ND?NFAPHDRJH #$(-47!1(')(',256 4 0!1"6"8#:%<& ='!='!?)"@*$B+%D-'E/)E.(D-'D.'B+%@)#?("?("<&<("=*%=($='!>& >%>%=%<%<%6#5$7& 8(!6%08"<%8!0*(*2"F51H83D50B4/C4.D3-F60E3.A/)?.(?.(?-(>-&D2,?.'=+%>-&?-';*#9' <*#=+$>+%=*$;&!:% <'!='"=(#=(#?*$>)$?*$<&!;&!>(#?*$A,&?*$?*$>)#>)$@,&>,&>+%<)#:("9'!8&9'!8%6#7$7%5#5#5#5#7$8%5#6$6#5#6#7$7%6$6$7%7%7%7%3!6$6$5#5#5#2 8& 6$4"4"5#6$5#6$7%5#2 4"5#3!3!3!3!4"3!112 102 2 1///0/--.+0-,++-+0-,.+,+,,,-3 :& C,&H.(F-&D,#D,"C,"C+"A,#@+$>)#:& 8%3 7$-.1 3"2!0/./0 0 /,./...-+)((((()*+-.,/,+)')),*+,..-.00/.. ,-..../0 1 0/0 /...001 1 235 7#7#5"3 112 3"7%7$:&=(!='!?)#A+&B+$F-$@(V?6cMDU@75 5!6#3!01 00///.--,,--,.00/1/00//1 1002!2!1 1 1 1 3"2!2!4#6$5$4"4"6$7& 8& 8%:% :% 9& 9& 8&6$6#6#8%8%6#6$6%:(":& 8#:% <'!:% ;&!;& ;&!@+&?*%?*%B-'B-'@+%@+&@+&A,'B-'A,&?*$;& :% <'!=(#=("=("?*$=*$=,%<+$;)#?-&?-'=+$<*#;)"9'!<*$7%7$9& ;(";)":'!;)"?-'?-&<+#=,$@.&?,%=*$=+$>+&<)$;(#<*$9("8& ;*$?.(;)$=,&=+&=+%>,'=,(E3/E40E51E62C72C71F<8."-.024 5"3 34!7#8$9%:&;%<& ='!='!<& =' @)#B+$B,#A+"D-$F/&H1(I1)H0'H0(G/&F.%F.&G.&E-%D+#C+#C+#B*"B*"A*"@(!>'=%<$;#7"4 211211<&L7/VB9M80/(('(VKGYLGTHBRE>OB;M?8J:2E4.G50H60A/)>,&>-&>+%<)"B0)B/)C.(?*$?)#?*$<'!<&!8#>("='!<& >(#@*%<&!;% ='"?)$?*$A,&F1+?*$='"<& :%:%:%7!='"8":$;% :$9#9#9$?)#=(";& :$8#9$<'!;%9#9$;& >(#B-'>("@*%D.)F0+C.(@*#@*#A*%=&=%>& <%;$<%7 :$4"/ ..,/;)#B0+@/)=+%=+%7%;)#5"9&?-&>+%8&=*#B0)I70F3-L92P=6I60?-&C1*8%9& ;)">,%?,&=*$>+%>+%>+%?,&A/(A.(@.'B0)<)#:(!?,&>+%>+$>,%>+$?-&9& >+%A.(H6/G5.>+%?-&:(!<)"9' 9& ;("=+$?,&@-'=*$@-&A.'A.'C1*I70K92H5/E2+A/(?,%;)"8' >,%B0)7#8$ :("<*%=+%;)#9("9'"=+&9'#-++..17%9' 9& A,&B-'L61jSMs\UdMFQ:4L50G0)J4-G1*@*$<'!=("@*%<&!A+&G2,K50J5/H2,E/*D.)F0*@*%<&!<'!?)#?)$>(#<'!<&!;& =("=)#9& 8& 5#8&6#8%=+$@-'C1*>,&>,&9(!;)#@.'A/(@.(B0*@/(B0*C1+C1+B0+C1+A0*A0*C1+C1+C2,E5/E5.E40D3/I84K:6K:5L<5O?9PB=PB>MC>ME@OGCNGDMEC#$')+,+(())(,15 6 40!1"5"8#:%<& ='!=(!?)#@*#A*$B,&C,&B,%C-'C-&A+$@*$@)#?(">'!=("=*$=(#='!>& =%=%<%<%;& 7%5$5$6&4#1?*#H2)B+!3+(*/ D4.F60C5.A3,A3,?/)A0+@.)=,&=+&>-'>-'=,%<+$<+%=,%=+%<*$<+$<*#=+$?,&?,&;(">)#=(#:% 9$9$:% B.(@+%=(#;&!:% ;&!>)#>)#=("=(#>)#=("=("<)#;)#:(!9' 8&6$6#6$6#6#7%5#5#6#5#5#8&4"5#5#4"4"4"6$6$7%7$5#3!6$3!5#7%5#5#6#3!5#6$4"3!6$7%5#4"5#6$2 4"5#4"3!2 3!3!3!1 12 1012 1 /////.-0-/.+)(.,..*+*+++,--19$B+&G-'F,%D,"D-"E."D-#C,#@,#>*"=)!;( 5#1,-/2!2"1!0.-...-,++**))(&&&&&&&(+**++)&%''*+*++-./23 .,,-- //////0 /-/1 0 0/00 1 000257!7"5!311 .4"7%9&=)!?*$>)$@*&@*%B+#F-#F.$_I@]H?H3+5 6!6$//10/...--.,,---..--/.00//0/.01 1 01 2 2!2!2!3"3"4"4"3!3!6%7& 7%8%:% ;& 7%8& 8& 7%8&7$8& 7%6$6$6%;)";'!9$8#8#:% ?*$?*$=(#=("=("<'"A,&?*%?*$@+%>)#=(#?*%?*%>)#;& :%=("=(#<'"<'!=)#>,&;)#;)#<+%>,&=+%;)#<*$;*#9(!9("7& 7& 7&7& 8' 8' 7&:(";*"<+"=,#>+#<)!<)!<)";("9'!:("7& =+%:("8& =,&@.(@.)A/*>-'=+&>,'B0+B2-E50D61B50@4/C96/"+,04!5!3 4 4 7$:&!:& 9%;' <& ='!>(!>'!<& >'!A*$C-%C-$B,#E0&F0'G2)I3*H2)F1(H2)G1(H2)G1(D.%D-%D.%C-$B,#A+#A+"@)!?( =&<$:#7"5 4 22333?)!O91U@8H4-+)*()UJEVIDQE?OB;M@9L>6J:3G60G50E3-C1+B0*A/)>+%<)#A/(;(!A,&='";& ='!=("=(":%@+%>(#<'!>)#A,&D.)C.(@+%>(">)#A+&B,&;% =("9$8#9$9$7!;& 8"9$;%:%9$9#:$;& <'!<'!;& :$:$:$:$;& ;& <'!>(#<'!?)$C-(C-(E/*D.(?*">)"@)$>' C,%P93W@:N71<%9"8"2!/ .-,/8&!?-(9'"6%<*$:("<*$4!;(!F3,E3,>+%=+$<)#:(!J71@-&9&;(":'!=*$;(";("<*#:(!:'!=*#;(!?,&>+%A/(F3-G4.F4-H5/D1+=*$=*$?,%>,%;("8%>+%;("9&=+$A.'>+%;("<)#8%9& :(!@-&C0*@-'9' 9& 9' ;("=*$?,&B0)H5.H5/E2,C0*>+%;(!9& 8& <*#?-&8% 9%!8&!9'!;)#:(#8& :(">,&7%!+)*.,/5#8& 7%A,&@+&K40fOIs\VfOHP82O73I2+L6/I3,C-'@*$@*%@+%?*$>)#A,&F0+I3.H2-F0+H3-A,&@+%@+%@*%>)#<&!='"<'!<&!:$:$:& 8%:(!6%9' 7%6#9' =+$>-&8' 7%5#7%>,&F4.B1*C2+@.(@.'@.(@.(@.)A0*@/)@/)?-(@.(D3-E5/E5/C2.@/+F51L<8L;7L<5J:4I;6M?:NC>NEANFAKDAJB@##&*+--*(')),14541!2#5"8#9$;%;& <& ='!?)"@)#A+%A+%B,%C-&C,&B+%A+$A*$>(">(!=("<)#<("='"='!=&=%<%:$9%8%6%4#6% 4"5 G0&]C7[?0G)1*)+B2,C3-A2,>0*=0)?/)A0*?.(=+&<+%<+%=+&@/)@/(?-'?-'<*$9'!<+$=,%<*#:'!;)";("<("<'!<'"=(#>)$@+%=(#:% :% <'"=(#;&!=(#>)$>)$>)#=(#?*%>*$=*$<*#:(":("9' 6$5#6#7$6$7$6$6$7%5#4"6$4"4"5#4"4"4"5#6$7%6$4"3!5#5#4"6$5#6$6$4"4"6$3!4"5#5#5#4"4#6$4"3!3!4"3!1 2 3!3!3!11 0002 2 0/....,-,-.-,**-/),*)+,+*--/5 ?($D*%E+$D+#D-"D."D.#D-#A,#?+"=)!;( 9&18&,-01!1 /-,++,,-,++*))((''&%&%'**+2!5!.('())/*++,1//1212 1!/ ....--..,+/0///0 0 0./035 6!6!5"4!1 4"/5#6#:&=)"?*$@*%B,'A+%B*"F.$P9/]H?S>5<( 5 4 3!01 0/..//.,,-*+--+,--./0/////.00002!2!1 01 3!2 1 113!5$5$4"6"8#8$6$8& 7%8& 9' 7%7%6$6$6$6%9& ;& 8#7"8#;& =(#<("=("<'"<'"=("=("=(#>)$>)$=(";& =("=(#<'!:%:%<'!;&!:% ;& <("=,%<*#=+%<+$;)#9(!;*#?-'@/)<*$7&9'!;*#8'!7& 8' 9("9(!9(";*!=+"<*":( 8&:(:(!:'!;("=+$:("7%;*#;)#<*$?-'=+&<+%=+&>,&?.'?.(@1*D5-C50A3/@40C97.,34 3 014!5"6"7$7#7#:&=' ='!='!=& <&=& ?("A+#C-$C-$D/%E0'G2(H3*H3*G1(F1(E0'G2)C.%@+"A,$C.%B-$A,#@,#@,#@,#?+">( <%:#7#6"5!4!3322A*#R<5V@9F0**)*()SHCSGAOB6I:2H81G60D2,A/*A/*B1+A0)?,&>,&?-&7$@+&=(";& ;& <&!;% :%?*$<&!;& =("?)#?)$>)#>)#='">(#>)#=("='!>)#?)$:$:%:%7"8#7"9#:%:$9$9#:$<'!?)$?*$=(";& ;& <'!<&!<'!;% >(#@+%='">)#C-(C-(F0+D/(@+$A,%E.)<%B+%ZC-'=+&9'!4#8& 7%4"6#9& :'!9' ;(":'!8%<)#@-&>+%<*#>+%>+%<*#=+$?,&:(!7%;)"?-&=*$=+$@.'@-'=*$;("=*$C0*=+$:'!=+$=+$9' 9' @.';(!;(">,%?,&=+$=*$9&8%;(":(!;)"=*$=*#<)#?-&<)#<)">,%A.(B/)C0)A.(@.'A.(;("7%6#3!9'!=+$7$7$8% 6%6$8& 7% 6%8&!3")((,-/3"7%8&?*$=("H2-cLFrZTgPIO71N62H1+I4,H2+D.(B,'C-(A,'@+%@+%B,'C.(E0*G2,I3.F1+E0*E/*D/)A,&>(#:%:%:%;% ;& <'!;& 7$:)"7&9'!9& 5#5$7%8&7&9'!;)#=,%?-'D2,B0*@.'<*$;*#=+%=+%=+&>-'?.(A/*?.(=+%A0*C3-A1+B2-C2.D3/G62K:6I92L<6K<7H:5F:6F=9H?;G@=H@>#"%),+,*&')(+/3541!1#5#8#9$:$:%;%<& ='!?)#A+%B,%B,&C,&C,&@)#@)#?(">'!>(!>(!;'!;'!<'!='!='<%;%9$7$6$ 4$3#7& 6#6 E-$dJ?gJ=W9+;&+()B1+?0)=.'-'<+%;*$=,%=+%:(";)#<*$:'!3!7$:("<)#=(#=("=(#:%;& <'"=(#=)#>)$@+&>)$>)#>)$?*$;&!;'!?*$>)$=)#=+$7%6$6$6$6$6$7%5#6$6$6$7%5#4"6$5#4"6$5#4"4"5#5#6$5#4"4"5#5#4"4"3!4"5#4"3!5$3!3!4"3"4"4"4"5#4"2 2 3"3!3!3!3!3!10112 2 2 1 0..----,+-.,+++*,*-..2"3#/++..2;% A)#D*$E+$E-#E.#D.#D-#B,#@,#=*"<( 9&4"4"+,-//.-,+,,,,--,++*)'&&%$'((*-+@,'L2*B&1()*+/*,../..1//0.+./ //....--0/./0 2!2!/.034 5!4!5!5#3"0114"6$;'>)"?)#A+%C-'C-&A(H/%S=3T?6G2)4 32 3!3"2!1 /.....-,,*+-,+,-.//../.--.0..02!1 /02!3"2!2 2 3 4"4#3"2 5!6"6#6$7%6$8& 8& 7%6$7%7%6%5$7$:% 9$7"9$;&!=("=)#:%;& <'"<'":& >)$=(#>)$>)#<("=(">)#<'";&!;'!=("<'":% ;&!=)#>*$=*$<)#<)";(";("=+%?-&9'!:(";)":("9'!6$7%9'!;)":(":("<*"=*"<*!:) 8(:) 9' 5#8&:(!9("=+%:)":)";)#<*$;)$9'"<+%?.'@.(@/(?0)@1)<.)>0,?30?54-5 E-"G/&:&!214!6"4 5!5!6":%=' >(!>'!=' =& =& >(!A+"C-$C-$C-$E/&H2)G1(H2)I3*H2)H2)E0'B-$@*!@+"B-$A,#@+"?+"?+">+">*"=' <%:#7#6"5#4"3 212B-$T?7VA9B.'*''&ND@OD?OC>M@:K>7H<4F7/E6/E4.A/*=+&A/*@.(?.'>+%=+%=+$:'!A,&?)$<'!;& <'!;& 6!:$8#;% ?*$B-'C-(B-'C-(B,'?*$=("<'!=("A+&?)$:$:%9$6!6!7"8#:$:$9#8#9$<&!>(#>(#<'!;& <'!='"='"='"<&!?)$A+&>)#>(#@+%A,&F1+E0*A,%@+$A*%=& E.'_HBmVO[E><%8!:$0-..+-B0*B1+C1+>,&8& :("3!4!8%5#7%=*$=*$8&;(":'!<)#=+$=+$=+$>+%=+$:'!>,%?,&<)#;("?,&>,%:'!<*#<)#>,%A/(<)#A.(=*$9' ;)":(!8& <*#>+%<)#<)"?,&>,%;(";(";(!8&7%;("<*#;)";(":'!9' ;("9& :(!>+%>,%=*$@-'A.(>,%8&7$7%4"5$5#6#9&!:'"8&!6$4"8& 8&!;)$:(#-('+-/3!8& 9'!=(#:% F0+`ICoXQfOHM60K3/G0*I3,G2+D.(C-(E0*C-(?*$@+%B-'B,'A+&E/*I3.F1+D/)A,'@*%@+&B-'>)#:$:%;& ?*$B-'<'!6#9'!7&9' :(!8&8&7%5$6%8&:(!=,%=+%=+$@/(=+%9(!:)">,&=+%<*$=+&>-'@.)@.)>,'<+%=-'=.'@0+C2/D3/E40E40B2+F6/G93G95G:6G=9E=8D<9E><%!$'*++*'(''*.2442 2#5$8#8#9$:$:%;%<' >("@*$A+%A+%B,%C-'A*$@*#?("='!=& =& ;&;'<'<' <&;%9%8%7%5$3#4$7'!7$7 ?&dH>hI;`@0F-",((=,&;,&:*$;-&;.'>.(>-(<+%<+%9(#9(";*$<+%;*#9(!8' 5$6%:)#<+$8& 3!5#9& <(";&!;&!<'!<'";'!;&!<'":% 8#;&!=(#=(#<'"=(";& ;& =("=)#<'"<*$6$5#5#5#4"4"6$4"4"6$6$7%5#4"5#6$2 6$5#4"4"4"4"4"3!3!4"4"6$2!4"5#5#4"3"14#4"3!6$4"5#5#4"3!4"1 2 3!3"3!2!3!3!100110000...---,+--,+****+,,+A0&M;2C2*1 ,/039#?("D+$F,%F/%F/$E.#D-#C,#@,#>+"<)!:'7$4!--,,./-,------.-,,+*)('''')+,/0@.(S<6T9/C( +(')-0**-.19$@+%C.'A,$31/../..----..//..0 2"3#2"0 /25!5"4 23 4#3"/03 6$:'=)!@*%A*$A*$B+%C+#B* D,"P:1I3*;&27"2 3"3"2!/.--..-,++*+,+,-./.../0--./0..00//03"3!2 2!3!4"4#3"2!3!6"7"6$6$6$6$7%8& 8&7%8&8& 5$3!8%<(":& 6"8#8#;&!<'"9$<'!<("<'!<'!>)#=("=(#<'"<'"=(#=(#<'";'!=("=(#<'";& <'"=(#=("<'!;&!=("=(#<'!;& ;'!;'!<'"<'";'!9% 7#8$;'!;(";(";(!<*";) 9'8'9) :*!:("9& ;)#8' 9'!=,&;)#8' 9'!9(":)#:)#;)$>-'<+$<+%>/(@1*;-(=0+<1.;10.E.%YA7YA9E2-5"124 3 5"6"6"9$<' ='!=& <& <& =& >(!@+"C-$B,#B-#D/%G1(H3)H3*H2)G1(F0'D.%C-$@+"@*"A,#@+"@+"@,#@+"?+"@,$<(!;&9% 7% 6$5$3#2 016!B-$N:1O;3<(!)'&&I?;K@;L@:K?8J>6H;4H81E5.D3-?-(<*%B0+=,&?.'<)#9'!<*#?+%<&!<'!G2,B,';& >)$D/):$8#:%=("@*%@+%@+%@*%?*$=("<'!<'!>(#B,'<'!:% :$7"6 6!7"8#9$:$9$8"8#:% ;& ;& :% :%;& <&!<&!=(#=("?*$?*$='"='"?*$@+&E/*C.'@+#?)">'#>'!E.'`IClUOZC<<&:#8"/-..*/B0+=+%>-'=,&:("9(!3"8%;("5#6$<)#;)":(!;)"7%8%<)#>+%=*$;)"8& :(">,%@.'>,%;)">+%?,&;("@-'A/(A/(A/(=+$@-':'!:(!@-'>+%9& <)#9& :'!9& <)#;)"7%8%9'!?,&;)"<*#<*#:(!:'!9' ;)"<*#:'!7%7%9' ;(">,%:(!:'!<*#<)#7%7&8& 8%9& 9&!8&!7% 7& 4"7% 7% 8'!8'".('+++05#7%=(#=("G1,[D?gQJ`ICI2,E.)B+%E/(E0)C-'D.)F1+B-'?)$?*$@*%?*$>)#>)$?*%C.(E0*C.(@+%?*%A+&>(#:$:%='">)$>)#9#6#:(!9'!9' ;)"9' 9' ;("8& 7&8' :(">,&?-'<*#@/(C1+B0*@.(?.'>-&=,&=+&<*%:)#;*$C1+;*$:*#<-&?/)@/+A/,H73B2.B2+D4.E60C50B50D96F=9D=9B;9!$&(,/-&'&&).2443 2$5%7"8#9$9$:%;& <' >("?)#?)#@*#A+%C-'C-&A+$>("<& <& <& =' <' ;&;%:%9%9%8%6%4$ 4$ 4$ 6% 7$7 8]?3fF7cA1Q4'-((-;,&<-&:,&8+$8)#:)#;*$9'"7&!8'!:)#;*$:)#8' 9("9(!7&6%7& 7&6$5#5#9' 8$9$:% 9$9%=(#:& 9$<'!<'"9$9$;&!:& ;&!<'!;'!;& <'!:("6$4"5#6$5#5#6$5#3!7%6$6$4"4"6$7%2 3"4"4"3"4"5#4"3!3!4"3!5#3!3!6$5#2!3!12 4"2!7%3"4#5$5#3!4"2!2 2 3!2!2 2!2 1 001 10/./....---,---+*)))+-,,C/%]I@`LC>*#1135 8"?)"C,$F-%G0&H1%F/$D-#C,#A,"?+"=*!;' 8%6$1,-./20-----..,+++++*)(()'')++-3"Q=8Z@9T82;'''$*+**+,1E0)Q;5Q;4C.'1-,.-,+++++,-.-,-.01!2!0 ..13 4 0/02!1 8&3!8%;( =*!?+$A,&C+%B*$B+%D,#@':#<'9$5!6!6"1 00/.---.-,****+,+-..-+0/..-*,...02!0002!3"1 2 3!3"4"4"2!2!5"8#7#6$5#6$7%6$7%6$6$7&8' 6%19% ;'!9%8#:% 7":% ;&!;& <(";'!<'"<'"=(#>)#;'!;&!;&!;'!<'!;& :% <'"<'";&!;& <'!:& ;'!=(#=(#:% <'"?*%=(#<'"<("<'!;&!;&!:%8#9$;&!;&!=(#<(!:&9'<*!<*"9( 7&7%9' =+%7%8& :)"9(!6$8' 7& 8'!:(#<*%>-&=+%=-&=-&<-';-(8+&7,*9$ 4U9.eG;]B:E2-4 0124 8$8$6#8#;%;%<%;%<%=& >'!?*!A+"A+"B,#D.%G1(E/&H3*G2)F0'E0'C-$C.%@*"?*!@*">) >) ?+">)!>)!>*";'!:& 8'!6&!5% 3$2#0!/0//9':(0)('&D:6H<7I=7H<6H<5H;4J:3E6/A0+>,'=+&>-'>-'?-'>,%=+%;)#:'!;% :$:$;% =("?)$?*%>)#<&!<&!='"=(#=(#=("<'!<'!<'!;& ;& <'!>)#='"<'!;& 8#7"8#8#9$9$:%:%9#8";% <'!=("<&!:%:$:%:% <&!<&!='"=("<'!<'">)#?)$B-(@+$>)!>("?(#>'!B+%_HAiRLU>89#9#9$/---*/=,&8'!<*%<*$9'!8& 6$9' :(!5#6$9'!9' :(!:'!7$8&<)#=+$;)":'!8%<*$>,%>,%=+$;)#<*#<*#;("A/(D1+@.'<)#>,%<*#9' <)#@.'>,%8&9' 8%8&8%8&9& 8& 8&8&<*#;)#<)#;("9& 7%9' =*$;)#:("9& 7%7%7%<)#9& 8& ;(";("8& 9(!:)"8%5"4!2 1 2!4"5#6$6%5$.)),-2!7% 9'!7& ;&!;& @*%J3.S=6T>7G0*D-)@)#A+$A+$>(">)#>)#@+%B-'@+%=("=("?*$;& 9$?*%A,&?*$@+%@+%?*$>)$>)$?*%A,&A,'=("<'!=*$@.(=,%:(!;)"8%8& =*$;)#8& 7%8& 9(!<*$;)#>-&A0)?.';)#9'!9'!:(#<*$;*$9(":(#@.)=,&=,&>/(?/*>-)=,(E40C2/B2,B3,C4.A3/@2.?40A73A85?86 - "&'(/6!4 ('''*03543 2$5%6"8#9$:%;%<& ='!>(">)"?)#@*$A+$B,&B+%@*$>("<&<& <& =' =';&9$9$9%:&9&!6% 3# 5%"4#!2!4 58U8,cD8bC6V9..*),:*$;,%:,%8+$9+%<+%:)#6% 4#5$9(":)#:("9'!:(":)"8& 8& 8&6$5#4#4#5$8$9$9$7#7">)$<'"8$8#8$7"8#=(#=(#;& ;&!=(":% ;'!:'!7%5#3!4"4"4"4"4"17%7%4"2!3!5#6$4"3!4#4"4"4#4#3"3!3!3"3!4"4"2!6$4#2!2 2 1 3!2!5$4#4"5$6$3!4#4"2 12!1 1 2 2 1 002 2 0../////-------+*))()-./:%]F*!<( 9&8%3!+,./1 0 /......-+*++++*)),+)(*+*,A.)S<6Y>8O70)((+.0*)++,9$O:2ZD=S>6;&/,+,++*****+-.,,-.///-,,.0 2!0 0 1 0 .5#5#:( =*">+"@+%C,&D,&C,&C,%F.%C+!A*!?*!<&5 3100...-...,*)(),-----,,-0-..-,-../1 1 ./1 2!2!1 2!4"4"2!2!2!2 4 6!6"4"6$7%7%7%7%6$8&6$5$4#3!8#:% :% 9%9$8$:% :% ;&!:& 9%:% ;&!=(#=(#<'";& ;&!;'!;&!:% :% ;&!;& :%:%:& 9%=(#=(#<'";&!;&!;'!<'"=(#<'";&!<'!;'!:% 9$9$:% ;& >)#>)"<' ;( <*">,$=+":(!9' 9'!;)"6$7&6%5$5$7& 6% 7& 9(#;*$<*$;)#:*#9*#9*$8*&7*%7-+8#;"_A6gG=V<5>+&3 0124!8%8$5!9#;%;%;%<%<& ='!>(!?*!@*!@*!@+"B,#D.%E/&G1(G1(G1(F0'C-$B-$?) >) =(<'<(>)!<';';( :' 8&6& 5& 4% 3$2#0!/ /,)-)&%%%"B84G;6F:4E92E91E81E6.A2+>-'B1+@.)<*%>,&:)";("?.';)"9%;& 9$7":% >)#?*$>(#<'!<&!<'"=(#=(#<'"<&!<&!=("<'!;& 9$8#8#:%:%9$6!6 7!7!8#7"8#:%:$9#;&!<'"=(#<&!:%9$9$:%:% :% ;& <'"=("=("='"<'!@+%?*#>)">)"?(#=' B+$]F@eOHQ;49"8!7".,-,*.8&!8&!;*$:)#9'!:)"9'!8%9' 6#6#8&9' 9& 8& 7$9& ;)";)":(!;)"<*#=+$=*$<*$<)#:(":("9& 8%;)#>+%;)"9'!>,%7$:(";)#9'!8%8%7%9'!8& 9' 7$8%<)#:("9& 9' :(!:'!9'!9' 7$9& <*#:(!9'!:'!:'!9& 6$:'!8%7%8&8&7%:(":)"7%5"4 203!5$7% 8'!8'!6% /+)+.05#7%5$:& <("?)$A+%C-&C,&B+%D-(@)$@+$B-%@+$@+&<&!<'"?*%@*%?*$@+%A,&<'!;% =(#<'";&!@+%@+&=(#=(">)#?*%A,'C-(?*$?*$>*$>,&<+$9'!=*$:(!<*#=+$<*$9'!6%:("7&:(":)";)#<*$<*$9(!:)":("7& 5$5#6%:)#<*%=,&>.(>.(=-(?.*@.*?.*A0,@0*?0(A1+A3/?2.=2/=30=41>42?43!%(*4B-'A,'0+))*034321#4%6"7"9$:%<& <'!='!=(">(">)"?)#@*$B,&B,&A+%?)#='!='!='!=';&:%8$9%:&;( :)#6& 4#6$!5# 3 5!46G0)XB;]G@Q:42!+**7'!8("8)"4'!4'!9(#;)$9("6% 7&!9("8'"9(":(":("9'!:(!:("9' 6$4#4#5$5$7$9$8$7"8#<'"<(";&!9%:& 7#8#9$9$8$9$<'"<'"<'":'!7%8& 5#4"3"3!3!7%7%8& 6$3!2 2!3!4#4"2!4"4"3!4"4"3!2!3!3!3!3!5#2 5#4"2 2 3!2 2!3!5#5$2!4#6%4"3"4"3!12 1 12 3!2 101 2 0../00/..--...-,**+)*,/11R:1dKB[B:C+%5356 :%A,#D/%D/%G1&G1&F/%E.$C-#@,">+!=)!;( 9'6$-*,-./..../.-,...---,++,,+'()))0D/*W=8Z?::*#(%')+*+,,.D0(T?7WA9K5-341...--//..0 2"0!0 1!1!1!1!0 0/.-.0 1 1!1!0 .8&06#;( <)!=)!A*%D-'D-'D-&D,%E,"G/%C.%@+";&6"210/..-----,*()+-.-,,--,..-.-,,..-.0/..01 1 2 2!4"4"3"2!2!2 5!7#5"4"6$5$6$7%7%7%8& 3!3!4"5"6":% ;&!7#8#:& 9%9% <'"<'";'!<'"<'"<'"<'!;'!:& 9$;'!;&!;&!;&!;'!:& :% ;&!=)#>)$:% 9%9%;&!<'"=("<'"=(#;&!;&!<'"<'":% 8#6"6!8$<'":%:%;'<(!<(!;' 9' 8&8& 8& 7%8&6$4#5$6%:)#8'!8'"9(":(":)#7'!8)!7)#7)$6*&6,*;"I+"hE:jF-&@.(;*#7%8$:%7"7"<&!=(#>)#=(#;&!:%:% <'!=("=("<'"<'"=(#;& ;&!9$9$:% 9$='"8#8#8#7"7"7!6!7":% ;& ;& <&!;& <&!:%9$9$:$:% ;& :% <'!=("=("=(">)$<'">(#>)"@+#A+%>(#;$?("T=7YB-&;*#7$:'!7%6$8%9'!;("7%5#7%9' :(!:(!;)#=+$=+$<*$<)#;(":'!:'!9& 7%6$8%7%6#8%5#6$7$:(!=*$;)#7%6$7%8&7%7%:(";)#9'!=+$<*$9'!9'!;("8&8%:(!9& 8&9' 9'!9' 7%:(!8& 7$7$7$6$:)":("6$4!3 2 1 4"6%7& 8&!8&!6$ /*)+-/3"5#5$9& <("=(#>'">'!<%?("A+&?(#?)"@+$=(!@+%<'">)#?*$?*%B-'C.(?*%=("=("=("<'!<'!A,&?*%<&!<'!=(">(#>)$B-'>)$=(#<)"=+$<+%:("?-&;)#;*#<*$=+%=+%:("?.'<*$;)#<*$;*#:(";)#:)#<*%;*$8'!6$5#4"7% 8'!:(#9("8'!;*$:)#<*%<+%=,&=-'=/'?.(@2/>0-<0.;1/;1/<10("?)#?)#A+%A+%@*$@*#>("='!>("=' :$:$:$;$<%=' <'!;& :%8#6!5 8#6!6 ;$C-&E/(?(!1,,)6% 5& 6' 3%3%5& 7& 7&!8'"8'"8'!8'!9'!9'!:)"8& 9'!9(!8& 7%:'!8$7#9%;&!:% 6!7#9%;&!<'"<'"<'";'":% 9%9%8#8#9$:& 9% 9$9% 8& 9'!7&5$5#4"4#8& 8' 8& 7%1 4"2!2 3"5#2 2 3!3!3!3"3"3!3!3!2!3!5#3!5#5#2 13!2!2!3!4"6$2 3"5$5#3!4"3!2 2 2!1 12!3!2 1 1 10///00/../.../.-++**,.-02F-$_D+!<) ;( :' 7%/)*++,,,,,-.-,-.-,,+**))&*'&&'('2G0+S:6I4/-#%((*+,--3M80VB:Q;3>(!2421.--./.--/0 .// ///.../////0 /-,4"07$;( ;'=(!A*$D-'E-'D-'D,#E-#F/&B-$>) :%6"4!3!.-..-**+,-,**+,+++,-.,/-,,,*-.--.//../1 2!2 2!4"4#4#2"2!4!6"8#4!4#5#3"5#6$6$7%6%2 2!5#6#8#:% :% 6!9$:% 9$:& <'"<'"<'"<'";'":% :& ;&!9$7#;&!:& :% ;&!;&!:% 9$<'"<'";&!:% :% :% ;'!=(#<(";&!<'";&!;&!;'!;&!9$8#8#8#:% <(";&;&;';&;&:%7%5#7%8& 7%7%<*$5$3"6%9("6% 7&!7& 8'!9("7'!8)"6(#4'"3'#0'%@&S3)iC9iB8>'!3 4!5"5!4!7#7$7$9%;& <& <' ='!>("?)#@*#@+#A+"A,"B,#A,#B,#C-$D/&D/&C.%B,#B-$@+"=';&=( <';&;&<':&;':&8%5$3#2#3$2#1#0!- ,,*('"%#!$>31?20B52C61A3.@1+@1*@0*?.)?-(<+%=+&=+%:)":)"5$9'!:(!9% 7$;'!>*$=)#;'!;'";'!9$7#8$;'!=(#<(";&!;& >)#?*$?*%<'";& ;&!9$7";% ;&!:%8#7"6!7";& =("=(#<'!9$9$8#8#9$:$:% ;&!:% :% ;&!<'"<'"=("<'"?*%?*#A,$@*$?)$D.';%=& <& :$;%<&4-*++*/8&!9(#8'"3"4"9'!8'!6$:'!9'!9' 9& 9'!>+%9'!7%8&9& 9' 9' :(!;)#;)#;("9' 8&8&9& 9' :(!9& 8& 6#3 7%:(!6$;)"<*#;("9' 6$6#5#>+%>+%;)":(!6$8& ;)"=+$;)":(!:(!6$7%8& 7%7%7%6$5#6$:("9' 7%6$5#6#:(":("6$3 211 3"6$7% 6% 6%5$-((+.2!4#4"6%9& ;'!<&!<% >'!=& >'!>("?("@*$A,%:%;& :%<'!>)$?*$>)#<'!<'!<'!<'">)#>)$<'"@+&=(";& <'">)#=(#=("@+&<(#;("<)#<*$<*$9'!>+%;)#<)#>,%>,&;)"<)#<*$<*$:(";)#>+%<*$;*%;*$;*%;*$;)$9'"8&!;)$:(#8'!9(":)#7% 8'!<*%>,'=,'=+&<+&<-&=,%=.+<.+:.,8.-8/-:/-8+*%$'0@)#V>8U>7=*#+)*+.110// 2#5#7"9$:%;& <'!<'!='!=(">("?)#@*$@*$A+%@*#?)#>(">(!<& 9#<$=$=$=$=$=%=& ;%:%:$9$ 46"8#7"45 6"6"1,-)1!4$5&2$2%4%5$9("7& 5$6$7% 8&!7%6%7&7&7%7%6$<(":% 6"5 7":% 8#9$:& ;&!;&!<'"<'";'!:% 9%8$8$8#9$:% 9% :% 9%6#7%7&6$7%6%6$7%8& 6$9'!3!2 1 02 6$2 2 3!3"3!3!3!3!3!3!3!3!3"3!4"7%2!01 2 2!3"3!5#2!3!5#6$3!3!2!2!2!2!2 1 2!3!2 12 2 100000///0 /..//.-,*), 3"./2<#V:2iMEO4-=#679 6!='B.#E1%F1&H1&G1&F/%D-$B,#?+!=) <)!;( 7$0()))*+*))*+,,,+*)))(((((+,)))+*+4B)&E-)1$'')),,+,-*;'O;3U@8J4-1120/---,,++,-.--../.../0 / /..-,+*3 3!9&;( :'=(!A*$C,&D-'E.'F.$E.$C-#@*"<'6"4 4"2!.--,+**++,,*++**++,---.*+,,+--,,./.,-/1!2!1 2 4"4#4#3"3"4!6!6"2 5$4"2 3!4"5#7%5#2 1 5#6"9$:&!9%5!9%9%9%:% ;'"<'";&!:&!:% 9%9%9% 8$9$:& 9$8$:& ;&!:% 9%;'!;&!;&!:& :% :& ;'!<'";&!:& :& <'":% :% 9%9$9%9%9%;'!=("<' :%;';&;&:&8%5"5#6%9' 9'!7%6%5$5$6% 5$5$6%7& 7'!7'!6' 3% 1$0$!/&$8"K0(Z:1S3+3 13 3 24!7$7#7$:%;& <& <& ='!>("?)#@*$@+"@+"@+"A,#A,#A,#B-$C.%D/&C-$C.%B-$@*!=(=(@+">) <'<'<':&<( ;%8#6"3!3 2!1!0 .-,*)(&$% $:/-;/,0,<.)<-'=-'>-(>-'=+&:)$8'"7% 6$6$4#:("9'!7&9' <*#<)#:("8&8& 9& 8& 8& 8& :(";)";("9' 8%8%8%9& 9' 9& 8%5"5"6#9$8"6!7"7"7":% =(#=(#;& 8#9$7"7"8#9$9$9$9$9$9$:% <'!>)#=(#?*$=("@+$@+$>'"=& ;$<&<%:$9#8"5!.+*))07&!4#:(#9("6%6$6$9' :("8&9'!:(!9'!<*#9' 9& 9' 9'!:(":("9'!9'!9& 9& 7%7%8& 8& 7%8& :(!7%5#7%5#;)#9'!9' 7%7%7%8& 7$8& 7%6$6$8%9' 6$=+%<*#7%6$9'!7%7%6#7%5#4"6$5#3!6$7$6$4"3!5#7&8& 5$3 1001 5$6% 5$4#5$-'(-1!3"5$4#7& 9% 9$:$;$>'!@("?'!<% =& @*#A,%:&7$8%:& <'"=(#=(#>)#>)$<'"<'!=(#?*$>)$?*$;& :% =(">*$=(#=(#>)$<)#;)#;)":(!9' 8& ;)#:'!:(!=*$>,%=*$;("<*$<*$:("9'!9'!=+$;*$;*$9(#9(":)#9'"8'"=+&;)$9(":(#9(#8'!5$;)$:(#9'":)$:)#;+%<+%9*&9+)7+)3)(6-+8,+5('(#&/B+%S;5T<5>)"))*+.00/// 2$5$7#8$9%:& ;& ;' <(!=)">*#?)#@*$A+%A+%@*$>(">(">("<& 9$=%>%=%=$=$<%<% :%9$8$6"23 6#7$3 /120+,).4$4%1#1#4%5$7& 5$4"3!4!7$ 7%8& 8'!8'!7&5#6$:&!;&!7"47#7#6"8#:&!;'!:% 9% :& :& 9$8#6"7#8#8$9$8$:% 9%5"4"6$5$6$7%6$6$8& 4#7%5#2!1 /14"3!1 2 3"3!2!3!3!3!3!3"3"3!3"3"7& 4"002 2!4"3"4#3"2 5#7%3"2 2 2 3!3!2 2 2!3"3!1 2!2!1 1 110//./1 0..///-,+)*1!/.47J-%Y=5N2+<"4685:#@* D/$E0%G1&G1&F0%E.%C-$@,">*!=)!;( 7%1,))((*)(''(+++++******)((+()('))))-)""%(***++,<( E0)D.':$.0//.--,,++++,---./0 0 0 1!1!. /!0!/ -,..:'2 7$;( ;( <' >("@)$B+%E.(G0(H0&A)?*!>) :%4 22 2!/-..,++,++**++*+,,,+,-,)+,+,-,,-./.,-/2!2!02!3"4"3"3"3"4!5!4!2!7%3!2 2 2 5#8' 6$3!3"6$6"9$:% 9$8$;&!9%9% :% ;&!;'!:% 9$9%9$8$8$:& ;'!;&!9%8$:% :% :% :& ;'";'!;'!;&!:&!:&!;&!;'!;&!:&!:% 9$8#9$:% :% 9$8$9$;&!<'!;' :%<' ;':%9%9%8#;&!4"6$7%5#4"5#4#4"4"4#6%6%6& 4%1#2$ 1$.#!/.:%='!4 0 0 2!4#4#5#5#6#8%:& :%;%;&<& >'!?)"?)#?)!?) ?*!@+"@+"A,#A,#B-$C.%C.%A-$A-$?+">) >) @+#>)!<(<(;':&=) 8$6#5"3!1 0 / .--.*,*'&!7-+9.,:-+:-*)$<'!?*$>*$;("9& ;("9& 8&8&6#4!4!.,*)(/7& 5$6% 6%4#2!2!7%7%4"9' ;)"7%5"6$:("9'!8%7%8& 9' :("8& 9'!9& 8&9' 9'!7$7%8& 6$4"7$9'!=+%9'!8& 7%7$8& ;)"6$5#6$7%7%6$8& :("8& 7%5#5#8&6#9'!6$5#6$8%:("8& 4!7%:("9'!6$4!8%4#4#5#5"3 101 4#6%4#3!5#,&)--.5$4#8' 8$7!9"<#>& @(!@'!=&=& >(!=( <' :' 8' 9& <'!=("=(#>)$>)$<'!;&!<'">)#?*%>)$<'";&!;&!;&!;&!=("<'"<)#<)#:(!7%7$8& ;("9& 8&9'!:(!=+%<*$;)"9'!:("=+$9' 9& 8'!8'"8&!7& 8&!6% 8&!:(#8'!7& 9("9("8'!7% 7&!9(";*$;*%8&!8'!:(#8(%7)'6*(0'%3*(4)'2%$ %&-C,%P81R:3A+$(,++.01//03!6#7$7$8%9&9&:&;'!<)">*#>*#?)#@+%A+%@*$>(">(">("='!;%<&='<&;%;%:%:% 8% 7$6#4!3 4!4!4 1012/*+),1!1"/!.!1$4#5#5$5#4!5"6#4"4"5#6$3!4"6#:& ;&!6"47"7"6"6"9$8$8#8$9%8#4 6"5!5!6"7#8$9% :% 9% 7$4#7%3"3"4"4#5#7& 5$5$5#3!2!113!3"012!3!2!2 2!2!3!3"3"3!4#3"6$5#2 02!2!3"4#5#5#2 5#7%4#1 1 13!3"2!1 2!4"3"2 2 3!2 2!1 0//../1 0 /.///.--++/ 0.33<$D+$A*#6 034 5"7$<( E0(C/'G0'H0'G/&E.$C-$C-%A,$?+#;( 7%3!-(*)&()('&'*+**++++++*)(')())'*++,-,%$%)+-+*+,,/5!9$6!1..//,,,,,+***+---.// 0 0!2"1!1!1!0!.+,-+7$5#9'<)!<)!=(!>'!?)#B+%F/)G/'A):#>)!=( 7#6"7$3"0////--,,*)*+,,+,--+*,-*(*,++,,-///.--03!2!1 2!3!3"2!2!3!4 4 23!6$4"3!003!6$5$2!4#6#7"9% :% 8$9% :&!9%9% 9% :&!;&!:% 9%9%8$8#9%;'!;'!9%8#8$9% :& :% :& ;'!;'!;&!;'!;&!:&!:&!:& ;&!;'!:% 9$9% 9$:% 9% 8$7#8$9% ;' ;&;&<' ;&9%9$8$8$9%2 5#6$4"3"4"3!2 4!4"4#4#4$1"1"2$ /!-#!,1-33 .0 3"4#4#4#4#5$9("9' 9%9%:&;' =(!=)">)"=(!=( >( >)!?*"@+#?*"B-$A-$@+"@,#@,#?+">)!=) >*!<(;';':&9%:&9!8!7!4 10.-,,.)+(''"  5+*8-+9-*:-)<.*)$<("?*%=*$:("9'!;)#:("9'!8& 5$3"3!.,*((.5$8&!5$4"4#4#4"7%7%3!9& ;)"7%4"6$:(!8& 7%8&9'!9' 8& 7%9'!8& 7%7%9& 7%7%7%5#3!4":(!<*#9'!7%7$6$6$9' 4"4"4"6$7%7%9& 9'!9'!8& 7%7%8& 5#:("7%6#6$6$7%5#4"7%8&6$4"5#;)"4"2!4"6#5"1..3!5$4#2!4#,&()*(1 14"7#:$ ?($?'!?' >& =%?("A+$='!6":&>+$:("9& ;&!<'!<("=)#=(#;&!:% ;& <'"<'"<'";'!:% 9$9$:%<'";&!;'":("9' 6$7$8& ;)"9'!7%7$6$9' 9' 9' 9' :(!<*$9' :'!:("8'"7& 7& 5$5$7& 6% 5$5$7& 8'!7&!8'!9(":)#;*%;*%8&!7& 8&!8($5(&4'$2(&0&%2&$0$! -$$+B+$L6/N71A,&*,**,.0!/ /14 6"5"5"6#7$8$9%:& ;(!=)">)#?)#@+%@*$?)#>(">("?)#>(";& <&<';&;%:%:%9% 8$7#5"3 4!4"3 4 323 3 .,+*+--+*- 1 4"6$7$ 3 4!5#5#5#7%5#7%9% ;&!<'"9% 335!7"6"5!6"6"6!6!6"6!25 6!5 4 6!7#9% :& 9%8$4"5$4"3"5#6%5$7%5$4"4#3!3!1 02 4"112 2!2 1 1 2 3!3"2!2!5#4"5#5$3!02!2 2!4"5$5$2 4#6%5$1 1 12!3!2!1 2 3"3"2 2 3"2!2!1 0/./00001 0///..1 .-./1 0-././-01 3"6%7%B/(C/(E/'H0'G/&E.$C-$C-%B,%?+#;( 7&3".'**'''(('(**)(******)'&'(((+')+,-./'%%(+,)*+,./11/0///-*+,,+*))(+-,,-.../ 1!1 1 10-*--*5"6#9'<)!;( <' ='!?("C,&H1+E-$A) F0&N90E0(4 5!6#3"0 1 0 0.--,,***,-,,+--++,-)*,-+-,-.///...1 4"2!1 2 3!2!1!1 2 3313"4#3!2!0/2 5#5$2!5$6#7#9% 9% 8$:% 9% 9$9%9% :&!:& 9% 9$9%8$8$9% ;'":% 8$8#8$9% :&!:% 9% :&!;'!:&!:% 9%9% :% :& ;&!;&!9% 9%9$8#8$9$8#7#8#9%9%9$9%:%:%9$9$9%:% 9%3!6$5#4"3"3!1 23!3!2!4$6& 0!0!0"- +! -2+ /.-1 3"3"3"3#5$6%7& 7$8$9%:&;' <(!<(!<(!<(!;' <& ='!>("?)#@)#A+$@*#?)"?)"=(!>)!<' <';':&9%:&8%7$8$8 9!7!5 20//....2.)&$!3)'6+(7+(8+(:,(;-);*%;*$:)#9("8'!8'!6%6%6%8' ;)#9("3"1 5#8&8& 9' 8&9'!8& 7%8&9'!9' 7%7&9(!9(!7%4#4#6$7%7&6%4#2!6"5!6!6!6!:% ;'!6!7"8#7"8#5!6"7"8#7#7"8#:&<' <' <' =(">)#>)#=(">*$=)#;(!;'!:' ;(!9' 7%5$4"2!.,+)(.3"8'!3"2!3"4#4"6%7& 5#8%9& 6#5"7$:'!9& 8%9& ;(":'!8$7$9& 9%7$8$9& 8$7$6#4"3!3!7%9' 7%6$5#5#3!5#4"4"3!4"5#6$8&7%9'!9' 7%7%7%5#7%8&6$5#5#3!4"9' 9'!8& 7%6$4!9% 7#6$6%5#3 101 1 001".-%')))0 01 4 7!<% :"8 :">& A)#@*$='!;&:%;("9(!8& 9%:% :& ;'!;'!;& :% :%;& 9%;&!;&!9$8#9$:% :% :%9% 8& 8& 7%8& 8& :(!:("8&6$8& 8& 8& 8& 8&9'!:("9'!:(!9'"8'"9("8'"6$5$5$5$4#6%6% 7&!7& 8'!8'!8'!:(#9("8'!7& 7& 7&"4'$2$ 2'%0&$/$".! - #"&8("F50G628'#-+**,-/ / 024 6"3 4!5"6#7#7$9%:' <(!=)">)#?*$?*#>("=(!=(">)"=(!;&;&<';& :%9%9% 8% 6$5#3"2 3"4#3 4!5!4!4!4!-,***++,+- 1!3 24!13 4"5"4#5$6#8%:&!;&!:% 6"4 35!8$7#5!6!6!5!5!6"6"45!8$5!35 6"8$9% 8$7#4"4"4"3"7%8'!7& 7%5#1 4"2 2!1 01 4"2 11 2!1 1 1 2 3!3"2!2 4#4"3"5#3"1 2 2 2 3"5$5$3!3!5#5#2 222 2!2!3!1 2!3!2 2!2!2 0/00.02 1/.2 2 0/0/.10/.-/.-,-,../004"6#?+$C/(D/'G/&G/%E.$C-#B,$A,$?*#;( 8&4#/&))(''((()*+*())**+*)((()')*)***-./)%%(++')+-/110011/.,+,,,+****-,,,----./000/-,..*4"7%:' <)!;( <' >'!@*#D-'G0)B*!F.%T>5WA9F1)04 5"3"2!3"2!0-,+,,++,..,++,-,,,-)*--,-,.../.../2!4#1!2 2!2!2!1 12221 3"3!3!3"1 .1 4"4#4#7& 6#8#8$8$8$:&!8$8$9% 9% :& :& :& :% 9%8$8$:&!;'!9% 9$8$9$9% :& :& 9$;% ;%!<&!<&"<&";&!:% :$ :% :% :% 8#8#8#8#8$8#8#8$9$9#9$9$9%9%9$9$:% :&!8$5"4#4"3"3"3"3!3!4!2!2!3"4%./!- +)+012--0 2"2!2!3#5$6%4#6#8$9%:&;' ;' ;' ;' <' <' <& ='!?)"?)#?)#?)"='!>(!='!<& <& ;%;%;%:%:$9$7#6"6!8 8 6 4 20..//5!?+$G3-=*#-%#!/%$3'%4(%5(%7)%7)%9(#:)$:)#9("7& 5$6% 5$5$5$2!02!6%7%7%7%7%6$9& 8$8$8%9& 9& 8$7$8%8%6#4!5"6$7$7%7%5#3!9%6!5!5 5 6!7#4 6!7"7"7"7"8#8#8#7"7"7#:%;&;&<' =(!>)"=(!<' >)"='!=' ='!9$9%7$6#6#5#1/-,*)-2!6% 1 1 2!2!2!4#6%6$7$8#7"6!8#;& 9%9$:& <'";&!8#:% :% 9$8$9$9% 8#6"6!4!3!3!6$7%5#4"4#4"3!3!4"4"4"3!3!5#6%6$6$7%6$5#6$6$6$7%6$5#5#2 4"8& 8& 6%6$5#4"8#8#7$6%4"2//00/.0!--&'((,1 013 6 9#6>& @("@("@("@*$B,%E0)B-&8%3!6$;&!9%:% :& :% :& ;& :% :% 9%;'!;'!9$8#9$:% :% 8#8$:(":(":("9'!7%7%9' 9' 6$:(":("9'!7%5#8& 8& 8&8& 8& 7& 9("5$4#6%7%6%6%7& 4#9("8'!7%6%4#8' 8& 7& 7& 6%5%0$!0"/#!/#"." ,+##$-4$4"*(*,,,-./ 1 3 4!5!3 3 4!5"6#6#8%9&;' <("=(">(">("=("<'!='!>("='!;& :&:'9&8&6%6& 6& 5%3#1"1!1!2!/5"7$5"3 5"/,+*)(+-,,/ //25"6$6#4"4#4#6#7#8$7#8$7#6"6"8$:& 9% 7#7#7"6"5!5!5!5 6!9% 6"5!5!6"7#8$7#6"3!3!4"2!6%8'!7& 6%6$2!3"2 2 1 /14"2!11 2!1 1 1 2!3"3"2 2!3"3"2!4#3"2!1 1 2!5$5#6#5"4!4 4 3333 2!0 3"1 2 3"1 3"2 2 10//.0110.110/10./11!0,,--,,,,-/2!04!6#<)"C/(C/(F.%F.%E.$D-$B,#A+$?)";( 8&5$2 .&'(('(())*+*)))**+*))(()')*)*+),-/-&'')*''*,-010///-*+-.-,+*+,---,-...--.///0/--.-06$9&!;(!=*"=)!>(!A*#C,%D-%D,$E-$M4+ZA:S:3A+$447%2!1 2!0.-,,++++,--,++,--,,,*+..--,......./2!4"1!2!3!2!1 0 12222!3"2!3"4"2 .13!4#5%8& 6"7#7#7#8$:& 8$8$9%9% :&!:&!:&!:% 9% 9%9$;'!:&!:% :& :% 9$9% ;'!;'":&!<&"<&!<&!<&!<&";%!:$ :$ :$ :$ ;% 7!8"9#9#8":$:$ 9#:$<& ;&:%9%9%9$9$:& :% 8#5"3!3!3"3"2"2!3 3 1 1 2"2#-. *(&*.13--0 2"2"2"3#4$5$4#6#7#8$9%:& :&;' ;' ;' ;' <& ='!>("?)#?)#>("<& ='!='!<& ='!<'!<& ;& :%9$8#8#6"7!8 7 4 3 2220009$H4-S>7K70/$#"!," 0$!2%"3'"5'"8'"8'!8'!7&!6% 5$7&!5#6%6%5$2!1 6$9'!8' 7%6$5#7"8#8$9$:%:% 9%9$8#7#7"6"7"7"6!7"8#7"5!7"7"8#7"6!6!7#6!5!7"7#7#7#8#8#7"6"6"7"9$8$9$;&=(!=)!<' ;&=)!;&<' <' 8$;&:$6 8"8"2/.,+*-1 4#1 2!2!2!1 2!2!6$7$9$8$7"8$9%8#8#9%:& 9$8#;'!9% 8#8#9$9%8#6"5 4!4"4"6$7%6$5$5#4"3!4"3"3!2 1 2 5#6$4"4"5#5#5#6$7%6$6$6$6$5#3!4"5$5$5#4#5#5#7"7#7$6$4"1//.//-0 -,%&''+.02!5"7!8"8 L4.V>7P82D-&>(!@)#;&:&:' :)";*#?*%<("<'";&!:& ;&!<'";&!;&!:& ;'!;'!:% 8$8$9% :& 9$7#9'!9'!9'!9'!6$4"5#7%3"6$8& 8&6$4"8& 7%6$6%6%6%9("5$4#6%7& 6%7& 8'!5$5$5$5$6%7& 7&7& 6%5$6%3#.!. - - , *)&&$&**(*-.. -,-/ 1!3!4 4 3 3!4"5"5"6#7$9%:' ;'!<'!='!='!<'!<& <'!=("='!<& :&9' 8'7&6%6& 6& 5%3#1!0!1!0 .5"7#5 29$6 /+*)'*,,+-10122 3 5"6$7%7$7#7#6!7"7#6"6"8$8$9% 8$7#8$8$6"4 4 5!6"9% 7#6"6"6"7#7#7#7#5#3"3"13"5$5$5$7%4"4"2 12 012 2 2112!3!2!3!4#3"1 2!3!2!2!3"3"2!1 02!5$5#6"6"5!33 3 333 1!0 2"2!13"12!2!2 2 2 /-.0001/01/.11/...-,,./.,++,.4"24 7#;' B/(C0)E.&E.$E-$D-$C,#A+#>)";' 8&6%3"-%&''''(''(**))**++*))(()((*))+*+,/2&''(),'(+-.10/000,+,-.-+)*,-.--,-/ / /.-.../00---+06#8% ;(!<)!>*"@*#C-%E.&C-%C,#I0'U;3_F?O6/='!44 7& 1!1 1 .---,+*,+**+---,,+++,,-----,....-.-.0 1 1 2!2!1 1 0 12223!3"1 4#4#1 .01 3#6%7%6"7#7#7#8$:% 8$8$8$9% :&!:&!:&!9% 9% 9% 9% ;'!9% 9% :& 9% 8$9% ;'!;&!:% <&";%!;%!;%!;%!:$ :$:$ :$ ;% ;% 7!:$;% :$9#:$ ;% :$:$;%;%:%9$9%9$9$9% 9% 8#6"5!3!2!2!4"4"3 01 0 1"0!,-(&$+, - 2--/1 2"2"2"3"3"4"5"6"6"7#9%:&;' ;' ;' ;& <& ='!='!>("?)#>("=' ='!<& ='!>("='!<'!;& :%9$8#8#7"8"8!7 4 2 332001='L6/S>6Q<4-& &%$)-!0#!2%!3&!5&!8'"6% 6% 8'!8'"8'"8'!6$7&6%6$7%8& :(":)"9'!8& 7%6$5!8#8$9$9%:% :& :& 9%9$8#7"7"6"5 6!7"7#7"8#6!7"7"7"7#6"4 6!7"7#7#7#7"7"6!5!5!5!7"6!7#:&<( <' :%9%<' ;$=%>'!?)#K5/G1+8"7!7!2/.-+*-2!3"2!3"3"1!1 0 2!6$7#8$:% :% :% 9% 8#8$8$8#7#8#9$8$8#8$8$8#7#7#6!3 2 2!4"4"2!3!4"4#4"4"2!3!3!2!2 4"5#3"4"3!3!5#6$6$6$6$7%6$3!3!4"3"3!4"4"5#6$6"6"6#5#3"10/...-/ +*%$&&)+.3!6$8"7!;#U=7eMG]E?H0*=' ?(";& =(!;(!9'!;)#>)$;&!:% 9$9%:& <'";'!;'!:&!:% :% :% 9% 8#9$:& :& 8$9'!8& 8& :(!9'!6$7%8& 5#7%8&7%5$6$9'!7&6$6$6$5$8'!6%5$6%7&6%4#6%7&6%6%8'!7& 4#4#6%6%4#3#1 . - ,++*'$&&')(*-... -,-. 0!2 333 3!4"5"5#6#7$8%9&:' <'!<'!<'!;& ;& ='!>("=("='!;& 9( 8' 7& 6& 7& 6& 5%3$1!0!2"1/5 8"55B,#E/&:' ++*((*++*11122 2 5#6%6%7%:& 8$8$7#6"6"6"7#7#8$8$7#8$9% 7#4 4 5!6"7$7#6"6"7#7#6"6"6#6#4!4"4"6#7$8%9& 7#4!5!5!2231112201 3!2!2!4#3"1 1 2!2 2!2!2!2!1/1 3"5"5"6"5"3 3 4 3 331 0 1!2!03"1 1 2 1 13!/--01/0//0/.01/-,---,-.,**++-3!3 37"9%@,%B/(D.&E-$D-$D-$C-#A+#>(!;'9&7&4#/%%&&&&'&&'(*))**+++*)(()((*))+++-/4(%''(,'(*,-1/./00 ,. -+,+('(+--,,,./ / .--.00120--,(15"7$:( <)!?*#B,%E/'F/'C-%C*"N4+\B:_F@I0):#44 5$2"1 /.---,+*++**+---,+++*,..,--,,....--,,,.//01 1 1 2 2 110113!3"0.02!3#6%7$6"7#6"7#8%9% 8$8$8$9% :&!:&!:&!:& 9% 9% 9% :&!8$9% 9% 8$7#8$;&!:&!:% <&!;% ;%!;% 9$8#9#9#:$:$ :$ 8":$ ;%!9#9#:$ ;%!:$:$:$:$:$8$9$8$9$9%8$7#6"5"3"3!2 3!2 1/1 01".,+'%*.011-,-/1!2!0 1 2!4"5!4 4 5!7$:&;' :&:&;& ='!='!='!='!>(">(">("='!<& ='!>("=("<'!;& :%9$8$8#7"7#6"4!2!0 110001@*#M80Q<5J5.-(&%&'*.!1$ 2% 4% 6% 5$5$8'!9("6% 3"4"6$6$6$7%9'!;)#9("7& 8'!9("8& 7#9$9$9$9$9%;&!<'";'!:% 8$7#7"6!5 6"7#7#7"8#5 6!6"8#8$6!37#7#7#7#6"6!5!5 4 4 5 5!6!7"9%;&;&9%9%=(!='!<%<& F0)`IB[C==%79 6..-+*-1 1 1 0 /1 3"1 0 3"6"7"8$:% 8#8#7#7#7#7#8#9%5 6"7#7"6!5!7"6"4 3 3!3!3!3!2 2 4"5#4"2!1 2 3!2 11 3!3"4#4"4"4"4"4"4#5#5$5#2 3!4"2 1 3!5#5$6$5!5!4!3"3"3 1/.---/ +)$$''(*.2!6#7!6 :#V>8iQKcKEK4.<&<& >)"@+$<)"6%:)#:& 8$9$8$8$8$;&!:& :& :% 9% :% :&!:&!8#8#:% ;'!:& 9'!6$5#8& 9(!8& 7%8& 7%7%7%7%5#6$7%8& 8& 7%6$6%7& 5$4#5$5$5%3"4#5$5$5%8'!6&5$5$5$5$4#/ 0 0!/!-***'%%&&'(+.-+----. 0 1244 3!4!4"5#6#6#7$8%9& ;'!<'!;& ;& <'!=(">)#>)#=(";& :("8("7&!6& 6&!6& 5& 4$1"0 2#1 14!9$7"='P:1WA8H4,,,+*'*-- ,.02 3!3 2 4"6$6$5$8$9% 9% 9%7#6"6"9%8$8$7#6"9% 9& 7$5!3 4!5"5"5#5#5"4"4"3"3!3!4"25!9% 9& 8$8%:&!6#4 4 6"22210021002!2!2!3"3!1 1 2!1 2 2!2!1 0/02!4"5!6"5"4 3 3 3 3 31 0 0 3"/2!1 01 0010.-01////0...//-,/10.,,+))/.-13 137"=("@,&B-&D-#D-#D-$C-#A+#?)"<'9&8&6%1 2 %%%%%%%%%'))(***++*))(((')))***09!>$ 2%('(+&&')((/.)))'&)**+*''(*+++,,-./---/113 3 0.,*02 5"7$:( =*"A,$D.'F0(E/'C,$@'P7.[B:V=6?'!5 322!1!0.----,+++***+,-,++**),--,,.,-...--,,,-../01 1 1 2 1 1///01 2!0 /14#2"5$7$7#6"5!6"9%9%8$9%9%9%9%:& 9%9%9%9%9%9%8$9%8$6"5!7#:&!9% :%!;%!:$ :$ 9#8#8"9#:$ :$ :$ 9#8#:$ ;%!9#9#;% <&":$:$;%;%:%8$8$9%9%8$8#7#6"6"5#3"2 2 1/01 /0!-,+&$,19 : 5.,,.00./1!4"5"4 3 4!7#9&;' 9&8$:&='!<' ='!='!='!='!='!='!<& ='!=("='!<'!;& :%9$8$8#7"6#5"3"0!. ..---,C/'Q=5O;4A-&)'%$'(*+- /!3$5$4#6% 9("7% 3!13!6$5$4"4"5#7%8' 7& 8'!9'!9'!:& 9% 8$9$9$8$8#8$9%9%8#7"6"5!5!7"9$9$9$9%45 6!7"8#7"4 8$7#7"7"6"6!6"5 5!6!5"5#7$8$:%:&:&:%:%=( >' <%<%K3,jRKeLE?%89 5..-+*,/00/./1 1 2"4"6"7"8$9% 7#7#8#7#6"7#8$9$5!7#7#6"5!6"7#5!22 3"3!3!2!2 2 3"4#3"1 1 3!4"3!1 1 2 3!4"4"4"4"2 3!4"3"4#5#3!2!3"3!3!4#6$6$4"5!6!5"3"1 11/,,,-0!+)$%(()+/2!4"6 6 8!R:4gPIcKEK4.<& ;$<'!?+$=*#6%8' 8$8#:% :&!9% 8$:% :% :% 9% 9% ;&!<'";'!9$8#9$:&!:&!9'!5#4"5$8& 9'!8& 8& 8' 8' 8& 7%5$6%7%6%5#5#5$7& 9("5$4#6%4#7&5$5$5$5$6%7& 5$4#4"4"4#6$0 10!/!/ +*(%*%&%&(,-,*,,,-. /0244 2 3!4!4"5"5#6#7$9&:& ;& :%:%;& =(">)#>)#=(";& :)#9)#7'!6& 7& 6& 6% 4$2"0 1"1!2 5!8#6 >(P:1ZD+#B,%E/'F/(E.&B*#?&R80W>7J1*9!42000 .----,,++++**++,+****)+,,,-.------,,,--../1 2!1 1 1 1 0///01 2!/.1 3"3"6%7$7#7#5!5!9%8$8$9%8$8$8%8%8$8$8%8%8$9%9&9&7#6"6"7#8$6"9$:% :% 9$ 8#8"7"8#:% :% :$ 8"8":$ ;%!8"9$<&"<&"9$:%;%;%:%8$8$9%8$8$7#6"6"7#6#4"2!3!2 /02!/0!,+)$".4I0(N3,A+$/ .--.../1!4#6#5"4!6"8$:& ;' :&9%;& ='!<' ='!='!<' <& <& <'!<& <& <&!<'!<'!;& :%9$8$7#7"6#4"2!/ --,,,,+F2*Q>6K808&%%##'(+, - .!2"4#4#6% 9(#6$3 2 4"8& 4#4#5$6$6$9%9%:% 9% :% 9% 7"8#9% 8$8$9%9%8#9% 7"8#9%8#7#9% 9% 9% :& :% 5 5!5!6!7"6"5 8#7#7#7#7#6"7#6"7"7#6#5#7%7%8$9%9%9%:%<'=&=%>%M4-jQJfLE>%9 83/.-+),./././1 2!2"5#7$7#7#8#6"8#8$7#7#8$9% 9% 7"8#8$7#7"7#7#5!34!5#3!2 2!2!2!3"4"3"2 2 3"4"3"2 2 2 2!3!3!3"3"2!3"5#5$6$7%5#3!3"4"5#6%7%6$4"4!6"5"3!1 2 1.----0!*)&%(((,03!3!6 8":#Q93eMG^F@D,&='!<& 9%;' >*#8'!5$6#9$;&!;'";'!9$7"9% :&!:% 9% :&!<'":% 9%8$7#6"9% 9'!7&5$5#6$8& 8' 8& 8& 7& 6%6$6$6%7& 7%6$6$5#7%8& 6$5$8' 5$9'!8' 7&7%6%7%7%6$5#4"3"3"4#2!2!2!0 .*(&$ -$&''*-,+++,-..!/ 025 5!1 3 3!4!4!4"5"6#8%9%:%9$9$:%<'">)#=("<'!:% ;(#:)$8("7& 7& 7& 6%5#3!1 14!6"5 7 5>&N70\E=V@81---,'***,/11 111 3!6%3"3"4"6#7$8% 9% 7$6#7$9% 6$2!4#5$5$4#5$3"3"3"3"3"3"3"3"3"2!1 2!1124!3 3!4"3!004"1 0//.-.//01 1 1 2!2!2!1 1 1 2!2!2!1 0//02!4!5!5!4!3 233 3 10 /1 00 1!.0 /.-.///00/-./.-,,,-----..-.-0@-(F2-<)$/30/16!>)#A,&D-%D-#D,#D-$C-$@+#=( :&8&6%1 *#%&%$$$$$%&''()()**))((('')*+))0@+&S82R5/0!))+--)*+-1!A1*I81A0)1!0",, + *+--+**,,+-..-..-,,-1223 3 0/-).4!6#9' =*"?+#B,%D.'E/'D-%A)!B) O6-O6/>%532...-,,--,+*******+*)))*))*++,-------,,,,--../1 2!1 1 1 0////01 1!//1 3"3#6%7$8$7#5!5!8%7#7#7#7#7#7$7$7#7#7#7#7$8%:&9%6#6"7#7#6"3 7$9% 9% :&!9% 7#6"7#8$8#8#7"7#8$9$7"9$;&!;&!9$:$;% ;% :%9$8$8$8$7#6"5!5!6"7#4"3!3"2 /1 1 ..**'" 0=&U;3X>6E/)1!0 .--..02!5#7$7#6#7$9%:' ;' :' 9&;& ='!<'!<& <& <& <& ;& <& ;& ;%;& ;& ;& ;& :% 9$8#7"6"4"2!/!-,++**+,F2+N;3D1)3 &&$#"',- .!.!1!3"4#5$7% 6#4"4"6$8& 5$6%5#5$6$6"9$7#8#9%8$6"8#9% 9$9% :& :& 8$:% 6"9$;'!9% 9%<("8$9%9% 8$7#6"7#8#8$7#6"7#8#7#7"6"6!7"6"7#7#6#5$6%7%8$8$9$9%:%;&<%=%>&M4-gNGbHA=$:!72..-+)+-.-///0 2!2!5#7$7#6"6"6"8#8#7"7#9% :& 9%7#7#8#8#7#7#6"5!4 5#6$3!1 2!2!3!3"3"3"3"2!3!3"3!2 2 2 2!2 2 3!3"3!4"5$6%7%7%5$3!3"5#6%6%5$4#3!4!6"6#3"0 11/---,.*)&%('(+./1 48"9#O82fOIaICD-':$:$8#7#9%7%7& 4!:% <'":&!<(#:% 4 9% ;&!9% 9% ;&!:& 9$9$8$7#6"9% 8& 6%5$5#4"6$7& 6%6$5$4"5$6$6%7%7&6%6$5#6%7& 6$4"8& 6$9'!8' 8& 7%5$7%7& 7%6%5$4"3!3!3"4"2"/ ,'&%" - $&()+-,+0++-. .!/ 025 6"2 3!3!3!4!4!5"5#6#8$9$8#7#9$;&!=("=("<'!;& ;'";(#9&!7% 8% 8% 7$5"3!3 13 5!56 5<%K4,\E=ZC:7$---+&)()+03"03!5$5#2!6$3"2"3"4"6"8$9% 7$6"7#8%6%3"4#5$4#4#4#3"3"4#3"2!2!2!3"3"2!1 1 1 0/1 001 1 //2!1 /..--../01 1 1 1 2!2!1 1 1 2!2!2!1!0//01 3!4 4 4 4 222 1 00/0 0 /1!-/.--,./../0.....,++,-.-,,+)-.4!G3/WB>L94231004=)#A,&C-%D-#C,#C,#B,#A+#>(!:&8%7&5$/"$%&%$%%$$%&''(())*)(''((&()+)(-<)$R81S81<)!+)*,-)+-/7"L8/O;3D0(6#./.,,,--,,,--,./../ /-,,-002320/ -*/4"6$;(!=*"?+#A+$C-%D.&D-%B*"E+#I0(H0)8 542..-,,,-,+*))))))**))()**))*++,-,,,,,++,,--..02!2!1 1 1 0//0000 1 0/1 2!3#5$7#8%7#4!4 7#6"6#6#7#7$7$7#6#6"6"6"6#8%9&9%7#6#7$8$6"4!9% 8% 9% 9% 9% 7#7#7$7$7#7#6#7#7#7#6"7#9% 9% 9$9#;% 9$9$9$8#7"8$7#6"5!4!5!6"4"3"3"3!/0 /-,'($ 3 C-$]C;^D'M5.eME^E><#;"82/.-+)*,-,///01 1!4#6"7#6"6"6"7#7#6"7#8$9% 7#6"6"6"7#7#7#5!5!5!7$7%3"2 3!2!2!3!3"3!3!1 1 2!2!1 2 2 2 2 2!3!4"4"4#5$6%7%6$5#2!3"5$6%5$4"3"3"4!7#6#3"011/-,,+-('%$'''*-,136!8!I2,_HB]F@C,&9#9#8#7#7#5$7& 5":% ;'"9% <(#:&!6":& :&!8$9%:&!8$8$8$8$7#6"8$7%6$5#4"3!5#6$6$5$5#4"5#5$6$6$6%6%6%4#5#7%5$2!7%5$7& 7& 6%6%3"6%6%7& 7& 6%4#3"2!4#4#3"/*&$#!!"%((,.-(-+,--.!. 024 6"3!3!4"4"4"4"4"4"5"6#8$8#8#9%;'!=("=("=("<'!<'";'"9% 8$ 8% 7% 6$5"4!3!224 46 6 ;$I1*ZD)";&7%7%7&2!3!#$%%%%%$$%&&&()))))(''''&'(**'(8&!K3,S81G0(/"))++.)*--0='O:0R<3G1(5/0--,,,,,--.../..///-,-./0 2 0///+/15"7%;)!=*"?*"@+#B,%D.&D.&D,$E+#E+$A)"6531//-,,,,,+)(()((())((()+**)*+++,,,,,++++,,--.02!1 1 1 1 0//0000 0 0002!3#5#7#9&7#4 4 6#6"6"6#7#7$7$6"5"5"5"5"5"8$9%8%7#6"7$7$6"5"9&!8$8$8% 8%8$8$8% 7$7#7#6"7#7#7#6"6#8$8%8#8#:$ 8"9#9$8"6!8$7#8$7#5!34 5!5"4!4!1/-,*'&# 6"F0'^C<^C<>+%/.-,,.0 2"3#4"6#7$8%8$7$7#7$8%9&=("=("<'!<& ;& :%:%:%;% :%:%:%:%:%9$9$8#6"5!4 3!0!- ,+*(('(*)('&# #%(+- 023!4!4!3!4!5$6$6$7& 6%6$6#6"4 25!7#9%8$6"8$;&!9% 9% :& ;'!;'!:& 9$8$9%9% 8$9% 9% 8#7#7#6"5!5!5!6"6"6"5!8$7"5!4 5!5!6"6"6"6#5$6$9&:&9%:&;&;&:%>':#;$K3+]E>W>7;"8 84/-,+)*+,,/0/000 3!6"8$7#6"7#8$6"5!6"8$8$5!6"5!5!6"7#6"5!4 5!6$6%3!1 2!2!2 2 2!2!2!101 2!2!2 1 2 2!2!3"3"3"3"4"4#4#3"3"1 2!5#5$4#2!3"5$5"7#6#2!/11.,,*)+'&$#'('),.3"25 5=& N60R;5?("8"9#9$8$7$5#6%6#9% ;'!8$;'":'!7#:& :&!7#9% :&!8$8$9% 9%7#5!6"6$6%5$3"2 4#5$5$5$4#3!4#5$5$5$5$6$6$4#3"4$4#05$3#5$5%5$5$3#5%6%6%6%5$3#3#3#4#3"2 .*%#" -%&%% *01',++,,--/14 6!3!3!4"4"4"3!3 2 3 5"8#8#9$:%;& <'!<'!;& :%:% <'#:%!8$ 7$ 7$6#5"4!4!33457 7 ;#E.&U>6Q:3<(",++*$'()+,0/03"4#2!4#3"2"3"3"5"7#7$7#5"4!5"5#4#4#6% 5$3"2!2!2!4#2!1 1 2!3"1!0001 2".////0 ./ 0 0 .------/0 0 0 1 1 1 1 1!1!1 1!2!2!2!0 //00 2 3 23 3 211 2!0///0 -0 .-.,.--.-+-//....-,+,./11/1./..8% ZGB_JFD/+.03039$?)$@*$D-$C+"A*!A+"A+#?*"<&8%6%5$2!-"$%%%%%%$$&&&')))))('''''''(*((1 D.(V:1S809* -+++**+-,0@*!N8/O90E/&2/../++,,,--....--...-,--.0 1../.).2 4"8%;( =*"?)"@+#C-%E.'E.&E,$B)!B)">&630..-++++++*)''((((((('')++*)****+++,,+**+,+-..01 0 001 0//01 0/0 0 0/1!3"4"7#9&6#3 4!6#6"5"6#7$7$7#6#5"5"5"5!4 7#8$7$6#6"7$7$6#6#9% 7#7#7$8$8%9% 9% 7$7#6#6"6#7#6#6"6"7$7$7"8"9#7!8#8#7"7"8$7#7#6"4!4 5!6"5"5!4 2.,+*($# 6"I2)]C;^D<9'!.-,-./0 1!3#3 5"6#7#6#5"5"6"7#8%<'!='!<'!;& :%:%:%:%:%:%:% :& :%9%8$8#7#5!4 3 2!/!- ,+*)(&(*%$ %&%" !#%),/13!3!3!2 3!5#4#5#7& 6%8%8$6"5!4 6"9% 9% 7#6"7#:&!9% 8$9% ;'!;'"9% :& 7#8$9% 8$8$:&!7#7#7#6"4 4 4 5!5"5!5!7#6"5!4 5!6"6"6"6"6#6$6$:&:&:&:&:&:&9$?(!7!9"E.'Q92L4-;"58 5.-*)()*+,/////1 2!5"7#7#6"7#8$6"5!5"7#7#35!4 3 5!6"5"5!4 5!5#4#1 02 1 1 1 003!001 2!2!1 1 2!3!3"3"3"2!2!3"3"3!2!3!1 2!4#5#4"2!2!4#5"7#6$3!/11/-,*(**'##&(()*.2"05 7!:#B+%E.(;$8"8#9$8$7#4"5%6$9% :&!6#9% :&!8$9% 9& 6"8%:&!8$8$9% 9% 6"5!6"7$6%5$4"2!4#5$5$5$3"2!4#5$5#4#5$5$5$4#3"3#4#/4#2!2"3#4#4#7& 7& 6& 4$2"2!2"3#4$3"2 1.+&#!  &&%(4!B.)C/*1-++++,-/024 11 3!4"4"3!2 2 3!5#8$9$9%:%:& :& :& 9%8$9$='";% 9#8#8#7#6"5!5!4 4457!7!7 ?( K4,H1*9%,++*"%&&(,/01 3"5$3#4#4#3"3#3"4"6"6#6#5!5"5"5#4#3"7& 5%3"1 1 03"1!001!3"1 /./0 3#///..0 ./0 0/---....00 00 1 0 0 1!2!0 1 2!2!1!0///01 3 133 201 2!0 //.0 .//,.,-...,,-----...-,-//02-/...,2 R@;`KGN84+,1127">)#>("C,#C,#B+"A+"A+"?*#<' 9%7%5$3", #$%%%%&%$%&&&((())((((''('%()(,;'!U90V90A/$0")+,)')*),C/&L80I5-<( -.---++,,,,--...-,,,--,-,-/0...,(/3 4"7$:'=)!?)"A+$C-&D.&D-%D+#@'A)!;#50--,+*******(&'(''(((''')++******+++,,+**++*-../1 //01 1 /01 1 0/0 0 0/0 2!3!6#8%6#3 5"6#6"6"6#7$7#6#6"5"5"5"4!35"7#6#5"5"6#6#6"7#7$6"6#7#7$8$8% 9% 7#6#6#5"6"6#6"6"6"7#6#5 6!7"6!8"7"6!7"8$7#5"4!4 4!6"6#5"4 21/-+*'#",7"K3*[A9Y@94$....///1!3"2 5"6#5"4!4!5"6#6#7#9$:%;% :%:%9$:$9$9$9%;& :& :%9$8#7#6"5!4 3 1 .!-,+*)(&&'&%%%#"!  "%(+.03!3!2 22 4"4#5#7%7$8%9% 7#6"5!7#:'!9$6"5!7"9% 8$7#8$:&!;'"8$:&!6"8$:&!9% 8$<(#8$7#6#5!4 4 4!5!5!5!5!6#6"5!4!5!6"6#6#6"6#7#7#9%:' :':':&9%8$:$8"9#:$9#8!:#8!61-,)('()*+-.///1!3"4 4!6"6"5!8$8$5"5!6"5!14!3233 3 5!6"4!3!2!1 01 01 2!2 1 1 1 2!1 1 1 01 3"3"3!2!2!2!2!3"3"2!1 3"3"3!3"4"4#3"2!3"5"7#6#3"/10.-,)())&##%(***.1 /49#:#:#;$8!7!7"8#7#6#3"5$6$8$8% 5"8$9% 7#8$9% 6"7#8$8$7$8%9% 6"5!6#7$6%6$4#3!3"4#5$4#3"3"4#5#4#3"4#5#4#4#4#4#4$/3#1!1 3"3#3#6% 6& 6%4$3"2!2!2!3"2!//.,($   $%&,:&!L82M:56$.,,**,.//02012 3!3!3!2 3 4"6#8$9%9%:% :& :& :& 9%8$8$='!;% :#9#8"7#6"6"5!5 6!457!7!37">(!;&2-,,+! #%$&+/1 1 3"5$4#3#3"2!3#2"3 4!5"5"4!5"5"5"4#2"6% 6%3"00/1 0 //1!3"0 .-.02!0 /0 ../..///.-.0/../0 /00 0 01 2!001 2!1 0../00 2 223 3 /0 2!0 ././../,-,,-/.,-.-+,--..-,-...2//.-0,0H50]HDV@<1,-/13?*%?)#A+#C,#C,#B,#A+#?*"=' :&7%5$4$/"$%%$%&%%%&&&'''()))()'&)(%&))(1K1)R6-F0&2$&),*,(%'''.D3*J80A.'3 *-,+++,,-,,,-.//.-,-....-/ 0 0.-,)%/3!4!6#9&=)!@*#B,%C-&C,%C+#B)!?&@(!8 2/,++)))*))))(&''''()((''(*++*+**)+*+,,+*+++*.../0./01 1 /01 1 0./1 0 00 1!3 6#7$6#4 6#6#5"6"6"6#6#5"5!4!4!5!3 35!6"5"4!5"6#6#6"7#6#5"5"6"6#6#7$8$6#7#6"5!5!6"5"6"6#6#5!46!6!6 7"6!5 6"8$6#2223 4!4!310/.,+)&"!+7"I1+U<5O70.--.//./0 2!3!5#6#6#5"5"6"6#6#7#8#9$:%:%:%9$:%:%:& ;& :& :& :%9$7#6"5!4 3 2 0 . -,+)('&%&'&%"   $&(*.02 3!2 113!3"5"7#7#9% 9% 8$7#6"8$;'"8#6!6 6!8#9#7"7":% ;&!8#:%!6!8$:&!:% 8$=)$8$7#6"5!4 4!5!5!5!4 4 6"5"5!4!5!6"6#6#6"7#7#6#8%:& :' :& :&9%7$7"9$9#8"6 69":#50-+)''())*-./..1 2!3 4 5!4!3 6"6#4!4 5"5"24!323324!6"3 2 2!1 1 001 2!2!0 02!2!2!1 1 01 4#3"2!2!2!2!2!3"3"2!1 2!2!1 2!3"3"2!1 3"4"6"5#2!/00-,+))(&%#"#(+,*.0 /38#;$9"68!7!6!6!6"5!3!5$6$7#8$5!7#7$6#7#8$6"7#7#7#7#8$9% 6"5!7#7%6%5$5$3"3"4#4#4#3"4#5$4#3"3"3"4"4#4#4#5$6% 1 4#2!1 3"3"4#5#5$5$5#4#4"3!3!3!2 /.-,($!  -*%&,9& L94O<78& .,,**+,--.0001 3!3!2 2 2 4!6#8%9%9%9%9%9%9%9%8$7#;& ;%:$9#7#6"6"6"5"4!6#3 3 4!4!025 3..--++"$"%+01 1!3"4#3#2"1 1 3#2!2 34 4 4!5"6"4"4#2"5%6%3"//.00 /.1 3"0 -,./0 0/1 ....-../.-.0 /.-/0 ./0 0 /0 1!0/0 1!1 /.../02223 4!00 1!1!././/-/ ,-,+,.---.,+-.--/.,+++*010/,0-.<*%UA=WA>:%!.-/01;'!?*$@*#C,"B+"B+"A+"@*">(!;&8&6%4#01!#%&#$%&%%%&&&&&(())))(&)(&%'('*3!9&5#)%%)**'%'&'1@-%B/(8$+*,+*+,,,-,,,-..-,++,...../1 0/-*'014!3!5#9&>)"A+$C-%C,%@*#C+#B)!@( >' 420.,*(((('())(&'''()*)((''*++*+*)*+),-,+++,++.-.//./01 0//1 1 /./1 1 0 0 1 26#6#5"5"7$6#5"5"5"5!4!4!4 3 3 4!3 3 4!5!4!4!5"6#6#6"6#6"5"5"6"5"5"6#7#6"7#5"4!4!5"5"6"6#5"4 46!5 5 6!5 4 5"6#5"233 4!5!4 2/---+*(%" (/=&D,$?(",,,-./../1 3 4!5"5"5"4!5"6#6#7#9$9%:% :%9%9$9%:%;& ;& :& :% 9%8$7#5"4 4 321/-,+)('&%&'$$$#  !$'(*..13!2 001 2!4!5"6#8% 9% 8$7#6#7#8$7"7!6!6!7"8#7!7!9$:% 8#:$ 6!9#;%!:$ 9#=($8#6"5"5!5!6"6"5!4!4 3 5"5!4!4!5!5"6"6"6"7$7$6#8$:&:&:&9&9%7$6!:%9$:$;%:#7!;%50-+(''(())-//..0 1 2 3 4!4 3 5!5!3 3 5!6"3 5!333 324 4!212!1 00/01 1 002!2!2!1 1 0 1 4#3"2!1 1 2!2!2!2!2!1 1 1 1 1 2!2!1!1 2!4!5"5"2!0 10.,+(*'$####'+,+.1 1258!6 48!7!5 5!6"5!3"4#5#6#8$6#6#6"5"6"7#6"6#6#6"6"7#9% 6#5!7#6$4#4#4#2!2!3"4#3"2!5$5$3"3"3"3"3"3"3"4"5#7%24!3 13 4!5"4!4!5"7#7$7#5"4!4 3 //-+(#!  *&',7$L94M:49& ,,-****+,-../12!2 1 112 4"6#8$8$8$8$9$9$8$8#7#:$:$9#8#6"6"6#6#4"3!5#3!3 5!5!2221-.-,+)"&$'*-./0 1 2!1 //2"1!01323 5!5"3!3"1!4#5%3#//./1 0.02!1 -,.////2!/-..,,-.-,-0 0 .-.0 ../0 ./0 0 /00 0 /.-///1 101 2 001!2"-...//.-,,++++,..,,..--..-++,+-01/,//-1D1,K72<(#0/1118#>)$?*$B+"B+"B+"A+"@+#?)"<' 9&7%5$1 .!#%#$%&%$$%&&&&''(((((((('&%&&&&&'$$$&)*&%&&'17%6$0(++**,,,,,-,,,,++)((*,-,,,-///-*(-1 3!4"7$9&=)!@+$B,%B,$@*"D+#@'=&:#111.+*''(''())(''''(**)(('&*++++*)*+),-,+,,,++--.//./00 /..0 1 .-.1 1!0 0 1 25"5"5"6#7$4!5"5"4!3 3 3 3 3 3 3 3 4!4!4!4 4!5"6#6#6#6#5"5"6"5"4!4!5"6#6"6#4!4!4!5"5"6#6#5!4 5 7"5 5 5 5 25!5"4!4 4!5"6#6#5"3 0/-,+*(%" &(11-**+-.////023 4!4!3 3 4!5"5"6#9$9%:% :%9$9$9$:%;& :& 9%9$8$7$6#5!4 4 3210.-,*(('&''%%%$!!!$&(*-,02!3!101 2!3!5!6#8$8$7#7#6#5"5!6!7"7!6!7"8#7"7!8#9$ 9#8#6!9$:% 9$ 9#:%!6!6"5"5!5!6"6"5"4!3 35!5!4!4!5!5!5"6"5"7$8$6#7$9%9%9%9%8%8$5!9%7#7#7#5!37#30.+('''(()-//.-/0225!6#5"6"5"323 4!3 4 3 332233 111!1 0001 1 0 /02!2!1!1 1 0 1 3"3"1 1 1 3"3"2!1!2!1!01 0 01 2!1 0 1 3!5"5"2"0 1 0.,+)*'###"#&)++/1 2127!8!47!6!5 6!7#5"4"3#4#6#8% 8$7$6#5!5"6#7#6"6#5"4!6"8$6#5!6#6#3"4#3"1!1 2!3"3"1!4#4#2!1!3"4#3"2!2!3!4 7#23 3 13 4!5"4!4 5!6"6#6"5"5"6"6#1 /-*&"!  -')-4"I61K83:'",+++*)()+,,-/01 1 11013 5"6"6"7#7#7#8$7#7#6"8#9$9#8"6"6"6"6#4"2 4"4!3 4"5!3 210/.,,+(!%&'*+,./01 2!/0 2"1!/02124!4!21 0 2!5$3#0//02!2!./1 1!.-...-.1!0 -,.++,--+-/ 0 .-.0/./0//0/-.0///,///0 1!.//./1!2".--./0 .-,+*++++-.,,-.-,-..,,-,,.1.,..,,5";($7#-/1225!=(#=)#A*"A+"A*!A+"@+"@*#=(!:' 8&6%3"- ###%%%$$$&&&&''''''(''''&%%%%%$%$%%%&)* \ No newline at end of file diff --git a/tests/OpenGL/README.md b/tests/OpenGL/README.md deleted file mode 100644 index 36883ed9..00000000 --- a/tests/OpenGL/README.md +++ /dev/null @@ -1,149 +0,0 @@ -# OpenGL 测试文档 - -> **版本**: 1.0 -> **日期**: 2026-03-16 - ---- - -## 1. 概述 - -OpenGL 测试是 XCEngine 渲染硬件接口 (RHI) 的集成测试,用于验证 OpenGL 渲染管线的正确性。 - ---- - -## 2. 测试内容 - -### 2.1 渲染管线测试 - -| 测试项 | 说明 | -|--------|------| -| 窗口初始化 | GLFW 窗口、OpenGL 上下文创建 | -| GLAD 初始化 | OpenGL 函数加载 | -| 着色器编译 | 顶点着色器、片段着色器编译 | -| 模型加载 | 使用 Assimp 加载背包模型 | -| 纹理加载 | 加载 diffuse/specular 纹理 | -| 渲染输出 | PBR 渲染到屏幕 | - -### 2.2 截图测试 - -程序在第 30 帧自动截图,并与基准图 `GT.ppm` 进行像素级对比。 - ---- - -## 3. 构建与运行 - -### 3.1 构建 - -```bash -# 创建构建目录 -mkdir build && cd build - -# 配置 CMake -cmake .. -A x64 - -# 编译 -cmake --build . --config Debug --target XCRender -``` - -### 3.2 运行 - -```bash -# 方式一:直接运行可执行文件 -./build/tests/OpenGL/Debug/XCRender.exe - -# 方式二:运行测试脚本(自动截图并对比) -./build/tests/OpenGL/Debug/run.bat -``` - ---- - -## 4. 测试流程 - -``` -1. 初始化 GLFW - ├── 创建窗口 - └── 创建 OpenGL 上下文 - -2. 初始化 GLAD - └── 加载 OpenGL 函数 - -3. 加载资源 - ├── 编译着色器 - ├── 加载模型 (Assimp) - └── 加载纹理 (stb_image) - -4. 渲染循环 - ├── 清空帧缓冲 - ├── 设置 Uniforms - ├── 绘制模型 - └── 交换缓冲区 - -5. 截图验证 (第 30 帧) - ├── 读取帧缓冲 (glReadPixels) - ├── 保存为 PPM 格式 - └── 与 GT.ppm 对比 -``` - ---- - -## 5. 文件结构 - -``` -tests/OpenGL/ -├── CMakeLists.txt # 构建配置 -├── main.cpp # 测试程序入口 -├── run.bat # 运行脚本 -├── compare_ppm.py # 图片对比脚本 -├── Res/ # 资源目录 -│ ├── models/ # 模型文件 (backpack) -│ └── shaders/ # 着色器 -└── package/ # 第三方库 - ├── include/ # 头文件 (GLFW, GLAD, Assimp, GLM, stb_image) - └── lib/ # 库文件 -``` - ---- - -## 6. 基准图 - -- **GT.ppm**: 正确渲染的参考截图 (1280x720) -- **screenshot.ppm**: 程序渲染的实际截图 -- **对比阈值**: 5 (像素差异容忍度) - ---- - -## 7. 调试 - -### 7.1 日志输出 - -程序使用 XCEngine Logger 系统,日志输出到: -- 控制台 (ConsoleLogSink) -- 文件 (FileLogSink): `OpenGL_engine_log.txt` - -### 7.2 常见问题 - -| 问题 | 原因 | 解决方案 | -|------|------|----------| -| 黑色画面 | 着色器编译失败 | 检查着色器错误日志 | -| 无纹理 | 纹理路径错误 | 确认 res/models/ 目录 | -| 模型未显示 | Assimp 加载失败 | 检查模型文件是否存在 | - ---- - -## 8. 技术细节 - -- **分辨率**: 1280x720 -- **OpenGL 版本**: 3.3 Core Profile -- **依赖库**: GLFW, GLAD, Assimp, GLM, stb_image -- **平台**: Windows - ---- - -## 9. 与 D3D12 测试对比 - -| 特性 | D3D12 | OpenGL | -|------|-------|--------| -| 分辨率 | 1280x720 | 1280x720 | -| 截图帧 | 30 | 30 | -| 模型 | Sphere.lhsm | backpack.obj | -| 日志系统 | XCEngine Logger | XCEngine Logger | diff --git a/tests/OpenGL/Shaders/fragmentshader.glsl b/tests/OpenGL/Shaders/fragmentshader.glsl deleted file mode 100644 index 538b2c76..00000000 --- a/tests/OpenGL/Shaders/fragmentshader.glsl +++ /dev/null @@ -1,114 +0,0 @@ -#version 330 core -out vec4 FragColor; - -struct Material { - sampler2D texture_diffuse1; - sampler2D texture_diffuse2; - sampler2D texture_diffuse3; - sampler2D texture_specular1; - sampler2D texture_specular2; - - float shininess; -}; - -struct DirLight { - vec3 direction; - - vec3 ambient; - vec3 diffuse; - vec3 specular; -}; - -struct PointLight { - vec3 position; - - float constant; - float linear; - float quadratic; - - vec3 ambient; - vec3 diffuse; - vec3 specular; -}; - -#define NR_POINT_LIGHTS 10 - -in vec3 FragPos; -in vec3 Normal; -in vec2 TexCoords; - -uniform int PointLightNum; -uniform vec3 viewPos; -uniform DirLight dirLight; -uniform PointLight pointLights[NR_POINT_LIGHTS]; - -uniform Material material; - -// function prototypes -vec3 CalcDirLight(DirLight light, vec3 normal, vec3 viewDir); -vec3 CalcPointLight(PointLight light, vec3 normal, vec3 fragPos, vec3 viewDir); - -void main() -{ - // properties - vec3 norm = normalize(Normal); - vec3 viewDir = normalize(viewPos - FragPos); - - // == ===================================================== - // Our lighting is set up in 3 phases: directional, point lights and an optional flashlight - // For each phase, a calculate function is defined that calculates the corresponding color - // per lamp. In the main() function we take all the calculated colors and sum them up for - // this fragment's final color. - // == ===================================================== - // phase 1: directional lighting - vec3 result = CalcDirLight(dirLight, norm, viewDir); - // phase 2: point lights - for(int i = 0; i < PointLightNum; i++) - { - result += CalcPointLight(pointLights[i], norm, FragPos, viewDir); - } - - // phase 3: spot light - - FragColor = vec4(result, 1.0); -} - -// calculates the color when using a directional light. -vec3 CalcDirLight(DirLight light, vec3 normal, vec3 viewDir) -{ - vec3 lightDir = normalize(-light.direction); - // diffuse shading - float diff = max(dot(normal, lightDir), 0.0); - // specular shading - vec3 reflectDir = reflect(-lightDir, normal); - float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); - // combine results - vec3 ambient = light.ambient * vec3(texture(material.texture_diffuse1, TexCoords)); - vec3 diffuse = light.diffuse * diff * vec3(texture(material.texture_diffuse1, TexCoords)); - vec3 specular = light.specular * spec * vec3(texture(material.texture_specular1, TexCoords)); - return (ambient + diffuse + specular); -} - -// calculates the color when using a point light. -vec3 CalcPointLight(PointLight light, vec3 normal, vec3 fragPos, vec3 viewDir) -{ - vec3 lightDir = normalize(light.position - fragPos); - // diffuse shading - float diff = max(dot(normal, lightDir), 0.0); - // specular shading - vec3 reflectDir = reflect(-lightDir, normal); - float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); - // attenuation - float distance = length(light.position - fragPos); - float attenuation = 1.0 / (light.constant + light.linear * distance + light.quadratic * (distance * distance)); - attenuation = min(attenuation, 1.0f); - // combine results - vec3 ambient = light.ambient * vec3(texture(material.texture_diffuse1, TexCoords)); - vec3 diffuse = light.diffuse * diff * vec3(texture(material.texture_diffuse1, TexCoords)); - vec3 specular = light.specular * spec * vec3(texture(material.texture_specular1, TexCoords)); - - ambient *= attenuation; - diffuse *= attenuation; - specular *= attenuation; - return (ambient + diffuse + specular); -} diff --git a/tests/OpenGL/Shaders/vertexshader.glsl b/tests/OpenGL/Shaders/vertexshader.glsl deleted file mode 100644 index 1364f293..00000000 --- a/tests/OpenGL/Shaders/vertexshader.glsl +++ /dev/null @@ -1,21 +0,0 @@ -#version 330 core -layout (location = 0) in vec3 inPos; -layout (location = 1) in vec3 inNormal; -layout (location = 2) in vec2 inTexCoords; - - -out vec2 TexCoords; -out vec3 FragPos; -out vec3 Normal; - -uniform mat4 model; -uniform mat4 view; -uniform mat4 projection; - -void main() -{ - FragPos = vec3(model * vec4(inPos ,1.0f)); - Normal = mat3(transpose(inverse(model))) * inNormal; - gl_Position = projection * view * vec4(FragPos,1.0); - TexCoords = inTexCoords; -} \ No newline at end of file diff --git a/tests/OpenGL/compare_ppm.py b/tests/OpenGL/compare_ppm.py deleted file mode 100644 index dcf5de98..00000000 --- a/tests/OpenGL/compare_ppm.py +++ /dev/null @@ -1,75 +0,0 @@ -import sys -import os - - -def read_ppm(filename): - with open(filename, "rb") as f: - header = f.readline() - if header != b"P6\n": - raise ValueError(f"Not a P6 PPM file: {filename}") - - while True: - line = f.readline() - if not line.startswith(b"#"): - break - - dims = line.split() - width, height = int(dims[0]), int(dims[1]) - - line = f.readline() - maxval = int(line.strip()) - - data = f.read() - return width, height, data - - -def compare_ppm(file1, file2, threshold): - w1, h1, d1 = read_ppm(file1) - w2, h2, d2 = read_ppm(file2) - - if w1 != w2 or h1 != h2: - print(f"ERROR: Size mismatch - {file1}: {w1}x{h1}, {file2}: {w2}x{h2}") - return False - - total_pixels = w1 * h1 - diff_count = 0 - - for i in range(len(d1)): - diff = abs(d1[i] - d2[i]) - if diff > threshold: - diff_count += 1 - - diff_percent = (diff_count / (total_pixels * 3)) * 100 - - print(f"Image 1: {file1} ({w1}x{h1})") - print(f"Image 2: {file2} ({w2}x{h2})") - print(f"Threshold: {threshold}") - print(f"Different pixels: {diff_count} / {total_pixels * 3} ({diff_percent:.2f}%)") - - if diff_percent <= 1.0: - print("PASS: Images match!") - return True - else: - print("FAIL: Images differ!") - return False - - -if __name__ == "__main__": - if len(sys.argv) != 4: - print("Usage: python compare_ppm.py ") - sys.exit(1) - - file1 = sys.argv[1] - file2 = sys.argv[2] - threshold = int(sys.argv[3]) - - if not os.path.exists(file1): - print(f"ERROR: File not found: {file1}") - sys.exit(1) - - if not os.path.exists(file2): - print(f"ERROR: File not found: {file2}") - sys.exit(1) - - result = compare_ppm(file1, file2, threshold) - sys.exit(0 if result else 1) diff --git a/tests/OpenGL/main.cpp b/tests/OpenGL/main.cpp deleted file mode 100644 index 0059fa75..00000000 --- a/tests/OpenGL/main.cpp +++ /dev/null @@ -1,415 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "XCEngine/Debug/Logger.h" -#include "XCEngine/Debug/ConsoleLogSink.h" -#include "XCEngine/Debug/FileLogSink.h" -#include "XCEngine/RHI/OpenGL/OpenGLShader.h" -#include "XCEngine/RHI/OpenGL/OpenGLDevice.h" -#include "XCEngine/RHI/OpenGL/OpenGLPipelineState.h" -#include "XCEngine/RHI/OpenGL/OpenGLCommandList.h" - -using namespace XCEngine::Debug; -using namespace XCEngine::RHI; - -#pragma comment(lib, "opengl32.lib") -#pragma comment(lib, "gdi32.lib") - -const unsigned int SCR_WIDTH = 1280; -const unsigned int SCR_HEIGHT = 720; - -void Log(const char* format, ...) { - char buffer[1024]; - va_list args; - va_start(args, format); - vsnprintf(buffer, sizeof(buffer), format, args); - va_end(args); - - Logger::Get().Debug(LogCategory::Rendering, buffer); -} - -struct Vertex -{ - glm::vec3 Position; - glm::vec3 Normal; - glm::vec2 TexCoords; -}; - -struct Texture -{ - unsigned int id; - std::string type; - std::string path; -}; - -class Mesh -{ -public: - std::vector vertices; - std::vector indices; - std::vector textures; - unsigned int VAO; - - Mesh(std::vector _vertices, std::vector _indices, std::vector _textures) - { - vertices = _vertices; - indices = _indices; - textures = _textures; - setupMesh(); - } - - void Draw(OpenGLShader* shader) - { - unsigned int diffuseNr = 1; - unsigned int specularNr = 1; - - for (unsigned int i = 0; i < textures.size(); i++) - { - glActiveTexture(GL_TEXTURE0 + i); - std::string number; - std::string name = textures[i].type; - if (name == "texture_diffuse") - number = std::to_string(diffuseNr++); - else if (name == "texture_specular") - number = std::to_string(specularNr++); - - glUniform1i(glGetUniformLocation(shader->GetID(), ("material." + name + number).c_str()), i); - glBindTexture(GL_TEXTURE_2D, textures[i].id); - } - - glBindVertexArray(VAO); - glDrawElements(GL_TRIANGLES, static_cast(indices.size()), GL_UNSIGNED_INT, 0); - glActiveTexture(GL_TEXTURE0); - } - -private: - unsigned int VBO, EBO; - - void setupMesh() - { - glGenVertexArrays(1, &VAO); - glGenBuffers(1, &VBO); - glGenBuffers(1, &EBO); - - glBindVertexArray(VAO); - glBindBuffer(GL_ARRAY_BUFFER, VBO); - glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(Vertex), &vertices[0], GL_STATIC_DRAW); - - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned int), &indices[0], GL_STATIC_DRAW); - - glEnableVertexAttribArray(0); - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)0); - glEnableVertexAttribArray(1); - glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, Normal)); - glEnableVertexAttribArray(2); - glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, TexCoords)); - - glBindVertexArray(0); - } -}; - -unsigned int TextureFromFile(const char* path, const std::string& directory) -{ - std::string filename = directory + '/' + std::string(path); - unsigned int textureID; - glGenTextures(1, &textureID); - - int width, height, nrComponents; - stbi_set_flip_vertically_on_load(true); - unsigned char* data = stbi_load(filename.c_str(), &width, &height, &nrComponents, 0); - if (data) - { - GLenum format = (nrComponents == 4) ? GL_RGBA : GL_RGB; - glBindTexture(GL_TEXTURE_2D, textureID); - glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data); - glGenerateMipmap(GL_TEXTURE_2D); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - Log("Texture loaded: %s (%dx%d)", filename.c_str(), width, height); - stbi_image_free(data); - } - else - { - Log("Failed to load texture: %s", filename.c_str()); - stbi_image_free(data); - } - return textureID; -} - -class Model -{ -public: - std::vector textures_loaded; - std::vector meshes; - std::string directory; - - Model(std::string const& path) - { - loadModel(path); - } - - void Draw(OpenGLShader* shader) - { - for (auto& mesh : meshes) - mesh.Draw(shader); - } - -private: - void loadModel(std::string const& path) - { - Assimp::Importer importer; - const aiScene* scene = importer.ReadFile(path, aiProcess_Triangulate | aiProcess_GenSmoothNormals | aiProcess_FlipUVs); - if (!scene || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode) - { - Log("Failed to load model: %s", path.c_str()); - return; - } - Log("Model loaded: %s", path.c_str()); - directory = path.substr(0, path.find_last_of('/')); - processNode(scene->mRootNode, scene); - } - - void processNode(aiNode* node, const aiScene* scene) - { - for (unsigned int i = 0; i < node->mNumMeshes; i++) - { - aiMesh* mesh = scene->mMeshes[node->mMeshes[i]]; - meshes.push_back(processMesh(mesh, scene)); - } - for (unsigned int i = 0; i < node->mNumChildren; i++) - processNode(node->mChildren[i], scene); - } - - Mesh processMesh(aiMesh* mesh, const aiScene* scene) - { - std::vector vertices; - std::vector indices; - std::vector textures; - - for (unsigned int i = 0; i < mesh->mNumVertices; i++) - { - Vertex vertex; - vertex.Position = glm::vec3(mesh->mVertices[i].x, mesh->mVertices[i].y, mesh->mVertices[i].z); - vertex.Normal = glm::vec3(mesh->mNormals[i].x, mesh->mNormals[i].y, mesh->mNormals[i].z); - if (mesh->mTextureCoords[0]) - vertex.TexCoords = glm::vec2(mesh->mTextureCoords[0][i].x, mesh->mTextureCoords[0][i].y); - else - vertex.TexCoords = glm::vec2(0.0f, 0.0f); - vertices.push_back(vertex); - } - - for (unsigned int i = 0; i < mesh->mNumFaces; i++) - { - aiFace face = mesh->mFaces[i]; - for (unsigned int j = 0; j < face.mNumIndices; j++) - indices.push_back(face.mIndices[j]); - } - - aiMaterial* material = scene->mMaterials[mesh->mMaterialIndex]; - std::vector diffuseMaps = loadMaterialTextures(material, aiTextureType_DIFFUSE, "texture_diffuse"); - textures.insert(textures.end(), diffuseMaps.begin(), diffuseMaps.end()); - std::vector specularMaps = loadMaterialTextures(material, aiTextureType_SPECULAR, "texture_specular"); - textures.insert(textures.end(), specularMaps.begin(), specularMaps.end()); - - return Mesh(vertices, indices, textures); - } - - std::vector loadMaterialTextures(aiMaterial* mat, aiTextureType type, std::string typeName) - { - std::vector textures; - for (unsigned int i = 0; i < mat->GetTextureCount(type); i++) - { - aiString str; - mat->GetTexture(type, i, &str); - bool skip = false; - for (auto& tex : textures_loaded) - { - if (tex.path == str.C_Str()) - { - textures.push_back(tex); - skip = true; - break; - } - } - if (!skip) - { - Texture texture; - texture.id = TextureFromFile(str.C_Str(), directory); - texture.type = typeName; - texture.path = str.C_Str(); - textures.push_back(texture); - textures_loaded.push_back(texture); - } - } - return textures; - } -}; - -Model* model = nullptr; -OpenGLShader* shader = nullptr; -OpenGLDevice* device = nullptr; -OpenGLPipelineState* pipeline = nullptr; -OpenGLCommandList* cmdList = nullptr; -int frameCount = 0; - -void Initialize() -{ - char exePath[MAX_PATH]; - GetModuleFileNameA(NULL, exePath, MAX_PATH); - std::string exeDir = std::string(exePath); - exeDir = exeDir.substr(0, exeDir.find_last_of("\\/")); - SetCurrentDirectoryA(exeDir.c_str()); - - Log("OpenGL Test Application Started"); - - pipeline = new OpenGLPipelineState(); - ViewportState viewport; - viewport.width = SCR_WIDTH; - viewport.height = SCR_HEIGHT; - pipeline->SetViewport(viewport); - pipeline->SetClearColor(0.1f, 0.1f, 0.1f, 1.0f); - pipeline->Apply(); - - model = new Model("res/models/backpack/backpack.obj"); - shader = new OpenGLShader(); - shader->CompileFromFile("Shaders/vertexshader.glsl", "Shaders/fragmentshader.glsl"); - - cmdList = new OpenGLCommandList(); - - Log("Initialization complete"); -} - -bool SaveScreenshot(const char* filename) -{ - Log("Saving screenshot: %s", filename); - - int width = SCR_WIDTH; - int height = SCR_HEIGHT; - - std::vector pixels(width * height * 3); - glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, pixels.data()); - - FILE* fp = fopen(filename, "wb"); - if (!fp) { - Log("Failed to open file for screenshot: %s", filename); - return false; - } - - fprintf(fp, "P6\n%d %d\n255\n", width, height); - - std::vector flippedPixels(width * height * 3); - for (int y = 0; y < height; y++) { - memcpy(&flippedPixels[y * width * 3], &pixels[(height - 1 - y) * width * 3], width * 3); - } - - fwrite(flippedPixels.data(), 1, width * height * 3, fp); - fclose(fp); - - Log("Screenshot saved successfully"); - return true; -} - -void Render() -{ - pipeline->Clear(3); // COLOR_BUFFER_BIT | DEPTH_BUFFER_BIT - - shader->Use(); - - glm::mat4 projection = glm::perspective(glm::radians(45.0f), (float)SCR_WIDTH / (float)SCR_HEIGHT, 0.1f, 100.0f); - glm::mat4 modelMat = glm::mat4(1.0f); - glm::mat4 view = glm::lookAt(glm::vec3(0, 0, 3), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0)); - - cmdList->SetShader(shader); - cmdList->SetUniformMat4("view", &view[0][0]); - cmdList->SetUniformMat4("model", &modelMat[0][0]); - cmdList->SetUniformMat4("projection", &projection[0][0]); - cmdList->SetUniformVec3("viewPos", 0.0f, 0.0f, 3.0f); - cmdList->SetUniformFloat("material.shininess", 32.0f); - cmdList->SetUniformVec3("dirLight.direction", 0.0f, -1.0f, 0.0f); - cmdList->SetUniformVec3("dirLight.ambient", 0.3f, 0.3f, 0.3f); - cmdList->SetUniformVec3("dirLight.diffuse", 0.8f, 0.8f, 0.8f); - cmdList->SetUniformVec3("dirLight.specular", 0.5f, 0.5f, 0.5f); - - model->Draw(shader); -} - -int main() -{ - Logger::Get().AddSink(std::make_unique("OpenGL_engine_log.txt")); - Logger::Get().SetMinimumLevel(LogLevel::Debug); - - AllocConsole(); - freopen("CONOUT$", "w", stdout); - - device = new OpenGLDevice(); - if (!device->CreateRenderWindow(SCR_WIDTH, SCR_HEIGHT, "XCRender", false)) - { - Log("Failed to create window"); - return -1; - } - - const RHIDeviceInfo& info = device->GetDeviceInfo(); - Log("OpenGL Version: %ls", info.version.c_str()); - Log("Renderer: %ls", info.renderer.c_str()); - - Initialize(); - - device->PollEvents(); - - MSG msg = {}; - bool shouldClose = false; - while (!shouldClose) - { - while (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) - { - if (msg.message == WM_QUIT) - { - shouldClose = true; - break; - } - TranslateMessage(&msg); - DispatchMessageW(&msg); - } - - if (shouldClose) - break; - - Render(); - device->SwapBuffers(); - device->PollEvents(); - - frameCount++; - - if (frameCount == 30) { - Log("Saving screenshot at frame %d", frameCount); - SaveScreenshot("screenshot.ppm"); - PostMessageW(device->GetWindow(), WM_CLOSE, 0, 0); - } - } - - Log("Application closed"); - - delete cmdList; - delete pipeline; - delete device; - delete shader; - delete model; - - Logger::Get().Shutdown(); - return 0; -} diff --git a/tests/OpenGL/package/README.txt b/tests/OpenGL/package/README.txt deleted file mode 100644 index fd192f6c..00000000 --- a/tests/OpenGL/package/README.txt +++ /dev/null @@ -1,55 +0,0 @@ -这个package文件夹主要是装一些OpenGL的第三方库 -主要包括: -GLAD:用于链接OpenGL函数指针到GPU硬件驱动上 -GLFW:用于跨平台的窗口创建和事件处理 -GLM:OpenGL的第三方数学库 - - - -在配置项目的时候主要是用CMake来配置 -需要做以下几件事: -1),需要定位头文件的查询地址: -方便后期头文件导入,需要用到的头文件有: - -package/include/glad/glad.h -package/include/GLFW/glfw3.h -package/glm/glm/glm.hpp - -2),需要加载静态库glfw3.lib - -3),需要将glad.c文件添加到项目的可执行文件里 - -4),需要将Shader资源文件复制到exe所在目录下 - - -示例: -CMakeLists.txt -#需求的最低cmake程序版本 -cmake_minimum_required(VERSION 3.12) - -#项目名称 -project("XCRender") - -#本工程支持的C++版本 -set(CMAKE_CXX_STANDARD 17) - -#定位头文件查询位置 -include_directories(../package/include/) -include_directories(../package/glm/) - -#加载lib静态库 -link_directories(../package/lib/) - -#把shaders资源文件拷贝到exe所在目录下 -file(GLOB copyResources "./Shaders") -file(COPY ${copyResources} DESTINATION ${CMAKE_BINARY_DIR}) - -#将源代码添加到此项目的可执行文件 -add_executable( -XCRender -"main.cpp" -"../package/src/glad.c" -) - -#从第11行的路径下加载静态库 -target_link_libraries(XCRender glfw3.lib) diff --git a/tests/OpenGL/package/dll/assimp-vc143-mt.dll b/tests/OpenGL/package/dll/assimp-vc143-mt.dll deleted file mode 100644 index 007e6e7d968b6ec3fecfd03f91adcaa96a1d906f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6686208 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Ν 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