Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Goudey <h.goudey@me.com>2022-01-12 23:26:07 +0300
committerHans Goudey <h.goudey@me.com>2022-01-12 23:26:07 +0300
commit03d7d298b5aa804fa8ab7fb28ae26ced0b664e92 (patch)
tree131da1eafc4bd345d714137495552ec87bf923c5
parentffca3b7c5201b27f8e9a59a101f32b667bb91397 (diff)
parent97c2c39916202f8d3d8e1f651ab9dfa171953af2 (diff)
Merge branch 'master' into temp-vert-normals-cleanup
-rw-r--r--CMakeLists.txt14
-rw-r--r--build_files/build_environment/cmake/gmp.cmake7
-rw-r--r--build_files/build_environment/cmake/versions.cmake4
-rw-r--r--build_files/cmake/macros.cmake23
-rw-r--r--build_files/cmake/platform/platform_unix.cmake2
-rw-r--r--extern/hipew/src/hipew.c4
-rw-r--r--intern/ghost/GHOST_Types.h2
-rw-r--r--release/datafiles/blender_icons.svg390
-rw-r--r--release/datafiles/prvicons.svg16530
-rw-r--r--release/scripts/startup/bl_operators/clip.py2
-rw-r--r--release/scripts/startup/nodeitems_builtins.py1
-rw-r--r--source/blender/blenfont/BLF_api.h2
-rw-r--r--source/blender/blenfont/intern/blf_internal.h4
-rw-r--r--source/blender/blenkernel/BKE_appdir.h2
-rw-r--r--source/blender/blenkernel/BKE_attribute.h2
-rw-r--r--source/blender/blenkernel/BKE_attribute_access.hh3
-rw-r--r--source/blender/blenkernel/BKE_attribute_math.hh7
-rw-r--r--source/blender/blenkernel/BKE_bvhutils.h18
-rw-r--r--source/blender/blenkernel/BKE_customdata.h4
-rw-r--r--source/blender/blenkernel/BKE_geometry_set.hh2
-rw-r--r--source/blender/blenkernel/BKE_image.h2
-rw-r--r--source/blender/blenkernel/BKE_mesh_sample.hh2
-rw-r--r--source/blender/blenkernel/BKE_node.h9
-rw-r--r--source/blender/blenkernel/BKE_scene.h7
-rw-r--r--source/blender/blenkernel/BKE_spline.hh2
-rw-r--r--source/blender/blenkernel/BKE_vfont.h2
-rw-r--r--source/blender/blenkernel/BKE_volume.h2
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.cc2
-rw-r--r--source/blender/blenkernel/intern/attribute_access.cc2
-rw-r--r--source/blender/blenkernel/intern/data_transfer_intern.h6
-rw-r--r--source/blender/blenkernel/intern/geometry_component_mesh.cc4
-rw-r--r--source/blender/blenkernel/intern/gpencil_geom.cc2
-rw-r--r--source/blender/blenkernel/intern/hair.cc2
-rw-r--r--source/blender/blenkernel/intern/image.c26
-rw-r--r--source/blender/blenkernel/intern/mask.c3
-rw-r--r--source/blender/blenkernel/intern/mesh.cc10
-rw-r--r--source/blender/blenkernel/intern/mesh_boolean_convert.cc2
-rw-r--r--source/blender/blenkernel/intern/mesh_normals.cc2
-rw-r--r--source/blender/blenkernel/intern/mesh_remesh_voxel.cc2
-rw-r--r--source/blender/blenkernel/intern/movieclip.c2
-rw-r--r--source/blender/blenkernel/intern/node.cc1
-rw-r--r--source/blender/blenkernel/intern/object_dupli.cc19
-rw-r--r--source/blender/blenkernel/intern/pointcloud.cc24
-rw-r--r--source/blender/blenkernel/intern/simulation.cc2
-rw-r--r--source/blender/blenkernel/intern/spline_base.cc41
-rw-r--r--source/blender/blenkernel/intern/spline_bezier.cc37
-rw-r--r--source/blender/blenkernel/intern/tracking_region_tracker.c3
-rw-r--r--source/blender/blenkernel/intern/tracking_test.cc2
-rw-r--r--source/blender/blenkernel/intern/type_conversions.cc3
-rw-r--r--source/blender/blenkernel/intern/volume.cc2
-rw-r--r--source/blender/blenkernel/intern/volume_render.cc2
-rw-r--r--source/blender/blenkernel/intern/volume_to_mesh.cc2
-rw-r--r--source/blender/blenlib/BLI_array_store.h2
-rw-r--r--source/blender/blenlib/BLI_array_utils.h4
-rw-r--r--source/blender/blenlib/BLI_buffer.h4
-rw-r--r--source/blender/blenlib/BLI_delaunay_2d.h4
-rw-r--r--source/blender/blenlib/BLI_double2.hh143
-rw-r--r--source/blender/blenlib/BLI_double3.hh246
-rw-r--r--source/blender/blenlib/BLI_fileops.h3
-rw-r--r--source/blender/blenlib/BLI_float2.hh218
-rw-r--r--source/blender/blenlib/BLI_float3.hh320
-rw-r--r--source/blender/blenlib/BLI_float4.hh138
-rw-r--r--source/blender/blenlib/BLI_float4x4.hh5
-rw-r--r--source/blender/blenlib/BLI_gsqueue.h2
-rw-r--r--source/blender/blenlib/BLI_listbase.h6
-rw-r--r--source/blender/blenlib/BLI_math_boolean.hh6
-rw-r--r--source/blender/blenlib/BLI_math_vec_mpq_types.hh92
-rw-r--r--source/blender/blenlib/BLI_math_vec_types.hh566
-rw-r--r--source/blender/blenlib/BLI_math_vector.hh399
-rw-r--r--source/blender/blenlib/BLI_memarena.h4
-rw-r--r--source/blender/blenlib/BLI_memory_utils.h2
-rw-r--r--source/blender/blenlib/BLI_memory_utils.hh9
-rw-r--r--source/blender/blenlib/BLI_mesh_intersect.hh5
-rw-r--r--source/blender/blenlib/BLI_mpq2.hh184
-rw-r--r--source/blender/blenlib/BLI_mpq3.hh297
-rw-r--r--source/blender/blenlib/BLI_noise.hh4
-rw-r--r--source/blender/blenlib/BLI_path_util.h19
-rw-r--r--source/blender/blenlib/BLI_rand.hh3
-rw-r--r--source/blender/blenlib/BLI_stack.h6
-rw-r--r--source/blender/blenlib/BLI_string.h26
-rw-r--r--source/blender/blenlib/BLI_string_utf8.h19
-rw-r--r--source/blender/blenlib/BLI_string_utils.h6
-rw-r--r--source/blender/blenlib/BLI_timecode.h6
-rw-r--r--source/blender/blenlib/BLI_utildefines.h11
-rw-r--r--source/blender/blenlib/CMakeLists.txt10
-rw-r--r--source/blender/blenlib/intern/BLI_mempool_private.h5
-rw-r--r--source/blender/blenlib/intern/delaunay_2d.cc45
-rw-r--r--source/blender/blenlib/intern/math_boolean.cc7
-rw-r--r--source/blender/blenlib/intern/math_vec.cc133
-rw-r--r--source/blender/blenlib/intern/mesh_boolean.cc51
-rw-r--r--source/blender/blenlib/intern/mesh_intersect.cc88
-rw-r--r--source/blender/blenlib/intern/noise.cc79
-rw-r--r--source/blender/blenlib/tests/BLI_delaunay_2d_test.cc3
-rw-r--r--source/blender/blenlib/tests/BLI_math_vec_types_test.cc149
-rw-r--r--source/blender/blenlib/tests/BLI_memory_utils_test.cc2
-rw-r--r--source/blender/blenlib/tests/BLI_mesh_boolean_test.cc2
-rw-r--r--source/blender/blenlib/tests/BLI_mesh_intersect_test.cc2
-rw-r--r--source/blender/bmesh/intern/bmesh_opdefines.c1
-rw-r--r--source/blender/bmesh/intern/bmesh_polygon.c7
-rw-r--r--source/blender/compositor/CMakeLists.txt14
-rw-r--r--source/blender/compositor/COM_defines.h2
-rw-r--r--source/blender/compositor/COM_precomp.h33
-rw-r--r--source/blender/compositor/intern/COM_Converter.cc4
-rw-r--r--source/blender/compositor/nodes/COM_SceneTimeNode.cc50
-rw-r--r--source/blender/compositor/nodes/COM_SceneTimeNode.h36
-rw-r--r--source/blender/compositor/operations/COM_KeyingScreenOperation.cc6
-rw-r--r--source/blender/compositor/operations/COM_MovieDistortionOperation.cc4
-rw-r--r--source/blender/compositor/operations/COM_OutputFileOperation.h2
-rw-r--r--source/blender/compositor/operations/COM_PlaneTrackOperation.cc4
-rw-r--r--source/blender/compositor/operations/COM_TrackPositionOperation.cc4
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.cc11
-rw-r--r--source/blender/depsgraph/intern/node/deg_node_factory.h2
-rw-r--r--source/blender/draw/CMakeLists.txt1
-rw-r--r--source/blender/draw/intern/DRW_gpu_wrapper.hh812
-rw-r--r--source/blender/draw/intern/draw_cache_impl_curve.cc2
-rw-r--r--source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc4
-rw-r--r--source/blender/editors/gpencil/gpencil_paint.c28
-rw-r--r--source/blender/editors/include/ED_util.h2
-rw-r--r--source/blender/editors/include/UI_interface.h6
-rw-r--r--source/blender/editors/interface/interface_intern.h4
-rw-r--r--source/blender/editors/interface/interface_panel.c1
-rw-r--r--source/blender/editors/interface/interface_region_tooltip.c15
-rw-r--r--source/blender/editors/interface/interface_style.c13
-rw-r--r--source/blender/editors/interface/interface_widgets.c7
-rw-r--r--source/blender/editors/object/object_add.c2
-rw-r--r--source/blender/editors/screen/screen_ops.c51
-rw-r--r--source/blender/editors/space_clip/CMakeLists.txt3
-rw-r--r--source/blender/editors/space_clip/clip_editor.c9
-rw-r--r--source/blender/editors/space_clip/clip_ops.c3
-rw-r--r--source/blender/editors/space_clip/space_clip.c11
-rw-r--r--source/blender/editors/space_file/file_draw.c3
-rw-r--r--source/blender/editors/space_node/node_draw.cc2
-rw-r--r--source/blender/editors/space_node/node_group.cc2
-rw-r--r--source/blender/editors/space_node/node_intern.hh5
-rw-r--r--source/blender/editors/space_node/node_select.cc4
-rw-r--r--source/blender/editors/space_outliner/outliner_draw.c102
-rw-r--r--source/blender/editors/space_outliner/outliner_intern.h2
-rw-r--r--source/blender/editors/space_outliner/outliner_tree.c40
-rw-r--r--source/blender/editors/space_outliner/tree/tree_display.cc7
-rw-r--r--source/blender/editors/space_outliner/tree/tree_display.h10
-rw-r--r--source/blender/editors/space_outliner/tree/tree_display.hh6
-rw-r--r--source/blender/editors/space_outliner/tree/tree_display_libraries.cc7
-rw-r--r--source/blender/editors/space_outliner/tree/tree_display_override_library.cc5
-rw-r--r--source/blender/editors/space_sequencer/sequencer_draw.c37
-rw-r--r--source/blender/editors/space_spreadsheet/spreadsheet_column.cc3
-rw-r--r--source/blender/editors/space_spreadsheet/spreadsheet_layout.cc3
-rw-r--r--source/blender/editors/space_spreadsheet/spreadsheet_row_filter.cc8
-rw-r--r--source/blender/editors/util/ed_draw.c34
-rw-r--r--source/blender/freestyle/CMakeLists.txt5
-rw-r--r--source/blender/freestyle/FRS_precomp.cpp2
-rw-r--r--source/blender/functions/intern/cpp_types.cc3
-rw-r--r--source/blender/imbuf/IMB_imbuf.h30
-rw-r--r--source/blender/imbuf/IMB_metadata.h5
-rw-r--r--source/blender/imbuf/intern/IMB_filetype.h22
-rw-r--r--source/blender/imbuf/intern/anim_movie.c11
-rw-r--r--source/blender/imbuf/intern/dds/dds_api.h2
-rw-r--r--source/blender/imbuf/intern/oiio/openimageio_api.h2
-rw-r--r--source/blender/imbuf/intern/openexr/openexr_api.h2
-rw-r--r--source/blender/imbuf/intern/radiance_hdr.c31
-rw-r--r--source/blender/io/alembic/intern/abc_reader_object.cc25
-rw-r--r--source/blender/io/gpencil/intern/gpencil_io_base.cc5
-rw-r--r--source/blender/io/gpencil/intern/gpencil_io_base.hh3
-rw-r--r--source/blender/io/gpencil/intern/gpencil_io_import_svg.cc2
-rw-r--r--source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh2
-rw-r--r--source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc6
-rw-r--r--source/blender/io/wavefront_obj/exporter/obj_export_mtl.hh2
-rw-r--r--source/blender/io/wavefront_obj/exporter/obj_export_nurbs.cc2
-rw-r--r--source/blender/io/wavefront_obj/tests/obj_exporter_tests.cc12
-rw-r--r--source/blender/makesdna/DNA_defaults.h4
-rw-r--r--source/blender/makesdna/DNA_modifier_types.h1
-rw-r--r--source/blender/makesdna/DNA_movieclip_defaults.h28
-rw-r--r--source/blender/makesdna/DNA_node_types.h1
-rw-r--r--source/blender/makesdna/DNA_space_defaults.h67
-rw-r--r--source/blender/makesdna/intern/CMakeLists.txt1
-rw-r--r--source/blender/makesdna/intern/dna_defaults.c14
-rw-r--r--source/blender/makesrna/RNA_access.h3
-rw-r--r--source/blender/makesrna/intern/CMakeLists.txt3
-rw-r--r--source/blender/makesrna/intern/rna_internal.h2
-rw-r--r--source/blender/makesrna/intern/rna_internal_types.h2
-rw-r--r--source/blender/makesrna/intern/rna_mask.c3
-rw-r--r--source/blender/makesrna/intern/rna_modifier.c7
-rw-r--r--source/blender/makesrna/intern/rna_nodetree.c7
-rw-r--r--source/blender/makesrna/intern/rna_tracking.c3
-rw-r--r--source/blender/modifiers/intern/MOD_mesh_to_volume.cc4
-rw-r--r--source/blender/modifiers/intern/MOD_nodes.cc2
-rw-r--r--source/blender/nodes/CMakeLists.txt3
-rw-r--r--source/blender/nodes/NOD_composite.h1
-rw-r--r--source/blender/nodes/NOD_math_functions.hh75
-rw-r--r--source/blender/nodes/NOD_socket_declarations.hh2
-rw-r--r--source/blender/nodes/NOD_static_types.h3
-rw-r--r--source/blender/nodes/composite/CMakeLists.txt4
-rw-r--r--source/blender/nodes/composite/node_composite_tree.cc17
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_curves.cc2
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_image.cc28
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_movieclip.cc3
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_scene_time.cc39
-rw-r--r--source/blender/nodes/function/node_function_util.hh2
-rw-r--r--source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc8
-rw-r--r--source/blender/nodes/function/nodes/node_fn_compare.cc24
-rw-r--r--source/blender/nodes/geometry/node_geometry_util.hh4
-rw-r--r--source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_align_rotation_to_vector.cc8
-rw-r--r--source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_proximity.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_transfer.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_curve_to_points.cc4
-rw-r--r--source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_point_distribute.cc4
-rw-r--r--source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_points_to_volume.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_raycast.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc21
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_curve_primitive_circle.cc18
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_curve_primitive_line.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_curve_primitive_quadratic_bezier.cc6
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc4
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc4
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_image_texture.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cube.cc6
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc4
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_points_to_volume.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_proximity.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_raycast.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_transfer_attribute.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_transform.cc4
-rw-r--r--source/blender/nodes/intern/node_socket.cc2
-rw-r--r--source/blender/nodes/shader/node_shader_util.hh2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_map_range.cc10
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_brick.cc3
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_gradient.cc4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_noise.cc4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_voronoi.cc36
-rw-r--r--source/blender/python/generic/py_capi_utils.h12
-rw-r--r--source/blender/render/RE_bake.h12
-rw-r--r--source/blender/sequencer/intern/effects.c4
-rw-r--r--source/blender/sequencer/intern/render.c5
-rw-r--r--source/blender/windowmanager/WM_api.h2
-rw-r--r--source/blender/windowmanager/intern/wm_files.c3
-rw-r--r--source/blender/windowmanager/intern/wm_window.c2
239 files changed, 3557 insertions, 19217 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5c5b5eb317e..88c71899f8e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -559,12 +559,14 @@ if(WIN32)
set(CPACK_INSTALL_PREFIX ${CMAKE_GENERIC_PROGRAM_FILES}/${})
endif()
-# Compiler toolchain
-if(CMAKE_COMPILER_IS_GNUCC)
- option(WITH_LINKER_GOLD "Use ld.gold linker which is usually faster than ld.bfd" ON)
- mark_as_advanced(WITH_LINKER_GOLD)
- option(WITH_LINKER_LLD "Use ld.lld linker which is usually faster than ld.gold" OFF)
- mark_as_advanced(WITH_LINKER_LLD)
+# Compiler tool-chain.
+if(UNIX AND NOT APPLE)
+ if(CMAKE_COMPILER_IS_GNUCC)
+ option(WITH_LINKER_GOLD "Use ld.gold linker which is usually faster than ld.bfd" ON)
+ mark_as_advanced(WITH_LINKER_GOLD)
+ option(WITH_LINKER_LLD "Use ld.lld linker which is usually faster than ld.gold" OFF)
+ mark_as_advanced(WITH_LINKER_LLD)
+ endif()
endif()
option(WITH_COMPILER_ASAN "Build and link against address sanitizer (only for Debug & RelWithDebInfo targets)." OFF)
diff --git a/build_files/build_environment/cmake/gmp.cmake b/build_files/build_environment/cmake/gmp.cmake
index 6ca81678a32..dbcce12d24b 100644
--- a/build_files/build_environment/cmake/gmp.cmake
+++ b/build_files/build_environment/cmake/gmp.cmake
@@ -38,13 +38,6 @@ elseif(UNIX AND NOT APPLE)
)
endif()
-if(BLENDER_PLATFORM_ARM)
- set(GMP_OPTIONS
- ${GMP_OPTIONS}
- --disable-assembly
- )
-endif()
-
ExternalProject_Add(external_gmp
URL file://${PACKAGE_DIR}/${GMP_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake
index f2c245dc380..c758dbd265e 100644
--- a/build_files/build_environment/cmake/versions.cmake
+++ b/build_files/build_environment/cmake/versions.cmake
@@ -474,9 +474,9 @@ set(ISPC_HASH 2e3abedbc0ea9aaec17d6562c632454d)
set(ISPC_HASH_TYPE MD5)
set(ISPC_FILE ispc-${ISPC_VERSION}.tar.gz)
-set(GMP_VERSION 6.2.0)
+set(GMP_VERSION 6.2.1)
set(GMP_URI https://gmplib.org/download/gmp/gmp-${GMP_VERSION}.tar.xz)
-set(GMP_HASH a325e3f09e6d91e62101e59f9bda3ec1)
+set(GMP_HASH 0b82665c4a92fd2ade7440c13fcaa42b)
set(GMP_HASH_TYPE MD5)
set(GMP_FILE gmp-${GMP_VERSION}.tar.xz)
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index 34c2c9a684d..25a8b66af51 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -1292,29 +1292,6 @@ macro(openmp_delayload
endif()
endmacro()
-macro(blender_precompile_headers target cpp header)
- if(MSVC)
- # get the name for the pch output file
- get_filename_component(pchbase ${cpp} NAME_WE)
- set(pchfinal "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${pchbase}.pch")
-
- # mark the cpp as the one outputting the pch
- set_property(SOURCE ${cpp} APPEND PROPERTY OBJECT_OUTPUTS "${pchfinal}")
-
- # get all sources for the target
- get_target_property(sources ${target} SOURCES)
-
- # make all sources depend on the pch to enforce the build order
- foreach(src ${sources})
- set_property(SOURCE ${src} APPEND PROPERTY OBJECT_DEPENDS "${pchfinal}")
- endforeach()
-
- target_sources(${target} PRIVATE ${cpp} ${header})
- set_target_properties(${target} PROPERTIES COMPILE_FLAGS "/Yu${header} /Fp${pchfinal} /FI${header}")
- set_source_files_properties(${cpp} PROPERTIES COMPILE_FLAGS "/Yc${header} /Fp${pchfinal}")
- endif()
-endmacro()
-
macro(set_and_warn_dependency
_dependency _setting _val)
# when $_dependency is disabled, forces $_setting = $_val
diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake
index 2f1a622c63d..0aaec3083a3 100644
--- a/build_files/cmake/platform/platform_unix.cmake
+++ b/build_files/cmake/platform/platform_unix.cmake
@@ -18,7 +18,7 @@
# All rights reserved.
# ***** END GPL LICENSE BLOCK *****
-# Libraries configuration for any *nix system including Linux and Unix.
+# Libraries configuration for any *nix system including Linux and Unix (excluding APPLE).
# Detect precompiled library directory
if(NOT DEFINED LIBDIR)
diff --git a/extern/hipew/src/hipew.c b/extern/hipew/src/hipew.c
index 010c361fa46..ecf952e266f 100644
--- a/extern/hipew/src/hipew.c
+++ b/extern/hipew/src/hipew.c
@@ -257,7 +257,7 @@ static int hipewHipInit(void) {
#endif
static int initialized = 0;
static int result = 0;
- int error, driver_version;
+ int error;
if (initialized) {
return result;
@@ -565,8 +565,6 @@ int hipewCompilerVersion(void) {
const char *path = hipewCompilerPath();
const char *marker = "Hip compilation tools, release ";
FILE *pipe;
- int major, minor;
- char *versionstr;
char buf[128];
char output[65536] = "\0";
char command[65536] = "\0";
diff --git a/intern/ghost/GHOST_Types.h b/intern/ghost/GHOST_Types.h
index ce0185bc7d0..7fe9300ec3f 100644
--- a/intern/ghost/GHOST_Types.h
+++ b/intern/ghost/GHOST_Types.h
@@ -496,8 +496,6 @@ typedef struct {
int target_start;
/** Represents the position of the end of the selection */
int target_end;
- /** custom temporal data */
- GHOST_TUserDataPtr tmp;
} GHOST_TEventImeData;
typedef struct {
diff --git a/release/datafiles/blender_icons.svg b/release/datafiles/blender_icons.svg
index 63e57a22b9d..6de808a9386 100644
--- a/release/datafiles/blender_icons.svg
+++ b/release/datafiles/blender_icons.svg
@@ -16,7 +16,7 @@
sodipodi:docname="blender_icons.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
style="display:inline;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\ICONS - no backdrop.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<metadata
@@ -7170,70 +7170,70 @@
id="g10975"
transform="translate(-378.00707,-293.99994)"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
id="g10009"
transform="translate(5.3904633e-4,-20.999933)"
style="display:inline;opacity:1;fill:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
transform="translate(-380,231)"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g12153"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
transform="translate(-336.00001,210.00001)"
id="g12215"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
style="display:inline;fill:#ffffff;enable-background:new"
id="g12492"
transform="translate(20.999999)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
id="g12457"
transform="matrix(0.69230791,0,0,0.69230793,-403.07713,196.14887)"
style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.44444394;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
style="display:inline;fill:#ffffff;enable-background:new"
id="g12921"
transform="translate(21.999999,-3)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
style="display:inline;opacity:0.41300001;fill:#ffffff;enable-background:new"
id="g5202-0"
transform="translate(496.99495,-311.99288)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
style="display:inline;fill:#ffffff;enable-background:new"
id="g13534"
transform="translate(-9.5367432e-7,21)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g13838"
transform="rotate(90,160.07935,395.5873)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -7245,7 +7245,7 @@
style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new"
id="g6922"
transform="translate(-378.0172,105)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<circle
@@ -7284,7 +7284,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g13212"
transform="rotate(-180,454.00583,490.49795)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
@@ -7298,7 +7298,7 @@
<path
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="circle21483"
style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"
r="4"
@@ -7316,7 +7316,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(71.999999)"
id="g22120" />
<path
@@ -7325,7 +7325,7 @@
r="4.4703369"
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
id="path24502"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
d=""
@@ -7333,7 +7333,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.15384436;enable-background:new"
id="g22419"
transform="matrix(-0.866668,0,0,0.866668,728.467,163.39943)" />
@@ -7349,7 +7349,7 @@
style="display:inline;fill:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="g22604"
transform="translate(420,147)">
<g
@@ -7435,7 +7435,7 @@
id="g17481"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
transform="translate(-332.00634,585.99911)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -7468,7 +7468,7 @@
transform="translate(41.999988,1.0000045)"
id="g10697"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -7490,7 +7490,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g10711"
transform="translate(598,-637)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -7519,7 +7519,7 @@
transform="translate(-252,-252)"
id="g10731"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -7542,7 +7542,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g15743"
transform="translate(221,4.4999696e-6)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -7555,7 +7555,7 @@
transform="translate(-84.000002,1.45e-5)"
id="g10880"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -7612,7 +7612,7 @@
transform="translate(-462.00711,-314.99994)"
id="g10872"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -7670,7 +7670,7 @@
transform="matrix(0,1,1,0,37.999948,363)"
id="g11084"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -7683,7 +7683,7 @@
<g
transform="translate(-1.8536743e-6,4.4999696e-6)"
id="g13852"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
style="display:inline;fill:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new">
@@ -7701,7 +7701,7 @@
transform="translate(62.999978,21.041695)"
id="g11141"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -7759,7 +7759,7 @@
id="g17491"
transform="matrix(0.875,0,0,0.875,264.125,159.75)"
style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.14285719;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<rect
@@ -7804,7 +7804,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(-42.000002,21.000005)"
id="g4035-9"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new">
@@ -7822,7 +7822,7 @@
transform="translate(-1.8536743e-6,4.4999696e-6)"
style="display:inline;fill:#ffffff;enable-background:new"
id="g12132"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -7847,7 +7847,7 @@
id="g7089-6"
style="display:inline;opacity:1;fill:#ffffff;stroke:#ffffff;stroke-width:1.33333337;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
transform="matrix(-0.75,0,0,0.75,348.75712,418.75712)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -7870,7 +7870,7 @@
transform="matrix(-0.75,0,0,0.75,369.25,419.25)"
style="display:inline;opacity:1;fill:#ffffff;stroke:#ffffff;stroke-width:1.33333325;enable-background:new"
id="g10315-7"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -7887,7 +7887,7 @@
id="g10247-8"
style="display:inline;opacity:1;fill:#ffffff;stroke:#ffffff;stroke-width:1.33333337;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
transform="matrix(-0.53033009,-0.53033009,-0.53033009,0.53033009,454.86353,636.75914)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -7904,7 +7904,7 @@
transform="translate(-1.8536743e-6,4.4999696e-6)"
style="display:inline;fill:#ffffff;enable-background:new"
id="g12144"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -7929,7 +7929,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g5506-8"
transform="translate(-44.000002,63.000005)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -7952,7 +7952,7 @@
transform="matrix(-0.53033009,-0.53033009,-0.53033009,0.53033009,706.86353,657.75914)"
style="display:inline;opacity:1;fill:#ffffff;stroke:#ffffff;stroke-width:1.33333337;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
id="g10178-9"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -7983,7 +7983,7 @@
style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.15384436;enable-background:new"
id="g12595"
transform="matrix(0.866668,0,0,0.866668,-177.46699,184.39943)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -8001,7 +8001,7 @@
id="g6666-5"
transform="translate(-63.000002,42.000005)"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8031,7 +8031,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g6750-7"
transform="translate(-314.99995,-567)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<rect
@@ -8058,7 +8058,7 @@
transform="translate(-231.00712,-588.00007)"
id="g23192-6"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -8076,7 +8076,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g12563-2"
transform="translate(-84.000002,4.4999696e-6)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8105,7 +8105,7 @@
transform="translate(-1.8536743e-6,4.4999696e-6)"
style="display:inline;fill:#ffffff;enable-background:new"
id="g10061"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -8162,7 +8162,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g12105"
transform="translate(-147.00001,-566.99994)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<rect
@@ -8187,7 +8187,7 @@
transform="translate(-1.8536743e-6,4.4999696e-6)"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g12135"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8225,7 +8225,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
transform="translate(-420.00718,439.99283)"
id="g7406-1-2"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8244,7 +8244,7 @@
id="g6733"
transform="translate(-42.000002,503.9)"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<rect
@@ -8326,7 +8326,7 @@
id="g12536"
transform="matrix(0,1,1,0,270,-183)"
style="display:inline;opacity:1;fill:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8395,7 +8395,7 @@
height="16"
x="26"
y="136"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
@@ -8433,7 +8433,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g12254"
transform="translate(-21.000002,-20.999995)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8467,7 +8467,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g12207"
transform="translate(20.999998,4.4999696e-6)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8492,7 +8492,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g12222"
transform="rotate(-180,422.50583,500.99795)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -8509,7 +8509,7 @@
<g
transform="translate(-1.8536743e-6,4.4999696e-6)"
id="g13413"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
style="display:inline;fill:#ffffff;enable-background:new">
@@ -8524,7 +8524,7 @@
id="g12575"
transform="matrix(0.8666665,0,0,0.8666665,-253.07368,16.407198)"
style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.15384638;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8540,7 +8540,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="g12901"
transform="matrix(-0.79928788,0,0,0.79928788,828.43189,282.2677)"
style="display:inline;opacity:0.7;fill:#ffffff;stroke-width:1.25111365;enable-background:new">
@@ -8554,7 +8554,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.25111365;enable-background:new"
transform="matrix(-0.79928788,0,0,0.79928788,833.43189,275.2677)"
id="g12909">
@@ -8570,7 +8570,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g12259"
transform="matrix(0,-1,-1,0,313,-85.999995)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -8594,7 +8594,7 @@
<g
style="display:inline;fill:#ffffff;enable-background:new"
id="g12585"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
transform="matrix(-1,0,0,1,782,4.4999696e-6)">
@@ -8620,7 +8620,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g12687"
transform="translate(-1.8536743e-6,42.000005)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8634,7 +8634,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g12682"
transform="translate(-1.8536743e-6,42.000005)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8648,7 +8648,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g12674"
transform="translate(-1.8536743e-6,63.000005)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8662,7 +8662,7 @@
id="g12707"
style="display:inline;opacity:0.98999999;fill:#ffffff;stroke-width:1.07692313;enable-background:new"
transform="matrix(0.92857149,0,0,0.92857137,22.930148,44.290705)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8676,7 +8676,7 @@
transform="translate(-210.00712,-588.00007)"
id="g12466"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -8715,7 +8715,7 @@
transform="rotate(-180,670.50713,476.50011)"
style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new"
id="g9316-9"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -8747,7 +8747,7 @@
transform="translate(-1022,-287.00021)"
style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new"
id="g9304-8"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -8775,7 +8775,7 @@
transform="translate(-1021,-287.00021)"
style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new"
id="g9296-0"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -8817,14 +8817,14 @@
height="16"
x="110"
y="430"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
style="display:inline;fill:#ffffff;enable-background:new"
id="g12761"
transform="translate(72.999998)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8838,7 +8838,7 @@
transform="translate(-1.8536743e-6,4.4999696e-6)"
style="display:inline;fill:#ffffff;enable-background:new"
id="g12793"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8856,7 +8856,7 @@
id="g12836"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
transform="translate(-123,458.99979)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8875,7 +8875,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g12981"
transform="translate(-1.8536743e-6,-20.999995)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -8898,7 +8898,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g7347"
transform="translate(921.00001,-553)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<rect
@@ -8939,7 +8939,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
transform="translate(919,-532)"
id="g6686"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<rect
@@ -8979,14 +8979,14 @@
height="16"
x="320"
y="178"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
style="display:inline;fill:#ffffff;stroke-width:1.03551209;enable-background:new"
id="g10170-0"
transform="matrix(0.93036376,0,0,1.0023904,257.63778,150.90833)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -9002,7 +9002,7 @@
width="16"
id="rect4967"
style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<path
@@ -9029,7 +9029,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g5270-3"
transform="translate(497.99495,-311.99288)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -9064,7 +9064,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g7388-6"
transform="translate(731,-238)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<rect
@@ -9101,7 +9101,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g14020"
transform="translate(153.00001,38.000005)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -9131,7 +9131,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g12310-0"
transform="translate(62.999998,210)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -9160,7 +9160,7 @@
transform="translate(-1.8536743e-6,4.4999696e-6)"
style="display:inline;fill:#ffffff;enable-background:new"
id="g13176"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -9175,7 +9175,7 @@
transform="translate(-664,-513.00021)"
style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new"
id="g8745-3"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -9189,7 +9189,7 @@
transform="translate(-801.00006,344.99979)"
id="g13204"
style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -9213,14 +9213,14 @@
style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new"
id="g10431-7"
transform="matrix(1,0,0,-1,52.999998,288.99725)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
transform="translate(62.999998,189)"
id="g13463"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -9234,7 +9234,7 @@
transform="translate(-274.03132,440.00025)"
style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new"
id="g13513"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -9248,7 +9248,7 @@
transform="translate(-1.8536743e-6,4.4999696e-6)"
id="g12940-5"
style="display:inline;opacity:1;fill:#ffffff;stroke:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -9262,7 +9262,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g10027-7"
transform="translate(109,-110)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -9287,7 +9287,7 @@
transform="translate(365,4.4999696e-6)"
id="g13349"
style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -9318,7 +9318,7 @@
d="m 160.5,431 a 1.5,1.5 0 0 0 -1.5,1.5 1.5,1.5 0 0 0 0.0879,0.5 h -4.56836 a 1.50015,1.50015 0 1 0 0,3 H 158 v 1.94922 c -1.31983,1.3363 -2.47353,2.76999 -2.9707,5.25586 a 1.50015,1.50015 0 1 0 2.9414,0.58984 c 0.37009,-1.85045 0.99513,-2.60285 2.0293,-3.6289 1.03417,1.02605 1.65921,1.77845 2.0293,3.6289 a 1.50015,1.50015 0 1 0 2.9414,-0.58984 c -0.49717,-2.48587 -1.65087,-3.91956 -2.9707,-5.25586 V 436 h 3.48047 a 1.50015,1.50015 0 1 0 0,-3 h -2.53711 c -0.0387,0.18925 -0.094,0.37697 -0.17774,0.55664 C 162.35553,434.4361 161.47038,435 160.5,435 a 0.50005,0.50005 0 1 1 0,-1 1.5,1.5 0 0 0 0.41406,-0.0586 c 0.009,-0.002 0.0169,-0.005 0.0254,-0.008 a 1.5,1.5 0 0 0 0.35157,-0.16211 c 0.006,-0.004 0.0133,-0.006 0.0195,-0.01 a 1.5,1.5 0 0 0 0.004,-0.002 1.5,1.5 0 0 0 0.29102,-0.25 c 0.009,-0.0103 0.0202,-0.0187 0.0293,-0.0293 a 1.5,1.5 0 0 0 0.21484,-0.33008 c 0.003,-0.006 0.007,-0.01 0.01,-0.0156 0.002,-0.005 0.004,-0.0104 0.006,-0.0156 A 1.5,1.5 0 0 0 162,432.5 1.5,1.5 0 0 0 160.5,431 Z"
id="path13634"
inkscape:connector-curvature="0"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<path
@@ -9335,7 +9335,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
transform="rotate(-180,307.00525,417)"
id="g13597"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -9352,7 +9352,7 @@
height="16"
x="488.00128"
y="430.00018"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
@@ -9370,7 +9370,7 @@
style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.14285719;enable-background:new"
id="g13938"
transform="matrix(0.875,0,0,0.875,-254.625,-304.87495)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<rect
@@ -9385,7 +9385,7 @@
transform="translate(-1.8536743e-6,4.4999696e-6)"
style="display:inline;fill:#ffffff;enable-background:new"
id="g14058"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -9468,7 +9468,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="g14256"
transform="translate(-21.000002,4.4999696e-6)"
style="display:inline;opacity:0.4;fill:#ffffff;enable-background:new">
@@ -9498,7 +9498,7 @@
transform="matrix(-1,0,0,1,1290,302.99979)"
style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new"
id="g8530-0"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -9789,7 +9789,7 @@
transform="translate(0.99996615,4.4999696e-6)"
id="g13708"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -10339,7 +10339,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="g13337"
style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new"
transform="matrix(-1,0,0,1,1458,302.99979)">
@@ -10423,7 +10423,7 @@
id="g13022"
transform="translate(-42.00718,397.99283)"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -10473,7 +10473,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new"
id="g13304"
transform="translate(-84.000015,-126)">
@@ -10492,7 +10492,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="g13384"
transform="translate(-21.000002,-105)"
style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new">
@@ -10603,7 +10603,7 @@
style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new"
id="g13366"
transform="translate(760.99456,-488.99997)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -10708,7 +10708,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g13834"
transform="rotate(90,244,438.00001)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -10758,7 +10758,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g13609"
transform="translate(-187,-89.999995)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -10771,7 +10771,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="g10909"
style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new"
transform="matrix(-1,0,0,1,1290,262.99979)">
@@ -10983,7 +10983,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(188,-63)"
id="g20817"
style="fill:#ffffff" />
@@ -11006,7 +11006,7 @@
<g
id="g21026"
transform="translate(188,-63)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
style="fill:#ffffff">
@@ -11021,7 +11021,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(-84.000002,-62.999995)"
id="g21409">
<path
@@ -11036,7 +11036,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(-21.000001)"
id="g12839">
<path
@@ -11075,7 +11075,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(418)"
id="g19647" />
</g>
@@ -11088,7 +11088,7 @@
transform="translate(-1.8536743e-6,3.4999696e-6)"
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="g20495"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new">
<g
@@ -11110,7 +11110,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="g20538"
transform="rotate(-180,317.50525,417)">
<path
@@ -11170,7 +11170,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(422.00881,-131.00682)"
id="g22132">
<path
@@ -11365,7 +11365,7 @@
<path
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
sodipodi:nodetypes="ccccc"
id="path22236"
d="m 363.5,308.5 3,-3 h 6 l -3,3 z"
@@ -11541,7 +11541,7 @@
d="m 153,284 v 2 h 2 v -2 z m 2,2 v 2 h 2 v -2 z m 2,0 h 2 v -2 h -2 z m 2,0 v 2 h 2 v -2 z m 2,0 h 2 v -2 h -2 z m -6,8 v -2 h -2 v 2 z m 0,-2 h 2 v -2 h -2 z m 0,-2 v -2 h -2 v 2 z m 2,0 h 2 v -2 h -2 z m 2,0 v 2 h 2 v -2 z m 2,0 h 2 v -2 h -2 z m -2,2 h -2 v 2 h 2 z"
id="path24240"
inkscape:connector-curvature="0"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<path
@@ -11564,7 +11564,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="rotate(90,171,281.00001)"
id="g24322"
style="display:inline;fill:#ffffff;enable-background:new">
@@ -11965,7 +11965,7 @@
cx="-443"
cy="1608"
r="1.5"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
</g>
@@ -11984,7 +11984,7 @@
cx="359"
cy="-1613.0002"
r="1.5"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
transform="scale(-1)" />
@@ -12004,7 +12004,7 @@
cx="-406"
cy="-1613.0002"
r="1.5"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
transform="scale(1,-1)" />
@@ -12022,7 +12022,7 @@
<circle
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
r="1.5"
cy="1608"
cx="-443"
@@ -12043,7 +12043,7 @@
transform="scale(1,-1)"
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
r="1.5"
cy="-1613.0002"
cx="-406"
@@ -12214,7 +12214,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
transform="rotate(-180,349.00525,417)"
id="g22180"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -12300,7 +12300,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="matrix(0,-1,-1,0,558.00846,761.00467)"
id="g22540"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new">
@@ -12338,7 +12338,7 @@
style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new"
id="g22761"
transform="matrix(0,-1,-1,0,554.00846,765.00467)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -12502,7 +12502,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(-21.000002,42.000006)"
id="g12626"
style="display:inline;fill:#ffffff;enable-background:new">
@@ -12527,7 +12527,7 @@
transform="translate(-21.000002,4.4999696e-6)"
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new"
id="g12548">
<g
@@ -12555,7 +12555,7 @@
style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"
d="m 49,558 v 3 h 3 v -3 z m 3,3 v 3 h 3 v -3 z m 3,0 h 3 v -3 h -3 z m 3,0 v 3 h 3 v -3 z m 0,3 h -3 v 3 h 3 z m 0,3 v 3 h 3 v -3 z m -3,0 h -3 v 3 h 3 z m -3,0 v -3 h -3 v 3 z"
id="path10767"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<path
@@ -12591,7 +12591,7 @@
cx="132"
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="circle44389-4"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
transform="matrix(-0.248353,0.02816779,0.02830718,0.248422,140.45214,86.01031)" />
@@ -12635,7 +12635,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g13692-5-0"
transform="translate(316.0071,-315)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -12716,7 +12716,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="g12049-3-5"
transform="translate(126,64.00005)"
style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new">
@@ -12838,7 +12838,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="g15178-7"
style="display:inline;opacity:1;fill:#ffffff;stroke:#ffffff;stroke-width:1.33333337;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
transform="matrix(-0.53033009,-0.53033009,-0.53033009,0.53033009,580.8635,617.75914)">
@@ -12875,7 +12875,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(555.01703,519.07892)"
id="g12701-3-4"
style="display:inline;fill:#ffffff;enable-background:new" />
@@ -12992,7 +12992,7 @@
id="g15520"
transform="translate(231.99999,-397.99995)"
style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -13006,7 +13006,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.25111365;enable-background:new"
transform="matrix(-0.79928788,0,0,0.79928788,686.43544,-75.73586)"
id="g12909-3">
@@ -13043,7 +13043,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(-20,168)"
id="g15951-6"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new">
@@ -13111,7 +13111,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g8419-9"
transform="translate(1279.001,-241)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<rect
@@ -13151,7 +13151,7 @@
<g
style="display:inline;fill:#ffffff;enable-background:new"
id="g23051-0"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
transform="translate(210,20.999991)">
@@ -13166,7 +13166,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="g22966-4"
transform="translate(-504,167.99288)"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new">
@@ -13222,7 +13222,7 @@
transform="translate(147)"
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="g12973-3-2"
style="display:inline;fill:#ffffff;enable-background:new">
<path
@@ -13236,7 +13236,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g16957-2"
transform="rotate(90,380.00189,176.00657)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -13269,7 +13269,7 @@
transform="rotate(90,243.5,333.5)"
id="g12586"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -13293,7 +13293,7 @@
transform="translate(-21.00225)"
style="display:inline;fill:#ffffff;stroke:#ffffff;enable-background:new"
id="g13169-8-6"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -13358,7 +13358,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g12626-8"
transform="translate(726.00003,-499.00001)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -13392,7 +13392,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g15951-6-3"
transform="translate(746.99995,-478)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -13425,7 +13425,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="g7406-1-2-5"
transform="translate(347.99997,-290.00356)"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new">
@@ -13501,7 +13501,7 @@
id="g8734"
transform="translate(231.99999,-418.99995)"
style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -13584,7 +13584,7 @@
transform="translate(-1.8554137e-6,5.18e-5)"
style="display:inline;fill:#ffffff;enable-background:new"
id="g13451"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -13607,7 +13607,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g13993"
transform="translate(-21.000002,-20.999948)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -13647,7 +13647,7 @@
transform="matrix(1,0,0,-1,-167.9929,1043.9931)"
id="g17666-2"
style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -13718,7 +13718,7 @@
transform="matrix(-1,0,0,1,1689,365.99979)"
style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new"
id="g8530-0-8"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -13756,7 +13756,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="matrix(0.866668,0,0,0.866668,-9.46699,121.39943)"
id="g5914"
style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.15384436;enable-background:new">
@@ -13778,7 +13778,7 @@
<path
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="path5916"
d="m 49,558 v 3 h 3 v -3 z m 3,3 v 3 h 3 v -3 z m 3,0 h 3 v -3 h -3 z m 3,0 v 3 h 3 v -3 z m 0,3 h -3 v 3 h 3 z m 0,3 v 3 h 3 v -3 z m -3,0 h -3 v 3 h 3 z m -3,0 v -3 h -3 v 3 z"
style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"
@@ -13829,7 +13829,7 @@
transform="matrix(-1,0,0,1,1290,764.99979)"
style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new"
id="g8530-0-8-3"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -13855,7 +13855,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g6348"
transform="translate(41.999953,147)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -13878,7 +13878,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g6359"
transform="rotate(90,306.5,333.5)">
@@ -13923,7 +13923,7 @@
id="g8734-0"
transform="translate(-104.00001,-19.99995)"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -14133,7 +14133,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="matrix(0.93036376,0,0,1.0023904,215.63778,150.90833)"
id="g19530"
style="display:inline;fill:#ffffff;stroke-width:1.03551209;enable-background:new">
@@ -14170,7 +14170,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g12998"
transform="translate(1.1628419e-6,-21)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -14198,7 +14198,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g12986"
transform="translate(1.1628419e-6,-21)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -14221,7 +14221,7 @@
transform="translate(1.1628419e-6)"
style="display:inline;fill:#ffffff;enable-background:new"
id="g13014"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -14253,7 +14253,7 @@
style="fill:#ffffff"
id="g12942"
transform="translate(-20,18)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -14315,7 +14315,7 @@
transform="matrix(0.86666667,0,0,0.86666667,39.533341,-302.8)"
id="g12476-7-0"
style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.15384614;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -14339,7 +14339,7 @@
style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.15384614;enable-background:new"
id="g12520-1-5"
transform="matrix(0.86666667,0,0,0.86666667,60.533341,-302.8)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -14357,7 +14357,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g5294-1-7-1"
transform="translate(41.999998,-357)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -14394,7 +14394,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="g20623"
transform="translate(-740.00001,-750)"
style="display:inline;fill:#ffffff;enable-background:new">
@@ -14419,7 +14419,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(760.99456,-488.99997)"
id="g11317-7"
style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new">
@@ -14510,7 +14510,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="matrix(0,1,1,0,-94.00249,680.99203)"
id="g20878-5"
style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new">
@@ -14576,7 +14576,7 @@
transform="translate(315,-0.999996)"
id="g13630-2"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -14664,7 +14664,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="matrix(-1,0,0,1,970.03864,-190)"
id="g19901"
style="display:inline;fill:#ffffff;enable-background:new">
@@ -15061,7 +15061,7 @@
d="m 240.51382,409.98613 a 0.50005,0.50005 0 0 0 -0.3594,0.1524 l -3,3 a 0.50005,0.50005 0 1 0 0.707,0.707 l 3,-3 a 0.50005,0.50005 0 0 0 -0.3476,-0.8594 z m 5,0 a 0.50005,0.50005 0 0 0 -0.3594,0.1524 l -8,8 a 0.50005,0.50005 0 1 0 0.707,0.707 l 8,-8 a 0.50005,0.50005 0 0 0 -0.3476,-0.8594 z m 5,0 a 0.50005,0.50005 0 0 0 -0.3594,0.1524 l -4.416,4.416 c 0.2729,0.1952 0.5118,0.4341 0.707,0.707 l 4.416,-4.416 a 0.50005,0.50005 0 0 0 -0.3476,-0.8594 z m 0,5 a 0.50005,0.50005 0 0 0 -0.3594,0.1524 l -8,8 a 0.50005,0.50005 0 1 0 0.707,0.707 l 8,-8 a 0.50005,0.50005 0 0 0 -0.3476,-0.8594 z m -6.5059,1.0059 a 1.0000001,1 0 0 0 -1,1 1.0000001,1 0 0 0 1,1 1.0000001,1 0 0 0 1,-1 1.0000001,1 0 0 0 -1,-1 z m -2.4375,2.7305 -4.416,4.416 a 0.50005,0.50005 0 1 0 0.707,0.707 l 4.416,-4.416 c -0.2729,-0.1952 -0.5118,-0.4341 -0.707,-0.707 z m 8.9434,1.2636 a 0.50005,0.50005 0 0 0 -0.3594,0.1524 l -3,3 a 0.50005,0.50005 0 1 0 0.707,0.707 l 3,-3 a 0.50005,0.50005 0 0 0 -0.3476,-0.8594 z"
id="path21556-6"
inkscape:connector-curvature="0"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\path21556-6.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="115"
inkscape:export-ydpi="115" />
<g
@@ -15172,7 +15172,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(0.00711,-0.00712)"
id="g26453-0">
<path
@@ -15191,7 +15191,7 @@
<g
style="display:inline;fill:#ffffff;enable-background:new"
id="g26527-9"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
transform="matrix(0,-1,-1,0,220.01421,219.98576)">
@@ -15216,7 +15216,7 @@
transform="translate(-252.00673,-707.99218)"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g26501-5"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -15274,7 +15274,7 @@
transform="translate(-189.96252,-708.00986)"
id="g26513-4"
style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -15294,7 +15294,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
id="g12992"
transform="translate(2.6297176e-6,-20.999997)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -15444,7 +15444,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
id="g13935-4"
transform="translate(83.999996,42)">
<path
@@ -15536,7 +15536,7 @@
transform="translate(876,-1690)"
style="display:inline;fill:#ffffff;enable-background:new"
id="g24686-1"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Dysk Google\PROJEKTY BIEŻĄCE - Andrzej\BLENDER 2.8 ICONS redesign\MOCKUPS\gizmo icon_1.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -15608,7 +15608,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(-105,-20.999997)"
id="g24881"
style="display:inline;fill:#ffffff;enable-background:new">
@@ -16003,7 +16003,7 @@
transform="matrix(-0.53033009,-0.53033009,-0.53033009,0.53033009,559.86353,322.75914)"
style="display:inline;opacity:1;fill:#5fd38d;stroke:#ffffff;stroke-width:1.33333337;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
id="g10335"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -16090,7 +16090,7 @@
id="g10367"
transform="translate(115.99999,-73.00002)"
style="display:inline;opacity:0.6;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -16524,7 +16524,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
style="display:inline;opacity:1;enable-background:new"
id="g13408-5"
transform="translate(-357.00711,41.992878)">
@@ -16605,7 +16605,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(-230.99288,-230.99288)"
id="g27963"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new">
@@ -16674,7 +16674,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g28075-6"
transform="rotate(-180,339.00356,333)">
@@ -16699,7 +16699,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
style="display:inline;opacity:1;stroke:#ffffff;enable-background:new"
id="g28228"
transform="translate(-0.99999996)">
@@ -16733,7 +16733,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(-1.031325,-21.999745)"
style="display:inline;opacity:1;enable-background:new"
id="g8671-6">
@@ -16831,7 +16831,7 @@
id="g29100"
transform="translate(294.99999,-377.99995)"
style="display:inline;opacity:1;stroke:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -16851,7 +16851,7 @@
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
+ inkscape:export-filename="blender_icons.png"
id="path29102"
d="m 460,120.50004 0.5,2e-5 v 9 h -9 L 451.49999,129"
style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
@@ -16861,7 +16861,7 @@
style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 458,118.50004 0.5,2e-5 v 9 h -9 L 449.49999,127"
id="path29110"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
@@ -16937,7 +16937,7 @@
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="translate(47.999998,90)"
id="g28884"
style="display:inline;opacity:1;enable-background:new">
@@ -17103,7 +17103,7 @@
style="display:inline;opacity:1;fill:#ffffff;enable-background:new"
id="g7388-6-3"
transform="translate(457.49535,-616.1486)"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<rect
@@ -17357,7 +17357,7 @@
transform="matrix(0.6740384,0,0,0.6740384,192.80592,-339.68227)"
style="display:inline;opacity:0.99;fill:#ffffff;stroke-width:1.07692;enable-background:new"
id="g8599-6-7"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -17382,7 +17382,7 @@
id="g15520-6-5"
transform="translate(231.97182,-397.99995)"
style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -17414,7 +17414,7 @@
transform="matrix(0.6740384,0,0,0.6740384,192.80592,-339.68227)"
style="display:inline;opacity:0.99;fill:#ffffff;stroke-width:1.07692;enable-background:new"
id="g8599-6-7-2"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<path
@@ -17435,7 +17435,7 @@
transform="translate(19.000003)"
id="g28228-3-3"
style="display:inline;opacity:0.6;stroke:#ffffff;enable-background:new"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
@@ -17461,7 +17461,7 @@
style="display:inline;fill:#ffffff;enable-background:new"
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
- inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-filename="blender_icons.png"
transform="matrix(0.65914281,0,0,0.65914281,248.47102,-214.89549)"
id="g12839-3-5">
<path
diff --git a/release/datafiles/prvicons.svg b/release/datafiles/prvicons.svg
index 371ee040186..baca4597d98 100644
--- a/release/datafiles/prvicons.svg
+++ b/release/datafiles/prvicons.svg
@@ -144,16513 +144,6 @@
</sodipodi:namedview>
<defs
id="defs4">
- <linearGradient
- id="linearGradient30958">
- <stop
- style="stop-color:#fff9cf;stop-opacity:1;"
- offset="0"
- id="stop30960" />
- <stop
- style="stop-color:#c7bc52;stop-opacity:1;"
- offset="1"
- id="stop30962" />
- </linearGradient>
- <linearGradient
- id="linearGradient29312"
- inkscape:collect="always">
- <stop
- id="stop29314"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop29316"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient29304">
- <stop
- id="stop29306"
- offset="0"
- style="stop-color:#11233f;stop-opacity:1;" />
- <stop
- id="stop29308"
- offset="1"
- style="stop-color:#162d50;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient27896"
- inkscape:collect="always">
- <stop
- id="stop27898"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop27900"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient27854"
- inkscape:collect="always">
- <stop
- id="stop27856"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop27858"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient24343">
- <stop
- style="stop-color:#184990;stop-opacity:1;"
- offset="0"
- id="stop24345" />
- <stop
- style="stop-color:#c1d5f3;stop-opacity:1;"
- offset="1"
- id="stop24347" />
- </linearGradient>
- <linearGradient
- id="linearGradient25417">
- <stop
- style="stop-color:#60553b;stop-opacity:1;"
- offset="0"
- id="stop25419" />
- <stop
- style="stop-color:#b0a17f;stop-opacity:1;"
- offset="1"
- id="stop25421" />
- </linearGradient>
- <linearGradient
- id="linearGradient25108">
- <stop
- style="stop-color:white;stop-opacity:1;"
- offset="0"
- id="stop25110" />
- <stop
- style="stop-color:#c6c6c6;stop-opacity:1;"
- offset="1"
- id="stop25112" />
- </linearGradient>
- <linearGradient
- id="linearGradient43807">
- <stop
- id="stop43809"
- offset="0"
- style="stop-color:#e31b1b;stop-opacity:1;" />
- <stop
- id="stop43811"
- offset="1"
- style="stop-color:#930000;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient38845"
- inkscape:collect="always">
- <stop
- id="stop38847"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop38849"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient38831">
- <stop
- id="stop38833"
- offset="0"
- style="stop-color:#182b42;stop-opacity:1;" />
- <stop
- style="stop-color:#598ac7;stop-opacity:1;"
- offset="0.38971797"
- id="stop38836" />
- <stop
- id="stop38838"
- offset="1"
- style="stop-color:#f1f1f1;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient38256">
- <stop
- style="stop-color:#e7e0c7;stop-opacity:1;"
- offset="0"
- id="stop38258" />
- <stop
- style="stop-color:#f1eddf;stop-opacity:0;"
- offset="1"
- id="stop38260" />
- </linearGradient>
- <linearGradient
- id="linearGradient71814">
- <stop
- id="stop71816"
- offset="0"
- style="stop-color:#6e0d00;stop-opacity:1;" />
- <stop
- id="stop71818"
- offset="1"
- style="stop-color:#6f2913;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient37667">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop37669" />
- <stop
- style="stop-color:black;stop-opacity:0"
- offset="1"
- id="stop37671" />
- </linearGradient>
- <linearGradient
- id="linearGradient39080">
- <stop
- id="stop39082"
- offset="0"
- style="stop-color:#1a2a3d;stop-opacity:1;" />
- <stop
- style="stop-color:#95b0d1;stop-opacity:1;"
- offset="0.5"
- id="stop39084" />
- <stop
- id="stop39086"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient40809">
- <stop
- id="stop40811"
- offset="0"
- style="stop-color:#0059d7;stop-opacity:1;" />
- <stop
- id="stop40813"
- offset="1"
- style="stop-color:#b7d4ff;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient40703">
- <stop
- id="stop40705"
- offset="0"
- style="stop-color:#143564;stop-opacity:1;" />
- <stop
- id="stop40707"
- offset="1"
- style="stop-color:#c1d7f8;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient37925">
- <stop
- style="stop-color:#e7cbab;stop-opacity:1;"
- offset="0"
- id="stop37927" />
- <stop
- style="stop-color:#af7333;stop-opacity:1;"
- offset="1"
- id="stop37929" />
- </linearGradient>
- <linearGradient
- id="linearGradient36273">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop36275" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="1"
- id="stop36277" />
- </linearGradient>
- <linearGradient
- id="linearGradient35411">
- <stop
- style="stop-color:#2b5385;stop-opacity:1;"
- offset="0"
- id="stop35414" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop35416" />
- </linearGradient>
- <linearGradient
- id="linearGradient31356">
- <stop
- style="stop-color:#1a1a1a;stop-opacity:1"
- offset="0"
- id="stop31358" />
- <stop
- style="stop-color:#1a1a1a;stop-opacity:0;"
- offset="1"
- id="stop31360" />
- </linearGradient>
- <radialGradient
- r="3.779551"
- fy="81.396774"
- fx="256.49512"
- cy="81.396774"
- cx="256.49512"
- gradientTransform="matrix(0.7228842,8.5733105e-8,-9.4831885e-8,0.7995973,71.917045,14.582004)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient28107"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="427.01648"
- x2="885.04938"
- y1="422.77902"
- x1="875.73486"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28105"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="429.23453"
- x2="881.01172"
- y1="422.09964"
- x1="873.09998"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28103"
- xlink:href="#linearGradient28887"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.20651"
- fx="76.180473"
- cy="500.20651"
- cx="76.180473"
- gradientTransform="matrix(1.6572588,1.2500456,-1.6473175,2.2058465,774.83033,-697.31982)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient28101"
- xlink:href="#linearGradient29149"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.66806"
- fx="75.217888"
- cy="500.66806"
- cx="75.217888"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient28099"
- xlink:href="#linearGradient29149"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient28887">
- <stop
- id="stop28889"
- offset="0"
- style="stop-color:#2158a7;stop-opacity:1;" />
- <stop
- id="stop28891"
- offset="1"
- style="stop-color:#2f73d5;stop-opacity:0.19607843;" />
- </linearGradient>
- <linearGradient
- y2="251.71078"
- x2="226.625"
- y1="238"
- x1="209"
- gradientUnits="userSpaceOnUse"
- id="linearGradient44421"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="251.71078"
- x2="226.625"
- y1="238"
- x1="209"
- gradientUnits="userSpaceOnUse"
- id="linearGradient44557"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient24168">
- <stop
- style="stop-color:#182437;stop-opacity:1;"
- offset="0"
- id="stop24170" />
- <stop
- style="stop-color:#2b4163;stop-opacity:0;"
- offset="1"
- id="stop24172" />
- </linearGradient>
- <linearGradient
- id="linearGradient24144">
- <stop
- style="stop-color:#3d361a;stop-opacity:1;"
- offset="0"
- id="stop24146" />
- <stop
- id="stop24148"
- offset="0.17958513"
- style="stop-color:#d1c595;stop-opacity:1;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop24150" />
- </linearGradient>
- <linearGradient
- id="linearGradient24101">
- <stop
- id="stop24103"
- offset="0"
- style="stop-color:#643400;stop-opacity:1;" />
- <stop
- style="stop-color:#ed983d;stop-opacity:1;"
- offset="0.22606115"
- id="stop24105" />
- <stop
- id="stop24107"
- offset="1"
- style="stop-color:#fff0d5;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient24081">
- <stop
- style="stop-color:#b45d00;stop-opacity:1;"
- offset="0"
- id="stop24083" />
- <stop
- id="stop24085"
- offset="0.3167825"
- style="stop-color:#ff982a;stop-opacity:1;" />
- <stop
- style="stop-color:#ffedd5;stop-opacity:1;"
- offset="1"
- id="stop24087" />
- </linearGradient>
- <linearGradient
- id="linearGradient23302">
- <stop
- style="stop-color:#b45d00;stop-opacity:1;"
- offset="0"
- id="stop23304" />
- <stop
- id="stop23306"
- offset="0.39332664"
- style="stop-color:#ff982a;stop-opacity:1;" />
- <stop
- style="stop-color:#ffedd5;stop-opacity:1;"
- offset="1"
- id="stop23308" />
- </linearGradient>
- <linearGradient
- id="linearGradient24727">
- <stop
- id="stop24729"
- offset="0"
- style="stop-color:#3d361a;stop-opacity:1;" />
- <stop
- style="stop-color:#d1c595;stop-opacity:1;"
- offset="0.77520341"
- id="stop24731" />
- <stop
- id="stop24733"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient24711">
- <stop
- id="stop24713"
- offset="0"
- style="stop-color:#3d361a;stop-opacity:1;" />
- <stop
- style="stop-color:#d1c595;stop-opacity:1;"
- offset="0.21609697"
- id="stop24715" />
- <stop
- id="stop24717"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient24695">
- <stop
- id="stop24697"
- offset="0"
- style="stop-color:#3d361a;stop-opacity:1;" />
- <stop
- style="stop-color:#d1c595;stop-opacity:1;"
- offset="0.60401857"
- id="stop24699" />
- <stop
- id="stop24701"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient24687">
- <stop
- id="stop24689"
- offset="0"
- style="stop-color:#3d361a;stop-opacity:1;" />
- <stop
- style="stop-color:#d1c595;stop-opacity:1;"
- offset="0.59630167"
- id="stop24691" />
- <stop
- id="stop24693"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient24679">
- <stop
- id="stop24681"
- offset="0"
- style="stop-color:#3d361a;stop-opacity:1;" />
- <stop
- style="stop-color:#d1c595;stop-opacity:1;"
- offset="0.45537567"
- id="stop24683" />
- <stop
- id="stop24685"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient24671">
- <stop
- id="stop24673"
- offset="0"
- style="stop-color:#3d361a;stop-opacity:1;" />
- <stop
- style="stop-color:#d1c595;stop-opacity:1;"
- offset="0.29527253"
- id="stop24675" />
- <stop
- id="stop24677"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient23705">
- <stop
- style="stop-color:#d4d2bf;stop-opacity:1;"
- offset="0"
- id="stop23707" />
- <stop
- style="stop-color:#857f5d;stop-opacity:1;"
- offset="1"
- id="stop23709" />
- </linearGradient>
- <linearGradient
- id="linearGradient23906">
- <stop
- style="stop-color:#ff921d;stop-opacity:1;"
- offset="0"
- id="stop23908" />
- <stop
- style="stop-color:#ffa751;stop-opacity:0;"
- offset="1"
- id="stop23910" />
- </linearGradient>
- <linearGradient
- id="linearGradient42459">
- <stop
- id="stop42461"
- offset="0"
- style="stop-color:#e7dfab;stop-opacity:1;" />
- <stop
- id="stop42463"
- offset="1"
- style="stop-color:#af9d33;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="-271.9375"
- x2="-281.4375"
- y1="-276.1875"
- x1="-287"
- gradientTransform="translate(744,397)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41723"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="244.96393"
- x2="170.20523"
- y1="259.71194"
- x1="171.42436"
- gradientTransform="matrix(0.695652,0,0,0.869703,342.06514,-90.66358)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41721"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="179.12285"
- x2="425"
- y1="179.12074"
- x1="426.12415"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24246"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="266.34406"
- x2="237.75459"
- y1="283.63254"
- x1="246.12868"
- gradientTransform="translate(186,-105)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24244"
- xlink:href="#linearGradient24143"
- inkscape:collect="always" />
- <linearGradient
- y2="-271.35284"
- x2="-282.59851"
- y1="-276.71042"
- x1="-287.56247"
- gradientTransform="translate(744,397)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24278"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="247.58694"
- x2="170.9689"
- y1="266.7905"
- x1="190.33647"
- gradientTransform="matrix(0.695652,0,0,0.869703,342.06514,-90.66358)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24276"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient24143">
- <stop
- style="stop-color:#3d361a;stop-opacity:1;"
- offset="0"
- id="stop24145" />
- <stop
- id="stop24669"
- offset="0.5"
- style="stop-color:#d1c595;stop-opacity:1;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop24147" />
- </linearGradient>
- <linearGradient
- y2="260.21841"
- x2="116.37123"
- y1="281.26645"
- x1="120.2969"
- gradientTransform="matrix(1.043478,0,0,0.956667,304.84783,-86.57833)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24238"
- xlink:href="#linearGradient24687"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient24642">
- <stop
- id="stop24644"
- offset="0"
- style="stop-color:#d0dbe8;stop-opacity:1;" />
- <stop
- id="stop24646"
- offset="1"
- style="stop-color:#6ca3e9;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient24632">
- <stop
- id="stop24634"
- offset="0"
- style="stop-color:#28394f;stop-opacity:1;" />
- <stop
- style="stop-color:#0d386a;stop-opacity:0.78431374;"
- offset="0.17637014"
- id="stop24636" />
- <stop
- style="stop-color:#18437d;stop-opacity:0.47058824;"
- offset="0.35274029"
- id="stop24638" />
- <stop
- id="stop24640"
- offset="1"
- style="stop-color:#154e94;stop-opacity:0;" />
- </linearGradient>
- <radialGradient
- r="6.6750002"
- fy="294.60239"
- fx="-0.10810681"
- cy="294.60239"
- cx="-0.10810681"
- gradientTransform="matrix(0.9934369,-0.1143813,0.1033636,0.8977446,-30.451879,30.134649)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient23167"
- xlink:href="#linearGradient22562"
- inkscape:collect="always" />
- <linearGradient
- y2="245"
- x2="24.25"
- y1="245"
- x1="22.75"
- gradientTransform="translate(-61)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23201"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="245"
- x2="24.5"
- y1="245"
- x1="22.75"
- gradientTransform="translate(-1)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23199"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="388"
- x2="272"
- y1="388"
- x1="257.75"
- gradientTransform="translate(-46.000005,-117)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24208"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="388"
- x2="279"
- y1="388"
- x1="258.52756"
- gradientTransform="translate(-54.000005,-120)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24206"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="388"
- x2="273"
- y1="388"
- x1="259.75"
- gradientTransform="translate(-48.983883,-126)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24204"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="388"
- x2="273"
- y1="388"
- x1="258"
- gradientTransform="translate(-52.983883,-129)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24202"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="126.57021"
- x2="139.86742"
- y1="110.87843"
- x1="126.37032"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23379"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="117.24104"
- x2="131.3092"
- y1="124.67203"
- x1="137.88235"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23377"
- xlink:href="#linearGradient15437"
- inkscape:collect="always" />
- <linearGradient
- y2="103.57072"
- x2="44.999863"
- y1="96.767769"
- x1="52.06274"
- gradientTransform="matrix(0.9995363,0,0,-1.0036971,220.01067,167.35026)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23375"
- xlink:href="#linearGradient13938"
- inkscape:collect="always" />
- <linearGradient
- y2="121.20407"
- x2="133.88583"
- y1="108.82882"
- x1="122.38876"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23373"
- xlink:href="#linearGradient14232"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient23974">
- <stop
- style="stop-color:#2561b7;stop-opacity:1;"
- offset="0"
- id="stop23976" />
- <stop
- style="stop-color:#f9fbff;stop-opacity:1"
- offset="1"
- id="stop23978" />
- </linearGradient>
- <linearGradient
- id="linearGradient40983">
- <stop
- id="stop40985"
- offset="0"
- style="stop-color:#6a9ae0;stop-opacity:1;" />
- <stop
- id="stop40987"
- offset="1"
- style="stop-color:#5189db;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="126.72997"
- x2="140.72693"
- y1="112.12571"
- x1="127.60629"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23280"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="119.54019"
- x2="132.46898"
- y1="110.86718"
- x1="125.01582"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23278"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="118.34238"
- x2="131.71249"
- y1="126.3454"
- x1="139.37782"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23276"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="117.10313"
- x2="130.10634"
- y1="132.15414"
- x1="144.8255"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23274"
- xlink:href="#linearGradient14418"
- inkscape:collect="always" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- fy="114.5684"
- fx="20.892099"
- r="5.256"
- cy="114.5684"
- cx="20.892099"
- id="aigrd2">
- <stop
- id="stop15566"
- style="stop-color:#F0F0F0"
- offset="0" />
- <stop
- id="stop15568"
- style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
- offset="1.0000000" />
- </radialGradient>
- <linearGradient
- id="linearGradient58334">
- <stop
- style="stop-color:#ffffff;stop-opacity:0.87628865;"
- offset="0.0000000"
- id="stop58336" />
- <stop
- style="stop-color:#fffffe;stop-opacity:0.0000000;"
- offset="1.0000000"
- id="stop58338" />
- </linearGradient>
- <linearGradient
- id="linearGradient8864">
- <stop
- style="stop-color:#b43214;stop-opacity:1;"
- offset="0"
- id="stop8866" />
- <stop
- style="stop-color:#e86830;stop-opacity:1;"
- offset="1"
- id="stop8868" />
- </linearGradient>
- <linearGradient
- id="linearGradient20324">
- <stop
- style="stop-color:#35241b;stop-opacity:1;"
- offset="0"
- id="stop20326" />
- <stop
- id="stop20328"
- offset="0.17637014"
- style="stop-color:#69390e;stop-opacity:0.8392157;" />
- <stop
- id="stop20330"
- offset="0.35274029"
- style="stop-color:#6c5b15;stop-opacity:0.67843139;" />
- <stop
- style="stop-color:#947b15;stop-opacity:0;"
- offset="1"
- id="stop20332" />
- </linearGradient>
- <linearGradient
- id="linearGradient37623">
- <stop
- style="stop-color:#e5e1ca;stop-opacity:1;"
- offset="0"
- id="stop37625" />
- <stop
- style="stop-color:#d6ca22;stop-opacity:0;"
- offset="1"
- id="stop37627" />
- </linearGradient>
- <linearGradient
- id="linearGradient36116"
- inkscape:collect="always">
- <stop
- id="stop36118"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop36120"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="133.14267"
- x2="117.29694"
- y1="116.00471"
- x1="133.94305"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22852"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="118.00132"
- x2="129.70895"
- y1="125.87247"
- x1="136.55727"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22850"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="75.5"
- x2="424.75217"
- y1="77.44017"
- x1="441.98615"
- gradientTransform="translate(0.01387)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22896"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="75.5"
- x2="424.75217"
- y1="78"
- x1="438.61115"
- gradientTransform="translate(0.01387)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22846"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="75.5"
- x2="424.75217"
- y1="77"
- x1="437.98615"
- gradientTransform="translate(0.01387)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22844"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient22562">
- <stop
- id="stop22564"
- offset="0"
- style="stop-color:#001e50;stop-opacity:1;" />
- <stop
- id="stop22566"
- offset="1"
- style="stop-color:#1e3e70;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="276.92188"
- x2="23.25"
- y1="277"
- x1="28.4375"
- gradientTransform="translate(399.01387,-202)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22842"
- xlink:href="#linearGradient22562"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient22556">
- <stop
- style="stop-color:#6a9bef;stop-opacity:1"
- offset="0"
- id="stop22558" />
- <stop
- id="stop22568"
- offset="0.77941167"
- style="stop-color:#bccee8;stop-opacity:0.58450705;" />
- <stop
- style="stop-color:#ccdaed;stop-opacity:0;"
- offset="1"
- id="stop22560" />
- </linearGradient>
- <linearGradient
- y2="38.088879"
- x2="199.27217"
- y1="38.088879"
- x1="210.08989"
- gradientTransform="matrix(0.785748,0,0,0.78488,265.93616,46.1048)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22840"
- xlink:href="#linearGradient22556"
- inkscape:collect="always" />
- <radialGradient
- r="8"
- fy="77.3125"
- fx="430.00003"
- cy="77.3125"
- cx="430.00003"
- gradientTransform="matrix(0.8128508,0,0,0.8128508,80.474142,14.46897)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient22838"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="285"
- x2="31.538462"
- y1="285"
- x1="24"
- gradientTransform="matrix(1.1929722,0,0,0.5,-462.63135,-59)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22848"
- xlink:href="#linearGradient22882"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient22882">
- <stop
- id="stop22884"
- offset="0"
- style="stop-color:#323232;stop-opacity:0;" />
- <stop
- style="stop-color:#323232;stop-opacity:0.49803922;"
- offset="0.21233012"
- id="stop22886" />
- <stop
- style="stop-color:#323232;stop-opacity:1;"
- offset="0.54086536"
- id="stop22888" />
- <stop
- id="stop22890"
- offset="0.83381736"
- style="stop-color:#323232;stop-opacity:0.49803922;" />
- <stop
- id="stop22892"
- offset="1"
- style="stop-color:#323232;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="285"
- x2="31.498274"
- y1="285"
- x1="23.959812"
- gradientTransform="matrix(1.0369025,0,0,1.5,-458.38567,-344)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22880"
- xlink:href="#linearGradient22882"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient35407">
- <stop
- style="stop-color:#a17306;stop-opacity:1;"
- offset="0"
- id="stop35409" />
- <stop
- id="stop35411"
- offset="0.43277758"
- style="stop-color:#cca649;stop-opacity:1;" />
- <stop
- style="stop-color:#f9f5e9;stop-opacity:1;"
- offset="1"
- id="stop35413" />
- </linearGradient>
- <linearGradient
- id="linearGradient35391">
- <stop
- style="stop-color:#322800;stop-opacity:1;"
- offset="0"
- id="stop35393" />
- <stop
- style="stop-color:#6e4800;stop-opacity:0;"
- offset="1"
- id="stop35395" />
- </linearGradient>
- <linearGradient
- id="linearGradient34157"
- inkscape:collect="always">
- <stop
- id="stop34159"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop34161"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="26.027344"
- x2="-25.5"
- y1="36.828632"
- x1="-25.5"
- gradientTransform="translate(0,-18)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22457"
- xlink:href="#linearGradient38256"
- inkscape:collect="always" />
- <linearGradient
- y2="340"
- x2="343.26239"
- y1="323"
- x1="308"
- gradientTransform="translate(-354,-314.00002)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22455"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="23.414351"
- x2="-25.5"
- y1="37"
- x1="-27.299919"
- gradientTransform="translate(0,-18)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22453"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient21609">
- <stop
- style="stop-color:black;stop-opacity:1"
- offset="0"
- id="stop21611" />
- <stop
- style="stop-color:white;stop-opacity:1;"
- offset="1"
- id="stop21613" />
- </linearGradient>
- <linearGradient
- y2="103.75"
- x2="165"
- y1="103.71875"
- x1="162"
- gradientUnits="userSpaceOnUse"
- id="linearGradient20961"
- xlink:href="#linearGradient21609"
- inkscape:collect="always" />
- <linearGradient
- y2="325"
- x2="286.60001"
- y1="323.80002"
- x1="285.39999"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32335"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="337.517"
- x2="337.80573"
- y1="323"
- x1="308"
- gradientTransform="translate(-157.00004,-233.00002)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22081"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient19900"
- inkscape:collect="always">
- <stop
- id="stop19902"
- offset="0"
- style="stop-color:#1a1a1a;stop-opacity:1;" />
- <stop
- id="stop19904"
- offset="1"
- style="stop-color:#1a1a1a;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient18105">
- <stop
- style="stop-color:#162d50;stop-opacity:1"
- offset="0"
- id="stop18107" />
- <stop
- style="stop-color:#1e3e70;stop-opacity:0;"
- offset="1"
- id="stop18109" />
- </linearGradient>
- <linearGradient
- id="linearGradient18056">
- <stop
- style="stop-color:#162d50;stop-opacity:1"
- offset="0"
- id="stop18058" />
- <stop
- style="stop-color:#295498;stop-opacity:0.34057972;"
- offset="1"
- id="stop18060" />
- </linearGradient>
- <linearGradient
- id="linearGradient21327">
- <stop
- id="stop21329"
- offset="0"
- style="stop-color:#1e3e70;stop-opacity:1;" />
- <stop
- id="stop21331"
- offset="1"
- style="stop-color:#1e3e70;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient19625">
- <stop
- style="stop-color:#2258a6;stop-opacity:1;"
- offset="0"
- id="stop19627" />
- <stop
- style="stop-color:#c1d7f8;stop-opacity:1;"
- offset="1"
- id="stop19629" />
- </linearGradient>
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="-40.000008"
- x2="408.75"
- y1="-35.483223"
- x1="408.75"
- id="linearGradient20217"
- xlink:href="#linearGradient35391"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient18821">
- <stop
- id="stop18823"
- offset="0"
- style="stop-color:#fc6b58;stop-opacity:1;" />
- <stop
- id="stop18825"
- offset="1"
- style="stop-color:#fc6b58;stop-opacity:0;" />
- </linearGradient>
- <radialGradient
- r="3.1650217"
- fy="500.26215"
- fx="75.554794"
- cy="500.26215"
- cx="75.554794"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient22187"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient29149">
- <stop
- style="stop-color:#76adff;stop-opacity:1;"
- offset="0"
- id="stop29151" />
- <stop
- style="stop-color:#a5c9ff;stop-opacity:0;"
- offset="1"
- id="stop29153" />
- </linearGradient>
- <radialGradient
- r="3.1650217"
- fy="500.66806"
- fx="75.217888"
- cy="500.66806"
- cx="75.217888"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient21820"
- xlink:href="#linearGradient29149"
- inkscape:collect="always" />
- <radialGradient
- r="2.9089756"
- fy="503.81497"
- fx="79.959885"
- cy="503.81497"
- cx="79.959885"
- gradientTransform="matrix(1.4624192,0,0,1.4467089,-36.975824,-224.99718)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient21818"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="501.04794"
- x2="78.000008"
- y1="511.42972"
- x1="89.526657"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21816"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="501.58331"
- x2="76.885078"
- y1="504.67188"
- x1="80.768944"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21814"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="492.15359"
- fx="75.95578"
- cy="492.15359"
- cx="75.95578"
- gradientTransform="matrix(0.3949409,0.3949425,-0.4243709,0.4254619,321.60762,256.85923)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient21741"
- xlink:href="#linearGradient14262"
- inkscape:collect="always" />
- <linearGradient
- y2="501.10059"
- x2="41.311054"
- y1="502.71924"
- x1="88.874489"
- gradientTransform="matrix(0.9281768,0,0,0.9971589,401.42265,-484.56523)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21773"
- xlink:href="#linearGradient15809"
- inkscape:collect="always" />
- <linearGradient
- y2="500"
- x2="54.8125"
- y1="500"
- x1="108"
- gradientTransform="matrix(0.8666667,0,0,0.9166667,406.13333,-443.79167)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21776"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="499.99969"
- fx="74.518959"
- cy="499.99969"
- cx="74.518959"
- gradientTransform="matrix(0.8886193,0.8021825,-0.8051059,0.8972684,411.80247,-8.668512)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient22166"
- xlink:href="#linearGradient14262"
- inkscape:collect="always" />
- <radialGradient
- r="2.9089756"
- fy="503.81497"
- fx="79.959885"
- cy="503.81497"
- cx="79.959885"
- gradientTransform="matrix(1.4624192,0,0,1.4467089,-36.975824,-224.99718)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient22164"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="501.04794"
- x2="78.000008"
- y1="511.42972"
- x1="89.526657"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22162"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="501.58331"
- x2="76.885078"
- y1="504.67188"
- x1="80.768944"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22160"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="492.15359"
- fx="75.95578"
- cy="492.15359"
- cx="75.95578"
- gradientTransform="matrix(0.3949409,0.3949425,-0.4243709,0.4254619,321.60762,256.85923)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient22158"
- xlink:href="#linearGradient14262"
- inkscape:collect="always" />
- <linearGradient
- y2="501.10059"
- x2="41.311054"
- y1="502.71924"
- x1="88.874489"
- gradientTransform="matrix(1,0,0,0.9971589,396,-484.56523)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22156"
- xlink:href="#linearGradient15809"
- inkscape:collect="always" />
- <linearGradient
- y2="500"
- x2="54.8125"
- y1="500"
- x1="108"
- gradientTransform="matrix(0.8666667,0,0,0.9166667,406.13333,-443.79167)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22154"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient16500"
- inkscape:collect="always">
- <stop
- id="stop16502"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop16504"
- offset="1"
- style="stop-color:black;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient15809"
- inkscape:collect="always">
- <stop
- id="stop15811"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop15813"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient15437">
- <stop
- style="stop-color:#20529e;stop-opacity:1;"
- offset="0"
- id="stop15439" />
- <stop
- style="stop-color:#1d3f71;stop-opacity:0;"
- offset="1"
- id="stop15441" />
- </linearGradient>
- <linearGradient
- id="linearGradient15425">
- <stop
- id="stop15427"
- offset="0"
- style="stop-color:#8c0000;stop-opacity:1;" />
- <stop
- id="stop15429"
- offset="1"
- style="stop-color:#c80000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient14262">
- <stop
- style="stop-color:#2661b6;stop-opacity:1;"
- offset="0"
- id="stop14264" />
- <stop
- style="stop-color:#c1d7f8;stop-opacity:0;"
- offset="1"
- id="stop14266" />
- </linearGradient>
- <linearGradient
- id="linearGradient18344">
- <stop
- id="stop18346"
- offset="0"
- style="stop-color:#6c6c6c;stop-opacity:1;" />
- <stop
- id="stop18348"
- offset="1"
- style="stop-color:#f0f0f0;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient5060">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop5062" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop5064" />
- </linearGradient>
- <linearGradient
- id="linearGradient27957">
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="0"
- id="stop27959" />
- <stop
- id="stop27963"
- offset="0.59290552"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop27961" />
- </linearGradient>
- <linearGradient
- id="linearGradient23647">
- <stop
- id="stop23649"
- offset="0"
- style="stop-color:white;stop-opacity:1;" />
- <stop
- id="stop23651"
- offset="1"
- style="stop-color:black;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient23390">
- <stop
- id="stop23392"
- offset="0.0000000"
- style="stop-color:#000000;stop-opacity:1.0000000" />
- <stop
- id="stop23400"
- offset="1.0000000"
- style="stop-color:#ffffff;stop-opacity:1.0000000" />
- </linearGradient>
- <linearGradient
- id="linearGradient16359"
- inkscape:collect="always">
- <stop
- id="stop16361"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop16363"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="248.10277"
- x2="388.35962"
- y1="230.09529"
- x1="386.09836"
- gradientTransform="matrix(-1.207032,0,0,0.903901,679.26,-38.98429)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15746"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="248.24983"
- x2="390.55936"
- y1="229.34804"
- x1="390.61163"
- gradientTransform="matrix(-1.207032,0,0,0.903901,679.30638,-38.92179)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15744"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="248.55901"
- x2="385.60632"
- y1="225.94354"
- x1="383.67041"
- gradientTransform="matrix(-1.203777,0,0,0.903901,837.9645,-18.01568)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15683"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="247.83209"
- x2="387.94211"
- y1="230.5647"
- x1="391.80222"
- gradientTransform="matrix(-1.207032,0,0,0.903901,839.2424,-18.01568)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15681"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="126.19643"
- x2="137.11284"
- y1="112.31642"
- x1="126.37006"
- gradientUnits="userSpaceOnUse"
- id="linearGradient13545"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="226.33672"
- x2="174.75458"
- y1="244.14676"
- x1="190.68166"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15878"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient20756">
- <stop
- id="stop20758"
- offset="0"
- style="stop-color:#932200;stop-opacity:1;" />
- <stop
- id="stop20760"
- offset="1"
- style="stop-color:#f8420a;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="122.08995"
- x2="134.94949"
- y1="110.59049"
- x1="126.45676"
- gradientUnits="userSpaceOnUse"
- id="linearGradient13543"
- xlink:href="#linearGradient20756"
- inkscape:collect="always" />
- <linearGradient
- y2="118.5"
- x2="235"
- y1="118.5"
- x1="228.5468"
- gradientTransform="matrix(0,1.253963,1,0,169,-94.7765)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15693"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="121.88217"
- x2="235.90916"
- y1="109.00085"
- x1="215.07817"
- gradientTransform="matrix(1.222225,0,0,1,-87.33412,169)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15691"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="118.5"
- x2="235"
- y1="118.5"
- x1="228.5468"
- gradientTransform="matrix(0,1.253963,1,0,169,-94.7765)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15689"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="121"
- x2="235.90916"
- y1="107.25085"
- x1="217.22589"
- gradientTransform="matrix(1.222225,0,0,1,-87.33412,169)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15687"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="247.99632"
- x2="393"
- y1="234.59885"
- x1="381.56296"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15854"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="241.70195"
- x2="385.88068"
- y1="259.26602"
- x1="399.987"
- gradientTransform="matrix(0.8329616,0,0,0.8433415,58.576199,29.193917)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient13639"
- xlink:href="#linearGradient31456"
- inkscape:collect="always" />
- <linearGradient
- y2="250.9062"
- x2="395.9375"
- y1="244.5312"
- x1="390.75"
- gradientUnits="userSpaceOnUse"
- id="linearGradient52023"
- xlink:href="#linearGradient23178"
- inkscape:collect="always" />
- <linearGradient
- y2="241.70195"
- x2="385.88068"
- y1="257.4874"
- x1="400.88739"
- gradientTransform="matrix(0.8329616,0,0,0.8433415,58.576199,29.193917)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14661"
- xlink:href="#linearGradient31456"
- inkscape:collect="always" />
- <linearGradient
- y2="247.83134"
- x2="396.79285"
- y1="241.86644"
- x1="391.01859"
- gradientUnits="userSpaceOnUse"
- id="linearGradient52025"
- xlink:href="#linearGradient23178"
- inkscape:collect="always" />
- <linearGradient
- y2="241.70195"
- x2="385.88068"
- y1="257.41327"
- x1="399.08661"
- gradientTransform="matrix(0.8329616,0,0,0.8433415,58.576199,29.193917)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15995"
- xlink:href="#linearGradient31456"
- inkscape:collect="always" />
- <linearGradient
- y2="247.1562"
- x2="393.4375"
- y1="231.7812"
- x1="381.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15993"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="247.1562"
- x2="393.4375"
- y1="231.7812"
- x1="381.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15997"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient47130">
- <stop
- id="stop47132"
- offset="0"
- style="stop-color:#ed7b00;stop-opacity:1;" />
- <stop
- id="stop47134"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="254.18553"
- x2="339.84518"
- y1="244.97151"
- x1="329.28757"
- gradientUnits="userSpaceOnUse"
- id="linearGradient52027"
- xlink:href="#linearGradient23178"
- inkscape:collect="always" />
- <linearGradient
- y2="248.68198"
- x2="333.94208"
- y1="234.63918"
- x1="319.75095"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15436"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient32842">
- <stop
- id="stop32844"
- offset="0"
- style="stop-color:#183e75;stop-opacity:1;" />
- <stop
- id="stop32846"
- offset="1"
- style="stop-color:#1d3f71;stop-opacity:0;" />
- </linearGradient>
- <radialGradient
- r="6.1896501"
- fy="826.77924"
- fx="2357.1072"
- cy="826.77924"
- cx="2357.1072"
- gradientTransform="matrix(2.2541045,-1.3755453,0.900369,1.4754358,-3699.4512,2858.7)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient13900"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="21.94199"
- x2="130.70599"
- y1="18.44199"
- x1="130.70599"
- gradientTransform="translate(2226.9963,823)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38692"
- xlink:href="#linearGradient40983"
- inkscape:collect="always" />
- <linearGradient
- y2="36.739578"
- x2="331.44778"
- y1="33.505165"
- x1="328.38852"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15717"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="37.468754"
- x2="332.41409"
- y1="25.109356"
- x1="320.2735"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15715"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="36.739578"
- x2="331.44778"
- y1="34.005215"
- x1="329.18762"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15713"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="41.875"
- x2="337.3125"
- y1="31.446384"
- x1="326.483"
- gradientTransform="translate(2.011921e-5,12.000013)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15711"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="31.22842"
- x2="326.41843"
- y1="38.166924"
- x1="332.49747"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15709"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="53.758793"
- x2="343.5636"
- y1="30.3883"
- x1="323.37836"
- gradientTransform="translate(2.011921e-5,12.000013)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15707"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="-6.3206272"
- x2="291.93054"
- y1="-16.62501"
- x1="279.00009"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15646"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="263.79816"
- x2="51.01355"
- y1="238.54002"
- x1="25.437477"
- gradientTransform="matrix(1.000006,0,0,1,258.9997,-253)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15644"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient20973">
- <stop
- style="stop-color:#15ff00;stop-opacity:1;"
- offset="0"
- id="stop20975" />
- <stop
- style="stop-color:#15ff00;stop-opacity:0;"
- offset="1"
- id="stop20977" />
- </linearGradient>
- <linearGradient
- id="linearGradient20962">
- <stop
- id="stop20965"
- offset="0"
- style="stop-color:#00a8ff;stop-opacity:1;" />
- <stop
- id="stop20967"
- offset="1"
- style="stop-color:#00a8ff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient20036">
- <stop
- id="stop20038"
- offset="0"
- style="stop-color:#ffb55e;stop-opacity:1;" />
- <stop
- id="stop20040"
- offset="1"
- style="stop-color:#ff8400;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="160.02296"
- x2="190.41687"
- y1="169.14206"
- x1="197.63152"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15574"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(1.1000194,0,0,1.0998287,-4.6508478,-9.2334126)"
- y2="105.27895"
- x2="59.057678"
- y1="93.805557"
- x1="47.655102"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15358"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="103.11092"
- x2="135.45256"
- y1="75.666725"
- x1="109.04134"
- gradientTransform="matrix(0.9995967,0,0,1.0002103,-78.949724,-0.02739749)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15356"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15362"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="120.87388"
- x2="135.36497"
- y1="111.98244"
- x1="124.40742"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15360"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="239.94608"
- x2="363.71661"
- y1="220.55545"
- x1="348.06064"
- gradientTransform="matrix(1.2859754,0,0,1,39.669142,20)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21531"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="84.75"
- x2="18.01141"
- y1="71.51989"
- x1="5.9836898"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14517"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="248.37102"
- x2="35.029804"
- y1="216.62332"
- x1="3.3959732"
- gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14511"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="82.75"
- x2="17.011419"
- y1="71.51989"
- x1="5.9836898"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16069"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="239.94608"
- x2="363.71661"
- y1="220.55545"
- x1="348.06064"
- gradientTransform="matrix(1.2859754,0,0,1,-440.36032,-147)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16067"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="248.37102"
- x2="35.029804"
- y1="219.61856"
- x1="6.9917974"
- gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16063"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="85.5"
- x2="18.51141"
- y1="71.51989"
- x1="5.9836898"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16154"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="247.71701"
- x2="33.15686"
- y1="217.4549"
- x1="3.8504581"
- gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16150"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="248.37102"
- x2="35.029804"
- y1="223.47467"
- x1="9.5404434"
- gradientTransform="matrix(0.8520698,0,0,0.7746114,324.58589,47.486124)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15734"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="85.5"
- x2="18.51141"
- y1="71.51989"
- x1="5.9836898"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16174"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="247.71701"
- x2="33.15686"
- y1="217.3624"
- x1="2.911078"
- gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16170"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="248.37102"
- x2="35.029804"
- y1="223.47467"
- x1="9.5404434"
- gradientTransform="matrix(0.8520698,0,0,0.7746114,324.58589,47.486124)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15736"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient13998">
- <stop
- style="stop-color:#f57d07;stop-opacity:1;"
- offset="0"
- id="stop14000" />
- <stop
- style="stop-color:white;stop-opacity:1;"
- offset="1"
- id="stop14002" />
- </linearGradient>
- <linearGradient
- id="linearGradient4343">
- <stop
- style="stop-color:white;stop-opacity:1;"
- offset="0"
- id="stop4345" />
- <stop
- style="stop-color:#fff9f9;stop-opacity:0;"
- offset="1"
- id="stop4347" />
- </linearGradient>
- <linearGradient
- y2="-268.04858"
- x2="-279.44821"
- y1="-274.23453"
- x1="-285.65732"
- gradientTransform="matrix(1.3333334,0,0,0.8333334,747.50001,337.33345)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15057"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="164.5"
- x2="75.731438"
- y1="164.125"
- x1="43.647511"
- gradientTransform="matrix(1,0,0,1.166667,-441,-81.66662)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15053"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="165"
- x2="147"
- y1="166.53206"
- x1="148.71947"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15705"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="162.03282"
- x2="150.08357"
- y1="158.34668"
- x1="146.80022"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15703"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="165"
- x2="147"
- y1="166.53206"
- x1="148.71947"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15701"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="164.94562"
- x2="149.88129"
- y1="126.83902"
- x1="122.84515"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15699"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="249.99998"
- x2="392.0101"
- y1="224.99998"
- x1="392.0101"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15742"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="118.5"
- x2="235"
- y1="118.47696"
- x1="227.57907"
- gradientTransform="translate(19.97577,-6.0080883)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15721"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="121"
- x2="233.08319"
- y1="110.37873"
- x1="222.4996"
- gradientTransform="translate(19.97577,-6.0080883)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15719"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="124.09359"
- x2="230.74091"
- y1="100.89436"
- x1="230.95012"
- gradientTransform="translate(0,-6.0080883)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15723"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="122.0597"
- x2="135.54141"
- y1="112.31642"
- x1="126.37006"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15778"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="226.33672"
- x2="174.75458"
- y1="244.14676"
- x1="190.68166"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15780"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="243.70523"
- x2="129.81586"
- y1="246.32236"
- x1="132.35471"
- gradientTransform="translate(0,10.767079)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15776"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="123.17216"
- x2="136.3542"
- y1="88.301094"
- x1="103.53399"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15774"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="129.82761"
- x2="144.22272"
- y1="112.31642"
- x1="126.37006"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15450"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="226.33672"
- x2="174.75458"
- y1="244.14676"
- x1="190.68166"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15452"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="243.31177"
- x2="129.24866"
- y1="246.32236"
- x1="132.12782"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15448"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="121.19196"
- x2="135.40274"
- y1="69.87941"
- x1="87.969383"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15446"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="131.65625"
- x2="24.625006"
- y1="117.46875"
- x1="9.062501"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15582"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="131.5226"
- x2="43.766914"
- y1="116.80592"
- x1="28.607456"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15584"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="36.739578"
- x2="331.44778"
- y1="33.505165"
- x1="328.38852"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15124"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="37.044456"
- x2="331.74063"
- y1="33.94022"
- x1="328.95557"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15122"
- xlink:href="#linearGradient30208"
- inkscape:collect="always" />
- <linearGradient
- y2="112.34031"
- x2="184.43379"
- y1="122.12527"
- x1="192.11751"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16025"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="111.7235"
- x2="204.05295"
- y1="121.417"
- x1="213.51967"
- gradientTransform="matrix(-0.395521,0,0,-0.3955,275.223,171.0515)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15580"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="112.67535"
- x2="203.33264"
- y1="122.66508"
- x1="213.53587"
- gradientTransform="matrix(0.607961,0,0,0.607967,64.49194,51.63899)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15578"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="117.00745"
- x2="336.72485"
- y1="143.70836"
- x1="349.04059"
- gradientTransform="rotate(-45,396.37194,506.00979)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15748"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient10585">
- <stop
- style="stop-color:#d7d7d7;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop10587" />
- <stop
- style="stop-color:#000000;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop10595" />
- </linearGradient>
- <linearGradient
- id="linearGradient4138">
- <stop
- id="stop4140"
- offset="0"
- style="stop-color:#6c432f;stop-opacity:1;" />
- <stop
- id="stop4142"
- offset="1"
- style="stop-color:#c0966d;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient31320">
- <stop
- id="stop31322"
- offset="0"
- style="stop-color:white;stop-opacity:1;" />
- <stop
- id="stop31324"
- offset="1"
- style="stop-color:white;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient12678">
- <stop
- style="stop-color:#d40000;stop-opacity:1"
- offset="0"
- id="stop12680" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop12682" />
- </linearGradient>
- <linearGradient
- y2="81.14637"
- x2="110.48556"
- y1="101.22832"
- x1="86.452194"
- gradientTransform="translate(1.691866,0.00341)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient13991"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="133.53448"
- x2="142.29109"
- y1="121.2412"
- x1="130.59862"
- gradientTransform="translate(1.401389,-3.2412)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient13520"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="115.54105"
- x2="129.67148"
- y1="134.18185"
- x1="147.07098"
- id="linearGradient23215"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient23178">
- <stop
- id="stop23180"
- offset="0"
- style="stop-color:#ff992b;stop-opacity:1;" />
- <stop
- id="stop23182"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient13973">
- <stop
- id="stop13975"
- offset="0"
- style="stop-color:#3c4c18;stop-opacity:1;" />
- <stop
- id="stop13977"
- offset="1"
- style="stop-color:#9aff31;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient13938">
- <stop
- style="stop-color:#6e0c00;stop-opacity:1;"
- offset="0"
- id="stop13940" />
- <stop
- style="stop-color:#ee3800;stop-opacity:0;"
- offset="1"
- id="stop13942" />
- </linearGradient>
- <linearGradient
- id="linearGradient14232">
- <stop
- id="stop14234"
- offset="0"
- style="stop-color:#fff32a;stop-opacity:1;" />
- <stop
- id="stop14236"
- offset="1"
- style="stop-color:#fff551;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient14418">
- <stop
- style="stop-color:#fa2509;stop-opacity:1;"
- offset="0"
- id="stop14420" />
- <stop
- style="stop-color:#fa2509;stop-opacity:0;"
- offset="1"
- id="stop14422" />
- </linearGradient>
- <linearGradient
- y2="77.499992"
- x2="477.25"
- y1="73.999992"
- x1="474"
- gradientTransform="translate(-26,2.9206276e-6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14935"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="77.5"
- x2="477.5"
- y1="75"
- x1="474.84375"
- gradientTransform="translate(-6,1.4603138e-6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14841"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="-216.25"
- x2="157.91019"
- y1="-216.25"
- x1="148.15451"
- gradientTransform="translate(0,-22)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18852"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="-219.8996"
- x2="105.81714"
- y1="-227.83138"
- x1="107.15463"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18850"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-217.99782"
- x2="136.51436"
- y1="-219.24783"
- x1="123.36729"
- gradientTransform="translate(20.000285,-20.002166)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18848"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="-219.49783"
- x2="123.63815"
- y1="-219.54408"
- x1="135.30351"
- gradientTransform="translate(20.000285,-20.002166)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18845"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-215.99998"
- x2="146.36111"
- y1="-215.99998"
- x1="157.97339"
- gradientTransform="translate(0,-22)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18843"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-239.14549"
- x2="149.95467"
- y1="-234"
- x1="151"
- gradientTransform="translate(279.04534,461.00001)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18901"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="-236.85815"
- x2="150.25"
- y1="-234"
- x1="151"
- gradientTransform="translate(280.04419,461)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18904"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="-241.85452"
- x2="145.20955"
- y1="-235.21587"
- x1="150.11926"
- gradientTransform="translate(280.99885,461)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18898"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="-239.28557"
- x2="147.41411"
- y1="-234.00002"
- x1="150.95467"
- gradientTransform="translate(280,461)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18896"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="-239.28557"
- x2="147.41411"
- y1="-234.00002"
- x1="150.95467"
- gradientTransform="translate(280,459)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17819"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="-239.28557"
- x2="147.41411"
- y1="-234.00002"
- x1="150.95467"
- gradientTransform="translate(280,461)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17817"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="-216.25"
- x2="157.91019"
- y1="-216.25"
- x1="148.15451"
- gradientTransform="translate(0,-22)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17535"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="-219.8996"
- x2="105.81714"
- y1="-227.83138"
- x1="107.15463"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17533"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-217.99782"
- x2="136.51436"
- y1="-219.24783"
- x1="123.36729"
- gradientTransform="translate(20.000285,-20.002166)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17531"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="-219.49783"
- x2="123.63815"
- y1="-219.54408"
- x1="135.30351"
- gradientTransform="translate(20.000285,-20.002166)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17529"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-215.99998"
- x2="146.36111"
- y1="-215.99998"
- x1="157.97339"
- gradientTransform="translate(0,-22)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17527"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient18207"
- inkscape:collect="always">
- <stop
- id="stop18209"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop18211"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="218.48816"
- x2="519.44189"
- y1="219"
- x1="481.46063"
- id="linearGradient18213"
- xlink:href="#linearGradient18207"
- inkscape:collect="always" />
- <linearGradient
- y2="-216.25"
- x2="157.91019"
- y1="-216.25"
- x1="148.15451"
- gradientTransform="translate(0,-22)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17506"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="-219.8996"
- x2="105.81714"
- y1="-227.83138"
- x1="107.15463"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17504"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-217.99782"
- x2="136.51436"
- y1="-219.24783"
- x1="123.36729"
- gradientTransform="translate(20.000285,-20.002166)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17502"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="-219.49783"
- x2="123.63815"
- y1="-219.54408"
- x1="135.30351"
- gradientTransform="translate(20.000285,-20.002166)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17500"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-215.99998"
- x2="146.36111"
- y1="-215.99998"
- x1="157.97339"
- gradientTransform="translate(0,-22)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17498"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-54.124699"
- x2="352.46426"
- y1="-45.098213"
- x1="362.28571"
- gradientTransform="matrix(1.2078427,0,0,1.0516432,-357.40769,69.427229)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18670"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="118.69846"
- x2="132.35237"
- y1="114.74636"
- x1="127.50285"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15592"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="120.58403"
- x2="135.54628"
- y1="114.74636"
- x1="127.50285"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15590"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="118.10129"
- x2="131.10667"
- y1="112.22441"
- x1="124.52369"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15596"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="120.14633"
- x2="134.62978"
- y1="114.74636"
- x1="127.50285"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15594"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient14219">
- <stop
- style="stop-color:#ff8605;stop-opacity:1;"
- offset="0"
- id="stop14221" />
- <stop
- style="stop-color:#9c6700;stop-opacity:0;"
- offset="1"
- id="stop14223" />
- </linearGradient>
- <linearGradient
- id="linearGradient31456">
- <stop
- id="stop31458"
- offset="0"
- style="stop-color:#2b1600;stop-opacity:1;" />
- <stop
- id="stop31460"
- offset="1"
- style="stop-color:#6e3900;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient19425">
- <stop
- id="stop19427"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- style="stop-color:#fffffe;stop-opacity:0.65789473;"
- offset="0.63109845"
- id="stop19431" />
- <stop
- id="stop19429"
- offset="1.0000000"
- style="stop-color:#fffffe;stop-opacity:0.0000000;" />
- </linearGradient>
- <linearGradient
- id="linearGradient30208"
- inkscape:collect="always">
- <stop
- id="stop30210"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop30212"
- offset="1"
- style="stop-color:black;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="118"
- x2="132.98256"
- y1="125.66204"
- x1="125.19086"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15782"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient9030">
- <stop
- id="stop9032"
- offset="0"
- style="stop-color:white;stop-opacity:1;" />
- <stop
- id="stop9034"
- offset="1"
- style="stop-color:white;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient1610">
- <stop
- id="stop1611"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop1612"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient37542">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop37544" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop37546" />
- </linearGradient>
- <linearGradient
- id="linearGradient30124">
- <stop
- id="stop30126"
- offset="0"
- style="stop-color:#1d4a8c;stop-opacity:1;" />
- <stop
- id="stop30128"
- offset="1"
- style="stop-color:#c1d4f2;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient15893">
- <stop
- id="stop15895"
- offset="0"
- style="stop-color:#2968c3;stop-opacity:1;" />
- <stop
- style="stop-color:#b5ccf0;stop-opacity:1;"
- offset="0.37679368"
- id="stop15897" />
- <stop
- id="stop15899"
- offset="0.59786767"
- style="stop-color:#b5ccf0;stop-opacity:1;" />
- <stop
- id="stop15901"
- offset="1"
- style="stop-color:#2968c3;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient319">
- <stop
- id="stop320"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient24000"
- inkscape:collect="always">
- <stop
- id="stop24002"
- offset="0"
- style="stop-color:white;stop-opacity:1;" />
- <stop
- id="stop24004"
- offset="1"
- style="stop-color:white;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient10069">
- <stop
- id="stop10071"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop10073"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient32998">
- <stop
- id="stop33000"
- offset="0"
- style="stop-color:#2968c3;stop-opacity:1;" />
- <stop
- id="stop33002"
- offset="1"
- style="stop-color:#c1d7f8;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="29.392145"
- x2="277.86761"
- y1="11.593864"
- x1="261.83936"
- gradientTransform="matrix(0.888889,0,0,1,-32.5,115.5045)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21364"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="37.115723"
- x2="283.42514"
- y1="24.537012"
- x1="272.05627"
- gradientTransform="matrix(0.888889,0,0,1,-32.9445,114.0045)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21366"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="245.625"
- x2="92.8125"
- y1="239.125"
- x1="85.1875"
- gradientTransform="translate(124,-102.00001)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21368"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="29.392145"
- x2="277.86761"
- y1="11.593864"
- x1="261.83936"
- gradientTransform="matrix(0.888889,0,0,1,-32.5,115.5045)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21370"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="37.115723"
- x2="283.42514"
- y1="24.537012"
- x1="272.05627"
- gradientTransform="matrix(0.888889,0,0,1,-32.9445,114.0045)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21372"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="245.625"
- x2="92.8125"
- y1="239.125"
- x1="85.1875"
- gradientTransform="translate(124,-102.00001)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21374"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="6.9000001"
- fy="14.5"
- fx="350.5"
- cy="14.5"
- cx="350.5"
- gradientTransform="matrix(0.891843,0,0,0.909224,-173.99085,171.21624)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient21517"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="120.24665"
- x2="133.62564"
- y1="114.74636"
- x1="127.50285"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21641"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="118"
- x2="132"
- y1="113.21745"
- x1="126.15096"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21643"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="247.73561"
- x2="274.30609"
- y1="234.6606"
- x1="261.44702"
- gradientTransform="translate(159.9998,-41.00751)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient20796"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="94.53125"
- x2="228.71886"
- y1="103"
- x1="235.46884"
- gradientTransform="translate(199.9999,105.99249)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient20798"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="247.71701"
- x2="33.15686"
- y1="215.76874"
- x1="3.2344713"
- gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21862"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="86"
- x2="19.011419"
- y1="71.51989"
- x1="5.9836898"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21864"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="247.71701"
- x2="33.15686"
- y1="215.35608"
- x1="3.3268692"
- gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21902"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="85.5"
- x2="18.51141"
- y1="71.51989"
- x1="5.9836898"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21904"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="269.1373"
- x2="55.384842"
- y1="238.33629"
- x1="24.374985"
- gradientTransform="matrix(1.000006,0,0,1,258.9997,-237)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31646"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="-5.8786855"
- x2="291.577"
- y1="-16.978563"
- x1="278.55817"
- gradientTransform="translate(0,16)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31648"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="4.25"
- fy="11.818644"
- fx="306.55292"
- cy="11.818644"
- cx="306.55292"
- gradientTransform="matrix(0.816279,0,-3.646264e-6,0.779872,56.32029,28.34496)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient31650"
- xlink:href="#linearGradient20036"
- inkscape:collect="always" />
- <radialGradient
- r="4.25"
- fy="10.620173"
- fx="312.80765"
- cy="10.620173"
- cx="312.80765"
- gradientTransform="matrix(1.580596,1.138426,-0.692447,0.961382,-175.3891,-329.6844)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient31652"
- xlink:href="#linearGradient14418"
- inkscape:collect="always" />
- <radialGradient
- r="4.25"
- fy="15.619254"
- fx="313.74268"
- cy="15.619254"
- cx="313.74268"
- gradientTransform="matrix(1.48445,-0.00657397,0.00734631,1.660903,-154.1629,19.305572)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient31654"
- xlink:href="#linearGradient20962"
- inkscape:collect="always" />
- <radialGradient
- r="4.25"
- fy="15.518281"
- fx="309.0571"
- cy="15.518281"
- cx="309.0571"
- gradientTransform="matrix(0.756245,0,-3.378096e-6,0.722516,72.63115,31.07857)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient31656"
- xlink:href="#linearGradient20973"
- inkscape:collect="always" />
- <linearGradient
- y2="248.75177"
- x2="32.351238"
- y1="205.0083"
- x1="-6.3249049"
- gradientTransform="matrix(0.8579582,0,0,0.9285714,7.397998,-211.96428)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31664"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="243.92201"
- x2="345.98633"
- y1="216.75188"
- x1="347.6467"
- gradientTransform="matrix(0,-0.9569715,-1,0,259,351.18743)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31666"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="84.75"
- x2="18.01141"
- y1="71.51989"
- x1="5.9836898"
- gradientTransform="matrix(0.9166667,0,0,0.9166667,24.364541,-55.041665)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31668"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="238.44429"
- x2="346.58698"
- y1="218.2382"
- x1="346.15555"
- gradientTransform="matrix(0,-0.9297203,-1.2117965,0,305.73028,342.22894)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31672"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="94.239906"
- x2="68.0271"
- y1="108.47212"
- x1="80.60067"
- gradientTransform="matrix(0.9166695,0,0,0.9203753,-10.025729,345.78566)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31694"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="107.18619"
- x2="79.355118"
- y1="97.5"
- x1="70.55275"
- gradientTransform="translate(-15.983875,338)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31696"
- xlink:href="#linearGradient13938"
- inkscape:collect="always" />
- <linearGradient
- y2="112.03586"
- x2="86.00116"
- y1="90.951675"
- x1="64.998215"
- gradientTransform="matrix(0.9998599,0,0,0.9960071,-15.972985,338.41149)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31698"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="31.019331"
- x2="277.61203"
- y1="10.838325"
- x1="257.0376"
- gradientTransform="matrix(0.888889,0,0,1,105.5221,92.482413)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31932"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="83.002625"
- x2="346.08932"
- y1="68.624634"
- x1="332.03717"
- gradientTransform="matrix(0.7827973,0,0,0.9989462,77.082208,42.08484)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31934"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="245.625"
- x2="92.8125"
- y1="236"
- x1="79.329903"
- gradientTransform="translate(262,-125)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31936"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="118"
- x2="132"
- y1="126.23546"
- x1="124.14184"
- gradientUnits="userSpaceOnUse"
- id="linearGradient33666"
- xlink:href="#linearGradient24000"
- inkscape:collect="always" />
- <linearGradient
- y2="116.55647"
- x2="133.53401"
- y1="125.94608"
- x1="125.45158"
- gradientUnits="userSpaceOnUse"
- id="linearGradient33668"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="119.554"
- x2="130.82327"
- y1="107.64013"
- x1="142.97318"
- gradientUnits="userSpaceOnUse"
- id="linearGradient33670"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="118.66972"
- x2="132"
- y1="110.56118"
- x1="139.93341"
- gradientUnits="userSpaceOnUse"
- id="linearGradient33681"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="127.60542"
- x2="123.9021"
- y1="98.630066"
- x1="149.55772"
- gradientUnits="userSpaceOnUse"
- id="linearGradient33700"
- xlink:href="#linearGradient32842"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="117.09563"
- x1="130.95198"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10540"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="119.79803"
- x2="133.01006"
- y1="106.08605"
- x1="119.1647"
- gradientUnits="userSpaceOnUse"
- id="linearGradient11333"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="14.103563"
- x2="236.47855"
- y1="5.7625732"
- x1="225.6198"
- gradientTransform="translate(-425,393.99999)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28057"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="263.55374"
- x2="307"
- y1="272"
- x1="306.26187"
- id="linearGradient28077"
- xlink:href="#linearGradient30208"
- inkscape:collect="always" />
- <linearGradient
- y2="110.49417"
- x2="446.26407"
- y1="121.42467"
- x1="431.05026"
- gradientTransform="translate(0,10)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28474"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="122.95798"
- x2="450.27414"
- y1="107.56771"
- x1="442.69827"
- gradientTransform="translate(0,10)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28528"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="117.90625"
- x2="447.96875"
- y1="104.34499"
- x1="437.57828"
- gradientTransform="translate(-474,158.25)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28530"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="253.23859"
- x2="-20.826464"
- y1="266.11719"
- x1="-38.103703"
- gradientTransform="translate(0,10)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28532"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="182.52524"
- x2="213.7883"
- y1="182.09375"
- x1="207.04637"
- id="linearGradient10982"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="182.77524"
- x2="222.35799"
- y1="182.09375"
- x1="212.04637"
- id="linearGradient10984"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="203"
- x2="376.48389"
- y1="203"
- x1="371.98389"
- id="linearGradient11762"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="202.75"
- x2="370.98389"
- y1="203"
- x1="366.98389"
- id="linearGradient11764"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="244.68996"
- x2="386.13718"
- y1="243.48854"
- x1="391.62881"
- id="linearGradient11766"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="1.5"
- fy="14.5"
- fx="70.5"
- cy="14.5"
- cx="70.5"
- gradientTransform="matrix(1.050372,0,0,1.050372,-3.551238,-0.730396)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient12427"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <radialGradient
- r="5.5192375"
- fy="14.649424"
- fx="70.470596"
- cy="14.649424"
- cx="70.470596"
- gradientTransform="matrix(0.5007214,0.3131662,-0.3623683,0.5793905,300.02235,-93.056748)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient12429"
- xlink:href="#linearGradient14219"
- inkscape:collect="always" />
- <linearGradient
- y2="58.272621"
- x2="95.954262"
- y1="66.110847"
- x1="88.079262"
- gradientTransform="matrix(1,0,0,-1,456.04574,-116.51416)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient12602"
- xlink:href="#linearGradient16359"
- inkscape:collect="always" />
- <linearGradient
- y2="726.37006"
- x2="1661.8125"
- y1="722"
- x1="1663.8125"
- gradientTransform="translate(-1438.0001,-418)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient12114"
- xlink:href="#linearGradient31456"
- inkscape:collect="always" />
- <radialGradient
- r="5.5"
- fy="722.19189"
- fx="1662.2664"
- cy="722.19189"
- cx="1662.2664"
- gradientTransform="matrix(0.1378252,-0.2988982,2.5269117,1.1651875,-1830.2675,-33.64056)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient12116"
- xlink:href="#linearGradient19425"
- inkscape:collect="always" />
- <linearGradient
- y2="829.35315"
- x2="1978.11"
- y1="828.21777"
- x1="1984.5453"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,-1397.7474,-388.72044)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient12118"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="726.37006"
- x2="1661.8125"
- y1="722"
- x1="1663.8125"
- gradientTransform="translate(-1297,-948)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient12213"
- xlink:href="#linearGradient30208"
- inkscape:collect="always" />
- <radialGradient
- r="5.5"
- fy="722.19189"
- fx="1662.2664"
- cy="722.19189"
- cx="1662.2664"
- gradientTransform="matrix(0.1378252,-0.2988982,2.5269117,1.1651875,-1689.2674,-563.64056)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient12215"
- xlink:href="#linearGradient19425"
- inkscape:collect="always" />
- <linearGradient
- y2="827.32849"
- x2="1979.2772"
- y1="827.77124"
- x1="1984.3658"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,-1256.7473,-918.72044)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient12217"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="152.46707"
- x2="262.24991"
- y1="147.38998"
- x1="257.24991"
- gradientTransform="matrix(1.2000005,0,0,1.1997014,-125.70008,-191.68873)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient12305"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="153.8233"
- x2="264.16571"
- y1="147.87068"
- x1="258.08322"
- gradientTransform="matrix(1.2000005,0,0,1.1997014,-125.70008,-191.68873)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient12307"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="152.24998"
- x2="-80"
- y1="151"
- x1="-80"
- gradientTransform="translate(360,-161.99999)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient13046"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="152.24998"
- x2="-80"
- y1="151"
- x1="-80"
- gradientTransform="translate(360,-145.93749)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient13056"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="143.58749"
- x2="451.98389"
- y1="133.98936"
- x1="443.86667"
- gradientTransform="translate(-636.98388,52.01562)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14167"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="133.00301"
- x2="453.61005"
- y1="135.76678"
- x1="456.03769"
- gradientTransform="translate(-635.98388,53.01562)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14169"
- xlink:href="#linearGradient4138"
- inkscape:collect="always" />
- <linearGradient
- y2="138.7879"
- x2="453.24457"
- y1="136.18045"
- x1="449.14645"
- gradientTransform="translate(-636.98388,52.01562)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14171"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="133.62801"
- x2="454.31345"
- y1="135.76678"
- x1="456.03769"
- gradientTransform="translate(-635.98388,53.01562)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14173"
- xlink:href="#linearGradient4138"
- inkscape:collect="always" />
- <linearGradient
- y2="113.20281"
- x2="126.67323"
- y1="120.62622"
- x1="133.42287"
- gradientUnits="userSpaceOnUse"
- id="linearGradient13112"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="129.62753"
- x2="144.64095"
- y1="106.19939"
- x1="120.77391"
- gradientUnits="userSpaceOnUse"
- id="linearGradient13114"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="435.32159"
- x2="211.99998"
- y1="435.59741"
- x1="212"
- gradientTransform="matrix(0.8289081,0,0,2.1560411,236.27148,-864.45588)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16027"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="440.57812"
- x2="238.53125"
- y1="440.51562"
- x1="229.6875"
- gradientTransform="matrix(1.1035181,0,0,1,158.18497,-359.77344)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16031"
- xlink:href="#linearGradient23647"
- inkscape:collect="always" />
- <radialGradient
- r="6.7191267"
- fy="441.84744"
- fx="224.32494"
- cy="441.84744"
- cx="224.32494"
- gradientTransform="matrix(1.8126517,-0.04317018,0.04642643,1.9485655,-18.817545,-774.28453)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient16034"
- xlink:href="#linearGradient23390"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(0.9803611,0,0,2.1560411,204.16345,-864.45588)"
- y2="436.07974"
- x2="211.99998"
- y1="435.7319"
- x1="211.99998"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16036"
- xlink:href="#linearGradient30208"
- inkscape:collect="always" />
- <linearGradient
- y2="448.88205"
- x2="238.87605"
- y1="439.75"
- x1="221.96414"
- gradientTransform="translate(182,-359.75)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16039"
- xlink:href="#linearGradient23647"
- inkscape:collect="always" />
- <linearGradient
- y2="252.63284"
- x2="-45.689278"
- y1="252.69086"
- x1="-4.9152389"
- gradientTransform="matrix(-1.0041772,0,0,0.9688607,-81.584854,117.13687)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17337"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="60.125"
- x2="117"
- y1="53.875"
- x1="107.96875"
- gradientTransform="matrix(0.9993234,0,0,1.0050357,-171.92846,305.72314)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17339"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="256.70349"
- x2="44.522621"
- y1="201"
- x1="-12.839478"
- gradientTransform="matrix(1.0008786,0,0,1.081555,-21.021535,-187.45087)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17656"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="81"
- x2="15"
- y1="76"
- x1="9.6310225"
- gradientTransform="matrix(1.099576,0,0,1.0999923,190.46996,204.85062)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17658"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="251.42462"
- x2="-46.452946"
- y1="250.87607"
- x1="-5.6700387"
- gradientTransform="matrix(-1.0041772,0,0,0.9688607,370.43125,-83.863716)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17712"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="60.125"
- x2="117"
- y1="50.742527"
- x1="102.61966"
- gradientTransform="matrix(0.9993234,0,0,1.0050357,280.08766,104.72255)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17714"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="105.64391"
- x2="151.40744"
- y1="104.61366"
- x1="150.4086"
- gradientTransform="matrix(0.8193413,0,0,0.8193419,-388.72692,-564.02452)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient12655"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(0.8193413,0,0,0.8193419,141.28585,391.96271)"
- y2="105.64391"
- x2="151.40744"
- y1="104.61366"
- x1="150.4086"
- gradientUnits="userSpaceOnUse"
- id="linearGradient12658"
- xlink:href="#linearGradient30208"
- inkscape:collect="always" />
- <linearGradient
- y2="105.64391"
- x2="151.40744"
- y1="104.61366"
- x1="150.4086"
- gradientTransform="matrix(0.8193413,0,0,0.8193419,141.28585,391.96271)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient13511"
- xlink:href="#linearGradient30208"
- inkscape:collect="always" />
- <linearGradient
- y2="105.64391"
- x2="151.40744"
- y1="104.61366"
- x1="150.4086"
- gradientTransform="matrix(0.8193413,0,0,0.8193419,-388.72692,-564.02452)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient13513"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="37.044456"
- x2="331.74063"
- y1="33.94022"
- x1="328.95557"
- gradientUnits="userSpaceOnUse"
- id="linearGradient13527"
- xlink:href="#linearGradient30208"
- inkscape:collect="always" />
- <linearGradient
- y2="36.739578"
- x2="331.44778"
- y1="33.505165"
- x1="328.38852"
- gradientUnits="userSpaceOnUse"
- id="linearGradient13529"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="115.99998"
- x2="88.983887"
- y1="127.99998"
- x1="97.983887"
- gradientTransform="translate(68.016116,127.00002)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14568"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="125.83332"
- x2="89.207298"
- y1="122.13319"
- x1="94.485573"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14570"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="123.83599"
- x2="94.011101"
- y1="127.88263"
- x1="88.560204"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14572"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="224.99274"
- x2="-174.18907"
- y1="245"
- x1="-162.89217"
- id="linearGradient13699"
- xlink:href="#linearGradient47130"
- inkscape:collect="always" />
- <linearGradient
- y2="53.875874"
- x2="11.472005"
- y1="57.827747"
- x1="13.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient26282"
- xlink:href="#linearGradient13998"
- inkscape:collect="always" />
- <linearGradient
- y2="487.60382"
- x2="-26.642899"
- y1="501.96539"
- x1="-18.600719"
- gradientUnits="userSpaceOnUse"
- id="linearGradient26284"
- xlink:href="#linearGradient13998"
- inkscape:collect="always" />
- <linearGradient
- y2="57.750687"
- x2="13.5"
- y1="60.637787"
- x1="15.027407"
- gradientUnits="userSpaceOnUse"
- id="linearGradient26286"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="500"
- x2="-22.25"
- y1="490.70178"
- x1="-32.067383"
- gradientTransform="translate(0.03018343,0.1408617)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient26288"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="245.625"
- x2="92.8125"
- y1="241"
- x1="87.03125"
- gradientTransform="translate(218.01612,129)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14198"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="30.743095"
- x2="277.68143"
- y1="-4.4418921"
- x1="246.89435"
- gradientTransform="matrix(0.888889,0,0,1,61.53822,346.48241)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14204"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="94.239906"
- x2="68.0271"
- y1="108.47212"
- x1="80.60067"
- gradientTransform="matrix(0.9166695,0,0,0.9203753,-10.025729,345.78566)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15195"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="107.18619"
- x2="79.355118"
- y1="97.5"
- x1="70.55275"
- gradientTransform="translate(-15.983875,338)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15209"
- xlink:href="#linearGradient71814"
- inkscape:collect="always" />
- <linearGradient
- y2="112.03586"
- x2="86.00116"
- y1="88.058716"
- x1="61.465469"
- gradientTransform="matrix(0.9998599,0,0,0.9960071,-15.972985,338.41149)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15211"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="103.11092"
- x2="135.45256"
- y1="68.783279"
- x1="101.21339"
- gradientTransform="matrix(0.9999519,0,0,0.9998051,-33.993941,254.01926)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15363"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="105.27895"
- x2="59.057678"
- y1="93.805557"
- x1="47.655102"
- gradientTransform="matrix(1.1004102,0,0,1.0993832,40.331334,244.81698)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15365"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="247.3784"
- x2="41.654194"
- y1="246.97107"
- x1="12.330792"
- gradientTransform="matrix(-1.032977,0,0,1,128.82015,107.77516)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15367"
- xlink:href="#linearGradient10585"
- inkscape:collect="always" />
- <linearGradient
- y2="223.69542"
- x2="-171.01999"
- y1="313.87549"
- x1="-132.24858"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15383"
- xlink:href="#linearGradient18207"
- inkscape:collect="always" />
- <linearGradient
- y2="81.14637"
- x2="110.48556"
- y1="101.22832"
- x1="86.452194"
- gradientTransform="translate(1.691866,0.00341)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14377"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="500"
- x2="54.8125"
- y1="500"
- x1="108"
- gradientTransform="translate(42)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16638"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="498.48148"
- x2="26.561054"
- y1="501.74075"
- x1="85.874489"
- gradientTransform="translate(42)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16640"
- xlink:href="#linearGradient15809"
- inkscape:collect="always" />
- <linearGradient
- y2="501.58331"
- x2="76.885078"
- y1="504.67188"
- x1="80.768944"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16642"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="501.04794"
- x2="78.000008"
- y1="511.42972"
- x1="89.526657"
- gradientUnits="userSpaceOnUse"
- id="linearGradient16644"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="492.15359"
- fx="75.95578"
- cy="492.15359"
- cx="75.95578"
- gradientTransform="matrix(0.3949409,0.3949425,-0.4243709,0.4254619,300.60762,256.85923)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient16646"
- xlink:href="#linearGradient14262"
- inkscape:collect="always" />
- <radialGradient
- r="2.9089756"
- fy="503.81497"
- fx="79.959885"
- cy="503.81497"
- cx="79.959885"
- gradientTransform="matrix(1.4624192,0,0,1.4467089,-36.975824,-224.99718)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient16648"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="499.99969"
- fx="74.518959"
- cy="499.99969"
- cx="74.518959"
- gradientTransform="matrix(0.8886193,0.8021825,-0.8051059,0.8972684,411.80247,-8.668512)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient16650"
- xlink:href="#linearGradient14262"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="499.87418"
- fx="75.054749"
- cy="499.87418"
- cx="75.054749"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient32447"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <linearGradient
- y2="111.74544"
- x2="446.73828"
- y1="105.03784"
- x1="441.48248"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30231"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="84.928581"
- x2="425.92511"
- y1="112.86145"
- x1="445.37457"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30233"
- xlink:href="#linearGradient24101"
- inkscape:collect="always" />
- <linearGradient
- y2="110.93529"
- x2="446.00906"
- y1="106.0996"
- x1="440.68439"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30235"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="110.27587"
- x2="445.36435"
- y1="105.74502"
- x1="440.34833"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30237"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="110.27587"
- x2="445.36435"
- y1="104.97093"
- x1="440.7211"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30239"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-36.625011"
- x2="414.99771"
- y1="-35"
- x1="414.99771"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30241"
- xlink:href="#linearGradient23302"
- inkscape:collect="always" />
- <linearGradient
- y2="-37.718761"
- x2="415.94211"
- y1="-34"
- x1="416.00461"
- gradientTransform="translate(-0.004608)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30243"
- xlink:href="#linearGradient24081"
- inkscape:collect="always" />
- <linearGradient
- y2="-37.5"
- x2="416.5"
- y1="-29.933779"
- x1="416.5"
- gradientTransform="translate(-0.004608)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30245"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="-39.140816"
- x2="416.46497"
- y1="-34.342831"
- x1="416.41162"
- gradientTransform="translate(-1)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30247"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="-34.707108"
- x2="413.49658"
- y1="-40.99012"
- x1="409.00003"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30249"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="100.6615"
- x2="436.76331"
- y1="112.72269"
- x1="446.05634"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30326"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="111.74544"
- x2="446.73828"
- y1="103.53646"
- x1="440.03735"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30328"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="94.07222"
- x2="432.36887"
- y1="114.61743"
- x1="447.06949"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30330"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="110.93529"
- x2="446.00906"
- y1="103.46223"
- x1="438.92477"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30332"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="110.27587"
- x2="445.36435"
- y1="104.06953"
- x1="439.0434"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30334"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="110.27587"
- x2="445.36435"
- y1="104.0401"
- x1="439.04333"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30336"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-36.25"
- x2="415"
- y1="-33.99012"
- x1="415.00003"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30338"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-37.520515"
- x2="415.45193"
- y1="-31.506163"
- x1="415.41223"
- gradientTransform="translate(-0.004608)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30340"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-37.5"
- x2="416.5"
- y1="-29.933779"
- x1="416.5"
- gradientTransform="translate(-0.004608)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30342"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="-39.140816"
- x2="416.46497"
- y1="-33.8125"
- x1="416.5"
- gradientTransform="translate(-1)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30344"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="-34.707108"
- x2="413.49658"
- y1="-40.99012"
- x1="409.00003"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30346"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-40.000008"
- x2="408.75"
- y1="-35.483223"
- x1="408.75"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30348"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="100.6615"
- x2="436.76331"
- y1="112.72269"
- x1="446.05634"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30394"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="111.74544"
- x2="446.73828"
- y1="103.53646"
- x1="440.03735"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30396"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="94.07222"
- x2="432.36887"
- y1="114.61743"
- x1="447.06949"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30398"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="110.93529"
- x2="446.00906"
- y1="103.46223"
- x1="438.92477"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30400"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="110.27587"
- x2="445.36435"
- y1="104.06953"
- x1="439.0434"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30402"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="110.27587"
- x2="445.36435"
- y1="104.0401"
- x1="439.04333"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30404"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-36.25"
- x2="415"
- y1="-33.99012"
- x1="415.00003"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30406"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-37.520515"
- x2="415.45193"
- y1="-31.506163"
- x1="415.41223"
- gradientTransform="translate(-0.004608)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30408"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-37.5"
- x2="416.5"
- y1="-29.933779"
- x1="416.5"
- gradientTransform="translate(-0.004608)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30410"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="-39.140816"
- x2="416.46497"
- y1="-33.8125"
- x1="416.5"
- gradientTransform="translate(-1)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30412"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="-34.707108"
- x2="413.49658"
- y1="-40.99012"
- x1="409.00003"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30414"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-40.000008"
- x2="408.75"
- y1="-35.483223"
- x1="408.75"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30416"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="57.261913"
- x2="347.91187"
- y1="32.007874"
- x1="326.51352"
- gradientTransform="matrix(1.081988,0,0,1.0833333,-394.58897,440.54169)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17429"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="38.161732"
- x2="330.87869"
- y1="22.7787"
- x1="317.30908"
- gradientTransform="matrix(1.0983862,0,0,1.0999999,-400.00857,439.95001)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17431"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="248.37102"
- x2="35.029804"
- y1="189.20862"
- x1="27.405855"
- gradientTransform="matrix(0.8461524,0,0,0.9230835,365.8517,-147.63686)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18682"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="translate(359.05264,-81.98142)"
- y2="168"
- x2="29.972469"
- y1="164"
- x1="29.972469"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18690"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="251.99998"
- x2="30.435225"
- y1="202.99998"
- x1="30.435225"
- gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18752"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(1,0,0,1.2222204,0,-15.888744)"
- y2="88"
- x2="16.733877"
- y1="71.51989"
- x1="5.9836898"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18756"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="237.9342"
- x2="32.267426"
- y1="264.90152"
- x1="7.9951181"
- gradientTransform="matrix(0.6923077,0,0,-0.6923079,29.049874,351.11545)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18779"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="84.217026"
- x2="-55.844753"
- y1="77.808868"
- x1="-55.936718"
- gradientTransform="translate(-122.98388,276)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18823"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="252.42851"
- x2="29.142912"
- y1="161.42842"
- x1="29.142912"
- gradientTransform="matrix(0.5384613,0,0,0.538461,-189.69233,224.07704)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18831"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="252.4285"
- x2="29.871567"
- y1="153.99983"
- x1="29.871567"
- gradientTransform="matrix(0.462416,0,0,0.538461,-193.81309,224.07705)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18841"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="259.08319"
- x2="29.871567"
- y1="174.58366"
- x1="29.871567"
- gradientTransform="matrix(0.462416,0,0,0.461541,-193.81309,236.42243)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18846"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="84.217026"
- x2="-55.844753"
- y1="77.808868"
- x1="-55.936718"
- gradientTransform="matrix(1.2500001,0,0,2.2000001,-102.35484,177)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18854"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="84.217026"
- x2="-55.844753"
- y1="77.808868"
- x1="-55.936718"
- gradientTransform="matrix(1,0,0,0.8000001,-122.98388,285.5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18858"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="84.6875"
- x2="-54.766121"
- y1="74.0625"
- x1="-60.266121"
- gradientTransform="matrix(2.0000001,0,0,1.6000003,163.54205,53.499972)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18862"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="411.9375"
- x2="-44.983891"
- y1="364"
- x1="-88.0625"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32725"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="94.239906"
- x2="68.0271"
- y1="108.47212"
- x1="80.60067"
- gradientTransform="matrix(0.9166695,0,0,0.9203753,-117.02574,313.78567)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32727"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="121.709"
- x2="89.770271"
- y1="88.999977"
- x1="61.983898"
- gradientTransform="matrix(0.6666675,0,0,0.6666633,-101.32265,336.66698)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32729"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <linearGradient
- y2="112.03586"
- x2="86.00116"
- y1="88.058716"
- x1="61.465469"
- gradientTransform="matrix(0.9998599,0,0,0.9960071,-122.97299,306.4115)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32731"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="60.463093"
- x2="352.03485"
- y1="33.927608"
- x1="326.72092"
- gradientTransform="matrix(1.081988,0,0,1.0833333,-123.05997,-52.467545)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32749"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="27"
- x2="-21.988398"
- y1="1.9796312"
- x1="-46.417774"
- gradientTransform="translate(-15.983875,338)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32751"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="39.250004"
- x2="333.96365"
- y1="28.882492"
- x1="324.13901"
- gradientTransform="matrix(1.0983862,0,0,1.0999999,-128.47957,-53.059225)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32753"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="452.20007"
- x2="-42.377892"
- y1="442.6875"
- x1="-51.6875"
- gradientTransform="translate(18)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17135"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="164.34546"
- x2="32.679554"
- y1="160.10768"
- x1="28.322077"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17177"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="5"
- fy="81.592964"
- fx="4.351675"
- cy="81.592964"
- cx="4.351675"
- gradientTransform="matrix(-6.8461644e-7,-1.8,1.1087755,0.00352366,-193.46828,187.54551)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient17179"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <radialGradient
- r="3.4000001"
- fy="-14.13948"
- fx="244.14325"
- cy="-14.13948"
- cx="244.14325"
- gradientTransform="matrix(1.5123107,0.9569981,-0.5028837,0.7946898,-131.57281,-236.33663)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient17181"
- xlink:href="#linearGradient18344"
- inkscape:collect="always" />
- <linearGradient
- y2="250"
- x2="29.352921"
- y1="199"
- x1="29.352921"
- gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17214"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="88"
- x2="16.733877"
- y1="71.51989"
- x1="5.9836898"
- gradientTransform="matrix(1,0,0,1.2222204,0,-15.888744)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17216"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="239.94608"
- x2="363.71661"
- y1="220.55545"
- x1="348.06064"
- gradientTransform="matrix(0.2859748,0,0,1,-272.87621,148)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17218"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="239.94608"
- x2="363.71661"
- y1="220.55545"
- x1="348.06064"
- gradientTransform="matrix(0.4289612,0,0,1,-326.93899,144.5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17220"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="250"
- x2="29.352921"
- y1="199"
- x1="29.352921"
- gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17222"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="88"
- x2="16.733877"
- y1="71.51989"
- x1="5.9836898"
- gradientTransform="matrix(1,0,0,1.2222204,0,-15.888744)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17224"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="239.94608"
- x2="363.71661"
- y1="220.55545"
- x1="348.06064"
- gradientTransform="matrix(1.2868892,0,0,1,-644.69395,148)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17226"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="249.62102"
- x2="36.247395"
- y1="223.47467"
- x1="9.5404434"
- gradientTransform="matrix(0.923955,0,0,1,-18.1369,-168)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17242"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="88"
- x2="16.733877"
- y1="71.51989"
- x1="5.9836898"
- gradientTransform="matrix(1,0,0,1.2222204,0,-15.888744)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient17244"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="57.84819"
- x2="120.79755"
- y1="49.547874"
- x1="103.65562"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18712"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-128.30418"
- x2="-78.787354"
- y1="-120.6127"
- x1="-88.73024"
- gradientTransform="matrix(-1.004219,0,0,0.980922,244.3928,19.4113)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18721"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="55.501457"
- x2="72.671516"
- y1="51.42366"
- x1="68.688324"
- gradientTransform="matrix(-1.004219,0,0,0.980922,222.97812,19.5574)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18728"
- xlink:href="#linearGradient31320"
- inkscape:collect="always" />
- <linearGradient
- y2="253.15045"
- x2="-5.4963508"
- y1="252.77303"
- x1="-26.207859"
- gradientTransform="matrix(-1.004219,0,0,0.980922,309.42934,-349.44584)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18765"
- xlink:href="#linearGradient14262"
- inkscape:collect="always" />
- <linearGradient
- y2="81.382545"
- x2="257.38638"
- y1="68.113258"
- x1="270.66064"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35488"
- xlink:href="#linearGradient34157"
- inkscape:collect="always" />
- <linearGradient
- y2="74.562462"
- x2="262.43726"
- y1="80.515495"
- x1="256.38586"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35490"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.66806"
- fx="75.217888"
- cy="500.66806"
- cx="75.217888"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient35492"
- xlink:href="#linearGradient29149"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.26215"
- fx="75.554794"
- cy="500.26215"
- cx="75.554794"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient35494"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <radialGradient
- gradientTransform="matrix(0.656002,0,0,0.656002,88.923481,27.003843)"
- gradientUnits="userSpaceOnUse"
- r="3.779551"
- fy="79.598709"
- fx="257.35309"
- cy="79.598709"
- cx="257.35309"
- id="radialGradient35967"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="585.28772"
- x2="159.13864"
- y1="601.5"
- x1="172.5625"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18478"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="35.75"
- x2="271.98389"
- y1="1.5973248"
- x1="249.64528"
- gradientTransform="translate(-97.983877,565.25)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18480"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="173.23431"
- x2="16.173666"
- y1="158.14117"
- x1="35.597904"
- gradientTransform="matrix(0.707654,0,0,0.707942,43.55464,-148.13985)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18739"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="334.86029"
- x2="-10.869003"
- y1="333.22653"
- x1="-12.264804"
- gradientTransform="matrix(0.5990464,-0.03583042,0.03242597,0.6546824,59.652868,-253.61658)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18741"
- xlink:href="#linearGradient4343"
- inkscape:collect="always" />
- <linearGradient
- y2="-182"
- x2="-189.34792"
- y1="-180.13821"
- x1="-190.37566"
- gradientTransform="translate(250.01612,148)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient18743"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="164.51399"
- x2="75.32457"
- y1="164.51399"
- x1="42.033173"
- gradientTransform="matrix(1,0,0,1.172144,-461,-82.584001)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient19045"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="157.54283"
- x2="85.577972"
- y1="157.11609"
- x1="118.1319"
- gradientTransform="translate(298,-53.749881)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient19047"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="-268.04858"
- x2="-279.44821"
- y1="-274.23453"
- x1="-285.65732"
- gradientTransform="matrix(1.3333334,0,0,0.8333334,767.51613,327.08335)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient19049"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-27.882322"
- x2="4.952816"
- y1="-33.408295"
- x1="-0.78523314"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35583"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-29.550003"
- x2="3.1666665"
- y1="-33.408295"
- x1="-0.78523314"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35585"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-29.488832"
- x2="2.6932251"
- y1="-35.5"
- x1="-3.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35587"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-32.351803"
- x2="4.8398785e-016"
- y1="-29.678047"
- x1="4.9341426"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35589"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="-28.597046"
- x2="4.2000003"
- y1="-32.317398"
- x1="0.5079475"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35591"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-36.441402"
- x2="-4.375"
- y1="-28.1"
- x1="2.8144052"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35593"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <linearGradient
- y2="-32"
- x2="1.1666667"
- y1="-35.5"
- x1="-2.7708333"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35595"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="176.41806"
- x2="10.490564"
- y1="158.14117"
- x1="35.597904"
- gradientTransform="matrix(0.707654,0,0,0.707942,-206.46148,-296.13985)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35740"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="-35"
- x2="40"
- y1="-23.721956"
- x1="58.060974"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35742"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-33.59375"
- x2="41.099998"
- y1="-28.59375"
- x1="46.1875"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35744"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="-33.939339"
- x2="43.883884"
- y1="-32"
- x1="46"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35746"
- xlink:href="#linearGradient36116"
- inkscape:collect="always" />
- <linearGradient
- y2="-27"
- x2="43"
- y1="-29"
- x1="41"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35748"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-32.337086"
- x2="43.47097"
- y1="-27.071922"
- x1="48.662914"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35750"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="-28.640625"
- x2="41.200001"
- y1="-30.799999"
- x1="39.200001"
- gradientTransform="translate(6.3,-4.7)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35752"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-28.765625"
- x2="41.325001"
- y1="-30.799999"
- x1="39.200001"
- gradientTransform="translate(5.315625,-3.75)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35754"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-29.799999"
- x2="40.012501"
- y1="-31.299999"
- x1="38.700001"
- gradientTransform="translate(3.3,0.3)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35756"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="translate(-0.75,4.75)"
- y2="-35.75"
- x2="40.75"
- y1="-24.696922"
- x1="51.912914"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35772"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="116.31882"
- x2="130.7244"
- y1="120.04005"
- x1="135.32962"
- gradientUnits="userSpaceOnUse"
- id="linearGradient51774"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="129.27184"
- x2="143.88347"
- y1="115.23484"
- x1="130.9015"
- gradientUnits="userSpaceOnUse"
- id="linearGradient51776"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="46.679707"
- x2="111.53449"
- y1="50.778313"
- x1="107.78085"
- gradientTransform="matrix(0.9993234,0,0,1.0050357,111.43697,300.37199)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient51804"
- xlink:href="#linearGradient8864"
- inkscape:collect="always" />
- <linearGradient
- y2="51.021076"
- x2="112.87534"
- y1="51.021076"
- x1="115.37703"
- gradientTransform="matrix(0.9993234,0,0,1.0050357,111.55698,300.497)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient51806"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="50.963791"
- x2="108.07208"
- y1="50.963791"
- x1="110.57378"
- gradientTransform="matrix(0.9993234,0,0,1.0050357,111.35699,300.55457)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient51808"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="237.27565"
- x2="0.92051411"
- y1="241.78653"
- x1="-13.691219"
- gradientTransform="matrix(0.5192341,-0.5192341,0.5184617,0.5184617,100.36783,218.31526)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient51810"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="240.68927"
- x2="-2.9318311"
- y1="249.96617"
- x1="-9.0782614"
- gradientTransform="matrix(0.5192341,-0.5192341,0.5184617,0.5184617,100.13133,218.33837)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient51812"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="248.125"
- x2="-8.5254431"
- y1="251.51265"
- x1="-5.3499999"
- gradientTransform="translate(439.89375,-187.79999)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient68937"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="242.8"
- x2="-13.091064"
- y1="245.89999"
- x1="-10.35"
- gradientTransform="translate(439.89375,-187.79999)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient68939"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="244.11874"
- x2="-15.758821"
- y1="240.10526"
- x1="-41.065678"
- gradientUnits="userSpaceOnUse"
- id="linearGradient68941"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="246.7774"
- x2="-7.0786314"
- y1="237.9574"
- x1="-10.991813"
- gradientTransform="translate(440.2082,-188.0039)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient68943"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="251.35759"
- x2="-14.193665"
- y1="244.08765"
- x1="-5.1338587"
- gradientTransform="translate(439.9582,-188.0039)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient68945"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="245.68124"
- x2="-3.321322"
- y1="247.38559"
- x1="-15.6"
- gradientUnits="userSpaceOnUse"
- id="linearGradient68947"
- xlink:href="#linearGradient8864"
- inkscape:collect="always" />
- <linearGradient
- y2="248.125"
- x2="-8.7065439"
- y1="251.51265"
- x1="-5.3499999"
- gradientUnits="userSpaceOnUse"
- id="linearGradient68949"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="242.81946"
- x2="-13.125"
- y1="245.89999"
- x1="-10.35"
- gradientUnits="userSpaceOnUse"
- id="linearGradient68951"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="237.27565"
- x2="0.92051411"
- y1="240.79787"
- x1="-12.538609"
- gradientTransform="translate(0.25,0.2058042)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient68953"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="239.86711"
- x2="-1.7751017"
- y1="247.4906"
- x1="-7.20822"
- gradientUnits="userSpaceOnUse"
- id="linearGradient68955"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="47.176472"
- x2="582"
- y1="49.294117"
- x1="582"
- gradientTransform="matrix(1.5466301,0,0,1.6489946,-293.01107,-16.485383)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient69009"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="94"
- x2="247"
- y1="99"
- x1="247"
- gradientTransform="translate(12.999999,359)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient20269"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="94.440376"
- x2="245.80791"
- y1="106.28436"
- x1="245.63066"
- gradientTransform="translate(15.081669,359)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient20275"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="460.5"
- x2="263.5"
- y1="455.25"
- x1="263.5"
- id="linearGradient20283"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(1,0,0,0.6,-5,182.8)"
- y2="460.6622"
- x2="264"
- y1="452"
- x1="264"
- gradientUnits="userSpaceOnUse"
- id="linearGradient20303"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="459"
- x2="256"
- y1="462"
- x1="268"
- id="linearGradient20309"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="358.85715"
- x2="772"
- y1="354.28479"
- x1="771.0965"
- gradientTransform="matrix(1,0,0,1.1666667,-737,357.33333)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23595"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient39155">
- <stop
- style="stop-color:white;stop-opacity:1;"
- offset="0"
- id="stop39157" />
- <stop
- style="stop-color:#dadada;stop-opacity:1;"
- offset="1"
- id="stop39159" />
- </linearGradient>
- <linearGradient
- y2="56.357628"
- x2="121.22078"
- y1="53.227627"
- x1="104.90227"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38718"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="341"
- x2="-49"
- y1="342.0625"
- x1="-56.5"
- gradientTransform="translate(207,-246.99988)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38721"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="77"
- x2="177"
- y1="71"
- x1="171"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39281"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="76.182281"
- x2="176.40117"
- y1="74.972061"
- x1="175.17659"
- gradientTransform="matrix(1.1944456,0,0,1.2000039,-34.222431,-14.950295)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39283"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="76.210785"
- x2="176.15442"
- y1="64.53186"
- x1="165.19363"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39285"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="75.947906"
- x2="176.84593"
- y1="69.838829"
- x1="172.30418"
- gradientTransform="matrix(1.1718933,0,0,1.127086,-30.219387,-9.3173845)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39287"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="77"
- x2="177"
- y1="70"
- x1="171"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39289"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="75.947906"
- x2="176.84593"
- y1="74.125008"
- x1="175.1628"
- gradientTransform="matrix(1.1718933,0,0,1.127086,-30.219387,-9.3173845)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39291"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="77"
- x2="177"
- y1="70"
- x1="171"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39293"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="75.947906"
- x2="176.84593"
- y1="74.125008"
- x1="175.1628"
- gradientTransform="matrix(1.1718933,0,0,1.127086,-30.219387,-9.3173845)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39295"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="61.720783"
- x2="117.12428"
- y1="53.227627"
- x1="104.90227"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39008"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="348"
- x2="-56.5"
- y1="340.32199"
- x1="-56.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39010"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="329.26965"
- x2="-47.214466"
- y1="329.06256"
- x1="-56.8125"
- gradientTransform="translate(0,13)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39012"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="61.720783"
- x2="117.12428"
- y1="53.227627"
- x1="104.90227"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39014"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="348"
- x2="-56.5"
- y1="340.32199"
- x1="-56.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39016"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="329.26965"
- x2="-47.214466"
- y1="329.06256"
- x1="-56.8125"
- gradientTransform="translate(0,13)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39018"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="61.720783"
- x2="117.12428"
- y1="53.227627"
- x1="104.90227"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39020"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="348"
- x2="-56.5"
- y1="340.32199"
- x1="-56.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39022"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="126.37626"
- x2="273.9993"
- y1="108.02418"
- x1="260.67468"
- gradientTransform="matrix(1,0,0,0.7972867,61.99991,2.2419)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39024"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="430.25"
- x2="1153.0486"
- y1="448.375"
- x1="1127.7983"
- id="linearGradient39026"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="117.10313"
- x2="130.10634"
- y1="134.65511"
- x1="146.82516"
- gradientUnits="userSpaceOnUse"
- id="linearGradient57417"
- xlink:href="#linearGradient14418"
- inkscape:collect="always" />
- <linearGradient
- y2="118.34238"
- x2="131.71249"
- y1="126.3454"
- x1="139.37782"
- gradientUnits="userSpaceOnUse"
- id="linearGradient57419"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="119.54019"
- x2="132.46898"
- y1="110.86718"
- x1="125.01582"
- gradientUnits="userSpaceOnUse"
- id="linearGradient57421"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="126.72997"
- x2="140.72693"
- y1="112.12571"
- x1="127.60629"
- gradientUnits="userSpaceOnUse"
- id="linearGradient57423"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="391.5"
- x2="73.5"
- y1="393.25"
- x1="75.25"
- gradientTransform="translate(258.00306,-231.00101)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient57454"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="12.551482"
- x2="167.59578"
- y1="12.918247"
- x1="174.99828"
- gradientTransform="matrix(1.728189,0,0,1.727271,-357.88848,243.63713)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22891"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="8.1183796"
- x2="169.47711"
- y1="10.424105"
- x1="169.47711"
- gradientTransform="matrix(1.728189,0,0,1.727271,-357.88848,243.63713)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22893"
- xlink:href="#linearGradient30124"
- inkscape:collect="always" />
- <linearGradient
- y2="7.9604731"
- x2="169.4877"
- y1="10.306772"
- x1="169.41847"
- gradientTransform="matrix(-1.728189,0,0,1.727271,237.88848,243.63713)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22895"
- xlink:href="#linearGradient30124"
- inkscape:collect="always" />
- <linearGradient
- y2="19.34374"
- x2="160.31258"
- y1="11.99999"
- x1="145.00008"
- gradientTransform="translate(-215.00008,249.00001)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22897"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="19.12499"
- x2="171.37508"
- y1="10.924165"
- x1="149.00008"
- gradientTransform="translate(-215.00008,249.00001)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22899"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="265.53439"
- x2="-56"
- y1="263"
- x1="-68.25"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22901"
- xlink:href="#linearGradient32842"
- inkscape:collect="always" />
- <linearGradient
- y2="264.75"
- x2="-57"
- y1="264"
- x1="-66"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22903"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="12.36799"
- x2="169.47711"
- y1="12.946938"
- x1="176.42079"
- gradientTransform="matrix(1.728189,0,0,1.727271,-357.88848,243.63713)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22905"
- xlink:href="#linearGradient32998"
- inkscape:collect="always" />
- <linearGradient
- y2="94.440376"
- x2="245.80791"
- y1="106.28436"
- x1="245.63066"
- gradientTransform="translate(15.081669,359)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22933"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="459"
- x2="256"
- y1="462"
- x1="268"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22935"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="94"
- x2="247"
- y1="99"
- x1="247"
- gradientTransform="translate(12.999999,359)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22937"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="460.5"
- x2="263.5"
- y1="455.25"
- x1="263.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22939"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="460.6622"
- x2="264"
- y1="452"
- x1="264"
- gradientTransform="matrix(1,0,0,0.6,-5,182.8)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22941"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="409"
- x2="-191"
- y1="399.90625"
- x1="-197.84375"
- id="linearGradient22970"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="162.94037"
- x2="476.76578"
- y1="163.08553"
- x1="480.09564"
- gradientTransform="translate(-6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23241"
- xlink:href="#linearGradient19625"
- inkscape:collect="always" />
- <linearGradient
- y2="-218.00888"
- x2="134.30893"
- y1="-219.24783"
- x1="123.36729"
- gradientTransform="translate(342.00029,383.00889)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23243"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <radialGradient
- r="3.500145"
- fy="164.46814"
- fx="470.15939"
- cy="164.46814"
- cx="470.15939"
- gradientTransform="matrix(1.0982561,0,0,1.2662999,-45.858153,-42.45126)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient23245"
- xlink:href="#linearGradient12678"
- inkscape:collect="always" />
- <linearGradient
- y2="118.69846"
- x2="132.35237"
- y1="115.77483"
- x1="128.7561"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23247"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="124.69373"
- x2="138.30522"
- y1="111.48133"
- x1="127.30917"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23250"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="162.92206"
- x2="475.50031"
- y1="163.08553"
- x1="480.09564"
- gradientTransform="translate(-6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23445"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="-218.00888"
- x2="134.30893"
- y1="-219.24783"
- x1="123.36729"
- gradientTransform="translate(342.00029,383.00889)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23447"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="15.699567"
- x2="175.38158"
- y1="12.147777"
- x1="172.37032"
- gradientTransform="matrix(1.728189,0,0,1.727271,-142.8884,-5.3628832)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23531"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="19.99999"
- x2="158.41653"
- y1="16.845156"
- x1="155.82454"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23533"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="16.202652"
- x2="175.33569"
- y1="11.121979"
- x1="171.03941"
- gradientTransform="matrix(1.727201,9.075096e-6,0,1.728246,-147.7149,-10.37485)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40843"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="16.427906"
- x2="176.46956"
- y1="11.912162"
- x1="172.18394"
- gradientTransform="matrix(1.728189,0,0,1.727271,-142.8884,-5.3628832)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40845"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="19.99999"
- x2="159.00008"
- y1="16.99999"
- x1="156.00008"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40847"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="258.38593"
- x2="96.812675"
- y1="223.54628"
- x1="62.107086"
- gradientTransform="translate(-20,14)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40965"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="234.7775"
- x2="60.155113"
- y1="253.5"
- x1="79.04213"
- gradientTransform="translate(-21)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40967"
- xlink:href="#linearGradient32842"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="-111.15749"
- x2="204.01923"
- y1="-133.89581"
- x1="208.25"
- id="linearGradient24098"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="105.27895"
- x2="59.057678"
- y1="93.805557"
- x1="47.655102"
- gradientTransform="matrix(1.1000194,0,0,1.0998287,-4.3008215,-8.6726798)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23510"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="64.995972"
- x2="117.55341"
- y1="57.061836"
- x1="110.16959"
- gradientTransform="matrix(1.728189,0,0,1.727271,-142.53857,-4.802156)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23512"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="100.44998"
- x2="54.252415"
- y1="93.555946"
- x1="47.612946"
- gradientTransform="matrix(1.1000194,0,0,1.0998287,-4.3010161,-8.6726854)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23514"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="266.99997"
- x2="510"
- y1="275.27036"
- x1="468.07968"
- gradientTransform="translate(1,0.01738631)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23550"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="270.36874"
- x2="496.73859"
- y1="267.42996"
- x1="492.95264"
- gradientTransform="translate(1,3.959006e-5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23555"
- xlink:href="#linearGradient18105"
- inkscape:collect="always" />
- <linearGradient
- y2="55.747272"
- x2="103.18628"
- y1="52.264809"
- x1="116.75796"
- gradientTransform="matrix(0.9993234,0,0,1.0050357,404.07104,216.722)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23581"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="274"
- x2="477"
- y1="270.24997"
- x1="500.71924"
- gradientTransform="translate(1,-1.0000037)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23585"
- xlink:href="#linearGradient21327"
- inkscape:collect="always" />
- <radialGradient
- r="4.4262571"
- fy="375.96332"
- fx="412.10059"
- cy="375.96332"
- cx="412.10059"
- gradientTransform="matrix(0.5274943,0,0,0.7696585,194.81546,86.715119)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient23610"
- xlink:href="#linearGradient32842"
- inkscape:collect="always" />
- <radialGradient
- r="3.8798895"
- fy="52.367992"
- fx="409.55594"
- cy="52.367992"
- cx="409.55594"
- gradientTransform="matrix(1.0009003,-1.5278593,1.1592123,0.7594114,-59.938837,957.7287)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient23612"
- xlink:href="#linearGradient24343"
- inkscape:collect="always" />
- <linearGradient
- y2="101.25028"
- x2="56.524509"
- y1="93.555946"
- x1="47.612946"
- gradientTransform="matrix(1.1004102,0,0,1.0993832,461.68129,182.37748)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23562"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="58.354706"
- x2="106.20376"
- y1="58.869785"
- x1="115.45872"
- gradientTransform="matrix(1.728803,0,0,1.7265713,323.39462,186.24644)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23565"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="63.567348"
- x2="115.53827"
- y1="56.645538"
- x1="110.54202"
- gradientTransform="matrix(1.728803,0,0,1.7265713,347.39462,166.24644)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22847"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="105.27895"
- x2="59.057678"
- y1="93.805557"
- x1="47.655102"
- gradientTransform="matrix(0.2445337,0,0,1.5876961,523.20711,115.4619)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22849"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="105.98901"
- x2="34.276955"
- y1="100.66651"
- x1="29.506693"
- gradientTransform="matrix(1.1004102,0,0,1.0993832,503.28129,157.47747)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22851"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="61.720783"
- x2="117.12428"
- y1="53.227627"
- x1="104.90227"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24052"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="348"
- x2="-56.5"
- y1="340.32199"
- x1="-56.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24054"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="329.26965"
- x2="-47.214466"
- y1="329.06256"
- x1="-56.8125"
- gradientTransform="translate(0,13)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24056"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="translate(-259,202)"
- gradientUnits="userSpaceOnUse"
- y2="132.60213"
- x2="202.5"
- y1="143.84116"
- x1="202.5"
- id="linearGradient24066"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <radialGradient
- r="1.5"
- fy="14.5"
- fx="70.5"
- cy="14.5"
- cx="70.5"
- gradientTransform="matrix(1.050372,0,0,1.050372,-3.551238,-0.730396)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient23738"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="148.69533"
- x2="433.5"
- y1="148.90862"
- x1="445.5"
- gradientTransform="matrix(1,0,0,1.172144,59.49999,53.45766)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23750"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="158.24994"
- x2="91.499992"
- y1="158.24995"
- x1="113.71248"
- gradientTransform="matrix(0.6499984,0,0,0.5439483,434.02514,137.87435)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23752"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="-268.04858"
- x2="-279.44821"
- y1="-274.23453"
- x1="-285.65732"
- gradientTransform="matrix(1.0052083,0,0,0.5057472,778.49218,365.83334)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23754"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="164.13913"
- x2="32.928555"
- y1="160.18758"
- x1="29.200638"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23914"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="5"
- fy="81.275032"
- fx="11.708446"
- cy="81.275032"
- cx="11.708446"
- gradientTransform="matrix(0.02887268,-1.2550276,0.795821,0.01830762,8.763469,168.20647)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient23916"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <radialGradient
- r="5"
- fy="82.433929"
- fx="4.7455525"
- cy="82.433929"
- cx="4.7455525"
- gradientTransform="matrix(0.01269957,-0.9297674,1.1086869,0.01514236,-16.51473,165.70609)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient23918"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <linearGradient
- y2="152.24998"
- x2="-80"
- y1="151"
- x1="-80"
- gradientTransform="translate(383,-37.999994)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24460"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="152.24998"
- x2="-80"
- y1="151"
- x1="-80"
- gradientTransform="translate(360,-142.95536)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24470"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-22.846634"
- x2="134.08138"
- y1="-11.628862"
- x1="154.24324"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23971"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-23.945318"
- x2="132.29695"
- y1="-21.522242"
- x1="134.12642"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23973"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-24.343456"
- x2="131.69801"
- y1="-21.3074"
- x1="134.6615"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23975"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="-21"
- x2="135.25"
- y1="-18"
- x1="137.5"
- id="linearGradient24099"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="58.065113"
- x2="127.70434"
- y1="58.065113"
- x1="107.39532"
- gradientTransform="matrix(1.728189,0,0,1.727271,-142.53857,-4.802156)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24539"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="93.69249"
- x2="65.52562"
- y1="95.008034"
- x1="30.389694"
- gradientTransform="matrix(-1.1000194,0,0,1.0998287,110.29549,-8.6726854)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24541"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="162.85956"
- x2="476.68781"
- y1="163"
- x1="483.00034"
- gradientTransform="translate(-6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24543"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-218.00888"
- x2="134.30893"
- y1="-219.24783"
- x1="123.36729"
- gradientTransform="translate(342.00029,383.00889)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24545"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="155"
- x2="469.75034"
- y1="155"
- x1="475.00034"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24547"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="290.5249"
- x2="436.5"
- y1="290.49384"
- x1="442.81525"
- gradientTransform="translate(-6,-6e-5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24549"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="288.5"
- x2="407.3793"
- y1="288.5"
- x1="445.99902"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24551"
- xlink:href="#linearGradient18105"
- inkscape:collect="always" />
- <linearGradient
- y2="120.87388"
- x2="135.36497"
- y1="111.98244"
- x1="124.40742"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24112"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24114"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="244.70323"
- x2="308.82889"
- y1="243.23151"
- x1="302.84085"
- gradientTransform="translate(0,1)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24116"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="116.60553"
- x2="130.01318"
- y1="115.90587"
- x1="121.7408"
- gradientTransform="matrix(0.6879084,0,0,0.6879446,216.19282,166.82605)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24118"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="117.15551"
- x2="129.70906"
- y1="122.92034"
- x1="135.698"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24121"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="129.27184"
- x2="143.88347"
- y1="111.81818"
- x1="125.81818"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24123"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="23.410421"
- x2="180.11391"
- y1="4.5569806"
- x1="162.61801"
- gradientTransform="translate(-93.937441,254)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24189"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="translate(-94.937441,240)"
- y2="32.144764"
- x2="175.06059"
- y1="23.749996"
- x1="167.43744"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24192"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="19"
- x2="173.93744"
- y1="12.306217"
- x1="166.86487"
- gradientTransform="translate(-93.937441,254)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24209"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(1,0,0,-0.985055,75.000075,275.63418)"
- y2="9.0189686"
- x2="189.24992"
- y1="10.795519"
- x1="186.74992"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24268"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="154.24899"
- x2="264.99994"
- y1="148.24248"
- x1="258.08322"
- gradientTransform="matrix(1.2000005,0,0,1.1817719,-50.700005,86.809844)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24272"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="154.24899"
- x2="264.99994"
- y1="148.24248"
- x1="258.08322"
- gradientTransform="matrix(1.2000005,0,0,1.1817719,-50.700005,86.809844)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24277"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="277.4375"
- x2="-39.875"
- y1="268.76776"
- x1="-27.5"
- id="linearGradient24395"
- xlink:href="#linearGradient21327"
- inkscape:collect="always" />
- <linearGradient
- y2="55.86327"
- x2="402.30673"
- y1="52.77837"
- x1="409.45645"
- gradientTransform="matrix(-1,0,0,1,594,-42.40625)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41127"
- xlink:href="#linearGradient15893"
- inkscape:collect="always" />
- <linearGradient
- y2="12.942369"
- x2="192.75177"
- y1="8.0551176"
- x1="180.20316"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41129"
- xlink:href="#linearGradient27957"
- inkscape:collect="always" />
- <linearGradient
- y2="230.76723"
- x2="291.45029"
- y1="199.60616"
- x1="266.93381"
- gradientTransform="matrix(1,0,0,0.9846154,-138.98388,3.9846124)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41170"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="224.1875"
- x2="284.9375"
- y1="200.66605"
- x1="268.21783"
- gradientTransform="translate(0.01612278)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41172"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="2"
- fy="197"
- fx="269.99997"
- cy="197"
- cx="269.99997"
- gradientTransform="matrix(1.25,0,0,1.375,-66.483877,-73.5)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient41174"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="157.99994"
- x2="87.522514"
- y1="158.24995"
- x1="113.71248"
- gradientTransform="translate(274,-63.999901)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41963"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="230.76723"
- x2="291.45029"
- y1="199.60616"
- x1="266.93381"
- gradientTransform="matrix(1,0,0,0.9846154,-138.98388,3.9846124)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42069"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="2"
- fy="197"
- fx="269.99997"
- cy="197"
- cx="269.99997"
- gradientTransform="matrix(1.25,0,0,1.375,-66.483877,-73.5)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient42091"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="196.576"
- x2="265.70886"
- y1="215.3125"
- x1="276.39999"
- gradientTransform="translate(0.01612278)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42093"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <radialGradient
- r="2"
- fy="197"
- fx="269.99997"
- cy="197"
- cx="269.99997"
- gradientTransform="matrix(1.25,0,0,1.375,-66.483877,-73.5)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient42115"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="549"
- x2="212"
- y1="535"
- x1="206"
- gradientTransform="translate(60,-342)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42121"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="239.89455"
- x2="296.25"
- y1="193.93752"
- x1="263"
- gradientTransform="matrix(1,0,0,0.9846154,-138.98388,3.9846124)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42155"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="232"
- x2="290.98389"
- y1="195"
- x1="265.98389"
- gradientTransform="translate(0.01612278)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42290"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="2"
- fy="197"
- fx="269.99997"
- cy="197"
- cx="269.99997"
- gradientTransform="matrix(1.25,0,0,1.375,-66.483877,-73.5)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient42292"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="253.62515"
- x2="-57.772419"
- y1="253.01927"
- x1="1.6577729"
- gradientTransform="matrix(0.9819031,0,0,0.9481466,-88.271503,-83.584533)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40722"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="60.125"
- x2="116.99999"
- y1="57.374996"
- x1="107.84375"
- gradientTransform="matrix(-0.977157,0,0,0.9835482,0.06815071,100.43848)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40724"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="254.94975"
- x2="279.89563"
- y1="214.40446"
- x1="241.17908"
- gradientTransform="translate(0,13)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40734"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="247.27646"
- x2="73.932747"
- y1="230.81766"
- x1="49.543404"
- gradientTransform="matrix(0.6025789,0,0,0.668336,263.48819,85.675422)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40736"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="242"
- x2="308.97327"
- y1="239.03134"
- x1="305.12527"
- gradientTransform="matrix(0.9120445,0,0,1,25.749745,8.9261515)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40738"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="247.35141"
- x2="73.932762"
- y1="229.19724"
- x1="51.682816"
- gradientTransform="matrix(0.584271,0,0,0.661005,267.80323,78.438648)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40740"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="241.62509"
- x2="307.25021"
- y1="239.03134"
- x1="305.12527"
- gradientTransform="matrix(0.9103441,0,0,0.989031,29.299938,2.5312404)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40742"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="259.99347"
- x2="196.00264"
- y1="294.81082"
- x1="199.4335"
- gradientTransform="translate(15.997359,-17.993456)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40758"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="250.25"
- x2="207.81319"
- y1="249.22464"
- x1="207.19595"
- gradientTransform="matrix(0.7501745,0,0,1.0021005,51.339144,-0.5240716)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40760"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="250.25"
- x2="207.81319"
- y1="249.22464"
- x1="207.19595"
- gradientTransform="matrix(0.7501745,0,0,1.0021005,59.339161,-0.5240716)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40762"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="252.52081"
- x2="174.56255"
- y1="217.52046"
- x1="146.51619"
- gradientTransform="matrix(1.043478,0,0,0.956667,-7.152175,20.92167)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40788"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="251.40294"
- x2="96"
- y1="242.39062"
- x1="87.765625"
- gradientTransform="translate(81.000002,13.499998)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40790"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="249.15927"
- x2="170.71698"
- y1="237.25"
- x1="170.42908"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40792"
- xlink:href="#linearGradient18056"
- inkscape:collect="always" />
- <linearGradient
- y2="240.10249"
- x2="168.5"
- y1="249.55817"
- x1="168.5625"
- gradientTransform="translate(0,10)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40794"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="-2.5475447"
- x2="293.80472"
- y1="-16.946415"
- x1="279.38629"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40545"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="243.98439"
- x2="29.429007"
- y1="261.52924"
- x1="43.921535"
- gradientTransform="matrix(0.9230687,0,0,0.9230801,261.38476,-234.15464)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40547"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="411.78125"
- x2="388.78125"
- y1="410"
- x1="387"
- gradientTransform="translate(-1)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22249"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="412.45016"
- x2="389.14081"
- y1="409.84152"
- x1="386.88852"
- gradientTransform="translate(-1)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22251"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="411.88974"
- x2="388.86676"
- y1="409.86362"
- x1="387"
- gradientTransform="translate(-1)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22253"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="252.16492"
- x2="37.5"
- y1="209.97131"
- x1="-0.71355486"
- gradientTransform="matrix(-0.9230769,0,0,-0.9258123,59.615385,471.81593)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23775"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="604.11108"
- x2="77.111115"
- y1="599.20789"
- x1="72.698921"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23777"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="250.99995"
- x2="33.682159"
- y1="204.24995"
- x1="-7.445384"
- gradientTransform="matrix(0.923955,0,0,1,82.8792,399.00004)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23351"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="168.00002"
- x2="36.972481"
- y1="164"
- x1="29.972469"
- gradientTransform="translate(80.02752,483.00004)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23353"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="644"
- x2="111"
- y1="646"
- x1="113"
- gradientTransform="translate(-224,-1290)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23355"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="644.5"
- x2="111.5"
- y1="646"
- x1="113"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23357"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(0.89375,0,0,0.89375,20.29375,17.10625)"
- gradientUnits="userSpaceOnUse"
- y2="167.67831"
- x2="196.59441"
- y1="158.72728"
- x1="191"
- id="linearGradient23599"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="641.54156"
- x2="150.53571"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,-0.6363637,0.6315788,0,-191.68403,523.2955)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22692"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="641.54156"
- x2="150.53571"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(-0.6363637,0,0,-0.6315788,314.2955,837.68414)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22695"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="641.54156"
- x2="150.53571"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,0.6363637,-0.6315788,0,628.68411,331.70458)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22698"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="641.54156"
- x2="150.53571"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0.6363637,0,0,0.6315788,122.70458,17.31597)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22701"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="623.12494"
- x2="145.53571"
- y1="627.08325"
- x1="145.53571"
- gradientTransform="matrix(-0.6363637,0,0,-0.6315788,311.11368,825.05254)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22704"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.12494"
- x2="145.53571"
- y1="627.08325"
- x1="145.53571"
- gradientTransform="matrix(0,-0.6363637,0.6315788,0,-179.05245,520.11368)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22707"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.12494"
- x2="145.53571"
- y1="627.08325"
- x1="145.53571"
- gradientTransform="matrix(0,0.6363637,-0.6315788,0,616.05253,334.8864)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22711"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.12494"
- x2="145.53571"
- y1="627.08325"
- x1="145.53571"
- gradientTransform="matrix(0.6363637,0,0,0.6315788,125.8864,29.94755)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22715"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0,0.6357342,-0.636363,0,628.0905,358.45254)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23132"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(-0.636363,0,0,-0.6357342,320.09081,851.14655)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23134"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0,-0.6357342,0.636363,0,-173.09051,543.4512)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23136"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0.636363,0,0,0.6357342,134.90918,50.757191)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23138"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0.636363,0,0,0.6357342,131.72737,31.593709)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23140"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,0.6357342,-0.636363,0,640.81777,348.82507)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23142"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0.636363,0,0,-0.6357342,131.72737,857.41243)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23144"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,-0.6357342,0.636363,0,-185.81777,540.18107)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23147"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="rotate(90,276.5,573.5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23177"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="rotate(180,183,536)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23179"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="rotate(-90,89.5,498.5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23181"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="translate(75,-187)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23183"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="translate(70,-207)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23185"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="rotate(90,289,581)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23187"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(1,0,0,-1,70,1092)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23189"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="rotate(-90,82,511)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23191"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,-0.8181822,0.8181823,0,-304.90941,555.63645)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23231"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0.8181823,0,0,-0.8181822,103.36356,963.90937)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23235"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,0.8181822,-0.8181823,0,757.9094,309.36361)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23239"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0.8181823,0,0,0.8181822,103.36356,-98.909308)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23244"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0.8181823,0,0,0.8181822,107.45448,-82.54566)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23248"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0,-0.8181822,0.8181823,0,-288.54575,551.54554)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23251"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(-0.8181823,0,0,-0.8181822,345.54553,947.54573)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23254"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0,0.8181822,-0.8181823,0,741.54576,313.45452)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23257"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0,0.8181822,-0.8181823,0,741.54576,313.45452)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23563"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(-0.8181823,0,0,-0.8181822,345.54553,947.54573)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23566"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0,-0.8181822,0.8181823,0,-288.54575,551.54554)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23568"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0.8181823,0,0,0.8181822,107.45448,-82.54566)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23570"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0.8181823,0,0,0.8181822,103.36356,-98.909308)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23572"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,0.8181822,-0.8181823,0,757.9094,309.36361)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23574"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0.8181823,0,0,-0.8181822,103.36356,963.90937)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23576"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,-0.8181822,0.8181823,0,-304.90941,555.63645)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23578"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="rotate(90,276.5,573.5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23580"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="rotate(180,183,536)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23582"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="rotate(-90,89.5,498.5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23587"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="translate(75,-187)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23589"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="translate(70,-207)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23591"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="rotate(90,289,581)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23593"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(1,0,0,-1,70,1092)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23597"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="rotate(-90,82,511)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23600"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="623.12494"
- x2="145.53571"
- y1="627.08325"
- x1="145.53571"
- gradientTransform="matrix(0.6363637,0,0,0.6315788,125.8864,29.94755)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23602"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.12494"
- x2="145.53571"
- y1="627.08325"
- x1="145.53571"
- gradientTransform="matrix(0,0.6363637,-0.6315788,0,616.05253,334.8864)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23606"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.12494"
- x2="145.53571"
- y1="627.08325"
- x1="145.53571"
- gradientTransform="matrix(0,-0.6363637,0.6315788,0,-179.05245,520.11368)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23608"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.12494"
- x2="145.53571"
- y1="627.08325"
- x1="145.53571"
- gradientTransform="matrix(-0.6363637,0,0,-0.6315788,311.11368,825.05254)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23610"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="641.54156"
- x2="150.53571"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0.6363637,0,0,0.6315788,122.70458,17.31597)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23612"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="641.54156"
- x2="150.53571"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,0.6363637,-0.6315788,0,628.68411,331.70458)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23616"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="641.54156"
- x2="150.53571"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(-0.6363637,0,0,-0.6315788,314.2955,837.68414)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23618"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="641.54156"
- x2="150.53571"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,-0.6363637,0.6315788,0,-191.68403,523.2955)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23620"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0,0.6357342,-0.636363,0,628.0905,358.45254)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23622"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(-0.636363,0,0,-0.6357342,320.09081,851.14655)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23624"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0,-0.6357342,0.636363,0,-173.09051,543.4512)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23626"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0.636363,0,0,0.6357342,134.90918,50.757191)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23628"
- xlink:href="#linearGradient20324"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0.636363,0,0,0.6357342,131.72737,31.593709)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23630"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,0.6357342,-0.636363,0,640.81777,348.82507)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23632"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0.636363,0,0,-0.6357342,131.72737,857.41243)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23635"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,-0.6357342,0.636363,0,-185.81777,540.18107)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23637"
- xlink:href="#linearGradient37623"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0,0.8181822,-0.8181823,0,741.54576,313.45452)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23797"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(-0.8181823,0,0,-0.8181822,345.54553,947.54573)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23799"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0,-0.8181822,0.8181823,0,-288.54575,551.54554)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23801"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0.8181823,0,0,0.8181822,107.45448,-82.54566)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23803"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0.8181823,0,0,0.8181822,103.36356,-98.909308)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23805"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,0.8181822,-0.8181823,0,757.9094,309.36361)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23807"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0.8181823,0,0,-0.8181822,103.36356,963.90937)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23809"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,-0.8181822,0.8181823,0,-304.90941,555.63645)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23811"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="rotate(90,276.5,573.5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23813"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="rotate(180,183,536)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23815"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="rotate(-90,89.5,498.5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23817"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="translate(75,-187)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23819"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="translate(70,-207)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23821"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="rotate(90,289,581)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23823"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(1,0,0,-1,70,1092)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23825"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="rotate(-90,82,511)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23827"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="623.12494"
- x2="145.53571"
- y1="627.08325"
- x1="145.53571"
- gradientTransform="matrix(0.6363637,0,0,0.6315788,125.8864,29.94755)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23829"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="623.12494"
- x2="145.53571"
- y1="627.08325"
- x1="145.53571"
- gradientTransform="matrix(0,0.6363637,-0.6315788,0,616.05253,334.8864)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23831"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="623.12494"
- x2="145.53571"
- y1="627.08325"
- x1="145.53571"
- gradientTransform="matrix(0,-0.6363637,0.6315788,0,-179.05245,520.11368)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23833"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="623.12494"
- x2="145.53571"
- y1="627.08325"
- x1="145.53571"
- gradientTransform="matrix(-0.6363637,0,0,-0.6315788,311.11368,825.05254)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23835"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="641.54156"
- x2="150.53571"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0.6363637,0,0,0.6315788,122.70458,17.31597)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23837"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="641.54156"
- x2="150.53571"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,0.6363637,-0.6315788,0,628.68411,331.70458)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23839"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="641.54156"
- x2="150.53571"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(-0.6363637,0,0,-0.6315788,314.2955,837.68414)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23841"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="641.54156"
- x2="150.53571"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,-0.6363637,0.6315788,0,-191.68403,523.2955)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23843"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0,0.6357342,-0.636363,0,628.0905,358.45254)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23845"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(-0.636363,0,0,-0.6357342,320.09081,851.14655)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23847"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0,-0.6357342,0.636363,0,-173.09051,543.4512)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23849"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="623.5"
- x2="145.5"
- y1="627.5"
- x1="145.5"
- gradientTransform="matrix(0.636363,0,0,0.6357342,134.90918,50.757191)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23851"
- xlink:href="#linearGradient24632"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0.636363,0,0,0.6357342,131.72737,31.593709)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23853"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,0.6357342,-0.636363,0,640.81777,348.82507)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23856"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0.636363,0,0,-0.6357342,131.72737,857.41243)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23858"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="642"
- x2="150.5"
- y1="647.75"
- x1="150.5"
- gradientTransform="matrix(0,-0.6357342,0.636363,0,-185.81777,540.18107)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23860"
- xlink:href="#linearGradient24642"
- inkscape:collect="always" />
- <linearGradient
- y2="388"
- x2="273"
- y1="388"
- x1="258"
- gradientTransform="translate(-52.983883,-129)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42685"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="388"
- x2="273"
- y1="388"
- x1="259.75"
- gradientTransform="translate(-48.983883,-126)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42687"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="388"
- x2="279"
- y1="388"
- x1="258.52756"
- gradientTransform="translate(-54.000005,-120)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42689"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="388"
- x2="272"
- y1="388"
- x1="257.75"
- gradientTransform="translate(-46.000005,-117)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42691"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="101.15624"
- x2="34.095703"
- y1="100.99999"
- x1="29.4034"
- gradientTransform="translate(220,-20.00667)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22892"
- xlink:href="#linearGradient23705"
- inkscape:collect="always" />
- <linearGradient
- y2="95.252274"
- x2="250.5"
- y1="90.253998"
- x1="250.5"
- gradientTransform="matrix(2,0,0,0.7333333,-467,262.53823)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22917"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="332.10181"
- fx="135.14931"
- cy="332.10181"
- cx="135.14931"
- gradientTransform="matrix(2.4564959,0.09949388,-0.06177986,1.3917691,-283.96093,-143.81911)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient22922"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="101.14744"
- x2="35.166668"
- y1="90.504448"
- x1="27.166666"
- gradientTransform="matrix(0.8750002,0,0,0.83767,7.3124969,247.00379)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22928"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.20956"
- fx="75.53241"
- cy="500.20956"
- cx="75.53241"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient22950"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="74.072273"
- fx="262.67139"
- cy="74.072273"
- cx="262.67139"
- gradientTransform="matrix(0.6595012,0.7907318,-0.8990144,0.7498135,144.69896,-187.59854)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient22952"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="104.89799"
- x2="34.125"
- y1="88.642494"
- x1="20.125"
- gradientTransform="matrix(0.75,0,0,0.7516675,227.625,0.9640803)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22954"
- xlink:href="#linearGradient24168"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="333.05716"
- fx="140.33667"
- cy="333.05716"
- cx="140.33667"
- gradientTransform="matrix(2.3687636,0.09935874,-0.05957343,1.3898788,-272.60513,-143.17133)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient23727"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="101.15624"
- x2="34.095703"
- y1="100.99999"
- x1="29.4034"
- gradientTransform="translate(220,-20.00667)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23890"
- xlink:href="#linearGradient37925"
- inkscape:collect="always" />
- <linearGradient
- y2="104.89799"
- x2="34.125"
- y1="88.642494"
- x1="20.125"
- gradientTransform="matrix(0.75,0,0,0.7516675,227.625,0.9640803)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23892"
- xlink:href="#linearGradient22562"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="74.306007"
- fx="262.07156"
- cy="74.306007"
- cx="262.07156"
- gradientTransform="matrix(1.0553103,1.0606182,-1.2516598,1.280294,67.321819,-297.60493)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient23894"
- xlink:href="#linearGradient23906"
- inkscape:collect="always" />
- <linearGradient
- y2="101.14744"
- x2="35.166668"
- y1="90.504448"
- x1="27.166666"
- gradientTransform="matrix(0.8750002,0,0,0.83767,7.3124969,247.00379)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23896"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.20956"
- fx="75.53241"
- cy="500.20956"
- cx="75.53241"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient23898"
- xlink:href="#linearGradient14232"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="332.10181"
- fx="135.14931"
- cy="332.10181"
- cx="135.14931"
- gradientTransform="matrix(2.4564959,0.09949388,-0.06177986,1.3917691,-283.96093,-143.81911)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient23900"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="95.252274"
- x2="250.5"
- y1="90.253998"
- x1="250.5"
- gradientTransform="matrix(2,0,0,0.7333333,-467,262.53823)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23902"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="333.05716"
- fx="140.33667"
- cy="333.05716"
- cx="140.33667"
- gradientTransform="matrix(2.3687636,0.09935874,-0.05957343,1.3898788,-272.60513,-143.17133)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient23904"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="101.15624"
- x2="34.095703"
- y1="100.99999"
- x1="29.4034"
- gradientTransform="translate(220,-20.00667)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24090"
- xlink:href="#linearGradient42459"
- inkscape:collect="always" />
- <linearGradient
- y2="104.89799"
- x2="34.125"
- y1="88.642494"
- x1="20.125"
- gradientTransform="matrix(0.75,0,0,0.7516675,227.625,0.9640803)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24092"
- xlink:href="#linearGradient22562"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="74.441246"
- fx="263.21707"
- cy="74.441246"
- cx="263.21707"
- gradientTransform="matrix(0.6595012,0.7907318,-0.8990144,0.7498135,144.69896,-187.59854)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient24094"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="101.14744"
- x2="35.166668"
- y1="90.504448"
- x1="27.166666"
- gradientTransform="matrix(0.8750002,0,0,0.83767,7.3124969,247.00379)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24096"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.20956"
- fx="75.53241"
- cy="500.20956"
- cx="75.53241"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient24098"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="332.10181"
- fx="135.14931"
- cy="332.10181"
- cx="135.14931"
- gradientTransform="matrix(2.4564959,0.09949388,-0.06177986,1.3917691,-283.96093,-143.81911)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient24100"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="95.252274"
- x2="250.5"
- y1="90.253998"
- x1="250.5"
- gradientTransform="matrix(2,0,0,0.7333333,-467,262.53823)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24102"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="333.05716"
- fx="140.33667"
- cy="333.05716"
- cx="140.33667"
- gradientTransform="matrix(2.3687636,0.09935874,-0.05957343,1.3898788,-272.60513,-143.17133)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient24104"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="252.05081"
- x2="76.956871"
- y1="239.83469"
- x1="71.762154"
- gradientTransform="matrix(0.831045,0,0,0.776773,36.146465,141.05131)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24317"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="246.81651"
- x2="73.234337"
- y1="243.03008"
- x1="72.340698"
- gradientTransform="matrix(0.831045,0,0,0.776773,36.165705,133.02478)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24319"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="246.96069"
- x2="68.458534"
- y1="240.03282"
- x1="66.954422"
- gradientTransform="matrix(0.831045,0,0,0.776773,36.165705,133.02478)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24321"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="179.12285"
- x2="425"
- y1="179.12074"
- x1="426.12415"
- gradientTransform="translate(-335,238.99245)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24362"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="266.34406"
- x2="237.75459"
- y1="285.00754"
- x1="244.37868"
- gradientTransform="translate(-149,133.99245)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24367"
- xlink:href="#linearGradient24143"
- inkscape:collect="always" />
- <linearGradient
- y2="260.21841"
- x2="116.37123"
- y1="281.26645"
- x1="120.97597"
- gradientTransform="matrix(1.043478,0,0,0.956667,-30.15217,152.41412)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24374"
- xlink:href="#linearGradient24695"
- inkscape:collect="always" />
- <linearGradient
- y2="287.50357"
- x2="212.22493"
- y1="272.29477"
- x1="199.87271"
- gradientTransform="matrix(1,0,0,-1,-150.99992,596.00357)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24436"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="250.69945"
- x2="114.66669"
- y1="283.00519"
- x1="121.79003"
- gradientTransform="matrix(1.043478,0,0,0.956667,-30.15217,152.41412)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25073"
- xlink:href="#linearGradient24679"
- inkscape:collect="always" />
- <linearGradient
- y2="253.00755"
- x2="235"
- y1="283.94504"
- x1="243.25"
- gradientTransform="translate(-149,133.99245)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25075"
- xlink:href="#linearGradient24671"
- inkscape:collect="always" />
- <linearGradient
- y2="179.12285"
- x2="425"
- y1="179.12074"
- x1="426.12415"
- gradientTransform="translate(-335,238.99245)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25077"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="250.69945"
- x2="114.66669"
- y1="281.27435"
- x1="120.94298"
- gradientTransform="matrix(1.043478,0,0,0.956667,-30.15217,152.41412)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42055"
- xlink:href="#linearGradient24679"
- inkscape:collect="always" />
- <linearGradient
- y2="253.00755"
- x2="235"
- y1="283.94504"
- x1="243.25"
- gradientTransform="translate(-149,133.99245)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42057"
- xlink:href="#linearGradient24671"
- inkscape:collect="always" />
- <linearGradient
- y2="179.12285"
- x2="425"
- y1="179.12074"
- x1="426.12415"
- gradientTransform="translate(-335,238.99245)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42059"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="84.777061"
- x2="426.11459"
- y1="113.24564"
- x1="445.77841"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24132"
- xlink:href="#linearGradient24101"
- inkscape:collect="always" />
- <radialGradient
- r="7.03125"
- fy="237.2262"
- fx="269.71231"
- cy="237.2262"
- cx="269.71231"
- gradientTransform="matrix(1.1489145,-0.69297,0.4772363,0.7912359,-113.08929,303.20064)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient24599"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="7.03125"
- fy="245.91792"
- fx="262.83905"
- cy="245.91792"
- cx="262.83905"
- gradientTransform="matrix(0.7236207,-0.7167103,1.004637,1.0143218,-131.254,253.93955)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient24632"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="308.51169"
- x2="309.02371"
- y1="310.77368"
- x1="311.3967"
- gradientTransform="matrix(0.9897912,0,0,0.9897912,2.2765631,2.9503441)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24797"
- xlink:href="#linearGradient31456"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="308.21875"
- x2="307.5"
- y1="311.88205"
- x1="311.37668"
- id="linearGradient24820"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="78.473343"
- fx="207.04807"
- cy="78.473343"
- cx="207.04807"
- gradientTransform="matrix(0.4011721,0.3766097,-0.7099042,0.7562044,179.21454,-58.566632)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient43962"
- xlink:href="#linearGradient20036"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="78.443413"
- fx="206.39249"
- cy="78.443413"
- cx="206.39249"
- gradientTransform="matrix(0.4543499,0.4687811,-0.6244606,0.6052369,161.562,-65.729731)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient43964"
- xlink:href="#linearGradient20036"
- inkscape:collect="always" />
- <linearGradient
- y2="303.10999"
- x2="269.3085"
- y1="279.72827"
- x1="248.69196"
- gradientTransform="translate(-1)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient62436"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="282.28745"
- x2="250.22783"
- y1="320.55179"
- x1="289.61554"
- gradientTransform="matrix(0,1,1,0,-33.03632,32.03632)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient62558"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="300.96124"
- x2="327.92044"
- y1="283.61511"
- x1="354.50601"
- gradientTransform="rotate(-90,348.5,289.5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient62560"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="288.5"
- x2="344.5"
- y1="288.5"
- x1="342"
- gradientTransform="translate(-1,21)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25381"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="288.5"
- x2="344.5"
- y1="288.5"
- x1="342"
- gradientTransform="rotate(90,339,299)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25383"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="288.5"
- x2="344.5"
- y1="288.5"
- x1="342"
- gradientTransform="rotate(180,349.5,299.5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25385"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="288.5"
- x2="344.5"
- y1="288.5"
- x1="342"
- gradientTransform="rotate(-90,360,300)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25387"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="288.5"
- x2="344.01321"
- y1="288.5"
- x1="342"
- gradientTransform="translate(-1,21)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25573"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="288.5"
- x2="344.5"
- y1="288.5"
- x1="342"
- gradientTransform="rotate(90,339,299)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25575"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="288.5"
- x2="344.5"
- y1="288.5"
- x1="342"
- gradientTransform="rotate(180,349.5,299.5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25577"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="288.5"
- x2="344.5"
- y1="288.5"
- x1="342"
- gradientTransform="rotate(-90,360,300)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25579"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="30.023426"
- x2="278.25537"
- y1="3.6831069"
- x1="253.78497"
- gradientTransform="matrix(0.888889,0,0,1,513.5,328.50451)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25872"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="249"
- x2="93.0625"
- y1="241.125"
- x1="87"
- gradientTransform="translate(670,111)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25874"
- xlink:href="#linearGradient58334"
- inkscape:collect="always" />
- <linearGradient
- y2="26.600887"
- x2="275.10107"
- y1="-2.6686089"
- x1="243.92192"
- gradientTransform="matrix(0.888889,0,0,1,673.5,170.50451)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25886"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="249"
- x2="93.0625"
- y1="241.125"
- x1="87"
- gradientTransform="translate(830,-47)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25888"
- xlink:href="#linearGradient58334"
- inkscape:collect="always" />
- <linearGradient
- y2="53.875874"
- x2="11.472005"
- y1="57.827747"
- x1="13.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25890"
- xlink:href="#linearGradient13998"
- inkscape:collect="always" />
- <linearGradient
- y2="487.60382"
- x2="-26.642899"
- y1="501.96539"
- x1="-18.600719"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25892"
- xlink:href="#linearGradient13998"
- inkscape:collect="always" />
- <linearGradient
- y2="57.750687"
- x2="13.5"
- y1="60.637787"
- x1="15.027407"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25894"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="500"
- x2="-22.25"
- y1="490.70178"
- x1="-32.067383"
- gradientTransform="translate(0.03018343,0.1408617)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25897"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="305"
- x2="758"
- y1="299.83005"
- x1="753.39417"
- gradientTransform="translate(0,-72.000001)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25899"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="250.69945"
- x2="114.66669"
- y1="283.00519"
- x1="121.79003"
- gradientTransform="matrix(1.043478,0,0,0.956667,-30.15217,152.41412)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25927"
- xlink:href="#linearGradient24679"
- inkscape:collect="always" />
- <linearGradient
- y2="253.00755"
- x2="235"
- y1="283.94504"
- x1="243.25"
- gradientTransform="translate(-149,133.99245)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25929"
- xlink:href="#linearGradient24671"
- inkscape:collect="always" />
- <linearGradient
- y2="179.12285"
- x2="425"
- y1="179.12074"
- x1="426.12415"
- gradientTransform="translate(-335,238.99245)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25931"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="30.023426"
- x2="278.25537"
- y1="3.6831069"
- x1="253.78497"
- gradientTransform="matrix(0.888889,0,0,1,673.5,170.50451)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25957"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="249"
- x2="93.0625"
- y1="241.125"
- x1="87"
- gradientTransform="translate(830,-47)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25959"
- xlink:href="#linearGradient58334"
- inkscape:collect="always" />
- <linearGradient
- y2="305"
- x2="758"
- y1="299.83005"
- x1="753.39417"
- gradientTransform="translate(-136,-112)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25961"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="30.023426"
- x2="278.25537"
- y1="3.6831069"
- x1="253.78497"
- gradientTransform="matrix(0.888889,0,0,1,673.5,170.50451)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25982"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="249"
- x2="93.0625"
- y1="241.125"
- x1="87"
- gradientTransform="translate(830,-47)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25984"
- xlink:href="#linearGradient58334"
- inkscape:collect="always" />
- <linearGradient
- y2="305"
- x2="758"
- y1="299.83005"
- x1="753.39417"
- gradientTransform="translate(-136,-88.000005)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25986"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="30.023426"
- x2="278.25537"
- y1="3.6831069"
- x1="253.78497"
- gradientTransform="matrix(0.888889,0,0,1,673.5,170.50451)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient26011"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="249"
- x2="93.0625"
- y1="241.125"
- x1="87"
- gradientTransform="translate(830,-47)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient26013"
- xlink:href="#linearGradient58334"
- inkscape:collect="always" />
- <linearGradient
- y2="305"
- x2="758"
- y1="299.83005"
- x1="753.39417"
- gradientTransform="translate(-112,-76.000004)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient26015"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="250.99995"
- x2="33.682159"
- y1="204.24995"
- x1="-7.445384"
- gradientTransform="matrix(0.923955,0,0,1,82.8792,399.00004)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient26077"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="168.00002"
- x2="36.972481"
- y1="164"
- x1="29.972469"
- gradientTransform="translate(80.02752,483.00004)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient26079"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="644"
- x2="111"
- y1="646"
- x1="113"
- gradientTransform="translate(-224,-1290)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient26081"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="644.5"
- x2="111.5"
- y1="646"
- x1="113"
- gradientUnits="userSpaceOnUse"
- id="linearGradient26083"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="252.05081"
- x2="76.956871"
- y1="239.83469"
- x1="71.762154"
- gradientTransform="matrix(0.831045,0,0,0.776773,36.146465,141.05131)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient26126"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="246.81651"
- x2="73.234337"
- y1="243.03008"
- x1="72.340698"
- gradientTransform="matrix(0.831045,0,0,0.776773,36.165705,133.02478)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient26128"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="247.29691"
- x2="69.285805"
- y1="239.95235"
- x1="68.383354"
- gradientTransform="matrix(0.831045,0,0,0.776773,36.165705,133.02478)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient26130"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="5.5"
- fy="25.190212"
- fx="450.06522"
- cy="25.190212"
- cx="450.06522"
- gradientTransform="matrix(0.39459,-0.991726,0.917787,0.36517,234.80511,750.0215)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient27973"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <radialGradient
- r="5.5"
- fy="19.250505"
- fx="450.72842"
- cy="19.250505"
- cx="450.72842"
- gradientTransform="matrix(0.121304,-0.696283,0.871429,0.151818,359.51331,621.7)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient27975"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="13.21724"
- x2="441.9628"
- y1="15.545153"
- x1="456.81198"
- gradientTransform="matrix(-1,0,0,1,883.51417,295)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27977"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="135.18265"
- x2="64.109718"
- y1="133.73566"
- x1="62.793919"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28099"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="translate(-19,294.91429)"
- y2="14.936845"
- x2="432.875"
- y1="16.23234"
- x1="461.66425"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28107"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="14.936845"
- x2="432.875"
- y1="16.23234"
- x1="461.66425"
- gradientTransform="translate(-19,294.91429)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27448"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="135.18265"
- x2="64.109718"
- y1="133.73566"
- x1="62.793919"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27450"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="5.5"
- fy="25.190212"
- fx="450.06522"
- cy="25.190212"
- cx="450.06522"
- gradientTransform="matrix(0.39459,-0.991726,0.917787,0.36517,234.80511,750.0215)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient27452"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <radialGradient
- r="5.5"
- fy="19.250505"
- fx="450.72842"
- cy="19.250505"
- cx="450.72842"
- gradientTransform="matrix(0.121304,-0.696283,0.871429,0.151818,359.51331,621.7)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient27454"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="13.21724"
- x2="441.9628"
- y1="15.545153"
- x1="456.81198"
- gradientTransform="matrix(-1,0,0,1,883.51417,295)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27456"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="31.22842"
- x2="326.41843"
- y1="38.166924"
- x1="332.49747"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27540"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="41.875"
- x2="337.3125"
- y1="31.446384"
- x1="326.483"
- gradientTransform="translate(2.011921e-5,12.000013)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27542"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="36.739578"
- x2="331.44778"
- y1="34.005215"
- x1="329.18762"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27544"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="101.15624"
- x2="34.095703"
- y1="100.99999"
- x1="29.4034"
- gradientTransform="translate(220,-20.00667)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27598"
- xlink:href="#linearGradient23705"
- inkscape:collect="always" />
- <linearGradient
- y2="104.89799"
- x2="34.125"
- y1="88.642494"
- x1="20.125"
- gradientTransform="matrix(0.75,0,0,0.7516675,227.625,0.9640803)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27600"
- xlink:href="#linearGradient24168"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="74.083908"
- fx="261.98364"
- cy="74.083908"
- cx="261.98364"
- gradientTransform="matrix(0.6595012,0.7907318,-0.8990144,0.7498135,144.69896,-187.59854)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient27602"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="101.14744"
- x2="35.166668"
- y1="90.504448"
- x1="27.166666"
- gradientTransform="matrix(0.8750002,0,0,0.83767,7.3124969,247.00379)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27604"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.20956"
- fx="75.53241"
- cy="500.20956"
- cx="75.53241"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient27606"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="332.10181"
- fx="135.14931"
- cy="332.10181"
- cx="135.14931"
- gradientTransform="matrix(2.4564959,0.09949388,-0.06177986,1.3917691,-283.96093,-143.81911)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient27608"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="95.252274"
- x2="250.5"
- y1="90.253998"
- x1="250.5"
- gradientTransform="matrix(2,0,0,0.7333333,-467,262.53823)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27610"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="333.05716"
- fx="140.33667"
- cy="333.05716"
- cx="140.33667"
- gradientTransform="matrix(2.3687636,0.09935874,-0.05957343,1.3898788,-272.60513,-143.17133)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient27612"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="81.245804"
- x2="258.00165"
- y1="68.519989"
- x1="270.60007"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30389"
- xlink:href="#linearGradient34157"
- inkscape:collect="always" />
- <linearGradient
- y2="74.415245"
- x2="262.88068"
- y1="80.395966"
- x1="256.67459"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30391"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.779551"
- fy="79.598709"
- fx="257.35309"
- cy="79.598709"
- cx="257.35309"
- gradientTransform="matrix(0.4829018,0,0,0.4829018,133.47136,40.782399)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient30393"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.66806"
- fx="75.217888"
- cy="500.66806"
- cx="75.217888"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient30395"
- xlink:href="#linearGradient29149"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.26215"
- fx="75.554794"
- cy="500.26215"
- cx="75.554794"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient30397"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <linearGradient
- y2="340"
- x2="343.26239"
- y1="323"
- x1="308"
- gradientTransform="translate(422.99996,88.99998)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29127"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="418.33594"
- x2="753.40625"
- y1="412.8125"
- x1="732.9375"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29129"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="122.36016"
- x2="134.91479"
- y1="111.2683"
- x1="125.99933"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27767"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="122.36016"
- x2="134.91479"
- y1="112.53999"
- x1="126.72586"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27769"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="99.029617"
- x2="99.628899"
- y1="114.71685"
- x1="112.18942"
- gradientTransform="translate(19.367382)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27771"
- xlink:href="#linearGradient13973"
- inkscape:collect="always" />
- <linearGradient
- y2="131.03783"
- x2="143.69765"
- y1="114.2303"
- x1="127.63637"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27773"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="7"
- fy="58"
- fx="202"
- cy="58"
- cx="202"
- gradientTransform="matrix(0.986122,0,0,0.986122,2.8033684,0.804927)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient31865"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="translate(258,-96.99999)"
- y2="429.5"
- x2="-119.5"
- y1="431.5"
- x1="-117.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32298"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <radialGradient
- r="1.5"
- fy="14.5"
- fx="70.5"
- cy="14.5"
- cx="70.5"
- gradientTransform="matrix(1.050372,0,0,1.050372,-3.551238,-0.730396)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient32241"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <radialGradient
- r="5.5192375"
- fy="14.649424"
- fx="70.470596"
- cy="14.649424"
- cx="70.470596"
- gradientTransform="matrix(0.5399935,0.3131662,-0.3907892,0.5793905,38.141764,-16.056748)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient32243"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <radialGradient
- r="2.333364"
- fy="690.68732"
- fx="975.50568"
- cy="690.68732"
- cx="975.50568"
- gradientTransform="matrix(0.684011,0.3442329,-1.2972142,1.1562236,739.67527,-1155.7895)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient53119"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="168.04703"
- x2="105.85706"
- y1="171.25618"
- x1="108.71671"
- gradientTransform="matrix(0.8008385,0,0,0.821004,429.95027,-161.55482)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53121"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="175.87964"
- x2="-28.432825"
- y1="178.07901"
- x1="-26.313976"
- gradientTransform="matrix(0.8008385,0,0,0.8956408,540.31118,-183.20693)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53123"
- xlink:href="#linearGradient20756"
- inkscape:collect="always" />
- <linearGradient
- y2="-17.546936"
- x2="505.9494"
- y1="-20.435461"
- x1="510.29913"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53125"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="297.92099"
- x2="353.72073"
- y1="314.11398"
- x1="352.98236"
- gradientTransform="rotate(-45,343.872,632.75601)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53127"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="-150.41035"
- x2="373.83752"
- y1="-159.88834"
- x1="362.79037"
- gradientTransform="translate(-15.983875,338)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53129"
- xlink:href="#linearGradient13938"
- inkscape:collect="always" />
- <linearGradient
- y2="183.3365"
- x2="350.97491"
- y1="175.19124"
- x1="343.51892"
- gradientTransform="matrix(0.9900316,0,0,1,2.450297,0.00704954)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53131"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="2.333364"
- fy="690.68732"
- fx="975.50568"
- cy="690.68732"
- cx="975.50568"
- gradientTransform="matrix(0.684011,0.3442329,-1.2972142,1.1562236,739.67527,-1155.7895)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient53133"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="168.04703"
- x2="105.85706"
- y1="171.25618"
- x1="108.71671"
- gradientTransform="matrix(0.8008385,0,0,0.821004,429.95027,-161.55482)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53135"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="175.87964"
- x2="-28.432825"
- y1="178.07901"
- x1="-26.313976"
- gradientTransform="matrix(0.8008385,0,0,0.8956408,540.31118,-183.20693)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53137"
- xlink:href="#linearGradient20756"
- inkscape:collect="always" />
- <linearGradient
- y2="-17.546936"
- x2="505.9494"
- y1="-20.435461"
- x1="510.29913"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53139"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="2.333364"
- fy="690.68732"
- fx="975.50568"
- cy="690.68732"
- cx="975.50568"
- gradientTransform="matrix(0.684011,0.3442329,-1.2972142,1.1562236,739.67527,-1155.7895)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient53141"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="168.04703"
- x2="105.85706"
- y1="171.25618"
- x1="108.71671"
- gradientTransform="matrix(0.8008385,0,0,0.821004,429.95027,-161.55482)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53143"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="175.87964"
- x2="-28.432825"
- y1="178.07901"
- x1="-26.313976"
- gradientTransform="matrix(0.8008385,0,0,0.8956408,540.31118,-183.20693)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53145"
- xlink:href="#linearGradient20756"
- inkscape:collect="always" />
- <linearGradient
- y2="-17.546936"
- x2="505.9494"
- y1="-20.435461"
- x1="510.29913"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53147"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="101.15624"
- x2="34.095703"
- y1="100.99999"
- x1="29.4034"
- gradientTransform="translate(220,-20.00667)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53149"
- xlink:href="#linearGradient42459"
- inkscape:collect="always" />
- <linearGradient
- y2="104.89799"
- x2="34.125"
- y1="88.642494"
- x1="20.125"
- gradientTransform="matrix(0.75,0,0,0.7516675,227.625,0.9640803)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53151"
- xlink:href="#linearGradient22562"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="74.083908"
- fx="261.98364"
- cy="74.083908"
- cx="261.98364"
- gradientTransform="matrix(0.6595012,0.7907318,-0.8990144,0.7498135,144.69896,-187.59854)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient53153"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="101.14744"
- x2="35.166668"
- y1="90.504448"
- x1="27.166666"
- gradientTransform="matrix(0.75,0,0,0.7516675,115.625,254.97076)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53155"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.20956"
- fx="75.53241"
- cy="500.20956"
- cx="75.53241"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient53157"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="332.10181"
- fx="135.14931"
- cy="332.10181"
- cx="135.14931"
- gradientTransform="matrix(2.1055676,0.08927896,-0.05295416,1.2488779,-134.03789,-95.726825)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient53159"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="95.252274"
- x2="250.5"
- y1="90.253998"
- x1="250.5"
- gradientTransform="translate(-112,237.00668)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53161"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="333.05716"
- fx="140.33667"
- cy="333.05716"
- cx="140.33667"
- gradientTransform="matrix(2.1055676,0.08927896,-0.05295416,1.2488779,-134.03789,-95.726825)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient53163"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="2.333364"
- fy="690.68732"
- fx="975.50568"
- cy="690.68732"
- cx="975.50568"
- gradientTransform="matrix(0.684011,0.3442329,-1.2972142,1.1562236,739.67527,-1155.7895)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient53165"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="168.04703"
- x2="105.85706"
- y1="171.25618"
- x1="108.71671"
- gradientTransform="matrix(0.8008385,0,0,0.821004,429.95027,-161.55482)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53167"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="175.87964"
- x2="-28.432825"
- y1="178.07901"
- x1="-26.313976"
- gradientTransform="matrix(0.8008385,0,0,0.8956408,540.31118,-183.20693)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53169"
- xlink:href="#linearGradient20756"
- inkscape:collect="always" />
- <linearGradient
- y2="-17.546936"
- x2="505.9494"
- y1="-20.435461"
- x1="510.29913"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53171"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="448"
- x2="-14.000002"
- y1="448"
- x1="-22.902081"
- gradientTransform="translate(2e-6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient50870"
- xlink:href="#linearGradient23178"
- inkscape:collect="always" />
- <linearGradient
- y2="121.25749"
- x2="136.04924"
- y1="111.98244"
- x1="124.40742"
- gradientUnits="userSpaceOnUse"
- id="linearGradient33427"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="117.26753"
- x1="132"
- gradientUnits="userSpaceOnUse"
- id="linearGradient33429"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="90.071045"
- x2="452.63602"
- y1="89.363937"
- x1="458.99997"
- gradientTransform="rotate(-45,414.39357,369.69801)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient33585"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="108"
- x2="142.00002"
- y1="116"
- x1="134.00002"
- gradientUnits="userSpaceOnUse"
- id="linearGradient33831"
- xlink:href="#linearGradient31356"
- inkscape:collect="always" />
- <linearGradient
- y2="120.16792"
- x2="132.97911"
- y1="112.24533"
- x1="124.75568"
- gradientUnits="userSpaceOnUse"
- id="linearGradient33833"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="117.26753"
- x1="132"
- gradientUnits="userSpaceOnUse"
- id="linearGradient33835"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="29.392145"
- x2="277.86761"
- y1="2.1803131"
- x1="254.19829"
- gradientTransform="matrix(0.888889,0,0,1,-32.5,115.5045)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37472"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="245.625"
- x2="92.8125"
- y1="239.125"
- x1="85.1875"
- gradientTransform="translate(124,-102.00001)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37475"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="26.679274"
- x2="275.62497"
- y1="11.593864"
- x1="261.83936"
- gradientTransform="matrix(0.888889,0,0,1,-32.5,115.5045)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37477"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="245.625"
- x2="92.8125"
- y1="239.125"
- x1="85.1875"
- gradientTransform="translate(124,-102.00001)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37479"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="81.245804"
- x2="258.00165"
- y1="68.519989"
- x1="270.60007"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37481"
- xlink:href="#linearGradient34157"
- inkscape:collect="always" />
- <linearGradient
- y2="74.415245"
- x2="262.88068"
- y1="80.395966"
- x1="256.67459"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37483"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.779551"
- fy="79.598709"
- fx="257.35309"
- cy="79.598709"
- cx="257.35309"
- gradientTransform="matrix(0.4829018,0,0,0.4829018,133.47136,40.782399)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37485"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.66806"
- fx="75.217888"
- cy="500.66806"
- cx="75.217888"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37487"
- xlink:href="#linearGradient29149"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.26215"
- fx="75.554794"
- cy="500.26215"
- cx="75.554794"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37489"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="78.512764"
- fx="258.47122"
- cy="78.512764"
- cx="258.47122"
- gradientTransform="matrix(-1.5793179,0,-1.0159927e-7,-1.6412688,666.67947,207.37331)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37491"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="81.382545"
- x2="257.38638"
- y1="68.113258"
- x1="270.66064"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37493"
- xlink:href="#linearGradient34157"
- inkscape:collect="always" />
- <linearGradient
- y2="74.562462"
- x2="262.43726"
- y1="80.515495"
- x1="256.38586"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37495"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.66806"
- fx="75.217888"
- cy="500.66806"
- cx="75.217888"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37497"
- xlink:href="#linearGradient29149"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.26215"
- fx="75.554794"
- cy="500.26215"
- cx="75.554794"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37499"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <radialGradient
- r="8"
- fy="117.97826"
- fx="135.83771"
- cy="117.97826"
- cx="135.83771"
- gradientTransform="matrix(-0.08933014,-0.7764284,0.7350832,-0.08334857,57.410559,233.30156)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37501"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="137.6748"
- x2="148.06364"
- y1="105.94044"
- x1="121.19734"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37503"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="81.382545"
- x2="257.38638"
- y1="68.113258"
- x1="270.66064"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37505"
- xlink:href="#linearGradient34157"
- inkscape:collect="always" />
- <linearGradient
- y2="74.562462"
- x2="262.43726"
- y1="80.515495"
- x1="256.38586"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37507"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.66806"
- fx="75.217888"
- cy="500.66806"
- cx="75.217888"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37509"
- xlink:href="#linearGradient29149"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.26215"
- fx="75.554794"
- cy="500.26215"
- cx="75.554794"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37511"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="78.512764"
- fx="258.47122"
- cy="78.512764"
- cx="258.47122"
- gradientTransform="matrix(-1.3336259,0,-8.5793649e-8,-1.3859393,603.17514,187.32668)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37513"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="78.512764"
- fx="258.47122"
- cy="78.512764"
- cx="258.47122"
- gradientTransform="matrix(-1.3648614,0,-8.7803051e-8,-1.4184,611.24862,189.87526)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37515"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="81.382545"
- x2="257.38638"
- y1="68.113258"
- x1="270.66064"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37517"
- xlink:href="#linearGradient34157"
- inkscape:collect="always" />
- <linearGradient
- y2="74.562462"
- x2="262.43726"
- y1="80.515495"
- x1="256.38586"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37519"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.66806"
- fx="75.217888"
- cy="500.66806"
- cx="75.217888"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37521"
- xlink:href="#linearGradient29149"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.26215"
- fx="75.554794"
- cy="500.26215"
- cx="75.554794"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37523"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <linearGradient
- y2="35.276588"
- x2="330.27045"
- y1="43.328976"
- x1="337.34329"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37525"
- xlink:href="#linearGradient30124"
- inkscape:collect="always" />
- <linearGradient
- y2="41.570362"
- x2="335.27429"
- y1="35.5"
- x1="329.9158"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37527"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="38.642647"
- x2="193.26451"
- y1="9.0567484"
- x1="166.89752"
- gradientTransform="matrix(1.0028571,0,0,0.9943503,-0.4404318,0.129119)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37529"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="116.99384"
- x2="133.77768"
- y1="122.8346"
- x1="127.93343"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37531"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="118.66972"
- x2="132"
- y1="108.39205"
- x1="141.60255"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37533"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="116.99384"
- x2="133.77768"
- y1="127.14286"
- x1="122.86111"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37535"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="118.66972"
- x2="132"
- y1="108.39205"
- x1="141.60255"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37537"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="659"
- x2="285"
- y1="659"
- x1="266"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37539"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="602.96759"
- x2="244.21062"
- y1="600.74884"
- x1="244.21062"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37541"
- xlink:href="#linearGradient35391"
- inkscape:collect="always" />
- <linearGradient
- y2="604.52502"
- x2="245.93307"
- y1="588.43396"
- x1="235.29379"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37543"
- xlink:href="#linearGradient35407"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(-1,0,0,1,992,0)"
- y2="36"
- x2="494"
- y1="36"
- x1="510.25"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37545"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(-1,0,0,1,992,0)"
- y2="43"
- x2="503"
- y1="33"
- x1="492"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37547"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="35"
- x2="483"
- y1="35"
- x1="497.3125"
- gradientTransform="matrix(-1,0,0,1,551,105)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37549"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="35"
- x2="483"
- y1="35"
- x1="497.3125"
- gradientTransform="matrix(-1,0,0,1,551,105)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37551"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="12"
- x2="68"
- y1="32"
- x1="86.248604"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37553"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="9.0000019"
- x2="64.5"
- y1="27"
- x1="81"
- gradientTransform="translate(0,1)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37555"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="24.480759"
- x2="79.465332"
- y1="15.659542"
- x1="70.78582"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37557"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <radialGradient
- r="6.5"
- fy="14.60904"
- fx="63.013588"
- cy="14.60904"
- cx="63.013588"
- gradientTransform="matrix(0.5997527,0.4726093,-0.6665451,0.8458611,35.480681,-28.765852)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37559"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="500"
- x2="54.8125"
- y1="500"
- x1="108"
- gradientTransform="matrix(0.8666667,0,0,0.9166667,406.13333,-443.79167)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37571"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="501.10059"
- x2="41.311054"
- y1="502.54196"
- x1="83.261826"
- gradientTransform="matrix(1,0,0,0.9971589,396,-484.56523)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37573"
- xlink:href="#linearGradient15809"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="492.15359"
- fx="75.95578"
- cy="492.15359"
- cx="75.95578"
- gradientTransform="matrix(0.3949409,0.3949425,-0.4243709,0.4254619,321.60762,256.85923)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37575"
- xlink:href="#linearGradient14262"
- inkscape:collect="always" />
- <linearGradient
- y2="501.58331"
- x2="76.885078"
- y1="504.67188"
- x1="80.768944"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37578"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="501.04794"
- x2="78.000008"
- y1="511.42972"
- x1="89.526657"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37580"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="2.9089756"
- fy="503.81497"
- fx="79.959885"
- cy="503.81497"
- cx="79.959885"
- gradientTransform="matrix(2.2665671,0.04035316,-0.03648524,1.99062,-82.893589,-502.25433)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37582"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.66806"
- fx="75.217888"
- cy="500.66806"
- cx="75.217888"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37584"
- xlink:href="#linearGradient29149"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.26215"
- fx="75.554794"
- cy="500.26215"
- cx="75.554794"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37586"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <linearGradient
- y2="330.89999"
- x2="264.89999"
- y1="330.10001"
- x1="264.10001"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37588"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="121.20407"
- x2="133.88583"
- y1="108.82882"
- x1="122.38876"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37590"
- xlink:href="#linearGradient14232"
- inkscape:collect="always" />
- <linearGradient
- y2="103.57072"
- x2="44.999863"
- y1="96.955269"
- x1="51.37524"
- gradientTransform="matrix(0.9995363,0,0,-1.0036971,220.01067,167.35026)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37592"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="117.24104"
- x2="131.3092"
- y1="124.67203"
- x1="137.88235"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37594"
- xlink:href="#linearGradient15437"
- inkscape:collect="always" />
- <linearGradient
- y2="126.57021"
- x2="139.86742"
- y1="110.87843"
- x1="126.37032"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37596"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="2.333364"
- fy="690.68732"
- fx="975.50568"
- cy="690.68732"
- cx="975.50568"
- gradientTransform="matrix(0.684011,0.3442329,-1.2972142,1.1562236,739.67527,-1155.7895)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37608"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="168.04703"
- x2="105.85706"
- y1="171.25618"
- x1="108.71671"
- gradientTransform="matrix(0.8008385,0,0,0.821004,429.95027,-161.55482)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37610"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="175.87964"
- x2="-28.432825"
- y1="178.07901"
- x1="-26.313976"
- gradientTransform="matrix(0.8008385,0,0,0.8956408,540.31118,-183.20693)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37612"
- xlink:href="#linearGradient20756"
- inkscape:collect="always" />
- <linearGradient
- y2="-17.546936"
- x2="505.9494"
- y1="-20.435461"
- x1="510.29913"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37614"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="123.61623"
- x2="332.88193"
- y1="126.23978"
- x1="387.30396"
- gradientTransform="rotate(-45,396.37194,506.00979)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37636"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="297.92099"
- x2="353.72073"
- y1="314.11398"
- x1="352.98236"
- gradientTransform="rotate(-45,343.872,632.75601)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37638"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="137.6748"
- x2="148.06364"
- y1="105.94044"
- x1="121.19734"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37640"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="103.11092"
- x2="135.45256"
- y1="75.666725"
- x1="109.04134"
- gradientTransform="matrix(0.9995967,0,0,1.0002103,-78.949724,-0.02739749)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42322"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="105.27895"
- x2="59.057678"
- y1="93.805557"
- x1="47.655102"
- gradientTransform="matrix(1.1000194,0,0,1.0998287,-4.6508478,-9.2334126)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42324"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="117.77643"
- x2="133.97179"
- y1="110.75571"
- x1="124.8772"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42326"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="217.06438"
- x2="123.33967"
- y1="223.61363"
- x1="129.32576"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42328"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="129.05313"
- x2="142.64723"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42330"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="252.63284"
- x2="-45.689278"
- y1="252.69086"
- x1="-4.9152389"
- gradientTransform="matrix(-1.0041772,0,0,0.9688607,-81.584854,117.13687)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42332"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="60.125"
- x2="117"
- y1="53.875"
- x1="107.96875"
- gradientTransform="matrix(0.9993234,0,0,1.0050357,-171.92846,305.72314)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42334"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-22.846634"
- x2="134.08138"
- y1="-11.628862"
- x1="154.24324"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42336"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-21"
- x2="135.25"
- y1="-18"
- x1="137.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42338"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-23.945318"
- x2="132.29695"
- y1="-21.522242"
- x1="134.12642"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42340"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-24.343456"
- x2="131.69801"
- y1="-21.3074"
- x1="134.6615"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42342"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="28.695114"
- x2="-76.564636"
- y1="31.914484"
- x1="-69.457596"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42344"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="31"
- x2="-78.812721"
- y1="48.005856"
- x1="-57.780041"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42346"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="103.11092"
- x2="135.45256"
- y1="75.666725"
- x1="109.04134"
- gradientTransform="matrix(0.9995967,0,0,1.0002103,-78.949724,-0.02739749)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42348"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="105.27895"
- x2="59.057678"
- y1="97.491707"
- x1="51.497997"
- gradientTransform="matrix(0.3000195,0,0,0.2998291,32.548709,64.760571)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42350"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="105.27895"
- x2="59.057678"
- y1="94.987144"
- x1="51.497997"
- gradientTransform="matrix(0.3000195,0,0,0.1998289,32.548709,79.011866)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42352"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="105.27895"
- x2="59.057678"
- y1="94.987129"
- x1="51.497997"
- gradientTransform="matrix(0.3000195,0,0,0.1998289,32.548709,83.013491)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42354"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="105.27895"
- x2="59.057678"
- y1="94.987114"
- x1="48.998543"
- gradientTransform="matrix(0.2,0,0,0.1998289,42.197983,83.013493)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42356"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="105.27895"
- x2="59.057678"
- y1="94.995667"
- x1="48.99855"
- gradientTransform="matrix(0.2,0,0,0.1998289,42.197981,79.010163)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42358"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="105.27895"
- x2="59.057678"
- y1="97.494553"
- x1="48.998554"
- gradientTransform="matrix(0.2,0,0,0.2999998,42.19798,64.743076)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42360"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="105.27895"
- x2="59.057678"
- y1="94.987114"
- x1="48.998539"
- gradientTransform="matrix(0.2,0,0,0.1998289,46.196563,83.013493)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42362"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="105.27895"
- x2="59.057678"
- y1="94.995667"
- x1="48.998547"
- gradientTransform="matrix(0.2,0,0,0.1998289,46.196561,79.010163)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42364"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="105.27895"
- x2="59.057678"
- y1="97.494553"
- x1="48.998554"
- gradientTransform="matrix(0.2,0,0,0.2999998,46.19656,64.743076)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42366"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="38.387074"
- x2="-121.73741"
- y1="52.625"
- x1="-109.125"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42368"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="123.20583"
- x2="136.44698"
- y1="99.873772"
- x1="112.48699"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42370"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42372"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="124.59384"
- x2="138.25778"
- y1="85.825607"
- x1="102.83286"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42374"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="65.5"
- x2="-181.375"
- y1="65.5"
- x1="-170.25"
- gradientTransform="translate(-41,98)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42376"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="39.110355"
- x2="-202.33263"
- y1="43.134327"
- x1="-223.42456"
- gradientTransform="matrix(0.6962506,0,0,0.8034158,-66.833415,127.95312)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42378"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="27.996962"
- x2="-220.82353"
- y1="40.355042"
- x1="-219.98772"
- gradientTransform="matrix(0.6962506,0,0,0.8034158,-66.833415,127.95312)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42380"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="62.441177"
- x2="-170.82031"
- y1="63.26775"
- x1="-177.6924"
- gradientTransform="matrix(0.9098462,0,0,0.9414558,-57.134785,102.33514)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42382"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-16.264704"
- x2="-93.75"
- y1="-16"
- x1="-101"
- gradientTransform="matrix(1.2857143,0,0,0.787037,-92.714287,177.80092)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42384"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="185.8125"
- x2="-219.5"
- y1="193.68091"
- x1="-211.04486"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42386"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <radialGradient
- r="6.9375"
- fy="188.13423"
- fx="-216.5222"
- cy="188.13423"
- cx="-216.5222"
- gradientTransform="matrix(2.6261963,-1.575549,0.4790575,0.7985147,261.90894,-304.15053)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient42388"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <radialGradient
- r="3.4576657"
- fy="182.64247"
- fx="-221.88463"
- cy="182.64247"
- cx="-221.88463"
- gradientTransform="matrix(2.4767928,-0.2294888,0.06653313,0.7180687,315.70283,0.01290384)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient42390"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="44.732624"
- x2="-213"
- y1="38.277779"
- x1="-225.00002"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42392"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="5.8999949"
- fy="201.01204"
- fx="-215.0979"
- cy="201.01204"
- cx="-215.0979"
- gradientTransform="matrix(1.1226244,0.04761823,-0.1611956,3.8002759,59.188894,-553.59611)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient42394"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="195.27762"
- x2="-214.39445"
- y1="201"
- x1="-224"
- gradientTransform="translate(0,4)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42396"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="277.00357"
- x2="215.34009"
- y1="290.00357"
- x1="209.05762"
- gradientTransform="matrix(1.1142111,0,0,-1,-174.01401,596.00357)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42398"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="559.03442"
- x2="198.57239"
- y1="550.50702"
- x1="178.77469"
- gradientTransform="matrix(1.1142111,0,0,-1,-174.01401,596.00357)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42400"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="78.9655"
- x2="93.029579"
- y1="120.4313"
- x1="132"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42402"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="123.20583"
- x2="136.44698"
- y1="99.873772"
- x1="112.48699"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42404"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42406"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="124.59384"
- x2="138.25778"
- y1="85.825607"
- x1="102.83286"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42408"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="78.9655"
- x2="93.029579"
- y1="120.4313"
- x1="132"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42410"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="559.03442"
- x2="198.57239"
- y1="550.50702"
- x1="178.77469"
- gradientTransform="matrix(1.1142111,0,0,-1,-174.01401,596.00357)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42412"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="120.49951"
- x2="133.62697"
- y1="99.873772"
- x1="112.48699"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42414"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42416"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="124.59384"
- x2="138.25778"
- y1="85.825607"
- x1="102.83286"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42418"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="65.5"
- x2="-181.375"
- y1="65.5"
- x1="-170.25"
- gradientTransform="translate(-120,79)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42420"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="39.110355"
- x2="-202.33263"
- y1="43.134327"
- x1="-223.42456"
- gradientTransform="matrix(0.6962506,0,0,0.8034158,-145.83341,108.95312)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42422"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="27.996962"
- x2="-220.82353"
- y1="40.355042"
- x1="-219.98772"
- gradientTransform="matrix(0.6962506,0,0,0.8034158,-145.83341,108.95312)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42424"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="62.441177"
- x2="-170.82031"
- y1="63.26775"
- x1="-177.6924"
- gradientTransform="matrix(0.9098462,0,0,0.9414558,-136.13478,83.33514)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42426"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-16.264704"
- x2="-93.75"
- y1="-16"
- x1="-101"
- gradientTransform="matrix(1.2857143,0,0,0.787037,-171.71429,158.80092)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42428"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="726.37006"
- x2="1661.8125"
- y1="720.01788"
- x1="1664.4413"
- gradientTransform="translate(-1297,-948)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42430"
- xlink:href="#linearGradient30208"
- inkscape:collect="always" />
- <radialGradient
- r="5.5"
- fy="722.19189"
- fx="1662.2664"
- cy="722.19189"
- cx="1662.2664"
- gradientTransform="matrix(0.1378252,-0.2988982,2.5269117,1.1651875,-1689.2674,-563.64056)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient42432"
- xlink:href="#linearGradient19425"
- inkscape:collect="always" />
- <linearGradient
- y2="829.72656"
- x2="1977.4047"
- y1="827.77124"
- x1="1984.3658"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,-1256.7473,-918.72044)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42434"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="185.8125"
- x2="-219.5"
- y1="193.68091"
- x1="-211.04486"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42436"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <radialGradient
- r="6.9375"
- fy="188.13423"
- fx="-216.5222"
- cy="188.13423"
- cx="-216.5222"
- gradientTransform="matrix(2.6261963,-1.575549,0.4790575,0.7985147,261.90894,-304.15053)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient42438"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <radialGradient
- r="3.4576657"
- fy="182.64247"
- fx="-221.88463"
- cy="182.64247"
- cx="-221.88463"
- gradientTransform="matrix(2.4767928,-0.2294888,0.06653313,0.7180687,315.70283,0.01290384)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient42440"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="44.732624"
- x2="-213"
- y1="38.277779"
- x1="-225.00002"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42442"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="117.77643"
- x2="133.97179"
- y1="110.75571"
- x1="124.8772"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42444"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="129.05313"
- x2="142.64723"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42446"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="217.06438"
- x2="123.33967"
- y1="223.61363"
- x1="129.32576"
- gradientTransform="matrix(1.1658027,0,0,1.1657997,-354.28972,51.94393)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42448"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42462"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="124.59384"
- x2="138.25778"
- y1="108.56933"
- x1="123.26987"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42464"
- xlink:href="#linearGradient15425"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42466"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="252.63284"
- x2="-45.689278"
- y1="252.69086"
- x1="-4.9152389"
- gradientTransform="matrix(-0.8370074,0,0,0.8129865,84.784966,-149.92038)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42468"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="60.591385"
- x2="117.16058"
- y1="57.034107"
- x1="111.03847"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,11.285548,8.325368)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42470"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42472"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="124.59384"
- x2="138.25778"
- y1="108.56933"
- x1="123.26987"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42474"
- xlink:href="#linearGradient15425"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42477"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-17.998919"
- x2="-100.62162"
- y1="-18.005362"
- x1="-92.587807"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42479"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="-17"
- x2="-93"
- y1="-16"
- x1="-101"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42481"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-22.166544"
- x2="-102.96513"
- y1="-22.830606"
- x1="-87.491188"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42483"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="-25.872688"
- x2="-98.997849"
- y1="-23.173643"
- x1="-98.997849"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42485"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42487"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="124.59384"
- x2="138.25778"
- y1="108.56933"
- x1="123.26987"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42489"
- xlink:href="#linearGradient15425"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42491"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="103.11092"
- x2="135.45256"
- y1="75.666725"
- x1="109.04134"
- gradientTransform="matrix(0.5290924,0,0,0.5294132,-17.313533,46.110999)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42493"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="105.27895"
- x2="59.057678"
- y1="93.805557"
- x1="47.655102"
- gradientTransform="matrix(0.5350034,0,0,0.5349052,24.446207,45.843517)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42495"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42497"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="124.59384"
- x2="138.25778"
- y1="108.56933"
- x1="123.26987"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42499"
- xlink:href="#linearGradient15425"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42501"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="117.77643"
- x2="133.97179"
- y1="110.75571"
- x1="124.8772"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42503"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="129.05313"
- x2="142.64723"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42505"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42507"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="124.59384"
- x2="138.25778"
- y1="108.56933"
- x1="123.26987"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42509"
- xlink:href="#linearGradient15425"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42511"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="119.05286"
- x2="135.14919"
- y1="106.42961"
- x1="118.95689"
- gradientTransform="matrix(0.4749148,1.0023386,-1.2226848,-0.4749148,213.62384,41.735193)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42513"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="134.687"
- x2="147.95374"
- y1="116.31751"
- x1="130.39502"
- gradientTransform="matrix(0.5333554,1.1220467,-1.1447545,-0.5333554,196.63818,32.816067)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42515"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="223.69542"
- x2="-171.01999"
- y1="313.87549"
- x1="-132.24858"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42517"
- xlink:href="#linearGradient18207"
- inkscape:collect="always" />
- <linearGradient
- y2="124.47867"
- x2="137.5759"
- y1="100.93772"
- x1="114.15679"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42519"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="125.82862"
- x2="140.19273"
- y1="118"
- x1="131.12576"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42521"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="226.33672"
- x2="174.75458"
- y1="244.14676"
- x1="190.68166"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42523"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="429.53806"
- x2="322.08145"
- y1="408.49368"
- x1="299.70026"
- gradientTransform="matrix(0.9050931,-7.9558708e-4,0.00612764,0.9147058,26.488451,35.562258)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42525"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35406"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="124.59384"
- x2="138.25778"
- y1="100.51657"
- x1="119.94563"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35408"
- xlink:href="#linearGradient15425"
- inkscape:collect="always" />
- <linearGradient
- y2="308.51169"
- x2="308.84512"
- y1="311.2269"
- x1="311.90765"
- gradientTransform="matrix(0.9897912,0,0,0.9897912,2.2765631,2.9503441)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35410"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <radialGradient
- r="7.03125"
- fy="237.2262"
- fx="269.71231"
- cy="237.2262"
- cx="269.71231"
- gradientTransform="matrix(1.1377775,-0.7111077,0.4395239,0.7032404,-101.13916,328.96745)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient35412"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="7.03125"
- fy="245.91792"
- fx="262.83905"
- cy="245.91792"
- cx="262.83905"
- gradientTransform="matrix(1.706663,-1.1377794,0.5688915,0.8533318,-282.47828,404.20327)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient35414"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35416"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="124.59384"
- x2="138.25778"
- y1="100.51657"
- x1="119.94563"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35418"
- xlink:href="#linearGradient15425"
- inkscape:collect="always" />
- <linearGradient
- y2="286.2493"
- x2="226.09999"
- y1="291.80676"
- x1="220.14905"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35420"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="291.99768"
- x2="219.06912"
- y1="296.15784"
- x1="223.12212"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35422"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="297.01614"
- x2="224.01613"
- y1="290.56451"
- x1="217.56451"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35424"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="4"
- fy="291.33972"
- fx="219.00334"
- cy="291.33972"
- cx="219.00334"
- gradientTransform="matrix(0.3677588,0.3783715,-0.5696226,0.5536455,304.13863,47.532824)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient35426"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35468"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="124.59384"
- x2="138.25778"
- y1="100.51657"
- x1="119.94563"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35470"
- xlink:href="#linearGradient15425"
- inkscape:collect="always" />
- <linearGradient
- y2="308.51169"
- x2="308.84512"
- y1="311.2269"
- x1="311.90765"
- gradientTransform="matrix(0.9897912,0,0,0.9897912,2.2765631,2.9503441)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35472"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <radialGradient
- r="7.03125"
- fy="237.2262"
- fx="269.71231"
- cy="237.2262"
- cx="269.71231"
- gradientTransform="matrix(1.1377775,-0.7111077,0.4395239,0.7032404,-101.13916,328.96745)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient35474"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="7.03125"
- fy="245.91792"
- fx="262.83905"
- cy="245.91792"
- cx="262.83905"
- gradientTransform="matrix(1.706663,-1.1377794,0.5688915,0.8533318,-282.47828,404.20327)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient35476"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="125.94853"
- x2="140.66667"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35478"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="124.59384"
- x2="138.25778"
- y1="100.51657"
- x1="119.94563"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35480"
- xlink:href="#linearGradient15425"
- inkscape:collect="always" />
- <linearGradient
- y2="286.2493"
- x2="226.09999"
- y1="291.80676"
- x1="220.14905"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35482"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="291.99768"
- x2="219.06912"
- y1="296.15784"
- x1="223.12212"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35484"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="297.01614"
- x2="224.01613"
- y1="290.56451"
- x1="217.56451"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35486"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="4"
- fy="291.33972"
- fx="219.00334"
- cy="291.33972"
- cx="219.00334"
- gradientTransform="matrix(0.3677588,0.3783715,-0.5696226,0.5536455,304.13863,47.532824)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient35488"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="119.21729"
- x2="133.11621"
- y1="112.6446"
- x1="125.59209"
- gradientUnits="userSpaceOnUse"
- id="linearGradient34618"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="132.30261"
- x2="141.83322"
- y1="116.31751"
- x1="130.39502"
- gradientUnits="userSpaceOnUse"
- id="linearGradient34620"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="54.000004"
- x2="34"
- y1="60.000004"
- x1="31"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35446"
- xlink:href="#linearGradient35411"
- inkscape:collect="always" />
- <linearGradient
- y2="101.14284"
- x2="121.4286"
- y1="118"
- x1="135.46967"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35448"
- xlink:href="#linearGradient35411"
- inkscape:collect="always" />
- <linearGradient
- y2="114.8"
- x2="128.8"
- y1="118"
- x1="133.60002"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35450"
- xlink:href="#linearGradient35411"
- inkscape:collect="always" />
- <linearGradient
- y2="114.8"
- x2="128.8"
- y1="123.05057"
- x1="132.30316"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35452"
- xlink:href="#linearGradient35411"
- inkscape:collect="always" />
- <linearGradient
- y2="118"
- x2="130.48389"
- y1="124.27161"
- x1="136.35806"
- gradientUnits="userSpaceOnUse"
- id="linearGradient35454"
- xlink:href="#linearGradient35411"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="55.066181"
- x2="32.5"
- y1="65.791054"
- x1="28.130203"
- id="linearGradient35718"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="1.5"
- fy="14.5"
- fx="70.5"
- cy="14.5"
- cx="70.5"
- gradientTransform="matrix(1.050372,0,0,1.050372,-3.551238,-0.730396)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient36452"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="419.75"
- x2="-101.49999"
- y1="417.87503"
- x1="-103.37495"
- gradientTransform="matrix(0.4000084,0,0,0.4000084,137.60085,-8.4035259)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36454"
- xlink:href="#linearGradient36273"
- inkscape:collect="always" />
- <linearGradient
- y2="419.75"
- x2="-101.49999"
- y1="417.87503"
- x1="-103.37495"
- gradientTransform="matrix(0.4000084,0,0,0.4000084,131.60084,3.5964741)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36456"
- xlink:href="#linearGradient36273"
- inkscape:collect="always" />
- <linearGradient
- y2="419.75"
- x2="-101.49999"
- y1="417.87503"
- x1="-103.37495"
- gradientTransform="matrix(0.4000084,0,0,0.4000084,143.60084,3.5964739)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36458"
- xlink:href="#linearGradient36273"
- inkscape:collect="always" />
- <linearGradient
- y2="129.27902"
- x2="143.16118"
- y1="111.40558"
- x1="125.75312"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37095"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="42.717522"
- x2="197.03207"
- y1="30.343155"
- x1="185.89514"
- gradientTransform="matrix(1.0028571,0,0,0.9943503,-0.4404318,0.129119)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37097"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="32.46875"
- x2="180.8125"
- y1="40.25"
- x1="188"
- gradientTransform="translate(-3,3)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36648"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="30.15625"
- x2="184.25"
- y1="33.9375"
- x1="187.8125"
- gradientTransform="translate(-3,3)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36650"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="43.381248"
- x2="186.00626"
- y1="33.537502"
- x1="177.85001"
- gradientTransform="translate(-3.0999952,2.9000005)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36652"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="31.368597"
- x2="172.36885"
- y1="39.645184"
- x1="182.20605"
- gradientTransform="matrix(0.9643891,0,0,0.9772371,6.188671,1.0072576)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36654"
- xlink:href="#linearGradient19900"
- inkscape:collect="always" />
- <linearGradient
- y2="37.415516"
- x2="186.00002"
- y1="32.701904"
- x1="181.14906"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36656"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="34.272892"
- x2="175.82253"
- y1="40.924297"
- x1="181.9404"
- gradientTransform="matrix(0.9643891,0,0,0.9772371,9.438677,-2.4927424)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36658"
- xlink:href="#linearGradient19900"
- inkscape:collect="always" />
- <linearGradient
- y2="94.239906"
- x2="68.0271"
- y1="108.47212"
- x1="80.60067"
- gradientTransform="matrix(0.9166695,0,0,0.9203753,-10.025729,345.78566)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36468"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="116.62141"
- x2="88.785263"
- y1="95.337166"
- x1="68.361542"
- gradientTransform="translate(-15.983875,338)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36470"
- xlink:href="#linearGradient13938"
- inkscape:collect="always" />
- <linearGradient
- y2="108.06429"
- x2="81.383331"
- y1="84.330009"
- x1="58.761654"
- gradientTransform="matrix(0.9998599,0,0,0.9960071,-15.972985,338.41149)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36472"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="61.720783"
- x2="117.12428"
- y1="53.227627"
- x1="104.90227"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36713"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="348"
- x2="-56.5"
- y1="340.32199"
- x1="-56.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36715"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="329.26965"
- x2="-47.214466"
- y1="329.06256"
- x1="-56.8125"
- gradientTransform="translate(0,13)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36717"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="61.720783"
- x2="117.12428"
- y1="53.227627"
- x1="104.90227"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36719"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="348"
- x2="-56.5"
- y1="340.32199"
- x1="-56.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36721"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="329.26965"
- x2="-47.214466"
- y1="329.06256"
- x1="-56.8125"
- gradientTransform="translate(0,13)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36723"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="61.720783"
- x2="117.12428"
- y1="53.227627"
- x1="104.90227"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36725"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="348"
- x2="-56.5"
- y1="340.32199"
- x1="-56.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36727"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="126.37626"
- x2="273.9993"
- y1="108.02418"
- x1="260.67468"
- gradientTransform="matrix(1,0,0,0.7972867,61.99991,2.2419)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36729"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(-1,0,0,1,780.92531,0)"
- y2="248.09296"
- x2="389.59052"
- y1="220.84622"
- x1="389.73953"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37396"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(-1,0,0,1,780.92531,0)"
- y2="242.55887"
- x2="388.20074"
- y1="241.72565"
- x1="389.51059"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37398"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="284.5"
- x2="-20"
- y1="283"
- x1="-20"
- gradientTransform="translate(-2)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38570"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="284.5"
- x2="-20"
- y1="283"
- x1="-20"
- gradientTransform="translate(-2,-582)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38572"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient16500-7"
- inkscape:collect="always">
- <stop
- id="stop16502-1"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop16504-2"
- offset="1"
- style="stop-color:black;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient1610-7-6">
- <stop
- id="stop1611-4-1"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop1612-0-4"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient10069-4-2">
- <stop
- id="stop10071-8-3"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop10073-8-2"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient11871-4"
- inkscape:collect="always">
- <stop
- id="stop11873-5"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop11875-5"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="12"
- x2="68"
- y1="42"
- x1="96"
- gradientTransform="matrix(1,0,0,-1,-83,199)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39048"
- xlink:href="#linearGradient1610-7-6"
- inkscape:collect="always" />
- <linearGradient
- y2="12"
- x2="66"
- y1="20"
- x1="65"
- gradientTransform="matrix(1,0,0,-1,-83,199)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39050"
- xlink:href="#linearGradient10069-4-2"
- inkscape:collect="always" />
- <linearGradient
- y2="16"
- x2="68"
- y1="18"
- x1="67.25"
- gradientTransform="matrix(1,0,0,-1,-83,199)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39052"
- xlink:href="#linearGradient11871-4"
- inkscape:collect="always" />
- <linearGradient
- y2="-33.303608"
- x2="88.492455"
- y1="-32.339718"
- x1="89.975014"
- gradientTransform="matrix(0.8422958,0,0,0.8364537,82.535678,2.9394266)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39835-9"
- xlink:href="#linearGradient35411-4-27"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient35411-4-27">
- <stop
- style="stop-color:#2b5385;stop-opacity:1;"
- offset="0"
- id="stop35414-0-9" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop35416-9-5" />
- </linearGradient>
- <linearGradient
- y2="115.97001"
- x2="128.7139"
- y1="123.49161"
- x1="131.02808"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39837-4"
- xlink:href="#linearGradient35411-8-1-3"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient35411-8-1-3">
- <stop
- style="stop-color:#2b5385;stop-opacity:1;"
- offset="0"
- id="stop35414-2-7-1" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop35416-4-1-2" />
- </linearGradient>
- <linearGradient
- y2="118"
- x2="130.48389"
- y1="124.27161"
- x1="136.35806"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39839-3"
- xlink:href="#linearGradient35411-8-1-3"
- inkscape:collect="always" />
- <linearGradient
- y2="82.308861"
- x2="109.18613"
- y1="88.476723"
- x1="115.15884"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39841-3"
- xlink:href="#linearGradient23974-5-4"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient23974-5-4">
- <stop
- style="stop-color:#2561b7;stop-opacity:1;"
- offset="0"
- id="stop23976-27-1" />
- <stop
- style="stop-color:#f9fbff;stop-opacity:1"
- offset="1"
- id="stop23978-6-1" />
- </linearGradient>
- <linearGradient
- y2="81.5"
- x2="97.75"
- y1="84.25"
- x1="101"
- gradientTransform="translate(21)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39843-3"
- xlink:href="#linearGradient1610-8"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient1610-8">
- <stop
- id="stop1611-7"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop1612-4"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="89.708977"
- x2="96.592278"
- y1="81.439644"
- x1="87.44548"
- gradientTransform="translate(21)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39845-2"
- xlink:href="#linearGradient319-77"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient319-77">
- <stop
- id="stop320-9"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-31"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="285"
- x2="31.498274"
- y1="285"
- x1="23.959812"
- gradientTransform="matrix(1.0369025,0,0,1.5,-458.38567,-344)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41540"
- xlink:href="#linearGradient22882"
- inkscape:collect="always" />
- <linearGradient
- y2="285"
- x2="31.538462"
- y1="285"
- x1="24"
- gradientTransform="matrix(1.1929722,0,0,0.5,-462.63135,-59)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41542"
- xlink:href="#linearGradient22882"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient23974-4">
- <stop
- style="stop-color:#2561b7;stop-opacity:1;"
- offset="0"
- id="stop23976-20" />
- <stop
- style="stop-color:#f9fbff;stop-opacity:1"
- offset="1"
- id="stop23978-9" />
- </linearGradient>
- <linearGradient
- y2="128"
- x2="125.18381"
- y1="111.35809"
- x1="139.2112"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32529-7"
- xlink:href="#linearGradient319-37"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient319-37">
- <stop
- id="stop320-2"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-60"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient23974-4"
- id="linearGradient41582"
- gradientUnits="userSpaceOnUse"
- x1="129.62384"
- y1="115.76797"
- x2="139.07738"
- y2="125.77761" />
- <radialGradient
- r="8"
- fy="77.3125"
- fx="430.00003"
- cy="77.3125"
- cx="430.00003"
- gradientTransform="matrix(0.8128508,0,0,0.8128508,80.474142,14.46897)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient41666"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="38.088879"
- x2="199.27217"
- y1="38.088879"
- x1="210.08989"
- gradientTransform="matrix(0.785748,0,0,0.78488,265.93616,46.1048)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41668"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="276.92188"
- x2="23.25"
- y1="277"
- x1="28.4375"
- gradientTransform="translate(399.01387,-202)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41670"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <linearGradient
- y2="75.5"
- x2="424.75217"
- y1="77"
- x1="437.98615"
- gradientTransform="translate(0.01387)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41672"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="75.5"
- x2="424.75217"
- y1="78"
- x1="438.61115"
- gradientTransform="translate(0.01387)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41674"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="75.5"
- x2="424.75217"
- y1="77.44017"
- x1="441.98615"
- gradientTransform="translate(0.01387)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41676"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="261.44183"
- x2="237.92474"
- y1="285.63672"
- x1="258.94861"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42432"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="116.54932"
- x2="130.54761"
- y1="122.90726"
- x1="135.45557"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42435"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="129.27184"
- x2="143.88347"
- y1="111.81818"
- x1="125.81818"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42437"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient38796-7-9">
- <stop
- id="stop38798-6-8"
- offset="0"
- style="stop-color:#fc9694;stop-opacity:1;" />
- <stop
- id="stop38800-1-8"
- offset="1"
- style="stop-color:#e71609;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient1610-87">
- <stop
- id="stop1611-78"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop1612-3"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient24679-1">
- <stop
- id="stop24681-0"
- offset="0"
- style="stop-color:#3d361a;stop-opacity:1;" />
- <stop
- style="stop-color:#d1c595;stop-opacity:1;"
- offset="0.45537567"
- id="stop24683-7" />
- <stop
- id="stop24685-3"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="122.36016"
- x2="134.91479"
- y1="111.2683"
- x1="125.99933"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38719"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="122.36016"
- x2="134.91479"
- y1="112.53999"
- x1="126.72586"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38722"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="99.029617"
- x2="99.628899"
- y1="113.45913"
- x1="111.46314"
- gradientTransform="translate(19.367382)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38724"
- xlink:href="#linearGradient13973"
- inkscape:collect="always" />
- <linearGradient
- y2="131.03783"
- x2="143.69765"
- y1="114.2303"
- x1="127.63637"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38726"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="77.877228"
- x2="410.47467"
- y1="68.853401"
- x1="400.90442"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39142"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="337.517"
- x2="337.80573"
- y1="323"
- x1="308"
- gradientTransform="translate(-157.00004,-233.00002)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38005"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="325"
- x2="286.60001"
- y1="323.80002"
- x1="285.39999"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38007"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1501868"
- fy="33.548397"
- fx="-67.890839"
- cy="33.548397"
- cx="-67.890839"
- gradientTransform="matrix(0.4098275,-0.6406034,2.5104141,1.6060416,-127.46107,-65.792415)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient43410-4"
- xlink:href="#linearGradient43276-0"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient43276-0"
- inkscape:collect="always">
- <stop
- id="stop43278-9"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop43280-4"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <radialGradient
- r="3.1501868"
- fy="34.896461"
- fx="-74.960228"
- cy="34.896461"
- cx="-74.960228"
- gradientTransform="matrix(0.4098275,-0.7183766,2.5885772,1.4767588,-130.41049,-65.518114)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient43412-8"
- xlink:href="#linearGradient43276-0"
- inkscape:collect="always" />
- <linearGradient
- y2="55.566177"
- x2="60.981617"
- y1="54.1525"
- x1="59.622501"
- gradientTransform="translate(0,-21)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40270"
- xlink:href="#linearGradient38796-7-9"
- inkscape:collect="always" />
- <linearGradient
- y2="54.130001"
- x2="57.789688"
- y1="56.5"
- x1="60.25"
- gradientTransform="translate(-0.5,-21)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40272"
- xlink:href="#linearGradient1610-87"
- inkscape:collect="always" />
- <linearGradient
- y2="52.25"
- x2="56"
- y1="56.5"
- x1="60.25"
- gradientTransform="translate(-0.5,-21)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40274"
- xlink:href="#linearGradient1610-87"
- inkscape:collect="always" />
- <linearGradient
- y2="34.685287"
- x2="60.676094"
- y1="37.960625"
- x1="63.666252"
- gradientTransform="translate(-1.54625,-1)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40276"
- xlink:href="#linearGradient1610-87"
- inkscape:collect="always" />
- <linearGradient
- y2="62.960247"
- x2="50.371208"
- y1="65.644958"
- x1="52.17437"
- gradientTransform="translate(0,-21)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40278"
- xlink:href="#linearGradient24679-1"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient24143-0">
- <stop
- style="stop-color:#2c2c2c;stop-opacity:1;"
- offset="0"
- id="stop24145-0" />
- <stop
- id="stop24669-1"
- offset="0.5"
- style="stop-color:#b3b3b3;stop-opacity:1;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop24147-4" />
- </linearGradient>
- <linearGradient
- y2="-89.026711"
- x2="-28.177105"
- y1="-121.58411"
- x1="-70.605209"
- gradientTransform="translate(22)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39686-1"
- xlink:href="#linearGradient1610-3-7"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient1610-3-7">
- <stop
- id="stop1611-1-4"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop1612-6-0"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="-103.2075"
- x2="-55.5975"
- y1="-124"
- x1="-74"
- gradientTransform="translate(22)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39688-9"
- xlink:href="#linearGradient319-5-9-4"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient319-5-9-4">
- <stop
- id="stop320-761-8-8"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-89-24-8"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient37542-6">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop37544-18" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop37546-92" />
- </linearGradient>
- <linearGradient
- id="linearGradient16500-3">
- <stop
- id="stop16502-3"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop16504-41"
- offset="1"
- style="stop-color:black;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient9030-1">
- <stop
- id="stop9032-9"
- offset="0"
- style="stop-color:white;stop-opacity:1;" />
- <stop
- id="stop9034-8"
- offset="1"
- style="stop-color:white;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient59371">
- <stop
- id="stop59373"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop59375"
- offset="1"
- style="stop-color:black;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="168"
- x2="29.972469"
- y1="155.66899"
- x1="25.963812"
- gradientTransform="translate(301.02752,449.99999)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42965-7"
- xlink:href="#linearGradient319-9-1"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient319-9-1">
- <stop
- id="stop320-92-1"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-55-5"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="628.20752"
- x2="337.04251"
- y1="607.09375"
- x1="335.96875"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42967-6"
- xlink:href="#linearGradient1610-06-1"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient1610-06-1">
- <stop
- id="stop1611-8-4"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop1612-1-2"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="122.92735"
- x2="135.00615"
- y1="80.045052"
- x1="98.858559"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41266"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="243.31177"
- x2="129.24866"
- y1="245.03757"
- x1="130.75166"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41268"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="129.82761"
- x2="144.22272"
- y1="112.31642"
- x1="126.37006"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41270"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="226.33672"
- x2="174.75458"
- y1="244.14676"
- x1="190.68166"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41272"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="500"
- x2="54.8125"
- y1="500"
- x1="108"
- gradientTransform="translate(146.00001,-20)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40918"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="501.10059"
- x2="41.311054"
- y1="502.71924"
- x1="88.874489"
- gradientTransform="translate(146.00001,-20)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40920"
- xlink:href="#linearGradient15809"
- inkscape:collect="always" />
- <linearGradient
- y2="501.58331"
- x2="76.885078"
- y1="504.67188"
- x1="80.768944"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40922"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="501.04794"
- x2="78.000008"
- y1="511.42972"
- x1="89.526657"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40924"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="492.15359"
- fx="75.95578"
- cy="492.15359"
- cx="75.95578"
- gradientTransform="matrix(0.3949409,0.3949425,-0.4243709,0.4254619,404.60763,237.35923)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient40926"
- xlink:href="#linearGradient14262"
- inkscape:collect="always" />
- <radialGradient
- r="2.9089756"
- fy="503.81497"
- fx="79.959885"
- cy="503.81497"
- cx="79.959885"
- gradientTransform="matrix(1.9435203,-2.1990242,1.1704696,1.0049395,-665.14472,173.40654)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient40928"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="499.99969"
- fx="74.518959"
- cy="499.99969"
- cx="74.518959"
- gradientTransform="matrix(0.8886193,0.8021825,-0.8051059,0.8972684,411.80247,-8.668512)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient40930"
- xlink:href="#linearGradient14262"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="499.87418"
- fx="75.054749"
- cy="499.87418"
- cx="75.054749"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient40932"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <linearGradient
- y2="245.13458"
- x2="30.713354"
- y1="199.5118"
- x1="-16.608393"
- gradientTransform="matrix(-1.1511102,0,0,-1.1511102,152.68442,762.00423)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36549"
- xlink:href="#linearGradient37542-6"
- inkscape:collect="always" />
- <radialGradient
- r="6.5"
- fy="243.37001"
- fx="32.193073"
- cy="243.37001"
- cx="32.193073"
- gradientTransform="matrix(0.6959954,0.116912,-0.04402498,0.2620878,107.60035,414.99606)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient36551"
- xlink:href="#linearGradient16500-3"
- inkscape:collect="always" />
- <linearGradient
- y2="251.99768"
- x2="35.615856"
- y1="233.6039"
- x1="32.204613"
- gradientTransform="matrix(-0.9999993,0,0,-0.9821923,147.99998,720.60935)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36553"
- xlink:href="#linearGradient24143-0"
- inkscape:collect="always" />
- <linearGradient
- y2="101.28939"
- x2="114.11786"
- y1="134.53409"
- x1="148.76726"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36555"
- xlink:href="#linearGradient16500-3"
- inkscape:collect="always" />
- <linearGradient
- y2="163.00024"
- x2="477.10818"
- y1="163.09677"
- x1="481.60803"
- gradientTransform="matrix(0.7500336,0,0,0.8546123,-239.89087,340.17205)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36557"
- xlink:href="#linearGradient40809"
- inkscape:collect="always" />
- <linearGradient
- y2="160.80888"
- x2="463.90472"
- y1="164.64572"
- x1="473.79471"
- gradientTransform="matrix(0.7500181,0,0,0.8546123,-235.38338,339.18935)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36559"
- xlink:href="#linearGradient59371"
- inkscape:collect="always" />
- <linearGradient
- y2="132.61403"
- x2="144.33401"
- y1="118"
- x1="129.74713"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36561"
- xlink:href="#linearGradient9030-1"
- inkscape:collect="always" />
- <linearGradient
- y2="116.14438"
- x2="126.18426"
- y1="124.90586"
- x1="138.46678"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36563"
- xlink:href="#linearGradient16500-3"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient9030-7-8-6">
- <stop
- id="stop9032-4-9-2"
- offset="0"
- style="stop-color:white;stop-opacity:1;" />
- <stop
- id="stop9034-0-2-3"
- offset="1"
- style="stop-color:white;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient40809-2-2">
- <stop
- id="stop40811-1-6"
- offset="0"
- style="stop-color:#0059d7;stop-opacity:1;" />
- <stop
- id="stop40813-4-2"
- offset="1"
- style="stop-color:#b7d4ff;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient20055-7-5-5">
- <stop
- style="stop-color:#0a2a5a;stop-opacity:1;"
- offset="0"
- id="stop20057-1-7-7" />
- <stop
- style="stop-color:#3771c8;stop-opacity:1;"
- offset="1"
- id="stop20059-1-6-8" />
- </linearGradient>
- <linearGradient
- id="linearGradient16500-4-9-7">
- <stop
- id="stop16502-8-5-8"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop16504-8-4-0"
- offset="1"
- style="stop-color:black;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient37829">
- <stop
- style="stop-color:#3d361a;stop-opacity:1;"
- offset="0"
- id="stop37831" />
- <stop
- id="stop37833"
- offset="0.5"
- style="stop-color:#d1c595;stop-opacity:1;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop37835" />
- </linearGradient>
- <linearGradient
- id="linearGradient40578-4-8">
- <stop
- id="stop40580-8-9"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop40582-6-8"
- offset="1"
- style="stop-color:black;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="30.023426"
- x2="278.25537"
- y1="3.6831069"
- x1="253.78497"
- gradientTransform="matrix(0.888889,0,0,1,513.5,184.50451)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39254"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <radialGradient
- r="6.9000001"
- fy="206.40076"
- fx="756.83508"
- cy="206.40076"
- cx="756.83508"
- gradientTransform="matrix(0.3817213,-0.4377393,0.4780868,0.4169055,368.09749,451.76937)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient39256"
- xlink:href="#linearGradient40578-4-8"
- inkscape:collect="always" />
- <linearGradient
- y2="249"
- x2="93.0625"
- y1="241.125"
- x1="87"
- gradientTransform="translate(670,-33)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39258"
- xlink:href="#linearGradient58334"
- inkscape:collect="always" />
- <linearGradient
- y2="305"
- x2="758"
- y1="300.83292"
- x1="754.28558"
- gradientTransform="translate(0,-95.999998)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39260"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient40455-7">
- <stop
- style="stop-color:#fff991;stop-opacity:1;"
- offset="0"
- id="stop40457-6" />
- <stop
- style="stop-color:#fffbb9;stop-opacity:0;"
- offset="1"
- id="stop40459-1" />
- </linearGradient>
- <linearGradient
- y2="30.023426"
- x2="278.25537"
- y1="3.6831069"
- x1="253.78497"
- gradientTransform="matrix(0.888889,0,0,1,513.5,184.50451)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36657"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <radialGradient
- r="6.9000001"
- fy="206.40076"
- fx="756.83508"
- cy="206.40076"
- cx="756.83508"
- gradientTransform="matrix(0.3817213,-0.4377393,0.4780868,0.4169055,368.09749,451.76937)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient36659"
- xlink:href="#linearGradient40578-4-8"
- inkscape:collect="always" />
- <linearGradient
- y2="249"
- x2="93.0625"
- y1="241.125"
- x1="87"
- gradientTransform="translate(670,-33)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36661"
- xlink:href="#linearGradient58334"
- inkscape:collect="always" />
- <linearGradient
- y2="305"
- x2="758"
- y1="300.83292"
- x1="754.28558"
- gradientTransform="translate(0,-95.999998)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36663"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="288.70752"
- x2="253.86414"
- y1="247.85646"
- x1="261.17639"
- gradientTransform="matrix(-0.9999993,0,0,-0.9821923,165.4,716.20935)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37089"
- xlink:href="#linearGradient37829"
- inkscape:collect="always" />
- <linearGradient
- y2="262.27994"
- x2="263.60016"
- y1="247.008"
- x1="261.60016"
- gradientTransform="matrix(-0.888884,0,0,-0.8730569,136.66557,688.20759)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37091"
- xlink:href="#linearGradient39080"
- inkscape:collect="always" />
- <linearGradient
- y2="265.9697"
- x2="50.485012"
- y1="232.59058"
- x1="19.923029"
- gradientTransform="translate(-124.99991,219.9903)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37093"
- xlink:href="#linearGradient9030-7-8-6"
- inkscape:collect="always" />
- <linearGradient
- y2="144.5041"
- x2="193.7029"
- y1="144.5041"
- x1="199.26254"
- gradientTransform="matrix(0.7500336,0,0,0.8546123,-239.89087,340.17205)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37096"
- xlink:href="#linearGradient40809-2-2"
- inkscape:collect="always" />
- <linearGradient
- y2="49.84375"
- x2="576.4375"
- y1="54.299286"
- x1="579.625"
- gradientTransform="translate(-670.99999,411.99999)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37098"
- xlink:href="#linearGradient20055-7-5-5"
- inkscape:collect="always" />
- <linearGradient
- y2="49.87711"
- x2="575.70361"
- y1="56.363762"
- x1="582.79974"
- gradientTransform="translate(-670.99999,411.99999)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37100"
- xlink:href="#linearGradient16500-4-9-7"
- inkscape:collect="always" />
- <linearGradient
- y2="132.61403"
- x2="144.33401"
- y1="118"
- x1="129.74713"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37102"
- xlink:href="#linearGradient9030-7-8-6"
- inkscape:collect="always" />
- <linearGradient
- y2="116.40535"
- x2="132.25548"
- y1="123.96156"
- x1="140.78264"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37104"
- xlink:href="#linearGradient16500-4-9-7"
- inkscape:collect="always" />
- <radialGradient
- r="4.9999957"
- fy="95.970413"
- fx="-73.135666"
- cy="95.970413"
- cx="-73.135666"
- gradientTransform="matrix(0.7881042,0.01544832,-0.01690407,0.7184169,-16.705439,29.204304)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37553"
- xlink:href="#linearGradient40455-7"
- inkscape:collect="always" />
- <radialGradient
- r="6.9000001"
- fy="206.8443"
- fx="756.98285"
- cy="206.8443"
- cx="756.98285"
- gradientTransform="matrix(0.4604901,-0.4901463,0.6187826,0.5813434,279.52277,457.42224)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37555"
- xlink:href="#linearGradient37667"
- inkscape:collect="always" />
- <linearGradient
- y2="249"
- x2="93.0625"
- y1="243.96121"
- x1="89.012573"
- gradientTransform="translate(670,-33)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37558"
- xlink:href="#linearGradient58334"
- inkscape:collect="always" />
- <linearGradient
- y2="305.53677"
- x2="758.62622"
- y1="300.83292"
- x1="754.28558"
- gradientTransform="translate(1,-94.999998)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37561"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <radialGradient
- r="4.9999957"
- fy="95.949913"
- fx="-73.227486"
- cy="95.949913"
- cx="-73.227486"
- gradientTransform="matrix(0.7881042,0.01544832,-0.01690407,0.7184169,-16.705439,29.204304)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37553-2"
- xlink:href="#linearGradient40455-7-1"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient40455-7-1">
- <stop
- style="stop-color:#fff991;stop-opacity:1;"
- offset="0"
- id="stop40457-6-6" />
- <stop
- style="stop-color:#fffbb9;stop-opacity:0;"
- offset="1"
- id="stop40459-1-8" />
- </linearGradient>
- <radialGradient
- r="6.9000001"
- fy="206.40076"
- fx="756.83508"
- cy="206.40076"
- cx="756.83508"
- gradientTransform="matrix(0.4769848,-0.5257394,0.6056598,0.5494938,269.68012,490.96577)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37555-5"
- xlink:href="#linearGradient40578-4-8-7"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient40578-4-8-7">
- <stop
- id="stop40580-8-9-6"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop40582-6-8-1"
- offset="1"
- style="stop-color:black;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="249"
- x2="93.0625"
- y1="243.96121"
- x1="89.012573"
- gradientTransform="translate(670,-33)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37558-8"
- xlink:href="#linearGradient58334-9"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient58334-9">
- <stop
- style="stop-color:#ffffff;stop-opacity:0.87628865;"
- offset="0.0000000"
- id="stop58336-27" />
- <stop
- style="stop-color:#fffffe;stop-opacity:0.0000000;"
- offset="1.0000000"
- id="stop58338-9" />
- </linearGradient>
- <linearGradient
- id="linearGradient16500-4"
- inkscape:collect="always">
- <stop
- id="stop16502-31"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop16504-23"
- offset="1"
- style="stop-color:black;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient16500-4"
- id="linearGradient37610-3"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(1,-94.999998)"
- x1="754.28558"
- y1="300.83292"
- x2="758"
- y2="305" />
- <linearGradient
- y2="94.239906"
- x2="68.0271"
- y1="108.47212"
- x1="80.60067"
- gradientTransform="matrix(0.9166695,0,0,0.9203753,-10.025729,345.78566)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient71834"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="107.18619"
- x2="79.355118"
- y1="97.5"
- x1="70.55275"
- gradientTransform="translate(-15.983875,338)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient71836"
- xlink:href="#linearGradient71814"
- inkscape:collect="always" />
- <linearGradient
- y2="112.03586"
- x2="86.00116"
- y1="88.058716"
- x1="61.465469"
- gradientTransform="matrix(0.9998599,0,0,0.9960071,-15.972985,338.41149)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient71838"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="translate(522.00015,466)"
- y2="22.485678"
- x2="-18.85"
- y1="36.47311"
- x1="-22"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37188"
- xlink:href="#linearGradient38256"
- inkscape:collect="always" />
- <linearGradient
- y2="340"
- x2="343.26239"
- y1="323"
- x1="308"
- gradientTransform="translate(168.00015,169.99998)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37191"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="translate(522.00015,466)"
- y2="30.200407"
- x2="-27"
- y1="38"
- x1="-26"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37201"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient1610-7409">
- <stop
- id="stop1611-488"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop1612-2"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient40578-4-8-5">
- <stop
- id="stop40580-8-9-5"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop40582-6-8-17"
- offset="1"
- style="stop-color:black;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient58334-1">
- <stop
- style="stop-color:#ffffff;stop-opacity:0.87628865;"
- offset="0.0000000"
- id="stop58336-5" />
- <stop
- style="stop-color:#fffffe;stop-opacity:0.0000000;"
- offset="1.0000000"
- id="stop58338-27" />
- </linearGradient>
- <linearGradient
- id="linearGradient16500-14"
- inkscape:collect="always">
- <stop
- id="stop16502-23"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop16504-22"
- offset="1"
- style="stop-color:black;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="26.239208"
- x2="272.92456"
- y1="3.6831069"
- x1="253.78497"
- gradientTransform="matrix(0.888889,0,0,1,513.5,184.50451)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37317"
- xlink:href="#linearGradient1610-7409"
- inkscape:collect="always" />
- <radialGradient
- r="6.9000001"
- fy="206.40076"
- fx="756.83508"
- cy="206.40076"
- cx="756.83508"
- gradientTransform="matrix(0.3817213,-0.4377393,0.4780868,0.4169055,368.09749,451.76937)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient37319"
- xlink:href="#linearGradient40578-4-8-5"
- inkscape:collect="always" />
- <linearGradient
- y2="249"
- x2="93.0625"
- y1="241.125"
- x1="87"
- gradientTransform="translate(670,-33)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37321"
- xlink:href="#linearGradient58334-1"
- inkscape:collect="always" />
- <linearGradient
- y2="305.51749"
- x2="758.77625"
- y1="301.01553"
- x1="754.1275"
- gradientTransform="translate(0,-95.999998)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37323"
- xlink:href="#linearGradient16500-14"
- inkscape:collect="always" />
- <linearGradient
- y2="44.322407"
- x2="36.74033"
- y1="53"
- x1="37"
- gradientTransform="translate(461.00015,453)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37338"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(-1,0,0,1,992,0)"
- y2="36"
- x2="494"
- y1="36"
- x1="510.25"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37132"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(-1,0,0,1,992,0)"
- y2="43"
- x2="503"
- y1="33"
- x1="492"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37134"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="35"
- x2="483"
- y1="35"
- x1="497.3125"
- gradientTransform="matrix(-1,0,0,1,551,105)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37136"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="35"
- x2="483"
- y1="35"
- x1="497.3125"
- gradientTransform="matrix(-1,0,0,1,551,105)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37138"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient40455-7-1-7">
- <stop
- style="stop-color:#fff991;stop-opacity:1;"
- offset="0"
- id="stop40457-6-6-4" />
- <stop
- style="stop-color:#fffbb9;stop-opacity:0;"
- offset="1"
- id="stop40459-1-8-0" />
- </linearGradient>
- <linearGradient
- y2="249.73875"
- x2="28.275171"
- y1="203.3882"
- x1="-9.3937483"
- gradientTransform="matrix(0.923955,0,0,1,2.85168,-84)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38362"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <radialGradient
- r="4.9999957"
- fy="94.935921"
- fx="-73.972397"
- cy="94.935921"
- cx="-73.972397"
- gradientTransform="matrix(1.1033468,0.01995877,-0.02366572,0.9281732,7.8124646,13.285893)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient38364"
- xlink:href="#linearGradient40455-7-1-7"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(1,0,0,0.8461542,0,25.615323)"
- y2="167.11429"
- x2="38.580528"
- y1="143.17894"
- x1="19.210167"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38367"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient43276-6"
- inkscape:collect="always">
- <stop
- id="stop43278-0"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop43280-49"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <radialGradient
- r="3.1501868"
- fy="33.548397"
- fx="-67.890839"
- cy="33.548397"
- cx="-67.890839"
- gradientTransform="matrix(0.4098275,-0.6406034,2.5104141,1.6060416,-127.46107,-65.792415)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient38734"
- xlink:href="#linearGradient43276-6"
- inkscape:collect="always" />
- <radialGradient
- r="3.1501868"
- fy="34.896461"
- fx="-74.960228"
- cy="34.896461"
- cx="-74.960228"
- gradientTransform="matrix(0.4098275,-0.7183766,2.5885772,1.4767588,-130.41049,-65.518114)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient38736"
- xlink:href="#linearGradient43276-6"
- inkscape:collect="always" />
- <linearGradient
- y2="77.877228"
- x2="410.47467"
- y1="68.853401"
- x1="400.90442"
- gradientUnits="userSpaceOnUse"
- id="linearGradient36718"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="56.357628"
- x2="121.22078"
- y1="53.227627"
- x1="104.90227"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38049"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="341"
- x2="-49"
- y1="342.0625"
- x1="-56.5"
- gradientTransform="translate(207,-246.99988)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38051"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="56.357628"
- x2="121.22078"
- y1="53.227627"
- x1="104.90227"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37530"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="341"
- x2="-49"
- y1="342.0625"
- x1="-56.5"
- gradientTransform="translate(207,-246.99988)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37534"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient1610-6">
- <stop
- id="stop1611-18"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop1612-92"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient10069-9">
- <stop
- id="stop10071-5"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop10073-43"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="120.14633"
- x2="134.62978"
- y1="111.30384"
- x1="124.19057"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38254"
- xlink:href="#linearGradient10069-9"
- inkscape:collect="always" />
- <linearGradient
- y2="183.6826"
- x2="116.05637"
- y1="248.13905"
- x1="189.76083"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37509"
- xlink:href="#linearGradient1610-6"
- inkscape:collect="always" />
- <linearGradient
- y2="118.98331"
- x2="132.99687"
- y1="111.03492"
- x1="123.80045"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37613"
- xlink:href="#linearGradient10069-9"
- inkscape:collect="always" />
- <linearGradient
- y2="183.6826"
- x2="116.05637"
- y1="248.13905"
- x1="189.76083"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37615"
- xlink:href="#linearGradient1610-6"
- inkscape:collect="always" />
- <linearGradient
- y2="68.279541"
- x2="-45.074585"
- y1="101.82622"
- x1="-14.752135"
- gradientTransform="translate(0,22)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38073-8"
- xlink:href="#linearGradient15425-4-9-8"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient15425-4-9-8">
- <stop
- id="stop15427-5-8-24"
- offset="0"
- style="stop-color:#960000;stop-opacity:1;" />
- <stop
- id="stop15429-8-2-5"
- offset="1"
- style="stop-color:#c80000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="118.00494"
- x2="131.35606"
- y1="124.67571"
- x1="137.33838"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38075-5"
- xlink:href="#linearGradient5060-1"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient5060-1">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop5062-7" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop5064-1" />
- </linearGradient>
- <linearGradient
- y2="136.15825"
- x2="146.01884"
- y1="111.48302"
- x1="127.15736"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38077-1"
- xlink:href="#linearGradient319-52"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient319-52">
- <stop
- id="stop320-7614"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-232"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="94"
- x2="-22"
- y1="101"
- x1="-15"
- gradientTransform="translate(0,22)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38079-2"
- xlink:href="#linearGradient15425-4-9-8"
- inkscape:collect="always" />
- <linearGradient
- y2="115.81818"
- x2="130.33557"
- y1="127.35454"
- x1="139.29807"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14433-1"
- xlink:href="#linearGradient14418-6"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient14418-6">
- <stop
- style="stop-color:#fa2509;stop-opacity:1;"
- offset="0"
- id="stop14420-8" />
- <stop
- style="stop-color:#fa2509;stop-opacity:0;"
- offset="1"
- id="stop14422-5" />
- </linearGradient>
- <linearGradient
- y2="120.76331"
- x2="135.22182"
- y1="110.81054"
- x1="125.36379"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14435-7"
- xlink:href="#linearGradient319-52"
- inkscape:collect="always" />
- <linearGradient
- y2="127.52184"
- x2="141.43347"
- y1="111.81818"
- x1="125.81818"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14437-6"
- xlink:href="#linearGradient319-52"
- inkscape:collect="always" />
- <linearGradient
- y2="118.69846"
- x2="132.35237"
- y1="111.38132"
- x1="125.20553"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14439-9"
- xlink:href="#linearGradient10069-2"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient10069-2">
- <stop
- id="stop10071-79"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop10073-5"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="129.27184"
- x2="143.88347"
- y1="111.81818"
- x1="125.81818"
- gradientUnits="userSpaceOnUse"
- id="linearGradient14441-4"
- xlink:href="#linearGradient319-52"
- inkscape:collect="always" />
- <radialGradient
- r="9.1978254"
- fy="126.63337"
- fx="131.99811"
- cy="126.63337"
- cx="131.99811"
- gradientTransform="matrix(2.4461753,0.01083717,0.0036163,6.752143,-191.34795,-740.3814)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient38306-3"
- xlink:href="#linearGradient48327-1"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient48327-1">
- <stop
- id="stop48329-23"
- offset="0"
- style="stop-color:black;stop-opacity:0;" />
- <stop
- id="stop48331-3"
- offset="1"
- style="stop-color:black;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient10069-74-1"
- id="linearGradient37646-4"
- gradientUnits="userSpaceOnUse"
- x1="125.20553"
- y1="111.38132"
- x2="132.35237"
- y2="118.69846" />
- <linearGradient
- id="linearGradient10069-74-1">
- <stop
- id="stop10071-0-1"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop10073-9-3"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient319-7409-3-7">
- <stop
- id="stop320-48-8-4"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-82-6-27"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="129.27184"
- x2="143.88347"
- y1="111.81818"
- x1="125.81818"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38313-7"
- xlink:href="#linearGradient319-7409-3-7"
- inkscape:collect="always" />
- <linearGradient
- y2="129.27184"
- x2="143.88347"
- y1="115.87343"
- x1="130.60338"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37677"
- xlink:href="#linearGradient319-7409-3-7"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient319-19">
- <stop
- id="stop320-865"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-02"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient10069-8-3-3">
- <stop
- id="stop10071-9-8-7"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop10073-2-7-1"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient319-95-2-7">
- <stop
- id="stop320-43-7-3"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-12-7-4"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient21327-6">
- <stop
- id="stop21329-3"
- offset="0"
- style="stop-color:#1e3e70;stop-opacity:1;" />
- <stop
- id="stop21331-4"
- offset="1"
- style="stop-color:#1e3e70;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient20055-8-4">
- <stop
- style="stop-color:#0a2a5a;stop-opacity:1;"
- offset="0"
- id="stop20057-8-0" />
- <stop
- style="stop-color:#3771c8;stop-opacity:1;"
- offset="1"
- id="stop20059-2-0" />
- </linearGradient>
- <linearGradient
- id="linearGradient39088">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop39090" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop39092" />
- </linearGradient>
- <linearGradient
- id="linearGradient1610-83">
- <stop
- id="stop1611-24"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop1612-11"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient10069-95">
- <stop
- id="stop10071-10"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop10073-64"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient11871-3"
- inkscape:collect="always">
- <stop
- id="stop11873-0"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop11875-8"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient10069-3">
- <stop
- id="stop10071-87"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop10073-42"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="56.357628"
- x2="121.22078"
- y1="53.227627"
- x1="104.90227"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39630"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="341"
- x2="-49"
- y1="342.0625"
- x1="-56.5"
- gradientTransform="translate(207,-246.99988)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39632"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="54.6674"
- x2="120.06789"
- y1="53.227627"
- x1="104.90227"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40171"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="348"
- x2="-56.5"
- y1="340.32199"
- x1="-56.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40173"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="329.26965"
- x2="-47.214466"
- y1="329.06256"
- x1="-56.8125"
- gradientTransform="translate(0,13)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40175"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="54.6674"
- x2="120.06789"
- y1="53.227627"
- x1="104.90227"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40280"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="348"
- x2="-56.5"
- y1="340.32199"
- x1="-56.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40282"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="329.26965"
- x2="-47.214466"
- y1="329.06256"
- x1="-56.8125"
- gradientTransform="translate(0,13)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40284"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-65.250412"
- x2="340"
- y1="-105.87541"
- x1="301.5"
- gradientTransform="translate(-420,490.00041)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38689"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38693"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientTransform="translate(6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38695"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientTransform="translate(0,6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38697"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientTransform="translate(6,6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38701"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientTransform="translate(24,-6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38703"
- xlink:href="#linearGradient16500-7"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="413.51562"
- x1="-90.5"
- gradientTransform="rotate(180,-78.5,410.51562)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38706"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-65.250412"
- x2="340"
- y1="-105.87541"
- x1="301.5"
- gradientTransform="matrix(0.3846148,0,0,1,-211.38442,490.00041)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38720"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientTransform="translate(8)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38723"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientTransform="translate(8,6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38725"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientTransform="translate(24,-6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38727"
- xlink:href="#linearGradient16500-7"
- inkscape:collect="always" />
- <linearGradient
- y2="416.32614"
- x2="-86.75"
- y1="413.98114"
- x1="-89.75"
- gradientTransform="rotate(180,-78,410.51562)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38729"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientTransform="translate(24,-2.4825165)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38731"
- xlink:href="#linearGradient16500-7"
- inkscape:collect="always" />
- <linearGradient
- y2="416.32614"
- x2="-86.75"
- y1="413.98114"
- x1="-89.75"
- gradientTransform="rotate(180,-78,412.27437)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38736"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-65.250412"
- x2="340"
- y1="-105.87541"
- x1="301.5"
- gradientTransform="translate(-420,490.00041)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39199"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39201"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientTransform="translate(6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39203"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientTransform="translate(0,6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39205"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientTransform="translate(6,6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39207"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="-65.250412"
- x2="340"
- y1="-105.87541"
- x1="301.5"
- gradientTransform="translate(-420,490.00041)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39246"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39248"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientTransform="translate(6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39252"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientTransform="translate(0,6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39255"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="413.51562"
- x2="-88"
- y1="408"
- x1="-97"
- gradientTransform="translate(6,6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39259"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="568"
- x2="495"
- y1="568"
- x1="488.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38961"
- xlink:href="#linearGradient1610-83"
- inkscape:collect="always" />
- <linearGradient
- y2="580.63715"
- x2="490.65796"
- y1="531.95105"
- x1="487.2518"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39115"
- xlink:href="#linearGradient1610-83"
- inkscape:collect="always" />
- <linearGradient
- y2="540.13623"
- x2="498.40021"
- y1="537.78113"
- x1="496.49335"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39117"
- xlink:href="#linearGradient11871-3"
- inkscape:collect="always" />
- <linearGradient
- y2="539.75"
- x2="495.25"
- y1="541.69116"
- x1="495.85294"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39119"
- xlink:href="#linearGradient11871-3"
- inkscape:collect="always" />
- <linearGradient
- y2="541.02698"
- x2="496.21078"
- y1="532.42651"
- x1="494.38467"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39122"
- xlink:href="#linearGradient10069-3"
- inkscape:collect="always" />
- <linearGradient
- y2="134.12131"
- x2="147.08464"
- y1="106.08706"
- x1="122.25188"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39261"
- xlink:href="#linearGradient40703"
- inkscape:collect="always" />
- <linearGradient
- y2="137.52937"
- x2="145.729"
- y1="97.375854"
- x1="116.75861"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39263"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="226.33672"
- x2="174.75458"
- y1="244.14676"
- x1="190.68166"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39265"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient319-46">
- <stop
- id="stop320-03"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-62"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="661.93829"
- x2="58.680996"
- y1="641.73358"
- x1="39.102718"
- gradientTransform="translate(-20)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39508"
- xlink:href="#linearGradient319-46"
- inkscape:collect="always" />
- <linearGradient
- y2="341.23715"
- x2="634.09503"
- y1="355.85541"
- x1="648.09674"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39518"
- xlink:href="#linearGradient43807"
- inkscape:collect="always" />
- <linearGradient
- y2="349.93216"
- x2="643.71313"
- y1="403.93069"
- x1="696.63055"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39520"
- xlink:href="#linearGradient39088"
- inkscape:collect="always" />
- <linearGradient
- y2="354.92981"
- x2="649.69073"
- y1="338.95337"
- x1="633.10468"
- gradientTransform="matrix(0.8461524,0,0,0.8461523,99.385524,54.308237)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39523"
- xlink:href="#linearGradient10069-95"
- inkscape:collect="always" />
- <linearGradient
- y2="132.44617"
- x2="142.1468"
- y1="106.4641"
- x1="121.80637"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39716"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="226.33672"
- x2="174.75458"
- y1="244.14676"
- x1="190.68166"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39718"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="112.03586"
- x2="86.00116"
- y1="82.75322"
- x1="57.347244"
- gradientTransform="matrix(0.9998599,0,0,0.9960071,131.027,-79.5885)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40189"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="94.239906"
- x2="68.0271"
- y1="108.47212"
- x1="80.60067"
- gradientTransform="matrix(0.9166695,0,0,0.9203753,136.97426,-72.21433)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40202"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="94.239906"
- x2="68.0271"
- y1="108.47212"
- x1="80.60067"
- gradientTransform="matrix(0.9166695,0,0,0.9203753,136.97426,-72.21433)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40295"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="112.03586"
- x2="86.00116"
- y1="82.75322"
- x1="57.347244"
- gradientTransform="matrix(0.9998599,0,0,0.9960071,131.027,-79.5885)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40297"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="133.4879"
- x2="145.20987"
- y1="112.43961"
- x1="128.09367"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39261-4-5"
- xlink:href="#linearGradient40703-5-5"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient40703-5-5">
- <stop
- id="stop40705-8-2"
- offset="0"
- style="stop-color:#143564;stop-opacity:1;" />
- <stop
- id="stop40707-8-7"
- offset="1"
- style="stop-color:#c1d7f8;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient38252-9">
- <stop
- id="stop38254-3"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop38256-1"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="29.688427"
- x2="278.79254"
- y1="5.6181068"
- x1="256.14325"
- gradientTransform="matrix(0.888889,0,0,1,-270.46874,9.59825)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40511-7-9-5"
- xlink:href="#linearGradient1610-74-9-1"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient1610-74-9-1">
- <stop
- id="stop1611-0-8-7"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop1612-9-3-1"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="249"
- x2="93.0625"
- y1="241.125"
- x1="87"
- gradientTransform="translate(-114,-208)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40507-4-8-1"
- xlink:href="#linearGradient58334-8-6-5"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient58334-8-6-5">
- <stop
- style="stop-color:#ffffff;stop-opacity:0.87628865;"
- offset="0.0000000"
- id="stop58336-8-9-2" />
- <stop
- style="stop-color:#fffffe;stop-opacity:0.0000000;"
- offset="1.0000000"
- id="stop58338-24-8-7" />
- </linearGradient>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4545454,0.3636364,-0.3862167,0.4827711,-2.5397644,26.345139)"
- r="5.5"
- fy="32.615383"
- fx="-27.749987"
- cy="32.615383"
- cx="-27.749987"
- id="radialGradient40649-2-6-6"
- xlink:href="#linearGradient16500-5-6-1"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient16500-5-6-1"
- inkscape:collect="always">
- <stop
- id="stop16502-17-2-4"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop16504-11-3-2"
- offset="1"
- style="stop-color:black;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="305"
- x2="758"
- y1="300.5"
- x1="754"
- gradientTransform="translate(-784,-271)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40502-7-8-3"
- xlink:href="#linearGradient16500-5-6-1"
- inkscape:collect="always" />
- <linearGradient
- y2="122.36016"
- x2="134.91479"
- y1="111.2683"
- x1="125.99933"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40635-7-2-2"
- xlink:href="#linearGradient319-5-6-2"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient319-5-6-2">
- <stop
- id="stop320-761-2-1"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-89-7-6"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="122.36016"
- x2="134.91479"
- y1="112.53999"
- x1="126.72586"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40637-9-5-8"
- xlink:href="#linearGradient319-5-6-2"
- inkscape:collect="always" />
- <linearGradient
- y2="99.029617"
- x2="99.628899"
- y1="112.62726"
- x1="111.2239"
- gradientTransform="translate(19.367382)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40639-1-2-1"
- xlink:href="#linearGradient13973-3-7-8"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient13973-3-7-8">
- <stop
- id="stop13975-1-8-9"
- offset="0"
- style="stop-color:#3c4c18;stop-opacity:1;" />
- <stop
- id="stop13977-2-0-2"
- offset="1"
- style="stop-color:#9aff31;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="131.03783"
- x2="143.69765"
- y1="114.2303"
- x1="127.63637"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40641-9-2-7"
- xlink:href="#linearGradient319-5-6-2"
- inkscape:collect="always" />
- <linearGradient
- y2="29.688427"
- x2="278.79254"
- y1="5.6181068"
- x1="256.14325"
- gradientTransform="matrix(0.888889,0,0,1,-270.46874,9.59825)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41638-8-6"
- xlink:href="#linearGradient1610-74-9-1"
- inkscape:collect="always" />
- <linearGradient
- y2="249"
- x2="93.0625"
- y1="241.125"
- x1="87"
- gradientTransform="translate(-114,-208)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41640-2-0"
- xlink:href="#linearGradient58334-8-6-5"
- inkscape:collect="always" />
- <radialGradient
- r="5.5"
- fy="32.615383"
- fx="-27.749987"
- cy="32.615383"
- cx="-27.749987"
- gradientTransform="matrix(0.4545454,0.3636364,-0.3862167,0.4827711,-2.5397644,26.345139)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient41642-5-0"
- xlink:href="#linearGradient16500-5-6-1"
- inkscape:collect="always" />
- <linearGradient
- y2="305"
- x2="758"
- y1="300.5"
- x1="754"
- gradientTransform="translate(-784,-271)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient41644-5-4"
- xlink:href="#linearGradient16500-5-6-1"
- inkscape:collect="always" />
- <linearGradient
- y2="242.22473"
- x2="164.0939"
- y1="259.745"
- x1="188.77448"
- gradientTransform="matrix(0.695652,0,0,0.869703,-44.93485,-114.66358)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40875-3-9-8"
- xlink:href="#linearGradient37542-3-0-7-6"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient37542-3-0-7-6">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop37544-1-6-6-5" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop37546-2-1-7-0" />
- </linearGradient>
- <linearGradient
- y2="-264.875"
- x2="-276"
- y1="-276.75"
- x1="-287.75"
- gradientTransform="translate(357.00001,373)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40877-5-5-9"
- xlink:href="#linearGradient319-34-8-7-0"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient319-34-8-7-0">
- <stop
- id="stop320-11-9-8-0"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-38-3-1-6"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="248.54021"
- x2="171.50414"
- y1="210.78392"
- x1="130.70929"
- gradientTransform="matrix(0.608695,0,0,0.760996,-26.1305,-84.76968)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40879-9-8-1"
- xlink:href="#linearGradient37542-3-0-7-6"
- inkscape:collect="always" />
- <linearGradient
- y2="-267.26749"
- x2="-277.01501"
- y1="-272"
- x1="-283"
- gradientTransform="translate(361.00001,376)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40881-8-0-8"
- xlink:href="#linearGradient319-34-8-7-0"
- inkscape:collect="always" />
- <radialGradient
- r="3.9999998"
- fy="104.09358"
- fx="77.721619"
- cy="104.09358"
- cx="77.721619"
- gradientTransform="matrix(-0.06118084,-0.8594818,2.4629674,-0.1753088,-259.40057,190.15309)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient40883-4-0-3"
- xlink:href="#linearGradient10069-7-6-7-4"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient10069-7-6-7-4">
- <stop
- id="stop10071-81-3-2-4"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop10073-6-7-5-6"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="242.22473"
- x2="164.0939"
- y1="259.745"
- x1="188.77448"
- gradientTransform="matrix(0.695652,0,0,0.869703,-44.93485,-114.66358)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39136-2-0"
- xlink:href="#linearGradient37542-3-0-7-6"
- inkscape:collect="always" />
- <linearGradient
- y2="-264.875"
- x2="-276"
- y1="-276.75"
- x1="-287.75"
- gradientTransform="translate(357.00001,373)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39138-8-6"
- xlink:href="#linearGradient319-34-8-7-0"
- inkscape:collect="always" />
- <linearGradient
- y2="250.6842"
- x2="174.35753"
- y1="210.78392"
- x1="130.70929"
- gradientTransform="matrix(0.608695,0,0,0.760996,-26.1305,-84.76968)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39140-6-8"
- xlink:href="#linearGradient37542-3-0-7-6"
- inkscape:collect="always" />
- <linearGradient
- y2="-267.26749"
- x2="-277.01501"
- y1="-272"
- x1="-283"
- gradientTransform="translate(361.00001,376)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient39143-0-6"
- xlink:href="#linearGradient319-34-8-7-0"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient319-17-1-6">
- <stop
- id="stop320-115-1-5"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-27-3-7"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="129.36641"
- x2="275.1503"
- y1="99.513062"
- x1="255.63673"
- gradientTransform="matrix(1,0,0,0.7972867,-259.00009,90.24189)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40679"
- xlink:href="#linearGradient319-17-1-6"
- inkscape:collect="always" />
- <linearGradient
- y2="116.41341"
- x2="267.20212"
- y1="129.28557"
- x1="280.0918"
- gradientTransform="matrix(1,0,0,0.997161,-259.00079,67.35344)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40731"
- xlink:href="#linearGradient25417"
- inkscape:collect="always" />
- <linearGradient
- y2="129.36641"
- x2="275.1503"
- y1="99.513062"
- x1="255.63673"
- gradientTransform="matrix(1,0,0,0.7972867,-259.00009,90.24189)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40733"
- xlink:href="#linearGradient319-17-1-6"
- inkscape:collect="always" />
- <linearGradient
- y2="129.36641"
- x2="275.1503"
- y1="99.513062"
- x1="255.63673"
- gradientTransform="matrix(1,0,0,0.7972867,-259.00009,90.24189)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40733-0"
- xlink:href="#linearGradient319-17-1-6-7"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient319-17-1-6-7">
- <stop
- id="stop320-115-1-5-1"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-27-3-7-7"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="129.36641"
- x2="275.1503"
- y1="99.513062"
- x1="255.63673"
- gradientTransform="matrix(1,0,0,0.7972867,-259.00009,90.24189)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient40733-03"
- xlink:href="#linearGradient319-17-1-6-8"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient319-17-1-6-8">
- <stop
- id="stop320-115-1-5-0"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-27-3-7-1"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="391.21976"
- x2="94.246101"
- y1="393.90298"
- x1="96.824379"
- gradientTransform="translate(254.01612,-211.00101)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient38478"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <radialGradient
- r="1.5"
- fy="14.5"
- fx="70.5"
- cy="14.5"
- cx="70.5"
- gradientTransform="matrix(1.050372,0,0,1.050372,-3.551238,-0.730396)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient44318"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <radialGradient
- r="5.5192375"
- fy="14.649424"
- fx="70.470596"
- cy="14.649424"
- cx="70.470596"
- gradientTransform="matrix(0.5399935,0.3131662,-0.3907892,0.5793905,38.141764,-16.056748)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient44320"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="56.357628"
- x2="121.22078"
- y1="53.227627"
- x1="104.90227"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,239.34332,-149.78578)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42988"
- xlink:href="#linearGradient319-19"
- inkscape:collect="always" />
- <linearGradient
- y2="341"
- x2="-49"
- y1="342.0625"
- x1="-56.5"
- gradientTransform="translate(207,-246.99988)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42990"
- xlink:href="#linearGradient319-19"
- inkscape:collect="always" />
- <linearGradient
- y2="118.81034"
- x2="132.41052"
- y1="113.57294"
- x1="126.55782"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42992"
- xlink:href="#linearGradient10069-8-3-3"
- inkscape:collect="always" />
- <linearGradient
- y2="127.72736"
- x2="142.72656"
- y1="117.26753"
- x1="132"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42994"
- xlink:href="#linearGradient319-95-2-7"
- inkscape:collect="always" />
- <linearGradient
- y2="542.5"
- x2="-110.5"
- y1="546.5"
- x1="-114.75"
- gradientTransform="translate(4.9999967,20)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient42996"
- xlink:href="#linearGradient10069-8-3-3"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient44627">
- <stop
- id="stop44629"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop44631"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient10069-9-7-4-74">
- <stop
- id="stop10071-5-4-5-0"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop10073-43-0-5-9"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient44939-8">
- <stop
- id="stop44941-8"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop44943-2"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="106.5"
- x2="284.5"
- y1="101.5"
- x1="279.75"
- gradientUnits="userSpaceOnUse"
- id="linearGradient44485"
- xlink:href="#linearGradient44939-8"
- inkscape:collect="always" />
- <linearGradient
- y2="105.092"
- x2="339.125"
- y1="106.93575"
- x1="351.71875"
- gradientTransform="translate(0,-21)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient44942"
- xlink:href="#linearGradient44939-8"
- inkscape:collect="always" />
- <linearGradient
- y2="106.19597"
- x2="336.40625"
- y1="108.35222"
- x1="351.15625"
- gradientTransform="rotate(180,349,91.5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient44944"
- xlink:href="#linearGradient44939-8"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(-1,0,0,1,593.02125,-1.8e-6)"
- y2="102"
- x2="281.75"
- y1="102"
- x1="279"
- gradientUnits="userSpaceOnUse"
- id="linearGradient44950"
- xlink:href="#linearGradient44939-8"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(0,1,1,0,225,-182.99437)"
- y2="105.5"
- x2="283"
- y1="101.5"
- x1="279.75"
- gradientUnits="userSpaceOnUse"
- id="linearGradient44954"
- xlink:href="#linearGradient44939-8"
- inkscape:collect="always" />
- <linearGradient
- y2="19.9375"
- x2="106.125"
- y1="10.8125"
- x1="115.84575"
- gradientTransform="matrix(-1,0,0,1,221,10)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient45220"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="121.70699"
- x2="130.88379"
- y1="111.85698"
- x1="125.86876"
- gradientUnits="userSpaceOnUse"
- id="linearGradient45283"
- xlink:href="#linearGradient38252-9"
- inkscape:collect="always" />
- <linearGradient
- y2="117.96092"
- x2="132.60205"
- y1="122.29202"
- x1="134.78751"
- gradientUnits="userSpaceOnUse"
- id="linearGradient45285"
- xlink:href="#linearGradient38252-9"
- inkscape:collect="always" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0070601,0.03386866,-0.03770425,1.1211085,20.665977,-85.772965)"
- r="5.9852905"
- fy="611.10455"
- fx="336.42892"
- cy="611.10455"
- cx="336.42892"
- id="radialGradient45309"
- xlink:href="#linearGradient10069-9-7-4-74"
- inkscape:collect="always" />
- <linearGradient
- y2="427"
- x2="685.47357"
- y1="427"
- x1="689.47357"
- gradientTransform="matrix(-1,0,0,1,1444.9824,-215)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient43826"
- xlink:href="#linearGradient44627"
- inkscape:collect="always" />
- <linearGradient
- y2="30.743095"
- x2="277.68143"
- y1="-4.4418921"
- x1="246.89435"
- gradientTransform="matrix(0.888889,0,0,1,61.53822,346.48241)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient43856"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="245.625"
- x2="92.8125"
- y1="241"
- x1="87.03125"
- gradientTransform="translate(218.01612,129)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient43858"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="585.28772"
- x2="159.13864"
- y1="601.5"
- x1="172.5625"
- gradientTransform="matrix(-1,0,0,1,140,-415)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient46780"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="35.75"
- x2="271.98389"
- y1="1.5973248"
- x1="249.64528"
- gradientTransform="matrix(-1,0,0,1,237.98388,150.25)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient46782"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="585.28772"
- x2="159.13864"
- y1="601.5"
- x1="172.5625"
- gradientTransform="matrix(-1,0,0,1,140,-415)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient46784"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="35.75"
- x2="271.98389"
- y1="1.5973248"
- x1="249.64528"
- gradientTransform="matrix(-1,0,0,1,237.98388,150.25)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient46786"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="585.28772"
- x2="159.13864"
- y1="601.5"
- x1="172.5625"
- gradientTransform="matrix(-1,0,0,1,140,-415)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient46818"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="35.75"
- x2="271.98389"
- y1="1.5973248"
- x1="249.64528"
- gradientTransform="matrix(-1,0,0,1,237.98388,150.25)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient46820"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="585.28772"
- x2="159.13864"
- y1="601.5"
- x1="172.5625"
- gradientTransform="matrix(-1,0,0,1,140,-415)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient46822"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="35.75"
- x2="271.98389"
- y1="1.5973248"
- x1="249.64528"
- gradientTransform="matrix(-1,0,0,1,237.98388,150.25)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient46824"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="585.28772"
- x2="159.13864"
- y1="601.5"
- x1="172.5625"
- gradientTransform="matrix(-1,0,0,1,140,-415)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient46990"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="35.75"
- x2="271.98389"
- y1="1.5973248"
- x1="249.64528"
- gradientTransform="matrix(-1,0,0,1,237.98388,150.25)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient46992"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="585.28772"
- x2="159.13864"
- y1="601.5"
- x1="172.5625"
- gradientTransform="matrix(-1,0,0,1,140,-415)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient46994"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="35.75"
- x2="271.98389"
- y1="1.5973248"
- x1="249.64528"
- gradientTransform="matrix(-1,0,0,1,237.98388,150.25)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient46996"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="585.28772"
- x2="159.13864"
- y1="601.5"
- x1="172.5625"
- gradientTransform="matrix(-1,0,0,1,140,-415)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient46998"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="35.75"
- x2="271.98389"
- y1="1.5973248"
- x1="249.64528"
- gradientTransform="matrix(-1,0,0,1,237.98388,150.25)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient47000"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <radialGradient
- r="4.4262571"
- fy="375.96332"
- fx="412.10059"
- cy="375.96332"
- cx="412.10059"
- gradientTransform="matrix(0.5274943,0,0,0.7696585,194.81546,86.715119)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient25048"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="375.5058"
- x2="410.55432"
- y1="373.01221"
- x1="408.91928"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25106"
- xlink:href="#linearGradient25108"
- inkscape:collect="always" />
- <linearGradient
- y2="370.21317"
- x2="407.62576"
- y1="375.39175"
- x1="411.05389"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25117"
- xlink:href="#linearGradient25108"
- inkscape:collect="always" />
- <linearGradient
- y2="297.92099"
- x2="353.72073"
- y1="314.11398"
- x1="352.98236"
- gradientTransform="rotate(-45,343.872,632.75601)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25449"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="519.46057"
- x2="434.49387"
- y1="524.30481"
- x1="436.54755"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25451"
- xlink:href="#linearGradient25108"
- inkscape:collect="always" />
- <linearGradient
- y2="526"
- x2="433"
- y1="524.97125"
- x1="432.0849"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25453"
- xlink:href="#linearGradient25108"
- inkscape:collect="always" />
- <radialGradient
- r="4.4262571"
- fy="370.11554"
- fx="410.73904"
- cy="370.11554"
- cx="410.73904"
- gradientTransform="matrix(0.5274943,0,0,0.7696585,194.81546,86.715119)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient25457"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="105.5"
- x2="283"
- y1="101.5"
- x1="279.75"
- gradientTransform="matrix(0,1,1,0,225,-182.99437)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23543"
- xlink:href="#linearGradient44939-8"
- inkscape:collect="always" />
- <linearGradient
- y2="102"
- x2="281.75"
- y1="102"
- x1="279"
- gradientTransform="matrix(0,1,1,0,225,-182.99437)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23557"
- xlink:href="#linearGradient44939-8"
- inkscape:collect="always" />
- <linearGradient
- y2="109.5"
- x2="289.5"
- y1="106.5"
- x1="292.25"
- gradientTransform="matrix(0,1,1,0,225,-182.99437)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23559"
- xlink:href="#linearGradient44939-8"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="374.42419"
- x2="406.7699"
- y1="386.45807"
- x1="413.9498"
- id="linearGradient24341"
- xlink:href="#linearGradient24343"
- inkscape:collect="always" />
- <linearGradient
- y2="374.07153"
- x2="413.98795"
- y1="367.62839"
- x1="403.9577"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24349"
- xlink:href="#linearGradient24343"
- inkscape:collect="always" />
- <radialGradient
- r="3.8798895"
- fy="52.367992"
- fx="409.55594"
- cy="52.367992"
- cx="409.55594"
- gradientTransform="matrix(0.6402148,-1.1088846,0.8413297,0.4857498,104.42892,800.46622)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient24354"
- xlink:href="#linearGradient21327-6"
- inkscape:collect="always" />
- <linearGradient
- y2="81.382545"
- x2="257.38638"
- y1="68.113258"
- x1="270.66064"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24511"
- xlink:href="#linearGradient34157"
- inkscape:collect="always" />
- <linearGradient
- y2="74.562462"
- x2="262.43726"
- y1="80.100891"
- x1="256.90005"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24513"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.66806"
- fx="75.217888"
- cy="500.66806"
- cx="75.217888"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient24515"
- xlink:href="#linearGradient29149"
- inkscape:collect="always" />
- <radialGradient
- r="3.1650217"
- fy="500.26215"
- fx="75.554794"
- cy="500.26215"
- cx="75.554794"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient24517"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="77.962585"
- fx="259.02887"
- cy="77.962585"
- cx="259.02887"
- gradientTransform="matrix(0.6691529,0,4.3047361e-8,0.6954014,84.50351,24.951375)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient24519"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- r="3.5"
- fy="77.188034"
- fx="259.55096"
- cy="77.188034"
- cx="259.55096"
- gradientTransform="matrix(1.3879142,0,8.9286134e-8,1.4423572,-101.87942,-32.970267)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient24523"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="726.37006"
- x2="1661.8125"
- y1="722"
- x1="1663.8125"
- gradientTransform="translate(-1297,-948)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25056"
- xlink:href="#linearGradient30208"
- inkscape:collect="always" />
- <radialGradient
- r="5.5"
- fy="722.19189"
- fx="1662.2664"
- cy="722.19189"
- cx="1662.2664"
- gradientTransform="matrix(0.1378252,-0.2988982,2.5269117,1.1651875,-1689.2674,-563.64056)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient25058"
- xlink:href="#linearGradient19425"
- inkscape:collect="always" />
- <linearGradient
- y2="827.32849"
- x2="1979.2772"
- y1="827.77124"
- x1="1984.3658"
- gradientTransform="matrix(0.8167109,0,0,0.8433415,-1256.7473,-918.72044)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient25060"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="122.92735"
- x2="135.00615"
- y1="80.045052"
- x1="98.858559"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29407"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="243.31177"
- x2="129.24866"
- y1="245.03757"
- x1="130.75166"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29409"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="129.82761"
- x2="144.22272"
- y1="112.31642"
- x1="126.37006"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29411"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="226.33672"
- x2="174.75458"
- y1="244.14676"
- x1="190.68166"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29413"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient44939-8-7-1-7">
- <stop
- id="stop44941-8-4-5-4"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop44943-2-0-2-0"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- gradientTransform="matrix(-1,0,0,1,780.92531,0)"
- y2="248.09296"
- x2="389.59052"
- y1="220.84622"
- x1="389.73953"
- gradientUnits="userSpaceOnUse"
- id="linearGradient37396-1"
- xlink:href="#linearGradient37542-7"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient37542-7">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop37544-40" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop37546-94" />
- </linearGradient>
- <linearGradient
- gradientTransform="rotate(90,390.49596,244.48989)"
- y2="247.99998"
- x2="392.0101"
- y1="222.99998"
- x1="392.0101"
- gradientUnits="userSpaceOnUse"
- id="linearGradient15742-5"
- xlink:href="#linearGradient37542-5"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient37542-5">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop37544-1" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop37546-71" />
- </linearGradient>
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="241.31801"
- x2="386.30408"
- y1="241.13428"
- x1="392.02036"
- id="linearGradient27860"
- xlink:href="#linearGradient27854"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(-1,0,0,1,782.02022,0)"
- y2="249.99998"
- x2="392.0101"
- y1="224.99998"
- x1="392.0101"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27872"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(-1,0,0,1,782.02022,0)"
- y2="242.46706"
- x2="386.74603"
- y1="241.13428"
- x1="390.87131"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27874"
- xlink:href="#linearGradient27854"
- inkscape:collect="always" />
- <linearGradient
- y2="247.99998"
- x2="392.0101"
- y1="222.99998"
- x1="392.0101"
- gradientTransform="matrix(0,1,1,0,146.99795,-188.00607)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27886"
- xlink:href="#linearGradient37542-5"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="249.54126"
- x2="391.17557"
- y1="244.85669"
- x1="388.70071"
- id="linearGradient27902"
- xlink:href="#linearGradient27896"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient10069-9-71">
- <stop
- id="stop10071-5-1"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop10073-43-5"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient23974-2">
- <stop
- style="stop-color:#2561b7;stop-opacity:1;"
- offset="0"
- id="stop23976-2" />
- <stop
- style="stop-color:#f9fbff;stop-opacity:1"
- offset="1"
- id="stop23978-1" />
- </linearGradient>
- <linearGradient
- y2="253.23859"
- x2="-20.826464"
- y1="266.11719"
- x1="-38.103703"
- gradientTransform="matrix(1.4646688,0,0,1.4650206,168.77325,-157.03253)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28968"
- xlink:href="#linearGradient23974-2"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient319-5">
- <stop
- id="stop320-761"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-8"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="259.87677"
- x2="-30.075666"
- y1="257.99881"
- x1="-26.511335"
- gradientTransform="matrix(1.4646688,0,0,1.4650206,168.77325,-157.03253)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29424"
- xlink:href="#linearGradient37542-7"
- inkscape:collect="always" />
- <linearGradient
- y2="252.03563"
- x2="-23.636715"
- y1="271.58572"
- x1="-35.153767"
- gradientTransform="translate(0,10)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29988"
- xlink:href="#linearGradient23974"
- inkscape:collect="always" />
- <linearGradient
- y2="120.28082"
- x2="441.93222"
- y1="105.28082"
- x1="446.93222"
- gradientTransform="translate(-113.93222,176.71918)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29990"
- xlink:href="#linearGradient319-5"
- inkscape:collect="always" />
- <linearGradient
- y2="118.18078"
- x2="131.72171"
- y1="111.03492"
- x1="123.80045"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29994"
- xlink:href="#linearGradient10069-9-71"
- inkscape:collect="always" />
- <linearGradient
- y2="118.98331"
- x2="132.99687"
- y1="111.13178"
- x1="124.78239"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29773-5"
- xlink:href="#linearGradient21327-6-8"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient21327-6-8">
- <stop
- id="stop21329-3-4"
- offset="0"
- style="stop-color:#1e3e70;stop-opacity:1;" />
- <stop
- id="stop21331-4-0"
- offset="1"
- style="stop-color:#1e3e70;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient28526">
- <stop
- style="stop-color:#2561b7;stop-opacity:1;"
- offset="0"
- id="stop28528" />
- <stop
- style="stop-color:#f9fbff;stop-opacity:1"
- offset="1"
- id="stop28530" />
- </linearGradient>
- <linearGradient
- id="linearGradient319-62">
- <stop
- id="stop320-90"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-4"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient1610-52-2">
- <stop
- id="stop1611-32-8"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop1612-46-8"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient319-62-8">
- <stop
- id="stop320-90-6"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-4-0"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="126.89457"
- x2="140.18503"
- y1="104.14172"
- x1="121.74819"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29334"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="127.60542"
- x2="122.40444"
- y1="91.071259"
- x1="155.10138"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29336"
- xlink:href="#linearGradient10069"
- inkscape:collect="always" />
- <linearGradient
- y2="118"
- x2="132"
- y1="126.19594"
- x1="124.66362"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29338"
- xlink:href="#linearGradient24000"
- inkscape:collect="always" />
- <linearGradient
- y2="116.55647"
- x2="133.53401"
- y1="126.88889"
- x1="124.28249"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29340"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="119.554"
- x2="130.82327"
- y1="101.45953"
- x1="147.25899"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29342"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="288.5"
- x2="1146.6705"
- y1="287.70486"
- x1="1138.1963"
- gradientTransform="matrix(0,-1,-1,0,449.99999,1678)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28574"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="405.3895"
- x2="740.30865"
- y1="367.52411"
- x1="757.2467"
- gradientTransform="matrix(0,-1,-1,0,558.99999,1286)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28577"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="401.90442"
- x2="737.62225"
- y1="396.45972"
- x1="745.48267"
- gradientTransform="matrix(0,-1,-1,0,558.99999,1288)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28580"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="400"
- x2="752"
- y1="402"
- x1="743"
- gradientTransform="rotate(-90,523.5,762.5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28583"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="rotate(90,95.49995,479.49996)"
- y2="406.47784"
- x2="161.83331"
- y1="413.87982"
- x1="162.41054"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28589"
- xlink:href="#linearGradient38845"
- inkscape:collect="always" />
- <linearGradient
- y2="423.54419"
- x2="744.1059"
- y1="396.04428"
- x1="743.87036"
- gradientTransform="matrix(0,-1,-1,0,558.99999,1288)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28593"
- xlink:href="#linearGradient38831"
- inkscape:collect="always" />
- <linearGradient
- y2="569.18829"
- x2="163.11441"
- y1="544.21143"
- x1="148.56801"
- gradientTransform="rotate(90,168.49999,551.5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28600"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="291.35333"
- x2="1146.2682"
- y1="288.19919"
- x1="1141.2856"
- gradientTransform="matrix(0,-1,-1,0,449.99999,1678)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient28603"
- xlink:href="#linearGradient38831"
- inkscape:collect="always" />
- <radialGradient
- r="7"
- fy="19.425121"
- fx="-30.028414"
- cy="19.425121"
- cx="-30.028414"
- gradientTransform="matrix(0.94105289,0.01178942,-0.01073736,0.8570756,238.4669,249.70522)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient29805"
- xlink:href="#linearGradient1610-52-2"
- inkscape:collect="always" />
- <linearGradient
- y2="248.09296"
- x2="389.59052"
- y1="220.84622"
- x1="389.73953"
- gradientTransform="matrix(-1,0,0,1,780.92531,0)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29884"
- xlink:href="#linearGradient37542-7"
- inkscape:collect="always" />
- <linearGradient
- y2="244.68996"
- x2="386.13718"
- y1="243.48854"
- x1="391.62881"
- gradientUnits="userSpaceOnUse"
- id="linearGradient29886"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- fy="64.567902"
- fx="20.892099"
- r="5.257"
- cy="64.567902"
- cx="20.892099"
- id="radialGradient16142-7">
- <stop
- id="stop16144-4"
- style="stop-color:#F0F0F0"
- offset="0" />
- <stop
- id="stop16146-0"
- style="stop-color:#474747"
- offset="1" />
- </radialGradient>
- <linearGradient
- id="linearGradient37542-78">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop37544-2" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop37546-78" />
- </linearGradient>
- <linearGradient
- id="linearGradient9030-2">
- <stop
- id="stop9032-0"
- offset="0"
- style="stop-color:white;stop-opacity:1;" />
- <stop
- id="stop9034-89"
- offset="1"
- style="stop-color:white;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient37542-04-82">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop37544-9-0" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop37546-4-5" />
- </linearGradient>
- <linearGradient
- id="linearGradient9030-38-2">
- <stop
- id="stop9032-6-7"
- offset="0"
- style="stop-color:white;stop-opacity:1;" />
- <stop
- id="stop9034-9-6"
- offset="1"
- style="stop-color:white;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient30766-8">
- <stop
- style="stop-color:#be0000;stop-opacity:1"
- offset="0"
- id="stop30768-7" />
- <stop
- style="stop-color:#ff5108;stop-opacity:1"
- offset="1"
- id="stop30770-8" />
- </linearGradient>
- <linearGradient
- id="linearGradient30752-0">
- <stop
- id="stop30754-9"
- offset="0"
- style="stop-color:#0c1b63;stop-opacity:1;" />
- <stop
- id="stop30756-5"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- y2="17.82831"
- x2="6.9718256"
- y1="6.2494373"
- x1="18.773417"
- gradientTransform="translate(-64,-10)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32140"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="244.38875"
- x2="401.63013"
- y1="244.3396"
- x1="385.62408"
- gradientTransform="matrix(-0.701513,0.712657,0.712657,0.701513,50.5916,-449.6745)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32142"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="20.147326"
- x2="46.491322"
- y1="5.9830923"
- x1="61.032951"
- gradientTransform="translate(-65.00001,-10.749995)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32144"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="20.110929"
- x2="44.509518"
- y1="6.0129876"
- x1="59.02124"
- gradientTransform="matrix(1.199998,0,0,1.199999,-74.19988,-12.499988)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32146"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="-31.095215"
- x2="53.567928"
- y1="-25.553123"
- x1="47.348152"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32148"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="482.27924"
- x2="-193.07495"
- y1="508.33572"
- x1="-176.1799"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31946"
- xlink:href="#radialGradient16142-7"
- inkscape:collect="always" />
- <linearGradient
- y2="479.30875"
- x2="-194.90294"
- y1="505.36523"
- x1="-178.00789"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31948"
- xlink:href="#radialGradient16142"
- inkscape:collect="always" />
- <linearGradient
- y2="269.24564"
- x2="181.25543"
- y1="230.51552"
- x1="155.37498"
- gradientTransform="matrix(1.043478,0,0,0.956667,-7.152175,20.92167)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31950"
- xlink:href="#linearGradient37542-78"
- inkscape:collect="always" />
- <linearGradient
- y2="251.40294"
- x2="96"
- y1="242.39062"
- x1="87.765625"
- gradientTransform="translate(81.000002,13.499998)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31952"
- xlink:href="#linearGradient9030-2"
- inkscape:collect="always" />
- <linearGradient
- y2="250.87756"
- x2="171.77303"
- y1="217.28368"
- x1="148.47061"
- gradientTransform="matrix(1.043478,0,0,0.956667,-354.13606,119.42158)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31954"
- xlink:href="#linearGradient37542-04-82"
- inkscape:collect="always" />
- <linearGradient
- y2="345.10736"
- x2="-253.90541"
- y1="340.81195"
- x1="-259.99872"
- gradientTransform="translate(81.000002,13.499998)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31956"
- xlink:href="#linearGradient9030-38-2"
- inkscape:collect="always" />
- <linearGradient
- y2="261.69635"
- x2="170.78137"
- y1="252.44223"
- x1="167.51979"
- gradientTransform="matrix(1.0017964,0,0,0.99629977,-0.31613165,0.94171311)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31958"
- xlink:href="#linearGradient30766-8"
- inkscape:collect="always" />
- <linearGradient
- y2="243.80345"
- x2="89.889603"
- y1="238.21507"
- x1="87.473038"
- gradientTransform="translate(81.000002,13.499998)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31960"
- xlink:href="#linearGradient9030-2"
- inkscape:collect="always" />
- <linearGradient
- y2="239.5473"
- x2="168.53265"
- y1="244.52007"
- x1="168.53265"
- gradientTransform="translate(0,10)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31962"
- xlink:href="#linearGradient30752-0"
- inkscape:collect="always" />
- <linearGradient
- y2="28.583914"
- x2="275.43362"
- y1="19.495501"
- x1="263.35254"
- gradientTransform="translate(-237.5,45.5045)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31964"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="36.874088"
- x2="283.37738"
- y1="22.713789"
- x1="271.69839"
- gradientTransform="translate(-238,44.0045)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31966"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="28.583914"
- x2="275.43362"
- y1="11.017987"
- x1="260.25369"
- gradientTransform="translate(-243.5,51.5045)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31968"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="36.874088"
- x2="283.37738"
- y1="22.713789"
- x1="271.69839"
- gradientTransform="translate(-244,50.0045)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31970"
- xlink:href="#linearGradient37542"
- inkscape:collect="always" />
- <linearGradient
- y2="242.99191"
- x2="90.563423"
- y1="239.5473"
- x1="85.853188"
- gradientTransform="translate(-57.00003,-165.99191)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31972"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="245.625"
- x2="92.8125"
- y1="240.90625"
- x1="88"
- gradientTransform="translate(-51,-172)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31974"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="66.235535"
- x2="-183.03308"
- y1="66.323799"
- x1="-175.72238"
- gradientTransform="translate(423,225)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32236"
- xlink:href="#linearGradient28526"
- inkscape:collect="always" />
- <linearGradient
- y2="65.917358"
- x2="-183.58472"
- y1="66.654762"
- x1="-174.51762"
- gradientTransform="translate(423,225)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32238"
- xlink:href="#linearGradient20055-8-4"
- inkscape:collect="always" />
- <linearGradient
- y2="62.182106"
- x2="-169.07387"
- y1="63.445515"
- x1="-180.7581"
- gradientTransform="matrix(0.9098462,0,0,0.9414558,406.86085,228.58514)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32240"
- xlink:href="#linearGradient319-62"
- inkscape:collect="always" />
- <linearGradient
- y2="-15.138513"
- x2="-96.861107"
- y1="-16"
- x1="-101"
- gradientTransform="matrix(1.2857143,0,0,0.787037,371.28571,304.80092)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32242"
- xlink:href="#linearGradient319-62-8"
- inkscape:collect="always" />
- <linearGradient
- y2="-15.562586"
- x2="-96.705353"
- y1="-16"
- x1="-101"
- gradientTransform="matrix(1.2857143,0,0,0.787037,371.28571,304.80092)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32244"
- xlink:href="#linearGradient319-62-8"
- inkscape:collect="always" />
- <linearGradient
- y2="291.5"
- x2="244.75"
- y1="291.5047"
- x1="242.99834"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32246"
- xlink:href="#linearGradient29312"
- inkscape:collect="always" />
- <linearGradient
- y2="294.5"
- x2="243.5"
- y1="294.49902"
- x1="245.20622"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32248"
- xlink:href="#linearGradient29304"
- inkscape:collect="always" />
- <linearGradient
- y2="388"
- x2="273"
- y1="388"
- x1="258"
- gradientTransform="translate(-52.983883,-129)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32296"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="388"
- x2="273"
- y1="388"
- x1="259.75"
- gradientTransform="translate(-48.983883,-126)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32299"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="388"
- x2="272"
- y1="388"
- x1="257.75"
- gradientTransform="translate(-47.000005,-120)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32301"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="94.239906"
- x2="68.0271"
- y1="108.47212"
- x1="80.60067"
- gradientTransform="matrix(0.9166695,0,0,0.9203753,-9.025729,344.78566)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32303"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="116.62141"
- x2="88.785263"
- y1="95.337166"
- x1="68.361542"
- gradientTransform="translate(-14.983875,337)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32305"
- xlink:href="#linearGradient13938"
- inkscape:collect="always" />
- <linearGradient
- y2="108.06429"
- x2="81.383331"
- y1="84.330009"
- x1="58.761654"
- gradientTransform="matrix(0.9998599,0,0,0.9960071,-15.972985,338.41149)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32307"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="124.47867"
- x2="137.5759"
- y1="100.93772"
- x1="114.15679"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32353"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="125.82862"
- x2="140.19273"
- y1="118"
- x1="131.12576"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32355"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="429.53806"
- x2="322.08145"
- y1="408.49368"
- x1="299.70026"
- gradientTransform="matrix(0.9050931,-7.9558708e-4,0.00612764,0.9147058,39.488451,313.56226)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32357"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="125.82862"
- x2="140.19273"
- y1="118"
- x1="131.12576"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32359"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="124.47867"
- x2="137.5759"
- y1="100.93772"
- x1="114.15679"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32426"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="125.82862"
- x2="140.19273"
- y1="118"
- x1="131.12576"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32428"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="226.33672"
- x2="174.75458"
- y1="244.14676"
- x1="190.68166"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32430"
- xlink:href="#linearGradient9030"
- inkscape:collect="always" />
- <linearGradient
- y2="429.53806"
- x2="322.08145"
- y1="408.49368"
- x1="299.70026"
- gradientTransform="matrix(0.77915445,-6.9426235e-4,0.00527501,0.79821029,158.94945,341.39422)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32432"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="123.5"
- x2="368"
- y1="128.5"
- x1="346"
- gradientTransform="matrix(1,0,0,-1,73,792.5)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32434"
- xlink:href="#linearGradient44939-8-7-1-7"
- inkscape:collect="always" />
- <linearGradient
- y2="113.09817"
- x2="85.347076"
- y1="100.22395"
- x1="85.548706"
- gradientTransform="rotate(-45,271.82331,-251.06972)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31019"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="113.09817"
- x2="85.347076"
- y1="100.22395"
- x1="85.548706"
- gradientTransform="matrix(0.72300056,-0.72300056,0.72300056,0.72300056,254.24127,118.38327)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31025"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="113.09817"
- x2="85.347076"
- y1="100.22395"
- x1="85.548706"
- gradientTransform="rotate(-45,271.82331,-251.06972)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31055"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="113.09817"
- x2="85.347076"
- y1="100.22395"
- x1="85.548706"
- gradientTransform="matrix(0.72300056,-0.72300056,0.72300056,0.72300056,254.24127,118.38327)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31057"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="113.09817"
- x2="85.347076"
- y1="100.22395"
- x1="85.548706"
- gradientTransform="rotate(-45,271.82331,-251.06972)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31151"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="122.23821"
- x2="84.95932"
- y1="100.22395"
- x1="85.548706"
- gradientTransform="matrix(0.72300056,-0.72300056,0.72300056,0.72300056,254.24127,118.38327)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31153"
- xlink:href="#linearGradient319"
- inkscape:collect="always" />
- <linearGradient
- y2="105.88815"
- x2="85.60022"
- y1="99.348953"
- x1="85.861206"
- gradientTransform="rotate(-45,271.82329,-251.06967)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31155"
- xlink:href="#linearGradient30958"
- inkscape:collect="always" />
- <linearGradient
- y2="105.88815"
- x2="85.60022"
- y1="99.348953"
- x1="85.861206"
- gradientTransform="matrix(0.74301467,-0.74301467,0.74301467,0.74301467,250.58064,118.02214)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient31157"
- xlink:href="#linearGradient30958"
- inkscape:collect="always" />
- <linearGradient
- y2="247.32738"
- x2="273.85818"
- y1="233.0448"
- x1="262.04343"
- gradientTransform="matrix(-1.1666676,0,0,-1.1666676,119.15081,827.66691)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32854-6-2"
- xlink:href="#linearGradient37542-7409-7-7-19-1"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient37542-7409-7-7-19-1">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop37544-48-6-1-8-9" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop37546-82-1-0-6-8" />
- </linearGradient>
- <linearGradient
- y2="35.759052"
- x2="94.157646"
- y1="39.47208"
- x1="97.616623"
- gradientTransform="matrix(0.53706486,0,0,0.53706486,-249.10439,522.04547)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32856-3-2"
- xlink:href="#linearGradient44939-8-4-7-8-3-0-3"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient44939-8-4-7-8-3-0-3">
- <stop
- id="stop44941-8-5-40-2-4-2-4"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop44943-2-5-9-4-9-8-0"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="35.759052"
- x2="94.157646"
- y1="39.47208"
- x1="97.616623"
- gradientTransform="matrix(0.53706486,0,0,0.53706486,144.9138,-563.9364)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32858-7-2"
- xlink:href="#linearGradient10069-9-7-5-4-6-5-0-3"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient10069-9-7-5-4-6-5-0-3">
- <stop
- id="stop10071-5-4-58-5-9-1-2-1"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop10073-43-0-4-0-8-0-4-9"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <radialGradient
- r="8"
- fy="462.0358"
- fx="-302.79681"
- cy="462.0358"
- cx="-302.79681"
- gradientTransform="matrix(0.39420438,-0.08239205,0.27256031,1.3040635,-361.27885,-161.73915)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient52641-2-8"
- xlink:href="#linearGradient37542-7409-7-7-0-9-9"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient37542-7409-7-7-0-9-9">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop37544-48-6-1-4-1-1" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop37546-82-1-0-9-3-3" />
- </linearGradient>
- <linearGradient
- y2="463.92236"
- x2="-303.00003"
- y1="475"
- x1="-307"
- gradientTransform="translate(-42)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient52998-5-5"
- xlink:href="#linearGradient319-31-8-9-1"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient319-31-8-9-1">
- <stop
- id="stop320-23-2-8-4"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop321-34-4-4-2"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <radialGradient
- r="8"
- fy="462.0358"
- fx="-302.79681"
- cy="462.0358"
- cx="-302.79681"
- gradientTransform="matrix(0.39420438,-0.08239205,0.27256031,1.3040635,-362.22886,-161.73912)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient52883-6-8"
- xlink:href="#linearGradient37542-7409-7-7-0-9-9"
- inkscape:collect="always" />
- <linearGradient
- y2="464.93286"
- x2="-304.76843"
- y1="476.0105"
- x1="-308.7684"
- gradientTransform="translate(-42)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53000-3-9"
- xlink:href="#linearGradient319-31-8-9-1"
- inkscape:collect="always" />
- <linearGradient
- y2="-102.52942"
- x2="470.7515"
- y1="-101.22778"
- x1="469.49295"
- gradientTransform="translate(-839.95,-273.25)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient53002-6-2"
- xlink:href="#linearGradient34488-1-8"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient34488-1-8">
- <stop
- id="stop34490-0-5-7"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop34492-4-0"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="623.21643"
- x2="-213.69197"
- y1="626.39844"
- x1="-217.1391"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32896-0-4"
- xlink:href="#linearGradient32877-9-6-8"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient32877-9-6-8">
- <stop
- id="stop32879-8-1-1"
- offset="0"
- style="stop-color:#b3b3b3;stop-opacity:1;" />
- <stop
- id="stop32881-4-3-9"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="653.27765"
- x2="-177.70576"
- y1="650.94128"
- x1="-180.37465"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32899-8-3"
- xlink:href="#linearGradient33058-4-9-5"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient33058-4-9-5">
- <stop
- id="stop33060-3-3-9"
- offset="0"
- style="stop-color:#e5250b;stop-opacity:1;" />
- <stop
- id="stop33062-9-4-7"
- offset="1"
- style="stop-color:#460000;stop-opacity:1;" />
- </linearGradient>
- <radialGradient
- r="7.03125"
- fy="630.61389"
- fx="-197.66467"
- cy="630.61389"
- cx="-197.66467"
- gradientTransform="matrix(1.1748275,-1.7208853,0.51495275,0.35155123,-289.20197,69.961171)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient32901-4-9"
- xlink:href="#linearGradient44939-8-4-8-6-8"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient44939-8-4-8-6-8">
- <stop
- id="stop44941-8-5-0-0-0"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop44943-2-5-8-6-1"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="628.46533"
- x2="-215.31401"
- y1="624.84143"
- x1="-218.31921"
- gradientUnits="userSpaceOnUse"
- id="linearGradient32903-6-4"
- xlink:href="#linearGradient33058-2-7-1-7"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient33058-2-7-1-7">
- <stop
- id="stop33060-1-8-8-5"
- offset="0"
- style="stop-color:#e5250b;stop-opacity:1;" />
- <stop
- id="stop33062-4-3-4-5"
- offset="1"
- style="stop-color:#460000;stop-opacity:1;" />
- </linearGradient>
- <radialGradient
- r="7.03125"
- fy="627"
- fx="-202.18748"
- cy="627"
- cx="-202.18748"
- gradientTransform="matrix(0.62164476,0.39733376,-0.55111069,0.86222272,269.0477,166.72227)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient32905-9-5"
- xlink:href="#linearGradient44939-8-4-8-6-8"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient34488-1-8"
- id="linearGradient58927"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-829.95,-273.25)"
- x1="469.52335"
- y1="-101.3037"
- x2="470.73633"
- y2="-102.52942" />
- <linearGradient
- id="linearGradient1610-71-6-9-7">
- <stop
- id="stop1611-26-8-5-4"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop1612-04-8-8-0"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient5060-6-6-2-4">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop5062-2-0-5-5" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop5064-4-4-5-5" />
- </linearGradient>
- <linearGradient
- id="linearGradient4671-6-4-1-7">
- <stop
- style="stop-color:#ffd43b;stop-opacity:1;"
- offset="0"
- id="stop4673-7-6-4-1" />
- <stop
- style="stop-color:#ffe873;stop-opacity:1"
- offset="1"
- id="stop4675-8-0-8-1" />
- </linearGradient>
- <linearGradient
- id="linearGradient4689-1-6-4-2">
- <stop
- style="stop-color:#5a9fd4;stop-opacity:1;"
- offset="0"
- id="stop4691-6-2-6-7" />
- <stop
- style="stop-color:#306998;stop-opacity:1;"
- offset="1"
- id="stop4693-0-4-8-6" />
- </linearGradient>
- <linearGradient
- y2="601.36218"
- x2="218.99957"
- y1="592.95746"
- x1="215.99414"
- gradientUnits="userSpaceOnUse"
- id="linearGradient47921-1-7-1-1"
- xlink:href="#linearGradient3944-4-6-7-7"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient3944-4-6-7-7"
- inkscape:collect="always">
- <stop
- id="stop3946-2-4-4-4"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3948-3-5-0-0"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="604.375"
- x2="216.00003"
- y1="597.41553"
- x1="213.00005"
- gradientUnits="userSpaceOnUse"
- id="linearGradient47923-2-8-9-9"
- xlink:href="#linearGradient3952-2-6-4-4"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient3952-2-6-4-4"
- inkscape:collect="always">
- <stop
- id="stop3954-1-1-8-8"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3956-6-5-8-8"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="606.11218"
- x2="219.5"
- y1="601.83856"
- x1="218.06126"
- gradientUnits="userSpaceOnUse"
- id="linearGradient47925-8-5-2-2"
- xlink:href="#linearGradient3966-5-1-45-4"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient3966-5-1-45-4"
- inkscape:collect="always">
- <stop
- id="stop3968-7-9-5-5"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3970-6-6-1-5"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3966-5-1-45-4"
- id="linearGradient49198-1-1"
- gradientUnits="userSpaceOnUse"
- x1="219"
- y1="604.31494"
- x2="221"
- y2="609.36218" />
- <linearGradient
- y2="29.679312"
- x2="278.40161"
- y1="3.6831069"
- x1="253.78497"
- gradientTransform="matrix(0.888889,0,0,1,513.5,184.50451)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient59244-7"
- xlink:href="#linearGradient1610-1-1-9-4-7-1"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient1610-1-1-9-4-7-1">
- <stop
- id="stop1611-74-7-2-2-2-1"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop1612-09-4-7-5-1-5"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <radialGradient
- r="6.9000001"
- fy="206.40076"
- fx="756.83508"
- cy="206.40076"
- cx="756.83508"
- gradientTransform="matrix(0.3817213,-0.4377393,0.4780868,0.4169055,368.09749,451.76937)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient59246-2"
- xlink:href="#linearGradient40578-4-8-4-0-5-2-4-7"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient40578-4-8-4-0-5-2-4-7">
- <stop
- id="stop40580-8-9-8-9-4-6-9-6"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop40582-6-8-8-4-3-8-9-1"
- offset="1"
- style="stop-color:black;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="249"
- x2="93.0625"
- y1="241.125"
- x1="87"
- gradientTransform="translate(670,-33)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient59248-4"
- xlink:href="#linearGradient58334-24-8-2-6-0-2"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient58334-24-8-2-6-0-2">
- <stop
- style="stop-color:#ffffff;stop-opacity:0.87628865;"
- offset="0.0000000"
- id="stop58336-55-8-3-6-3-3" />
- <stop
- style="stop-color:#fffffe;stop-opacity:0.0000000;"
- offset="1.0000000"
- id="stop58338-17-2-3-3-0-2" />
- </linearGradient>
- <linearGradient
- y2="305"
- x2="758"
- y1="300.83292"
- x1="754.28558"
- gradientTransform="translate(0,-95.999998)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient59250-2"
- xlink:href="#linearGradient16500-11-1-4-3-1"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient16500-11-1-4-3-1"
- inkscape:collect="always">
- <stop
- id="stop16502-5-1-5-5-6"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop16504-27-3-6-0-8"
- offset="1"
- style="stop-color:black;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="601.36218"
- x2="218.99957"
- y1="592.95746"
- x1="215.99414"
- gradientTransform="translate(-251,440.9872)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient59252-5"
- xlink:href="#linearGradient3944-1-7-5-7-7"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient3944-1-7-5-7-7"
- inkscape:collect="always">
- <stop
- id="stop3946-7-4-3-6-6"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3948-1-2-5-7-1"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="604.375"
- x2="216.00003"
- y1="597.41553"
- x1="213.00005"
- gradientTransform="translate(-251,440.9872)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient59254-8"
- xlink:href="#linearGradient3952-5-7-6-8-9"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient3952-5-7-6-8-9"
- inkscape:collect="always">
- <stop
- id="stop3954-2-9-1-3-2"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3956-7-3-4-6-7"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="606.11218"
- x2="219.5"
- y1="601.83856"
- x1="218.06126"
- gradientTransform="translate(-251,440.9872)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient59256-9"
- xlink:href="#linearGradient3966-8-9-6-4-5"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient3966-8-9-6-4-5"
- inkscape:collect="always">
- <stop
- id="stop3968-2-8-2-4-4"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3970-4-6-6-1-3"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="609.36218"
- x2="221"
- y1="604.31494"
- x1="219"
- gradientTransform="translate(-251,440.9872)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient59258-1"
- xlink:href="#linearGradient3966-8-9-6-4-5"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient1610-2">
- <stop
- id="stop1611-8"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0.5"
- id="stop6596" />
- <stop
- id="stop1612-0"
- offset="1"
- style="stop-color:#c8c8c8;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient5060-4">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop5062-1" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop5064-6" />
- </linearGradient>
- <radialGradient
- r="3.1650217"
- fy="500.26215"
- fx="75.554794"
- cy="500.26215"
- cx="75.554794"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient21442-6"
- xlink:href="#linearGradient18821-1"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient18821-1">
- <stop
- id="stop18823-6"
- offset="0"
- style="stop-color:#fc6b58;stop-opacity:1;" />
- <stop
- id="stop18825-0"
- offset="1"
- style="stop-color:#fc6b58;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="34.375"
- x2="29.875"
- y1="18.875"
- x1="31.1875"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21444-0"
- xlink:href="#linearGradient39155-0"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient39155-0">
- <stop
- style="stop-color:white;stop-opacity:1;"
- offset="0"
- id="stop39157-6" />
- <stop
- style="stop-color:#dadada;stop-opacity:1;"
- offset="1"
- id="stop39159-6" />
- </linearGradient>
- <linearGradient
- y2="-458.05771"
- x2="190.46461"
- y1="193.33229"
- x1="185.9903"
- gradientTransform="matrix(0.06818845,0,0,0.06818845,22.51112,27.02885)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21446-3"
- xlink:href="#linearGradient3564-2"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3564-2">
- <stop
- style="stop-color:white;stop-opacity:1;"
- offset="0"
- id="stop3566-3" />
- <stop
- style="stop-color:white;stop-opacity:0;"
- offset="1"
- id="stop3568-0" />
- </linearGradient>
- <radialGradient
- r="20.278975"
- fy="19.668886"
- fx="26.109201"
- cy="19.668886"
- cx="26.109201"
- gradientTransform="matrix(1.647222,0,0,1.26792,-15.47413,-5.79794)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient21448-8"
- xlink:href="#linearGradient39171-9"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient39171-9">
- <stop
- style="stop-color:white;stop-opacity:1;"
- offset="0"
- id="stop39173-1" />
- <stop
- style="stop-color:white;stop-opacity:0;"
- offset="1"
- id="stop39175-1" />
- </linearGradient>
- <linearGradient
- id="linearGradient18821-1-16">
- <stop
- id="stop20589"
- offset="0"
- style="stop-color:#e3604f;stop-opacity:1;" />
- <stop
- id="stop20591"
- offset="1"
- style="stop-color:#e3604f;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient39155-0-813">
- <stop
- style="stop-color:#e6e6e6;stop-opacity:1;"
- offset="0"
- id="stop20595" />
- <stop
- style="stop-color:#c4c4c4;stop-opacity:1;"
- offset="1"
- id="stop20597" />
- </linearGradient>
- <linearGradient
- y2="32.076183"
- x2="276.89801"
- y1="-14.103641"
- x1="236.94902"
- gradientTransform="matrix(2.4126967,0,0,2.7035619,-611.42653,418.58071)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22274-1"
- xlink:href="#linearGradient1610-7"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient1610-7">
- <stop
- id="stop1611-4"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop1612-09"
- offset="1"
- style="stop-color:white;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="383.69843"
- x2="174.29811"
- y1="376.27383"
- x1="160.14388"
- gradientTransform="translate(-122.35565,97.287995)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22276-4"
- xlink:href="#linearGradient5060-5"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient5060-5">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop5062-5" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop5064-17" />
- </linearGradient>
- <radialGradient
- r="3.1650217"
- fy="500.26215"
- fx="75.554794"
- cy="500.26215"
- cx="75.554794"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,484.80188,-124.14103)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient21442-1"
- xlink:href="#linearGradient18821-15"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient18821-15">
- <stop
- id="stop18823-2"
- offset="0"
- style="stop-color:#fc6b58;stop-opacity:1;" />
- <stop
- id="stop18825-7"
- offset="1"
- style="stop-color:#fc6b58;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- gradientTransform="translate(-173.83762,79.554258)"
- y2="34.375"
- x2="29.875"
- y1="18.875"
- x1="31.1875"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21444-6"
- xlink:href="#linearGradient39155-1"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient39155-1">
- <stop
- style="stop-color:white;stop-opacity:1;"
- offset="0"
- id="stop39157-4" />
- <stop
- style="stop-color:#dadada;stop-opacity:1;"
- offset="1"
- id="stop39159-2" />
- </linearGradient>
- <linearGradient
- y2="-458.05771"
- x2="190.46461"
- y1="193.33229"
- x1="185.9903"
- gradientTransform="matrix(0.06818845,0,0,0.06818845,-116.87526,94.420283)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21446-32"
- xlink:href="#linearGradient3564-21"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3564-21">
- <stop
- style="stop-color:white;stop-opacity:1;"
- offset="0"
- id="stop3566-6" />
- <stop
- style="stop-color:white;stop-opacity:0;"
- offset="1"
- id="stop3568-8" />
- </linearGradient>
- <radialGradient
- r="20.278975"
- fy="19.668886"
- fx="26.109201"
- cy="19.668886"
- cx="26.109201"
- gradientTransform="matrix(1.647222,0,0,1.26792,-154.86051,61.593483)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient21448-5"
- xlink:href="#linearGradient39171-7"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient39171-7">
- <stop
- style="stop-color:white;stop-opacity:1;"
- offset="0"
- id="stop39173-6" />
- <stop
- style="stop-color:white;stop-opacity:0;"
- offset="1"
- id="stop39175-18" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient37667"
- id="linearGradient13927"
- gradientUnits="userSpaceOnUse"
- x1="804.17645"
- y1="-262.1517"
- x2="832.15369"
- y2="-234.17448" />
</defs>
<path
inkscape:connector-curvature="0"
@@ -16726,21 +219,21 @@
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
+ inkscape:export-filename="prvicons.png"
style="opacity:0.45"
transform="matrix(1.045454,0,0,1.0610941,-16.32706,109.05266)"
id="g16397" />
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png"
+ inkscape:export-filename="prvicons.png"
transform="matrix(1.000037,0,0,1.0187902,152.96764,39.785579)"
id="g16403">
<g
style="display:inline"
id="g16405"
transform="matrix(0.9375,0,0,0.9375,192.125,77.25821)"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
+ inkscape:export-filename="prvicons.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<g
@@ -16776,7 +269,7 @@
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
+ inkscape:export-filename="prvicons.png"
transform="matrix(1.000872,0,0,1.0462972,140.88404,50.499099)"
id="g16425" />
<g
@@ -16895,7 +388,7 @@
style="display:inline"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
+ inkscape:export-filename="prvicons.png"
transform="translate(67,200.06499)"
id="g22051" />
<g
@@ -16916,7 +409,7 @@
style="display:inline;fill:#d45500;fill-opacity:1" />
<g
id="g28643"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
+ inkscape:export-filename="prvicons.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
transform="translate(-323.1613,214)"
@@ -16934,14 +427,14 @@
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
+ inkscape:export-filename="prvicons.png"
id="g33443"
style="fill:#000000;fill-opacity:1"
transform="matrix(-0.767131,0,0,0.788662,369.34347,270.08667)" />
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
+ inkscape:export-filename="prvicons.png"
id="g33445"
transform="matrix(-0.693332,0,0,0.663699,372.90657,295.34421)" />
<g
@@ -16954,7 +447,7 @@
id="g77742" />
<g
id="g34782"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
+ inkscape:export-filename="prvicons.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
transform="rotate(180,52.08065,131.5)"
@@ -17017,7 +510,7 @@
style="display:inline;stroke-width:5.41920376;stroke-miterlimit:4;stroke-dasharray:none"
id="g38570"
transform="matrix(0.5478212,-0.56064,0.5419177,0.5545983,197.19518,557.21673)"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
+ inkscape:export-filename="prvicons.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<g
@@ -17036,11 +529,10 @@
style="display:inline;enable-background:new"
id="g72880" />
<image
- sodipodi:absref="C:\Users\Andrzej Ambroż\Desktop\a230341b4bf9a9d653c3e8062c4702e859d6d32f.png"
+ sodipodi:absref="prvicons.png"
y="143.4964"
x="8460.25"
id="image7203"
- xlink:href="file:///C:/Users/Andrzej%20Ambro%C5%BC/Desktop/a230341b4bf9a9d653c3e8062c4702e859d6d32f.png"
style="stroke-width:0.69403505;image-rendering:optimizeSpeed"
preserveAspectRatio="none"
height="487.00717"
diff --git a/release/scripts/startup/bl_operators/clip.py b/release/scripts/startup/bl_operators/clip.py
index 45d1ea98a8a..f0e099244f4 100644
--- a/release/scripts/startup/bl_operators/clip.py
+++ b/release/scripts/startup/bl_operators/clip.py
@@ -949,7 +949,7 @@ class CLIP_OT_setup_tracking_scene(Operator):
"""Make all the newly created and the old objects of a collection """ \
"""to be properly setup for shadow catch"""
for ob in collection.objects:
- ob.cycles.is_shadow_catcher = True
+ ob.is_shadow_catcher = True
for child in collection.children:
setup_shadow_catcher_objects(child)
diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py
index cd67a41a701..f6ca200f570 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -501,6 +501,7 @@ compositor_node_categories = [
NodeItem("CompositorNodeTexture"),
NodeItem("CompositorNodeBokehImage"),
NodeItem("CompositorNodeTime"),
+ NodeItem("CompositorNodeSceneTime"),
NodeItem("CompositorNodeTrackPos"),
]),
CompositorNodeCategory("CMP_OUTPUT", "Output", items=[
diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h
index 76a6135baaf..169107b19cb 100644
--- a/source/blender/blenfont/BLF_api.h
+++ b/source/blender/blenfont/BLF_api.h
@@ -122,7 +122,7 @@ void BLF_draw(int fontid, const char *str, size_t str_len) ATTR_NONNULL(2);
int BLF_draw_mono(int fontid, const char *str, size_t str_len, int cwidth) ATTR_NONNULL(2);
typedef bool (*BLF_GlyphBoundsFn)(const char *str,
- const size_t str_step_ofs,
+ size_t str_step_ofs,
const struct rcti *glyph_step_bounds,
int glyph_advance_x,
const struct rctf *glyph_bounds,
diff --git a/source/blender/blenfont/intern/blf_internal.h b/source/blender/blenfont/intern/blf_internal.h
index 23e42ec777f..4e36f522981 100644
--- a/source/blender/blenfont/intern/blf_internal.h
+++ b/source/blender/blenfont/intern/blf_internal.h
@@ -121,7 +121,7 @@ void blf_font_boundbox_foreach_glyph(struct FontBLF *font,
const char *str,
size_t str_len,
bool (*user_fn)(const char *str,
- const size_t str_step_ofs,
+ size_t str_step_ofs,
const struct rcti *glyph_step_bounds,
int glyph_advance_x,
const struct rctf *glyph_bounds,
@@ -132,7 +132,7 @@ void blf_font_boundbox_foreach_glyph(struct FontBLF *font,
int blf_font_count_missing_chars(struct FontBLF *font,
const char *str,
- const size_t str_len,
+ size_t str_len,
int *r_tot_chars);
void blf_font_free(struct FontBLF *font);
diff --git a/source/blender/blenkernel/BKE_appdir.h b/source/blender/blenkernel/BKE_appdir.h
index e92909fb3ca..a7baaed141f 100644
--- a/source/blender/blenkernel/BKE_appdir.h
+++ b/source/blender/blenkernel/BKE_appdir.h
@@ -140,7 +140,7 @@ bool BKE_appdir_font_folder_default(char *dir);
* Find Python executable.
*/
bool BKE_appdir_program_python_search(char *fullpath,
- const size_t fullpath_len,
+ size_t fullpath_len,
int version_major,
int version_minor);
diff --git a/source/blender/blenkernel/BKE_attribute.h b/source/blender/blenkernel/BKE_attribute.h
index db8f3759bf8..6020da08f51 100644
--- a/source/blender/blenkernel/BKE_attribute.h
+++ b/source/blender/blenkernel/BKE_attribute.h
@@ -73,7 +73,7 @@ bool BKE_id_attribute_rename(struct ID *id,
const char *new_name,
struct ReportList *reports);
-int BKE_id_attributes_length(struct ID *id, const CustomDataMask mask);
+int BKE_id_attributes_length(struct ID *id, CustomDataMask mask);
struct CustomDataLayer *BKE_id_attributes_active_get(struct ID *id);
void BKE_id_attributes_active_set(struct ID *id, struct CustomDataLayer *layer);
diff --git a/source/blender/blenkernel/BKE_attribute_access.hh b/source/blender/blenkernel/BKE_attribute_access.hh
index f69ba79e23f..3ffdcee05eb 100644
--- a/source/blender/blenkernel/BKE_attribute_access.hh
+++ b/source/blender/blenkernel/BKE_attribute_access.hh
@@ -26,9 +26,8 @@
#include "BKE_attribute.h"
#include "BLI_color.hh"
-#include "BLI_float2.hh"
-#include "BLI_float3.hh"
#include "BLI_function_ref.hh"
+#include "BLI_math_vec_types.hh"
/**
* This file defines classes that help to provide access to attribute data on a #GeometryComponent.
diff --git a/source/blender/blenkernel/BKE_attribute_math.hh b/source/blender/blenkernel/BKE_attribute_math.hh
index 802c744972c..a7bdca06790 100644
--- a/source/blender/blenkernel/BKE_attribute_math.hh
+++ b/source/blender/blenkernel/BKE_attribute_math.hh
@@ -18,8 +18,7 @@
#include "BLI_array.hh"
#include "BLI_color.hh"
-#include "BLI_float2.hh"
-#include "BLI_float3.hh"
+#include "BLI_math_vec_types.hh"
#include "DNA_customdata_types.h"
@@ -160,12 +159,12 @@ template<> inline float mix2(const float factor, const float &a, const float &b)
template<> inline float2 mix2(const float factor, const float2 &a, const float2 &b)
{
- return float2::interpolate(a, b, factor);
+ return math::interpolate(a, b, factor);
}
template<> inline float3 mix2(const float factor, const float3 &a, const float3 &b)
{
- return float3::interpolate(a, b, factor);
+ return math::interpolate(a, b, factor);
}
template<>
diff --git a/source/blender/blenkernel/BKE_bvhutils.h b/source/blender/blenkernel/BKE_bvhutils.h
index 88d97b822ce..c454e441551 100644
--- a/source/blender/blenkernel/BKE_bvhutils.h
+++ b/source/blender/blenkernel/BKE_bvhutils.h
@@ -129,7 +129,7 @@ BVHTree *bvhtree_from_editmesh_verts_ex(BVHTreeFromEditMesh *data,
float epsilon,
int tree_type,
int axis,
- const BVHCacheType bvh_cache_type,
+ BVHCacheType bvh_cache_type,
struct BVHCache **bvh_cache_p,
ThreadMutex *mesh_eval_mutex);
@@ -149,7 +149,7 @@ BVHTree *bvhtree_from_mesh_verts_ex(struct BVHTreeFromMesh *data,
float epsilon,
int tree_type,
int axis,
- const BVHCacheType bvh_cache_type,
+ BVHCacheType bvh_cache_type,
struct BVHCache **bvh_cache_p,
ThreadMutex *mesh_eval_mutex);
@@ -166,7 +166,7 @@ BVHTree *bvhtree_from_editmesh_edges_ex(BVHTreeFromEditMesh *data,
float epsilon,
int tree_type,
int axis,
- const BVHCacheType bvh_cache_type,
+ BVHCacheType bvh_cache_type,
struct BVHCache **bvh_cache_p,
ThreadMutex *mesh_eval_mutex);
@@ -189,7 +189,7 @@ BVHTree *bvhtree_from_mesh_edges_ex(struct BVHTreeFromMesh *data,
float epsilon,
int tree_type,
int axis,
- const BVHCacheType bvh_cache_type,
+ BVHCacheType bvh_cache_type,
struct BVHCache **bvh_cache_p,
ThreadMutex *mesh_eval_mutex);
@@ -213,7 +213,7 @@ BVHTree *bvhtree_from_mesh_faces_ex(struct BVHTreeFromMesh *data,
float epsilon,
int tree_type,
int axis,
- const BVHCacheType bvh_cache_type,
+ BVHCacheType bvh_cache_type,
struct BVHCache **bvh_cache_p,
ThreadMutex *mesh_eval_mutex);
@@ -230,7 +230,7 @@ BVHTree *bvhtree_from_editmesh_looptri_ex(BVHTreeFromEditMesh *data,
float epsilon,
int tree_type,
int axis,
- const BVHCacheType bvh_cache_type,
+ BVHCacheType bvh_cache_type,
struct BVHCache **bvh_cache_p,
ThreadMutex *mesh_eval_mutex);
@@ -252,7 +252,7 @@ BVHTree *bvhtree_from_mesh_looptri_ex(struct BVHTreeFromMesh *data,
float epsilon,
int tree_type,
int axis,
- const BVHCacheType bvh_cache_type,
+ BVHCacheType bvh_cache_type,
struct BVHCache **bvh_cache_p,
ThreadMutex *mesh_eval_mutex);
@@ -264,7 +264,7 @@ BVHTree *bvhtree_from_mesh_looptri_ex(struct BVHTreeFromMesh *data,
*/
BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
const struct Mesh *mesh,
- const BVHCacheType bvh_cache_type,
+ BVHCacheType bvh_cache_type,
int tree_type);
/**
@@ -273,7 +273,7 @@ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
BVHTree *BKE_bvhtree_from_editmesh_get(BVHTreeFromEditMesh *data,
struct BMEditMesh *em,
int tree_type,
- const BVHCacheType bvh_cache_type,
+ BVHCacheType bvh_cache_type,
struct BVHCache **bvh_cache_p,
ThreadMutex *mesh_eval_mutex);
diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h
index b5b6296a0fa..17a44274712 100644
--- a/source/blender/blenkernel/BKE_customdata.h
+++ b/source/blender/blenkernel/BKE_customdata.h
@@ -323,7 +323,7 @@ void CustomData_bmesh_copy_data_exclude_by_type(const struct CustomData *source,
struct CustomData *dest,
void *src_block,
void **dest_block,
- const CustomDataMask mask_exclude);
+ CustomDataMask mask_exclude);
/**
* Copies data of a single layer of a given type.
@@ -496,7 +496,7 @@ void CustomData_bmesh_free_block_data(struct CustomData *data, void *block);
*/
void CustomData_bmesh_free_block_data_exclude_by_type(struct CustomData *data,
void *block,
- const CustomDataMask mask_exclude);
+ CustomDataMask mask_exclude);
/**
* Copy custom data to/from layers as in mesh/derived-mesh, to edit-mesh
diff --git a/source/blender/blenkernel/BKE_geometry_set.hh b/source/blender/blenkernel/BKE_geometry_set.hh
index acb89637f20..f92f33b2776 100644
--- a/source/blender/blenkernel/BKE_geometry_set.hh
+++ b/source/blender/blenkernel/BKE_geometry_set.hh
@@ -23,11 +23,11 @@
#include <atomic>
#include <iostream>
-#include "BLI_float3.hh"
#include "BLI_float4x4.hh"
#include "BLI_function_ref.hh"
#include "BLI_hash.hh"
#include "BLI_map.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_set.hh"
#include "BLI_user_counter.hh"
#include "BLI_vector_set.hh"
diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index 7b87189a13f..80c6b155be0 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -367,7 +367,7 @@ void BKE_image_packfiles(struct ReportList *reports, struct Image *ima, const ch
void BKE_image_packfiles_from_mem(struct ReportList *reports,
struct Image *ima,
char *data,
- const size_t data_len);
+ size_t data_len);
/**
* Prints memory statistics for images.
diff --git a/source/blender/blenkernel/BKE_mesh_sample.hh b/source/blender/blenkernel/BKE_mesh_sample.hh
index 238b6f4dcae..738b768d906 100644
--- a/source/blender/blenkernel/BKE_mesh_sample.hh
+++ b/source/blender/blenkernel/BKE_mesh_sample.hh
@@ -22,7 +22,7 @@
#include "FN_generic_virtual_array.hh"
-#include "BLI_float3.hh"
+#include "BLI_math_vec_types.hh"
#include "BKE_attribute.h"
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 71d1728a870..a76fe2f83e0 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1313,6 +1313,7 @@ void ntreeGPUMaterialNodes(struct bNodeTree *localtree,
#define CMP_NODE_CRYPTOMATTE 326
#define CMP_NODE_POSTERIZE 327
#define CMP_NODE_CONVERT_COLOR_SPACE 328
+#define CMP_NODE_SCENE_TIME 329
/* channel toggles */
#define CMP_CHAN_RGB 1
@@ -1373,18 +1374,12 @@ void ntreeCompositTagRender(struct Scene *scene);
* - Each render layer node calls the update function of the
* render engine that's used for its scene.
* - The render engine calls RE_engine_register_pass for each pass.
- * - #RE_engine_register_pass calls #ntreeCompositRegisterPass,
- * which calls #node_cmp_rlayers_register_pass for every render layer node.
+ * - #RE_engine_register_pass calls #node_cmp_rlayers_register_pass.
*
* TODO: This is *not* part of `blenkernel`, it's defined under "source/blender/nodes/".
* This declaration should be moved out of BKE.
*/
void ntreeCompositUpdateRLayers(struct bNodeTree *ntree);
-void ntreeCompositRegisterPass(struct bNodeTree *ntree,
- struct Scene *scene,
- struct ViewLayer *view_layer,
- const char *name,
- eNodeSocketDatatype type);
void ntreeCompositClearTags(struct bNodeTree *ntree);
struct bNodeSocket *ntreeCompositOutputFileAddSocket(struct bNodeTree *ntree,
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index 8610bc09a92..a40359e8650 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -317,11 +317,8 @@ void BKE_scene_multiview_view_prefix_get(struct Scene *scene,
const char *name,
char *r_prefix,
const char **r_ext);
-void BKE_scene_multiview_videos_dimensions_get(const struct RenderData *rd,
- const size_t width,
- const size_t height,
- size_t *r_width,
- size_t *r_height);
+void BKE_scene_multiview_videos_dimensions_get(
+ const struct RenderData *rd, size_t width, size_t height, size_t *r_width, size_t *r_height);
int BKE_scene_multiview_num_videos_get(const struct RenderData *rd);
/* depsgraph */
diff --git a/source/blender/blenkernel/BKE_spline.hh b/source/blender/blenkernel/BKE_spline.hh
index 2c14880978f..a87f76da8da 100644
--- a/source/blender/blenkernel/BKE_spline.hh
+++ b/source/blender/blenkernel/BKE_spline.hh
@@ -24,8 +24,8 @@
#include "FN_generic_virtual_array.hh"
-#include "BLI_float3.hh"
#include "BLI_float4x4.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_vector.hh"
#include "BKE_attribute_access.hh"
diff --git a/source/blender/blenkernel/BKE_vfont.h b/source/blender/blenkernel/BKE_vfont.h
index d0a44ce4e47..3397f2ef82a 100644
--- a/source/blender/blenkernel/BKE_vfont.h
+++ b/source/blender/blenkernel/BKE_vfont.h
@@ -104,7 +104,7 @@ void BKE_vfont_select_clamp(struct Object *ob);
void BKE_vfont_clipboard_free(void);
void BKE_vfont_clipboard_set(const char32_t *text_buf,
const struct CharInfo *info_buf,
- const size_t len);
+ size_t len);
void BKE_vfont_clipboard_get(char32_t **r_text_buf,
struct CharInfo **r_info_buf,
size_t *r_len_utf8,
diff --git a/source/blender/blenkernel/BKE_volume.h b/source/blender/blenkernel/BKE_volume.h
index 2b551a76d73..b40facc3572 100644
--- a/source/blender/blenkernel/BKE_volume.h
+++ b/source/blender/blenkernel/BKE_volume.h
@@ -163,8 +163,8 @@ bool BKE_volume_save(const struct Volume *volume,
* file or copy shared grids to make them writeable. */
#ifdef __cplusplus
-# include "BLI_float3.hh"
# include "BLI_float4x4.hh"
+# include "BLI_math_vec_types.hh"
# include "BLI_string_ref.hh"
bool BKE_volume_min_max(const Volume *volume, blender::float3 &r_min, blender::float3 &r_max);
diff --git a/source/blender/blenkernel/intern/DerivedMesh.cc b/source/blender/blenkernel/intern/DerivedMesh.cc
index 547cfe7f3a9..f25c0044c7d 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.cc
+++ b/source/blender/blenkernel/intern/DerivedMesh.cc
@@ -38,9 +38,9 @@
#include "BLI_array.h"
#include "BLI_bitmap.h"
#include "BLI_blenlib.h"
-#include "BLI_float2.hh"
#include "BLI_linklist.h"
#include "BLI_math.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_task.h"
#include "BLI_task.hh"
#include "BLI_utildefines.h"
diff --git a/source/blender/blenkernel/intern/attribute_access.cc b/source/blender/blenkernel/intern/attribute_access.cc
index 1a4265d936b..cc43a3e26a8 100644
--- a/source/blender/blenkernel/intern/attribute_access.cc
+++ b/source/blender/blenkernel/intern/attribute_access.cc
@@ -30,7 +30,7 @@
#include "DNA_pointcloud_types.h"
#include "BLI_color.hh"
-#include "BLI_float2.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_span.hh"
#include "BLT_translation.h"
diff --git a/source/blender/blenkernel/intern/data_transfer_intern.h b/source/blender/blenkernel/intern/data_transfer_intern.h
index e5218415df9..b5b3db31fbf 100644
--- a/source/blender/blenkernel/intern/data_transfer_intern.h
+++ b/source/blender/blenkernel/intern/data_transfer_intern.h
@@ -44,9 +44,9 @@ void data_transfer_layersmapping_add_item(struct ListBase *r_map,
void *data_dst,
int data_src_n,
int data_dst_n,
- const size_t elem_size,
- const size_t data_size,
- const size_t data_offset,
+ size_t elem_size,
+ size_t data_size,
+ size_t data_offset,
uint64_t data_flag,
cd_datatransfer_interp interp,
void *interp_data);
diff --git a/source/blender/blenkernel/intern/geometry_component_mesh.cc b/source/blender/blenkernel/intern/geometry_component_mesh.cc
index 162130397eb..11b350ef2be 100644
--- a/source/blender/blenkernel/intern/geometry_component_mesh.cc
+++ b/source/blender/blenkernel/intern/geometry_component_mesh.cc
@@ -152,8 +152,8 @@ VArray<float3> mesh_normals_varray(const MeshComponent &mesh_component,
Span<MEdge> edges{mesh.medge, mesh.totedge};
for (const int i : mask) {
const MEdge &edge = edges[i];
- edge_normals[i] =
- float3::interpolate(vert_normals[edge.v1], vert_normals[edge.v2], 0.5f).normalized();
+ edge_normals[i] = math::normalize(
+ math::interpolate(vert_normals[edge.v1], vert_normals[edge.v2], 0.5f));
}
return VArray<float3>::ForContainer(std::move(edge_normals));
diff --git a/source/blender/blenkernel/intern/gpencil_geom.cc b/source/blender/blenkernel/intern/gpencil_geom.cc
index 07aebb26e80..9abdbceec61 100644
--- a/source/blender/blenkernel/intern/gpencil_geom.cc
+++ b/source/blender/blenkernel/intern/gpencil_geom.cc
@@ -33,10 +33,10 @@
#include "BLI_array_utils.h"
#include "BLI_blenlib.h"
-#include "BLI_float3.hh"
#include "BLI_ghash.h"
#include "BLI_hash.h"
#include "BLI_heap.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_math_vector.h"
#include "BLI_polyfill_2d.h"
#include "BLI_span.hh"
diff --git a/source/blender/blenkernel/intern/hair.cc b/source/blender/blenkernel/intern/hair.cc
index c5b154c9a4b..b7ba159f631 100644
--- a/source/blender/blenkernel/intern/hair.cc
+++ b/source/blender/blenkernel/intern/hair.cc
@@ -28,9 +28,9 @@
#include "DNA_material_types.h"
#include "DNA_object_types.h"
-#include "BLI_float3.hh"
#include "BLI_listbase.h"
#include "BLI_math_base.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_rand.h"
#include "BLI_string.h"
#include "BLI_utildefines.h"
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 4899c3671aa..23b1054f814 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -2446,7 +2446,7 @@ void BKE_image_stamp_buf(Scene *scene,
/* and draw the text. */
BLF_position(mono, x, y + y_ofs, 0.0);
- BLF_draw_buffer(mono, stamp_data.file, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw_buffer(mono, stamp_data.file, sizeof(stamp_data.file));
/* the extra pixel for background. */
y -= BUFF_MARGIN_Y * 2;
@@ -2469,7 +2469,7 @@ void BKE_image_stamp_buf(Scene *scene,
y + h + BUFF_MARGIN_Y);
BLF_position(mono, x, y + y_ofs, 0.0);
- BLF_draw_buffer(mono, stamp_data.date, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw_buffer(mono, stamp_data.date, sizeof(stamp_data.date));
/* the extra pixel for background. */
y -= BUFF_MARGIN_Y * 2;
@@ -2492,7 +2492,7 @@ void BKE_image_stamp_buf(Scene *scene,
y + h + BUFF_MARGIN_Y);
BLF_position(mono, x, y + y_ofs, 0.0);
- BLF_draw_buffer(mono, stamp_data.rendertime, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw_buffer(mono, stamp_data.rendertime, sizeof(stamp_data.rendertime));
/* the extra pixel for background. */
y -= BUFF_MARGIN_Y * 2;
@@ -2515,7 +2515,7 @@ void BKE_image_stamp_buf(Scene *scene,
y + h + BUFF_MARGIN_Y);
BLF_position(mono, x, y + y_ofs, 0.0);
- BLF_draw_buffer(mono, stamp_data.memory, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw_buffer(mono, stamp_data.memory, sizeof(stamp_data.memory));
/* the extra pixel for background. */
y -= BUFF_MARGIN_Y * 2;
@@ -2538,7 +2538,7 @@ void BKE_image_stamp_buf(Scene *scene,
y + h + BUFF_MARGIN_Y);
BLF_position(mono, x, y + y_ofs, 0.0);
- BLF_draw_buffer(mono, stamp_data.hostname, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw_buffer(mono, stamp_data.hostname, sizeof(stamp_data.hostname));
/* the extra pixel for background. */
y -= BUFF_MARGIN_Y * 2;
@@ -2562,7 +2562,7 @@ void BKE_image_stamp_buf(Scene *scene,
y + h + BUFF_MARGIN_Y);
BLF_position(mono, x, y + y_ofs + (h - h_fixed), 0.0);
- BLF_draw_buffer(mono, stamp_data.note, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw_buffer(mono, stamp_data.note, sizeof(stamp_data.note));
}
BLF_disable(mono, BLF_WORD_WRAP);
@@ -2586,7 +2586,7 @@ void BKE_image_stamp_buf(Scene *scene,
/* and pad the text. */
BLF_position(mono, x, y + y_ofs, 0.0);
- BLF_draw_buffer(mono, stamp_data.marker, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw_buffer(mono, stamp_data.marker, sizeof(stamp_data.marker));
/* space width. */
x += w + pad;
@@ -2609,7 +2609,7 @@ void BKE_image_stamp_buf(Scene *scene,
/* and pad the text. */
BLF_position(mono, x, y + y_ofs, 0.0);
- BLF_draw_buffer(mono, stamp_data.time, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw_buffer(mono, stamp_data.time, sizeof(stamp_data.time));
/* space width. */
x += w + pad;
@@ -2631,7 +2631,7 @@ void BKE_image_stamp_buf(Scene *scene,
/* and pad the text. */
BLF_position(mono, x, y + y_ofs, 0.0);
- BLF_draw_buffer(mono, stamp_data.frame, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw_buffer(mono, stamp_data.frame, sizeof(stamp_data.frame));
/* space width. */
x += w + pad;
@@ -2651,7 +2651,7 @@ void BKE_image_stamp_buf(Scene *scene,
x + w + BUFF_MARGIN_X,
y + h + BUFF_MARGIN_Y);
BLF_position(mono, x, y + y_ofs, 0.0);
- BLF_draw_buffer(mono, stamp_data.camera, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw_buffer(mono, stamp_data.camera, sizeof(stamp_data.camera));
/* space width. */
x += w + pad;
@@ -2671,7 +2671,7 @@ void BKE_image_stamp_buf(Scene *scene,
x + w + BUFF_MARGIN_X,
y + h + BUFF_MARGIN_Y);
BLF_position(mono, x, y + y_ofs, 0.0);
- BLF_draw_buffer(mono, stamp_data.cameralens, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw_buffer(mono, stamp_data.cameralens, sizeof(stamp_data.cameralens));
}
if (TEXT_SIZE_CHECK(stamp_data.scene, w, h)) {
@@ -2693,7 +2693,7 @@ void BKE_image_stamp_buf(Scene *scene,
/* and pad the text. */
BLF_position(mono, x, y + y_ofs, 0.0);
- BLF_draw_buffer(mono, stamp_data.scene, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw_buffer(mono, stamp_data.scene, sizeof(stamp_data.scene));
}
if (TEXT_SIZE_CHECK(stamp_data.strip, w, h)) {
@@ -2715,7 +2715,7 @@ void BKE_image_stamp_buf(Scene *scene,
y + h + BUFF_MARGIN_Y);
BLF_position(mono, x, y + y_ofs, 0.0);
- BLF_draw_buffer(mono, stamp_data.strip, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw_buffer(mono, stamp_data.strip, sizeof(stamp_data.strip));
}
/* cleanup the buffer. */
diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c
index 6f498c5c9e7..12bbab57cf2 100644
--- a/source/blender/blenkernel/intern/mask.c
+++ b/source/blender/blenkernel/intern/mask.c
@@ -38,6 +38,7 @@
#include "BLT_translation.h"
+#include "DNA_defaults.h"
#include "DNA_mask_types.h"
#include "BKE_animsys.h"
@@ -1308,7 +1309,7 @@ void BKE_mask_point_parent_matrix_get(MaskSplinePoint *point,
MovieTrackingObject *ob = BKE_tracking_object_get_named(tracking, parent->parent);
if (ob) {
- MovieClipUser user = {0};
+ MovieClipUser user = *DNA_struct_default_get(MovieClipUser);
float clip_framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, ctime);
BKE_movieclip_user_set_frame(&user, ctime);
diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc
index 973852d7c22..a7e263bcc9c 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -36,13 +36,13 @@
#include "BLI_bitmap.h"
#include "BLI_edgehash.h"
#include "BLI_endian_switch.h"
-#include "BLI_float3.hh"
#include "BLI_ghash.h"
#include "BLI_hash.h"
#include "BLI_index_range.hh"
#include "BLI_linklist.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_memarena.h"
#include "BLI_string.h"
#include "BLI_task.hh"
@@ -1628,16 +1628,16 @@ bool BKE_mesh_minmax(const Mesh *me, float r_min[3], float r_max[3])
[&](IndexRange range, const Result &init) {
Result result = init;
for (const int i : range) {
- float3::min_max(me->mvert[i].co, result.min, result.max);
+ math::min_max(float3(me->mvert[i].co), result.min, result.max);
}
return result;
},
[](const Result &a, const Result &b) {
- return Result{float3::min(a.min, b.min), float3::max(a.max, b.max)};
+ return Result{math::min(a.min, b.min), math::max(a.max, b.max)};
});
- copy_v3_v3(r_min, float3::min(minmax.min, r_min));
- copy_v3_v3(r_max, float3::max(minmax.max, r_max));
+ copy_v3_v3(r_min, math::min(minmax.min, float3(r_min)));
+ copy_v3_v3(r_max, math::max(minmax.max, float3(r_max)));
return true;
}
diff --git a/source/blender/blenkernel/intern/mesh_boolean_convert.cc b/source/blender/blenkernel/intern/mesh_boolean_convert.cc
index 771d79a0445..a4a5fe2be2e 100644
--- a/source/blender/blenkernel/intern/mesh_boolean_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_boolean_convert.cc
@@ -32,9 +32,9 @@
#include "BLI_alloca.h"
#include "BLI_array.hh"
-#include "BLI_float2.hh"
#include "BLI_float4x4.hh"
#include "BLI_math.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_mesh_boolean.hh"
#include "BLI_mesh_intersect.hh"
#include "BLI_span.hh"
diff --git a/source/blender/blenkernel/intern/mesh_normals.cc b/source/blender/blenkernel/intern/mesh_normals.cc
index 16241b0f0dd..d4f32dbc50c 100644
--- a/source/blender/blenkernel/intern/mesh_normals.cc
+++ b/source/blender/blenkernel/intern/mesh_normals.cc
@@ -36,10 +36,10 @@
#include "BLI_bitmap.h"
#include "BLI_array.hh"
-#include "BLI_float3.hh"
#include "BLI_linklist.h"
#include "BLI_linklist_stack.h"
#include "BLI_math.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_memarena.h"
#include "BLI_span.hh"
#include "BLI_stack.h"
diff --git a/source/blender/blenkernel/intern/mesh_remesh_voxel.cc b/source/blender/blenkernel/intern/mesh_remesh_voxel.cc
index 3447185089d..50464da86e9 100644
--- a/source/blender/blenkernel/intern/mesh_remesh_voxel.cc
+++ b/source/blender/blenkernel/intern/mesh_remesh_voxel.cc
@@ -31,8 +31,8 @@
#include "MEM_guardedalloc.h"
#include "BLI_array.hh"
-#include "BLI_float3.hh"
#include "BLI_index_range.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_span.hh"
#include "DNA_mesh_types.h"
diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c
index e8975c82c46..88da789cdc4 100644
--- a/source/blender/blenkernel/intern/movieclip.c
+++ b/source/blender/blenkernel/intern/movieclip.c
@@ -953,7 +953,7 @@ static MovieClip *movieclip_alloc(Main *bmain, const char *name)
static void movieclip_load_get_size(MovieClip *clip)
{
int width, height;
- MovieClipUser user = {0};
+ MovieClipUser user = *DNA_struct_default_get(MovieClipUser);
user.framenr = BKE_movieclip_remap_clip_to_scene_frame(clip, 1);
BKE_movieclip_get_size(clip, &user, &width, &height);
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 1cb3fd6153c..8c6bdb13708 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -4447,6 +4447,7 @@ static void registerCompositNodes()
register_node_type_cmp_value();
register_node_type_cmp_rgb();
register_node_type_cmp_curve_time();
+ register_node_type_cmp_scene_time();
register_node_type_cmp_movieclip();
register_node_type_cmp_composite();
diff --git a/source/blender/blenkernel/intern/object_dupli.cc b/source/blender/blenkernel/intern/object_dupli.cc
index 35740f503f4..5dcb753abf4 100644
--- a/source/blender/blenkernel/intern/object_dupli.cc
+++ b/source/blender/blenkernel/intern/object_dupli.cc
@@ -31,9 +31,9 @@
#include "BLI_string_utf8.h"
#include "BLI_array.hh"
-#include "BLI_float3.hh"
#include "BLI_float4x4.hh"
#include "BLI_math.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_rand.h"
#include "BLI_span.hh"
#include "BLI_vector.hh"
@@ -1025,6 +1025,8 @@ static void get_dupliface_transform_from_coords(Span<float3> coords,
const float scale_fac,
float r_mat[4][4])
{
+ using namespace blender::math;
+
/* Location. */
float3 location(0);
for (const float3 &coord : coords) {
@@ -1035,9 +1037,7 @@ static void get_dupliface_transform_from_coords(Span<float3> coords,
/* Rotation. */
float quat[4];
- float3 f_no;
- cross_poly_v3(f_no, (const float(*)[3])coords.data(), (uint)coords.size());
- f_no.normalize();
+ float3 f_no = normalize(cross_poly(coords));
tri_to_quat_ex(quat, coords[0], coords[1], coords[2], f_no);
/* Scale. */
@@ -1649,6 +1649,14 @@ static const DupliGenerator *get_dupli_generator(const DupliContext *ctx)
return nullptr;
}
+ /* Give "Object as Font" instances higher priority than geometry set instances, to retain
+ * the behavior from before curve object meshes were processed as instances internally. */
+ if (transflag & OB_DUPLIVERTS) {
+ if (ctx->object->type == OB_FONT) {
+ return &gen_dupli_verts_font;
+ }
+ }
+
if (ctx->object->runtime.geometry_set_eval != nullptr) {
if (BKE_object_has_geometry_set_instances(ctx->object)) {
return &gen_dupli_geometry_set;
@@ -1662,9 +1670,6 @@ static const DupliGenerator *get_dupli_generator(const DupliContext *ctx)
if (ctx->object->type == OB_MESH) {
return &gen_dupli_verts;
}
- if (ctx->object->type == OB_FONT) {
- return &gen_dupli_verts_font;
- }
if (ctx->object->type == OB_POINTCLOUD) {
return &gen_dupli_verts_pointcloud;
}
diff --git a/source/blender/blenkernel/intern/pointcloud.cc b/source/blender/blenkernel/intern/pointcloud.cc
index a041e04bf71..b5f016e4d76 100644
--- a/source/blender/blenkernel/intern/pointcloud.cc
+++ b/source/blender/blenkernel/intern/pointcloud.cc
@@ -25,9 +25,9 @@
#include "DNA_object_types.h"
#include "DNA_pointcloud_types.h"
-#include "BLI_float3.hh"
#include "BLI_index_range.hh"
#include "BLI_listbase.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_rand.h"
#include "BLI_span.hh"
#include "BLI_string.h"
@@ -275,6 +275,8 @@ struct MinMaxResult {
static MinMaxResult min_max_no_radii(Span<float3> positions)
{
+ using namespace blender::math;
+
return blender::threading::parallel_reduce(
positions.index_range(),
1024,
@@ -282,17 +284,19 @@ static MinMaxResult min_max_no_radii(Span<float3> positions)
[&](IndexRange range, const MinMaxResult &init) {
MinMaxResult result = init;
for (const int i : range) {
- float3::min_max(positions[i], result.min, result.max);
+ min_max(positions[i], result.min, result.max);
}
return result;
},
[](const MinMaxResult &a, const MinMaxResult &b) {
- return MinMaxResult{float3::min(a.min, b.min), float3::max(a.max, b.max)};
+ return MinMaxResult{min(a.min, b.min), max(a.max, b.max)};
});
}
static MinMaxResult min_max_with_radii(Span<float3> positions, Span<float> radii)
{
+ using namespace blender::math;
+
return blender::threading::parallel_reduce(
positions.index_range(),
1024,
@@ -300,18 +304,20 @@ static MinMaxResult min_max_with_radii(Span<float3> positions, Span<float> radii
[&](IndexRange range, const MinMaxResult &init) {
MinMaxResult result = init;
for (const int i : range) {
- result.min = float3::min(positions[i] - radii[i], result.min);
- result.max = float3::max(positions[i] + radii[i], result.max);
+ result.min = min(positions[i] - radii[i], result.min);
+ result.max = max(positions[i] + radii[i], result.max);
}
return result;
},
[](const MinMaxResult &a, const MinMaxResult &b) {
- return MinMaxResult{float3::min(a.min, b.min), float3::max(a.max, b.max)};
+ return MinMaxResult{min(a.min, b.min), max(a.max, b.max)};
});
}
bool BKE_pointcloud_minmax(const PointCloud *pointcloud, float r_min[3], float r_max[3])
{
+ using namespace blender::math;
+
if (!pointcloud->totpoint) {
return false;
}
@@ -322,8 +328,8 @@ bool BKE_pointcloud_minmax(const PointCloud *pointcloud, float r_min[3], float r
{pointcloud->radius, pointcloud->totpoint}) :
min_max_no_radii(positions);
- copy_v3_v3(r_min, float3::min(min_max.min, r_min));
- copy_v3_v3(r_max, float3::max(min_max.max, r_max));
+ copy_v3_v3(r_min, min(min_max.min, float3(r_min)));
+ copy_v3_v3(r_max, max(min_max.max, float3(r_max)));
return true;
}
@@ -340,7 +346,7 @@ BoundBox *BKE_pointcloud_boundbox_get(Object *ob)
ob->runtime.bb = static_cast<BoundBox *>(MEM_callocN(sizeof(BoundBox), "pointcloud boundbox"));
}
- blender::float3 min, max;
+ float3 min, max;
INIT_MINMAX(min, max);
if (ob->runtime.geometry_set_eval != nullptr) {
ob->runtime.geometry_set_eval->compute_boundbox_without_instances(&min, &max);
diff --git a/source/blender/blenkernel/intern/simulation.cc b/source/blender/blenkernel/intern/simulation.cc
index b0f9de5963a..ec4b0e8d51d 100644
--- a/source/blender/blenkernel/intern/simulation.cc
+++ b/source/blender/blenkernel/intern/simulation.cc
@@ -28,9 +28,9 @@
#include "DNA_simulation_types.h"
#include "BLI_compiler_compat.h"
-#include "BLI_float3.hh"
#include "BLI_listbase.h"
#include "BLI_math.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_rand.h"
#include "BLI_span.hh"
#include "BLI_string.h"
diff --git a/source/blender/blenkernel/intern/spline_base.cc b/source/blender/blenkernel/intern/spline_base.cc
index 857022345f3..3262d768b6c 100644
--- a/source/blender/blenkernel/intern/spline_base.cc
+++ b/source/blender/blenkernel/intern/spline_base.cc
@@ -166,13 +166,15 @@ static void accumulate_lengths(Span<float3> positions,
const bool is_cyclic,
MutableSpan<float> lengths)
{
+ using namespace blender::math;
+
float length = 0.0f;
for (const int i : IndexRange(positions.size() - 1)) {
- length += float3::distance(positions[i], positions[i + 1]);
+ length += distance(positions[i], positions[i + 1]);
lengths[i] = length;
}
if (is_cyclic) {
- lengths.last() = length + float3::distance(positions.last(), positions.first());
+ lengths.last() = length + distance(positions.last(), positions.first());
}
}
@@ -200,11 +202,13 @@ Span<float> Spline::evaluated_lengths() const
static float3 direction_bisect(const float3 &prev, const float3 &middle, const float3 &next)
{
- const float3 dir_prev = (middle - prev).normalized();
- const float3 dir_next = (next - middle).normalized();
+ using namespace blender::math;
+
+ const float3 dir_prev = normalize(middle - prev);
+ const float3 dir_next = normalize(next - middle);
- const float3 result = (dir_prev + dir_next).normalized();
- if (UNLIKELY(result.is_zero())) {
+ const float3 result = normalize(dir_prev + dir_next);
+ if (UNLIKELY(is_zero(result))) {
return float3(0.0f, 0.0f, 1.0f);
}
return result;
@@ -214,6 +218,8 @@ static void calculate_tangents(Span<float3> positions,
const bool is_cyclic,
MutableSpan<float3> tangents)
{
+ using namespace blender::math;
+
if (positions.size() == 1) {
tangents.first() = float3(0.0f, 0.0f, 1.0f);
return;
@@ -232,8 +238,8 @@ static void calculate_tangents(Span<float3> positions,
tangents.last() = direction_bisect(second_to_last, last, first);
}
else {
- tangents.first() = (positions[1] - positions[0]).normalized();
- tangents.last() = (positions.last() - positions[positions.size() - 2]).normalized();
+ tangents.first() = normalize(positions[1] - positions[0]);
+ tangents.last() = normalize(positions.last() - positions[positions.size() - 2]);
}
}
@@ -264,18 +270,22 @@ static float3 rotate_direction_around_axis(const float3 &direction,
const float3 &axis,
const float angle)
{
+ using namespace blender::math;
+
BLI_ASSERT_UNIT_V3(direction);
BLI_ASSERT_UNIT_V3(axis);
- const float3 axis_scaled = axis * float3::dot(direction, axis);
+ const float3 axis_scaled = axis * dot(direction, axis);
const float3 diff = direction - axis_scaled;
- const float3 cross = float3::cross(axis, diff);
+ const float3 cross = blender::math::cross(axis, diff);
return axis_scaled + diff * std::cos(angle) + cross * std::sin(angle);
}
static void calculate_normals_z_up(Span<float3> tangents, MutableSpan<float3> r_normals)
{
+ using namespace blender::math;
+
BLI_assert(r_normals.size() == tangents.size());
/* Same as in `vec_to_quat`. */
@@ -286,7 +296,7 @@ static void calculate_normals_z_up(Span<float3> tangents, MutableSpan<float3> r_
r_normals[i] = {1.0f, 0.0f, 0.0f};
}
else {
- r_normals[i] = float3(tangent.y, -tangent.x, 0.0f).normalized();
+ r_normals[i] = normalize(float3(tangent.y, -tangent.x, 0.0f));
}
}
}
@@ -298,12 +308,14 @@ static float3 calculate_next_normal(const float3 &last_normal,
const float3 &last_tangent,
const float3 &current_tangent)
{
- if (last_tangent.is_zero() || current_tangent.is_zero()) {
+ using namespace blender::math;
+
+ if (is_zero(last_tangent) || is_zero(current_tangent)) {
return last_normal;
}
const float angle = angle_normalized_v3v3(last_tangent, current_tangent);
if (angle != 0.0) {
- const float3 axis = float3::cross(last_tangent, current_tangent).normalized();
+ const float3 axis = normalize(cross(last_tangent, current_tangent));
return rotate_direction_around_axis(last_normal, axis, angle);
}
return last_normal;
@@ -313,6 +325,7 @@ static void calculate_normals_minimum(Span<float3> tangents,
const bool cyclic,
MutableSpan<float3> r_normals)
{
+ using namespace blender::math;
BLI_assert(r_normals.size() == tangents.size());
if (r_normals.is_empty()) {
@@ -327,7 +340,7 @@ static void calculate_normals_minimum(Span<float3> tangents,
r_normals[0] = {1.0f, 0.0f, 0.0f};
}
else {
- r_normals[0] = float3(first_tangent.y, -first_tangent.x, 0.0f).normalized();
+ r_normals[0] = normalize(float3(first_tangent.y, -first_tangent.x, 0.0f));
}
/* Forward normal with minimum twist along the entire spline. */
diff --git a/source/blender/blenkernel/intern/spline_bezier.cc b/source/blender/blenkernel/intern/spline_bezier.cc
index b24c8960857..980437014b1 100644
--- a/source/blender/blenkernel/intern/spline_bezier.cc
+++ b/source/blender/blenkernel/intern/spline_bezier.cc
@@ -199,11 +199,13 @@ void BezierSpline::ensure_auto_handles() const
}
for (const int i : IndexRange(this->size())) {
+ using namespace blender;
+
if (ELEM(HandleType::Auto, handle_types_left_[i], handle_types_right_[i])) {
const float3 prev_diff = positions_[i] - previous_position(positions_, is_cyclic_, i);
const float3 next_diff = next_position(positions_, is_cyclic_, i) - positions_[i];
- float prev_len = prev_diff.length();
- float next_len = next_diff.length();
+ float prev_len = math::length(prev_diff);
+ float next_len = math::length(next_diff);
if (prev_len == 0.0f) {
prev_len = 1.0f;
}
@@ -213,7 +215,7 @@ void BezierSpline::ensure_auto_handles() const
const float3 dir = next_diff / next_len + prev_diff / prev_len;
/* This magic number is unfortunate, but comes from elsewhere in Blender. */
- const float len = dir.length() * 2.5614f;
+ const float len = math::length(dir) * 2.5614f;
if (len != 0.0f) {
if (handle_types_left_[i] == HandleType::Auto) {
const float prev_len_clamped = std::min(prev_len, next_len * 5.0f);
@@ -228,12 +230,12 @@ void BezierSpline::ensure_auto_handles() const
if (handle_types_left_[i] == HandleType::Vector) {
const float3 prev = previous_position(positions_, is_cyclic_, i);
- handle_positions_left_[i] = float3::interpolate(positions_[i], prev, 1.0f / 3.0f);
+ handle_positions_left_[i] = math::interpolate(positions_[i], prev, 1.0f / 3.0f);
}
if (handle_types_right_[i] == HandleType::Vector) {
const float3 next = next_position(positions_, is_cyclic_, i);
- handle_positions_right_[i] = float3::interpolate(positions_[i], next, 1.0f / 3.0f);
+ handle_positions_right_[i] = math::interpolate(positions_[i], next, 1.0f / 3.0f);
}
}
@@ -275,6 +277,8 @@ static void set_handle_position(const float3 &position,
float3 &handle,
float3 &handle_other)
{
+ using namespace blender::math;
+
/* Don't bother when the handle positions are calculated automatically anyway. */
if (ELEM(type, BezierSpline::HandleType::Auto, BezierSpline::HandleType::Vector)) {
return;
@@ -283,9 +287,9 @@ static void set_handle_position(const float3 &position,
handle = new_value;
if (type_other == BezierSpline::HandleType::Align) {
/* Keep track of the old length of the opposite handle. */
- const float length = float3::distance(handle_other, position);
+ const float length = distance(handle_other, position);
/* Set the other handle to directly opposite from the current handle. */
- const float3 dir = (handle - position).normalized();
+ const float3 dir = normalize(handle - position);
handle_other = position - dir * length;
}
}
@@ -353,6 +357,7 @@ int BezierSpline::evaluated_points_size() const
void BezierSpline::correct_end_tangents() const
{
+ using namespace blender::math;
if (is_cyclic_) {
return;
}
@@ -360,10 +365,10 @@ void BezierSpline::correct_end_tangents() const
MutableSpan<float3> tangents(evaluated_tangents_cache_);
if (handle_positions_right_.first() != positions_.first()) {
- tangents.first() = (handle_positions_right_.first() - positions_.first()).normalized();
+ tangents.first() = normalize(handle_positions_right_.first() - positions_.first());
}
if (handle_positions_left_.last() != positions_.last()) {
- tangents.last() = (positions_.last() - handle_positions_left_.last()).normalized();
+ tangents.last() = normalize(positions_.last() - handle_positions_left_.last());
}
}
@@ -371,20 +376,22 @@ BezierSpline::InsertResult BezierSpline::calculate_segment_insertion(const int i
const int next_index,
const float parameter)
{
+ using namespace blender::math;
+
BLI_assert(parameter <= 1.0f && parameter >= 0.0f);
BLI_assert(next_index == 0 || next_index == index + 1);
const float3 &point_prev = positions_[index];
const float3 &handle_prev = handle_positions_right_[index];
const float3 &handle_next = handle_positions_left_[next_index];
const float3 &point_next = positions_[next_index];
- const float3 center_point = float3::interpolate(handle_prev, handle_next, parameter);
+ const float3 center_point = interpolate(handle_prev, handle_next, parameter);
BezierSpline::InsertResult result;
- result.handle_prev = float3::interpolate(point_prev, handle_prev, parameter);
- result.handle_next = float3::interpolate(handle_next, point_next, parameter);
- result.left_handle = float3::interpolate(result.handle_prev, center_point, parameter);
- result.right_handle = float3::interpolate(center_point, result.handle_next, parameter);
- result.position = float3::interpolate(result.left_handle, result.right_handle, parameter);
+ result.handle_prev = interpolate(point_prev, handle_prev, parameter);
+ result.handle_next = interpolate(handle_next, point_next, parameter);
+ result.left_handle = interpolate(result.handle_prev, center_point, parameter);
+ result.right_handle = interpolate(center_point, result.handle_next, parameter);
+ result.position = interpolate(result.left_handle, result.right_handle, parameter);
return result;
}
diff --git a/source/blender/blenkernel/intern/tracking_region_tracker.c b/source/blender/blenkernel/intern/tracking_region_tracker.c
index 2265c05463b..4b23f74bc8f 100644
--- a/source/blender/blenkernel/intern/tracking_region_tracker.c
+++ b/source/blender/blenkernel/intern/tracking_region_tracker.c
@@ -26,6 +26,7 @@
#include "MEM_guardedalloc.h"
+#include "DNA_defaults.h"
#include "DNA_movieclip_types.h"
#include "BLI_threads.h"
@@ -322,7 +323,7 @@ void BKE_tracking_refine_marker(MovieClip *clip,
int search_area_height, search_area_width;
int clip_flag = clip->flag & MCLIP_TIMECODE_FLAGS;
int reference_framenr;
- MovieClipUser user = {0};
+ MovieClipUser user = *DNA_struct_default_get(MovieClipUser);
double dst_pixel_x[5], dst_pixel_y[5];
bool tracked;
diff --git a/source/blender/blenkernel/intern/tracking_test.cc b/source/blender/blenkernel/intern/tracking_test.cc
index a3845dcad8f..d85d71b7c86 100644
--- a/source/blender/blenkernel/intern/tracking_test.cc
+++ b/source/blender/blenkernel/intern/tracking_test.cc
@@ -5,7 +5,7 @@
#include "DNA_tracking_types.h"
#include "BKE_tracking.h"
-#include "BLI_float2.hh"
+#include "BLI_math_vec_types.hh"
namespace blender {
diff --git a/source/blender/blenkernel/intern/type_conversions.cc b/source/blender/blenkernel/intern/type_conversions.cc
index b23220286e6..cb05337ef2a 100644
--- a/source/blender/blenkernel/intern/type_conversions.cc
+++ b/source/blender/blenkernel/intern/type_conversions.cc
@@ -19,8 +19,7 @@
#include "FN_multi_function_builder.hh"
#include "BLI_color.hh"
-#include "BLI_float2.hh"
-#include "BLI_float3.hh"
+#include "BLI_math_vec_types.hh"
namespace blender::bke {
diff --git a/source/blender/blenkernel/intern/volume.cc b/source/blender/blenkernel/intern/volume.cc
index 4b71c98339b..c17706dc216 100644
--- a/source/blender/blenkernel/intern/volume.cc
+++ b/source/blender/blenkernel/intern/volume.cc
@@ -28,12 +28,12 @@
#include "BLI_compiler_compat.h"
#include "BLI_fileops.h"
-#include "BLI_float3.hh"
#include "BLI_float4x4.hh"
#include "BLI_ghash.h"
#include "BLI_index_range.hh"
#include "BLI_map.hh"
#include "BLI_math.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_path_util.h"
#include "BLI_string.h"
#include "BLI_string_ref.hh"
diff --git a/source/blender/blenkernel/intern/volume_render.cc b/source/blender/blenkernel/intern/volume_render.cc
index 6dc497bb616..c0a205b5673 100644
--- a/source/blender/blenkernel/intern/volume_render.cc
+++ b/source/blender/blenkernel/intern/volume_render.cc
@@ -21,8 +21,8 @@
#include "MEM_guardedalloc.h"
#include "BLI_array.hh"
-#include "BLI_float3.hh"
#include "BLI_math_matrix.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_math_vector.h"
#include "BLI_vector.hh"
diff --git a/source/blender/blenkernel/intern/volume_to_mesh.cc b/source/blender/blenkernel/intern/volume_to_mesh.cc
index 6e465b2fdf0..733549c0022 100644
--- a/source/blender/blenkernel/intern/volume_to_mesh.cc
+++ b/source/blender/blenkernel/intern/volume_to_mesh.cc
@@ -16,7 +16,7 @@
#include <vector>
-#include "BLI_float3.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_span.hh"
#include "BLI_utildefines.h"
diff --git a/source/blender/blenlib/BLI_array_store.h b/source/blender/blenlib/BLI_array_store.h
index 0be361d4ab9..68928f53e55 100644
--- a/source/blender/blenlib/BLI_array_store.h
+++ b/source/blender/blenlib/BLI_array_store.h
@@ -84,7 +84,7 @@ size_t BLI_array_store_calc_size_compacted_get(const BArrayStore *bs);
*/
BArrayState *BLI_array_store_state_add(BArrayStore *bs,
const void *data,
- const size_t data_len,
+ size_t data_len,
const BArrayState *state_reference);
/**
* Remove a state and free any unused #BChunk data.
diff --git a/source/blender/blenlib/BLI_array_utils.h b/source/blender/blenlib/BLI_array_utils.h
index 50fc2ce909b..202ae9a9786 100644
--- a/source/blender/blenlib/BLI_array_utils.h
+++ b/source/blender/blenlib/BLI_array_utils.h
@@ -52,7 +52,7 @@ void _bli_array_wrap(void *arr, uint arr_len, size_t arr_stride, int dir);
* Access via #BLI_array_wrap
*/
void _bli_array_permute(
- void *arr, uint arr_len, const size_t arr_stride, const uint *order, void *arr_temp);
+ void *arr, uint arr_len, size_t arr_stride, const uint *order, void *arr_temp);
#define BLI_array_permute(arr, arr_len, order) \
_bli_array_permute(arr, arr_len, sizeof(*(arr)), order, NULL)
#define BLI_array_permute_ex(arr, arr_len, order, arr_temp) \
@@ -152,7 +152,7 @@ bool _bli_array_is_zeroed(const void *arr, uint arr_len, size_t arr_stride);
*/
bool _bli_array_iter_spiral_square(const void *arr_v,
const int arr_shape[2],
- const size_t elem_size,
+ size_t elem_size,
const int center[2],
bool (*test_fn)(const void *arr_item, void *user_data),
void *user_data);
diff --git a/source/blender/blenlib/BLI_buffer.h b/source/blender/blenlib/BLI_buffer.h
index 7f577443cf7..e79d44fd934 100644
--- a/source/blender/blenlib/BLI_buffer.h
+++ b/source/blender/blenlib/BLI_buffer.h
@@ -74,7 +74,7 @@ enum {
/**
* \note Never decreases the amount of memory allocated.
*/
-void BLI_buffer_resize(BLI_Buffer *buffer, const size_t new_count);
+void BLI_buffer_resize(BLI_Buffer *buffer, size_t new_count);
/**
* Ensure size, throwing away old data, respecting #BLI_BUFFER_USE_CALLOC.
@@ -83,7 +83,7 @@ void BLI_buffer_resize(BLI_Buffer *buffer, const size_t new_count);
* - Ignored (malloc'd).
* - Cleared (when #BLI_BUFFER_USE_CALLOC is set).
*/
-void BLI_buffer_reinit(BLI_Buffer *buffer, const size_t new_count);
+void BLI_buffer_reinit(BLI_Buffer *buffer, size_t new_count);
/**
* Append an array of elements.
diff --git a/source/blender/blenlib/BLI_delaunay_2d.h b/source/blender/blenlib/BLI_delaunay_2d.h
index db0df95499f..1ee0be64cee 100644
--- a/source/blender/blenlib/BLI_delaunay_2d.h
+++ b/source/blender/blenlib/BLI_delaunay_2d.h
@@ -215,9 +215,9 @@ void BLI_delaunay_2d_cdt_free(CDT_result *result);
/* C++ Interface. */
# include "BLI_array.hh"
-# include "BLI_double2.hh"
# include "BLI_math_mpq.hh"
-# include "BLI_mpq2.hh"
+# include "BLI_math_vec_mpq_types.hh"
+# include "BLI_math_vec_types.hh"
# include "BLI_vector.hh"
namespace blender::meshintersect {
diff --git a/source/blender/blenlib/BLI_double2.hh b/source/blender/blenlib/BLI_double2.hh
deleted file mode 100644
index 0abff01ab2f..00000000000
--- a/source/blender/blenlib/BLI_double2.hh
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-/** \file
- * \ingroup bli
- */
-
-#include "BLI_double3.hh"
-
-namespace blender {
-
-struct double2 {
- double x, y;
-
- double2() = default;
-
- double2(const double *ptr) : x{ptr[0]}, y{ptr[1]}
- {
- }
-
- double2(double x, double y) : x(x), y(y)
- {
- }
-
- double2(const double3 &other) : x(other.x), y(other.y)
- {
- }
-
- operator double *()
- {
- return &x;
- }
-
- operator const double *() const
- {
- return &x;
- }
-
- double length() const
- {
- return len_v2_db(*this);
- }
-
- friend double2 operator+(const double2 &a, const double2 &b)
- {
- return {a.x + b.x, a.y + b.y};
- }
-
- friend double2 operator-(const double2 &a, const double2 &b)
- {
- return {a.x - b.x, a.y - b.y};
- }
-
- friend double2 operator*(const double2 &a, double b)
- {
- return {a.x * b, a.y * b};
- }
-
- friend double2 operator/(const double2 &a, double b)
- {
- BLI_assert(b != 0.0);
- return {a.x / b, a.y / b};
- }
-
- friend double2 operator*(double a, const double2 &b)
- {
- return b * a;
- }
-
- friend bool operator==(const double2 &a, const double2 &b)
- {
- return a.x == b.x && a.y == b.y;
- }
-
- friend bool operator!=(const double2 &a, const double2 &b)
- {
- return a.x != b.x || a.y != b.y;
- }
-
- friend std::ostream &operator<<(std::ostream &stream, const double2 &v)
- {
- stream << "(" << v.x << ", " << v.y << ")";
- return stream;
- }
-
- static double dot(const double2 &a, const double2 &b)
- {
- return a.x * b.x + a.y * b.y;
- }
-
- static double2 interpolate(const double2 &a, const double2 &b, double t)
- {
- return a * (1 - t) + b * t;
- }
-
- static double2 abs(const double2 &a)
- {
- return double2(fabs(a.x), fabs(a.y));
- }
-
- static double distance(const double2 &a, const double2 &b)
- {
- return (a - b).length();
- }
-
- static double distance_squared(const double2 &a, const double2 &b)
- {
- double2 diff = a - b;
- return double2::dot(diff, diff);
- }
-
- struct isect_result {
- enum {
- LINE_LINE_COLINEAR = -1,
- LINE_LINE_NONE = 0,
- LINE_LINE_EXACT = 1,
- LINE_LINE_CROSS = 2,
- } kind;
- double lambda;
- };
-
- static isect_result isect_seg_seg(const double2 &v1,
- const double2 &v2,
- const double2 &v3,
- const double2 &v4);
-};
-
-} // namespace blender
diff --git a/source/blender/blenlib/BLI_double3.hh b/source/blender/blenlib/BLI_double3.hh
deleted file mode 100644
index ab258c9121b..00000000000
--- a/source/blender/blenlib/BLI_double3.hh
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-/** \file
- * \ingroup bli
- */
-
-#include <iostream>
-
-#include "BLI_math_vector.h"
-#include "BLI_span.hh"
-
-namespace blender {
-
-struct double3 {
- double x, y, z;
-
- double3() = default;
-
- double3(const double *ptr) : x{ptr[0]}, y{ptr[1]}, z{ptr[2]}
- {
- }
-
- double3(const double (*ptr)[3]) : double3((const double *)ptr)
- {
- }
-
- explicit double3(double value) : x(value), y(value), z(value)
- {
- }
-
- explicit double3(int value) : x(value), y(value), z(value)
- {
- }
-
- double3(double x, double y, double z) : x{x}, y{y}, z{z}
- {
- }
-
- operator const double *() const
- {
- return &x;
- }
-
- operator double *()
- {
- return &x;
- }
-
- double normalize_and_get_length()
- {
- return normalize_v3_db(*this);
- }
-
- double3 normalized() const
- {
- double3 result;
- normalize_v3_v3_db(result, *this);
- return result;
- }
-
- double length() const
- {
- return len_v3_db(*this);
- }
-
- double length_squared() const
- {
- return len_squared_v3_db(*this);
- }
-
- void reflect(const double3 &normal)
- {
- *this = this->reflected(normal);
- }
-
- double3 reflected(const double3 &normal) const
- {
- double3 result;
- reflect_v3_v3v3_db(result, *this, normal);
- return result;
- }
-
- static double3 safe_divide(const double3 &a, const double3 &b)
- {
- double3 result;
- result.x = (b.x == 0.0) ? 0.0 : a.x / b.x;
- result.y = (b.y == 0.0) ? 0.0 : a.y / b.y;
- result.z = (b.z == 0.0) ? 0.0 : a.z / b.z;
- return result;
- }
-
- void invert()
- {
- x = -x;
- y = -y;
- z = -z;
- }
-
- friend double3 operator+(const double3 &a, const double3 &b)
- {
- return {a.x + b.x, a.y + b.y, a.z + b.z};
- }
-
- void operator+=(const double3 &b)
- {
- this->x += b.x;
- this->y += b.y;
- this->z += b.z;
- }
-
- friend double3 operator-(const double3 &a, const double3 &b)
- {
- return {a.x - b.x, a.y - b.y, a.z - b.z};
- }
-
- friend double3 operator-(const double3 &a)
- {
- return {-a.x, -a.y, -a.z};
- }
-
- void operator-=(const double3 &b)
- {
- this->x -= b.x;
- this->y -= b.y;
- this->z -= b.z;
- }
-
- void operator*=(const double &scalar)
- {
- this->x *= scalar;
- this->y *= scalar;
- this->z *= scalar;
- }
-
- void operator*=(const double3 &other)
- {
- this->x *= other.x;
- this->y *= other.y;
- this->z *= other.z;
- }
-
- friend double3 operator*(const double3 &a, const double3 &b)
- {
- return {a.x * b.x, a.y * b.y, a.z * b.z};
- }
-
- friend double3 operator*(const double3 &a, const double &b)
- {
- return {a.x * b, a.y * b, a.z * b};
- }
-
- friend double3 operator*(const double &a, const double3 &b)
- {
- return b * a;
- }
-
- friend double3 operator/(const double3 &a, const double &b)
- {
- BLI_assert(b != 0.0);
- return {a.x / b, a.y / b, a.z / b};
- }
-
- friend bool operator==(const double3 &a, const double3 &b)
- {
- return a.x == b.x && a.y == b.y && a.z == b.z;
- }
-
- friend bool operator!=(const double3 &a, const double3 &b)
- {
- return a.x != b.x || a.y != b.y || a.z != b.z;
- }
-
- friend std::ostream &operator<<(std::ostream &stream, const double3 &v)
- {
- stream << "(" << v.x << ", " << v.y << ", " << v.z << ")";
- return stream;
- }
-
- static double dot(const double3 &a, const double3 &b)
- {
- return a.x * b.x + a.y * b.y + a.z * b.z;
- }
-
- static double3 cross_high_precision(const double3 &a, const double3 &b)
- {
- double3 result;
- cross_v3_v3v3_db(result, a, b);
- return result;
- }
-
- static double3 project(const double3 &a, const double3 &b)
- {
- double3 result;
- project_v3_v3v3_db(result, a, b);
- return result;
- }
-
- static double distance(const double3 &a, const double3 &b)
- {
- return (a - b).length();
- }
-
- static double distance_squared(const double3 &a, const double3 &b)
- {
- double3 diff = a - b;
- return double3::dot(diff, diff);
- }
-
- static double3 interpolate(const double3 &a, const double3 &b, double t)
- {
- return a * (1 - t) + b * t;
- }
-
- static double3 abs(const double3 &a)
- {
- return double3(fabs(a.x), fabs(a.y), fabs(a.z));
- }
-
- static int dominant_axis(const double3 &a)
- {
- double x = (a.x >= 0) ? a.x : -a.x;
- double y = (a.y >= 0) ? a.y : -a.y;
- double z = (a.z >= 0) ? a.z : -a.z;
- return ((x > y) ? ((x > z) ? 0 : 2) : ((y > z) ? 1 : 2));
- }
-
- static double3 cross_poly(Span<double3> poly);
-};
-
-} // namespace blender
diff --git a/source/blender/blenlib/BLI_fileops.h b/source/blender/blenlib/BLI_fileops.h
index 0022823b3de..28cb5f6d84b 100644
--- a/source/blender/blenlib/BLI_fileops.h
+++ b/source/blender/blenlib/BLI_fileops.h
@@ -155,8 +155,7 @@ double BLI_dir_free_space(const char *dir) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(
*
* \note can return NULL when the size is not big enough
*/
-char *BLI_current_working_dir(char *dir, const size_t maxncpy) ATTR_WARN_UNUSED_RESULT
- ATTR_NONNULL();
+char *BLI_current_working_dir(char *dir, size_t maxncpy) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
eFileAttributes BLI_file_attributes(const char *path);
/** \} */
diff --git a/source/blender/blenlib/BLI_float2.hh b/source/blender/blenlib/BLI_float2.hh
deleted file mode 100644
index bb4229db86e..00000000000
--- a/source/blender/blenlib/BLI_float2.hh
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "BLI_float3.hh"
-
-namespace blender {
-
-struct float2 {
- float x, y;
-
- float2() = default;
-
- float2(const float *ptr) : x{ptr[0]}, y{ptr[1]}
- {
- }
-
- explicit float2(float value) : x(value), y(value)
- {
- }
-
- explicit float2(int value) : x(value), y(value)
- {
- }
-
- float2(float x, float y) : x(x), y(y)
- {
- }
-
- float2(const float3 &other) : x(other.x), y(other.y)
- {
- }
-
- operator float *()
- {
- return &x;
- }
-
- operator const float *() const
- {
- return &x;
- }
-
- float length() const
- {
- return len_v2(*this);
- }
-
- float length_squared() const
- {
- return len_squared_v2(*this);
- }
-
- bool is_zero() const
- {
- return this->x == 0.0f && this->y == 0.0f;
- }
-
- float2 &operator+=(const float2 &other)
- {
- x += other.x;
- y += other.y;
- return *this;
- }
-
- float2 &operator-=(const float2 &other)
- {
- x -= other.x;
- y -= other.y;
- return *this;
- }
-
- float2 &operator*=(float factor)
- {
- x *= factor;
- y *= factor;
- return *this;
- }
-
- float2 &operator/=(float divisor)
- {
- x /= divisor;
- y /= divisor;
- return *this;
- }
-
- uint64_t hash() const
- {
- uint64_t x1 = *reinterpret_cast<const uint32_t *>(&x);
- uint64_t x2 = *reinterpret_cast<const uint32_t *>(&y);
- return (x1 * 812519) ^ (x2 * 707951);
- }
-
- friend float2 operator+(const float2 &a, const float2 &b)
- {
- return {a.x + b.x, a.y + b.y};
- }
-
- friend float2 operator-(const float2 &a, const float2 &b)
- {
- return {a.x - b.x, a.y - b.y};
- }
-
- friend float2 operator-(const float2 &a, const float &b)
- {
- return {a.x - b, a.y - b};
- }
-
- friend float2 operator*(const float2 &a, float b)
- {
- return {a.x * b, a.y * b};
- }
-
- friend float2 operator/(const float2 &a, float b)
- {
- BLI_assert(b != 0.0f);
- return {a.x / b, a.y / b};
- }
-
- friend float2 operator*(float a, const float2 &b)
- {
- return b * a;
- }
-
- friend std::ostream &operator<<(std::ostream &stream, const float2 &v)
- {
- stream << "(" << v.x << ", " << v.y << ")";
- return stream;
- }
-
- static float2 safe_divide(const float2 &a, const float b)
- {
- return (b != 0.0f) ? a / b : float2(0.0f);
- }
-
- static float2 floor(const float2 &a)
- {
- return float2(floorf(a.x), floorf(a.y));
- }
-
- /**
- * Returns a normalized vector. The original vector is not changed.
- */
- float2 normalized() const
- {
- float2 result;
- normalize_v2_v2(result, *this);
- return result;
- }
-
- static float dot(const float2 &a, const float2 &b)
- {
- return a.x * b.x + a.y * b.y;
- }
-
- static float2 interpolate(const float2 &a, const float2 &b, float t)
- {
- return a * (1 - t) + b * t;
- }
-
- static float2 abs(const float2 &a)
- {
- return float2(fabsf(a.x), fabsf(a.y));
- }
-
- static float distance(const float2 &a, const float2 &b)
- {
- return (a - b).length();
- }
-
- static float distance_squared(const float2 &a, const float2 &b)
- {
- float2 diff = a - b;
- return float2::dot(diff, diff);
- }
-
- struct isect_result {
- enum {
- LINE_LINE_COLINEAR = -1,
- LINE_LINE_NONE = 0,
- LINE_LINE_EXACT = 1,
- LINE_LINE_CROSS = 2,
- } kind;
- float lambda;
- float mu;
- };
-
- static isect_result isect_seg_seg(const float2 &v1,
- const float2 &v2,
- const float2 &v3,
- const float2 &v4);
-
- friend bool operator==(const float2 &a, const float2 &b)
- {
- return a.x == b.x && a.y == b.y;
- }
-
- friend bool operator!=(const float2 &a, const float2 &b)
- {
- return !(a == b);
- }
-};
-
-} // namespace blender
diff --git a/source/blender/blenlib/BLI_float3.hh b/source/blender/blenlib/BLI_float3.hh
deleted file mode 100644
index 765f524fb31..00000000000
--- a/source/blender/blenlib/BLI_float3.hh
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include <iostream>
-
-#include "BLI_math_vector.h"
-
-namespace blender {
-
-struct float3 {
- float x, y, z;
-
- float3() = default;
-
- float3(const float *ptr) : x{ptr[0]}, y{ptr[1]}, z{ptr[2]}
- {
- }
-
- float3(const float (*ptr)[3]) : float3(static_cast<const float *>(ptr[0]))
- {
- }
-
- explicit float3(float value) : x(value), y(value), z(value)
- {
- }
-
- explicit float3(int value) : x(value), y(value), z(value)
- {
- }
-
- float3(float x, float y, float z) : x{x}, y{y}, z{z}
- {
- }
-
- operator const float *() const
- {
- return &x;
- }
-
- operator float *()
- {
- return &x;
- }
-
- friend float3 operator+(const float3 &a, const float3 &b)
- {
- return {a.x + b.x, a.y + b.y, a.z + b.z};
- }
-
- friend float3 operator+(const float3 &a, const float &b)
- {
- return {a.x + b, a.y + b, a.z + b};
- }
-
- float3 &operator+=(const float3 &b)
- {
- this->x += b.x;
- this->y += b.y;
- this->z += b.z;
- return *this;
- }
-
- friend float3 operator-(const float3 &a, const float3 &b)
- {
- return {a.x - b.x, a.y - b.y, a.z - b.z};
- }
-
- friend float3 operator-(const float3 &a)
- {
- return {-a.x, -a.y, -a.z};
- }
-
- friend float3 operator-(const float3 &a, const float &b)
- {
- return {a.x - b, a.y - b, a.z - b};
- }
-
- float3 &operator-=(const float3 &b)
- {
- this->x -= b.x;
- this->y -= b.y;
- this->z -= b.z;
- return *this;
- }
-
- float3 &operator*=(float scalar)
- {
- this->x *= scalar;
- this->y *= scalar;
- this->z *= scalar;
- return *this;
- }
-
- float3 &operator*=(const float3 &other)
- {
- this->x *= other.x;
- this->y *= other.y;
- this->z *= other.z;
- return *this;
- }
-
- friend float3 operator*(const float3 &a, const float3 &b)
- {
- return {a.x * b.x, a.y * b.y, a.z * b.z};
- }
-
- friend float3 operator*(const float3 &a, float b)
- {
- return {a.x * b, a.y * b, a.z * b};
- }
-
- friend float3 operator*(float a, const float3 &b)
- {
- return b * a;
- }
-
- friend float3 operator/(const float3 &a, float b)
- {
- BLI_assert(b != 0.0f);
- return {a.x / b, a.y / b, a.z / b};
- }
-
- friend std::ostream &operator<<(std::ostream &stream, const float3 &v)
- {
- stream << "(" << v.x << ", " << v.y << ", " << v.z << ")";
- return stream;
- }
-
- friend bool operator==(const float3 &a, const float3 &b)
- {
- return a.x == b.x && a.y == b.y && a.z == b.z;
- }
-
- friend bool operator!=(const float3 &a, const float3 &b)
- {
- return !(a == b);
- }
-
- float normalize_and_get_length()
- {
- return normalize_v3(*this);
- }
-
- /**
- * Normalizes the vector in place.
- */
- void normalize()
- {
- normalize_v3(*this);
- }
-
- /**
- * Returns a normalized vector. The original vector is not changed.
- */
- float3 normalized() const
- {
- float3 result;
- normalize_v3_v3(result, *this);
- return result;
- }
-
- float length() const
- {
- return len_v3(*this);
- }
-
- float length_squared() const
- {
- return len_squared_v3(*this);
- }
-
- bool is_zero() const
- {
- return this->x == 0.0f && this->y == 0.0f && this->z == 0.0f;
- }
-
- void reflect(const float3 &normal)
- {
- *this = this->reflected(normal);
- }
-
- float3 reflected(const float3 &normal) const
- {
- float3 result;
- reflect_v3_v3v3(result, *this, normal);
- return result;
- }
-
- static float3 refract(const float3 &incident, const float3 &normal, const float eta)
- {
- float3 result;
- float k = 1.0f - eta * eta * (1.0f - dot(normal, incident) * dot(normal, incident));
- if (k < 0.0f) {
- result = float3(0.0f);
- }
- else {
- result = eta * incident - (eta * dot(normal, incident) + sqrt(k)) * normal;
- }
- return result;
- }
-
- static float3 faceforward(const float3 &vector, const float3 &incident, const float3 &reference)
- {
- return dot(reference, incident) < 0.0f ? vector : -vector;
- }
-
- static float3 safe_divide(const float3 &a, const float3 &b)
- {
- float3 result;
- result.x = (b.x == 0.0f) ? 0.0f : a.x / b.x;
- result.y = (b.y == 0.0f) ? 0.0f : a.y / b.y;
- result.z = (b.z == 0.0f) ? 0.0f : a.z / b.z;
- return result;
- }
-
- static float3 min(const float3 &a, const float3 &b)
- {
- return {a.x < b.x ? a.x : b.x, a.y < b.y ? a.y : b.y, a.z < b.z ? a.z : b.z};
- }
-
- static float3 max(const float3 &a, const float3 &b)
- {
- return {a.x > b.x ? a.x : b.x, a.y > b.y ? a.y : b.y, a.z > b.z ? a.z : b.z};
- }
-
- static void min_max(const float3 &vector, float3 &min, float3 &max)
- {
- min = float3::min(vector, min);
- max = float3::max(vector, max);
- }
-
- static float3 safe_divide(const float3 &a, const float b)
- {
- return (b != 0.0f) ? a / b : float3(0.0f);
- }
-
- static float3 floor(const float3 &a)
- {
- return float3(floorf(a.x), floorf(a.y), floorf(a.z));
- }
-
- void invert()
- {
- x = -x;
- y = -y;
- z = -z;
- }
-
- uint64_t hash() const
- {
- uint64_t x1 = *reinterpret_cast<const uint32_t *>(&x);
- uint64_t x2 = *reinterpret_cast<const uint32_t *>(&y);
- uint64_t x3 = *reinterpret_cast<const uint32_t *>(&z);
- return (x1 * 435109) ^ (x2 * 380867) ^ (x3 * 1059217);
- }
-
- static float dot(const float3 &a, const float3 &b)
- {
- return a.x * b.x + a.y * b.y + a.z * b.z;
- }
-
- static float3 cross_high_precision(const float3 &a, const float3 &b)
- {
- float3 result;
- cross_v3_v3v3_hi_prec(result, a, b);
- return result;
- }
-
- static float3 cross(const float3 &a, const float3 &b)
- {
- float3 result;
- cross_v3_v3v3(result, a, b);
- return result;
- }
-
- static float3 project(const float3 &a, const float3 &b)
- {
- float3 result;
- project_v3_v3v3(result, a, b);
- return result;
- }
-
- static float distance(const float3 &a, const float3 &b)
- {
- return (a - b).length();
- }
-
- static float distance_squared(const float3 &a, const float3 &b)
- {
- float3 diff = a - b;
- return float3::dot(diff, diff);
- }
-
- static float3 interpolate(const float3 &a, const float3 &b, float t)
- {
- return a * (1 - t) + b * t;
- }
-
- static float3 abs(const float3 &a)
- {
- return float3(fabsf(a.x), fabsf(a.y), fabsf(a.z));
- }
-};
-
-} // namespace blender
diff --git a/source/blender/blenlib/BLI_float4.hh b/source/blender/blenlib/BLI_float4.hh
deleted file mode 100644
index 5b487f6d029..00000000000
--- a/source/blender/blenlib/BLI_float4.hh
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-namespace blender {
-
-struct float4 {
- float x, y, z, w;
-
- float4() = default;
-
- float4(const float *ptr) : x{ptr[0]}, y{ptr[1]}, z{ptr[2]}, w{ptr[3]}
- {
- }
-
- explicit float4(float value) : x(value), y(value), z(value), w(value)
- {
- }
-
- explicit float4(int value) : x(value), y(value), z(value), w(value)
- {
- }
-
- float4(float x, float y, float z, float w) : x(x), y(y), z(z), w(w)
- {
- }
-
- operator float *()
- {
- return &x;
- }
-
- friend float4 operator+(const float4 &a, const float &b)
- {
- return {a.x + b, a.y + b, a.z + b, a.w + b};
- }
-
- operator const float *() const
- {
- return &x;
- }
-
- float4 &operator+=(const float4 &other)
- {
- x += other.x;
- y += other.y;
- z += other.z;
- w += other.w;
- return *this;
- }
-
- friend float4 operator-(const float4 &a, const float4 &b)
- {
- return {a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w};
- }
-
- friend float4 operator-(const float4 &a, const float &b)
- {
- return {a.x - b, a.y - b, a.z - b, a.w - b};
- }
-
- friend float4 operator+(const float4 &a, const float4 &b)
- {
- return {a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w};
- }
-
- friend float4 operator/(const float4 &a, float f)
- {
- BLI_assert(f != 0.0f);
- return a * (1.0f / f);
- }
-
- float4 &operator*=(float factor)
- {
- x *= factor;
- y *= factor;
- z *= factor;
- w *= factor;
- return *this;
- }
-
- friend float4 operator*(const float4 &a, float b)
- {
- return {a.x * b, a.y * b, a.z * b, a.w * b};
- }
-
- friend float4 operator*(float a, const float4 &b)
- {
- return b * a;
- }
-
- float length() const
- {
- return len_v4(*this);
- }
-
- static float distance(const float4 &a, const float4 &b)
- {
- return (a - b).length();
- }
-
- static float4 safe_divide(const float4 &a, const float b)
- {
- return (b != 0.0f) ? a / b : float4(0.0f);
- }
-
- static float4 interpolate(const float4 &a, const float4 &b, float t)
- {
- return a * (1 - t) + b * t;
- }
-
- static float4 floor(const float4 &a)
- {
- return float4(floorf(a.x), floorf(a.y), floorf(a.z), floorf(a.w));
- }
-
- static float4 normalize(const float4 &a)
- {
- const float t = len_v4(a);
- return (t != 0.0f) ? a / t : float4(0.0f);
- }
-};
-
-} // namespace blender
diff --git a/source/blender/blenlib/BLI_float4x4.hh b/source/blender/blenlib/BLI_float4x4.hh
index b7f839f4ddf..81c969d02d0 100644
--- a/source/blender/blenlib/BLI_float4x4.hh
+++ b/source/blender/blenlib/BLI_float4x4.hh
@@ -16,8 +16,9 @@
#pragma once
-#include "BLI_float3.hh"
#include "BLI_math_matrix.h"
+#include "BLI_math_vec_types.hh"
+#include "BLI_math_vector.h"
namespace blender {
@@ -63,7 +64,7 @@ struct float4x4 {
* Without the negation, the result would be a so called improper rotation. That means it
* contains a reflection. Such an improper rotation matrix could not be converted to another
* representation of a rotation such as euler angles. */
- const float3 cross = -float3::cross(forward, up);
+ const float3 cross = -math::cross(forward, up);
float4x4 matrix;
matrix.values[0][0] = forward.x;
diff --git a/source/blender/blenlib/BLI_gsqueue.h b/source/blender/blenlib/BLI_gsqueue.h
index 8b32c09b56b..a35c743c80b 100644
--- a/source/blender/blenlib/BLI_gsqueue.h
+++ b/source/blender/blenlib/BLI_gsqueue.h
@@ -31,7 +31,7 @@ extern "C" {
typedef struct _GSQueue GSQueue;
-GSQueue *BLI_gsqueue_new(const size_t elem_size);
+GSQueue *BLI_gsqueue_new(size_t elem_size);
/**
* Returns true if the queue is empty, false otherwise.
*/
diff --git a/source/blender/blenlib/BLI_listbase.h b/source/blender/blenlib/BLI_listbase.h
index 64852b95ae4..f73d1f22502 100644
--- a/source/blender/blenlib/BLI_listbase.h
+++ b/source/blender/blenlib/BLI_listbase.h
@@ -85,7 +85,7 @@ void *BLI_findptr(const struct ListBase *listbase,
*/
void *BLI_listbase_bytes_find(const ListBase *listbase,
const void *bytes,
- const size_t bytes_size,
+ size_t bytes_size,
int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1, 2);
/**
* Find the first item in the list that matches the given string, or the given index as fallback.
@@ -96,7 +96,7 @@ void *BLI_listbase_bytes_find(const ListBase *listbase,
*/
void *BLI_listbase_string_or_index_find(const struct ListBase *listbase,
const char *string,
- const size_t string_offset,
+ size_t string_offset,
int index) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
/* Find backwards. */
@@ -133,7 +133,7 @@ void *BLI_rfindptr(const struct ListBase *listbase,
*/
void *BLI_listbase_bytes_rfind(const ListBase *listbase,
const void *bytes,
- const size_t bytes_size,
+ size_t bytes_size,
int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1, 2);
/**
diff --git a/source/blender/blenlib/BLI_math_boolean.hh b/source/blender/blenlib/BLI_math_boolean.hh
index 20fd00b2aa4..8cf93c82dec 100644
--- a/source/blender/blenlib/BLI_math_boolean.hh
+++ b/source/blender/blenlib/BLI_math_boolean.hh
@@ -21,13 +21,11 @@
* \brief Math vector functions needed specifically for mesh intersect and boolean.
*/
-#include "BLI_double2.hh"
-#include "BLI_double3.hh"
+#include "BLI_math_vec_types.hh"
#ifdef WITH_GMP
# include "BLI_math_mpq.hh"
-# include "BLI_mpq2.hh"
-# include "BLI_mpq3.hh"
+# include "BLI_math_vec_mpq_types.hh"
#endif
namespace blender {
diff --git a/source/blender/blenlib/BLI_math_vec_mpq_types.hh b/source/blender/blenlib/BLI_math_vec_mpq_types.hh
new file mode 100644
index 00000000000..392c647fe0d
--- /dev/null
+++ b/source/blender/blenlib/BLI_math_vec_mpq_types.hh
@@ -0,0 +1,92 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#pragma once
+
+/** \file
+ * \ingroup bli
+ */
+
+#include "BLI_math_vec_types.hh"
+
+#ifdef WITH_GMP
+
+# include "BLI_math_mpq.hh"
+
+namespace blender {
+
+using mpq2 = vec_base<mpq_class, 2>;
+using mpq3 = vec_base<mpq_class, 3>;
+
+namespace math {
+
+uint64_t hash_mpq_class(const mpq_class &value);
+
+template<> inline uint64_t vector_hash(const mpq2 &vec)
+{
+ return hash_mpq_class(vec.x) ^ (hash_mpq_class(vec.y) * 33);
+}
+
+template<> inline uint64_t vector_hash(const mpq3 &vec)
+{
+ return hash_mpq_class(vec.x) ^ (hash_mpq_class(vec.y) * 33) ^ (hash_mpq_class(vec.z) * 33 * 37);
+}
+
+/**
+ * Cannot do this exactly in rational arithmetic!
+ * Approximate by going in and out of doubles.
+ */
+template<> inline mpq_class length(const mpq2 &a)
+{
+ return mpq_class(sqrt(length_squared(a).get_d()));
+}
+
+/**
+ * Cannot do this exactly in rational arithmetic!
+ * Approximate by going in and out of doubles.
+ */
+template<> inline mpq_class length(const mpq3 &a)
+{
+ return mpq_class(sqrt(length_squared(a).get_d()));
+}
+
+/**
+ * The buffer avoids allocating a temporary variable.
+ */
+inline mpq_class distance_squared_with_buffer(const mpq3 &a, const mpq3 &b, mpq3 &buffer)
+{
+ buffer = a;
+ buffer -= b;
+ return dot(buffer, buffer);
+}
+
+/**
+ * The buffer avoids allocating a temporary variable.
+ */
+inline mpq_class dot_with_buffer(const mpq3 &a, const mpq3 &b, mpq3 &buffer)
+{
+ buffer = a;
+ buffer *= b;
+ buffer.x += buffer.y;
+ buffer.x += buffer.z;
+ return buffer.x;
+}
+
+} // namespace math
+
+} // namespace blender
+
+#endif /* WITH_GMP */
diff --git a/source/blender/blenlib/BLI_math_vec_types.hh b/source/blender/blenlib/BLI_math_vec_types.hh
new file mode 100644
index 00000000000..52aacd294e4
--- /dev/null
+++ b/source/blender/blenlib/BLI_math_vec_types.hh
@@ -0,0 +1,566 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Copyright 2022, Blender Foundation.
+ */
+
+#pragma once
+
+/** \file
+ * \ingroup bli
+ */
+
+#include <array>
+#include <cmath>
+#include <iostream>
+#include <type_traits>
+
+#include "BLI_math_vector.hh"
+#include "BLI_utildefines.h"
+
+namespace blender {
+
+/* clang-format off */
+template<typename T>
+using as_uint_type = std::conditional_t<sizeof(T) == sizeof(uint8_t), uint8_t,
+ std::conditional_t<sizeof(T) == sizeof(uint16_t), uint16_t,
+ std::conditional_t<sizeof(T) == sizeof(uint32_t), uint32_t,
+ std::conditional_t<sizeof(T) == sizeof(uint64_t), uint64_t, void>>>>;
+/* clang-format on */
+
+template<typename T, int Size> struct vec_struct_base {
+ std::array<T, Size> values;
+};
+
+template<typename T> struct vec_struct_base<T, 2> {
+ T x, y;
+};
+
+template<typename T> struct vec_struct_base<T, 3> {
+ T x, y, z;
+};
+
+template<typename T> struct vec_struct_base<T, 4> {
+ T x, y, z, w;
+};
+
+template<typename T, int Size> struct vec_base : public vec_struct_base<T, Size> {
+
+ static constexpr int type_length = Size;
+
+ using base_type = T;
+ using uint_type = vec_base<as_uint_type<T>, Size>;
+
+ vec_base() = default;
+
+ explicit vec_base(uint value)
+ {
+ for (int i = 0; i < Size; i++) {
+ (*this)[i] = static_cast<T>(value);
+ }
+ }
+
+ explicit vec_base(int value)
+ {
+ for (int i = 0; i < Size; i++) {
+ (*this)[i] = static_cast<T>(value);
+ }
+ }
+
+ explicit vec_base(float value)
+ {
+ for (int i = 0; i < Size; i++) {
+ (*this)[i] = static_cast<T>(value);
+ }
+ }
+
+ explicit vec_base(double value)
+ {
+ for (int i = 0; i < Size; i++) {
+ (*this)[i] = static_cast<T>(value);
+ }
+ }
+
+/* Workaround issue with template BLI_ENABLE_IF((Size == 2)) not working. */
+#define BLI_ENABLE_IF_VEC(_size, _test) int S = _size, BLI_ENABLE_IF((S _test))
+
+ template<BLI_ENABLE_IF_VEC(Size, == 2)> vec_base(T _x, T _y)
+ {
+ (*this)[0] = _x;
+ (*this)[1] = _y;
+ }
+
+ template<BLI_ENABLE_IF_VEC(Size, == 3)> vec_base(T _x, T _y, T _z)
+ {
+ (*this)[0] = _x;
+ (*this)[1] = _y;
+ (*this)[2] = _z;
+ }
+
+ template<BLI_ENABLE_IF_VEC(Size, == 4)> vec_base(T _x, T _y, T _z, T _w)
+ {
+ (*this)[0] = _x;
+ (*this)[1] = _y;
+ (*this)[2] = _z;
+ (*this)[3] = _w;
+ }
+
+ /** Mixed scalar-vector constructors. */
+
+ template<typename U, BLI_ENABLE_IF_VEC(Size, == 3)>
+ constexpr vec_base(const vec_base<U, 2> &xy, T z)
+ : vec_base(static_cast<T>(xy.x), static_cast<T>(xy.y), z)
+ {
+ }
+
+ template<typename U, BLI_ENABLE_IF_VEC(Size, == 3)>
+ constexpr vec_base(T x, const vec_base<U, 2> &yz)
+ : vec_base(x, static_cast<T>(yz.x), static_cast<T>(yz.y))
+ {
+ }
+
+ template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)>
+ vec_base(vec_base<U, 3> xyz, T w)
+ : vec_base(
+ static_cast<T>(xyz.x), static_cast<T>(xyz.y), static_cast<T>(xyz.z), static_cast<T>(w))
+ {
+ }
+
+ template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)>
+ vec_base(T x, vec_base<U, 3> yzw)
+ : vec_base(
+ static_cast<T>(x), static_cast<T>(yzw.x), static_cast<T>(yzw.y), static_cast<T>(yzw.z))
+ {
+ }
+
+ template<typename U, typename V, BLI_ENABLE_IF_VEC(Size, == 4)>
+ vec_base(vec_base<U, 2> xy, vec_base<V, 2> zw)
+ : vec_base(
+ static_cast<T>(xy.x), static_cast<T>(xy.y), static_cast<T>(zw.x), static_cast<T>(zw.y))
+ {
+ }
+
+ template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)>
+ vec_base(vec_base<U, 2> xy, T z, T w)
+ : vec_base(static_cast<T>(xy.x), static_cast<T>(xy.y), static_cast<T>(z), static_cast<T>(w))
+ {
+ }
+
+ template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)>
+ vec_base(T x, vec_base<U, 2> yz, T w)
+ : vec_base(static_cast<T>(x), static_cast<T>(yz.x), static_cast<T>(yz.y), static_cast<T>(w))
+ {
+ }
+
+ template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)>
+ vec_base(T x, T y, vec_base<U, 2> zw)
+ : vec_base(static_cast<T>(x), static_cast<T>(y), static_cast<T>(zw.x), static_cast<T>(zw.y))
+ {
+ }
+
+ /** Masking. */
+
+ template<typename U, int OtherSize, BLI_ENABLE_IF(OtherSize > Size)>
+ explicit vec_base(const vec_base<U, OtherSize> &other)
+ {
+ for (int i = 0; i < Size; i++) {
+ (*this)[i] = static_cast<T>(other[i]);
+ }
+ }
+
+#undef BLI_ENABLE_IF_VEC
+
+ /** Conversion from pointers (from C-style vectors). */
+
+ vec_base(const T *ptr)
+ {
+ for (int i = 0; i < Size; i++) {
+ (*this)[i] = ptr[i];
+ }
+ }
+
+ vec_base(const T (*ptr)[Size]) : vec_base(static_cast<const T *>(ptr[0]))
+ {
+ }
+
+ /** Conversion from other vector types. */
+
+ template<typename U> explicit vec_base(const vec_base<U, Size> &vec)
+ {
+ for (int i = 0; i < Size; i++) {
+ (*this)[i] = static_cast<T>(vec[i]);
+ }
+ }
+
+ /** C-style pointer dereference. */
+
+ operator const T *() const
+ {
+ return reinterpret_cast<const T *>(this);
+ }
+
+ operator T *()
+ {
+ return reinterpret_cast<T *>(this);
+ }
+
+ /** Array access. */
+
+ const T &operator[](int index) const
+ {
+ BLI_assert(index >= 0);
+ BLI_assert(index < Size);
+ return reinterpret_cast<const T *>(this)[index];
+ }
+
+ T &operator[](int index)
+ {
+ BLI_assert(index >= 0);
+ BLI_assert(index < Size);
+ return reinterpret_cast<T *>(this)[index];
+ }
+
+ /** Internal Operators Macro. */
+
+#define BLI_INT_OP(_T) template<typename U = _T, BLI_ENABLE_IF((std::is_integral_v<U>))>
+
+#define BLI_VEC_OP_IMPL(_result, _i, _op) \
+ vec_base _result; \
+ for (int _i = 0; _i < Size; _i++) { \
+ _op; \
+ } \
+ return _result;
+
+#define BLI_VEC_OP_IMPL_SELF(_i, _op) \
+ for (int _i = 0; _i < Size; _i++) { \
+ _op; \
+ } \
+ return *this;
+
+ /** Arithmetic operators. */
+
+ friend vec_base operator+(const vec_base &a, const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] + b[i]);
+ }
+
+ friend vec_base operator+(const vec_base &a, const T &b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] + b);
+ }
+
+ friend vec_base operator+(const T &a, const vec_base &b)
+ {
+ return b + a;
+ }
+
+ vec_base &operator+=(const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] += b[i]);
+ }
+
+ vec_base &operator+=(const T &b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] += b);
+ }
+
+ friend vec_base operator-(const vec_base &a)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = -a[i]);
+ }
+
+ friend vec_base operator-(const vec_base &a, const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] - b[i]);
+ }
+
+ friend vec_base operator-(const vec_base &a, const T &b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] - b);
+ }
+
+ friend vec_base operator-(const T &a, const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a - b[i]);
+ }
+
+ vec_base &operator-=(const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] -= b[i]);
+ }
+
+ vec_base &operator-=(const T &b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] -= b);
+ }
+
+ friend vec_base operator*(const vec_base &a, const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] * b[i]);
+ }
+
+ friend vec_base operator*(const vec_base &a, T b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] * b);
+ }
+
+ friend vec_base operator*(T a, const vec_base &b)
+ {
+ return b * a;
+ }
+
+ vec_base &operator*=(T b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] *= b);
+ }
+
+ vec_base &operator*=(const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] *= b[i]);
+ }
+
+ friend vec_base operator/(const vec_base &a, const vec_base &b)
+ {
+ BLI_assert(!math::is_any_zero(b));
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] / b[i]);
+ }
+
+ friend vec_base operator/(const vec_base &a, T b)
+ {
+ BLI_assert(b != T(0));
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] / b);
+ }
+
+ friend vec_base operator/(T a, const vec_base &b)
+ {
+ BLI_assert(!math::is_any_zero(b));
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a / b[i]);
+ }
+
+ vec_base &operator/=(T b)
+ {
+ BLI_assert(b != T(0));
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] /= b);
+ }
+
+ vec_base &operator/=(const vec_base &b)
+ {
+ BLI_assert(!math::is_any_zero(b));
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] /= b[i]);
+ }
+
+ /** Binary operators. */
+
+ BLI_INT_OP(T) friend vec_base operator&(const vec_base &a, const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] & b[i]);
+ }
+
+ BLI_INT_OP(T) friend vec_base operator&(const vec_base &a, T b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] & b);
+ }
+
+ BLI_INT_OP(T) friend vec_base operator&(T a, const vec_base &b)
+ {
+ return b & a;
+ }
+
+ BLI_INT_OP(T) vec_base &operator&=(T b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] &= b);
+ }
+
+ BLI_INT_OP(T) vec_base &operator&=(const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] &= b[i]);
+ }
+
+ BLI_INT_OP(T) friend vec_base operator|(const vec_base &a, const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] | b[i]);
+ }
+
+ BLI_INT_OP(T) friend vec_base operator|(const vec_base &a, T b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] | b);
+ }
+
+ BLI_INT_OP(T) friend vec_base operator|(T a, const vec_base &b)
+ {
+ return b | a;
+ }
+
+ BLI_INT_OP(T) vec_base &operator|=(T b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] |= b);
+ }
+
+ BLI_INT_OP(T) vec_base &operator|=(const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] |= b[i]);
+ }
+
+ BLI_INT_OP(T) friend vec_base operator^(const vec_base &a, const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] ^ b[i]);
+ }
+
+ BLI_INT_OP(T) friend vec_base operator^(const vec_base &a, T b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] ^ b);
+ }
+
+ BLI_INT_OP(T) friend vec_base operator^(T a, const vec_base &b)
+ {
+ return b ^ a;
+ }
+
+ BLI_INT_OP(T) vec_base &operator^=(T b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] ^= b);
+ }
+
+ BLI_INT_OP(T) vec_base &operator^=(const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] ^= b[i]);
+ }
+
+ BLI_INT_OP(T) friend vec_base operator~(const vec_base &a)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = ~a[i]);
+ }
+
+ /** Bit-shift operators. */
+
+ BLI_INT_OP(T) friend vec_base operator<<(const vec_base &a, const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] << b[i]);
+ }
+
+ BLI_INT_OP(T) friend vec_base operator<<(const vec_base &a, T b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] << b);
+ }
+
+ BLI_INT_OP(T) vec_base &operator<<=(T b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] <<= b);
+ }
+
+ BLI_INT_OP(T) vec_base &operator<<=(const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] <<= b[i]);
+ }
+
+ BLI_INT_OP(T) friend vec_base operator>>(const vec_base &a, const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] >> b[i]);
+ }
+
+ BLI_INT_OP(T) friend vec_base operator>>(const vec_base &a, T b)
+ {
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] >> b);
+ }
+
+ BLI_INT_OP(T) vec_base &operator>>=(T b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] >>= b);
+ }
+
+ BLI_INT_OP(T) vec_base &operator>>=(const vec_base &b)
+ {
+ BLI_VEC_OP_IMPL_SELF(i, (*this)[i] >>= b[i]);
+ }
+
+ /** Modulo operators. */
+
+ BLI_INT_OP(T) friend vec_base operator%(const vec_base &a, const vec_base &b)
+ {
+ BLI_assert(!math::is_any_zero(b));
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] % b[i]);
+ }
+
+ BLI_INT_OP(T) friend vec_base operator%(const vec_base &a, T b)
+ {
+ BLI_assert(b != 0);
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] % b);
+ }
+
+ BLI_INT_OP(T) friend vec_base operator%(T a, const vec_base &b)
+ {
+ BLI_assert(!math::is_any_zero(b));
+ BLI_VEC_OP_IMPL(ret, i, ret[i] = a % b[i]);
+ }
+
+#undef BLI_INT_OP
+#undef BLI_VEC_OP_IMPL
+#undef BLI_VEC_OP_IMPL_SELF
+
+ /** Compare. */
+
+ friend bool operator==(const vec_base &a, const vec_base &b)
+ {
+ for (int i = 0; i < Size; i++) {
+ if (a[i] != b[i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ friend bool operator!=(const vec_base &a, const vec_base &b)
+ {
+ return !(a == b);
+ }
+
+ /** Misc. */
+
+ uint64_t hash() const
+ {
+ return math::vector_hash(*this);
+ }
+
+ friend std::ostream &operator<<(std::ostream &stream, const vec_base &v)
+ {
+ stream << "(";
+ for (int i = 0; i < Size; i++) {
+ stream << v[i];
+ if (i != Size - 1) {
+ stream << ", ";
+ }
+ }
+ stream << ")";
+ return stream;
+ }
+};
+
+using int2 = vec_base<int32_t, 2>;
+using int3 = vec_base<int32_t, 3>;
+using int4 = vec_base<int32_t, 4>;
+
+using uint2 = vec_base<uint32_t, 2>;
+using uint3 = vec_base<uint32_t, 3>;
+using uint4 = vec_base<uint32_t, 4>;
+
+using float2 = vec_base<float, 2>;
+using float3 = vec_base<float, 3>;
+using float4 = vec_base<float, 4>;
+
+using double2 = vec_base<double, 2>;
+using double3 = vec_base<double, 3>;
+using double4 = vec_base<double, 4>;
+
+} // namespace blender
diff --git a/source/blender/blenlib/BLI_math_vector.hh b/source/blender/blenlib/BLI_math_vector.hh
new file mode 100644
index 00000000000..e7d765df842
--- /dev/null
+++ b/source/blender/blenlib/BLI_math_vector.hh
@@ -0,0 +1,399 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Copyright 2022, Blender Foundation.
+ */
+
+#pragma once
+
+/** \file
+ * \ingroup bli
+ */
+
+#include <cmath>
+#include <type_traits>
+
+#include "BLI_math_base_safe.h"
+#include "BLI_math_vector.h"
+#include "BLI_span.hh"
+#include "BLI_utildefines.h"
+
+#ifdef WITH_GMP
+# include "BLI_math_mpq.hh"
+#endif
+
+namespace blender::math {
+
+#ifndef NDEBUG
+# define BLI_ASSERT_UNIT(v) \
+ { \
+ const float _test_unit = length_squared(v); \
+ BLI_assert(!(std::abs(_test_unit - 1.0f) >= BLI_ASSERT_UNIT_EPSILON) || \
+ !(std::abs(_test_unit) >= BLI_ASSERT_UNIT_EPSILON)); \
+ } \
+ (void)0
+#else
+# define BLI_ASSERT_UNIT(v) (void)(v)
+#endif
+
+#define bT typename T::base_type
+
+#ifdef WITH_GMP
+# define BLI_ENABLE_IF_FLT_VEC(T) \
+ BLI_ENABLE_IF((std::is_floating_point_v<typename T::base_type> || \
+ std::is_same_v<typename T::base_type, mpq_class>))
+#else
+# define BLI_ENABLE_IF_FLT_VEC(T) BLI_ENABLE_IF((std::is_floating_point_v<typename T::base_type>))
+#endif
+
+#define BLI_ENABLE_IF_INT_VEC(T) BLI_ENABLE_IF((std::is_integral_v<typename T::base_type>))
+
+template<typename T> inline bool is_zero(const T &a)
+{
+ for (int i = 0; i < T::type_length; i++) {
+ if (a[i] != bT(0)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+template<typename T> inline bool is_any_zero(const T &a)
+{
+ for (int i = 0; i < T::type_length; i++) {
+ if (a[i] == bT(0)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+template<typename T> inline T abs(const T &a)
+{
+ T result;
+ for (int i = 0; i < T::type_length; i++) {
+ result[i] = a[i] >= 0 ? a[i] : -a[i];
+ }
+ return result;
+}
+
+template<typename T> inline T min(const T &a, const T &b)
+{
+ T result;
+ for (int i = 0; i < T::type_length; i++) {
+ result[i] = a[i] < b[i] ? a[i] : b[i];
+ }
+ return result;
+}
+
+template<typename T> inline T max(const T &a, const T &b)
+{
+ T result;
+ for (int i = 0; i < T::type_length; i++) {
+ result[i] = a[i] > b[i] ? a[i] : b[i];
+ }
+ return result;
+}
+
+template<typename T> inline T clamp(const T &a, const T &min_v, const T &max_v)
+{
+ T result = a;
+ for (int i = 0; i < T::type_length; i++) {
+ CLAMP(result[i], min_v[i], max_v[i]);
+ }
+ return result;
+}
+
+template<typename T> inline T clamp(const T &a, const bT &min_v, const bT &max_v)
+{
+ T result = a;
+ for (int i = 0; i < T::type_length; i++) {
+ CLAMP(result[i], min_v, max_v);
+ }
+ return result;
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T mod(const T &a, const T &b)
+{
+ T result;
+ for (int i = 0; i < T::type_length; i++) {
+ BLI_assert(b[i] != 0);
+ result[i] = std::fmod(a[i], b[i]);
+ }
+ return result;
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T mod(const T &a, bT b)
+{
+ BLI_assert(b != 0);
+ T result;
+ for (int i = 0; i < T::type_length; i++) {
+ result[i] = std::fmod(a[i], b);
+ }
+ return result;
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T safe_mod(const T &a, const T &b)
+{
+ T result;
+ for (int i = 0; i < T::type_length; i++) {
+ result[i] = (b[i] != 0) ? std::fmod(a[i], b[i]) : 0;
+ }
+ return result;
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T safe_mod(const T &a, bT b)
+{
+ if (b == 0) {
+ return T(0.0f);
+ }
+ T result;
+ for (int i = 0; i < T::type_length; i++) {
+ result[i] = std::fmod(a[i], b);
+ }
+ return result;
+}
+
+template<typename T> inline void min_max(const T &vector, T &min_vec, T &max_vec)
+{
+ min_vec = min(vector, min_vec);
+ max_vec = max(vector, max_vec);
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T safe_divide(const T &a, const T &b)
+{
+ T result;
+ for (int i = 0; i < T::type_length; i++) {
+ result[i] = (b[i] == 0) ? 0 : a[i] / b[i];
+ }
+ return result;
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T safe_divide(const T &a, const bT b)
+{
+ return (b != 0) ? a / b : T(0.0f);
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T floor(const T &a)
+{
+ T result;
+ for (int i = 0; i < T::type_length; i++) {
+ result[i] = std::floor(a[i]);
+ }
+ return result;
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T ceil(const T &a)
+{
+ T result;
+ for (int i = 0; i < T::type_length; i++) {
+ result[i] = std::ceil(a[i]);
+ }
+ return result;
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T fract(const T &a)
+{
+ T result;
+ for (int i = 0; i < T::type_length; i++) {
+ result[i] = a[i] - std::floor(a[i]);
+ }
+ return result;
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline bT dot(const T &a, const T &b)
+{
+ bT result = a[0] * b[0];
+ for (int i = 1; i < T::type_length; i++) {
+ result += a[i] * b[i];
+ }
+ return result;
+}
+
+template<typename T> inline bT length_manhattan(const T &a)
+{
+ bT result = std::abs(a[0]);
+ for (int i = 1; i < T::type_length; i++) {
+ result += std::abs(a[i]);
+ }
+ return result;
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline bT length_squared(const T &a)
+{
+ return dot(a, a);
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline bT length(const T &a)
+{
+ return std::sqrt(length_squared(a));
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline bT distance_manhattan(const T &a, const T &b)
+{
+ return length_manhattan(a - b);
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline bT distance_squared(const T &a, const T &b)
+{
+ return length_squared(a - b);
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline bT distance(const T &a, const T &b)
+{
+ return length(a - b);
+}
+
+template<typename T> uint64_t vector_hash(const T &vec)
+{
+ BLI_STATIC_ASSERT(T::type_length <= 4, "Longer types need to implement vector_hash themself.");
+ const typename T::uint_type &uvec = *reinterpret_cast<const typename T::uint_type *>(&vec);
+ uint64_t result;
+ result = uvec[0] * uint64_t(435109);
+ if constexpr (T::type_length > 1) {
+ result ^= uvec[1] * uint64_t(380867);
+ }
+ if constexpr (T::type_length > 2) {
+ result ^= uvec[2] * uint64_t(1059217);
+ }
+ if constexpr (T::type_length > 3) {
+ result ^= uvec[3] * uint64_t(2002613);
+ }
+ return result;
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T reflect(const T &incident, const T &normal)
+{
+ BLI_ASSERT_UNIT(normal);
+ return incident - 2.0 * dot(normal, incident) * normal;
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)>
+inline T refract(const T &incident, const T &normal, const bT eta)
+{
+ float dot_ni = dot(normal, incident);
+ float k = 1.0f - eta * eta * (1.0f - dot_ni * dot_ni);
+ if (k < 0.0f) {
+ return T(0.0f);
+ }
+ return eta * incident - (eta * dot_ni + sqrt(k)) * normal;
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T project(const T &p, const T &v_proj)
+{
+ if (UNLIKELY(is_zero(v_proj))) {
+ return T(0.0f);
+ }
+ return v_proj * (dot(p, v_proj) / dot(v_proj, v_proj));
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)>
+inline T normalize_and_get_length(const T &v, bT &out_length)
+{
+ out_length = length_squared(v);
+ /* A larger value causes normalize errors in a scaled down models with camera extreme close. */
+ constexpr bT threshold = std::is_same_v<bT, double> ? 1.0e-70 : 1.0e-35f;
+ if (out_length > threshold) {
+ out_length = sqrt(out_length);
+ return v / out_length;
+ }
+ /* Either the vector is small or one of it's values contained `nan`. */
+ out_length = 0.0;
+ return T(0.0);
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T normalize(const T &v)
+{
+ bT len;
+ return normalize_and_get_length(v, len);
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T), BLI_ENABLE_IF((T::type_length == 3))>
+inline T cross(const T &a, const T &b)
+{
+ return {a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x};
+}
+
+template<typename T,
+ BLI_ENABLE_IF((std::is_same_v<bT, float>)),
+ BLI_ENABLE_IF((T::type_length == 3))>
+inline T cross_high_precision(const T &a, const T &b)
+{
+ return {(float)((double)a.y * b.z - (double)a.z * b.y),
+ (float)((double)a.z * b.x - (double)a.x * b.z),
+ (float)((double)a.x * b.y - (double)a.y * b.x)};
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T), BLI_ENABLE_IF((T::type_length == 3))>
+inline T cross_poly(Span<T> poly)
+{
+ /* Newell's Method. */
+ int nv = static_cast<int>(poly.size());
+ if (nv < 3) {
+ return T(0, 0, 0);
+ }
+ const T *v_prev = &poly[nv - 1];
+ const T *v_curr = &poly[0];
+ T n(0, 0, 0);
+ for (int i = 0; i < nv;) {
+ n[0] = n[0] + ((*v_prev)[1] - (*v_curr)[1]) * ((*v_prev)[2] + (*v_curr)[2]);
+ n[1] = n[1] + ((*v_prev)[2] - (*v_curr)[2]) * ((*v_prev)[0] + (*v_curr)[0]);
+ n[2] = n[2] + ((*v_prev)[0] - (*v_curr)[0]) * ((*v_prev)[1] + (*v_curr)[1]);
+ v_prev = v_curr;
+ ++i;
+ if (i < nv) {
+ v_curr = &poly[i];
+ }
+ }
+ return n;
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)> inline T interpolate(const T &a, const T &b, bT t)
+{
+ return a * (1 - t) + b * t;
+}
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)>
+inline T faceforward(const T &vector, const T &incident, const T &reference)
+{
+ return (dot(reference, incident) < 0) ? vector : -vector;
+}
+
+template<typename T> inline int dominant_axis(const T &a)
+{
+ T b = abs(a);
+ return ((b.x > b.y) ? ((b.x > b.z) ? 0 : 2) : ((b.y > b.z) ? 1 : 2));
+}
+
+/** Intersections. */
+
+template<typename T> struct isect_result {
+ enum {
+ LINE_LINE_COLINEAR = -1,
+ LINE_LINE_NONE = 0,
+ LINE_LINE_EXACT = 1,
+ LINE_LINE_CROSS = 2,
+ } kind;
+ bT lambda;
+};
+
+template<typename T, BLI_ENABLE_IF_FLT_VEC(T)>
+isect_result<T> isect_seg_seg(const T &v1, const T &v2, const T &v3, const T &v4);
+
+#undef BLI_ENABLE_IF_FLT_VEC
+#undef BLI_ENABLE_IF_INT_VEC
+#undef bT
+
+} // namespace blender::math
diff --git a/source/blender/blenlib/BLI_memarena.h b/source/blender/blenlib/BLI_memarena.h
index 4ac4712bc8c..bcfe2efc5e5 100644
--- a/source/blender/blenlib/BLI_memarena.h
+++ b/source/blender/blenlib/BLI_memarena.h
@@ -38,13 +38,13 @@ extern "C" {
struct MemArena;
typedef struct MemArena MemArena;
-struct MemArena *BLI_memarena_new(const size_t bufsize,
+struct MemArena *BLI_memarena_new(size_t bufsize,
const char *name) ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL
ATTR_NONNULL(2) ATTR_MALLOC;
void BLI_memarena_free(struct MemArena *ma) ATTR_NONNULL(1);
void BLI_memarena_use_malloc(struct MemArena *ma) ATTR_NONNULL(1);
void BLI_memarena_use_calloc(struct MemArena *ma) ATTR_NONNULL(1);
-void BLI_memarena_use_align(struct MemArena *ma, const size_t align) ATTR_NONNULL(1);
+void BLI_memarena_use_align(struct MemArena *ma, size_t align) ATTR_NONNULL(1);
void *BLI_memarena_alloc(struct MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT
ATTR_NONNULL(1) ATTR_MALLOC ATTR_ALLOC_SIZE(2);
void *BLI_memarena_calloc(struct MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT
diff --git a/source/blender/blenlib/BLI_memory_utils.h b/source/blender/blenlib/BLI_memory_utils.h
index 79e25e26040..09d8f646905 100644
--- a/source/blender/blenlib/BLI_memory_utils.h
+++ b/source/blender/blenlib/BLI_memory_utils.h
@@ -29,7 +29,7 @@ extern "C" {
/* it may be defined already */
#ifndef __BLI_UTILDEFINES_H__
-bool BLI_memory_is_zero(const void *arr, const size_t size);
+bool BLI_memory_is_zero(const void *arr, size_t size);
#endif
#ifdef __cplusplus
diff --git a/source/blender/blenlib/BLI_memory_utils.hh b/source/blender/blenlib/BLI_memory_utils.hh
index 37691017c12..9a5be79b61e 100644
--- a/source/blender/blenlib/BLI_memory_utils.hh
+++ b/source/blender/blenlib/BLI_memory_utils.hh
@@ -557,13 +557,4 @@ Container &move_assign_container(Container &dst, Container &&src) noexcept(
return dst;
}
-/**
- * Utility macro that wraps `std::enable_if` to make it a bit easier to use and less verbose for
- * SFINAE in common cases.
- *
- * \note Often one has to invoke this macro with double parenthesis. That's because the condition
- * often contains a comma and angle brackets are not recognized as parenthesis by the preprocessor.
- */
-#define BLI_ENABLE_IF(condition) typename std::enable_if_t<condition> * = nullptr
-
} // namespace blender
diff --git a/source/blender/blenlib/BLI_mesh_intersect.hh b/source/blender/blenlib/BLI_mesh_intersect.hh
index 71a8abb822f..0ebee6f16a8 100644
--- a/source/blender/blenlib/BLI_mesh_intersect.hh
+++ b/source/blender/blenlib/BLI_mesh_intersect.hh
@@ -28,12 +28,11 @@
# include <iostream>
# include "BLI_array.hh"
-# include "BLI_double3.hh"
-# include "BLI_float3.hh"
# include "BLI_index_range.hh"
# include "BLI_map.hh"
# include "BLI_math_mpq.hh"
-# include "BLI_mpq3.hh"
+# include "BLI_math_vec_mpq_types.hh"
+# include "BLI_math_vec_types.hh"
# include "BLI_span.hh"
# include "BLI_utility_mixins.hh"
# include "BLI_vector.hh"
diff --git a/source/blender/blenlib/BLI_mpq2.hh b/source/blender/blenlib/BLI_mpq2.hh
deleted file mode 100644
index 18bc8821d9c..00000000000
--- a/source/blender/blenlib/BLI_mpq2.hh
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-/** \file
- * \ingroup bli
- */
-
-#ifdef WITH_GMP
-
-# include "BLI_math_mpq.hh"
-# include "BLI_mpq3.hh"
-
-namespace blender {
-
-struct mpq2 {
- mpq_class x, y;
-
- mpq2() = default;
-
- mpq2(const mpq_class *ptr) : x{ptr[0]}, y{ptr[1]}
- {
- }
-
- mpq2(mpq_class x, mpq_class y) : x(x), y(y)
- {
- }
-
- mpq2(const mpq2 &other) : x(other.x), y(other.y)
- {
- }
-
- mpq2(mpq2 &&other) noexcept : x(std::move(other.x)), y(std::move(other.y))
- {
- }
-
- ~mpq2() = default;
-
- mpq2 &operator=(const mpq2 &other)
- {
- if (this != &other) {
- x = other.x;
- y = other.y;
- }
- return *this;
- }
-
- mpq2 &operator=(mpq2 &&other) noexcept
- {
- x = std::move(other.x);
- y = std::move(other.y);
- return *this;
- }
-
- mpq2(const mpq3 &other) : x(other.x), y(other.y)
- {
- }
-
- operator mpq_class *()
- {
- return &x;
- }
-
- operator const mpq_class *() const
- {
- return &x;
- }
-
- /**
- * Cannot do this exactly in rational arithmetic!
- * Approximate by going in and out of doubles.
- */
- mpq_class length() const
- {
- mpq_class lsquared = dot(*this, *this);
- return mpq_class(sqrt(lsquared.get_d()));
- }
-
- friend mpq2 operator+(const mpq2 &a, const mpq2 &b)
- {
- return {a.x + b.x, a.y + b.y};
- }
-
- friend mpq2 operator-(const mpq2 &a, const mpq2 &b)
- {
- return {a.x - b.x, a.y - b.y};
- }
-
- friend mpq2 operator*(const mpq2 &a, mpq_class b)
- {
- return {a.x * b, a.y * b};
- }
-
- friend mpq2 operator/(const mpq2 &a, mpq_class b)
- {
- BLI_assert(b != 0);
- return {a.x / b, a.y / b};
- }
-
- friend mpq2 operator*(mpq_class a, const mpq2 &b)
- {
- return b * a;
- }
-
- friend bool operator==(const mpq2 &a, const mpq2 &b)
- {
- return a.x == b.x && a.y == b.y;
- }
-
- friend bool operator!=(const mpq2 &a, const mpq2 &b)
- {
- return a.x != b.x || a.y != b.y;
- }
-
- friend std::ostream &operator<<(std::ostream &stream, const mpq2 &v)
- {
- stream << "(" << v.x << ", " << v.y << ")";
- return stream;
- }
-
- static mpq_class dot(const mpq2 &a, const mpq2 &b)
- {
- return a.x * b.x + a.y * b.y;
- }
-
- static mpq2 interpolate(const mpq2 &a, const mpq2 &b, mpq_class t)
- {
- return a * (1 - t) + b * t;
- }
-
- static mpq2 abs(const mpq2 &a)
- {
- mpq_class abs_x = (a.x >= 0) ? a.x : -a.x;
- mpq_class abs_y = (a.y >= 0) ? a.y : -a.y;
- return mpq2(abs_x, abs_y);
- }
-
- static mpq_class distance(const mpq2 &a, const mpq2 &b)
- {
- return (a - b).length();
- }
-
- static mpq_class distance_squared(const mpq2 &a, const mpq2 &b)
- {
- mpq2 diff = a - b;
- return dot(diff, diff);
- }
-
- struct isect_result {
- enum {
- LINE_LINE_COLINEAR = -1,
- LINE_LINE_NONE = 0,
- LINE_LINE_EXACT = 1,
- LINE_LINE_CROSS = 2,
- } kind;
- mpq_class lambda;
- };
-
- static isect_result isect_seg_seg(const mpq2 &v1,
- const mpq2 &v2,
- const mpq2 &v3,
- const mpq2 &v4);
-
- /** There is a sensible use for hashing on exact arithmetic types. */
- uint64_t hash() const;
-};
-
-} // namespace blender
-
-#endif /* WITH_GMP */
diff --git a/source/blender/blenlib/BLI_mpq3.hh b/source/blender/blenlib/BLI_mpq3.hh
deleted file mode 100644
index b9eda2ad7e1..00000000000
--- a/source/blender/blenlib/BLI_mpq3.hh
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-/** \file
- * \ingroup bli
- */
-
-#ifdef WITH_GMP
-
-# include <iostream>
-
-# include "BLI_math.h"
-# include "BLI_math_mpq.hh"
-# include "BLI_span.hh"
-
-namespace blender {
-
-struct mpq3 {
- mpq_class x, y, z;
-
- mpq3() = default;
-
- mpq3(const mpq_class *ptr) : x{ptr[0]}, y{ptr[1]}, z{ptr[2]}
- {
- }
-
- mpq3(const mpq_class (*ptr)[3]) : mpq3((const mpq_class *)ptr)
- {
- }
-
- explicit mpq3(mpq_class value) : x(value), y(value), z(value)
- {
- }
-
- explicit mpq3(int value) : x(value), y(value), z(value)
- {
- }
-
- mpq3(mpq_class x, mpq_class y, mpq_class z) : x{x}, y{y}, z{z}
- {
- }
-
- operator const mpq_class *() const
- {
- return &x;
- }
-
- operator mpq_class *()
- {
- return &x;
- }
-
- /* Cannot do this exactly in rational arithmetic!
- * Approximate by going in and out of doubles.
- */
- mpq_class normalize_and_get_length()
- {
- double dv[3] = {x.get_d(), y.get_d(), z.get_d()};
- double len = normalize_v3_db(dv);
- this->x = mpq_class(dv[0]);
- this->y = mpq_class(dv[1]);
- this->z = mpq_class(dv[2]);
- return len;
- }
-
- mpq3 normalized() const
- {
- double dv[3] = {x.get_d(), y.get_d(), z.get_d()};
- double dr[3];
- normalize_v3_v3_db(dr, dv);
- return mpq3(mpq_class(dr[0]), mpq_class(dr[1]), mpq_class(dr[2]));
- }
-
- /* Cannot do this exactly in rational arithmetic!
- * Approximate by going in and out of double.
- */
- mpq_class length() const
- {
- mpq_class lsquared = this->length_squared();
- double dsquared = lsquared.get_d();
- double d = sqrt(dsquared);
- return mpq_class(d);
- }
-
- mpq_class length_squared() const
- {
- return x * x + y * y + z * z;
- }
-
- void reflect(const mpq3 &normal)
- {
- *this = this->reflected(normal);
- }
-
- mpq3 reflected(const mpq3 &normal) const
- {
- mpq3 result;
- const mpq_class dot2 = 2 * dot(*this, normal);
- result.x = this->x - (dot2 * normal.x);
- result.y = this->y - (dot2 * normal.y);
- result.z = this->z - (dot2 * normal.z);
- return result;
- }
-
- static mpq3 safe_divide(const mpq3 &a, const mpq3 &b)
- {
- mpq3 result;
- result.x = (b.x == 0) ? mpq_class(0) : a.x / b.x;
- result.y = (b.y == 0) ? mpq_class(0) : a.y / b.y;
- result.z = (b.z == 0) ? mpq_class(0) : a.z / b.z;
- return result;
- }
-
- void invert()
- {
- x = -x;
- y = -y;
- z = -z;
- }
-
- friend mpq3 operator+(const mpq3 &a, const mpq3 &b)
- {
- return mpq3(a.x + b.x, a.y + b.y, a.z + b.z);
- }
-
- void operator+=(const mpq3 &b)
- {
- this->x += b.x;
- this->y += b.y;
- this->z += b.z;
- }
-
- friend mpq3 operator-(const mpq3 &a, const mpq3 &b)
- {
- return mpq3(a.x - b.x, a.y - b.y, a.z - b.z);
- }
-
- friend mpq3 operator-(const mpq3 &a)
- {
- return mpq3(-a.x, -a.y, -a.z);
- }
-
- void operator-=(const mpq3 &b)
- {
- this->x -= b.x;
- this->y -= b.y;
- this->z -= b.z;
- }
-
- void operator*=(mpq_class scalar)
- {
- this->x *= scalar;
- this->y *= scalar;
- this->z *= scalar;
- }
-
- void operator*=(const mpq3 &other)
- {
- this->x *= other.x;
- this->y *= other.y;
- this->z *= other.z;
- }
-
- friend mpq3 operator*(const mpq3 &a, const mpq3 &b)
- {
- return {a.x * b.x, a.y * b.y, a.z * b.z};
- }
-
- friend mpq3 operator*(const mpq3 &a, const mpq_class &b)
- {
- return mpq3(a.x * b, a.y * b, a.z * b);
- }
-
- friend mpq3 operator*(const mpq_class &a, const mpq3 &b)
- {
- return mpq3(a * b.x, a * b.y, a * b.z);
- }
-
- friend mpq3 operator/(const mpq3 &a, const mpq_class &b)
- {
- BLI_assert(b != 0);
- return mpq3(a.x / b, a.y / b, a.z / b);
- }
-
- friend bool operator==(const mpq3 &a, const mpq3 &b)
- {
- return a.x == b.x && a.y == b.y && a.z == b.z;
- }
-
- friend bool operator!=(const mpq3 &a, const mpq3 &b)
- {
- return a.x != b.x || a.y != b.y || a.z != b.z;
- }
-
- friend std::ostream &operator<<(std::ostream &stream, const mpq3 &v)
- {
- stream << "(" << v.x << ", " << v.y << ", " << v.z << ")";
- return stream;
- }
-
- static mpq_class dot(const mpq3 &a, const mpq3 &b)
- {
- return a.x * b.x + a.y * b.y + a.z * b.z;
- }
-
- static mpq_class dot_with_buffer(const mpq3 &a, const mpq3 &b, mpq3 &buffer)
- {
- buffer = a;
- buffer *= b;
- buffer.x += buffer.y;
- buffer.x += buffer.z;
- return buffer.x;
- }
-
- static mpq3 cross(const mpq3 &a, const mpq3 &b)
- {
- return mpq3(a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]);
- }
-
- static mpq3 cross_high_precision(const mpq3 &a, const mpq3 &b)
- {
- return cross(a, b);
- }
-
- static mpq3 project(const mpq3 &a, const mpq3 &b)
- {
- const mpq_class mul = mpq3::dot(a, b) / mpq3::dot(b, b);
- return mpq3(mul * b[0], mul * b[1], mul * b[2]);
- }
-
- static mpq_class distance(const mpq3 &a, const mpq3 &b)
- {
- mpq3 diff(a.x - b.x, a.y - b.y, a.z - b.z);
- return diff.length();
- }
-
- static mpq_class distance_squared(const mpq3 &a, const mpq3 &b)
- {
- mpq3 diff(a.x - b.x, a.y - b.y, a.z - b.z);
- return mpq3::dot(diff, diff);
- }
-
- static mpq_class distance_squared_with_buffer(const mpq3 &a, const mpq3 &b, mpq3 &buffer)
- {
- buffer = a;
- buffer -= b;
- return mpq3::dot(buffer, buffer);
- }
-
- static mpq3 interpolate(const mpq3 &a, const mpq3 &b, mpq_class t)
- {
- mpq_class s = 1 - t;
- return mpq3(a.x * s + b.x * t, a.y * s + b.y * t, a.z * s + b.z * t);
- }
-
- static mpq3 abs(const mpq3 &a)
- {
- mpq_class abs_x = (a.x >= 0) ? a.x : -a.x;
- mpq_class abs_y = (a.y >= 0) ? a.y : -a.y;
- mpq_class abs_z = (a.z >= 0) ? a.z : -a.z;
- return mpq3(abs_x, abs_y, abs_z);
- }
-
- static int dominant_axis(const mpq3 &a)
- {
- mpq_class x = (a.x >= 0) ? a.x : -a.x;
- mpq_class y = (a.y >= 0) ? a.y : -a.y;
- mpq_class z = (a.z >= 0) ? a.z : -a.z;
- return ((x > y) ? ((x > z) ? 0 : 2) : ((y > z) ? 1 : 2));
- }
-
- static mpq3 cross_poly(Span<mpq3> poly);
-
- /** There is a sensible use for hashing on exact arithmetic types. */
- uint64_t hash() const;
-};
-
-uint64_t hash_mpq_class(const mpq_class &value);
-
-} // namespace blender
-
-#endif /* WITH_GMP */
diff --git a/source/blender/blenlib/BLI_noise.hh b/source/blender/blenlib/BLI_noise.hh
index 4f68ef17ca2..297c65c250a 100644
--- a/source/blender/blenlib/BLI_noise.hh
+++ b/source/blender/blenlib/BLI_noise.hh
@@ -16,9 +16,7 @@
#pragma once
-#include "BLI_float2.hh"
-#include "BLI_float3.hh"
-#include "BLI_float4.hh"
+#include "BLI_math_vec_types.hh"
namespace blender::noise {
diff --git a/source/blender/blenlib/BLI_path_util.h b/source/blender/blenlib/BLI_path_util.h
index 16f479cb3b8..658cc0c3825 100644
--- a/source/blender/blenlib/BLI_path_util.h
+++ b/source/blender/blenlib/BLI_path_util.h
@@ -75,16 +75,15 @@ bool BLI_make_existing_file(const char *name);
* - Doesn't use CWD, or deal with relative paths.
* - Only fill's in \a dir and \a file when they are non NULL.
*/
-void BLI_split_dirfile(
- const char *string, char *dir, char *file, const size_t dirlen, const size_t filelen);
+void BLI_split_dirfile(const char *string, char *dir, char *file, size_t dirlen, size_t filelen);
/**
* Copies the parent directory part of string into `dir`, max length `dirlen`.
*/
-void BLI_split_dir_part(const char *string, char *dir, const size_t dirlen);
+void BLI_split_dir_part(const char *string, char *dir, size_t dirlen);
/**
* Copies the leaf filename part of string into `file`, max length `filelen`.
*/
-void BLI_split_file_part(const char *string, char *file, const size_t filelen);
+void BLI_split_file_part(const char *string, char *file, size_t filelen);
/**
* Returns a pointer to the last extension (e.g. the position of the last period).
* Returns NULL if there is no extension.
@@ -94,7 +93,7 @@ const char *BLI_path_extension(const char *filepath) ATTR_NONNULL();
/**
* Append a filename to a dir, ensuring slash separates.
*/
-void BLI_path_append(char *__restrict dst, const size_t maxlen, const char *__restrict file)
+void BLI_path_append(char *__restrict dst, size_t maxlen, const char *__restrict file)
ATTR_NONNULL();
/**
* Simple appending of filename to dir, does not check for valid path!
@@ -104,7 +103,7 @@ void BLI_path_append(char *__restrict dst, const size_t maxlen, const char *__re
* that de-duplicates separators and can handle an arbitrary number of paths.
*/
void BLI_join_dirfile(char *__restrict dst,
- const size_t maxlen,
+ size_t maxlen,
const char *__restrict dir,
const char *__restrict file) ATTR_NONNULL();
/**
@@ -114,7 +113,7 @@ void BLI_join_dirfile(char *__restrict dst,
* \note If you want a trailing slash, add `SEP_STR` as the last path argument,
* duplicate slashes will be cleaned up.
*/
-size_t BLI_path_join(char *__restrict dst, const size_t dst_len, const char *path_first, ...)
+size_t BLI_path_join(char *__restrict dst, size_t dst_len, const char *path_first, ...)
ATTR_NONNULL(1, 3) ATTR_SENTINEL(0);
/**
* Like Python's `os.path.basename()`
@@ -164,12 +163,12 @@ void BLI_path_slash_rstrip(char *string) ATTR_NONNULL();
void BLI_path_slash_native(char *path) ATTR_NONNULL();
#ifdef _WIN32
-bool BLI_path_program_extensions_add_win32(char *name, const size_t maxlen);
+bool BLI_path_program_extensions_add_win32(char *name, size_t maxlen);
#endif
/**
* Search for a binary (executable)
*/
-bool BLI_path_program_search(char *fullname, const size_t maxlen, const char *name);
+bool BLI_path_program_search(char *fullname, size_t maxlen, const char *name);
/**
* \return true when `str` end with `ext` (case insensitive).
@@ -353,7 +352,7 @@ bool BLI_path_is_abs_from_cwd(const char *path) ATTR_NONNULL();
* This is _not_ something Blender's internal paths support, instead they use the "//" prefix.
* In most cases #BLI_path_abs should be used instead.
*/
-bool BLI_path_abs_from_cwd(char *path, const size_t maxlen) ATTR_NONNULL();
+bool BLI_path_abs_from_cwd(char *path, size_t maxlen) ATTR_NONNULL();
/**
* Replaces `file` with a relative version (prefixed by "//") such that #BLI_path_abs, given
* the same `relfile`, will convert it back to its original value.
diff --git a/source/blender/blenlib/BLI_rand.hh b/source/blender/blenlib/BLI_rand.hh
index cc9e9b374d7..667d6df8996 100644
--- a/source/blender/blenlib/BLI_rand.hh
+++ b/source/blender/blenlib/BLI_rand.hh
@@ -20,9 +20,8 @@
#pragma once
-#include "BLI_float2.hh"
-#include "BLI_float3.hh"
#include "BLI_math.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_span.hh"
#include "BLI_utildefines.h"
diff --git a/source/blender/blenlib/BLI_stack.h b/source/blender/blenlib/BLI_stack.h
index 653f5f61c9e..eb4e69a42d4 100644
--- a/source/blender/blenlib/BLI_stack.h
+++ b/source/blender/blenlib/BLI_stack.h
@@ -28,13 +28,13 @@ extern "C" {
typedef struct BLI_Stack BLI_Stack;
-BLI_Stack *BLI_stack_new_ex(const size_t elem_size,
+BLI_Stack *BLI_stack_new_ex(size_t elem_size,
const char *description,
- const size_t chunk_size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
+ size_t chunk_size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
/**
* Create a new homogeneous stack with elements of 'elem_size' bytes.
*/
-BLI_Stack *BLI_stack_new(const size_t elem_size, const char *description) ATTR_WARN_UNUSED_RESULT
+BLI_Stack *BLI_stack_new(size_t elem_size, const char *description) ATTR_WARN_UNUSED_RESULT
ATTR_NONNULL();
/**
diff --git a/source/blender/blenlib/BLI_string.h b/source/blender/blenlib/BLI_string.h
index a82e97914db..8177545911c 100644
--- a/source/blender/blenlib/BLI_string.h
+++ b/source/blender/blenlib/BLI_string.h
@@ -42,8 +42,7 @@ extern "C" {
* \param len: The number of bytes to duplicate
* \retval Returns the duplicated string
*/
-char *BLI_strdupn(const char *str, const size_t len) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
- ATTR_NONNULL();
+char *BLI_strdupn(const char *str, size_t len) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
/**
* Duplicates the cstring \a str into a newly mallocN'd
@@ -74,8 +73,7 @@ char *BLI_strdupcat(const char *__restrict str1,
* the size of dst)
* \retval Returns dst
*/
-char *BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy)
- ATTR_NONNULL();
+char *BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL();
/**
* Like BLI_strncpy but ensures dst is always padded by given char,
@@ -107,7 +105,7 @@ char *BLI_strncpy_ensure_pad(char *__restrict dst,
*/
size_t BLI_strncpy_rlen(char *__restrict dst,
const char *__restrict src,
- const size_t maxncpy) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
+ size_t maxncpy) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
size_t BLI_strcpy_rlen(char *__restrict dst, const char *__restrict src) ATTR_WARN_UNUSED_RESULT
ATTR_NONNULL();
@@ -186,7 +184,7 @@ void BLI_str_replace_char(char *str, char src, char dst) ATTR_NONNULL();
* \note Larger tables should use a hash table.
*/
bool BLI_str_replace_table_exact(char *string,
- const size_t string_len,
+ size_t string_len,
const char *replace_table[][2],
int replace_table_len);
@@ -235,7 +233,7 @@ char *BLI_sprintfN(const char *__restrict format, ...) ATTR_WARN_UNUSED_RESULT
*
* \note This is used for creating animation paths in blend files.
*/
-size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, const size_t dst_maxncpy)
+size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy)
ATTR_NONNULL();
/**
* This roughly matches C and Python's string escaping with double quotes - `"`.
@@ -251,9 +249,9 @@ size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, const si
*/
size_t BLI_str_unescape_ex(char *__restrict dst,
const char *__restrict src,
- const size_t src_maxncpy,
+ size_t src_maxncpy,
/* Additional arguments. */
- const size_t dst_maxncpy,
+ size_t dst_maxncpy,
bool *r_is_complete) ATTR_NONNULL();
/**
* See #BLI_str_unescape_ex doc-string.
@@ -265,7 +263,7 @@ size_t BLI_str_unescape_ex(char *__restrict dst,
*
* \note This is used for parsing animation paths in blend files (runs often).
*/
-size_t BLI_str_unescape(char *__restrict dst, const char *__restrict src, const size_t src_maxncpy)
+size_t BLI_str_unescape(char *__restrict dst, const char *__restrict src, size_t src_maxncpy)
ATTR_NONNULL();
/**
@@ -359,10 +357,10 @@ int BLI_strcmp_ignore_pad(const char *str1, const char *str2, char pad) ATTR_WAR
/**
* Determine the length of a fixed-size string.
*/
-size_t BLI_strnlen(const char *str, const size_t maxlen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
+size_t BLI_strnlen(const char *str, size_t maxlen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
-void BLI_str_tolower_ascii(char *str, const size_t len) ATTR_NONNULL();
-void BLI_str_toupper_ascii(char *str, const size_t len) ATTR_NONNULL();
+void BLI_str_tolower_ascii(char *str, size_t len) ATTR_NONNULL();
+void BLI_str_toupper_ascii(char *str, size_t len) ATTR_NONNULL();
/**
* Strip white-space from end of the string.
*/
@@ -479,7 +477,7 @@ bool BLI_string_all_words_matched(const char *name,
* \return The number of words found in \a str
*/
int BLI_string_find_split_words(const char *str,
- const size_t len,
+ size_t len,
char delim,
int r_words[][2],
int words_max) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
diff --git a/source/blender/blenlib/BLI_string_utf8.h b/source/blender/blenlib/BLI_string_utf8.h
index 82622d442fb..108a2f5fc7d 100644
--- a/source/blender/blenlib/BLI_string_utf8.h
+++ b/source/blender/blenlib/BLI_string_utf8.h
@@ -110,14 +110,12 @@ size_t BLI_str_utf8_from_unicode_len(unsigned int c) ATTR_WARN_UNUSED_RESULT;
*
* \return number of bytes written.
*/
-size_t BLI_str_utf8_from_unicode(unsigned int c, char *outbuf, const size_t outbuf_len)
- ATTR_NONNULL(2);
+size_t BLI_str_utf8_from_unicode(unsigned int c, char *outbuf, size_t outbuf_len) ATTR_NONNULL(2);
size_t BLI_str_utf8_as_utf32(char32_t *__restrict dst_w,
const char *__restrict src_c,
- const size_t maxncpy) ATTR_NONNULL(1, 2);
-size_t BLI_str_utf32_as_utf8(char *__restrict dst,
- const char32_t *__restrict src,
- const size_t maxncpy) ATTR_NONNULL(1, 2);
+ size_t maxncpy) ATTR_NONNULL(1, 2);
+size_t BLI_str_utf32_as_utf8(char *__restrict dst, const char32_t *__restrict src, size_t maxncpy)
+ ATTR_NONNULL(1, 2);
/**
* \return The UTF-32 len in UTF-8.
*/
@@ -162,21 +160,20 @@ size_t BLI_wstrlen_utf8(const wchar_t *src) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RES
size_t BLI_strlen_utf8_ex(const char *strc, size_t *r_len_bytes)
ATTR_NONNULL(1, 2) ATTR_WARN_UNUSED_RESULT;
size_t BLI_strlen_utf8(const char *strc) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT;
-size_t BLI_strnlen_utf8_ex(const char *strc, const size_t maxlen, size_t *r_len_bytes)
+size_t BLI_strnlen_utf8_ex(const char *strc, size_t maxlen, size_t *r_len_bytes)
ATTR_NONNULL(1, 3);
/**
* \param strc: the string to measure the length.
* \param maxlen: the string length (in bytes)
* \return the unicode length (not in bytes!)
*/
-size_t BLI_strnlen_utf8(const char *strc, const size_t maxlen)
- ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT;
+size_t BLI_strnlen_utf8(const char *strc, size_t maxlen) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT;
size_t BLI_strncpy_wchar_as_utf8(char *__restrict dst,
const wchar_t *__restrict src,
- const size_t maxncpy) ATTR_NONNULL(1, 2);
+ size_t maxncpy) ATTR_NONNULL(1, 2);
size_t BLI_strncpy_wchar_from_utf8(wchar_t *__restrict dst,
const char *__restrict src,
- const size_t maxncpy) ATTR_NONNULL(1, 2);
+ size_t maxncpy) ATTR_NONNULL(1, 2);
/**
* Count columns that character/string occupies (based on `wcwidth.co`).
diff --git a/source/blender/blenlib/BLI_string_utils.h b/source/blender/blenlib/BLI_string_utils.h
index fd3918ff217..818bfe8182b 100644
--- a/source/blender/blenlib/BLI_string_utils.h
+++ b/source/blender/blenlib/BLI_string_utils.h
@@ -57,11 +57,11 @@ bool BLI_string_is_decimal(const char *string) ATTR_NONNULL();
* Based on `BLI_split_dirfile()` / `os.path.splitext()`,
* `"a.b.c"` -> (`"a.b"`, `".c"`).
*/
-void BLI_string_split_suffix(const char *string, char *r_body, char *r_suf, const size_t str_len);
+void BLI_string_split_suffix(const char *string, char *r_body, char *r_suf, size_t str_len);
/**
* `"a.b.c"` -> (`"a."`, `"b.c"`).
*/
-void BLI_string_split_prefix(const char *string, char *r_pre, char *r_body, const size_t str_len);
+void BLI_string_split_prefix(const char *string, char *r_pre, char *r_body, size_t str_len);
/**
* Join strings, return newly allocated string.
@@ -127,7 +127,7 @@ char *BLI_string_join_array_by_sep_char_with_tableN(char sep,
size_t BLI_string_flip_side_name(char *r_name,
const char *from_name,
bool strip_number,
- const size_t name_len);
+ size_t name_len);
/**
* Ensures name is unique (according to criteria specified by caller in unique_check callback),
diff --git a/source/blender/blenlib/BLI_timecode.h b/source/blender/blenlib/BLI_timecode.h
index f0349e289ac..1cd18dc86ab 100644
--- a/source/blender/blenlib/BLI_timecode.h
+++ b/source/blender/blenlib/BLI_timecode.h
@@ -42,7 +42,7 @@ extern "C" {
* \return length of \a str
*/
size_t BLI_timecode_string_from_time(char *str,
- const size_t maxncpy,
+ size_t maxncpy,
int brevity_level,
float time_seconds,
double fps,
@@ -56,7 +56,7 @@ size_t BLI_timecode_string_from_time(char *str,
* \param time_seconds: time total time in seconds
* \return length of \a str
*/
-size_t BLI_timecode_string_from_time_simple(char *str, const size_t maxncpy, double time_seconds)
+size_t BLI_timecode_string_from_time_simple(char *str, size_t maxncpy, double time_seconds)
ATTR_NONNULL();
/**
@@ -72,7 +72,7 @@ size_t BLI_timecode_string_from_time_simple(char *str, const size_t maxncpy, dou
* \note in some cases this is used to print non-seconds values.
*/
size_t BLI_timecode_string_from_time_seconds(char *str,
- const size_t maxncpy,
+ size_t maxncpy,
int brevity_level,
float time_seconds) ATTR_NONNULL();
diff --git a/source/blender/blenlib/BLI_utildefines.h b/source/blender/blenlib/BLI_utildefines.h
index b902458bd0b..c4b31810669 100644
--- a/source/blender/blenlib/BLI_utildefines.h
+++ b/source/blender/blenlib/BLI_utildefines.h
@@ -638,7 +638,7 @@ extern "C" {
/**
* Check if memory is zeroed, as with `memset(arr, 0, arr_size)`.
*/
-extern bool BLI_memory_is_zero(const void *arr, const size_t arr_size);
+extern bool BLI_memory_is_zero(const void *arr, size_t arr_size);
#endif
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member) \
@@ -840,6 +840,15 @@ extern bool BLI_memory_is_zero(const void *arr, const size_t arr_size);
/** No-op for expressions we don't want to instantiate, but must remain valid. */
#define EXPR_NOP(expr) (void)(0 ? ((void)(expr), 1) : 0)
+/**
+ * Utility macro that wraps `std::enable_if` to make it a bit easier to use and less verbose for
+ * SFINAE in common cases.
+ *
+ * \note Often one has to invoke this macro with double parenthesis. That's because the condition
+ * often contains a comma and angle brackets are not recognized as parenthesis by the preprocessor.
+ */
+#define BLI_ENABLE_IF(condition) typename std::enable_if_t<(condition)> * = nullptr
+
/** \} */
#ifdef __cplusplus
diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt
index 3958fd8e2d2..90c6760019a 100644
--- a/source/blender/blenlib/CMakeLists.txt
+++ b/source/blender/blenlib/CMakeLists.txt
@@ -192,8 +192,6 @@ set(SRC
BLI_dlrbTree.h
BLI_dot_export.hh
BLI_dot_export_attribute_enums.hh
- BLI_double2.hh
- BLI_double3.hh
BLI_dynlib.h
BLI_dynstr.h
BLI_easing.h
@@ -207,9 +205,6 @@ set(SRC
BLI_fileops.hh
BLI_fileops_types.h
BLI_filereader.h
- BLI_float2.hh
- BLI_float3.hh
- BLI_float4.hh
BLI_float4x4.hh
BLI_fnmatch.h
BLI_function_ref.hh
@@ -258,6 +253,8 @@ set(SRC
BLI_math_statistics.h
BLI_math_time.h
BLI_math_vector.h
+ BLI_math_vec_types.hh
+ BLI_math_vec_mpq_types.hh
BLI_memarena.h
BLI_memblock.h
BLI_memiter.h
@@ -267,8 +264,6 @@ set(SRC
BLI_mesh_boolean.hh
BLI_mesh_intersect.hh
BLI_mmap.h
- BLI_mpq2.hh
- BLI_mpq3.hh
BLI_multi_value_map.hh
BLI_noise.h
BLI_noise.hh
@@ -444,6 +439,7 @@ if(WITH_GTESTS)
tests/BLI_math_rotation_test.cc
tests/BLI_math_solvers_test.cc
tests/BLI_math_time_test.cc
+ tests/BLI_math_vec_types_test.cc
tests/BLI_math_vector_test.cc
tests/BLI_memiter_test.cc
tests/BLI_memory_utils_test.cc
diff --git a/source/blender/blenlib/intern/BLI_mempool_private.h b/source/blender/blenlib/intern/BLI_mempool_private.h
index 90569d87c41..03b0b11297b 100644
--- a/source/blender/blenlib/intern/BLI_mempool_private.h
+++ b/source/blender/blenlib/intern/BLI_mempool_private.h
@@ -54,8 +54,9 @@ typedef struct ParallelMempoolTaskData {
*
* See #BLI_task_parallel_mempool implementation for detailed usage example.
*/
-ParallelMempoolTaskData *mempool_iter_threadsafe_create(BLI_mempool *pool, const size_t num_iter)
- ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
+ParallelMempoolTaskData *mempool_iter_threadsafe_create(BLI_mempool *pool,
+ size_t num_iter) ATTR_WARN_UNUSED_RESULT
+ ATTR_NONNULL();
void mempool_iter_threadsafe_destroy(ParallelMempoolTaskData *iter_arr) ATTR_NONNULL();
/**
diff --git a/source/blender/blenlib/intern/delaunay_2d.cc b/source/blender/blenlib/intern/delaunay_2d.cc
index 53e881a9fc7..842e6cb6135 100644
--- a/source/blender/blenlib/intern/delaunay_2d.cc
+++ b/source/blender/blenlib/intern/delaunay_2d.cc
@@ -25,11 +25,10 @@
#include <sstream>
#include "BLI_array.hh"
-#include "BLI_double2.hh"
#include "BLI_linklist.h"
#include "BLI_math_boolean.hh"
#include "BLI_math_mpq.hh"
-#include "BLI_mpq2.hh"
+#include "BLI_math_vec_mpq_types.hh"
#include "BLI_set.hh"
#include "BLI_task.hh"
#include "BLI_vector.hh"
@@ -38,6 +37,8 @@
namespace blender::meshintersect {
+using namespace blender::math;
+
/* Throughout this file, template argument T will be an
* arithmetic-like type, like float, double, or mpq_class. */
@@ -788,11 +789,11 @@ bool in_line<mpq_class>(const FatCo<mpq_class> &a,
}
vec2<mpq_class> exact_ab = b.exact - a.exact;
vec2<mpq_class> exact_ac = c.exact - a.exact;
- if (vec2<mpq_class>::dot(exact_ab, exact_ac) < 0) {
+ if (dot(exact_ab, exact_ac) < 0) {
return false;
}
vec2<mpq_class> exact_bc = c.exact - b.exact;
- return vec2<mpq_class>::dot(exact_bc, exact_ac) >= 0;
+ return dot(exact_bc, exact_ac) >= 0;
}
#endif
@@ -801,11 +802,11 @@ bool in_line<double>(const FatCo<double> &a, const FatCo<double> &b, const FatCo
{
vec2<double> ab = b.approx - a.approx;
vec2<double> ac = c.approx - a.approx;
- if (vec2<double>::dot(ab, ac) < 0) {
+ if (dot(ab, ac) < 0) {
return false;
}
vec2<double> bc = c.approx - b.approx;
- return vec2<double>::dot(bc, ac) >= 0;
+ return dot(bc, ac) >= 0;
}
template<> CDTVert<double>::CDTVert(const vec2<double> &pt)
@@ -1081,7 +1082,7 @@ template<typename T> CDTEdge<T> *CDTArrangement<T>::split_edge(SymEdge<T> *se, T
SymEdge<T> *sesymprev = prev(sesym);
SymEdge<T> *sesymprevsym = sym(sesymprev);
SymEdge<T> *senext = se->next;
- CDTVert<T> *v = this->add_vert(vec2<T>::interpolate(*a, *b, lambda));
+ CDTVert<T> *v = this->add_vert(interpolate(*a, *b, lambda));
CDTEdge<T> *e = this->add_edge(v, se->next->vert, se->face, sesym->face);
sesym->vert = v;
SymEdge<T> *newse = &e->symedges[0];
@@ -1704,16 +1705,16 @@ void fill_crossdata_for_intersect(const FatCo<T> &curco,
BLI_assert(se_vcva->vert == vc && se_vcva->next->vert == va);
BLI_assert(se_vcvb->vert == vc && se_vcvb->next->vert == vb);
UNUSED_VARS_NDEBUG(vc);
- auto isect = vec2<T>::isect_seg_seg(va->co.exact, vb->co.exact, curco.exact, v2->co.exact);
+ auto isect = isect_seg_seg<vec2<T>>(va->co.exact, vb->co.exact, curco.exact, v2->co.exact);
T &lambda = isect.lambda;
switch (isect.kind) {
- case vec2<T>::isect_result::LINE_LINE_CROSS: {
+ case isect_result<vec2<T>>::LINE_LINE_CROSS: {
#ifdef WITH_GMP
if (!std::is_same<T, mpq_class>::value) {
#else
if (true) {
#endif
- double len_ab = vec2<double>::distance(va->co.approx, vb->co.approx);
+ double len_ab = distance(va->co.approx, vb->co.approx);
if (lambda * len_ab <= epsilon) {
fill_crossdata_for_through_vert(va, se_vcva, cd, cd_next);
}
@@ -1735,7 +1736,7 @@ void fill_crossdata_for_intersect(const FatCo<T> &curco,
}
break;
}
- case vec2<T>::isect_result::LINE_LINE_EXACT: {
+ case isect_result<vec2<T>>::LINE_LINE_EXACT: {
if (lambda == 0) {
fill_crossdata_for_through_vert(va, se_vcva, cd, cd_next);
}
@@ -1750,7 +1751,7 @@ void fill_crossdata_for_intersect(const FatCo<T> &curco,
}
break;
}
- case vec2<T>::isect_result::LINE_LINE_NONE: {
+ case isect_result<vec2<T>>::LINE_LINE_NONE: {
#ifdef WITH_GMP
if (std::is_same<T, mpq_class>::value) {
BLI_assert(false);
@@ -1766,9 +1767,9 @@ void fill_crossdata_for_intersect(const FatCo<T> &curco,
}
break;
}
- case vec2<T>::isect_result::LINE_LINE_COLINEAR: {
- if (vec2<double>::distance_squared(va->co.approx, v2->co.approx) <=
- vec2<double>::distance_squared(vb->co.approx, v2->co.approx)) {
+ case isect_result<vec2<T>>::LINE_LINE_COLINEAR: {
+ if (distance_squared(va->co.approx, v2->co.approx) <=
+ distance_squared(vb->co.approx, v2->co.approx)) {
fill_crossdata_for_through_vert(va, se_vcva, cd, cd_next);
}
else {
@@ -1845,7 +1846,7 @@ void get_next_crossing_from_edge(CrossData<T> *cd,
{
CDTVert<T> *va = cd->in->vert;
CDTVert<T> *vb = cd->in->next->vert;
- vec2<T> curco = vec2<T>::interpolate(va->co.exact, vb->co.exact, cd->lambda);
+ vec2<T> curco = interpolate(va->co.exact, vb->co.exact, cd->lambda);
FatCo<T> fat_curco(curco);
SymEdge<T> *se_ac = sym(cd->in)->next;
CDTVert<T> *vc = se_ac->next->vert;
@@ -2386,7 +2387,7 @@ template<typename T> void remove_non_constraint_edges_leave_valid_bmesh(CDT_stat
dissolvable_edges[i].e = e;
const vec2<double> &co1 = e->symedges[0].vert->co.approx;
const vec2<double> &co2 = e->symedges[1].vert->co.approx;
- dissolvable_edges[i].len_squared = vec2<double>::distance_squared(co1, co2);
+ dissolvable_edges[i].len_squared = distance_squared(co1, co2);
i++;
}
}
@@ -2569,18 +2570,18 @@ template<typename T> void detect_holes(CDT_state<T> *cdt_state)
if (e->symedges[0].face->visit_index == e->symedges[1].face->visit_index) {
continue; /* Don't count hits on edges between faces in same region. */
}
- auto isect = vec2<T>::isect_seg_seg(ray_end.exact,
+ auto isect = isect_seg_seg<vec2<T>>(ray_end.exact,
mid.exact,
e->symedges[0].vert->co.exact,
e->symedges[1].vert->co.exact);
switch (isect.kind) {
- case vec2<T>::isect_result::LINE_LINE_CROSS: {
+ case isect_result<vec2<T>>::LINE_LINE_CROSS: {
hits++;
break;
}
- case vec2<T>::isect_result::LINE_LINE_EXACT:
- case vec2<T>::isect_result::LINE_LINE_NONE:
- case vec2<T>::isect_result::LINE_LINE_COLINEAR:
+ case isect_result<vec2<T>>::LINE_LINE_EXACT:
+ case isect_result<vec2<T>>::LINE_LINE_NONE:
+ case isect_result<vec2<T>>::LINE_LINE_COLINEAR:
break;
}
}
diff --git a/source/blender/blenlib/intern/math_boolean.cc b/source/blender/blenlib/intern/math_boolean.cc
index c16755868aa..0bae3c23f79 100644
--- a/source/blender/blenlib/intern/math_boolean.cc
+++ b/source/blender/blenlib/intern/math_boolean.cc
@@ -18,15 +18,10 @@
* \ingroup bli
*/
-#include "BLI_double2.hh"
-#include "BLI_double3.hh"
-#include "BLI_float2.hh"
-#include "BLI_float3.hh"
#include "BLI_hash.hh"
#include "BLI_math_boolean.hh"
#include "BLI_math_mpq.hh"
-#include "BLI_mpq2.hh"
-#include "BLI_mpq3.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_span.hh"
#include "BLI_utildefines.h"
diff --git a/source/blender/blenlib/intern/math_vec.cc b/source/blender/blenlib/intern/math_vec.cc
index 223c0e273f0..6fab6c9a383 100644
--- a/source/blender/blenlib/intern/math_vec.cc
+++ b/source/blender/blenlib/intern/math_vec.cc
@@ -18,89 +18,83 @@
* \ingroup bli
*/
-#include "BLI_double2.hh"
-#include "BLI_double3.hh"
-#include "BLI_float2.hh"
-#include "BLI_float3.hh"
#include "BLI_hash.hh"
-#include "BLI_math_mpq.hh"
-#include "BLI_mpq2.hh"
-#include "BLI_mpq3.hh"
+#include "BLI_math_vec_mpq_types.hh"
+#include "BLI_math_vector.hh"
#include "BLI_span.hh"
#include "BLI_utildefines.h"
-namespace blender {
+namespace blender::math {
-float2::isect_result float2::isect_seg_seg(const float2 &v1,
- const float2 &v2,
- const float2 &v3,
- const float2 &v4)
+template<>
+isect_result<float2> isect_seg_seg(const float2 &v1,
+ const float2 &v2,
+ const float2 &v3,
+ const float2 &v4)
{
- float2::isect_result ans;
+ isect_result<float2> ans;
float div = (v2[0] - v1[0]) * (v4[1] - v3[1]) - (v2[1] - v1[1]) * (v4[0] - v3[0]);
if (div == 0.0f) {
ans.lambda = 0.0f;
- ans.mu = 0.0f;
- ans.kind = float2::isect_result::LINE_LINE_COLINEAR;
+ ans.kind = isect_result<float2>::LINE_LINE_COLINEAR;
}
else {
ans.lambda = ((v1[1] - v3[1]) * (v4[0] - v3[0]) - (v1[0] - v3[0]) * (v4[1] - v3[1])) / div;
- ans.mu = ((v1[1] - v3[1]) * (v2[0] - v1[0]) - (v1[0] - v3[0]) * (v2[1] - v1[1])) / div;
- if (ans.lambda >= 0.0f && ans.lambda <= 1.0f && ans.mu >= 0.0f && ans.mu <= 1.0f) {
- if (ans.lambda == 0.0f || ans.lambda == 1.0f || ans.mu == 0.0f || ans.mu == 1.0f) {
- ans.kind = float2::isect_result::LINE_LINE_EXACT;
+ float mu = ((v1[1] - v3[1]) * (v2[0] - v1[0]) - (v1[0] - v3[0]) * (v2[1] - v1[1])) / div;
+ if (ans.lambda >= 0.0f && ans.lambda <= 1.0f && mu >= 0.0f && mu <= 1.0f) {
+ if (ans.lambda == 0.0f || ans.lambda == 1.0f || mu == 0.0f || mu == 1.0f) {
+ ans.kind = isect_result<float2>::LINE_LINE_EXACT;
}
else {
- ans.kind = float2::isect_result::LINE_LINE_CROSS;
+ ans.kind = isect_result<float2>::LINE_LINE_CROSS;
}
}
else {
- ans.kind = float2::isect_result::LINE_LINE_NONE;
+ ans.kind = isect_result<float2>::LINE_LINE_NONE;
}
}
return ans;
}
-double2::isect_result double2::isect_seg_seg(const double2 &v1,
- const double2 &v2,
- const double2 &v3,
- const double2 &v4)
+template<>
+isect_result<double2> isect_seg_seg(const double2 &v1,
+ const double2 &v2,
+ const double2 &v3,
+ const double2 &v4)
{
- double2::isect_result ans;
+ isect_result<double2> ans;
double div = (v2[0] - v1[0]) * (v4[1] - v3[1]) - (v2[1] - v1[1]) * (v4[0] - v3[0]);
if (div == 0.0) {
ans.lambda = 0.0;
- ans.kind = double2::isect_result::LINE_LINE_COLINEAR;
+ ans.kind = isect_result<double2>::LINE_LINE_COLINEAR;
}
else {
ans.lambda = ((v1[1] - v3[1]) * (v4[0] - v3[0]) - (v1[0] - v3[0]) * (v4[1] - v3[1])) / div;
double mu = ((v1[1] - v3[1]) * (v2[0] - v1[0]) - (v1[0] - v3[0]) * (v2[1] - v1[1])) / div;
if (ans.lambda >= 0.0 && ans.lambda <= 1.0 && mu >= 0.0 && mu <= 1.0) {
if (ans.lambda == 0.0 || ans.lambda == 1.0 || mu == 0.0 || mu == 1.0) {
- ans.kind = double2::isect_result::LINE_LINE_EXACT;
+ ans.kind = isect_result<double2>::LINE_LINE_EXACT;
}
else {
- ans.kind = double2::isect_result::LINE_LINE_CROSS;
+ ans.kind = isect_result<double2>::LINE_LINE_CROSS;
}
}
else {
- ans.kind = double2::isect_result::LINE_LINE_NONE;
+ ans.kind = isect_result<double2>::LINE_LINE_NONE;
}
}
return ans;
}
#ifdef WITH_GMP
-mpq2::isect_result mpq2::isect_seg_seg(const mpq2 &v1,
- const mpq2 &v2,
- const mpq2 &v3,
- const mpq2 &v4)
+template<>
+isect_result<mpq2> isect_seg_seg(const mpq2 &v1, const mpq2 &v2, const mpq2 &v3, const mpq2 &v4)
{
- mpq2::isect_result ans;
+ isect_result<mpq2> ans;
mpq_class div = (v2[0] - v1[0]) * (v4[1] - v3[1]) - (v2[1] - v1[1]) * (v4[0] - v3[0]);
if (div == 0.0) {
ans.lambda = 0.0;
- ans.kind = mpq2::isect_result::LINE_LINE_COLINEAR;
+ ans.kind = isect_result<mpq2>::LINE_LINE_COLINEAR;
}
else {
ans.lambda = ((v1[1] - v3[1]) * (v4[0] - v3[0]) - (v1[0] - v3[0]) * (v4[1] - v3[1])) / div;
@@ -109,66 +103,21 @@ mpq2::isect_result mpq2::isect_seg_seg(const mpq2 &v1,
if (ans.lambda >= 0 && ans.lambda <= 1 &&
((div > 0 && mudiv >= 0 && mudiv <= div) || (div < 0 && mudiv <= 0 && mudiv >= div))) {
if (ans.lambda == 0 || ans.lambda == 1 || mudiv == 0 || mudiv == div) {
- ans.kind = mpq2::isect_result::LINE_LINE_EXACT;
+ ans.kind = isect_result<mpq2>::LINE_LINE_EXACT;
}
else {
- ans.kind = mpq2::isect_result::LINE_LINE_CROSS;
+ ans.kind = isect_result<mpq2>::LINE_LINE_CROSS;
}
}
else {
- ans.kind = mpq2::isect_result::LINE_LINE_NONE;
+ ans.kind = isect_result<mpq2>::LINE_LINE_NONE;
}
}
return ans;
}
#endif
-double3 double3::cross_poly(Span<double3> poly)
-{
- /* Newell's Method. */
- int nv = static_cast<int>(poly.size());
- if (nv < 3) {
- return double3(0, 0, 0);
- }
- const double3 *v_prev = &poly[nv - 1];
- const double3 *v_curr = &poly[0];
- double3 n(0, 0, 0);
- for (int i = 0; i < nv;) {
- n[0] = n[0] + ((*v_prev)[1] - (*v_curr)[1]) * ((*v_prev)[2] + (*v_curr)[2]);
- n[1] = n[1] + ((*v_prev)[2] - (*v_curr)[2]) * ((*v_prev)[0] + (*v_curr)[0]);
- n[2] = n[2] + ((*v_prev)[0] - (*v_curr)[0]) * ((*v_prev)[1] + (*v_curr)[1]);
- v_prev = v_curr;
- ++i;
- if (i < nv) {
- v_curr = &poly[i];
- }
- }
- return n;
-}
-
#ifdef WITH_GMP
-mpq3 mpq3::cross_poly(Span<mpq3> poly)
-{
- /* Newell's Method. */
- int nv = static_cast<int>(poly.size());
- if (nv < 3) {
- return mpq3(0);
- }
- const mpq3 *v_prev = &poly[nv - 1];
- const mpq3 *v_curr = &poly[0];
- mpq3 n(0);
- for (int i = 0; i < nv;) {
- n[0] = n[0] + ((*v_prev)[1] - (*v_curr)[1]) * ((*v_prev)[2] + (*v_curr)[2]);
- n[1] = n[1] + ((*v_prev)[2] - (*v_curr)[2]) * ((*v_prev)[0] + (*v_curr)[0]);
- n[2] = n[2] + ((*v_prev)[0] - (*v_curr)[0]) * ((*v_prev)[1] + (*v_curr)[1]);
- v_prev = v_curr;
- ++i;
- if (i < nv) {
- v_curr = &poly[i];
- }
- }
- return n;
-}
uint64_t hash_mpq_class(const mpq_class &value)
{
@@ -176,20 +125,6 @@ uint64_t hash_mpq_class(const mpq_class &value)
return get_default_hash(static_cast<float>(value.get_d()));
}
-uint64_t mpq2::hash() const
-{
- uint64_t hashx = hash_mpq_class(this->x);
- uint64_t hashy = hash_mpq_class(this->y);
- return hashx ^ (hashy * 33);
-}
-
-uint64_t mpq3::hash() const
-{
- uint64_t hashx = hash_mpq_class(this->x);
- uint64_t hashy = hash_mpq_class(this->y);
- uint64_t hashz = hash_mpq_class(this->z);
- return hashx ^ (hashy * 33) ^ (hashz * 33 * 37);
-}
#endif
-} // namespace blender
+} // namespace blender::math
diff --git a/source/blender/blenlib/intern/mesh_boolean.cc b/source/blender/blenlib/intern/mesh_boolean.cc
index ce4db0c6b9d..a3eae1896d3 100644
--- a/source/blender/blenlib/intern/mesh_boolean.cc
+++ b/source/blender/blenlib/intern/mesh_boolean.cc
@@ -28,8 +28,6 @@
# include "BLI_array.hh"
# include "BLI_assert.h"
# include "BLI_delaunay_2d.h"
-# include "BLI_double3.hh"
-# include "BLI_float3.hh"
# include "BLI_hash.hh"
# include "BLI_kdopbvh.h"
# include "BLI_map.hh"
@@ -37,8 +35,9 @@
# include "BLI_math_boolean.hh"
# include "BLI_math_geom.h"
# include "BLI_math_mpq.hh"
+# include "BLI_math_vec_mpq_types.hh"
+# include "BLI_math_vec_types.hh"
# include "BLI_mesh_intersect.hh"
-# include "BLI_mpq3.hh"
# include "BLI_set.hh"
# include "BLI_span.hh"
# include "BLI_stack.hh"
@@ -1633,13 +1632,13 @@ static Edge find_good_sorting_edge(const Vert *testp,
ordinate[axis_next] = -abscissa[axis];
ordinate[axis_next_next] = 0;
/* By construction, dot(abscissa, ordinate) == 0, so they are perpendicular. */
- mpq3 normal = mpq3::cross(abscissa, ordinate);
+ mpq3 normal = math::cross(abscissa, ordinate);
if (dbg_level > 0) {
std::cout << "abscissa = " << abscissa << "\n";
std::cout << "ordinate = " << ordinate << "\n";
std::cout << "normal = " << normal << "\n";
}
- mpq_class nlen2 = normal.length_squared();
+ mpq_class nlen2 = math::length_squared(normal);
mpq_class max_abs_slope = -1;
Edge esort;
const Vector<Edge> &edges = tmtopo.vert_edges(closestp);
@@ -1648,12 +1647,12 @@ static Edge find_good_sorting_edge(const Vert *testp,
const mpq3 &co_other = v_other->co_exact;
mpq3 evec = co_other - co_closest;
/* Get projection of evec onto plane of abscissa and ordinate. */
- mpq3 proj_evec = evec - (mpq3::dot(evec, normal) / nlen2) * normal;
+ mpq3 proj_evec = evec - (math::dot(evec, normal) / nlen2) * normal;
/* The projection calculations along the abscissa and ordinate should
* be scaled by 1/abscissa and 1/ordinate respectively,
* but we can skip: it won't affect which `evec` has the maximum slope. */
- mpq_class evec_a = mpq3::dot(proj_evec, abscissa);
- mpq_class evec_o = mpq3::dot(proj_evec, ordinate);
+ mpq_class evec_a = math::dot(proj_evec, abscissa);
+ mpq_class evec_o = math::dot(proj_evec, ordinate);
if (dbg_level > 0) {
std::cout << "e = " << e << "\n";
std::cout << "v_other = " << v_other << "\n";
@@ -1791,8 +1790,8 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p,
ap = p;
ap -= a;
- mpq_class d1 = mpq3::dot_with_buffer(ab, ap, m);
- mpq_class d2 = mpq3::dot_with_buffer(ac, ap, m);
+ mpq_class d1 = math::dot_with_buffer(ab, ap, m);
+ mpq_class d2 = math::dot_with_buffer(ac, ap, m);
if (d1 <= 0 && d2 <= 0) {
/* Barycentric coordinates (1,0,0). */
*r_edge = -1;
@@ -1800,13 +1799,13 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p,
if (dbg_level > 0) {
std::cout << " answer = a\n";
}
- return mpq3::distance_squared_with_buffer(p, a, m);
+ return math::distance_squared_with_buffer(p, a, m);
}
/* Check if p in vertex region outside b. */
bp = p;
bp -= b;
- mpq_class d3 = mpq3::dot_with_buffer(ab, bp, m);
- mpq_class d4 = mpq3::dot_with_buffer(ac, bp, m);
+ mpq_class d3 = math::dot_with_buffer(ab, bp, m);
+ mpq_class d4 = math::dot_with_buffer(ac, bp, m);
if (d3 >= 0 && d4 <= d3) {
/* Barycentric coordinates (0,1,0). */
*r_edge = -1;
@@ -1814,7 +1813,7 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p,
if (dbg_level > 0) {
std::cout << " answer = b\n";
}
- return mpq3::distance_squared_with_buffer(p, b, m);
+ return math::distance_squared_with_buffer(p, b, m);
}
/* Check if p in region of ab. */
mpq_class vc = d1 * d4 - d3 * d2;
@@ -1829,13 +1828,13 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p,
if (dbg_level > 0) {
std::cout << " answer = on ab at " << r << "\n";
}
- return mpq3::distance_squared_with_buffer(p, r, m);
+ return math::distance_squared_with_buffer(p, r, m);
}
/* Check if p in vertex region outside c. */
cp = p;
cp -= c;
- mpq_class d5 = mpq3::dot_with_buffer(ab, cp, m);
- mpq_class d6 = mpq3::dot_with_buffer(ac, cp, m);
+ mpq_class d5 = math::dot_with_buffer(ab, cp, m);
+ mpq_class d6 = math::dot_with_buffer(ac, cp, m);
if (d6 >= 0 && d5 <= d6) {
/* Barycentric coordinates (0,0,1). */
*r_edge = -1;
@@ -1843,7 +1842,7 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p,
if (dbg_level > 0) {
std::cout << " answer = c\n";
}
- return mpq3::distance_squared_with_buffer(p, c, m);
+ return math::distance_squared_with_buffer(p, c, m);
}
/* Check if p in edge region of ac. */
mpq_class vb = d5 * d2 - d1 * d6;
@@ -1858,7 +1857,7 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p,
if (dbg_level > 0) {
std::cout << " answer = on ac at " << r << "\n";
}
- return mpq3::distance_squared_with_buffer(p, r, m);
+ return math::distance_squared_with_buffer(p, r, m);
}
/* Check if p in edge region of bc. */
mpq_class va = d3 * d6 - d5 * d4;
@@ -1874,7 +1873,7 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p,
if (dbg_level > 0) {
std::cout << " answer = on bc at " << r << "\n";
}
- return mpq3::distance_squared_with_buffer(p, r, m);
+ return math::distance_squared_with_buffer(p, r, m);
}
/* p inside face region. Compute barycentric coordinates (u,v,w). */
mpq_class denom = 1 / (va + vb + vc);
@@ -1890,7 +1889,7 @@ static mpq_class closest_on_tri_to_point(const mpq3 &p,
if (dbg_level > 0) {
std::cout << " answer = inside at " << r << "\n";
}
- return mpq3::distance_squared_with_buffer(p, r, m);
+ return math::distance_squared_with_buffer(p, r, m);
}
static float closest_on_tri_to_point_float_dist_squared(const float3 &p,
@@ -2610,7 +2609,7 @@ static void test_tri_inside_shapes(const IMesh &tm,
double3 test_point = calc_point_inside_tri_db(tri_test);
/* Offset the test point a tiny bit in the tri_test normal direction. */
tri_test.populate_plane(false);
- double3 norm = tri_test.plane->norm.normalized();
+ double3 norm = math::normalize(tri_test.plane->norm);
const double offset_amount = 1e-5;
double3 offset_test_point = test_point + offset_amount * norm;
if (dbg_level > 0) {
@@ -3002,7 +3001,7 @@ static void init_face_merge_state(FaceMergeState *fms,
std::cout << "process tri = " << &tri << "\n";
}
BLI_assert(tri.plane_populated());
- if (double3::dot(norm, tri.plane->norm) <= 0.0) {
+ if (math::dot(norm, tri.plane->norm) <= 0.0) {
if (dbg_level > 0) {
std::cout << "triangle has wrong orientation, skipping\n";
}
@@ -3027,7 +3026,7 @@ static void init_face_merge_state(FaceMergeState *fms,
}
if (me_index == -1) {
double3 vec = new_me.v2->co - new_me.v1->co;
- new_me.len_squared = vec.length_squared();
+ new_me.len_squared = math::length_squared(vec);
new_me.orig = tri.edge_orig[i];
new_me.is_intersect = tri.is_intersect[i];
new_me.dissolvable = (new_me.orig == NO_INDEX && !new_me.is_intersect);
@@ -3267,7 +3266,7 @@ static Vector<Face *> merge_tris_for_face(Vector<int> tris,
bool done = false;
double3 first_tri_normal = tm.face(tris[0])->plane->norm;
double3 second_tri_normal = tm.face(tris[1])->plane->norm;
- if (tris.size() == 2 && double3::dot(first_tri_normal, second_tri_normal) > 0.0) {
+ if (tris.size() == 2 && math::dot(first_tri_normal, second_tri_normal) > 0.0) {
/* Is this a case where quad with one diagonal remained unchanged?
* Worth special handling because this case will be very common. */
Face &tri1 = *tm.face(tris[0]);
@@ -3332,7 +3331,7 @@ static bool approx_in_line(const double3 &a, const double3 &b, const double3 &c)
{
double3 vec1 = b - a;
double3 vec2 = c - b;
- double cos_ang = double3::dot(vec1.normalized(), vec2.normalized());
+ double cos_ang = math::dot(math::normalize(vec1), math::normalize(vec2));
return fabs(cos_ang - 1.0) < 1e-4;
}
diff --git a/source/blender/blenlib/intern/mesh_intersect.cc b/source/blender/blenlib/intern/mesh_intersect.cc
index 1f150137ba3..982759ffcff 100644
--- a/source/blender/blenlib/intern/mesh_intersect.cc
+++ b/source/blender/blenlib/intern/mesh_intersect.cc
@@ -30,15 +30,13 @@
# include "BLI_array.hh"
# include "BLI_assert.h"
# include "BLI_delaunay_2d.h"
-# include "BLI_double3.hh"
-# include "BLI_float3.hh"
# include "BLI_hash.hh"
# include "BLI_kdopbvh.h"
# include "BLI_map.hh"
# include "BLI_math_boolean.hh"
# include "BLI_math_mpq.hh"
-# include "BLI_mpq2.hh"
-# include "BLI_mpq3.hh"
+# include "BLI_math_vec_mpq_types.hh"
+# include "BLI_math_vec_types.hh"
# include "BLI_polyfill_2d.h"
# include "BLI_set.hh"
# include "BLI_span.hh"
@@ -198,14 +196,14 @@ void Face::populate_plane(bool need_exact)
for (int i : index_range()) {
co[i] = vert[i]->co_exact;
}
- normal_exact = mpq3::cross_poly(co);
+ normal_exact = math::cross_poly(co.as_span());
}
else {
mpq3 tr02 = vert[0]->co_exact - vert[2]->co_exact;
mpq3 tr12 = vert[1]->co_exact - vert[2]->co_exact;
- normal_exact = mpq3::cross(tr02, tr12);
+ normal_exact = math::cross(tr02, tr12);
}
- mpq_class d_exact = -mpq3::dot(normal_exact, vert[0]->co_exact);
+ mpq_class d_exact = -math::dot(normal_exact, vert[0]->co_exact);
plane = new Plane(normal_exact, d_exact);
}
else {
@@ -215,14 +213,14 @@ void Face::populate_plane(bool need_exact)
for (int i : index_range()) {
co[i] = vert[i]->co;
}
- normal = double3::cross_poly(co);
+ normal = math::cross_poly(co.as_span());
}
else {
double3 tr02 = vert[0]->co - vert[2]->co;
double3 tr12 = vert[1]->co - vert[2]->co;
- normal = double3::cross_high_precision(tr02, tr12);
+ normal = math::cross(tr02, tr12);
}
- double d = -double3::dot(normal, vert[0]->co);
+ double d = -math::dot(normal, vert[0]->co);
plane = new Plane(normal, d);
}
}
@@ -1098,15 +1096,15 @@ static mpq2 project_3d_to_2d(const mpq3 &p3d, int proj_axis)
*/
static double supremum_dot_cross(const double3 &a, const double3 &b)
{
- double3 abs_a = double3::abs(a);
- double3 abs_b = double3::abs(b);
+ double3 abs_a = math::abs(a);
+ double3 abs_b = math::abs(b);
double3 c;
/* This is dot(cross(a, b), cross(a,b)) but using absolute values for a and b
* and always using + when operation is + or -. */
c[0] = abs_a[1] * abs_b[2] + abs_a[2] * abs_b[1];
c[1] = abs_a[2] * abs_b[0] + abs_a[0] * abs_b[2];
c[2] = abs_a[0] * abs_b[1] + abs_a[1] * abs_b[0];
- return double3::dot(c, c);
+ return math::dot(c, c);
}
/* The index of dot when inputs are plane_coords with index 1 is much higher.
@@ -1143,11 +1141,11 @@ static int filter_plane_side(const double3 &p,
const double3 &abs_plane_p,
const double3 &abs_plane_no)
{
- double d = double3::dot(p - plane_p, plane_no);
+ double d = math::dot(p - plane_p, plane_no);
if (d == 0.0) {
return 0;
}
- double supremum = double3::dot(abs_p + abs_plane_p, abs_plane_no);
+ double supremum = math::dot(abs_p + abs_plane_p, abs_plane_no);
double err_bound = supremum * index_plane_side * DBL_EPSILON;
if (fabs(d) > err_bound) {
return d > 0 ? 1 : -1;
@@ -1178,9 +1176,9 @@ static inline mpq3 tti_interp(
ab -= b;
ac = a;
ac -= c;
- mpq_class den = mpq3::dot_with_buffer(ab, n, dotbuf);
+ mpq_class den = math::dot_with_buffer(ab, n, dotbuf);
BLI_assert(den != 0);
- mpq_class alpha = mpq3::dot_with_buffer(ac, n, dotbuf) / den;
+ mpq_class alpha = math::dot_with_buffer(ac, n, dotbuf) / den;
return a - alpha * ab;
}
@@ -1209,7 +1207,7 @@ static inline int tti_above(const mpq3 &a,
n.y = ba.z * ca.x - ba.x * ca.z;
n.z = ba.x * ca.y - ba.y * ca.x;
- return sgn(mpq3::dot_with_buffer(ad, n, dotbuf));
+ return sgn(math::dot_with_buffer(ad, n, dotbuf));
}
/**
@@ -1428,11 +1426,11 @@ static ITT_value intersect_tri_tri(const IMesh &tm, int t1, int t2)
const double3 &d_r2 = vr2->co;
const double3 &d_n2 = tri2.plane->norm;
- const double3 &abs_d_p1 = double3::abs(d_p1);
- const double3 &abs_d_q1 = double3::abs(d_q1);
- const double3 &abs_d_r1 = double3::abs(d_r1);
- const double3 &abs_d_r2 = double3::abs(d_r2);
- const double3 &abs_d_n2 = double3::abs(d_n2);
+ const double3 &abs_d_p1 = math::abs(d_p1);
+ const double3 &abs_d_q1 = math::abs(d_q1);
+ const double3 &abs_d_r1 = math::abs(d_r1);
+ const double3 &abs_d_r2 = math::abs(d_r2);
+ const double3 &abs_d_n2 = math::abs(d_n2);
int sp1 = filter_plane_side(d_p1, d_r2, d_n2, abs_d_p1, abs_d_r2, abs_d_n2);
int sq1 = filter_plane_side(d_q1, d_r2, d_n2, abs_d_q1, abs_d_r2, abs_d_n2);
@@ -1448,9 +1446,9 @@ static ITT_value intersect_tri_tri(const IMesh &tm, int t1, int t2)
}
const double3 &d_n1 = tri1.plane->norm;
- const double3 &abs_d_p2 = double3::abs(d_p2);
- const double3 &abs_d_q2 = double3::abs(d_q2);
- const double3 &abs_d_n1 = double3::abs(d_n1);
+ const double3 &abs_d_p2 = math::abs(d_p2);
+ const double3 &abs_d_q2 = math::abs(d_q2);
+ const double3 &abs_d_n1 = math::abs(d_n1);
int sp2 = filter_plane_side(d_p2, d_r1, d_n1, abs_d_p2, abs_d_r1, abs_d_n1);
int sq2 = filter_plane_side(d_q2, d_r1, d_n1, abs_d_q2, abs_d_r1, abs_d_n1);
@@ -1477,17 +1475,17 @@ static ITT_value intersect_tri_tri(const IMesh &tm, int t1, int t2)
if (sp1 == 0) {
buf[0] = p1;
buf[0] -= r2;
- sp1 = sgn(mpq3::dot_with_buffer(buf[0], n2, buf[1]));
+ sp1 = sgn(math::dot_with_buffer(buf[0], n2, buf[1]));
}
if (sq1 == 0) {
buf[0] = q1;
buf[0] -= r2;
- sq1 = sgn(mpq3::dot_with_buffer(buf[0], n2, buf[1]));
+ sq1 = sgn(math::dot_with_buffer(buf[0], n2, buf[1]));
}
if (sr1 == 0) {
buf[0] = r1;
buf[0] -= r2;
- sr1 = sgn(mpq3::dot_with_buffer(buf[0], n2, buf[1]));
+ sr1 = sgn(math::dot_with_buffer(buf[0], n2, buf[1]));
}
if (dbg_level > 1) {
@@ -1509,17 +1507,17 @@ static ITT_value intersect_tri_tri(const IMesh &tm, int t1, int t2)
if (sp2 == 0) {
buf[0] = p2;
buf[0] -= r1;
- sp2 = sgn(mpq3::dot_with_buffer(buf[0], n1, buf[1]));
+ sp2 = sgn(math::dot_with_buffer(buf[0], n1, buf[1]));
}
if (sq2 == 0) {
buf[0] = q2;
buf[0] -= r1;
- sq2 = sgn(mpq3::dot_with_buffer(buf[0], n1, buf[1]));
+ sq2 = sgn(math::dot_with_buffer(buf[0], n1, buf[1]));
}
if (sr2 == 0) {
buf[0] = r2;
buf[0] -= r1;
- sr2 = sgn(mpq3::dot_with_buffer(buf[0], n1, buf[1]));
+ sr2 = sgn(math::dot_with_buffer(buf[0], n1, buf[1]));
}
if (dbg_level > 1) {
@@ -1721,7 +1719,7 @@ static CDT_data prepare_cdt_input(const IMesh &tm, int t, const Vector<ITT_value
BLI_assert(tm.face(t)->plane_populated());
ans.t_plane = tm.face(t)->plane;
BLI_assert(ans.t_plane->exact_populated());
- ans.proj_axis = mpq3::dominant_axis(ans.t_plane->norm_exact);
+ ans.proj_axis = math::dominant_axis(ans.t_plane->norm_exact);
prepare_need_tri(ans, tm, t);
for (const ITT_value &itt : itts) {
switch (itt.kind) {
@@ -1757,7 +1755,7 @@ static CDT_data prepare_cdt_input_for_cluster(const IMesh &tm,
BLI_assert(tm.face(t0)->plane_populated());
ans.t_plane = tm.face(t0)->plane;
BLI_assert(ans.t_plane->exact_populated());
- ans.proj_axis = mpq3::dominant_axis(ans.t_plane->norm_exact);
+ ans.proj_axis = math::dominant_axis(ans.t_plane->norm_exact);
for (const int t : cl) {
prepare_need_tri(ans, tm, t);
}
@@ -2004,9 +2002,9 @@ static bool is_quad_flip_first_third(const double3 &v1,
const double3 &normal)
{
double3 dir_v3v1 = v3 - v1;
- double3 tangent = double3::cross_high_precision(dir_v3v1, normal);
- double dot = double3::dot(v1, tangent);
- return (double3::dot(v4, tangent) >= dot) || (double3::dot(v2, tangent) <= dot);
+ double3 tangent = math::cross(dir_v3v1, normal);
+ double dot = math::dot(v1, tangent);
+ return (math::dot(v4, tangent) >= dot) || (math::dot(v2, tangent) <= dot);
}
/**
@@ -2124,7 +2122,7 @@ static Array<Face *> exact_triangulate_poly(Face *f, IMeshArena *arena)
f->populate_plane(false);
}
const double3 &poly_normal = f->plane->norm;
- int axis = double3::dominant_axis(poly_normal);
+ int axis = math::dominant_axis(poly_normal);
/* If project down y axis as opposed to x or z, the orientation
* of the polygon will be reversed.
* Yet another reversal happens if the poly normal in the dominant
@@ -2203,15 +2201,15 @@ static bool face_is_degenerate(const Face *f)
}
double3 da = v2->co - v0->co;
double3 db = v2->co - v1->co;
- double3 dab = double3::cross_high_precision(da, db);
- double dab_length_squared = dab.length_squared();
+ double3 dab = math::cross(da, db);
+ double dab_length_squared = math::length_squared(dab);
double err_bound = supremum_dot_cross(dab, dab) * index_dot_cross * DBL_EPSILON;
if (dab_length_squared > err_bound) {
return false;
}
mpq3 a = v2->co_exact - v0->co_exact;
mpq3 b = v2->co_exact - v1->co_exact;
- mpq3 ab = mpq3::cross(a, b);
+ mpq3 ab = math::cross(a, b);
if (ab.x == 0 && ab.y == 0 && ab.z == 0) {
return true;
}
@@ -2231,8 +2229,8 @@ static bool any_degenerate_tris_fast(const Array<Face *> triangulation)
}
double3 da = v2->co - v0->co;
double3 db = v2->co - v1->co;
- double da_length_squared = da.length_squared();
- double db_length_squared = db.length_squared();
+ double da_length_squared = math::length_squared(da);
+ double db_length_squared = math::length_squared(db);
if (da_length_squared == 0.0 || db_length_squared == 0.0) {
return true;
}
@@ -2240,8 +2238,8 @@ static bool any_degenerate_tris_fast(const Array<Face *> triangulation)
* The triangle is almost degenerate if sin t is almost 0.
* sin^2 t = |da x db|^2 / (|da|^2 |db|^2)
*/
- double3 dab = double3::cross_high_precision(da, db);
- double dab_length_squared = dab.length_squared();
+ double3 dab = math::cross(da, db);
+ double dab_length_squared = math::length_squared(dab);
double sin_squared_t = dab_length_squared / (da_length_squared * db_length_squared);
if (sin_squared_t < 1e-8) {
return true;
diff --git a/source/blender/blenlib/intern/noise.cc b/source/blender/blenlib/intern/noise.cc
index a6ad18801fd..3460c1284fc 100644
--- a/source/blender/blenlib/intern/noise.cc
+++ b/source/blender/blenlib/intern/noise.cc
@@ -50,9 +50,7 @@
#include <cmath>
#include <cstdint>
-#include "BLI_float2.hh"
-#include "BLI_float3.hh"
-#include "BLI_float4.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_math_base_safe.h"
#include "BLI_noise.hh"
#include "BLI_utildefines.h"
@@ -1469,7 +1467,7 @@ void voronoi_smooth_f1(const float w,
correctionFactor /= 1.0f + 3.0f * smoothness;
if (r_color != nullptr) {
const float3 cellColor = hash_float_to_float3(cellPosition + cellOffset);
- smoothColor = float3::interpolate(smoothColor, cellColor, h) - correctionFactor;
+ smoothColor = math::interpolate(smoothColor, cellColor, h) - correctionFactor;
}
if (r_w != nullptr) {
smoothPosition = mix(smoothPosition, pointPosition, h) - correctionFactor;
@@ -1592,7 +1590,7 @@ static float voronoi_distance(const float2 a,
{
switch (metric) {
case NOISE_SHD_VORONOI_EUCLIDEAN:
- return float2::distance(a, b);
+ return math::distance(a, b);
case NOISE_SHD_VORONOI_MANHATTAN:
return fabsf(a.x - b.x) + fabsf(a.y - b.y);
case NOISE_SHD_VORONOI_CHEBYCHEV:
@@ -1615,7 +1613,7 @@ void voronoi_f1(const float2 coord,
float3 *r_color,
float2 *r_position)
{
- const float2 cellPosition = float2::floor(coord);
+ const float2 cellPosition = math::floor(coord);
const float2 localPosition = coord - cellPosition;
float minDistance = 8.0f;
@@ -1654,7 +1652,7 @@ void voronoi_smooth_f1(const float2 coord,
float3 *r_color,
float2 *r_position)
{
- const float2 cellPosition = float2::floor(coord);
+ const float2 cellPosition = math::floor(coord);
const float2 localPosition = coord - cellPosition;
const float smoothness_clamped = max_ff(smoothness, FLT_MIN);
@@ -1676,11 +1674,10 @@ void voronoi_smooth_f1(const float2 coord,
correctionFactor /= 1.0f + 3.0f * smoothness;
if (r_color != nullptr) {
const float3 cellColor = hash_float_to_float3(cellPosition + cellOffset);
- smoothColor = float3::interpolate(smoothColor, cellColor, h) - correctionFactor;
+ smoothColor = math::interpolate(smoothColor, cellColor, h) - correctionFactor;
}
if (r_position != nullptr) {
- smoothPosition = float2::interpolate(smoothPosition, pointPosition, h) -
- correctionFactor;
+ smoothPosition = math::interpolate(smoothPosition, pointPosition, h) - correctionFactor;
}
}
}
@@ -1704,7 +1701,7 @@ void voronoi_f2(const float2 coord,
float3 *r_color,
float2 *r_position)
{
- const float2 cellPosition = float2::floor(coord);
+ const float2 cellPosition = math::floor(coord);
const float2 localPosition = coord - cellPosition;
float distanceF1 = 8.0f;
@@ -1748,7 +1745,7 @@ void voronoi_f2(const float2 coord,
void voronoi_distance_to_edge(const float2 coord, const float randomness, float *r_distance)
{
- const float2 cellPosition = float2::floor(coord);
+ const float2 cellPosition = math::floor(coord);
const float2 localPosition = coord - cellPosition;
float2 vectorToClosest = float2(0.0f, 0.0f);
@@ -1777,7 +1774,7 @@ void voronoi_distance_to_edge(const float2 coord, const float randomness, float
const float2 perpendicularToEdge = vectorToPoint - vectorToClosest;
if (dot_v2v2(perpendicularToEdge, perpendicularToEdge) > 0.0001f) {
const float distanceToEdge = dot_v2v2((vectorToClosest + vectorToPoint) / 2.0f,
- perpendicularToEdge.normalized());
+ math::normalize(perpendicularToEdge));
minDistance = std::min(minDistance, distanceToEdge);
}
}
@@ -1787,7 +1784,7 @@ void voronoi_distance_to_edge(const float2 coord, const float randomness, float
void voronoi_n_sphere_radius(const float2 coord, const float randomness, float *r_radius)
{
- const float2 cellPosition = float2::floor(coord);
+ const float2 cellPosition = math::floor(coord);
const float2 localPosition = coord - cellPosition;
float2 closestPoint = float2(0.0f, 0.0f);
@@ -1798,7 +1795,7 @@ void voronoi_n_sphere_radius(const float2 coord, const float randomness, float *
const float2 cellOffset = float2(i, j);
const float2 pointPosition = cellOffset +
hash_float_to_float2(cellPosition + cellOffset) * randomness;
- const float distanceToPoint = float2::distance(pointPosition, localPosition);
+ const float distanceToPoint = math::distance(pointPosition, localPosition);
if (distanceToPoint < minDistance) {
minDistance = distanceToPoint;
closestPoint = pointPosition;
@@ -1817,14 +1814,14 @@ void voronoi_n_sphere_radius(const float2 coord, const float randomness, float *
const float2 cellOffset = float2(i, j) + closestPointOffset;
const float2 pointPosition = cellOffset +
hash_float_to_float2(cellPosition + cellOffset) * randomness;
- const float distanceToPoint = float2::distance(closestPoint, pointPosition);
+ const float distanceToPoint = math::distance(closestPoint, pointPosition);
if (distanceToPoint < minDistance) {
minDistance = distanceToPoint;
closestPointToClosestPoint = pointPosition;
}
}
}
- *r_radius = float2::distance(closestPointToClosestPoint, closestPoint) / 2.0f;
+ *r_radius = math::distance(closestPointToClosestPoint, closestPoint) / 2.0f;
}
/* **** 3D Voronoi **** */
@@ -1836,7 +1833,7 @@ static float voronoi_distance(const float3 a,
{
switch (metric) {
case NOISE_SHD_VORONOI_EUCLIDEAN:
- return float3::distance(a, b);
+ return math::distance(a, b);
case NOISE_SHD_VORONOI_MANHATTAN:
return fabsf(a.x - b.x) + fabsf(a.y - b.y) + fabsf(a.z - b.z);
case NOISE_SHD_VORONOI_CHEBYCHEV:
@@ -1860,7 +1857,7 @@ void voronoi_f1(const float3 coord,
float3 *r_color,
float3 *r_position)
{
- const float3 cellPosition = float3::floor(coord);
+ const float3 cellPosition = math::floor(coord);
const float3 localPosition = coord - cellPosition;
float minDistance = 8.0f;
@@ -1902,7 +1899,7 @@ void voronoi_smooth_f1(const float3 coord,
float3 *r_color,
float3 *r_position)
{
- const float3 cellPosition = float3::floor(coord);
+ const float3 cellPosition = math::floor(coord);
const float3 localPosition = coord - cellPosition;
const float smoothness_clamped = max_ff(smoothness, FLT_MIN);
@@ -1925,10 +1922,10 @@ void voronoi_smooth_f1(const float3 coord,
correctionFactor /= 1.0f + 3.0f * smoothness;
if (r_color != nullptr) {
const float3 cellColor = hash_float_to_float3(cellPosition + cellOffset);
- smoothColor = float3::interpolate(smoothColor, cellColor, h) - correctionFactor;
+ smoothColor = math::interpolate(smoothColor, cellColor, h) - correctionFactor;
}
if (r_position != nullptr) {
- smoothPosition = float3::interpolate(smoothPosition, pointPosition, h) -
+ smoothPosition = math::interpolate(smoothPosition, pointPosition, h) -
correctionFactor;
}
}
@@ -1954,7 +1951,7 @@ void voronoi_f2(const float3 coord,
float3 *r_color,
float3 *r_position)
{
- const float3 cellPosition = float3::floor(coord);
+ const float3 cellPosition = math::floor(coord);
const float3 localPosition = coord - cellPosition;
float distanceF1 = 8.0f;
@@ -2000,7 +1997,7 @@ void voronoi_f2(const float3 coord,
void voronoi_distance_to_edge(const float3 coord, const float randomness, float *r_distance)
{
- const float3 cellPosition = float3::floor(coord);
+ const float3 cellPosition = math::floor(coord);
const float3 localPosition = coord - cellPosition;
float3 vectorToClosest = float3(0.0f, 0.0f, 0.0f);
@@ -2032,7 +2029,7 @@ void voronoi_distance_to_edge(const float3 coord, const float randomness, float
const float3 perpendicularToEdge = vectorToPoint - vectorToClosest;
if (dot_v3v3(perpendicularToEdge, perpendicularToEdge) > 0.0001f) {
const float distanceToEdge = dot_v3v3((vectorToClosest + vectorToPoint) / 2.0f,
- perpendicularToEdge.normalized());
+ math::normalize(perpendicularToEdge));
minDistance = std::min(minDistance, distanceToEdge);
}
}
@@ -2043,7 +2040,7 @@ void voronoi_distance_to_edge(const float3 coord, const float randomness, float
void voronoi_n_sphere_radius(const float3 coord, const float randomness, float *r_radius)
{
- const float3 cellPosition = float3::floor(coord);
+ const float3 cellPosition = math::floor(coord);
const float3 localPosition = coord - cellPosition;
float3 closestPoint = float3(0.0f, 0.0f, 0.0f);
@@ -2055,7 +2052,7 @@ void voronoi_n_sphere_radius(const float3 coord, const float randomness, float *
const float3 cellOffset = float3(i, j, k);
const float3 pointPosition = cellOffset +
hash_float_to_float3(cellPosition + cellOffset) * randomness;
- const float distanceToPoint = float3::distance(pointPosition, localPosition);
+ const float distanceToPoint = math::distance(pointPosition, localPosition);
if (distanceToPoint < minDistance) {
minDistance = distanceToPoint;
closestPoint = pointPosition;
@@ -2076,7 +2073,7 @@ void voronoi_n_sphere_radius(const float3 coord, const float randomness, float *
const float3 cellOffset = float3(i, j, k) + closestPointOffset;
const float3 pointPosition = cellOffset +
hash_float_to_float3(cellPosition + cellOffset) * randomness;
- const float distanceToPoint = float3::distance(closestPoint, pointPosition);
+ const float distanceToPoint = math::distance(closestPoint, pointPosition);
if (distanceToPoint < minDistance) {
minDistance = distanceToPoint;
closestPointToClosestPoint = pointPosition;
@@ -2084,7 +2081,7 @@ void voronoi_n_sphere_radius(const float3 coord, const float randomness, float *
}
}
}
- *r_radius = float3::distance(closestPointToClosestPoint, closestPoint) / 2.0f;
+ *r_radius = math::distance(closestPointToClosestPoint, closestPoint) / 2.0f;
}
/* **** 4D Voronoi **** */
@@ -2096,7 +2093,7 @@ static float voronoi_distance(const float4 a,
{
switch (metric) {
case NOISE_SHD_VORONOI_EUCLIDEAN:
- return float4::distance(a, b);
+ return math::distance(a, b);
case NOISE_SHD_VORONOI_MANHATTAN:
return fabsf(a.x - b.x) + fabsf(a.y - b.y) + fabsf(a.z - b.z) + fabsf(a.w - b.w);
case NOISE_SHD_VORONOI_CHEBYCHEV:
@@ -2121,7 +2118,7 @@ void voronoi_f1(const float4 coord,
float3 *r_color,
float4 *r_position)
{
- const float4 cellPosition = float4::floor(coord);
+ const float4 cellPosition = math::floor(coord);
const float4 localPosition = coord - cellPosition;
float minDistance = 8.0f;
@@ -2166,7 +2163,7 @@ void voronoi_smooth_f1(const float4 coord,
float3 *r_color,
float4 *r_position)
{
- const float4 cellPosition = float4::floor(coord);
+ const float4 cellPosition = math::floor(coord);
const float4 localPosition = coord - cellPosition;
const float smoothness_clamped = max_ff(smoothness, FLT_MIN);
@@ -2191,10 +2188,10 @@ void voronoi_smooth_f1(const float4 coord,
correctionFactor /= 1.0f + 3.0f * smoothness;
if (r_color != nullptr) {
const float3 cellColor = hash_float_to_float3(cellPosition + cellOffset);
- smoothColor = float3::interpolate(smoothColor, cellColor, h) - correctionFactor;
+ smoothColor = math::interpolate(smoothColor, cellColor, h) - correctionFactor;
}
if (r_position != nullptr) {
- smoothPosition = float4::interpolate(smoothPosition, pointPosition, h) -
+ smoothPosition = math::interpolate(smoothPosition, pointPosition, h) -
correctionFactor;
}
}
@@ -2221,7 +2218,7 @@ void voronoi_f2(const float4 coord,
float3 *r_color,
float4 *r_position)
{
- const float4 cellPosition = float4::floor(coord);
+ const float4 cellPosition = math::floor(coord);
const float4 localPosition = coord - cellPosition;
float distanceF1 = 8.0f;
@@ -2270,7 +2267,7 @@ void voronoi_f2(const float4 coord,
void voronoi_distance_to_edge(const float4 coord, const float randomness, float *r_distance)
{
- const float4 cellPosition = float4::floor(coord);
+ const float4 cellPosition = math::floor(coord);
const float4 localPosition = coord - cellPosition;
float4 vectorToClosest = float4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -2307,7 +2304,7 @@ void voronoi_distance_to_edge(const float4 coord, const float randomness, float
const float4 perpendicularToEdge = vectorToPoint - vectorToClosest;
if (dot_v4v4(perpendicularToEdge, perpendicularToEdge) > 0.0001f) {
const float distanceToEdge = dot_v4v4((vectorToClosest + vectorToPoint) / 2.0f,
- float4::normalize(perpendicularToEdge));
+ math::normalize(perpendicularToEdge));
minDistance = std::min(minDistance, distanceToEdge);
}
}
@@ -2319,7 +2316,7 @@ void voronoi_distance_to_edge(const float4 coord, const float randomness, float
void voronoi_n_sphere_radius(const float4 coord, const float randomness, float *r_radius)
{
- const float4 cellPosition = float4::floor(coord);
+ const float4 cellPosition = math::floor(coord);
const float4 localPosition = coord - cellPosition;
float4 closestPoint = float4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -2333,7 +2330,7 @@ void voronoi_n_sphere_radius(const float4 coord, const float randomness, float *
const float4 pointPosition = cellOffset +
hash_float_to_float4(cellPosition + cellOffset) *
randomness;
- const float distanceToPoint = float4::distance(pointPosition, localPosition);
+ const float distanceToPoint = math::distance(pointPosition, localPosition);
if (distanceToPoint < minDistance) {
minDistance = distanceToPoint;
closestPoint = pointPosition;
@@ -2357,7 +2354,7 @@ void voronoi_n_sphere_radius(const float4 coord, const float randomness, float *
const float4 pointPosition = cellOffset +
hash_float_to_float4(cellPosition + cellOffset) *
randomness;
- const float distanceToPoint = float4::distance(closestPoint, pointPosition);
+ const float distanceToPoint = math::distance(closestPoint, pointPosition);
if (distanceToPoint < minDistance) {
minDistance = distanceToPoint;
closestPointToClosestPoint = pointPosition;
@@ -2366,7 +2363,7 @@ void voronoi_n_sphere_radius(const float4 coord, const float randomness, float *
}
}
}
- *r_radius = float4::distance(closestPointToClosestPoint, closestPoint) / 2.0f;
+ *r_radius = math::distance(closestPointToClosestPoint, closestPoint) / 2.0f;
}
/** \} */
diff --git a/source/blender/blenlib/tests/BLI_delaunay_2d_test.cc b/source/blender/blenlib/tests/BLI_delaunay_2d_test.cc
index 70e3a99e57a..eac3faa6d15 100644
--- a/source/blender/blenlib/tests/BLI_delaunay_2d_test.cc
+++ b/source/blender/blenlib/tests/BLI_delaunay_2d_test.cc
@@ -21,10 +21,9 @@ extern "C" {
#define DO_RANDOM_TESTS 0
#include "BLI_array.hh"
-#include "BLI_double2.hh"
#include "BLI_math_boolean.hh"
#include "BLI_math_mpq.hh"
-#include "BLI_mpq2.hh"
+#include "BLI_math_vec_mpq_types.hh"
#include "BLI_vector.hh"
#include "BLI_delaunay_2d.h"
diff --git a/source/blender/blenlib/tests/BLI_math_vec_types_test.cc b/source/blender/blenlib/tests/BLI_math_vec_types_test.cc
new file mode 100644
index 00000000000..8aa1f90fde2
--- /dev/null
+++ b/source/blender/blenlib/tests/BLI_math_vec_types_test.cc
@@ -0,0 +1,149 @@
+/* Apache License, Version 2.0 */
+
+#include "testing/testing.h"
+
+#include "BLI_math_vec_types.hh"
+
+namespace blender::tests {
+
+using namespace blender::math;
+
+TEST(math_vec_types, ScalarConstructorUnsigned)
+{
+ float2 u(5u);
+ EXPECT_EQ(u[0], 5.0f);
+ EXPECT_EQ(u[1], 5.0f);
+}
+
+TEST(math_vec_types, ScalarConstructorInt)
+{
+ float2 i(-5);
+ EXPECT_EQ(i[0], -5.0f);
+ EXPECT_EQ(i[1], -5.0f);
+}
+
+TEST(math_vec_types, ScalarConstructorFloat)
+{
+ float2 f(5.2f);
+ EXPECT_FLOAT_EQ(f[0], 5.2f);
+ EXPECT_FLOAT_EQ(f[1], 5.2f);
+}
+
+TEST(math_vec_types, ScalarConstructorDouble)
+{
+ float2 d(5.2);
+ EXPECT_FLOAT_EQ(d[0], 5.2f);
+ EXPECT_FLOAT_EQ(d[1], 5.2f);
+}
+
+TEST(math_vec_types, MultiScalarConstructorVec2)
+{
+ int2 i(5.5f, -1.8);
+ EXPECT_EQ(i[0], 5);
+ EXPECT_EQ(i[1], -1);
+}
+
+TEST(math_vec_types, MultiScalarConstructorVec3)
+{
+ int3 i(5.5f, -1.8, 6u);
+ EXPECT_EQ(i[0], 5);
+ EXPECT_EQ(i[1], -1);
+ EXPECT_EQ(i[2], 6);
+}
+
+TEST(math_vec_types, MultiScalarConstructorVec4)
+{
+ int4 i(5.5f, -1.8, 6u, 0.888f);
+ EXPECT_EQ(i[0], 5);
+ EXPECT_EQ(i[1], -1);
+ EXPECT_EQ(i[2], 6);
+ EXPECT_EQ(i[3], 0);
+}
+
+TEST(math_vec_types, MixedScalarVectorConstructorVec3)
+{
+ float3 fl_v2(float2(5.5f), 1.8f);
+ EXPECT_FLOAT_EQ(fl_v2[0], 5.5f);
+ EXPECT_FLOAT_EQ(fl_v2[1], 5.5f);
+ EXPECT_FLOAT_EQ(fl_v2[2], 1.8f);
+
+ float3 v2_fl(1.8f, float2(5.5f));
+ EXPECT_FLOAT_EQ(v2_fl[0], 1.8f);
+ EXPECT_FLOAT_EQ(v2_fl[1], 5.5f);
+ EXPECT_FLOAT_EQ(v2_fl[2], 5.5f);
+}
+
+TEST(math_vec_types, MixedScalarVectorConstructorVec4)
+{
+ int4 v2_fl_fl(float2(1), 2, 3);
+ EXPECT_EQ(v2_fl_fl[0], 1);
+ EXPECT_EQ(v2_fl_fl[1], 1);
+ EXPECT_EQ(v2_fl_fl[2], 2);
+ EXPECT_EQ(v2_fl_fl[3], 3);
+
+ float4 fl_v2_fl(1, int2(2), 3);
+ EXPECT_EQ(fl_v2_fl[0], 1);
+ EXPECT_EQ(fl_v2_fl[1], 2);
+ EXPECT_EQ(fl_v2_fl[2], 2);
+ EXPECT_EQ(fl_v2_fl[3], 3);
+
+ double4 fl_fl_v2(1, 2, double2(3));
+ EXPECT_EQ(fl_fl_v2[0], 1);
+ EXPECT_EQ(fl_fl_v2[1], 2);
+ EXPECT_EQ(fl_fl_v2[2], 3);
+ EXPECT_EQ(fl_fl_v2[3], 3);
+
+ int4 v2_v2(float2(1), uint2(2));
+ EXPECT_EQ(v2_v2[0], 1);
+ EXPECT_EQ(v2_v2[1], 1);
+ EXPECT_EQ(v2_v2[2], 2);
+ EXPECT_EQ(v2_v2[3], 2);
+
+ float4 v3_fl(uint3(1), 2);
+ EXPECT_EQ(v3_fl[0], 1);
+ EXPECT_EQ(v3_fl[1], 1);
+ EXPECT_EQ(v3_fl[2], 1);
+ EXPECT_EQ(v3_fl[3], 2);
+
+ uint4 fl_v3(1, float3(2));
+ EXPECT_EQ(fl_v3[0], 1);
+ EXPECT_EQ(fl_v3[1], 2);
+ EXPECT_EQ(fl_v3[2], 2);
+ EXPECT_EQ(fl_v3[3], 2);
+}
+
+TEST(math_vec_types, ComponentMasking)
+{
+ int4 i(0, 1, 2, 3);
+ float2 f2 = float2(i);
+ EXPECT_EQ(f2[0], 0.0f);
+ EXPECT_EQ(f2[1], 1.0f);
+}
+
+TEST(math_vec_types, PointerConversion)
+{
+ float array[3] = {1.0f, 2.0f, 3.0f};
+ float3 farray(array);
+ EXPECT_EQ(farray[0], 1.0f);
+ EXPECT_EQ(farray[1], 2.0f);
+ EXPECT_EQ(farray[2], 3.0f);
+}
+
+TEST(math_vec_types, PointerArrayConversion)
+{
+ float array[1][3] = {{1.0f, 2.0f, 3.0f}};
+ float(*ptr)[3] = array;
+ float3 fptr(ptr);
+ EXPECT_EQ(fptr[0], 1.0f);
+ EXPECT_EQ(fptr[1], 2.0f);
+ EXPECT_EQ(fptr[2], 3.0f);
+}
+
+TEST(math_vec_types, VectorTypeConversion)
+{
+ double2 d(int2(float2(5.75f, -1.57f)));
+ EXPECT_EQ(d[0], 5.0);
+ EXPECT_EQ(d[1], -1.0);
+}
+
+} // namespace blender::tests
diff --git a/source/blender/blenlib/tests/BLI_memory_utils_test.cc b/source/blender/blenlib/tests/BLI_memory_utils_test.cc
index 207f310d902..74e54151a06 100644
--- a/source/blender/blenlib/tests/BLI_memory_utils_test.cc
+++ b/source/blender/blenlib/tests/BLI_memory_utils_test.cc
@@ -1,6 +1,6 @@
/* Apache License, Version 2.0 */
-#include "BLI_float3.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_memory_utils.hh"
#include "BLI_strict_flags.h"
#include "testing/testing.h"
diff --git a/source/blender/blenlib/tests/BLI_mesh_boolean_test.cc b/source/blender/blenlib/tests/BLI_mesh_boolean_test.cc
index d759f0c3be4..2b8fb3dbea4 100644
--- a/source/blender/blenlib/tests/BLI_mesh_boolean_test.cc
+++ b/source/blender/blenlib/tests/BLI_mesh_boolean_test.cc
@@ -11,8 +11,8 @@
#include "BLI_array.hh"
#include "BLI_map.hh"
#include "BLI_math_mpq.hh"
+#include "BLI_math_vec_mpq_types.hh"
#include "BLI_mesh_boolean.hh"
-#include "BLI_mpq3.hh"
#include "BLI_vector.hh"
#ifdef WITH_GMP
diff --git a/source/blender/blenlib/tests/BLI_mesh_intersect_test.cc b/source/blender/blenlib/tests/BLI_mesh_intersect_test.cc
index 68111fb8eb1..d2d76593129 100644
--- a/source/blender/blenlib/tests/BLI_mesh_intersect_test.cc
+++ b/source/blender/blenlib/tests/BLI_mesh_intersect_test.cc
@@ -10,8 +10,8 @@
#include "BLI_array.hh"
#include "BLI_math_mpq.hh"
+#include "BLI_math_vec_mpq_types.hh"
#include "BLI_mesh_intersect.hh"
-#include "BLI_mpq3.hh"
#include "BLI_task.h"
#include "BLI_vector.hh"
diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c
index 7865c79323d..85ea27b0f4e 100644
--- a/source/blender/bmesh/intern/bmesh_opdefines.c
+++ b/source/blender/bmesh/intern/bmesh_opdefines.c
@@ -1186,6 +1186,7 @@ static BMO_FlagSet bmo_enum_triangulate_quad_method[] = {
{MOD_TRIANGULATE_QUAD_FIXED, "FIXED"},
{MOD_TRIANGULATE_QUAD_ALTERNATE, "ALTERNATE"},
{MOD_TRIANGULATE_QUAD_SHORTEDGE, "SHORT_EDGE"},
+ {MOD_TRIANGULATE_QUAD_LONGEDGE, "LONG_EDGE"},
{0, NULL},
};
diff --git a/source/blender/bmesh/intern/bmesh_polygon.c b/source/blender/bmesh/intern/bmesh_polygon.c
index e9eaf865e3c..e7280303c26 100644
--- a/source/blender/bmesh/intern/bmesh_polygon.c
+++ b/source/blender/bmesh/intern/bmesh_polygon.c
@@ -1007,6 +1007,7 @@ void BM_face_triangulate(BMesh *bm,
break;
}
case MOD_TRIANGULATE_QUAD_SHORTEDGE:
+ case MOD_TRIANGULATE_QUAD_LONGEDGE:
case MOD_TRIANGULATE_QUAD_BEAUTY:
default: {
BMLoop *l_v3, *l_v4;
@@ -1023,6 +1024,12 @@ void BM_face_triangulate(BMesh *bm,
d2 = len_squared_v3v3(l_v1->v->co, l_v3->v->co);
split_24 = ((d2 - d1) > 0.0f);
}
+ else if (quad_method == MOD_TRIANGULATE_QUAD_LONGEDGE) {
+ float d1, d2;
+ d1 = len_squared_v3v3(l_v4->v->co, l_v2->v->co);
+ d2 = len_squared_v3v3(l_v1->v->co, l_v3->v->co);
+ split_24 = ((d2 - d1) < 0.0f);
+ }
else {
/* first check if the quad is concave on either diagonal */
const int flip_flag = is_quad_flip_v3(
diff --git a/source/blender/compositor/CMakeLists.txt b/source/blender/compositor/CMakeLists.txt
index f59fd885871..af0ac6aee2e 100644
--- a/source/blender/compositor/CMakeLists.txt
+++ b/source/blender/compositor/CMakeLists.txt
@@ -40,6 +40,9 @@ set(INC
../../../intern/atomic
../../../intern/guardedalloc
../../../intern/clog
+
+ # dna_type_offsets.h
+ ${CMAKE_CURRENT_BINARY_DIR}/../makesdna/intern
)
set(INC_SYS
@@ -147,6 +150,8 @@ set(SRC
nodes/COM_TimeNode.h
nodes/COM_ValueNode.cc
nodes/COM_ValueNode.h
+ nodes/COM_SceneTimeNode.cc
+ nodes/COM_SceneTimeNode.h
# output nodes
nodes/COM_CompositorNode.cc
@@ -645,6 +650,15 @@ endif()
blender_add_lib(bf_compositor "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
+if(WITH_UNITY_BUILD)
+ set_target_properties(bf_compositor PROPERTIES UNITY_BUILD ON)
+ set_target_properties(bf_compositor PROPERTIES UNITY_BUILD_BATCH_SIZE 10)
+endif()
+
+if(COMMAND target_precompile_headers)
+ target_precompile_headers(bf_compositor PRIVATE COM_precomp.h)
+endif()
+
if(CXX_WARN_NO_SUGGEST_OVERRIDE)
target_compile_options(bf_compositor PRIVATE "-Wsuggest-override")
endif()
diff --git a/source/blender/compositor/COM_defines.h b/source/blender/compositor/COM_defines.h
index 1c3a28670df..794bf1b23bc 100644
--- a/source/blender/compositor/COM_defines.h
+++ b/source/blender/compositor/COM_defines.h
@@ -18,7 +18,7 @@
#pragma once
-#include "BLI_float2.hh"
+#include "BLI_math_vec_types.hh"
#include "DNA_vec_types.h"
diff --git a/source/blender/compositor/COM_precomp.h b/source/blender/compositor/COM_precomp.h
new file mode 100644
index 00000000000..4d2681ea0cd
--- /dev/null
+++ b/source/blender/compositor/COM_precomp.h
@@ -0,0 +1,33 @@
+/* Pre-compiled headers, see: D13797. */
+
+#include <cfloat>
+#include <climits>
+#include <cmath>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <functional>
+#include <iostream>
+#include <iterator>
+#include <list>
+#include <map>
+#include <ostream>
+#include <set>
+#include <string>
+
+#include "COM_ConstantOperation.h"
+#include "COM_ConvertOperation.h"
+#include "COM_Debug.h"
+#include "COM_Enums.h"
+#include "COM_ExecutionGroup.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_MultiThreadedOperation.h"
+#include "COM_Node.h"
+#include "COM_NodeOperation.h"
+#include "COM_OpenCLDevice.h"
+#include "COM_SetAlphaMultiplyOperation.h"
+#include "COM_SetColorOperation.h"
+#include "COM_SetSamplerOperation.h"
+#include "COM_SetValueOperation.h"
+#include "COM_SetVectorOperation.h"
+#include "COM_defines.h"
diff --git a/source/blender/compositor/intern/COM_Converter.cc b/source/blender/compositor/intern/COM_Converter.cc
index 1b98a04cf96..6cf6c698a2f 100644
--- a/source/blender/compositor/intern/COM_Converter.cc
+++ b/source/blender/compositor/intern/COM_Converter.cc
@@ -94,6 +94,7 @@
#include "COM_RotateNode.h"
#include "COM_ScaleNode.h"
#include "COM_ScaleOperation.h"
+#include "COM_SceneTimeNode.h"
#include "COM_SeparateColorNode.h"
#include "COM_SetAlphaNode.h"
#include "COM_SetValueOperation.h"
@@ -360,6 +361,9 @@ Node *COM_convert_bnode(bNode *b_node)
case CMP_NODE_TRANSFORM:
node = new TransformNode(b_node);
break;
+ case CMP_NODE_SCENE_TIME:
+ node = new SceneTimeNode(b_node);
+ break;
case CMP_NODE_STABILIZE2D:
node = new Stabilize2dNode(b_node);
break;
diff --git a/source/blender/compositor/nodes/COM_SceneTimeNode.cc b/source/blender/compositor/nodes/COM_SceneTimeNode.cc
new file mode 100644
index 00000000000..f495db5ed4c
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SceneTimeNode.cc
@@ -0,0 +1,50 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Copyright 2022, Blender Foundation.
+ */
+
+#include "COM_SceneTimeNode.h"
+
+#include "COM_SetValueOperation.h"
+
+namespace blender::compositor {
+
+SceneTimeNode::SceneTimeNode(bNode *editor_node) : Node(editor_node)
+{
+ /* pass */
+}
+
+void SceneTimeNode::convert_to_operations(NodeConverter &converter,
+ const CompositorContext &context) const
+{
+ SetValueOperation *SecondOperation = new SetValueOperation();
+ SetValueOperation *frameOperation = new SetValueOperation();
+
+ const int frameNumber = context.get_framenumber();
+ const Scene* scene = context.get_scene();
+ const double frameRate = (((double)scene->r.frs_sec) / (double)scene->r.frs_sec_base);
+
+ SecondOperation->set_value(float(frameNumber / frameRate));
+ converter.add_operation(SecondOperation);
+
+ frameOperation->set_value(frameNumber);
+ converter.add_operation(frameOperation);
+
+ converter.map_output_socket(get_output_socket(0), SecondOperation->get_output_socket());
+ converter.map_output_socket(get_output_socket(1), frameOperation->get_output_socket());
+}
+
+} // namespace blender::compositor
diff --git a/source/blender/compositor/nodes/COM_SceneTimeNode.h b/source/blender/compositor/nodes/COM_SceneTimeNode.h
new file mode 100644
index 00000000000..62c502d26d2
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SceneTimeNode.h
@@ -0,0 +1,36 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Copyright 2022, Blender Foundation.
+ */
+
+#pragma once
+
+#include "COM_Node.h"
+
+namespace blender::compositor {
+
+/**
+ * \brief SceneTimeNode
+ * \ingroup Node
+ */
+class SceneTimeNode : public Node {
+ public:
+ SceneTimeNode(bNode *editor_node);
+ void convert_to_operations(NodeConverter &converter,
+ const CompositorContext &context) const override;
+};
+
+} // namespace blender::compositor
diff --git a/source/blender/compositor/operations/COM_KeyingScreenOperation.cc b/source/blender/compositor/operations/COM_KeyingScreenOperation.cc
index aa92c5c0c2b..5d12f29b83f 100644
--- a/source/blender/compositor/operations/COM_KeyingScreenOperation.cc
+++ b/source/blender/compositor/operations/COM_KeyingScreenOperation.cc
@@ -18,6 +18,8 @@
#include "COM_KeyingScreenOperation.h"
+#include "DNA_defaults.h"
+
#include "BKE_movieclip.h"
#include "BKE_tracking.h"
@@ -75,7 +77,7 @@ void KeyingScreenOperation::deinit_execution()
KeyingScreenOperation::TriangulationData *KeyingScreenOperation::build_voronoi_triangulation()
{
- MovieClipUser user = {0};
+ MovieClipUser user = *DNA_struct_default_get(MovieClipUser);
TriangulationData *triangulation;
MovieTracking *tracking = &movie_clip_->tracking;
MovieTrackingTrack *track;
@@ -301,7 +303,7 @@ void KeyingScreenOperation::determine_canvas(const rcti &preferred_area, rcti &r
r_area = COM_AREA_NONE;
if (movie_clip_) {
- MovieClipUser user = {0};
+ MovieClipUser user = *DNA_struct_default_get(MovieClipUser);
int width, height;
int clip_frame = BKE_movieclip_remap_scene_to_clip_frame(movie_clip_, framenumber_);
diff --git a/source/blender/compositor/operations/COM_MovieDistortionOperation.cc b/source/blender/compositor/operations/COM_MovieDistortionOperation.cc
index d04a970bc03..b25073394a2 100644
--- a/source/blender/compositor/operations/COM_MovieDistortionOperation.cc
+++ b/source/blender/compositor/operations/COM_MovieDistortionOperation.cc
@@ -18,6 +18,8 @@
#include "COM_MovieDistortionOperation.h"
+#include "DNA_defaults.h"
+
#include "BKE_movieclip.h"
namespace blender::compositor {
@@ -36,7 +38,7 @@ void MovieDistortionOperation::init_data()
{
if (movie_clip_) {
MovieTracking *tracking = &movie_clip_->tracking;
- MovieClipUser clip_user = {0};
+ MovieClipUser clip_user = *DNA_struct_default_get(MovieClipUser);
int calibration_width, calibration_height;
BKE_movieclip_user_set_frame(&clip_user, framenumber_);
diff --git a/source/blender/compositor/operations/COM_OutputFileOperation.h b/source/blender/compositor/operations/COM_OutputFileOperation.h
index 0e871f47b87..e601ebac4e1 100644
--- a/source/blender/compositor/operations/COM_OutputFileOperation.h
+++ b/source/blender/compositor/operations/COM_OutputFileOperation.h
@@ -136,7 +136,7 @@ void add_exr_channels(void *exrhandle,
const char *layer_name,
const DataType datatype,
const char *view_name,
- const size_t width,
+ size_t width,
bool use_half_float,
float *buf);
void free_exr_channels(void *exrhandle,
diff --git a/source/blender/compositor/operations/COM_PlaneTrackOperation.cc b/source/blender/compositor/operations/COM_PlaneTrackOperation.cc
index 28da200c615..cb73fa9af7b 100644
--- a/source/blender/compositor/operations/COM_PlaneTrackOperation.cc
+++ b/source/blender/compositor/operations/COM_PlaneTrackOperation.cc
@@ -18,6 +18,8 @@
#include "COM_PlaneTrackOperation.h"
+#include "DNA_defaults.h"
+
#include "BKE_movieclip.h"
#include "BKE_tracking.h"
@@ -80,7 +82,7 @@ void PlaneTrackCommon::determine_canvas(const rcti &preferred_area, rcti &r_area
r_area = COM_AREA_NONE;
if (movie_clip_) {
int width, height;
- MovieClipUser user = {0};
+ MovieClipUser user = *DNA_struct_default_get(MovieClipUser);
BKE_movieclip_user_set_frame(&user, framenumber_);
BKE_movieclip_get_size(movie_clip_, &user, &width, &height);
r_area = preferred_area;
diff --git a/source/blender/compositor/operations/COM_TrackPositionOperation.cc b/source/blender/compositor/operations/COM_TrackPositionOperation.cc
index fc6be97a29c..61ce750a2f4 100644
--- a/source/blender/compositor/operations/COM_TrackPositionOperation.cc
+++ b/source/blender/compositor/operations/COM_TrackPositionOperation.cc
@@ -18,6 +18,8 @@
#include "COM_TrackPositionOperation.h"
+#include "DNA_defaults.h"
+
#include "BKE_movieclip.h"
#include "BKE_node.h"
#include "BKE_tracking.h"
@@ -50,7 +52,7 @@ void TrackPositionOperation::calc_track_position()
{
is_track_position_calculated_ = true;
MovieTracking *tracking = nullptr;
- MovieClipUser user = {0};
+ MovieClipUser user = *DNA_struct_default_get(MovieClipUser);
MovieTrackingObject *object;
track_position_ = 0;
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 1c09417e9ab..fcdc3fe58e8 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -1475,6 +1475,17 @@ void DepsgraphRelationBuilder::build_animation_images(ID *id)
id, NodeType::IMAGE_ANIMATION, OperationCode::IMAGE_ANIMATION);
TimeSourceKey time_src_key;
add_relation(time_src_key, image_animation_key, "TimeSrc -> Image Animation");
+
+ /* The image users of these ids may change during evaluation. Make sure that the image
+ * animation update happens after evaluation. */
+ if (GS(id->name) == ID_MA) {
+ OperationKey material_update_key(id, NodeType::SHADING, OperationCode::MATERIAL_UPDATE);
+ add_relation(material_update_key, image_animation_key, "Material Update -> Image Animation");
+ }
+ else if (GS(id->name) == ID_WO) {
+ OperationKey world_update_key(id, NodeType::SHADING, OperationCode::WORLD_UPDATE);
+ add_relation(world_update_key, image_animation_key, "World Update -> Image Animation");
+ }
}
}
diff --git a/source/blender/depsgraph/intern/node/deg_node_factory.h b/source/blender/depsgraph/intern/node/deg_node_factory.h
index 125f340a0fa..b3153a7ddfb 100644
--- a/source/blender/depsgraph/intern/node/deg_node_factory.h
+++ b/source/blender/depsgraph/intern/node/deg_node_factory.h
@@ -55,7 +55,7 @@ template<class ModeObjectType> struct DepsNodeFactoryImpl : public DepsNodeFacto
void register_node_typeinfo(DepsNodeFactory *factory);
/* Get typeinfo for specified type */
-DepsNodeFactory *type_get_factory(const NodeType type);
+DepsNodeFactory *type_get_factory(NodeType type);
} // namespace deg
} // namespace blender
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 2a243eb9202..7b55981ba6b 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -197,6 +197,7 @@ set(SRC
DRW_engine.h
DRW_select_buffer.h
+ intern/DRW_gpu_wrapper.hh
intern/DRW_render.h
intern/draw_cache.h
intern/draw_cache_extract.h
diff --git a/source/blender/draw/intern/DRW_gpu_wrapper.hh b/source/blender/draw/intern/DRW_gpu_wrapper.hh
new file mode 100644
index 00000000000..01c57406dac
--- /dev/null
+++ b/source/blender/draw/intern/DRW_gpu_wrapper.hh
@@ -0,0 +1,812 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Copyright 2022, Blender Foundation.
+ */
+
+#pragma once
+
+/** \file
+ * \ingroup draw
+ *
+ * Wrapper classes that make it easier to use GPU objects in C++.
+ *
+ * All Buffers need to be sent to GPU memory before being used. This is done by using the
+ * `push_update()`.
+ *
+ * A Storage[Array]Buffer can hold much more data than a Uniform[Array]Buffer
+ * which can only holds 16KB of data.
+ *
+ * All types are not copyable and Buffers are not Movable.
+ *
+ * drw::UniformArrayBuffer<T, len>
+ * Uniform buffer object containing an array of T with len elements.
+ * Data can be accessed using the [] operator.
+ *
+ * drw::UniformBuffer<T>
+ * A uniform buffer object class inheriting from T.
+ * Data can be accessed just like a normal T object.
+ *
+ * drw::StorageArrayBuffer<T, len>
+ * Storage buffer object containing an array of T with len elements.
+ * The item count can be changed after creation using `resize()`.
+ * However, this requires the invalidation of the whole buffer and
+ * discarding all data inside it.
+ * Data can be accessed using the [] operator.
+ *
+ * drw::StorageBuffer<T>
+ * A storage buffer object class inheriting from T.
+ * Data can be accessed just like a normal T object.
+ *
+ * drw::Texture
+ * A simple wrapper to GPUTexture. A drw::Texture can be created without allocation.
+ * The `ensure_[1d|2d|3d|cube][_array]()` method is here to make sure the underlying texture
+ * will meet the requirements and create (or recreate) the GPUTexture if needed.
+ *
+ * drw::TextureFromPool
+ * A GPUTexture from the viewport texture pool. This texture can be shared with other engines
+ * and its content is undefined when aquiring it.
+ * A drw::TextureFromPool is acquired for rendering using `acquire()` and released once the
+ * rendering is done using `release()`. The same texture can be acquired & released multiple
+ * time in one draw loop.
+ * The `sync()` method *MUST* be called once during the cache populate (aka: Sync) phase.
+ *
+ * drw::Framebuffer
+ * Simple wrapper to GPUFramebuffer that can be moved.
+ *
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "draw_texture_pool.h"
+
+#include "BLI_float4.hh"
+#include "BLI_int2.hh"
+#include "BLI_int3.hh"
+#include "BLI_int4.hh"
+#include "BLI_span.hh"
+#include "BLI_utildefines.h"
+#include "BLI_utility_mixins.hh"
+
+#include "GPU_framebuffer.h"
+#include "GPU_texture.h"
+#include "GPU_uniform_buffer.h"
+#include "GPU_vertex_buffer.h"
+
+namespace blender::draw {
+
+/* -------------------------------------------------------------------- */
+/** \name Implementation Details
+ * \{ */
+
+namespace detail {
+
+template<
+ /** Type of the values stored in this uniform buffer. */
+ typename T,
+ /** The number of values that can be stored in this uniform buffer. */
+ int64_t len,
+ /** True if the buffer only resides on GPU memory and cannot be accessed. */
+ bool device_only>
+class DataBuffer {
+ protected:
+ T *data_ = nullptr;
+ int64_t len_ = len;
+
+ BLI_STATIC_ASSERT((sizeof(T) % 16) == 0, "Type need to be aligned to size of float4.");
+
+ public:
+ /**
+ * Get the value at the given index. This invokes undefined behavior when the
+ * index is out of bounds.
+ */
+ const T &operator[](int64_t index) const
+ {
+ BLI_STATIC_ASSERT(!device_only, "");
+ BLI_assert(index >= 0);
+ BLI_assert(index < len);
+ return data_[index];
+ }
+
+ T &operator[](int64_t index)
+ {
+ BLI_STATIC_ASSERT(!device_only, "");
+ BLI_assert(index >= 0);
+ BLI_assert(index < len);
+ return data_[index];
+ }
+
+ /**
+ * Get a pointer to the beginning of the array.
+ */
+ const T *data() const
+ {
+ BLI_STATIC_ASSERT(!device_only, "");
+ return data_;
+ }
+ T *data()
+ {
+ BLI_STATIC_ASSERT(!device_only, "");
+ return data_;
+ }
+
+ /**
+ * Iterator
+ */
+ const T *begin() const
+ {
+ BLI_STATIC_ASSERT(!device_only, "");
+ return data_;
+ }
+ const T *end() const
+ {
+ BLI_STATIC_ASSERT(!device_only, "");
+ return data_ + len;
+ }
+
+ T *begin()
+ {
+ BLI_STATIC_ASSERT(!device_only, "");
+ return data_;
+ }
+ T *end()
+ {
+ BLI_STATIC_ASSERT(!device_only, "");
+ return data_ + len;
+ }
+
+ operator Span<T>() const
+ {
+ BLI_STATIC_ASSERT(!device_only, "");
+ return Span<T>(data_, len);
+ }
+};
+
+template<typename T, int64_t len, bool device_only>
+class UniformCommon : public DataBuffer<T, len, false>, NonMovable, NonCopyable {
+ protected:
+ GPUUniformBuf *ubo_;
+
+#ifdef DEBUG
+ const char *name_ = typeid(T).name();
+#else
+ constexpr static const char *name_ = "UniformBuffer";
+#endif
+
+ public:
+ UniformCommon()
+ {
+ ubo_ = GPU_uniformbuf_create_ex(sizeof(T) * len, nullptr, name_);
+ }
+
+ ~UniformCommon()
+ {
+ GPU_uniformbuf_free(ubo_);
+ }
+
+ void push_update(void)
+ {
+ GPU_uniformbuf_update(ubo_, this->data_);
+ }
+
+ /* To be able to use it with DRW_shgroup_*_ref(). */
+ operator GPUUniformBuf *() const
+ {
+ return ubo_;
+ }
+
+ /* To be able to use it with DRW_shgroup_*_ref(). */
+ GPUUniformBuf **operator&()
+ {
+ return &ubo_;
+ }
+};
+
+template<typename T, int64_t len, bool device_only>
+class StorageCommon : public DataBuffer<T, len, false>, NonMovable, NonCopyable {
+ protected:
+ /* Use vertex buffer for now. Until there is a complete GPUStorageBuf implementation. */
+ GPUVertBuf *ssbo_;
+
+#ifdef DEBUG
+ const char *name_ = typeid(T).name();
+#else
+ constexpr static const char *name_ = "StorageBuffer";
+#endif
+
+ public:
+ StorageCommon()
+ {
+ init(len);
+ }
+
+ ~StorageCommon()
+ {
+ GPU_vertbuf_discard(ssbo_);
+ }
+
+ void resize(int64_t new_size)
+ {
+ BLI_assert(new_size > 0);
+ if (new_size != this->len_) {
+ GPU_vertbuf_discard(ssbo_);
+ this->init(new_size);
+ }
+ }
+
+ operator GPUVertBuf *() const
+ {
+ return ssbo_;
+ }
+ /* To be able to use it with DRW_shgroup_*_ref(). */
+ GPUVertBuf **operator&()
+ {
+ return &ssbo_;
+ }
+
+ private:
+ void init(int64_t new_size)
+ {
+ this->len_ = new_size;
+
+ GPUVertFormat format = {0};
+ GPU_vertformat_attr_add(&format, "dummy", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
+
+ GPUUsageType usage = device_only ? GPU_USAGE_DEVICE_ONLY : GPU_USAGE_DYNAMIC;
+ ssbo_ = GPU_vertbuf_create_with_format_ex(&format, usage);
+ GPU_vertbuf_data_alloc(ssbo_, divide_ceil_u(sizeof(T) * this->len_, 4));
+ if (!device_only) {
+ this->data_ = (T *)GPU_vertbuf_get_data(ssbo_);
+ GPU_vertbuf_use(ssbo_);
+ }
+ }
+};
+
+} // namespace detail
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Uniform Buffers
+ * \{ */
+
+template<
+ /** Type of the values stored in this uniform buffer. */
+ typename T,
+ /** The number of values that can be stored in this uniform buffer. */
+ int64_t len
+ /** True if the buffer only resides on GPU memory and cannot be accessed. */
+ /* TODO(fclem): Currently unsupported. */
+ /* bool device_only = false */>
+class UniformArrayBuffer : public detail::UniformCommon<T, len, false> {
+ public:
+ UniformArrayBuffer()
+ {
+ /* TODO(fclem) We should map memory instead. */
+ this->data_ = MEM_mallocN_aligned(this->name_);
+ }
+};
+
+template<
+ /** Type of the values stored in this uniform buffer. */
+ typename T
+ /** True if the buffer only resides on GPU memory and cannot be accessed. */
+ /* TODO(fclem): Currently unsupported. */
+ /* bool device_only = false */>
+class UniformBuffer : public T, public detail::UniformCommon<T, 1, false> {
+ public:
+ UniformBuffer()
+ {
+ /* TODO(fclem) How could we map this? */
+ this->data_ = static_cast<T *>(this);
+ }
+
+ UniformBuffer<T> &operator=(const T &other)
+ {
+ *static_cast<T *>(this) = other;
+ return *this;
+ }
+};
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Storage Buffer
+ * \{ */
+
+template<
+ /** Type of the values stored in this uniform buffer. */
+ typename T,
+ /** The number of values that can be stored in this uniform buffer. */
+ int64_t len,
+ /** True if created on device and no memory host memory is allocated. */
+ bool device_only = false>
+class StorageArrayBuffer : public detail::StorageCommon<T, len, device_only> {
+ public:
+ void push_update(void)
+ {
+ BLI_assert(!device_only);
+ /* Get the data again to tag for update. The actual pointer should not
+ * change. */
+ this->data_ = (T *)GPU_vertbuf_get_data(this->ssbo_);
+ GPU_vertbuf_use(this->ssbo_);
+ }
+};
+
+template<
+ /** Type of the values stored in this uniform buffer. */
+ typename T,
+ /** True if created on device and no memory host memory is allocated. */
+ bool device_only = false>
+class StorageBuffer : public T, public detail::StorageCommon<T, 1, device_only> {
+ public:
+ void push_update(void)
+ {
+ BLI_assert(!device_only);
+ /* TODO(fclem): Avoid a full copy. */
+ T &vert_data = *(T *)GPU_vertbuf_get_data(this->ssbo_);
+ vert_data = *this;
+
+ GPU_vertbuf_use(this->ssbo_);
+ }
+
+ StorageBuffer<T> &operator=(const T &other)
+ {
+ *static_cast<T *>(this) = other;
+ return *this;
+ }
+};
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Texture
+ * \{ */
+
+class Texture : NonCopyable {
+ protected:
+ GPUTexture *tx_ = nullptr;
+ const char *name_;
+
+ public:
+ Texture(const char *name = "gpu::Texture") : name_(name)
+ {
+ }
+
+ Texture(const char *name,
+ eGPUTextureFormat format,
+ int extent,
+ float *data = nullptr,
+ bool cubemap = false,
+ int mips = 1)
+ : name_(name)
+ {
+ tx_ = create(extent, 0, 0, mips, format, data, false, cubemap);
+ }
+
+ Texture(const char *name,
+ eGPUTextureFormat format,
+ int extent,
+ int layers,
+ float *data = nullptr,
+ bool cubemap = false,
+ int mips = 1)
+ : name_(name)
+ {
+ tx_ = create(extent, layers, 0, mips, format, data, true, cubemap);
+ }
+
+ Texture(
+ const char *name, eGPUTextureFormat format, int2 extent, float *data = nullptr, int mips = 1)
+ : name_(name)
+ {
+ tx_ = create(UNPACK2(extent), 0, mips, format, data, false, false);
+ }
+
+ Texture(const char *name,
+ eGPUTextureFormat format,
+ int2 extent,
+ int layers,
+ float *data = nullptr,
+ int mips = 1)
+ : name_(name)
+ {
+ tx_ = create(UNPACK2(extent), layers, mips, format, data, true, false);
+ }
+
+ Texture(
+ const char *name, eGPUTextureFormat format, int3 extent, float *data = nullptr, int mips = 1)
+ : name_(name)
+ {
+ tx_ = create(UNPACK3(extent), mips, format, data, false, false);
+ }
+
+ ~Texture()
+ {
+ free();
+ }
+
+ /* To be able to use it with DRW_shgroup_uniform_texture(). */
+ operator GPUTexture *() const
+ {
+ BLI_assert(tx_ != nullptr);
+ return tx_;
+ }
+
+ /* To be able to use it with DRW_shgroup_uniform_texture_ref(). */
+ GPUTexture **operator&()
+ {
+ return &tx_;
+ }
+
+ Texture &operator=(Texture &&a)
+ {
+ if (*this != a) {
+ this->tx_ = a.tx_;
+ this->name_ = a.name_;
+ a.tx_ = nullptr;
+ }
+ return *this;
+ }
+
+ /**
+ * Ensure the texture has the correct properties. Recreating it if needed.
+ * Return true if a texture has been created.
+ */
+ bool ensure_1d(eGPUTextureFormat format, int extent, float *data = nullptr, int mips = 1)
+ {
+ return ensure_impl(extent, 0, 0, mips, format, data, false, false);
+ }
+
+ /**
+ * Ensure the texture has the correct properties. Recreating it if needed.
+ * Return true if a texture has been created.
+ */
+ bool ensure_1d_array(
+ eGPUTextureFormat format, int extent, int layers, float *data = nullptr, int mips = 1)
+ {
+ return ensure_impl(extent, layers, 0, mips, format, data, true, false);
+ }
+
+ /**
+ * Ensure the texture has the correct properties. Recreating it if needed.
+ * Return true if a texture has been created.
+ */
+ bool ensure_2d(eGPUTextureFormat format, const int2 &extent, float *data = nullptr, int mips = 1)
+ {
+ return ensure_impl(UNPACK2(extent), 0, mips, format, data, false, false);
+ }
+
+ /**
+ * Ensure the texture has the correct properties. Recreating it if needed.
+ * Return true if a texture has been created.
+ */
+ bool ensure_2d_array(eGPUTextureFormat format,
+ const int2 &extent,
+ int layers,
+ float *data = nullptr,
+ int mips = 1)
+ {
+ return ensure_impl(UNPACK2(extent), layers, mips, format, data, true, false);
+ }
+
+ /**
+ * Ensure the texture has the correct properties. Recreating it if needed.
+ * Return true if a texture has been created.
+ */
+ bool ensure_3d(eGPUTextureFormat format, const int3 &extent, float *data = nullptr, int mips = 1)
+ {
+ return ensure_impl(UNPACK3(extent), mips, format, data, false, false);
+ }
+
+ /**
+ * Ensure the texture has the correct properties. Recreating it if needed.
+ * Return true if a texture has been created.
+ */
+ bool ensure_cube(eGPUTextureFormat format, int extent, float *data = nullptr, int mips = 1)
+ {
+ return ensure_impl(extent, extent, 0, mips, format, data, false, true);
+ }
+
+ /**
+ * Ensure the texture has the correct properties. Recreating it if needed.
+ * Return true if a texture has been created.
+ */
+ bool ensure_cube_array(
+ eGPUTextureFormat format, int extent, int layers, float *data = nullptr, int mips = 1)
+ {
+ return ensure_impl(extent, extent, layers, mips, format, data, false, true);
+ }
+
+ /**
+ * Returns true if the texture has been allocated or acquired from the pool.
+ */
+ bool is_valid(void) const
+ {
+ return tx_ != nullptr;
+ }
+
+ int width(void) const
+ {
+ return GPU_texture_width(tx_);
+ }
+
+ int height(void) const
+ {
+ return GPU_texture_height(tx_);
+ }
+
+ bool depth(void) const
+ {
+ return GPU_texture_depth(tx_);
+ }
+
+ bool is_stencil(void) const
+ {
+ return GPU_texture_stencil(tx_);
+ }
+
+ bool is_integer(void) const
+ {
+ return GPU_texture_integer(tx_);
+ }
+
+ bool is_cube(void) const
+ {
+ return GPU_texture_cube(tx_);
+ }
+
+ bool is_array(void) const
+ {
+ return GPU_texture_array(tx_);
+ }
+
+ int3 size(int miplvl = 0) const
+ {
+ int3 size(0);
+ GPU_texture_get_mipmap_size(tx_, miplvl, size);
+ return size;
+ }
+
+ /**
+ * Clear the entirety of the texture using one pixel worth of data.
+ */
+ void clear(float4 values)
+ {
+ GPU_texture_clear(tx_, GPU_DATA_FLOAT, &values[0]);
+ }
+
+ /**
+ * Clear the entirety of the texture using one pixel worth of data.
+ */
+ void clear(uint4 values)
+ {
+ GPU_texture_clear(tx_, GPU_DATA_UINT, &values[0]);
+ }
+
+ /**
+ * Clear the entirety of the texture using one pixel worth of data.
+ */
+ void clear(uchar4 values)
+ {
+ GPU_texture_clear(tx_, GPU_DATA_UBYTE, &values[0]);
+ }
+
+ /**
+ * Clear the entirety of the texture using one pixel worth of data.
+ */
+ void clear(int4 values)
+ {
+ GPU_texture_clear(tx_, GPU_DATA_INT, &values[0]);
+ }
+
+ /**
+ * Returns a buffer containing the texture data for the specified miplvl.
+ * The memory block needs to be manually freed by MEM_freeN().
+ */
+ template<typename T> T *read(eGPUDataFormat format, int miplvl = 0)
+ {
+ return reinterpret_cast<T *>(GPU_texture_read(tx_, format, miplvl));
+ }
+
+ void filter_mode(bool do_filter)
+ {
+ GPU_texture_filter_mode(tx_, do_filter);
+ }
+
+ /**
+ * Free the internal texture but not the drw::Texture itself.
+ */
+ void free()
+ {
+ GPU_TEXTURE_FREE_SAFE(tx_);
+ }
+
+ private:
+ bool ensure_impl(int w,
+ int h = 0,
+ int d = 0,
+ int mips = 1,
+ eGPUTextureFormat format = GPU_RGBA8,
+ float *data = nullptr,
+ bool layered = false,
+ bool cubemap = false)
+
+ {
+ /* TODO(fclem) In the future, we need to check if mip_count did not change.
+ * For now it's ok as we always define all mip level.*/
+ if (tx_) {
+ int3 size = this->size();
+ if (size != int3(w, h, d) || GPU_texture_format(tx_) != format ||
+ GPU_texture_cube(tx_) != cubemap || GPU_texture_array(tx_) != layered) {
+ GPU_TEXTURE_FREE_SAFE(tx_);
+ }
+ }
+ if (tx_ == nullptr) {
+ tx_ = create(w, h, d, mips, format, data, layered, cubemap);
+ if (mips > 1) {
+ /* TODO(fclem) Remove once we have immutable storage or when mips are
+ * generated on creation. */
+ GPU_texture_generate_mipmap(tx_);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ GPUTexture *create(int w,
+ int h,
+ int d,
+ int mips,
+ eGPUTextureFormat format,
+ float *data,
+ bool layered,
+ bool cubemap)
+ {
+ if (h == 0) {
+ return GPU_texture_create_1d(name_, w, mips, format, data);
+ }
+ else if (d == 0) {
+ if (layered) {
+ return GPU_texture_create_1d_array(name_, w, h, mips, format, data);
+ }
+ else {
+ return GPU_texture_create_2d(name_, w, h, mips, format, data);
+ }
+ }
+ else if (cubemap) {
+ if (layered) {
+ return GPU_texture_create_cube_array(name_, w, d, mips, format, data);
+ }
+ else {
+ return GPU_texture_create_cube(name_, w, mips, format, data);
+ }
+ }
+ else {
+ if (layered) {
+ return GPU_texture_create_2d_array(name_, w, h, d, mips, format, data);
+ }
+ else {
+ return GPU_texture_create_3d(name_, w, h, d, mips, format, GPU_DATA_FLOAT, data);
+ }
+ }
+ }
+};
+
+class TextureFromPool : public Texture, NonMovable {
+ private:
+ GPUTexture *tx_tmp_saved_ = nullptr;
+
+ public:
+ TextureFromPool(const char *name = "gpu::Texture") : Texture(name){};
+
+ /* Always use `release()` after rendering. */
+ void acquire(int w, int h, eGPUTextureFormat format, void *owner_)
+ {
+ if (this->tx_ == nullptr) {
+ if (tx_tmp_saved_ != nullptr) {
+ this->tx_ = tx_tmp_saved_;
+ return;
+ }
+ DrawEngineType *owner = (DrawEngineType *)owner_;
+ this->tx_ = DRW_texture_pool_query_2d(w, h, format, owner);
+ }
+ }
+
+ void release(void)
+ {
+ tx_tmp_saved_ = this->tx_;
+ this->tx_ = nullptr;
+ }
+
+ /**
+ * Clears any reference. Workaround for pool texture not being able to release on demand.
+ * Needs to be called at during the sync phase.
+ */
+ void sync(void)
+ {
+ tx_tmp_saved_ = nullptr;
+ }
+
+ /** Remove methods that are forbidden with this type of textures. */
+ bool ensure_1d(int, int, eGPUTextureFormat, float *) = delete;
+ bool ensure_1d_array(int, int, int, eGPUTextureFormat, float *) = delete;
+ bool ensure_2d(int, int, int, eGPUTextureFormat, float *) = delete;
+ bool ensure_2d_array(int, int, int, int, eGPUTextureFormat, float *) = delete;
+ bool ensure_3d(int, int, int, int, eGPUTextureFormat, float *) = delete;
+ bool ensure_cube(int, int, eGPUTextureFormat, float *) = delete;
+ bool ensure_cube_array(int, int, int, eGPUTextureFormat, float *) = delete;
+ void filter_mode(bool) = delete;
+ void free() = delete;
+ /**
+ * Forbid the use of DRW_shgroup_uniform_texture.
+ * Use DRW_shgroup_uniform_texture_ref instead.
+ */
+ operator GPUTexture *() const = delete;
+};
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Framebuffer
+ * \{ */
+
+class Framebuffer : NonCopyable {
+ private:
+ GPUFrameBuffer *fb_ = nullptr;
+ const char *name_;
+
+ public:
+ Framebuffer() : name_(""){};
+ Framebuffer(const char *name) : name_(name){};
+
+ ~Framebuffer()
+ {
+ GPU_FRAMEBUFFER_FREE_SAFE(fb_);
+ }
+
+ void ensure(GPUAttachment depth = GPU_ATTACHMENT_NONE,
+ GPUAttachment color1 = GPU_ATTACHMENT_NONE,
+ GPUAttachment color2 = GPU_ATTACHMENT_NONE,
+ GPUAttachment color3 = GPU_ATTACHMENT_NONE,
+ GPUAttachment color4 = GPU_ATTACHMENT_NONE,
+ GPUAttachment color5 = GPU_ATTACHMENT_NONE,
+ GPUAttachment color6 = GPU_ATTACHMENT_NONE,
+ GPUAttachment color7 = GPU_ATTACHMENT_NONE,
+ GPUAttachment color8 = GPU_ATTACHMENT_NONE)
+ {
+ GPU_framebuffer_ensure_config(
+ &fb_, {depth, color1, color2, color3, color4, color5, color6, color7, color8});
+ }
+
+ Framebuffer &operator=(Framebuffer &&a)
+ {
+ if (*this != a) {
+ this->fb_ = a.fb_;
+ this->name_ = a.name_;
+ a.fb_ = nullptr;
+ }
+ return *this;
+ }
+
+ operator GPUFrameBuffer *() const
+ {
+ return fb_;
+ }
+};
+
+/** \} */
+
+} // namespace blender::draw
diff --git a/source/blender/draw/intern/draw_cache_impl_curve.cc b/source/blender/draw/intern/draw_cache_impl_curve.cc
index 1108d40125b..33cf0e9a3cd 100644
--- a/source/blender/draw/intern/draw_cache_impl_curve.cc
+++ b/source/blender/draw/intern/draw_cache_impl_curve.cc
@@ -26,8 +26,8 @@
#include "MEM_guardedalloc.h"
#include "BLI_array.hh"
-#include "BLI_float3.hh"
#include "BLI_listbase.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_math_vector.h"
#include "BLI_span.hh"
#include "BLI_utildefines.h"
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc
index ea702e5efdd..b846da3f016 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc
@@ -25,9 +25,7 @@
#include <functional>
-#include "BLI_float2.hh"
-#include "BLI_float3.hh"
-#include "BLI_float4.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_string.h"
#include "BKE_attribute.h"
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index 73a94f066e3..79dda480a0a 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -54,6 +54,7 @@
#include "BKE_deform.h"
#include "BKE_global.h"
#include "BKE_gpencil.h"
+#include "BKE_gpencil_curve.h"
#include "BKE_gpencil_geom.h"
#include "BKE_layer.h"
#include "BKE_main.h"
@@ -834,7 +835,7 @@ static short gpencil_stroke_addpoint(tGPsdata *p,
/* color strength */
if (brush_settings->flag & GP_BRUSH_USE_STRENGTH_PRESSURE) {
pt->strength *= BKE_curvemapping_evaluateF(brush_settings->curve_strength, 0, pressure);
- CLAMP(pt->strength, GPENCIL_STRENGTH_MIN, 1.0f);
+ CLAMP(pt->strength, MIN2(GPENCIL_STRENGTH_MIN, brush_settings->draw_strength), 1.0f);
}
/* Set vertex colors for buffer. */
@@ -918,6 +919,19 @@ static short gpencil_stroke_addpoint(tGPsdata *p,
return GP_STROKEADD_INVALID;
}
+static void gpencil_stroke_unselect(bGPdata *gpd, bGPDstroke *gps)
+{
+ gps->flag &= ~GP_STROKE_SELECT;
+ BKE_gpencil_stroke_select_index_reset(gps);
+ for (int i = 0; i < gps->totpoints; i++) {
+ gps->points[i].flag &= ~GP_SPOINT_SELECT;
+ }
+ /* Update the selection from the stroke to the curve. */
+ if (gps->editcurve) {
+ BKE_gpencil_editcurve_stroke_sync_selection(gpd, gps, gps->editcurve);
+ }
+}
+
/* make a new stroke from the buffer data */
static void gpencil_stroke_newfrombuffer(tGPsdata *p)
{
@@ -928,6 +942,7 @@ static void gpencil_stroke_newfrombuffer(tGPsdata *p)
tGPspoint *ptc;
MDeformVert *dvert = NULL;
Brush *brush = p->brush;
+ BrushGpencilSettings *brush_settings = brush->gpencil_settings;
ToolSettings *ts = p->scene->toolsettings;
Depsgraph *depsgraph = p->depsgraph;
Object *obact = (Object *)p->ownerPtr.data;
@@ -1016,7 +1031,7 @@ static void gpencil_stroke_newfrombuffer(tGPsdata *p)
/* copy pressure and time */
pt->pressure = ptc->pressure;
pt->strength = ptc->strength;
- CLAMP(pt->strength, GPENCIL_STRENGTH_MIN, 1.0f);
+ CLAMP(pt->strength, MIN2(GPENCIL_STRENGTH_MIN, brush_settings->draw_strength), 1.0f);
copy_v4_v4(pt->vert_color, ptc->vert_color);
pt->time = ptc->time;
/* Apply the vertex color to point. */
@@ -1050,7 +1065,7 @@ static void gpencil_stroke_newfrombuffer(tGPsdata *p)
/* copy pressure and time */
pt->pressure = ptc->pressure;
pt->strength = ptc->strength;
- CLAMP(pt->strength, GPENCIL_STRENGTH_MIN, 1.0f);
+ CLAMP(pt->strength, MIN2(GPENCIL_STRENGTH_MIN, brush_settings->draw_strength), 1.0f);
pt->time = ptc->time;
/* Apply the vertex color to point. */
ED_gpencil_point_vertex_color_set(ts, brush, pt, ptc);
@@ -1175,7 +1190,7 @@ static void gpencil_stroke_newfrombuffer(tGPsdata *p)
/* copy pressure and time */
pt->pressure = ptc->pressure;
pt->strength = ptc->strength;
- CLAMP(pt->strength, GPENCIL_STRENGTH_MIN, 1.0f);
+ CLAMP(pt->strength, MIN2(GPENCIL_STRENGTH_MIN, brush_settings->draw_strength), 1.0f);
copy_v4_v4(pt->vert_color, ptc->vert_color);
pt->time = ptc->time;
pt->uv_fac = ptc->uv_fac;
@@ -1300,7 +1315,12 @@ static void gpencil_stroke_newfrombuffer(tGPsdata *p)
ctrl2,
GPENCIL_MINIMUM_JOIN_DIST,
&pt_index);
+
if (gps_target != NULL) {
+ /* Unselect all points of source and destination strokes. This is required to avoid
+ * a change in the resolution of the original strokes during the join. */
+ gpencil_stroke_unselect(gpd, gps);
+ gpencil_stroke_unselect(gpd, gps_target);
gps = ED_gpencil_stroke_join_and_trim(p->gpd, p->gpf, gps, gps_target, pt_index);
}
else {
diff --git a/source/blender/editors/include/ED_util.h b/source/blender/editors/include/ED_util.h
index 8a669a2afc2..6bcddfa631a 100644
--- a/source/blender/editors/include/ED_util.h
+++ b/source/blender/editors/include/ED_util.h
@@ -102,7 +102,7 @@ void ED_slider_destroy(struct bContext *C, struct tSlider *slider);
*/
void ED_slider_status_string_get(const struct tSlider *slider,
char *status_string,
- const size_t size_of_status_string);
+ size_t size_of_status_string);
float ED_slider_factor_get(struct tSlider *slider);
void ED_slider_factor_set(struct tSlider *slider, float factor);
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index f01b8318e98..9ce07cd2e07 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -495,7 +495,7 @@ float UI_text_clip_middle_ex(const struct uiFontStyle *fstyle,
char *str,
float okwidth,
float minwidth,
- const size_t max_len,
+ size_t max_len,
char rpart_sep);
/**
@@ -2957,15 +2957,17 @@ void UI_fontstyle_set(const struct uiFontStyle *fs);
void UI_fontstyle_draw_ex(const struct uiFontStyle *fs,
const struct rcti *rect,
const char *str,
+ size_t str_len,
const uchar col[4],
const struct uiFontStyleDraw_Params *fs_params,
- size_t len,
int *r_xofs,
int *r_yofs,
struct ResultBLF *r_info);
+
void UI_fontstyle_draw(const struct uiFontStyle *fs,
const struct rcti *rect,
const char *str,
+ size_t str_len,
const uchar col[4],
const struct uiFontStyleDraw_Params *fs_params);
/**
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 027f03d05c7..923f741e3ae 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -688,11 +688,11 @@ extern void ui_hsvcube_pos_from_vals(
*/
extern void ui_but_string_get_ex(uiBut *but,
char *str,
- const size_t maxlen,
+ size_t maxlen,
int float_precision,
bool use_exp_float,
bool *r_use_exp_float) ATTR_NONNULL(1, 2);
-extern void ui_but_string_get(uiBut *but, char *str, const size_t maxlen) ATTR_NONNULL();
+extern void ui_but_string_get(uiBut *but, char *str, size_t maxlen) ATTR_NONNULL();
/**
* A version of #ui_but_string_get_ex for dynamic buffer sizes
* (where #ui_but_string_get_max_length returns 0).
diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c
index bc1d3387ad7..135cef5fe53 100644
--- a/source/blender/editors/interface/interface_panel.c
+++ b/source/blender/editors/interface/interface_panel.c
@@ -1146,6 +1146,7 @@ static void panel_draw_aligned_widgets(const uiStyle *style,
UI_fontstyle_draw(fontstyle,
&title_rect,
panel->drawname,
+ sizeof(panel->drawname),
title_color,
&(struct uiFontStyleDraw_Params){
.align = UI_STYLE_TEXT_LEFT,
diff --git a/source/blender/editors/interface/interface_region_tooltip.c b/source/blender/editors/interface/interface_region_tooltip.c
index e146443faaa..fe58a6a05ae 100644
--- a/source/blender/editors/interface/interface_region_tooltip.c
+++ b/source/blender/editors/interface/interface_region_tooltip.c
@@ -74,6 +74,8 @@
#define UI_TIP_PADDING (int)(UI_TIP_PAD_FAC * UI_UNIT_Y)
#define UI_TIP_MAXWIDTH 600
+#define UI_TIP_STR_MAX 1024
+
typedef struct uiTooltipFormat {
enum {
UI_TIP_STYLE_NORMAL = 0,
@@ -214,7 +216,7 @@ static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *region
/* draw header and active data (is done here to be able to change color) */
rgb_float_to_uchar(drawcol, tip_colors[UI_TIP_LC_MAIN]);
UI_fontstyle_set(&data->fstyle);
- UI_fontstyle_draw(&data->fstyle, &bbox, field->text, drawcol, &fs_params);
+ UI_fontstyle_draw(&data->fstyle, &bbox, field->text, UI_TIP_STR_MAX, drawcol, &fs_params);
/* offset to the end of the last line */
if (field->text_suffix) {
@@ -224,7 +226,8 @@ static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *region
bbox.ymax -= yofs;
rgb_float_to_uchar(drawcol, tip_colors[UI_TIP_LC_ACTIVE]);
- UI_fontstyle_draw(&data->fstyle, &bbox, field->text_suffix, drawcol, &fs_params);
+ UI_fontstyle_draw(
+ &data->fstyle, &bbox, field->text_suffix, UI_TIP_STR_MAX, drawcol, &fs_params);
/* undo offset */
bbox.xmin -= xofs;
@@ -243,7 +246,7 @@ static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *region
/* XXX, needed because we don't have mono in 'U.uifonts' */
BLF_size(fstyle_mono.uifont_id, fstyle_mono.points * U.pixelsize, U.dpi);
rgb_float_to_uchar(drawcol, tip_colors[field->format.color_id]);
- UI_fontstyle_draw(&fstyle_mono, &bbox, field->text, drawcol, &fs_params);
+ UI_fontstyle_draw(&fstyle_mono, &bbox, field->text, UI_TIP_STR_MAX, drawcol, &fs_params);
}
else {
BLI_assert(field->format.style == UI_TIP_STYLE_NORMAL);
@@ -255,7 +258,7 @@ static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *region
/* draw remaining data */
rgb_float_to_uchar(drawcol, tip_colors[field->format.color_id]);
UI_fontstyle_set(&data->fstyle);
- UI_fontstyle_draw(&data->fstyle, &bbox, field->text, drawcol, &fs_params);
+ UI_fontstyle_draw(&data->fstyle, &bbox, field->text, UI_TIP_STR_MAX, drawcol, &fs_params);
}
bbox.ymax -= data->lineh * field->geom.lines;
@@ -1215,12 +1218,12 @@ static ARegion *ui_tooltip_create_with_data(bContext *C,
BLI_assert(ELEM(field->format.style, UI_TIP_STYLE_NORMAL, UI_TIP_STYLE_HEADER));
font_id = data->fstyle.uifont_id;
}
- w = BLF_width_ex(font_id, field->text, BLF_DRAW_STR_DUMMY_MAX, &info);
+ w = BLF_width_ex(font_id, field->text, UI_TIP_STR_MAX, &info);
/* check for suffix (enum label) */
if (field->text_suffix && field->text_suffix[0]) {
x_pos = info.width;
- w = max_ii(w, x_pos + BLF_width(font_id, field->text_suffix, BLF_DRAW_STR_DUMMY_MAX));
+ w = max_ii(w, x_pos + BLF_width(font_id, field->text_suffix, UI_TIP_STR_MAX));
}
fontw = max_ii(fontw, w);
diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c
index c28769a4951..44942d508ca 100644
--- a/source/blender/editors/interface/interface_style.c
+++ b/source/blender/editors/interface/interface_style.c
@@ -140,9 +140,9 @@ static uiFont *uifont_to_blfont(int id)
void UI_fontstyle_draw_ex(const uiFontStyle *fs,
const rcti *rect,
const char *str,
+ const size_t str_len,
const uchar col[4],
const struct uiFontStyleDraw_Params *fs_params,
- size_t len,
int *r_xofs,
int *r_yofs,
struct ResultBLF *r_info)
@@ -183,10 +183,10 @@ void UI_fontstyle_draw_ex(const uiFontStyle *fs,
}
if (fs_params->align == UI_STYLE_TEXT_CENTER) {
- xofs = floor(0.5f * (BLI_rcti_size_x(rect) - BLF_width(fs->uifont_id, str, len)));
+ xofs = floor(0.5f * (BLI_rcti_size_x(rect) - BLF_width(fs->uifont_id, str, str_len)));
}
else if (fs_params->align == UI_STYLE_TEXT_RIGHT) {
- xofs = BLI_rcti_size_x(rect) - BLF_width(fs->uifont_id, str, len);
+ xofs = BLI_rcti_size_x(rect) - BLF_width(fs->uifont_id, str, str_len);
}
yofs = MAX2(0, yofs);
@@ -196,7 +196,7 @@ void UI_fontstyle_draw_ex(const uiFontStyle *fs,
BLF_position(fs->uifont_id, rect->xmin + xofs, rect->ymin + yofs, 0.0f);
BLF_color4ubv(fs->uifont_id, col);
- BLF_draw_ex(fs->uifont_id, str, len, r_info);
+ BLF_draw_ex(fs->uifont_id, str, str_len, r_info);
BLF_disable(fs->uifont_id, font_flag);
@@ -211,12 +211,11 @@ void UI_fontstyle_draw_ex(const uiFontStyle *fs,
void UI_fontstyle_draw(const uiFontStyle *fs,
const rcti *rect,
const char *str,
+ const size_t str_len,
const uchar col[4],
const struct uiFontStyleDraw_Params *fs_params)
{
- int xofs, yofs;
-
- UI_fontstyle_draw_ex(fs, rect, str, col, fs_params, BLF_DRAW_STR_DUMMY_MAX, &xofs, &yofs, NULL);
+ UI_fontstyle_draw_ex(fs, rect, str, str_len, col, fs_params, NULL, NULL, NULL);
}
void UI_fontstyle_draw_rotated(const uiFontStyle *fs,
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index ad8c0842657..b44496731f7 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -2130,11 +2130,11 @@ static void widget_draw_text(const uiFontStyle *fstyle,
UI_fontstyle_draw_ex(fstyle,
rect,
drawstr + but->ofs,
+ drawlen,
wcol->text,
&(struct uiFontStyleDraw_Params){
.align = align,
},
- drawlen,
&font_xofs,
&font_yofs,
NULL);
@@ -2194,6 +2194,7 @@ static void widget_draw_text(const uiFontStyle *fstyle,
UI_fontstyle_draw(fstyle,
rect,
drawstr_right,
+ UI_MAX_DRAW_STR,
col,
&(struct uiFontStyleDraw_Params){
.align = UI_STYLE_TEXT_RIGHT,
@@ -5417,11 +5418,11 @@ void ui_draw_menu_item(const uiFontStyle *fstyle,
UI_fontstyle_draw_ex(fstyle,
rect,
drawstr,
+ sizeof(drawstr),
wt->wcol.text,
&(struct uiFontStyleDraw_Params){
.align = UI_STYLE_TEXT_LEFT,
},
- BLF_DRAW_STR_DUMMY_MAX,
&xofs,
&yofs,
&info);
@@ -5468,6 +5469,7 @@ void ui_draw_menu_item(const uiFontStyle *fstyle,
UI_fontstyle_draw(fstyle,
rect,
hint_drawstr,
+ sizeof(hint_drawstr),
wt->wcol.text,
&(struct uiFontStyleDraw_Params){
.align = UI_STYLE_TEXT_RIGHT,
@@ -5523,6 +5525,7 @@ void ui_draw_preview_item_stateless(const uiFontStyle *fstyle,
UI_fontstyle_draw(fstyle,
&trect,
drawstr,
+ sizeof(drawstr),
text_col,
&(struct uiFontStyleDraw_Params){
.align = text_align,
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index b9943d13b19..06e21f91d04 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -3527,6 +3527,8 @@ static int object_add_named_exec(bContext *C, wmOperator *op)
}
basen->object->visibility_flag &= ~OB_HIDE_VIEWPORT;
+ /* Do immediately, as #copy_object_set_idnew() below operates on visible objects. */
+ BKE_base_eval_flags(basen);
/* object_add_duplicate_internal() doesn't deselect other objects, unlike object_add_common() or
* BKE_view_layer_base_deselect_all(). */
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index b9c92c1664d..757b1a4c0c4 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -2083,15 +2083,31 @@ typedef struct sAreaSplitData {
} sAreaSplitData;
+static bool area_split_allowed(const ScrArea *area, const eScreenAxis dir_axis)
+{
+ if (!area || area->global) {
+ /* Must be a non-global area. */
+ return false;
+ }
+
+ if ((dir_axis == SCREEN_AXIS_V && area->winx <= 2 * AREAMINX) ||
+ (dir_axis == SCREEN_AXIS_H && area->winy <= 2 * ED_area_headersize())) {
+ /* Must be at least double minimum sizes to split into two. */
+ return false;
+ }
+
+ return true;
+}
+
static void area_split_draw_cb(const struct wmWindow *UNUSED(win), void *userdata)
{
const wmOperator *op = userdata;
sAreaSplitData *sd = op->customdata;
- if (sd->sarea) {
- const eScreenAxis dir_axis = RNA_enum_get(op->ptr, "direction");
- float fac = RNA_float_get(op->ptr, "factor");
+ const eScreenAxis dir_axis = RNA_enum_get(op->ptr, "direction");
+ if (area_split_allowed(sd->sarea, dir_axis)) {
+ float fac = RNA_float_get(op->ptr, "factor");
screen_draw_split_preview(sd->sarea, dir_axis, fac);
}
}
@@ -2121,18 +2137,6 @@ static bool area_split_init(bContext *C, wmOperator *op)
/* required properties */
const eScreenAxis dir_axis = RNA_enum_get(op->ptr, "direction");
- /* minimal size */
- if (dir_axis == SCREEN_AXIS_V) {
- if (area->winx < 2 * AREAMINX) {
- return false;
- }
- }
- else {
- if (area->winy < 2 * ED_area_headersize()) {
- return false;
- }
- }
-
/* custom data */
sAreaSplitData *sd = (sAreaSplitData *)MEM_callocN(sizeof(sAreaSplitData), "op_area_split");
op->customdata = sd;
@@ -2189,6 +2193,10 @@ static bool area_split_apply(bContext *C, wmOperator *op)
float fac = RNA_float_get(op->ptr, "factor");
const eScreenAxis dir_axis = RNA_enum_get(op->ptr, "direction");
+ if (!area_split_allowed(sd->sarea, dir_axis)) {
+ return false;
+ }
+
sd->narea = area_split(win, screen, sd->sarea, dir_axis, fac, false); /* false = no merge */
if (sd->narea == NULL) {
@@ -2254,9 +2262,15 @@ static void area_split_exit(bContext *C, wmOperator *op)
static void area_split_preview_update_cursor(bContext *C, wmOperator *op)
{
- wmWindow *win = CTX_wm_window(C);
+ sAreaSplitData *sd = (sAreaSplitData *)op->customdata;
const eScreenAxis dir_axis = RNA_enum_get(op->ptr, "direction");
- WM_cursor_set(win, (dir_axis == SCREEN_AXIS_H) ? WM_CURSOR_H_SPLIT : WM_CURSOR_V_SPLIT);
+ if (area_split_allowed(sd->sarea, dir_axis)) {
+ WM_cursor_set(CTX_wm_window(C),
+ (dir_axis == SCREEN_AXIS_H) ? WM_CURSOR_H_SPLIT : WM_CURSOR_V_SPLIT);
+ }
+ else {
+ WM_cursor_set(CTX_wm_window(C), WM_CURSOR_STOP);
+ }
}
/* UI callback, adds new handler */
@@ -2509,6 +2523,9 @@ static int area_split_modal(bContext *C, wmOperator *op, const wmEvent *event)
if (sd->sarea) {
ED_area_tag_redraw(sd->sarea);
}
+
+ area_split_preview_update_cursor(C, op);
+
/* area context not set */
sd->sarea = BKE_screen_find_area_xy(CTX_wm_screen(C), SPACE_TYPE_ANY, event->xy);
diff --git a/source/blender/editors/space_clip/CMakeLists.txt b/source/blender/editors/space_clip/CMakeLists.txt
index 8c7f59d61dd..06179ffdd95 100644
--- a/source/blender/editors/space_clip/CMakeLists.txt
+++ b/source/blender/editors/space_clip/CMakeLists.txt
@@ -31,6 +31,9 @@ set(INC
../../windowmanager
../../../../intern/glew-mx
../../../../intern/guardedalloc
+
+ # dna_type_offsets.h
+ ${CMAKE_CURRENT_BINARY_DIR}/../../makesdna/intern
)
set(SRC
diff --git a/source/blender/editors/space_clip/clip_editor.c b/source/blender/editors/space_clip/clip_editor.c
index 09daed7e2e7..d22e4864ecf 100644
--- a/source/blender/editors/space_clip/clip_editor.c
+++ b/source/blender/editors/space_clip/clip_editor.c
@@ -34,6 +34,7 @@
#include "MEM_guardedalloc.h"
+#include "DNA_defaults.h"
#include "DNA_mask_types.h"
#include "BLI_fileops.h"
@@ -686,7 +687,7 @@ static bool check_prefetch_break(void)
static uchar *prefetch_read_file_to_memory(
MovieClip *clip, int current_frame, short render_size, short render_flag, size_t *r_size)
{
- MovieClipUser user = {0};
+ MovieClipUser user = *DNA_struct_default_get(MovieClipUser);
user.framenr = current_frame;
user.render_size = render_size;
user.render_flag = render_flag;
@@ -733,7 +734,7 @@ static int prefetch_find_uncached_frame(MovieClip *clip,
short direction)
{
int current_frame;
- MovieClipUser user = {0};
+ MovieClipUser user = *DNA_struct_default_get(MovieClipUser);
user.render_size = render_size;
user.render_flag = render_flag;
@@ -833,7 +834,7 @@ static void prefetch_task_func(TaskPool *__restrict pool, void *task_data)
while ((mem = prefetch_thread_next_frame(queue, clip, &size, &current_frame))) {
ImBuf *ibuf;
- MovieClipUser user = {0};
+ MovieClipUser user = *DNA_struct_default_get(MovieClipUser);
int flag = IB_rect | IB_multilayer | IB_alphamode_detect | IB_metadata;
int result;
char *colorspace_name = NULL;
@@ -915,7 +916,7 @@ static bool prefetch_movie_frame(MovieClip *clip,
short render_flag,
short *stop)
{
- MovieClipUser user = {0};
+ MovieClipUser user = *DNA_struct_default_get(MovieClipUser);
if (check_prefetch_break() || *stop) {
return false;
diff --git a/source/blender/editors/space_clip/clip_ops.c b/source/blender/editors/space_clip/clip_ops.c
index 0aa7e35aed6..ef522e57d02 100644
--- a/source/blender/editors/space_clip/clip_ops.c
+++ b/source/blender/editors/space_clip/clip_ops.c
@@ -33,6 +33,7 @@
#include "MEM_guardedalloc.h"
+#include "DNA_defaults.h"
#include "DNA_scene_types.h" /* min/max frames */
#include "DNA_userdef_types.h"
@@ -1321,7 +1322,7 @@ static uchar *proxy_thread_next_frame(ProxyQueue *queue,
BLI_spin_lock(&queue->spin);
if (!*queue->stop && queue->cfra <= queue->efra) {
- MovieClipUser user = {0};
+ MovieClipUser user = *DNA_struct_default_get(MovieClipUser);
char name[FILE_MAX];
size_t size;
int file;
diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c
index 847cba32c69..b6dbda79a2d 100644
--- a/source/blender/editors/space_clip/space_clip.c
+++ b/source/blender/editors/space_clip/space_clip.c
@@ -24,6 +24,8 @@
#include <stdio.h>
#include <string.h>
+#include "DNA_defaults.h"
+
#include "DNA_mask_types.h"
#include "DNA_movieclip_types.h"
#include "DNA_scene_types.h"
@@ -239,14 +241,7 @@ static SpaceLink *clip_create(const ScrArea *area, const Scene *scene)
ARegion *region;
SpaceClip *sc;
- sc = MEM_callocN(sizeof(SpaceClip), "initclip");
- sc->spacetype = SPACE_CLIP;
- sc->flag = SC_SHOW_MARKER_PATTERN | SC_SHOW_TRACK_PATH | SC_SHOW_GRAPH_TRACKS_MOTION |
- SC_SHOW_GRAPH_FRAMES | SC_SHOW_ANNOTATION;
- sc->zoom = 1.0f;
- sc->path_length = 20;
- sc->scopes.track_preview_height = 120;
- sc->around = V3D_AROUND_CENTER_MEDIAN;
+ sc = DNA_struct_default_alloc(SpaceClip);
/* header */
region = MEM_callocN(sizeof(ARegion), "header for clip");
diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c
index 44e9735866d..dd1b4e10e60 100644
--- a/source/blender/editors/space_file/file_draw.c
+++ b/source/blender/editors/space_file/file_draw.c
@@ -240,6 +240,7 @@ static void file_draw_string(int sx,
UI_fontstyle_draw(&fs,
&rect,
fname,
+ sizeof(fname),
col,
&(struct uiFontStyleDraw_Params){
.align = align,
@@ -289,12 +290,12 @@ static void file_draw_string_multiline(int sx,
UI_fontstyle_draw_ex(&style->widget,
&rect,
string,
+ len,
text_col,
&(struct uiFontStyleDraw_Params){
.align = UI_STYLE_TEXT_LEFT,
.word_wrap = true,
},
- len,
NULL,
NULL,
&result);
diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc
index 2d3c42b16d1..e9a385c525b 100644
--- a/source/blender/editors/space_node/node_draw.cc
+++ b/source/blender/editors/space_node/node_draw.cc
@@ -2452,7 +2452,7 @@ static void frame_node_draw_label(const bNodeTree &ntree,
const bool has_label = node.label[0] != '\0';
if (has_label) {
BLF_position(fontid, x, y, 0);
- BLF_draw(fontid, label, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw(fontid, label, sizeof(label));
}
/* draw text body */
diff --git a/source/blender/editors/space_node/node_group.cc b/source/blender/editors/space_node/node_group.cc
index 4834ca3174a..02d68189997 100644
--- a/source/blender/editors/space_node/node_group.cc
+++ b/source/blender/editors/space_node/node_group.cc
@@ -28,9 +28,9 @@
#include "DNA_anim_types.h"
#include "DNA_node_types.h"
-#include "BLI_float2.hh"
#include "BLI_linklist.h"
#include "BLI_listbase.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_string.h"
#include "BLI_vector.hh"
diff --git a/source/blender/editors/space_node/node_intern.hh b/source/blender/editors/space_node/node_intern.hh
index 0f542734f66..740d1fbb6f9 100644
--- a/source/blender/editors/space_node/node_intern.hh
+++ b/source/blender/editors/space_node/node_intern.hh
@@ -23,7 +23,7 @@
#pragma once
-#include "BLI_float2.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_vector.hh"
#include "BKE_node.h"
@@ -43,9 +43,6 @@ struct bNodeLink;
struct bNodeSocket;
struct wmGizmoGroupType;
struct wmKeyConfig;
-namespace blender {
-struct float2;
-}
struct wmWindow;
/** Temporary data used in node link drag modal operator. */
diff --git a/source/blender/editors/space_node/node_select.cc b/source/blender/editors/space_node/node_select.cc
index 334ca1f76ee..803cf38c53a 100644
--- a/source/blender/editors/space_node/node_select.cc
+++ b/source/blender/editors/space_node/node_select.cc
@@ -111,11 +111,13 @@ static bNode *node_under_mouse_select(bNodeTree &ntree, int mx, int my)
static bNode *node_under_mouse_tweak(bNodeTree &ntree, const float2 &mouse)
{
+ using namespace blender::math;
+
LISTBASE_FOREACH_BACKWARD (bNode *, node, &ntree.nodes) {
if (node->type == NODE_REROUTE) {
bNodeSocket *socket = (bNodeSocket *)node->inputs.first;
const float2 location{socket->locx, socket->locy};
- if (float2::distance(mouse, location) < 24.0f) {
+ if (distance(mouse, location) < 24.0f) {
return node;
}
}
diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c
index a586f268128..8bcd50161bd 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -79,6 +79,7 @@
#include "RNA_access.h"
#include "outliner_intern.h"
+#include "tree/tree_display.h"
/* Disable - this is far too slow - campbell. */
/* #define USE_GROUP_SELECT */
@@ -2143,6 +2144,80 @@ static void outliner_draw_mode_column(const bContext *C,
}
}
+/* Returns `true` if some warning was drawn for that element or one of its sub-elements (if it is
+ * not open). */
+static bool outliner_draw_warning_tree_element(uiBlock *block,
+ SpaceOutliner *space_outliner,
+ TreeElement *te,
+ TreeStoreElem *tselem,
+ const bool use_mode_column,
+ const int te_ys)
+{
+ if ((te->flag & TE_HAS_WARNING) == 0) {
+ /* If given element has no warning, recusively try to display the first sub-elements' warning.
+ */
+ if (!TSELEM_OPEN(tselem, space_outliner)) {
+ LISTBASE_FOREACH (TreeElement *, sub_te, &te->subtree) {
+ TreeStoreElem *sub_tselem = TREESTORE(sub_te);
+
+ if (outliner_draw_warning_tree_element(
+ block, space_outliner, sub_te, sub_tselem, use_mode_column, te_ys)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ int icon = ICON_NONE;
+ const char *tip = "";
+ const bool has_warning = outliner_element_warnings_get(te, &icon, &tip);
+ BLI_assert(has_warning);
+ UNUSED_VARS_NDEBUG(has_warning);
+
+ /* Move the warnings a unit left in view layer mode. */
+ const short mode_column_offset = (use_mode_column && (space_outliner->outlinevis == SO_SCENES)) ?
+ UI_UNIT_X :
+ 0;
+
+ UI_block_emboss_set(block, UI_EMBOSS_NONE_OR_STATUS);
+ uiBut *but = uiDefIconBut(block,
+ UI_BTYPE_ICON_TOGGLE,
+ 0,
+ icon,
+ mode_column_offset,
+ te_ys,
+ UI_UNIT_X,
+ UI_UNIT_Y,
+ NULL,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ tip);
+ /* No need for undo here, this is a pure info widget. */
+ UI_but_flag_disable(but, UI_BUT_UNDO);
+
+ return true;
+}
+
+static void outliner_draw_warning_column(const bContext *C,
+ uiBlock *block,
+ SpaceOutliner *space_outliner,
+ const bool use_mode_column,
+ ListBase *tree)
+{
+ LISTBASE_FOREACH (TreeElement *, te, tree) {
+ TreeStoreElem *tselem = TREESTORE(te);
+
+ outliner_draw_warning_tree_element(block, space_outliner, te, tselem, use_mode_column, te->ys);
+
+ if (TSELEM_OPEN(tselem, space_outliner)) {
+ outliner_draw_warning_column(C, block, space_outliner, use_mode_column, &te->subtree);
+ }
+ }
+}
+
/* ****************************************************** */
/* Normal Drawing... */
@@ -3612,17 +3687,22 @@ static void outliner_draw_tree(bContext *C,
SpaceOutliner *space_outliner,
const float restrict_column_width,
const bool use_mode_column,
+ const bool use_warning_column,
TreeElement **te_edit)
{
const uiFontStyle *fstyle = UI_FSTYLE_WIDGET;
int starty, startx;
/* Move the tree a unit left in view layer mode */
- short mode_column_offset = (use_mode_column && (space_outliner->outlinevis == SO_SCENES)) ?
- UI_UNIT_X :
- 0;
+ short columns_offset = (use_mode_column && (space_outliner->outlinevis == SO_SCENES)) ?
+ UI_UNIT_X :
+ 0;
if (!use_mode_column && (space_outliner->outlinevis == SO_VIEW_LAYER)) {
- mode_column_offset -= UI_UNIT_X;
+ columns_offset -= UI_UNIT_X;
+ }
+
+ if (use_warning_column) {
+ columns_offset += UI_UNIT_X;
}
GPU_blend(GPU_BLEND_ALPHA); /* Only once. */
@@ -3650,12 +3730,12 @@ static void outliner_draw_tree(bContext *C,
/* Draw hierarchy lines for collections and object children. */
starty = (int)region->v2d.tot.ymax - OL_Y_OFFSET;
- startx = mode_column_offset + UI_UNIT_X / 2 - (U.pixelsize + 1) / 2;
+ startx = columns_offset + UI_UNIT_X / 2 - (U.pixelsize + 1) / 2;
outliner_draw_hierarchy_lines(space_outliner, &space_outliner->tree, startx, &starty);
/* Items themselves. */
starty = (int)region->v2d.tot.ymax - UI_UNIT_Y - OL_Y_OFFSET;
- startx = mode_column_offset;
+ startx = columns_offset;
LISTBASE_FOREACH (TreeElement *, te, &space_outliner->tree) {
outliner_draw_tree_element(C,
block,
@@ -3786,6 +3866,10 @@ void draw_outliner(const bContext *C)
const bool use_mode_column = (space_outliner->flag & SO_MODE_COLUMN) &&
(ELEM(space_outliner->outlinevis, SO_VIEW_LAYER, SO_SCENES));
+ const bool use_warning_column =
+ ELEM(space_outliner->outlinevis, SO_LIBRARIES, SO_OVERRIDES_LIBRARY) &&
+ outliner_tree_display_warnings_poll(space_outliner->runtime->tree_display);
+
/* Draw outliner stuff (background, hierarchy lines and names). */
const float restrict_column_width = outliner_restrict_columns_width(space_outliner);
outliner_back(region);
@@ -3797,6 +3881,7 @@ void draw_outliner(const bContext *C)
space_outliner,
restrict_column_width,
use_mode_column,
+ use_warning_column,
&te_edit);
/* Compute outliner dimensions after it has been drawn. */
@@ -3841,6 +3926,11 @@ void draw_outliner(const bContext *C)
outliner_draw_mode_column(C, block, &tvc, space_outliner, &space_outliner->tree);
}
+ /* Draw warning icons */
+ if (use_warning_column) {
+ outliner_draw_warning_column(C, block, space_outliner, use_mode_column, &space_outliner->tree);
+ }
+
UI_block_emboss_set(block, UI_EMBOSS);
/* Draw edit buttons if necessary. */
diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h
index e331887319e..24e86e06f68 100644
--- a/source/blender/editors/space_outliner/outliner_intern.h
+++ b/source/blender/editors/space_outliner/outliner_intern.h
@@ -158,6 +158,8 @@ enum {
/* Child elements of the same type in the icon-row are drawn merged as one icon.
* This flag is set for an element that is part of these merged child icons. */
TE_ICONROW_MERGED = (1 << 7),
+ /* This element has some warning to be displayed. */
+ TE_HAS_WARNING = (1 << 8),
};
/* button events */
diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c
index 3353726de18..e461eb4c69e 100644
--- a/source/blender/editors/space_outliner/outliner_tree.c
+++ b/source/blender/editors/space_outliner/outliner_tree.c
@@ -74,6 +74,7 @@
#include "RNA_access.h"
#include "UI_interface.h"
+#include "UI_resources.h"
#include "outliner_intern.h"
#include "tree/tree_display.h"
@@ -812,6 +813,41 @@ static void outliner_add_id_contents(SpaceOutliner *space_outliner,
}
}
+bool outliner_element_warnings_get(TreeElement *te, int *r_icon, const char **r_message)
+{
+ TreeStoreElem *tselem = TREESTORE(te);
+
+ if (tselem->type != TSE_SOME_ID) {
+ return false;
+ }
+ if (te->idcode != ID_LI) {
+ return false;
+ }
+
+ Library *library = (Library *)tselem->id;
+ if (library->tag & LIBRARY_TAG_RESYNC_REQUIRED) {
+ if (r_icon) {
+ *r_icon = ICON_ERROR;
+ }
+ if (r_message) {
+ *r_message = TIP_(
+ "Contains linked library overrides that need to be resynced, updating the library is "
+ "recommended");
+ }
+ return true;
+ }
+ if (library->id.tag & LIB_TAG_MISSING) {
+ if (r_icon) {
+ *r_icon = ICON_ERROR;
+ }
+ if (r_message) {
+ *r_message = TIP_("Missing library");
+ }
+ return true;
+ }
+ return false;
+}
+
TreeElement *outliner_add_element(SpaceOutliner *space_outliner,
ListBase *lb,
void *idv,
@@ -1115,6 +1151,10 @@ TreeElement *outliner_add_element(SpaceOutliner *space_outliner,
}
}
+ if (outliner_element_warnings_get(te, NULL, NULL)) {
+ te->flag |= TE_HAS_WARNING;
+ }
+
return te;
}
diff --git a/source/blender/editors/space_outliner/tree/tree_display.cc b/source/blender/editors/space_outliner/tree/tree_display.cc
index 003afd5bdec..e192929c7cf 100644
--- a/source/blender/editors/space_outliner/tree/tree_display.cc
+++ b/source/blender/editors/space_outliner/tree/tree_display.cc
@@ -66,3 +66,10 @@ ListBase outliner_tree_display_build_tree(TreeDisplay *tree_display, TreeSourceD
{
return reinterpret_cast<AbstractTreeDisplay *>(tree_display)->buildTree(*source_data);
}
+
+bool outliner_tree_display_warnings_poll(const TreeDisplay *tree_display)
+{
+ const AbstractTreeDisplay *abstract_tree_display = reinterpret_cast<const AbstractTreeDisplay *>(
+ tree_display);
+ return abstract_tree_display->has_warnings;
+}
diff --git a/source/blender/editors/space_outliner/tree/tree_display.h b/source/blender/editors/space_outliner/tree/tree_display.h
index b6dc33ba7b7..7b959576a4b 100644
--- a/source/blender/editors/space_outliner/tree/tree_display.h
+++ b/source/blender/editors/space_outliner/tree/tree_display.h
@@ -47,6 +47,16 @@ void outliner_tree_display_destroy(TreeDisplay **tree_display);
ListBase outliner_tree_display_build_tree(TreeDisplay *tree_display, TreeSourceData *source_data);
+/** Accessor to whether given tree has some warnings to display. */
+bool outliner_tree_display_warnings_poll(const struct TreeDisplay *tree_display);
+
+/** Get actual warning data of a tree element, if any.
+ *
+ * \param r_icon The icon to display as warning.
+ * \param r_message The message to display as warning.
+ * \return true if there is a warning, false otherwise. */
+bool outliner_element_warnings_get(struct TreeElement *te, int *r_icon, const char **r_message);
+
/* The following functions are needed to build the tree. They are calls back into C; the way
* elements are created should be refactored and ported to C++ with a new design/API too. */
/**
diff --git a/source/blender/editors/space_outliner/tree/tree_display.hh b/source/blender/editors/space_outliner/tree/tree_display.hh
index 54e64655b18..bf9cf18948c 100644
--- a/source/blender/editors/space_outliner/tree/tree_display.hh
+++ b/source/blender/editors/space_outliner/tree/tree_display.hh
@@ -65,6 +65,8 @@ class AbstractTreeDisplay {
*/
virtual ListBase buildTree(const TreeSourceData &source_data) = 0;
+ bool has_warnings = false;
+
protected:
/** All derived classes will need a handle to this, so storing it in the base for convenience. */
SpaceOutliner &space_outliner_;
@@ -105,7 +107,7 @@ class TreeDisplayLibraries final : public AbstractTreeDisplay {
ListBase buildTree(const TreeSourceData &source_data) override;
private:
- TreeElement *add_library_contents(Main &, ListBase &, Library *) const;
+ TreeElement *add_library_contents(Main &, ListBase &, Library *);
bool library_id_filter_poll(const Library *lib, ID *id) const;
short id_filter_get() const;
};
@@ -123,7 +125,7 @@ class TreeDisplayOverrideLibrary final : public AbstractTreeDisplay {
ListBase buildTree(const TreeSourceData &source_data) override;
private:
- TreeElement *add_library_contents(Main &, ListBase &, Library *) const;
+ TreeElement *add_library_contents(Main &, ListBase &, Library *);
bool override_library_id_filter_poll(const Library *lib, ID *id) const;
short id_filter_get() const;
};
diff --git a/source/blender/editors/space_outliner/tree/tree_display_libraries.cc b/source/blender/editors/space_outliner/tree/tree_display_libraries.cc
index 836f0937cf4..461104e6bad 100644
--- a/source/blender/editors/space_outliner/tree/tree_display_libraries.cc
+++ b/source/blender/editors/space_outliner/tree/tree_display_libraries.cc
@@ -104,9 +104,7 @@ ListBase TreeDisplayLibraries::buildTree(const TreeSourceData &source_data)
return tree;
}
-TreeElement *TreeDisplayLibraries::add_library_contents(Main &mainvar,
- ListBase &lb,
- Library *lib) const
+TreeElement *TreeDisplayLibraries::add_library_contents(Main &mainvar, ListBase &lb, Library *lib)
{
const short filter_id_type = id_filter_get();
@@ -149,6 +147,9 @@ TreeElement *TreeDisplayLibraries::add_library_contents(Main &mainvar,
tenlib = outliner_add_element(&space_outliner_, &lb, &mainvar, nullptr, TSE_ID_BASE, 0);
tenlib->name = IFACE_("Current File");
}
+ if (tenlib->flag & TE_HAS_WARNING) {
+ has_warnings = true;
+ }
}
/* Create data-block list parent element on demand. */
diff --git a/source/blender/editors/space_outliner/tree/tree_display_override_library.cc b/source/blender/editors/space_outliner/tree/tree_display_override_library.cc
index 943e182277c..bf9fba30c9f 100644
--- a/source/blender/editors/space_outliner/tree/tree_display_override_library.cc
+++ b/source/blender/editors/space_outliner/tree/tree_display_override_library.cc
@@ -112,7 +112,7 @@ ListBase TreeDisplayOverrideLibrary::buildTree(const TreeSourceData &source_data
TreeElement *TreeDisplayOverrideLibrary::add_library_contents(Main &mainvar,
ListBase &lb,
- Library *lib) const
+ Library *lib)
{
const short filter_id_type = id_filter_get();
@@ -152,6 +152,9 @@ TreeElement *TreeDisplayOverrideLibrary::add_library_contents(Main &mainvar,
tenlib = outliner_add_element(&space_outliner_, &lb, &mainvar, nullptr, TSE_ID_BASE, 0);
tenlib->name = IFACE_("Current File");
}
+ if (tenlib->flag & TE_HAS_WARNING) {
+ has_warnings = true;
+ }
}
/* Create data-block list parent element on demand. */
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index e814530d1e2..6dffc0bc2a4 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -2262,28 +2262,15 @@ void sequencer_draw_preview(const bContext *C,
seq_prefetch_wm_notify(C, scene);
}
-/* Draw backdrop in sequencer timeline. */
-static void draw_seq_backdrop(View2D *v2d)
+static void draw_seq_timeline_channels(View2D *v2d)
{
- int i;
-
uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
-
- /* View backdrop. */
- immUniformThemeColor(TH_BACK);
- immRectf(pos, v2d->cur.xmin, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
-
- /* Darker overlay over the view backdrop. */
- immUniformThemeColorShade(TH_BACK, -10);
- immRectf(pos, v2d->cur.xmin, -1.0, v2d->cur.xmax, 1.0);
-
- /* Alternating horizontal stripes. */
- i = max_ii(1, ((int)v2d->cur.ymin) - 1);
-
GPU_blend(GPU_BLEND_ALPHA);
immUniformThemeColor(TH_ROW_ALTERNATE);
+ /* Alternating horizontal stripes. */
+ int i = max_ii(1, ((int)v2d->cur.ymin) - 1);
while (i < v2d->cur.ymax) {
if (i & 1) {
immRectf(pos, v2d->cur.xmin, i, v2d->cur.xmax, i + 1);
@@ -2295,6 +2282,14 @@ static void draw_seq_backdrop(View2D *v2d)
immUnbindProgram();
}
+static void draw_seq_timeline_channel_numbers(ARegion *region)
+{
+ View2D *v2d = &region->v2d;
+ rcti rect;
+ BLI_rcti_init(&rect, 0, 15 * UI_DPI_FAC, 15 * UI_DPI_FAC, region->winy - UI_TIME_SCRUB_MARGIN_Y);
+ UI_view2d_draw_scale_y__block(region, v2d, &rect, TH_SCROLL_TEXT);
+}
+
static void draw_seq_strips(const bContext *C, Editing *ed, ARegion *region)
{
Scene *scene = CTX_data_scene(C);
@@ -2718,7 +2713,7 @@ void draw_timeline_seq(const bContext *C, ARegion *region)
}
UI_view2d_view_ortho(v2d);
- draw_seq_backdrop(v2d);
+ draw_seq_timeline_channels(v2d);
if ((sseq->flag & SEQ_SHOW_OVERLAY) && (sseq->timeline_overlay.flag & SEQ_TIMELINE_SHOW_GRID)) {
U.v2d_min_gridsize *= 3;
UI_view2d_draw_lines_x__discrete_frames_or_seconds(
@@ -2776,13 +2771,7 @@ void draw_timeline_seq(const bContext *C, ARegion *region)
UI_view2d_view_restore(C);
ED_time_scrub_draw(region, scene, !(sseq->flag & SEQ_DRAWFRAMES), true);
- /* Draw channel numbers. */
- {
- rcti rect;
- BLI_rcti_init(
- &rect, 0, 15 * UI_DPI_FAC, 15 * UI_DPI_FAC, region->winy - UI_TIME_SCRUB_MARGIN_Y);
- UI_view2d_draw_scale_y__block(region, v2d, &rect, TH_SCROLL_TEXT);
- }
+ draw_seq_timeline_channel_numbers(region);
}
void draw_timeline_seq_display(const bContext *C, ARegion *region)
diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_column.cc b/source/blender/editors/space_spreadsheet/spreadsheet_column.cc
index ee623083db7..ede8756a9da 100644
--- a/source/blender/editors/space_spreadsheet/spreadsheet_column.cc
+++ b/source/blender/editors/space_spreadsheet/spreadsheet_column.cc
@@ -19,9 +19,8 @@
#include "MEM_guardedalloc.h"
#include "BLI_color.hh"
-#include "BLI_float2.hh"
-#include "BLI_float3.hh"
#include "BLI_hash.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_string.h"
#include "BLI_string_ref.hh"
diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc b/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc
index 7cc2d8d0b48..f4b5ff819ed 100644
--- a/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc
+++ b/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc
@@ -17,8 +17,7 @@
#include <iomanip>
#include <sstream>
-#include "BLI_float2.hh"
-#include "BLI_float3.hh"
+#include "BLI_math_vec_types.hh"
#include "BKE_geometry_set.hh"
diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.cc b/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.cc
index 36c7f1057df..556c0b0d5ca 100644
--- a/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.cc
+++ b/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.cc
@@ -123,9 +123,7 @@ static void apply_row_filter(const SpreadsheetRowFilter &row_filter,
const float threshold_sq = row_filter.threshold;
apply_filter_operation(
column_data.typed<float2>(),
- [&](const float2 cell) {
- return float2::distance_squared(cell, value) > threshold_sq;
- },
+ [&](const float2 cell) { return math::distance_squared(cell, value) > threshold_sq; },
prev_mask,
new_indices);
break;
@@ -155,9 +153,7 @@ static void apply_row_filter(const SpreadsheetRowFilter &row_filter,
const float threshold_sq = row_filter.threshold;
apply_filter_operation(
column_data.typed<float3>(),
- [&](const float3 cell) {
- return float3::distance_squared(cell, value) > threshold_sq;
- },
+ [&](const float3 cell) { return math::distance_squared(cell, value) > threshold_sq; },
prev_mask,
new_indices);
break;
diff --git a/source/blender/editors/util/ed_draw.c b/source/blender/editors/util/ed_draw.c
index ccbde07f5b1..3e85862a847 100644
--- a/source/blender/editors/util/ed_draw.c
+++ b/source/blender/editors/util/ed_draw.c
@@ -599,9 +599,9 @@ static void metadata_custom_draw_fields(const char *field, const char *value, vo
}
MetadataCustomDrawContext *ctx = (MetadataCustomDrawContext *)ctx_v;
char temp_str[MAX_METADATA_STR];
- BLI_snprintf(temp_str, MAX_METADATA_STR, "%s: %s", field, value);
+ SNPRINTF(temp_str, "%s: %s", field, value);
BLF_position(ctx->fontid, ctx->xmin, ctx->ymin + ctx->current_y, 0.0f);
- BLF_draw(ctx->fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw(ctx->fontid, temp_str, sizeof(temp_str));
ctx->current_y += ctx->vertical_offset;
}
@@ -625,18 +625,18 @@ static void metadata_draw_imbuf(ImBuf *ibuf, const rctf *rect, int fontid, const
/* first line */
if (i == 0) {
bool do_newline = false;
- int len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[0]);
+ int len = SNPRINTF_RLEN(temp_str, "%s: ", meta_data_list[0]);
if (metadata_is_valid(ibuf, temp_str, 0, len)) {
BLF_position(fontid, xmin, ymax - vertical_offset, 0.0f);
- BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw(fontid, temp_str, sizeof(temp_str));
do_newline = true;
}
- len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[1]);
+ len = SNPRINTF_RLEN(temp_str, "%s: ", meta_data_list[1]);
if (metadata_is_valid(ibuf, temp_str, 1, len)) {
- int line_width = BLF_width(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
+ int line_width = BLF_width(fontid, temp_str, sizeof(temp_str));
BLF_position(fontid, xmax - line_width, ymax - vertical_offset, 0.0f);
- BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw(fontid, temp_str, sizeof(temp_str));
do_newline = true;
}
@@ -645,32 +645,32 @@ static void metadata_draw_imbuf(ImBuf *ibuf, const rctf *rect, int fontid, const
}
} /* Strip */
else if (ELEM(i, 1, 2)) {
- int len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[i + 1]);
+ int len = SNPRINTF_RLEN(temp_str, "%s: ", meta_data_list[i + 1]);
if (metadata_is_valid(ibuf, temp_str, i + 1, len)) {
BLF_position(fontid, xmin, ymax - vertical_offset - ofs_y, 0.0f);
- BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw(fontid, temp_str, sizeof(temp_str));
ofs_y += vertical_offset;
}
} /* Note (wrapped) */
else if (i == 3) {
- int len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[i + 1]);
+ int len = SNPRINTF_RLEN(temp_str, "%s: ", meta_data_list[i + 1]);
if (metadata_is_valid(ibuf, temp_str, i + 1, len)) {
struct ResultBLF info;
BLF_enable(fontid, BLF_WORD_WRAP);
BLF_wordwrap(fontid, ibuf->x - (margin * 2));
BLF_position(fontid, xmin, ymax - vertical_offset - ofs_y, 0.0f);
- BLF_draw_ex(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX, &info);
+ BLF_draw_ex(fontid, temp_str, sizeof(temp_str), &info);
BLF_wordwrap(fontid, 0);
BLF_disable(fontid, BLF_WORD_WRAP);
ofs_y += vertical_offset * info.lines;
}
}
else {
- int len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[i + 1]);
+ int len = SNPRINTF_RLEN(temp_str, "%s: ", meta_data_list[i + 1]);
if (metadata_is_valid(ibuf, temp_str, i + 1, len)) {
- int line_width = BLF_width(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
+ int line_width = BLF_width(fontid, temp_str, sizeof(temp_str));
BLF_position(fontid, xmax - line_width, ymax - vertical_offset - ofs_y, 0.0f);
- BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw(fontid, temp_str, sizeof(temp_str));
ofs_y += vertical_offset;
}
}
@@ -687,12 +687,12 @@ static void metadata_draw_imbuf(ImBuf *ibuf, const rctf *rect, int fontid, const
int ofs_x = 0;
ofs_y = ctx.current_y;
for (int i = 5; i < 10; i++) {
- int len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[i]);
+ int len = SNPRINTF_RLEN(temp_str, "%s: ", meta_data_list[i]);
if (metadata_is_valid(ibuf, temp_str, i, len)) {
BLF_position(fontid, xmin + ofs_x, ymin + ofs_y, 0.0f);
- BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw(fontid, temp_str, sizeof(temp_str));
- ofs_x += BLF_width(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX) + UI_UNIT_X;
+ ofs_x += BLF_width(fontid, temp_str, sizeof(temp_str)) + UI_UNIT_X;
}
}
}
diff --git a/source/blender/freestyle/CMakeLists.txt b/source/blender/freestyle/CMakeLists.txt
index b7eaf018dba..47da6bc55f6 100644
--- a/source/blender/freestyle/CMakeLists.txt
+++ b/source/blender/freestyle/CMakeLists.txt
@@ -594,4 +594,7 @@ if(WIN32)
endif()
blender_add_lib(bf_freestyle "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
-blender_precompile_headers(bf_freestyle FRS_precomp.cpp FRS_precomp.h)
+
+if(COMMAND target_precompile_headers)
+ target_precompile_headers(bf_freestyle PRIVATE FRS_precomp.h)
+endif()
diff --git a/source/blender/freestyle/FRS_precomp.cpp b/source/blender/freestyle/FRS_precomp.cpp
deleted file mode 100644
index 7e50a47f45b..00000000000
--- a/source/blender/freestyle/FRS_precomp.cpp
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Pre-compiled headers, see: D2606. */
-#include "FRS_precomp.h"
diff --git a/source/blender/functions/intern/cpp_types.cc b/source/blender/functions/intern/cpp_types.cc
index 058fb76af2b..0bbfbc8cb10 100644
--- a/source/blender/functions/intern/cpp_types.cc
+++ b/source/blender/functions/intern/cpp_types.cc
@@ -18,9 +18,8 @@
#include "FN_field_cpp_type.hh"
#include "BLI_color.hh"
-#include "BLI_float2.hh"
-#include "BLI_float3.hh"
#include "BLI_float4x4.hh"
+#include "BLI_math_vec_types.hh"
namespace blender::fn {
diff --git a/source/blender/imbuf/IMB_imbuf.h b/source/blender/imbuf/IMB_imbuf.h
index c7481c6ea67..65d7631445d 100644
--- a/source/blender/imbuf/IMB_imbuf.h
+++ b/source/blender/imbuf/IMB_imbuf.h
@@ -544,7 +544,7 @@ bool IMB_prepare_write_ImBuf(bool isfloat, struct ImBuf *ibuf);
*/
bool IMB_ispic(const char *filepath);
bool IMB_ispic_type_matches(const char *filepath, int filetype);
-int IMB_ispic_type_from_memory(const unsigned char *buf, const size_t buf_size);
+int IMB_ispic_type_from_memory(const unsigned char *buf, size_t buf_size);
int IMB_ispic_type(const char *filepath);
/**
@@ -972,28 +972,20 @@ void IMB_update_gpu_texture_sub(struct GPUTexture *tex,
/**
* \attention defined in stereoimbuf.c
*/
-void IMB_stereo3d_write_dimensions(char mode,
- bool is_squeezed,
- const size_t width,
- const size_t height,
- size_t *r_width,
- size_t *r_height);
-void IMB_stereo3d_read_dimensions(char mode,
- bool is_squeezed,
- const size_t width,
- const size_t height,
- size_t *r_width,
- size_t *r_height);
+void IMB_stereo3d_write_dimensions(
+ char mode, bool is_squeezed, size_t width, size_t height, size_t *r_width, size_t *r_height);
+void IMB_stereo3d_read_dimensions(
+ char mode, bool is_squeezed, size_t width, size_t height, size_t *r_width, size_t *r_height);
int *IMB_stereo3d_from_rect(struct ImageFormatData *im_format,
- const size_t x,
- const size_t y,
- const size_t channels,
+ size_t x,
+ size_t y,
+ size_t channels,
int *rect_left,
int *rect_right);
float *IMB_stereo3d_from_rectf(struct ImageFormatData *im_format,
- const size_t x,
- const size_t y,
- const size_t channels,
+ size_t x,
+ size_t y,
+ size_t channels,
float *rectf_left,
float *rectf_right);
/**
diff --git a/source/blender/imbuf/IMB_metadata.h b/source/blender/imbuf/IMB_metadata.h
index 652ce913ee5..50982d08c3e 100644
--- a/source/blender/imbuf/IMB_metadata.h
+++ b/source/blender/imbuf/IMB_metadata.h
@@ -58,10 +58,7 @@ void IMB_metadata_free(struct IDProperty *metadata);
* \param len: length of value buffer allocated by user.
* \return 1 (true) if metadata is present and value for the key found, 0 (false) otherwise.
*/
-bool IMB_metadata_get_field(struct IDProperty *metadata,
- const char *key,
- char *value,
- const size_t len);
+bool IMB_metadata_get_field(struct IDProperty *metadata, const char *key, char *value, size_t len);
/**
* Set user data in the metadata.
diff --git a/source/blender/imbuf/intern/IMB_filetype.h b/source/blender/imbuf/intern/IMB_filetype.h
index 104458ffa7a..bf6aef3ecd3 100644
--- a/source/blender/imbuf/intern/IMB_filetype.h
+++ b/source/blender/imbuf/intern/IMB_filetype.h
@@ -41,7 +41,7 @@ typedef struct ImFileType {
* \note that this may only read in a small part of the files header,
* see: #IMB_ispic_type for details.
*/
- bool (*is_a)(const unsigned char *buf, const size_t size);
+ bool (*is_a)(const unsigned char *buf, size_t size);
/** Load an image from memory. */
struct ImBuf *(*load)(const unsigned char *mem,
@@ -93,7 +93,7 @@ void imb_tile_cache_tile_free(struct ImBuf *ibuf, int tx, int ty);
/** \name Format: PNG (#IMB_FTYPE_PNG)
* \{ */
-bool imb_is_a_png(const unsigned char *mem, const size_t size);
+bool imb_is_a_png(const unsigned char *mem, size_t size);
struct ImBuf *imb_loadpng(const unsigned char *mem,
size_t size,
int flags,
@@ -106,7 +106,7 @@ bool imb_savepng(struct ImBuf *ibuf, const char *filepath, int flags);
/** \name Format: TARGA (#IMB_FTYPE_TGA)
* \{ */
-bool imb_is_a_targa(const unsigned char *buf, const size_t size);
+bool imb_is_a_targa(const unsigned char *buf, size_t size);
struct ImBuf *imb_loadtarga(const unsigned char *mem,
size_t size,
int flags,
@@ -119,7 +119,7 @@ bool imb_savetarga(struct ImBuf *ibuf, const char *filepath, int flags);
/** \name Format: IRIS (#IMB_FTYPE_IMAGIC)
* \{ */
-bool imb_is_a_iris(const unsigned char *mem, const size_t size);
+bool imb_is_a_iris(const unsigned char *mem, size_t size);
/**
* Read in a B/W RGB or RGBA iris image file and return an image buffer.
*/
@@ -135,7 +135,7 @@ bool imb_saveiris(struct ImBuf *ibuf, const char *filepath, int flags);
/** \name Format: JP2 (#IMB_FTYPE_JP2)
* \{ */
-bool imb_is_a_jp2(const unsigned char *buf, const size_t size);
+bool imb_is_a_jp2(const unsigned char *buf, size_t size);
struct ImBuf *imb_load_jp2(const unsigned char *mem,
size_t size,
int flags,
@@ -151,7 +151,7 @@ bool imb_save_jp2(struct ImBuf *ibuf, const char *filepath, int flags);
/** \name Format: JPEG (#IMB_FTYPE_JPG)
* \{ */
-bool imb_is_a_jpeg(const unsigned char *mem, const size_t size);
+bool imb_is_a_jpeg(const unsigned char *mem, size_t size);
bool imb_savejpeg(struct ImBuf *ibuf, const char *filepath, int flags);
struct ImBuf *imb_load_jpeg(const unsigned char *buffer,
size_t size,
@@ -164,7 +164,7 @@ struct ImBuf *imb_load_jpeg(const unsigned char *buffer,
/** \name Format: BMP (#IMB_FTYPE_BMP)
* \{ */
-bool imb_is_a_bmp(const unsigned char *buf, const size_t size);
+bool imb_is_a_bmp(const unsigned char *buf, size_t size);
struct ImBuf *imb_bmp_decode(const unsigned char *mem,
size_t size,
int flags,
@@ -178,7 +178,7 @@ bool imb_savebmp(struct ImBuf *ibuf, const char *filepath, int flags);
/** \name Format: CINEON (#IMB_FTYPE_CINEON)
* \{ */
-bool imb_is_a_cineon(const unsigned char *buf, const size_t size);
+bool imb_is_a_cineon(const unsigned char *buf, size_t size);
bool imb_save_cineon(struct ImBuf *buf, const char *filepath, int flags);
struct ImBuf *imb_load_cineon(const unsigned char *mem,
size_t size,
@@ -191,7 +191,7 @@ struct ImBuf *imb_load_cineon(const unsigned char *mem,
/** \name Format: DPX (#IMB_FTYPE_DPX)
* \{ */
-bool imb_is_a_dpx(const unsigned char *buf, const size_t size);
+bool imb_is_a_dpx(const unsigned char *buf, size_t size);
bool imb_save_dpx(struct ImBuf *buf, const char *filepath, int flags);
struct ImBuf *imb_load_dpx(const unsigned char *mem,
size_t size,
@@ -204,7 +204,7 @@ struct ImBuf *imb_load_dpx(const unsigned char *mem,
/** \name Format: HDR (#IMB_FTYPE_RADHDR)
* \{ */
-bool imb_is_a_hdr(const unsigned char *buf, const size_t size);
+bool imb_is_a_hdr(const unsigned char *buf, size_t size);
struct ImBuf *imb_loadhdr(const unsigned char *mem,
size_t size,
int flags,
@@ -218,7 +218,7 @@ bool imb_savehdr(struct ImBuf *ibuf, const char *filepath, int flags);
* \{ */
void imb_inittiff(void);
-bool imb_is_a_tiff(const unsigned char *buf, const size_t size);
+bool imb_is_a_tiff(const unsigned char *buf, size_t size);
/**
* Loads a TIFF file.
* \param mem: Memory containing the TIFF file.
diff --git a/source/blender/imbuf/intern/anim_movie.c b/source/blender/imbuf/intern/anim_movie.c
index 1d81653c7cd..6a05b681c88 100644
--- a/source/blender/imbuf/intern/anim_movie.c
+++ b/source/blender/imbuf/intern/anim_movie.c
@@ -879,7 +879,7 @@ static void ffmpeg_postprocess(struct anim *anim)
dst2,
dstStride2);
# else
- /* Scale with swscale then flip image over Y axis. */
+ /* Scale with swscale. */
int *dstStride = anim->pFrameRGB->linesize;
uint8_t **dst = anim->pFrameRGB->data;
const int dstStride2[4] = {dstStride[0], 0, 0, 0};
@@ -896,11 +896,12 @@ static void ffmpeg_postprocess(struct anim *anim)
dst2,
dstStride2);
- bottom = (unsigned char *)ibuf->rect;
- top = bottom + ibuf->x * (ibuf->y - 1) * 4;
+ /* Flip destination image buffer over Y axis. */
+ bottom = (unsigned char *)dst[0];
+ top = bottom + anim->x * (anim->y - 1) * 4;
- h = (ibuf->y + 1) / 2;
- w = ibuf->x;
+ h = (anim->y + 1) / 2;
+ w = anim->x;
for (y = 0; y < h; y++) {
unsigned char tmp[4];
diff --git a/source/blender/imbuf/intern/dds/dds_api.h b/source/blender/imbuf/intern/dds/dds_api.h
index 931c4f267f9..2d540f13a52 100644
--- a/source/blender/imbuf/intern/dds/dds_api.h
+++ b/source/blender/imbuf/intern/dds/dds_api.h
@@ -26,7 +26,7 @@
extern "C" {
#endif
-bool imb_is_a_dds(const unsigned char *mem, const size_t size);
+bool imb_is_a_dds(const unsigned char *mem, size_t size);
bool imb_save_dds(struct ImBuf *ibuf, const char *name, int flags);
struct ImBuf *imb_load_dds(const unsigned char *mem,
size_t size,
diff --git a/source/blender/imbuf/intern/oiio/openimageio_api.h b/source/blender/imbuf/intern/oiio/openimageio_api.h
index 659050cdb00..1201bd1b5e0 100644
--- a/source/blender/imbuf/intern/oiio/openimageio_api.h
+++ b/source/blender/imbuf/intern/oiio/openimageio_api.h
@@ -31,7 +31,7 @@ extern "C" {
struct ImBuf;
-bool imb_is_a_photoshop(const unsigned char *mem, const size_t size);
+bool imb_is_a_photoshop(const unsigned char *mem, size_t size);
int imb_save_photoshop(struct ImBuf *ibuf, const char *name, int flags);
diff --git a/source/blender/imbuf/intern/openexr/openexr_api.h b/source/blender/imbuf/intern/openexr/openexr_api.h
index 14336620926..4321c95db30 100644
--- a/source/blender/imbuf/intern/openexr/openexr_api.h
+++ b/source/blender/imbuf/intern/openexr/openexr_api.h
@@ -36,7 +36,7 @@ void imb_exitopenexr(void);
* Test presence of OpenEXR file.
* \param mem: pointer to loaded OpenEXR bit-stream.
*/
-bool imb_is_a_openexr(const unsigned char *mem, const size_t size);
+bool imb_is_a_openexr(const unsigned char *mem, size_t size);
bool imb_save_openexr(struct ImBuf *ibuf, const char *name, int flags);
diff --git a/source/blender/imbuf/intern/radiance_hdr.c b/source/blender/imbuf/intern/radiance_hdr.c
index 7f4e4dd31df..925ef0a8502 100644
--- a/source/blender/imbuf/intern/radiance_hdr.c
+++ b/source/blender/imbuf/intern/radiance_hdr.c
@@ -77,7 +77,7 @@ static const unsigned char *oldreadcolrs(RGBE *scan,
scan[0][BLU] = *mem++;
scan[0][EXP] = *mem++;
if (scan[0][RED] == 1 && scan[0][GRN] == 1 && scan[0][BLU] == 1) {
- for (i = scan[0][EXP] << rshift; i > 0; i--) {
+ for (i = scan[0][EXP] << rshift; i > 0 && len > 0; i--) {
COPY_RGBE(scan[-1], scan[0]);
scan++;
len--;
@@ -227,7 +227,7 @@ struct ImBuf *imb_loadhdr(const unsigned char *mem,
int found = 0;
int width = 0, height = 0;
const unsigned char *ptr, *mem_eof = mem + size;
- char oriY[80], oriX[80];
+ char oriY[3], oriX[3];
if (!imb_is_a_hdr(mem, size)) {
return NULL;
@@ -244,22 +244,33 @@ struct ImBuf *imb_loadhdr(const unsigned char *mem,
}
}
- if ((found && (x < (size + 2))) == 0) {
+ if ((found && (x < (size - 1))) == 0) {
/* Data not found! */
return NULL;
}
- if (sscanf((const char *)&mem[x + 1],
- "%79s %d %79s %d",
- (char *)&oriY,
- &height,
- (char *)&oriX,
- &width) != 4) {
+ x++;
+
+ /* sscanf requires a null-terminated buffer argument */
+ char buf[32] = {0};
+ memcpy(buf, &mem[x], MIN2(sizeof(buf) - 1, size - x));
+
+ if (sscanf(buf, "%2s %d %2s %d", (char *)&oriY, &height, (char *)&oriX, &width) != 4) {
+ return NULL;
+ }
+
+ if (width < 1 || height < 1) {
return NULL;
}
+ /* Checking that width x height does not extend past mem_eof is not easily possible
+ * since the format uses RLE compression. Can cause excessive memory allocation to occur. */
+
/* find end of this line, data right behind it */
- ptr = (const unsigned char *)strchr((const char *)&mem[x + 1], '\n');
+ ptr = (const unsigned char *)strchr((const char *)&mem[x], '\n');
+ if (ptr == NULL || ptr >= mem_eof) {
+ return NULL;
+ }
ptr++;
if (flags & IB_test) {
diff --git a/source/blender/io/alembic/intern/abc_reader_object.cc b/source/blender/io/alembic/intern/abc_reader_object.cc
index 4a359c49d26..86fa580bf1f 100644
--- a/source/blender/io/alembic/intern/abc_reader_object.cc
+++ b/source/blender/io/alembic/intern/abc_reader_object.cc
@@ -120,29 +120,10 @@ static Imath::M44d blend_matrices(const Imath::M44d &m0, const Imath::M44d &m1,
* the matrices manually.
*/
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < 4; j++) {
- mat0[i][j] = static_cast<float>(m0[i][j]);
- }
- }
-
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < 4; j++) {
- mat1[i][j] = static_cast<float>(m1[i][j]);
- }
- }
-
+ convert_matrix_datatype(m0, mat0);
+ convert_matrix_datatype(m1, mat1);
interp_m4_m4m4(ret, mat0, mat1, weight);
-
- Imath::M44d m;
-
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < 4; j++) {
- m[i][j] = ret[i][j];
- }
- }
-
- return m;
+ return convert_matrix_datatype(ret);
}
Imath::M44d get_matrix(const IXformSchema &schema, const float time)
diff --git a/source/blender/io/gpencil/intern/gpencil_io_base.cc b/source/blender/io/gpencil/intern/gpencil_io_base.cc
index f031648d2ed..7868bade8c1 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_base.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_base.cc
@@ -23,9 +23,8 @@
* \ingroup bgpencil
*/
-#include "BLI_float2.hh"
-#include "BLI_float3.hh"
#include "BLI_float4x4.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_path_util.h"
#include "BLI_span.hh"
@@ -283,7 +282,7 @@ float GpencilIO::stroke_point_radius_get(bGPDlayer *gpl, bGPDstroke *gps)
const float2 screen_ex = gpencil_3D_point_to_2D(&pt->x);
const float2 v1 = screen_co - screen_ex;
- float radius = v1.length();
+ float radius = math::length(v1);
BKE_gpencil_free_stroke(gps_perimeter);
return MAX2(radius, 1.0f);
diff --git a/source/blender/io/gpencil/intern/gpencil_io_base.hh b/source/blender/io/gpencil/intern/gpencil_io_base.hh
index 09557cd7a4d..ae54d5056dc 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_base.hh
+++ b/source/blender/io/gpencil/intern/gpencil_io_base.hh
@@ -22,9 +22,8 @@
* \ingroup bgpencil
*/
-#include "BLI_float2.hh"
-#include "BLI_float3.hh"
#include "BLI_float4x4.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_vector.hh"
#include "DNA_space_types.h" /* for FILE_MAX */
diff --git a/source/blender/io/gpencil/intern/gpencil_io_import_svg.cc b/source/blender/io/gpencil/intern/gpencil_io_import_svg.cc
index 941d1137f4d..455ebb7c3cb 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_import_svg.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_import_svg.cc
@@ -21,8 +21,8 @@
* \ingroup bgpencil
*/
-#include "BLI_float3.hh"
#include "BLI_math.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_span.hh"
#include "DNA_gpencil_types.h"
diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh b/source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh
index 9a4dfe3efe3..e6d2853d040 100644
--- a/source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh
+++ b/source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh
@@ -22,7 +22,7 @@
#include <optional>
-#include "BLI_float3.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_utility_mixins.hh"
#include "BLI_vector.hh"
diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc b/source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc
index b99d41e0c72..48136dad5f7 100644
--- a/source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc
+++ b/source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc
@@ -21,8 +21,8 @@
#include "BKE_image.h"
#include "BKE_node.h"
-#include "BLI_float3.hh"
#include "BLI_map.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_path_util.h"
#include "DNA_material_types.h"
@@ -353,9 +353,7 @@ MTLMaterial mtlmaterial_for_material(const Material *material)
const nodes::NodeRef *bsdf_node = find_bsdf_node(nodetree);
store_bsdf_properties(bsdf_node, material, mtlmat);
store_image_textures(bsdf_node, nodetree, material, mtlmat);
- if (nodetree) {
- delete nodetree;
- }
+ delete nodetree;
return mtlmat;
}
diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_mtl.hh b/source/blender/io/wavefront_obj/exporter/obj_export_mtl.hh
index 2f62d189bd1..a84dcb80a48 100644
--- a/source/blender/io/wavefront_obj/exporter/obj_export_mtl.hh
+++ b/source/blender/io/wavefront_obj/exporter/obj_export_mtl.hh
@@ -20,8 +20,8 @@
#pragma once
-#include "BLI_float3.hh"
#include "BLI_map.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_string_ref.hh"
#include "BLI_vector.hh"
diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_nurbs.cc b/source/blender/io/wavefront_obj/exporter/obj_export_nurbs.cc
index 91aabd8fa76..ec690115115 100644
--- a/source/blender/io/wavefront_obj/exporter/obj_export_nurbs.cc
+++ b/source/blender/io/wavefront_obj/exporter/obj_export_nurbs.cc
@@ -18,9 +18,9 @@
* \ingroup obj
*/
-#include "BLI_float3.hh"
#include "BLI_listbase.h"
#include "BLI_math.h"
+#include "BLI_math_vec_types.hh"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
diff --git a/source/blender/io/wavefront_obj/tests/obj_exporter_tests.cc b/source/blender/io/wavefront_obj/tests/obj_exporter_tests.cc
index 0feca806f35..e7db1c36203 100644
--- a/source/blender/io/wavefront_obj/tests/obj_exporter_tests.cc
+++ b/source/blender/io/wavefront_obj/tests/obj_exporter_tests.cc
@@ -197,7 +197,7 @@ static std::string read_temp_file_in_string(const std::string &file_path)
TEST(obj_exporter_writer, header)
{
/* Because testing doesn't fully initialize Blender, we need the following. */
- BKE_tempdir_init(NULL);
+ BKE_tempdir_init(nullptr);
std::string out_file_path = blender::tests::flags_test_release_dir() + "/" + temp_file_path;
{
OBJExportParamsDefault _export;
@@ -235,19 +235,19 @@ TEST(obj_exporter_writer, mtllib)
/* Return true if string #a and string #b are equal after their first newline. */
static bool strings_equal_after_first_lines(const std::string &a, const std::string &b)
{
- /* If `dbg_level > 0` then a failing test will print context around the first mismatch. */
- const bool dbg_level = 0;
+ /* If `dbg_level` is true then a failing test will print context around the first mismatch. */
+ const bool dbg_level = false;
const size_t a_len = a.size();
const size_t b_len = b.size();
const size_t a_next = a.find_first_of('\n');
const size_t b_next = b.find_first_of('\n');
if (a_next == std::string::npos || b_next == std::string::npos) {
- if (dbg_level > 0) {
+ if (dbg_level) {
std::cout << "Couldn't find newline in one of args\n";
}
return false;
}
- if (dbg_level > 0) {
+ if (dbg_level) {
if (a.compare(a_next, a_len - a_next, b, b_next, b_len - b_next) != 0) {
for (int i = 0; i < a_len - a_next && i < b_len - b_next; ++i) {
if (a[a_next + i] != b[b_next + i]) {
@@ -284,7 +284,7 @@ class obj_exporter_regression_test : public obj_exporter_test {
return;
}
/* Because testing doesn't fully initialize Blender, we need the following. */
- BKE_tempdir_init(NULL);
+ BKE_tempdir_init(nullptr);
std::string tempdir = std::string(BKE_tempdir_base());
std::string out_file_path = tempdir + BLI_path_basename(golden_obj.c_str());
strncpy(params.filepath, out_file_path.c_str(), FILE_MAX - 1);
diff --git a/source/blender/makesdna/DNA_defaults.h b/source/blender/makesdna/DNA_defaults.h
index 6e986129143..ef7f573e7a8 100644
--- a/source/blender/makesdna/DNA_defaults.h
+++ b/source/blender/makesdna/DNA_defaults.h
@@ -48,7 +48,9 @@ uint8_t *_DNA_struct_default_alloc_impl(const uint8_t *data_src,
#define DNA_struct_default_alloc(struct_name) \
(struct_name *)_DNA_struct_default_alloc_impl( \
- DNA_default_table[SDNA_TYPE_FROM_STRUCT(struct_name)], sizeof(struct_name), __func__)
+ (const uint8_t *)DNA_default_table[SDNA_TYPE_FROM_STRUCT(struct_name)], \
+ sizeof(struct_name), \
+ __func__)
#ifdef __cplusplus
}
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index fc041e257b0..1d0796bda8b 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1852,6 +1852,7 @@ enum {
MOD_TRIANGULATE_QUAD_FIXED = 1,
MOD_TRIANGULATE_QUAD_ALTERNATE = 2,
MOD_TRIANGULATE_QUAD_SHORTEDGE = 3,
+ MOD_TRIANGULATE_QUAD_LONGEDGE = 4,
};
typedef struct LaplacianSmoothModifierData {
diff --git a/source/blender/makesdna/DNA_movieclip_defaults.h b/source/blender/makesdna/DNA_movieclip_defaults.h
index 753147eb072..e9013b08d79 100644
--- a/source/blender/makesdna/DNA_movieclip_defaults.h
+++ b/source/blender/makesdna/DNA_movieclip_defaults.h
@@ -45,6 +45,34 @@
.frame_offset = 0, \
}
+#define _DNA_DEFAULT_MovieClipUser \
+ { \
+ .framenr = 1, \
+ .render_size = MCLIP_PROXY_RENDER_SIZE_FULL, \
+ .render_flag = 0, \
+ }
+
+#define _DNA_DEFAULT_MovieClipScopes \
+ { \
+ .ok = 0, \
+ .use_track_mask = 0, \
+ .track_preview_height = 120, \
+ .frame_width = 0, \
+ .frame_height = 0, \
+ .undist_marker = _DNA_DEFAULT_MovieTrackingMarker, \
+ .track_pos = {0, 0}, \
+ .track_disabled = 0, \
+ .track_locked = 0, \
+ .scene_framenr = 0, \
+ .slide_scale = {0.0f, 0.0f}, \
+ }
+
+/* initialise as all zeros */
+#define _DNA_DEFAULT_MovieTrackingMarker \
+ { \
+ 0, \
+ }
+
/** \} */
/* clang-format on */
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 29d61bcf2ff..114e350b582 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -2118,6 +2118,7 @@ typedef enum GeometryNodeTriangulateQuads {
GEO_NODE_TRIANGULATE_QUAD_FIXED = 1,
GEO_NODE_TRIANGULATE_QUAD_ALTERNATE = 2,
GEO_NODE_TRIANGULATE_QUAD_SHORTEDGE = 3,
+ GEO_NODE_TRIANGULATE_QUAD_LONGEDGE = 4,
} GeometryNodeTriangulateQuads;
typedef enum GeometryNodePointInstanceType {
diff --git a/source/blender/makesdna/DNA_space_defaults.h b/source/blender/makesdna/DNA_space_defaults.h
new file mode 100644
index 00000000000..8b5c6dc1de5
--- /dev/null
+++ b/source/blender/makesdna/DNA_space_defaults.h
@@ -0,0 +1,67 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/** \file
+ * \ingroup DNA
+ */
+
+#pragma once
+
+/* Struct members on own line. */
+/* clang-format off */
+
+/* -------------------------------------------------------------------- */
+/** \name Spaceclip Struct
+ * \{ */
+
+#define _DNA_DEFAULT_MaskSpaceInfo \
+ { \
+ .draw_flag = 0, \
+ .draw_type = MASK_DT_OUTLINE, \
+ .overlay_mode = MASK_OVERLAY_ALPHACHANNEL, \
+ }
+
+#define _DNA_DEFAULT_SpaceClip \
+ { \
+ .spacetype = SPACE_CLIP, \
+ .link_flag = 0, \
+ .xof = 0, \
+ .yof = 0, \
+ .xlockof = 0, \
+ .ylockof = 0, \
+ .zoom = 1.0f, \
+ .user = _DNA_DEFAULT_MovieClipUser, \
+ .scopes = _DNA_DEFAULT_MovieClipScopes, \
+ .flag = SC_SHOW_MARKER_PATTERN | SC_SHOW_TRACK_PATH | SC_SHOW_GRAPH_TRACKS_MOTION | \
+ SC_SHOW_GRAPH_FRAMES | SC_SHOW_ANNOTATION, \
+ .mode = SC_MODE_TRACKING, \
+ .view = SC_VIEW_CLIP, \
+ .path_length = 20, \
+ .loc = {0, 0}, \
+ .scale = 0, \
+ .angle = 0, \
+ .stabmat = _DNA_DEFAULT_UNIT_M4, \
+ .unistabmat = _DNA_DEFAULT_UNIT_M4, \
+ .postproc_flag = 0, \
+ .gpencil_src = SC_GPENCIL_SRC_CLIP, \
+ .around = V3D_AROUND_CENTER_MEDIAN, \
+ .cursor = {0, 0}, \
+ .mask_info = _DNA_DEFAULT_MaskSpaceInfo, \
+ }
+
+/** \} */
+
+/* clang-format on */
diff --git a/source/blender/makesdna/intern/CMakeLists.txt b/source/blender/makesdna/intern/CMakeLists.txt
index db34cf83fa9..a3c54e91780 100644
--- a/source/blender/makesdna/intern/CMakeLists.txt
+++ b/source/blender/makesdna/intern/CMakeLists.txt
@@ -159,6 +159,7 @@ set(SRC
../DNA_pointcloud_defaults.h
../DNA_scene_defaults.h
../DNA_simulation_defaults.h
+ ../DNA_space_defaults.h
../DNA_speaker_defaults.h
../DNA_texture_defaults.h
../DNA_vec_defaults.h
diff --git a/source/blender/makesdna/intern/dna_defaults.c b/source/blender/makesdna/intern/dna_defaults.c
index 1d4257328a4..5bc5de7a20b 100644
--- a/source/blender/makesdna/intern/dna_defaults.c
+++ b/source/blender/makesdna/intern/dna_defaults.c
@@ -103,6 +103,7 @@
#include "DNA_light_types.h"
#include "DNA_lightprobe_types.h"
#include "DNA_linestyle_types.h"
+#include "DNA_mask_types.h"
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meta_types.h"
@@ -144,6 +145,7 @@
#include "DNA_pointcloud_defaults.h"
#include "DNA_scene_defaults.h"
#include "DNA_simulation_defaults.h"
+#include "DNA_space_defaults.h"
#include "DNA_speaker_defaults.h"
#include "DNA_texture_defaults.h"
#include "DNA_volume_defaults.h"
@@ -208,6 +210,8 @@ SDNA_DEFAULT_DECL_STRUCT(MetaBall);
/* DNA_movieclip_defaults.h */
SDNA_DEFAULT_DECL_STRUCT(MovieClip);
+SDNA_DEFAULT_DECL_STRUCT(MovieClipUser);
+SDNA_DEFAULT_DECL_STRUCT(MovieClipScopes);
/* DNA_object_defaults.h */
SDNA_DEFAULT_DECL_STRUCT(Object);
@@ -225,6 +229,9 @@ SDNA_DEFAULT_DECL_STRUCT(ToolSettings);
/* DNA_simulation_defaults.h */
SDNA_DEFAULT_DECL_STRUCT(Simulation);
+/* DNA_space_defaults.h */
+SDNA_DEFAULT_DECL_STRUCT(SpaceClip);
+
/* DNA_speaker_defaults.h */
SDNA_DEFAULT_DECL_STRUCT(Speaker);
@@ -406,11 +413,18 @@ const void *DNA_default_table[SDNA_TYPE_MAX] = {
/* DNA_mesh_defaults.h */
SDNA_DEFAULT_DECL(Mesh),
+ /* DNA_space_defaults.h */
+ SDNA_DEFAULT_DECL(SpaceClip),
+ SDNA_DEFAULT_DECL_EX(MaskSpaceInfo, SpaceClip.mask_info),
+
/* DNA_meta_defaults.h */
SDNA_DEFAULT_DECL(MetaBall),
/* DNA_movieclip_defaults.h */
SDNA_DEFAULT_DECL(MovieClip),
+ SDNA_DEFAULT_DECL(MovieClipUser),
+ SDNA_DEFAULT_DECL(MovieClipScopes),
+ SDNA_DEFAULT_DECL_EX(MovieTrackingMarker, MovieClipScopes.undist_marker),
/* DNA_object_defaults.h */
SDNA_DEFAULT_DECL(Object),
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 20f77626e49..b32d98e3cb1 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -185,6 +185,7 @@ extern StructRNA RNA_CompositorNodeRGBToBW;
extern StructRNA RNA_CompositorNodeRLayers;
extern StructRNA RNA_CompositorNodeRotate;
extern StructRNA RNA_CompositorNodeScale;
+extern StructRNA RNA_CompositorNodeSceneTime;
extern StructRNA RNA_CompositorNodeSepHSVA;
extern StructRNA RNA_CompositorNodeSepRGBA;
extern StructRNA RNA_CompositorNodeSepYCCA;
@@ -1742,7 +1743,7 @@ bool RNA_struct_override_matches(struct Main *bmain,
struct PointerRNA *ptr_local,
struct PointerRNA *ptr_reference,
const char *root_path,
- const size_t root_path_len,
+ size_t root_path_len,
struct IDOverrideLibrary *override,
eRNAOverrideMatch flags,
eRNAOverrideMatchResult *r_report_flags);
diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt
index 7e6d0aea2ee..f057d8e9d4c 100644
--- a/source/blender/makesrna/intern/CMakeLists.txt
+++ b/source/blender/makesrna/intern/CMakeLists.txt
@@ -203,6 +203,9 @@ set(INC
../../blenloader
${CMAKE_BINARY_DIR}/source/blender/makesdna/intern
+
+ # dna_type_offsets.h
+ ${CMAKE_CURRENT_BINARY_DIR}/../../makesdna/intern
)
set(INC_SYS
diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h
index 20e6e931b4b..95ad184c6b9 100644
--- a/source/blender/makesrna/intern/rna_internal.h
+++ b/source/blender/makesrna/intern/rna_internal.h
@@ -544,7 +544,7 @@ int rna_property_override_diff_default(struct Main *bmain,
int mode,
struct IDOverrideLibrary *override,
const char *rna_path,
- const size_t rna_path_len,
+ size_t rna_path_len,
int flags,
bool *r_override_changed);
diff --git a/source/blender/makesrna/intern/rna_internal_types.h b/source/blender/makesrna/intern/rna_internal_types.h
index f0e32a19d04..723ae384fdf 100644
--- a/source/blender/makesrna/intern/rna_internal_types.h
+++ b/source/blender/makesrna/intern/rna_internal_types.h
@@ -214,7 +214,7 @@ typedef int (*RNAPropOverrideDiff)(struct Main *bmain,
int mode,
struct IDOverrideLibrary *override,
const char *rna_path,
- const size_t rna_path_len,
+ size_t rna_path_len,
int flags,
bool *r_override_changed);
diff --git a/source/blender/makesrna/intern/rna_mask.c b/source/blender/makesrna/intern/rna_mask.c
index 9c90c209389..21bacf2e6be 100644
--- a/source/blender/makesrna/intern/rna_mask.c
+++ b/source/blender/makesrna/intern/rna_mask.c
@@ -23,6 +23,7 @@
#include "MEM_guardedalloc.h"
+#include "DNA_defaults.h"
#include "DNA_mask_types.h"
#include "DNA_object_types.h" /* SELECT */
#include "DNA_scene_types.h"
@@ -84,7 +85,7 @@ static void rna_Mask_update_parent(Main *bmain, Scene *scene, PointerRNA *ptr)
if (track) {
MovieTrackingMarker *marker = BKE_tracking_marker_get(track, clip_framenr);
float marker_pos_ofs[2], parmask_pos[2];
- MovieClipUser user = {0};
+ MovieClipUser user = *DNA_struct_default_get(MovieClipUser);
BKE_movieclip_user_set_frame(&user, scene->r.cfra);
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index d46ae13b482..0f0734c8448 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -331,7 +331,12 @@ const EnumPropertyItem rna_enum_modifier_triangulate_quad_method_items[] = {
"SHORTEST_DIAGONAL",
0,
"Shortest Diagonal",
- "Split the quads based on the distance between the vertices"},
+ "Split the quads along their shortest diagonal"},
+ {MOD_TRIANGULATE_QUAD_LONGEDGE,
+ "LONGEST_DIAGONAL",
+ 0,
+ "Longest Diagonal",
+ "Split the quads along their longest diagonal"},
{0, NULL, 0, NULL, NULL},
};
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index e7307e6e058..ecbeadf1fa4 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -9488,7 +9488,12 @@ static void def_geo_triangulate(StructRNA *srna)
"SHORTEST_DIAGONAL",
0,
"Shortest Diagonal",
- "Split the quads based on the distance between the vertices"},
+ "Split the quads along their shortest diagonal"},
+ {GEO_NODE_TRIANGULATE_QUAD_LONGEDGE,
+ "LONGEST_DIAGONAL",
+ 0,
+ "Longest Diagonal",
+ "Split the quads along their longest diagonal"},
{0, NULL, 0, NULL, NULL},
};
diff --git a/source/blender/makesrna/intern/rna_tracking.c b/source/blender/makesrna/intern/rna_tracking.c
index 03f4acdae79..2d4d5ee766f 100644
--- a/source/blender/makesrna/intern/rna_tracking.c
+++ b/source/blender/makesrna/intern/rna_tracking.c
@@ -32,6 +32,7 @@
#include "rna_internal.h"
+#include "DNA_defaults.h"
#include "DNA_movieclip_types.h"
#include "DNA_object_types.h" /* SELECT */
#include "DNA_scene_types.h"
@@ -609,7 +610,7 @@ static MovieTrackingTrack *add_track_to_base(
MovieClip *clip, MovieTracking *tracking, ListBase *tracksbase, const char *name, int frame)
{
int width, height;
- MovieClipUser user = {0};
+ MovieClipUser user = *DNA_struct_default_get(MovieClipUser);
MovieTrackingTrack *track;
user.framenr = 1;
diff --git a/source/blender/modifiers/intern/MOD_mesh_to_volume.cc b/source/blender/modifiers/intern/MOD_mesh_to_volume.cc
index 778b5746471..910b52dea67 100644
--- a/source/blender/modifiers/intern/MOD_mesh_to_volume.cc
+++ b/source/blender/modifiers/intern/MOD_mesh_to_volume.cc
@@ -197,8 +197,8 @@ static float compute_voxel_size(const ModifierEvalContext *ctx,
/* Compute the voxel size based on the desired number of voxels and the approximated bounding box
* of the volume. */
const BoundBox *bb = BKE_object_boundbox_get(mvmd->object);
- const float diagonal = float3::distance(transform * float3(bb->vec[6]),
- transform * float3(bb->vec[0]));
+ const float diagonal = math::distance(transform * float3(bb->vec[6]),
+ transform * float3(bb->vec[0]));
const float approximate_volume_side_length = diagonal + mvmd->exterior_band_width * 2.0f;
const float voxel_size = approximate_volume_side_length / mvmd->voxel_amount / volume_simplify;
return voxel_size;
diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index cee5d0be65d..49528845197 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -28,8 +28,8 @@
#include "MEM_guardedalloc.h"
#include "BLI_array.hh"
-#include "BLI_float3.hh"
#include "BLI_listbase.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_multi_value_map.hh"
#include "BLI_set.hh"
#include "BLI_string.h"
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index f965302be5e..957c5b78342 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -48,6 +48,9 @@ set(INC
../windowmanager
../../../intern/glew-mx
../../../intern/guardedalloc
+
+ # dna_type_offsets.h
+ ${CMAKE_CURRENT_BINARY_DIR}/../makesdna/intern
)
diff --git a/source/blender/nodes/NOD_composite.h b/source/blender/nodes/NOD_composite.h
index 72539f6081e..c80d0bcdd1e 100644
--- a/source/blender/nodes/NOD_composite.h
+++ b/source/blender/nodes/NOD_composite.h
@@ -43,6 +43,7 @@ void register_node_type_cmp_texture(void);
void register_node_type_cmp_value(void);
void register_node_type_cmp_rgb(void);
void register_node_type_cmp_curve_time(void);
+void register_node_type_cmp_scene_time(void);
void register_node_type_cmp_movieclip(void);
void register_node_type_cmp_composite(void);
diff --git a/source/blender/nodes/NOD_math_functions.hh b/source/blender/nodes/NOD_math_functions.hh
index a0a2e6f81f8..6ea89beee2e 100644
--- a/source/blender/nodes/NOD_math_functions.hh
+++ b/source/blender/nodes/NOD_math_functions.hh
@@ -18,9 +18,9 @@
#include "DNA_node_types.h"
-#include "BLI_float3.hh"
#include "BLI_math_base_safe.h"
#include "BLI_math_rotation.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_string_ref.hh"
namespace blender::nodes {
@@ -240,6 +240,8 @@ template<typename Callback>
inline bool try_dispatch_float_math_fl3_fl3_to_fl3(const NodeVectorMathOperation operation,
Callback &&callback)
{
+ using namespace blender::math;
+
const FloatMathOperationInfo *info = get_float3_math_operation_info(operation);
if (info == nullptr) {
return false;
@@ -259,40 +261,21 @@ inline bool try_dispatch_float_math_fl3_fl3_to_fl3(const NodeVectorMathOperation
case NODE_VECTOR_MATH_MULTIPLY:
return dispatch([](float3 a, float3 b) { return a * b; });
case NODE_VECTOR_MATH_DIVIDE:
- return dispatch([](float3 a, float3 b) {
- return float3(safe_divide(a.x, b.x), safe_divide(a.y, b.y), safe_divide(a.z, b.z));
- });
+ return dispatch([](float3 a, float3 b) { return safe_divide(a, b); });
case NODE_VECTOR_MATH_CROSS_PRODUCT:
- return dispatch([](float3 a, float3 b) { return float3::cross_high_precision(a, b); });
+ return dispatch([](float3 a, float3 b) { return cross_high_precision(a, b); });
case NODE_VECTOR_MATH_PROJECT:
- return dispatch([](float3 a, float3 b) {
- float length_squared = b.length_squared();
- return (length_squared != 0.0) ? (float3::dot(a, b) / length_squared) * b : float3(0.0f);
- });
+ return dispatch([](float3 a, float3 b) { return project(a, b); });
case NODE_VECTOR_MATH_REFLECT:
- return dispatch([](float3 a, float3 b) {
- b.normalize();
- return a.reflected(b);
- });
+ return dispatch([](float3 a, float3 b) { return reflect(a, normalize(b)); });
case NODE_VECTOR_MATH_SNAP:
- return dispatch([](float3 a, float3 b) {
- return float3(floor(safe_divide(a.x, b.x)),
- floor(safe_divide(a.y, b.y)),
- floor(safe_divide(a.z, b.z))) *
- b;
- });
+ return dispatch([](float3 a, float3 b) { return floor(safe_divide(a, b)) * b; });
case NODE_VECTOR_MATH_MODULO:
- return dispatch([](float3 a, float3 b) {
- return float3(safe_modf(a.x, b.x), safe_modf(a.y, b.y), safe_modf(a.z, b.z));
- });
+ return dispatch([](float3 a, float3 b) { return mod(a, b); });
case NODE_VECTOR_MATH_MINIMUM:
- return dispatch([](float3 a, float3 b) {
- return float3(min_ff(a.x, b.x), min_ff(a.y, b.y), min_ff(a.z, b.z));
- });
+ return dispatch([](float3 a, float3 b) { return min(a, b); });
case NODE_VECTOR_MATH_MAXIMUM:
- return dispatch([](float3 a, float3 b) {
- return float3(max_ff(a.x, b.x), max_ff(a.y, b.y), max_ff(a.z, b.z));
- });
+ return dispatch([](float3 a, float3 b) { return max(a, b); });
default:
return false;
}
@@ -306,6 +289,8 @@ template<typename Callback>
inline bool try_dispatch_float_math_fl3_fl3_to_fl(const NodeVectorMathOperation operation,
Callback &&callback)
{
+ using namespace blender::math;
+
const FloatMathOperationInfo *info = get_float3_math_operation_info(operation);
if (info == nullptr) {
return false;
@@ -319,9 +304,9 @@ inline bool try_dispatch_float_math_fl3_fl3_to_fl(const NodeVectorMathOperation
switch (operation) {
case NODE_VECTOR_MATH_DOT_PRODUCT:
- return dispatch([](float3 a, float3 b) { return float3::dot(a, b); });
+ return dispatch([](float3 a, float3 b) { return dot(a, b); });
case NODE_VECTOR_MATH_DISTANCE:
- return dispatch([](float3 a, float3 b) { return float3::distance(a, b); });
+ return dispatch([](float3 a, float3 b) { return distance(a, b); });
default:
return false;
}
@@ -335,6 +320,8 @@ template<typename Callback>
inline bool try_dispatch_float_math_fl3_fl3_fl3_to_fl3(const NodeVectorMathOperation operation,
Callback &&callback)
{
+ using namespace blender::math;
+
const FloatMathOperationInfo *info = get_float3_math_operation_info(operation);
if (info == nullptr) {
return false;
@@ -354,7 +341,7 @@ inline bool try_dispatch_float_math_fl3_fl3_fl3_to_fl3(const NodeVectorMathOpera
return float3(wrapf(a.x, b.x, c.x), wrapf(a.y, b.y, c.y), wrapf(a.z, b.z, c.z));
});
case NODE_VECTOR_MATH_FACEFORWARD:
- return dispatch([](float3 a, float3 b, float3 c) { return float3::faceforward(a, b, c); });
+ return dispatch([](float3 a, float3 b, float3 c) { return faceforward(a, b, c); });
default:
return false;
}
@@ -368,6 +355,8 @@ template<typename Callback>
inline bool try_dispatch_float_math_fl3_fl3_fl_to_fl3(const NodeVectorMathOperation operation,
Callback &&callback)
{
+ using namespace blender::math;
+
const FloatMathOperationInfo *info = get_float3_math_operation_info(operation);
if (info == nullptr) {
return false;
@@ -381,8 +370,7 @@ inline bool try_dispatch_float_math_fl3_fl3_fl_to_fl3(const NodeVectorMathOperat
switch (operation) {
case NODE_VECTOR_MATH_REFRACT:
- return dispatch(
- [](float3 a, float3 b, float c) { return float3::refract(a, b.normalized(), c); });
+ return dispatch([](float3 a, float3 b, float c) { return refract(a, normalize(b), c); });
default:
return false;
}
@@ -396,6 +384,8 @@ template<typename Callback>
inline bool try_dispatch_float_math_fl3_to_fl(const NodeVectorMathOperation operation,
Callback &&callback)
{
+ using namespace blender::math;
+
const FloatMathOperationInfo *info = get_float3_math_operation_info(operation);
if (info == nullptr) {
return false;
@@ -409,7 +399,7 @@ inline bool try_dispatch_float_math_fl3_to_fl(const NodeVectorMathOperation oper
switch (operation) {
case NODE_VECTOR_MATH_LENGTH:
- return dispatch([](float3 in) { return in.length(); });
+ return dispatch([](float3 in) { return length(in); });
default:
return false;
}
@@ -450,6 +440,8 @@ template<typename Callback>
inline bool try_dispatch_float_math_fl3_to_fl3(const NodeVectorMathOperation operation,
Callback &&callback)
{
+ using namespace blender::math;
+
const FloatMathOperationInfo *info = get_float3_math_operation_info(operation);
if (info == nullptr) {
return false;
@@ -463,20 +455,15 @@ inline bool try_dispatch_float_math_fl3_to_fl3(const NodeVectorMathOperation ope
switch (operation) {
case NODE_VECTOR_MATH_NORMALIZE:
- return dispatch([](float3 in) {
- float3 out = in;
- out.normalize();
- return out;
- }); /* Should be safe. */
+ return dispatch([](float3 in) { return normalize(in); }); /* Should be safe. */
case NODE_VECTOR_MATH_FLOOR:
- return dispatch([](float3 in) { return float3(floor(in.x), floor(in.y), floor(in.z)); });
+ return dispatch([](float3 in) { return floor(in); });
case NODE_VECTOR_MATH_CEIL:
- return dispatch([](float3 in) { return float3(ceil(in.x), ceil(in.y), ceil(in.z)); });
+ return dispatch([](float3 in) { return ceil(in); });
case NODE_VECTOR_MATH_FRACTION:
- return dispatch(
- [](float3 in) { return in - float3(floor(in.x), floor(in.y), floor(in.z)); });
+ return dispatch([](float3 in) { return fract(in); });
case NODE_VECTOR_MATH_ABSOLUTE:
- return dispatch([](float3 in) { return float3::abs(in); });
+ return dispatch([](float3 in) { return abs(in); });
case NODE_VECTOR_MATH_SINE:
return dispatch([](float3 in) { return float3(sinf(in.x), sinf(in.y), sinf(in.z)); });
case NODE_VECTOR_MATH_COSINE:
diff --git a/source/blender/nodes/NOD_socket_declarations.hh b/source/blender/nodes/NOD_socket_declarations.hh
index c0580a2c919..a1972c66ca2 100644
--- a/source/blender/nodes/NOD_socket_declarations.hh
+++ b/source/blender/nodes/NOD_socket_declarations.hh
@@ -21,7 +21,7 @@
#include "RNA_types.h"
#include "BLI_color.hh"
-#include "BLI_float3.hh"
+#include "BLI_math_vec_types.hh"
namespace blender::nodes::decl {
diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h
index 07a29677b72..e3566f81e2d 100644
--- a/source/blender/nodes/NOD_static_types.h
+++ b/source/blender/nodes/NOD_static_types.h
@@ -148,7 +148,7 @@ DefNode(CompositorNode, CMP_NODE_BLUR, def_cmp_blur, "BLUR",
DefNode(CompositorNode, CMP_NODE_FILTER, def_cmp_filter, "FILTER", Filter, "Filter", "" )
DefNode(CompositorNode, CMP_NODE_MAP_VALUE, def_cmp_map_value, "MAP_VALUE", MapValue, "Map Value", "" )
DefNode(CompositorNode, CMP_NODE_MAP_RANGE, def_cmp_map_range, "MAP_RANGE", MapRange, "Map Range", "" )
-DefNode(CompositorNode, CMP_NODE_TIME, def_time, "TIME", Time, "Time", "" )
+DefNode(CompositorNode, CMP_NODE_TIME, def_time, "TIME", Time, "Time Curve", "" )
DefNode(CompositorNode, CMP_NODE_VECBLUR, def_cmp_vector_blur, "VECBLUR", VecBlur, "Vector Blur", "" )
DefNode(CompositorNode, CMP_NODE_SEPRGBA, 0, "SEPRGBA", SepRGBA, "Separate RGBA", "" )
DefNode(CompositorNode, CMP_NODE_SEPHSVA, 0, "SEPHSVA", SepHSVA, "Separate HSVA", "" )
@@ -228,6 +228,7 @@ DefNode(CompositorNode, CMP_NODE_EXPOSURE, 0, "EXPOSU
DefNode(CompositorNode, CMP_NODE_ANTIALIASING, def_cmp_antialiasing, "ANTIALIASING", AntiAliasing, "Anti-Aliasing", "" )
DefNode(CompositorNode, CMP_NODE_POSTERIZE, 0, "POSTERIZE", Posterize, "Posterize", "" )
DefNode(CompositorNode, CMP_NODE_CONVERT_COLOR_SPACE,def_cmp_convert_color_space, "CONVERT_COLORSPACE", ConvertColorSpace, "Color Space","" )
+DefNode(CompositorNode, CMP_NODE_SCENE_TIME, 0, "SCENE_TIME", SceneTime, "Scene Time", "" )
DefNode(TextureNode, TEX_NODE_OUTPUT, def_tex_output, "OUTPUT", Output, "Output", "" )
DefNode(TextureNode, TEX_NODE_CHECKER, 0, "CHECKER", Checker, "Checker", "" )
diff --git a/source/blender/nodes/composite/CMakeLists.txt b/source/blender/nodes/composite/CMakeLists.txt
index 086c820ce1e..0374f913d4b 100644
--- a/source/blender/nodes/composite/CMakeLists.txt
+++ b/source/blender/nodes/composite/CMakeLists.txt
@@ -33,6 +33,9 @@ set(INC
../../render
../../windowmanager
../../../../intern/guardedalloc
+
+ # dna_type_offsets.h
+ ${CMAKE_CURRENT_BINARY_DIR}/../../makesdna/intern
)
@@ -122,6 +125,7 @@ set(SRC
nodes/node_composite_vec_blur.cc
nodes/node_composite_viewer.cc
nodes/node_composite_zcombine.cc
+ nodes/node_composite_scene_time.cc
node_composite_tree.cc
node_composite_util.cc
diff --git a/source/blender/nodes/composite/node_composite_tree.cc b/source/blender/nodes/composite/node_composite_tree.cc
index 08dbd4ad6f0..c54382cc1ad 100644
--- a/source/blender/nodes/composite/node_composite_tree.cc
+++ b/source/blender/nodes/composite/node_composite_tree.cc
@@ -249,23 +249,6 @@ void ntreeCompositUpdateRLayers(bNodeTree *ntree)
}
}
-void ntreeCompositRegisterPass(bNodeTree *ntree,
- Scene *scene,
- ViewLayer *view_layer,
- const char *name,
- eNodeSocketDatatype type)
-{
- if (ntree == nullptr) {
- return;
- }
-
- LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
- if (node->type == CMP_NODE_R_LAYERS) {
- node_cmp_rlayers_register_pass(ntree, node, scene, view_layer, name, type);
- }
- }
-}
-
void ntreeCompositTagRender(Scene *scene)
{
/* XXX Think using G_MAIN here is valid, since you want to update current file's scene nodes,
diff --git a/source/blender/nodes/composite/nodes/node_composite_curves.cc b/source/blender/nodes/composite/nodes/node_composite_curves.cc
index cb96fd0bb60..12390a8549d 100644
--- a/source/blender/nodes/composite/nodes/node_composite_curves.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_curves.cc
@@ -51,7 +51,7 @@ void register_node_type_cmp_curve_time()
static bNodeType ntype;
- cmp_node_type_base(&ntype, CMP_NODE_TIME, "Time", NODE_CLASS_INPUT);
+ cmp_node_type_base(&ntype, CMP_NODE_TIME, "Time Curve", NODE_CLASS_INPUT);
ntype.declare = file_ns::cmp_node_time_declare;
node_type_size(&ntype, 200, 140, 320);
node_type_init(&ntype, file_ns::node_composit_init_curves_time);
diff --git a/source/blender/nodes/composite/nodes/node_composite_image.cc b/source/blender/nodes/composite/nodes/node_composite_image.cc
index 6f4f9d7e597..f2b9fbc2215 100644
--- a/source/blender/nodes/composite/nodes/node_composite_image.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_image.cc
@@ -269,7 +269,12 @@ void node_cmp_rlayers_register_pass(bNodeTree *ntree,
}
}
-static void cmp_node_rlayer_create_outputs_cb(void *UNUSED(userdata),
+struct CreateOutputUserData {
+ bNodeTree &ntree;
+ bNode &node;
+};
+
+static void cmp_node_rlayer_create_outputs_cb(void *userdata,
Scene *scene,
ViewLayer *view_layer,
const char *name,
@@ -277,18 +282,8 @@ static void cmp_node_rlayer_create_outputs_cb(void *UNUSED(userdata),
const char *UNUSED(chanid),
eNodeSocketDatatype type)
{
- /* Register the pass in all scenes that have a render layer node for this layer.
- * Since multiple scenes can be used in the compositor, the code must loop over all scenes
- * and check whether their nodetree has a node that needs to be updated. */
- /* NOTE: using G_MAIN seems valid here,
- * unless we want to register that for every other temp Main we could generate??? */
- ntreeCompositRegisterPass(scene->nodetree, scene, view_layer, name, type);
-
- for (Scene *sce = (Scene *)G_MAIN->scenes.first; sce; sce = (Scene *)sce->id.next) {
- if (sce->nodetree && sce != scene) {
- ntreeCompositRegisterPass(sce->nodetree, scene, view_layer, name, type);
- }
- }
+ CreateOutputUserData &data = *(CreateOutputUserData *)userdata;
+ node_cmp_rlayers_register_pass(&data.ntree, &data.node, scene, view_layer, name, type);
}
static void cmp_node_rlayer_create_outputs(bNodeTree *ntree,
@@ -308,14 +303,17 @@ static void cmp_node_rlayer_create_outputs(bNodeTree *ntree,
data->prev_index = -1;
node->storage = data;
+ CreateOutputUserData userdata = {*ntree, *node};
+
RenderEngine *engine = RE_engine_create(engine_type);
RE_engine_update_render_passes(
- engine, scene, view_layer, cmp_node_rlayer_create_outputs_cb, nullptr);
+ engine, scene, view_layer, cmp_node_rlayer_create_outputs_cb, &userdata);
RE_engine_free(engine);
if ((scene->r.mode & R_EDGE_FRS) &&
(view_layer->freestyle_config.flags & FREESTYLE_AS_RENDER_PASS)) {
- ntreeCompositRegisterPass(ntree, scene, view_layer, RE_PASSNAME_FREESTYLE, SOCK_RGBA);
+ node_cmp_rlayers_register_pass(
+ ntree, node, scene, view_layer, RE_PASSNAME_FREESTYLE, SOCK_RGBA);
}
MEM_freeN(data);
diff --git a/source/blender/nodes/composite/nodes/node_composite_movieclip.cc b/source/blender/nodes/composite/nodes/node_composite_movieclip.cc
index 94f32ae8db4..f6f00864839 100644
--- a/source/blender/nodes/composite/nodes/node_composite_movieclip.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_movieclip.cc
@@ -23,6 +23,7 @@
#include "BKE_context.h"
#include "BKE_lib_id.h"
+#include "DNA_defaults.h"
#include "RNA_access.h"
@@ -47,7 +48,7 @@ static void init(const bContext *C, PointerRNA *ptr)
{
bNode *node = (bNode *)ptr->data;
Scene *scene = CTX_data_scene(C);
- MovieClipUser *user = MEM_cnew<MovieClipUser>(__func__);
+ MovieClipUser *user = DNA_struct_default_alloc(MovieClipUser);
node->id = (ID *)scene->clip;
id_us_plus(node->id);
diff --git a/source/blender/nodes/composite/nodes/node_composite_scene_time.cc b/source/blender/nodes/composite/nodes/node_composite_scene_time.cc
new file mode 100644
index 00000000000..845390665f2
--- /dev/null
+++ b/source/blender/nodes/composite/nodes/node_composite_scene_time.cc
@@ -0,0 +1,39 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+/** \file
+ * \ingroup cmpnodes
+ */
+
+#include "node_composite_util.hh"
+
+namespace blender::nodes {
+
+static void cmp_node_scene_time_declare(NodeDeclarationBuilder &b)
+{
+ b.add_output<decl::Float>(N_("Seconds"));
+ b.add_output<decl::Float>(N_("Frame"));
+}
+
+} // namespace blender::nodes
+
+void register_node_type_cmp_scene_time()
+{
+ static bNodeType ntype;
+
+ cmp_node_type_base(&ntype, CMP_NODE_SCENE_TIME, "Scene Time", NODE_CLASS_INPUT);
+ ntype.declare = blender::nodes::cmp_node_scene_time_declare;
+ nodeRegisterType(&ntype);
+} \ No newline at end of file
diff --git a/source/blender/nodes/function/node_function_util.hh b/source/blender/nodes/function/node_function_util.hh
index acde9c4b55b..69c617b4f01 100644
--- a/source/blender/nodes/function/node_function_util.hh
+++ b/source/blender/nodes/function/node_function_util.hh
@@ -18,7 +18,7 @@
#include <string.h>
-#include "BLI_float3.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_utildefines.h"
#include "MEM_guardedalloc.h"
diff --git a/source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc b/source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc
index f4ce8d2f35a..bcc035e6ede 100644
--- a/source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc
+++ b/source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc
@@ -69,14 +69,14 @@ static void align_rotations_auto_pivot(IndexMask mask,
float3 old_axis;
mul_v3_m3v3(old_axis, old_rotation, local_main_axis);
- const float3 new_axis = vector.normalized();
- float3 rotation_axis = float3::cross_high_precision(old_axis, new_axis);
+ const float3 new_axis = math::normalize(vector);
+ float3 rotation_axis = math::cross_high_precision(old_axis, new_axis);
if (is_zero_v3(rotation_axis)) {
/* The vectors are linearly dependent, so we fall back to another axis. */
- rotation_axis = float3::cross_high_precision(old_axis, float3(1, 0, 0));
+ rotation_axis = math::cross_high_precision(old_axis, float3(1, 0, 0));
if (is_zero_v3(rotation_axis)) {
/* This is now guaranteed to not be zero. */
- rotation_axis = float3::cross_high_precision(old_axis, float3(0, 1, 0));
+ rotation_axis = math::cross_high_precision(old_axis, float3(0, 1, 0));
}
}
diff --git a/source/blender/nodes/function/nodes/node_fn_compare.cc b/source/blender/nodes/function/nodes/node_fn_compare.cc
index 3bb46511eeb..7c09bace756 100644
--- a/source/blender/nodes/function/nodes/node_fn_compare.cc
+++ b/source/blender/nodes/function/nodes/node_fn_compare.cc
@@ -265,7 +265,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node)
case NODE_COMPARE_MODE_DOT_PRODUCT: {
static fn::CustomMF_SI_SI_SI_SO<float3, float3, float, bool> fn{
"Less Than - Dot Product",
- [](float3 a, float3 b, float comp) { return float3::dot(a, b) < comp; }};
+ [](float3 a, float3 b, float comp) { return math::dot(a, b) < comp; }};
return &fn;
}
case NODE_COMPARE_MODE_DIRECTION: {
@@ -283,7 +283,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node)
case NODE_COMPARE_MODE_LENGTH: {
static fn::CustomMF_SI_SI_SO<float3, float3, bool> fn{
"Less Than - Length",
- [](float3 a, float3 b) { return a.length() < b.length(); }};
+ [](float3 a, float3 b) { return math::length(a) < math::length(b); }};
return &fn;
}
}
@@ -299,7 +299,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node)
case NODE_COMPARE_MODE_DOT_PRODUCT: {
static fn::CustomMF_SI_SI_SI_SO<float3, float3, float, bool> fn{
"Less Equal - Dot Product",
- [](float3 a, float3 b, float comp) { return float3::dot(a, b) <= comp; }};
+ [](float3 a, float3 b, float comp) { return math::dot(a, b) <= comp; }};
return &fn;
}
case NODE_COMPARE_MODE_DIRECTION: {
@@ -317,7 +317,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node)
case NODE_COMPARE_MODE_LENGTH: {
static fn::CustomMF_SI_SI_SO<float3, float3, bool> fn{
"Less Equal - Length",
- [](float3 a, float3 b) { return a.length() <= b.length(); }};
+ [](float3 a, float3 b) { return math::length(a) <= math::length(b); }};
return &fn;
}
}
@@ -333,7 +333,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node)
case NODE_COMPARE_MODE_DOT_PRODUCT: {
static fn::CustomMF_SI_SI_SI_SO<float3, float3, float, bool> fn{
"Greater Than - Dot Product",
- [](float3 a, float3 b, float comp) { return float3::dot(a, b) > comp; }};
+ [](float3 a, float3 b, float comp) { return math::dot(a, b) > comp; }};
return &fn;
}
case NODE_COMPARE_MODE_DIRECTION: {
@@ -351,7 +351,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node)
case NODE_COMPARE_MODE_LENGTH: {
static fn::CustomMF_SI_SI_SO<float3, float3, bool> fn{
"Greater Than - Length",
- [](float3 a, float3 b) { return a.length() > b.length(); }};
+ [](float3 a, float3 b) { return math::length(a) > math::length(b); }};
return &fn;
}
}
@@ -367,7 +367,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node)
case NODE_COMPARE_MODE_DOT_PRODUCT: {
static fn::CustomMF_SI_SI_SI_SO<float3, float3, float, bool> fn{
"Greater Equal - Dot Product",
- [](float3 a, float3 b, float comp) { return float3::dot(a, b) >= comp; }};
+ [](float3 a, float3 b, float comp) { return math::dot(a, b) >= comp; }};
return &fn;
}
case NODE_COMPARE_MODE_DIRECTION: {
@@ -385,7 +385,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node)
case NODE_COMPARE_MODE_LENGTH: {
static fn::CustomMF_SI_SI_SO<float3, float3, bool> fn{
"Greater Equal - Length",
- [](float3 a, float3 b) { return a.length() >= b.length(); }};
+ [](float3 a, float3 b) { return math::length(a) >= math::length(b); }};
return &fn;
}
}
@@ -402,7 +402,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node)
case NODE_COMPARE_MODE_DOT_PRODUCT: {
static fn::CustomMF_SI_SI_SI_SI_SO<float3, float3, float, float, bool> fn{
"Equal - Dot Product", [](float3 a, float3 b, float comp, float epsilon) {
- return abs(float3::dot(a, b) - comp) <= epsilon;
+ return abs(math::dot(a, b) - comp) <= epsilon;
}};
return &fn;
}
@@ -424,7 +424,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node)
case NODE_COMPARE_MODE_LENGTH: {
static fn::CustomMF_SI_SI_SI_SO<float3, float3, float, bool> fn{
"Equal - Length", [](float3 a, float3 b, float epsilon) {
- return abs(a.length() - b.length()) <= epsilon;
+ return abs(math::length(a) - math::length(b)) <= epsilon;
}};
return &fn;
}
@@ -442,7 +442,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node)
case NODE_COMPARE_MODE_DOT_PRODUCT: {
static fn::CustomMF_SI_SI_SI_SI_SO<float3, float3, float, float, bool> fn{
"Not Equal - Dot Product", [](float3 a, float3 b, float comp, float epsilon) {
- return abs(float3::dot(a, b) - comp) >= epsilon;
+ return abs(math::dot(a, b) - comp) >= epsilon;
}};
return &fn;
}
@@ -464,7 +464,7 @@ static const fn::MultiFunction *get_multi_function(bNode &node)
case NODE_COMPARE_MODE_LENGTH: {
static fn::CustomMF_SI_SI_SI_SO<float3, float3, float, bool> fn{
"Not Equal - Length", [](float3 a, float3 b, float epsilon) {
- return abs(a.length() - b.length()) > epsilon;
+ return abs(math::length(a) - math::length(b)) > epsilon;
}};
return &fn;
}
diff --git a/source/blender/nodes/geometry/node_geometry_util.hh b/source/blender/nodes/geometry/node_geometry_util.hh
index f0f2b64ec4e..dddc3527124 100644
--- a/source/blender/nodes/geometry/node_geometry_util.hh
+++ b/source/blender/nodes/geometry/node_geometry_util.hh
@@ -18,7 +18,7 @@
#include <string.h>
-#include "BLI_float3.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_utildefines.h"
#include "MEM_guardedalloc.h"
@@ -83,7 +83,7 @@ Mesh *create_cylinder_or_cone_mesh(float radius_top,
int circle_segments,
int side_segments,
int fill_segments,
- const GeometryNodeMeshCircleFillType fill_type,
+ GeometryNodeMeshCircleFillType fill_type,
ConeAttributeOutputs &attribute_outputs);
Mesh *create_cuboid_mesh(float3 size, int verts_x, int verts_y, int verts_z);
diff --git a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_align_rotation_to_vector.cc b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_align_rotation_to_vector.cc
index 36ad4605a4b..1d064586238 100644
--- a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_align_rotation_to_vector.cc
+++ b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_align_rotation_to_vector.cc
@@ -90,14 +90,14 @@ static void align_rotations_auto_pivot(const VArray<float3> &vectors,
float3 old_axis;
mul_v3_m3v3(old_axis, old_rotation, local_main_axis);
- const float3 new_axis = vector.normalized();
- float3 rotation_axis = float3::cross_high_precision(old_axis, new_axis);
+ const float3 new_axis = math::normalize(vector);
+ float3 rotation_axis = math::cross_high_precision(old_axis, new_axis);
if (is_zero_v3(rotation_axis)) {
/* The vectors are linearly dependent, so we fall back to another axis. */
- rotation_axis = float3::cross_high_precision(old_axis, float3(1, 0, 0));
+ rotation_axis = math::cross_high_precision(old_axis, float3(1, 0, 0));
if (is_zero_v3(rotation_axis)) {
/* This is now guaranteed to not be zero. */
- rotation_axis = float3::cross_high_precision(old_axis, float3(0, 1, 0));
+ rotation_axis = math::cross_high_precision(old_axis, float3(0, 1, 0));
}
}
diff --git a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_proximity.cc b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_proximity.cc
index 74dac73f255..20f500b1bd8 100644
--- a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_proximity.cc
+++ b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_proximity.cc
@@ -81,7 +81,7 @@ static void calculate_mesh_proximity(const VArray<float3> &positions,
for (int i : range) {
/* Use the distance to the last found point as upper bound to speedup the bvh lookup. */
- nearest.dist_sq = float3::distance_squared(nearest.co, positions[i]);
+ nearest.dist_sq = math::distance_squared(float3(nearest.co), positions[i]);
BLI_bvhtree_find_nearest(
bvh_data.tree, positions[i], &nearest, bvh_data.nearest_callback, &bvh_data);
diff --git a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_transfer.cc b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_transfer.cc
index b0210f2eb94..a85a7c56cb9 100644
--- a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_transfer.cc
+++ b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_attribute_transfer.cc
@@ -229,7 +229,7 @@ static void get_closest_mesh_corners(const Mesh &mesh,
const MLoop &loop = mesh.mloop[loop_index];
const int vertex_index = loop.v;
const MVert &mvert = mesh.mvert[vertex_index];
- const float distance_sq = float3::distance_squared(position, mvert.co);
+ const float distance_sq = math::distance_squared(position, float3(mvert.co));
if (distance_sq < min_distance_sq) {
min_distance_sq = distance_sq;
closest_loop_index = loop_index;
diff --git a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_curve_to_points.cc b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_curve_to_points.cc
index 8555d7cc8a3..1e6b7f92a77 100644
--- a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_curve_to_points.cc
+++ b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_curve_to_points.cc
@@ -241,13 +241,13 @@ static void copy_uniform_sample_point_attributes(Span<SplinePtr> splines,
spline.sample_with_index_factors<float3>(
spline.evaluated_tangents(), uniform_samples, data.tangents.slice(offset, size));
for (float3 &tangent : data.tangents) {
- tangent.normalize();
+ tangent = math::normalize(tangent);
}
spline.sample_with_index_factors<float3>(
spline.evaluated_normals(), uniform_samples, data.normals.slice(offset, size));
for (float3 &normals : data.normals) {
- normals.normalize();
+ normals = math::normalize(normals);
}
}
});
diff --git a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_point_distribute.cc b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_point_distribute.cc
index c712e82ca18..29eff373d15 100644
--- a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_point_distribute.cc
+++ b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_point_distribute.cc
@@ -321,7 +321,7 @@ BLI_NOINLINE static void interpolate_existing_attributes(
continue;
}
- for (const int UNUSED(i_set_instance) : set_group.transforms.index_range()) {
+ for ([[maybe_unused]] const int i_set_instance : set_group.transforms.index_range()) {
const int offset = instance_start_offsets[i_instance];
Span<float3> bary_coords = bary_coords_array[i_instance];
Span<int> looptri_indices = looptri_indices_array[i_instance];
@@ -516,7 +516,7 @@ static void distribute_points_poisson_disk(Span<GeometryInstanceGroup> set_group
const VArray<float> density_factors = component.attribute_get_for_read<float>(
density_attribute_name, ATTR_DOMAIN_CORNER, use_one_default ? 1.0f : 0.0f);
- for (const int UNUSED(i_set_instance) : set_group.transforms.index_range()) {
+ for ([[maybe_unused]] const int i_set_instance : set_group.transforms.index_range()) {
Vector<float3> &positions = positions_all[i_instance];
Vector<float3> &bary_coords = bary_coords_all[i_instance];
Vector<int> &looptri_indices = looptri_indices_all[i_instance];
diff --git a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_points_to_volume.cc b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_points_to_volume.cc
index 7b1bbed8ae4..f54ffc53a6e 100644
--- a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_points_to_volume.cc
+++ b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_points_to_volume.cc
@@ -161,7 +161,7 @@ static float compute_voxel_size(const GeoNodeExecParams &params,
}
/* The voxel size adapts to the final size of the volume. */
- const float diagonal = float3::distance(min, max);
+ const float diagonal = math::distance(min, max);
const float extended_diagonal = diagonal + 2.0f * radius;
const float voxel_size = extended_diagonal / voxel_amount;
return voxel_size;
diff --git a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_raycast.cc b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_raycast.cc
index dd03092a594..cfae88e0625 100644
--- a/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_raycast.cc
+++ b/source/blender/nodes/geometry/nodes/legacy/node_geo_legacy_raycast.cc
@@ -107,7 +107,7 @@ static void raycast_to_mesh(const Mesh &mesh,
for (const int i : ray_origins.index_range()) {
const float ray_length = ray_lengths[i];
const float3 ray_origin = ray_origins[i];
- const float3 ray_direction = ray_directions[i].normalized();
+ const float3 ray_direction = math::normalize(ray_directions[i]);
BVHTreeRayHit hit;
hit.index = -1;
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc
index 7e09721273a..929d9046f98 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc
@@ -16,7 +16,7 @@
#include "BLI_array.hh"
#include "BLI_delaunay_2d.h"
-#include "BLI_double2.hh"
+#include "BLI_math_vec_types.hh"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc
index 1a44fce86a6..68b609f8045 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc
@@ -122,9 +122,9 @@ static Array<float3> calculate_directions(const Span<float3> positions)
Array<float3> directions(size);
for (const int i : IndexRange(size - 1)) {
- directions[i] = (positions[i + 1] - positions[i]).normalized();
+ directions[i] = math::normalize(positions[i + 1] - positions[i]);
}
- directions[size - 1] = (positions[0] - positions[size - 1]).normalized();
+ directions[size - 1] = math::normalize(positions[0] - positions[size - 1]);
return directions;
}
@@ -135,9 +135,9 @@ static Array<float3> calculate_axes(const Span<float3> directions)
const int size = directions.size();
Array<float3> axes(size);
- axes[0] = float3::cross(-directions[size - 1], directions[0]).normalized();
+ axes[0] = math::normalize(math::cross(-directions[size - 1], directions[0]));
for (const int i : IndexRange(1, size - 1)) {
- axes[i] = float3::cross(-directions[i - 1], directions[i]).normalized();
+ axes[i] = math::normalize(math::cross(-directions[i - 1], directions[i]));
}
return axes;
@@ -248,8 +248,8 @@ static void limit_radii(FilletData &fd, const bool cyclic)
if (cyclic) {
/* Calculate lengths between adjacent control points. */
- const float len_prev = float3::distance(positions[0], positions[size - 1]);
- const float len_next = float3::distance(positions[0], positions[1]);
+ const float len_prev = math::distance(positions[0], positions[size - 1]);
+ const float len_next = math::distance(positions[0], positions[1]);
/* Calculate tangent lengths of fillets in control points. */
const float tan_len = radii[0] * tan(angles[0] / 2.0f);
@@ -271,16 +271,16 @@ static void limit_radii(FilletData &fd, const bool cyclic)
}
/* Initialize max_radii to largest possible radii. */
- float prev_dist = float3::distance(positions[1], positions[0]);
+ float prev_dist = math::distance(positions[1], positions[0]);
for (const int i : IndexRange(1, size - 2)) {
- const float temp_dist = float3::distance(positions[i], positions[i + 1]);
+ const float temp_dist = math::distance(positions[i], positions[i + 1]);
max_radii[i] = std::min(prev_dist, temp_dist) / tan(angles[i] / 2.0f);
prev_dist = temp_dist;
}
/* Max radii calculations for each index. */
for (const int i : IndexRange(start, fillet_count - 1)) {
- const float len_next = float3::distance(positions[i], positions[i + 1]);
+ const float len_next = math::distance(positions[i], positions[i + 1]);
const float tan_len = radii[i] * tan(angles[i] / 2.0f);
const float tan_len_next = radii[i + 1] * tan(angles[i + 1] / 2.0f);
@@ -415,7 +415,8 @@ static void update_bezier_positions(const FilletData &fd,
const float3 center = get_center(dst_spline.positions()[i_dst] - positions[i_src], fd, i_src);
/* Calculate the vector of the radius formed by the first vertex. */
float3 radius_vec = dst_spline.positions()[i_dst] - center;
- const float radius = radius_vec.normalize_and_get_length();
+ float radius;
+ radius_vec = math::normalize_and_get_length(radius_vec, radius);
dst_spline.handle_types_right().slice(1, count - 2).fill(BezierSpline::HandleType::Align);
dst_spline.handle_types_left().slice(1, count - 2).fill(BezierSpline::HandleType::Align);
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_circle.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_circle.cc
index a7fb493c7d7..7b5d1a1dc80 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_circle.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_circle.cc
@@ -101,8 +101,8 @@ static void node_update(bNodeTree *ntree, bNode *node)
static bool colinear_f3_f3_f3(const float3 p1, const float3 p2, const float3 p3)
{
- const float3 a = (p2 - p1).normalized();
- const float3 b = (p3 - p1).normalized();
+ const float3 a = math::normalize(p2 - p1);
+ const float3 b = math::normalize(p3 - p1);
return (ELEM(a, b, b * -1.0f));
}
@@ -122,18 +122,18 @@ static std::unique_ptr<CurveEval> create_point_circle_curve(
float3 center;
/* Midpoints of `P1->P2` and `P2->P3`. */
- const float3 q1 = float3::interpolate(p1, p2, 0.5f);
- const float3 q2 = float3::interpolate(p2, p3, 0.5f);
+ const float3 q1 = math::interpolate(p1, p2, 0.5f);
+ const float3 q2 = math::interpolate(p2, p3, 0.5f);
/* Normal Vectors of `P1->P2` and `P2->P3` */
- const float3 v1 = (p2 - p1).normalized();
- const float3 v2 = (p3 - p2).normalized();
+ const float3 v1 = math::normalize(p2 - p1);
+ const float3 v2 = math::normalize(p3 - p2);
/* Normal of plane of main 2 segments P1->P2 and `P2->P3`. */
- const float3 v3 = float3::cross(v1, v2).normalized();
+ const float3 v3 = math::normalize(math::cross(v1, v2));
/* Normal of plane of first perpendicular bisector and `P1->P2`. */
- const float3 v4 = float3::cross(v3, v1).normalized();
+ const float3 v4 = math::normalize(math::cross(v3, v1));
/* Determine Center-point from the intersection of 3 planes. */
float plane_1[4], plane_2[4], plane_3[4];
@@ -148,7 +148,7 @@ static std::unique_ptr<CurveEval> create_point_circle_curve(
}
/* Get the radius from the center-point to p1. */
- const float r = float3::distance(p1, center);
+ const float r = math::distance(p1, center);
const float theta_step = ((2 * M_PI) / (float)resolution);
for (const int i : IndexRange(resolution)) {
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_line.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_line.cc
index ff9218b1ac2..d35fa0a2fdc 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_line.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_line.cc
@@ -100,7 +100,7 @@ static std::unique_ptr<CurveEval> create_direction_line_curve(const float3 start
spline->resize(2);
MutableSpan<float3> positions = spline->positions();
positions[0] = start;
- positions[1] = direction.normalized() * length + start;
+ positions[1] = math::normalize(direction) * length + start;
spline->radii().fill(1.0f);
spline->tilts().fill(0.0f);
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_quadratic_bezier.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_quadratic_bezier.cc
index 084d27e9d24..885d92a111b 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_quadratic_bezier.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_quadratic_bezier.cc
@@ -58,9 +58,9 @@ static std::unique_ptr<CurveEval> create_quadratic_bezier_curve(const float3 p1,
const float step = 1.0f / resolution;
for (const int i : IndexRange(resolution + 1)) {
const float factor = step * i;
- const float3 q1 = float3::interpolate(p1, p2, factor);
- const float3 q2 = float3::interpolate(p2, p3, factor);
- positions[i] = float3::interpolate(q1, q2, factor);
+ const float3 q1 = math::interpolate(p1, p2, factor);
+ const float3 q2 = math::interpolate(p2, p3, factor);
+ positions[i] = math::interpolate(q1, q2, factor);
}
curve->add_spline(std::move(spline));
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc
index 038f7625825..56fbc50f033 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc
@@ -185,7 +185,7 @@ class SampleCurveFunction : public fn::MultiFunction {
for (const int i : mask) {
const Spline::LookupResult &lookup = lookups[i];
const Span<float3> evaluated_tangents = splines[spline_indices[i]]->evaluated_tangents();
- sampled_tangents[i] = sample_with_lookup(lookup, evaluated_tangents).normalized();
+ sampled_tangents[i] = math::normalize(sample_with_lookup(lookup, evaluated_tangents));
}
}
@@ -193,7 +193,7 @@ class SampleCurveFunction : public fn::MultiFunction {
for (const int i : mask) {
const Spline::LookupResult &lookup = lookups[i];
const Span<float3> evaluated_normals = splines[spline_indices[i]]->evaluated_normals();
- sampled_normals[i] = sample_with_lookup(lookup, evaluated_normals).normalized();
+ sampled_normals[i] = math::normalize(sample_with_lookup(lookup, evaluated_normals));
}
}
}
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc
index 40dde645756..257a5b8df00 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc
@@ -96,7 +96,7 @@ static void calculate_nurbs_lengths(const NURBSpline &spline, MutableSpan<float>
float length = 0.0f;
for (const int i : IndexRange(positions.size() - 1)) {
lengths[i] = length;
- length += float3::distance(positions[i], positions[i + 1]);
+ length += math::distance(positions[i], positions[i + 1]);
}
lengths.last() = length;
}
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
index a8553b636a4..19efd4b7508 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
@@ -285,7 +285,7 @@ static void copy_uniform_sample_point_attributes(const Span<SplinePtr> splines,
spline.sample_with_index_factors<float3>(
spline.evaluated_tangents(), uniform_samples, data.tangents.slice(offset, size));
for (float3 &tangent : data.tangents) {
- tangent.normalize();
+ tangent = math::normalize(tangent);
}
}
@@ -293,7 +293,7 @@ static void copy_uniform_sample_point_attributes(const Span<SplinePtr> splines,
spline.sample_with_index_factors<float3>(
spline.evaluated_normals(), uniform_samples, data.normals.slice(offset, size));
for (float3 &normals : data.normals) {
- normals.normalize();
+ normals = math::normalize(normals);
}
}
}
diff --git a/source/blender/nodes/geometry/nodes/node_geo_image_texture.cc b/source/blender/nodes/geometry/nodes/node_geo_image_texture.cc
index 28a8fb80294..624a8b6b0f6 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_image_texture.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_image_texture.cc
@@ -21,7 +21,7 @@
#include "BKE_image.h"
-#include "BLI_float4.hh"
+#include "BLI_math_vec_types.hh"
#include "BLI_threads.h"
#include "BLI_timeit.hh"
diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cube.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cube.cc
index e90a9eb393b..5b67258a947 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cube.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cube.cc
@@ -155,7 +155,7 @@ static void calculate_polys(const CuboidConfig &config,
/* Calculate polys for Bottom faces. */
int vert_1_start = 0;
- for (const int UNUSED(y) : IndexRange(config.edges_y)) {
+ for ([[maybe_unused]] const int y : IndexRange(config.edges_y)) {
for (const int x : IndexRange(config.edges_x)) {
const int vert_1 = vert_1_start + x;
const int vert_2 = vert_1_start + config.verts_x + x;
@@ -173,7 +173,7 @@ static void calculate_polys(const CuboidConfig &config,
vert_1_start = 0;
int vert_2_start = config.verts_x * config.verts_y;
- for (const int UNUSED(z) : IndexRange(config.edges_z)) {
+ for ([[maybe_unused]] const int z : IndexRange(config.edges_z)) {
for (const int x : IndexRange(config.edges_x)) {
define_quad(polys,
loops,
@@ -196,7 +196,7 @@ static void calculate_polys(const CuboidConfig &config,
(config.verts_x - 2) * (config.verts_y - 2));
vert_2_start = vert_1_start + config.verts_x;
- for (const int UNUSED(y) : IndexRange(config.edges_y)) {
+ for ([[maybe_unused]] const int y : IndexRange(config.edges_y)) {
for (const int x : IndexRange(config.edges_x)) {
define_quad(polys,
loops,
diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc
index 607f5b52392..691267bccb8 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc
@@ -155,8 +155,8 @@ static void node_geo_exec(GeoNodeExecParams params)
if (count_mode == GEO_NODE_MESH_LINE_COUNT_RESOLUTION) {
/* Don't allow asymptotic count increase for low resolution values. */
const float resolution = std::max(params.extract_input<float>("Resolution"), 0.0001f);
- const int count = total_delta.length() / resolution + 1;
- const float3 delta = total_delta.normalized() * resolution;
+ const int count = math::length(total_delta) / resolution + 1;
+ const float3 delta = math::normalize(total_delta) * resolution;
mesh = create_line_mesh(start, delta, count);
}
else if (count_mode == GEO_NODE_MESH_LINE_COUNT_TOTAL) {
diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc
index d8d76b26157..751cf917f6f 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc
@@ -183,7 +183,7 @@ static void calculate_sphere_faces(MutableSpan<MLoop> loops,
int ring_vert_index_start = 1;
int ring_edge_index_start = segments;
- for (const int UNUSED(ring) : IndexRange(1, rings - 2)) {
+ for ([[maybe_unused]] const int ring : IndexRange(1, rings - 2)) {
const int next_ring_vert_index_start = ring_vert_index_start + segments;
const int next_ring_edge_index_start = ring_edge_index_start + segments * 2;
const int ring_vertical_edge_index_start = ring_edge_index_start + segments;
diff --git a/source/blender/nodes/geometry/nodes/node_geo_points_to_volume.cc b/source/blender/nodes/geometry/nodes/node_geo_points_to_volume.cc
index dda4543d5e1..c165bcf8e35 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_points_to_volume.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_points_to_volume.cc
@@ -166,7 +166,7 @@ static float compute_voxel_size(const GeoNodeExecParams &params,
}
/* The voxel size adapts to the final size of the volume. */
- const float diagonal = float3::distance(min, max);
+ const float diagonal = math::distance(min, max);
const float extended_diagonal = diagonal + 2.0f * radius;
const float voxel_size = extended_diagonal / voxel_amount;
return voxel_size;
diff --git a/source/blender/nodes/geometry/nodes/node_geo_proximity.cc b/source/blender/nodes/geometry/nodes/node_geo_proximity.cc
index e0117c4726d..772638ef240 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_proximity.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_proximity.cc
@@ -85,7 +85,7 @@ static bool calculate_mesh_proximity(const VArray<float3> &positions,
for (int i : range) {
const int index = mask[i];
/* Use the distance to the last found point as upper bound to speedup the bvh lookup. */
- nearest.dist_sq = float3::distance_squared(nearest.co, positions[index]);
+ nearest.dist_sq = math::distance_squared(float3(nearest.co), positions[index]);
BLI_bvhtree_find_nearest(
bvh_data.tree, positions[index], &nearest, bvh_data.nearest_callback, &bvh_data);
diff --git a/source/blender/nodes/geometry/nodes/node_geo_raycast.cc b/source/blender/nodes/geometry/nodes/node_geo_raycast.cc
index 2c35ca0afc9..c38503f688c 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_raycast.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_raycast.cc
@@ -163,7 +163,7 @@ static void raycast_to_mesh(IndexMask mask,
for (const int i : mask) {
const float ray_length = ray_lengths[i];
const float3 ray_origin = ray_origins[i];
- const float3 ray_direction = ray_directions[i].normalized();
+ const float3 ray_direction = math::normalize(ray_directions[i]);
BVHTreeRayHit hit;
hit.index = -1;
diff --git a/source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc b/source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc
index feab0a6743f..82d09bbc208 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc
@@ -106,7 +106,7 @@ static void set_position_in_component(const GeometryNodeCurveHandleMode mode,
}
}
else {
- for (int UNUSED(i) : spline->positions().index_range()) {
+ for ([[maybe_unused]] int i : spline->positions().index_range()) {
if (current_mask < selection.size() && selection[current_mask] == current_point) {
current_mask++;
}
diff --git a/source/blender/nodes/geometry/nodes/node_geo_transfer_attribute.cc b/source/blender/nodes/geometry/nodes/node_geo_transfer_attribute.cc
index 331460296a6..6867051ecfe 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_transfer_attribute.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_transfer_attribute.cc
@@ -296,7 +296,7 @@ static void get_closest_mesh_corners(const Mesh &mesh,
const MLoop &loop = mesh.mloop[loop_index];
const int vertex_index = loop.v;
const MVert &mvert = mesh.mvert[vertex_index];
- const float distance_sq = float3::distance_squared(position, mvert.co);
+ const float distance_sq = math::distance_squared(position, float3(mvert.co));
if (distance_sq < min_distance_sq) {
min_distance_sq = distance_sq;
closest_loop_index = loop_index;
diff --git a/source/blender/nodes/geometry/nodes/node_geo_transform.cc b/source/blender/nodes/geometry/nodes/node_geo_transform.cc
index 7f866ea6f4a..6187a2eacf9 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_transform.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_transform.cc
@@ -37,7 +37,7 @@ namespace blender::nodes {
static bool use_translate(const float3 rotation, const float3 scale)
{
- if (compare_ff(rotation.length_squared(), 0.0f, 1e-9f) != 1) {
+ if (compare_ff(math::length_squared(rotation), 0.0f, 1e-9f) != 1) {
return false;
}
if (compare_ff(scale.x, 1.0f, 1e-9f) != 1 || compare_ff(scale.y, 1.0f, 1e-9f) != 1 ||
@@ -49,7 +49,7 @@ static bool use_translate(const float3 rotation, const float3 scale)
static void translate_mesh(Mesh &mesh, const float3 translation)
{
- if (!translation.is_zero()) {
+ if (!math::is_zero(translation)) {
BKE_mesh_translate(&mesh, translation, false);
}
}
diff --git a/source/blender/nodes/intern/node_socket.cc b/source/blender/nodes/intern/node_socket.cc
index 6a6b6e3d3cc..ed72580ccf1 100644
--- a/source/blender/nodes/intern/node_socket.cc
+++ b/source/blender/nodes/intern/node_socket.cc
@@ -26,8 +26,8 @@
#include "DNA_node_types.h"
#include "BLI_color.hh"
-#include "BLI_float3.hh"
#include "BLI_listbase.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_string.h"
#include "BLI_utildefines.h"
diff --git a/source/blender/nodes/shader/node_shader_util.hh b/source/blender/nodes/shader/node_shader_util.hh
index 9d4d57d01dd..5a5b4f613f3 100644
--- a/source/blender/nodes/shader/node_shader_util.hh
+++ b/source/blender/nodes/shader/node_shader_util.hh
@@ -29,9 +29,9 @@
#include "BLI_blenlib.h"
#include "BLI_color.hh"
-#include "BLI_float3.hh"
#include "BLI_math.h"
#include "BLI_math_base_safe.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_rand.h"
#include "BLI_threads.h"
#include "BLI_utildefines.h"
diff --git a/source/blender/nodes/shader/nodes/node_shader_map_range.cc b/source/blender/nodes/shader/nodes/node_shader_map_range.cc
index 3276a1bfd72..bc7ca661a77 100644
--- a/source/blender/nodes/shader/nodes/node_shader_map_range.cc
+++ b/source/blender/nodes/shader/nodes/node_shader_map_range.cc
@@ -272,7 +272,7 @@ class MapRangeVectorFunction : public blender::fn::MultiFunction {
blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(5, "Vector");
for (int64_t i : mask) {
- float3 factor = float3::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]);
+ float3 factor = math::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]);
results[i] = factor * (to_max[i] - to_min[i]) + to_min[i];
}
@@ -315,8 +315,8 @@ class MapRangeSteppedVectorFunction : public blender::fn::MultiFunction {
blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(6, "Vector");
for (int64_t i : mask) {
- float3 factor = float3::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]);
- factor = float3::safe_divide(float3::floor(factor * (steps[i] + 1.0f)), steps[i]);
+ float3 factor = math::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]);
+ factor = math::safe_divide(math::floor(factor * (steps[i] + 1.0f)), steps[i]);
results[i] = factor * (to_max[i] - to_min[i]) + to_min[i];
}
@@ -355,7 +355,7 @@ class MapRangeSmoothstepVectorFunction : public blender::fn::MultiFunction {
blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(5, "Vector");
for (int64_t i : mask) {
- float3 factor = float3::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]);
+ float3 factor = math::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]);
clamp_v3(factor, 0.0f, 1.0f);
factor = (float3(3.0f) - 2.0f * factor) * (factor * factor);
results[i] = factor * (to_max[i] - to_min[i]) + to_min[i];
@@ -390,7 +390,7 @@ class MapRangeSmootherstepVectorFunction : public blender::fn::MultiFunction {
blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(5, "Vector");
for (int64_t i : mask) {
- float3 factor = float3::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]);
+ float3 factor = math::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]);
clamp_v3(factor, 0.0f, 1.0f);
factor = factor * factor * factor * (factor * (factor * 6.0f - 15.0f) + 10.0f);
results[i] = factor * (to_max[i] - to_min[i]) + to_min[i];
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_brick.cc b/source/blender/nodes/shader/nodes/node_shader_tex_brick.cc
index 61b1613c11a..81a69ef18da 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_brick.cc
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_brick.cc
@@ -19,8 +19,7 @@
#include "node_shader_util.hh"
-#include "BLI_float2.hh"
-#include "BLI_float4.hh"
+#include "BLI_math_vec_types.hh"
#include "UI_interface.h"
#include "UI_resources.h"
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_gradient.cc b/source/blender/nodes/shader/nodes/node_shader_tex_gradient.cc
index 85e0f262ca7..53be5bc09d9 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_gradient.cc
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_gradient.cc
@@ -130,7 +130,7 @@ class GradientFunction : public fn::MultiFunction {
/* Bias a little bit for the case where input is a unit length vector,
* to get exactly zero instead of a small random value depending
* on float precision. */
- const float r = std::max(0.999999f - vector[i].length(), 0.0f);
+ const float r = std::max(0.999999f - math::length(vector[i]), 0.0f);
fac[i] = r * r;
}
break;
@@ -140,7 +140,7 @@ class GradientFunction : public fn::MultiFunction {
/* Bias a little bit for the case where input is a unit length vector,
* to get exactly zero instead of a small random value depending
* on float precision. */
- fac[i] = std::max(0.999999f - vector[i].length(), 0.0f);
+ fac[i] = std::max(0.999999f - math::length(vector[i]), 0.0f);
}
break;
}
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_noise.cc b/source/blender/nodes/shader/nodes/node_shader_tex_noise.cc
index 0e549859a39..1c703313edf 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_noise.cc
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_noise.cc
@@ -176,14 +176,14 @@ class NoiseFunction : public fn::MultiFunction {
const VArray<float3> &vector = params.readonly_single_input<float3>(0, "Vector");
if (compute_factor) {
for (int64_t i : mask) {
- const float2 position = vector[i] * scale[i];
+ const float2 position = float2(vector[i] * scale[i]);
r_factor[i] = noise::perlin_fractal_distorted(
position, detail[i], roughness[i], distortion[i]);
}
}
if (compute_color) {
for (int64_t i : mask) {
- const float2 position = vector[i] * scale[i];
+ const float2 position = float2(vector[i] * scale[i]);
const float3 c = noise::perlin_float3_fractal_distorted(
position, detail[i], roughness[i], distortion[i]);
r_color[i] = ColorGeometry4f(c[0], c[1], c[2], 1.0f);
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.cc b/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.cc
index 2b5c1ddfe21..209f96449cd 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.cc
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.cc
@@ -313,7 +313,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position) {
- pos = float2::safe_divide(pos, scale[i]);
+ pos = math::safe_divide(pos, scale[i]);
r_position[i] = float3(pos.x, pos.y, 0.0f);
}
}
@@ -345,7 +345,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position) {
- pos = float2::safe_divide(pos, scale[i]);
+ pos = math::safe_divide(pos, scale[i]);
r_position[i] = float3(pos.x, pos.y, 0.0f);
}
}
@@ -380,7 +380,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position) {
- pos = float2::safe_divide(pos, scale[i]);
+ pos = math::safe_divide(pos, scale[i]);
r_position[i] = float3(pos.x, pos.y, 0.0f);
}
}
@@ -416,7 +416,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position) {
- r_position[i] = float3::safe_divide(r_position[i], scale[i]);
+ r_position[i] = math::safe_divide(r_position[i], scale[i]);
}
}
break;
@@ -446,7 +446,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position) {
- r_position[i] = float3::safe_divide(r_position[i], scale[i]);
+ r_position[i] = math::safe_divide(r_position[i], scale[i]);
}
}
break;
@@ -479,7 +479,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position) {
- r_position[i] = float3::safe_divide(r_position[i], scale[i]);
+ r_position[i] = math::safe_divide(r_position[i], scale[i]);
}
}
break;
@@ -519,7 +519,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position || calc_w) {
- pos = float4::safe_divide(pos, scale[i]);
+ pos = math::safe_divide(pos, scale[i]);
if (calc_position) {
r_position[i] = float3(pos.x, pos.y, pos.z);
}
@@ -560,7 +560,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position || calc_w) {
- pos = float4::safe_divide(pos, scale[i]);
+ pos = math::safe_divide(pos, scale[i]);
if (calc_position) {
r_position[i] = float3(pos.x, pos.y, pos.z);
}
@@ -604,7 +604,7 @@ class VoronoiMinowskiFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position || calc_w) {
- pos = float4::safe_divide(pos, scale[i]);
+ pos = math::safe_divide(pos, scale[i]);
if (calc_position) {
r_position[i] = float3(pos.x, pos.y, pos.z);
}
@@ -837,7 +837,7 @@ class VoronoiMetricFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position) {
- pos = float2::safe_divide(pos, scale[i]);
+ pos = math::safe_divide(pos, scale[i]);
r_position[i] = float3(pos.x, pos.y, 0.0f);
}
}
@@ -868,7 +868,7 @@ class VoronoiMetricFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position) {
- pos = float2::safe_divide(pos, scale[i]);
+ pos = math::safe_divide(pos, scale[i]);
r_position[i] = float3(pos.x, pos.y, 0.0f);
}
}
@@ -902,7 +902,7 @@ class VoronoiMetricFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position) {
- pos = float2::safe_divide(pos, scale[i]);
+ pos = math::safe_divide(pos, scale[i]);
r_position[i] = float3(pos.x, pos.y, 0.0f);
}
}
@@ -937,7 +937,7 @@ class VoronoiMetricFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position) {
- r_position[i] = float3::safe_divide(r_position[i], scale[i]);
+ r_position[i] = math::safe_divide(r_position[i], scale[i]);
}
}
break;
@@ -966,7 +966,7 @@ class VoronoiMetricFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position) {
- r_position[i] = float3::safe_divide(r_position[i], scale[i]);
+ r_position[i] = math::safe_divide(r_position[i], scale[i]);
}
}
break;
@@ -999,7 +999,7 @@ class VoronoiMetricFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position) {
- r_position[i] = float3::safe_divide(r_position[i], scale[i]);
+ r_position[i] = math::safe_divide(r_position[i], scale[i]);
}
}
}
@@ -1040,7 +1040,7 @@ class VoronoiMetricFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position || calc_w) {
- pos = float4::safe_divide(pos, scale[i]);
+ pos = math::safe_divide(pos, scale[i]);
if (calc_position) {
r_position[i] = float3(pos.x, pos.y, pos.z);
}
@@ -1080,7 +1080,7 @@ class VoronoiMetricFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position || calc_w) {
- pos = float4::safe_divide(pos, scale[i]);
+ pos = math::safe_divide(pos, scale[i]);
if (calc_position) {
r_position[i] = float3(pos.x, pos.y, pos.z);
}
@@ -1123,7 +1123,7 @@ class VoronoiMetricFunction : public fn::MultiFunction {
r_color[i] = ColorGeometry4f(col[0], col[1], col[2], 1.0f);
}
if (calc_position || calc_w) {
- pos = float4::safe_divide(pos, scale[i]);
+ pos = math::safe_divide(pos, scale[i]);
if (calc_position) {
r_position[i] = float3(pos.x, pos.y, pos.z);
}
diff --git a/source/blender/python/generic/py_capi_utils.h b/source/blender/python/generic/py_capi_utils.h
index 604792389fa..f08665d75e7 100644
--- a/source/blender/python/generic/py_capi_utils.h
+++ b/source/blender/python/generic/py_capi_utils.h
@@ -57,20 +57,20 @@ void PyC_Err_PrintWithFunc(PyObject *py_func);
void PyC_FileAndNum(const char **r_filename, int *r_lineno);
void PyC_FileAndNum_Safe(const char **r_filename, int *r_lineno); /* checks python is running */
int PyC_AsArray_FAST(void *array,
- const size_t array_item_size,
+ size_t array_item_size,
PyObject *value_fast,
- const Py_ssize_t length,
+ Py_ssize_t length,
const PyTypeObject *type,
const char *error_prefix);
int PyC_AsArray(void *array,
- const size_t array_item_size,
+ size_t array_item_size,
PyObject *value,
- const Py_ssize_t length,
+ Py_ssize_t length,
const PyTypeObject *type,
const char *error_prefix);
int PyC_AsArray_Multi_FAST(void *array,
- const size_t array_item_size,
+ size_t array_item_size,
PyObject *value_fast,
const int *dims,
int dims_len,
@@ -78,7 +78,7 @@ int PyC_AsArray_Multi_FAST(void *array,
const char *error_prefix);
int PyC_AsArray_Multi(void *array,
- const size_t array_item_size,
+ size_t array_item_size,
PyObject *value,
const int *dims,
int dims_len,
diff --git a/source/blender/render/RE_bake.h b/source/blender/render/RE_bake.h
index 43d3b5b323c..b7ce3da71ff 100644
--- a/source/blender/render/RE_bake.h
+++ b/source/blender/render/RE_bake.h
@@ -96,7 +96,7 @@ bool RE_bake_pixels_populate_from_objects(struct Mesh *me_low,
BakePixel pixel_array_to[],
BakeHighPolyData highpoly[],
int tot_highpoly,
- const size_t num_pixels,
+ size_t num_pixels,
bool is_custom_cage,
float cage_extrusion,
float max_ray_distance,
@@ -106,16 +106,16 @@ bool RE_bake_pixels_populate_from_objects(struct Mesh *me_low,
void RE_bake_pixels_populate(struct Mesh *me,
struct BakePixel *pixel_array,
- const size_t num_pixels,
+ size_t num_pixels,
const struct BakeTargets *targets,
const char *uv_layer);
-void RE_bake_mask_fill(const BakePixel pixel_array[], const size_t num_pixels, char *mask);
+void RE_bake_mask_fill(const BakePixel pixel_array[], size_t num_pixels, char *mask);
void RE_bake_margin(struct ImBuf *ibuf, char *mask, int margin);
void RE_bake_normal_world_to_object(const BakePixel pixel_array[],
- const size_t num_pixels,
+ size_t num_pixels,
int depth,
float result[],
struct Object *ob,
@@ -125,14 +125,14 @@ void RE_bake_normal_world_to_object(const BakePixel pixel_array[],
* to a tangent space normal map for a given low poly mesh.
*/
void RE_bake_normal_world_to_tangent(const BakePixel pixel_array[],
- const size_t num_pixels,
+ size_t num_pixels,
int depth,
float result[],
struct Mesh *me,
const eBakeNormalSwizzle normal_swizzle[3],
float mat[4][4]);
void RE_bake_normal_world_to_world(const BakePixel pixel_array[],
- const size_t num_pixels,
+ size_t num_pixels,
int depth,
float result[],
const eBakeNormalSwizzle normal_swizzle[3]);
diff --git a/source/blender/sequencer/intern/effects.c b/source/blender/sequencer/intern/effects.c
index 8776bc63cf0..a35e83a8632 100644
--- a/source/blender/sequencer/intern/effects.c
+++ b/source/blender/sequencer/intern/effects.c
@@ -3344,12 +3344,12 @@ static ImBuf *do_text_effect(const SeqRenderData *context,
fonty = line_height;
BLF_position(font, x + max_ii(fontx / 55, 1), y - max_ii(fonty / 30, 1), 0.0f);
BLF_buffer_col(font, data->shadow_color);
- BLF_draw_buffer(font, data->text, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw_buffer(font, data->text, sizeof(data->text));
}
BLF_position(font, x, y, 0.0f);
BLF_buffer_col(font, data->color);
- BLF_draw_buffer(font, data->text, BLF_DRAW_STR_DUMMY_MAX);
+ BLF_draw_buffer(font, data->text, sizeof(data->text));
BLF_buffer(font, NULL, NULL, 0, 0, 0, NULL);
diff --git a/source/blender/sequencer/intern/render.c b/source/blender/sequencer/intern/render.c
index 9f4e07820fa..482425e70d3 100644
--- a/source/blender/sequencer/intern/render.c
+++ b/source/blender/sequencer/intern/render.c
@@ -29,6 +29,7 @@
#include "MEM_guardedalloc.h"
#include "DNA_anim_types.h"
+#include "DNA_defaults.h"
#include "DNA_mask_types.h"
#include "DNA_scene_types.h"
#include "DNA_sequence_types.h"
@@ -1188,15 +1189,13 @@ static ImBuf *seq_render_movieclip_strip(const SeqRenderData *context,
bool *r_is_proxy_image)
{
ImBuf *ibuf = NULL;
- MovieClipUser user;
+ MovieClipUser user = *DNA_struct_default_get(MovieClipUser);
IMB_Proxy_Size psize = SEQ_rendersize_to_proxysize(context->preview_render_size);
if (!seq->clip) {
return NULL;
}
- memset(&user, 0, sizeof(MovieClipUser));
-
BKE_movieclip_user_set_frame(&user, frame_index + seq->anim_startofs + seq->clip->start_frame);
user.render_size = MCLIP_PROXY_RENDER_SIZE_FULL;
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 9a8a6a3a3ac..2e305c0bf3c 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -607,7 +607,7 @@ int WM_operator_confirm_message_ex(struct bContext *C,
const char *title,
int icon,
const char *message,
- const wmOperatorCallContext opcontext);
+ wmOperatorCallContext opcontext);
int WM_operator_confirm_message(struct bContext *C, struct wmOperator *op, const char *message);
/* Operator API. */
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 99bab3ae23d..344f4959a93 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -193,7 +193,6 @@ bool wm_file_or_session_data_has_unsaved_changes(const Main *bmain, const wmWind
static void wm_window_match_init(bContext *C, ListBase *wmlist)
{
*wmlist = G_MAIN->wm;
- BLI_listbase_clear(&G_MAIN->wm);
wmWindow *active_win = CTX_wm_window(C);
@@ -220,6 +219,8 @@ static void wm_window_match_init(bContext *C, ListBase *wmlist)
}
}
+ BLI_listbase_clear(&G_MAIN->wm);
+
/* reset active window */
CTX_wm_window_set(C, active_win);
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 29c9f53f735..a1854a8ed86 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -1033,7 +1033,9 @@ void wm_window_make_drawable(wmWindowManager *wm, wmWindow *win)
}
wm_window_set_drawable(wm, win, true);
+ }
+ if (win->ghostwin) {
/* this can change per window */
WM_window_set_dpi(win);
}