Browse Source

Merge branch 'master' into fix/version-conflict

pull/11426/head
Max Petrov 2 years ago
committed by GitHub
parent
commit
bb151f5537
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 970
      application/src/main/data/json/system/scada_symbols/bottom-flow-meter.svg
  2. 558
      application/src/main/data/json/system/scada_symbols/bottom-right-elbow-pipe.svg
  3. 854
      application/src/main/data/json/system/scada_symbols/bottom-tee-pipe.svg
  4. 611
      application/src/main/data/json/system/scada_symbols/centrifugal-pump.svg
  5. 1047
      application/src/main/data/json/system/scada_symbols/cross-pipe.svg
  6. 271
      application/src/main/data/json/system/scada_symbols/horizontal-ball-valve.svg
  7. 948
      application/src/main/data/json/system/scada_symbols/horizontal-inline-flow-meter.svg
  8. 422
      application/src/main/data/json/system/scada_symbols/horizontal-pipe.svg
  9. 300
      application/src/main/data/json/system/scada_symbols/horizontal-wheel-valve.svg
  10. 558
      application/src/main/data/json/system/scada_symbols/left-bottom-elbow-pipe.svg
  11. 166
      application/src/main/data/json/system/scada_symbols/left-drain-pipe.svg
  12. 181
      application/src/main/data/json/system/scada_symbols/left-elbow-drain-pipe.svg
  13. 964
      application/src/main/data/json/system/scada_symbols/left-flow-meter.svg
  14. 526
      application/src/main/data/json/system/scada_symbols/left-motor-pump.svg
  15. 866
      application/src/main/data/json/system/scada_symbols/left-tee-pipe.svg
  16. 558
      application/src/main/data/json/system/scada_symbols/left-top-elbow-pipe.svg
  17. 88
      application/src/main/data/json/system/scada_symbols/long-bottom-filter.svg
  18. 487
      application/src/main/data/json/system/scada_symbols/long-horizontal-pipe.svg
  19. 88
      application/src/main/data/json/system/scada_symbols/long-top-filter.svg
  20. 484
      application/src/main/data/json/system/scada_symbols/long-vertical-pipe.svg
  21. 167
      application/src/main/data/json/system/scada_symbols/right-drain-pipe.svg
  22. 178
      application/src/main/data/json/system/scada_symbols/right-elbow-drain-pipe.svg
  23. 964
      application/src/main/data/json/system/scada_symbols/right-flow-meter.svg
  24. 526
      application/src/main/data/json/system/scada_symbols/right-motor-pump.svg
  25. 854
      application/src/main/data/json/system/scada_symbols/right-tee-pipe.svg
  26. 88
      application/src/main/data/json/system/scada_symbols/short-bottom-filter.svg
  27. 160
      application/src/main/data/json/system/scada_symbols/short-left-drain-pipe.svg
  28. 160
      application/src/main/data/json/system/scada_symbols/short-right-drain-pipe.svg
  29. 88
      application/src/main/data/json/system/scada_symbols/short-top-filter.svg
  30. 428
      application/src/main/data/json/system/scada_symbols/small-left-motor-pump.svg
  31. 428
      application/src/main/data/json/system/scada_symbols/small-right-motor-pump.svg
  32. 965
      application/src/main/data/json/system/scada_symbols/top-flow-meter.svg
  33. 558
      application/src/main/data/json/system/scada_symbols/top-right-elbow-pipe.svg
  34. 854
      application/src/main/data/json/system/scada_symbols/top-tee-pipe.svg
  35. 271
      application/src/main/data/json/system/scada_symbols/vertical-ball-valve.svg
  36. 949
      application/src/main/data/json/system/scada_symbols/vertical-inline-flow-meter.svg
  37. 422
      application/src/main/data/json/system/scada_symbols/vertical-pipe.svg
  38. 1394
      application/src/main/data/json/system/scada_symbols/vertical-tank.svg
  39. 300
      application/src/main/data/json/system/scada_symbols/vertical-wheel-valve.svg
  40. 14
      application/src/main/data/json/system/widget_bundles/scada_symbols.json
  41. 52
      application/src/main/data/json/system/widget_bundles/scada_water_system_symbols.json
  42. 4
      application/src/main/data/json/system/widget_types/power_button.json
  43. 24
      application/src/main/data/json/system/widget_types/scada_symbol.json
  44. 4
      application/src/main/data/json/system/widget_types/toggle_button.json
  45. 49
      application/src/main/data/upgrade/3.7.0/schema_update.sql
  46. 2
      application/src/main/java/org/thingsboard/server/controller/ControllerConstants.java
  47. 28
      application/src/main/java/org/thingsboard/server/controller/ImageController.java
  48. 21
      application/src/main/java/org/thingsboard/server/controller/WidgetTypeController.java
  49. 18
      application/src/main/java/org/thingsboard/server/controller/WidgetsBundleController.java
  50. 9
      application/src/main/java/org/thingsboard/server/service/edge/rpc/fetch/SystemWidgetTypesEdgeEventFetcher.java
  51. 3
      application/src/main/java/org/thingsboard/server/service/edge/rpc/fetch/SystemWidgetsBundlesEdgeEventFetcher.java
  52. 9
      application/src/main/java/org/thingsboard/server/service/edge/rpc/fetch/TenantWidgetTypesEdgeEventFetcher.java
  53. 101
      application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java
  54. 23
      application/src/main/resources/thingsboard.yml
  55. 28
      application/src/test/java/org/thingsboard/server/controller/AuditLogControllerTest.java
  56. 36
      application/src/test/java/org/thingsboard/server/controller/AuditLogControllerTest_DedicatedEventsDataSource.java
  57. 61
      application/src/test/java/org/thingsboard/server/controller/ImageControllerTest.java
  58. 3
      application/src/test/java/org/thingsboard/server/service/install/InstallScriptsTest.java
  59. 7
      common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ImageService.java
  60. 9
      common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java
  61. 7
      common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java
  62. 1
      common/data/src/main/java/org/thingsboard/server/common/data/ImageExportData.java
  63. 10
      common/data/src/main/java/org/thingsboard/server/common/data/ResourceSubType.java
  64. 3
      common/data/src/main/java/org/thingsboard/server/common/data/TbResourceInfo.java
  65. 1
      common/data/src/main/java/org/thingsboard/server/common/data/TbResourceInfoFilter.java
  66. 4
      common/data/src/main/java/org/thingsboard/server/common/data/widget/BaseWidgetType.java
  67. 34
      common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetTypeFilter.java
  68. 6
      common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetsBundle.java
  69. 38
      common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetsBundleFilter.java
  70. 7
      common/proto/src/main/java/org/thingsboard/server/common/util/ProtoUtils.java
  71. 1
      common/proto/src/main/proto/queue.proto
  72. 4
      common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2mVersionedModelProvider.java
  73. 37
      dao/src/main/java/org/thingsboard/server/dao/JpaDaoConfig.java
  74. 8
      dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogServiceImpl.java
  75. 26
      dao/src/main/java/org/thingsboard/server/dao/config/DedicatedEventsDataSource.java
  76. 91
      dao/src/main/java/org/thingsboard/server/dao/config/DedicatedEventsJpaDaoConfig.java
  77. 26
      dao/src/main/java/org/thingsboard/server/dao/config/DefaultDataSource.java
  78. 15
      dao/src/main/java/org/thingsboard/server/dao/config/DefaultDedicatedJpaDaoConfig.java
  79. 121
      dao/src/main/java/org/thingsboard/server/dao/config/JpaDaoConfig.java
  80. 4
      dao/src/main/java/org/thingsboard/server/dao/config/SqlTsDaoConfig.java
  81. 4
      dao/src/main/java/org/thingsboard/server/dao/config/SqlTsLatestDaoConfig.java
  82. 4
      dao/src/main/java/org/thingsboard/server/dao/config/TimescaleDaoConfig.java
  83. 4
      dao/src/main/java/org/thingsboard/server/dao/config/TimescaleTsLatestDaoConfig.java
  84. 1
      dao/src/main/java/org/thingsboard/server/dao/event/EventDao.java
  85. 4
      dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java
  86. 6
      dao/src/main/java/org/thingsboard/server/dao/model/sql/AbstractWidgetTypeEntity.java
  87. 1
      dao/src/main/java/org/thingsboard/server/dao/model/sql/AuditLogEntity.java
  88. 9
      dao/src/main/java/org/thingsboard/server/dao/model/sql/TbResourceEntity.java
  89. 9
      dao/src/main/java/org/thingsboard/server/dao/model/sql/TbResourceInfoEntity.java
  90. 5
      dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java
  91. 32
      dao/src/main/java/org/thingsboard/server/dao/resource/BaseImageService.java
  92. 4
      dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java
  93. 3
      dao/src/main/java/org/thingsboard/server/dao/resource/TbResourceDao.java
  94. 19
      dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDao.java
  95. 87
      dao/src/main/java/org/thingsboard/server/dao/sql/audit/DedicatedJpaAuditLogDao.java
  96. 35
      dao/src/main/java/org/thingsboard/server/dao/sql/audit/JpaAuditLogDao.java
  97. 36
      dao/src/main/java/org/thingsboard/server/dao/sql/event/DedicatedEventInsertRepository.java
  98. 45
      dao/src/main/java/org/thingsboard/server/dao/sql/event/DedicatedJpaEventDao.java
  99. 13
      dao/src/main/java/org/thingsboard/server/dao/sql/event/EventInsertRepository.java
  100. 73
      dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java

970
application/src/main/data/json/system/scada_symbols/bottom-flow-meter.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 74 KiB

558
application/src/main/data/json/system/scada_symbols/bottom-right-elbow-pipe.svg

@ -0,0 +1,558 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" fill="none" version="1.1" viewBox="0 0 200 200">
<tb:metadata xmlns=""><![CDATA[{
"title": "Bottom right elbow pipe",
"description": "Bottom right elbow pipe with fluid and leak visualizations.",
"searchTags": [
"pipe",
"elbow"
],
"widgetSizeX": 1,
"widgetSizeY": 1,
"stateRenderFunction": "var centerLiquidPattern = prepareLiquidPattern('center-liquid', 'center-fluid-background');\nvar horizontalLiquidPattern = prepareLiquidPattern('horizontal-liquid', 'horizontal-fluid');\n\ncenterLiquidPattern.attr({'xlink:href': '#'+horizontalLiquidPattern.id()});\n\nvar verticalLiquidPattern = prepareLiquidPattern('vertical-liquid', 'vertical-fluid');\n\nvar fluid = ctx.values.fluid && !ctx.values.leak;\nvar flow = ctx.values.flow;\nvar flowDirection = ctx.values.flowDirection;\nvar flowAnimationSpeed = ctx.values.flowAnimationSpeed;\n \nif (horizontalLiquidPattern) {\n updateLiquidPatternAnimation(horizontalLiquidPattern, fluid, \n flow, flowDirection, flowAnimationSpeed, false);\n}\n\nif (verticalLiquidPattern) {\n updateLiquidPatternAnimation(verticalLiquidPattern, fluid, \n flow, flowDirection, flowAnimationSpeed, false);\n}\n\nif (centerLiquidPattern) {\n updateLiquidPatternAnimation(centerLiquidPattern, fluid, \n flow, flowDirection, flowAnimationSpeed, true);\n}\n\nfunction prepareLiquidPattern(patternId, fluidElementTag) {\n var liquidPattern = ctx.svg.defs().findOne('pattern#'+patternId);\n var fluidElements = ctx.tags[fluidElementTag];\n\n if (liquidPattern) {\n liquidPattern.id(ctx.api.generateElementId());\n for (var i=0;i<fluidElements.length;i++) {\n fluidElements[i].fill(liquidPattern);\n }\n } else {\n liquidPattern = fluidElements[0].reference('fill');\n }\n return liquidPattern;\n}\n\nfunction updateLiquidPatternAnimation(liquidPattern, fluid, flow, flowDirection, flowAnimationSpeed, center) {\n var elementFluid = liquidPattern.remember('fluid');\n var elementFlow = null;\n var elementFlowDirection = null;\n \n if (fluid !== elementFluid) {\n liquidPattern.remember('fluid', fluid);\n elementFlow = null;\n elementFlowDirection = null;\n } else {\n elementFlow = liquidPattern.remember('flow');\n elementFlowDirection = liquidPattern.remember('flowDirection');\n }\n \n if (fluid) {\n if (flow !== elementFlow) {\n liquidPattern.remember('flow', flow);\n if (flow) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection, center);\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n } else if (flow && elementFlowDirection !== flowDirection) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection, center);\n }\n if (flow && liquidPattern) {\n liquidPattern.timeline().speed(flowAnimationSpeed);\n }\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n}\n\nfunction animateFlow(liquidPattern, forwardElseReverse, center) {\n ctx.api.resetAnimation(liquidPattern);\n var deltaX = forwardElseReverse ? 172 : -172;\n if (center) {\n var delta = deltaX * 1.17 * Math.cos(45*Math.PI/180);\n liquidPattern.animate(1000).ease('-').relative(-delta, delta).loop();\n } else {\n liquidPattern.animate(1000).ease('-').relative(deltaX, 0).loop();\n }\n}\n\n",
"tags": [
{
"tag": "center-fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}\n",
"actions": null
},
{
"tag": "fluid-background",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.fluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "horizontal-fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}\n",
"actions": null
},
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
},
{
"tag": "vertical-fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}\n",
"actions": null
}
],
"behavior": [
{
"id": "fluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": null,
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "fluidColor",
"name": "{i18n:scada.symbol.fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata><g transform="rotate(-90,100,100)" clip-path="url(#clip0_1245_66459)">
<rect x="14" y="64" width="50" height="72" fill="#fff" tb:tag="pipe-background"/>
<rect x="14" y="64" width="50" height="72" fill="url(#paint0_linear_1245_66459)" style="fill:url(#paint0_linear_1245_66459)"/>
<rect x="15.5" y="65.5" width="47" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m64 186v-50h72v50z" fill="#fff" tb:tag="pipe-background"/>
<path d="m64 186v-50h72v50z" fill="url(#paint1_linear_1245_66459)" style="fill:url(#paint1_linear_1245_66459)"/>
<path d="m65.5 184.5v-47h69v47z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect x="1.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<rect transform="rotate(-90,51.5,198.5)" x="51.5" y="198.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<path d="m64 64s30.518 1.7177 50.4 21.6c19.882 19.882 21.6 50.4 21.6 50.4h-72z" fill="#fff" tb:tag="pipe-background"/>
<path d="m64 64s30.518 1.7177 50.4 21.6c19.882 19.882 21.6 50.4 21.6 50.4h-72z" fill="url(#paint2_linear_1245_66459)" style="fill:url(#paint2_linear_1245_66459)"/>
<path d="m65.5 134.5v-68.865c0.8334 0.0861 1.9717 0.2211 3.3584 0.4273 3.1196 0.464 7.4889 1.2873 12.47 2.7228 9.9828 2.8767 22.316 8.1809 32.01 17.875 9.695 9.6942 14.999 22.027 17.875 32.01 1.436 4.982 2.259 9.351 2.723 12.471 0.206 1.386 0.341 2.525 0.428 3.358z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
</g><defs>
<pattern id="horizontal-liquid" width="172" height="72" patternTransform="translate(14,-8)" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<linearGradient id="paint28_linear_1182_32781-5" x1="19.316" x2="21" y1="8.2632" y2="23" gradientTransform="translate(-36,6)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint29_linear_1182_32781-1" x1="148.32" x2="150" y1="8.2632" y2="23" gradientTransform="translate(-165,135)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint30_linear_1182_32781-7" x1="111.32" x2="113" y1="9.2632" y2="24" gradientTransform="translate(-129,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint31_linear_1182_32781-4" x1="32.316" x2="34" y1="51.263" y2="66" gradientTransform="translate(-92,-24)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint32_linear_1182_32781-3" x1="153.32" x2="155" y1="51.263" y2="66" gradientTransform="translate(-213,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint33_linear_1182_32781-1" x1="31.947" x2="33" y1="21.789" y2="31" gradientTransform="translate(-59,7)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint34_linear_1182_32781-4" x1="160.95" x2="162" y1="21.789" y2="31" gradientTransform="translate(-188,136)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint35_linear_1182_32781-6" x1="3.9474" x2="5" y1="32.79" y2="42" gradientTransform="translate(-42,-32)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint36_linear_1182_32781-9" x1="93.158" x2="94" y1="4.6316" y2="12" gradientTransform="translate(-102,86)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint37_linear_1182_32781-4" x1="71.158" x2="72" y1="56.632" y2="64" gradientTransform="translate(-132,12)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint38_linear_1182_32781-2" x1="110.95" x2="112" y1="32.79" y2="42" gradientTransform="translate(-149,75)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint39_linear_1182_32781-2" x1="57.947" x2="59" y1="34.79" y2="44" gradientTransform="translate(-98,20)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint40_linear_1182_32781-6" x1="113.95" x2="115" y1="57.79" y2="67" gradientTransform="translate(-177,53)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint41_linear_1182_32781-4" x1="137.95" x2="139" y1="37.79" y2="47" gradientTransform="translate(-181,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint42_linear_1182_32781-1" x1="74.947" x2="76" y1="16.789" y2="26" gradientTransform="translate(-97,55)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint43_linear_1182_32781-2" x1="125.97" x2="126.5" y1="48.395" y2="53" gradientTransform="translate(-177,76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint44_linear_1182_32781-8" x1="168.97" x2="169.5" y1="44.395" y2="49" gradientTransform="translate(-216,123)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint45_linear_1182_32781-8" x1="56.974" x2="57.5" y1="7.3947" y2="12" gradientTransform="translate(-67,48)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint46_linear_1182_32781-9" x1="95.974" x2="96.5" y1="33.395" y2="38" gradientTransform="translate(-132,61)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint47_linear_1182_32781-2" x1="90.974" x2="91.5" y1="21.395" y2="26" gradientTransform="translate(-115,68)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint48_linear_1182_32781-88" x1="21.974" x2="22.5" y1="38.395" y2="43" gradientTransform="translate(-63,-18)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint49_linear_1182_32781-8" x1="123.97" x2="124.5" y1="21.395" y2="26" gradientTransform="translate(-148,101)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint50_linear_1182_32781-6" x1="85.974" x2="86.5" y1="45.395" y2="50" gradientTransform="translate(-134,39)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint51_linear_1182_32781-8" x1="50.974" x2="51.5" y1="19.395" y2="24" gradientTransform="translate(-73,30)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint52_linear_1182_32781-3" x1="47.974" x2="48.5" y1="49.395" y2="54" gradientTransform="translate(-100,-3)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint53_linear_1182_32781-83" x1="13.158" x2="14" y1="60.632" y2="68" gradientTransform="translate(-78,-50)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint54_linear_1182_32781-33" x1="134.16" x2="135" y1="60.632" y2="68" gradientTransform="translate(-199,71)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint55_linear_1182_32781-8" x1="93.5" x2="95.5" y1="50.5" y2="68" gradientTransform="translate(-154,37)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint84_linear_1182_32781-8" x1="248" x2="248" y1="1.8513e-7" y2="72" gradientTransform="scale(.33333 1)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" offset=".10895"/>
<stop stop-color="#fff" stop-opacity="0" offset=".11331"/>
<stop stop-color="#fff" stop-opacity="0" offset=".88736"/>
<stop stop-color="#727171" offset=".89138"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<pattern id="vertical-liquid" width="172" height="72" patternTransform="translate(14,-8)" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<clipPath id="clip0_1245_66459">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<linearGradient id="paint0_linear_1245_66459" x1="27" x2="26.346" y1="64" y2="136" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1245_66459" x1="64" x2="136" y1="173" y2="173.65" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint2_linear_1245_66459" x1="114" x2="64.321" y1="89" y2="136.34" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".35637"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".4903"/>
<stop stop-color="#fff" stop-opacity="0" offset=".56651"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".63374"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".75781"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<clipPath id="clipPath4310">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4304">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4298">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4292">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4286">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4280">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4274">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4268">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4262">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4256">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4250">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4244">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4238">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4232">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4226">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4220">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4214">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4208">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<pattern id="center-liquid" patternTransform="scale(1.17) rotate(-45)" patternUnits="userSpaceOnUse" xlink:href="#horizontal-liquid"/>
</defs><rect x="136" y="64" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><rect transform="rotate(90)" x="136" y="-136" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><rect x="136" y="64" width="50" height="72" fill="url(#horizontal-liquid)" stroke-width="0" style="display: none;" tb:tag="horizontal-fluid"/><rect transform="rotate(-90)" x="-186" y="64" width="50" height="72" fill="url(#vertical-liquid)" stroke-width="0" style="display: none;" tb:tag="vertical-fluid"/><path d="m136.05 136-72.05 0.1c0.09-0.87135 0.23117-2.1615 0.44675-3.6113 0.48513-3.2616 1.3459-7.8299 2.8468-13.038 3.0077-10.437 8.5533-23.332 18.689-33.468 10.136-10.136 23.03-15.682 33.467-18.689 5.2088-1.5014 9.7767-2.3619 13.039-2.847 1.4491-0.21538 2.6909-0.35652 3.5618-0.44748z" fill="#1ec1f4" stroke="#000" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><g transform="matrix(-.99929 0 0 -.99919 199.91 199.9)" style="display: none;" tb:tag="center-fluid">
<path d="m63.956 63.95 72.051-0.10008c-0.0901 0.87205-0.23133 2.1632-0.44707 3.6142-0.48547 3.2643-1.3469 7.8362-2.8488 13.048-3.0098 10.446-8.5594 23.351-18.702 33.495-10.143 10.145-23.046 15.695-33.491 18.704-5.2125 1.5026-9.7836 2.3638-13.048 2.8493-1.4501 0.21555-2.7428 0.3568-3.6144 0.44784z" fill="url(#center-liquid)" stroke="#000" stroke-width="0" tb:tag="center-fluid-background" style=""/>
<path d="m132.05 63.75s-0.0216 31.824-17.622 50.677c-17.142 17.939-50.576 17.628-50.576 17.628" fill="none" stroke="#727171" stroke-width="7.9" style=""/>
<path d="m63.956 63.954v-0.15398h7.8942v8.05h-8.0503v-7.896z" style="fill: rgb(114, 113, 113);"/>
</g><g transform="rotate(-90 100 100)" style="display: none;" tb:tag="leak">
<path d="m62.784 80.767c0.417 0.1391 0.9517 0.2463 1.3259 0.4603 1.326 0.4603 2.5556 1.2628 3.3039 2.386 0.2779 0.5563 0.5129 1.1873 0.6731 1.7756 0.4915 1.5723 1.0257 3.0697 1.5599 4.5672 0.545 1.3049 1.0792 2.8023 0.544 4.0855-0.1925-0.0107-0.3101 0.0213-0.5026 0.0105 0.3307 2.3744 2.2423 0.7354 6.5024 7.0127 2.2452 8.828 4.8752 21.579 4.8212 23.236-0.0323 0.578 0.0531 1.123 0.0636 1.626-0.011 0.887-0.0969 1.732-0.3752 2.566-0.1499 0.61-0.4924 1.209-0.7172 1.775-0.6315 1.626-1.1134 3.337-1.253 5.144 0.3745-0.481 0.749-0.962 1.1234-1.443 0 0 0.353-0.096 0.2353-0.064-0.1069-0.161 0.0216-0.385 0.182-0.492 0.3527 0.599 0.7055 1.198 0.9833 1.754 1.6139 2.91 3.185 5.894 4.478 9.017-0.7155-3.091-1.8588-6.128-3.2374-9.102-0.3099-0.674-0.6626-1.273-0.8121-2.054-0.4378-1.839 0.4398-3.721 1.4243-5.443l0.0428-0.075c0.0856-0.149 0.214-0.374 0.4065-0.363 0.2354-0.064 0.4919 0.182 0.6737 0.385 0.8659 1.091 1.7746 2.108 2.6833 3.124 1.1653 1.262 2.459 2.3 3.5814 3.637 1.0156 1.177 1.8708 2.461 2.6511 3.702 0.3527 0.599 0.7482 1.123 0.8656 1.786 0.1923 0.706 0.192 1.401 0.0742 2.128-0.1287 0.92-0.2146 1.765-0.4181 2.642-1.0925 5.036 4.1863 14.098 2.2917 18.974 1.1129-1.946 2.1938-4.009 3.3067-5.955 0.4161 2.919 1.6132 5.69 2.7672 8.535 0.342 0.791 0.684 1.583 0.865 2.481 0.192 0.706 0.224 1.519 0.224 2.214 0 1.391-0.119 2.813-0.878 3.968 0.577-0.663 1.006-1.412 1.316-2.128 0.182 0.203 0.438 0.449 0.62 0.652 1.604 1.712 3.25 3.349 4.779 5.018-0.374-0.909-0.984-1.754-1.636-2.525-0.908-1.016-2.063-1.776-2.651-3.006-0.695-1.39-0.448-3.037-0.629-4.631-0.245-2.524-1.464-4.909-2.49-7.284-1.026-2.374-2.4215-4.17-3.795-8.188-0.9898-2.895-2.4972-7.611-1.9831-9.9 0.1179-0.727 0.3534-1.486 0.6638-2.203 0.182-0.492 0.4389-0.941 0.7385-1.465 0.3424-0.599 0.642-1.123 0.9096-1.764 0.2141-0.374 0.3532-0.791 0.3748-1.176 0.0643-0.46-0.1387-0.974-0.3097-1.369-0.577-1.423-1.1541-2.846-1.7311-4.268 0.0641 0.235 0.1602 0.588 0.2243 0.823 0.5127 1.883 0.9506 3.722 0.6933 5.562-0.0216 0.385-0.1607 0.802-0.4068 1.058-0.0428 0.075-0.0856 0.15-0.1605 0.107-0.3637 0.289-1.0909 0.171-1.1442-0.257-0.5668-0.224-1.112-0.834-1.4754-1.241-2.6726-3.316-5.3023-6.707-7.8572-10.055-0.2886-0.364-0.5773-0.728-0.7803-1.241-0.203-0.514-0.2563-0.942-0.2669-1.444-0.2982-3.647-2.4962-15.905-3.458-18.422-1.5388-4.028-0.5464-4.267-2.5593-5.9434 0.0535-0.2674-6.9427-5.6276-6.8891-5.8949 0.3322-1.7966 1.584-3.4646 2.7823-4.8651 1.2483-1.1574 5.2035 1.7887 5.8127 1.8117 0.6917 0.0262 13.721 15.05 14.606 16.356 0.3527 0.599 0.2189 1.786 0.4355 2.02 0.0765 0.083 1.5882 0.445 0.3927-0.21-0.023 0.609 1.7337 6.612 1.497 10.847-0.0216 0.385-0.0859 0.845-0.2251 1.262-0.0535 0.268-0.1819 0.492-0.3852 0.674-0.0428 0.075-0.1605 0.107-0.2781 0.139-0.1177 0.032-0.1497-0.086-0.2246-0.129-2.6943-2.236-5.2814-5.006-8.8318-5.746 0.1069 0.161 0.1817 0.204 0.2886 0.364 0.0749 0.043 0.1069 0.161 0.2566 0.246 1.3898 1.391 3.261 2.461 4.3728 3.991 0.5024 0.684 0.962 1.444 1.6677 1.947 0.9302 0.631 2.3097 0.824 3.0367 1.637 0.3635 0.407 0.6414 0.963 0.7695 1.433 0.3525 1.295 0.4269 2.728 0.897 3.99 0.2351 0.631 0.6627 1.273 0.8974 1.904 0.032 0.118 0.107 0.16 0.139 0.278 0.577 1.423 3.497 6.167 3.411 7.707 0.075-1.348-2.706-5.814-2.438-7.151 1.465 1.434 2.855 2.825 4.234 4.408-0.919-1.519-1.999-2.931-3.239-4.236-0.62-0.653-1.24-1.305-1.7-2.065-0.8443-1.476-0.6511-3.551 0.825-4.395 0.161-0.107 0.321-0.214 0.513-0.203 0.985-0.331 2.097-0.192 3.134-0.095 3.027 0.439 5.893 0.986 8.908 1.618 2.214 0.471 4.385 1.017 6.288 2.205 0.15 0.086 0.257 0.246 0.171 0.396 0.599-0.353 1.241-0.085 1.797 0.332 0.598 0.342 1.111 0.835 1.667 1.252 0.482 0.374 0.963 0.749 1.444 1.123 2.256 1.787 4.469 3.649 6.479 5.692-0.78-1.241-1.796-2.418-3.058-3.338-0.887-0.706-1.86-1.262-2.63-2.001-0.844-0.781-1.368-1.775-2.213-2.556-0.406-0.332-0.887-0.707-1.251-1.113 1.123-0.053 2.203-0.031 3.326-0.084-0.802-0.161-1.604-0.322-2.406-0.483-0.994-0.171-1.946-0.417-2.898-0.664-2.352-0.749-4.544-2.301-6.993-2.708-0.193-0.011-0.385-0.021-0.578-0.032 0.107 0.16 0.257 0.246 0.364 0.406-0.118 0.033-0.268-0.053-0.385-0.021-2.161-0.044-4.374-0.515-6.427-1.093-1.829-0.45-3.807-0.985-5.005-2.365-0.363-0.407-0.684-0.888-1.047-1.295-0.364-0.406-1.0054-0.674-1.5508-0.589 0.2575-2.534 1.0086-5.312-0.4558-7.441-1.1438-1.647-0.6523-3.686-2.1639-4.048 0.5862 0.632 0.9484-0.88 0.3852-2.121-0.5632-1.242-11.812-19.078-21.406-19.814-1.5082 0.7267-2.7386 2.0097-3.3594 3.4425-0.0428 0.0749-0.0428 0.0749-0.0856 0.1497-0.951-2.3317-1.9341-4.7812-3.2381-7.0168-0.4275-0.6418-0.8123-1.3585-1.4431-1.8186-1.2832-0.5352-2.898-0.6641-4.438-0.7501z" clip-path="url(#clipPath4310)" fill="#5c5a5a" style=""/>
<path d="m96.836 106.97c-0.1607 0.802-0.3972 1.217-0.1729 2.041 0.4486 1.647 1.0572 2.066 1.7411 3.649 0.6732 1.776 0.6698 2.683 0.7546 4.619 0.0211 1.005-0.0327 1.968-0.1614 2.887 0.7808-0.149 1.8421 1.436 2.3871 2.046 0.545 0.609 1.005 1.369 1.722 1.679 0.791 0.353 1.646 0.247 2.491 0.333 0.92 0.128 1.786 0.524 2.695 0.845 1.861 0.568 3.797 0.483 5.7 0.28-0.075-0.042-0.075-0.042-0.149-0.085-2.161-0.044-4.374-0.515-6.428-1.093-1.828-0.45-3.807-0.985-5.004-2.365-0.363-0.407-0.684-0.888-1.048-1.295-0.363-0.406-1.328-1.638-1.8737-1.553 0.2575-2.534 0.8497-4.297-0.615-6.426-1.1437-1.647-0.9919-2.182-1.5794-4.108-0.2138-0.321-0.374-0.909-0.4594-1.454z" clip-path="url(#clipPath4304)" fill="#8b8b8b" style=""/>
<path d="m87.799 115.57c0.1069 0.161 0.1818 0.204 0.2887 0.364 0.0748 0.043 0.1069 0.161 0.2566 0.246l0.0748 0.043c0.5667 0.225 1.1335 0.449 1.6895 0.867 0.4491 0.257 0.9302 0.631 1.3365 0.963 1.7748 1.412 3.2928 3.273 5.3993 4.279 0.2997-0.523 0.5993-1.047 0.7064-1.582-0.0535 0.267-0.182 0.492-0.3852 0.674-0.0428 0.074-0.1605 0.106-0.2781 0.138-0.1177 0.033-0.1497-0.085-0.2246-0.128-2.6835-2.429-5.3135-5.125-8.8639-5.864z" clip-path="url(#clipPath4298)" fill="#8b8b8b" style=""/>
<path d="m100.11 126.68c-0.3425 0.599-0.5032 1.401-0.4286 2.139s0.4166 1.529 0.5656 2.31c0.032 0.118 0.107 0.16 0.139 0.278 0.577 1.423 3.181 5.603 3.095 7.143 0.076-1.348-2.389-5.25-2.122-6.587 1.465 1.434 2.886 3.017 4.265 4.6-0.92-1.519-2.03-3.123-3.27-4.428-0.62-0.653-1.24-1.305-1.7-2.065-0.8442-1.476-0.651-3.551 0.825-4.395 0.161-0.107 0.321-0.214 0.514-0.203-0.428 0.053-0.781 0.149-1.102 0.363-0.278 0.139-0.567 0.471-0.781 0.845z" clip-path="url(#clipPath4292)" fill="#8b8b8b" style=""/>
<path d="m113.61 124.66c0.117 0.663 0.78 1.241 1.272 1.423 0.909 0.321 1.861 0.567 2.887 0.856 0.834 0.279 1.711 0.482 2.503 0.836 1.956 0.92 3.571 2.439 4.907 4.097 0 0 0.075 0.043 0.032 0.118 2.256 1.787 4.469 3.648 6.479 5.692-0.78-1.241-1.796-2.418-3.057-3.338-0.888-0.706-1.861-1.263-2.631-2.001-0.844-0.781-1.368-1.776-2.213-2.557-0.406-0.331-0.887-0.706-1.25-1.112 1.123-0.053 2.203-0.032 3.326-0.085-0.802-0.16-1.604-0.321-2.407-0.482-0.994-0.171-1.946-0.418-2.898-0.664-2.341-0.942-4.501-2.376-6.95-2.783z" clip-path="url(#clipPath4286)" fill="#8b8b8b" style=""/>
<path d="m75.688 97.084c0.3847 0.2128 0.8909 0.4157 1.2199 0.6943 0.7593 0.3043 1.3971 0.6186 1.9992 1.2417 0.7338 0.7346 1.3003 1.6664 1.6795 2.5524 0.6826 1.596 0.9449 3.287 1.2072 4.978 0.1261 0.785 0.3738 1.56 0.9659 2.062-0.0101-0.122-0.0101-0.122-0.0201-0.243-0.0558 0.065-0.0558 0.065-0.1115 0.131-0.51-2.466-1.0299-5.054-1.9045-7.49-0.3033-0.709-0.551-1.4833-1.0873-2.0507-0.8855-1.0892-2.4498-1.5103-3.9483-1.8757z" clip-path="url(#clipPath4280)" fill="#8b8b8b" style=""/>
<path d="m85.474 114.68c-0.1927 0.685-0.1181 1.423-0.3108 2.107-0.1179 0.727-0.3855 1.369-0.5354 1.979-0.1823 1.187 0.0633 2.32-0.0761 3.433-0.0751 0.652-0.193 1.379-0.1932 2.074 0.0851 1.241 0.951 2.332 1.71 3.263 2.8543 3.519 5.6337 6.996 8.488 10.516 0.4704 0.567 1.1653 1.262 1.914 0.995 0.2781-0.139 0.5242-0.396 0.6526-0.62-0.0428 0.075-0.0856 0.149-0.1605 0.107-0.3637 0.288-1.0909 0.17-1.1442-0.257-0.5667-0.225-1.112-0.835-1.4754-1.242-2.6726-3.316-5.3023-6.707-7.8572-10.055-0.2886-0.364-0.5773-0.728-0.7803-1.241-0.203-0.514-0.2563-0.941-0.2668-1.444-0.2982-3.647-0.468-7.519 0.731-11.005 0.0428-0.074 0.0856-0.149 0.1284-0.224 0 0 0.0748 0.043 0.1497 0.085 0.0535-0.267-0.0105-0.502 0.043-0.77-0.428 0.749-0.8561 1.497-1.0168 2.299z" clip-path="url(#clipPath4274)" fill="#8b8b8b" style=""/>
<path d="m80.849 131.36c-0.3747 1.176-0.0222 2.47 0.2554 3.722 0.0321 0.117 0.0321 0.117 0.0641 0.235 1.6139 2.91 3.185 5.894 4.478 9.017-0.7155-3.091-1.8588-6.128-3.2374-9.102-0.3099-0.674-0.6626-1.273-0.8121-2.054-0.4378-1.839 0.4398-3.721 1.4243-5.443-0.2461 0.257-0.5029 0.706-0.5885 0.856-0.2568 0.449-0.4708 0.823-0.7277 1.272-0.4493 0.438-0.7061 0.887-0.8561 1.497z" clip-path="url(#clipPath4268)" fill="#8b8b8b" style=""/>
<path d="m96.816 131.21c0.064 0.235 0.1602 0.588 0.2243 0.824 0.0748 0.042 0.1069 0.16 0.1069 0.16 0.3099 0.674 0.6198 1.348 0.8548 1.979 0.3525 1.294 0.4336 2.277-0.0588 3.486-0.2676 0.641-1.1412 1.605-1.4836 2.204-0.9845 1.722-0.8778 3.752-1.2528 5.624-0.3642 1.679 2.0111 5.339 2.5513 7.19s0.8333 2.167 1.4085 3.441c0.9213 2.041 0.8121 2.054 1.2183 3.081 0.502 1.379 0.576 2.812 1.079 4.192 0.374 0.909 0.983 1.754 1.282 2.621 0.577 1.422 0.448 3.037 0.597 4.513 0.15 0.781 0.299 1.562 0.609 2.236 1.604 1.711 3.25 3.348 4.779 5.017-0.374-0.909-0.983-1.754-1.635-2.524-0.909-1.017-2.064-1.776-2.652-3.007-0.694-1.39-0.448-3.037-0.629-4.631-0.245-2.524-1.464-4.909-2.489-7.284-1.026-2.374-2.0749-4.012-1.8174-6.547 0.2896-2.417-3.8098-8.116-3.2956-10.405 0.1179-0.727 0.3534-1.486 0.6638-2.202 0.182-0.492 0.4388-0.941 0.7384-1.465 0.3425-0.599 0.6421-1.123 0.9097-1.765 0.214-0.374 0.3532-0.791 0.3747-1.176 0.0643-0.46-0.1387-0.973-0.3097-1.369-0.577-1.423-1.154-2.845-1.7738-4.193z" clip-path="url(#clipPath4262)" fill="#8b8b8b" style=""/>
<path d="m16.279 134.17c0.4279-0.1 0.9702-0.159 1.3623-0.338 1.3624-0.337 2.6599-1.025 3.5072-2.075 0.3273-0.529 0.6188-1.136 0.8318-1.707 0.6324-1.521 1.3006-2.964 1.9688-4.407 0.6613-1.25 1.3295-2.692 0.9133-4.019-0.1927-7e-3 -0.307-0.049-0.4996-0.056 0.5452-2.334 0.3266-4.889-0.3627-7.228-0.4453-1.598-1.2759-3.209-1.179-4.865 0.0204-0.578 0.155-1.113 0.2112-1.613 0.0697-0.885 0.0611-1.734-0.1403-2.59-0.0938-0.62-0.3804-1.248-0.5527-1.833-0.4811-1.676-0.8054-3.424-0.7801-5.2361 0.3292 0.5132 0.6584 1.0264 0.9875 1.5396 0 0 0.3428 0.1278 0.2285 0.0852-0.121 0.1501-0.0135 0.3853 0.1365 0.5063 0.4058-0.5644 0.8115-1.1288 1.1388-1.6575 1.8718-2.7507 3.7078-5.5798 5.2795-8.5725-0.9937 3.0131-2.4085 5.9342-4.0518 8.7701-0.3699 0.6429-0.7756 1.2079-0.9955 1.9709-0.6033 1.793 0.0995 3.747 0.9234 5.551l0.0358 0.078c0.0717 0.157 0.1791 0.392 0.3718 0.399 0.2285 0.085 0.5064-0.137 0.7059-0.322 0.9615-1.008 1.9589-1.938 2.9562-2.867 1.2753-1.151 2.658-2.067 3.8975-3.297 1.1184-1.0795 2.0867-2.28 2.9766-3.4448 0.4057-0.5645 0.8473-1.0505 1.0245-1.7002 0.2557-0.6855 0.3187-1.3778 0.2674-2.1127-0.0445-0.9276-0.0532-1.7767-0.1761-2.6685-0.63-5.1153 5.4511-13.66 4.0078-18.688-0.2735-1.2766 0-2.776 1.7265-1.2764 1.5 2.0004 2 1.9997 5 1.9997 0.4125-0.7572 3.5 2 5 2 1 0.5 0.9415-0.3767 1.0045-1.069 0.126-1.3846 0.1377-2.8118-0.5139-4.0308 0.5151 0.7126 0.8733 1.4969 1.1172 2.2386 0.1995-0.1859 0.4774-0.4076 0.6769-0.5935 1.7526-1.5587 3.5411-3.0391 5.2153-4.562-0.4551 0.8714-1.1388 1.6575-1.8582 2.3653-0.9974 0.9294-2.2165 1.581-2.9137 2.7525-0.8182 1.3217-0.7225 2.9841-1.0479 4.5546-0.4737 2.4913-6.8401-3.4917-8.0776-1.2202-1.2376 2.2714-2.7911 3.9327-4.5243 7.8089-1.249 2.7934-3.1791 7.3531-2.8752 9.6789 0.0513 0.7349 0.2168 1.5124 0.4607 2.2541 0.1365 0.5064 0.3514 0.977 0.6022 1.526 0.2865 0.6275 0.5373 1.1765 0.7454 1.8397 0.1791 0.3922 0.2798 0.8202 0.2662 1.2055 0.0223 0.4638-0.2266 0.957-0.4329 1.335-0.704 1.364-1.408 2.729-2.112 4.093 0.0852-0.229 0.213-0.571 0.2983-0.8 0.6817-1.828 1.2851-3.62 1.1961-5.4753 0.0136-0.3853-0.0871-0.8133-0.3088-1.0912-0.0358-0.0784-0.0716-0.1569-0.1501-0.121-0.3359-0.3206-1.0708-0.2693-1.1628 0.1519-0.5849 0.1723-1.1833 0.73-1.5822 1.1018-2.9631 3.0598-5.8903 6.1978-8.7391 9.2998-0.3205 0.336-0.641 0.672-0.8899 1.164-0.2489 0.493-0.3409 0.914-0.3971 1.414-0.6286 3.605-1.1498 7.445-0.2728 11.026 0.0358 0.078 0.0717 0.156 0.1075 0.235l0.1568-0.072c0.0291 0.271-0.0561 0.5-0.0271 0.771 0.1674 1.819 1.2624 3.594 2.3283 5.098 1.1379 1.266 1.7677 1.788 2.3766 1.82 0.6911 0.037 3.0405 0.166 4.04-1.054 0.4057-0.564 0.3805-1.759 0.6175-1.972 0.0837-0.076 1.622-0.299 0.3719 0.245 0.0324-0.609 2.3279-6.428 2.4772-10.667 0.0136-0.385-0.0086-0.849-0.1093-1.277-0.029-0.271-0.1365-0.506-0.3224-0.706-0.0358-0.078-0.15-0.121-0.2643-0.163-0.1142-0.043-0.1569 0.071-0.2353 0.107-2.8865 1.982-5.7149 4.506-9.3178 4.919 0.1211-0.15 0.1995-0.186 0.3205-0.336 0.0785-0.036 0.1211-0.15 0.2779-0.222 1.5106-1.258 3.4713-2.154 4.7176-3.576 0.5626-0.636 1.0893-1.351 1.8378-1.787 0.9838-0.544 2.3752-0.611 3.1731-1.355 0.3989-0.371 0.7262-0.9 0.8967-1.357 0.4687-1.257 0.6731-2.677 1.256-3.891 0.2915-0.607 0.7757-1.208 1.0672-1.815 0.0426-0.114 0.121-0.15 0.1636-0.264 0.704-1.364 4.0433-5.8234 4.0976-7.3648-0.0475 1.3488-3.2231 5.5438-3.078 6.8988 1.589-1.294 3.0996-2.553 4.6169-4.0042-1.0535 1.4292-2.2572 2.7372-3.6108 3.9242-0.6769 0.593-1.3537 1.187-1.8805 1.901-0.9751 1.394-0.9714 3.477 0.4218 4.452 0.1501 0.122 0.3002 0.243 0.4929 0.249 0.9498 0.42 2.0701 0.382 3.1119 0.38 3.0539-0.162 5.9577-0.446 9.0184-0.801 2.2473-0.268 4.4588-0.615 6.4622-1.624 0.1569-0.072 0.2779-0.222 0.2063-0.379 0.5644 0.406 1.2277 0.198 1.8193-0.167 0.6275-0.287 1.1833-0.73 1.7749-1.095 0.5132-0.329 1.0264-0.659 1.5396-0.988 2.4091-1.574 4.7824-3.227 6.9698-5.079-0.8899 1.165-2.0083 2.244-3.3484 3.046-0.948 0.623-1.9676 1.088-2.8013 1.753-0.9121 0.701-1.5241 1.644-2.4363 2.345-0.4347 0.294-0.9479 0.623-1.3469 0.995 1.1135 0.155 2.1912 0.231 3.3047 0.386-0.8134 0.087-1.6267 0.174-2.4401 0.261-1.006 0.081-1.9762 0.24-2.9464 0.398-2.411 0.533-4.7349 1.878-7.2107 2.061-0.1927-7e-3 -0.3853-0.013-0.578-0.02 0.121-0.15 0.2779-0.222 0.3989-0.372-0.1142-0.043-0.2711 0.029-0.3854-0.014-2.1553-0.153-4.4026 0.115-6.4999 0.505-1.8619 0.281-3.8808 0.634-5.1986 1.9-0.399 0.372-0.7621 0.822-1.161 1.194-0.399 0.371-1.0623 0.58-1.5977 0.445 0.026 2.547 0.5213 5.382-1.1306 7.369-1.2889 1.537-0.9848 3.612-2.5231 3.835 0.6413-0.576 0.8645 0.962 0.1907 2.147s-6.0002 1.687-7.5503 0.783c-1.4359-0.861-2.5445-2.25-3.0324-3.733-0.0358-0.079-0.0358-0.079-0.0716-0.157-1.1591 2.235-2.3609 4.585-3.8628 6.693-0.4842 0.6-0.9325 1.279-1.6026 1.68-1.3265 0.416-2.9464 0.398-4.4878 0.343z" clip-path="url(#clipPath4256)" fill="#5c5a5a" style=""/>
<path d="m37.003 128.18c-0.0871-0.813-0.2849-1.248 0.0134-2.048 0.5966-1.6 1.2408-1.962 2.0658-3.476 0.8319-1.707 0.911-2.611 1.1715-4.531 0.1124-1 0.1464-1.963 0.1019-2.891 0.7639 0.22 1.965-1.261 2.5634-1.819s1.1252-1.272 1.8669-1.516c0.8201-0.28 1.6625-0.096 2.5117-0.105 0.9276-0.044 1.8261-0.36 2.7605-0.597 1.9046-0.396 3.8246-0.135 5.702 0.24-0.0784 0.035-0.0784 0.035-0.1568 0.071-2.1554-0.153-4.4027 0.115-6.4999 0.504-1.862 0.282-3.8808 0.635-5.1987 1.901-0.399 0.371-0.7621 0.822-1.161 1.193-0.399 0.372-1.4722 1.511-2.0077 1.376 0.026 2.548 0.4552 4.357-1.1968 6.344-1.2888 1.537-1.1862 2.083-1.9464 3.947-0.2421 0.3-0.4552 0.871-0.5898 1.407z" clip-path="url(#clipPath4250)" fill="#8b8b8b" style=""/>
<path d="m28.786 118.79c0.121-0.15 0.1995-0.185 0.3205-0.336 0.0784-0.035 0.121-0.15 0.2779-0.221l0.0784-0.036c0.5849-0.172 1.1697-0.345 1.7613-0.71 0.4706-0.215 0.9838-0.544 1.4186-0.837 1.8959-1.245 3.5769-2.961 5.7661-3.771 0.2508 0.549 0.5015 1.098 0.5596 1.64-0.029-0.271-0.1365-0.506-0.3224-0.706-0.0358-0.078-0.1501-0.121-0.2643-0.163-0.1143-0.043-0.1569 0.071-0.2353 0.107-2.8933 2.175-5.7575 4.62-9.3604 5.033z" clip-path="url(#clipPath4244)" fill="#8b8b8b" style=""/>
<path d="m42.054 108.84c-0.2865-0.628-0.3736-1.441-0.2322-2.169s0.5539-1.485 0.7738-2.249c0.0426-0.114 0.121-0.15 0.1636-0.264 0.704-1.365 3.6774-5.2907 3.7318-6.8322-0.0476 1.3488-2.8573 5.0102-2.7122 6.3662 1.589-1.295 3.1477-2.742 4.665-4.1932-1.0536 1.4292-2.3053 2.9262-3.659 4.1132-0.6768 0.593-1.3537 1.187-1.8804 1.901-0.9751 1.393-0.9714 3.477 0.4218 4.452 0.1501 0.121 0.3002 0.242 0.4929 0.249-0.4212-0.092-0.764-0.22-1.0641-0.462-0.2643-0.164-0.5219-0.52-0.701-0.912z" clip-path="url(#clipPath4238)" fill="#8b8b8b" style=""/>
<path d="m55.316 112.09c0.1773-0.65 0.8899-1.165 1.3963-1.302 0.9344-0.237 1.9046-0.396 2.9533-0.59 0.8559-0.202 1.7477-0.324 2.5678-0.604 2.0324-0.739 3.7783-2.105 5.2598-3.635 0 0 0.0784-0.035 0.0426-0.114 2.4091-1.574 4.7824-3.227 6.9698-5.079-0.8899 1.165-2.0083 2.244-3.3484 3.046-0.948 0.623-1.9676 1.088-2.8013 1.753-0.9121 0.701-1.5241 1.644-2.4363 2.345-0.4347 0.294-0.9479 0.623-1.3469 0.995 1.1135 0.155 2.1912 0.231 3.3047 0.386-0.8134 0.087-1.6267 0.174-2.4401 0.261-1.006 0.081-1.9762 0.239-2.9464 0.398-2.4177 0.725-4.699 1.957-7.1749 2.14z" clip-path="url(#clipPath4232)" fill="#8b8b8b" style=""/>
<path d="m16.28 134.17c0.428-0.101 0.9702-0.159 1.3624-0.338 0.8133-0.087 1.5124-0.217 2.2609-0.654 0.9053-0.508 1.7032-1.251 2.3084-2.002 1.0894-1.35 1.8002-2.907 2.511-4.464 0.3341-0.721 0.7824-1.4 1.4883-1.723-0.0426 0.115-0.0426 0.115-0.0852 0.229-0.0358-0.079-0.0358-0.079-0.0716-0.157-1.1592 2.236-2.3609 4.586-3.8628 6.693-0.4842 0.601-0.9325 1.279-1.6026 1.68-1.1474 0.809-2.7673 0.79-4.3088 0.736z" clip-path="url(#clipPath4226)" fill="#8b8b8b" style=""/>
<path d="m25.894 119.74c-0.1297-0.699 0.0117-1.427-0.118-2.126-0.0512-0.735-0.2594-1.398-0.3532-2.019-0.0736-1.199 0.2741-2.305 0.2364-3.425-0.0154-0.657-0.0667-1.392-0.0037-2.084 0.1976-1.228 1.1591-2.236 1.9996-3.094 3.1625-3.245 6.2466-6.455 9.4092-9.6999 0.5199-0.5219 1.2752-1.1512 1.9965-0.8171 0.2644 0.1637 0.4861 0.4416 0.5935 0.6769-0.0358-0.0785-0.0716-0.1569-0.15-0.1211-0.336-0.3205-1.0709-0.2692-1.1629 0.152-0.5848 0.1723-1.1833 0.7299-1.5822 1.1017-2.9631 3.0595-5.8903 6.1975-8.7391 9.2995-0.3205 0.336-0.641 0.672-0.8899 1.165s-0.3409 0.914-0.397 1.413c-0.6287 3.605-1.1498 7.445-0.2728 11.026 0.0358 0.078 0.0716 0.157 0.1074 0.235 0 0 0.0784-0.036 0.1569-0.071 0.029 0.271-0.0562 0.499-0.0272 0.77-0.3582-0.784-0.7164-1.568-0.8035-2.382z" clip-path="url(#clipPath4220)" fill="#8b8b8b" style=""/>
<path d="m23.301 102.44c-0.2662-1.206 0.2025-2.4623 0.5928-3.6832 0.0426-0.1143 0.0426-0.1143 0.0852-0.2285 1.8718-2.7507 3.7078-5.5798 5.2794-8.5726-0.9936 3.0131-2.4084 5.9343-4.0517 8.7702-0.3699 0.6429-0.7756 1.2073-0.9955 1.9711-0.6033 1.792 0.0995 3.746 0.9234 5.55-0.2217-0.278-0.4367-0.748-0.5083-0.905-0.2149-0.471-0.394-0.863-0.6089-1.333-0.4076-0.478-0.6226-0.948-0.7164-1.569z" clip-path="url(#clipPath4214)" fill="#8b8b8b" style=""/>
<path d="m39.188 104.04c0.0852-0.228 0.213-0.571 0.2982-0.799 0.0785-0.036 0.1211-0.151 0.1211-0.151 0.3699-0.642 0.7398-1.285 1.0313-1.892 0.4687-1.2572 0.6388-2.2291 0.2584-3.4772-0.2082-0.6632-0.9905-1.7027-1.277-2.3301-0.8239-1.8039-0.5329-3.8167-0.7361-5.7145-0.21-1.7051 2.4883-5.1344 3.1945-6.9284 0.7063-1.794 1.027-2.0822 1.7156-3.2985 1.1036-1.9492 0.9955-1.9713 1.4933-2.957 0.6255-1.3284 0.7126-1.9891 2.2126-2.4891 2 0 4.493 2.5003 6.5 2.5003 1.1428-0.8663 0.5121-1.4938 0.7949-2.95 0.2199-0.764 0.4397-1.5279 0.8096-2.1708 1.7527-1.5588 3.5411-3.0391 5.2153-4.5621-0.4551 0.8714-1.1387 1.6576-1.8582 2.3653-0.9974 0.9295-2.2164 1.5811-2.9137 2.7526-0.8182 1.3216-0.7225 2.9841-1.0479 4.5546-0.4736 2.4913-7.4351-3.3159-8.6727-1.0445-1.2375 2.2714-2.4308 3.8077-2.4048 6.3552 0.0686 2.4332-4.5321 7.7359-4.2282 10.062 0.0512 0.7349 0.2168 1.5124 0.4607 2.2541 0.1365 0.5064 0.3514 0.977 0.6022 1.526 0.2865 0.6275 0.5373 1.1765 0.7454 1.8397 0.1791 0.3922 0.2798 0.8202 0.2662 1.2055 0.0222 0.4638-0.2266 0.9567-0.4329 1.3352-0.704 1.364-1.408 2.728-2.1478 4.014z" clip-path="url(#clipPath4208)" fill="#8b8b8b" style=""/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 51 KiB

854
application/src/main/data/json/system/scada_symbols/bottom-tee-pipe.svg

@ -0,0 +1,854 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" fill="none" version="1.1" viewBox="0 0 200 200">
<tb:metadata xmlns=""><![CDATA[{
"title": "Bottom tee pipe",
"description": "Bottom tee pipe with configurable left/right/bottom fluid and leak visualizations.",
"searchTags": [
"pipe",
"tee"
],
"widgetSizeX": 1,
"widgetSizeY": 1,
"stateRenderFunction": "var leftLiquidPattern = prepareLiquidPattern('left-liquid', 'left-fluid');\nvar rightLiquidPattern = prepareLiquidPattern('right-liquid', 'right-fluid');\nvar bottomLiquidPattern = prepareLiquidPattern('bottom-liquid', 'bottom-fluid');\n\nvar genericLiquidPattern = ctx.svg.defs().findOne('pattern#liquid');\nif (genericLiquidPattern) {\n genericLiquidPattern.id(ctx.api.generateElementId());\n leftLiquidPattern.attr({'xlink:href': '#'+genericLiquidPattern.id()});\n rightLiquidPattern.attr({'xlink:href': '#'+genericLiquidPattern.id()});\n bottomLiquidPattern.attr({'xlink:href': '#'+genericLiquidPattern.id()});\n}\n\nupdateLiquidPatternAnimation(leftLiquidPattern, 'left');\nupdateLiquidPatternAnimation(rightLiquidPattern, 'right');\nupdateLiquidPatternAnimation(bottomLiquidPattern, 'bottom');\n\n\nfunction prepareLiquidPattern(patternId, fluidElementTag) {\n var liquidPattern = ctx.svg.defs().findOne('pattern#'+patternId);\n var fluidElements = ctx.tags[fluidElementTag];\n\n if (liquidPattern) {\n liquidPattern.id(ctx.api.generateElementId());\n for (var i=0;i<fluidElements.length;i++) {\n fluidElements[i].fill(liquidPattern);\n }\n } else {\n liquidPattern = fluidElements[0].reference('fill');\n }\n return liquidPattern;\n}\n\nfunction updateLiquidPatternAnimation(liquidPattern, prefix) {\n if (liquidPattern) {\n var fluid = ctx.values[prefix + 'Fluid'] && !ctx.values.leak;\n var flow = ctx.values[prefix + 'Flow'];\n var flowDirection = ctx.values[prefix + 'FlowDirection'];\n var flowAnimationSpeed = ctx.values[prefix + 'FlowAnimationSpeed'];\n\n var elementFluid = liquidPattern.remember('fluid');\n var elementFlow = null;\n var elementFlowDirection = null;\n \n if (fluid !== elementFluid) {\n liquidPattern.remember('fluid', fluid);\n elementFlow = null;\n elementFlowDirection = null;\n } else {\n elementFlow = liquidPattern.remember('flow');\n elementFlowDirection = liquidPattern.remember('flowDirection');\n }\n \n if (fluid) {\n if (flow !== elementFlow) {\n liquidPattern.remember('flow', flow);\n if (flow) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n } else if (flow && elementFlowDirection !== flowDirection) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n }\n if (flow && liquidPattern) {\n liquidPattern.timeline().speed(flowAnimationSpeed);\n }\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n }\n}\n\nfunction animateFlow(liquidPattern, forwardElseReverse) {\n ctx.api.resetAnimation(liquidPattern);\n var deltaX = forwardElseReverse ? 172 : -172;\n liquidPattern.animate(1000).ease('-').relative(deltaX, 0).loop();\n}\n\n",
"tags": [
{
"tag": "bottom-fluid",
"stateRenderFunction": "var fluid = ctx.values.bottomFluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "bottom-fluid-background",
"stateRenderFunction": "var fluid = ctx.values.bottomFluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.bottomFluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "left-fluid",
"stateRenderFunction": "var fluid = ctx.values.leftFluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "left-fluid-background",
"stateRenderFunction": "var fluid = ctx.values.leftFluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.leftFluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "overlay",
"stateRenderFunction": "var fluid = (ctx.values.leftFluid || ctx.values.rightFluid ||\n ctx.values.bottomFluid) && !ctx.values.leak;\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
},
{
"tag": "right-fluid",
"stateRenderFunction": "var fluid = ctx.values.rightFluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "right-fluid-background",
"stateRenderFunction": "var fluid = ctx.values.rightFluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.rightFluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
}
],
"behavior": [
{
"id": "leftFluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": "{i18n:scada.symbol.left-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leftFlow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": "{i18n:scada.symbol.left-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leftFlowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": "{i18n:scada.symbol.left-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leftFlowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": "{i18n:scada.symbol.left-pipe}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "rightFluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": "{i18n:scada.symbol.right-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "rightFlow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": "{i18n:scada.symbol.right-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "rightFlowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": "{i18n:scada.symbol.right-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "rightFlowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": "{i18n:scada.symbol.right-pipe}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "bottomFluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": "{i18n:scada.symbol.bottom-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "bottomFlow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": "{i18n:scada.symbol.bottom-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "bottomFlowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": "{i18n:scada.symbol.bottom-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "bottomFlowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": "{i18n:scada.symbol.bottom-pipe}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "leftFluidColor",
"name": "{i18n:scada.symbol.left-fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "rightFluidColor",
"name": "{i18n:scada.symbol.right-fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "bottomFluidColor",
"name": "{i18n:scada.symbol.bottom-fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata><g clip-path="url(#clip0_1245_66617)">
<path d="m14 64h172v72h-172z" fill="#fff" tb:tag="pipe-background"/>
<path d="m14 64h172v72h-172z" fill="url(#paint0_linear_1245_66617)" style="fill:url(#paint0_linear_1245_66617)"/>
<path d="m15.5 65.5h169v69h-169z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m136 186v-51l-36-35-36 35v51z" fill="#fff" tb:tag="pipe-background"/>
<path d="m136 186v-51l-36-35-36 35v51z" fill="url(#paint1_linear_1245_66617)" style="fill:url(#paint1_linear_1245_66617)"/>
<path d="m134.5 184.5v-48.866l-34.5-33.542-34.5 33.542v48.866z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect x="1.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<rect x="187.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<rect transform="rotate(-90,51.5,198.5)" x="51.5" y="198.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
</g><defs>
<pattern id="liquid" width="172" height="72" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<linearGradient id="paint28_linear_1182_32781-5" x1="19.316" x2="21" y1="8.2632" y2="23" gradientTransform="translate(-36,6)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint29_linear_1182_32781-1" x1="148.32" x2="150" y1="8.2632" y2="23" gradientTransform="translate(-165,135)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint30_linear_1182_32781-7" x1="111.32" x2="113" y1="9.2632" y2="24" gradientTransform="translate(-129,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint31_linear_1182_32781-4" x1="32.316" x2="34" y1="51.263" y2="66" gradientTransform="translate(-92,-24)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint32_linear_1182_32781-3" x1="153.32" x2="155" y1="51.263" y2="66" gradientTransform="translate(-213,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint33_linear_1182_32781-1" x1="31.947" x2="33" y1="21.789" y2="31" gradientTransform="translate(-59,7)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint34_linear_1182_32781-4" x1="160.95" x2="162" y1="21.789" y2="31" gradientTransform="translate(-188,136)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint35_linear_1182_32781-6" x1="3.9474" x2="5" y1="32.79" y2="42" gradientTransform="translate(-42,-32)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint36_linear_1182_32781-9" x1="93.158" x2="94" y1="4.6316" y2="12" gradientTransform="translate(-102,86)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint37_linear_1182_32781-4" x1="71.158" x2="72" y1="56.632" y2="64" gradientTransform="translate(-132,12)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint38_linear_1182_32781-2" x1="110.95" x2="112" y1="32.79" y2="42" gradientTransform="translate(-149,75)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint39_linear_1182_32781-2" x1="57.947" x2="59" y1="34.79" y2="44" gradientTransform="translate(-98,20)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint40_linear_1182_32781-6" x1="113.95" x2="115" y1="57.79" y2="67" gradientTransform="translate(-177,53)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint41_linear_1182_32781-4" x1="137.95" x2="139" y1="37.79" y2="47" gradientTransform="translate(-181,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint42_linear_1182_32781-1" x1="74.947" x2="76" y1="16.789" y2="26" gradientTransform="translate(-97,55)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint43_linear_1182_32781-2" x1="125.97" x2="126.5" y1="48.395" y2="53" gradientTransform="translate(-177,76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint44_linear_1182_32781-8" x1="168.97" x2="169.5" y1="44.395" y2="49" gradientTransform="translate(-216,123)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint45_linear_1182_32781-8" x1="56.974" x2="57.5" y1="7.3947" y2="12" gradientTransform="translate(-67,48)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint46_linear_1182_32781-9" x1="95.974" x2="96.5" y1="33.395" y2="38" gradientTransform="translate(-132,61)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint47_linear_1182_32781-2" x1="90.974" x2="91.5" y1="21.395" y2="26" gradientTransform="translate(-115,68)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint48_linear_1182_32781-88" x1="21.974" x2="22.5" y1="38.395" y2="43" gradientTransform="translate(-63,-18)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint49_linear_1182_32781-8" x1="123.97" x2="124.5" y1="21.395" y2="26" gradientTransform="translate(-148,101)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint50_linear_1182_32781-6" x1="85.974" x2="86.5" y1="45.395" y2="50" gradientTransform="translate(-134,39)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint51_linear_1182_32781-8" x1="50.974" x2="51.5" y1="19.395" y2="24" gradientTransform="translate(-73,30)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint52_linear_1182_32781-3" x1="47.974" x2="48.5" y1="49.395" y2="54" gradientTransform="translate(-100,-3)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint53_linear_1182_32781-83" x1="13.158" x2="14" y1="60.632" y2="68" gradientTransform="translate(-78,-50)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint54_linear_1182_32781-33" x1="134.16" x2="135" y1="60.632" y2="68" gradientTransform="translate(-199,71)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint55_linear_1182_32781-8" x1="93.5" x2="95.5" y1="50.5" y2="68" gradientTransform="translate(-154,37)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint84_linear_1182_32781-8" x1="248" x2="248" y1="1.8513e-7" y2="72" gradientTransform="scale(.33333 1)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" offset=".10895"/>
<stop stop-color="#fff" stop-opacity="0" offset=".11331"/>
<stop stop-color="#fff" stop-opacity="0" offset=".88736"/>
<stop stop-color="#727171" offset=".89138"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<pattern id="left-liquid" patternTransform="translate(14,-8)" patternUnits="userSpaceOnUse" xlink:href="#liquid"/>
<pattern id="right-liquid" patternTransform="translate(14,-8)" patternUnits="userSpaceOnUse" xlink:href="#liquid"/>
<pattern id="bottom-liquid" patternTransform="translate(14,8)" patternUnits="userSpaceOnUse" xlink:href="#liquid"/>
<clipPath id="clip0_1245_66617">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<linearGradient id="paint0_linear_1245_66617" x1="58.72" x2="58.53" y1="64" y2="136" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1245_66617" x1="136" x2="63.996" y1="163.64" y2="164.02" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint0_linear_1281_41706" x1="57.778" x2="57.778" y1="-8.4191e-7" y2="72" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1281_41706" x1="-8.4192e-7" x2="72" y1="100.76" y2="100.76" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<clipPath id="clipPath11075">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath11069">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath11063">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath11057">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath11051">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath11045">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath11039">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath11033">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath11027">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath11021">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath11015">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath11009">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath11003">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath10997">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath10991">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath10985">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath10979">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath10973">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
</defs><rect x="14" y="64" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="left-fluid-background"/><rect transform="rotate(90)" x="136" y="-136" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="bottom-fluid-background"/><rect x="136" y="64" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="right-fluid-background"/><rect x="14" y="64" width="50" height="72" fill="url(#left-liquid)" stroke-width="0" style="display: none;" tb:tag="left-fluid"/><rect x="136" y="64" width="50" height="72" fill="url(#right-liquid)" stroke-width="0" style="display: none;" tb:tag="right-fluid"/><rect transform="rotate(90)" x="136" y="-136" width="50" height="72" fill="url(#bottom-liquid)" stroke-width="0" style="display: none;" tb:tag="bottom-fluid"/><g transform="translate(64 64)" style="display: none;" tb:tag="overlay">
<path d="m0 0h72v72h-72z" fill="url(#paint0_linear_1281_41706)" style="fill: url(&quot;#paint0_linear_1281_41706&quot;);"/>
<path d="m1.5 1.5h69v69h-69z" stroke="#000" stroke-opacity=".12" stroke-width="3" style=""/>
<path d="m0 72 36-36 36 36z" fill="url(#paint1_linear_1281_41706)" style="fill: url(&quot;#paint1_linear_1281_41706&quot;);"/>
<path d="m68.379 70.5h-64.757l32.379-32.379z" stroke="#000" stroke-opacity=".12" stroke-width="3" style=""/>
</g><g transform="translate(-4e-4 -5.8337e-5)" style="display: none;" tb:tag="leak">
<path d="m136 83.175c-0.386-0.2112-0.828-0.5305-1.239-0.6594-1.239-0.6594-2.664-1.0154-3.996-0.8004-0.597 0.1744-1.219 0.4311-1.76 0.7135-1.487 0.7087-2.948 1.3351-4.409 1.9614-1.328 0.4876-2.789 1.114-3.366 2.3789 0.138 0.1338 0.195 0.2419 0.334 0.3757-1.966 1.3718-2.064-1.1443-9.564 0-8 4.3557-19.138 11.096-20.317 12.263-0.4015 0.4163-0.8595 0.725-1.2353 1.059-0.6434 0.611-1.2046 1.249-1.627 2.02-0.345 0.524-0.5513 1.182-0.814 1.733-0.7626 1.568-1.6896 3.084-2.92 4.416l0.2946-1.806-0.113-0.216c0.1904-0.03 0.2677-0.277 0.237-0.468-0.6791 0.149-1.3582 0.298-1.955 0.472-3.2308 0.795-6.4874 1.672-9.6569 2.847 2.7531-1.577 5.758-2.804 8.8759-3.815 0.7048-0.23 1.3839-0.379 2.0581-0.8 1.6467-0.93 2.43-2.853 3.0231-4.746l0.0257-0.082c0.0516-0.1644 0.129-0.4112-0.0098-0.5451-0.113-0.2161-0.4679-0.2369-0.7405-0.232-1.3889 0.1069-2.752 0.1315-4.1151 0.1562-1.7179 0.0038-3.3586-0.2393-5.1024-0.1532-1.5534 0.0553-3.0761 0.301-4.5165 0.5725-0.6791 0.1486-1.3324 0.2146-1.8985 0.5796-0.6484 0.339-1.158 0.812-1.6111 1.393-0.5869 0.719-1.1481 1.357-1.6528 2.102-2.9506 4.226-13.185 6.516-15.472 11.221 0.6704-2.14 1.4488-4.335 2.1192-6.475-2.424 1.681-5.2693 2.686-8.1403 3.775-0.8129 0.287-1.6258 0.574-2.408 1.052-0.6484 0.339-1.2661 0.868-1.7757 1.341-1.0192 0.946-1.9819 2-2.3121 3.342 0.0933-0.875 0.3511-1.697 0.6654-2.412-0.2726 5e-3 -0.6275-0.016-0.9001-0.011-2.3455-0.012-4.6652-0.107-6.9285-0.093 0.921-0.344 1.955-0.472 2.9632-0.517 1.3631-0.025 2.7053 0.305 4.007-0.1 1.492-0.436 2.5321-1.736 3.8239-2.687 2.0175-1.536 4.5951-2.265 7.0338-3.127 2.4388-0.862 4.7047-1.059 8.5848-2.784 2.7962-1.243 7.2796-3.344 8.6082-5.277 0.4531-0.581 0.8497-1.2696 1.164-1.9843 0.237-0.4679 0.3917-0.9615 0.5722-1.5375 0.2062-0.6582 0.3867-1.2341 0.6753-1.8666 0.1289-0.4114 0.3401-0.797 0.6078-1.0745 0.2935-0.3599 0.808-0.5601 1.2144-0.7038 1.4356-0.5441 2.8711-1.0881 4.3066-1.6322-0.2161 0.113-0.5403 0.2824-0.7565 0.3954-1.7289 0.904-3.3756 1.8336-4.5495 3.2729-0.2677 0.2776-0.4789 0.6632-0.4998 1.0181-0.0258 0.0823-0.0515 0.1645 0.0307 0.1903 0.0357 0.463 0.6165 0.9161 0.9665 0.6643 0.5502 0.2628 1.368 0.248 1.9133 0.2382 4.2489-0.295 8.5235-0.6723 12.716-1.0753 0.4629-0.0356 0.9259-0.0713 1.4404-0.2715s0.8645-0.4519 1.2402-0.7859c2.8771-2.261 13.36-8.9832 15.86-9.9896 4-1.6103 3.5-2.5 6.098-2.1639 0.16-0.221 8.847 1.2649 9.007 1.0439 1.091-1.4651 1.463-3.5171 1.676-5.3481 0-1.7023-4.85-2.5996-5.281-3.0307-0.489-0.4894-20.365 0.1707-21.924 0.4097-0.6791 0.1486-1.4593 1.0544-1.7779 1.0544-0.1125 0-1.4059-0.8623-0.1125-0.4311-0.4311 0.4311-6.028 3.2247-8.9726 6.2777-0.2677 0.2776-0.5611 0.6374-0.7723 1.023-0.1597 0.2211-0.237 0.4679-0.2321 0.7405-0.0258 0.0823 0.0307 0.1904 0.0872 0.2984 0.0565 0.1081 0.1646 0.0516 0.2468 0.0774 3.4716 0.4554 7.2625 0.4686 10.218 2.5696-0.1904 0.0307-0.2727 0.0049-0.463 0.0356-0.0823-0.0257-0.1903 0.0308-0.3549-0.0208-1.9648-0.0736-4.0218-0.7182-5.8994-0.4933-0.8436 0.097-1.713 0.2764-2.5616 0.1008-1.0954-0.2529-2.1749-1.1333-3.2653-1.1136-0.5453 0.0099-1.1421 0.1843-1.5743 0.4102-1.1887 0.6215-2.2902 1.5413-3.5354 2.0547-0.6225 0.2567-1.3839 0.3795-2.0065 0.6362-0.108 0.0565-0.1903 0.0307-0.2984 0.0872-1.4355 0.5441-6.8997 1.6285-7.9705 2.7387 0.937-0.9714 6.1028-1.9686 6.9009-3.0739-2.0471-0.0993-4.0119-0.1729-6.1106-0.1077 1.7389-0.3587 3.5084-0.527 5.3087-0.505 0.9001 0.011 1.8002 0.022 2.6697-0.1573 1.6565-0.3845 3.0465-1.9368 2.6621-3.5933-0.0307-0.1904-0.0614-0.3807-0.2002-0.5146-0.4262-0.9467-1.2846-1.6675-2.0607-2.3625-2.38-1.9205-4.7293-3.6506-7.2432-5.4323-1.8507-1.3029-3.7271-2.5234-5.8921-3.1115-0.1646-0.0515-0.3549-0.0208-0.4065 0.1437-0.1486-0.6791-0.7811-0.9676-1.4651-1.0916-0.6582-0.2063-1.368-0.248-2.052-0.372-0.6017-0.0982-1.2035-0.1964-1.8052-0.2946-2.8441-0.4394-5.714-0.7966-8.5789-0.8812 1.4404-0.2715 2.9939-0.3268 4.5264-0.0273 1.1212 0.1707 2.1908 0.5058 3.2555 0.5684 1.147 0.0884 2.2325-0.204 3.3795-0.1156 0.5194 0.0724 1.1212 0.1706 1.6664 0.1608-0.7246-0.8596-1.4749-1.6369-2.1995-2.4965 0.6632 0.4789 1.3263 0.9578 1.9895 1.4367 0.8019 0.6127 1.6296 1.1432 2.4573 1.6736 2.1491 1.2156 4.7771 1.7681 6.7407 3.287 0.1388 0.1339 0.2776 0.2677 0.4163 0.4016-0.1903 0.0307-0.3549-0.0209-0.5452 0.0098 0.0565 0.1081 0.2211 0.1597 0.2776 0.2677 1.5007 1.5546 3.3514 2.8574 5.1713 3.9699 1.5732 1.0351 3.3109 2.1218 5.1369 2.0615 0.5453-0.0099 1.1163-0.102 1.6615-0.1118 0.5452-0.0099 1.1777 0.2787 1.4859 0.7367 1.6835-1.9121 3.2101-4.3518 5.7668-4.7253 1.9856-0.2813 3.1466-2.028 4.44-1.1657-0.8622 0 0-1.2934 1.2933-1.7245 1.2934-0.4311 22.021-4.3085 29.084 2.2264 0.492 1.6001 0.388 3.3745-0.241 4.804-0.026 0.0823-0.026 0.0823-0.051 0.1645 2.356-0.8879 4.821-1.8324 7.347-2.3962 0.761-0.1229 1.548-0.328 2.314-0.1782 1.265 0.5771 2.458 1.6736 3.568 2.7444z" clip-path="url(#clipPath11075)" fill="#5c5a5a" style=""/>
<path d="m93.634 76.02c-0.4789 0.6631-0.6226 1.1189-1.379 1.5144-1.5129 0.7909-2.2343 0.6298-3.8601 1.2046-1.7597 0.7136-2.4228 1.3331-3.9001 2.587-0.7515 0.668-1.4207 1.3619-2.0076 2.0816-0.4213-0.6742-2.305-0.375-3.1229-0.3602-0.8178 0.0148-1.6872 0.1941-2.402-0.1202-0.797-0.3401-1.3005-1.0401-1.9379-1.6012-0.7196-0.587-1.5989-0.9529-2.4524-1.4011-1.6812-0.9786-2.9351-2.4558-4.0809-3.9895 0.0823 0.0258 0.0823 0.0258 0.1646 0.0515 1.5007 1.5546 3.3514 2.8574 5.1714 3.9699 1.5731 1.0351 3.3108 2.1218 5.1368 2.0615 0.5453-0.0098 1.1163-0.102 1.6615-0.1118 0.5453-0.0099 2.1048-0.1396 2.4131 0.3185 1.6835-1.9122 2.5737-3.5448 5.1304-3.9182 1.9857-0.2814 2.2748-0.7565 4.0861-1.6347 0.3806-0.0614 0.9209-0.3438 1.379-0.6521z" clip-path="url(#clipPath11069)" fill="#8b8b8b" style=""/>
<path d="m93.472 88.493c-0.1903 0.0307-0.2726 0.0049-0.4629 0.0356-0.0823-0.0258-0.1904 0.0307-0.3549-0.0208l-0.0823-0.0258c-0.5502-0.2628-1.1003-0.5255-1.7843-0.6495-0.4937-0.1547-1.0954-0.2529-1.6149-0.3254-2.2423-0.3412-4.6394-0.1888-6.8094-1.0495 0.1805-0.576 0.361-1.1519 0.6803-1.594-0.1597 0.221-0.237 0.4679-0.2321 0.7405-0.0258 0.0823 0.0307 0.1903 0.0872 0.2984s0.1646 0.0516 0.2469 0.0773c3.6054 0.3167 7.3705 0.4122 10.326 2.5132z" clip-path="url(#clipPath11063)" fill="#8b8b8b" style=""/>
<path d="m76.953 87.024c-0.2063 0.6582-0.6852 1.3214-1.277 1.7684-0.5919 0.447-1.4048 0.7344-2.079 1.1557-0.108 0.0565-0.1903 0.0307-0.2984 0.0872-1.4355 0.5441-6.2713 1.4766-7.3421 2.5868 0.9369-0.9714 5.4744-1.8167 6.2725-2.922-2.0471-0.0993-4.1738-0.0647-6.2725 5e-4 1.7389-0.3587 3.6703-0.6352 5.4706-0.6132 0.9001 0.011 1.8002 0.022 2.6697-0.1574 1.6565-0.3844 3.0465-1.9367 2.6621-3.5933-0.0307-0.1903-0.0614-0.3806-0.2002-0.5145 0.2517 0.35 0.4212 0.6742 0.4826 1.0548 0.0873 0.2984 0.0406 0.7356-0.0883 1.147z" clip-path="url(#clipPath11057)" fill="#8b8b8b" style=""/>
<path d="m69.261 75.743c-0.5661 0.3648-1.4405 0.2715-1.9083 0.0345-0.8535-0.4482-1.6812-0.9786-2.5912-1.5348-0.7713-0.4224-1.5167-0.9271-2.3137-1.2672-2.0054-0.8092-4.217-0.9601-6.3415-0.8126 0 0-0.0822-0.0258-0.108 0.0565-2.8441-0.4395-5.714-0.7967-8.579-0.8812 1.4405-0.2715 2.9939-0.3268 4.5265-0.0273 1.1212 0.1706 2.1908 0.5058 3.2555 0.5684 1.1469 0.0883 2.2325-0.204 3.3795-0.1156 0.5194 0.0724 1.1211 0.1706 1.6664 0.1607-0.7246-0.8595-1.475-1.6368-2.1995-2.4964 0.6631 0.4789 1.3263 0.9578 1.9894 1.4367 0.8019 0.6127 1.6297 1.1431 2.4574 1.6736 2.2829 1.0768 4.8028 1.6858 6.7665 3.2047z" clip-path="url(#clipPath11051)" fill="#8b8b8b" style=""/>
<path d="m115.26 84.806c-0.418-0.1373-0.911-0.3706-1.339-0.4224-0.739-0.3499-1.403-0.6039-2.27-0.6218-1.037-0.0386-2.106 0.1796-3.014 0.5041-1.634 0.5841-3.052 1.5416-4.471 2.4992-0.661 0.4411-1.398 0.7864-2.168 0.6932 0.096-0.0752 0.096-0.0752 0.192-0.1505-0.01 0.0856-0.01 0.0856-0.021 0.1712 2.155-1.3027 4.406-2.6808 6.787-3.6957 0.726-0.2596 1.463-0.6048 2.244-0.5972 1.4-0.0912 2.773 0.7695 4.06 1.6199z" clip-path="url(#clipPath11045)" fill="#8b8b8b" style=""/>
<path d="m95.702 89.595c-0.3709 0.6066-0.9627 1.0536-1.3336 1.6603-0.4531 0.5809-0.7416 1.2133-1.0867 1.7377-0.7465 0.9407-1.7449 1.5314-2.4657 2.3898-0.4273 0.4986-0.8804 1.0795-1.39 1.5523-0.9676 0.7811-2.3565 0.888-3.555 0.9642-4.5215 0.2999-8.9608 0.6256-13.482 0.9255-0.7356 0.0405-1.718 0.0038-2.0311-0.7269-0.0873-0.2984-0.0664-0.6533 0.011-0.9001-0.0258 0.0823-0.0516 0.1645 0.0307 0.1903 0.0356 0.463 0.6165 0.9161 0.9664 0.6643 0.5502 0.2628 1.3681 0.248 1.9133 0.2382 4.2489-0.295 8.5236-0.6723 12.716-1.0753 0.4629-0.0356 0.9259-0.0713 1.4404-0.2715s0.8645-0.4519 1.2403-0.786c2.8771-2.2609 5.8315-4.7687 7.5726-8.0181 0.0258-0.0822 0.0516-0.1645 0.0774-0.2468l-0.1646-0.0516c0.1597-0.221 0.3758-0.334 0.5354-0.5551-0.2578 0.8228-0.5157 1.6456-0.9945 2.3088z" clip-path="url(#clipPath11039)" fill="#8b8b8b" style=""/>
<path d="m86.618 104.33c-0.6078 1.074-1.7965 1.696-2.9029 2.343-0.108 0.056-0.108 0.056-0.2161 0.113-3.2308 0.795-6.4875 1.672-9.6569 2.847 2.7531-1.577 5.758-2.804 8.8758-3.815 0.7049-0.231 1.384-0.379 2.0581-0.801 1.6467-0.929 2.4301-2.852 3.0231-4.745-0.0208 0.355-0.1755 0.849-0.2271 1.013-0.1547 0.494-0.2836 0.905-0.4383 1.399-0.0159 0.628-0.1706 1.121-0.5157 1.646z" clip-path="url(#clipPath11033)" fill="#8b8b8b" style=""/>
<path d="m75.872 92.514c-0.2161 0.113-0.5403 0.2825-0.7564 0.3955-0.0823-0.0258-0.1904 0.0307-0.1904 0.0307-0.7048 0.2309-1.4097 0.4618-2.0323 0.7185-1.1887 0.6214-1.9648 1.2306-2.5161 2.4132-0.2886 0.6324-0.4015 1.9285-0.6078 2.5867-0.593 1.8919-2.1548 3.1949-3.2722 4.7419-0.9836 1.409-5.2828 2.156-7.0072 3.018-1.7245 0.862-2.1556 0.862-3.4809 1.307-2.1237 0.712-2.0581 0.801-3.0871 1.201-1.3533 0.57-2.4548 1.49-3.808 2.06-0.921 0.343-1.955 0.471-2.7937 0.841-1.4355 0.544-2.532 1.736-3.7158 2.631-0.6741 0.421-1.3483 0.842-2.0531 1.073-2.3455-0.012-4.6653-0.107-6.9285-0.093 0.921-0.344 1.955-0.472 2.9632-0.517 1.3631-0.025 2.7053 0.305 4.007-0.1 1.492-0.436 2.532-1.736 3.8238-2.687 2.0176-1.536 4.5951-2.265 7.0339-3.127s4.3532-1.207 6.0367-3.119c1.5754-1.856 8.5418-2.725 9.8704-4.658 0.4531-0.58 0.8497-1.2694 1.164-1.9841 0.237-0.4679 0.3917-0.9616 0.5722-1.5375 0.2063-0.6582 0.3867-1.2342 0.6753-1.8666 0.1289-0.4114 0.3401-0.797 0.6078-1.0746 0.2935-0.3598 0.808-0.56 1.2145-0.7037 1.4355-0.5441 2.871-1.0882 4.2807-1.55z" clip-path="url(#clipPath11027)" fill="#8b8b8b" style=""/>
<path d="m183.72 65.826c-0.428 0.1006-0.97 0.1587-1.362 0.3378-1.363 0.3378-2.66 1.0252-3.508 2.0757-0.327 0.5286-0.618 1.1357-0.831 1.707-0.633 1.5211-1.301 2.9637-1.969 4.4064-0.661 1.2499-1.33 2.6926-0.913 4.0191 0.192 0.0068 0.307 0.0494 0.499 0.0562-0.545 2.3344-0.326 4.8887 0.363 7.228 0.445 1.5977 1.276 3.2089 1.179 4.8646-0.021 0.5781-0.155 1.1135-0.211 1.6131-0.07 0.885-0.061 1.7341 0.14 2.5901 0.094 0.6206 0.38 1.2481 0.553 1.8329 0.481 1.6761 0.805 3.4238 0.78 5.2368-0.329-0.514-0.659-1.027-0.988-1.54 0 0-0.343-0.128-0.228-0.085 0.121-0.15 0.013-0.3856-0.137-0.5066-0.406 0.5646-0.811 1.1286-1.139 1.6576-1.871 2.751-3.707 5.58-5.279 8.573 0.994-3.014 2.408-5.935 4.052-8.771 0.37-0.643 0.775-1.207 0.995-1.971 0.604-1.7922-0.099-3.7461-0.923-5.55l-0.036-0.0785c-0.072-0.1568-0.179-0.3921-0.372-0.3989-0.228-0.0852-0.506 0.1365-0.706 0.3224-0.961 1.0079-1.959 1.9373-2.956 2.8668-1.275 1.1512-2.658 2.067-3.897 3.2966-1.119 1.0796-2.087 2.2806-2.977 3.4446-0.406 0.565-0.847 1.051-1.024 1.7-0.256 0.686-0.319 1.378-0.268 2.113 0.045 0.928 0.053 1.777 0.176 2.669 0.63 5.115-5.451 13.659-4.008 18.687 0.274 1.277 0 2.776-1.726 1.277-1.5-2.001-2-2-5-2-0.413 0.757-3.5-2-5-2-1-0.5-0.942 0.377-1.005 1.069-0.126 1.385-0.137 2.812 0.514 4.031-0.515-0.713-0.873-1.497-1.117-2.239-0.199 0.186-0.477 0.408-0.677 0.594-1.752 1.559-3.541 3.039-5.215 4.562 0.455-0.872 1.139-1.658 1.858-2.365 0.998-0.93 2.217-1.582 2.914-2.753 0.818-1.322 0.722-2.984 1.048-4.555 0.473-2.491 6.84 3.492 8.077 1.221 1.238-2.272 2.791-3.933 4.525-7.809 1.249-2.794 3.179-7.353 2.875-9.679-0.051-0.735-0.217-1.513-0.461-2.254-0.136-0.507-0.351-0.977-0.602-1.526-0.287-0.628-0.537-1.177-0.745-1.84-0.18-0.392-0.28-0.82-0.267-1.206-0.022-0.463 0.227-0.9562 0.433-1.3347 0.704-1.3643 1.408-2.7285 2.112-4.0927-0.085 0.2285-0.213 0.5713-0.298 0.7998-0.682 1.828-1.285 3.6202-1.196 5.4756-0.014 0.385 0.087 0.813 0.309 1.091 0.035 0.078 0.071 0.157 0.15 0.121 0.336 0.321 1.071 0.269 1.163-0.152 0.584-0.172 1.183-0.73 1.582-1.102 2.963-3.0592 5.89-6.1971 8.739-9.2992 0.32-0.336 0.641-0.6719 0.89-1.1648 0.249-0.4928 0.341-0.9139 0.397-1.4136 0.628-3.6047 1.15-7.4448 0.273-11.025-0.036-0.0785-0.072-0.1569-0.108-0.2353 0 0-0.078 0.0358-0.157 0.0716-0.029-0.2711 0.057-0.4996 0.027-0.7707-0.167-1.8194-1.262-3.5943-2.328-5.098-1.138-1.2661-1.768-1.7877-2.376-1.8202-0.692-0.0368-3.041-0.1656-4.04 1.0539-0.406 0.5644-0.381 1.7596-0.618 1.9726-0.084 0.0752-1.622 0.2984-0.372-0.2454-0.032 0.6088-2.328 6.4278-2.477 10.667-0.014 0.3853 9e-3 0.8491 0.109 1.2771 0.029 0.2711 0.137 0.5064 0.323 0.7059 0.035 0.0784 0.15 0.121 0.264 0.1636s0.157-0.0716 0.235-0.1074c2.887-1.9819 5.715-4.5059 9.318-4.9191-0.121 0.15-0.199 0.1859-0.32 0.3359-0.079 0.0359-0.121 0.1501-0.278 0.2217-1.511 1.2587-3.472 2.1542-4.718 3.5765-0.563 0.6361-1.089 1.3506-1.838 1.7872-0.984 0.5441-2.375 0.6109-3.173 1.3544-0.399 0.3718-0.726 0.9005-0.897 1.3575-0.468 1.2567-0.673 2.6771-1.256 3.8913-0.291 0.6071-0.775 1.2073-1.067 1.8144-0.042 0.1143-0.121 0.1501-0.163 0.2643-0.704 1.3643-4.044 5.8234-4.098 7.3644 0.048-1.348 3.223-5.5431 3.078-6.8987-1.589 1.2944-3.1 2.5531-4.617 4.0047 1.054-1.4294 2.257-2.7374 3.611-3.9244 0.677-0.5935 1.354-1.187 1.88-1.9015 0.976-1.3933 0.972-3.477-0.421-4.4521-0.15-0.121-0.301-0.2421-0.493-0.2488-0.95-0.4194-2.07-0.3817-3.112-0.3798-3.054 0.1625-5.958 0.446-9.019 0.8011-2.247 0.2681-4.458 0.6146-6.462 1.6243-0.157 0.0717-0.278 0.2218-0.206 0.3786-0.564-0.4057-1.228-0.1976-1.819 0.1674-0.628 0.2866-1.184 0.73-1.775 1.095-0.513 0.3292-1.027 0.6583-1.54 0.9875-2.409 1.5742-4.782 3.2269-6.97 5.079 0.89-1.1647 2.009-2.2443 3.349-3.0459 0.948-0.6225 1.967-1.0882 2.801-1.7533 0.912-0.701 1.524-1.644 2.436-2.345 0.435-0.2933 0.948-0.6225 1.347-0.9943-1.113-0.155-2.191-0.2315-3.304-0.3865 0.813-0.0871 1.626-0.1742 2.44-0.2613 1.006-0.0803 1.976-0.239 2.946-0.3978 2.411-0.5323 4.735-1.8781 7.211-2.0609 0.192 0.0068 0.385 0.0136 0.578 0.0204-0.121 0.15-0.278 0.2217-0.399 0.3718 0.114 0.0426 0.271-0.0291 0.385 0.0135 2.156 0.1531 4.403-0.1149 6.5-0.504 1.862-0.2817 3.881-0.6349 5.199-1.9004 0.399-0.3718 0.762-0.822 1.161-1.1937 0.399-0.3718 1.062-0.58 1.597-0.4453-0.026-2.5475-0.521-5.3825 1.131-7.3692 1.289-1.5365 0.985-3.6117 2.523-3.8349-0.641 0.5763-0.864-0.962-0.191-2.1472 0.674-1.1851 6.001-1.6866 7.551-0.7832 1.436 0.8609 2.544 2.2504 3.032 3.7338 0.036 0.0785 0.036 0.0785 0.072 0.1569 1.159-2.2356 2.361-4.5855 3.863-6.6933 0.484-0.6003 0.932-1.279 1.602-1.6798 1.327-0.4163 2.947-0.3978 4.488-0.3434z" clip-path="url(#clipPath11021)" fill="#5c5a5a" style=""/>
<path d="m163 71.822c0.087 0.8133 0.285 1.2484-0.013 2.0481-0.597 1.5995-1.241 1.9619-2.066 3.4762-0.832 1.707-0.911 2.611-1.172 4.531-0.112 0.9993-0.146 1.9627-0.102 2.8903-0.764-0.2199-1.965 1.2618-2.563 1.8195-0.598 0.5576-1.125 1.2722-1.867 1.5161-0.82 0.2798-1.662 0.0958-2.512 0.1044-0.927 0.0445-1.826 0.3601-2.76 0.5973-1.905 0.3959-3.825 0.1353-5.702-0.2395 0.078-0.0359 0.078-0.0359 0.157-0.0717 2.155 0.1531 4.402-0.1149 6.5-0.504 1.862-0.2817 3.88-0.635 5.198-1.9004 0.399-0.3718 0.762-0.822 1.161-1.1938 0.399-0.3717 1.472-1.5107 2.008-1.376-0.026-2.5475-0.455-4.3569 1.197-6.3436 1.289-1.5366 1.186-2.0832 1.946-3.9471 0.242-0.3001 0.455-0.8714 0.59-1.4068z" clip-path="url(#clipPath11015)" fill="#8b8b8b" style=""/>
<path d="m171.21 81.208c-0.121 0.1501-0.199 0.1859-0.32 0.3359-0.079 0.0359-0.121 0.1501-0.278 0.2218l-0.079 0.0358c-0.585 0.1723-1.169 0.3446-1.761 0.7096-0.471 0.2149-0.984 0.5441-1.419 0.8374-1.896 1.2451-3.576 2.9607-5.766 3.771-0.251-0.549-0.501-1.098-0.559-1.6402 0.029 0.2711 0.136 0.5064 0.322 0.7058 0.036 0.0785 0.15 0.1211 0.264 0.1637 0.115 0.0426 0.157-0.0716 0.236-0.1075 2.893-2.1745 5.757-4.6201 9.36-5.0333z" clip-path="url(#clipPath11009)" fill="#8b8b8b" style=""/>
<path d="m157.95 91.157c0.286 0.6274 0.373 1.4407 0.232 2.1689-0.142 0.7281-0.554 1.4852-0.774 2.2492-0.043 0.1142-0.121 0.15-0.164 0.2643-0.704 1.3642-3.677 5.2905-3.731 6.8315 0.047-1.349 2.857-5.0103 2.712-6.3659-1.589 1.2945-3.148 2.7418-4.665 4.1929 1.053-1.4288 2.305-2.9256 3.659-4.1126 0.677-0.5935 1.353-1.1869 1.88-1.9015 0.975-1.3932 0.972-3.4769-0.422-4.452-0.15-0.1211-0.3-0.2421-0.492-0.2489 0.421 0.092 0.763 0.2198 1.064 0.4619 0.264 0.1637 0.521 0.52 0.701 0.9122z" clip-path="url(#clipPath11003)" fill="#8b8b8b" style=""/>
<path d="m144.68 87.909c-0.177 0.6497-0.889 1.1647-1.396 1.3012-0.934 0.2372-1.904 0.3959-2.953 0.5905-0.856 0.2013-1.748 0.3242-2.568 0.604-2.032 0.7386-3.778 2.1047-5.26 3.6345 0 0-0.078 0.0358-0.042 0.1142-2.409 1.5742-4.783 3.2269-6.97 5.079 0.89-1.1647 2.008-2.2443 3.348-3.0459 0.948-0.6225 1.968-1.0882 2.802-1.7533 0.912-0.701 1.524-1.644 2.436-2.345 0.435-0.2933 0.948-0.6225 1.347-0.9943-1.114-0.155-2.191-0.2315-3.305-0.3865 0.813-0.0871 1.627-0.1742 2.44-0.2613 1.006-0.0803 1.976-0.239 2.947-0.3978 2.417-0.725 4.699-1.9565 7.174-2.1393z" clip-path="url(#clipPath10997)" fill="#8b8b8b" style=""/>
<path d="m183.72 65.826c-0.428 0.1007-0.97 0.1587-1.362 0.3378-0.814 0.0871-1.513 0.2168-2.261 0.6535-0.905 0.5082-1.703 1.2518-2.309 2.0022-1.089 1.3506-1.8 2.9075-2.511 4.4644-0.334 0.7213-0.782 1.4001-1.488 1.7224 0.043-0.1142 0.043-0.1142 0.085-0.2285 0.036 0.0785 0.036 0.0785 0.072 0.1569 1.159-2.2356 2.361-4.5855 3.863-6.6933 0.484-0.6003 0.932-1.279 1.602-1.6798 1.148-0.8084 2.768-0.7899 4.309-0.7356z" clip-path="url(#clipPath10991)" fill="#8b8b8b" style=""/>
<path d="m174.11 80.265c0.13 0.6991-0.012 1.4272 0.118 2.1263 0.051 0.7349 0.259 1.3982 0.353 2.0188 0.074 1.1987-0.274 2.3054-0.236 3.4257 0.015 0.6564 0.067 1.3913 4e-3 2.0836-0.198 1.2278-1.16 2.2357-2 3.0935-3.163 3.2454-6.247 6.4549-9.409 9.6999-0.52 0.522-1.275 1.152-1.997 0.817-0.264-0.163-0.486-0.441-0.593-0.676 0.036 0.078 0.071 0.156 0.15 0.121 0.336 0.32 1.071 0.269 1.163-0.152 0.584-0.173 1.183-0.73 1.582-1.102 2.963-3.0595 5.89-6.1974 8.739-9.2995 0.32-0.336 0.641-0.672 0.89-1.1648s0.341-0.914 0.397-1.4136c0.628-3.6048 1.15-7.4448 0.273-11.026-0.036-0.0784-0.072-0.1568-0.108-0.2353 0 0-0.078 0.0358-0.157 0.0717-0.029-0.2712 0.057-0.4997 0.028-0.7708 0.358 0.7843 0.716 1.5686 0.803 2.382z" clip-path="url(#clipPath10985)" fill="#8b8b8b" style=""/>
<path d="m176.7 97.565c0.266 1.2055-0.203 2.462-0.593 3.683-0.043 0.114-0.043 0.114-0.085 0.229-1.872 2.75-3.708 5.58-5.28 8.572 0.994-3.013 2.409-5.934 4.052-8.77 0.37-0.643 0.776-1.207 0.995-1.9711 0.604-1.7922-0.099-3.7462-0.923-5.5501 0.222 0.2779 0.437 0.7484 0.508 0.9053 0.215 0.4706 0.394 0.8627 0.609 1.3333 0.408 0.4774 0.623 0.948 0.717 1.5686z" clip-path="url(#clipPath10979)" fill="#8b8b8b" style=""/>
<path d="m160.81 95.963c-0.086 0.2285-0.213 0.5712-0.299 0.7997-0.078 0.0359-0.121 0.1501-0.121 0.1501-0.37 0.6429-0.739 1.2858-1.031 1.8929-0.469 1.2563-0.639 2.2283-0.258 3.4763 0.208 0.664 0.99 1.703 1.277 2.331 0.823 1.803 0.533 3.816 0.736 5.714 0.21 1.705-2.489 5.134-3.195 6.928s-1.027 2.083-1.715 3.299c-1.104 1.949-0.996 1.971-1.494 2.957-0.625 1.328-0.712 1.989-2.212 2.489-2 0-4.493-2.5-6.5-2.5-1.143 0.866-0.512 1.494-0.795 2.95-0.22 0.764-0.44 1.528-0.81 2.171-1.752 1.558-3.541 3.039-5.215 4.562 0.455-0.872 1.139-1.658 1.858-2.366 0.997-0.929 2.217-1.581 2.914-2.752 0.818-1.322 0.722-2.984 1.048-4.555 0.473-2.491 7.435 3.316 8.672 1.045 1.238-2.272 2.431-3.808 2.405-6.356-0.068-2.433 4.532-7.735 4.228-10.061-0.051-0.735-0.216-1.513-0.46-2.254-0.137-0.507-0.352-0.977-0.602-1.526-0.287-0.628-0.538-1.177-0.746-1.84-0.179-0.392-0.28-0.82-0.266-1.206-0.022-0.463 0.227-0.956 0.433-1.3348 0.704-1.3642 1.408-2.7284 2.148-4.0142z" clip-path="url(#clipPath10973)" fill="#8b8b8b" style=""/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 58 KiB

611
application/src/main/data/json/system/scada_symbols/centrifugal-pump.svg

@ -0,0 +1,611 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="400" height="400" fill="none" version="1.1" viewBox="0 0 400 400">
<tb:metadata xmlns=""><![CDATA[{
"title": "Centrifugal pump",
"description": "Centrifugal pump with configurable connectors, running animation and various states.",
"searchTags": [
"pump",
"centrifugal"
],
"widgetSizeX": 2,
"widgetSizeY": 2,
"tags": [
{
"tag": "background",
"stateRenderFunction": "var color = ctx.properties.stoppedColor;\nif (ctx.values.critical) {\n color = ctx.properties.criticalColor;\n} else if (ctx.values.warning) {\n color = ctx.properties.warningColor;\n} else if (ctx.values.running) {\n color = ctx.properties.runningColor;\n}\nelement.attr({fill: color});\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.animate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetAnimation(element);\n }\n}",
"actions": null
},
{
"tag": "center",
"stateRenderFunction": "var running = ctx.values.running;\nvar t = element.timeline();\nif (running) {\n if (!t.active()) {\n if (t.time()) {\n t.play();\n } else {\n ctx.api.animate(element, 2000).ease('-').rotate(360).loop();\n t = element.timeline();\n }\n }\n var speed = ctx.values.rotationAnimationSpeed;\n t.speed(speed);\n} else {\n t.pause();\n}\n",
"actions": null
},
{
"tag": "clickArea",
"stateRenderFunction": null,
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'click');"
}
}
},
{
"tag": "leftBottomConnector",
"stateRenderFunction": "if (ctx.properties.leftBottomConnector) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "leftTopConnector",
"stateRenderFunction": "if (ctx.properties.leftTopConnector) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "rightBottomConnector",
"stateRenderFunction": "if (ctx.properties.rightBottomConnector) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "rightTopConnector",
"stateRenderFunction": "if (ctx.properties.rightTopConnector) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "topLeftConnector",
"stateRenderFunction": "if (ctx.properties.topLeftConnector) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "topRightConnector",
"stateRenderFunction": "if (ctx.properties.topRightConnector) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
}
],
"behavior": [
{
"id": "running",
"name": "{i18n:scada.symbol.running}",
"hint": "{i18n:scada.symbol.running-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.running}",
"defaultGetValueSettings": {
"action": "GET_ATTRIBUTE",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": "SHARED_SCOPE",
"key": "running"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "warning",
"name": "{i18n:scada.symbol.warning-state}",
"hint": "{i18n:scada.symbol.warning-state-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.warning}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "critical",
"name": "{i18n:scada.symbol.critical-state}",
"hint": "{i18n:scada.symbol.critical-state-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.critical}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "criticalAnimation",
"name": "{i18n:scada.symbol.critical-state-animation}",
"hint": "{i18n:scada.symbol.critical-state-animation-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.animation}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "rotationAnimationSpeed",
"name": "{i18n:scada.symbol.rotation-animation-speed}",
"hint": "{i18n:scada.symbol.rotation-animation-speed-hint}",
"group": null,
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "click",
"name": "{i18n:scada.symbol.on-click}",
"hint": "{i18n:scada.symbol.on-click-hint}",
"group": null,
"type": "widgetAction",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": {
"type": "doNothing",
"openInSeparateDialog": false,
"openInPopover": false
}
}
],
"properties": [
{
"id": "rightTopConnector",
"name": "{i18n:scada.symbol.right-top-connector}",
"type": "switch",
"default": true,
"required": null,
"subLabel": "",
"divider": true,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "rightBottomConnector",
"name": "{i18n:scada.symbol.right-bottom-connector}",
"type": "switch",
"default": false,
"required": null,
"subLabel": "",
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "leftTopConnector",
"name": "{i18n:scada.symbol.left-top-connector}",
"type": "switch",
"default": false,
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "leftBottomConnector",
"name": "{i18n:scada.symbol.left-bottom-connector}",
"type": "switch",
"default": true,
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "topLeftConnector",
"name": "{i18n:scada.symbol.top-left-connector}",
"type": "switch",
"default": false,
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "topRightConnector",
"name": "{i18n:scada.symbol.top-right-connector}",
"type": "switch",
"default": false,
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "runningColor",
"name": "{i18n:scada.symbol.running-color}",
"type": "color",
"default": "#1C943E",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "stoppedColor",
"name": "{i18n:scada.symbol.stopped-color}",
"type": "color",
"default": "#696969",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "warningColor",
"name": "{i18n:scada.symbol.warning-color}",
"type": "color",
"default": "#FAA405",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "criticalColor",
"name": "{i18n:scada.symbol.critical-color}",
"type": "color",
"default": "#D12730",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata><rect x="50" y="371" width="300" height="29" rx="7" fill="#fff"/><rect x="50" y="371" width="300" height="29" rx="7" fill="url(#paint0_linear_1481_75415)"/><rect x="51.5" y="372.5" width="297" height="26" rx="5.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/><path d="m103 274h194l32 100h-258l32-100z" fill="#fff"/><path d="m103 274h194l32 100h-258l32-100z" fill="url(#paint1_linear_1481_75415)"/><path d="m73.055 372.5 31.04-97h191.81l31.04 97h-253.89z" stroke="#000" stroke-opacity=".12" stroke-width="3"/><g tb:tag="rightTopConnector">
<rect x="200" y="64" width="186" height="72" fill="#fff"/>
<rect x="200" y="64" width="186" height="72" fill="url(#paint2_linear_1481_75415)"/>
<rect x="201.5" y="65.5" width="183" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect x="387.5" y="51.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3"/>
</g><g style="display: none;" tb:tag="rightBottomConnector">
<rect x="200" y="264" width="186" height="72" fill="#fff" style=""/>
<rect x="200" y="264" width="186" height="72" fill="url(#paint3_linear_1481_75415)" style=""/>
<rect x="201.5" y="265.5" width="183" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3" style=""/>
<rect x="387.5" y="251.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3" style=""/>
</g><g style="display: none;" tb:tag="topRightConnector">
<rect transform="rotate(-90 264 200)" x="264" y="200" width="186" height="72" fill="#fff" style=""/>
<rect transform="rotate(-90 264 200)" x="264" y="200" width="186" height="72" fill="url(#paint4_linear_1481_75415)" style=""/>
<rect transform="rotate(-90 265.5 198.5)" x="265.5" y="198.5" width="183" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3" style=""/>
<rect transform="rotate(-90 251.5 12.5)" x="251.5" y="12.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3" style=""/>
</g><g style="display: none;" tb:tag="topLeftConnector">
<rect transform="rotate(-90 64 200)" x="64" y="200" width="186" height="72" fill="#fff" style=""/>
<rect transform="rotate(-90 64 200)" x="64" y="200" width="186" height="72" fill="url(#paint5_linear_1481_75415)" style=""/>
<rect transform="rotate(-90 65.5 198.5)" x="65.5" y="198.5" width="183" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3" style=""/>
<rect transform="rotate(-90 51.5 12.5)" x="51.5" y="12.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3" style=""/>
</g><g style="display: none;" tb:tag="leftTopConnector">
<rect x="14" y="64" width="186" height="72" fill="#fff" style=""/>
<rect x="14" y="64" width="186" height="72" fill="url(#paint6_linear_1481_75415)" style=""/>
<rect x="15.5" y="65.5" width="183" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3" style=""/>
<rect x="1.5" y="51.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3" style=""/>
</g><g tb:tag="leftBottomConnector">
<rect x="14" y="264" width="186" height="72" fill="#fff"/>
<rect x="14" y="264" width="186" height="72" fill="url(#paint7_linear_1481_75415)"/>
<rect x="15.5" y="265.5" width="183" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect x="1.5" y="251.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3"/>
</g><circle cx="200" cy="186" r="178" fill="#fff"/><circle cx="200" cy="186" r="178" fill="url(#paint8_linear_1481_75415)"/><circle cx="200" cy="186" r="176" stroke="#000" stroke-opacity=".12" stroke-width="4"/><path d="m308 186c0 59.647-48.353 108-108 108s-108-48.353-108-108 48.353-108 108-108 108 48.353 108 108z" fill="#1C943E" tb:tag="background"/><path d="m308 186c0 59.647-48.353 108-108 108s-108-48.353-108-108 48.353-108 108-108 108 48.353 108 108z" fill="url(#paint9_radial_1481_75415)" fill-opacity=".8"/><path d="m306.5 186c0 58.818-47.681 106.5-106.5 106.5-58.818 0-106.5-47.682-106.5-106.5s47.682-106.5 106.5-106.5c58.819 0 106.5 47.682 106.5 106.5z" stroke="#000" stroke-opacity=".12" stroke-width="3"/><circle cx="200" cy="186" r="54" fill="url(#paint10_radial_1481_75415)" fill-opacity=".8"/><circle cx="200" cy="186" r="52.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/><g tb:tag="center">
<rect x="196" y="81" width="8" height="51" rx="4" fill="url(#paint11_linear_1481_75415)" style="fill:url(#paint11_linear_1481_75415)"/>
<rect x="197.5" y="82.5" width="5" height="48" rx="2.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect transform="rotate(-45 122 115.66)" x="122" y="115.66" width="8" height="51" rx="4" fill="url(#paint12_linear_1481_75415)" style="fill:url(#paint12_linear_1481_75415)"/>
<rect transform="rotate(-45 124.12 115.66)" x="124.12" y="115.66" width="5" height="48" rx="2.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect transform="matrix(.70711 .70711 .70711 -.70711 122 256.06)" width="8" height="51" rx="4" fill="url(#paint13_linear_1481_75415)" style="fill:url(#paint13_linear_1481_75415)"/>
<rect transform="matrix(.70711 .70711 .70711 -.70711 122.62 254.56)" x="2.1213" width="5" height="48" rx="2.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect transform="matrix(-.70711 -.70711 -.70711 .70711 277.72 115.66)" width="8" height="51" rx="4" fill="url(#paint13_linear_1481_75415)" style="fill:url(#paint13_linear_1481_75415)"/>
<rect transform="matrix(-.70711 -.70711 -.70711 .70711 274.1 114.16)" x="-2.1213" width="5" height="48" rx="2.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect transform="rotate(135 277.72 256.06)" x="277.72" y="256.06" width="8" height="51" rx="4" fill="url(#paint15_linear_1481_75415)" style="fill:url(#paint15_linear_1481_75415)"/>
<rect transform="rotate(135 275.6 256.06)" x="275.6" y="256.06" width="5" height="48" rx="2.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect x="196" y="240" width="8" height="51" rx="4" fill="url(#paint16_linear_1481_75415)" style="fill:url(#paint16_linear_1481_75415)"/>
<rect x="197.5" y="241.5" width="5" height="48" rx="2.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect transform="rotate(-90,254,190)" x="254" y="190" width="8" height="51" rx="4" fill="url(#paint17_linear_1481_75415)" style="fill:url(#paint17_linear_1481_75415)"/>
<rect transform="rotate(-90,255.5,188.5)" x="255.5" y="188.5" width="5" height="48" rx="2.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect transform="rotate(-90 95 190)" x="95" y="190" width="8" height="51" rx="4" fill="url(#paint18_linear_1481_75415)" style="fill:url(#paint18_linear_1481_75415)"/>
<rect transform="rotate(-90 96.5 188.5)" x="96.5" y="188.5" width="5" height="48" rx="2.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
</g><path d="m314 186c0 62.96-51.039 114-114 114-62.96 0-114-51.04-114-114s51.04-114 114-114c62.961 0 114 51.04 114 114zm-222.02 0c0 59.659 48.363 108.02 108.02 108.02 59.659 0 108.02-48.363 108.02-108.02s-48.363-108.02-108.02-108.02c-59.658 0-108.02 48.363-108.02 108.02z" fill="url(#paint19_linear_1481_75415)"/><path d="m314 186c0 62.96-51.039 114-114 114-62.96 0-114-51.04-114-114s51.04-114 114-114c62.961 0 114 51.04 114 114zm-222.02 0c0 59.659 48.363 108.02 108.02 108.02 59.659 0 108.02-48.363 108.02-108.02s-48.363-108.02-108.02-108.02c-59.658 0-108.02 48.363-108.02 108.02z" fill="url(#paint19_linear_1481_75415)"/><circle cx="200" cy="40" r="12" fill="url(#paint21_linear_1481_75415)" fill-opacity=".8"/><circle cx="200" cy="40" r="10.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/><circle cx="200" cy="332" r="12" fill="url(#paint22_linear_1481_75415)" fill-opacity=".8"/><circle cx="200" cy="332" r="10.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/><circle cx="346" cy="186" r="12" fill="url(#paint23_linear_1481_75415)" fill-opacity=".8"/><circle cx="346" cy="186" r="10.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/><circle cx="305" cy="84" r="12" fill="url(#paint24_linear_1481_75415)" fill-opacity=".8"/><circle cx="305" cy="84" r="10.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/><circle cx="303" cy="287" r="12" fill="url(#paint25_linear_1481_75415)" fill-opacity=".8"/><circle cx="303" cy="287" r="10.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/><circle cx="98" cy="84" r="12" fill="url(#paint26_linear_1481_75415)" fill-opacity=".8"/><circle cx="98" cy="84" r="10.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/><circle cx="98" cy="287" r="12" fill="url(#paint27_linear_1481_75415)" fill-opacity=".8"/><circle cx="98" cy="287" r="10.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/><circle cx="54" cy="186" r="12" fill="url(#paint28_linear_1481_75415)" fill-opacity=".8"/><circle cx="54" cy="186" r="10.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/><defs>
<linearGradient id="paint0_linear_1481_75415" x1="56.818" x2="67.377" y1="385.5" y2="439.46" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" stop-opacity=".2" offset="0"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1481_75415" x1="329" x2="71.146" y1="324.62" y2="318.06" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint2_linear_1481_75415" x1="248.36" x2="248.18" y1="64" y2="136.01" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint3_linear_1481_75415" x1="248.36" x2="248.18" y1="264" y2="336.01" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint4_linear_1481_75415" x1="312.36" x2="312.18" y1="200" y2="272.01" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint5_linear_1481_75415" x1="112.36" x2="112.18" y1="200" y2="272.01" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint6_linear_1481_75415" x1="62.36" x2="62.184" y1="64" y2="136.01" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint7_linear_1481_75415" x1="62.36" x2="62.184" y1="264" y2="336.01" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint8_linear_1481_75415" x1="79.85" x2="329.05" y1="52.5" y2="323.95" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" stop-opacity=".4" offset="0"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<radialGradient id="paint9_radial_1481_75415" cx="0" cy="0" r="1" gradientTransform="translate(200 186) rotate(55.856) scale(105.12)" gradientUnits="userSpaceOnUse">
<stop stop-color="#020202" stop-opacity="0" offset="0"/>
<stop stop-color="#fff" stop-opacity=".15" offset=".73347"/>
<stop stop-color="#020202" stop-opacity=".2" offset="1"/>
</radialGradient>
<radialGradient id="paint10_radial_1481_75415" cx="0" cy="0" r="1" gradientTransform="translate(200 186) rotate(44.226) scale(52.331)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".15" offset="1"/>
</radialGradient>
<linearGradient id="paint11_linear_1481_75415" x1="200.06" x2="212.53" y1="81" y2="84.259" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" offset="0"/>
<stop stop-color="#727171" stop-opacity=".65" offset="1"/>
</linearGradient>
<linearGradient id="paint12_linear_1481_75415" x1="126.06" x2="138.53" y1="115.66" y2="118.92" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" offset="0"/>
<stop stop-color="#727171" stop-opacity=".65" offset="1"/>
</linearGradient>
<linearGradient id="paint13_linear_1481_75415" x1="4.0579" x2="16.532" y1=".00011564" y2="3.2593" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" offset="0"/>
<stop stop-color="#727171" stop-opacity=".65" offset="1"/>
</linearGradient>
<linearGradient id="paint15_linear_1481_75415" x1="281.78" x2="294.25" y1="256.06" y2="259.32" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" offset="0"/>
<stop stop-color="#727171" stop-opacity=".65" offset="1"/>
</linearGradient>
<linearGradient id="paint16_linear_1481_75415" x1="200.06" x2="212.53" y1="240" y2="243.26" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" stop-opacity=".65" offset="0"/>
<stop stop-color="#fff" offset="1"/>
</linearGradient>
<linearGradient id="paint17_linear_1481_75415" x1="258.06" x2="270.53" y1="190" y2="193.26" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" stop-opacity=".65" offset="0"/>
<stop stop-color="#fff" offset="1"/>
</linearGradient>
<linearGradient id="paint18_linear_1481_75415" x1="99.058" x2="111.53" y1="190" y2="193.26" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" offset="0"/>
<stop stop-color="#727171" stop-opacity=".65" offset="1"/>
</linearGradient>
<linearGradient id="paint19_linear_1481_75415" x1="86" x2="314" y1="186" y2="186" gradientUnits="userSpaceOnUse">
<stop stop-color="#F4F4F4" offset="0"/>
<stop stop-color="#EBE7E7" offset="1"/>
</linearGradient>
<linearGradient id="paint21_linear_1481_75415" x1="191.44" x2="206.56" y1="32" y2="49.667" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint22_linear_1481_75415" x1="191.44" x2="206.56" y1="324" y2="341.67" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint23_linear_1481_75415" x1="337.44" x2="352.56" y1="178" y2="195.67" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint24_linear_1481_75415" x1="296.44" x2="311.56" y1="76" y2="93.667" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint25_linear_1481_75415" x1="294.44" x2="309.56" y1="279" y2="296.67" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint26_linear_1481_75415" x1="89.445" x2="104.56" y1="76" y2="93.667" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint27_linear_1481_75415" x1="89.445" x2="104.56" y1="279" y2="296.67" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint28_linear_1481_75415" x1="45.445" x2="60.556" y1="178" y2="195.67" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".15" offset="1"/>
</linearGradient>
</defs><circle cx="200" cy="186" r="178" fill="#000" fill-opacity="0" tb:tag="clickArea"/>
</svg>

After

Width:  |  Height:  |  Size: 30 KiB

1047
application/src/main/data/json/system/scada_symbols/cross-pipe.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 59 KiB

271
application/src/main/data/json/system/scada_symbols/horizontal-ball-valve.svg

@ -0,0 +1,271 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="200" height="200" fill="none" version="1.1" viewBox="0 0 200 200">
<tb:metadata xmlns=""><![CDATA[{
"title": "Horizontal ball valve",
"description": "Horizontal ball valve with open/close animation and state colors.",
"searchTags": [
"valve",
"ball"
],
"widgetSizeX": 1,
"widgetSizeY": 1,
"tags": [
{
"tag": "background",
"stateRenderFunction": "var opened = ctx.values.opened;\nvar openAnimate = element.remember('openAnimate');\nvar color = opened ? ctx.properties.openedColor : ctx.properties.closedColor;\nif (!openAnimate) {\n element.attr({fill: color});\n} else {\n ctx.api.animate(element, 500).attr({fill: color});\n element.remember('openAnimate', false);\n}\n",
"actions": null
},
{
"tag": "clickArea",
"stateRenderFunction": null,
"actions": {
"click": {
"actionFunction": " ctx.tags.wheel.forEach(e => {\n e.remember('openAnimate', true);\n });\n ctx.tags.background.forEach(e => {\n e.remember('openAnimate', true);\n });\n\n\nvar opened = ctx.values.opened;\nvar action = opened ? 'close' : 'open';\n\nctx.api.callAction(event, action, undefined, {\n next: () => {\n ctx.api.setValue('opened', !opened);\n }\n});"
}
}
},
{
"tag": "wheel",
"stateRenderFunction": "var opened = ctx.values.opened;\nvar openAnimate = element.remember('openAnimate');\nvar angle = opened ? ctx.properties.openedRotationAngle : ctx.properties.closedRotationAngle;\nif (!openAnimate) {\n element.transform({rotate: angle, originX: 100});\n} else {\n ctx.api.animate(element, 500).transform({rotate: angle, originX: 100});\n element.remember('openAnimate', false);\n}\n",
"actions": null
}
],
"behavior": [
{
"id": "opened",
"name": "{i18n:scada.symbol.opened}",
"hint": "{i18n:scada.symbol.opened-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.opened}",
"defaultGetValueSettings": {
"action": "GET_ATTRIBUTE",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": "SHARED_SCOPE",
"key": "open"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "open",
"name": "{i18n:scada.symbol.open}",
"hint": "{i18n:scada.symbol.open-hint}",
"group": null,
"type": "action",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": {
"action": "SET_ATTRIBUTE",
"executeRpc": {
"method": "setState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"setAttribute": {
"scope": "SHARED_SCOPE",
"key": "open"
},
"putTimeSeries": {
"key": "state"
},
"valueToData": {
"type": "CONSTANT",
"constantValue": true,
"valueToDataFunction": "/* Convert input boolean value to RPC parameters or attribute/time-series value */\nreturn value;"
}
},
"defaultWidgetActionSettings": null
},
{
"id": "close",
"name": "{i18n:scada.symbol.close}",
"hint": "{i18n:scada.symbol.close-hint}",
"group": null,
"type": "action",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": {
"action": "SET_ATTRIBUTE",
"executeRpc": {
"method": "setState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"setAttribute": {
"scope": "SHARED_SCOPE",
"key": "open"
},
"putTimeSeries": {
"key": "state"
},
"valueToData": {
"type": "CONSTANT",
"constantValue": false,
"valueToDataFunction": "/* Convert input boolean value to RPC parameters or attribute/time-series value */\nreturn value;"
}
},
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "openedColor",
"name": "{i18n:scada.symbol.opened-color}",
"type": "color",
"default": "#1C943E",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "closedColor",
"name": "{i18n:scada.symbol.closed-color}",
"type": "color",
"default": "#696969",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "openedRotationAngle",
"name": "{i18n:scada.symbol.opened-rotation-angle}",
"type": "number",
"default": 0,
"required": true,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": -179,
"max": 179,
"step": null
},
{
"id": "closedRotationAngle",
"name": "{i18n:scada.symbol.closed-rotation-angle}",
"type": "number",
"default": 90,
"required": true,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": -179,
"max": 179,
"step": null
}
]
}]]></tb:metadata><defs>
<linearGradient id="paint0_linear_1595_99338" x1="58.72" x2="58.3" y1="46.5" y2="153.51" gradientTransform="translate(-1.1e-6)" gradientUnits="userSpaceOnUse">
<stop stop-color="#020202" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".18316"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".35085"/>
<stop stop-color="#fff" stop-opacity=".25" offset=".49829"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".64825"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".82318"/>
<stop stop-color="#020202" stop-opacity=".35" offset="1"/>
</linearGradient>
<filter id="filter0_d_1595_99338" x="65" y="65" width="131" height="70" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset/>
<feGaussianBlur stdDeviation="4"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
<feBlend in2="BackgroundImageFix" result="effect1_dropShadow_1595_99338"/>
<feBlend in="SourceGraphic" in2="effect1_dropShadow_1595_99338" result="shape"/>
</filter>
<filter id="filter1_d_1595_99338" x="100" y="76.174" width="100" height="47.652" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset/>
<feGaussianBlur stdDeviation="2"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
<feBlend in2="BackgroundImageFix" result="effect1_dropShadow_1595_99338"/>
<feBlend in="SourceGraphic" in2="effect1_dropShadow_1595_99338" result="shape"/>
</filter>
<radialGradient id="paint1_radial_1595_99338" cx="0" cy="0" r="1" gradientTransform="matrix(0 10.846 -89.342 0 180.83 100.52)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" offset="0"/>
<stop stop-color="#9B9B9B" offset="1"/>
</radialGradient>
<filter id="filter2_ii_1595_99338" x="69.875" y="69.875" width="60.25" height="60.25" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset dx="3.12497" dy="-3.12497"/>
<feGaussianBlur stdDeviation="3.12497"/>
<feComposite in2="hardAlpha" k2="-1" k3="1" operator="arithmetic"/>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0"/>
<feBlend in2="shape" result="effect1_innerShadow_1595_99338"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset dx="-3.12497" dy="3.12497"/>
<feGaussianBlur stdDeviation="3.12497"/>
<feComposite in2="hardAlpha" k2="-1" k3="1" operator="arithmetic"/>
<feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.5 0"/>
<feBlend in2="effect1_innerShadow_1595_99338" result="effect2_innerShadow_1595_99338"/>
</filter>
<filter id="filter3_i_1595_99338" x="72" y="77" width="51" height="51" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset dx="-5" dy="5"/>
<feGaussianBlur stdDeviation="4"/>
<feComposite in2="hardAlpha" k2="-1" k3="1" operator="arithmetic"/>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0"/>
<feBlend in2="shape" result="effect1_innerShadow_1595_99338"/>
</filter>
</defs><rect x="1.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/><path d="m14 63.075s25.882-5.5691 43-8.8079c16.632-3.1469 26.182-3.767 43-3.767 16.818 0 26.368 0.6201 43 3.767 17.118 3.2388 43 8.8079 43 8.8079v73.833s-25.882 4.816-43 8.055c-16.632 3.147-26.182 4.374-43 4.52-16.807 0.147-26.377-0.639-43-3.767-17.177-3.231-43-8.808-43-8.808z" fill="#1c943e" tb:tag="background"/><path d="m14 63.075s25.882-5.5691 43-8.8079c16.632-3.1469 26.182-3.767 43-3.767 16.818 0 26.368 0.6201 43 3.767 17.118 3.2388 43 8.8079 43 8.8079v73.833s-25.882 4.816-43 8.055c-16.632 3.147-26.182 4.374-43 4.52-16.807 0.147-26.377-0.639-43-3.767-17.177-3.231-43-8.808-43-8.808z" fill="url(#paint0_linear_1595_99338)" style="fill:url(#paint0_linear_1595_99338)"/><path d="m181.38 63.621c1.321 0.281 2.384 0.5079 3.123 0.6661v71.375c-0.738 0.137-1.787 0.333-3.086 0.575-2.694 0.502-6.465 1.205-10.77 2.01-8.611 1.608-19.362 3.622-27.923 5.242-16.568 3.135-26.026 4.349-42.734 4.494-16.714 0.146-26.186-0.632-42.71-3.741-8.5733-1.613-19.311-3.812-27.912-5.61-4.299-0.898-8.0616-1.696-10.749-2.269-1.3186-0.281-2.3784-0.508-3.1159-0.666v-71.41c0.7391-0.1582 1.8016-0.3851 3.1235-0.6661 2.6925-0.5724 6.4608-1.3694 10.764-2.2675 8.6083-1.7967 19.347-3.9963 27.892-5.6129 16.521-3.1259 25.975-3.7409 42.721-3.7409 16.746 0 26.2 0.615 42.721 3.7409 8.545 1.6166 19.283 3.8162 27.892 5.6129 4.303 0.8981 8.071 1.6951 10.764 2.2675z" stroke="#000" stroke-opacity=".12" stroke-width="3"/><rect x="187.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/><g tb:tag="wheel">
<path d="m100 80.174s21.238 7.876 45.5 8c14.198 0.0726 28.327-1.0525 38.64-2.1526 8.35-0.8908 15.86 5.581 15.86 13.979 0 8.3981-7.51 14.869-15.86 13.979-10.313-1.1-24.442-2.226-38.64-2.153-24.262 0.124-45.5 8-45.5 8z" fill="url(#paint1_radial_1595_99338)" style="fill:url(#paint1_radial_1595_99338);filter:url(#filter1_d_1595_99338)"/>
<path d="m100.5 119.12v-38.234c0.09 0.0315 0.19 0.0659 0.298 0.1029 0.632 0.217 1.561 0.5266 2.75 0.8983 2.38 0.7432 5.804 1.7348 9.988 2.7301 8.365 1.99 19.78 3.9978 31.961 4.06 14.224 0.0727 28.373-1.0542 38.696-2.1554 8.068-0.8607 15.307 5.3942 15.307 13.482 0 8.0871-7.239 14.342-15.307 13.481-10.323-1.101-24.472-2.228-38.696-2.155-12.181 0.062-23.596 2.07-31.961 4.06-4.184 0.995-7.608 1.987-9.988 2.73-1.189 0.372-2.118 0.681-2.75 0.898-0.108 0.037-0.208 0.072-0.298 0.103z" stroke="#000" stroke-opacity=".12" style="filter:url(#filter1_d_1595_99338)"/>
</g><g filter="url(#filter2_ii_1595_99338)">
<circle cx="100" cy="100" r="27" fill="#d9d9d9"/>
</g><path d="m123 100c0 12.703-10.297 23-23 23-12.702 0-23-10.297-23-23 0-12.702 10.298-23 23-23 12.703 0 23 10.298 23 23z" fill="#000" fill-opacity=".05" style="filter:url(#filter0_d_1595_99338)"/><g filter="url(#filter3_i_1595_99338)">
<path d="m123 100c0 12.703-10.297 23-23 23-12.702 0-23-10.297-23-23 0-12.702 10.298-23 23-23 12.703 0 23 10.298 23 23z" fill="#1c943e" tb:tag="background"/>
</g><path d="m122 100c0 12.15-9.85 22-22 22-12.15 0-22-9.85-22-22 0-12.15 9.8497-22 22-22 12.15 0 22 9.8497 22 22z" stroke="#fff" stroke-width="2"/><path d="m97.283 90.614c0-0.647-0.6112-1.1214-1.2155-0.8901-4.133 1.5825-7.0677 5.5867-7.0677 10.276 0 6.0751 4.9249 11 11 11 6.075 0 11-4.925 11-11 0-4.5642-2.78-8.4791-6.739-10.144-0.609-0.2563-1.243 0.2209-1.243 0.882 0 0.4223 0.268 0.7938 0.655 0.9649 3.18 1.4098 5.398 4.5944 5.398 8.2973 0 5.0101-4.061 9.0711-9.071 9.0711-5.01 0-9.0714-4.061-9.0714-9.0711 0-3.8068 2.3447-7.0658 5.6688-8.4117 0.4019-0.1628 0.6858-0.541 0.6858-0.9746z" clip-rule="evenodd" fill="#fff" fill-rule="evenodd"/><path d="m99.514 87.637c0-0.3519 0.2852-0.6372 0.6373-0.6372 0.352 0 0.637 0.2853 0.637 0.6372v10.401c0 0.3519-0.285 0.6372-0.637 0.6372-0.3521 0-0.6373-0.2853-0.6373-0.6372z" fill="#fff"/><rect y="50" width="200" height="100" fill="#000" fill-opacity="0" stroke-width="0" tb:tag="clickArea"/>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

948
application/src/main/data/json/system/scada_symbols/horizontal-inline-flow-meter.svg

@ -0,0 +1,948 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="400" height="200" fill="none" version="1.1" viewBox="0 0 400 200">
<tb:metadata xmlns=""><![CDATA[{
"title": "Horizontal inline flow meter",
"description": "Horizontal inline flow meter component used to display flow related value and render various states. Includes pipe fluid and leak visualizations.",
"searchTags": [
"meter",
"flow meter"
],
"widgetSizeX": 2,
"widgetSizeY": 1,
"tags": [
{
"tag": "background",
"stateRenderFunction": "var value = ctx.values.value;\nvar colorProcessor = ctx.properties.backgroundColor;\ncolorProcessor.update(value);\nvar fill = colorProcessor.color;\nelement.attr({fill: fill});",
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'displayClick');"
}
}
},
{
"tag": "border",
"stateRenderFunction": "var value = ctx.values.value;\nvar colorProcessor = ctx.properties.defaultBorderColor;\nif (ctx.values.critical) {\n colorProcessor = ctx.properties.criticalBorderColor;\n} else if (ctx.values.warning) {\n colorProcessor = ctx.properties.warningBorderColor;\n} else if (value) {\n colorProcessor = ctx.properties.activeBorderColor;\n}\ncolorProcessor.update(value);\nvar fill = colorProcessor.color;\nelement.attr({fill: fill});\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.animate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetAnimation(element);\n }\n}",
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'displayClick');"
}
}
},
{
"tag": "broken",
"stateRenderFunction": "var broken = ctx.values.broken;\nif (broken) {\n element.show();\n} else {\n element.hide();\n}",
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'displayClick');"
}
}
},
{
"tag": "fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\nvar flow = ctx.values.flow;\nvar flowDirection = ctx.values.flowDirection;\n\nvar elementFluid = element.remember('fluid');\nvar elementFlow = null;\nvar elementFlowDirection = null;\n\nif (fluid !== elementFluid) {\n element.remember('fluid', fluid);\n elementFlow = null;\n elementFlowDirection = null;\n} else {\n elementFlow = element.remember('flow');\n elementFlowDirection = element.remember('flowDirection');\n}\n\nvar liquidPattern = ctx.svg.defs().findOne('pattern#liquid');\nif (liquidPattern) {\n liquidPattern.id(ctx.api.generateElementId());\n element.fill(liquidPattern);\n} else {\n liquidPattern = element.reference('fill');\n}\n\nif (fluid) {\n element.show();\n if (flow !== elementFlow) {\n element.remember('flow', flow);\n if (flow) {\n element.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n } else {\n if (liquidPattern) {\n ctx.api.resetAnimation(liquidPattern);\n }\n }\n } else if (flow && elementFlowDirection !== flowDirection) {\n element.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n }\n if (flow && liquidPattern) {\n liquidPattern.timeline().speed(ctx.values.flowAnimationSpeed);\n }\n} else {\n if (liquidPattern) {\n ctx.api.resetAnimation(liquidPattern);\n }\n element.hide();\n}\n\nfunction animateFlow(liquidPattern, forwardElseReverse) {\n if (liquidPattern) {\n ctx.api.resetAnimation(liquidPattern);\n var deltaX = forwardElseReverse ? 172 : -172;\n liquidPattern.animate(1000).ease('-').relative(deltaX, 0).loop();\n }\n}",
"actions": null
},
{
"tag": "fluid-background",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.fluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
},
{
"tag": "value",
"stateRenderFunction": "var value = ctx.values.value;\nctx.api.text(element, value.toFixed(0));\n",
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'displayClick');"
}
}
},
{
"tag": "valueUnits",
"stateRenderFunction": "var units = ctx.properties.valueUnits;\nctx.api.text(element, units || '');\n",
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'displayClick');"
}
}
}
],
"behavior": [
{
"id": "value",
"name": "{i18n:scada.symbol.value}",
"hint": "{i18n:scada.symbol.flow-meter-value-hint}",
"group": "{i18n:scada.symbol.display}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "GET_TIME_SERIES",
"defaultValue": 0,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "flowRate"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "warning",
"name": "{i18n:scada.symbol.warning-state}",
"hint": "{i18n:scada.symbol.warning-state-hint}",
"group": "{i18n:scada.symbol.display}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.warning}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "critical",
"name": "{i18n:scada.symbol.critical-state}",
"hint": "{i18n:scada.symbol.critical-state-hint}",
"group": "{i18n:scada.symbol.display}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.critical}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "criticalAnimation",
"name": "{i18n:scada.symbol.critical-state-animation}",
"hint": "{i18n:scada.symbol.critical-state-animation-hint}",
"group": "{i18n:scada.symbol.display}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.animation}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "broken",
"name": "{i18n:scada.symbol.broken}",
"hint": "{i18n:scada.symbol.broken-hint}",
"group": "{i18n:scada.symbol.display}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.broken}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "displayClick",
"name": "{i18n:scada.symbol.on-display-click}",
"hint": "{i18n:scada.symbol.on-display-click-hint}",
"group": "{i18n:scada.symbol.display}",
"type": "widgetAction",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": {
"type": "doNothing",
"openInSeparateDialog": false,
"openInPopover": false
}
},
{
"id": "fluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": "{i18n:scada.symbol.pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": "{i18n:scada.symbol.pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": "{i18n:scada.symbol.pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": "{i18n:scada.symbol.pipe}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": "{i18n:scada.symbol.pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "valueUnits",
"name": "{i18n:scada.symbol.units}",
"type": "units",
"default": "m³/hr",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "medium-width",
"min": null,
"max": null,
"step": null
},
{
"id": "defaultBorderColor",
"name": "{i18n:scada.symbol.default-border-color}",
"type": "color_settings",
"default": {
"type": "constant",
"color": "#4A4848",
"gradient": {
"advancedMode": false,
"gradient": [
"rgba(0, 255, 0, 1)",
"rgba(255, 0, 0, 1)"
],
"gradientAdvanced": [
{
"source": {
"type": "constant"
},
"color": "rgba(0, 255, 0, 1)"
},
{
"source": {
"type": "constant"
},
"color": "rgba(255, 0, 0, 1)"
}
],
"minValue": 0,
"maxValue": 100
},
"rangeList": {
"advancedMode": false,
"range": [],
"rangeAdvanced": []
},
"colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';"
},
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "activeBorderColor",
"name": "{i18n:scada.symbol.active-border-color}",
"type": "color_settings",
"default": {
"type": "constant",
"color": "#1C943E",
"gradient": {
"advancedMode": false,
"gradient": [
"rgba(0, 255, 0, 1)",
"rgba(255, 0, 0, 1)"
],
"gradientAdvanced": [
{
"source": {
"type": "constant"
},
"color": "rgba(0, 255, 0, 1)"
},
{
"source": {
"type": "constant"
},
"color": "rgba(255, 0, 0, 1)"
}
],
"minValue": 0,
"maxValue": 100
},
"rangeList": {
"advancedMode": false,
"range": [],
"rangeAdvanced": []
},
"colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';"
},
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "warningBorderColor",
"name": "{i18n:scada.symbol.warning-border-color}",
"type": "color_settings",
"default": {
"type": "constant",
"color": "#FAA405",
"gradient": {
"advancedMode": false,
"gradient": [
"rgba(0, 255, 0, 1)",
"rgba(255, 0, 0, 1)"
],
"gradientAdvanced": [
{
"source": {
"type": "constant"
},
"color": "rgba(0, 255, 0, 1)"
},
{
"source": {
"type": "constant"
},
"color": "rgba(255, 0, 0, 1)"
}
],
"minValue": 0,
"maxValue": 100
},
"rangeList": {
"advancedMode": false,
"range": [],
"rangeAdvanced": []
},
"colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';"
},
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "criticalBorderColor",
"name": "{i18n:scada.symbol.critical-border-color}",
"type": "color_settings",
"default": {
"type": "constant",
"color": "#D12730",
"gradient": {
"advancedMode": false,
"gradient": [
"rgba(0, 255, 0, 1)",
"rgba(255, 0, 0, 1)"
],
"gradientAdvanced": [
{
"source": {
"type": "constant"
},
"color": "rgba(0, 255, 0, 1)"
},
{
"source": {
"type": "constant"
},
"color": "rgba(255, 0, 0, 1)"
}
],
"minValue": 0,
"maxValue": 100
},
"rangeList": {
"advancedMode": false,
"range": [],
"rangeAdvanced": []
},
"colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';"
},
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "backgroundColor",
"name": "{i18n:scada.symbol.background-color}",
"type": "color_settings",
"default": {
"type": "constant",
"color": "#FFFFFF",
"gradient": {
"advancedMode": false,
"gradient": [
"rgba(0, 255, 0, 1)",
"rgba(255, 0, 0, 1)"
],
"gradientAdvanced": [
{
"source": {
"type": "constant"
},
"color": "rgba(0, 255, 0, 1)"
},
{
"source": {
"type": "constant"
},
"color": "rgba(255, 0, 0, 1)"
}
],
"minValue": 0,
"maxValue": 100
},
"rangeList": {
"advancedMode": false,
"range": [],
"rangeAdvanced": []
},
"colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';"
},
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "fluidColor",
"name": "{i18n:scada.symbol.fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata><defs>
<pattern id="liquid" width="172" height="72" patternTransform="translate(14,-8)" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<linearGradient id="paint28_linear_1182_32781-5" x1="19.316" x2="21" y1="8.2632" y2="23" gradientTransform="translate(-36,6)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint29_linear_1182_32781-1" x1="148.32" x2="150" y1="8.2632" y2="23" gradientTransform="translate(-165,135)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint30_linear_1182_32781-7" x1="111.32" x2="113" y1="9.2632" y2="24" gradientTransform="translate(-129,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint31_linear_1182_32781-4" x1="32.316" x2="34" y1="51.263" y2="66" gradientTransform="translate(-92,-24)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint32_linear_1182_32781-3" x1="153.32" x2="155" y1="51.263" y2="66" gradientTransform="translate(-213,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint33_linear_1182_32781-1" x1="31.947" x2="33" y1="21.789" y2="31" gradientTransform="translate(-59,7)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint34_linear_1182_32781-4" x1="160.95" x2="162" y1="21.789" y2="31" gradientTransform="translate(-188,136)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint35_linear_1182_32781-6" x1="3.9474" x2="5" y1="32.79" y2="42" gradientTransform="translate(-42,-32)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint36_linear_1182_32781-9" x1="93.158" x2="94" y1="4.6316" y2="12" gradientTransform="translate(-102,86)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint37_linear_1182_32781-4" x1="71.158" x2="72" y1="56.632" y2="64" gradientTransform="translate(-132,12)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint38_linear_1182_32781-2" x1="110.95" x2="112" y1="32.79" y2="42" gradientTransform="translate(-149,75)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint39_linear_1182_32781-2" x1="57.947" x2="59" y1="34.79" y2="44" gradientTransform="translate(-98,20)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint40_linear_1182_32781-6" x1="113.95" x2="115" y1="57.79" y2="67" gradientTransform="translate(-177,53)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint41_linear_1182_32781-4" x1="137.95" x2="139" y1="37.79" y2="47" gradientTransform="translate(-181,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint42_linear_1182_32781-1" x1="74.947" x2="76" y1="16.789" y2="26" gradientTransform="translate(-97,55)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint43_linear_1182_32781-2" x1="125.97" x2="126.5" y1="48.395" y2="53" gradientTransform="translate(-177,76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint44_linear_1182_32781-8" x1="168.97" x2="169.5" y1="44.395" y2="49" gradientTransform="translate(-216,123)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint45_linear_1182_32781-8" x1="56.974" x2="57.5" y1="7.3947" y2="12" gradientTransform="translate(-67,48)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint46_linear_1182_32781-9" x1="95.974" x2="96.5" y1="33.395" y2="38" gradientTransform="translate(-132,61)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint47_linear_1182_32781-2" x1="90.974" x2="91.5" y1="21.395" y2="26" gradientTransform="translate(-115,68)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint48_linear_1182_32781-88" x1="21.974" x2="22.5" y1="38.395" y2="43" gradientTransform="translate(-63,-18)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint49_linear_1182_32781-8" x1="123.97" x2="124.5" y1="21.395" y2="26" gradientTransform="translate(-148,101)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint50_linear_1182_32781-6" x1="85.974" x2="86.5" y1="45.395" y2="50" gradientTransform="translate(-134,39)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint51_linear_1182_32781-8" x1="50.974" x2="51.5" y1="19.395" y2="24" gradientTransform="translate(-73,30)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint52_linear_1182_32781-3" x1="47.974" x2="48.5" y1="49.395" y2="54" gradientTransform="translate(-100,-3)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint53_linear_1182_32781-83" x1="13.158" x2="14" y1="60.632" y2="68" gradientTransform="translate(-78,-50)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint54_linear_1182_32781-33" x1="134.16" x2="135" y1="60.632" y2="68" gradientTransform="translate(-199,71)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint55_linear_1182_32781-8" x1="93.5" x2="95.5" y1="50.5" y2="68" gradientTransform="translate(-154,37)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint84_linear_1182_32781-8" x1="248" x2="248" y1="1.8513e-7" y2="72" gradientTransform="scale(.33333 1)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" offset=".10895"/>
<stop stop-color="#fff" stop-opacity="0" offset=".11331"/>
<stop stop-color="#fff" stop-opacity="0" offset=".88736"/>
<stop stop-color="#727171" offset=".89138"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<mask id="path-5-inside-1_1595_102361" fill="#ffffff">
<path d="m300 100c0 55.228-44.772 100-100 100s-100-44.772-100-100c0-55.228 44.772-100 100-100s100 44.772 100 100zm-188 0c0 48.603 39.401 88.004 88.004 88.004s88.004-39.401 88.004-88.004c0-48.604-39.401-88.004-88.004-88.004s-88.004 39.401-88.004 88.004z"/>
</mask>
<linearGradient id="paint1_linear_1595_102361" x1="165.06" x2="182.56" y1="50.125" y2="69.188" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".25" offset="0"/>
<stop stop-opacity=".3" offset="1"/>
</linearGradient>
<linearGradient id="paint2_linear_1595_102361" x1="218.06" x2="235.56" y1="50.125" y2="69.188" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".25" offset="0"/>
<stop stop-opacity=".3" offset="1"/>
</linearGradient>
<linearGradient id="paint0_linear_1595_102361" x1="110.72" x2="110.63" y1="64" y2="136.01" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
</defs><rect x="14" y="64" width="372" height="72" fill="#fff" tb:tag="pipe-background"/><rect x="14" y="64" width="372" height="72" fill="url(#paint0_linear_1595_102361)" style="fill:url(#paint0_linear_1595_102361)"/><rect x="15.5" y="65.5" width="369" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3"/><rect x="387.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/><rect x="1.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/><rect x="14" y="64" width="372" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><rect x="14" y="64" width="372" height="72" fill="url(#liquid)" stroke-width="0" style="display: none;" tb:tag="fluid"/><path d="m300 100c0 55.228-44.772 100-100 100s-100-44.772-100-100c0-55.228 44.772-100 100-100s100 44.772 100 100zm-188 0c0 48.603 39.401 88.004 88.004 88.004s88.004-39.401 88.004-88.004c0-48.604-39.401-88.004-88.004-88.004s-88.004 39.401-88.004 88.004z" fill="#4a4848" mask="url(#path-5-inside-1_1595_102361)" stroke="#727171" stroke-width="6" tb:tag="border"/><circle cx="200" cy="100" r="88" fill="#fff" tb:tag="background"/><path d="m135.5 88.357c0-2.1302 1.727-3.8571 3.857-3.8571h121.29c2.13 0 3.857 1.7269 3.857 3.8571v23.286c0 2.13-1.727 3.857-3.857 3.857h-121.29c-2.13 0-3.857-1.727-3.857-3.857z" fill="#4a4848" fill-opacity=".06" tb:tag="border"/><path d="m139.36 83c-2.9408 0-5.3574 2.4165-5.3574 5.3574v23.285c0 2.9408 2.4166 5.3574 5.3574 5.3574h121.29c2.9408 0 5.3574-2.4166 5.3574-5.3574v-23.285c0-2.9409-2.4167-5.3574-5.3574-5.3574zm0 3h121.29c1.3192 0 2.3574 1.0379 2.3574 2.3574v23.285c0 1.3192-1.0382 2.3574-2.3574 2.3574h-121.29c-1.3192 0-2.3574-1.0382-2.3574-2.3574v-23.285c0-1.3195 1.0382-2.3574 2.3574-2.3574z" fill="#4a4848" tb:tag="border"/><circle cx="173.5" cy="59.5" r="12.5" fill="url(#paint1_linear_1595_102361)" style="fill:url(#paint1_linear_1595_102361)"/><circle cx="173.5" cy="59.5" r="12" stroke="#000" stroke-opacity=".12"/><circle cx="226.5" cy="59.5" r="12.5" fill="url(#paint2_linear_1595_102361)" style="fill:url(#paint2_linear_1595_102361)"/><circle cx="226.5" cy="59.5" r="12" stroke="#000" stroke-opacity=".12"/><text x="200.00586" y="102.19141" dominant-baseline="middle" fill="#000000" fill-opacity=".87" text-anchor="middle" style="font-family:Roboto;font-size:24px;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-weight:500" tb:tag="value" xml:space="preserve"><tspan>0</tspan></text><text x="199.61719" y="138.77344" dominant-baseline="middle" fill="#000000" fill-opacity=".87" text-anchor="middle" style="font-family:Roboto;font-size:16px;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-weight:500" tb:tag="valueUnits" xml:space="preserve"><tspan>m³/hr</tspan></text><g style="display: none;" tb:tag="broken">
<circle cx="200" cy="100" r="88" fill="#000" fill-opacity=".24" style=""/>
<path d="m253.92 84.931c-0.174 0.5228-0.309 1.1931-0.577 1.6622-0.577 1.6623-1.583 3.2037-2.991 4.1417-0.697 0.3484-1.488 0.6431-2.226 0.8439-1.971 0.6161-3.848 1.2858-5.725 1.9555-1.636 0.6832-3.513 1.3529-5.122 0.682 0.013-0.2414-0.027-0.3888-0.013-0.6302-2.977 0.4146-0.922 2.811-8.792 8.1516-11.067 2.815-27.05 6.112-29.128 6.044-0.724-0.041-1.408 0.066-2.038 0.08-1.113-0.014-2.172-0.122-3.218-0.471-0.764-0.188-1.515-0.617-2.225-0.899-2.038-0.792-4.183-1.396-6.448-1.571 0.603 0.47 1.206 0.939 1.809 1.409 0 0 0.121 0.442 0.081 0.295 0.201-0.134 0.482 0.027 0.616 0.228-0.751 0.442-1.502 0.884-2.199 1.232-3.647 2.024-7.389 3.993-11.304 5.614 3.875-0.897 7.683-2.33 11.411-4.058 0.845-0.389 1.595-0.831 2.574-1.018 2.306-0.549 4.666 0.551 6.824 1.785l0.094 0.054c0.187 0.107 0.469 0.268 0.455 0.509 0.081 0.295-0.228 0.617-0.483 0.845-1.368 1.085-2.642 2.225-3.916 3.364-1.582 1.461-2.883 3.082-4.56 4.489-1.475 1.274-3.084 2.346-4.64 3.324-0.75 0.442-1.408 0.938-2.239 1.085-0.885 0.241-1.756 0.241-2.668 0.093-1.153-0.161-2.212-0.269-3.311-0.524-6.314-1.37-17.674 5.248-23.787 2.873 2.44 1.395 5.027 2.75 7.466 4.145-3.66 0.522-7.133 2.022-10.7 3.469-0.992 0.428-1.984 0.857-3.111 1.085-0.884 0.241-1.903 0.281-2.775 0.28-1.743 0-3.526-0.148-4.973-1.101 0.831 0.724 1.769 1.261 2.667 1.65-0.255 0.228-0.563 0.55-0.818 0.778-2.146 2.01-4.198 4.074-6.29 5.99 1.14-0.469 2.199-1.232 3.165-2.05 1.274-1.139 2.226-2.587 3.768-3.324 1.743-0.87 3.808-0.561 5.806-0.789 3.164-0.307 6.154-1.834 9.131-3.12s5.228-3.036 10.264-4.758c3.63-1.241 9.543-3.131 12.411-2.486 0.912 0.148 1.864 0.443 2.762 0.832 0.617 0.228 1.18 0.55 1.836 0.926 0.751 0.429 1.408 0.805 2.212 1.14 0.469 0.268 0.992 0.443 1.475 0.47 0.576 0.08 1.22-0.174 1.716-0.388 1.783-0.724 3.567-1.447 5.35-2.17-0.295 0.08-0.737 0.2-1.032 0.281-2.36 0.642-4.666 1.191-6.972 0.869-0.483-0.027-1.006-0.202-1.327-0.51-0.094-0.054-0.188-0.107-0.134-0.201-0.362-0.456-0.214-1.368 0.322-1.435 0.282-0.71 1.046-1.394 1.556-1.849 4.157-3.351 8.408-6.647 12.606-9.85 0.456-0.362 0.912-0.724 1.555-0.978 0.644-0.255 1.18-0.322 1.81-0.335 4.572-0.374 19.939-3.129 23.095-4.335 5.049-1.929 5.348-0.685 7.45-3.208 0.335 0.067 7.054-8.7036 7.39-8.6365 2.252 0.4164 4.343 1.9858 6.099 3.4875 1.45 1.565-2.243 6.524-2.272 7.287-0.032 0.867-18.866 17.201-20.503 18.31-0.751 0.442-2.24 0.274-2.533 0.546-0.103 0.096-0.557 1.991 0.264 0.492-0.764-0.029-8.29 2.174-13.599 1.877-0.482-0.027-1.059-0.108-1.582-0.282-0.335-0.067-0.616-0.228-0.844-0.483-0.094-0.054-0.134-0.201-0.174-0.349-0.04-0.147 0.107-0.188 0.161-0.281 2.803-3.378 6.276-6.621 7.203-11.072-0.201 0.134-0.255 0.228-0.456 0.362-0.054 0.094-0.201 0.134-0.308 0.321-1.744 1.743-3.085 4.089-5.003 5.482-0.858 0.63-1.81 1.206-2.441 2.091-0.791 1.166-1.033 2.895-2.052 3.807-0.51 0.455-1.207 0.804-1.797 0.964-1.623 0.442-3.419 0.535-5.001 1.125-0.792 0.295-1.596 0.831-2.387 1.125-0.148 0.04-0.201 0.134-0.349 0.174-1.783 0.724-7.731 4.384-9.661 4.276 1.689 0.095 7.288-3.392 8.963-3.056-1.797 1.836-3.54 3.579-5.525 5.307 1.904-1.152 3.674-2.505 5.311-4.06 0.818-0.777 1.636-1.555 2.588-2.131 1.85-1.058 4.451-0.816 5.51 1.034 0.134 0.202 0.268 0.403 0.254 0.644 0.415 1.234 0.241 2.628 0.12 3.928-0.551 3.794-1.236 7.387-2.029 11.168-0.591 2.775-1.275 5.496-2.764 7.882-0.108 0.188-0.309 0.322-0.496 0.214 0.442 0.751 0.106 1.555-0.417 2.252-0.429 0.751-1.046 1.394-1.569 2.091-0.47 0.604-0.939 1.207-1.409 1.81-2.239 2.828-4.573 5.602-7.135 8.122 1.556-0.978 3.031-2.251 4.184-3.833 0.886-1.112 1.583-2.332 2.509-3.297 0.979-1.059 2.226-1.715 3.205-2.774 0.416-0.51 0.885-1.113 1.395-1.568 0.066 1.407 0.039 2.761 0.106 4.169 0.201-1.005 0.403-2.011 0.604-3.016 0.215-1.247 0.524-2.44 0.832-3.633 0.94-2.949 2.885-5.697 3.395-8.767 0.014-0.241 0.027-0.483 0.041-0.724-0.201 0.134-0.309 0.322-0.51 0.456-0.04-0.148 0.067-0.336 0.027-0.483 0.055-2.708 0.646-5.483 1.371-8.057 0.563-2.293 1.235-4.773 2.965-6.274 0.509-0.455 1.113-0.857 1.622-1.313 0.51-0.456 0.845-1.26 0.738-1.944 3.178 0.323 6.66 1.265 9.329-0.571 2.065-1.434 4.621-0.818 5.075-2.713-0.792 0.735 1.103 1.189 2.659 0.483s23.915-14.808 24.838-26.835c-0.911-1.8908-2.519-3.4332-4.316-4.2114-0.094-0.0537-0.094-0.0537-0.187-0.1073 2.923-1.1923 5.993-2.4246 8.796-4.0593 0.805-0.536 1.703-1.0184 2.28-1.8092 0.671-1.6086 0.832-3.633 0.94-5.5635z" fill="#5c5a5a" style=""/>
<path d="m221.07 127.62c-1.005-0.202-1.526-0.498-2.558-0.217-2.065 0.562-2.591 1.325-4.575 2.183-2.226 0.844-3.364 0.839-5.79 0.946-1.261 0.026-2.467-0.041-3.62-0.203 0.187 0.979-1.8 2.31-2.564 2.993-0.764 0.684-1.717 1.26-2.106 2.158-0.442 0.992-0.309 2.065-0.416 3.124-0.162 1.153-0.658 2.238-1.061 3.378-0.711 2.332-0.605 4.759-0.351 7.146 0.054-0.094 0.054-0.094 0.108-0.188 0.054-2.708 0.645-5.483 1.37-8.057 0.564-2.293 1.235-4.773 2.965-6.274 0.51-0.455 1.113-0.857 1.623-1.313 0.509-0.456 2.054-1.666 1.946-2.349 3.178 0.322 5.388 1.065 8.056-0.771 2.066-1.434 2.736-1.244 5.15-1.98 0.402-0.268 1.14-0.469 1.823-0.576z" fill="#8b8b8b" style=""/>
<path d="m210.29 116.29c-0.201 0.134-0.255 0.228-0.456 0.362-0.054 0.094-0.201 0.134-0.309 0.321-0.053 0.094-0.053 0.094-0.053 0.094-0.282 0.711-0.564 1.421-1.087 2.118-0.322 0.563-0.791 1.166-1.207 1.676-1.771 2.225-4.104 4.128-5.365 6.768 0.656 0.376 1.313 0.751 1.984 0.886-0.336-0.067-0.617-0.228-0.845-0.483-0.094-0.054-0.134-0.201-0.174-0.349-0.04-0.147 0.107-0.187 0.161-0.281 3.044-3.364 6.424-6.661 7.351-11.112z" fill="#8b8b8b" style=""/>
<path d="m196.36 131.72c-0.751-0.429-1.756-0.631-2.682-0.537-0.925 0.094-1.917 0.522-2.896 0.71-0.147 0.04-0.201 0.134-0.348 0.174-1.784 0.723-7.024 3.988-8.955 3.88 1.69 0.094 6.581-2.996 8.257-2.66-1.797 1.836-3.782 3.616-5.766 5.345 1.904-1.152 3.915-2.544 5.551-4.099 0.818-0.777 1.636-1.554 2.588-2.131 1.851-1.058 4.452-0.816 5.51 1.035 0.134 0.201 0.268 0.402 0.255 0.643-0.067-0.536-0.188-0.978-0.456-1.381-0.174-0.348-0.589-0.711-1.058-0.979z" fill="#8b8b8b" style=""/>
<path d="m198.9 148.65c-0.832 0.147-1.556 0.978-1.784 1.595-0.403 1.139-0.711 2.332-1.074 3.619-0.349 1.046-0.604 2.145-1.047 3.137-1.153 2.453-3.058 4.477-5.137 6.152 0 0-0.053 0.094-0.147 0.04-2.24 2.828-4.574 5.603-7.135 8.122 1.555-0.978 3.03-2.251 4.184-3.832 0.885-1.113 1.583-2.333 2.508-3.298 0.979-1.059 2.226-1.715 3.205-2.774 0.416-0.509 0.886-1.112 1.395-1.568 0.067 1.408 0.039 2.762 0.106 4.17 0.201-1.006 0.403-2.011 0.604-3.017 0.215-1.247 0.524-2.44 0.833-3.633 1.181-2.935 2.978-5.643 3.489-8.713z" fill="#8b8b8b" style=""/>
<path d="m233.47 101.11c-0.266 0.482-0.521 1.116-0.87 1.529-0.381 0.952-0.775 1.751-1.557 2.506-0.92 0.92-2.089 1.63-3.2 2.105-2 0.856-4.12 1.185-6.24 1.514-0.984 0.158-1.955 0.468-2.584 1.211 0.152-0.013 0.152-0.013 0.305-0.026-0.083-0.069-0.083-0.069-0.165-0.139 3.091-0.64 6.335-1.291 9.389-2.388 0.888-0.38 1.86-0.691 2.571-1.363 1.365-1.11 1.893-3.071 2.351-4.949z" fill="#8b8b8b" style=""/>
<path d="m211.4 113.38c-0.858-0.241-1.783-0.148-2.641-0.39-0.911-0.147-1.716-0.483-2.48-0.671-1.488-0.228-2.909 0.08-4.303-0.095-0.818-0.094-1.73-0.242-2.601-0.242-1.555 0.106-2.923 1.192-4.09 2.143-4.412 3.579-8.771 7.063-13.183 10.641-0.711 0.59-1.582 1.461-1.247 2.399 0.174 0.349 0.495 0.658 0.777 0.818-0.094-0.053-0.188-0.107-0.134-0.201-0.362-0.456-0.214-1.367 0.322-1.434 0.282-0.711 1.046-1.394 1.556-1.85 4.157-3.35 8.408-6.647 12.606-9.849 0.456-0.362 0.912-0.724 1.555-0.979 0.644-0.254 1.18-0.321 1.81-0.334 4.572-0.374 9.426-0.587 13.796 0.916 0.094 0.054 0.188 0.108 0.281 0.161 0 0-0.053 0.094-0.107 0.188 0.335 0.067 0.63-0.013 0.965 0.054-0.938-0.537-1.876-1.073-2.882-1.275z" fill="#8b8b8b" style=""/>
<path d="m190.5 107.58c-1.474-0.47-3.097-0.028-4.665 0.32-0.148 0.04-0.148 0.04-0.295 0.08-3.648 2.023-7.389 3.993-11.304 5.614 3.875-0.897 7.683-2.33 11.41-4.059 0.845-0.388 1.596-0.83 2.575-1.018 2.306-0.549 4.665 0.552 6.823 1.786-0.321-0.309-0.884-0.631-1.072-0.738-0.563-0.322-1.032-0.59-1.595-0.912-0.55-0.563-1.113-0.885-1.877-1.073z" fill="#8b8b8b" style=""/>
<path d="m190.69 127.59c-0.295 0.08-0.737 0.2-1.032 0.281-0.054 0.094-0.201 0.134-0.201 0.134-0.845 0.388-1.69 0.777-2.481 1.071-1.622 0.442-2.855 0.544-4.37-0.073-0.804-0.336-2.012-1.431-2.763-1.86-2.158-1.234-4.704-1.101-7.05-1.571-2.105-0.456-6.694 2.521-9.014 3.199-2.32 0.677-2.716 1.044-4.313 1.765-2.56 1.156-2.575 1.018-3.862 1.527-1.73 0.63-3.526 0.723-5.256 1.353-1.14 0.469-2.199 1.232-3.285 1.607-1.784 0.724-3.808 0.562-5.658 0.749-0.979 0.188-1.958 0.375-2.803 0.764-2.146 2.01-4.198 4.074-6.29 5.99 1.14-0.469 2.2-1.232 3.165-2.05 1.274-1.139 2.227-2.587 3.769-3.324 1.743-0.87 3.807-0.561 5.805-0.789 3.164-0.307 6.155-1.834 9.131-3.12 2.977-1.286 5.031-2.601 8.208-2.278 3.03 0.363 10.175-4.776 13.044-4.131 0.911 0.147 1.863 0.443 2.761 0.832 0.617 0.228 1.18 0.55 1.837 0.925 0.75 0.43 1.407 0.805 2.211 1.141 0.469 0.268 0.992 0.443 1.475 0.47 0.576 0.08 1.22-0.174 1.716-0.389 1.783-0.723 3.567-1.446 5.256-2.223z" fill="#8b8b8b" style=""/>
<path d="m186.97 26.632c0.126 0.5365 0.199 1.2163 0.423 1.7079 0.424 1.7079 1.286 3.3344 2.603 4.3966 0.662 0.4103 1.423 0.7757 2.139 1.0428 1.907 0.7927 3.716 1.6304 5.524 2.468 1.567 0.8291 3.376 1.6668 5.039 1.1449 8e-3 -0.2415 0.062-0.3847 0.07-0.6263 2.927 0.6836 6.129 0.4094 9.061-0.4546 2.003-0.5582 4.023-1.5995 6.099-1.478 0.724 0.0255 1.395 0.1943 2.022 0.2647 1.109 0.0875 2.174 0.0766 3.247-0.1758 0.778-0.1177 1.564-0.4769 2.297-0.6929 2.102-0.6031 4.293-1.0096 6.565-0.9779-0.644 0.4126-1.287 0.8253-1.93 1.2379 0 0-0.161 0.4297-0.107 0.2865-0.188-0.1517-0.483-0.017-0.635 0.1711 0.708 0.5086 1.415 1.0173 2.078 1.4276 3.448 2.3465 6.995 4.6481 10.747 6.6183-3.778-1.2456-7.44-3.0192-10.995-5.0792-0.806-0.4638-1.513-0.9724-2.471-1.248-2.247-0.7563-4.696 0.1247-6.958 1.1575l-0.098 0.045c-0.197 0.0898-0.491 0.2245-0.5 0.466-0.107 0.2865 0.171 0.6348 0.404 0.8849 1.264 1.2054 2.429 2.4557 3.594 3.706 1.443 1.5987 2.591 3.3321 4.133 4.8858 1.353 1.4021 2.858 2.616 4.318 3.7316 0.708 0.5086 1.317 1.0621 2.132 1.2843 0.859 0.3205 1.727 0.3995 2.648 0.3352 1.163-0.0558 2.227-0.0666 3.345-0.2207 6.413-0.7898 17.124 6.8335 23.427 5.0242 1.601-0.343 3.48 0 1.601 2.1643-2.508 1.8804-2.507 2.5072-2.507 6.268 0.949 0.5172-2.508 4.3877-2.508 6.2681-0.626 1.2536 0.473 1.1803 1.34 1.2592 1.736 0.1579 3.525 0.1726 5.054-0.6442-0.894 0.6457-1.877 1.0948-2.807 1.4006 0.233 0.25 0.511 0.5984 0.744 0.8485 1.954 2.1971 3.81 4.4391 5.719 6.5379-1.092-0.5705-2.078-1.4276-2.965-2.3295-1.165-1.2503-1.982-2.7785-3.451-3.6525-1.656-1.0258-3.74-0.9058-5.709-1.3137-3.123-0.5938 4.377-8.5748 1.529-10.126-2.847-1.5514-4.93-3.4988-9.789-5.6716-3.502-1.5658-9.218-3.9854-12.133-3.6044-0.922 0.0642-1.896 0.2717-2.826 0.5776-0.635 0.1711-1.225 0.4405-1.913 0.7548-0.787 0.3593-1.475 0.6736-2.306 0.9345-0.492 0.2245-1.029 0.3507-1.512 0.3337-0.581 0.0279-1.199-0.2841-1.673-0.5427-1.711-0.8825-3.421-1.7651-5.131-2.6476 0.286 0.1068 0.716 0.2671 1.003 0.3739 2.291 0.8547 4.538 1.611 6.864 1.4995 0.483 0.017 1.019-0.1092 1.368-0.3871 0.098-0.0449 0.196-0.0898 0.151-0.1881 0.402-0.4212 0.338-1.3425-0.19-1.4578-0.216-0.7332-0.915-1.4834-1.381-1.9835-3.836-3.7145-7.77-7.3841-11.658-10.955-0.422-0.4018-0.843-0.8036-1.46-1.1156-0.618-0.3119-1.146-0.4273-1.773-0.4977-4.519-0.7881-9.332-1.4414-13.821-0.342-0.099 0.0449-0.197 0.0898-0.295 0.1347 0 0 0.045 0.0983 0.09 0.1967-0.34 0.0363-0.627-0.0705-0.967-0.0341-2.28 0.2099-4.505 1.5825-6.39 2.9188-1.588 1.4265-2.241 2.2161-2.282 2.9793-0.046 0.8664-0.208 3.8116 1.321 5.0646 0.707 0.5086 2.206 0.477 2.473 0.7741 0.094 0.1049 0.374 2.0333-0.308 0.4662 0.763 0.0407 8.058 2.9182 13.372 3.1055 0.483 0.017 1.065-0.0108 1.601-0.137 0.34-0.0364 0.635-0.1712 0.885-0.4042 0.098-0.0449 0.152-0.1881 0.205-0.3313 0.054-0.1433-0.09-0.1967-0.135-0.295-2.484-3.6185-5.648-7.1643-6.166-11.681 0.188 0.1518 0.233 0.2501 0.421 0.4018 0.045 0.0983 0.188 0.1518 0.278 0.3484 1.578 1.8936 2.7 4.3517 4.483 5.914 0.798 0.7052 1.694 1.3656 2.241 2.3039 0.682 1.2333 0.766 2.9775 1.698 3.9778 0.466 0.5001 1.129 0.9104 1.701 1.1241 1.576 0.5876 3.357 0.8438 4.879 1.5746 0.761 0.3654 1.513 0.9724 2.274 1.3378 0.143 0.0534 0.188 0.1517 0.332 0.2051 1.71 0.8826 7.3 5.0687 9.232 5.1368-1.691-0.0596-6.949-4.0406-8.649-3.8586 1.623 1.9919 3.201 3.8856 5.02 5.7877-1.791-1.3207-3.431-2.8296-4.919-4.5266-0.744-0.8485-1.488-1.697-2.384-2.3573-1.746-1.2224-4.358-1.2178-5.581 0.5288-0.152 0.1882-0.303 0.3763-0.312 0.6178-0.526 1.1908-0.478 2.5951-0.476 3.9012 0.204 3.8284 0.559 7.4686 1.004 11.306 0.336 2.8172 0.771 5.5896 2.037 8.1011 0.089 0.1966 0.278 0.3483 0.474 0.2585-0.508 0.7077-0.247 1.5391 0.21 2.2808 0.359 0.7866 0.915 1.4833 1.373 2.225 0.412 0.6433 0.825 1.2867 1.238 1.93 1.973 3.0201 4.045 5.9953 6.367 8.7374-1.46-1.1156-2.814-2.5176-3.819-4.1976-0.78-1.1883-1.364-2.4665-2.198-3.5117-0.878-1.1434-2.061-1.9106-2.939-3.0541-0.368-0.545-0.781-1.1884-1.247-1.6885-0.194 1.3959-0.29 2.7469-0.484 4.1427-0.109-1.0196-0.219-2.0392-0.328-3.0588-0.1-1.2611-0.299-2.4774-0.498-3.6936-0.668-3.0225-2.355-5.9357-2.584-9.0394 8e-3 -0.2416 0.017-0.4831 0.025-0.7247 0.189 0.1518 0.278 0.3484 0.467 0.5001 0.053-0.1432-0.037-0.3398 0.017-0.4831 0.192-2.7019-0.145-5.5192-0.632-8.1483-0.353-2.3342-0.796-4.865-2.383-6.5171-0.466-0.5001-1.03-0.9553-1.496-1.4554-0.466-0.5002-0.727-1.3316-0.558-2.0029-3.194 0.0326-6.748 0.6536-9.238-1.4173-1.927-1.6157-4.528-1.2346-4.808-3.163 0.723 0.8039-1.206 1.0837-2.692 0.2391-1.485-0.8447-2.114-7.5219-0.981-9.4652 1.079-1.8 2.821-3.1897 4.68-3.8013 0.099-0.0449 0.099-0.0449 0.197-0.0898-2.803-1.4531-5.748-2.9597-8.391-4.8424-0.752-0.607-1.603-1.169-2.106-2.009-0.521-1.663-0.498-3.6937-0.43-5.6261z" fill="#5c5a5a" style=""/>
<path d="m194.49 52.611c1.02-0.1092 1.565-0.3571 2.568 0.0168 2.005 0.7478 2.459 1.5554 4.357 2.5897 2.14 1.0428 3.274 1.1419 5.681 1.4686 1.252 0.1409 2.46 0.1835 3.623 0.1277-0.276 0.9577 1.582 2.4634 2.281 3.2135 0.699 0.7502 1.595 1.4106 1.9 2.3404 0.351 1.0281 0.12 2.0841 0.131 3.1486 0.056 1.1628 0.452 2.2893 0.749 3.4606 0.496 2.3876 0.17 4.7946-0.3 7.1481-0.045-0.0983-0.045-0.0983-0.09-0.1966 0.192-2.7019-0.144-5.5192-0.632-8.1484-0.353-2.3341-0.796-4.8649-2.382-6.517-0.466-0.5002-1.031-0.9554-1.497-1.4555s-1.894-1.8455-1.725-2.5168c-3.193 0.0326-5.462 0.5706-7.952-1.5003-1.926-1.6157-2.612-1.4871-4.948-2.4401-0.376-0.3035-1.093-0.5706-1.764-0.7393z" fill="#8b8b8b" style=""/>
<path d="m206.25 42.312c0.188 0.1518 0.233 0.2501 0.421 0.4018 0.045 0.0983 0.188 0.1518 0.278 0.3484 0.045 0.0983 0.045 0.0983 0.045 0.0983 0.216 0.7332 0.432 1.4663 0.889 2.208 0.27 0.5899 0.682 1.2333 1.05 1.7783 1.561 2.3767 3.712 4.484 4.728 7.2285-0.689 0.3144-1.377 0.6287-2.057 0.7015 0.34-0.0364 0.635-0.1711 0.885-0.4042 0.099-0.0449 0.152-0.1881 0.205-0.3313 0.054-0.1432-0.089-0.1967-0.134-0.295-2.726-3.627-5.792-7.2177-6.31-11.734z" fill="#8b8b8b" style=""/>
<path d="m218.73 58.943c0.786-0.3592 1.806-0.4684 2.719-0.2911s1.862 0.6944 2.819 0.97c0.144 0.0534 0.189 0.1517 0.332 0.2051 1.71 0.8826 6.632 4.6101 8.564 4.6782-1.691-0.0596-6.281-3.5819-7.98-3.4 1.622 1.992 3.437 3.9459 5.256 5.8481-1.791-1.3208-3.668-2.8899-5.156-4.5869-0.744-0.8485-1.488-1.697-2.384-2.3574-1.746-1.2224-4.358-1.2177-5.581 0.5289-0.151 0.1881-0.303 0.3762-0.312 0.6178 0.116-0.528 0.276-0.9577 0.579-1.334 0.206-0.3313 0.652-0.6542 1.144-0.8787z" fill="#8b8b8b" style=""/>
<path d="m214.65 75.569c0.814 0.2222 1.46 1.1156 1.631 1.7505 0.297 1.1713 0.496 2.3875 0.74 3.7021 0.252 1.073 0.407 2.191 0.757 3.2191 0.926 2.5478 2.639 4.7364 4.556 6.5937 0 0 0.045 0.0983 0.144 0.0534 1.973 3.0201 4.045 5.9953 6.367 8.7374-1.46-1.1156-2.814-2.5176-3.819-4.1976-0.78-1.1884-1.364-2.4665-2.198-3.5117-0.878-1.1434-2.061-1.9106-2.939-3.0541-0.368-0.545-0.781-1.1884-1.247-1.6885-0.194 1.3959-0.29 2.7468-0.484 4.1427-0.109-1.0196-0.219-2.0392-0.328-3.0588-0.1-1.2612-0.299-2.4774-0.498-3.6937-0.909-3.0309-2.453-5.8907-2.682-8.9945z" fill="#8b8b8b" style=""/>
<path d="m186.97 26.632c0.126 0.5365 0.199 1.2162 0.424 1.7078 0.109 1.0196 0.272 1.896 0.819 2.8343 0.637 1.135 1.569 2.1352 2.51 2.8939 1.693 1.3657 3.645 2.2567 5.597 3.1478 0.904 0.4188 1.755 0.9808 2.159 1.8657-0.143-0.0534-0.143-0.0534-0.287-0.1068 0.099-0.0449 0.099-0.0449 0.197-0.0898-2.803-1.4531-5.748-2.9596-8.391-4.8424-0.752-0.607-1.603-1.169-2.106-2.009-1.013-1.4384-0.99-3.4691-0.922-5.4015z" fill="#8b8b8b" style=""/>
<path d="m205.07 38.684c0.876-0.1626 1.789 0.0146 2.666-0.148 0.921-0.0642 1.752-0.3251 2.53-0.4428 1.503-0.0922 2.891 0.3437 4.295 0.2964 0.823-0.0194 1.744-0.0836 2.612-0.0047 1.539 0.2477 2.803 1.4531 3.878 2.5068 4.068 3.9645 8.092 7.8308 12.16 11.795 0.655 0.6519 1.443 1.5987 1.025 2.503-0.206 0.3313-0.554 0.6093-0.849 0.744 0.098-0.0449 0.197-0.0898 0.152-0.1881 0.402-0.4212 0.337-1.3425-0.191-1.4578-0.216-0.7332-0.915-1.4834-1.381-1.9835-3.835-3.7145-7.769-7.3841-11.658-10.955-0.421-0.4018-0.842-0.8036-1.46-1.1155-0.618-0.312-1.146-0.4274-1.772-0.4978-4.519-0.7881-9.333-1.4414-13.822-0.342-0.098 0.0449-0.196 0.0898-0.295 0.1347 0 0 0.045 0.0983 0.09 0.1967-0.34 0.0364-0.626-0.0705-0.966-0.0341 0.983-0.449 1.966-0.8981 2.986-1.0072z" fill="#8b8b8b" style=""/>
<path d="m226.76 35.435c1.511-0.3337 3.086 0.2539 4.617 0.7431 0.143 0.0534 0.143 0.0534 0.286 0.1069 3.449 2.3465 6.995 4.6481 10.747 6.6183-3.777-1.2456-7.439-3.0192-10.994-5.0793-0.806-0.4637-1.514-0.9723-2.471-1.2479-2.247-0.7564-4.697 0.1247-6.958 1.1575 0.348-0.2779 0.938-0.5474 1.135-0.6372 0.59-0.2694 1.081-0.4939 1.671-0.7633 0.599-0.511 1.189-0.7804 1.967-0.8981z" fill="#8b8b8b" style=""/>
<path d="m224.75 55.351c0.287 0.1068 0.716 0.2671 1.003 0.3739 0.045 0.0984 0.188 0.1518 0.188 0.1518 0.806 0.4637 1.612 0.9274 2.373 1.2928 1.575 0.5876 2.794 0.8009 4.358 0.3239 0.832-0.2609 2.135-1.2416 2.921-1.6008 2.262-1.0328 4.785-0.6681 7.164-0.9228 2.137-0.2633 6.436 3.1194 8.685 4.0047 2.249 0.8854 2.611 1.2874 4.136 2.1507 2.443 1.3835 2.471 1.248 3.706 1.8719 1.666 0.7843 2.494 0.8934 3.121 2.7738 0 2.5072-3.135 5.6324-3.135 8.1485 1.086 1.4326 1.873 0.6419 3.699 0.9965 0.957 0.2756 1.915 0.5512 2.721 1.0149 1.954 2.1971 3.81 4.4392 5.719 6.538-1.093-0.5706-2.078-1.4276-2.965-2.3295-1.165-1.2503-1.982-2.7786-3.451-3.6526-1.657-1.0258-3.741-0.9057-5.71-1.3137-3.123-0.5938 4.157-9.3207 1.31-10.872-2.848-1.5515-4.774-3.0474-7.967-3.0148-3.05 0.086-9.698-5.6815-12.614-5.3005-0.921 0.0643-1.896 0.2718-2.825 0.5776-0.635 0.1711-1.225 0.4405-1.913 0.7548-0.787 0.3593-1.475 0.6736-2.307 0.9345-0.491 0.2245-1.028 0.3508-1.511 0.3337-0.581 0.0279-1.199-0.2841-1.674-0.5426-1.71-0.8826-3.42-1.7651-5.032-2.6926z" fill="#8b8b8b" style=""/>
</g><g transform="translate(4e-4,5e-4)" style="display: none;" tb:tag="leak">
<path d="m47.912 134.05c0.428-0.101 0.9702-0.159 1.3624-0.338 1.3624-0.338 2.6599-1.025 3.5071-2.075 0.3273-0.529 0.6188-1.136 0.8319-1.707 0.6323-1.521 1.3005-2.964 1.9687-4.407 0.6614-1.25 1.3296-2.692 0.9133-4.019-0.1926-7e-3 -0.3069-0.049-0.4996-0.056 0.5453-2.335 0.3266-4.889-0.3626-7.228-0.4453-1.598-1.276-3.209-1.179-4.865 0.0203-0.578 0.155-1.113 0.2111-1.613 0.0698-0.885 0.0612-1.734-0.1402-2.59-0.0939-0.621-0.3804-1.248-0.5527-1.833-0.4812-1.676-0.8054-3.4236-0.7801-5.2362 0.3291 0.5132 0.6583 1.0264 0.9875 1.5396 0 0 0.3427 0.1278 0.2285 0.0852-0.121 0.1501-0.0136 0.3854 0.1365 0.5064 0.4057-0.5645 0.8115-1.1289 1.1388-1.6576 1.8718-2.7507 3.7078-5.5798 5.2794-8.5726-0.9936 3.0132-2.4084 5.9343-4.0517 8.7702-0.3699 0.6429-0.7756 1.2074-0.9955 1.971-0.6033 1.793 0.0995 3.746 0.9234 5.55l0.0358 0.079c0.0716 0.157 0.1791 0.392 0.3718 0.399 0.2285 0.085 0.5064-0.137 0.7058-0.323 0.9616-1.007 1.9589-1.937 2.9563-2.866 1.2753-1.152 2.658-2.067 3.8974-3.297 1.1184-1.0796 2.0868-2.2802 2.9767-3.4449 0.4057-0.5645 0.8472-1.0505 1.0245-1.7002 0.2556-0.6855 0.3186-1.3778 0.2674-2.1127-0.0445-0.9276-0.0532-1.7768-0.1761-2.6685-0.63-5.1154 5.4511-13.66 4.0078-18.688-0.2736-1.2766 0-2.776 1.7264-1.2765 1.5 2.0005 2.0001 1.9998 5.0001 1.9998 0.4125-0.7572 3.5 2 5 2 1 0.5 0.9415-0.3767 1.0045-1.069 0.1259-1.3846 0.1376-2.8118-0.5139-4.0309 0.5151 0.7127 0.8733 1.497 1.1172 2.2387 0.1995-0.1859 0.4774-0.4076 0.6769-0.5935 1.7526-1.5588 3.5411-3.0391 5.2153-4.5621-0.4552 0.8714-1.1388 1.6576-1.8583 2.3654-0.9973 0.9294-2.2164 1.581-2.9136 2.7525-0.8183 1.3216-0.7225 2.9841-1.048 4.5546-0.4736 2.4913-6.84-3.4917-8.0776-1.2202-1.2375 2.2714-2.791 3.9327-4.5242 7.8089-1.249 2.7934-3.1791 7.3531-2.8752 9.6789 0.0512 0.7349 0.2167 1.5124 0.4607 2.2541 0.1365 0.5064 0.3514 0.977 0.6022 1.526 0.2865 0.6274 0.5373 1.1765 0.7454 1.8397 0.1791 0.3922 0.2798 0.8202 0.2662 1.2055 0.0222 0.4638-0.2266 0.9571-0.4329 1.3351-0.704 1.364-1.408 2.729-2.112 4.093 0.0852-0.229 0.213-0.571 0.2982-0.8 0.6818-1.828 1.2851-3.62 1.1962-5.4754 0.0136-0.3853-0.0871-0.8133-0.3088-1.0912-0.0358-0.0784-0.0717-0.1569-0.1501-0.1211-0.336-0.3205-1.0709-0.2692-1.1629 0.152-0.5848 0.1723-1.1832 0.73-1.5822 1.1018-2.963 3.0599-5.8903 6.1969-8.739 9.2999-0.3206 0.336-0.6411 0.671-0.8899 1.164-0.2489 0.493-0.3409 0.914-0.3971 1.414-0.6286 3.605-1.1498 7.445-0.2728 11.025 0.0358 0.079 0.0716 0.157 0.1075 0.236l0.1568-0.072c0.029 0.271-0.0562 0.5-0.0271 0.771 0.1673 1.819 1.2623 3.594 2.3283 5.098 1.1378 1.266 1.7677 1.787 2.3765 1.82 0.6912 0.037 3.0405 0.166 4.04-1.054 0.4058-0.564 0.3806-1.76 0.6176-1.973 0.0837-0.075 1.622-0.298 0.3718 0.246 0.0325-0.609 2.3279-6.428 2.4773-10.667 0.0136-0.385-0.0086-0.849-0.1093-1.277-0.029-0.271-0.1365-0.506-0.3224-0.706-0.0358-0.078-0.1501-0.121-0.2643-0.164-0.1143-0.042-0.1569 0.072-0.2353 0.108-2.8865 1.982-5.7149 4.506-9.3178 4.919 0.121-0.15 0.1995-0.186 0.3205-0.336 0.0784-0.036 0.121-0.15 0.2779-0.222 1.5105-1.258 3.4713-2.154 4.7175-3.576 0.5626-0.636 1.0894-1.351 1.8379-1.787 0.9838-0.544 2.3752-0.611 3.1731-1.355 0.3989-0.372 0.7262-0.9 0.8966-1.357 0.4688-1.257 0.6732-2.677 1.2561-3.892 0.2915-0.607 0.7757-1.207 1.0672-1.814 0.0426-0.114 0.121-0.15 0.1636-0.264 0.704-1.364 4.0433-5.8235 4.0976-7.3649-0.0475 1.3487-3.2232 5.5439-3.078 6.8989 1.589-1.294 3.0995-2.553 4.6169-4.0043-1.0536 1.4293-2.2572 2.7373-3.6109 3.9243-0.6768 0.593-1.3537 1.187-1.8804 1.901-0.9752 1.394-0.9714 3.477 0.4218 4.452 0.1501 0.121 0.3002 0.242 0.4928 0.249 0.9499 0.42 2.0701 0.382 3.112 0.38 3.0539-0.162 5.9577-0.446 9.0184-0.801 2.2473-0.268 4.4588-0.615 6.4622-1.624 0.1568-0.072 0.2779-0.222 0.2062-0.379 0.5645 0.406 1.2278 0.198 1.8194-0.167 0.6274-0.287 1.1832-0.73 1.7749-1.095 0.5132-0.33 1.0264-0.659 1.5396-0.988 2.4095-1.574 4.7825-3.227 6.9695-5.079-0.89 1.165-2.008 2.244-3.348 3.046-0.948 0.622-1.968 1.088-2.801 1.753-0.9126 0.701-1.5246 1.644-2.4367 2.345-0.4348 0.294-0.948 0.623-1.3469 0.995 1.1135 0.155 2.1911 0.231 3.3046 0.386-0.8133 0.087-1.6267 0.174-2.44 0.261-1.006 0.081-1.9762 0.239-2.9464 0.398-2.411 0.533-4.7349 1.878-7.2107 2.061-0.1927-7e-3 -0.3854-0.013-0.5781-0.02 0.1211-0.15 0.2779-0.222 0.399-0.372-0.1143-0.043-0.2711 0.029-0.3854-0.014-2.1553-0.153-4.4026 0.115-6.4999 0.504-1.862 0.282-3.8808 0.635-5.1987 1.901-0.3989 0.372-0.762 0.822-1.161 1.194-0.3989 0.371-1.0622 0.579-1.5976 0.445 0.026 2.547 0.5213 5.382-1.1307 7.369-1.2888 1.537-0.9848 3.612-2.5231 3.835 0.6413-0.576 0.8645 0.962 0.1908 2.147-0.6738 1.185-6.0002 1.687-7.5504 0.783-1.4358-0.861-2.5444-2.25-3.0323-3.734l-0.0716-0.156c-1.1592 2.235-2.3609 4.585-3.8628 6.693-0.4842 0.6-0.9325 1.279-1.6026 1.68-1.3265 0.416-2.9464 0.397-4.4879 0.343z" fill="#5c5a5a" style=""/>
<path d="m68.636 128.06c-0.0871-0.813-0.2849-1.248 0.0134-2.048 0.5965-1.599 1.2407-1.962 2.0658-3.476 0.8318-1.707 0.9109-2.611 1.1715-4.531 0.1124-0.999 0.1463-1.963 0.1019-2.89 0.7639 0.22 1.965-1.262 2.5634-1.82 0.5984-0.557 1.1252-1.272 1.8669-1.516 0.8201-0.28 1.6625-0.096 2.5116-0.104 0.9276-0.045 1.8262-0.36 2.7606-0.598 1.9045-0.395 3.8246-0.135 5.702 0.24-0.0784 0.036-0.0784 0.036-0.1569 0.072-2.1553-0.154-4.4026 0.115-6.4999 0.504-1.8619 0.281-3.8808 0.635-5.1986 1.9-0.399 0.372-0.7621 0.822-1.1611 1.194-0.3989 0.372-1.4722 1.51-2.0076 1.376 0.026 2.547 0.4552 4.357-1.1968 6.343-1.2888 1.537-1.1863 2.084-1.9465 3.947-0.2421 0.301-0.4551 0.872-0.5897 1.407z" fill="#8b8b8b" style=""/>
<path d="m60.418 118.67c0.1211-0.15 0.1995-0.186 0.3206-0.336 0.0784-0.035 0.121-0.15 0.2779-0.221l0.0784-0.036c0.5848-0.173 1.1697-0.345 1.7613-0.71 0.4706-0.215 0.9838-0.544 1.4185-0.837 1.896-1.245 3.5769-2.961 5.7662-3.771 0.2508 0.549 0.5015 1.098 0.5596 1.64-0.0291-0.271-0.1365-0.506-0.3224-0.706-0.0358-0.078-0.1501-0.121-0.2643-0.164-0.1143-0.042-0.1569 0.072-0.2353 0.108-2.8933 2.174-5.7576 4.62-9.3605 5.033z" fill="#8b8b8b" style=""/>
<path d="m73.687 108.72c-0.2865-0.628-0.3736-1.441-0.2322-2.169s0.5539-1.485 0.7738-2.249c0.0426-0.115 0.121-0.15 0.1636-0.265 0.704-1.364 3.6774-5.2898 3.7318-6.8313-0.0476 1.3488-2.8573 5.0103-2.7122 6.3663 1.589-1.295 3.1477-2.742 4.665-4.1933-1.0536 1.4293-2.3053 2.9253-3.659 4.1123-0.6768 0.594-1.3537 1.187-1.8804 1.902-0.9751 1.393-0.9714 3.477 0.4218 4.452 0.1501 0.121 0.3002 0.242 0.4929 0.249-0.4212-0.092-0.764-0.22-1.0641-0.462-0.2643-0.164-0.5219-0.52-0.701-0.912z" fill="#8b8b8b" style=""/>
<path d="m86.95 111.97c0.1772-0.65 0.8899-1.165 1.3963-1.301 0.9344-0.237 1.9046-0.396 2.9532-0.591 0.856-0.201 1.7477-0.324 2.5679-0.604 2.0324-0.738 3.7782-2.105 5.2597-3.634 0 0 0.0785-0.036 0.0427-0.115 2.4093-1.574 4.7823-3.226 6.9693-5.079-0.889 1.165-2.008 2.245-3.348 3.046-0.948 0.623-1.968 1.089-2.8012 1.754-0.9122 0.701-1.5241 1.644-2.4363 2.345-0.4347 0.293-0.9479 0.622-1.3469 0.994 1.1135 0.155 2.1912 0.232 3.3046 0.387-0.8133 0.087-1.6266 0.174-2.44 0.261-1.006 0.08-1.9762 0.239-2.9464 0.398-2.4178 0.725-4.6991 1.956-7.1749 2.139z" fill="#8b8b8b" style=""/>
<path d="m47.912 134.05c0.428-0.1 0.9702-0.158 1.3624-0.337 0.8133-0.088 1.5124-0.217 2.2609-0.654 0.9053-0.508 1.7032-1.252 2.3084-2.002 1.0894-1.351 1.8002-2.908 2.511-4.465 0.3341-0.721 0.7824-1.4 1.4883-1.722-0.0426 0.114-0.0426 0.114-0.0852 0.229-0.0358-0.079-0.0358-0.079-0.0717-0.157-1.1591 2.235-2.3609 4.585-3.8628 6.693-0.4841 0.6-0.9325 1.279-1.6025 1.68-1.1475 0.808-2.7673 0.79-4.3088 0.735z" fill="#8b8b8b" style=""/>
<path d="m57.526 119.61c-0.1297-0.699 0.0117-1.427-0.118-2.126-0.0513-0.735-0.2594-1.398-0.3533-2.019-0.0735-1.199 0.2741-2.305 0.2365-3.426-0.0155-0.656-0.0668-1.391-0.0038-2.083 0.1976-1.228 1.1592-2.236 1.9997-3.094 3.1625-3.245 6.2466-6.455 9.4091-9.7 0.52-0.5219 1.2752-1.1512 1.9966-0.8171 0.2643 0.1637 0.486 0.4416 0.5935 0.6769-0.0358-0.0785-0.0717-0.1569-0.1501-0.1211-0.336-0.3205-1.0709-0.2692-1.1629 0.152-0.5848 0.1723-1.1832 0.7299-1.5822 1.1017-2.963 3.0596-5.8903 6.1976-8.7391 9.2996-0.3205 0.336-0.641 0.672-0.8899 1.165-0.2488 0.493-0.3408 0.914-0.397 1.413-0.6286 3.605-1.1498 7.445-0.2728 11.026 0.0358 0.078 0.0716 0.157 0.1074 0.235 0 0 0.0785-0.036 0.1569-0.072 0.029 0.272-0.0562 0.5-0.0271 0.771-0.3583-0.784-0.7165-1.568-0.8035-2.382z" fill="#8b8b8b" style=""/>
<path d="m54.934 102.31c-0.2662-1.205 0.2026-2.4619 0.5928-3.6829 0.0426-0.1142 0.0426-0.1142 0.0853-0.2285 1.8718-2.7506 3.7078-5.5798 5.2794-8.5725-0.9936 3.0131-2.4084 5.9342-4.0517 8.7702-0.3699 0.6428-0.7757 1.2073-0.9955 1.9717-0.6033 1.792 0.0995 3.746 0.9234 5.55-0.2218-0.278-0.4367-0.749-0.5083-0.906-0.2149-0.47-0.394-0.862-0.609-1.333-0.4076-0.477-0.6225-0.948-0.7164-1.569z" fill="#8b8b8b" style=""/>
<path d="m70.82 103.92c0.0852-0.229 0.2131-0.571 0.2983-0.8 0.0784-0.036 0.121-0.15 0.121-0.15 0.3699-0.643 0.7398-1.286 1.0313-1.893 0.4687-1.2566 0.6388-2.2284 0.2584-3.4765-0.2081-0.6633-0.9904-1.7028-1.277-2.3302-0.8238-1.8039-0.5329-3.8166-0.7361-5.7144-0.21-1.7051 2.4883-5.1345 3.1946-6.9285s1.0269-2.0821 1.7156-3.2985c1.1035-1.9491 0.9955-1.9713 1.4932-2.9569 0.6256-1.3285 0.7126-1.9891 2.2126-2.4891 2 0 4.493 2.5003 6.5 2.5003 1.1428-0.8664 0.5121-1.4939 0.795-2.9501 0.2198-0.7639 0.4397-1.5279 0.8096-2.1708 1.7526-1.5587 3.5411-3.0391 5.2153-4.562-0.4552 0.8714-1.1388 1.6575-1.8583 2.3653-0.9973 0.9294-2.2164 1.581-2.9136 2.7525-0.8183 1.3217-0.7225 2.9842-1.0479 4.5546-0.4737 2.4913-7.4351-3.3159-8.6727-1.0445-1.2376 2.2715-2.4309 3.8077-2.4049 6.3552 0.0686 2.4332-4.5321 7.736-4.2282 10.062 0.0513 0.7349 0.2168 1.5125 0.4608 2.2541 0.1364 0.5065 0.3514 0.977 0.6021 1.5261 0.2866 0.6274 0.5373 1.1764 0.7454 1.8397 0.1791 0.3921 0.2798 0.8201 0.2662 1.2055 0.0223 0.4638-0.2266 0.9566-0.4329 1.3352-0.704 1.3643-1.408 2.7283-2.1478 4.0143z" fill="#8b8b8b" style=""/>
<path d="m303.34 75.498c0.097 0.4289 0.15 0.9717 0.325 1.3655 0.325 1.3655 1 2.6695 2.042 3.5267 0.526 0.3323 1.13 0.6295 1.699 0.8479 1.515 0.6467 2.952 1.3286 4.388 2.0104 1.244 0.6732 2.68 1.355 4.01 0.9513 9e-3 -0.1926 0.053-0.3065 0.061-0.4991 2.329 0.5674 4.886 0.3729 7.231-0.2942 1.602-0.4302 3.221-1.2455 4.876-1.1329 0.578 0.0258 1.112 0.1655 1.611 0.2264 0.884 0.0782 1.733 0.0775 2.591-0.1157 0.622-0.088 1.252-0.3686 1.838-0.5354 1.681-0.4652 3.432-0.7729 5.244-0.7305-0.517 0.3243-1.033 0.6486-1.549 0.9729 0 0-0.131 0.3416-0.087 0.2277-0.149-0.1224-0.386-0.0172-0.508 0.1317 0.56 0.4111 1.121 0.8221 1.647 1.1544 2.732 1.8978 5.544 3.7605 8.522 5.3604-3.004-1.0221-5.911-2.4645-8.732-4.1346-0.639-0.376-1.2-0.787-1.961-1.0141-1.787-0.6202-3.747 0.0641-5.559 0.8708l-0.079 0.0351c-0.157 0.0701-0.394 0.1754-0.402 0.368-0.088 0.2277 0.131 0.5077 0.315 0.7089 0.999 0.971 1.919 1.9771 2.839 2.9832 1.139 1.2861 2.042 2.6775 3.26 3.9285 1.069 1.1286 2.26 2.1082 3.416 3.0091 0.561 0.411 1.043 0.8572 1.691 1.0406 0.683 0.2621 1.374 0.3316 2.11 0.2873 0.928-0.0357 1.777-0.0363 2.67-0.1508 5.121-0.5816 13.607 5.5805 18.649 4.1845 1.279-0.261 2.776 0.026 1.26 1.738-2.015 1.481-2.019 1.981-2.047 4.981 0.753 0.42-2.033 3.481-2.047 4.981-0.51 0.995 0.367 0.945 1.059 1.015 1.383 0.139 2.81 0.164 4.036-0.476-0.718 0.508-1.506 0.859-2.25 1.096 0.184 0.201 0.404 0.481 0.588 0.682 1.542 1.768 3.005 3.57 4.512 5.259-0.867-0.464-1.647-1.155-2.348-1.881-0.92-1.006-1.56-2.231-2.724-2.939-1.314-0.831-2.978-0.751-4.545-1.091-2.487-0.498 3.556-6.807 1.297-8.066-2.26-1.259-3.906-2.828-7.766-4.598-2.782-1.275-7.323-3.2486-9.651-2.9668-0.736 0.0444-1.515 0.2025-2.259 0.4394-0.507 0.1317-0.98 0.3422-1.531 0.5877-0.63 0.2807-1.182 0.5257-1.847 0.7277-0.394 0.176-0.823 0.272-1.208 0.255-0.464 0.018-0.954-0.236-1.331-0.445-1.357-0.7173-2.715-1.4342-4.072-2.1511 0.227 0.0874 0.569 0.2185 0.796 0.3058 1.822 0.6991 3.608 1.3193 5.464 1.2479 0.385 0.0173 0.814-0.0793 1.094-0.2984 0.079-0.0351 0.158-0.0702 0.123-0.1489 0.323-0.3329 0.279-1.0683-0.141-1.1643-0.167-0.5864-0.719-1.1901-1.087-1.5925-3.031-2.9919-6.141-5.9487-9.216-8.8267-0.333-0.3237-0.666-0.6474-1.157-0.9009-0.49-0.2536-0.91-0.3495-1.409-0.4105-3.599-0.6627-7.434-1.2202-11.023-0.3771-0.078 0.0351-0.157 0.0702-0.236 0.1052 0 0 0.035 0.0788 0.07 0.1576-0.271 0.0264-0.499-0.0609-0.77-0.0345-1.821 0.1502-3.606 1.2283-5.12 2.28-1.277 1.1258-1.804 1.7507-1.843 2.3592-0.043 0.6908-0.194 3.0388 1.016 4.0498 0.56 0.4111 1.756 0.3972 1.967 0.6362 0.074 0.0844 0.283 1.6247-0.249 0.3695 0.608 0.0382 6.405 2.3886 10.643 2.5781 0.385 0.0173 0.849-6e-4 1.278-0.0972 0.271-0.0265 0.507-0.1317 0.709-0.3157 0.078-0.0351 0.122-0.1489 0.166-0.2628 0.043-0.1138-0.07-0.1575-0.106-0.2363-1.954-2.9051-4.451-5.7572-4.83-9.3639 0.149 0.1225 0.184 0.2012 0.333 0.3237 0.035 0.0787 0.149 0.1224 0.219 0.28 1.244 1.5224 2.121 3.4915 3.531 4.7512 0.631 0.5685 1.341 1.1021 1.77 1.8547 0.535 0.9888 0.588 2.3808 1.324 3.1857 0.368 0.4024 0.894 0.7347 1.349 0.9095 1.253 0.4807 2.671 0.6987 3.88 1.2927 0.604 0.297 1.2 0.787 1.804 1.084 0.114 0.044 0.149 0.123 0.263 0.167 1.357 0.716 5.784 4.098 7.325 4.167-1.348-0.061-5.513-3.276-6.869-3.144 1.279 1.602 2.523 3.124 3.96 4.655-1.419-1.067-2.715-2.283-3.89-3.648-0.587-0.682-1.174-1.365-1.883-1.898-1.384-0.988-3.468-1.004-4.456 0.38-0.123 0.148-0.245 0.297-0.254 0.49-0.428 0.946-0.401 2.066-0.409 3.108 0.134 3.055 0.39 5.962 0.716 9.026 0.247 2.25 0.572 4.464 1.563 6.477 0.07 0.158 0.219 0.28 0.377 0.21-0.411 0.56-0.21 1.226 0.15 1.821 0.28 0.63 0.719 1.19 1.078 1.785 0.324 0.516 0.649 1.032 0.973 1.549 1.551 2.424 3.181 4.812 5.013 7.017-1.157-0.901-2.226-2.029-3.014-3.377-0.614-0.954-1.07-1.978-1.727-2.817-0.692-0.919-1.63-1.54-2.322-2.459-0.289-0.437-0.614-0.954-0.981-1.356-0.166 1.112-0.253 2.189-0.418 3.301-0.08-0.814-0.159-1.629-0.238-2.443-0.071-1.006-0.221-1.978-0.37-2.95-0.51-2.416-1.834-4.752-1.993-7.23 9e-3 -0.192 0.017-0.385 0.026-0.577 0.149 0.122 0.219 0.28 0.368 0.402 0.044-0.114-0.027-0.271 0.017-0.385 0.174-2.154-0.073-4.404-0.442-6.505-0.264-1.864-0.599-3.886-1.851-5.216-0.368-0.402-0.815-0.77-1.183-1.172-0.368-0.403-0.57-1.068-0.43-1.6021-2.548 0.0019-5.387 0.4701-7.358-1.2003-1.525-1.3033-3.603-1.0189-3.811-2.5593 0.57 0.6467-0.97 0.8554-2.149 0.1704s-1.63-6.0159-0.712-7.5574c0.875-1.4276 2.274-2.523 3.762-2.9968l0.158-0.0702c-2.225-1.1802-4.563-2.4042-6.656-3.926-0.596-0.4898-1.271-0.9445-1.665-1.6183-0.404-1.3305-0.37-2.9501-0.301-4.491z" fill="#5c5a5a" style=""/>
<path d="m309.14 96.278c0.814-0.0794 1.251-0.2731 2.048 0.0328 1.594 0.6116 1.95 1.2592 3.456 2.0986 1.699 0.8479 2.603 0.9356 4.52 1.2143 0.998 0.1219 1.961 0.1649 2.889 0.1292-0.227 0.7617 1.243 1.9767 1.795 2.5807s1.262 1.137 1.499 1.881c0.272 0.823 0.08 1.663 0.08 2.513 0.036 0.928 0.343 1.829 0.571 2.766 0.378 1.908 0.1 3.825-0.293 5.699-0.035-0.079-0.035-0.079-0.07-0.157 0.173-2.154-0.073-4.404-0.443-6.505-0.264-1.864-0.598-3.886-1.851-5.216-0.368-0.403-0.815-0.77-1.182-1.172-0.368-0.403-1.497-1.487-1.358-2.021-2.547 2e-3 -4.36 0.414-6.332-1.2568-1.524-1.3034-2.071-1.206-3.928-1.9838-0.298-0.2449-0.867-0.4634-1.401-0.603z" fill="#8b8b8b" style=""/>
<path d="m318.6 88.15c0.149 0.1225 0.184 0.2012 0.333 0.3237 0.035 0.0788 0.149 0.1225 0.219 0.28 0.035 0.0788 0.035 0.0788 0.035 0.0788 0.167 0.5864 0.333 1.1728 0.693 1.7679 0.21 0.4726 0.535 0.9889 0.824 1.4264 1.227 1.9076 2.926 3.6048 3.716 5.8016-0.551 0.2455-1.103 0.4911-1.645 0.544 0.271-0.0265 0.507-0.1317 0.708-0.3157 0.079-0.0351 0.123-0.1489 0.167-0.2627 0.043-0.1139-0.071-0.1576-0.106-0.2363-2.147-2.9138-4.565-5.801-4.944-9.4077z" fill="#8b8b8b" style=""/>
<path d="m328.43 101.51c0.63-0.281 1.444-0.36 2.171-0.212s1.48 0.568 2.242 0.795c0.114 0.044 0.149 0.122 0.263 0.166 1.357 0.717 5.255 3.727 6.796 3.796-1.348-0.06-4.983-2.904-6.34-2.772 1.279 1.601 2.712 3.173 4.148 4.704-1.419-1.067-2.903-2.332-4.078-3.697-0.587-0.683-1.174-1.365-1.883-1.899-1.384-0.988-3.468-1.004-4.456 0.38-0.122 0.149-0.245 0.298-0.254 0.49 0.096-0.42 0.228-0.761 0.472-1.059 0.167-0.263 0.525-0.517 0.919-0.692z" fill="#8b8b8b" style=""/>
<path d="m325.05 114.74c0.648 0.184 1.157 0.901 1.288 1.409 0.229 0.936 0.378 1.908 0.563 2.958 0.193 0.858 0.307 1.751 0.579 2.574 0.72 2.039 2.069 3.798 3.585 5.294 0 0 0.035 0.079 0.114 0.043 1.551 2.424 3.181 4.813 5.013 7.018-1.157-0.901-2.226-2.029-3.014-3.377-0.614-0.954-1.07-1.978-1.727-2.818-0.692-0.919-1.63-1.539-2.322-2.458-0.289-0.438-0.613-0.954-0.981-1.356-0.166 1.112-0.253 2.188-0.418 3.3-0.08-0.814-0.159-1.628-0.238-2.442-0.071-1.007-0.221-1.978-0.37-2.95-0.702-2.425-1.912-4.717-2.072-7.195z" fill="#8b8b8b" style=""/>
<path d="m303.34 75.498c0.097 0.4289 0.15 0.9717 0.325 1.3655 0.08 0.8141 0.203 1.5144 0.632 2.267 0.5 0.9101 1.236 1.715 1.981 2.3273 1.34 1.1021 2.89 1.8276 4.44 2.5531 0.718 0.3409 1.393 0.7956 1.708 1.5045-0.113-0.0437-0.113-0.0437-0.227-0.0874 0.078-0.035 0.078-0.035 0.157-0.0701-2.224-1.1803-4.563-2.4042-6.656-3.926-0.596-0.4898-1.27-0.9445-1.665-1.6184-0.797-1.155-0.763-2.7746-0.695-4.3155z" fill="#8b8b8b" style=""/>
<path d="m317.69 85.248c0.701-0.123 1.427 0.0253 2.128-0.0978 0.735-0.0443 1.4-0.2462 2.022-0.3342 1.199-0.0621 2.302 0.296 3.423 0.2689 0.657-0.0092 1.392-0.0535 2.084 0.016 1.225 0.2092 2.224 1.1802 3.074 2.0288 3.215 3.1931 6.396 6.3074 9.611 9.5005 0.517 0.5249 1.139 1.2861 0.798 2.0043-0.166 0.2627-0.446 0.4818-0.682 0.587 0.078-0.0351 0.157-0.0701 0.122-0.1489 0.324-0.3329 0.279-1.0683-0.141-1.1643-0.167-0.5864-0.719-1.1901-1.087-1.5925-3.031-2.9919-6.141-5.9487-9.216-8.8267-0.333-0.3237-0.666-0.6474-1.156-0.9009-0.491-0.2535-0.911-0.3495-1.41-0.4104-3.599-0.6627-7.434-1.2202-11.023-0.3771-0.078 0.035-0.157 0.0701-0.236 0.1052 0 0 0.035 0.0787 0.07 0.1575-0.271 0.0265-0.499-0.0609-0.77-0.0344 0.788-0.3508 1.575-0.7016 2.389-0.781z" fill="#8b8b8b" style=""/>
<path d="m335.01 82.82c1.208-0.2547 2.461 0.2259 3.678 0.6277 0.114 0.0437 0.114 0.0437 0.227 0.0874 2.733 1.8977 5.545 3.7604 8.523 5.3603-3.004-1.0221-5.912-2.4645-8.732-4.1345-0.639-0.376-1.2-0.7871-1.962-1.0141-1.786-0.6203-3.747 0.064-5.558 0.8708 0.28-0.2191 0.752-0.4296 0.91-0.4997 0.473-0.2105 0.866-0.3859 1.339-0.5963 0.481-0.4031 0.954-0.6136 1.575-0.7016z" fill="#8b8b8b" style=""/>
<path d="m333.26 98.691c0.227 0.0874 0.569 0.2184 0.797 0.3058 0.035 0.0788 0.148 0.1225 0.148 0.1225 0.64 0.376 1.279 0.7519 1.884 1.0489 1.252 0.481 2.222 0.66 3.474 0.292 0.665-0.202 1.712-0.9747 2.342-1.2553 1.811-0.8068 3.821-0.4968 5.721-0.682 1.707-0.1939 5.111 2.5363 6.898 3.2603 1.787 0.723 2.072 1.046 3.282 1.746 1.939 1.122 1.962 1.014 2.943 1.522 1.322 0.638 1.982 0.731 2.468 2.236-0.019 2-2.543 4.469-2.562 6.476 0.855 1.151 1.489 0.526 2.942 0.822 0.762 0.228 1.524 0.455 2.163 0.831 1.543 1.767 3.006 3.569 4.513 5.258-0.867-0.464-1.647-1.155-2.348-1.881-0.92-1.006-1.56-2.231-2.725-2.939-1.313-0.831-2.977-0.751-4.544-1.091-2.487-0.497 3.386-7.404 1.126-8.663-2.259-1.259-3.784-2.466-6.332-2.465-2.433 0.046-7.692-4.6047-10.021-4.3228-0.735 0.0443-1.514 0.2025-2.258 0.4394-0.508 0.1317-0.981 0.3424-1.532 0.5874-0.63 0.281-1.181 0.526-1.847 0.728-0.393 0.176-0.822 0.272-1.208 0.255-0.464 0.018-0.954-0.236-1.331-0.445-1.357-0.717-2.715-1.4342-3.993-2.1862z" fill="#8b8b8b" style=""/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 76 KiB

422
application/src/main/data/json/system/scada_symbols/horizontal-pipe.svg

@ -0,0 +1,422 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="200" height="200" fill="none" version="1.1" viewBox="0 0 200 200">
<tb:metadata xmlns=""><![CDATA[{
"title": "Horizontal pipe",
"description": "Horizontal pipe with fluid and leak visualizations.",
"searchTags": [
"pipe",
"horizontal pipe"
],
"widgetSizeX": 1,
"widgetSizeY": 1,
"tags": [
{
"tag": "fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\nvar flow = ctx.values.flow;\nvar flowDirection = ctx.values.flowDirection;\n\nvar elementFluid = element.remember('fluid');\nvar elementFlow = null;\nvar elementFlowDirection = null;\n\nif (fluid !== elementFluid) {\n element.remember('fluid', fluid);\n elementFlow = null;\n elementFlowDirection = null;\n} else {\n elementFlow = element.remember('flow');\n elementFlowDirection = element.remember('flowDirection');\n}\n\nvar liquidPattern = ctx.svg.defs().findOne('pattern#liquid');\nif (liquidPattern) {\n liquidPattern.id(ctx.api.generateElementId());\n element.fill(liquidPattern);\n} else {\n liquidPattern = element.reference('fill');\n}\n\nif (fluid) {\n element.show();\n if (flow !== elementFlow) {\n element.remember('flow', flow);\n if (flow) {\n element.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n } else {\n if (liquidPattern) {\n ctx.api.resetAnimation(liquidPattern);\n }\n }\n } else if (flow && elementFlowDirection !== flowDirection) {\n element.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n }\n if (flow && liquidPattern) {\n liquidPattern.timeline().speed(ctx.values.flowAnimationSpeed);\n }\n} else {\n if (liquidPattern) {\n ctx.api.resetAnimation(liquidPattern);\n }\n element.hide();\n}\n\nfunction animateFlow(liquidPattern, forwardElseReverse) {\n if (liquidPattern) {\n ctx.api.resetAnimation(liquidPattern);\n var deltaX = forwardElseReverse ? 172 : -172;\n liquidPattern.animate(1000).ease('-').relative(deltaX, 0).loop();\n }\n}",
"actions": null
},
{
"tag": "fluid-background",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.fluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
}
],
"behavior": [
{
"id": "fluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": null,
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "fluidColor",
"name": "{i18n:scada.symbol.fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata>
<path d="m186 136h-172v-72h172z" fill="#fff" tb:tag="pipe-background"/><path d="m186 136h-172v-72h172z" fill="url(#paint0_linear_955_27716)"/><g stroke-width="3">
<path d="m184.5 134.5h-169v-69h169z" stroke="#000" stroke-opacity=".12"/>
<rect transform="scale(-1)" x="-198.5" y="-148.5" width="11.286" height="97" rx="5.6429" fill="#d9d9d9" stroke="#727171"/>
<rect transform="scale(-1)" x="-12.5" y="-148.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171"/>
</g><defs>
<linearGradient id="paint0_linear_955_27716" x1="48.475" x2="48.475" y1="136" y2="64" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<pattern id="liquid" width="172" height="72" patternTransform="translate(14,-8)" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<linearGradient id="paint28_linear_1182_32781-5" x1="19.316" x2="21" y1="8.2632" y2="23" gradientTransform="translate(-36 6)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint29_linear_1182_32781-1" x1="148.32" x2="150" y1="8.2632" y2="23" gradientTransform="translate(-165,135)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint30_linear_1182_32781-7" x1="111.32" x2="113" y1="9.2632" y2="24" gradientTransform="translate(-129 97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint31_linear_1182_32781-4" x1="32.316" x2="34" y1="51.263" y2="66" gradientTransform="translate(-92 -24)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint32_linear_1182_32781-3" x1="153.32" x2="155" y1="51.263" y2="66" gradientTransform="translate(-213 97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint33_linear_1182_32781-1" x1="31.947" x2="33" y1="21.789" y2="31" gradientTransform="translate(-59 7)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint34_linear_1182_32781-4" x1="160.95" x2="162" y1="21.789" y2="31" gradientTransform="translate(-188,136)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint35_linear_1182_32781-6" x1="3.9474" x2="5" y1="32.79" y2="42" gradientTransform="translate(-42 -32)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint36_linear_1182_32781-9" x1="93.158" x2="94" y1="4.6316" y2="12" gradientTransform="translate(-102,86)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint37_linear_1182_32781-4" x1="71.158" x2="72" y1="56.632" y2="64" gradientTransform="translate(-132 12)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint38_linear_1182_32781-2" x1="110.95" x2="112" y1="32.79" y2="42" gradientTransform="translate(-149 75)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint39_linear_1182_32781-2" x1="57.947" x2="59" y1="34.79" y2="44" gradientTransform="translate(-98 20)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint40_linear_1182_32781-6" x1="113.95" x2="115" y1="57.79" y2="67" gradientTransform="translate(-177 53)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint41_linear_1182_32781-4" x1="137.95" x2="139" y1="37.79" y2="47" gradientTransform="translate(-181 97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint42_linear_1182_32781-1" x1="74.947" x2="76" y1="16.789" y2="26" gradientTransform="translate(-97 55)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint43_linear_1182_32781-2" x1="125.97" x2="126.5" y1="48.395" y2="53" gradientTransform="translate(-177 76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint44_linear_1182_32781-8" x1="168.97" x2="169.5" y1="44.395" y2="49" gradientTransform="translate(-216,123)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint45_linear_1182_32781-8" x1="56.974" x2="57.5" y1="7.3947" y2="12" gradientTransform="translate(-67 48)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint46_linear_1182_32781-9" x1="95.974" x2="96.5" y1="33.395" y2="38" gradientTransform="translate(-132 61)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint47_linear_1182_32781-2" x1="90.974" x2="91.5" y1="21.395" y2="26" gradientTransform="translate(-115 68)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint48_linear_1182_32781-88" x1="21.974" x2="22.5" y1="38.395" y2="43" gradientTransform="translate(-63 -18)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint49_linear_1182_32781-8" x1="123.97" x2="124.5" y1="21.395" y2="26" gradientTransform="translate(-148,101)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint50_linear_1182_32781-6" x1="85.974" x2="86.5" y1="45.395" y2="50" gradientTransform="translate(-134 39)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint51_linear_1182_32781-8" x1="50.974" x2="51.5" y1="19.395" y2="24" gradientTransform="translate(-73 30)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint52_linear_1182_32781-3" x1="47.974" x2="48.5" y1="49.395" y2="54" gradientTransform="translate(-100 -3)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint53_linear_1182_32781-83" x1="13.158" x2="14" y1="60.632" y2="68" gradientTransform="translate(-78 -50)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint54_linear_1182_32781-33" x1="134.16" x2="135" y1="60.632" y2="68" gradientTransform="translate(-199 71)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint55_linear_1182_32781-8" x1="93.5" x2="95.5" y1="50.5" y2="68" gradientTransform="translate(-154 37)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint84_linear_1182_32781-8" x1="248" x2="248" y1="1.8513e-7" y2="72" gradientTransform="scale(.33333 1)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" offset=".10895"/>
<stop stop-color="#fff" stop-opacity="0" offset=".11331"/>
<stop stop-color="#fff" stop-opacity="0" offset=".88736"/>
<stop stop-color="#727171" offset=".89138"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
</defs><rect x="14" y="64" width="172" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><rect x="14" y="64" width="172" height="72" fill="url(#liquid)" stroke-width="0" style="display: none;" tb:tag="fluid"/><g transform="translate(5.0806 -.22515)" style="display: none;" tb:tag="leak">
<path d="m34.253 100.01c0.5162 0.38 1.0932 0.926 1.6625 1.191 1.6625 1.191 3.6513 1.98 5.617 1.926 0.8955-0.136 1.8442-0.387 2.6789-0.691 2.2843-0.737 4.5155-1.36 6.7467-1.983 2.0111-0.448 4.2423-1.0713 5.3196-2.7869-0.1747-0.2201-0.2354-0.387-0.41-0.6071 3.1037-1.6023 5.7289-4.2595 7.671-7.2353 1.3504-2.004 2.3515-4.4482 4.2789-5.906 0.6601-0.5239 1.381-0.8808 1.9881-1.2909 1.0471-0.7592 1.9804-1.5716 2.7391-2.604 0.5994-0.6909 1.0241-1.6018 1.5096-2.3457 1.4035-2.1179 3.0347-4.1297 5.0683-5.8152-0.2579 0.8501-0.5156 1.7002-0.7734 2.5504 0 0 0.1823 0.5008 0.1215 0.3339-0.2808 0.0077-0.4401 0.3492-0.4324 0.63 1.0094-0.0837 2.0188-0.1675 2.9143-0.3044 4.8193-0.5251 9.6917-1.1641 14.496-2.2508-4.2801 1.7469-8.8563 2.9398-13.554 3.7988-1.0625 0.1977-2.0719 0.2815-3.1267 0.7599-2.5575 1.0254-4.0594 3.6519-5.2806 6.2707l-0.0531 0.1138c-0.1062 0.2278-0.2655 0.5694-0.0909 0.7894 0.1216 0.3339 0.6301 0.4324 1.0248 0.4778 2.0265 0.1133 3.9999 0.3404 5.9733 0.5675 2.4819 0.3256 4.8045 0.9928 7.3396 1.2046 2.2542 0.2194 4.5007 0.1581 6.6334 0.0436 1.0094-0.0838 1.9657-0.0537 2.8536-0.4714 1.0017-0.3646 1.8288-0.9493 2.5952-1.7009 0.9863-0.9262 1.9193-1.7386 2.7923-2.7179 5.076-5.5344 20.298-6.8695 24.508-13.223-1.38 2.9604-2.928 5.9816-4.308 8.942 3.824-1.9593 8.128-2.8637 12.484-3.882 1.229-0.2585 2.459-0.5169 3.68-1.0561 1.002-0.3646 1.996-1.01 2.823-1.5947 1.655-1.1693 3.248-2.5055 3.984-4.3804-0.304 1.2448-0.834 2.3834-1.426 3.3551 0.394 0.0454 0.903 0.1439 1.298 0.1893 3.385 0.4696 6.717 1.053 9.988 1.4695-1.396 0.3192-2.914 0.3044-4.379 0.1758-1.973-0.2271-3.848-0.9627-5.806-0.6282-2.239 0.3422-3.992 2.02-6.041 3.1439-3.21 1.8301-7.073 2.3853-10.761 3.1605-3.688 0.7753-6.999 0.6235-12.935 2.3663-4.278 1.256-11.158 3.4266-13.449 5.9623-0.767 0.7516-1.472 1.6701-2.064 2.6418-0.4326 0.6301-0.7511 1.3132-1.1228 2.1103-0.4247 0.9108-0.7964 1.7079-1.335 2.5657-0.2655 0.5693-0.6448 1.0855-1.0849 1.4348-0.4932 0.4631-1.2749 0.6531-1.8896 0.7823-2.1781 0.5091-4.3562 1.0183-6.5343 1.5274 0.3339-0.1215 0.8348-0.3038 1.1687-0.4254 2.6713-0.9722 5.2287-1.9976 7.2015-3.8501 0.4401-0.3492 0.8194-0.8654 0.9179-1.374 0.0531-0.1138 0.1062-0.2277-0.0076-0.2808 0.0377-0.6755-0.7139-1.4418-1.2679-1.1457-0.7439-0.4855-1.9279-0.6217-2.7173-0.7126-6.1933-0.3928-12.44-0.6718-18.572-0.8977-0.6755-0.0377-1.351-0.0755-2.1326 0.1145-0.7817 0.19-1.3357 0.4861-1.9427 0.8961-4.591 2.7109-9.3413 5.7634-12.482 10.121-0.0531 0.1139-0.1062 0.2277-0.1593 0.3416 0 0 0.1138 0.0531 0.2277 0.1062-0.2731 0.288-0.607 0.41-0.8802 0.698-1.8589 1.906-2.7916 4.798-3.4511 7.401-0.3281 2.459-0.3109 3.65 0.2287 4.356 0.6125 0.801 2.6907 3.528 4.9877 3.483 1.0094-0.084 2.3108-1.242 2.7709-1.18 0.1625 0.022 1.8643 1.516 0.0794 0.644 0.7057-0.539 9.3274-3.495 14.168-7.337 0.4401-0.35 0.9333-0.813 1.3126-1.329 0.2732-0.288 0.4325-0.63 0.4779-1.025 0.0531-0.113-0.0077-0.28-0.0684-0.447-0.0608-0.167-0.2278-0.107-0.3416-0.16-4.9261-1.326-10.398-2.076-14.263-5.6801 0.2809-0.0077 0.3947 0.0454 0.6755 0.0377 0.1139 0.0531 0.2808-0.0077 0.5086 0.0985 2.8235 0.4849 5.67 1.8119 8.4251 1.8499 1.2371 0.022 2.5273-0.07 3.719 0.348 1.5333 0.576 2.9227 2.056 4.5014 2.237 0.7894 0.091 1.6849-0.046 2.3527-0.289 1.8365-0.668 3.6046-1.785 5.5019-2.286 0.9486-0.251 2.0719-0.281 3.0205-0.532 0.167-0.061 0.2809-8e-3 0.4478-0.069 2.1781-0.509 10.278-1.0219 12.04-2.4189-1.541 1.2224-9.1936 1.667-10.559 3.1099 2.9374 0.538 5.7609 1.023 8.8043 1.333-2.58 0.183-5.1684 0.085-7.7642-0.294-1.2979-0.189-2.5958-0.379-3.886-0.287-2.4666 0.236-4.7733 2.21-4.5373 4.676 0.0077 0.281 0.0154 0.562 0.19 0.782 0.433 1.45 1.5339 2.656 2.5209 3.809 3.0672 3.233 6.1267 6.184 9.414 9.242 2.4216 2.238 4.8966 4.363 7.9106 5.629 0.227 0.106 0.508 0.099 0.614-0.129 0.084 1.009 0.942 1.548 1.906 1.859 0.911 0.425 1.928 0.622 2.892 0.932l2.55 0.774c4.023 1.183 8.099 2.252 12.22 2.926-2.132 0.114-4.386-0.105-6.542-0.833-1.587-0.463-3.067-1.153-4.592-1.448-1.64-0.349-3.264-0.136-4.903-0.485-0.737-0.204-1.587-0.462-2.376-0.553 0.881 1.381 1.815 2.648 2.695 4.029-0.865-0.819-1.731-1.638-2.596-2.458-1.04-1.039-2.133-1.965-3.227-2.891-2.869-2.169-6.5581-3.474-9.1014-6.046-0.1746-0.22-0.3493-0.44-0.5239-0.66 0.2808-8e-3 0.5086 0.098 0.7894 0.091-0.0608-0.167-0.2885-0.273-0.3493-0.44-1.8678-2.535-4.2896-4.773-6.7037-6.73-2.0725-1.799-4.3727-3.703-7.0216-3.968-0.7894-0.091-1.6318-0.068-2.4212-0.158-0.7894-0.091-1.6471-0.63-2.0041-1.351-2.7999 2.437-5.4747 5.667-9.2392 5.713-2.922 0.024-4.9354 2.323-6.6372 0.828 1.2453 0.166-0.2492 1.868-2.2002 2.242-1.951 0.373-7.5425-5.058-8.0062-7.631-0.403-2.406 0.0896-4.949 1.273-6.892l0.1062-0.228c-3.5745 0.828-7.316 1.718-11.073 2.045-1.1233 0.031-2.2996 0.175-3.3775-0.189-1.7156-1.077-3.2264-2.89-4.6235-4.651z" fill="#5c5a5a" style=""/>
<g fill="#8b8b8b" style="">
<path d="m60.493 117.31c0.8195-0.865 1.1148-1.496 2.2835-1.921 2.3374-0.851 3.3482-0.479 5.8071-0.996 2.679-0.691 3.756-1.458 6.1312-2.985 1.2141-0.82 2.3143-1.693 3.3007-2.619 0.4785 1.055 3.2567 0.986 4.4408 1.122 1.184 0.136 2.4742 0.045 3.4459 0.637 1.0855 0.644 1.6778 1.752 2.4902 2.686 0.9262 0.986 2.1256 1.684 3.2719 2.496 2.2395 1.737 3.7657 4.112 5.125 6.548-0.1139-0.053-0.1139-0.053-0.2277-0.106-1.8678-2.535-4.2896-4.773-6.7037-6.73-2.0726-1.798-4.3728-3.703-7.0217-3.968-0.7893-0.09-1.6318-0.067-2.4211-0.158-0.7894-0.091-3.0668-0.204-3.4237-0.925-2.7999 2.437-4.4002 4.623-8.1647 4.67-2.9221 0.023-3.4312 0.654-6.2164 1.573-0.5616 0.016-1.3964 0.319-2.1173 0.676z" style=""/>
<path d="m63.131 99.331c0.2809-0.0077 0.3947 0.0454 0.6755 0.0377 0.1139 0.0531 0.2808-0.0077 0.5086 0.0985l0.1138 0.0531c0.744 0.4857 1.4879 0.9707 2.4519 1.2817 0.6832 0.319 1.5333 0.577 2.2695 0.781 3.1728 0.925 6.6642 1.167 9.6322 2.828-0.3716 0.797-0.7433 1.595-1.2896 2.172 0.2732-0.289 0.4324-0.631 0.4779-1.025 0.0531-0.114-0.0077-0.281-0.0685-0.448-0.0607-0.167-0.2277-0.106-0.3416-0.159-5.1461-1.152-10.565-2.016-14.43-5.62z" style=""/>
<path d="m86.705 104.64c0.4247-0.911 1.2442-1.777 2.1851-2.308 0.941-0.532 2.1705-0.79 3.2253-1.269 0.1669-0.06 0.2808-7e-3 0.4478-0.068 2.1781-0.509 9.3419-0.924 11.102-2.321-1.54 1.2224-8.256 1.569-9.6217 3.011 2.9373 0.538 6.0157 0.898 9.0587 1.208-2.58 0.183-5.4229 0.21-8.0186-0.168-1.2979-0.19-2.5958-0.379-3.8861-0.288-2.4665 0.236-4.7732 2.21-4.5372 4.677 0.0077 0.281 0.0153 0.562 0.1899 0.782-0.2961-0.554-0.4784-1.055-0.4938-1.617-0.0684-0.447 0.0832-1.07 0.3487-1.639z" style=""/>
<path d="m95.641 122.41c0.8879-0.418 2.1327-0.115 2.7628 0.318 1.1463 0.811 2.2399 1.737 3.4469 2.716 1.032 0.758 2.011 1.631 3.097 2.276 2.74 1.555 5.905 2.199 9.002 2.395 0 0 0.114 0.053 0.167-0.06 4.023 1.182 8.099 2.251 12.22 2.926-2.132 0.114-4.387-0.105-6.542-0.833-1.587-0.463-3.067-1.153-4.593-1.449-1.639-0.348-3.263-0.135-4.903-0.484-0.736-0.205-1.586-0.462-2.375-0.553 0.88 1.381 1.814 2.648 2.695 4.029-0.865-0.819-1.731-1.639-2.596-2.458-1.04-1.04-2.134-1.965-3.227-2.891-3.089-1.995-6.6114-3.36-9.1547-5.932z" style=""/>
<path d="m34.254 100.01c0.5162 0.379 1.0932 0.926 1.6625 1.191 0.8655 0.82 1.6702 1.472 2.8619 1.889 1.4194 0.524 2.9981 0.705 4.4022 0.667 2.5274-0.069 4.9255-0.753 7.3237-1.437 1.1156-0.311 2.2919-0.456 3.3167 0.022-0.167 0.061-0.167 0.061-0.3339 0.122l0.1062-0.228c-3.5745 0.828-7.316 1.717-11.073 2.045-1.1233 0.03-2.2997 0.175-3.3775-0.189-1.9811-0.508-3.4919-2.321-4.889-4.082z" style=""/>
<path d="m59.351 97.017c0.6525-0.8047 1.5935-1.3363 2.246-2.141 0.7663-0.7516 1.3049-1.6094 1.9043-2.3002 1.2595-1.2148 2.8152-1.8755 4.0217-2.9764 0.7132-0.6377 1.4796-1.3893 2.3067-1.974 1.548-0.9416 3.5745-0.8283 5.3201-0.7074 6.588 0.4383 13.062 0.8234 19.65 1.2617 1.0701 0.0831 2.4819 0.3256 2.7934 1.4412 0.0684 0.4478-0.0301 0.9563-0.1894 1.2979 0.0531-0.1139 0.1062-0.2277-0.0076-0.2808 0.0377-0.6755-0.7139-1.4419-1.2678-1.1457-0.744-0.4855-1.928-0.6218-2.7174-0.7126-6.1933-0.3929-12.44-0.6718-18.572-0.8977-0.6755-0.0378-1.351-0.0755-2.1326 0.1145-0.7817 0.1899-1.3357 0.4861-1.9427 0.8961-4.591 2.7109-9.3413 5.7634-12.482 10.121-0.0531 0.1138-0.1062 0.2277-0.1593 0.3415 0 0 0.1139 0.0531 0.2277 0.1062-0.2731 0.2885-0.607 0.4101-0.8802 0.6982 0.531-1.1383 1.0619-2.2769 1.8813-3.1423z" style=""/>
<path d="m76.081 77.786c1.0849-1.4348 2.9214-2.1032 4.6441-2.8247 0.1669-0.0608 0.1669-0.0608 0.3339-0.1216 4.8193-0.5251 9.6917-1.164 14.496-2.2508-4.2801 1.7469-8.8564 2.9399-13.554 3.7989-1.0625 0.1976-2.0719 0.2814-3.1268 0.7599-2.5574 1.0253-4.0594 3.6518-5.2805 6.2706 0.0985-0.5085 0.417-1.1917 0.5232-1.4194 0.3186-0.6832 0.5841-1.2525 0.9026-1.9357 0.144-0.9032 0.4625-1.5863 1.0619-2.2772z" style=""/>
<path d="m89.324 96.916c0.334-0.1215 0.8348-0.3038 1.1687-0.4253 0.1139 0.0531 0.2808-0.0077 0.2808-0.0077 1.0625-0.1977 2.125-0.3953 3.0737-0.646 1.8365-0.6685 3.0748-1.3986 4.099-3.0004 0.5386-0.8578 0.9515-2.7078 1.3763-3.6187 1.2208-2.6188 3.7278-4.199 5.6398-6.2184 1.692-1.8448 8.045-2.0951 10.702-3.0081 2.657-0.9129 3.279-0.8298 5.279-1.2162 3.204-0.6191 3.127-0.7599 4.69-1.1398 2.064-0.5623 3.832-1.6785 5.896-2.2407 1.397-0.3192 2.915-0.3045 4.197-0.6768 2.178-0.5091 3.992-2.02 5.874-3.0831 1.055-0.4785 2.11-0.9569 3.172-1.1546 3.385 0.4696 6.717 1.053 9.989 1.4695-1.397 0.3191-2.915 0.3044-4.38 0.1758-1.973-0.2271-3.848-0.9627-5.806-0.6282-2.239 0.3422-3.992 2.02-6.04 3.1439-3.21 1.8301-7.073 2.3853-10.762 3.1605-3.688 0.7752-6.519 0.9046-9.319 3.3417-2.633 2.3764-12.862 2.2885-15.153 4.8241-0.767 0.7517-1.472 1.6702-2.064 2.6419-0.432 0.6301-0.751 1.3132-1.123 2.1102-0.4243 0.9109-0.7959 1.708-1.3346 2.5658-0.2654 0.5693-0.6448 1.0855-1.0849 1.4347-0.4931 0.4632-1.2748 0.6531-1.8896 0.7823-2.1781 0.5092-4.3562 1.0183-6.4812 1.4136z" style=""/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 31 KiB

300
application/src/main/data/json/system/scada_symbols/horizontal-wheel-valve.svg

@ -0,0 +1,300 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="400" height="200" fill="none" version="1.1" viewBox="0 0 400 200">
<tb:metadata xmlns=""><![CDATA[{
"title": "Horizontal wheel valve",
"description": "Horizontal wheel valve with open/close animation and state colors.",
"searchTags": [
"valve",
"wheel"
],
"widgetSizeX": 2,
"widgetSizeY": 1,
"tags": [
{
"tag": "background",
"stateRenderFunction": "var opened = ctx.values.opened;\nvar openAnimate = element.remember('openAnimate');\nvar color = opened ? ctx.properties.openedColor : ctx.properties.closedColor;\nif (!openAnimate) {\n element.attr({fill: color});\n} else {\n ctx.api.animate(element, 500).attr({fill: color});\n element.remember('openAnimate', false);\n}\n",
"actions": null
},
{
"tag": "clickArea",
"stateRenderFunction": null,
"actions": {
"click": {
"actionFunction": " ctx.tags.wheel.forEach(e => {\n e.remember('openAnimate', true);\n });\n ctx.tags.background.forEach(e => {\n e.remember('openAnimate', true);\n });\n\n\nvar opened = ctx.values.opened;\nvar action = opened ? 'close' : 'open';\n\nctx.api.callAction(event, action, undefined, {\n next: () => {\n ctx.api.setValue('opened', !opened);\n }\n});"
}
}
},
{
"tag": "wheel",
"stateRenderFunction": "var opened = ctx.values.opened;\nvar openAnimate = element.remember('openAnimate');\nvar angle = opened ? ctx.properties.openedRotationAngle : ctx.properties.closedRotationAngle;\nif (!openAnimate) {\n element.transform({rotate: angle});\n} else {\n ctx.api.animate(element, 500).transform({rotate: angle});\n element.remember('openAnimate', false);\n}\n",
"actions": null
}
],
"behavior": [
{
"id": "opened",
"name": "{i18n:scada.symbol.opened}",
"hint": "{i18n:scada.symbol.opened-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.opened}",
"defaultGetValueSettings": {
"action": "GET_ATTRIBUTE",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": "SHARED_SCOPE",
"key": "open"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "open",
"name": "{i18n:scada.symbol.open}",
"hint": "{i18n:scada.symbol.open-hint}",
"group": null,
"type": "action",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": {
"action": "SET_ATTRIBUTE",
"executeRpc": {
"method": "setState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"setAttribute": {
"scope": "SHARED_SCOPE",
"key": "open"
},
"putTimeSeries": {
"key": "state"
},
"valueToData": {
"type": "CONSTANT",
"constantValue": true,
"valueToDataFunction": "/* Convert input boolean value to RPC parameters or attribute/time-series value */\nreturn value;"
}
},
"defaultWidgetActionSettings": null
},
{
"id": "close",
"name": "{i18n:scada.symbol.close}",
"hint": "{i18n:scada.symbol.close-hint}",
"group": null,
"type": "action",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": {
"action": "SET_ATTRIBUTE",
"executeRpc": {
"method": "setState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"setAttribute": {
"scope": "SHARED_SCOPE",
"key": "open"
},
"putTimeSeries": {
"key": "state"
},
"valueToData": {
"type": "CONSTANT",
"constantValue": false,
"valueToDataFunction": "/* Convert input boolean value to RPC parameters or attribute/time-series value */\nreturn value;"
}
},
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "openedColor",
"name": "{i18n:scada.symbol.opened-color}",
"type": "color",
"default": "#1C943E",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "closedColor",
"name": "{i18n:scada.symbol.closed-color}",
"type": "color",
"default": "#696969",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "openedRotationAngle",
"name": "{i18n:scada.symbol.opened-rotation-angle}",
"type": "number",
"default": 0,
"required": true,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": -179,
"max": 179,
"step": null
},
{
"id": "closedRotationAngle",
"name": "{i18n:scada.symbol.closed-rotation-angle}",
"type": "number",
"default": 90,
"required": true,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": -179,
"max": 179,
"step": null
}
]
}]]></tb:metadata><path d="m200 29.489c-28.161 0-44.15 0.82311-72 5-28.662 4.2988-72 17-72 17v-13.99c0-4.4182-3.5817-8-8-8h-26c-4.4183 0-8 3.5818-8 8v126c0 4.418 3.5817 8 8 8h26c4.4183 0 8-3.582 8-8v-14.01s43.238 12.711 72 17c27.834 4.151 43.859 5.195 72 5 28.16-0.19499 44.15-1.823 72-6 28.663-4.299 72-16 72-16v14.01c0 4.418 3.582 8 8 8h26c4.418 0 8-3.582 8-8v-126c0-4.4182-3.582-8-8-8h-26c-4.418 0-8 3.5818-8 8v13.99s-43.337-12.701-72-17c-27.85-4.1769-43.839-5-72-5z" fill="#1c943e" tb:tag="background"/><rect x="1.5" y="52.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/><rect x="14" y="30" width="42" height="142" rx="8" fill="url(#paint0_linear_1343_53957)" style="fill:url(#paint0_linear_1343_53957)"/><rect x="15.5" y="31.5" width="39" height="139" rx="6.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/><path d="m56 51.988s43.338-12.701 72-17c27.85-4.1769 43.839-5 72-5s44.15 0.8231 72 5c28.663 4.2988 72 17 72 17v98s-43.337 11.701-72 16c-27.85 4.177-43.84 5.806-72 6-28.141 0.195-44.166-0.849-72-5-28.762-4.289-72-17-72-17z" fill="url(#paint1_linear_1343_53957)" style="fill:url(#paint1_linear_1343_53957)"/><path d="m341.67 52.876c0.314 0.09 0.591 0.1699 0.831 0.239v95.722c-0.233 0.062-0.501 0.133-0.802 0.212-1.238 0.328-3.04 0.801-5.292 1.382-4.505 1.163-10.809 2.758-18.008 4.487-14.409 3.46-32.357 7.448-46.62 9.587-27.798 4.169-43.715 5.789-71.788 5.983-28.068 0.194-44.015-0.844-71.769-4.983-14.3-2.133-32.237-6.366-46.632-10.078-7.1905-1.854-13.484-3.574-17.98-4.83-2.2476-0.629-4.0454-1.141-5.2807-1.496-0.3128-0.09-0.5896-0.17-0.8284-0.239v-95.747c0.2396-0.0691 0.5174-0.149 0.8314-0.239 1.2379-0.3548 3.0393-0.8668 5.2909-1.4947 4.5034-1.2558 10.806-2.9751 18.003-4.8284 14.408-3.7103 32.345-7.9439 46.596-10.081 27.761-4.1635 43.674-4.9834 71.778-4.9834s44.017 0.8199 71.778 4.9834c14.251 2.1374 32.189 6.371 46.596 10.081 7.197 1.8533 13.5 3.5726 18.004 4.8284 2.251 0.6279 4.053 1.1399 5.291 1.4947z" stroke="#000" stroke-opacity=".12" stroke-width="3"/><rect x="344" y="30" width="42" height="142" rx="8" fill="url(#paint2_linear_1343_53957)" style="fill:url(#paint2_linear_1343_53957)"/><rect x="345.5" y="31.5" width="39" height="139" rx="6.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/><rect x="387.5" y="52.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/><g tb:tag="wheel">
<path d="m300 100c0 55.229-44.772 100-100 100s-100-44.771-100-100c0-55.228 44.772-100 100-100s100 44.772 100 100zm-175.01 0c0 41.428 33.584 75.012 75.012 75.012s75.012-33.584 75.012-75.012-33.584-75.012-75.012-75.012-75.012 33.584-75.012 75.012z" fill="url(#paint3_radial_1343_53957)" style="fill:url(#paint3_radial_1343_53957)"/>
<path d="m194.12 74.998c-1.726 0-3.125-1.3991-3.125-3.125v-46.625c0-3.4517 2.798-6.2499 6.25-6.2499h5.5c3.452 0 6.25 2.7982 6.25 6.2499v46.625c0 1.7259-1.399 3.125-3.125 3.125z" fill="url(#paint4_linear_1343_53957)" style="fill:url(#paint4_linear_1343_53957)"/>
<path d="m222.98 88.918c-0.612-1.6137 0.2-3.418 1.814-4.0301l43.595-16.534c3.227-1.2241 6.836 0.3999 8.06 3.6273l2.217 5.8439c1.224 3.2274-0.4 6.8361-3.628 8.0602l-43.595 16.535c-1.613 0.612-3.418-0.2-4.03-1.814l-4.433-11.688z" fill="url(#paint5_linear_1343_53957)" style="fill:url(#paint5_linear_1343_53957)"/>
<path d="m190.37 125.55c1.37 1.05 1.63 3.012 0.58 4.382l-28.362 37.006c-2.1 2.74-6.023 3.259-8.762 1.159l-4.961-3.802c-2.74-2.099-3.259-6.022-1.159-8.762l28.362-37.007c1.05-1.37 3.011-1.629 4.381-0.579z" fill="url(#paint6_linear_1343_53957)" style="fill:url(#paint6_linear_1343_53957)"/>
<path d="m211.85 125.55c-1.37 1.05-1.63 3.012-0.58 4.382l28.362 37.006c2.1 2.74 6.023 3.259 8.762 1.159l4.961-3.802c2.74-2.099 3.259-6.022 1.159-8.762l-28.362-37.007c-1.05-1.37-3.011-1.629-4.381-0.579z" fill="url(#paint7_linear_1343_53957)" style="fill:url(#paint7_linear_1343_53957)"/>
<path d="m173.44 97.473c-0.506 1.6506-2.253 2.5776-3.903 2.0716l-44.578-13.664c-3.3-1.0116-5.156-4.507-4.144-7.8072l1.832-5.9756c1.011-3.3002 4.507-5.1555 7.807-4.1439l44.578 13.664c1.65 0.5058 2.577 2.2535 2.072 3.9036l-3.664 11.951z" fill="url(#paint8_linear_1343_53957)" style="fill:url(#paint8_linear_1343_53957)"/>
</g><g filter="url(#filter0_ii_1343_53957)">
<circle cx="200" cy="100.99" r="30" fill="#d9d9d9"/>
</g><path d="m223 100.99c0 12.703-10.297 23-23 23s-23-10.297-23-23c0-12.702 10.297-23 23-23s23 10.297 23 23z" fill="#000" fill-opacity=".05"/><g filter="url(#filter1_i_1343_53957)">
<path d="m223 101c0 12.703-10.297 23-23 23s-23-10.297-23-23c0-12.702 10.297-23 23-23s23 10.298 23 23z" fill="#1c943e" tb:tag="background"/>
</g><path d="m222 101c0 12.15-9.85 22-22 22s-22-9.85-22-22 9.85-22 22-22 22 9.8497 22 22z" stroke="#fff" stroke-width="2"/><path d="m197.28 91.614c0-0.647-0.611-1.1214-1.216-0.8901-4.132 1.5826-7.067 5.5867-7.067 10.276 0 6.075 4.925 11 11 11s11-4.925 11-11c0-4.5645-2.78-8.4795-6.739-10.144-0.609-0.2563-1.244 0.2209-1.244 0.882 0 0.4223 0.269 0.7938 0.655 0.9649 3.181 1.4097 5.399 4.5944 5.399 8.2976 0 5.01-4.061 9.071-9.071 9.071s-9.071-4.061-9.071-9.071c0-3.8069 2.344-7.0659 5.668-8.4119 0.402-0.1627 0.686-0.5409 0.686-0.9745z" clip-rule="evenodd" fill="#fff" fill-rule="evenodd"/><path d="m199.51 88.637c0-0.3519 0.285-0.6372 0.637-0.6372s0.637 0.2853 0.637 0.6372v10.401c0 0.3519-0.285 0.6372-0.637 0.6372s-0.637-0.2853-0.637-0.6372z" fill="#fff"/><defs>
<filter id="filter0_ii_1343_53957" x="166.88" y="67.863" width="66.25" height="66.25" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset dx="3.12497" dy="-3.12497"/>
<feGaussianBlur stdDeviation="3.12497"/>
<feComposite in2="hardAlpha" k2="-1" k3="1" operator="arithmetic"/>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0"/>
<feBlend in2="shape" result="effect1_innerShadow_1343_53957"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset dx="-3.12497" dy="3.12497"/>
<feGaussianBlur stdDeviation="3.12497"/>
<feComposite in2="hardAlpha" k2="-1" k3="1" operator="arithmetic"/>
<feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.5 0"/>
<feBlend in2="effect1_innerShadow_1343_53957" result="effect2_innerShadow_1343_53957"/>
</filter>
<filter id="filter1_i_1343_53957" x="172" y="78" width="51" height="51" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset dx="-5" dy="5"/>
<feGaussianBlur stdDeviation="4"/>
<feComposite in2="hardAlpha" k2="-1" k3="1" operator="arithmetic"/>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0"/>
<feBlend in2="shape" result="effect1_innerShadow_1343_53957"/>
</filter>
<linearGradient id="paint0_linear_1343_53957" x1="24.92" x2="21.891" y1="30" y2="171.95" gradientUnits="userSpaceOnUse">
<stop stop-color="#020202" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".18316"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".35085"/>
<stop stop-color="#fff" stop-opacity=".25" offset=".49829"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".64825"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".82318"/>
<stop stop-color="#020202" stop-opacity=".35" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1343_53957" x1="130.88" x2="130.44" y1="29.988" y2="172.02" gradientUnits="userSpaceOnUse">
<stop stop-color="#020202" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".18316"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".35085"/>
<stop stop-color="#fff" stop-opacity=".25" offset=".49829"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".64825"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".82318"/>
<stop stop-color="#020202" stop-opacity=".35" offset="1"/>
</linearGradient>
<linearGradient id="paint2_linear_1343_53957" x1="354.92" x2="351.89" y1="30" y2="171.95" gradientUnits="userSpaceOnUse">
<stop stop-color="#020202" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".18316"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".35085"/>
<stop stop-color="#fff" stop-opacity=".25" offset=".49829"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".64825"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".82318"/>
<stop stop-color="#020202" stop-opacity=".35" offset="1"/>
</linearGradient>
<radialGradient id="paint3_radial_1343_53957" cx="0" cy="0" r="1" gradientTransform="matrix(0,100,-100,0,200,100)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" offset=".75112"/>
<stop stop-color="#fff" offset=".87301"/>
<stop stop-color="#727171" offset="1"/>
</radialGradient>
<linearGradient id="paint4_linear_1343_53957" x1="191" x2="209" y1="44.877" y2="44.877" gradientTransform="translate(0 -.99)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint5_linear_1343_53957" x1="250.96" x2="257.61" y1="75.954" y2="93.485" gradientTransform="translate(0 -.99)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint6_linear_1343_53957" x1="173.92" x2="159.04" y1="153.14" y2="141.73" gradientTransform="translate(0 -.99)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint7_linear_1343_53957" x1="228.3" x2="243.18" y1="153.14" y2="141.73" gradientTransform="translate(0 -.99)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint8_linear_1343_53957" x1="142.78" x2="148.28" y1="92.333" y2="74.407" gradientTransform="translate(0 -.99)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
</defs><rect x="100" width="200" height="200" fill="#000" fill-opacity="0" stroke-width="0" tb:tag="clickArea"/>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

558
application/src/main/data/json/system/scada_symbols/left-bottom-elbow-pipe.svg

@ -0,0 +1,558 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" fill="none" version="1.1" viewBox="0 0 200 200"><tb:metadata xmlns=""><![CDATA[{
"title": "Left bottom elbow pipe",
"description": "Left bottom elbow pipe with fluid and leak visualizations.",
"searchTags": [
"pipe",
"elbow"
],
"widgetSizeX": 1,
"widgetSizeY": 1,
"stateRenderFunction": "var centerLiquidPattern = prepareLiquidPattern('center-liquid', 'center-fluid-background');\nvar horizontalLiquidPattern = prepareLiquidPattern('horizontal-liquid', 'horizontal-fluid');\n\ncenterLiquidPattern.attr({'xlink:href': '#'+horizontalLiquidPattern.id()});\n\nvar verticalLiquidPattern = prepareLiquidPattern('vertical-liquid', 'vertical-fluid');\n\nvar fluid = ctx.values.fluid && !ctx.values.leak;\nvar flow = ctx.values.flow;\nvar flowDirection = ctx.values.flowDirection;\nvar flowAnimationSpeed = ctx.values.flowAnimationSpeed;\n \nif (horizontalLiquidPattern) {\n updateLiquidPatternAnimation(horizontalLiquidPattern, fluid, \n flow, flowDirection, flowAnimationSpeed, false);\n}\n\nif (verticalLiquidPattern) {\n updateLiquidPatternAnimation(verticalLiquidPattern, fluid, \n flow, flowDirection, flowAnimationSpeed, false);\n}\n\nif (centerLiquidPattern) {\n updateLiquidPatternAnimation(centerLiquidPattern, fluid, \n flow, flowDirection, flowAnimationSpeed, true);\n}\n\nfunction prepareLiquidPattern(patternId, fluidElementTag) {\n var liquidPattern = ctx.svg.defs().findOne('pattern#'+patternId);\n var fluidElements = ctx.tags[fluidElementTag];\n\n if (liquidPattern) {\n liquidPattern.id(ctx.api.generateElementId());\n for (var i=0;i<fluidElements.length;i++) {\n fluidElements[i].fill(liquidPattern);\n }\n } else {\n liquidPattern = fluidElements[0].reference('fill');\n }\n return liquidPattern;\n}\n\nfunction updateLiquidPatternAnimation(liquidPattern, fluid, flow, flowDirection, flowAnimationSpeed, center) {\n var elementFluid = liquidPattern.remember('fluid');\n var elementFlow = null;\n var elementFlowDirection = null;\n \n if (fluid !== elementFluid) {\n liquidPattern.remember('fluid', fluid);\n elementFlow = null;\n elementFlowDirection = null;\n } else {\n elementFlow = liquidPattern.remember('flow');\n elementFlowDirection = liquidPattern.remember('flowDirection');\n }\n \n if (fluid) {\n if (flow !== elementFlow) {\n liquidPattern.remember('flow', flow);\n if (flow) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection, center);\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n } else if (flow && elementFlowDirection !== flowDirection) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection, center);\n }\n if (flow && liquidPattern) {\n liquidPattern.timeline().speed(flowAnimationSpeed);\n }\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n}\n\nfunction animateFlow(liquidPattern, forwardElseReverse, center) {\n ctx.api.resetAnimation(liquidPattern);\n var deltaX = forwardElseReverse ? 172 : -172;\n if (center) {\n var delta = deltaX * 1.17 * Math.cos(45*Math.PI/180);\n liquidPattern.animate(1000).ease('-').relative(-delta, delta).loop();\n } else {\n liquidPattern.animate(1000).ease('-').relative(deltaX, 0).loop();\n }\n}\n\n",
"tags": [
{
"tag": "center-fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}\n",
"actions": null
},
{
"tag": "fluid-background",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.fluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "horizontal-fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}\n",
"actions": null
},
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
},
{
"tag": "vertical-fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}\n",
"actions": null
}
],
"behavior": [
{
"id": "fluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": null,
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "fluidColor",
"name": "{i18n:scada.symbol.fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata>
<g clip-path="url(#clip0_1245_66459)">
<rect x="14" y="64" width="50" height="72" fill="#fff" tb:tag="pipe-background"/>
<rect x="14" y="64" width="50" height="72" fill="url(#paint0_linear_1245_66459)" style="fill:url(#paint0_linear_1245_66459)"/>
<rect x="15.5" y="65.5" width="47" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m64 186v-50h72v50z" fill="#fff" tb:tag="pipe-background"/>
<path d="m64 186v-50h72v50z" fill="url(#paint1_linear_1245_66459)" style="fill:url(#paint1_linear_1245_66459)"/>
<path d="m65.5 184.5v-47h69v47z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect x="1.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<rect transform="rotate(-90,51.5,198.5)" x="51.5" y="198.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<path d="m64 64s30.518 1.7177 50.4 21.6c19.882 19.882 21.6 50.4 21.6 50.4h-72z" fill="#fff" tb:tag="pipe-background"/>
<path d="m64 64s30.518 1.7177 50.4 21.6c19.882 19.882 21.6 50.4 21.6 50.4h-72z" fill="url(#paint2_linear_1245_66459)" style="fill:url(#paint2_linear_1245_66459)"/>
<path d="m65.5 134.5v-68.865c0.8334 0.0861 1.9717 0.2211 3.3584 0.4273 3.1196 0.464 7.4889 1.2873 12.47 2.7228 9.9828 2.8767 22.316 8.1809 32.01 17.875 9.695 9.6942 14.999 22.027 17.875 32.01 1.436 4.982 2.259 9.351 2.723 12.471 0.206 1.386 0.341 2.525 0.428 3.358z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
</g><defs>
<pattern id="horizontal-liquid" width="172" height="72" patternTransform="translate(14,-8)" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<linearGradient id="paint28_linear_1182_32781-5" x1="19.316" x2="21" y1="8.2632" y2="23" gradientTransform="translate(-36,6)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint29_linear_1182_32781-1" x1="148.32" x2="150" y1="8.2632" y2="23" gradientTransform="translate(-165,135)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint30_linear_1182_32781-7" x1="111.32" x2="113" y1="9.2632" y2="24" gradientTransform="translate(-129,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint31_linear_1182_32781-4" x1="32.316" x2="34" y1="51.263" y2="66" gradientTransform="translate(-92,-24)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint32_linear_1182_32781-3" x1="153.32" x2="155" y1="51.263" y2="66" gradientTransform="translate(-213,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint33_linear_1182_32781-1" x1="31.947" x2="33" y1="21.789" y2="31" gradientTransform="translate(-59,7)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint34_linear_1182_32781-4" x1="160.95" x2="162" y1="21.789" y2="31" gradientTransform="translate(-188,136)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint35_linear_1182_32781-6" x1="3.9474" x2="5" y1="32.79" y2="42" gradientTransform="translate(-42,-32)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint36_linear_1182_32781-9" x1="93.158" x2="94" y1="4.6316" y2="12" gradientTransform="translate(-102,86)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint37_linear_1182_32781-4" x1="71.158" x2="72" y1="56.632" y2="64" gradientTransform="translate(-132,12)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint38_linear_1182_32781-2" x1="110.95" x2="112" y1="32.79" y2="42" gradientTransform="translate(-149,75)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint39_linear_1182_32781-2" x1="57.947" x2="59" y1="34.79" y2="44" gradientTransform="translate(-98,20)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint40_linear_1182_32781-6" x1="113.95" x2="115" y1="57.79" y2="67" gradientTransform="translate(-177,53)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint41_linear_1182_32781-4" x1="137.95" x2="139" y1="37.79" y2="47" gradientTransform="translate(-181,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint42_linear_1182_32781-1" x1="74.947" x2="76" y1="16.789" y2="26" gradientTransform="translate(-97,55)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint43_linear_1182_32781-2" x1="125.97" x2="126.5" y1="48.395" y2="53" gradientTransform="translate(-177,76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint44_linear_1182_32781-8" x1="168.97" x2="169.5" y1="44.395" y2="49" gradientTransform="translate(-216,123)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint45_linear_1182_32781-8" x1="56.974" x2="57.5" y1="7.3947" y2="12" gradientTransform="translate(-67,48)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint46_linear_1182_32781-9" x1="95.974" x2="96.5" y1="33.395" y2="38" gradientTransform="translate(-132,61)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint47_linear_1182_32781-2" x1="90.974" x2="91.5" y1="21.395" y2="26" gradientTransform="translate(-115,68)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint48_linear_1182_32781-88" x1="21.974" x2="22.5" y1="38.395" y2="43" gradientTransform="translate(-63,-18)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint49_linear_1182_32781-8" x1="123.97" x2="124.5" y1="21.395" y2="26" gradientTransform="translate(-148,101)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint50_linear_1182_32781-6" x1="85.974" x2="86.5" y1="45.395" y2="50" gradientTransform="translate(-134,39)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint51_linear_1182_32781-8" x1="50.974" x2="51.5" y1="19.395" y2="24" gradientTransform="translate(-73,30)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint52_linear_1182_32781-3" x1="47.974" x2="48.5" y1="49.395" y2="54" gradientTransform="translate(-100,-3)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint53_linear_1182_32781-83" x1="13.158" x2="14" y1="60.632" y2="68" gradientTransform="translate(-78,-50)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint54_linear_1182_32781-33" x1="134.16" x2="135" y1="60.632" y2="68" gradientTransform="translate(-199,71)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint55_linear_1182_32781-8" x1="93.5" x2="95.5" y1="50.5" y2="68" gradientTransform="translate(-154,37)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint84_linear_1182_32781-8" x1="248" x2="248" y1="1.8513e-7" y2="72" gradientTransform="scale(.33333 1)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" offset=".10895"/>
<stop stop-color="#fff" stop-opacity="0" offset=".11331"/>
<stop stop-color="#fff" stop-opacity="0" offset=".88736"/>
<stop stop-color="#727171" offset=".89138"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<pattern id="vertical-liquid" width="172" height="72" patternTransform="translate(14,8)" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<clipPath id="clip0_1245_66459">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<linearGradient id="paint0_linear_1245_66459" x1="27" x2="26.346" y1="64" y2="136" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1245_66459" x1="64" x2="136" y1="173" y2="173.65" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint2_linear_1245_66459" x1="114" x2="64.321" y1="89" y2="136.34" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".35637"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".4903"/>
<stop stop-color="#fff" stop-opacity="0" offset=".56651"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".63374"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".75781"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<clipPath id="clipPath4310">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4304">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4298">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4292">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4286">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4280">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4274">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4268">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4262">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4256">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4250">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4244">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4238">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4232">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4226">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4220">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4214">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4208">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<pattern id="center-liquid" patternTransform="scale(1.17) rotate(-45)" patternUnits="userSpaceOnUse" xlink:href="#horizontal-liquid"/>
</defs><rect x="14" y="64" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><rect transform="rotate(90)" x="136" y="-136" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><rect x="14" y="64" width="50" height="72" fill="url(#horizontal-liquid)" stroke-width="0" style="display: none;" tb:tag="horizontal-fluid"/><rect transform="rotate(90)" x="136" y="-136" width="50" height="72" fill="url(#vertical-liquid)" stroke-width="0" style="display: none;" tb:tag="vertical-fluid"/><path d="m64 136.15-0.1-72.05c0.87135 0.09 2.1615 0.23117 3.6113 0.44675 3.2616 0.48513 7.8299 1.3459 13.038 2.8468 10.437 3.0077 23.332 8.5533 33.468 18.689 10.136 10.136 15.682 23.03 18.689 33.467 1.5014 5.2088 2.3619 9.7767 2.847 13.039 0.21538 1.4491 0.35652 2.6909 0.44748 3.5618z" fill="#1ec1f4" stroke="#000" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><g transform="matrix(0 -.99929 .99918 0 .25495 199.91)" style="display: none;" tb:tag="center-fluid">
<path d="m63.856 63.897 72.051-0.10008c-0.0901 0.87205-0.23133 2.1632-0.44707 3.6142-0.48547 3.2643-1.3469 7.8362-2.8488 13.048-3.0098 10.446-8.5594 23.351-18.702 33.495-10.143 10.145-23.046 15.695-33.491 18.704-5.2125 1.5026-9.7836 2.3638-13.048 2.8493-1.4501 0.21555-2.7428 0.3568-3.6144 0.44784z" fill="url(#center-liquid)" stroke="#000" stroke-width="0" style="" tb:tag="center-fluid-background"/>
<path d="m132.06 63.6s-0.0216 31.824-17.622 50.677c-17.228 18.043-50.883 17.636-50.883 17.636" fill="none" stroke="#727171" stroke-width="7.9" style=""/>
<path d="m63.955 63.797v-0.20016h7.8565v8.1064h-8.1567v-7.9062z" style="fill: rgb(114, 113, 113); stroke-width: 1.0035;"/>
</g><g transform="translate(-1e-4,3e-4)" style="display: none;" tb:tag="leak">
<path d="m62.784 80.767c0.417 0.1391 0.9517 0.2463 1.3259 0.4603 1.326 0.4603 2.5556 1.2628 3.3039 2.386 0.2779 0.5563 0.5129 1.1873 0.6731 1.7756 0.4915 1.5723 1.0257 3.0697 1.5599 4.5672 0.545 1.3049 1.0792 2.8023 0.544 4.0855-0.1925-0.0107-0.3101 0.0213-0.5026 0.0105 0.3307 2.3744 2.2423 0.7354 6.5024 7.0127 2.2452 8.828 4.8752 21.579 4.8212 23.236-0.0323 0.578 0.0531 1.123 0.0636 1.626-0.011 0.887-0.0969 1.732-0.3752 2.566-0.1499 0.61-0.4924 1.209-0.7172 1.775-0.6315 1.626-1.1134 3.337-1.253 5.144 0.3745-0.481 0.749-0.962 1.1234-1.443 0 0 0.353-0.096 0.2353-0.064-0.1069-0.161 0.0216-0.385 0.182-0.492 0.3527 0.599 0.7055 1.198 0.9833 1.754 1.6139 2.91 3.185 5.894 4.478 9.017-0.7155-3.091-1.8588-6.128-3.2374-9.102-0.3099-0.674-0.6626-1.273-0.8121-2.054-0.4378-1.839 0.4398-3.721 1.4243-5.443l0.0428-0.075c0.0856-0.149 0.214-0.374 0.4065-0.363 0.2354-0.064 0.4919 0.182 0.6737 0.385 0.8659 1.091 1.7746 2.108 2.6833 3.124 1.1653 1.262 2.459 2.3 3.5814 3.637 1.0156 1.177 1.8708 2.461 2.6511 3.702 0.3527 0.599 0.7482 1.123 0.8656 1.786 0.1923 0.706 0.192 1.401 0.0742 2.128-0.1287 0.92-0.2146 1.765-0.4181 2.642-1.0925 5.036 4.1863 14.098 2.2917 18.974 1.1129-1.946 2.1938-4.009 3.3067-5.955 0.4161 2.919 1.6132 5.69 2.7672 8.535 0.342 0.791 0.684 1.583 0.865 2.481 0.192 0.706 0.224 1.519 0.224 2.214 0 1.391-0.119 2.813-0.878 3.968 0.577-0.663 1.006-1.412 1.316-2.128 0.182 0.203 0.438 0.449 0.62 0.652 1.604 1.712 3.25 3.349 4.779 5.018-0.374-0.909-0.984-1.754-1.636-2.525-0.908-1.016-2.063-1.776-2.651-3.006-0.695-1.39-0.448-3.037-0.629-4.631-0.245-2.524-1.464-4.909-2.49-7.284-1.026-2.374-2.4215-4.17-3.795-8.188-0.9898-2.895-2.4972-7.611-1.9831-9.9 0.1179-0.727 0.3534-1.486 0.6638-2.203 0.182-0.492 0.4389-0.941 0.7385-1.465 0.3424-0.599 0.642-1.123 0.9096-1.764 0.2141-0.374 0.3532-0.791 0.3748-1.176 0.0643-0.46-0.1387-0.974-0.3097-1.369-0.577-1.423-1.1541-2.846-1.7311-4.268 0.0641 0.235 0.1602 0.588 0.2243 0.823 0.5127 1.883 0.9506 3.722 0.6933 5.562-0.0216 0.385-0.1607 0.802-0.4068 1.058-0.0428 0.075-0.0856 0.15-0.1605 0.107-0.3637 0.289-1.0909 0.171-1.1442-0.257-0.5668-0.224-1.112-0.834-1.4754-1.241-2.6726-3.316-5.3023-6.707-7.8572-10.055-0.2886-0.364-0.5773-0.728-0.7803-1.241-0.203-0.514-0.2563-0.942-0.2669-1.444-0.2982-3.647-2.4962-15.905-3.458-18.422-1.5388-4.028-0.5464-4.267-2.5593-5.9434 0.0535-0.2674-6.9427-5.6276-6.8891-5.8949 0.3322-1.7966 1.584-3.4646 2.7823-4.8651 1.2483-1.1574 5.2035 1.7887 5.8127 1.8117 0.6917 0.0262 13.721 15.05 14.606 16.356 0.3527 0.599 0.2189 1.786 0.4355 2.02 0.0765 0.083 1.5882 0.445 0.3927-0.21-0.023 0.609 1.7337 6.612 1.497 10.847-0.0216 0.385-0.0859 0.845-0.2251 1.262-0.0535 0.268-0.1819 0.492-0.3852 0.674-0.0428 0.075-0.1605 0.107-0.2781 0.139-0.1177 0.032-0.1497-0.086-0.2246-0.129-2.6943-2.236-5.2814-5.006-8.8318-5.746 0.1069 0.161 0.1817 0.204 0.2886 0.364 0.0749 0.043 0.1069 0.161 0.2566 0.246 1.3898 1.391 3.261 2.461 4.3728 3.991 0.5024 0.684 0.962 1.444 1.6677 1.947 0.9302 0.631 2.3097 0.824 3.0367 1.637 0.3635 0.407 0.6414 0.963 0.7695 1.433 0.3525 1.295 0.4269 2.728 0.897 3.99 0.2351 0.631 0.6627 1.273 0.8974 1.904 0.032 0.118 0.107 0.16 0.139 0.278 0.577 1.423 3.497 6.167 3.411 7.707 0.075-1.348-2.706-5.814-2.438-7.151 1.465 1.434 2.855 2.825 4.234 4.408-0.919-1.519-1.999-2.931-3.239-4.236-0.62-0.653-1.24-1.305-1.7-2.065-0.8443-1.476-0.6511-3.551 0.825-4.395 0.161-0.107 0.321-0.214 0.513-0.203 0.985-0.331 2.097-0.192 3.134-0.095 3.027 0.439 5.893 0.986 8.908 1.618 2.214 0.471 4.385 1.017 6.288 2.205 0.15 0.086 0.257 0.246 0.171 0.396 0.599-0.353 1.241-0.085 1.797 0.332 0.598 0.342 1.111 0.835 1.667 1.252 0.482 0.374 0.963 0.749 1.444 1.123 2.256 1.787 4.469 3.649 6.479 5.692-0.78-1.241-1.796-2.418-3.058-3.338-0.887-0.706-1.86-1.262-2.63-2.001-0.844-0.781-1.368-1.775-2.213-2.556-0.406-0.332-0.887-0.707-1.251-1.113 1.123-0.053 2.203-0.031 3.326-0.084-0.802-0.161-1.604-0.322-2.406-0.483-0.994-0.171-1.946-0.417-2.898-0.664-2.352-0.749-4.544-2.301-6.993-2.708-0.193-0.011-0.385-0.021-0.578-0.032 0.107 0.16 0.257 0.246 0.364 0.406-0.118 0.033-0.268-0.053-0.385-0.021-2.161-0.044-4.374-0.515-6.427-1.093-1.829-0.45-3.807-0.985-5.005-2.365-0.363-0.407-0.684-0.888-1.047-1.295-0.364-0.406-1.0054-0.674-1.5508-0.589 0.2575-2.534 1.0086-5.312-0.4558-7.441-1.1438-1.647-0.6523-3.686-2.1639-4.048 0.5862 0.632 0.9484-0.88 0.3852-2.121-0.5632-1.242-11.812-19.078-21.406-19.814-1.5082 0.7267-2.7386 2.0097-3.3594 3.4425-0.0428 0.0749-0.0428 0.0749-0.0856 0.1497-0.951-2.3317-1.9341-4.7812-3.2381-7.0168-0.4275-0.6418-0.8123-1.3585-1.4431-1.8186-1.2832-0.5352-2.898-0.6641-4.438-0.7501z" clip-path="url(#clipPath4310)" fill="#5c5a5a" style=""/>
<path d="m96.836 106.97c-0.1607 0.802-0.3972 1.217-0.1729 2.041 0.4486 1.647 1.0572 2.066 1.7411 3.649 0.6732 1.776 0.6698 2.683 0.7546 4.619 0.0211 1.005-0.0327 1.968-0.1614 2.887 0.7808-0.149 1.8421 1.436 2.3871 2.046 0.545 0.609 1.005 1.369 1.722 1.679 0.791 0.353 1.646 0.247 2.491 0.333 0.92 0.128 1.786 0.524 2.695 0.845 1.861 0.568 3.797 0.483 5.7 0.28-0.075-0.042-0.075-0.042-0.149-0.085-2.161-0.044-4.374-0.515-6.428-1.093-1.828-0.45-3.807-0.985-5.004-2.365-0.363-0.407-0.684-0.888-1.048-1.295-0.363-0.406-1.328-1.638-1.8737-1.553 0.2575-2.534 0.8497-4.297-0.615-6.426-1.1437-1.647-0.9919-2.182-1.5794-4.108-0.2138-0.321-0.374-0.909-0.4594-1.454z" clip-path="url(#clipPath4304)" fill="#8b8b8b" style=""/>
<path d="m87.799 115.57c0.1069 0.161 0.1818 0.204 0.2887 0.364 0.0748 0.043 0.1069 0.161 0.2566 0.246l0.0748 0.043c0.5667 0.225 1.1335 0.449 1.6895 0.867 0.4491 0.257 0.9302 0.631 1.3365 0.963 1.7748 1.412 3.2928 3.273 5.3993 4.279 0.2997-0.523 0.5993-1.047 0.7064-1.582-0.0535 0.267-0.182 0.492-0.3852 0.674-0.0428 0.074-0.1605 0.106-0.2781 0.138-0.1177 0.033-0.1497-0.085-0.2246-0.128-2.6835-2.429-5.3135-5.125-8.8639-5.864z" clip-path="url(#clipPath4298)" fill="#8b8b8b" style=""/>
<path d="m100.11 126.68c-0.3425 0.599-0.5032 1.401-0.4286 2.139s0.4166 1.529 0.5656 2.31c0.032 0.118 0.107 0.16 0.139 0.278 0.577 1.423 3.181 5.603 3.095 7.143 0.076-1.348-2.389-5.25-2.122-6.587 1.465 1.434 2.886 3.017 4.265 4.6-0.92-1.519-2.03-3.123-3.27-4.428-0.62-0.653-1.24-1.305-1.7-2.065-0.8442-1.476-0.651-3.551 0.825-4.395 0.161-0.107 0.321-0.214 0.514-0.203-0.428 0.053-0.781 0.149-1.102 0.363-0.278 0.139-0.567 0.471-0.781 0.845z" clip-path="url(#clipPath4292)" fill="#8b8b8b" style=""/>
<path d="m113.61 124.66c0.117 0.663 0.78 1.241 1.272 1.423 0.909 0.321 1.861 0.567 2.887 0.856 0.834 0.279 1.711 0.482 2.503 0.836 1.956 0.92 3.571 2.439 4.907 4.097 0 0 0.075 0.043 0.032 0.118 2.256 1.787 4.469 3.648 6.479 5.692-0.78-1.241-1.796-2.418-3.057-3.338-0.888-0.706-1.861-1.263-2.631-2.001-0.844-0.781-1.368-1.776-2.213-2.557-0.406-0.331-0.887-0.706-1.25-1.112 1.123-0.053 2.203-0.032 3.326-0.085-0.802-0.16-1.604-0.321-2.407-0.482-0.994-0.171-1.946-0.418-2.898-0.664-2.341-0.942-4.501-2.376-6.95-2.783z" clip-path="url(#clipPath4286)" fill="#8b8b8b" style=""/>
<path d="m75.688 97.084c0.3847 0.2128 0.8909 0.4157 1.2199 0.6943 0.7593 0.3043 1.3971 0.6186 1.9992 1.2417 0.7338 0.7346 1.3003 1.6664 1.6795 2.5524 0.6826 1.596 0.9449 3.287 1.2072 4.978 0.1261 0.785 0.3738 1.56 0.9659 2.062-0.0101-0.122-0.0101-0.122-0.0201-0.243-0.0558 0.065-0.0558 0.065-0.1115 0.131-0.51-2.466-1.0299-5.054-1.9045-7.49-0.3033-0.709-0.551-1.4833-1.0873-2.0507-0.8855-1.0892-2.4498-1.5103-3.9483-1.8757z" clip-path="url(#clipPath4280)" fill="#8b8b8b" style=""/>
<path d="m85.474 114.68c-0.1927 0.685-0.1181 1.423-0.3108 2.107-0.1179 0.727-0.3855 1.369-0.5354 1.979-0.1823 1.187 0.0633 2.32-0.0761 3.433-0.0751 0.652-0.193 1.379-0.1932 2.074 0.0851 1.241 0.951 2.332 1.71 3.263 2.8543 3.519 5.6337 6.996 8.488 10.516 0.4704 0.567 1.1653 1.262 1.914 0.995 0.2781-0.139 0.5242-0.396 0.6526-0.62-0.0428 0.075-0.0856 0.149-0.1605 0.107-0.3637 0.288-1.0909 0.17-1.1442-0.257-0.5667-0.225-1.112-0.835-1.4754-1.242-2.6726-3.316-5.3023-6.707-7.8572-10.055-0.2886-0.364-0.5773-0.728-0.7803-1.241-0.203-0.514-0.2563-0.941-0.2668-1.444-0.2982-3.647-0.468-7.519 0.731-11.005 0.0428-0.074 0.0856-0.149 0.1284-0.224 0 0 0.0748 0.043 0.1497 0.085 0.0535-0.267-0.0105-0.502 0.043-0.77-0.428 0.749-0.8561 1.497-1.0168 2.299z" clip-path="url(#clipPath4274)" fill="#8b8b8b" style=""/>
<path d="m80.849 131.36c-0.3747 1.176-0.0222 2.47 0.2554 3.722 0.0321 0.117 0.0321 0.117 0.0641 0.235 1.6139 2.91 3.185 5.894 4.478 9.017-0.7155-3.091-1.8588-6.128-3.2374-9.102-0.3099-0.674-0.6626-1.273-0.8121-2.054-0.4378-1.839 0.4398-3.721 1.4243-5.443-0.2461 0.257-0.5029 0.706-0.5885 0.856-0.2568 0.449-0.4708 0.823-0.7277 1.272-0.4493 0.438-0.7061 0.887-0.8561 1.497z" clip-path="url(#clipPath4268)" fill="#8b8b8b" style=""/>
<path d="m96.816 131.21c0.064 0.235 0.1602 0.588 0.2243 0.824 0.0748 0.042 0.1069 0.16 0.1069 0.16 0.3099 0.674 0.6198 1.348 0.8548 1.979 0.3525 1.294 0.4336 2.277-0.0588 3.486-0.2676 0.641-1.1412 1.605-1.4836 2.204-0.9845 1.722-0.8778 3.752-1.2528 5.624-0.3642 1.679 2.0111 5.339 2.5513 7.19s0.8333 2.167 1.4085 3.441c0.9213 2.041 0.8121 2.054 1.2183 3.081 0.502 1.379 0.576 2.812 1.079 4.192 0.374 0.909 0.983 1.754 1.282 2.621 0.577 1.422 0.448 3.037 0.597 4.513 0.15 0.781 0.299 1.562 0.609 2.236 1.604 1.711 3.25 3.348 4.779 5.017-0.374-0.909-0.983-1.754-1.635-2.524-0.909-1.017-2.064-1.776-2.652-3.007-0.694-1.39-0.448-3.037-0.629-4.631-0.245-2.524-1.464-4.909-2.489-7.284-1.026-2.374-2.0749-4.012-1.8174-6.547 0.2896-2.417-3.8098-8.116-3.2956-10.405 0.1179-0.727 0.3534-1.486 0.6638-2.202 0.182-0.492 0.4388-0.941 0.7384-1.465 0.3425-0.599 0.6421-1.123 0.9097-1.765 0.214-0.374 0.3532-0.791 0.3747-1.176 0.0643-0.46-0.1387-0.973-0.3097-1.369-0.577-1.423-1.154-2.845-1.7738-4.193z" clip-path="url(#clipPath4262)" fill="#8b8b8b" style=""/>
<path d="m16.279 134.17c0.4279-0.1 0.9702-0.159 1.3623-0.338 1.3624-0.337 2.6599-1.025 3.5072-2.075 0.3273-0.529 0.6188-1.136 0.8318-1.707 0.6324-1.521 1.3006-2.964 1.9688-4.407 0.6613-1.25 1.3295-2.692 0.9133-4.019-0.1927-7e-3 -0.307-0.049-0.4996-0.056 0.5452-2.334 0.3266-4.889-0.3627-7.228-0.4453-1.598-1.2759-3.209-1.179-4.865 0.0204-0.578 0.155-1.113 0.2112-1.613 0.0697-0.885 0.0611-1.734-0.1403-2.59-0.0938-0.62-0.3804-1.248-0.5527-1.833-0.4811-1.676-0.8054-3.424-0.7801-5.2361 0.3292 0.5132 0.6584 1.0264 0.9875 1.5396 0 0 0.3428 0.1278 0.2285 0.0852-0.121 0.1501-0.0135 0.3853 0.1365 0.5063 0.4058-0.5644 0.8115-1.1288 1.1388-1.6575 1.8718-2.7507 3.7078-5.5798 5.2795-8.5725-0.9937 3.0131-2.4085 5.9342-4.0518 8.7701-0.3699 0.6429-0.7756 1.2079-0.9955 1.9709-0.6033 1.793 0.0995 3.747 0.9234 5.551l0.0358 0.078c0.0717 0.157 0.1791 0.392 0.3718 0.399 0.2285 0.085 0.5064-0.137 0.7059-0.322 0.9615-1.008 1.9589-1.938 2.9562-2.867 1.2753-1.151 2.658-2.067 3.8975-3.297 1.1184-1.0795 2.0867-2.28 2.9766-3.4448 0.4057-0.5645 0.8473-1.0505 1.0245-1.7002 0.2557-0.6855 0.3187-1.3778 0.2674-2.1127-0.0445-0.9276-0.0532-1.7767-0.1761-2.6685-0.63-5.1153 5.4511-13.66 4.0078-18.688-0.2735-1.2766 0-2.776 1.7265-1.2764 1.5 2.0004 2 1.9997 5 1.9997 0.4125-0.7572 3.5 2 5 2 1 0.5 0.9415-0.3767 1.0045-1.069 0.126-1.3846 0.1377-2.8118-0.5139-4.0308 0.5151 0.7126 0.8733 1.4969 1.1172 2.2386 0.1995-0.1859 0.4774-0.4076 0.6769-0.5935 1.7526-1.5587 3.5411-3.0391 5.2153-4.562-0.4551 0.8714-1.1388 1.6575-1.8582 2.3653-0.9974 0.9294-2.2165 1.581-2.9137 2.7525-0.8182 1.3217-0.7225 2.9841-1.0479 4.5546-0.4737 2.4913-6.8401-3.4917-8.0776-1.2202-1.2376 2.2714-2.7911 3.9327-4.5243 7.8089-1.249 2.7934-3.1791 7.3531-2.8752 9.6789 0.0513 0.7349 0.2168 1.5124 0.4607 2.2541 0.1365 0.5064 0.3514 0.977 0.6022 1.526 0.2865 0.6275 0.5373 1.1765 0.7454 1.8397 0.1791 0.3922 0.2798 0.8202 0.2662 1.2055 0.0223 0.4638-0.2266 0.957-0.4329 1.335-0.704 1.364-1.408 2.729-2.112 4.093 0.0852-0.229 0.213-0.571 0.2983-0.8 0.6817-1.828 1.2851-3.62 1.1961-5.4753 0.0136-0.3853-0.0871-0.8133-0.3088-1.0912-0.0358-0.0784-0.0716-0.1569-0.1501-0.121-0.3359-0.3206-1.0708-0.2693-1.1628 0.1519-0.5849 0.1723-1.1833 0.73-1.5822 1.1018-2.9631 3.0598-5.8903 6.1978-8.7391 9.2998-0.3205 0.336-0.641 0.672-0.8899 1.164-0.2489 0.493-0.3409 0.914-0.3971 1.414-0.6286 3.605-1.1498 7.445-0.2728 11.026 0.0358 0.078 0.0717 0.156 0.1075 0.235l0.1568-0.072c0.0291 0.271-0.0561 0.5-0.0271 0.771 0.1674 1.819 1.2624 3.594 2.3283 5.098 1.1379 1.266 1.7677 1.788 2.3766 1.82 0.6911 0.037 3.0405 0.166 4.04-1.054 0.4057-0.564 0.3805-1.759 0.6175-1.972 0.0837-0.076 1.622-0.299 0.3719 0.245 0.0324-0.609 2.3279-6.428 2.4772-10.667 0.0136-0.385-0.0086-0.849-0.1093-1.277-0.029-0.271-0.1365-0.506-0.3224-0.706-0.0358-0.078-0.15-0.121-0.2643-0.163-0.1142-0.043-0.1569 0.071-0.2353 0.107-2.8865 1.982-5.7149 4.506-9.3178 4.919 0.1211-0.15 0.1995-0.186 0.3205-0.336 0.0785-0.036 0.1211-0.15 0.2779-0.222 1.5106-1.258 3.4713-2.154 4.7176-3.576 0.5626-0.636 1.0893-1.351 1.8378-1.787 0.9838-0.544 2.3752-0.611 3.1731-1.355 0.3989-0.371 0.7262-0.9 0.8967-1.357 0.4687-1.257 0.6731-2.677 1.256-3.891 0.2915-0.607 0.7757-1.208 1.0672-1.815 0.0426-0.114 0.121-0.15 0.1636-0.264 0.704-1.364 4.0433-5.8234 4.0976-7.3648-0.0475 1.3488-3.2231 5.5438-3.078 6.8988 1.589-1.294 3.0996-2.553 4.6169-4.0042-1.0535 1.4292-2.2572 2.7372-3.6108 3.9242-0.6769 0.593-1.3537 1.187-1.8805 1.901-0.9751 1.394-0.9714 3.477 0.4218 4.452 0.1501 0.122 0.3002 0.243 0.4929 0.249 0.9498 0.42 2.0701 0.382 3.1119 0.38 3.0539-0.162 5.9577-0.446 9.0184-0.801 2.2473-0.268 4.4588-0.615 6.4622-1.624 0.1569-0.072 0.2779-0.222 0.2063-0.379 0.5644 0.406 1.2277 0.198 1.8193-0.167 0.6275-0.287 1.1833-0.73 1.7749-1.095 0.5132-0.329 1.0264-0.659 1.5396-0.988 2.4091-1.574 4.7824-3.227 6.9698-5.079-0.8899 1.165-2.0083 2.244-3.3484 3.046-0.948 0.623-1.9676 1.088-2.8013 1.753-0.9121 0.701-1.5241 1.644-2.4363 2.345-0.4347 0.294-0.9479 0.623-1.3469 0.995 1.1135 0.155 2.1912 0.231 3.3047 0.386-0.8134 0.087-1.6267 0.174-2.4401 0.261-1.006 0.081-1.9762 0.24-2.9464 0.398-2.411 0.533-4.7349 1.878-7.2107 2.061-0.1927-7e-3 -0.3853-0.013-0.578-0.02 0.121-0.15 0.2779-0.222 0.3989-0.372-0.1142-0.043-0.2711 0.029-0.3854-0.014-2.1553-0.153-4.4026 0.115-6.4999 0.505-1.8619 0.281-3.8808 0.634-5.1986 1.9-0.399 0.372-0.7621 0.822-1.161 1.194-0.399 0.371-1.0623 0.58-1.5977 0.445 0.026 2.547 0.5213 5.382-1.1306 7.369-1.2889 1.537-0.9848 3.612-2.5231 3.835 0.6413-0.576 0.8645 0.962 0.1907 2.147s-6.0002 1.687-7.5503 0.783c-1.4359-0.861-2.5445-2.25-3.0324-3.733-0.0358-0.079-0.0358-0.079-0.0716-0.157-1.1591 2.235-2.3609 4.585-3.8628 6.693-0.4842 0.6-0.9325 1.279-1.6026 1.68-1.3265 0.416-2.9464 0.398-4.4878 0.343z" clip-path="url(#clipPath4256)" fill="#5c5a5a" style=""/>
<path d="m37.003 128.18c-0.0871-0.813-0.2849-1.248 0.0134-2.048 0.5966-1.6 1.2408-1.962 2.0658-3.476 0.8319-1.707 0.911-2.611 1.1715-4.531 0.1124-1 0.1464-1.963 0.1019-2.891 0.7639 0.22 1.965-1.261 2.5634-1.819s1.1252-1.272 1.8669-1.516c0.8201-0.28 1.6625-0.096 2.5117-0.105 0.9276-0.044 1.8261-0.36 2.7605-0.597 1.9046-0.396 3.8246-0.135 5.702 0.24-0.0784 0.035-0.0784 0.035-0.1568 0.071-2.1554-0.153-4.4027 0.115-6.4999 0.504-1.862 0.282-3.8808 0.635-5.1987 1.901-0.399 0.371-0.7621 0.822-1.161 1.193-0.399 0.372-1.4722 1.511-2.0077 1.376 0.026 2.548 0.4552 4.357-1.1968 6.344-1.2888 1.537-1.1862 2.083-1.9464 3.947-0.2421 0.3-0.4552 0.871-0.5898 1.407z" clip-path="url(#clipPath4250)" fill="#8b8b8b" style=""/>
<path d="m28.786 118.79c0.121-0.15 0.1995-0.185 0.3205-0.336 0.0784-0.035 0.121-0.15 0.2779-0.221l0.0784-0.036c0.5849-0.172 1.1697-0.345 1.7613-0.71 0.4706-0.215 0.9838-0.544 1.4186-0.837 1.8959-1.245 3.5769-2.961 5.7661-3.771 0.2508 0.549 0.5015 1.098 0.5596 1.64-0.029-0.271-0.1365-0.506-0.3224-0.706-0.0358-0.078-0.1501-0.121-0.2643-0.163-0.1143-0.043-0.1569 0.071-0.2353 0.107-2.8933 2.175-5.7575 4.62-9.3604 5.033z" clip-path="url(#clipPath4244)" fill="#8b8b8b" style=""/>
<path d="m42.054 108.84c-0.2865-0.628-0.3736-1.441-0.2322-2.169s0.5539-1.485 0.7738-2.249c0.0426-0.114 0.121-0.15 0.1636-0.264 0.704-1.365 3.6774-5.2907 3.7318-6.8322-0.0476 1.3488-2.8573 5.0102-2.7122 6.3662 1.589-1.295 3.1477-2.742 4.665-4.1932-1.0536 1.4292-2.3053 2.9262-3.659 4.1132-0.6768 0.593-1.3537 1.187-1.8804 1.901-0.9751 1.393-0.9714 3.477 0.4218 4.452 0.1501 0.121 0.3002 0.242 0.4929 0.249-0.4212-0.092-0.764-0.22-1.0641-0.462-0.2643-0.164-0.5219-0.52-0.701-0.912z" clip-path="url(#clipPath4238)" fill="#8b8b8b" style=""/>
<path d="m55.316 112.09c0.1773-0.65 0.8899-1.165 1.3963-1.302 0.9344-0.237 1.9046-0.396 2.9533-0.59 0.8559-0.202 1.7477-0.324 2.5678-0.604 2.0324-0.739 3.7783-2.105 5.2598-3.635 0 0 0.0784-0.035 0.0426-0.114 2.4091-1.574 4.7824-3.227 6.9698-5.079-0.8899 1.165-2.0083 2.244-3.3484 3.046-0.948 0.623-1.9676 1.088-2.8013 1.753-0.9121 0.701-1.5241 1.644-2.4363 2.345-0.4347 0.294-0.9479 0.623-1.3469 0.995 1.1135 0.155 2.1912 0.231 3.3047 0.386-0.8134 0.087-1.6267 0.174-2.4401 0.261-1.006 0.081-1.9762 0.239-2.9464 0.398-2.4177 0.725-4.699 1.957-7.1749 2.14z" clip-path="url(#clipPath4232)" fill="#8b8b8b" style=""/>
<path d="m16.28 134.17c0.428-0.101 0.9702-0.159 1.3624-0.338 0.8133-0.087 1.5124-0.217 2.2609-0.654 0.9053-0.508 1.7032-1.251 2.3084-2.002 1.0894-1.35 1.8002-2.907 2.511-4.464 0.3341-0.721 0.7824-1.4 1.4883-1.723-0.0426 0.115-0.0426 0.115-0.0852 0.229-0.0358-0.079-0.0358-0.079-0.0716-0.157-1.1592 2.236-2.3609 4.586-3.8628 6.693-0.4842 0.601-0.9325 1.279-1.6026 1.68-1.1474 0.809-2.7673 0.79-4.3088 0.736z" clip-path="url(#clipPath4226)" fill="#8b8b8b" style=""/>
<path d="m25.894 119.74c-0.1297-0.699 0.0117-1.427-0.118-2.126-0.0512-0.735-0.2594-1.398-0.3532-2.019-0.0736-1.199 0.2741-2.305 0.2364-3.425-0.0154-0.657-0.0667-1.392-0.0037-2.084 0.1976-1.228 1.1591-2.236 1.9996-3.094 3.1625-3.245 6.2466-6.455 9.4092-9.6999 0.5199-0.5219 1.2752-1.1512 1.9965-0.8171 0.2644 0.1637 0.4861 0.4416 0.5935 0.6769-0.0358-0.0785-0.0716-0.1569-0.15-0.1211-0.336-0.3205-1.0709-0.2692-1.1629 0.152-0.5848 0.1723-1.1833 0.7299-1.5822 1.1017-2.9631 3.0595-5.8903 6.1975-8.7391 9.2995-0.3205 0.336-0.641 0.672-0.8899 1.165s-0.3409 0.914-0.397 1.413c-0.6287 3.605-1.1498 7.445-0.2728 11.026 0.0358 0.078 0.0716 0.157 0.1074 0.235 0 0 0.0784-0.036 0.1569-0.071 0.029 0.271-0.0562 0.499-0.0272 0.77-0.3582-0.784-0.7164-1.568-0.8035-2.382z" clip-path="url(#clipPath4220)" fill="#8b8b8b" style=""/>
<path d="m23.301 102.44c-0.2662-1.206 0.2025-2.4623 0.5928-3.6832 0.0426-0.1143 0.0426-0.1143 0.0852-0.2285 1.8718-2.7507 3.7078-5.5798 5.2794-8.5726-0.9936 3.0131-2.4084 5.9343-4.0517 8.7702-0.3699 0.6429-0.7756 1.2073-0.9955 1.9711-0.6033 1.792 0.0995 3.746 0.9234 5.55-0.2217-0.278-0.4367-0.748-0.5083-0.905-0.2149-0.471-0.394-0.863-0.6089-1.333-0.4076-0.478-0.6226-0.948-0.7164-1.569z" clip-path="url(#clipPath4214)" fill="#8b8b8b" style=""/>
<path d="m39.188 104.04c0.0852-0.228 0.213-0.571 0.2982-0.799 0.0785-0.036 0.1211-0.151 0.1211-0.151 0.3699-0.642 0.7398-1.285 1.0313-1.892 0.4687-1.2572 0.6388-2.2291 0.2584-3.4772-0.2082-0.6632-0.9905-1.7027-1.277-2.3301-0.8239-1.8039-0.5329-3.8167-0.7361-5.7145-0.21-1.7051 2.4883-5.1344 3.1945-6.9284 0.7063-1.794 1.027-2.0822 1.7156-3.2985 1.1036-1.9492 0.9955-1.9713 1.4933-2.957 0.6255-1.3284 0.7126-1.9891 2.2126-2.4891 2 0 4.493 2.5003 6.5 2.5003 1.1428-0.8663 0.5121-1.4938 0.7949-2.95 0.2199-0.764 0.4397-1.5279 0.8096-2.1708 1.7527-1.5588 3.5411-3.0391 5.2153-4.5621-0.4551 0.8714-1.1387 1.6576-1.8582 2.3653-0.9974 0.9295-2.2164 1.5811-2.9137 2.7526-0.8182 1.3216-0.7225 2.9841-1.0479 4.5546-0.4736 2.4913-7.4351-3.3159-8.6727-1.0445-1.2375 2.2714-2.4308 3.8077-2.4048 6.3552 0.0686 2.4332-4.5321 7.7359-4.2282 10.062 0.0512 0.7349 0.2168 1.5124 0.4607 2.2541 0.1365 0.5064 0.3514 0.977 0.6022 1.526 0.2865 0.6275 0.5373 1.1765 0.7454 1.8397 0.1791 0.3922 0.2798 0.8202 0.2662 1.2055 0.0222 0.4638-0.2266 0.9567-0.4329 1.3352-0.704 1.364-1.408 2.728-2.1478 4.014z" clip-path="url(#clipPath4208)" fill="#8b8b8b" style=""/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 51 KiB

166
application/src/main/data/json/system/scada_symbols/left-drain-pipe.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

181
application/src/main/data/json/system/scada_symbols/left-elbow-drain-pipe.svg

@ -0,0 +1,181 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="400" height="200" fill="none" version="1.1" viewBox="0 0 400 200">
<tb:metadata xmlns=""><![CDATA[{
"title": "Left elbow drain pipe",
"description": "Left elbow drain pipe",
"searchTags": [
"pipe",
"drain"
],
"widgetSizeX": 2,
"widgetSizeY": 1,
"tags": [
{
"tag": "clickArea",
"stateRenderFunction": null,
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'click');"
}
}
},
{
"tag": "fluid-background",
"stateRenderFunction": "var color = ctx.properties.fluidColor;\nelement.attr({fill: color});",
"actions": null
},
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
}
],
"behavior": [
{
"id": "click",
"name": "{i18n:scada.symbol.on-click}",
"hint": "{i18n:scada.symbol.on-click-hint}",
"group": null,
"type": "widgetAction",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": {
"type": "doNothing",
"openInSeparateDialog": false,
"openInPopover": false
}
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"key": "state",
"scope": null
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"compareToValue": true,
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "fluidColor",
"name": "{i18n:scada.symbol.fluid-color}",
"type": "color",
"default": "#8CAA5C",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata>
<g tb:tag="clickArea">
<rect x="100" y="64" width="164" height="72" fill="#fff" tb:tag="pipe-background"/>
<rect x="100" y="64" width="164" height="72" fill="url(#paint0_linear_1924_305496)"/>
<rect x="101.5" y="65.5" width="161" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m264 64v-50h72v50h-72z" fill="#fff" tb:tag="pipe-background"/>
<path d="m264 64v-50h72v50h-72z" fill="url(#paint1_linear_1924_305496)"/>
<path d="m265.5 62.5v-47h69v47h-69z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect transform="rotate(-90 251.5 12.5)" x="251.5" y="12.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3"/>
<path d="m336 64s-1.718 30.518-21.6 50.4c-19.882 19.882-50.4 21.6-50.4 21.6v-72h72z" fill="#fff" tb:tag="pipe-background"/>
<path d="m336 64s-1.718 30.518-21.6 50.4c-19.882 19.882-50.4 21.6-50.4 21.6v-72h72z" fill="url(#paint2_linear_1924_305496)"/>
<path d="m265.5 65.5h68.865c-0.087 0.8334-0.222 1.9717-0.428 3.3584-0.464 3.1196-1.287 7.4889-2.723 12.47-2.876 9.9828-8.18 22.316-17.875 32.01-9.694 9.695-22.027 14.999-32.01 17.875-4.982 1.436-9.351 2.259-12.471 2.723-1.386 0.206-2.525 0.341-3.358 0.428v-68.865z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<ellipse transform="rotate(-90 100 100)" cx="100" cy="100" rx="36" ry="4" fill="#5D5C5C"/>
<path d="m76.285 94.5c4-9.2 20-22.333 24.001-24.5 0 0 1.499 18.101 1.499 30.5 0 12.399-1.499 33-1.499 33 0 6.5 1.5 9 3.999 14.5 5.089 11.196 3.5 10.5 12.5 13.5s24 2.5 21.5 11.5-32-8-34-4 16 17 10.5 21.5-17.5-10.5-21.5-10.5-4.5 10.5-10 10.5-7-11.5-16-10.5-12 13-18 17-14-2-14.5-11 20.5-7 20.5-13-39 1.5-45.5-4c-6.5-5.5-0.50001-6.5 6.5-10.5 7-4 38 5.5 39 0s-16.5 0-15-5.5 16.5-2 23-10.5 8-36.5 13-48z" fill="#8CAA5C" tb:tag="fluid-background"/>
</g>
<g style="display:none" tb:tag="leak">
<path d="m246.99 88.724c-0.447 0.4587-0.927 1.092-1.445 1.447-1.445 1.447-3.278 2.5504-5.226 2.8189-0.906 0.0114-1.883-0.0808-2.756-0.244-2.374-0.3533-4.677-0.603-6.98-0.8527-2.058-0.1135-4.361-0.3632-5.704-1.8795 0.136-0.2456 0.169-0.4203 0.305-0.6659-3.324-1.0731-6.348-3.2652-8.751-5.8832-1.66-1.7562-3.047-4.0038-5.187-5.1267-0.737-0.4088-1.507-0.6431-2.173-0.9483-1.157-0.5778-2.21-1.2265-3.128-2.121-0.704-0.5835-1.272-1.4126-1.873-2.0672-1.731-1.8598-3.669-3.5777-5.951-4.9079 0.394 0.7965 0.787 1.593 1.18 2.3895 0 0-0.098 0.524-0.065 0.3493 0.278-0.0384 0.491 0.2726 0.53 0.5509-1.01 0.0824-2.019 0.1648-2.925 0.1763-4.841 0.2702-9.752 0.4367-14.669 0.1503 4.508 1.0234 9.218 1.4518 13.993 1.5309 1.081 0.0212 2.09-0.0613 3.209 0.2382 2.691 0.5933 4.602 2.9388 6.235 5.3226l0.071 0.1036c0.142 0.2073 0.355 0.5182 0.219 0.7639-0.066 0.3493-0.551 0.5296-0.933 0.639-1.981 0.4432-3.89 0.99-5.8 1.5368-2.395 0.7272-4.578 1.7653-7.044 2.3888-2.188 0.5852-4.414 0.8921-6.537 1.1279-1.009 0.0825-1.948 0.2686-2.892 0.0017-1.048-0.1959-1.96-0.6373-2.838-1.2535-1.125-0.7524-2.179-1.4012-3.2-2.2247-5.912-4.6296-21.148-3.4571-26.341-9.0368 1.846 2.6948 3.867 5.4222 5.713 8.1169-4.093-1.3073-8.487-1.4958-12.951-1.7879-1.255-0.0539-2.51-0.1077-3.803-0.4398-1.048-0.1959-2.135-0.67-3.046-1.1115-1.823-0.883-3.614-1.9407-4.646-3.67 0.502 1.1785 1.212 2.2149 1.955 3.0767-0.382 0.1094-0.867 0.2897-1.249 0.3991-3.263 1.0169-6.455 2.1374-9.614 3.0833 1.43 0.0865 2.925-0.1763 4.349-0.5427 1.91-0.5468 3.639-1.5792 5.625-1.5695 2.265-0.0285 4.269 1.34 6.474 2.1137 3.466 1.2804 7.368 1.1963 11.133 1.3578 3.766 0.1616 7.007-0.5296 13.148 0.2188 4.426 0.5394 11.568 1.5556 14.243 3.6823 0.879 0.6161 1.726 1.4069 2.468 2.2687 0.53 0.5509 0.956 1.1728 1.453 1.8983 0.568 0.8291 1.065 1.5546 1.737 2.3128 0.355 0.5182 0.813 0.9654 1.305 1.238 0.562 0.3762 1.364 0.4358 1.992 0.4627 2.232 0.1461 4.464 0.2921 6.696 0.4382-0.349-0.0653-0.873-0.1632-1.223-0.2285-2.794-0.5223-5.485-1.1156-7.734-2.6204-0.491-0.2726-0.95-0.7198-1.13-1.2054-0.071-0.1037-0.142-0.2073-0.039-0.2783-0.147-0.6602 0.469-1.5392 1.064-1.3376 0.654-0.6007 1.8-0.9287 2.564-1.1475 6.046-1.4005 12.162-2.6973 18.175-3.9232 0.661-0.1477 1.321-0.2954 2.123-0.2359 0.802 0.0596 1.397 0.2612 2.063 0.5664 4.973 1.9235 10.158 4.1579 13.969 7.9429 0.071 0.1037 0.142 0.2073 0.213 0.311 0 0-0.103 0.071-0.207 0.142 0.317 0.2399 0.666 0.3052 0.983 0.5451 2.145 1.5759 3.538 4.2764 4.615 6.7369 0.726 2.3722 0.904 3.5502 0.487 4.3342-0.474 0.891-2.078 3.92-4.351 4.252-1.01 0.082-2.483-0.847-2.927-0.711-0.157 0.048-1.591 1.801 0.027 0.649-0.784-0.417-9.773-1.923-15.178-4.922-0.491-0.272-1.053-0.649-1.512-1.096-0.317-0.24-0.53-0.551-0.639-0.933-0.071-0.103-0.038-0.278-6e-3 -0.453 0.033-0.174 0.208-0.142 0.311-0.213 4.643-2.1141 9.919-3.7488 13.142-7.9363-0.278 0.0384-0.382 0.1094-0.66 0.1477-0.104 0.0711-0.279 0.0384-0.486 0.1804-2.706 0.9402-5.297 2.7153-8.009 3.2025-1.217 0.2244-2.505 0.3452-3.612 0.9516-1.418 0.8194-2.547 2.5063-4.075 2.9441-0.764 0.218-1.67 0.23-2.368 0.099-1.921-0.3588-3.848-1.1708-5.802-1.3552-0.977-0.0923-2.09 0.0612-3.067-0.031-0.174-0.0327-0.278 0.0384-0.453 0.0057-2.232-0.146-10.307 0.6727-12.272-0.4176 1.719 0.954 9.342 0.141 10.925 1.3406-2.81 1.0115-5.516 1.9515-8.468 2.7555 2.576-0.242 5.113-0.762 7.612-1.56 1.249-0.399 2.499-0.798 3.786-0.919 2.472-0.17 5.071 1.4 5.242 3.872 0.038 0.278 0.076 0.556-0.06 0.802-0.19 1.501-1.079 2.871-1.864 4.17-2.497 3.691-5.033 7.103-7.776 10.657-2.023 2.604-4.117 5.105-6.883 6.847-0.207 0.142-0.485 0.181-0.627-0.027 0.082 1.01-0.676 1.681-1.576 2.146-0.829 0.568-1.8 0.929-2.7 1.393-0.797 0.393-1.593 0.787-2.39 1.18-3.775 1.825-7.622 3.546-11.577 4.885 2.123-0.236 4.31-0.821 6.318-1.891 1.489-0.716 2.837-1.639 4.294-2.18 1.56-0.612 3.197-0.668 4.757-1.28 0.693-0.322 1.49-0.716 2.254-0.934-0.643 1.506-1.357 2.909-2.001 4.415 0.72-0.949 1.44-1.899 2.16-2.849 0.856-1.196 1.783-2.288 2.71-3.38 2.476-2.61 5.902-4.5 7.99-7.453 0.137-0.246 0.273-0.492 0.409-0.737-0.278 0.038-0.485 0.18-0.764 0.218 0.033-0.174 0.24-0.316 0.273-0.491 1.428-2.806 3.451-5.41 5.513-7.736 1.75-2.113 3.708-4.368 6.278-5.062 0.764-0.219 1.599-0.334 2.362-0.553 0.764-0.218 1.523-0.89 1.757-1.66 3.161 1.947 6.328 4.695 10.049 4.125 2.887-0.454 5.249 1.484 6.683-0.268-1.201 0.367 0.552 1.802 2.537 1.851 1.986 0.049 6.614-6.224 6.651-8.838 4e-3 -2.439-0.898-4.8669-2.383-6.5905-0.071-0.1037-0.071-0.1037-0.142-0.2073 3.661 0.2325 7.498 0.4977 11.258 0.2063 1.113-0.1534 2.297-0.2032 3.301-0.7386 1.516-1.3433 2.71-3.3795 3.8-5.3447z" fill="#5C5A5A"/>
<path d="m223.93 110.09c-0.95-0.72-1.344-1.294-2.567-1.522-2.445-0.457-3.381 0.075-5.892-0.033-2.756-0.244-3.944-0.825-6.537-1.942-1.331-0.61-2.56-1.292-3.684-2.044-0.3 1.119-3.052 1.505-4.198 1.833-1.145 0.328-2.433 0.449-3.295 1.192-0.966 0.813-1.369 2.003-2.017 3.057-0.753 1.124-1.822 2.009-2.82 2.997-1.925 2.081-3.042 4.673-3.985 7.299 0.104-0.071 0.104-0.071 0.207-0.142 1.428-2.806 3.452-5.41 5.513-7.736 1.75-2.113 3.708-4.368 6.278-5.062 0.764-0.219 1.599-0.334 2.363-0.553s2.992-0.703 3.226-1.472c3.161 1.946 5.097 3.841 8.819 3.271 2.886-0.454 3.492 0.085 6.39 0.536 0.556-0.077 1.429 0.086 2.199 0.321z" fill="#8B8B8B"/>
<path d="m218.39 92.781c-0.279 0.0384-0.382 0.1094-0.66 0.1477-0.104 0.071-0.279 0.0384-0.486 0.1804l-0.104 0.071c-0.654 0.6007-1.309 1.2013-2.209 1.6657-0.622 0.426-1.418 0.8194-2.111 1.1418-2.979 1.4314-6.384 2.241-9.04 4.3651 0.497 0.726 0.994 1.451 1.627 1.931-0.316-0.24-0.529-0.551-0.639-0.933-0.071-0.103-0.038-0.278-5e-3 -0.453 0.032-0.174 0.207-0.142 0.31-0.213 4.889-1.9779 10.094-3.7162 13.317-7.9037z" fill="#8B8B8B"/>
<path d="m196 101.87c-0.568-0.829-1.518-1.548-2.533-1.9189-1.015-0.3705-2.27-0.4244-3.389-0.7239-0.175-0.0326-0.278 0.0384-0.453 0.0057-2.232-0.146-9.367 0.6164-11.332-0.4739 1.719 0.954 8.401 0.1973 9.985 1.397-2.81 1.011-5.788 1.87-8.74 2.674 2.576-0.242 5.385-0.68 7.884-1.478 1.249-0.4 2.498-0.799 3.786-0.919 2.472-0.171 5.071 1.399 5.241 3.871 0.039 0.278 0.077 0.557-0.059 0.802 0.201-0.595 0.299-1.119 0.223-1.675-6e-3 -0.453-0.258-1.042-0.613-1.561z" fill="#8B8B8B"/>
<path d="m190.09 120.87c-0.944-0.267-2.123 0.236-2.674 0.766-0.998 0.988-1.925 2.08-2.955 3.243-0.895 0.917-1.718 1.938-2.684 2.752-2.449 1.982-5.466 3.135-8.489 3.836 0 0-0.103 0.071-0.174-0.033-3.776 1.825-7.622 3.546-11.578 4.885 2.123-0.235 4.311-0.821 6.319-1.891 1.489-0.716 2.836-1.639 4.293-2.18 1.56-0.612 3.198-0.668 4.758-1.28 0.693-0.322 1.489-0.716 2.253-0.934-0.643 1.506-1.357 2.909-2 4.416 0.72-0.95 1.44-1.9 2.159-2.85 0.856-1.196 1.784-2.288 2.711-3.38 2.721-2.473 5.973-4.396 8.061-7.35z" fill="#8B8B8B"/>
<path d="m246.99 88.724c-0.447 0.4586-0.927 1.0919-1.445 1.4469-0.72 0.95-1.407 1.7253-2.514 2.3317-1.315 0.7484-2.843 1.1858-4.234 1.3776-2.505 0.3452-4.982 0.0629-7.46-0.2194-1.152-0.1249-2.336-0.0751-3.269 0.5639 0.175 0.0327 0.175 0.0327 0.35 0.0653-0.071-0.1037-0.071-0.1036-0.142-0.2073 3.662 0.2326 7.498 0.4977 11.258 0.2063 1.113-0.1534 2.297-0.2032 3.301-0.7386 1.871-0.8251 3.065-2.8613 4.155-4.8264z" fill="#8B8B8B"/>
<path d="m221.74 89.88c-0.775-0.6872-1.79-1.0577-2.566-1.7448-0.879-0.6162-1.55-1.3743-2.254-1.9578-1.442-0.9924-3.085-1.3898-4.455-2.2785-0.808-0.5125-1.687-1.1287-2.598-1.5702-1.681-0.6757-3.662-0.2325-5.365 0.1723-6.427 1.5098-12.751 2.9487-19.179 4.4586-1.042 0.2571-2.395 0.7271-2.52 1.8787 6e-3 0.4529 0.186 0.9385 0.399 1.2494-0.071-0.1036-0.142-0.2073-0.038-0.2783-0.148-0.6602 0.468-1.5391 1.063-1.3376 0.655-0.6006 1.801-0.9287 2.564-1.1475 6.046-1.4005 12.163-2.6973 18.176-3.9232 0.66-0.1477 1.32-0.2954 2.123-0.2358 0.802 0.0595 1.397 0.2611 2.063 0.5663 4.972 1.9235 10.158 4.1579 13.969 7.943 0.071 0.1036 0.142 0.2072 0.213 0.3109 0 0-0.104 0.071-0.207 0.142 0.316 0.2399 0.666 0.3052 0.982 0.5451-0.71-1.0364-1.42-2.0728-2.37-2.7926z" fill="#8B8B8B"/>
<path d="m202.09 73.644c-1.305-1.238-3.226-1.597-5.044-2.0271-0.174-0.0326-0.174-0.0326-0.349-0.0653-4.84 0.2702-9.752 0.4367-14.669 0.1503 4.509 1.0234 9.218 1.4518 13.993 1.5309 1.081 0.0212 2.09-0.0612 3.209 0.2382 2.691 0.5933 4.602 2.9388 6.235 5.3226-0.18-0.4856-0.606-1.1074-0.748-1.3147-0.426-0.6219-0.781-1.1401-1.207-1.762-0.29-0.8675-0.716-1.4894-1.42-2.0729z" fill="#8B8B8B"/>
<path d="m192.15 94.682c-0.349-0.0653-0.873-0.1632-1.222-0.2285-0.104 0.071-0.279 0.0383-0.279 0.0383-1.08-0.0212-2.161-0.0424-3.138-0.1346-1.921-0.359-3.262-0.8768-4.534-2.2895-0.672-0.7581-1.382-2.5157-1.95-3.3449-1.633-2.3838-4.364-3.5327-6.581-5.2122-1.971-1.5433-8.279-0.7511-11.049-1.2173-2.771-0.4661-3.371-0.2823-5.407-0.3364-3.263-0.0867-3.209-0.2383-4.814-0.3574-2.128-0.217-4.055-1.029-6.183-1.2461-1.43-0.0865-2.925 0.1763-4.251 0.0188-2.232-0.146-4.269-1.34-6.299-2.081-1.119-0.2995-2.238-0.599-3.318-0.6202-3.263 1.0169-6.455 2.1375-9.614 3.0834 1.43 0.0865 2.925-0.1763 4.349-0.5428 1.91-0.5468 3.639-1.5792 5.625-1.5694 2.265-0.0286 4.269 1.34 6.474 2.1136 3.466 1.2804 7.368 1.1963 11.133 1.3579 3.766 0.1615 6.58-0.174 9.741 1.7724 2.986 1.9137 13.062 0.1541 15.738 2.2808 0.879 0.6162 1.725 1.407 2.468 2.2688 0.529 0.5509 0.955 1.1727 1.452 1.8982 0.568 0.8292 1.065 1.5547 1.737 2.3128 0.355 0.5183 0.814 0.9655 1.305 1.238 0.562 0.3763 1.364 0.4358 1.992 0.4628 2.232 0.146 4.464 0.2921 6.625 0.3345z" fill="#8B8B8B"/>
</g>
<defs>
<linearGradient id="paint0_linear_1924_305496" x1="142.64" x2="142.44" y1="64" y2="136" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1924_305496" x1="264" x2="336" y1="51" y2="51.654" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint2_linear_1924_305496" x1="311" x2="263.66" y1="114" y2="64.321" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".35637"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".4903"/>
<stop stop-color="#fff" stop-opacity="0" offset=".56651"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".63374"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".75781"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

964
application/src/main/data/json/system/scada_symbols/left-flow-meter.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 73 KiB

526
application/src/main/data/json/system/scada_symbols/left-motor-pump.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 40 KiB

866
application/src/main/data/json/system/scada_symbols/left-tee-pipe.svg

@ -0,0 +1,866 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" fill="none" version="1.1" viewBox="0 0 200 200">
<tb:metadata xmlns=""><![CDATA[{
"title": "Left tee pipe",
"description": "Left tee pipe with configurable left/top/bottom fluid and leak visualizations.",
"searchTags": [
"pipe",
"tee"
],
"widgetSizeX": 1,
"widgetSizeY": 1,
"stateRenderFunction": "var leftLiquidPattern = prepareLiquidPattern('left-liquid', 'left-fluid');\nvar topLiquidPattern = prepareLiquidPattern('top-liquid', 'top-fluid');\nvar bottomLiquidPattern = prepareLiquidPattern('bottom-liquid', 'bottom-fluid');\n\nvar genericLiquidPattern = ctx.svg.defs().findOne('pattern#liquid');\nif (genericLiquidPattern) {\n genericLiquidPattern.id(ctx.api.generateElementId());\n leftLiquidPattern.attr({'xlink:href': '#'+genericLiquidPattern.id()});\n topLiquidPattern.attr({'xlink:href': '#'+genericLiquidPattern.id()});\n bottomLiquidPattern.attr({'xlink:href': '#'+genericLiquidPattern.id()});\n}\n\nupdateLiquidPatternAnimation(leftLiquidPattern, 'left');\nupdateLiquidPatternAnimation(topLiquidPattern, 'top');\nupdateLiquidPatternAnimation(bottomLiquidPattern, 'bottom');\n\n\nfunction prepareLiquidPattern(patternId, fluidElementTag) {\n var liquidPattern = ctx.svg.defs().findOne('pattern#'+patternId);\n var fluidElements = ctx.tags[fluidElementTag];\n\n if (liquidPattern) {\n liquidPattern.id(ctx.api.generateElementId());\n for (var i=0;i<fluidElements.length;i++) {\n fluidElements[i].fill(liquidPattern);\n }\n } else {\n liquidPattern = fluidElements[0].reference('fill');\n }\n return liquidPattern;\n}\n\nfunction updateLiquidPatternAnimation(liquidPattern, prefix) {\n if (liquidPattern) {\n var fluid = ctx.values[prefix + 'Fluid'] && !ctx.values.leak;\n var flow = ctx.values[prefix + 'Flow'];\n var flowDirection = ctx.values[prefix + 'FlowDirection'];\n var flowAnimationSpeed = ctx.values[prefix + 'FlowAnimationSpeed'];\n\n var elementFluid = liquidPattern.remember('fluid');\n var elementFlow = null;\n var elementFlowDirection = null;\n \n if (fluid !== elementFluid) {\n liquidPattern.remember('fluid', fluid);\n elementFlow = null;\n elementFlowDirection = null;\n } else {\n elementFlow = liquidPattern.remember('flow');\n elementFlowDirection = liquidPattern.remember('flowDirection');\n }\n \n if (fluid) {\n if (flow !== elementFlow) {\n liquidPattern.remember('flow', flow);\n if (flow) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n } else if (flow && elementFlowDirection !== flowDirection) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n }\n if (flow && liquidPattern) {\n liquidPattern.timeline().speed(flowAnimationSpeed);\n }\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n }\n}\n\nfunction animateFlow(liquidPattern, forwardElseReverse) {\n ctx.api.resetAnimation(liquidPattern);\n var deltaX = forwardElseReverse ? 172 : -172;\n liquidPattern.animate(1000).ease('-').relative(deltaX, 0).loop();\n}\n\n",
"tags": [
{
"tag": "bottom-fluid",
"stateRenderFunction": "var fluid = ctx.values.bottomFluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "bottom-fluid-background",
"stateRenderFunction": "var fluid = ctx.values.bottomFluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.bottomFluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "left-fluid",
"stateRenderFunction": "var fluid = ctx.values.leftFluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "left-fluid-background",
"stateRenderFunction": "var fluid = ctx.values.leftFluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.leftFluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "overlay",
"stateRenderFunction": "var fluid = (ctx.values.leftFluid ||\n ctx.values.topFluid || ctx.values.bottomFluid) && !ctx.values.leak;\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
},
{
"tag": "top-fluid",
"stateRenderFunction": "var fluid = ctx.values.topFluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "top-fluid-background",
"stateRenderFunction": "var fluid = ctx.values.topFluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.topFluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
}
],
"behavior": [
{
"id": "leftFluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": "{i18n:scada.symbol.left-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leftFlow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": "{i18n:scada.symbol.left-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leftFlowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": "{i18n:scada.symbol.left-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leftFlowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": "{i18n:scada.symbol.left-pipe}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "topFluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": "{i18n:scada.symbol.top-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "topFlow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": "{i18n:scada.symbol.top-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "topFlowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": "{i18n:scada.symbol.top-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "topFlowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": "{i18n:scada.symbol.top-pipe}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "bottomFluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": "{i18n:scada.symbol.bottom-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "bottomFlow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": "{i18n:scada.symbol.bottom-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "bottomFlowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": "{i18n:scada.symbol.bottom-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "bottomFlowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": "{i18n:scada.symbol.bottom-pipe}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "leftFluidColor",
"name": "{i18n:scada.symbol.left-fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "topFluidColor",
"name": "{i18n:scada.symbol.top-fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "bottomFluidColor",
"name": "{i18n:scada.symbol.bottom-fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata><g clip-path="url(#clip0_1245_66573)">
<path d="m64 186v-172h72v172z" fill="#fff" tb:tag="pipe-background"/>
<path d="m64 186v-172h72v172z" fill="url(#paint0_linear_1245_66573)" style="fill:url(#paint0_linear_1245_66442)"/>
<path d="m65.5 184.5v-169h69v169z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m14 64h51l35 36-35 36h-51z" fill="#fff" tb:tag="pipe-background"/>
<path d="m14 64h51l35 36-35 36h-51z" fill="url(#paint1_linear_1245_66573)" style="fill:url(#paint1_linear_1245_66442)"/>
<path d="m15.5 65.5h48.866l33.542 34.5-33.542 34.5h-48.866z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect x="1.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<rect transform="rotate(-90,51.5,198.5)" x="51.5" y="198.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<rect transform="rotate(-90,51.5,12.5)" x="51.5" y="12.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
</g><defs>
<linearGradient id="paint0_linear_1245_66442" x1="64" x2="136" y1="141.28" y2="141.47" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1245_66442" x1="36.36" x2="35.98" y1="64" y2="136" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<pattern id="liquid" width="172" height="72" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<linearGradient id="paint28_linear_1182_32781-5" x1="19.316" x2="21" y1="8.2632" y2="23" gradientTransform="translate(-36,6)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint29_linear_1182_32781-1" x1="148.32" x2="150" y1="8.2632" y2="23" gradientTransform="translate(-165,135)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint30_linear_1182_32781-7" x1="111.32" x2="113" y1="9.2632" y2="24" gradientTransform="translate(-129,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint31_linear_1182_32781-4" x1="32.316" x2="34" y1="51.263" y2="66" gradientTransform="translate(-92,-24)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint32_linear_1182_32781-3" x1="153.32" x2="155" y1="51.263" y2="66" gradientTransform="translate(-213,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint33_linear_1182_32781-1" x1="31.947" x2="33" y1="21.789" y2="31" gradientTransform="translate(-59,7)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint34_linear_1182_32781-4" x1="160.95" x2="162" y1="21.789" y2="31" gradientTransform="translate(-188,136)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint35_linear_1182_32781-6" x1="3.9474" x2="5" y1="32.79" y2="42" gradientTransform="translate(-42,-32)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint36_linear_1182_32781-9" x1="93.158" x2="94" y1="4.6316" y2="12" gradientTransform="translate(-102,86)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint37_linear_1182_32781-4" x1="71.158" x2="72" y1="56.632" y2="64" gradientTransform="translate(-132,12)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint38_linear_1182_32781-2" x1="110.95" x2="112" y1="32.79" y2="42" gradientTransform="translate(-149,75)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint39_linear_1182_32781-2" x1="57.947" x2="59" y1="34.79" y2="44" gradientTransform="translate(-98,20)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint40_linear_1182_32781-6" x1="113.95" x2="115" y1="57.79" y2="67" gradientTransform="translate(-177,53)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint41_linear_1182_32781-4" x1="137.95" x2="139" y1="37.79" y2="47" gradientTransform="translate(-181,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint42_linear_1182_32781-1" x1="74.947" x2="76" y1="16.789" y2="26" gradientTransform="translate(-97,55)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint43_linear_1182_32781-2" x1="125.97" x2="126.5" y1="48.395" y2="53" gradientTransform="translate(-177,76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint44_linear_1182_32781-8" x1="168.97" x2="169.5" y1="44.395" y2="49" gradientTransform="translate(-216,123)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint45_linear_1182_32781-8" x1="56.974" x2="57.5" y1="7.3947" y2="12" gradientTransform="translate(-67,48)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint46_linear_1182_32781-9" x1="95.974" x2="96.5" y1="33.395" y2="38" gradientTransform="translate(-132,61)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint47_linear_1182_32781-2" x1="90.974" x2="91.5" y1="21.395" y2="26" gradientTransform="translate(-115,68)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint48_linear_1182_32781-88" x1="21.974" x2="22.5" y1="38.395" y2="43" gradientTransform="translate(-63,-18)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint49_linear_1182_32781-8" x1="123.97" x2="124.5" y1="21.395" y2="26" gradientTransform="translate(-148,101)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint50_linear_1182_32781-6" x1="85.974" x2="86.5" y1="45.395" y2="50" gradientTransform="translate(-134,39)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint51_linear_1182_32781-8" x1="50.974" x2="51.5" y1="19.395" y2="24" gradientTransform="translate(-73,30)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint52_linear_1182_32781-3" x1="47.974" x2="48.5" y1="49.395" y2="54" gradientTransform="translate(-100,-3)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint53_linear_1182_32781-83" x1="13.158" x2="14" y1="60.632" y2="68" gradientTransform="translate(-78,-50)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint54_linear_1182_32781-33" x1="134.16" x2="135" y1="60.632" y2="68" gradientTransform="translate(-199,71)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint55_linear_1182_32781-8" x1="93.5" x2="95.5" y1="50.5" y2="68" gradientTransform="translate(-154,37)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint84_linear_1182_32781-8" x1="248" x2="248" y1="1.8513e-7" y2="72" gradientTransform="scale(.33333 1)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" offset=".10895"/>
<stop stop-color="#fff" stop-opacity="0" offset=".11331"/>
<stop stop-color="#fff" stop-opacity="0" offset=".88736"/>
<stop stop-color="#727171" offset=".89138"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<pattern id="left-liquid" patternTransform="translate(14,-8)" patternUnits="userSpaceOnUse" xlink:href="#liquid"/>
<pattern id="top-liquid" patternTransform="translate(14,8)" patternUnits="userSpaceOnUse" xlink:href="#liquid"/>
<pattern id="bottom-liquid" patternTransform="translate(14,8)" patternUnits="userSpaceOnUse" xlink:href="#liquid"/>
<clipPath id="clip0_1245_66573">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<linearGradient id="paint57_linear_1249_77790" x1="64" x2="136" y1="78.222" y2="78.222" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<clipPath id="clipPath8490">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath8484">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<linearGradient id="paint58_linear_1249_77790" x1="35.235" x2="35.235" y1="64" y2="136" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<clipPath id="clipPath8478">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath8472">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath10014">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath10008">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath10002">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath9996">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath9990">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath9984">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath9978">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath9972">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath9966">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath9960">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath9954">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath9948">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath9942">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath9936">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath9930">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath9924">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath9918">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath9912">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
</defs><rect x="14" y="64" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="left-fluid-background"/><rect transform="rotate(90)" x="14" y="-136" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="top-fluid-background"/><rect transform="rotate(90)" x="136" y="-136" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="bottom-fluid-background"/><rect x="14" y="64" width="50" height="72" fill="url(#left-liquid)" stroke-width="0" style="display: none;" tb:tag="left-fluid"/><rect transform="rotate(90)" x="14" y="-136" width="50" height="72" fill="url(#top-liquid)" stroke-width="0" style="display: none;" tb:tag="top-fluid"/><rect transform="rotate(90)" x="136" y="-136" width="50" height="72" fill="url(#bottom-liquid)" stroke-width="0" style="display: none;" tb:tag="bottom-fluid"/><g transform="translate(0 -.00066017)" style="display: none;" tb:tag="overlay">
<path d="m64 136v-72h72v72z" clip-path="url(#clipPath8490)" fill="url(#paint57_linear_1249_77790)" style="fill: url(&quot;#paint57_linear_1249_77790&quot;);"/>
<path d="m65.5 134.5v-69h69v69z" clip-path="url(#clipPath8484)" stroke="#000" stroke-opacity=".12" stroke-width="3" style=""/>
<path d="m64 64 36 36-36 36z" clip-path="url(#clipPath8478)" fill="url(#paint58_linear_1249_77790)" style="fill: url(&quot;#paint58_linear_1249_77790&quot;);"/>
<path d="m65.5 132.38v-64.758l32.379 32.379z" clip-path="url(#clipPath8472)" stroke="#000" stroke-opacity=".12" stroke-width="3" style=""/>
</g><g transform="translate(4e-4,-4e-4)" style="display: none;" tb:tag="leak">
<path d="m116.83 136c0.211-0.386 0.53-0.828 0.659-1.239 0.659-1.239 1.015-2.664 0.8-3.996-0.174-0.597-0.431-1.219-0.713-1.76-0.709-1.487-1.335-2.948-1.961-4.409-0.488-1.328-1.114-2.789-2.379-3.366-0.134 0.138-0.242 0.195-0.376 0.334-1.372-1.966 1.144-2.064 0-9.564-4.356-8-11.096-19.138-12.263-20.317-0.416-0.4015-0.7243-0.8595-1.0583-1.2353-0.6116-0.6434-1.249-1.2046-2.0202-1.627-0.5244-0.345-1.1826-0.5513-1.7328-0.814-1.5682-0.7626-3.0848-1.6896-4.4161-2.92 0.6018 0.0982 1.2035 0.1964 1.8052 0.2946 0 0 0.3242-0.1695 0.2162-0.113 0.0307 0.1904 0.2775 0.2677 0.4678 0.237-0.1486-0.6791-0.2972-1.3582-0.4716-1.955-0.7947-3.2308-1.6717-6.4874-2.8471-9.6569 1.5769 2.7531 2.8039 5.758 3.8147 8.8759 0.2309 0.7048 0.3795 1.3839 0.8008 2.0581 0.9297 1.6467 2.8528 2.43 4.7452 3.0231l0.0823 0.0257c0.1649 0.0516 0.4109 0.129 0.5449-0.0098 0.216-0.113 0.237-0.4679 0.232-0.7405-0.107-1.3889-0.131-2.752-0.156-4.1151-4e-3 -1.7179 0.239-3.3586 0.153-5.1024-0.055-1.5534-0.301-3.0761-0.572-4.5165-0.149-0.6791-0.2151-1.3324-0.5799-1.8985-0.3389-0.6484-0.8117-1.158-1.3926-1.6111-0.7197-0.5869-1.357-1.1481-2.1025-1.6528-4.2257-2.9506-6.5158-13.185-11.22-15.472 2.1392 0.6704 4.3349 1.4488 6.4742 2.1192-1.6801-2.424-2.686-5.2693-3.7742-8.1403-0.2874-0.8129-0.5748-1.6258-1.0525-2.408-0.339-0.6484-0.8683-1.2661-1.3411-1.7757-0.9456-1.0192-1.9993-1.9819-3.3416-2.3121 0.8744 0.0933 1.6972 0.3511 2.4119 0.6654-0.0049-0.2726 0.0159-0.6275 0.011-0.9001 0.0121-2.3455 0.1066-4.6652 0.0929-6.9285 0.3439 0.921 0.4717 1.955 0.5172 2.9632 0.0246 1.3631-0.3056 2.7053 0.0997 4.007 0.436 1.492 1.7365 2.5321 2.6871 3.8239 1.5363 2.0175 2.2647 4.5951 3.1269 7.0338 0.8622 2.4388 1.0595 4.7047 2.7839 8.5848 1.2428 2.7962 3.344 7.2796 5.277 8.6082 0.5809 0.4531 1.27 0.8497 1.985 1.164 0.467 0.237 0.961 0.3917 1.537 0.5722 0.658 0.2062 1.234 0.3867 1.867 0.6753 0.411 0.1289 0.797 0.3401 1.074 0.6078 0.36 0.2935 0.56 0.808 0.704 1.2144 0.544 1.4356 1.088 2.8711 1.632 4.3066-0.113-0.2161-0.282-0.5403-0.395-0.7565-0.904-1.7289-1.834-3.3756-3.273-4.5495-0.278-0.2677-0.663-0.4789-1.018-0.4998-0.083-0.0258-0.165-0.0515-0.191 0.0307-0.463 0.0357-0.916 0.6165-0.664 0.9665-0.263 0.5502-0.248 1.368-0.238 1.9133 0.295 4.2489 0.672 8.5235 1.075 12.716 0.036 0.4629 0.072 0.9259 0.272 1.4404s0.452 0.8645 0.786 1.2402c2.261 2.8771 8.983 13.36 9.989 15.86 1.611 4 2.5 3.5 2.164 6.098 0.221 0.16-1.265 8.847-1.044 9.007 1.465 1.091 3.517 1.463 5.348 1.676 1.703 0 2.6-4.85 3.031-5.281 0.489-0.489-0.171-20.365-0.41-21.924-0.148-0.6791-1.054-1.4593-1.054-1.7779 0-0.1125 0.862-1.4059 0.431-0.1125-0.431-0.4311-3.225-6.028-6.278-8.9726-0.277-0.2677-0.637-0.5611-1.023-0.7723-0.221-0.1597-0.468-0.237-0.74-0.2321-0.082-0.0258-0.191 0.0307-0.299 0.0872s-0.051 0.1646-0.077 0.2468c-0.455 3.4716-0.469 7.2625-2.57 10.218-0.03-0.1904-4e-3 -0.2727-0.035-0.463 0.026-0.0823-0.031-0.1903 0.021-0.3549 0.073-1.9648 0.718-4.0218 0.493-5.8994-0.097-0.8436-0.276-1.713-0.101-2.5616 0.253-1.0954 1.133-2.1749 1.114-3.2653-0.01-0.5453-0.185-1.1421-0.41-1.5743-0.622-1.1887-1.542-2.2902-2.055-3.5354-0.257-0.6225-0.38-1.3839-0.636-2.0065-0.057-0.108-0.031-0.1903-0.088-0.2984-0.544-1.4355-1.628-6.8997-2.738-7.9705 0.971 0.937 1.968 6.1028 3.074 6.9009 0.099-2.0471 0.173-4.0119 0.107-6.1106 0.359 1.7389 0.527 3.5084 0.505 5.3087-0.011 0.9001-0.022 1.8002 0.158 2.6697 0.384 1.6565 1.936 3.0465 3.593 2.6621 0.19-0.0307 0.381-0.0614 0.514-0.2002 0.947-0.4262 1.668-1.2846 2.363-2.0607 1.921-2.38 3.651-4.7293 5.432-7.2432 1.303-1.8507 2.524-3.7271 3.112-5.8921 0.051-0.1646 0.021-0.3549-0.144-0.4065 0.679-0.1486 0.968-0.7811 1.092-1.4651 0.206-0.6582 0.248-1.368 0.372-2.052 0.098-0.6017 0.196-1.2035 0.294-1.8052 0.44-2.8441 0.797-5.714 0.882-8.5789 0.271 1.4404 0.326 2.9939 0.027 4.5264-0.171 1.1212-0.506 2.1908-0.569 3.2555-0.088 1.147 0.204 2.2325 0.116 3.3795-0.072 0.5194-0.171 1.1212-0.161 1.6664 0.86-0.7246 1.637-1.4749 2.497-2.1995-0.479 0.6632-0.958 1.3263-1.437 1.9895-0.613 0.8019-1.143 1.6296-1.674 2.4573-1.215 2.1491-1.768 4.7771-3.287 6.7407-0.133 0.1388-0.267 0.2776-0.401 0.4163-0.031-0.1903 0.021-0.3549-0.01-0.5452-0.108 0.0565-0.16 0.2211-0.268 0.2776-1.554 1.5007-2.857 3.3514-3.97 5.1713-1.035 1.5732-2.121 3.3109-2.061 5.1369 0.01 0.5453 0.102 1.1163 0.112 1.6615s-0.279 1.1777-0.737 1.4859c1.912 1.6835 4.352 3.2101 4.725 5.7668 0.282 1.9856 2.028 3.1466 1.166 4.44 0-0.8622 1.293 0 1.725 1.2933 0.431 1.2934 4.308 22.021-2.227 29.084-1.6 0.492-3.374 0.388-4.804-0.241-0.082-0.026-0.082-0.026-0.164-0.051 0.888 2.356 1.832 4.821 2.396 7.347 0.123 0.761 0.328 1.548 0.178 2.314-0.577 1.265-1.674 2.458-2.744 3.568z" clip-path="url(#clipPath10014)" fill="#5c5a5a" style=""/>
<path d="m123.98 93.634c-0.663-0.4789-1.119-0.6226-1.514-1.379-0.791-1.5129-0.63-2.2342-1.205-3.8601-0.713-1.7597-1.333-2.4228-2.587-3.9-0.668-0.7515-1.362-1.4207-2.081-2.0077 0.674-0.4212 0.375-2.305 0.36-3.1228-0.015-0.8179-0.194-1.6873 0.12-2.402 0.34-0.797 1.04-1.3005 1.601-1.9379 0.587-0.7197 0.953-1.5989 1.401-2.4524 0.979-1.6812 2.456-2.9351 3.99-4.0809-0.026 0.0822-0.026 0.0822-0.052 0.1645-1.554 1.5007-2.857 3.3514-3.97 5.1714-1.035 1.5731-2.121 3.3108-2.061 5.1369 0.01 0.5452 0.102 1.1162 0.112 1.6615 0.01 0.5452 0.139 2.1048-0.319 2.413 1.912 1.6835 3.545 2.5737 3.918 5.1304 0.282 1.9857 0.757 2.2748 1.635 4.0861 0.061 0.3807 0.344 0.921 0.652 1.379z" clip-path="url(#clipPath10008)" fill="#8b8b8b" style=""/>
<path d="m111.51 93.472c-0.031-0.1904-5e-3 -0.2726-0.036-0.463 0.026-0.0823-0.03-0.1903 0.021-0.3549 0.026-0.0822 0.026-0.0822 0.026-0.0822 0.263-0.5502 0.525-1.1004 0.649-1.7844 0.155-0.4937 0.253-1.0954 0.326-1.6148 0.341-2.2424 0.189-4.6395 1.049-6.8094 0.576 0.1805 1.152 0.361 1.594 0.6802-0.221-0.1596-0.468-0.237-0.74-0.232-0.082-0.0258-0.191 0.0307-0.299 0.0872s-0.051 0.1645-0.077 0.2468c-0.317 3.6055-0.412 7.3705-2.513 10.326z" clip-path="url(#clipPath10002)" fill="#8b8b8b" style=""/>
<path d="m112.98 76.953c-0.659-0.2062-1.322-0.6851-1.769-1.277s-0.734-1.4048-1.155-2.079c-0.057-0.108-0.031-0.1903-0.088-0.2984-0.544-1.4355-1.476-6.2713-2.586-7.3421 0.971 0.937 1.816 5.4744 2.922 6.2725 0.099-2.0471 0.064-4.1738-1e-3 -6.2725 0.359 1.7389 0.635 3.6703 0.613 5.4706-0.011 0.9001-0.022 1.8003 0.158 2.6697 0.384 1.6565 1.936 3.0466 3.593 2.6621 0.19-0.0307 0.381-0.0614 0.514-0.2002-0.349 0.2518-0.674 0.4212-1.054 0.4827-0.299 0.0872-0.736 0.0405-1.147-0.0884z" clip-path="url(#clipPath9996)" fill="#8b8b8b" style=""/>
<path d="m124.26 69.261c-0.365-0.5661-0.272-1.4405-0.035-1.9083 0.448-0.8535 0.979-1.6812 1.535-2.5912 0.422-0.7713 0.927-1.5167 1.267-2.3137 0.809-2.0054 0.96-4.217 0.813-6.3415 0 0 0.025-0.0822-0.057-0.108 0.44-2.8441 0.797-5.714 0.881-8.579 0.272 1.4405 0.327 2.9939 0.028 4.5265-0.171 1.1212-0.506 2.1908-0.569 3.2555-0.088 1.1469 0.204 2.2325 0.116 3.3795-0.073 0.5194-0.171 1.1211-0.161 1.6664 0.86-0.7246 1.637-1.475 2.497-2.1995-0.479 0.6631-0.958 1.3263-1.437 1.9894-0.613 0.8019-1.143 1.6297-1.674 2.4574-1.077 2.2829-1.686 4.8028-3.204 6.7665z" clip-path="url(#clipPath9990)" fill="#8b8b8b" style=""/>
<path d="m115.2 115.26c0.138-0.418 0.371-0.911 0.423-1.339 0.35-0.739 0.604-1.403 0.622-2.27 0.038-1.037-0.18-2.106-0.504-3.014-0.584-1.634-1.542-3.052-2.5-4.471-0.441-0.661-0.786-1.398-0.693-2.168 0.075 0.096 0.075 0.096 0.151 0.192-0.086-0.01-0.086-0.01-0.171-0.021 1.302 2.155 2.68 4.406 3.695 6.787 0.26 0.726 0.605 1.463 0.597 2.244 0.092 1.4-0.769 2.773-1.62 4.06z" clip-path="url(#clipPath9984)" fill="#8b8b8b" style=""/>
<path d="m110.4 95.702c-0.607-0.3709-1.054-0.9627-1.661-1.3336-0.581-0.4531-1.213-0.7416-1.738-1.0867-0.94-0.7465-1.531-1.7449-2.389-2.4657-0.499-0.4273-1.08-0.8804-1.553-1.39-0.781-0.9676-0.888-2.3565-0.964-3.555-0.3-4.5215-0.625-8.9608-0.925-13.482-0.041-0.7356-4e-3 -1.718 0.727-2.0311 0.298-0.0873 0.653-0.0664 0.9 0.011-0.083-0.0258-0.165-0.0516-0.191 0.0307-0.463 0.0356-0.916 0.6165-0.664 0.9664-0.263 0.5502-0.248 1.3681-0.238 1.9133 0.295 4.2489 0.672 8.5236 1.075 12.716 0.036 0.4629 0.071 0.9259 0.272 1.4404 0.2 0.5145 0.452 0.8645 0.786 1.2403 2.261 2.8771 4.768 5.8315 8.018 7.5726 0.082 0.0258 0.164 0.0516 0.247 0.0774 0 0 0.025-0.0823 0.051-0.1646 0.221 0.1597 0.334 0.3758 0.555 0.5354-0.823-0.2578-1.645-0.5157-2.308-0.9945z" clip-path="url(#clipPath9978)" fill="#8b8b8b" style=""/>
<path d="m95.675 86.618c-1.0746-0.6078-1.696-1.7965-2.3432-2.9029-0.0565-0.108-0.0565-0.108-0.113-0.2161-0.7947-3.2308-1.6717-6.4875-2.8471-9.6569 1.5769 2.7531 2.8039 5.758 3.8147 8.8758 0.2309 0.7049 0.3795 1.384 0.8008 2.0581 0.9297 1.6467 2.8528 2.4301 4.7452 3.0231-0.3549-0.0208-0.8486-0.1755-1.0131-0.2271-0.4937-0.1547-0.9051-0.2836-1.3988-0.4383-0.6275-0.0159-1.1211-0.1706-1.6455-0.5157z" clip-path="url(#clipPath9972)" fill="#8b8b8b" style=""/>
<path d="m107.48 75.872c-0.113-0.2161-0.282-0.5403-0.395-0.7564 0.026-0.0823-0.031-0.1903-0.031-0.1903-0.231-0.7049-0.462-1.4098-0.718-2.0324-0.622-1.1886-1.231-1.9648-2.414-2.5161-0.632-0.2885-1.928-0.4015-2.586-0.6078-1.8927-0.593-3.1953-2.1548-4.7426-3.2722-1.4086-0.9836-2.1556-5.2828-3.0178-7.0072-0.8623-1.7245-0.8623-2.1556-1.3066-3.4809-0.7121-2.1236-0.8008-2.0581-1.2012-3.0871-0.5699-1.3533-1.4897-2.4547-2.0596-3.808-0.3439-0.921-0.4717-1.9549-0.8413-2.7936-0.5441-1.4356-1.7366-2.5321-2.6306-3.7158-0.4213-0.6742-0.8425-1.3484-1.0734-2.0532 0.0121-2.3455 0.1065-4.6652 0.0929-6.9285 0.3439 0.921 0.4717 1.955 0.5172 2.9632 0.0246 1.3631-0.3057 2.7053 0.0996 4.007 0.4361 1.492 1.7366 2.532 2.6872 3.8239 1.5363 2.0175 2.2647 4.595 3.1269 7.0338s1.2072 4.3532 3.1193 6.0367c1.8556 1.5754 2.7244 8.5418 4.6573 9.8704 0.5809 0.4531 1.2697 0.8497 1.9847 1.164 0.468 0.237 0.961 0.3917 1.537 0.5722 0.659 0.2063 1.235 0.3868 1.867 0.6753 0.411 0.1289 0.797 0.3401 1.075 0.6078 0.359 0.2935 0.56 0.808 0.703 1.2145 0.544 1.4355 1.088 2.871 1.55 4.2807z" clip-path="url(#clipPath9966)" fill="#8b8b8b" style=""/>
<path d="m134.17 183.72c-0.101-0.428-0.159-0.97-0.338-1.362-0.338-1.363-1.026-2.66-2.076-3.508-0.529-0.327-1.136-0.618-1.707-0.831-1.521-0.633-2.964-1.301-4.406-1.969-1.25-0.661-2.693-1.33-4.02-0.913-6e-3 0.192-0.049 0.307-0.056 0.499-2.334-0.545-4.888-0.326-7.228 0.363-1.597 0.445-3.209 1.276-4.864 1.179-0.578-0.021-1.114-0.155-1.613-0.211-0.885-0.07-1.735-0.061-2.591 0.14-0.62 0.094-1.248 0.38-1.832 0.553-1.677 0.481-3.424 0.805-5.2368 0.78 0.5132-0.329 1.0264-0.659 1.5396-0.988 0 0 0.1278-0.343 0.0852-0.228 0.1501 0.121 0.385 0.013 0.506-0.137-0.5641-0.406-1.1285-0.811-1.6572-1.139-2.7507-1.871-5.5798-3.707-8.5725-5.279 3.0131 0.994 5.9342 2.408 8.7701 4.052 0.6429 0.37 1.2076 0.775 1.9716 0.995 1.792 0.604 3.746-0.099 5.55-0.923l0.078-0.036c0.157-0.072 0.392-0.179 0.399-0.372 0.085-0.228-0.136-0.506-0.322-0.706-1.008-0.961-1.938-1.959-2.867-2.956-1.151-1.275-2.067-2.658-3.297-3.897-1.0792-1.119-2.2798-2.087-3.4445-2.977-0.5645-0.406-1.0505-0.847-1.7002-1.024-0.6855-0.256-1.3778-0.319-2.1127-0.268-0.9276 0.045-1.7768 0.053-2.6685 0.176-5.1153 0.63-13.66-5.451-18.688-4.008-1.2766 0.274-2.776 0-1.2765-1.726 2.0005-1.5 1.9998-2 1.9998-5-0.7572-0.413 2-3.5 2-5 0.5-1-0.3767-0.942-1.069-1.005-1.3846-0.126-2.8118-0.137-4.0308 0.514 0.7126-0.515 1.4969-0.873 2.2386-1.117-0.1859-0.199-0.4076-0.477-0.5935-0.677-1.5587-1.752-3.0391-3.541-4.5621-5.215 0.8714 0.455 1.6576 1.139 2.3654 1.858 0.9294 0.998 1.581 2.217 2.7525 2.914 1.3216 0.818 2.9841 0.722 4.5546 1.048 2.4913 0.473-3.4917 6.84-1.2202 8.077 2.2714 1.238 3.9327 2.791 7.8089 4.525 2.7934 1.249 7.3531 3.179 9.6789 2.875 0.7349-0.051 1.5124-0.217 2.2541-0.461 0.5064-0.136 0.977-0.351 1.526-0.602 0.6274-0.287 1.1765-0.537 1.8397-0.745 0.3922-0.18 0.8202-0.28 1.2055-0.267 0.4638-0.022 0.9567 0.227 1.3357 0.433l4.092 2.112c-0.228-0.085-0.571-0.213-0.8-0.298-1.828-0.682-3.62-1.285-5.475-1.196-0.3853-0.014-0.8133 0.087-1.0912 0.309-0.0784 0.035-0.1569 0.071-0.121 0.15-0.3206 0.336-0.2693 1.071 0.1519 1.163 0.1723 0.584 0.73 1.183 1.1018 1.582 3.0595 2.963 6.1975 5.89 9.2995 8.739 0.336 0.32 0.672 0.641 1.165 0.89s0.914 0.341 1.413 0.397c3.605 0.628 7.445 1.15 11.026 0.273 0.078-0.036 0.157-0.072 0.235-0.108 0 0-0.036-0.078-0.072-0.157 0.272-0.029 0.5 0.057 0.771 0.027 1.82-0.167 3.594-1.262 5.098-2.328 1.266-1.138 1.788-1.768 1.82-2.376 0.037-0.692 0.166-3.041-1.053-4.04-0.565-0.406-1.76-0.381-1.973-0.618-0.075-0.084-0.299-1.622 0.245-0.372-0.609-0.032-6.427-2.328-10.666-2.477-0.386-0.014-0.85 9e-3 -1.278 0.109-0.271 0.029-0.506 0.137-0.705 0.323-0.079 0.035-0.122 0.15-0.164 0.264-0.043 0.114 0.071 0.157 0.107 0.235 1.982 2.887 4.506 5.715 4.919 9.318-0.15-0.121-0.185-0.199-0.336-0.32-0.035-0.079-0.15-0.121-0.221-0.278-1.259-1.511-2.154-3.472-3.577-4.718-0.636-0.563-1.35-1.089-1.787-1.838-0.544-0.984-0.611-2.375-1.354-3.173-0.372-0.399-0.901-0.726-1.358-0.897-1.257-0.468-2.677-0.673-3.891-1.256-0.607-0.291-1.207-0.775-1.815-1.067-0.114-0.042-0.15-0.121-0.264-0.163-1.364-0.704-5.8231-4.044-7.3645-4.098 1.3487 0.048 5.5435 3.223 6.8985 3.078-1.294-1.589-2.553-3.1-4.0039-4.617 1.4289 1.054 2.7369 2.257 3.9239 3.611 0.594 0.677 1.187 1.354 1.902 1.88 1.393 0.976 3.477 0.972 4.452-0.421 0.121-0.15 0.242-0.301 0.249-0.493 0.419-0.95 0.381-2.07 0.379-3.112-0.162-3.054-0.446-5.958-0.801-9.019-0.268-2.247-0.614-4.458-1.624-6.462-0.072-0.157-0.222-0.278-0.379-0.206 0.406-0.564 0.198-1.228-0.167-1.819-0.287-0.628-0.73-1.184-1.095-1.775-0.329-0.513-0.658-1.027-0.988-1.54-1.574-2.409-3.226-4.782-5.079-6.97 1.165 0.89 2.245 2.009 3.046 3.349 0.623 0.948 1.089 1.967 1.754 2.801 0.701 0.912 1.644 1.524 2.345 2.436 0.293 0.435 0.622 0.948 0.994 1.347 0.155-1.113 0.232-2.191 0.387-3.304 0.087 0.813 0.174 1.626 0.261 2.44 0.08 1.006 0.239 1.976 0.398 2.946 0.532 2.411 1.878 4.735 2.06 7.211-6e-3 0.192-0.013 0.385-0.02 0.578-0.15-0.121-0.222-0.278-0.372-0.399-0.042 0.114 0.029 0.271-0.013 0.385-0.153 2.156 0.115 4.403 0.504 6.5 0.281 1.862 0.635 3.881 1.9 5.199 0.372 0.399 0.822 0.762 1.194 1.161s0.58 1.062 0.445 1.597c2.548-0.026 5.383-0.521 7.369 1.131 1.537 1.289 3.612 0.985 3.835 2.523-0.576-0.641 0.962-0.864 2.147-0.191 1.186 0.674 1.687 6.001 0.784 7.551-0.861 1.436-2.251 2.544-3.734 3.032-0.079 0.036-0.079 0.036-0.157 0.072 2.236 1.159 4.585 2.361 6.693 3.863 0.601 0.484 1.279 0.932 1.68 1.602 0.416 1.327 0.398 2.947 0.344 4.488z" clip-path="url(#clipPath9960)" fill="#5c5a5a" style=""/>
<path d="m128.18 163c-0.814 0.087-1.249 0.285-2.048-0.013-1.6-0.597-1.962-1.241-3.477-2.066-1.707-0.832-2.611-0.911-4.531-1.172-0.999-0.112-1.962-0.146-2.89-0.102 0.22-0.764-1.262-1.965-1.819-2.563-0.558-0.598-1.273-1.125-1.517-1.867-0.279-0.82-0.095-1.662-0.104-2.512-0.044-0.927-0.36-1.826-0.597-2.76-0.396-1.905-0.136-3.825 0.239-5.702 0.036 0.078 0.036 0.078 0.072 0.157-0.153 2.155 0.115 4.402 0.504 6.5 0.282 1.862 0.635 3.88 1.9 5.198 0.372 0.399 0.822 0.762 1.194 1.161s1.511 1.472 1.376 2.008c2.548-0.026 4.357-0.455 6.344 1.197 1.536 1.289 2.083 1.186 3.947 1.946 0.3 0.242 0.871 0.455 1.407 0.59z" clip-path="url(#clipPath9954)" fill="#8b8b8b" style=""/>
<path d="m118.79 171.21c-0.15-0.121-0.186-0.2-0.336-0.321-0.036-0.078-0.15-0.121-0.222-0.278-0.036-0.078-0.036-0.078-0.036-0.078-0.172-0.585-0.344-1.17-0.709-1.762-0.215-0.47-0.545-0.983-0.838-1.418-1.245-1.896-2.961-3.577-3.771-5.766 0.549-0.251 1.098-0.502 1.64-0.56-0.271 0.029-0.506 0.137-0.705 0.323-0.079 0.035-0.122 0.15-0.164 0.264-0.043 0.114 0.072 0.157 0.107 0.235 2.175 2.893 4.62 5.758 5.034 9.361z" clip-path="url(#clipPath9948)" fill="#8b8b8b" style=""/>
<path d="m108.84 157.95c-0.627 0.287-1.441 0.374-2.169 0.232-0.728-0.141-1.485-0.554-2.249-0.773-0.114-0.043-0.15-0.121-0.264-0.164-1.364-0.704-5.2905-3.678-6.8319-3.732 1.3488 0.048 5.0109 2.857 6.3659 2.712-1.294-1.589-2.742-3.147-4.193-4.665 1.429 1.054 2.926 2.306 4.113 3.659 0.593 0.677 1.187 1.354 1.901 1.881 1.394 0.975 3.477 0.971 4.452-0.422 0.121-0.15 0.242-0.3 0.249-0.493-0.092 0.421-0.22 0.764-0.462 1.064-0.163 0.264-0.52 0.522-0.912 0.701z" clip-path="url(#clipPath9942)" fill="#8b8b8b" style=""/>
<path d="m112.09 144.68c-0.649-0.178-1.164-0.89-1.301-1.397-0.237-0.934-0.396-1.904-0.59-2.953-0.202-0.856-0.325-1.748-0.604-2.568-0.739-2.032-2.105-3.778-3.635-5.259 0 0-0.036-0.079-0.114-0.043-1.574-2.409-3.227-4.782-5.079-6.97 1.165 0.89 2.244 2.008 3.046 3.349 0.622 0.948 1.088 1.967 1.753 2.801 0.701 0.912 1.644 1.524 2.345 2.436 0.293 0.435 0.623 0.948 0.994 1.347 0.155-1.113 0.232-2.191 0.387-3.305 0.087 0.814 0.174 1.627 0.261 2.44 0.08 1.006 0.239 1.977 0.398 2.947 0.725 2.418 1.956 4.699 2.139 7.175z" clip-path="url(#clipPath9936)" fill="#8b8b8b" style=""/>
<path d="m134.17 183.72c-0.101-0.428-0.159-0.971-0.338-1.363-0.087-0.813-0.217-1.512-0.653-2.261-0.509-0.905-1.252-1.703-2.003-2.308-1.35-1.09-2.907-1.8-4.464-2.511-0.721-0.334-1.4-0.783-1.723-1.488 0.115 0.042 0.115 0.042 0.229 0.085-0.079 0.036-0.078 0.036-0.157 0.071 2.236 1.16 4.586 2.361 6.693 3.863 0.601 0.484 1.279 0.933 1.68 1.603 0.809 1.147 0.79 2.767 0.736 4.309z" clip-path="url(#clipPath9930)" fill="#8b8b8b" style=""/>
<path d="m119.74 174.11c-0.7 0.13-1.428-0.012-2.127 0.118-0.735 0.051-1.398 0.259-2.019 0.353-1.198 0.074-2.305-0.274-3.425-0.236-0.657 0.015-1.392 0.067-2.084 4e-3 -1.228-0.198-2.236-1.16-3.093-2-3.246-3.163-6.455-6.247-9.7006-9.409-0.5219-0.52-1.1512-1.275-0.8171-1.997 0.1636-0.264 0.4415-0.486 0.6768-0.593-0.0784 0.036-0.1568 0.071-0.121 0.15-0.3205 0.336-0.2693 1.071 0.1519 1.163 0.1723 0.584 0.73 1.183 1.1018 1.582 3.0592 2.963 6.1972 5.89 9.2992 8.739 0.336 0.32 0.672 0.641 1.165 0.89s0.914 0.341 1.414 0.397c3.604 0.628 7.444 1.15 11.025 0.273 0.079-0.036 0.157-0.072 0.235-0.108 0 0-0.035-0.078-0.071-0.157 0.271-0.029 0.499 0.057 0.771 0.028-0.785 0.358-1.569 0.716-2.382 0.803z" clip-path="url(#clipPath9924)" fill="#8b8b8b" style=""/>
<path d="m102.43 176.7c-1.206 0.266-2.4625-0.203-3.6835-0.593-0.1142-0.043-0.1142-0.043-0.2285-0.085-2.7507-1.872-5.5798-3.708-8.5725-5.28 3.0131 0.994 5.9342 2.409 8.7701 4.052 0.6429 0.37 1.2074 0.776 1.9714 0.995 1.792 0.604 3.746-0.099 5.55-0.923-0.278 0.222-0.748 0.437-0.905 0.508-0.471 0.215-0.863 0.394-1.334 0.609-0.477 0.408-0.948 0.623-1.568 0.717z" clip-path="url(#clipPath9918)" fill="#8b8b8b" style=""/>
<path d="m104.04 160.81c-0.228-0.085-0.571-0.213-0.799-0.298-0.036-0.079-0.151-0.121-0.151-0.121-0.642-0.37-1.285-0.74-1.892-1.032-1.2572-0.468-2.229-0.639-3.4771-0.258-0.6633 0.208-1.7028 0.99-2.3302 1.277-1.8039 0.824-3.8167 0.533-5.7145 0.736-1.7051 0.21-5.1344-2.488-6.9284-3.195-1.794-0.706-2.0822-1.026-3.2985-1.715-1.9491-1.104-1.9713-0.996-2.957-1.493-1.3284-0.626-1.989-0.713-2.489-2.213 0-2 2.5003-4.493 2.5003-6.5-0.8664-1.143-1.4939-0.512-2.9501-0.795-0.7639-0.22-1.5279-0.44-2.1708-0.81-1.5588-1.752-3.0391-3.541-4.562-5.215 0.8713 0.455 1.6575 1.139 2.3653 1.858 0.9294 0.998 1.581 2.217 2.7525 2.914 1.3216 0.818 2.9841 0.723 4.5546 1.048 2.4913 0.474-3.3159 7.435-1.0445 8.673 2.2715 1.237 3.8077 2.43 6.3552 2.405 2.4332-0.069 7.736 4.532 10.062 4.228 0.7349-0.052 1.5124-0.217 2.2541-0.461 0.5064-0.137 0.977-0.351 1.526-0.602 0.6275-0.287 1.1765-0.537 1.8398-0.746 0.3921-0.179 0.8201-0.279 1.2055-0.266 0.4637-0.022 0.9566 0.227 1.3351 0.433 1.364 0.704 2.728 1.408 4.014 2.148z" clip-path="url(#clipPath9912)" fill="#8b8b8b" style=""/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 58 KiB

558
application/src/main/data/json/system/scada_symbols/left-top-elbow-pipe.svg

@ -0,0 +1,558 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" fill="none" version="1.1" viewBox="0 0 200 200"><tb:metadata xmlns=""><![CDATA[{
"title": "Left top elbow pipe",
"description": "Left top elbow pipe with fluid and leak visualizations.",
"searchTags": [
"pipe",
"elbow"
],
"widgetSizeX": 1,
"widgetSizeY": 1,
"stateRenderFunction": "var centerLiquidPattern = prepareLiquidPattern('center-liquid', 'center-fluid-background');\nvar horizontalLiquidPattern = prepareLiquidPattern('horizontal-liquid', 'horizontal-fluid');\n\ncenterLiquidPattern.attr({'xlink:href': '#'+horizontalLiquidPattern.id()});\n\nvar verticalLiquidPattern = prepareLiquidPattern('vertical-liquid', 'vertical-fluid');\n\nvar fluid = ctx.values.fluid && !ctx.values.leak;\nvar flow = ctx.values.flow;\nvar flowDirection = ctx.values.flowDirection;\nvar flowAnimationSpeed = ctx.values.flowAnimationSpeed;\n \nif (horizontalLiquidPattern) {\n updateLiquidPatternAnimation(horizontalLiquidPattern, fluid, \n flow, flowDirection, flowAnimationSpeed, false);\n}\n\nif (verticalLiquidPattern) {\n updateLiquidPatternAnimation(verticalLiquidPattern, fluid, \n flow, flowDirection, flowAnimationSpeed, false);\n}\n\nif (centerLiquidPattern) {\n updateLiquidPatternAnimation(centerLiquidPattern, fluid, \n flow, flowDirection, flowAnimationSpeed, true);\n}\n\nfunction prepareLiquidPattern(patternId, fluidElementTag) {\n var liquidPattern = ctx.svg.defs().findOne('pattern#'+patternId);\n var fluidElements = ctx.tags[fluidElementTag];\n\n if (liquidPattern) {\n liquidPattern.id(ctx.api.generateElementId());\n for (var i=0;i<fluidElements.length;i++) {\n fluidElements[i].fill(liquidPattern);\n }\n } else {\n liquidPattern = fluidElements[0].reference('fill');\n }\n return liquidPattern;\n}\n\nfunction updateLiquidPatternAnimation(liquidPattern, fluid, flow, flowDirection, flowAnimationSpeed, center) {\n var elementFluid = liquidPattern.remember('fluid');\n var elementFlow = null;\n var elementFlowDirection = null;\n \n if (fluid !== elementFluid) {\n liquidPattern.remember('fluid', fluid);\n elementFlow = null;\n elementFlowDirection = null;\n } else {\n elementFlow = liquidPattern.remember('flow');\n elementFlowDirection = liquidPattern.remember('flowDirection');\n }\n \n if (fluid) {\n if (flow !== elementFlow) {\n liquidPattern.remember('flow', flow);\n if (flow) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection, center);\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n } else if (flow && elementFlowDirection !== flowDirection) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection, center);\n }\n if (flow && liquidPattern) {\n liquidPattern.timeline().speed(flowAnimationSpeed);\n }\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n}\n\nfunction animateFlow(liquidPattern, forwardElseReverse, center) {\n ctx.api.resetAnimation(liquidPattern);\n var deltaX = forwardElseReverse ? 172 : -172;\n if (center) {\n var delta = deltaX * 1.17 * Math.cos(45*Math.PI/180);\n liquidPattern.animate(1000).ease('-').relative(delta, -delta).loop();\n } else {\n liquidPattern.animate(1000).ease('-').relative(deltaX, 0).loop();\n }\n}\n\n",
"tags": [
{
"tag": "center-fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}\n",
"actions": null
},
{
"tag": "fluid-background",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.fluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "horizontal-fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}\n",
"actions": null
},
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
},
{
"tag": "vertical-fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}\n",
"actions": null
}
],
"behavior": [
{
"id": "fluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": null,
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "fluidColor",
"name": "{i18n:scada.symbol.fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata>
<g transform="rotate(90,100,100)" clip-path="url(#clip0_1245_66459)">
<rect x="14" y="64" width="50" height="72" fill="#fff" tb:tag="pipe-background"/>
<rect x="14" y="64" width="50" height="72" fill="url(#paint0_linear_1245_66459)" style="fill:url(#paint0_linear_1245_66459)"/>
<rect x="15.5" y="65.5" width="47" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path class="UnoptimicedTransforms" d="m64 186v-50h72v50z" fill="#fff" tb:tag="pipe-background"/>
<path d="m64 186v-50h72v50z" fill="url(#paint1_linear_1245_66459)" style="fill:url(#paint1_linear_1245_66459)"/>
<path d="m65.5 184.5v-47h69v47z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect x="1.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<rect transform="rotate(-90,51.5,198.5)" x="51.5" y="198.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<path d="m64 64s30.518 1.7177 50.4 21.6c19.882 19.882 21.6 50.4 21.6 50.4h-72z" fill="#fff" tb:tag="pipe-background"/>
<path d="m64 64s30.518 1.7177 50.4 21.6c19.882 19.882 21.6 50.4 21.6 50.4h-72z" fill="url(#paint2_linear_1245_66459)" style="fill:url(#paint2_linear_1245_66459)"/>
<path d="m65.5 134.5v-68.865c0.8334 0.0861 1.9717 0.2211 3.3584 0.4273 3.1196 0.464 7.4889 1.2873 12.47 2.7228 9.9828 2.8767 22.316 8.1809 32.01 17.875 9.695 9.6942 14.999 22.027 17.875 32.01 1.436 4.982 2.259 9.351 2.723 12.471 0.206 1.386 0.341 2.525 0.428 3.358z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
</g><defs>
<pattern id="horizontal-liquid" width="172" height="72" patternTransform="translate(14,-8)" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<linearGradient id="paint28_linear_1182_32781-5" x1="19.316" x2="21" y1="8.2632" y2="23" gradientTransform="translate(-36,6)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint29_linear_1182_32781-1" x1="148.32" x2="150" y1="8.2632" y2="23" gradientTransform="translate(-165,135)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint30_linear_1182_32781-7" x1="111.32" x2="113" y1="9.2632" y2="24" gradientTransform="translate(-129,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint31_linear_1182_32781-4" x1="32.316" x2="34" y1="51.263" y2="66" gradientTransform="translate(-92,-24)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint32_linear_1182_32781-3" x1="153.32" x2="155" y1="51.263" y2="66" gradientTransform="translate(-213,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint33_linear_1182_32781-1" x1="31.947" x2="33" y1="21.789" y2="31" gradientTransform="translate(-59,7)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint34_linear_1182_32781-4" x1="160.95" x2="162" y1="21.789" y2="31" gradientTransform="translate(-188,136)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint35_linear_1182_32781-6" x1="3.9474" x2="5" y1="32.79" y2="42" gradientTransform="translate(-42,-32)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint36_linear_1182_32781-9" x1="93.158" x2="94" y1="4.6316" y2="12" gradientTransform="translate(-102,86)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint37_linear_1182_32781-4" x1="71.158" x2="72" y1="56.632" y2="64" gradientTransform="translate(-132,12)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint38_linear_1182_32781-2" x1="110.95" x2="112" y1="32.79" y2="42" gradientTransform="translate(-149,75)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint39_linear_1182_32781-2" x1="57.947" x2="59" y1="34.79" y2="44" gradientTransform="translate(-98,20)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint40_linear_1182_32781-6" x1="113.95" x2="115" y1="57.79" y2="67" gradientTransform="translate(-177,53)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint41_linear_1182_32781-4" x1="137.95" x2="139" y1="37.79" y2="47" gradientTransform="translate(-181,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint42_linear_1182_32781-1" x1="74.947" x2="76" y1="16.789" y2="26" gradientTransform="translate(-97,55)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint43_linear_1182_32781-2" x1="125.97" x2="126.5" y1="48.395" y2="53" gradientTransform="translate(-177,76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint44_linear_1182_32781-8" x1="168.97" x2="169.5" y1="44.395" y2="49" gradientTransform="translate(-216,123)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint45_linear_1182_32781-8" x1="56.974" x2="57.5" y1="7.3947" y2="12" gradientTransform="translate(-67,48)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint46_linear_1182_32781-9" x1="95.974" x2="96.5" y1="33.395" y2="38" gradientTransform="translate(-132,61)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint47_linear_1182_32781-2" x1="90.974" x2="91.5" y1="21.395" y2="26" gradientTransform="translate(-115,68)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint48_linear_1182_32781-88" x1="21.974" x2="22.5" y1="38.395" y2="43" gradientTransform="translate(-63,-18)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint49_linear_1182_32781-8" x1="123.97" x2="124.5" y1="21.395" y2="26" gradientTransform="translate(-148,101)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint50_linear_1182_32781-6" x1="85.974" x2="86.5" y1="45.395" y2="50" gradientTransform="translate(-134,39)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint51_linear_1182_32781-8" x1="50.974" x2="51.5" y1="19.395" y2="24" gradientTransform="translate(-73,30)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint52_linear_1182_32781-3" x1="47.974" x2="48.5" y1="49.395" y2="54" gradientTransform="translate(-100,-3)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint53_linear_1182_32781-83" x1="13.158" x2="14" y1="60.632" y2="68" gradientTransform="translate(-78,-50)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint54_linear_1182_32781-33" x1="134.16" x2="135" y1="60.632" y2="68" gradientTransform="translate(-199,71)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint55_linear_1182_32781-8" x1="93.5" x2="95.5" y1="50.5" y2="68" gradientTransform="translate(-154,37)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint84_linear_1182_32781-8" x1="248" x2="248" y1="1.8513e-7" y2="72" gradientTransform="scale(.33333 1)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" offset=".10895"/>
<stop stop-color="#fff" stop-opacity="0" offset=".11331"/>
<stop stop-color="#fff" stop-opacity="0" offset=".88736"/>
<stop stop-color="#727171" offset=".89138"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<pattern id="vertical-liquid" width="172" height="72" patternTransform="translate(14,-8)" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<clipPath id="clip0_1245_66459">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<linearGradient id="paint0_linear_1245_66459" x1="27" x2="26.346" y1="64" y2="136" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1245_66459" x1="64" x2="136" y1="173" y2="173.65" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint2_linear_1245_66459" x1="114" x2="64.321" y1="89" y2="136.34" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".35637"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".4903"/>
<stop stop-color="#fff" stop-opacity="0" offset=".56651"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".63374"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".75781"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<clipPath id="clipPath4310">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4304">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4298">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4292">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4286">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4280">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4274">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4268">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4262">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4256">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4250">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4244">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4238">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4232">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4226">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4220">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4214">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4208">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<pattern id="center-liquid" patternTransform="scale(1.17) rotate(-45)" patternUnits="userSpaceOnUse" xlink:href="#horizontal-liquid"/>
</defs><rect x="14" y="64" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><rect transform="rotate(90)" x="14" y="-136" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><rect x="14" y="64" width="50" height="72" fill="url(#horizontal-liquid)" stroke-width="0" style="display: none;" tb:tag="horizontal-fluid"/><rect transform="rotate(-90)" x="-64" y="64" width="50" height="72" fill="url(#vertical-liquid)" stroke-width="0" style="display: none;" tb:tag="vertical-fluid"/><path d="m64 64v-0.1h72c-0.0899 0.87013-0.23101 2.2585-0.44644 3.7063-0.48479 3.257-1.345 7.819-2.8448 13.02-3.0056 10.422-8.5473 23.299-18.676 33.421-10.129 10.122-23.014 15.66-33.444 18.663-5.2052 1.4993-9.7699 2.3586-13.03 2.843-1.4481 0.21507-2.789 0.35602-3.6593 0.44685v-72z" fill="#1ec1f4" stroke="#000" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><g transform="matrix(.99929 0 0 .99919 .089337 .10125)" style="display: none;" tb:tag="center-fluid">
<path d="m63.956 63.95 72.051-0.10008c-0.0901 0.87205-0.23133 2.1632-0.44707 3.6142-0.48547 3.2643-1.3469 7.8362-2.8488 13.048-3.0098 10.446-8.5594 23.351-18.702 33.495-10.143 10.145-23.046 15.695-33.491 18.704-5.2125 1.5026-9.7836 2.3638-13.048 2.8493-1.4501 0.21555-2.7428 0.3568-3.6144 0.44784z" fill="url(#center-liquid)" stroke="#000" stroke-width="0" style="" tb:tag="center-fluid-background"/>
<path d="m132.05 63.65s-0.0216 31.924-17.622 50.777c-17.142 17.939-50.672 17.628-50.672 17.628" fill="none" stroke="#727171" stroke-width="7.9" style=""/>
<path d="m63.956 63.951v-0.20016h7.9256v8.1266h-8.1358v-7.9264z" style="fill: rgb(114, 113, 113);"/>
</g><g transform="rotate(90,100,100)" style="display: none;" tb:tag="leak">
<path d="m62.784 80.767c0.417 0.1391 0.9517 0.2463 1.3259 0.4603 1.326 0.4603 2.5556 1.2628 3.3039 2.386 0.2779 0.5563 0.5129 1.1873 0.6731 1.7756 0.4915 1.5723 1.0257 3.0697 1.5599 4.5672 0.545 1.3049 1.0792 2.8023 0.544 4.0855-0.1925-0.0107-0.3101 0.0213-0.5026 0.0105 0.3307 2.3744 2.2423 0.7354 6.5024 7.0127 2.2452 8.828 4.8752 21.579 4.8212 23.236-0.0323 0.578 0.0531 1.123 0.0636 1.626-0.011 0.887-0.0969 1.732-0.3752 2.566-0.1499 0.61-0.4924 1.209-0.7172 1.775-0.6315 1.626-1.1134 3.337-1.253 5.144 0.3745-0.481 0.749-0.962 1.1234-1.443 0 0 0.353-0.096 0.2353-0.064-0.1069-0.161 0.0216-0.385 0.182-0.492 0.3527 0.599 0.7055 1.198 0.9833 1.754 1.6139 2.91 3.185 5.894 4.478 9.017-0.7155-3.091-1.8588-6.128-3.2374-9.102-0.3099-0.674-0.6626-1.273-0.8121-2.054-0.4378-1.839 0.4398-3.721 1.4243-5.443l0.0428-0.075c0.0856-0.149 0.214-0.374 0.4065-0.363 0.2354-0.064 0.4919 0.182 0.6737 0.385 0.8659 1.091 1.7746 2.108 2.6833 3.124 1.1653 1.262 2.459 2.3 3.5814 3.637 1.0156 1.177 1.8708 2.461 2.6511 3.702 0.3527 0.599 0.7482 1.123 0.8656 1.786 0.1923 0.706 0.192 1.401 0.0742 2.128-0.1287 0.92-0.2146 1.765-0.4181 2.642-1.0925 5.036 4.1863 14.098 2.2917 18.974 1.1129-1.946 2.1938-4.009 3.3067-5.955 0.4161 2.919 1.6132 5.69 2.7672 8.535 0.342 0.791 0.684 1.583 0.865 2.481 0.192 0.706 0.224 1.519 0.224 2.214 0 1.391-0.119 2.813-0.878 3.968 0.577-0.663 1.006-1.412 1.316-2.128 0.182 0.203 0.438 0.449 0.62 0.652 1.604 1.712 3.25 3.349 4.779 5.018-0.374-0.909-0.984-1.754-1.636-2.525-0.908-1.016-2.063-1.776-2.651-3.006-0.695-1.39-0.448-3.037-0.629-4.631-0.245-2.524-1.464-4.909-2.49-7.284-1.026-2.374-2.4215-4.17-3.795-8.188-0.9898-2.895-2.4972-7.611-1.9831-9.9 0.1179-0.727 0.3534-1.486 0.6638-2.203 0.182-0.492 0.4389-0.941 0.7385-1.465 0.3424-0.599 0.642-1.123 0.9096-1.764 0.2141-0.374 0.3532-0.791 0.3748-1.176 0.0643-0.46-0.1387-0.974-0.3097-1.369-0.577-1.423-1.1541-2.846-1.7311-4.268 0.0641 0.235 0.1602 0.588 0.2243 0.823 0.5127 1.883 0.9506 3.722 0.6933 5.562-0.0216 0.385-0.1607 0.802-0.4068 1.058-0.0428 0.075-0.0856 0.15-0.1605 0.107-0.3637 0.289-1.0909 0.171-1.1442-0.257-0.5668-0.224-1.112-0.834-1.4754-1.241-2.6726-3.316-5.3023-6.707-7.8572-10.055-0.2886-0.364-0.5773-0.728-0.7803-1.241-0.203-0.514-0.2563-0.942-0.2669-1.444-0.2982-3.647-2.4962-15.905-3.458-18.422-1.5388-4.028-0.5464-4.267-2.5593-5.9434 0.0535-0.2674-6.9427-5.6276-6.8891-5.8949 0.3322-1.7966 1.584-3.4646 2.7823-4.8651 1.2483-1.1574 5.2035 1.7887 5.8127 1.8117 0.6917 0.0262 13.721 15.05 14.606 16.356 0.3527 0.599 0.2189 1.786 0.4355 2.02 0.0765 0.083 1.5882 0.445 0.3927-0.21-0.023 0.609 1.7337 6.612 1.497 10.847-0.0216 0.385-0.0859 0.845-0.2251 1.262-0.0535 0.268-0.1819 0.492-0.3852 0.674-0.0428 0.075-0.1605 0.107-0.2781 0.139-0.1177 0.032-0.1497-0.086-0.2246-0.129-2.6943-2.236-5.2814-5.006-8.8318-5.746 0.1069 0.161 0.1817 0.204 0.2886 0.364 0.0749 0.043 0.1069 0.161 0.2566 0.246 1.3898 1.391 3.261 2.461 4.3728 3.991 0.5024 0.684 0.962 1.444 1.6677 1.947 0.9302 0.631 2.3097 0.824 3.0367 1.637 0.3635 0.407 0.6414 0.963 0.7695 1.433 0.3525 1.295 0.4269 2.728 0.897 3.99 0.2351 0.631 0.6627 1.273 0.8974 1.904 0.032 0.118 0.107 0.16 0.139 0.278 0.577 1.423 3.497 6.167 3.411 7.707 0.075-1.348-2.706-5.814-2.438-7.151 1.465 1.434 2.855 2.825 4.234 4.408-0.919-1.519-1.999-2.931-3.239-4.236-0.62-0.653-1.24-1.305-1.7-2.065-0.8443-1.476-0.6511-3.551 0.825-4.395 0.161-0.107 0.321-0.214 0.513-0.203 0.985-0.331 2.097-0.192 3.134-0.095 3.027 0.439 5.893 0.986 8.908 1.618 2.214 0.471 4.385 1.017 6.288 2.205 0.15 0.086 0.257 0.246 0.171 0.396 0.599-0.353 1.241-0.085 1.797 0.332 0.598 0.342 1.111 0.835 1.667 1.252 0.482 0.374 0.963 0.749 1.444 1.123 2.256 1.787 4.469 3.649 6.479 5.692-0.78-1.241-1.796-2.418-3.058-3.338-0.887-0.706-1.86-1.262-2.63-2.001-0.844-0.781-1.368-1.775-2.213-2.556-0.406-0.332-0.887-0.707-1.251-1.113 1.123-0.053 2.203-0.031 3.326-0.084-0.802-0.161-1.604-0.322-2.406-0.483-0.994-0.171-1.946-0.417-2.898-0.664-2.352-0.749-4.544-2.301-6.993-2.708-0.193-0.011-0.385-0.021-0.578-0.032 0.107 0.16 0.257 0.246 0.364 0.406-0.118 0.033-0.268-0.053-0.385-0.021-2.161-0.044-4.374-0.515-6.427-1.093-1.829-0.45-3.807-0.985-5.005-2.365-0.363-0.407-0.684-0.888-1.047-1.295-0.364-0.406-1.0054-0.674-1.5508-0.589 0.2575-2.534 1.0086-5.312-0.4558-7.441-1.1438-1.647-0.6523-3.686-2.1639-4.048 0.5862 0.632 0.9484-0.88 0.3852-2.121-0.5632-1.242-11.812-19.078-21.406-19.814-1.5082 0.7267-2.7386 2.0097-3.3594 3.4425-0.0428 0.0749-0.0428 0.0749-0.0856 0.1497-0.951-2.3317-1.9341-4.7812-3.2381-7.0168-0.4275-0.6418-0.8123-1.3585-1.4431-1.8186-1.2832-0.5352-2.898-0.6641-4.438-0.7501z" clip-path="url(#clipPath4310)" fill="#5c5a5a" style=""/>
<path d="m96.836 106.97c-0.1607 0.802-0.3972 1.217-0.1729 2.041 0.4486 1.647 1.0572 2.066 1.7411 3.649 0.6732 1.776 0.6698 2.683 0.7546 4.619 0.0211 1.005-0.0327 1.968-0.1614 2.887 0.7808-0.149 1.8421 1.436 2.3871 2.046 0.545 0.609 1.005 1.369 1.722 1.679 0.791 0.353 1.646 0.247 2.491 0.333 0.92 0.128 1.786 0.524 2.695 0.845 1.861 0.568 3.797 0.483 5.7 0.28-0.075-0.042-0.075-0.042-0.149-0.085-2.161-0.044-4.374-0.515-6.428-1.093-1.828-0.45-3.807-0.985-5.004-2.365-0.363-0.407-0.684-0.888-1.048-1.295-0.363-0.406-1.328-1.638-1.8737-1.553 0.2575-2.534 0.8497-4.297-0.615-6.426-1.1437-1.647-0.9919-2.182-1.5794-4.108-0.2138-0.321-0.374-0.909-0.4594-1.454z" clip-path="url(#clipPath4304)" fill="#8b8b8b" style=""/>
<path d="m87.799 115.57c0.1069 0.161 0.1818 0.204 0.2887 0.364 0.0748 0.043 0.1069 0.161 0.2566 0.246l0.0748 0.043c0.5667 0.225 1.1335 0.449 1.6895 0.867 0.4491 0.257 0.9302 0.631 1.3365 0.963 1.7748 1.412 3.2928 3.273 5.3993 4.279 0.2997-0.523 0.5993-1.047 0.7064-1.582-0.0535 0.267-0.182 0.492-0.3852 0.674-0.0428 0.074-0.1605 0.106-0.2781 0.138-0.1177 0.033-0.1497-0.085-0.2246-0.128-2.6835-2.429-5.3135-5.125-8.8639-5.864z" clip-path="url(#clipPath4298)" fill="#8b8b8b" style=""/>
<path d="m100.11 126.68c-0.3425 0.599-0.5032 1.401-0.4286 2.139s0.4166 1.529 0.5656 2.31c0.032 0.118 0.107 0.16 0.139 0.278 0.577 1.423 3.181 5.603 3.095 7.143 0.076-1.348-2.389-5.25-2.122-6.587 1.465 1.434 2.886 3.017 4.265 4.6-0.92-1.519-2.03-3.123-3.27-4.428-0.62-0.653-1.24-1.305-1.7-2.065-0.8442-1.476-0.651-3.551 0.825-4.395 0.161-0.107 0.321-0.214 0.514-0.203-0.428 0.053-0.781 0.149-1.102 0.363-0.278 0.139-0.567 0.471-0.781 0.845z" clip-path="url(#clipPath4292)" fill="#8b8b8b" style=""/>
<path d="m113.61 124.66c0.117 0.663 0.78 1.241 1.272 1.423 0.909 0.321 1.861 0.567 2.887 0.856 0.834 0.279 1.711 0.482 2.503 0.836 1.956 0.92 3.571 2.439 4.907 4.097 0 0 0.075 0.043 0.032 0.118 2.256 1.787 4.469 3.648 6.479 5.692-0.78-1.241-1.796-2.418-3.057-3.338-0.888-0.706-1.861-1.263-2.631-2.001-0.844-0.781-1.368-1.776-2.213-2.557-0.406-0.331-0.887-0.706-1.25-1.112 1.123-0.053 2.203-0.032 3.326-0.085-0.802-0.16-1.604-0.321-2.407-0.482-0.994-0.171-1.946-0.418-2.898-0.664-2.341-0.942-4.501-2.376-6.95-2.783z" clip-path="url(#clipPath4286)" fill="#8b8b8b" style=""/>
<path d="m75.688 97.084c0.3847 0.2128 0.8909 0.4157 1.2199 0.6943 0.7593 0.3043 1.3971 0.6186 1.9992 1.2417 0.7338 0.7346 1.3003 1.6664 1.6795 2.5524 0.6826 1.596 0.9449 3.287 1.2072 4.978 0.1261 0.785 0.3738 1.56 0.9659 2.062-0.0101-0.122-0.0101-0.122-0.0201-0.243-0.0558 0.065-0.0558 0.065-0.1115 0.131-0.51-2.466-1.0299-5.054-1.9045-7.49-0.3033-0.709-0.551-1.4833-1.0873-2.0507-0.8855-1.0892-2.4498-1.5103-3.9483-1.8757z" clip-path="url(#clipPath4280)" fill="#8b8b8b" style=""/>
<path d="m85.474 114.68c-0.1927 0.685-0.1181 1.423-0.3108 2.107-0.1179 0.727-0.3855 1.369-0.5354 1.979-0.1823 1.187 0.0633 2.32-0.0761 3.433-0.0751 0.652-0.193 1.379-0.1932 2.074 0.0851 1.241 0.951 2.332 1.71 3.263 2.8543 3.519 5.6337 6.996 8.488 10.516 0.4704 0.567 1.1653 1.262 1.914 0.995 0.2781-0.139 0.5242-0.396 0.6526-0.62-0.0428 0.075-0.0856 0.149-0.1605 0.107-0.3637 0.288-1.0909 0.17-1.1442-0.257-0.5667-0.225-1.112-0.835-1.4754-1.242-2.6726-3.316-5.3023-6.707-7.8572-10.055-0.2886-0.364-0.5773-0.728-0.7803-1.241-0.203-0.514-0.2563-0.941-0.2668-1.444-0.2982-3.647-0.468-7.519 0.731-11.005 0.0428-0.074 0.0856-0.149 0.1284-0.224 0 0 0.0748 0.043 0.1497 0.085 0.0535-0.267-0.0105-0.502 0.043-0.77-0.428 0.749-0.8561 1.497-1.0168 2.299z" clip-path="url(#clipPath4274)" fill="#8b8b8b" style=""/>
<path d="m80.849 131.36c-0.3747 1.176-0.0222 2.47 0.2554 3.722 0.0321 0.117 0.0321 0.117 0.0641 0.235 1.6139 2.91 3.185 5.894 4.478 9.017-0.7155-3.091-1.8588-6.128-3.2374-9.102-0.3099-0.674-0.6626-1.273-0.8121-2.054-0.4378-1.839 0.4398-3.721 1.4243-5.443-0.2461 0.257-0.5029 0.706-0.5885 0.856-0.2568 0.449-0.4708 0.823-0.7277 1.272-0.4493 0.438-0.7061 0.887-0.8561 1.497z" clip-path="url(#clipPath4268)" fill="#8b8b8b" style=""/>
<path d="m96.816 131.21c0.064 0.235 0.1602 0.588 0.2243 0.824 0.0748 0.042 0.1069 0.16 0.1069 0.16 0.3099 0.674 0.6198 1.348 0.8548 1.979 0.3525 1.294 0.4336 2.277-0.0588 3.486-0.2676 0.641-1.1412 1.605-1.4836 2.204-0.9845 1.722-0.8778 3.752-1.2528 5.624-0.3642 1.679 2.0111 5.339 2.5513 7.19s0.8333 2.167 1.4085 3.441c0.9213 2.041 0.8121 2.054 1.2183 3.081 0.502 1.379 0.576 2.812 1.079 4.192 0.374 0.909 0.983 1.754 1.282 2.621 0.577 1.422 0.448 3.037 0.597 4.513 0.15 0.781 0.299 1.562 0.609 2.236 1.604 1.711 3.25 3.348 4.779 5.017-0.374-0.909-0.983-1.754-1.635-2.524-0.909-1.017-2.064-1.776-2.652-3.007-0.694-1.39-0.448-3.037-0.629-4.631-0.245-2.524-1.464-4.909-2.489-7.284-1.026-2.374-2.0749-4.012-1.8174-6.547 0.2896-2.417-3.8098-8.116-3.2956-10.405 0.1179-0.727 0.3534-1.486 0.6638-2.202 0.182-0.492 0.4388-0.941 0.7384-1.465 0.3425-0.599 0.6421-1.123 0.9097-1.765 0.214-0.374 0.3532-0.791 0.3747-1.176 0.0643-0.46-0.1387-0.973-0.3097-1.369-0.577-1.423-1.154-2.845-1.7738-4.193z" clip-path="url(#clipPath4262)" fill="#8b8b8b" style=""/>
<path d="m16.279 134.17c0.4279-0.1 0.9702-0.159 1.3623-0.338 1.3624-0.337 2.6599-1.025 3.5072-2.075 0.3273-0.529 0.6188-1.136 0.8318-1.707 0.6324-1.521 1.3006-2.964 1.9688-4.407 0.6613-1.25 1.3295-2.692 0.9133-4.019-0.1927-7e-3 -0.307-0.049-0.4996-0.056 0.5452-2.334 0.3266-4.889-0.3627-7.228-0.4453-1.598-1.2759-3.209-1.179-4.865 0.0204-0.578 0.155-1.113 0.2112-1.613 0.0697-0.885 0.0611-1.734-0.1403-2.59-0.0938-0.62-0.3804-1.248-0.5527-1.833-0.4811-1.676-0.8054-3.424-0.7801-5.2361 0.3292 0.5132 0.6584 1.0264 0.9875 1.5396 0 0 0.3428 0.1278 0.2285 0.0852-0.121 0.1501-0.0135 0.3853 0.1365 0.5063 0.4058-0.5644 0.8115-1.1288 1.1388-1.6575 1.8718-2.7507 3.7078-5.5798 5.2795-8.5725-0.9937 3.0131-2.4085 5.9342-4.0518 8.7701-0.3699 0.6429-0.7756 1.2079-0.9955 1.9709-0.6033 1.793 0.0995 3.747 0.9234 5.551l0.0358 0.078c0.0717 0.157 0.1791 0.392 0.3718 0.399 0.2285 0.085 0.5064-0.137 0.7059-0.322 0.9615-1.008 1.9589-1.938 2.9562-2.867 1.2753-1.151 2.658-2.067 3.8975-3.297 1.1184-1.0795 2.0867-2.28 2.9766-3.4448 0.4057-0.5645 0.8473-1.0505 1.0245-1.7002 0.2557-0.6855 0.3187-1.3778 0.2674-2.1127-0.0445-0.9276-0.0532-1.7767-0.1761-2.6685-0.63-5.1153 5.4511-13.66 4.0078-18.688-0.2735-1.2766 0-2.776 1.7265-1.2764 1.5 2.0004 2 1.9997 5 1.9997 0.4125-0.7572 3.5 2 5 2 1 0.5 0.9415-0.3767 1.0045-1.069 0.126-1.3846 0.1377-2.8118-0.5139-4.0308 0.5151 0.7126 0.8733 1.4969 1.1172 2.2386 0.1995-0.1859 0.4774-0.4076 0.6769-0.5935 1.7526-1.5587 3.5411-3.0391 5.2153-4.562-0.4551 0.8714-1.1388 1.6575-1.8582 2.3653-0.9974 0.9294-2.2165 1.581-2.9137 2.7525-0.8182 1.3217-0.7225 2.9841-1.0479 4.5546-0.4737 2.4913-6.8401-3.4917-8.0776-1.2202-1.2376 2.2714-2.7911 3.9327-4.5243 7.8089-1.249 2.7934-3.1791 7.3531-2.8752 9.6789 0.0513 0.7349 0.2168 1.5124 0.4607 2.2541 0.1365 0.5064 0.3514 0.977 0.6022 1.526 0.2865 0.6275 0.5373 1.1765 0.7454 1.8397 0.1791 0.3922 0.2798 0.8202 0.2662 1.2055 0.0223 0.4638-0.2266 0.957-0.4329 1.335-0.704 1.364-1.408 2.729-2.112 4.093 0.0852-0.229 0.213-0.571 0.2983-0.8 0.6817-1.828 1.2851-3.62 1.1961-5.4753 0.0136-0.3853-0.0871-0.8133-0.3088-1.0912-0.0358-0.0784-0.0716-0.1569-0.1501-0.121-0.3359-0.3206-1.0708-0.2693-1.1628 0.1519-0.5849 0.1723-1.1833 0.73-1.5822 1.1018-2.9631 3.0598-5.8903 6.1978-8.7391 9.2998-0.3205 0.336-0.641 0.672-0.8899 1.164-0.2489 0.493-0.3409 0.914-0.3971 1.414-0.6286 3.605-1.1498 7.445-0.2728 11.026 0.0358 0.078 0.0717 0.156 0.1075 0.235l0.1568-0.072c0.0291 0.271-0.0561 0.5-0.0271 0.771 0.1674 1.819 1.2624 3.594 2.3283 5.098 1.1379 1.266 1.7677 1.788 2.3766 1.82 0.6911 0.037 3.0405 0.166 4.04-1.054 0.4057-0.564 0.3805-1.759 0.6175-1.972 0.0837-0.076 1.622-0.299 0.3719 0.245 0.0324-0.609 2.3279-6.428 2.4772-10.667 0.0136-0.385-0.0086-0.849-0.1093-1.277-0.029-0.271-0.1365-0.506-0.3224-0.706-0.0358-0.078-0.15-0.121-0.2643-0.163-0.1142-0.043-0.1569 0.071-0.2353 0.107-2.8865 1.982-5.7149 4.506-9.3178 4.919 0.1211-0.15 0.1995-0.186 0.3205-0.336 0.0785-0.036 0.1211-0.15 0.2779-0.222 1.5106-1.258 3.4713-2.154 4.7176-3.576 0.5626-0.636 1.0893-1.351 1.8378-1.787 0.9838-0.544 2.3752-0.611 3.1731-1.355 0.3989-0.371 0.7262-0.9 0.8967-1.357 0.4687-1.257 0.6731-2.677 1.256-3.891 0.2915-0.607 0.7757-1.208 1.0672-1.815 0.0426-0.114 0.121-0.15 0.1636-0.264 0.704-1.364 4.0433-5.8234 4.0976-7.3648-0.0475 1.3488-3.2231 5.5438-3.078 6.8988 1.589-1.294 3.0996-2.553 4.6169-4.0042-1.0535 1.4292-2.2572 2.7372-3.6108 3.9242-0.6769 0.593-1.3537 1.187-1.8805 1.901-0.9751 1.394-0.9714 3.477 0.4218 4.452 0.1501 0.122 0.3002 0.243 0.4929 0.249 0.9498 0.42 2.0701 0.382 3.1119 0.38 3.0539-0.162 5.9577-0.446 9.0184-0.801 2.2473-0.268 4.4588-0.615 6.4622-1.624 0.1569-0.072 0.2779-0.222 0.2063-0.379 0.5644 0.406 1.2277 0.198 1.8193-0.167 0.6275-0.287 1.1833-0.73 1.7749-1.095 0.5132-0.329 1.0264-0.659 1.5396-0.988 2.4091-1.574 4.7824-3.227 6.9698-5.079-0.8899 1.165-2.0083 2.244-3.3484 3.046-0.948 0.623-1.9676 1.088-2.8013 1.753-0.9121 0.701-1.5241 1.644-2.4363 2.345-0.4347 0.294-0.9479 0.623-1.3469 0.995 1.1135 0.155 2.1912 0.231 3.3047 0.386-0.8134 0.087-1.6267 0.174-2.4401 0.261-1.006 0.081-1.9762 0.24-2.9464 0.398-2.411 0.533-4.7349 1.878-7.2107 2.061-0.1927-7e-3 -0.3853-0.013-0.578-0.02 0.121-0.15 0.2779-0.222 0.3989-0.372-0.1142-0.043-0.2711 0.029-0.3854-0.014-2.1553-0.153-4.4026 0.115-6.4999 0.505-1.8619 0.281-3.8808 0.634-5.1986 1.9-0.399 0.372-0.7621 0.822-1.161 1.194-0.399 0.371-1.0623 0.58-1.5977 0.445 0.026 2.547 0.5213 5.382-1.1306 7.369-1.2889 1.537-0.9848 3.612-2.5231 3.835 0.6413-0.576 0.8645 0.962 0.1907 2.147s-6.0002 1.687-7.5503 0.783c-1.4359-0.861-2.5445-2.25-3.0324-3.733-0.0358-0.079-0.0358-0.079-0.0716-0.157-1.1591 2.235-2.3609 4.585-3.8628 6.693-0.4842 0.6-0.9325 1.279-1.6026 1.68-1.3265 0.416-2.9464 0.398-4.4878 0.343z" clip-path="url(#clipPath4256)" fill="#5c5a5a" style=""/>
<path d="m37.003 128.18c-0.0871-0.813-0.2849-1.248 0.0134-2.048 0.5966-1.6 1.2408-1.962 2.0658-3.476 0.8319-1.707 0.911-2.611 1.1715-4.531 0.1124-1 0.1464-1.963 0.1019-2.891 0.7639 0.22 1.965-1.261 2.5634-1.819s1.1252-1.272 1.8669-1.516c0.8201-0.28 1.6625-0.096 2.5117-0.105 0.9276-0.044 1.8261-0.36 2.7605-0.597 1.9046-0.396 3.8246-0.135 5.702 0.24-0.0784 0.035-0.0784 0.035-0.1568 0.071-2.1554-0.153-4.4027 0.115-6.4999 0.504-1.862 0.282-3.8808 0.635-5.1987 1.901-0.399 0.371-0.7621 0.822-1.161 1.193-0.399 0.372-1.4722 1.511-2.0077 1.376 0.026 2.548 0.4552 4.357-1.1968 6.344-1.2888 1.537-1.1862 2.083-1.9464 3.947-0.2421 0.3-0.4552 0.871-0.5898 1.407z" clip-path="url(#clipPath4250)" fill="#8b8b8b" style=""/>
<path d="m28.786 118.79c0.121-0.15 0.1995-0.185 0.3205-0.336 0.0784-0.035 0.121-0.15 0.2779-0.221l0.0784-0.036c0.5849-0.172 1.1697-0.345 1.7613-0.71 0.4706-0.215 0.9838-0.544 1.4186-0.837 1.8959-1.245 3.5769-2.961 5.7661-3.771 0.2508 0.549 0.5015 1.098 0.5596 1.64-0.029-0.271-0.1365-0.506-0.3224-0.706-0.0358-0.078-0.1501-0.121-0.2643-0.163-0.1143-0.043-0.1569 0.071-0.2353 0.107-2.8933 2.175-5.7575 4.62-9.3604 5.033z" clip-path="url(#clipPath4244)" fill="#8b8b8b" style=""/>
<path d="m42.054 108.84c-0.2865-0.628-0.3736-1.441-0.2322-2.169s0.5539-1.485 0.7738-2.249c0.0426-0.114 0.121-0.15 0.1636-0.264 0.704-1.365 3.6774-5.2907 3.7318-6.8322-0.0476 1.3488-2.8573 5.0102-2.7122 6.3662 1.589-1.295 3.1477-2.742 4.665-4.1932-1.0536 1.4292-2.3053 2.9262-3.659 4.1132-0.6768 0.593-1.3537 1.187-1.8804 1.901-0.9751 1.393-0.9714 3.477 0.4218 4.452 0.1501 0.121 0.3002 0.242 0.4929 0.249-0.4212-0.092-0.764-0.22-1.0641-0.462-0.2643-0.164-0.5219-0.52-0.701-0.912z" clip-path="url(#clipPath4238)" fill="#8b8b8b" style=""/>
<path d="m55.316 112.09c0.1773-0.65 0.8899-1.165 1.3963-1.302 0.9344-0.237 1.9046-0.396 2.9533-0.59 0.8559-0.202 1.7477-0.324 2.5678-0.604 2.0324-0.739 3.7783-2.105 5.2598-3.635 0 0 0.0784-0.035 0.0426-0.114 2.4091-1.574 4.7824-3.227 6.9698-5.079-0.8899 1.165-2.0083 2.244-3.3484 3.046-0.948 0.623-1.9676 1.088-2.8013 1.753-0.9121 0.701-1.5241 1.644-2.4363 2.345-0.4347 0.294-0.9479 0.623-1.3469 0.995 1.1135 0.155 2.1912 0.231 3.3047 0.386-0.8134 0.087-1.6267 0.174-2.4401 0.261-1.006 0.081-1.9762 0.239-2.9464 0.398-2.4177 0.725-4.699 1.957-7.1749 2.14z" clip-path="url(#clipPath4232)" fill="#8b8b8b" style=""/>
<path d="m16.28 134.17c0.428-0.101 0.9702-0.159 1.3624-0.338 0.8133-0.087 1.5124-0.217 2.2609-0.654 0.9053-0.508 1.7032-1.251 2.3084-2.002 1.0894-1.35 1.8002-2.907 2.511-4.464 0.3341-0.721 0.7824-1.4 1.4883-1.723-0.0426 0.115-0.0426 0.115-0.0852 0.229-0.0358-0.079-0.0358-0.079-0.0716-0.157-1.1592 2.236-2.3609 4.586-3.8628 6.693-0.4842 0.601-0.9325 1.279-1.6026 1.68-1.1474 0.809-2.7673 0.79-4.3088 0.736z" clip-path="url(#clipPath4226)" fill="#8b8b8b" style=""/>
<path d="m25.894 119.74c-0.1297-0.699 0.0117-1.427-0.118-2.126-0.0512-0.735-0.2594-1.398-0.3532-2.019-0.0736-1.199 0.2741-2.305 0.2364-3.425-0.0154-0.657-0.0667-1.392-0.0037-2.084 0.1976-1.228 1.1591-2.236 1.9996-3.094 3.1625-3.245 6.2466-6.455 9.4092-9.6999 0.5199-0.5219 1.2752-1.1512 1.9965-0.8171 0.2644 0.1637 0.4861 0.4416 0.5935 0.6769-0.0358-0.0785-0.0716-0.1569-0.15-0.1211-0.336-0.3205-1.0709-0.2692-1.1629 0.152-0.5848 0.1723-1.1833 0.7299-1.5822 1.1017-2.9631 3.0595-5.8903 6.1975-8.7391 9.2995-0.3205 0.336-0.641 0.672-0.8899 1.165s-0.3409 0.914-0.397 1.413c-0.6287 3.605-1.1498 7.445-0.2728 11.026 0.0358 0.078 0.0716 0.157 0.1074 0.235 0 0 0.0784-0.036 0.1569-0.071 0.029 0.271-0.0562 0.499-0.0272 0.77-0.3582-0.784-0.7164-1.568-0.8035-2.382z" clip-path="url(#clipPath4220)" fill="#8b8b8b" style=""/>
<path d="m23.301 102.44c-0.2662-1.206 0.2025-2.4623 0.5928-3.6832 0.0426-0.1143 0.0426-0.1143 0.0852-0.2285 1.8718-2.7507 3.7078-5.5798 5.2794-8.5726-0.9936 3.0131-2.4084 5.9343-4.0517 8.7702-0.3699 0.6429-0.7756 1.2073-0.9955 1.9711-0.6033 1.792 0.0995 3.746 0.9234 5.55-0.2217-0.278-0.4367-0.748-0.5083-0.905-0.2149-0.471-0.394-0.863-0.6089-1.333-0.4076-0.478-0.6226-0.948-0.7164-1.569z" clip-path="url(#clipPath4214)" fill="#8b8b8b" style=""/>
<path d="m39.188 104.04c0.0852-0.228 0.213-0.571 0.2982-0.799 0.0785-0.036 0.1211-0.151 0.1211-0.151 0.3699-0.642 0.7398-1.285 1.0313-1.892 0.4687-1.2572 0.6388-2.2291 0.2584-3.4772-0.2082-0.6632-0.9905-1.7027-1.277-2.3301-0.8239-1.8039-0.5329-3.8167-0.7361-5.7145-0.21-1.7051 2.4883-5.1344 3.1945-6.9284 0.7063-1.794 1.027-2.0822 1.7156-3.2985 1.1036-1.9492 0.9955-1.9713 1.4933-2.957 0.6255-1.3284 0.7126-1.9891 2.2126-2.4891 2 0 4.493 2.5003 6.5 2.5003 1.1428-0.8663 0.5121-1.4938 0.7949-2.95 0.2199-0.764 0.4397-1.5279 0.8096-2.1708 1.7527-1.5588 3.5411-3.0391 5.2153-4.5621-0.4551 0.8714-1.1387 1.6576-1.8582 2.3653-0.9974 0.9295-2.2164 1.5811-2.9137 2.7526-0.8182 1.3216-0.7225 2.9841-1.0479 4.5546-0.4736 2.4913-7.4351-3.3159-8.6727-1.0445-1.2375 2.2714-2.4308 3.8077-2.4048 6.3552 0.0686 2.4332-4.5321 7.7359-4.2282 10.062 0.0512 0.7349 0.2168 1.5124 0.4607 2.2541 0.1365 0.5064 0.3514 0.977 0.6022 1.526 0.2865 0.6275 0.5373 1.1765 0.7454 1.8397 0.1791 0.3922 0.2798 0.8202 0.2662 1.2055 0.0222 0.4638-0.2266 0.9567-0.4329 1.3352-0.704 1.364-1.408 2.728-2.1478 4.014z" clip-path="url(#clipPath4208)" fill="#8b8b8b" style=""/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 51 KiB

88
application/src/main/data/json/system/scada_symbols/long-bottom-filter.svg

@ -0,0 +1,88 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="200" height="600" fill="none" version="1.1" viewBox="0 0 200 600">
<tb:metadata xmlns=""><![CDATA[{
"title": "Long bottom filter",
"description": "Long bottom filter",
"searchTags": [
"filter"
],
"widgetSizeX": 1,
"widgetSizeY": 3,
"tags": [
{
"tag": "clickArea",
"stateRenderFunction": null,
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'click');"
}
}
}
],
"behavior": [
{
"id": "click",
"name": "{i18n:scada.symbol.on-click}",
"hint": "{i18n:scada.symbol.on-click-hint}",
"group": null,
"type": "widgetAction",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": {
"type": "doNothing",
"openInSeparateDialog": false,
"openInPopover": false
}
}
],
"properties": []
}]]></tb:metadata><mask id="path-9-inside-1_1547_237341" fill="white">
<path d="m29 168c-3.866 0-7-3.134-7-7s3.134-7 7-7h142c3.866 0 7 3.134 7 7s-3.134 7-7 7h-142z"/>
</mask><g tb:tag="clickArea">
<rect x="187.5" y="51.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3"/>
<rect x="1.5" y="51.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3"/>
<path d="m172 64h14v72h-14v-72z" fill="#fff"/>
<path d="m172 64h14v72h-14v-72z" fill="url(#paint0_linear_1547_237341)"/>
<path d="m173.5 65.5h11v69h-11v-69z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m14 64h14v72h-14v-72z" fill="#fff"/>
<path d="m14 64h14v72h-14v-72z" fill="url(#paint1_linear_1547_237341)"/>
<path d="m15.5 65.5h11v69h-11v-69z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m28.685 168.88c-0.0235-0.891-0.3439-1.749-0.9105-2.437l-4.477-5.438s-2.9203-73.294 0-119.5c0.7949-12.578 2.4797-30.38 3.2135-37.912 0.1992-2.0442 1.9174-3.588 3.9713-3.588h139.03c2.054 0 3.772 1.5438 3.972 3.588 0.733 7.5322 2.418 25.334 3.213 37.912 2.92 46.206 0 119.5 0 119.5l-4.477 5.438c-0.566 0.688-0.887 1.546-0.91 2.437l-9.449 359.25c-0.209 7.932-3.522 15.466-9.226 20.981-29.355 28.382-75.925 28.382-105.28 0-5.7046-5.515-9.0173-13.049-9.226-20.981l-9.449-359.25z" fill="#93979B"/>
<path d="m28.685 168.88c-0.0235-0.891-0.3439-1.749-0.9105-2.437l-4.477-5.438s-2.9203-73.294 0-119.5c0.7949-12.578 2.4797-30.38 3.2135-37.912 0.1992-2.0442 1.9174-3.588 3.9713-3.588h139.03c2.054 0 3.772 1.5438 3.972 3.588 0.733 7.5322 2.418 25.334 3.213 37.912 2.92 46.206 0 119.5 0 119.5l-4.477 5.438c-0.566 0.688-0.887 1.546-0.91 2.437l-9.449 359.25c-0.209 7.932-3.522 15.466-9.226 20.981-29.355 28.382-75.925 28.382-105.28 0-5.7046-5.515-9.0173-13.049-9.226-20.981l-9.449-359.25z" fill="url(#paint2_linear_1547_237341)"/>
<path d="m30.185 168.84c-0.0323-1.226-0.4729-2.405-1.252-3.351l-4.1557-5.048c-0.0037-0.096-0.0078-0.205-0.0125-0.328-0.0206-0.547-0.0505-1.356-0.0875-2.402-0.0741-2.092-0.1767-5.133-0.2906-8.926-0.228-7.588-0.5016-18.186-0.684-30.226-0.3649-24.093-0.3639-53.919 1.0923-76.96 0.7931-12.55 2.4755-30.327 3.2095-37.861 0.1235-1.2679 1.1886-2.2334 2.4783-2.2334h139.03c1.29 0 2.355 0.96558 2.479 2.2334 0.734 7.5338 2.416 25.312 3.209 37.861 1.456 23.041 1.457 52.867 1.092 76.96-0.182 12.04-0.456 22.638-0.684 30.226-0.114 3.793-0.216 6.834-0.29 8.926-0.037 1.046-0.067 1.855-0.088 2.402-4e-3 0.123-9e-3 0.232-0.012 0.328l-4.156 5.048c-0.779 0.946-1.22 2.125-1.252 3.351l-9.449 359.25c-0.198 7.539-3.347 14.7-8.769 19.942-28.773 27.819-74.421 27.819-103.19 0-5.4221-5.242-8.5708-12.403-8.7691-19.942l-9.449-359.25z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m29 168c-3.866 0-7-3.134-7-7s3.134-7 7-7h142c3.866 0 7 3.134 7 7s-3.134 7-7 7h-142z" fill="#D9D9D9"/>
<path d="m29 157h142v-6h-142v6zm142 8h-142v6h142v-6zm4-4c0 2.209-1.791 4-4 4v6c5.523 0 10-4.477 10-10h-6zm-4-4c2.209 0 4 1.791 4 4h6c0-5.523-4.477-10-10-10v6zm-146 4c0-2.209 1.7909-4 4-4v-6c-5.5228 0-10 4.477-10 10h6zm-6 0c0 5.523 4.4772 10 10 10v-6c-2.2091 0-4-1.791-4-4h-6z" fill="#727171" mask="url(#path-9-inside-1_1547_237341)"/>
<path d="m39.405 525.76-9.8625-356.26h139.92l-8.936 356.4c-0.012 0.509 7e-3 1.054 0.024 1.539 7e-3 0.21 0.014 0.408 0.018 0.588 0.064 2.99-0.732 13.748-14.681 24.317-5.187 3.931-8.595 5.835-16.062 9.599-3.769 1.9-5.572 2.792-7.409 3.499-1.716 0.661-3.47 1.163-6.906 2.148l-0.651 0.187c-3.732 0.359-7.549 0.541-10.451 0.633-1.467 0.046-2.697 0.069-3.559 0.081-0.431 5e-3 -0.769 8e-3 -0.9997 0.01-0.1151 0-0.2032 1e-3 -0.2621 1e-3h-0.0662-0.0163-0.0082-0.0143-0.0605c-0.0542-1e-3 -0.136-1e-3 -0.2439-2e-3 -0.2157-3e-3 -0.5353-7e-3 -0.9461-0.017-0.8216-0.019-2.007-0.058-3.4535-0.135-2.8959-0.155-6.825-0.463-10.972-1.079-4.0519-0.602-5.9098-1.365-7.6567-2.286-0.3936-0.207-0.793-0.43-1.2168-0.666-1.5086-0.841-3.3251-1.853-6.2786-2.961-1.8664-1.122-3.3003-1.965-4.544-2.695-3.3763-1.984-5.3499-3.144-10.766-6.83-13.587-9.246-14.161-20.339-14.011-23.639 0.0068-0.148 0.0148-0.303 0.0231-0.462 0.0317-0.612 0.0672-1.294 0.0485-1.968z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
</g><defs>
<linearGradient id="paint0_linear_1547_237341" x1="175.64" x2="173.3" y1="64" y2="135.93" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1547_237341" x1="17.64" x2="15.305" y1="64" y2="135.93" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint2_linear_1547_237341" x1="189.19" x2="10.798" y1="503.51" y2="502.96" gradientUnits="userSpaceOnUse">
<stop stop-color="#020202" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".23574"/>
<stop stop-color="#fff" stop-opacity=".12" offset=".39937"/>
<stop stop-color="#fff" stop-opacity=".3" offset=".49829"/>
<stop stop-color="#fff" stop-opacity=".12" offset=".59721"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".76303"/>
<stop stop-color="#020202" stop-opacity=".35" offset="1"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.9 KiB

487
application/src/main/data/json/system/scada_symbols/long-horizontal-pipe.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 46 KiB

88
application/src/main/data/json/system/scada_symbols/long-top-filter.svg

@ -0,0 +1,88 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="200" height="600" fill="none" version="1.1" viewBox="0 0 200 600">
<tb:metadata xmlns=""><![CDATA[{
"title": "Long top filter",
"description": "Title\nLong top filter\n",
"searchTags": [
"filter"
],
"widgetSizeX": 1,
"widgetSizeY": 3,
"tags": [
{
"tag": "clickArea",
"stateRenderFunction": null,
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'click');"
}
}
}
],
"behavior": [
{
"id": "click",
"name": "{i18n:scada.symbol.on-click}",
"hint": "{i18n:scada.symbol.on-click-hint}",
"group": null,
"type": "widgetAction",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": {
"type": "doNothing",
"openInSeparateDialog": false,
"openInPopover": false
}
}
],
"properties": []
}]]></tb:metadata><mask id="path-9-inside-1_1547_237349" fill="white">
<path d="m29 446c-3.866 0-7-3.134-7-7s3.134-7 7-7h142c3.866 0 7 3.134 7 7s-3.134 7-7 7h-142z"/>
</mask><g tb:tag="clickArea">
<rect x="187.5" y="451.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3"/>
<rect x="1.5" y="451.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3"/>
<path d="m172 464h14v72h-14v-72z" fill="#fff"/>
<path d="m172 464h14v72h-14v-72z" fill="url(#paint0_linear_1547_237349)"/>
<path d="m173.5 465.5h11v69h-11v-69z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m14 464h14v72h-14v-72z" fill="#fff"/>
<path d="m14 464h14v72h-14v-72z" fill="url(#paint1_linear_1547_237349)"/>
<path d="m15.5 465.5h11v69h-11v-69z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m171.32 431.12c0.023 0.891 0.344 1.749 0.91 2.437l4.477 5.438s2.92 73.294 0 119.5c-0.795 12.578-2.48 30.38-3.213 37.912-0.2 2.044-1.918 3.588-3.972 3.588h-139.03c-2.0539 0-3.7721-1.544-3.9713-3.588-0.7338-7.532-2.4186-25.334-3.2135-37.912-2.9203-46.206 0-119.5 0-119.5l4.477-5.438c0.5666-0.688 0.887-1.546 0.9105-2.437l9.449-359.25c0.2086-7.9322 3.5214-15.466 9.226-20.981 29.355-28.382 75.925-28.382 105.28 0 5.704 5.5154 9.017 13.049 9.226 20.981l9.449 359.25z" fill="#93979B"/>
<path d="m171.32 431.12c0.023 0.891 0.344 1.749 0.91 2.437l4.477 5.438s2.92 73.294 0 119.5c-0.795 12.578-2.48 30.38-3.213 37.912-0.2 2.044-1.918 3.588-3.972 3.588h-139.03c-2.0539 0-3.7721-1.544-3.9713-3.588-0.7338-7.532-2.4186-25.334-3.2135-37.912-2.9203-46.206 0-119.5 0-119.5l4.477-5.438c0.5666-0.688 0.887-1.546 0.9105-2.437l9.449-359.25c0.2086-7.9322 3.5214-15.466 9.226-20.981 29.355-28.382 75.925-28.382 105.28 0 5.704 5.5154 9.017 13.049 9.226 20.981l9.449 359.25z" fill="url(#paint2_linear_1547_237349)"/>
<path d="m169.82 431.16c0.032 1.226 0.473 2.405 1.252 3.351l4.156 5.048c3e-3 0.096 8e-3 0.205 0.012 0.328 0.021 0.547 0.051 1.356 0.088 2.402 0.074 2.092 0.176 5.133 0.29 8.926 0.228 7.588 0.502 18.186 0.684 30.226 0.365 24.093 0.364 53.919-1.092 76.96-0.793 12.55-2.475 30.328-3.209 37.862-0.124 1.267-1.189 2.233-2.479 2.233h-139.03c-1.2897 0-2.3548-0.966-2.4783-2.233-0.734-7.534-2.4164-25.312-3.2095-37.862-1.4562-23.041-1.4572-52.867-1.0923-76.96 0.1824-12.04 0.456-22.638 0.684-30.226 0.1139-3.793 0.2165-6.834 0.2906-8.926 0.037-1.046 0.0669-1.855 0.0875-2.402 0.0047-0.123 0.0088-0.232 0.0125-0.328l4.1557-5.048c0.7791-0.946 1.2197-2.125 1.2519-3.351l9.4491-359.25c0.1983-7.5393 3.347-14.7 8.7691-19.942 28.773-27.819 74.421-27.819 103.19 0 5.422 5.2424 8.571 12.403 8.769 19.942l9.449 359.25z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m29 446c-3.866 0-7-3.134-7-7s3.134-7 7-7h142c3.866 0 7 3.134 7 7s-3.134 7-7 7h-142z" fill="#D9D9D9"/>
<path d="m29 435h142v-6h-142v6zm142 8h-142v6h142v-6zm4-4c0 2.209-1.791 4-4 4v6c5.523 0 10-4.477 10-10h-6zm-4-4c2.209 0 4 1.791 4 4h6c0-5.523-4.477-10-10-10v6zm-146 4c0-2.209 1.7909-4 4-4v-6c-5.5228 0-10 4.477-10 10h6zm-6 0c0 5.523 4.4772 10 10 10v-6c-2.2091 0-4-1.791-4-4h-6z" fill="#727171" mask="url(#path-9-inside-1_1547_237349)"/>
<path d="m159.6 74.24 9.863 356.26h-139.92l8.9355-356.4c0.0128-0.5096-0.0064-1.0541-0.0234-1.5394-0.0074-0.2097-0.0144-0.4083-0.0183-0.5883-0.0641-2.9895 0.7325-13.748 14.681-24.317 5.1873-3.9306 8.5947-5.8345 16.062-9.5988 3.7684-1.8995 5.5723-2.7919 7.4086-3.4987 1.7165-0.6608 3.4698-1.1632 6.9059-2.148l0.651-0.1866c3.7322-0.3597 7.549-0.5415 10.452-0.6331 1.4671-0.0462 2.6967-0.0694 3.5585-0.0809 0.4309-0.0058 0.7696-0.0087 1-0.0101 0.1151-7e-4 0.2032-0.0011 0.2621-0.0012l0.0662-2e-4h0.0163 0.0082 0.0143l0.0605 2e-4c0.0542 3e-4 0.136 9e-4 0.2439 0.0021 0.2158 0.0024 0.5358 0.0072 0.9458 0.0168 0.822 0.0192 2.007 0.0577 3.454 0.1349 2.896 0.1545 6.825 0.4632 10.972 1.0789 4.051 0.6016 5.909 1.3651 7.656 2.2858 0.394 0.2074 0.793 0.4301 1.217 0.6662 1.509 0.8408 3.325 1.8532 6.279 2.9615 1.866 1.1218 3.3 1.9643 4.544 2.695 3.376 1.9838 5.35 3.1434 10.766 6.8296 13.587 9.2463 14.161 20.339 14.011 23.639-7e-3 0.1485-0.015 0.3032-0.023 0.4626-0.032 0.6121-0.067 1.2942-0.049 1.9673z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
</g><defs>
<linearGradient id="paint0_linear_1547_237349" x1="175.64" x2="173.3" y1="464" y2="535.93" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1547_237349" x1="17.64" x2="15.305" y1="464" y2="535.93" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint2_linear_1547_237349" x1="10.811" x2="189.2" y1="96.486" y2="97.044" gradientUnits="userSpaceOnUse">
<stop stop-color="#020202" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".23574"/>
<stop stop-color="#fff" stop-opacity=".12" offset=".39937"/>
<stop stop-color="#fff" stop-opacity=".3" offset=".49829"/>
<stop stop-color="#fff" stop-opacity=".12" offset=".59721"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".76303"/>
<stop stop-color="#020202" stop-opacity=".35" offset="1"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.9 KiB

484
application/src/main/data/json/system/scada_symbols/long-vertical-pipe.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 39 KiB

167
application/src/main/data/json/system/scada_symbols/right-drain-pipe.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 20 KiB

178
application/src/main/data/json/system/scada_symbols/right-elbow-drain-pipe.svg

@ -0,0 +1,178 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="400" height="200" fill="none" version="1.1" viewBox="0 0 400 200">
<tb:metadata xmlns=""><![CDATA[{
"title": "Right elbow drain pipe",
"description": "Right elbow drain pipe",
"searchTags": [
"pipe",
"drain"
],
"widgetSizeX": 2,
"widgetSizeY": 1,
"tags": [
{
"tag": "clickArea",
"stateRenderFunction": null,
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'click');"
}
}
},
{
"tag": "fluid-background",
"stateRenderFunction": "var color = ctx.properties.fluidColor;\nelement.attr({fill: color});",
"actions": null
},
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
}
],
"behavior": [
{
"id": "click",
"name": "{i18n:scada.symbol.on-click}",
"hint": "{i18n:scada.symbol.on-click-hint}",
"group": null,
"type": "widgetAction",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": {
"type": "doNothing",
"openInSeparateDialog": false,
"openInPopover": false
}
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"key": "state",
"scope": null
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"compareToValue": true,
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "fluidColor",
"name": "{i18n:scada.symbol.fluid-color}",
"type": "color",
"default": "#8CAA5C",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata><g tb:tag="clickArea">
<rect x="136" y="64" width="164" height="72" fill="#fff" tb:tag="pipe-background"/>
<rect x="136" y="64" width="164" height="72" fill="url(#paint0_linear_1924_304906)"/>
<rect x="137.5" y="65.5" width="161" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m64 64v-50h72v50h-72z" fill="#fff" tb:tag="pipe-background"/>
<path d="m64 64v-50h72v50h-72z" fill="url(#paint1_linear_1924_304906)"/>
<path d="m65.5 62.5v-47h69v47h-69z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect transform="rotate(-90 51.5 12.5)" x="51.5" y="12.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3"/>
<path d="m136 136s-30.518-1.718-50.4-21.6-21.6-50.4-21.6-50.4h72v72z" fill="#fff" tb:tag="pipe-background"/>
<path d="m136 136s-30.518-1.718-50.4-21.6-21.6-50.4-21.6-50.4h72v72z" fill="url(#paint2_linear_1924_304906)"/>
<path d="m134.5 65.5v68.865c-0.833-0.087-1.972-0.222-3.358-0.428-3.12-0.464-7.489-1.287-12.471-2.723-9.983-2.876-22.316-8.18-32.01-17.875-9.6942-9.694-14.998-22.027-17.875-32.01-1.4355-4.9815-2.2588-9.3508-2.7228-12.47-0.2062-1.3867-0.3412-2.525-0.4273-3.3584h68.865z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<ellipse transform="rotate(-90 300 100)" cx="300" cy="100" rx="36" ry="4" fill="#5D5C5C"/>
<path d="m323 94.5c-4-9.2-20-22.333-24-24.5 0 0-1.5 18.101-1.5 30.5s1.5 33 1.5 33c0 6.5-1.5 9-4 14.5-5.089 11.196-3.5 10.5-12.5 13.5s-24 2.5-21.5 11.5 32-8 34-4-16 17-10.5 21.5 17.5-10.5 21.5-10.5 4.5 10.5 10 10.5 7-11.5 16-10.5 12 13 18 17 14-2 14.5-11-20.5-7-20.5-13 39 1.5 45.5-4 0.5-6.5-6.5-10.5-38 5.5-39 0 16.5 0 15-5.5-16.5-2-23-10.5-8-36.5-13-48z" fill="#8CAA5C" tb:tag="fluid-background"/>
</g><g style="display: none;" tb:tag="leak">
<path d="m153.01 88.724c0.447 0.4587 0.927 1.092 1.445 1.447 1.445 1.447 3.278 2.5504 5.226 2.8189 0.906 0.0114 1.883-0.0808 2.756-0.244 2.374-0.3533 4.677-0.603 6.98-0.8527 2.058-0.1135 4.361-0.3632 5.704-1.8795-0.136-0.2456-0.169-0.4203-0.305-0.6659 3.324-1.0731 6.348-3.2652 8.751-5.8832 1.66-1.7562 3.047-4.0038 5.187-5.1267 0.737-0.4088 1.507-0.6431 2.173-0.9483 1.157-0.5778 2.21-1.2265 3.128-2.121 0.704-0.5835 1.272-1.4126 1.873-2.0672 1.731-1.8598 3.669-3.5777 5.951-4.9079-0.394 0.7965-0.787 1.593-1.18 2.3895 0 0 0.098 0.524 0.065 0.3493-0.278-0.0384-0.491 0.2726-0.53 0.5509 1.01 0.0824 2.019 0.1648 2.925 0.1763 4.841 0.2702 9.752 0.4367 14.669 0.1503-4.508 1.0234-9.218 1.4518-13.993 1.5309-1.081 0.0212-2.09-0.0613-3.209 0.2382-2.691 0.5933-4.602 2.9388-6.235 5.3226l-0.071 0.1036c-0.142 0.2073-0.355 0.5182-0.219 0.7639 0.066 0.3493 0.551 0.5296 0.933 0.639 1.981 0.4432 3.89 0.99 5.8 1.5368 2.395 0.7272 4.578 1.7653 7.044 2.3888 2.188 0.5852 4.414 0.8921 6.537 1.1279 1.009 0.0825 1.948 0.2686 2.892 0.0017 1.048-0.1959 1.96-0.6373 2.838-1.2535 1.125-0.7524 2.179-1.4012 3.2-2.2247 5.912-4.6296 21.148-3.4571 26.341-9.0368-1.846 2.6948-3.867 5.4222-5.713 8.1169 4.093-1.3073 8.487-1.4958 12.951-1.7879 1.255-0.0539 2.51-0.1077 3.803-0.4398 1.048-0.1959 2.135-0.67 3.046-1.1115 1.823-0.883 3.614-1.9407 4.646-3.67-0.502 1.1785-1.212 2.2149-1.955 3.0767 0.382 0.1094 0.867 0.2897 1.249 0.3991 3.263 1.0169 6.455 2.1374 9.614 3.0833-1.43 0.0865-2.925-0.1763-4.349-0.5427-1.91-0.5468-3.639-1.5792-5.625-1.5695-2.265-0.0285-4.269 1.34-6.474 2.1137-3.466 1.2804-7.368 1.1963-11.133 1.3578-3.766 0.1616-7.007-0.5296-13.148 0.2188-4.426 0.5394-11.568 1.5556-14.243 3.6823-0.879 0.6161-1.726 1.4069-2.468 2.2687-0.53 0.5509-0.956 1.1728-1.453 1.8983-0.568 0.8291-1.065 1.5546-1.737 2.3128-0.355 0.5182-0.813 0.9654-1.305 1.238-0.562 0.3762-1.364 0.4358-1.992 0.4627-2.232 0.1461-4.464 0.2921-6.696 0.4382 0.349-0.0653 0.873-0.1632 1.223-0.2285 2.794-0.5223 5.485-1.1156 7.734-2.6204 0.491-0.2726 0.95-0.7198 1.13-1.2054 0.071-0.1037 0.142-0.2073 0.039-0.2783 0.147-0.6602-0.469-1.5392-1.064-1.3376-0.654-0.6007-1.8-0.9287-2.564-1.1475-6.046-1.4005-12.162-2.6973-18.175-3.9232-0.661-0.1477-1.321-0.2954-2.123-0.2359-0.802 0.0596-1.397 0.2612-2.063 0.5664-4.973 1.9235-10.158 4.1579-13.969 7.9429-0.071 0.1037-0.142 0.2073-0.213 0.311 0 0 0.103 0.071 0.207 0.142-0.317 0.2399-0.666 0.3052-0.983 0.5451-2.145 1.5759-3.538 4.2764-4.615 6.7369-0.726 2.3722-0.904 3.5502-0.487 4.3342 0.474 0.891 2.078 3.92 4.351 4.252 1.01 0.082 2.483-0.847 2.927-0.711 0.157 0.048 1.591 1.801-0.027 0.649 0.784-0.417 9.773-1.923 15.178-4.922 0.491-0.272 1.053-0.649 1.512-1.096 0.317-0.24 0.53-0.551 0.639-0.933 0.071-0.103 0.038-0.278 6e-3 -0.453-0.033-0.174-0.208-0.142-0.311-0.213-4.643-2.1141-9.919-3.7488-13.142-7.9363 0.278 0.0384 0.382 0.1094 0.66 0.1477 0.104 0.0711 0.279 0.0384 0.486 0.1804 2.706 0.9402 5.297 2.7153 8.009 3.2025 1.217 0.2244 2.505 0.3452 3.612 0.9516 1.418 0.8194 2.547 2.5063 4.075 2.9441 0.764 0.218 1.67 0.23 2.368 0.099 1.921-0.3588 3.848-1.1708 5.802-1.3552 0.977-0.0923 2.09 0.0612 3.067-0.031 0.174-0.0327 0.278 0.0384 0.453 0.0057 2.232-0.146 10.307 0.6727 12.272-0.4176-1.719 0.954-9.342 0.141-10.925 1.3406 2.81 1.0115 5.516 1.9515 8.468 2.7555-2.576-0.242-5.113-0.762-7.612-1.56-1.249-0.399-2.499-0.798-3.786-0.919-2.472-0.17-5.071 1.4-5.242 3.872-0.038 0.278-0.076 0.556 0.06 0.802 0.19 1.501 1.079 2.871 1.864 4.17 2.497 3.691 5.033 7.103 7.776 10.657 2.023 2.604 4.117 5.105 6.883 6.847 0.207 0.142 0.485 0.181 0.627-0.027-0.082 1.01 0.676 1.681 1.576 2.146 0.829 0.568 1.8 0.929 2.7 1.393 0.797 0.393 1.593 0.787 2.39 1.18 3.775 1.825 7.622 3.546 11.577 4.885-2.123-0.236-4.31-0.821-6.318-1.891-1.489-0.716-2.837-1.639-4.294-2.18-1.56-0.612-3.197-0.668-4.757-1.28-0.693-0.322-1.49-0.716-2.254-0.934 0.643 1.506 1.357 2.909 2.001 4.415-0.72-0.949-1.44-1.899-2.16-2.849-0.856-1.196-1.783-2.288-2.71-3.38-2.476-2.61-5.902-4.5-7.99-7.453-0.137-0.246-0.273-0.492-0.409-0.737 0.278 0.038 0.485 0.18 0.764 0.218-0.033-0.174-0.24-0.316-0.273-0.491-1.428-2.806-3.451-5.41-5.513-7.736-1.75-2.113-3.708-4.368-6.278-5.062-0.764-0.219-1.599-0.334-2.362-0.553-0.764-0.218-1.523-0.89-1.757-1.66-3.161 1.947-6.328 4.695-10.049 4.125-2.887-0.454-5.249 1.484-6.683-0.268 1.201 0.367-0.552 1.802-2.537 1.851-1.986 0.049-6.614-6.224-6.651-8.838-4e-3 -2.439 0.898-4.8669 2.383-6.5905 0.071-0.1037 0.071-0.1037 0.142-0.2073-3.661 0.2325-7.498 0.4977-11.258 0.2063-1.113-0.1534-2.297-0.2032-3.301-0.7386-1.516-1.3433-2.71-3.3795-3.8-5.3447z" fill="#5C5A5A" style=""/>
<path d="m176.07 110.09c0.95-0.72 1.344-1.294 2.567-1.522 2.445-0.457 3.381 0.075 5.892-0.033 2.756-0.244 3.944-0.825 6.537-1.942 1.331-0.61 2.56-1.292 3.684-2.044 0.3 1.119 3.052 1.505 4.198 1.833 1.145 0.328 2.433 0.449 3.295 1.192 0.966 0.813 1.369 2.003 2.017 3.057 0.753 1.124 1.822 2.009 2.82 2.997 1.925 2.081 3.042 4.673 3.985 7.299-0.104-0.071-0.104-0.071-0.207-0.142-1.428-2.806-3.452-5.41-5.513-7.736-1.75-2.113-3.708-4.368-6.278-5.062-0.764-0.219-1.599-0.334-2.363-0.553s-2.992-0.703-3.226-1.472c-3.161 1.946-5.097 3.841-8.819 3.271-2.886-0.454-3.492 0.085-6.39 0.536-0.556-0.077-1.429 0.086-2.199 0.321z" fill="#8B8B8B" style=""/>
<path d="m181.61 92.781c0.279 0.0384 0.382 0.1094 0.66 0.1477 0.104 0.071 0.279 0.0384 0.486 0.1804l0.104 0.071c0.654 0.6007 1.309 1.2013 2.209 1.6657 0.622 0.426 1.418 0.8194 2.111 1.1418 2.979 1.4314 6.384 2.241 9.04 4.3651-0.497 0.726-0.994 1.451-1.627 1.931 0.316-0.24 0.529-0.551 0.639-0.933 0.071-0.103 0.038-0.278 5e-3 -0.453-0.032-0.174-0.207-0.142-0.31-0.213-4.889-1.9779-10.094-3.7162-13.317-7.9037z" fill="#8B8B8B" style=""/>
<path d="m204 101.87c0.568-0.829 1.518-1.548 2.533-1.9189 1.015-0.3705 2.27-0.4244 3.389-0.7239 0.175-0.0326 0.278 0.0384 0.453 0.0057 2.232-0.146 9.367 0.6164 11.332-0.4739-1.719 0.954-8.401 0.1973-9.985 1.397 2.81 1.011 5.788 1.87 8.74 2.674-2.576-0.242-5.385-0.68-7.884-1.478-1.249-0.4-2.498-0.799-3.786-0.919-2.472-0.171-5.071 1.399-5.241 3.871-0.039 0.278-0.077 0.557 0.059 0.802-0.201-0.595-0.299-1.119-0.223-1.675 6e-3 -0.453 0.258-1.042 0.613-1.561z" fill="#8B8B8B" style=""/>
<path d="m153.01 88.724c0.447 0.4586 0.927 1.0919 1.445 1.4469 0.72 0.95 1.407 1.7253 2.514 2.3317 1.315 0.7484 2.843 1.1858 4.234 1.3776 2.505 0.3452 4.982 0.0629 7.46-0.2194 1.152-0.1249 2.336-0.0751 3.269 0.5639-0.175 0.0327-0.175 0.0327-0.35 0.0653 0.071-0.1037 0.071-0.1036 0.142-0.2073-3.662 0.2326-7.498 0.4977-11.258 0.2063-1.113-0.1534-2.297-0.2032-3.301-0.7386-1.871-0.8251-3.065-2.8613-4.155-4.8264z" fill="#8B8B8B" style=""/>
<path d="m178.26 89.88c0.775-0.6872 1.79-1.0577 2.566-1.7448 0.879-0.6162 1.55-1.3743 2.254-1.9578 1.442-0.9924 3.085-1.3898 4.455-2.2785 0.808-0.5125 1.687-1.1287 2.598-1.5702 1.681-0.6757 3.662-0.2325 5.365 0.1723 6.427 1.5098 12.751 2.9487 19.179 4.4586 1.042 0.2571 2.395 0.7271 2.52 1.8787-6e-3 0.4529-0.186 0.9385-0.399 1.2494 0.071-0.1036 0.142-0.2073 0.038-0.2783 0.148-0.6602-0.468-1.5391-1.063-1.3376-0.655-0.6006-1.801-0.9287-2.564-1.1475-6.046-1.4005-12.163-2.6973-18.176-3.9232-0.66-0.1477-1.32-0.2954-2.123-0.2358-0.802 0.0595-1.397 0.2611-2.063 0.5663-4.972 1.9235-10.158 4.1579-13.969 7.943-0.071 0.1036-0.142 0.2072-0.213 0.3109 0 0 0.104 0.071 0.207 0.142-0.316 0.2399-0.666 0.3052-0.982 0.5451 0.71-1.0364 1.42-2.0728 2.37-2.7926z" fill="#8B8B8B" style=""/>
<path d="m197.91 73.644c1.305-1.238 3.226-1.597 5.044-2.0271 0.174-0.0326 0.174-0.0326 0.349-0.0653 4.84 0.2702 9.752 0.4367 14.669 0.1503-4.509 1.0234-9.218 1.4518-13.993 1.5309-1.081 0.0212-2.09-0.0612-3.209 0.2382-2.691 0.5933-4.602 2.9388-6.235 5.3226 0.18-0.4856 0.606-1.1074 0.748-1.3147 0.426-0.6219 0.781-1.1401 1.207-1.762 0.29-0.8675 0.716-1.4894 1.42-2.0729z" fill="#8B8B8B" style=""/>
<path d="m207.85 94.682c0.349-0.0653 0.873-0.1632 1.222-0.2285 0.104 0.071 0.279 0.0383 0.279 0.0383 1.08-0.0212 2.161-0.0424 3.138-0.1346 1.921-0.359 3.262-0.8768 4.534-2.2895 0.672-0.7581 1.382-2.5157 1.95-3.3449 1.633-2.3838 4.364-3.5327 6.581-5.2122 1.971-1.5433 8.279-0.7511 11.049-1.2173 2.771-0.4661 3.371-0.2823 5.407-0.3364 3.263-0.0867 3.209-0.2383 4.814-0.3574 2.128-0.217 4.055-1.029 6.183-1.2461 1.43-0.0865 2.925 0.1763 4.251 0.0188 2.232-0.146 4.269-1.34 6.299-2.081 1.119-0.2995 2.238-0.599 3.318-0.6202 3.263 1.0169 6.455 2.1375 9.614 3.0834-1.43 0.0865-2.925-0.1763-4.349-0.5428-1.91-0.5468-3.639-1.5792-5.625-1.5694-2.265-0.0286-4.269 1.34-6.474 2.1136-3.466 1.2804-7.368 1.1963-11.133 1.3579-3.766 0.1615-6.58-0.174-9.741 1.7724-2.986 1.9137-13.062 0.1541-15.738 2.2808-0.879 0.6162-1.725 1.407-2.468 2.2688-0.529 0.5509-0.955 1.1727-1.452 1.8982-0.568 0.8292-1.065 1.5547-1.737 2.3128-0.355 0.5183-0.814 0.9655-1.305 1.238-0.562 0.3763-1.364 0.4358-1.992 0.4628-2.232 0.146-4.464 0.2921-6.625 0.3345z" fill="#8B8B8B" style=""/>
<path d="m209.91 120.87c0.944-0.267 2.123 0.236 2.674 0.766 0.998 0.988 1.925 2.08 2.955 3.243 0.895 0.917 1.718 1.938 2.684 2.752 2.449 1.982 5.466 3.135 8.489 3.836 0 0 0.103 0.071 0.174-0.033 3.776 1.825 7.622 3.546 11.578 4.885-2.123-0.235-4.311-0.821-6.319-1.891-1.489-0.716-2.836-1.639-4.293-2.18-1.56-0.612-3.198-0.668-4.758-1.28-0.693-0.322-1.489-0.716-2.253-0.934 0.643 1.506 1.357 2.909 2 4.416-0.72-0.95-1.44-1.9-2.159-2.85-0.856-1.196-1.784-2.288-2.711-3.38-2.721-2.473-5.973-4.396-8.061-7.35z" fill="#8B8B8B" style=""/>
</g><defs>
<linearGradient id="paint0_linear_1924_304906" x1="178.64" x2="178.44" y1="64" y2="136" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1924_304906" x1="64" x2="136" y1="51" y2="51.654" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint2_linear_1924_304906" x1="86" x2="135.68" y1="111" y2="63.663" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".35637"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".4903"/>
<stop stop-color="#fff" stop-opacity="0" offset=".56651"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".63374"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".75781"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

964
application/src/main/data/json/system/scada_symbols/right-flow-meter.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 74 KiB

526
application/src/main/data/json/system/scada_symbols/right-motor-pump.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 40 KiB

854
application/src/main/data/json/system/scada_symbols/right-tee-pipe.svg

@ -0,0 +1,854 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" fill="none" version="1.1" viewBox="0 0 200 200">
<tb:metadata xmlns=""><![CDATA[{
"title": "Right tee pipe",
"description": "Right tee pipe with configurable right/top/bottom fluid and leak visualizations.",
"searchTags": [
"pipe",
"tee"
],
"widgetSizeX": 1,
"widgetSizeY": 1,
"stateRenderFunction": "var rightLiquidPattern = prepareLiquidPattern('right-liquid', 'right-fluid');\nvar topLiquidPattern = prepareLiquidPattern('top-liquid', 'top-fluid');\nvar bottomLiquidPattern = prepareLiquidPattern('bottom-liquid', 'bottom-fluid');\n\nvar genericLiquidPattern = ctx.svg.defs().findOne('pattern#liquid');\nif (genericLiquidPattern) {\n genericLiquidPattern.id(ctx.api.generateElementId());\n rightLiquidPattern.attr({'xlink:href': '#'+genericLiquidPattern.id()});\n topLiquidPattern.attr({'xlink:href': '#'+genericLiquidPattern.id()});\n bottomLiquidPattern.attr({'xlink:href': '#'+genericLiquidPattern.id()});\n}\n\nupdateLiquidPatternAnimation(rightLiquidPattern, 'right');\nupdateLiquidPatternAnimation(topLiquidPattern, 'top');\nupdateLiquidPatternAnimation(bottomLiquidPattern, 'bottom');\n\n\nfunction prepareLiquidPattern(patternId, fluidElementTag) {\n var liquidPattern = ctx.svg.defs().findOne('pattern#'+patternId);\n var fluidElements = ctx.tags[fluidElementTag];\n\n if (liquidPattern) {\n liquidPattern.id(ctx.api.generateElementId());\n for (var i=0;i<fluidElements.length;i++) {\n fluidElements[i].fill(liquidPattern);\n }\n } else {\n liquidPattern = fluidElements[0].reference('fill');\n }\n return liquidPattern;\n}\n\nfunction updateLiquidPatternAnimation(liquidPattern, prefix) {\n if (liquidPattern) {\n var fluid = ctx.values[prefix + 'Fluid'] && !ctx.values.leak;\n var flow = ctx.values[prefix + 'Flow'];\n var flowDirection = ctx.values[prefix + 'FlowDirection'];\n var flowAnimationSpeed = ctx.values[prefix + 'FlowAnimationSpeed'];\n\n var elementFluid = liquidPattern.remember('fluid');\n var elementFlow = null;\n var elementFlowDirection = null;\n \n if (fluid !== elementFluid) {\n liquidPattern.remember('fluid', fluid);\n elementFlow = null;\n elementFlowDirection = null;\n } else {\n elementFlow = liquidPattern.remember('flow');\n elementFlowDirection = liquidPattern.remember('flowDirection');\n }\n \n if (fluid) {\n if (flow !== elementFlow) {\n liquidPattern.remember('flow', flow);\n if (flow) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n } else if (flow && elementFlowDirection !== flowDirection) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n }\n if (flow && liquidPattern) {\n liquidPattern.timeline().speed(flowAnimationSpeed);\n }\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n }\n}\n\nfunction animateFlow(liquidPattern, forwardElseReverse) {\n ctx.api.resetAnimation(liquidPattern);\n var deltaX = forwardElseReverse ? 172 : -172;\n liquidPattern.animate(1000).ease('-').relative(deltaX, 0).loop();\n}\n\n",
"tags": [
{
"tag": "bottom-fluid",
"stateRenderFunction": "var fluid = ctx.values.bottomFluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "bottom-fluid-background",
"stateRenderFunction": "var fluid = ctx.values.bottomFluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.bottomFluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "overlay",
"stateRenderFunction": "var fluid = (ctx.values.rightFluid ||\n ctx.values.topFluid || ctx.values.bottomFluid) && !ctx.values.leak;\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
},
{
"tag": "right-fluid",
"stateRenderFunction": "var fluid = ctx.values.rightFluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "right-fluid-background",
"stateRenderFunction": "var fluid = ctx.values.rightFluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.rightFluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "top-fluid",
"stateRenderFunction": "var fluid = ctx.values.topFluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "top-fluid-background",
"stateRenderFunction": "var fluid = ctx.values.topFluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.topFluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
}
],
"behavior": [
{
"id": "rightFluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": "{i18n:scada.symbol.right-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "rightFlow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": "{i18n:scada.symbol.right-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "rightFlowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": "{i18n:scada.symbol.right-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "rightFlowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": "{i18n:scada.symbol.right-pipe}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "topFluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": "{i18n:scada.symbol.top-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "topFlow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": "{i18n:scada.symbol.top-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "topFlowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": "{i18n:scada.symbol.top-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "topFlowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": "{i18n:scada.symbol.top-pipe}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "bottomFluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": "{i18n:scada.symbol.bottom-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "bottomFlow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": "{i18n:scada.symbol.bottom-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "bottomFlowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": "{i18n:scada.symbol.bottom-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "bottomFlowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": "{i18n:scada.symbol.bottom-pipe}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "rightFluidColor",
"name": "{i18n:scada.symbol.right-fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "topFluidColor",
"name": "{i18n:scada.symbol.top-fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "bottomFluidColor",
"name": "{i18n:scada.symbol.bottom-fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata><g clip-path="url(#clip0_1245_66636)">
<path d="m64 186v-172h72v172z" fill="#fff" tb:tag="pipe-background"/>
<path d="m64 186v-172h72v172z" fill="url(#paint0_linear_1245_66636)" style="fill:url(#paint0_linear_1245_66442)"/>
<path d="m65.5 184.5v-169h69v169z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m186 64h-51l-35 36 35 36h51z" fill="#fff" tb:tag="pipe-background"/>
<path d="m186 64h-51l-35 36 35 36h51z" fill="url(#paint1_linear_1245_66636)" style="fill:url(#paint3_linear_1245_66442)"/>
<path d="m184.5 65.5h-48.866l-33.542 34.5 33.542 34.5h48.866z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect x="187.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<rect transform="rotate(-90,51.5,198.5)" x="51.5" y="198.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<rect transform="rotate(-90,51.5,12.5)" x="51.5" y="12.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
</g><defs>
<linearGradient id="paint0_linear_1245_66442" x1="64" x2="136" y1="141.28" y2="141.47" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint3_linear_1245_66442" x1="163.64" x2="164.02" y1="64" y2="136" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<pattern id="liquid" width="172" height="72" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<linearGradient id="paint28_linear_1182_32781-5" x1="19.316" x2="21" y1="8.2632" y2="23" gradientTransform="translate(-36,6)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint29_linear_1182_32781-1" x1="148.32" x2="150" y1="8.2632" y2="23" gradientTransform="translate(-165,135)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint30_linear_1182_32781-7" x1="111.32" x2="113" y1="9.2632" y2="24" gradientTransform="translate(-129,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint31_linear_1182_32781-4" x1="32.316" x2="34" y1="51.263" y2="66" gradientTransform="translate(-92,-24)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint32_linear_1182_32781-3" x1="153.32" x2="155" y1="51.263" y2="66" gradientTransform="translate(-213,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint33_linear_1182_32781-1" x1="31.947" x2="33" y1="21.789" y2="31" gradientTransform="translate(-59,7)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint34_linear_1182_32781-4" x1="160.95" x2="162" y1="21.789" y2="31" gradientTransform="translate(-188,136)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint35_linear_1182_32781-6" x1="3.9474" x2="5" y1="32.79" y2="42" gradientTransform="translate(-42,-32)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint36_linear_1182_32781-9" x1="93.158" x2="94" y1="4.6316" y2="12" gradientTransform="translate(-102,86)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint37_linear_1182_32781-4" x1="71.158" x2="72" y1="56.632" y2="64" gradientTransform="translate(-132,12)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint38_linear_1182_32781-2" x1="110.95" x2="112" y1="32.79" y2="42" gradientTransform="translate(-149,75)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint39_linear_1182_32781-2" x1="57.947" x2="59" y1="34.79" y2="44" gradientTransform="translate(-98,20)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint40_linear_1182_32781-6" x1="113.95" x2="115" y1="57.79" y2="67" gradientTransform="translate(-177,53)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint41_linear_1182_32781-4" x1="137.95" x2="139" y1="37.79" y2="47" gradientTransform="translate(-181,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint42_linear_1182_32781-1" x1="74.947" x2="76" y1="16.789" y2="26" gradientTransform="translate(-97,55)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint43_linear_1182_32781-2" x1="125.97" x2="126.5" y1="48.395" y2="53" gradientTransform="translate(-177,76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint44_linear_1182_32781-8" x1="168.97" x2="169.5" y1="44.395" y2="49" gradientTransform="translate(-216,123)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint45_linear_1182_32781-8" x1="56.974" x2="57.5" y1="7.3947" y2="12" gradientTransform="translate(-67,48)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint46_linear_1182_32781-9" x1="95.974" x2="96.5" y1="33.395" y2="38" gradientTransform="translate(-132,61)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint47_linear_1182_32781-2" x1="90.974" x2="91.5" y1="21.395" y2="26" gradientTransform="translate(-115,68)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint48_linear_1182_32781-88" x1="21.974" x2="22.5" y1="38.395" y2="43" gradientTransform="translate(-63,-18)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint49_linear_1182_32781-8" x1="123.97" x2="124.5" y1="21.395" y2="26" gradientTransform="translate(-148,101)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint50_linear_1182_32781-6" x1="85.974" x2="86.5" y1="45.395" y2="50" gradientTransform="translate(-134,39)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint51_linear_1182_32781-8" x1="50.974" x2="51.5" y1="19.395" y2="24" gradientTransform="translate(-73,30)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint52_linear_1182_32781-3" x1="47.974" x2="48.5" y1="49.395" y2="54" gradientTransform="translate(-100,-3)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint53_linear_1182_32781-83" x1="13.158" x2="14" y1="60.632" y2="68" gradientTransform="translate(-78,-50)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint54_linear_1182_32781-33" x1="134.16" x2="135" y1="60.632" y2="68" gradientTransform="translate(-199,71)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint55_linear_1182_32781-8" x1="93.5" x2="95.5" y1="50.5" y2="68" gradientTransform="translate(-154,37)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint84_linear_1182_32781-8" x1="248" x2="248" y1="1.8513e-7" y2="72" gradientTransform="scale(.33333 1)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" offset=".10895"/>
<stop stop-color="#fff" stop-opacity="0" offset=".11331"/>
<stop stop-color="#fff" stop-opacity="0" offset=".88736"/>
<stop stop-color="#727171" offset=".89138"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<pattern id="right-liquid" patternTransform="translate(14,-8)" patternUnits="userSpaceOnUse" xlink:href="#liquid"/>
<pattern id="top-liquid" patternTransform="translate(14,8)" patternUnits="userSpaceOnUse" xlink:href="#liquid"/>
<pattern id="bottom-liquid" patternTransform="translate(14,8)" patternUnits="userSpaceOnUse" xlink:href="#liquid"/>
<clipPath id="clip0_1245_66636">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<linearGradient id="paint0_linear_1281_41706" x1="57.778" x2="57.778" y1="-8.4191e-7" y2="72" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1281_41706" x1="-8.4192e-7" x2="72" y1="100.76" y2="100.76" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<clipPath id="clipPath26057">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath26051">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath26045">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath26039">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath26033">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath26027">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath26021">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath26015">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath26009">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath26003">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath25997">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath25991">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath25985">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath25979">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath25973">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath25967">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath25961">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath25955">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
</defs><rect transform="rotate(90)" x="14" y="-136" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="top-fluid-background"/><rect transform="rotate(90)" x="136" y="-136" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="bottom-fluid-background"/><rect x="136" y="64" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="right-fluid-background"/><rect x="136" y="64" width="50" height="72" fill="url(#right-liquid)" stroke-width="0" style="display: none;" tb:tag="right-fluid"/><rect transform="rotate(90)" x="14" y="-136" width="50" height="72" fill="url(#top-liquid)" stroke-width="0" style="display: none;" tb:tag="top-fluid"/><rect transform="rotate(90)" x="136" y="-136" width="50" height="72" fill="url(#bottom-liquid)" stroke-width="0" style="display: none;" tb:tag="bottom-fluid"/><g transform="rotate(-90 100 36)" style="display: none;" tb:tag="overlay">
<path d="m0 0h72v72h-72z" fill="url(#paint0_linear_1281_41706)" style="fill: url(&quot;#paint0_linear_1281_41706&quot;);"/>
<path d="m1.5 1.5h69v69h-69z" stroke="#000" stroke-opacity=".12" stroke-width="3" style=""/>
<path d="m0 72 36-36 36 36z" fill="url(#paint1_linear_1281_41706)" style="fill: url(&quot;#paint1_linear_1281_41706&quot;);"/>
<path d="m68.379 70.5h-64.757l32.379-32.379z" stroke="#000" stroke-opacity=".12" stroke-width="3" style=""/>
</g><g transform="translate(-.00022255)" style="display: none;" tb:tag="leak">
<path d="m83.175 64c-0.2112 0.3856-0.5305 0.8277-0.6594 1.2391-0.6594 1.2391-1.0154 2.6636-0.8004 3.996 0.1744 0.5968 0.4311 1.2194 0.7135 1.7597 0.7087 1.4871 1.3351 2.9484 1.9614 4.4096 0.4876 1.3275 1.114 2.7888 2.3789 3.3659 0.1338-0.1388 0.2419-0.1953 0.3757-0.334 1.3718 1.9659-1.1443 2.0637 0 9.5637 4.3557 8 11.096 19.138 12.263 20.317 0.4163 0.401 0.725 0.859 1.059 1.235 0.611 0.644 1.249 1.205 2.02 1.627 0.524 0.345 1.182 0.551 1.733 0.814 1.568 0.763 3.084 1.69 4.416 2.92-0.602-0.098-1.204-0.196-1.806-0.295 0 0-0.324 0.17-0.216 0.113-0.03-0.19-0.277-0.267-0.468-0.236 0.149 0.679 0.298 1.358 0.472 1.954 0.795 3.231 1.672 6.488 2.847 9.657-1.577-2.753-2.804-5.758-3.815-8.875-0.23-0.705-0.379-1.384-0.8-2.059-0.93-1.646-2.853-2.43-4.746-3.023l-0.082-0.025c-0.1644-0.052-0.4112-0.129-0.5451 9e-3 -0.2161 0.113-0.2369 0.468-0.232 0.741 0.1069 1.389 0.1315 2.752 0.1562 4.115 0.0038 1.718-0.2393 3.359-0.1532 5.102 0.0553 1.554 0.301 3.077 0.5725 4.517 0.1486 0.679 0.2146 1.332 0.5796 1.898 0.339 0.649 0.812 1.158 1.393 1.611 0.719 0.587 1.357 1.149 2.102 1.653 4.226 2.951 6.516 13.185 11.221 15.473-2.14-0.671-4.335-1.449-6.475-2.12 1.681 2.424 2.686 5.27 3.775 8.141 0.287 0.813 0.574 1.626 1.052 2.408 0.339 0.648 0.868 1.266 1.341 1.775 0.946 1.02 2 1.982 3.342 2.313-0.875-0.094-1.697-0.352-2.412-0.666 5e-3 0.273-0.016 0.628-0.011 0.9-0.012 2.346-0.107 4.665-0.093 6.929-0.344-0.921-0.472-1.955-0.517-2.964-0.025-1.363 0.305-2.705-0.1-4.006-0.436-1.493-1.736-2.533-2.687-3.824-1.536-2.018-2.265-4.595-3.127-7.034s-1.059-4.705-2.784-8.585c-1.243-2.796-3.344-7.28-5.277-8.608-0.581-0.453-1.2696-0.85-1.9843-1.164-0.4679-0.237-0.9615-0.392-1.5375-0.572-0.6582-0.207-1.2341-0.387-1.8666-0.676-0.4114-0.129-0.797-0.34-1.0745-0.607-0.3599-0.294-0.5601-0.808-0.7038-1.215-0.5441-1.435-1.0881-2.871-1.6322-4.306 0.113 0.216 0.2824 0.54 0.3954 0.756 0.904 1.729 1.8336 3.376 3.2729 4.55 0.2776 0.267 0.6632 0.478 1.0181 0.499 0.0823 0.026 0.1645 0.052 0.1903-0.03 0.463-0.036 0.9161-0.617 0.6643-0.967 0.2628-0.55 0.248-1.368 0.2382-1.913-0.295-4.249-0.6723-8.524-1.0753-12.716-0.0356-0.463-0.0713-0.926-0.2715-1.441-0.2002-0.514-0.4519-0.864-0.7859-1.24-2.261-2.877-8.9832-13.36-9.9896-15.86-1.6103-4-2.5-3.5-2.1639-6.0981-0.221-0.1597 1.2649-8.847 1.0439-9.0067-1.4651-1.0916-3.5171-1.4635-5.3481-1.6759-1.7023 0-2.5996 4.8496-3.0307 5.2807-0.4894 0.4894 0.1707 20.365 0.4097 21.924 0.1486 0.679 1.0544 1.459 1.0544 1.778 0 0.112-0.8623 1.405-0.4311 0.112 0.4311 0.431 3.2247 6.028 6.2777 8.973 0.2776 0.267 0.6374 0.561 1.023 0.772 0.2211 0.16 0.4679 0.237 0.7405 0.232 0.0823 0.026 0.1904-0.031 0.2984-0.087 0.1081-0.057 0.0516-0.165 0.0774-0.247 0.4554-3.472 0.4686-7.263 2.5696-10.218 0.0307 0.19 0.0049 0.272 0.0356 0.463-0.0257 0.082 0.0308 0.19-0.0208 0.354-0.0736 1.965-0.7182 4.022-0.4933 5.9 0.097 0.843 0.2764 1.713 0.1008 2.561-0.2529 1.096-1.1333 2.175-1.1136 3.266 0.0099 0.545 0.1843 1.142 0.4102 1.574 0.6215 1.189 1.5413 2.29 2.0547 3.535 0.2567 0.623 0.3795 1.384 0.6362 2.007 0.0565 0.108 0.0307 0.19 0.0872 0.298 0.5441 1.436 1.6285 6.9 2.7387 7.971-0.9714-0.937-1.9686-6.103-3.0739-6.901-0.0993 2.047-0.1729 4.012-0.1077 6.11-0.3587-1.738-0.527-3.508-0.505-5.308 0.011-0.9 0.022-1.8-0.1573-2.67-0.3845-1.656-1.9368-3.046-3.5933-2.662-0.1904 0.031-0.3807 0.061-0.5146 0.2-0.9467 0.426-1.6675 1.285-2.3625 2.061-1.9205 2.38-3.6506 4.729-5.4323 7.243-1.3029 1.851-2.5234 3.727-3.1115 5.892-0.0515 0.165-0.0208 0.355 0.1437 0.407-0.6791 0.148-0.9676 0.781-1.0916 1.465-0.2063 0.658-0.248 1.368-0.372 2.052-0.0982 0.602-0.1964 1.203-0.2946 1.805-0.4394 2.844-0.7966 5.714-0.8812 8.579-0.2715-1.441-0.3268-2.994-0.0273-4.527 0.1707-1.121 0.5058-2.19 0.5684-3.255 0.0884-1.147-0.204-2.233-0.1156-3.379 0.0724-0.52 0.1706-1.122 0.1608-1.667-0.8596 0.725-1.6369 1.475-2.4965 2.2 0.4789-0.664 0.9578-1.327 1.4367-1.99 0.6127-0.802 1.1432-1.629 1.6736-2.457 1.2156-2.149 1.7681-4.777 3.287-6.741 0.1339-0.139 0.2677-0.277 0.4016-0.416 0.0307 0.19-0.0209 0.355 0.0098 0.545 0.1081-0.057 0.1597-0.221 0.2677-0.278 1.5546-1.5 2.8574-3.351 3.9699-5.171 1.0351-1.573 2.1218-3.311 2.0615-5.137-0.0099-0.545-0.102-1.116-0.1118-1.661-0.0099-0.546 0.2787-1.178 0.7367-1.486-1.9121-1.684-4.3518-3.21-4.7253-5.767-0.2813-1.986-2.028-3.147-1.1657-4.44 0 0.862-1.2934 0-1.7245-1.293-0.4311-1.294-4.3085-22.021 2.2264-29.084 1.6001-0.4926 3.3745-0.3883 4.804 0.2404 0.0823 0.0258 0.0823 0.0258 0.1645 0.0515-0.8879-2.3565-1.8324-4.821-2.3962-7.347-0.1229-0.7614-0.328-1.5485-0.1782-2.3148 0.5771-1.2649 1.6736-2.4573 2.7444-3.5675z" clip-path="url(#clipPath26057)" fill="#5c5a5a" style=""/>
<path d="m76.019 106.37c0.6632 0.479 1.1189 0.623 1.5144 1.379 0.7909 1.513 0.6298 2.234 1.2046 3.86 0.7136 1.76 1.3331 2.423 2.587 3.9 0.6681 0.752 1.3619 1.421 2.0816 2.008-0.6742 0.421-0.375 2.305-0.3602 3.123s0.1941 1.687-0.1202 2.402c-0.3401 0.797-1.0401 1.3-1.6012 1.938-0.587 0.719-0.9529 1.599-1.401 2.452-0.9787 1.681-2.4559 2.935-3.9896 4.081 0.0258-0.082 0.0258-0.082 0.0516-0.165 1.5545-1.5 2.8573-3.351 3.9698-5.171 1.0351-1.573 2.1218-3.311 2.0615-5.137-0.0098-0.545-0.1019-1.116-0.1118-1.661-0.0099-0.546-0.1396-2.105 0.3185-2.413-1.9121-1.684-3.5448-2.574-3.9182-5.131-0.2814-1.985-0.7565-2.275-1.6346-4.086-0.0615-0.38-0.3439-0.921-0.6522-1.379z" clip-path="url(#clipPath26051)" fill="#8b8b8b" style=""/>
<path d="m88.492 106.53c0.0307 0.19 0.0049 0.273 0.0356 0.463-0.0258 0.082 0.0308 0.19-0.0208 0.355-0.0258 0.082-0.0258 0.082-0.0258 0.082-0.2628 0.55-0.5255 1.101-0.6495 1.785-0.1547 0.493-0.2529 1.095-0.3254 1.614-0.3412 2.243-0.1888 4.64-1.0495 6.81-0.5759-0.181-1.1519-0.361-1.594-0.68 0.2211 0.159 0.4679 0.237 0.7405 0.232 0.0823 0.025 0.1903-0.031 0.2984-0.088 0.1081-0.056 0.0516-0.164 0.0774-0.246 0.3166-3.606 0.4121-7.371 2.5131-10.327z" clip-path="url(#clipPath26045)" fill="#8b8b8b" style=""/>
<path d="m87.025 123.05c0.6582 0.206 1.3213 0.685 1.7684 1.277 0.447 0.592 0.7344 1.405 1.1557 2.079 0.0564 0.108 0.0307 0.19 0.0872 0.298 0.544 1.436 1.4766 6.271 2.5868 7.342-0.9714-0.937-1.8168-5.474-2.922-6.272-0.0994 2.047-0.0648 4.173 4e-4 6.272-0.3586-1.739-0.6352-3.67-0.6132-5.47 0.011-0.901 0.022-1.801-0.1573-2.67-0.3845-1.657-1.9367-3.047-3.5933-2.662-0.1903 0.031-0.3807 0.061-0.5145 0.2 0.3499-0.252 0.6741-0.421 1.0548-0.483 0.2984-0.087 0.7356-0.04 1.147 0.089z" clip-path="url(#clipPath26039)" fill="#8b8b8b" style=""/>
<path d="m75.743 130.74c0.3648 0.566 0.2715 1.44 0.0345 1.908-0.4481 0.854-0.9786 1.681-1.5348 2.591-0.4224 0.772-0.9271 1.517-1.2672 2.314-0.8092 2.005-0.9601 4.217-0.8126 6.342 0 0-0.0258 0.082 0.0565 0.108-0.4395 2.844-0.7966 5.714-0.8812 8.579-0.2715-1.441-0.3268-2.994-0.0273-4.527 0.1706-1.121 0.5058-2.191 0.5684-3.255 0.0883-1.147-0.204-2.233-0.1156-3.38 0.0724-0.519 0.1706-1.121 0.1607-1.666-0.8595 0.724-1.6368 1.475-2.4964 2.199 0.4789-0.663 0.9578-1.326 1.4367-1.989 0.6127-0.802 1.1432-1.63 1.6736-2.458 1.0768-2.283 1.6858-4.802 3.2047-6.766z" clip-path="url(#clipPath26033)" fill="#8b8b8b" style=""/>
<path d="m84.805 84.738c-0.1373 0.4176-0.3706 0.9105-0.4224 1.3385-0.3499 0.7394-0.6039 1.4035-0.6218 2.2698-0.0386 1.0376 0.1796 2.1062 0.5041 3.0139 0.5841 1.634 1.5417 3.0525 2.4992 4.4711 0.4412 0.6613 0.7864 1.3978 0.6932 2.1682-0.0752-0.0959-0.0752-0.0959-0.1505-0.1919 0.0856 0.0104 0.0856 0.0104 0.1712 0.0207-1.3027-2.1551-2.6807-4.4061-3.6956-6.787-0.2596-0.7262-0.6048-1.4627-0.5973-2.2435-0.0912-1.4006 0.7696-2.773 1.6199-4.0598z" clip-path="url(#clipPath26027)" fill="#8b8b8b" style=""/>
<path d="m89.595 104.3c0.6066 0.371 1.0537 0.963 1.6603 1.334 0.5809 0.453 1.2133 0.741 1.7377 1.086 0.9407 0.747 1.5314 1.745 2.3899 2.466 0.4986 0.427 1.0794 0.881 1.5522 1.39 0.7811 0.968 0.888 2.357 0.9642 3.555 0.2999 4.522 0.6256 8.961 0.9255 13.482 0.0406 0.736 0.0038 1.718-0.7269 2.032-0.2984 0.087-0.6533 0.066-0.9001-0.011 0.0823 0.025 0.1646 0.051 0.1903-0.031 0.463-0.036 0.9161-0.617 0.6643-0.967 0.2628-0.55 0.248-1.368 0.2382-1.913-0.295-4.249-0.6722-8.523-1.0753-12.716-0.0356-0.463-0.0713-0.926-0.2715-1.44-0.2001-0.515-0.4519-0.865-0.786-1.24-2.2609-2.878-4.7686-5.832-8.0181-7.573-0.0822-0.026-0.1645-0.052-0.2468-0.077 0 0-0.0258 0.082-0.0515 0.164-0.2211-0.16-0.3341-0.376-0.5551-0.535 0.8227 0.258 1.6455 0.515 2.3087 0.994z" clip-path="url(#clipPath26021)" fill="#8b8b8b" style=""/>
<path d="m104.33 113.38c1.074 0.608 1.696 1.797 2.343 2.903 0.056 0.108 0.056 0.108 0.113 0.216 0.794 3.231 1.671 6.488 2.847 9.657-1.577-2.753-2.804-5.758-3.815-8.876-0.231-0.704-0.379-1.384-0.801-2.058-0.929-1.646-2.852-2.43-4.745-3.023 0.355 0.021 0.849 0.176 1.013 0.227 0.494 0.155 0.905 0.284 1.399 0.439 0.628 0.016 1.121 0.17 1.646 0.515z" clip-path="url(#clipPath26015)" fill="#8b8b8b" style=""/>
<path d="m92.515 124.13c0.113 0.217 0.2825 0.541 0.3955 0.757-0.0258 0.082 0.0307 0.19 0.0307 0.19 0.2309 0.705 0.4618 1.41 0.7185 2.033 0.6214 1.188 1.2306 1.964 2.4132 2.516 0.6324 0.288 1.9284 0.401 2.5867 0.607 1.8924 0.594 3.1954 2.155 4.7424 3.273 1.408 0.983 2.155 5.282 3.018 7.007 0.862 1.724 0.862 2.156 1.306 3.481 0.712 2.123 0.801 2.058 1.201 3.087 0.57 1.353 1.49 2.455 2.06 3.808 0.344 0.921 0.472 1.955 0.841 2.794 0.544 1.435 1.737 2.532 2.631 3.715 0.421 0.675 0.842 1.349 1.073 2.054-0.012 2.345-0.106 4.665-0.093 6.928-0.343-0.921-0.471-1.955-0.517-2.963-0.024-1.363 0.306-2.706-0.099-4.007-0.436-1.492-1.737-2.532-2.688-3.824-1.536-2.018-2.264-4.595-3.126-7.034-0.863-2.439-1.208-4.353-3.12-6.037-1.855-1.575-2.724-8.541-4.657-9.87-0.581-0.453-1.2699-0.85-1.9846-1.164-0.4679-0.237-0.9616-0.392-1.5375-0.572-0.6582-0.206-1.2342-0.387-1.8666-0.676-0.4114-0.128-0.797-0.34-1.0746-0.607-0.3598-0.294-0.56-0.808-0.7037-1.215-0.5441-1.435-1.0882-2.871-1.55-4.281z" clip-path="url(#clipPath26009)" fill="#8b8b8b" style=""/>
<path d="m65.828 16.279c0.1007 0.428 0.1588 0.9702 0.3379 1.3624 0.3378 1.3623 1.0252 2.6598 2.0757 3.5071 0.5286 0.3273 1.1357 0.6188 1.7069 0.8319 1.5211 0.6323 2.9638 1.3005 4.4064 1.9687 1.25 0.6614 2.6927 1.3296 4.0192 0.9133 0.0068-0.1927 0.0494-0.3069 0.0562-0.4996 2.3344 0.5453 4.8887 0.3266 7.228-0.3627 1.5976-0.4452 3.2089-1.2759 4.8646-1.179 0.578 0.0204 1.1135 0.155 1.6131 0.2112 0.885 0.0698 1.7341 0.0611 2.59-0.1402 0.6207-0.0939 1.2482-0.3805 1.833-0.5528 1.6761-0.4811 3.4238-0.8053 5.2363-0.7801-0.513 0.3292-1.026 0.6584-1.54 0.9876 0 0-0.127 0.3427-0.085 0.2285-0.15-0.1211-0.3851-0.0136-0.5062 0.1365 0.5642 0.4057 1.1292 0.8114 1.6572 1.1387 2.751 1.8718 5.58 3.7078 8.573 5.2795-3.013-0.9936-5.934-2.4084-8.77-4.0517-0.643-0.3699-1.2076-0.7757-1.9715-0.9955-1.7922-0.6034-3.7462 0.0995-5.5501 0.9233l-0.0784 0.0359c-0.1569 0.0716-0.3922 0.1791-0.3989 0.3717-0.0853 0.2285 0.1364 0.5064 0.3223 0.7059 1.0079 0.9616 1.9374 1.9589 2.8668 2.9563 1.1512 1.2752 2.0671 2.658 3.2967 3.8974 1.0791 1.1184 2.2801 2.0867 3.4451 2.9766 0.564 0.4058 1.05 0.8473 1.7 1.0246 0.685 0.2556 1.378 0.3186 2.113 0.2673 0.927-0.0444 1.776-0.0531 2.668-0.176 5.115-0.63 13.66 5.4511 18.688 4.0077 1.276-0.2735 2.776 0 1.276 1.7265-2 1.5-1.999 2-1.999 5 0.757 0.4125-2 3.5-2 5-0.5 1 0.376 0.9416 1.069 1.0045 1.384 0.126 2.811 0.1377 4.03-0.5138-0.712 0.515-1.497 0.8732-2.238 1.1172 0.186 0.1994 0.407 0.4774 0.593 0.6768 1.559 1.7527 3.039 3.5411 4.562 5.2153-0.871-0.4551-1.657-1.1387-2.365-1.8582-0.929-0.9974-1.581-2.2164-2.753-2.9136-1.321-0.8183-2.984-0.7226-4.554-1.048-2.491-0.4736 3.492-6.84 1.22-8.0776-2.271-1.2376-3.933-2.791-7.809-4.5242-2.793-1.2491-7.353-3.1792-9.679-2.8753-0.735 0.0513-1.512 0.2168-2.254 0.4608-0.506 0.1365-0.977 0.3514-1.526 0.6021-0.627 0.2866-1.176 0.5373-1.84 0.7455-0.392 0.1791-0.82 0.2797-1.205 0.2662-0.464 0.0222-0.9567-0.2267-1.3353-0.4329-1.3642-0.704-2.7284-1.4081-4.0926-2.1121 0.2285 0.0853 0.5712 0.2131 0.7997 0.2983 1.828 0.6818 3.6202 1.2851 5.4752 1.1962 0.386 0.0135 0.814-0.0871 1.091-0.3089 0.079-0.0358 0.157-0.0716 0.121-0.15 0.321-0.336 0.27-1.0709-0.151-1.1629-0.173-0.5848-0.73-1.1833-1.102-1.5822-3.0597-2.963-6.1976-5.8903-9.2997-8.7391-0.336-0.3205-0.672-0.641-1.1648-0.8899s-0.914-0.3409-1.4136-0.397c-3.6048-0.6287-7.4448-1.1498-11.026-0.2728-0.0784 0.0358-0.1568 0.0716-0.2353 0.1074 0 0 0.0359 0.0785 0.0717 0.1569-0.2711 0.029-0.4996-0.0562-0.7708-0.0272-1.8193 0.1674-3.5942 1.2624-5.098 2.3284-1.2661 1.1378-1.7876 1.7677-1.8201 2.3765-0.0369 0.6911-0.1657 3.0405 1.0538 4.04 0.5645 0.4057 1.7597 0.3806 1.9727 0.6175 0.0752 0.0837 0.2984 1.622-0.2455 0.3719 0.6089 0.0325 6.4278 2.3279 10.667 2.4773 0.3854 0.0136 0.8492-0.0087 1.2771-0.1093 0.2712-0.0291 0.5065-0.1365 0.7059-0.3224 0.0785-0.0358 0.1211-0.1501 0.1637-0.2644 0.0426-0.1142-0.0717-0.1568-0.1075-0.2352-1.9818-2.8865-4.5059-5.715-4.9191-9.3178 0.1501 0.121 0.1859 0.1994 0.336 0.3205 0.0358 0.0784 0.1501 0.121 0.2217 0.2779 1.2586 1.5105 2.1541 3.4713 3.5764 4.7175 0.6361 0.5626 1.3507 1.0894 1.7873 1.8379 0.5441 0.9838 0.6108 2.3751 1.3544 3.173 0.3718 0.399 0.9004 0.7263 1.3574 0.8967 1.2568 0.4687 2.6772 0.6731 3.8913 1.2561 0.6071 0.2915 1.2074 0.7756 1.8145 1.0671 0.1142 0.0426 0.15 0.1211 0.2643 0.1637 1.3642 0.704 5.8229 4.0433 7.3649 4.0976-1.349-0.0475-5.5437-3.2232-6.8992-3.078 1.2944 1.589 2.553 3.0995 4.0042 4.6169-1.4289-1.0536-2.7369-2.2572-3.9239-3.6109-0.5935-0.6769-1.187-1.3537-1.9016-1.8805-1.3932-0.9751-3.4769-0.9714-4.452 0.4219-0.1211 0.1501-0.2421 0.3001-0.2489 0.4928-0.4193 0.9498-0.3816 2.0701-0.3797 3.112 0.1624 3.0538 0.4459 5.9577 0.8011 9.0183 0.2681 2.2474 0.6146 4.4589 1.6243 6.4622 0.0717 0.1569 0.2217 0.2779 0.3786 0.2063-0.4057 0.5645-0.1976 1.2277 0.1674 1.8194 0.2865 0.6274 0.73 1.1832 1.0949 1.7748 0.3292 0.5132 0.6584 1.0264 0.9876 1.5396 1.5742 2.4091 3.2268 4.7824 5.079 6.9698-1.1648-0.8899-2.2443-2.0083-3.0459-3.3484-0.6226-0.9479-1.0882-1.9675-1.7534-2.8013-0.7009-0.9121-1.6439-1.5241-2.3449-2.4362-0.2934-0.4348-0.6225-0.948-0.9943-1.3469-0.155 1.1135-0.2316 2.1911-0.3866 3.3046-0.0871-0.8133-0.1741-1.6267-0.2612-2.44-0.0803-1.006-0.2391-1.9762-0.3978-2.9464-0.5324-2.411-1.8781-4.7349-2.0609-7.2107 0.0068-0.1927 0.0135-0.3854 0.0203-0.5781 0.1501 0.1211 0.2217 0.2779 0.3718 0.399 0.0426-0.1143-0.029-0.2712 0.0136-0.3854 0.1531-2.1553-0.115-4.4027-0.5041-6.4999-0.2816-1.862-0.6349-3.8808-1.9003-5.1987-0.3718-0.3989-0.822-0.7621-1.1938-1.161-0.3718-0.399-0.5799-1.0622-0.4453-1.5977-2.5474 0.026-5.3824 0.5214-7.3691-1.1306-1.5366-1.2888-3.6118-0.9848-3.835-2.5231 0.5764 0.6413-0.9619 0.8645-2.1471 0.1907s-1.6867-6.0002-0.7832-7.5503c0.8609-1.4359 2.2504-2.5444 3.7338-3.0323 0.0784-0.0358 0.0784-0.0358 0.1569-0.0717-2.2357-1.1591-4.5855-2.3609-6.6933-3.8628-0.6003-0.4841-1.279-0.9325-1.6798-1.6025-0.4163-1.3266-0.3978-2.9464-0.3435-4.4879z" clip-path="url(#clipPath26003)" fill="#5c5a5a" style=""/>
<path d="m71.824 37.003c0.8133-0.0871 1.2483-0.2848 2.0481 0.0134 1.5995 0.5966 1.9619 1.2408 3.4762 2.0659 1.707 0.8318 2.611 0.9109 4.531 1.1715 0.9992 0.1124 1.9626 0.1463 2.8902 0.1018-0.2198 0.764 1.2619 1.9651 1.8195 2.5635 0.5577 0.5984 1.2722 1.1252 1.5162 1.8669 0.2798 0.8201 0.0958 1.6625 0.1044 2.5116 0.0445 0.9276 0.3601 1.8262 0.5973 2.7605 0.3958 1.9046 0.1353 3.8246-0.2396 5.7021-0.0358-0.0785-0.0358-0.0785-0.0716-0.1569 0.1531-2.1553-0.115-4.4026-0.5041-6.4999-0.2816-1.862-0.6349-3.8808-1.9003-5.1987-0.3718-0.3989-0.822-0.762-1.1938-1.161-0.3718-0.3989-1.5107-1.4722-1.3761-2.0076-2.5475 0.026-4.3568 0.4551-6.3436-1.1968-1.5365-1.2889-2.0832-1.1863-3.947-1.9465-0.3001-0.2421-0.8714-0.4551-1.4068-0.5898z" clip-path="url(#clipPath25997)" fill="#8b8b8b" style=""/>
<path d="m81.209 28.786c0.15 0.121 0.1859 0.1995 0.3359 0.3205 0.0359 0.0784 0.1501 0.121 0.2217 0.2779 0.0359 0.0784 0.0359 0.0784 0.0359 0.0784 0.1723 0.5849 0.3446 1.1697 0.7096 1.7613 0.2149 0.4706 0.5441 0.9838 0.8374 1.4186 1.2451 1.8959 2.9607 3.5769 3.771 5.7662-0.549 0.2507-1.098 0.5015-1.6402 0.5595 0.2711-0.029 0.5064-0.1365 0.7058-0.3224 0.0785-0.0358 0.1211-0.15 0.1637-0.2643 0.0426-0.1142-0.0717-0.1568-0.1075-0.2353-2.1745-2.8933-4.6201-5.7575-5.0333-9.3604z" clip-path="url(#clipPath25991)" fill="#8b8b8b" style=""/>
<path d="m91.158 42.054c0.6275-0.2865 1.4408-0.3736 2.1689-0.2322 0.7282 0.1414 1.4853 0.5539 2.2492 0.7737 0.1143 0.0427 0.1501 0.1211 0.2644 0.1637 1.3642 0.704 5.2905 3.6774 6.8315 3.7317-1.349-0.0475-5.0103-2.8572-6.3659-2.7121 1.2945 1.589 2.7418 3.1476 4.1929 4.665-1.4289-1.0536-2.9256-2.3053-4.1126-3.659-0.5935-0.6768-1.187-1.3537-1.9015-1.8804-1.3933-0.9752-3.4769-0.9714-4.4521 0.4218-0.121 0.1501-0.242 0.3002-0.2488 0.4928 0.092-0.4211 0.2198-0.7639 0.4619-1.064 0.1636-0.2644 0.52-0.5219 0.9121-0.701z" clip-path="url(#clipPath25985)" fill="#8b8b8b" style=""/>
<path d="m87.909 55.316c0.6497 0.1772 1.1647 0.8899 1.3012 1.3963 0.2372 0.9344 0.3959 1.9046 0.5905 2.9532 0.2013 0.856 0.3242 1.7477 0.604 2.5679 0.7386 2.0324 2.1047 3.7782 3.6345 5.2597 0 0 0.0358 0.0785 0.1142 0.0426 1.5742 2.4092 3.2269 4.7825 5.079 6.9699-1.1647-0.8899-2.2443-2.0083-3.0459-3.3485-0.6225-0.9479-1.0882-1.9675-1.7533-2.8012-0.701-0.9122-1.644-1.5242-2.345-2.4363-0.2933-0.4348-0.6225-0.948-0.9943-1.3469-0.155 1.1135-0.2315 2.1911-0.3865 3.3046-0.0871-0.8133-0.1742-1.6267-0.2613-2.44-0.0803-1.006-0.239-1.9762-0.3978-2.9464-0.725-2.4178-1.9565-4.6991-2.1393-7.1749z" clip-path="url(#clipPath25979)" fill="#8b8b8b" style=""/>
<path d="m65.828 16.28c0.1007 0.4279 0.1587 0.9702 0.3378 1.3623 0.0871 0.8134 0.2168 1.5124 0.6534 2.2609 0.5083 0.9054 1.2519 1.7033 2.0022 2.3085 1.3507 1.0893 2.9076 1.8001 4.4645 2.5109 0.7213 0.3341 1.4 0.7825 1.7224 1.4883-0.1142-0.0426-0.1142-0.0426-0.2285-0.0852 0.0784-0.0358 0.0784-0.0358 0.1569-0.0716-2.2356-1.1592-4.5855-2.3609-6.6933-3.8628-0.6003-0.4842-1.279-0.9325-1.6798-1.6026-0.8084-1.1474-0.7899-2.7673-0.7356-4.3087z" clip-path="url(#clipPath25973)" fill="#8b8b8b" style=""/>
<path d="m80.266 25.894c0.6991-0.1297 1.4272 0.0117 2.1263-0.118 0.7349-0.0513 1.3981-0.2594 2.0188-0.3533 1.1987-0.0735 2.3054 0.2742 3.4257 0.2365 0.6564-0.0155 1.3913-0.0667 2.0836-0.0037 1.2278 0.1976 2.2357 1.1591 3.0935 1.9996 3.2454 3.1625 6.4549 6.2466 9.7004 9.4091 0.522 0.52 1.151 1.2753 0.817 1.9966-0.164 0.2643-0.442 0.4861-0.677 0.5935 0.079-0.0358 0.157-0.0716 0.121-0.1501 0.321-0.3359 0.269-1.0708-0.152-1.1628-0.172-0.5849-0.73-1.1833-1.102-1.5822-3.059-2.9631-6.197-5.8903-9.2991-8.7391-0.3359-0.3205-0.6719-0.641-1.1647-0.8899s-0.914-0.3409-1.4136-0.3971c-3.6048-0.6286-7.4449-1.1498-11.026-0.2728-0.0784 0.0359-0.1569 0.0717-0.2353 0.1075 0 0 0.0358 0.0784 0.0717 0.1569-0.2712 0.029-0.4997-0.0562-0.7708-0.0272 0.7843-0.3582 1.5686-0.7164 2.382-0.8035z" clip-path="url(#clipPath25967)" fill="#8b8b8b" style=""/>
<path d="m97.566 23.301c1.2055-0.2662 2.4625 0.2025 3.6835 0.5928l0.228 0.0852c2.751 1.8718 5.58 3.7078 8.573 5.2795-3.013-0.9936-5.934-2.4084-8.77-4.0517-0.643-0.37-1.208-0.7757-1.9717-0.9955-1.7922-0.6034-3.7462 0.0995-5.5501 0.9233 0.2779-0.2217 0.7485-0.4366 0.9054-0.5083 0.4706-0.2149 0.8627-0.394 1.3333-0.6089 0.4774-0.4076 0.948-0.6225 1.5686-0.7164z" clip-path="url(#clipPath25961)" fill="#8b8b8b" style=""/>
<path d="m95.964 39.188c0.2285 0.0852 0.5712 0.213 0.7997 0.2982 0.0358 0.0785 0.1501 0.1211 0.1501 0.1211 0.6429 0.3699 1.2858 0.7398 1.8929 1.0313 1.2563 0.4687 2.2283 0.6388 3.4763 0.2584 0.664-0.2082 1.703-0.9905 2.331-1.277 1.803-0.8239 3.816-0.5329 5.714-0.7361 1.705-0.21 5.134 2.4883 6.928 3.1945 1.794 0.7063 2.083 1.027 3.299 1.7156 1.949 1.1036 1.971 0.9955 2.957 1.4933 1.328 0.6255 1.989 0.7126 2.489 2.2126 0 2-2.5 4.493-2.5 6.5 0.866 1.1428 1.494 0.5121 2.95 0.7949 0.764 0.2199 1.528 0.4397 2.171 0.8096 1.558 1.7527 3.039 3.5411 4.562 5.2153-0.872-0.4551-1.658-1.1387-2.366-1.8582-0.929-0.9974-1.581-2.2164-2.752-2.9137-1.322-0.8182-2.984-0.7225-4.555-1.0479-2.491-0.4736 3.316-7.4351 1.045-8.6727-2.272-1.2375-3.808-2.4308-6.356-2.4048-2.433 0.0686-7.736-4.5321-10.061-4.2282-0.735 0.0512-1.513 0.2168-2.254 0.4607-0.507 0.1365-0.977 0.3514-1.526 0.6022-0.628 0.2865-1.177 0.5373-1.84 0.7454-0.392 0.1791-0.82 0.2798-1.206 0.2662-0.463 0.0222-0.956-0.2266-1.3348-0.4329-1.3642-0.704-2.7285-1.408-4.0142-2.1478z" clip-path="url(#clipPath25955)" fill="#8b8b8b" style=""/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 58 KiB

88
application/src/main/data/json/system/scada_symbols/short-bottom-filter.svg

@ -0,0 +1,88 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="200" height="400" fill="none" version="1.1" viewBox="0 0 200 400">
<tb:metadata xmlns=""><![CDATA[{
"title": "Short bottom filter",
"description": "Short bottom filter",
"searchTags": [
"filter"
],
"widgetSizeX": 1,
"widgetSizeY": 2,
"tags": [
{
"tag": "clickArea",
"stateRenderFunction": null,
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'click');"
}
}
}
],
"behavior": [
{
"id": "click",
"name": "{i18n:scada.symbol.on-click}",
"hint": "{i18n:scada.symbol.on-click-hint}",
"group": null,
"type": "widgetAction",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": {
"type": "doNothing",
"openInSeparateDialog": false,
"openInPopover": false
}
}
],
"properties": []
}]]></tb:metadata><mask id="path-9-inside-1_1547_237364" fill="white">
<path d="m29 168c-3.866 0-7-3.134-7-7s3.134-7 7-7h142c3.866 0 7 3.134 7 7s-3.134 7-7 7h-142z"/>
</mask><g tb:tag="clickArea">
<rect x="187.5" y="51.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3"/>
<rect x="1.5" y="51.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3"/>
<path d="m172 64h14v72h-14v-72z" fill="#fff"/>
<path d="m172 64h14v72h-14v-72z" fill="url(#paint0_linear_1547_237364)"/>
<path d="m173.5 65.5h11v69h-11v-69z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m14 64h14v72h-14v-72z" fill="#fff"/>
<path d="m14 64h14v72h-14v-72z" fill="url(#paint1_linear_1547_237364)"/>
<path d="m15.5 65.5h11v69h-11v-69z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m28.723 168.81c-0.0482-0.849-0.3653-1.66-0.9055-2.316l-4.5199-5.49s-2.9203-73.294 0-119.5c0.7949-12.578 2.4797-30.38 3.2135-37.912 0.1992-2.0442 1.9174-3.588 3.9713-3.588h139.03c2.054 0 3.772 1.5438 3.972 3.588 0.733 7.5322 2.418 25.334 3.213 37.912 2.92 46.206 0 119.5 0 119.5l-4.52 5.49c-0.54 0.656-0.857 1.467-0.905 2.316l-9.062 159.79c-0.434 7.652-3.735 14.861-9.245 20.188-29.539 28.56-76.401 28.56-105.94 0-5.5104-5.327-8.8115-12.536-9.2454-20.188l-9.0617-159.79z" fill="#93979B"/>
<path d="m28.723 168.81c-0.0482-0.849-0.3653-1.66-0.9055-2.316l-4.5199-5.49s-2.9203-73.294 0-119.5c0.7949-12.578 2.4797-30.38 3.2135-37.912 0.1992-2.0442 1.9174-3.588 3.9713-3.588h139.03c2.054 0 3.772 1.5438 3.972 3.588 0.733 7.5322 2.418 25.334 3.213 37.912 2.92 46.206 0 119.5 0 119.5l-4.52 5.49c-0.54 0.656-0.857 1.467-0.905 2.316l-9.062 159.79c-0.434 7.652-3.735 14.861-9.245 20.188-29.539 28.56-76.401 28.56-105.94 0-5.5104-5.327-8.8115-12.536-9.2454-20.188l-9.0617-159.79z" fill="url(#paint2_linear_1547_237364)"/>
<path d="m30.221 168.72c-0.0662-1.167-0.5023-2.282-1.2451-3.184l-4.1986-5.1c-0.0037-0.096-0.0078-0.205-0.0125-0.328-0.0206-0.547-0.0505-1.356-0.0875-2.402-0.0741-2.092-0.1767-5.133-0.2906-8.926-0.228-7.588-0.5016-18.186-0.684-30.226-0.3649-24.093-0.3639-53.919 1.0923-76.96 0.7931-12.55 2.4755-30.327 3.2095-37.861 0.1235-1.2679 1.1886-2.2334 2.4783-2.2334h139.03c1.29 0 2.355 0.96558 2.479 2.2334 0.734 7.5338 2.416 25.312 3.209 37.861 1.456 23.041 1.457 52.867 1.092 76.96-0.182 12.04-0.456 22.638-0.684 30.226-0.114 3.793-0.216 6.834-0.29 8.926-0.037 1.046-0.067 1.855-0.088 2.402-4e-3 0.123-9e-3 0.232-0.012 0.328l-4.199 5.1c-0.743 0.902-1.179 2.017-1.245 3.184l-9.062 159.79c-0.412 7.276-3.551 14.129-8.79 19.195-28.957 27.997-74.897 27.997-103.85 0-5.2392-5.066-8.3778-11.919-8.7904-19.195l-9.0617-159.79z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m29 168c-3.866 0-7-3.134-7-7s3.134-7 7-7h142c3.866 0 7 3.134 7 7s-3.134 7-7 7h-142z" fill="#D9D9D9"/>
<path d="m29 157h142v-6h-142v6zm142 8h-142v6h142v-6zm4-4c0 2.209-1.791 4-4 4v6c5.523 0 10-4.477 10-10h-6zm-4-4c2.209 0 4 1.791 4 4h6c0-5.523-4.477-10-10-10v6zm-146 4c0-2.209 1.7909-4 4-4v-6c-5.5228 0-10 4.477-10 10h6zm-6 0c0 5.523 4.4772 10 10 10v-6c-2.2091 0-4-1.791-4-4h-6z" fill="#727171" mask="url(#path-9-inside-1_1547_237364)"/>
<path d="m29.596 169.5h139.82l-8.845 156.64c-0.038 0.67-0.023 1.351-9e-3 1.961 4e-3 0.156 7e-3 0.307 0.01 0.452 0.056 3.297-0.827 14.337-14.569 22.905l-0.109 0.068-0.096 0.085c-4.702 4.191-9.087 7.356-15.947 10.665-4.446 2.144-5.656 2.438-8.438 3.115-1.495 0.364-3.443 0.838-6.59 1.768-3.845 0.55-7.671 0.886-10.55 1.085-1.452 0.1-2.659 0.165-3.502 0.205-0.422 0.02-0.752 0.034-0.9763 0.043-0.1121 4e-3 -0.1975 7e-3 -0.2545 9e-3l-0.064 2e-3 -0.0155 1e-3h-0.0036-7e-4 -0.0029-1e-4 -4e-4 -0.0019-0.0124l-0.056 2e-3c-0.0509 1e-3 -0.1288 3e-3 -0.2323 4e-3 -0.2069 3e-3 -0.5158 5e-3 -0.9149 2e-3 -0.7985-6e-3 -1.9567-0.033-3.3805-0.118-2.8509-0.17-6.7488-0.569-10.946-1.484-4.2451-0.926-6.4101-1.619-8.294-2.443-0.9552-0.417-1.856-0.877-2.9513-1.445-0.1195-0.061-0.2412-0.125-0.3653-0.189-1.0075-0.523-2.1736-1.129-3.6389-1.842-5.9256-2.883-9.2803-5.333-14.164-8.899-0.3607-0.263-0.7298-0.533-1.1089-0.809l-0.1011-0.074-0.1119-0.055c-13.031-6.51-13.802-19.448-13.765-22.889l7e-4 -0.069c0.0061-0.554 0.0128-1.163-0.026-1.785l-9.7836-156.91z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
</g><defs>
<linearGradient id="paint0_linear_1547_237364" x1="175.64" x2="173.3" y1="64" y2="135.93" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1547_237364" x1="17.64" x2="15.305" y1="64" y2="135.93" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint2_linear_1547_237364" x1="189.19" x2="10.798" y1="503.51" y2="502.96" gradientUnits="userSpaceOnUse">
<stop stop-color="#020202" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".23574"/>
<stop stop-color="#fff" stop-opacity=".12" offset=".39937"/>
<stop stop-color="#fff" stop-opacity=".3" offset=".49829"/>
<stop stop-color="#fff" stop-opacity=".12" offset=".59721"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".76303"/>
<stop stop-color="#020202" stop-opacity=".35" offset="1"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 7.0 KiB

160
application/src/main/data/json/system/scada_symbols/short-left-drain-pipe.svg

@ -0,0 +1,160 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="200" height="200" fill="none" version="1.1" viewBox="0 0 200 200">
<tb:metadata><![CDATA[{
"title": "Short left drain pipe",
"description": "Short left drain pipe",
"searchTags": [
"pipe",
"drain"
],
"widgetSizeX": 1,
"widgetSizeY": 1,
"tags": [
{
"tag": "clickArea",
"stateRenderFunction": null,
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'click');"
}
}
},
{
"tag": "fluid-background",
"stateRenderFunction": "var color = ctx.properties.fluidColor;\nelement.attr({fill: color});",
"actions": null
},
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
}
],
"behavior": [
{
"id": "click",
"name": "{i18n:scada.symbol.on-click}",
"hint": "{i18n:scada.symbol.on-click-hint}",
"group": null,
"type": "widgetAction",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": {
"type": "doNothing",
"openInSeparateDialog": false,
"openInPopover": false
}
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"key": "state",
"scope": null
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"compareToValue": true,
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "fluidColor",
"name": "{i18n:scada.symbol.fluid-color}",
"type": "color",
"default": "#8CAA5C",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata>
<g clip-path="url(#clip0_1924_305497)" tb:tag="clickArea">
<rect x="101" y="64" width="85" height="72" fill="#fff" tb:tag="pipe-background"/>
<rect x="101" y="64" width="85" height="72" fill="url(#paint0_linear_1924_305497)"/>
<rect x="102.5" y="65.5" width="82" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect x="187.5" y="51.5" width="11.07" height="97" rx="5.5352" fill="#D9D9D9" stroke="#727171" stroke-width="3"/>
<ellipse transform="rotate(-90 100 100)" cx="100" cy="100" rx="36" ry="4" fill="#5D5C5C"/>
<path d="m76.285 94.5c4-9.2 20-22.333 24.001-24.5 0 0 1.499 18.101 1.499 30.5 0 12.399-1.499 33-1.499 33 0 6.5 1.5 9 3.999 14.5 5.089 11.196 3.5 10.5 12.5 13.5s24 2.5 21.5 11.5-32-8-34-4 16 17 10.5 21.5-17.5-10.5-21.5-10.5-4.5 10.5-10 10.5-7-11.5-16-10.5-12 13-18 17-14-2-14.5-11 20.5-7 20.5-13-39 1.5-45.5-4c-6.5-5.5-0.50001-6.5 6.5-10.5 7-4 38 5.5 39 0s-16.5 0-15-5.5 16.5-2 23-10.5 8-36.5 13-48z" fill="#8CAA5C" tb:tag="fluid-background"/>
<g style="display:none" tb:tag="leak">
<path d="m110.95 127.83c0.101-0.428 0.159-0.97 0.338-1.362 0.338-1.362 1.025-2.66 2.076-3.507 0.528-0.327 1.136-0.619 1.707-0.832 1.521-0.632 2.964-1.3 4.406-1.969 1.25-0.661 2.693-1.329 4.019-0.913 7e-3 0.193 0.05 0.307 0.057 0.5 2.334-0.546 4.888-0.327 7.228 0.362 1.597 0.446 3.208 1.276 4.864 1.179 0.578-0.02 1.114-0.155 1.613-0.211 0.885-0.07 1.734-0.061 2.59 0.14 0.621 0.094 1.248 0.381 1.833 0.553 1.676 0.481 3.424 0.806 5.237 0.78-0.514-0.329-1.027-0.658-1.54-0.987 0 0-0.128-0.343-0.085-0.229-0.15 0.121-0.386 0.014-0.507-0.136 0.565-0.406 1.129-0.812 1.658-1.139 2.751-1.872 5.58-3.708 8.573-5.28-3.014 0.994-5.935 2.409-8.771 4.052-0.643 0.37-1.207 0.776-1.971 0.996-1.792 0.603-3.746-0.1-5.55-0.924l-0.078-0.035c-0.157-0.072-0.393-0.18-0.399-0.372-0.086-0.229 0.136-0.507 0.322-0.706 1.008-0.962 1.937-1.959 2.867-2.956 1.151-1.276 2.067-2.658 3.296-3.898 1.08-1.118 2.281-2.087 3.445-2.976 0.565-0.406 1.051-0.848 1.7-1.025 0.686-0.256 1.378-0.319 2.113-0.267 0.928 0.044 1.777 0.053 2.669 0.176 5.115 0.63 13.659-5.451 18.687-4.008 1.277 0.273 2.776 0 1.277-1.727-2.001-1.4995-2-1.9996-2-4.9996 0.757-0.4125-2-3.5-2-5-0.5-1 0.377-0.9415 1.069-1.0045 1.385-0.1259 2.812-0.1376 4.031 0.5139-0.713-0.5151-1.497-0.8733-2.239-1.1172 0.186-0.1995 0.408-0.4774 0.594-0.6769 1.559-1.7526 3.039-3.5411 4.562-5.2153-0.872 0.4552-1.658 1.1388-2.366 1.8583-0.929 0.9973-1.581 2.2164-2.752 2.9136-1.322 0.8183-2.984 0.7225-4.555 1.048-2.491 0.4736 3.492 6.84 1.221 8.0776-2.272 1.2375-3.933 2.7911-7.809 4.5241-2.794 1.249-7.353 3.179-9.679 2.875-0.735-0.051-1.513-0.216-2.254-0.46-0.507-0.137-0.977-0.352-1.526-0.603-0.628-0.286-1.177-0.537-1.84-0.745-0.392-0.179-0.82-0.28-1.206-0.266-0.463-0.022-0.956 0.226-1.335 0.433l-4.092 2.112c0.228-0.085 0.571-0.213 0.799-0.299 1.828-0.681 3.621-1.285 5.476-1.196 0.385-0.013 0.813 0.087 1.091 0.309 0.078 0.036 0.157 0.072 0.121 0.15 0.321 0.336 0.269 1.071-0.152 1.163-0.172 0.585-0.73 1.183-1.102 1.582-3.059 2.963-6.197 5.891-9.299 8.739-0.336 0.321-0.672 0.641-1.165 0.89s-0.914 0.341-1.414 0.397c-3.604 0.629-7.444 1.15-11.025 0.273-0.078-0.036-0.157-0.072-0.235-0.107 0 0 0.035-0.079 0.071-0.157-0.271-0.029-0.499 0.056-0.77 0.027-1.82-0.167-3.595-1.262-5.098-2.328-1.267-1.138-1.788-1.768-1.821-2.377-0.036-0.691-0.165-3.04 1.054-4.04 0.565-0.406 1.76-0.38 1.973-0.617 0.075-0.084 0.298-1.622-0.246-0.372 0.609-0.033 6.428-2.328 10.667-2.478 0.386-0.013 0.849 9e-3 1.277 0.11 0.271 0.029 0.507 0.136 0.706 0.322 0.079 0.036 0.121 0.15 0.164 0.264 0.043 0.115-0.072 0.157-0.108 0.236-1.981 2.886-4.505 5.715-4.919 9.318 0.15-0.122 0.186-0.2 0.336-0.321 0.036-0.078 0.15-0.121 0.222-0.278 1.259-1.51 2.154-3.471 3.576-4.717 0.637-0.563 1.351-1.09 1.788-1.838 0.544-0.984 0.611-2.375 1.354-3.173 0.372-0.399 0.901-0.727 1.358-0.897 1.256-0.469 2.677-0.673 3.891-1.256 0.607-0.292 1.207-0.776 1.814-1.067 0.115-0.043 0.15-0.121 0.265-0.164 1.364-0.704 5.823-4.0432 7.364-4.0975-1.348 0.0475-5.543 3.2235-6.899 3.0775 1.295-1.5885 2.553-3.099 4.005-4.6164-1.429 1.0536-2.737 2.2572-3.924 3.6109-0.594 0.6765-1.187 1.3535-1.902 1.8805-1.393 0.975-3.477 0.971-4.452-0.422-0.121-0.15-0.242-0.3-0.249-0.493-0.419-0.9496-0.381-2.0698-0.38-3.1117 0.163-3.0539 0.446-5.9577 0.802-9.0184 0.268-2.2473 0.614-4.4588 1.624-6.4622 0.071-0.1568 0.222-0.2779 0.378-0.2062-0.405-0.5645-0.197-1.2278 0.168-1.8194 0.286-0.6274 0.73-1.1832 1.095-1.7749 0.329-0.5132 0.658-1.0264 0.987-1.5396 1.575-2.4091 3.227-4.7824 5.079-6.9698-1.164 0.8899-2.244 2.0083-3.046 3.3485-0.622 0.9479-1.088 1.9675-1.753 2.8012-0.701 0.9122-1.644 1.5242-2.345 2.4363-0.293 0.4348-0.622 0.948-0.994 1.3469-0.155-1.1135-0.232-2.1911-0.387-3.3046-0.087 0.8133-0.174 1.6267-0.261 2.44-0.08 1.006-0.239 1.9762-0.398 2.9464-0.532 2.411-1.878 4.7349-2.061 7.2107l0.021 0.5781c0.15-0.1211 0.221-0.2779 0.371-0.399 0.043 0.1143-0.029 0.2711 0.014 0.3854 0.153 2.1553-0.115 4.4026-0.504 6.4999-0.282 1.862-0.635 3.8808-1.9 5.1984-0.372 0.399-0.822 0.762-1.194 1.161s-0.58 1.062-0.445 1.598c-2.548-0.026-5.383-0.521-7.37 1.131-1.536 1.288-3.611 0.984-3.835 2.523 0.577-0.642-0.961-0.865-2.147-0.191-1.185 0.674-1.686 6-0.783 7.55 0.861 1.436 2.251 2.545 3.734 3.033 0.078 0.035 0.078 0.035 0.157 0.071-2.236 1.159-4.586 2.361-6.693 3.863-0.601 0.484-1.28 0.933-1.68 1.603-0.417 1.326-0.398 2.946-0.344 4.487z" fill="#5C5A5A"/>
<path d="m116.94 107.1c0.813 0.088 1.248 0.285 2.048-0.013 1.6-0.597 1.962-1.241 3.476-2.066 1.707-0.832 2.611-0.911 4.531-1.171 1-0.113 1.963-0.147 2.891-0.102-0.22-0.764 1.261-1.965 1.819-2.564 0.558-0.598 1.272-1.125 1.516-1.8665 0.28-0.8201 0.096-1.6625 0.105-2.5116 0.044-0.9276 0.36-1.8262 0.597-2.7606 0.396-1.9045 0.135-3.8246-0.24-5.702-0.035 0.0784-0.035 0.0784-0.071 0.1569 0.153 2.1553-0.115 4.4026-0.504 6.4999-0.282 1.8619-0.635 3.8808-1.901 5.1989-0.371 0.399-0.822 0.762-1.193 1.161-0.372 0.399-1.511 1.472-1.376 2.007-2.548-0.026-4.357-0.455-6.344 1.197-1.537 1.289-2.083 1.186-3.947 1.947-0.3 0.242-0.871 0.455-1.407 0.589z" fill="#8B8B8B"/>
<path d="m126.33 115.32c0.15-0.121 0.186-0.2 0.336-0.321 0.036-0.078 0.15-0.121 0.222-0.278 0.036-0.078 0.036-0.078 0.036-0.078 0.172-0.585 0.344-1.17 0.709-1.762 0.215-0.47 0.544-0.983 0.838-1.418 1.245-1.896 2.96-3.577 3.771-5.766-0.549-0.251-1.098-0.502-1.641-0.56 0.272 0.029 0.507 0.137 0.706 0.323 0.079 0.035 0.121 0.15 0.164 0.264s-0.072 0.157-0.108 0.235c-2.174 2.893-4.62 5.758-5.033 9.361z" fill="#8B8B8B"/>
<path d="m136.28 102.05c0.627 0.287 1.44 0.374 2.168 0.232 0.729-0.141 1.486-0.554 2.25-0.773 0.114-0.043 0.15-0.122 0.264-0.164 1.364-0.704 5.29-3.6776 6.832-3.7319-1.349 0.0475-5.011 2.8569-6.366 2.7119 1.294-1.5887 2.741-3.1474 4.193-4.6647-1.429 1.0535-2.926 2.3052-4.113 3.6589-0.594 0.6769-1.187 1.3538-1.902 1.8808-1.393 0.975-3.477 0.971-4.452-0.422-0.121-0.15-0.242-0.3-0.248-0.493 0.092 0.421 0.219 0.764 0.461 1.064 0.164 0.264 0.52 0.522 0.913 0.701z" fill="#8B8B8B"/>
<path d="m133.03 88.789c0.65-0.1773 1.165-0.8899 1.302-1.3963 0.237-0.9344 0.396-1.9046 0.59-2.9533 0.201-0.8559 0.324-1.7477 0.604-2.5678 0.739-2.0324 2.105-3.7782 3.635-5.2598 0 0 0.035-0.0784 0.114-0.0426 1.574-2.4091 3.227-4.7824 5.079-6.9698-1.165 0.8899-2.244 2.0083-3.046 3.3484-0.623 0.948-1.088 1.9676-1.753 2.8013-0.701 0.9121-1.644 1.5241-2.345 2.4363-0.294 0.4347-0.623 0.9479-0.995 1.3469-0.155-1.1135-0.231-2.1912-0.386-3.3047-0.087 0.8134-0.174 1.6267-0.261 2.4401-0.081 1.006-0.239 1.9762-0.398 2.9464-0.725 2.4177-1.957 4.699-2.14 7.1749z" fill="#8B8B8B"/>
<path d="m110.95 127.83c0.101-0.427 0.159-0.97 0.338-1.362 0.087-0.813 0.217-1.512 0.653-2.261 0.509-0.905 1.252-1.703 2.002-2.308 1.351-1.09 2.908-1.8 4.465-2.511 0.721-0.334 1.4-0.783 1.722-1.488-0.114 0.042-0.114 0.042-0.228 0.085 0.078 0.036 0.078 0.036 0.157 0.071-2.236 1.16-4.586 2.361-6.694 3.863-0.6 0.484-1.279 0.933-1.679 1.603-0.809 1.147-0.79 2.767-0.736 4.308z" fill="#8B8B8B"/>
<path d="m125.38 118.21c0.699 0.13 1.427-0.011 2.126 0.118 0.735 0.052 1.399 0.26 2.019 0.354 1.199 0.073 2.306-0.274 3.426-0.237 0.656 0.016 1.391 0.067 2.084 4e-3 1.227-0.198 2.235-1.159 3.093-2 3.245-3.162 6.455-6.246 9.7-9.409 0.522-0.52 1.152-1.275 0.817-1.996-0.163-0.265-0.441-0.486-0.676-0.594 0.078 0.036 0.157 0.072 0.121 0.15 0.32 0.336 0.269 1.071-0.152 1.163-0.173 0.585-0.73 1.183-1.102 1.582-3.06 2.963-6.197 5.891-9.3 8.739-0.335 0.321-0.671 0.641-1.164 0.89s-0.914 0.341-1.414 0.397c-3.605 0.629-7.445 1.15-11.025 0.273-0.079-0.036-0.157-0.072-0.236-0.107 0 0 0.036-0.079 0.072-0.157-0.271-0.029-0.5 0.056-0.771 0.027 0.785 0.358 1.569 0.716 2.382 0.803z" fill="#8B8B8B"/>
<path d="m142.68 120.8c1.206 0.266 2.462-0.202 3.683-0.593 0.114-0.042 0.114-0.042 0.229-0.085 2.75-1.872 5.58-3.708 8.572-5.279-3.013 0.993-5.934 2.408-8.77 4.051-0.643 0.37-1.207 0.776-1.971 0.996-1.792 0.603-3.746-0.1-5.55-0.923 0.278 0.221 0.748 0.436 0.905 0.508 0.471 0.215 0.863 0.394 1.333 0.609 0.478 0.407 0.948 0.622 1.569 0.716z" fill="#8B8B8B"/>
<path d="m141.08 104.92c0.229-0.085 0.572-0.213 0.8-0.298 0.036-0.079 0.15-0.121 0.15-0.121 0.643-0.37 1.286-0.74 1.893-1.032 1.257-0.468 2.229-0.639 3.477-0.258 0.663 0.208 1.703 0.99 2.33 1.277 1.804 0.824 3.817 0.533 5.715 0.736 1.705 0.21 5.134-2.488 6.928-3.195 1.794-0.706 2.082-1.027 3.298-1.715 1.95-1.1037 1.972-0.9957 2.957-1.4934 1.329-0.6256 1.99-0.7126 2.49-2.2126 0-2-2.501-4.493-2.501-6.5 0.867-1.1428 1.494-0.5121 2.95-0.795 0.764-0.2198 1.528-0.4397 2.171-0.8096 1.559-1.7526 3.039-3.5411 4.562-5.2153-0.871 0.4552-1.657 1.1388-2.365 1.8583-0.93 0.9973-1.581 2.2164-2.753 2.9136-1.321 0.8183-2.984 0.7225-4.554 1.0479-2.492 0.4737 3.316 7.4351 1.044 8.6727-2.271 1.2376-3.808 2.4304-6.355 2.4044-2.433-0.068-7.736 4.533-10.062 4.229-0.735-0.052-1.512-0.217-2.254-0.461-0.506-0.137-0.977-0.351-1.526-0.602-0.627-0.287-1.176-0.538-1.84-0.746-0.392-0.179-0.82-0.279-1.205-0.266-0.464-0.022-0.957 0.227-1.335 0.433-1.365 0.704-2.729 1.408-4.015 2.148z" fill="#8B8B8B"/>
</g>
</g>
<defs>
<linearGradient id="paint0_linear_1924_305497" x1="123.1" x2="122.72" y1="64" y2="136" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<clipPath id="clip0_1924_305497">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

160
application/src/main/data/json/system/scada_symbols/short-right-drain-pipe.svg

@ -0,0 +1,160 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="200" height="200" fill="none" version="1.1" viewBox="0 0 200 200">
<tb:metadata><![CDATA[{
"title": "Short right drain pipe",
"description": "Short right drain pipe",
"searchTags": [
"pipe",
"drain"
],
"widgetSizeX": 1,
"widgetSizeY": 1,
"tags": [
{
"tag": "clickArea",
"stateRenderFunction": null,
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'click');"
}
}
},
{
"tag": "fluid-background",
"stateRenderFunction": "var color = ctx.properties.fluidColor;\nelement.attr({fill: color});",
"actions": null
},
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
}
],
"behavior": [
{
"id": "click",
"name": "{i18n:scada.symbol.on-click}",
"hint": "{i18n:scada.symbol.on-click-hint}",
"group": null,
"type": "widgetAction",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": {
"type": "doNothing",
"openInSeparateDialog": false,
"openInPopover": false
}
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"key": "state",
"scope": null
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"compareToValue": true,
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "fluidColor",
"name": "{i18n:scada.symbol.fluid-color}",
"type": "color",
"default": "#8CAA5C",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata>
<g clip-path="url(#clip0_1924_305417)" tb:tag="clickArea">
<rect x="14" y="64" width="86" height="72" fill="#fff" tb:tag="pipe-background"/>
<rect x="14" y="64" width="86" height="72" fill="url(#paint0_linear_1924_305417)"/>
<rect x="15.5" y="65.5" width="83" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect x="1.5" y="51.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3"/>
<ellipse transform="rotate(-90 100 100)" cx="100" cy="100" rx="36" ry="4" fill="#5D5C5C"/>
<path d="m123 94.5c-4-9.2-20-22.333-24-24.5 0 0-1.4995 18.101-1.4995 30.5 0 12.399 1.4995 33 1.4995 33 0 6.5-1.5 9-3.9998 14.5-5.0887 11.196-3.4999 10.5-12.5 13.5s-24 2.5-21.5 11.5 32-8 34-4-16 17-10.5 21.5 17.5-10.5 21.5-10.5 4.5 10.5 10 10.5 7-11.5 16-10.5 12 13 18 17 14-2 14.5-11-20.5-7-20.5-13 39 1.5 45.5-4 0.5-6.5-6.5-10.5-38 5.5-39 0 16.5 0 15-5.5-16.5-2-23-10.5-8-36.5-13-48z" fill="#8CAA5C" tb:tag="fluid-background"/>
<g style="display:none" tb:tag="leak">
<path d="m89.054 127.83c-0.1006-0.428-0.1587-0.97-0.3378-1.362-0.3378-1.362-1.0252-2.66-2.0757-3.507-0.5286-0.327-1.1357-0.619-1.707-0.832-1.521-0.632-2.9637-1.3-4.4064-1.969-1.2499-0.661-2.6926-1.329-4.0191-0.913-0.0068 0.193-0.0494 0.307-0.0562 0.5-2.3344-0.546-4.8887-0.327-7.228 0.362-1.5977 0.446-3.2089 1.276-4.8646 1.179-0.5781-0.02-1.1135-0.155-1.6131-0.211-0.885-0.07-1.7341-0.061-2.5901 0.14-0.6206 0.094-1.2481 0.381-1.8329 0.553-1.6761 0.481-3.4238 0.806-5.2364 0.78l1.5396-0.987s0.1278-0.343 0.0852-0.229c0.1501 0.121 0.3854 0.014 0.5064-0.136-0.5644-0.406-1.1289-0.812-1.6576-1.139-2.7506-1.872-5.5798-3.708-8.5725-5.28 3.0131 0.994 5.9342 2.409 8.7702 4.052 0.6429 0.37 1.2073 0.776 1.9713 0.996 1.7922 0.603 3.7461-0.1 5.55-0.924l0.0785-0.035c0.1568-0.072 0.3921-0.18 0.3989-0.372 0.0852-0.229-0.1365-0.507-0.3224-0.706-1.0079-0.962-1.9373-1.959-2.8668-2.956-1.1511-1.276-2.067-2.658-3.2966-3.898-1.0796-1.118-2.2801-2.087-3.4449-2.976-0.5644-0.406-1.0505-0.848-1.7002-1.025-0.6855-0.256-1.3778-0.319-2.1127-0.267-0.9276 0.044-1.7767 0.053-2.6685 0.176-5.1153 0.63-13.66-5.451-18.688-4.008-1.2766 0.273-2.7759 0-1.2764-1.727 2.0004-1.4995 1.9997-1.9996 1.9997-4.9996-0.7572-0.4125 2-3.5 2-5 0.5-1-0.3767-0.9415-1.069-1.0045-1.3845-0.1259-2.8118-0.1376-4.0308 0.5139 0.7126-0.5151 1.497-0.8733 2.2387-1.1172-0.1859-0.1995-0.4077-0.4774-0.5935-0.6769-1.5588-1.7526-3.0392-3.5411-4.5621-5.2153 0.8714 0.4552 1.6576 1.1388 2.3653 1.8583 0.9295 0.9973 1.581 2.2164 2.7526 2.9136 1.3216 0.8183 2.9841 0.7225 4.5546 1.048 2.4912 0.4736-3.4917 6.84-1.2203 8.0776 2.2714 1.2375 3.9327 2.7911 7.8089 4.5241 2.7935 1.249 7.3531 3.179 9.6789 2.875 0.7349-0.051 1.5124-0.216 2.2541-0.46 0.5064-0.137 0.977-0.352 1.526-0.603 0.6275-0.286 1.1765-0.537 1.8398-0.745 0.3921-0.179 0.8201-0.28 1.2055-0.266 0.4638-0.022 0.9566 0.226 1.3351 0.433 1.3643 0.704 2.7285 1.408 4.0927 2.112-0.2285-0.085-0.5712-0.213-0.7997-0.299-1.8281-0.681-3.6203-1.285-5.4754-1.196-0.3854-0.013-0.8134 0.087-1.0913 0.309-0.0784 0.036-0.1568 0.072-0.121 0.15-0.3205 0.336-0.2693 1.071 0.1519 1.163 0.1723 0.585 0.73 1.183 1.1018 1.582 3.0595 2.963 6.1974 5.891 9.2995 8.739 0.336 0.321 0.6719 0.641 1.1648 0.89 0.4928 0.249 0.914 0.341 1.4136 0.397 3.6047 0.629 7.4448 1.15 11.025 0.273 0.0785-0.036 0.1569-0.072 0.2353-0.107 0 0-0.0358-0.079-0.0716-0.157 0.2711-0.029 0.4996 0.056 0.7707 0.027 1.8194-0.167 3.5943-1.262 5.098-2.328 1.2661-1.138 1.7877-1.768 1.8202-2.377 0.0368-0.691 0.1656-3.04-1.0539-4.04-0.5644-0.406-1.7596-0.38-1.9726-0.617-0.0752-0.084-0.2984-1.622 0.2454-0.372-0.6088-0.033-6.4278-2.328-10.667-2.478-0.3853-0.013-0.8491 9e-3 -1.2771 0.11-0.2711 0.029-0.5064 0.136-0.7059 0.322-0.0784 0.036-0.121 0.15-0.1636 0.264-0.0426 0.115 0.0716 0.157 0.1074 0.236 1.9819 2.886 4.5059 5.715 4.9191 9.318-0.15-0.122-0.1859-0.2-0.3359-0.321-0.0358-0.078-0.1501-0.121-0.2217-0.278-1.2587-1.51-2.1542-3.471-3.5764-4.717-0.6362-0.563-1.3507-1.09-1.7873-1.838-0.5441-0.984-0.6109-2.375-1.3544-3.173-0.3718-0.399-0.9004-0.727-1.3575-0.897-1.2567-0.469-2.6771-0.673-3.8913-1.256-0.6071-0.292-1.2073-0.776-1.8144-1.067-0.1143-0.043-0.1501-0.121-0.2643-0.164-1.3642-0.704-5.8232-4.0432-7.3647-4.0975 1.3488 0.0475 5.5435 3.2235 6.899 3.0775-1.2944-1.5885-2.5531-3.099-4.0044-4.6164 1.4291 1.0536 2.7371 2.2572 3.9241 3.6109 0.5935 0.6765 1.187 1.3535 1.9015 1.8805 1.3933 0.975 3.477 0.971 4.4521-0.422 0.121-0.15 0.2421-0.3 0.2489-0.493 0.4193-0.9496 0.3816-2.0698 0.3797-3.1117-0.1625-3.0539-0.446-5.9577-0.8011-9.0184-0.2681-2.2473-0.6146-4.4588-1.6243-6.4622-0.0717-0.1568-0.2218-0.2779-0.3786-0.2062 0.4057-0.5645 0.1976-1.2278-0.1674-1.8194-0.2866-0.6274-0.73-1.1832-1.095-1.7749-0.3292-0.5132-0.6583-1.0264-0.9875-1.5396-1.5742-2.4091-3.2269-4.7824-5.079-6.9698 1.1647 0.8899 2.2443 2.0083 3.0459 3.3485 0.6225 0.9479 1.0882 1.9675 1.7533 2.8012 0.701 0.9122 1.644 1.5242 2.345 2.4363 0.2933 0.4348 0.6225 0.948 0.9943 1.3469 0.155-1.1135 0.2315-2.1911 0.3865-3.3046 0.0871 0.8133 0.1742 1.6267 0.2613 2.44 0.0803 1.006 0.239 1.9762 0.3978 2.9464 0.5323 2.411 1.8781 4.7349 2.0609 7.2107l-0.0204 0.5781c-0.15-0.1211-0.2217-0.2779-0.3717-0.399-0.0427 0.1143 0.029 0.2711-0.0136 0.3854-0.1531 2.1553 0.1149 4.4026 0.504 6.4999 0.2817 1.862 0.635 3.8808 1.9004 5.1984 0.3718 0.399 0.822 0.762 1.1938 1.161 0.3717 0.399 0.5799 1.062 0.4452 1.598 2.5475-0.026 5.3825-0.521 7.3692 1.131 1.5366 1.288 3.6117 0.984 3.8349 2.523-0.5763-0.642 0.962-0.865 2.1472-0.191 1.1851 0.674 1.6866 6 0.7832 7.55-0.8609 1.436-2.2504 2.545-3.7338 3.033-0.0785 0.035-0.0785 0.035-0.1569 0.071 2.2356 1.159 4.5855 2.361 6.6933 3.863 0.6003 0.484 1.279 0.933 1.6798 1.603 0.4163 1.326 0.3978 2.946 0.3434 4.487z" fill="#5C5A5A"/>
<path d="m83.058 107.1c-0.8133 0.088-1.2484 0.285-2.0481-0.013-1.5995-0.597-1.9619-1.241-3.4762-2.066-1.707-0.832-2.611-0.911-4.531-1.171-0.9992-0.113-1.9627-0.147-2.8902-0.102 0.2198-0.764-1.2619-1.965-1.8196-2.564-0.5576-0.598-1.2722-1.125-1.5161-1.8665-0.2798-0.8201-0.0958-1.6625-0.1044-2.5116-0.0445-0.9276-0.3601-1.8262-0.5973-2.7606-0.3959-1.9045-0.1353-3.8246 0.2395-5.702 0.0359 0.0784 0.0359 0.0784 0.0717 0.1569-0.1531 2.1553 0.1149 4.4026 0.504 6.4999 0.2817 1.8619 0.635 3.8808 1.9004 5.1989 0.3718 0.399 0.822 0.762 1.1938 1.161 0.3717 0.399 1.5107 1.472 1.3761 2.007 2.5474-0.026 4.3568-0.455 6.3435 1.197 1.5366 1.289 2.0832 1.186 3.9471 1.947 0.3001 0.242 0.8714 0.455 1.4068 0.589z" fill="#8B8B8B"/>
<path d="m73.673 115.32c-0.1501-0.121-0.1859-0.2-0.336-0.321-0.0358-0.078-0.15-0.121-0.2217-0.278l-0.0358-0.078c-0.1723-0.585-0.3446-1.17-0.7096-1.762-0.2149-0.47-0.5441-0.983-0.8375-1.418-1.245-1.896-2.9607-3.577-3.7709-5.766 0.549-0.251 1.098-0.502 1.6402-0.56-0.2711 0.029-0.5064 0.137-0.7059 0.323-0.0784 0.035-0.121 0.15-0.1636 0.264s0.0716 0.157 0.1074 0.235c2.1746 2.893 4.6202 5.758 5.0334 9.361z" fill="#8B8B8B"/>
<path d="m63.723 102.05c-0.6274 0.287-1.4407 0.374-2.1689 0.232-0.7281-0.141-1.4852-0.554-2.2492-0.773-0.1142-0.043-0.15-0.122-0.2643-0.164-1.3642-0.704-5.2902-3.6776-6.8317-3.7319 1.3488 0.0475 5.0105 2.8569 6.366 2.7119-1.2944-1.5887-2.7417-3.1474-4.193-4.6647 1.429 1.0535 2.9258 2.3052 4.1127 3.6589 0.5935 0.6769 1.187 1.3538 1.9016 1.8808 1.3932 0.975 3.4769 0.971 4.452-0.422 0.1211-0.15 0.2421-0.3 0.2489-0.493-0.092 0.421-0.2198 0.764-0.4619 1.064-0.1637 0.264-0.52 0.522-0.9122 0.701z" fill="#8B8B8B"/>
<path d="m66.97 88.789c-0.6496-0.1773-1.1647-0.8899-1.3012-1.3963-0.2372-0.9344-0.3959-1.9046-0.5904-2.9533-0.2014-0.8559-0.3243-1.7477-0.6041-2.5678-0.7386-2.0324-2.1047-3.7782-3.6344-5.2598 0 0-0.0359-0.0784-0.1143-0.0426-1.5742-2.4091-3.2269-4.7824-5.079-6.9698 1.1647 0.8899 2.2443 2.0083 3.0459 3.3484 0.6225 0.948 1.0882 1.9676 1.7533 2.8013 0.701 0.9121 1.644 1.5241 2.345 2.4363 0.2933 0.4347 0.6225 0.9479 0.9943 1.3469 0.155-1.1135 0.2315-2.1912 0.3865-3.3047 0.0871 0.8134 0.1742 1.6267 0.2613 2.4401 0.0803 1.006 0.239 1.9762 0.3978 2.9464 0.725 2.4177 1.9565 4.699 2.1393 7.1749z" fill="#8B8B8B"/>
<path d="m89.054 127.83c-0.1007-0.427-0.1587-0.97-0.3378-1.362-0.0871-0.813-0.2168-1.512-0.6535-2.261-0.5082-0.905-1.2518-1.703-2.0022-2.308-1.3506-1.09-2.9075-1.8-4.4644-2.511-0.7213-0.334-1.4001-0.783-1.7224-1.488 0.1142 0.042 0.1142 0.042 0.2285 0.085-0.0785 0.036-0.0785 0.036-0.1569 0.071 2.2356 1.16 4.5855 2.361 6.6933 3.863 0.6003 0.484 1.279 0.933 1.6798 1.603 0.8084 1.147 0.7899 2.767 0.7356 4.308z" fill="#8B8B8B"/>
<path d="m74.616 118.21c-0.6991 0.13-1.4272-0.011-2.1263 0.118-0.7349 0.052-1.3982 0.26-2.0188 0.354-1.1987 0.073-2.3054-0.274-3.4257-0.237-0.6565 0.016-1.3914 0.067-2.0837 4e-3 -1.2277-0.198-2.2356-1.159-3.0934-2-3.2454-3.162-6.4549-6.246-9.7003-9.409-0.5219-0.52-1.1512-1.275-0.8171-1.996 0.1637-0.265 0.4416-0.486 0.6769-0.594-0.0785 0.036-0.1569 0.072-0.1211 0.15-0.3205 0.336-0.2692 1.071 0.1519 1.163 0.1724 0.585 0.73 1.183 1.1018 1.582 3.0595 2.963 6.1974 5.891 9.2995 8.739 0.336 0.321 0.672 0.641 1.1648 0.89s0.914 0.341 1.4136 0.397c3.6048 0.629 7.4448 1.15 11.026 0.273 0.0784-0.036 0.1568-0.072 0.2353-0.107 0 0-0.0359-0.079-0.0717-0.157 0.2711-0.029 0.4996 0.056 0.7707 0.027-0.7843 0.358-1.5686 0.716-2.3819 0.803z" fill="#8B8B8B"/>
<path d="m57.315 120.8c-1.2055 0.266-2.4623-0.202-3.6832-0.593-0.1143-0.042-0.1143-0.042-0.2285-0.085-2.7507-1.872-5.5798-3.708-8.5726-5.279 3.0131 0.993 5.9343 2.408 8.7702 4.051 0.6429 0.37 1.2073 0.776 1.9713 0.996 1.7922 0.603 3.7461-0.1 5.55-0.923-0.2779 0.221-0.7484 0.436-0.9053 0.508-0.4706 0.215-0.8627 0.394-1.3333 0.609-0.4774 0.407-0.948 0.622-1.5686 0.716z" fill="#8B8B8B"/>
<path d="m58.918 104.92c-0.2285-0.085-0.5712-0.213-0.7997-0.298-0.0359-0.079-0.1501-0.121-0.1501-0.121-0.6429-0.37-1.2858-0.74-1.8929-1.032-1.2567-0.468-2.2286-0.639-3.4767-0.258-0.6633 0.208-1.7027 0.99-2.3302 1.277-1.8039 0.824-3.8166 0.533-5.7144 0.736-1.7051 0.21-5.1345-2.488-6.9285-3.195-1.794-0.706-2.0821-1.027-3.2985-1.715-1.9491-1.1037-1.9713-0.9957-2.9569-1.4934-1.3284-0.6256-1.9891-0.7126-2.4891-2.2126 0-2 2.5003-4.493 2.5003-6.5-0.8664-1.1428-1.4939-0.5121-2.9501-0.795-0.7639-0.2198-1.5279-0.4397-2.1708-0.8096-1.5587-1.7526-3.0391-3.5411-4.562-5.2153 0.8714 0.4552 1.6575 1.1388 2.3653 1.8583 0.9295 0.9973 1.581 2.2164 2.7526 2.9136 1.3216 0.8183 2.9841 0.7225 4.5545 1.0479 2.4913 0.4737-3.3159 7.4351-1.0444 8.6727 2.2714 1.2376 3.8077 2.4304 6.3551 2.4044 2.4333-0.068 7.736 4.533 10.062 4.229 0.7349-0.052 1.5125-0.217 2.2542-0.461 0.5064-0.137 0.9769-0.351 1.526-0.602 0.6274-0.287 1.1764-0.538 1.8397-0.746 0.3921-0.179 0.8201-0.279 1.2055-0.266 0.4638-0.022 0.9566 0.227 1.3352 0.433 1.3642 0.704 2.7284 1.408 4.0142 2.148z" fill="#8B8B8B"/>
</g>
</g>
<defs>
<linearGradient id="paint0_linear_1924_305417" x1="36.36" x2="35.98" y1="64" y2="136" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<clipPath id="clip0_1924_305417">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

88
application/src/main/data/json/system/scada_symbols/short-top-filter.svg

@ -0,0 +1,88 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="200" height="400" fill="none" version="1.1" viewBox="0 0 200 400">
<tb:metadata xmlns=""><![CDATA[{
"title": "Short top filter",
"description": "Short top filter",
"searchTags": [
"filter"
],
"widgetSizeX": 1,
"widgetSizeY": 2,
"tags": [
{
"tag": "clickArea",
"stateRenderFunction": null,
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'click');"
}
}
}
],
"behavior": [
{
"id": "click",
"name": "{i18n:scada.symbol.on-click}",
"hint": "{i18n:scada.symbol.on-click-hint}",
"group": null,
"type": "widgetAction",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": {
"type": "doNothing",
"openInSeparateDialog": false,
"openInPopover": false
}
}
],
"properties": []
}]]></tb:metadata><mask id="path-9-inside-1_1547_237379" fill="white">
<path d="m29 246c-3.866 0-7-3.134-7-7s3.134-7 7-7h142c3.866 0 7 3.134 7 7s-3.134 7-7 7h-142z"/>
</mask><g tb:tag="clickArea">
<rect x="187.5" y="251.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3"/>
<rect x="1.5" y="251.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171" stroke-width="3"/>
<path d="m172 264h14v72h-14v-72z" fill="#fff"/>
<path d="m172 264h14v72h-14v-72z" fill="url(#paint0_linear_1547_237379)"/>
<path d="m173.5 265.5h11v69h-11v-69z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m14 264h14v72h-14v-72z" fill="#fff"/>
<path d="m14 264h14v72h-14v-72z" fill="url(#paint1_linear_1547_237379)"/>
<path d="m15.5 265.5h11v69h-11v-69z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m171.28 231.19c0.048 0.849 0.365 1.66 0.905 2.316l4.52 5.49s2.92 73.294 0 119.5c-0.795 12.578-2.48 30.38-3.213 37.912-0.2 2.044-1.918 3.588-3.972 3.588h-139.03c-2.0539 0-3.7721-1.544-3.9713-3.588-0.7338-7.532-2.4186-25.334-3.2135-37.912-2.9203-46.206 0-119.5 0-119.5l4.5199-5.49c0.5402-0.656 0.8573-1.467 0.9055-2.316l9.0617-159.79c0.4339-7.6525 3.735-14.861 9.2454-20.188 29.539-28.56 76.401-28.56 105.94 0 5.51 5.3277 8.811 12.536 9.245 20.188l9.062 159.79z" fill="#93979B"/>
<path d="m171.28 231.19c0.048 0.849 0.365 1.66 0.905 2.316l4.52 5.49s2.92 73.294 0 119.5c-0.795 12.578-2.48 30.38-3.213 37.912-0.2 2.044-1.918 3.588-3.972 3.588h-139.03c-2.0539 0-3.7721-1.544-3.9713-3.588-0.7338-7.532-2.4186-25.334-3.2135-37.912-2.9203-46.206 0-119.5 0-119.5l4.5199-5.49c0.5402-0.656 0.8573-1.467 0.9055-2.316l9.0617-159.79c0.4339-7.6525 3.735-14.861 9.2454-20.188 29.539-28.56 76.401-28.56 105.94 0 5.51 5.3277 8.811 12.536 9.245 20.188l9.062 159.79z" fill="url(#paint2_linear_1547_237379)"/>
<path d="m169.78 231.28c0.066 1.167 0.502 2.282 1.245 3.184l4.199 5.1c3e-3 0.096 8e-3 0.205 0.012 0.328 0.021 0.547 0.051 1.356 0.088 2.402 0.074 2.092 0.176 5.133 0.29 8.926 0.228 7.588 0.502 18.186 0.684 30.226 0.365 24.093 0.364 53.919-1.092 76.96-0.793 12.55-2.475 30.328-3.209 37.862-0.124 1.267-1.189 2.233-2.479 2.233h-139.03c-1.2897 0-2.3548-0.966-2.4783-2.233-0.734-7.534-2.4164-25.312-3.2095-37.862-1.4562-23.041-1.4572-52.867-1.0923-76.96 0.1824-12.04 0.456-22.638 0.684-30.226 0.1139-3.793 0.2165-6.834 0.2906-8.926 0.037-1.046 0.0669-1.855 0.0875-2.402 0.0047-0.123 0.0088-0.232 0.0125-0.328l4.1986-5.1c0.7428-0.902 1.1789-2.017 1.2451-3.184l9.0617-159.79c0.4126-7.276 3.5512-14.13 8.7904-19.195 28.957-27.997 74.897-27.997 103.85 0 5.239 5.0656 8.378 11.919 8.79 19.195l9.062 159.79z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m29 246c-3.866 0-7-3.134-7-7s3.134-7 7-7h142c3.866 0 7 3.134 7 7s-3.134 7-7 7h-142z" fill="#D9D9D9"/>
<path d="m29 235h142v-6h-142v6zm142 8h-142v6h142v-6zm4-4c0 2.209-1.791 4-4 4v6c5.523 0 10-4.477 10-10h-6zm-4-4c2.209 0 4 1.791 4 4h6c0-5.523-4.477-10-10-10v6zm-146 4c0-2.209 1.7909-4 4-4v-6c-5.5228 0-10 4.477-10 10h6zm-6 0c0 5.523 4.4772 10 10 10v-6c-2.2091 0-4-1.791-4-4h-6z" fill="#727171" mask="url(#path-9-inside-1_1547_237379)"/>
<path d="m169.4 230.51h-105.65-17.875-16.288l8.8453-156.64c0.0378-0.6706 0.0222-1.351 0.0081-1.9616-0.0035-0.1554-7e-3 -0.3064-0.0095-0.4514-0.0557-3.2971 0.8268-14.337 14.57-22.905l0.1088-0.0678 0.0956-0.0853c4.7023-4.1911 9.0876-7.3558 15.947-10.664 4.4461-2.1446 5.6563-2.4389 8.4382-3.1156 1.4946-0.3635 3.443-0.8374 6.5906-1.7679 3.8442-0.5501 7.6701-0.8862 10.55-1.0849 1.4516-0.1002 2.659-0.1653 3.5022-0.2052 0.4215-0.02 0.7518-0.0337 0.9759-0.0424 0.1121-0.0043 0.1975-0.0074 0.2545-0.0094l0.064-0.0022 0.0155-5e-4 0.0036-1e-4h7e-4l0.0029-1e-4h1e-4 4e-4l0.0019-1e-4 0.0124-3e-4 0.056-0.0015c0.0509-0.0012 0.1288-0.0028 0.2323-0.0043 0.2064-0.0029 0.5154-0.0051 0.9154-2e-3 0.798 0.0062 1.956 0.0334 3.38 0.1181 2.851 0.1697 6.749 0.5689 10.946 1.4842 4.245 0.9257 6.41 1.6185 8.294 2.4424 0.955 0.4177 1.856 0.8769 2.951 1.4448 0.12 0.062 0.242 0.1252 0.366 0.1896 1.007 0.5232 2.173 1.1286 3.639 1.8416 5.925 2.8835 9.28 5.333 14.164 8.8991 0.361 0.2634 0.73 0.5329 1.109 0.8091l0.101 0.0737 0.112 0.0559c13.031 6.5095 13.802 19.448 13.765 22.889l-1e-3 0.069c-6e-3 0.5538-0.013 1.163 0.026 1.7851l9.784 156.91z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
</g><defs>
<linearGradient id="paint0_linear_1547_237379" x1="175.64" x2="173.3" y1="264" y2="335.93" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1547_237379" x1="17.64" x2="15.305" y1="264" y2="335.93" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint2_linear_1547_237379" x1="10.811" x2="189.2" y1="-103.51" y2="-102.96" gradientUnits="userSpaceOnUse">
<stop stop-color="#020202" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".23574"/>
<stop stop-color="#fff" stop-opacity=".12" offset=".39937"/>
<stop stop-color="#fff" stop-opacity=".3" offset=".49829"/>
<stop stop-color="#fff" stop-opacity=".12" offset=".59721"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".76303"/>
<stop stop-color="#020202" stop-opacity=".35" offset="1"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 7.0 KiB

428
application/src/main/data/json/system/scada_symbols/small-left-motor-pump.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 29 KiB

428
application/src/main/data/json/system/scada_symbols/small-right-motor-pump.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 26 KiB

965
application/src/main/data/json/system/scada_symbols/top-flow-meter.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 72 KiB

558
application/src/main/data/json/system/scada_symbols/top-right-elbow-pipe.svg

@ -0,0 +1,558 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" fill="none" version="1.1" viewBox="0 0 200 200"><tb:metadata xmlns=""><![CDATA[{
"title": "Top right elbow pipe",
"description": "Top right elbow pipe with fluid and leak visualizations.",
"searchTags": [
"pipe",
"elbow"
],
"widgetSizeX": 1,
"widgetSizeY": 1,
"stateRenderFunction": "var centerLiquidPattern = prepareLiquidPattern('center-liquid', 'center-fluid-background');\nvar horizontalLiquidPattern = prepareLiquidPattern('horizontal-liquid', 'horizontal-fluid');\n\ncenterLiquidPattern.attr({'xlink:href': '#'+horizontalLiquidPattern.id()});\n\nvar verticalLiquidPattern = prepareLiquidPattern('vertical-liquid', 'vertical-fluid');\n\nvar fluid = ctx.values.fluid && !ctx.values.leak;\nvar flow = ctx.values.flow;\nvar flowDirection = ctx.values.flowDirection;\nvar flowAnimationSpeed = ctx.values.flowAnimationSpeed;\n \nif (horizontalLiquidPattern) {\n updateLiquidPatternAnimation(horizontalLiquidPattern, fluid, \n flow, flowDirection, flowAnimationSpeed, false);\n}\n\nif (verticalLiquidPattern) {\n updateLiquidPatternAnimation(verticalLiquidPattern, fluid, \n flow, flowDirection, flowAnimationSpeed, false);\n}\n\nif (centerLiquidPattern) {\n updateLiquidPatternAnimation(centerLiquidPattern, fluid, \n flow, flowDirection, flowAnimationSpeed, true);\n}\n\nfunction prepareLiquidPattern(patternId, fluidElementTag) {\n var liquidPattern = ctx.svg.defs().findOne('pattern#'+patternId);\n var fluidElements = ctx.tags[fluidElementTag];\n\n if (liquidPattern) {\n liquidPattern.id(ctx.api.generateElementId());\n for (var i=0;i<fluidElements.length;i++) {\n fluidElements[i].fill(liquidPattern);\n }\n } else {\n liquidPattern = fluidElements[0].reference('fill');\n }\n return liquidPattern;\n}\n\nfunction updateLiquidPatternAnimation(liquidPattern, fluid, flow, flowDirection, flowAnimationSpeed, center) {\n var elementFluid = liquidPattern.remember('fluid');\n var elementFlow = null;\n var elementFlowDirection = null;\n \n if (fluid !== elementFluid) {\n liquidPattern.remember('fluid', fluid);\n elementFlow = null;\n elementFlowDirection = null;\n } else {\n elementFlow = liquidPattern.remember('flow');\n elementFlowDirection = liquidPattern.remember('flowDirection');\n }\n \n if (fluid) {\n if (flow !== elementFlow) {\n liquidPattern.remember('flow', flow);\n if (flow) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection, center);\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n } else if (flow && elementFlowDirection !== flowDirection) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection, center);\n }\n if (flow && liquidPattern) {\n liquidPattern.timeline().speed(flowAnimationSpeed);\n }\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n}\n\nfunction animateFlow(liquidPattern, forwardElseReverse, center) {\n ctx.api.resetAnimation(liquidPattern);\n var deltaX = forwardElseReverse ? 172 : -172;\n if (center) {\n var delta = deltaX * 1.17 * Math.cos(45*Math.PI/180);\n liquidPattern.animate(1000).ease('-').relative(delta, -delta).loop();\n } else {\n liquidPattern.animate(1000).ease('-').relative(deltaX, 0).loop();\n }\n}\n\n",
"tags": [
{
"tag": "center-fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}\n",
"actions": null
},
{
"tag": "fluid-background",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.fluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "horizontal-fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}\n",
"actions": null
},
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
},
{
"tag": "vertical-fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}\n",
"actions": null
}
],
"behavior": [
{
"id": "fluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": null,
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "fluidColor",
"name": "{i18n:scada.symbol.fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata>
<g transform="rotate(180,100,100)" clip-path="url(#clip0_1245_66459)">
<rect x="14" y="64" width="50" height="72" fill="#fff" tb:tag="pipe-background"/>
<rect x="14" y="64" width="50" height="72" fill="url(#paint0_linear_1245_66459)" style="fill:url(#paint0_linear_1245_66459)"/>
<rect x="15.5" y="65.5" width="47" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m64 186v-50h72v50z" fill="#fff" tb:tag="pipe-background"/>
<path d="m64 186v-50h72v50z" fill="url(#paint1_linear_1245_66459)" style="fill:url(#paint1_linear_1245_66459)"/>
<path d="m65.5 184.5v-47h69v47z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect x="1.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<rect transform="rotate(-90,51.5,198.5)" x="51.5" y="198.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<path d="m64 64s30.518 1.7177 50.4 21.6c19.882 19.882 21.6 50.4 21.6 50.4h-72z" fill="#fff" tb:tag="pipe-background"/>
<path d="m64 64s30.518 1.7177 50.4 21.6c19.882 19.882 21.6 50.4 21.6 50.4h-72z" fill="url(#paint2_linear_1245_66459)" style="fill:url(#paint2_linear_1245_66459)"/>
<path d="m65.5 134.5v-68.865c0.8334 0.0861 1.9717 0.2211 3.3584 0.4273 3.1196 0.464 7.4889 1.2873 12.47 2.7228 9.9828 2.8767 22.316 8.1809 32.01 17.875 9.695 9.6942 14.999 22.027 17.875 32.01 1.436 4.982 2.259 9.351 2.723 12.471 0.206 1.386 0.341 2.525 0.428 3.358z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
</g><defs>
<pattern id="horizontal-liquid" width="172" height="72" patternTransform="translate(14,-8)" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<linearGradient id="paint28_linear_1182_32781-5" x1="19.316" x2="21" y1="8.2632" y2="23" gradientTransform="translate(-36,6)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint29_linear_1182_32781-1" x1="148.32" x2="150" y1="8.2632" y2="23" gradientTransform="translate(-165,135)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint30_linear_1182_32781-7" x1="111.32" x2="113" y1="9.2632" y2="24" gradientTransform="translate(-129,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint31_linear_1182_32781-4" x1="32.316" x2="34" y1="51.263" y2="66" gradientTransform="translate(-92,-24)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint32_linear_1182_32781-3" x1="153.32" x2="155" y1="51.263" y2="66" gradientTransform="translate(-213,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint33_linear_1182_32781-1" x1="31.947" x2="33" y1="21.789" y2="31" gradientTransform="translate(-59,7)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint34_linear_1182_32781-4" x1="160.95" x2="162" y1="21.789" y2="31" gradientTransform="translate(-188,136)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint35_linear_1182_32781-6" x1="3.9474" x2="5" y1="32.79" y2="42" gradientTransform="translate(-42,-32)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint36_linear_1182_32781-9" x1="93.158" x2="94" y1="4.6316" y2="12" gradientTransform="translate(-102,86)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint37_linear_1182_32781-4" x1="71.158" x2="72" y1="56.632" y2="64" gradientTransform="translate(-132,12)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint38_linear_1182_32781-2" x1="110.95" x2="112" y1="32.79" y2="42" gradientTransform="translate(-149,75)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint39_linear_1182_32781-2" x1="57.947" x2="59" y1="34.79" y2="44" gradientTransform="translate(-98,20)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint40_linear_1182_32781-6" x1="113.95" x2="115" y1="57.79" y2="67" gradientTransform="translate(-177,53)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint41_linear_1182_32781-4" x1="137.95" x2="139" y1="37.79" y2="47" gradientTransform="translate(-181,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint42_linear_1182_32781-1" x1="74.947" x2="76" y1="16.789" y2="26" gradientTransform="translate(-97,55)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint43_linear_1182_32781-2" x1="125.97" x2="126.5" y1="48.395" y2="53" gradientTransform="translate(-177,76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint44_linear_1182_32781-8" x1="168.97" x2="169.5" y1="44.395" y2="49" gradientTransform="translate(-216,123)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint45_linear_1182_32781-8" x1="56.974" x2="57.5" y1="7.3947" y2="12" gradientTransform="translate(-67,48)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint46_linear_1182_32781-9" x1="95.974" x2="96.5" y1="33.395" y2="38" gradientTransform="translate(-132,61)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint47_linear_1182_32781-2" x1="90.974" x2="91.5" y1="21.395" y2="26" gradientTransform="translate(-115,68)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint48_linear_1182_32781-88" x1="21.974" x2="22.5" y1="38.395" y2="43" gradientTransform="translate(-63,-18)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint49_linear_1182_32781-8" x1="123.97" x2="124.5" y1="21.395" y2="26" gradientTransform="translate(-148,101)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint50_linear_1182_32781-6" x1="85.974" x2="86.5" y1="45.395" y2="50" gradientTransform="translate(-134,39)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint51_linear_1182_32781-8" x1="50.974" x2="51.5" y1="19.395" y2="24" gradientTransform="translate(-73,30)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint52_linear_1182_32781-3" x1="47.974" x2="48.5" y1="49.395" y2="54" gradientTransform="translate(-100,-3)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint53_linear_1182_32781-83" x1="13.158" x2="14" y1="60.632" y2="68" gradientTransform="translate(-78,-50)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint54_linear_1182_32781-33" x1="134.16" x2="135" y1="60.632" y2="68" gradientTransform="translate(-199,71)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint55_linear_1182_32781-8" x1="93.5" x2="95.5" y1="50.5" y2="68" gradientTransform="translate(-154,37)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint84_linear_1182_32781-8" x1="248" x2="248" y1="1.8513e-7" y2="72" gradientTransform="scale(.33333 1)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" offset=".10895"/>
<stop stop-color="#fff" stop-opacity="0" offset=".11331"/>
<stop stop-color="#fff" stop-opacity="0" offset=".88736"/>
<stop stop-color="#727171" offset=".89138"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<pattern id="vertical-liquid" width="172" height="72" patternTransform="translate(14,8)" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<clipPath id="clip0_1245_66459">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<linearGradient id="paint0_linear_1245_66459" x1="27" x2="26.346" y1="64" y2="136" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1245_66459" x1="64" x2="136" y1="173" y2="173.65" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint2_linear_1245_66459" x1="114" x2="64.321" y1="89" y2="136.34" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".35637"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".4903"/>
<stop stop-color="#fff" stop-opacity="0" offset=".56651"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".63374"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".75781"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<clipPath id="clipPath4310">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4304">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4298">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4292">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4286">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4280">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4274">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4268">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4262">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4256">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4250">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4244">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4238">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4232">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4226">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4220">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4214">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath4208">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<pattern id="center-liquid" patternTransform="scale(1.17) rotate(-45)" patternUnits="userSpaceOnUse" xlink:href="#horizontal-liquid"/>
</defs><rect x="136" y="64" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><rect transform="rotate(90)" x="14" y="-136" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><rect x="136" y="64" width="50" height="72" fill="url(#horizontal-liquid)" stroke-width="0" style="display: none;" tb:tag="horizontal-fluid"/><rect transform="rotate(90)" x="14" y="-136" width="50" height="72" fill="url(#vertical-liquid)" stroke-width="0" style="display: none;" tb:tag="vertical-fluid"/><path d="m136 63.85 0.1 72.05c-0.87135-0.09-2.1615-0.23117-3.6113-0.44675-3.2616-0.48513-7.8299-1.3459-13.038-2.8468-10.437-3.0077-23.332-8.5533-33.468-18.689-10.136-10.136-15.682-23.03-18.689-33.467-1.5014-5.2088-2.3619-9.7767-2.847-13.039-0.21538-1.4491-0.35652-2.6909-0.44748-3.5618z" fill="#1ec1f4" stroke="#000" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><g transform="matrix(0 .99929 -.99919 0 199.9 .095299)" style="display: none;" tb:tag="center-fluid">
<path d="m63.956 63.95 72.051-0.10008c-0.0901 0.87205-0.23133 2.1632-0.44707 3.6142-0.48547 3.2643-1.3469 7.8362-2.8488 13.048-3.0098 10.446-8.5594 23.351-18.702 33.495-10.143 10.145-23.046 15.695-33.491 18.704-5.2125 1.5026-9.7836 2.3638-13.048 2.8493-1.4501 0.21555-2.7428 0.3568-3.6144 0.44784z" fill="url(#center-liquid)" stroke="#000" stroke-width="0" tb:tag="center-fluid-background" style=""/>
<path d="m132.05 63.75s-0.0216 31.824-17.622 50.677c-17.814 17.618-50.678 17.628-50.678 17.628" fill="none" stroke="#727171" stroke-width="7.9" style=""/>
<path d="m63.95 63.954v-0.17285l7.9056-0.02731v8.1066h-8.2058v-7.9066z" style="fill: rgb(114, 113, 113); stroke-width: 1.007;"/>
</g><g transform="rotate(180 100 100)" style="display: none;" tb:tag="leak">
<path d="m62.784 80.767c0.417 0.1391 0.9517 0.2463 1.3259 0.4603 1.326 0.4603 2.5556 1.2628 3.3039 2.386 0.2779 0.5563 0.5129 1.1873 0.6731 1.7756 0.4915 1.5723 1.0257 3.0697 1.5599 4.5672 0.545 1.3049 1.0792 2.8023 0.544 4.0855-0.1925-0.0107-0.3101 0.0213-0.5026 0.0105 0.3307 2.3744 2.2423 0.7354 6.5024 7.0127 2.2452 8.828 4.8752 21.579 4.8212 23.236-0.0323 0.578 0.0531 1.123 0.0636 1.626-0.011 0.887-0.0969 1.732-0.3752 2.566-0.1499 0.61-0.4924 1.209-0.7172 1.775-0.6315 1.626-1.1134 3.337-1.253 5.144 0.3745-0.481 0.749-0.962 1.1234-1.443 0 0 0.353-0.096 0.2353-0.064-0.1069-0.161 0.0216-0.385 0.182-0.492 0.3527 0.599 0.7055 1.198 0.9833 1.754 1.6139 2.91 3.185 5.894 4.478 9.017-0.7155-3.091-1.8588-6.128-3.2374-9.102-0.3099-0.674-0.6626-1.273-0.8121-2.054-0.4378-1.839 0.4398-3.721 1.4243-5.443l0.0428-0.075c0.0856-0.149 0.214-0.374 0.4065-0.363 0.2354-0.064 0.4919 0.182 0.6737 0.385 0.8659 1.091 1.7746 2.108 2.6833 3.124 1.1653 1.262 2.459 2.3 3.5814 3.637 1.0156 1.177 1.8708 2.461 2.6511 3.702 0.3527 0.599 0.7482 1.123 0.8656 1.786 0.1923 0.706 0.192 1.401 0.0742 2.128-0.1287 0.92-0.2146 1.765-0.4181 2.642-1.0925 5.036 4.1863 14.098 2.2917 18.974 1.1129-1.946 2.1938-4.009 3.3067-5.955 0.4161 2.919 1.6132 5.69 2.7672 8.535 0.342 0.791 0.684 1.583 0.865 2.481 0.192 0.706 0.224 1.519 0.224 2.214 0 1.391-0.119 2.813-0.878 3.968 0.577-0.663 1.006-1.412 1.316-2.128 0.182 0.203 0.438 0.449 0.62 0.652 1.604 1.712 3.25 3.349 4.779 5.018-0.374-0.909-0.984-1.754-1.636-2.525-0.908-1.016-2.063-1.776-2.651-3.006-0.695-1.39-0.448-3.037-0.629-4.631-0.245-2.524-1.464-4.909-2.49-7.284-1.026-2.374-2.4215-4.17-3.795-8.188-0.9898-2.895-2.4972-7.611-1.9831-9.9 0.1179-0.727 0.3534-1.486 0.6638-2.203 0.182-0.492 0.4389-0.941 0.7385-1.465 0.3424-0.599 0.642-1.123 0.9096-1.764 0.2141-0.374 0.3532-0.791 0.3748-1.176 0.0643-0.46-0.1387-0.974-0.3097-1.369-0.577-1.423-1.1541-2.846-1.7311-4.268 0.0641 0.235 0.1602 0.588 0.2243 0.823 0.5127 1.883 0.9506 3.722 0.6933 5.562-0.0216 0.385-0.1607 0.802-0.4068 1.058-0.0428 0.075-0.0856 0.15-0.1605 0.107-0.3637 0.289-1.0909 0.171-1.1442-0.257-0.5668-0.224-1.112-0.834-1.4754-1.241-2.6726-3.316-5.3023-6.707-7.8572-10.055-0.2886-0.364-0.5773-0.728-0.7803-1.241-0.203-0.514-0.2563-0.942-0.2669-1.444-0.2982-3.647-2.4962-15.905-3.458-18.422-1.5388-4.028-0.5464-4.267-2.5593-5.9434 0.0535-0.2674-6.9427-5.6276-6.8891-5.8949 0.3322-1.7966 1.584-3.4646 2.7823-4.8651 1.2483-1.1574 5.2035 1.7887 5.8127 1.8117 0.6917 0.0262 13.721 15.05 14.606 16.356 0.3527 0.599 0.2189 1.786 0.4355 2.02 0.0765 0.083 1.5882 0.445 0.3927-0.21-0.023 0.609 1.7337 6.612 1.497 10.847-0.0216 0.385-0.0859 0.845-0.2251 1.262-0.0535 0.268-0.1819 0.492-0.3852 0.674-0.0428 0.075-0.1605 0.107-0.2781 0.139-0.1177 0.032-0.1497-0.086-0.2246-0.129-2.6943-2.236-5.2814-5.006-8.8318-5.746 0.1069 0.161 0.1817 0.204 0.2886 0.364 0.0749 0.043 0.1069 0.161 0.2566 0.246 1.3898 1.391 3.261 2.461 4.3728 3.991 0.5024 0.684 0.962 1.444 1.6677 1.947 0.9302 0.631 2.3097 0.824 3.0367 1.637 0.3635 0.407 0.6414 0.963 0.7695 1.433 0.3525 1.295 0.4269 2.728 0.897 3.99 0.2351 0.631 0.6627 1.273 0.8974 1.904 0.032 0.118 0.107 0.16 0.139 0.278 0.577 1.423 3.497 6.167 3.411 7.707 0.075-1.348-2.706-5.814-2.438-7.151 1.465 1.434 2.855 2.825 4.234 4.408-0.919-1.519-1.999-2.931-3.239-4.236-0.62-0.653-1.24-1.305-1.7-2.065-0.8443-1.476-0.6511-3.551 0.825-4.395 0.161-0.107 0.321-0.214 0.513-0.203 0.985-0.331 2.097-0.192 3.134-0.095 3.027 0.439 5.893 0.986 8.908 1.618 2.214 0.471 4.385 1.017 6.288 2.205 0.15 0.086 0.257 0.246 0.171 0.396 0.599-0.353 1.241-0.085 1.797 0.332 0.598 0.342 1.111 0.835 1.667 1.252 0.482 0.374 0.963 0.749 1.444 1.123 2.256 1.787 4.469 3.649 6.479 5.692-0.78-1.241-1.796-2.418-3.058-3.338-0.887-0.706-1.86-1.262-2.63-2.001-0.844-0.781-1.368-1.775-2.213-2.556-0.406-0.332-0.887-0.707-1.251-1.113 1.123-0.053 2.203-0.031 3.326-0.084-0.802-0.161-1.604-0.322-2.406-0.483-0.994-0.171-1.946-0.417-2.898-0.664-2.352-0.749-4.544-2.301-6.993-2.708-0.193-0.011-0.385-0.021-0.578-0.032 0.107 0.16 0.257 0.246 0.364 0.406-0.118 0.033-0.268-0.053-0.385-0.021-2.161-0.044-4.374-0.515-6.427-1.093-1.829-0.45-3.807-0.985-5.005-2.365-0.363-0.407-0.684-0.888-1.047-1.295-0.364-0.406-1.0054-0.674-1.5508-0.589 0.2575-2.534 1.0086-5.312-0.4558-7.441-1.1438-1.647-0.6523-3.686-2.1639-4.048 0.5862 0.632 0.9484-0.88 0.3852-2.121-0.5632-1.242-11.812-19.078-21.406-19.814-1.5082 0.7267-2.7386 2.0097-3.3594 3.4425-0.0428 0.0749-0.0428 0.0749-0.0856 0.1497-0.951-2.3317-1.9341-4.7812-3.2381-7.0168-0.4275-0.6418-0.8123-1.3585-1.4431-1.8186-1.2832-0.5352-2.898-0.6641-4.438-0.7501z" clip-path="url(#clipPath4310)" fill="#5c5a5a" style=""/>
<path d="m96.836 106.97c-0.1607 0.802-0.3972 1.217-0.1729 2.041 0.4486 1.647 1.0572 2.066 1.7411 3.649 0.6732 1.776 0.6698 2.683 0.7546 4.619 0.0211 1.005-0.0327 1.968-0.1614 2.887 0.7808-0.149 1.8421 1.436 2.3871 2.046 0.545 0.609 1.005 1.369 1.722 1.679 0.791 0.353 1.646 0.247 2.491 0.333 0.92 0.128 1.786 0.524 2.695 0.845 1.861 0.568 3.797 0.483 5.7 0.28-0.075-0.042-0.075-0.042-0.149-0.085-2.161-0.044-4.374-0.515-6.428-1.093-1.828-0.45-3.807-0.985-5.004-2.365-0.363-0.407-0.684-0.888-1.048-1.295-0.363-0.406-1.328-1.638-1.8737-1.553 0.2575-2.534 0.8497-4.297-0.615-6.426-1.1437-1.647-0.9919-2.182-1.5794-4.108-0.2138-0.321-0.374-0.909-0.4594-1.454z" clip-path="url(#clipPath4304)" fill="#8b8b8b" style=""/>
<path d="m87.799 115.57c0.1069 0.161 0.1818 0.204 0.2887 0.364 0.0748 0.043 0.1069 0.161 0.2566 0.246l0.0748 0.043c0.5667 0.225 1.1335 0.449 1.6895 0.867 0.4491 0.257 0.9302 0.631 1.3365 0.963 1.7748 1.412 3.2928 3.273 5.3993 4.279 0.2997-0.523 0.5993-1.047 0.7064-1.582-0.0535 0.267-0.182 0.492-0.3852 0.674-0.0428 0.074-0.1605 0.106-0.2781 0.138-0.1177 0.033-0.1497-0.085-0.2246-0.128-2.6835-2.429-5.3135-5.125-8.8639-5.864z" clip-path="url(#clipPath4298)" fill="#8b8b8b" style=""/>
<path d="m100.11 126.68c-0.3425 0.599-0.5032 1.401-0.4286 2.139s0.4166 1.529 0.5656 2.31c0.032 0.118 0.107 0.16 0.139 0.278 0.577 1.423 3.181 5.603 3.095 7.143 0.076-1.348-2.389-5.25-2.122-6.587 1.465 1.434 2.886 3.017 4.265 4.6-0.92-1.519-2.03-3.123-3.27-4.428-0.62-0.653-1.24-1.305-1.7-2.065-0.8442-1.476-0.651-3.551 0.825-4.395 0.161-0.107 0.321-0.214 0.514-0.203-0.428 0.053-0.781 0.149-1.102 0.363-0.278 0.139-0.567 0.471-0.781 0.845z" clip-path="url(#clipPath4292)" fill="#8b8b8b" style=""/>
<path d="m113.61 124.66c0.117 0.663 0.78 1.241 1.272 1.423 0.909 0.321 1.861 0.567 2.887 0.856 0.834 0.279 1.711 0.482 2.503 0.836 1.956 0.92 3.571 2.439 4.907 4.097 0 0 0.075 0.043 0.032 0.118 2.256 1.787 4.469 3.648 6.479 5.692-0.78-1.241-1.796-2.418-3.057-3.338-0.888-0.706-1.861-1.263-2.631-2.001-0.844-0.781-1.368-1.776-2.213-2.557-0.406-0.331-0.887-0.706-1.25-1.112 1.123-0.053 2.203-0.032 3.326-0.085-0.802-0.16-1.604-0.321-2.407-0.482-0.994-0.171-1.946-0.418-2.898-0.664-2.341-0.942-4.501-2.376-6.95-2.783z" clip-path="url(#clipPath4286)" fill="#8b8b8b" style=""/>
<path d="m75.688 97.084c0.3847 0.2128 0.8909 0.4157 1.2199 0.6943 0.7593 0.3043 1.3971 0.6186 1.9992 1.2417 0.7338 0.7346 1.3003 1.6664 1.6795 2.5524 0.6826 1.596 0.9449 3.287 1.2072 4.978 0.1261 0.785 0.3738 1.56 0.9659 2.062-0.0101-0.122-0.0101-0.122-0.0201-0.243-0.0558 0.065-0.0558 0.065-0.1115 0.131-0.51-2.466-1.0299-5.054-1.9045-7.49-0.3033-0.709-0.551-1.4833-1.0873-2.0507-0.8855-1.0892-2.4498-1.5103-3.9483-1.8757z" clip-path="url(#clipPath4280)" fill="#8b8b8b" style=""/>
<path d="m85.474 114.68c-0.1927 0.685-0.1181 1.423-0.3108 2.107-0.1179 0.727-0.3855 1.369-0.5354 1.979-0.1823 1.187 0.0633 2.32-0.0761 3.433-0.0751 0.652-0.193 1.379-0.1932 2.074 0.0851 1.241 0.951 2.332 1.71 3.263 2.8543 3.519 5.6337 6.996 8.488 10.516 0.4704 0.567 1.1653 1.262 1.914 0.995 0.2781-0.139 0.5242-0.396 0.6526-0.62-0.0428 0.075-0.0856 0.149-0.1605 0.107-0.3637 0.288-1.0909 0.17-1.1442-0.257-0.5667-0.225-1.112-0.835-1.4754-1.242-2.6726-3.316-5.3023-6.707-7.8572-10.055-0.2886-0.364-0.5773-0.728-0.7803-1.241-0.203-0.514-0.2563-0.941-0.2668-1.444-0.2982-3.647-0.468-7.519 0.731-11.005 0.0428-0.074 0.0856-0.149 0.1284-0.224 0 0 0.0748 0.043 0.1497 0.085 0.0535-0.267-0.0105-0.502 0.043-0.77-0.428 0.749-0.8561 1.497-1.0168 2.299z" clip-path="url(#clipPath4274)" fill="#8b8b8b" style=""/>
<path d="m80.849 131.36c-0.3747 1.176-0.0222 2.47 0.2554 3.722 0.0321 0.117 0.0321 0.117 0.0641 0.235 1.6139 2.91 3.185 5.894 4.478 9.017-0.7155-3.091-1.8588-6.128-3.2374-9.102-0.3099-0.674-0.6626-1.273-0.8121-2.054-0.4378-1.839 0.4398-3.721 1.4243-5.443-0.2461 0.257-0.5029 0.706-0.5885 0.856-0.2568 0.449-0.4708 0.823-0.7277 1.272-0.4493 0.438-0.7061 0.887-0.8561 1.497z" clip-path="url(#clipPath4268)" fill="#8b8b8b" style=""/>
<path d="m96.816 131.21c0.064 0.235 0.1602 0.588 0.2243 0.824 0.0748 0.042 0.1069 0.16 0.1069 0.16 0.3099 0.674 0.6198 1.348 0.8548 1.979 0.3525 1.294 0.4336 2.277-0.0588 3.486-0.2676 0.641-1.1412 1.605-1.4836 2.204-0.9845 1.722-0.8778 3.752-1.2528 5.624-0.3642 1.679 2.0111 5.339 2.5513 7.19s0.8333 2.167 1.4085 3.441c0.9213 2.041 0.8121 2.054 1.2183 3.081 0.502 1.379 0.576 2.812 1.079 4.192 0.374 0.909 0.983 1.754 1.282 2.621 0.577 1.422 0.448 3.037 0.597 4.513 0.15 0.781 0.299 1.562 0.609 2.236 1.604 1.711 3.25 3.348 4.779 5.017-0.374-0.909-0.983-1.754-1.635-2.524-0.909-1.017-2.064-1.776-2.652-3.007-0.694-1.39-0.448-3.037-0.629-4.631-0.245-2.524-1.464-4.909-2.489-7.284-1.026-2.374-2.0749-4.012-1.8174-6.547 0.2896-2.417-3.8098-8.116-3.2956-10.405 0.1179-0.727 0.3534-1.486 0.6638-2.202 0.182-0.492 0.4388-0.941 0.7384-1.465 0.3425-0.599 0.6421-1.123 0.9097-1.765 0.214-0.374 0.3532-0.791 0.3747-1.176 0.0643-0.46-0.1387-0.973-0.3097-1.369-0.577-1.423-1.154-2.845-1.7738-4.193z" clip-path="url(#clipPath4262)" fill="#8b8b8b" style=""/>
<path d="m16.279 134.17c0.4279-0.1 0.9702-0.159 1.3623-0.338 1.3624-0.337 2.6599-1.025 3.5072-2.075 0.3273-0.529 0.6188-1.136 0.8318-1.707 0.6324-1.521 1.3006-2.964 1.9688-4.407 0.6613-1.25 1.3295-2.692 0.9133-4.019-0.1927-7e-3 -0.307-0.049-0.4996-0.056 0.5452-2.334 0.3266-4.889-0.3627-7.228-0.4453-1.598-1.2759-3.209-1.179-4.865 0.0204-0.578 0.155-1.113 0.2112-1.613 0.0697-0.885 0.0611-1.734-0.1403-2.59-0.0938-0.62-0.3804-1.248-0.5527-1.833-0.4811-1.676-0.8054-3.424-0.7801-5.2361 0.3292 0.5132 0.6584 1.0264 0.9875 1.5396 0 0 0.3428 0.1278 0.2285 0.0852-0.121 0.1501-0.0135 0.3853 0.1365 0.5063 0.4058-0.5644 0.8115-1.1288 1.1388-1.6575 1.8718-2.7507 3.7078-5.5798 5.2795-8.5725-0.9937 3.0131-2.4085 5.9342-4.0518 8.7701-0.3699 0.6429-0.7756 1.2079-0.9955 1.9709-0.6033 1.793 0.0995 3.747 0.9234 5.551l0.0358 0.078c0.0717 0.157 0.1791 0.392 0.3718 0.399 0.2285 0.085 0.5064-0.137 0.7059-0.322 0.9615-1.008 1.9589-1.938 2.9562-2.867 1.2753-1.151 2.658-2.067 3.8975-3.297 1.1184-1.0795 2.0867-2.28 2.9766-3.4448 0.4057-0.5645 0.8473-1.0505 1.0245-1.7002 0.2557-0.6855 0.3187-1.3778 0.2674-2.1127-0.0445-0.9276-0.0532-1.7767-0.1761-2.6685-0.63-5.1153 5.4511-13.66 4.0078-18.688-0.2735-1.2766 0-2.776 1.7265-1.2764 1.5 2.0004 2 1.9997 5 1.9997 0.4125-0.7572 3.5 2 5 2 1 0.5 0.9415-0.3767 1.0045-1.069 0.126-1.3846 0.1377-2.8118-0.5139-4.0308 0.5151 0.7126 0.8733 1.4969 1.1172 2.2386 0.1995-0.1859 0.4774-0.4076 0.6769-0.5935 1.7526-1.5587 3.5411-3.0391 5.2153-4.562-0.4551 0.8714-1.1388 1.6575-1.8582 2.3653-0.9974 0.9294-2.2165 1.581-2.9137 2.7525-0.8182 1.3217-0.7225 2.9841-1.0479 4.5546-0.4737 2.4913-6.8401-3.4917-8.0776-1.2202-1.2376 2.2714-2.7911 3.9327-4.5243 7.8089-1.249 2.7934-3.1791 7.3531-2.8752 9.6789 0.0513 0.7349 0.2168 1.5124 0.4607 2.2541 0.1365 0.5064 0.3514 0.977 0.6022 1.526 0.2865 0.6275 0.5373 1.1765 0.7454 1.8397 0.1791 0.3922 0.2798 0.8202 0.2662 1.2055 0.0223 0.4638-0.2266 0.957-0.4329 1.335-0.704 1.364-1.408 2.729-2.112 4.093 0.0852-0.229 0.213-0.571 0.2983-0.8 0.6817-1.828 1.2851-3.62 1.1961-5.4753 0.0136-0.3853-0.0871-0.8133-0.3088-1.0912-0.0358-0.0784-0.0716-0.1569-0.1501-0.121-0.3359-0.3206-1.0708-0.2693-1.1628 0.1519-0.5849 0.1723-1.1833 0.73-1.5822 1.1018-2.9631 3.0598-5.8903 6.1978-8.7391 9.2998-0.3205 0.336-0.641 0.672-0.8899 1.164-0.2489 0.493-0.3409 0.914-0.3971 1.414-0.6286 3.605-1.1498 7.445-0.2728 11.026 0.0358 0.078 0.0717 0.156 0.1075 0.235l0.1568-0.072c0.0291 0.271-0.0561 0.5-0.0271 0.771 0.1674 1.819 1.2624 3.594 2.3283 5.098 1.1379 1.266 1.7677 1.788 2.3766 1.82 0.6911 0.037 3.0405 0.166 4.04-1.054 0.4057-0.564 0.3805-1.759 0.6175-1.972 0.0837-0.076 1.622-0.299 0.3719 0.245 0.0324-0.609 2.3279-6.428 2.4772-10.667 0.0136-0.385-0.0086-0.849-0.1093-1.277-0.029-0.271-0.1365-0.506-0.3224-0.706-0.0358-0.078-0.15-0.121-0.2643-0.163-0.1142-0.043-0.1569 0.071-0.2353 0.107-2.8865 1.982-5.7149 4.506-9.3178 4.919 0.1211-0.15 0.1995-0.186 0.3205-0.336 0.0785-0.036 0.1211-0.15 0.2779-0.222 1.5106-1.258 3.4713-2.154 4.7176-3.576 0.5626-0.636 1.0893-1.351 1.8378-1.787 0.9838-0.544 2.3752-0.611 3.1731-1.355 0.3989-0.371 0.7262-0.9 0.8967-1.357 0.4687-1.257 0.6731-2.677 1.256-3.891 0.2915-0.607 0.7757-1.208 1.0672-1.815 0.0426-0.114 0.121-0.15 0.1636-0.264 0.704-1.364 4.0433-5.8234 4.0976-7.3648-0.0475 1.3488-3.2231 5.5438-3.078 6.8988 1.589-1.294 3.0996-2.553 4.6169-4.0042-1.0535 1.4292-2.2572 2.7372-3.6108 3.9242-0.6769 0.593-1.3537 1.187-1.8805 1.901-0.9751 1.394-0.9714 3.477 0.4218 4.452 0.1501 0.122 0.3002 0.243 0.4929 0.249 0.9498 0.42 2.0701 0.382 3.1119 0.38 3.0539-0.162 5.9577-0.446 9.0184-0.801 2.2473-0.268 4.4588-0.615 6.4622-1.624 0.1569-0.072 0.2779-0.222 0.2063-0.379 0.5644 0.406 1.2277 0.198 1.8193-0.167 0.6275-0.287 1.1833-0.73 1.7749-1.095 0.5132-0.329 1.0264-0.659 1.5396-0.988 2.4091-1.574 4.7824-3.227 6.9698-5.079-0.8899 1.165-2.0083 2.244-3.3484 3.046-0.948 0.623-1.9676 1.088-2.8013 1.753-0.9121 0.701-1.5241 1.644-2.4363 2.345-0.4347 0.294-0.9479 0.623-1.3469 0.995 1.1135 0.155 2.1912 0.231 3.3047 0.386-0.8134 0.087-1.6267 0.174-2.4401 0.261-1.006 0.081-1.9762 0.24-2.9464 0.398-2.411 0.533-4.7349 1.878-7.2107 2.061-0.1927-7e-3 -0.3853-0.013-0.578-0.02 0.121-0.15 0.2779-0.222 0.3989-0.372-0.1142-0.043-0.2711 0.029-0.3854-0.014-2.1553-0.153-4.4026 0.115-6.4999 0.505-1.8619 0.281-3.8808 0.634-5.1986 1.9-0.399 0.372-0.7621 0.822-1.161 1.194-0.399 0.371-1.0623 0.58-1.5977 0.445 0.026 2.547 0.5213 5.382-1.1306 7.369-1.2889 1.537-0.9848 3.612-2.5231 3.835 0.6413-0.576 0.8645 0.962 0.1907 2.147s-6.0002 1.687-7.5503 0.783c-1.4359-0.861-2.5445-2.25-3.0324-3.733-0.0358-0.079-0.0358-0.079-0.0716-0.157-1.1591 2.235-2.3609 4.585-3.8628 6.693-0.4842 0.6-0.9325 1.279-1.6026 1.68-1.3265 0.416-2.9464 0.398-4.4878 0.343z" clip-path="url(#clipPath4256)" fill="#5c5a5a" style=""/>
<path d="m37.003 128.18c-0.0871-0.813-0.2849-1.248 0.0134-2.048 0.5966-1.6 1.2408-1.962 2.0658-3.476 0.8319-1.707 0.911-2.611 1.1715-4.531 0.1124-1 0.1464-1.963 0.1019-2.891 0.7639 0.22 1.965-1.261 2.5634-1.819s1.1252-1.272 1.8669-1.516c0.8201-0.28 1.6625-0.096 2.5117-0.105 0.9276-0.044 1.8261-0.36 2.7605-0.597 1.9046-0.396 3.8246-0.135 5.702 0.24-0.0784 0.035-0.0784 0.035-0.1568 0.071-2.1554-0.153-4.4027 0.115-6.4999 0.504-1.862 0.282-3.8808 0.635-5.1987 1.901-0.399 0.371-0.7621 0.822-1.161 1.193-0.399 0.372-1.4722 1.511-2.0077 1.376 0.026 2.548 0.4552 4.357-1.1968 6.344-1.2888 1.537-1.1862 2.083-1.9464 3.947-0.2421 0.3-0.4552 0.871-0.5898 1.407z" clip-path="url(#clipPath4250)" fill="#8b8b8b" style=""/>
<path d="m28.786 118.79c0.121-0.15 0.1995-0.185 0.3205-0.336 0.0784-0.035 0.121-0.15 0.2779-0.221l0.0784-0.036c0.5849-0.172 1.1697-0.345 1.7613-0.71 0.4706-0.215 0.9838-0.544 1.4186-0.837 1.8959-1.245 3.5769-2.961 5.7661-3.771 0.2508 0.549 0.5015 1.098 0.5596 1.64-0.029-0.271-0.1365-0.506-0.3224-0.706-0.0358-0.078-0.1501-0.121-0.2643-0.163-0.1143-0.043-0.1569 0.071-0.2353 0.107-2.8933 2.175-5.7575 4.62-9.3604 5.033z" clip-path="url(#clipPath4244)" fill="#8b8b8b" style=""/>
<path d="m42.054 108.84c-0.2865-0.628-0.3736-1.441-0.2322-2.169s0.5539-1.485 0.7738-2.249c0.0426-0.114 0.121-0.15 0.1636-0.264 0.704-1.365 3.6774-5.2907 3.7318-6.8322-0.0476 1.3488-2.8573 5.0102-2.7122 6.3662 1.589-1.295 3.1477-2.742 4.665-4.1932-1.0536 1.4292-2.3053 2.9262-3.659 4.1132-0.6768 0.593-1.3537 1.187-1.8804 1.901-0.9751 1.393-0.9714 3.477 0.4218 4.452 0.1501 0.121 0.3002 0.242 0.4929 0.249-0.4212-0.092-0.764-0.22-1.0641-0.462-0.2643-0.164-0.5219-0.52-0.701-0.912z" clip-path="url(#clipPath4238)" fill="#8b8b8b" style=""/>
<path d="m55.316 112.09c0.1773-0.65 0.8899-1.165 1.3963-1.302 0.9344-0.237 1.9046-0.396 2.9533-0.59 0.8559-0.202 1.7477-0.324 2.5678-0.604 2.0324-0.739 3.7783-2.105 5.2598-3.635 0 0 0.0784-0.035 0.0426-0.114 2.4091-1.574 4.7824-3.227 6.9698-5.079-0.8899 1.165-2.0083 2.244-3.3484 3.046-0.948 0.623-1.9676 1.088-2.8013 1.753-0.9121 0.701-1.5241 1.644-2.4363 2.345-0.4347 0.294-0.9479 0.623-1.3469 0.995 1.1135 0.155 2.1912 0.231 3.3047 0.386-0.8134 0.087-1.6267 0.174-2.4401 0.261-1.006 0.081-1.9762 0.239-2.9464 0.398-2.4177 0.725-4.699 1.957-7.1749 2.14z" clip-path="url(#clipPath4232)" fill="#8b8b8b" style=""/>
<path d="m16.28 134.17c0.428-0.101 0.9702-0.159 1.3624-0.338 0.8133-0.087 1.5124-0.217 2.2609-0.654 0.9053-0.508 1.7032-1.251 2.3084-2.002 1.0894-1.35 1.8002-2.907 2.511-4.464 0.3341-0.721 0.7824-1.4 1.4883-1.723-0.0426 0.115-0.0426 0.115-0.0852 0.229-0.0358-0.079-0.0358-0.079-0.0716-0.157-1.1592 2.236-2.3609 4.586-3.8628 6.693-0.4842 0.601-0.9325 1.279-1.6026 1.68-1.1474 0.809-2.7673 0.79-4.3088 0.736z" clip-path="url(#clipPath4226)" fill="#8b8b8b" style=""/>
<path d="m25.894 119.74c-0.1297-0.699 0.0117-1.427-0.118-2.126-0.0512-0.735-0.2594-1.398-0.3532-2.019-0.0736-1.199 0.2741-2.305 0.2364-3.425-0.0154-0.657-0.0667-1.392-0.0037-2.084 0.1976-1.228 1.1591-2.236 1.9996-3.094 3.1625-3.245 6.2466-6.455 9.4092-9.6999 0.5199-0.5219 1.2752-1.1512 1.9965-0.8171 0.2644 0.1637 0.4861 0.4416 0.5935 0.6769-0.0358-0.0785-0.0716-0.1569-0.15-0.1211-0.336-0.3205-1.0709-0.2692-1.1629 0.152-0.5848 0.1723-1.1833 0.7299-1.5822 1.1017-2.9631 3.0595-5.8903 6.1975-8.7391 9.2995-0.3205 0.336-0.641 0.672-0.8899 1.165s-0.3409 0.914-0.397 1.413c-0.6287 3.605-1.1498 7.445-0.2728 11.026 0.0358 0.078 0.0716 0.157 0.1074 0.235 0 0 0.0784-0.036 0.1569-0.071 0.029 0.271-0.0562 0.499-0.0272 0.77-0.3582-0.784-0.7164-1.568-0.8035-2.382z" clip-path="url(#clipPath4220)" fill="#8b8b8b" style=""/>
<path d="m23.301 102.44c-0.2662-1.206 0.2025-2.4623 0.5928-3.6832 0.0426-0.1143 0.0426-0.1143 0.0852-0.2285 1.8718-2.7507 3.7078-5.5798 5.2794-8.5726-0.9936 3.0131-2.4084 5.9343-4.0517 8.7702-0.3699 0.6429-0.7756 1.2073-0.9955 1.9711-0.6033 1.792 0.0995 3.746 0.9234 5.55-0.2217-0.278-0.4367-0.748-0.5083-0.905-0.2149-0.471-0.394-0.863-0.6089-1.333-0.4076-0.478-0.6226-0.948-0.7164-1.569z" clip-path="url(#clipPath4214)" fill="#8b8b8b" style=""/>
<path d="m39.188 104.04c0.0852-0.228 0.213-0.571 0.2982-0.799 0.0785-0.036 0.1211-0.151 0.1211-0.151 0.3699-0.642 0.7398-1.285 1.0313-1.892 0.4687-1.2572 0.6388-2.2291 0.2584-3.4772-0.2082-0.6632-0.9905-1.7027-1.277-2.3301-0.8239-1.8039-0.5329-3.8167-0.7361-5.7145-0.21-1.7051 2.4883-5.1344 3.1945-6.9284 0.7063-1.794 1.027-2.0822 1.7156-3.2985 1.1036-1.9492 0.9955-1.9713 1.4933-2.957 0.6255-1.3284 0.7126-1.9891 2.2126-2.4891 2 0 4.493 2.5003 6.5 2.5003 1.1428-0.8663 0.5121-1.4938 0.7949-2.95 0.2199-0.764 0.4397-1.5279 0.8096-2.1708 1.7527-1.5588 3.5411-3.0391 5.2153-4.5621-0.4551 0.8714-1.1387 1.6576-1.8582 2.3653-0.9974 0.9295-2.2164 1.5811-2.9137 2.7526-0.8182 1.3216-0.7225 2.9841-1.0479 4.5546-0.4736 2.4913-7.4351-3.3159-8.6727-1.0445-1.2375 2.2714-2.4308 3.8077-2.4048 6.3552 0.0686 2.4332-4.5321 7.7359-4.2282 10.062 0.0512 0.7349 0.2168 1.5124 0.4607 2.2541 0.1365 0.5064 0.3514 0.977 0.6022 1.526 0.2865 0.6275 0.5373 1.1765 0.7454 1.8397 0.1791 0.3922 0.2798 0.8202 0.2662 1.2055 0.0222 0.4638-0.2266 0.9567-0.4329 1.3352-0.704 1.364-1.408 2.728-2.1478 4.014z" clip-path="url(#clipPath4208)" fill="#8b8b8b" style=""/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 51 KiB

854
application/src/main/data/json/system/scada_symbols/top-tee-pipe.svg

@ -0,0 +1,854 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" fill="none" version="1.1" viewBox="0 0 200 200">
<tb:metadata xmlns=""><![CDATA[{
"title": "Top tee pipe",
"description": "Top tee pipe with configurable left/right/top fluid and leak visualizations.",
"searchTags": [
"pipe",
"tee"
],
"widgetSizeX": 1,
"widgetSizeY": 1,
"stateRenderFunction": "var leftLiquidPattern = prepareLiquidPattern('left-liquid', 'left-fluid');\nvar rightLiquidPattern = prepareLiquidPattern('right-liquid', 'right-fluid');\nvar topLiquidPattern = prepareLiquidPattern('top-liquid', 'top-fluid');\n\nvar genericLiquidPattern = ctx.svg.defs().findOne('pattern#liquid');\nif (genericLiquidPattern) {\n genericLiquidPattern.id(ctx.api.generateElementId());\n leftLiquidPattern.attr({'xlink:href': '#'+genericLiquidPattern.id()});\n rightLiquidPattern.attr({'xlink:href': '#'+genericLiquidPattern.id()});\n topLiquidPattern.attr({'xlink:href': '#'+genericLiquidPattern.id()});\n}\n\nupdateLiquidPatternAnimation(leftLiquidPattern, 'left');\nupdateLiquidPatternAnimation(rightLiquidPattern, 'right');\nupdateLiquidPatternAnimation(topLiquidPattern, 'top');\n\n\nfunction prepareLiquidPattern(patternId, fluidElementTag) {\n var liquidPattern = ctx.svg.defs().findOne('pattern#'+patternId);\n var fluidElements = ctx.tags[fluidElementTag];\n\n if (liquidPattern) {\n liquidPattern.id(ctx.api.generateElementId());\n for (var i=0;i<fluidElements.length;i++) {\n fluidElements[i].fill(liquidPattern);\n }\n } else {\n liquidPattern = fluidElements[0].reference('fill');\n }\n return liquidPattern;\n}\n\nfunction updateLiquidPatternAnimation(liquidPattern, prefix) {\n if (liquidPattern) {\n var fluid = ctx.values[prefix + 'Fluid'] && !ctx.values.leak;\n var flow = ctx.values[prefix + 'Flow'];\n var flowDirection = ctx.values[prefix + 'FlowDirection'];\n var flowAnimationSpeed = ctx.values[prefix + 'FlowAnimationSpeed'];\n\n var elementFluid = liquidPattern.remember('fluid');\n var elementFlow = null;\n var elementFlowDirection = null;\n \n if (fluid !== elementFluid) {\n liquidPattern.remember('fluid', fluid);\n elementFlow = null;\n elementFlowDirection = null;\n } else {\n elementFlow = liquidPattern.remember('flow');\n elementFlowDirection = liquidPattern.remember('flowDirection');\n }\n \n if (fluid) {\n if (flow !== elementFlow) {\n liquidPattern.remember('flow', flow);\n if (flow) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n } else if (flow && elementFlowDirection !== flowDirection) {\n liquidPattern.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n }\n if (flow && liquidPattern) {\n liquidPattern.timeline().speed(flowAnimationSpeed);\n }\n } else {\n ctx.api.resetAnimation(liquidPattern);\n }\n }\n}\n\nfunction animateFlow(liquidPattern, forwardElseReverse) {\n ctx.api.resetAnimation(liquidPattern);\n var deltaX = forwardElseReverse ? 172 : -172;\n liquidPattern.animate(1000).ease('-').relative(deltaX, 0).loop();\n}\n\n",
"tags": [
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "left-fluid",
"stateRenderFunction": "var fluid = ctx.values.leftFluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "left-fluid-background",
"stateRenderFunction": "var fluid = ctx.values.leftFluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.leftFluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "overlay",
"stateRenderFunction": "var fluid = (ctx.values.leftFluid || ctx.values.rightFluid ||\n ctx.values.topFluid) && !ctx.values.leak;\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
},
{
"tag": "right-fluid",
"stateRenderFunction": "var fluid = ctx.values.rightFluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "right-fluid-background",
"stateRenderFunction": "var fluid = ctx.values.rightFluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.rightFluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "top-fluid",
"stateRenderFunction": "var fluid = ctx.values.topFluid && !ctx.values.leak;\n\nif (fluid) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "top-fluid-background",
"stateRenderFunction": "var fluid = ctx.values.topFluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.topFluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
}
],
"behavior": [
{
"id": "leftFluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": "{i18n:scada.symbol.left-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leftFlow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": "{i18n:scada.symbol.left-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leftFlowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": "{i18n:scada.symbol.left-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leftFlowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": "{i18n:scada.symbol.left-pipe}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "rightFluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": "{i18n:scada.symbol.right-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "rightFlow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": "{i18n:scada.symbol.right-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "rightFlowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": "{i18n:scada.symbol.right-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "rightFlowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": "{i18n:scada.symbol.right-pipe}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "topFluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": "{i18n:scada.symbol.top-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "topFlow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": "{i18n:scada.symbol.top-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "topFlowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": "{i18n:scada.symbol.top-pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "topFlowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": "{i18n:scada.symbol.top-pipe}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "leftFluidColor",
"name": "{i18n:scada.symbol.left-fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "rightFluidColor",
"name": "{i18n:scada.symbol.right-fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "topFluidColor",
"name": "{i18n:scada.symbol.top-fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata><g transform="translate(-4)" clip-path="url(#clip0_1245_66653)">
<path d="m18 64h172v72h-172z" fill="#fff" tb:tag="pipe-background"/>
<path d="m18 64h172v72h-172z" fill="url(#paint0_linear_1245_66653)" style="fill:url(#paint0_linear_1245_66653)"/>
<path d="m19.5 65.5h169v69h-169z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<path d="m140 14v51l-36 35-36-35v-51z" fill="#fff" tb:tag="pipe-background"/>
<path d="m140 14v51l-36 35-36-35v-51z" fill="url(#paint1_linear_1245_66653)" style="fill:url(#paint1_linear_1245_66653)"/>
<path d="m138.5 15.5v48.866l-34.5 33.542-34.5-33.542v-48.866z" stroke="#000" stroke-opacity=".12" stroke-width="3"/>
<rect x="5.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<rect x="191.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
<rect transform="rotate(-90,55.5,12.5)" x="55.5" y="12.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/>
</g><defs>
<pattern id="liquid" width="172" height="72" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<linearGradient id="paint28_linear_1182_32781-5" x1="19.316" x2="21" y1="8.2632" y2="23" gradientTransform="translate(-36,6)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint29_linear_1182_32781-1" x1="148.32" x2="150" y1="8.2632" y2="23" gradientTransform="translate(-165,135)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint30_linear_1182_32781-7" x1="111.32" x2="113" y1="9.2632" y2="24" gradientTransform="translate(-129,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint31_linear_1182_32781-4" x1="32.316" x2="34" y1="51.263" y2="66" gradientTransform="translate(-92,-24)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint32_linear_1182_32781-3" x1="153.32" x2="155" y1="51.263" y2="66" gradientTransform="translate(-213,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint33_linear_1182_32781-1" x1="31.947" x2="33" y1="21.789" y2="31" gradientTransform="translate(-59,7)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint34_linear_1182_32781-4" x1="160.95" x2="162" y1="21.789" y2="31" gradientTransform="translate(-188,136)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint35_linear_1182_32781-6" x1="3.9474" x2="5" y1="32.79" y2="42" gradientTransform="translate(-42,-32)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint36_linear_1182_32781-9" x1="93.158" x2="94" y1="4.6316" y2="12" gradientTransform="translate(-102,86)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint37_linear_1182_32781-4" x1="71.158" x2="72" y1="56.632" y2="64" gradientTransform="translate(-132,12)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint38_linear_1182_32781-2" x1="110.95" x2="112" y1="32.79" y2="42" gradientTransform="translate(-149,75)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint39_linear_1182_32781-2" x1="57.947" x2="59" y1="34.79" y2="44" gradientTransform="translate(-98,20)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint40_linear_1182_32781-6" x1="113.95" x2="115" y1="57.79" y2="67" gradientTransform="translate(-177,53)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint41_linear_1182_32781-4" x1="137.95" x2="139" y1="37.79" y2="47" gradientTransform="translate(-181,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint42_linear_1182_32781-1" x1="74.947" x2="76" y1="16.789" y2="26" gradientTransform="translate(-97,55)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint43_linear_1182_32781-2" x1="125.97" x2="126.5" y1="48.395" y2="53" gradientTransform="translate(-177,76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint44_linear_1182_32781-8" x1="168.97" x2="169.5" y1="44.395" y2="49" gradientTransform="translate(-216,123)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint45_linear_1182_32781-8" x1="56.974" x2="57.5" y1="7.3947" y2="12" gradientTransform="translate(-67,48)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint46_linear_1182_32781-9" x1="95.974" x2="96.5" y1="33.395" y2="38" gradientTransform="translate(-132,61)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint47_linear_1182_32781-2" x1="90.974" x2="91.5" y1="21.395" y2="26" gradientTransform="translate(-115,68)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint48_linear_1182_32781-88" x1="21.974" x2="22.5" y1="38.395" y2="43" gradientTransform="translate(-63,-18)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint49_linear_1182_32781-8" x1="123.97" x2="124.5" y1="21.395" y2="26" gradientTransform="translate(-148,101)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint50_linear_1182_32781-6" x1="85.974" x2="86.5" y1="45.395" y2="50" gradientTransform="translate(-134,39)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint51_linear_1182_32781-8" x1="50.974" x2="51.5" y1="19.395" y2="24" gradientTransform="translate(-73,30)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint52_linear_1182_32781-3" x1="47.974" x2="48.5" y1="49.395" y2="54" gradientTransform="translate(-100,-3)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint53_linear_1182_32781-83" x1="13.158" x2="14" y1="60.632" y2="68" gradientTransform="translate(-78,-50)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint54_linear_1182_32781-33" x1="134.16" x2="135" y1="60.632" y2="68" gradientTransform="translate(-199,71)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint55_linear_1182_32781-8" x1="93.5" x2="95.5" y1="50.5" y2="68" gradientTransform="translate(-154,37)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint84_linear_1182_32781-8" x1="248" x2="248" y1="1.8513e-7" y2="72" gradientTransform="scale(.33333 1)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" offset=".10895"/>
<stop stop-color="#fff" stop-opacity="0" offset=".11331"/>
<stop stop-color="#fff" stop-opacity="0" offset=".88736"/>
<stop stop-color="#727171" offset=".89138"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<pattern id="left-liquid" patternTransform="translate(14,-8)" patternUnits="userSpaceOnUse" xlink:href="#liquid"/>
<pattern id="right-liquid" patternTransform="translate(14,-8)" patternUnits="userSpaceOnUse" xlink:href="#liquid"/>
<pattern id="top-liquid" patternTransform="translate(14,8)" patternUnits="userSpaceOnUse" xlink:href="#liquid"/>
<clipPath id="clip0_1245_66653">
<rect transform="translate(4)" width="200" height="200" fill="#fff"/>
</clipPath>
<linearGradient id="paint0_linear_1245_66653" x1="62.72" x2="62.53" y1="64" y2="136" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1245_66653" x1="140" x2="67.996" y1="36.36" y2="35.98" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint0_linear_1281_41706" x1="57.778" x2="57.778" y1="-8.4191e-7" y2="72" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1281_41706" x1="-8.4192e-7" x2="72" y1="100.76" y2="100.76" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<clipPath id="clipPath38694">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38688">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38682">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38676">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38670">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38664">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38658">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38652">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38646">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38640">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38634">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38628">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38622">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38616">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38610">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38604">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38598">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
<clipPath id="clipPath38592">
<rect width="200" height="200" fill="#fff"/>
</clipPath>
</defs><rect x="14" y="64" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="left-fluid-background"/><rect transform="rotate(90)" x="14" y="-136" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="top-fluid-background"/><rect x="136" y="64" width="50" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="right-fluid-background"/><rect x="14" y="64" width="50" height="72" fill="url(#left-liquid)" stroke-width="0" style="display: none;" tb:tag="left-fluid"/><rect x="136" y="64" width="50" height="72" fill="url(#right-liquid)" stroke-width="0" style="display: none;" tb:tag="right-fluid"/><rect transform="rotate(90)" x="14" y="-136" width="50" height="72" fill="url(#top-liquid)" stroke-width="0" style="display: none;" tb:tag="top-fluid"/><g transform="rotate(180 68 68)" style="display: none;" tb:tag="overlay">
<path d="m0 0h72v72h-72z" fill="url(#paint0_linear_1281_41706)" style="fill: url(&quot;#paint0_linear_1281_41706&quot;);"/>
<path d="m1.5 1.5h69v69h-69z" stroke="#000" stroke-opacity=".12" stroke-width="3" style=""/>
<path d="m0 72 36-36 36 36z" fill="url(#paint1_linear_1281_41706)" style="fill: url(&quot;#paint1_linear_1281_41706&quot;);"/>
<path d="m68.379 70.5h-64.757l32.379-32.379z" stroke="#000" stroke-opacity=".12" stroke-width="3" style=""/>
</g><g transform="translate(0,1e-4)" style="display: none;" tb:tag="leak">
<path d="m64 116.82c0.3856 0.212 0.8277 0.531 1.2391 0.66 1.2391 0.659 2.6636 1.015 3.996 0.8 0.5968-0.174 1.2194-0.431 1.7597-0.713 1.4871-0.709 2.9484-1.335 4.4096-1.962 1.3275-0.487 2.7888-1.114 3.3659-2.379-0.1388-0.133-0.1953-0.241-0.334-0.375 1.9659-1.372 2.0637 1.144 9.5637 0 8-4.356 19.138-11.096 20.317-12.263 0.401-0.416 0.859-0.7245 1.235-1.0586 0.644-0.6116 1.205-1.2489 1.627-2.0201 0.345-0.5244 0.551-1.1826 0.814-1.7328 0.763-1.5682 1.69-3.0849 2.92-4.4161-0.098 0.6017-0.196 1.2035-0.295 1.8052 0 0 0.17 0.3242 0.113 0.2161-0.19 0.0307-0.267 0.2776-0.236 0.4679 0.679-0.1486 1.358-0.2973 1.954-0.4717 3.231-0.7947 6.488-1.6717 9.657-2.847-2.753 1.5769-5.758 2.8038-8.875 3.8147-0.705 0.2309-1.384 0.3795-2.059 0.8007-1.646 0.9297-2.43 2.8528-3.023 4.7452l-0.025 0.0823c-0.052 0.1642-0.129 0.4112 9e-3 0.5452 0.113 0.216 0.468 0.237 0.741 0.232 1.389-0.107 2.752-0.131 4.115-0.156 1.718-4e-3 3.359 0.239 5.102 0.153 1.554-0.055 3.077-0.301 4.517-0.572 0.679-0.149 1.332-0.2154 1.898-0.5801 0.649-0.339 1.158-0.8118 1.611-1.3927 0.587-0.7196 1.149-1.357 1.653-2.1024 2.951-4.2258 13.185-6.5158 15.473-11.22-0.671 2.1392-1.449 4.335-2.12 6.4742 2.424-1.68 5.27-2.686 8.141-3.7741 0.813-0.2874 1.626-0.5748 2.408-1.0526 0.648-0.3389 1.266-0.8682 1.775-1.3411 1.02-0.9456 1.982-1.9993 2.313-3.3415-0.094 0.8743-0.352 1.6971-0.666 2.4118 0.273-0.0049 0.628 0.016 0.9 0.011 2.346 0.0122 4.665 0.1066 6.929 0.093-0.921 0.3439-1.955 0.4716-2.964 0.5171-1.363 0.0247-2.705-0.3056-4.006 0.0997-1.493 0.4361-2.533 1.7366-3.824 2.6871-2.018 1.5364-4.595 2.2647-7.034 3.127-2.439 0.8622-4.705 1.0594-8.585 2.7839-2.796 1.2428-7.28 3.344-8.608 5.2769-0.453 0.5809-0.85 1.2703-1.164 1.9843-0.237 0.468-0.392 0.962-0.572 1.538-0.207 0.658-0.387 1.234-0.676 1.866-0.129 0.412-0.34 0.797-0.607 1.075-0.294 0.36-0.808 0.56-1.215 0.704-1.435 0.544-2.871 1.088-4.306 1.632 0.216-0.113 0.54-0.283 0.756-0.396 1.729-0.903 3.376-1.833 4.55-3.272 0.267-0.278 0.478-0.664 0.499-1.018 0.026-0.083 0.052-0.165-0.03-0.191-0.036-0.463-0.617-0.916-0.967-0.664-0.55-0.263-1.368-0.248-1.913-0.238-4.249 0.295-8.524 0.672-12.716 1.075-0.463 0.036-0.926 0.071-1.441 0.271-0.514 0.201-0.864 0.452-1.24 0.786-2.877 2.261-13.36 8.984-15.86 9.99-4 1.61-3.5 2.5-6.0981 2.164-0.1597 0.221-8.847-1.265-9.0067-1.044-1.0916 1.465-1.4635 3.517-1.6759 5.348 0 1.702 4.8496 2.6 5.2807 3.031 0.4894 0.489 20.365-0.171 21.924-0.41 0.679-0.148 1.459-1.054 1.778-1.054 0.112 0 1.405 0.862 0.112 0.431 0.431-0.431 6.028-3.225 8.973-6.278 0.267-0.277 0.561-0.637 0.772-1.023 0.16-0.221 0.237-0.468 0.232-0.74 0.026-0.083-0.031-0.191-0.087-0.299-0.057-0.108-0.165-0.051-0.247-0.077-3.472-0.456-7.263-0.469-10.218-2.57 0.19-0.031 0.272-5e-3 0.463-0.035 0.082 0.025 0.19-0.031 0.354 0.02 1.965 0.074 4.022 0.719 5.9 0.494 0.843-0.097 1.713-0.277 2.561-0.101 1.096 0.253 2.175 1.133 3.266 1.114 0.545-0.01 1.142-0.185 1.574-0.411 1.189-0.621 2.29-1.541 3.535-2.054 0.623-0.257 1.384-0.38 2.007-0.637 0.108-0.056 0.19-0.03 0.298-0.087 1.436-0.544 6.9-1.628 7.971-2.738-0.937 0.971-6.103 1.968-6.901 3.073 2.047 0.1 4.012 0.173 6.11 0.108-1.738 0.359-3.508 0.527-5.308 0.505-0.9-0.011-1.8-0.022-2.67 0.157-1.656 0.385-3.046 1.937-2.662 3.594 0.031 0.19 0.061 0.38 0.2 0.514 0.426 0.947 1.285 1.668 2.061 2.363 2.38 1.92 4.729 3.65 7.243 5.432 1.851 1.303 3.727 2.523 5.892 3.112 0.165 0.051 0.355 0.02 0.407-0.144 0.148 0.679 0.781 0.967 1.465 1.091 0.658 0.207 1.368 0.248 2.052 0.372 0.602 0.099 1.203 0.197 1.805 0.295 2.844 0.44 5.714 0.797 8.579 0.881-1.441 0.272-2.994 0.327-4.527 0.028-1.121-0.171-2.19-0.506-3.255-0.569-1.147-0.088-2.233 0.204-3.379 0.116-0.52-0.073-1.122-0.171-1.667-0.161 0.725 0.86 1.475 1.637 2.2 2.496-0.664-0.478-1.327-0.957-1.99-1.436-0.802-0.613-1.629-1.143-2.457-1.674-2.149-1.215-4.777-1.768-6.741-3.287-0.139-0.134-0.277-0.268-0.416-0.401 0.19-0.031 0.355 0.02 0.545-0.01-0.057-0.108-0.221-0.16-0.278-0.268-1.5-1.554-3.351-2.857-5.171-3.97-1.573-1.035-3.311-2.122-5.137-2.061-0.545 0.01-1.116 0.102-1.661 0.112-0.546 9e-3 -1.178-0.279-1.486-0.737-1.684 1.912-3.21 4.352-5.767 4.725-1.986 0.281-3.147 2.028-4.44 1.166 0.862 0 0 1.293-1.293 1.724-1.294 0.431-22.021 4.309-29.084-2.226-0.4926-1.6-0.3883-3.375 0.2404-4.804 0.0258-0.082 0.0258-0.082 0.0515-0.165-2.3565 0.888-4.821 1.833-7.347 2.397-0.7614 0.122-1.5485 0.328-2.3148 0.178-1.2649-0.577-2.4573-1.674-3.5675-2.745z" clip-path="url(#clipPath38694)" fill="#5c5a5a" style=""/>
<path d="m106.37 123.98c0.479-0.663 0.623-1.119 1.379-1.514 1.513-0.791 2.234-0.63 3.86-1.205 1.76-0.713 2.423-1.333 3.9-2.587 0.752-0.668 1.421-1.362 2.008-2.081 0.421 0.674 2.305 0.375 3.123 0.36s1.687-0.194 2.402 0.12c0.797 0.34 1.3 1.04 1.938 1.601 0.719 0.587 1.599 0.953 2.452 1.401 1.681 0.979 2.935 2.456 4.081 3.99-0.082-0.026-0.082-0.026-0.165-0.052-1.5-1.554-3.351-2.857-5.171-3.969-1.573-1.036-3.311-2.122-5.137-2.062-0.545 0.01-1.116 0.102-1.661 0.112-0.546 0.01-2.105 0.139-2.413-0.319-1.684 1.913-2.574 3.545-5.131 3.919-1.985 0.281-2.275 0.756-4.086 1.634-0.381 0.062-0.921 0.344-1.379 0.652z" clip-path="url(#clipPath38688)" fill="#8b8b8b" style=""/>
<path d="m106.53 111.51c0.19-0.031 0.273-5e-3 0.463-0.036 0.082 0.026 0.19-0.03 0.355 0.021l0.082 0.026c0.55 0.263 1.101 0.526 1.785 0.65 0.493 0.154 1.095 0.253 1.614 0.325 2.243 0.341 4.64 0.189 6.81 1.05-0.181 0.575-0.361 1.151-0.68 1.594 0.159-0.222 0.237-0.468 0.232-0.741 0.025-0.082-0.031-0.19-0.088-0.298-0.056-0.108-0.164-0.052-0.246-0.078-3.606-0.316-7.371-0.412-10.327-2.513z" clip-path="url(#clipPath38682)" fill="#8b8b8b" style=""/>
<path d="m123.05 112.98c0.206-0.658 0.685-1.321 1.277-1.768s1.405-0.734 2.079-1.156c0.108-0.056 0.19-0.03 0.298-0.087 1.436-0.544 6.272-1.476 7.342-2.587-0.937 0.972-5.474 1.817-6.272 2.922 2.047 0.1 4.174 0.065 6.272 0-1.739 0.359-3.67 0.635-5.47 0.613-0.9-0.011-1.801-0.022-2.67 0.157-1.657 0.385-3.047 1.937-2.662 3.594 0.031 0.19 0.061 0.38 0.2 0.514-0.252-0.35-0.421-0.674-0.483-1.055-0.087-0.298-0.04-0.735 0.089-1.147z" clip-path="url(#clipPath38676)" fill="#8b8b8b" style=""/>
<path d="m130.74 124.26c0.566-0.365 1.441-0.272 1.909-0.035 0.853 0.448 1.681 0.979 2.591 1.535 0.771 0.423 1.517 0.927 2.314 1.267 2.005 0.809 4.217 0.96 6.341 0.813 0 0 0.082 0.026 0.108-0.057 2.844 0.44 5.714 0.797 8.579 0.882-1.44 0.271-2.994 0.326-4.526 0.027-1.122-0.171-2.191-0.506-3.256-0.568-1.147-0.089-2.232 0.203-3.379 0.115-0.52-0.072-1.122-0.17-1.667-0.161 0.725 0.86 1.475 1.637 2.2 2.497-0.663-0.479-1.327-0.958-1.99-1.437-0.802-0.613-1.629-1.143-2.457-1.674-2.283-1.076-4.803-1.685-6.767-3.204z" clip-path="url(#clipPath38670)" fill="#8b8b8b" style=""/>
<path d="m84.738 115.19c0.4176 0.138 0.9105 0.371 1.3385 0.423 0.7394 0.35 1.4035 0.604 2.2698 0.622 1.0376 0.038 2.1062-0.18 3.0139-0.505 1.634-0.584 3.0525-1.541 4.4711-2.499 0.6613-0.441 1.3978-0.786 2.1682-0.693-0.0959 0.075-0.0959 0.075-0.1919 0.15 0.0104-0.085 0.0104-0.085 0.0207-0.171-2.1551 1.303-4.4061 2.681-6.787 3.696-0.7262 0.26-1.4627 0.605-2.2435 0.597-1.4006 0.091-2.773-0.769-4.0598-1.62z" clip-path="url(#clipPath38664)" fill="#8b8b8b" style=""/>
<path d="m104.3 110.4c0.371-0.607 0.963-1.054 1.334-1.661 0.453-0.58 0.741-1.213 1.086-1.737 0.747-0.941 1.745-1.532 2.466-2.39 0.427-0.499 0.881-1.08 1.39-1.552 0.968-0.781 2.357-0.888 3.555-0.965 4.522-0.3 8.961-0.625 13.482-0.925 0.736-0.041 1.718-4e-3 2.032 0.727 0.087 0.298 0.066 0.653-0.011 0.9 0.025-0.082 0.051-0.165-0.031-0.19-0.036-0.463-0.617-0.916-0.967-0.665-0.55-0.262-1.368-0.248-1.913-0.238-4.249 0.295-8.523 0.672-12.716 1.075-0.463 0.036-0.926 0.072-1.44 0.272-0.515 0.2-0.865 0.452-1.24 0.786-2.878 2.261-5.832 4.769-7.573 8.018-0.026 0.082-0.052 0.165-0.077 0.247 0 0 0.082 0.026 0.164 0.051-0.16 0.221-0.376 0.334-0.535 0.555 0.258-0.822 0.515-1.645 0.994-2.308z" clip-path="url(#clipPath38658)" fill="#8b8b8b" style=""/>
<path d="m113.38 95.674c0.608-1.0746 1.797-1.696 2.903-2.3432 0.108-0.0565 0.108-0.0565 0.216-0.113 3.231-0.7947 6.488-1.6717 9.657-2.8471-2.753 1.5769-5.758 2.8039-8.876 3.8147-0.704 0.2309-1.384 0.3795-2.058 0.8008-1.646 0.9297-2.43 2.8528-3.023 4.7452 0.021-0.3549 0.176-0.8486 0.227-1.0131 0.155-0.4937 0.284-0.9051 0.439-1.3988 0.016-0.6275 0.17-1.1211 0.515-1.6455z" clip-path="url(#clipPath38652)" fill="#8b8b8b" style=""/>
<path d="m124.13 107.48c0.216-0.113 0.54-0.282 0.756-0.395 0.082 0.026 0.19-0.031 0.19-0.031 0.705-0.231 1.41-0.462 2.033-0.718 1.188-0.622 1.965-1.231 2.516-2.413 0.288-0.633 0.401-1.929 0.608-2.587 0.593-1.8925 2.154-3.195 3.272-4.7424 0.983-1.4086 5.283-2.1556 7.007-3.0178 1.725-0.8622 2.156-0.8622 3.481-1.3066 2.124-0.712 2.058-0.8008 3.087-1.2012 1.353-0.5698 2.455-1.4897 3.808-2.0595 0.921-0.3439 1.955-0.4717 2.794-0.8414 1.435-0.5441 2.532-1.7365 3.715-2.6306 0.675-0.4212 1.349-0.8425 2.054-1.0734 2.345 0.0122 4.665 0.1066 6.928 0.0929-0.921 0.3439-1.955 0.4717-2.963 0.5172-1.363 0.0246-2.705-0.3056-4.007 0.0997-1.492 0.436-2.532 1.7365-3.824 2.6871-2.017 1.5364-4.595 2.2647-7.034 3.1269s-4.353 1.2072-6.036 3.1193c-1.576 1.8556-8.542 2.7244-9.871 4.6574-0.453 0.5808-0.85 1.2694-1.164 1.9844-0.237 0.468-0.392 0.962-0.572 1.538-0.206 0.658-0.387 1.234-0.675 1.866-0.129 0.412-0.34 0.797-0.608 1.075-0.294 0.36-0.808 0.56-1.215 0.703-1.435 0.545-2.871 1.089-4.28 1.55z" clip-path="url(#clipPath38646)" fill="#8b8b8b" style=""/>
<path d="m16.278 134.17c0.428-0.101 0.9702-0.159 1.3624-0.338 1.3624-0.338 2.6599-1.025 3.5071-2.076 0.3273-0.528 0.6188-1.136 0.8319-1.707 0.6323-1.521 1.3005-2.964 1.9687-4.406 0.6614-1.25 1.3296-2.693 0.9133-4.019-0.1926-7e-3 -0.3069-0.05-0.4996-0.057 0.5453-2.334 0.3266-4.888-0.3626-7.228-0.4453-1.597-1.276-3.208-1.179-4.864 0.0203-0.578 0.1549-1.114 0.2111-1.613 0.0698-0.885 0.0611-1.734-0.1402-2.59-0.0939-0.621-0.3804-1.248-0.5528-1.833-0.4811-1.676-0.8053-3.424-0.78-5.2366 0.3291 0.5132 0.6583 1.0264 0.9875 1.5396 0 0 0.3427 0.1278 0.2285 0.0852-0.1211 0.1501-0.0136 0.3858 0.1365 0.5068 0.4057-0.5649 0.8115-1.1293 1.1388-1.658 1.8718-2.7506 3.7078-5.5798 5.2794-8.5725-0.9936 3.0131-2.4084 5.9342-4.0517 8.7702-0.3699 0.6428-0.7757 1.2073-0.9955 1.9713-0.6033 1.792 0.0995 3.746 0.9234 5.55l0.0358 0.078c0.0716 0.157 0.1791 0.393 0.3718 0.399 0.2285 0.086 0.5064-0.136 0.7058-0.322 0.9616-1.008 1.9589-1.937 2.9563-2.867 1.2753-1.151 2.658-2.067 3.8974-3.296 1.1184-1.08 2.0867-2.2805 2.9766-3.4453 0.4058-0.5645 0.8473-1.0505 1.0246-1.7002 0.2556-0.6855 0.3186-1.3778 0.2674-2.1127-0.0445-0.9276-0.0532-1.7767-0.1761-2.6685-0.63-5.1153 5.4511-13.66 4.0078-18.688-0.2736-1.2766 0-2.7759 1.7264-1.2764 1.5 2.0004 2 1.9997 5 1.9997 0.4126-0.7572 3.5 2 5 2 1 0.5 0.9416-0.3767 1.0046-1.069 0.1259-1.3846 0.1376-2.8118-0.5139-4.0308 0.515 0.7126 0.8732 1.4969 1.1172 2.2386 0.1995-0.1858 0.4774-0.4076 0.6768-0.5935 1.7527-1.5587 3.5411-3.0391 5.2154-4.562-0.4552 0.8714-1.1388 1.6576-1.8583 2.3653-0.9973 0.9295-2.2164 1.581-2.9136 2.7526-0.8183 1.3216-0.7225 2.9841-1.048 4.5545-0.4736 2.4913-6.84-3.4916-8.0776-1.2202-1.2375 2.2714-2.791 3.9327-4.5242 7.8089-1.249 2.7935-3.1791 7.3531-2.8753 9.6789 0.0513 0.7349 0.2168 1.5124 0.4608 2.2541 0.1365 0.5064 0.3514 0.977 0.6021 1.526 0.2866 0.6275 0.5373 1.1765 0.7455 1.8398 0.1791 0.3921 0.2798 0.8201 0.2662 1.2055 0.0222 0.4637-0.2267 0.9564-0.4329 1.3354l-2.112 4.092c0.0852-0.228 0.213-0.571 0.2982-0.799 0.6818-1.828 1.2851-3.621 1.1962-5.4757 0.0136-0.3854-0.0871-0.8134-0.3088-1.0913-0.0359-0.0784-0.0717-0.1568-0.1501-0.121-0.336-0.3205-1.0709-0.2693-1.1629 0.1519-0.5848 0.1723-1.1832 0.73-1.5822 1.1018-2.963 3.0593-5.8903 6.1973-8.7391 9.2993-0.3205 0.336-0.641 0.672-0.8899 1.165-0.2488 0.493-0.3408 0.914-0.397 1.414-0.6287 3.604-1.1498 7.444-0.2728 11.025 0.0358 0.078 0.0716 0.157 0.1074 0.235 0 0 0.0785-0.035 0.1569-0.071 0.029 0.271-0.0562 0.499-0.0271 0.77 0.1673 1.82 1.2623 3.595 2.3283 5.098 1.1378 1.267 1.7677 1.788 2.3765 1.821 0.6912 0.036 3.0405 0.165 4.04-1.054 0.4058-0.565 0.3806-1.76 0.6176-1.973 0.0836-0.075 1.622-0.298 0.3718 0.246 0.0325-0.609 2.3279-6.428 2.4773-10.667 0.0136-0.386-0.0086-0.849-0.1093-1.277-0.0291-0.271-0.1365-0.507-0.3224-0.706-0.0358-0.079-0.1501-0.121-0.2643-0.164-0.1143-0.043-0.1569 0.072-0.2353 0.108-2.8865 1.981-5.7149 4.505-9.3178 4.919 0.121-0.15 0.1994-0.186 0.3205-0.336 0.0784-0.036 0.121-0.15 0.2779-0.222 1.5105-1.259 3.4713-2.154 4.7175-3.576 0.5626-0.637 1.0894-1.351 1.8379-1.788 0.9838-0.544 2.3752-0.611 3.173-1.354 0.399-0.372 0.7263-0.901 0.8967-1.358 0.4688-1.256 0.6731-2.677 1.2561-3.891 0.2915-0.607 0.7757-1.207 1.0671-1.814 0.0427-0.115 0.1211-0.15 0.1637-0.265 0.704-1.364 4.0433-5.8229 4.0976-7.3643-0.0475 1.3488-3.2232 5.5433-3.078 6.8993 1.589-1.295 3.0995-2.553 4.6169-4.0047-1.0536 1.4287-2.2572 2.7367-3.6109 3.9237-0.6768 0.594-1.3537 1.187-1.8804 1.902-0.9752 1.393-0.9714 3.477 0.4218 4.452 0.1501 0.121 0.3002 0.242 0.4928 0.249 0.9499 0.419 2.0701 0.381 3.112 0.38 3.0539-0.163 5.9577-0.446 9.0183-0.802 2.2474-0.268 4.4589-0.614 6.4623-1.624 0.1568-0.071 0.2779-0.222 0.2062-0.378 0.5645 0.405 1.2278 0.197 1.8194-0.168 0.6274-0.286 1.1832-0.73 1.7749-1.095 0.5132-0.329 1.0264-0.658 1.5395-0.987 2.4092-1.575 4.7824-3.227 6.9699-5.079-0.8899 1.164-2.0084 2.244-3.3485 3.046-0.9479 0.622-1.9675 1.088-2.8012 1.753-0.9122 0.701-1.5242 1.644-2.4363 2.345-0.4348 0.293-0.948 0.622-1.3469 0.994 1.1135 0.155 2.1911 0.232 3.3046 0.387-0.8133 0.087-1.6267 0.174-2.44 0.261-1.006 0.08-1.9762 0.239-2.9464 0.398-2.411 0.532-4.7349 1.878-7.2107 2.061l-0.5781-0.021c0.1211-0.15 0.2779-0.221 0.399-0.371-0.1143-0.043-0.2711 0.029-0.3854-0.014-2.1553-0.153-4.4026 0.115-6.4999 0.504-1.862 0.282-3.8808 0.635-5.1987 1.9-0.3989 0.372-0.762 0.822-1.161 1.194-0.3989 0.372-1.0622 0.58-1.5976 0.445 0.026 2.548 0.5213 5.383-1.1307 7.37-1.2888 1.536-0.9848 3.611-2.5231 3.835 0.6413-0.577 0.8645 0.961 0.1907 2.147-0.6737 1.185-6.0002 1.686-7.5503 0.783-1.4358-0.861-2.5444-2.251-3.0323-3.734-0.0358-0.078-0.0358-0.078-0.0716-0.157-1.1592 2.236-2.3609 4.586-3.8628 6.693-0.4842 0.601-0.9325 1.279-1.6026 1.68-1.3265 0.417-2.9464 0.398-4.4879 0.344z" clip-path="url(#clipPath38640)" fill="#5c5a5a" style=""/>
<path d="m37.002 128.18c-0.0871-0.813-0.2849-1.248 0.0134-2.048 0.5965-1.599 1.2407-1.962 2.0658-3.476 0.8318-1.707 0.9109-2.611 1.1715-4.531 0.1124-0.999 0.1463-1.963 0.1019-2.89 0.7639 0.22 1.965-1.262 2.5634-1.82 0.5984-0.557 1.1252-1.272 1.8669-1.516 0.8201-0.28 1.6625-0.096 2.5116-0.104 0.9276-0.045 1.8262-0.36 2.7606-0.597 1.9045-0.396 3.8246-0.136 5.702 0.239-0.0784 0.036-0.0784 0.036-0.1569 0.072-2.1553-0.153-4.4026 0.115-6.4999 0.504-1.862 0.281-3.8808 0.635-5.1987 1.9-0.3989 0.372-0.762 0.822-1.161 1.194-0.3989 0.372-1.4722 1.511-2.0076 1.376 0.026 2.547 0.4552 4.357-1.1968 6.344-1.2889 1.536-1.1863 2.083-1.9465 3.947-0.2421 0.3-0.4551 0.871-0.5897 1.406z" clip-path="url(#clipPath38634)" fill="#8b8b8b" style=""/>
<path d="m28.785 118.79c0.1211-0.15 0.1995-0.186 0.3205-0.336 0.0785-0.036 0.1211-0.15 0.2779-0.222l0.0785-0.036c0.5848-0.172 1.1697-0.344 1.7613-0.709 0.4706-0.215 0.9838-0.544 1.4185-0.838 1.8959-1.245 3.5769-2.96 5.7662-3.771 0.2507 0.549 0.5015 1.098 0.5596 1.641-0.0291-0.271-0.1365-0.507-0.3224-0.706-0.0358-0.079-0.1501-0.121-0.2643-0.164-0.1143-0.043-0.1569 0.072-0.2353 0.108-2.8933 2.174-5.7576 4.62-9.3605 5.033z" clip-path="url(#clipPath38628)" fill="#8b8b8b" style=""/>
<path d="m42.053 108.84c-0.2865-0.627-0.3736-1.44-0.2322-2.168 0.1414-0.729 0.5539-1.486 0.7738-2.25 0.0426-0.114 0.121-0.15 0.1636-0.264 0.704-1.364 3.6774-5.2902 3.7318-6.8317-0.0476 1.3488-2.8573 5.0107-2.7122 6.3657 1.589-1.294 3.1476-2.741 4.665-4.1927-1.0536 1.4287-2.3053 2.9257-3.659 4.1127-0.6768 0.594-1.3537 1.187-1.8804 1.902-0.9752 1.393-0.9714 3.477 0.4218 4.452 0.1501 0.121 0.3002 0.242 0.4929 0.249-0.4212-0.092-0.764-0.22-1.0641-0.462-0.2643-0.164-0.5219-0.52-0.701-0.913z" clip-path="url(#clipPath38622)" fill="#8b8b8b" style=""/>
<path d="m55.316 112.09c0.1772-0.65 0.8899-1.165 1.3963-1.301 0.9344-0.237 1.9046-0.396 2.9532-0.591 0.856-0.201 1.7477-0.324 2.5679-0.604 2.0324-0.738 3.7782-2.104 5.2597-3.634 0 0 0.0785-0.036 0.0426-0.114 2.4092-1.575 4.7825-3.227 6.9699-5.079-0.8899 1.164-2.0083 2.244-3.3485 3.045-0.9479 0.623-1.9675 1.089-2.8012 1.754-0.9122 0.701-1.5242 1.644-2.4363 2.345-0.4348 0.293-0.948 0.622-1.3469 0.994 1.1135 0.155 2.1911 0.232 3.3046 0.387-0.8133 0.087-1.6267 0.174-2.44 0.261-1.006 0.08-1.9762 0.239-2.9464 0.398-2.4178 0.725-4.6991 1.956-7.1749 2.139z" clip-path="url(#clipPath38616)" fill="#8b8b8b" style=""/>
<path d="m16.278 134.17c0.428-0.1 0.9702-0.158 1.3624-0.337 0.8133-0.087 1.5124-0.217 2.2609-0.654 0.9053-0.508 1.7032-1.252 2.3084-2.002 1.0894-1.351 1.8002-2.908 2.511-4.464 0.3341-0.722 0.7824-1.4 1.4883-1.723-0.0426 0.114-0.0426 0.114-0.0852 0.229-0.0359-0.079-0.0359-0.079-0.0717-0.157-1.1591 2.235-2.3609 4.585-3.8628 6.693-0.4841 0.6-0.9325 1.279-1.6025 1.68-1.1475 0.808-2.7673 0.79-4.3088 0.735z" clip-path="url(#clipPath38610)" fill="#8b8b8b" style=""/>
<path d="m25.894 119.74c-0.1297-0.699 0.0117-1.427-0.118-2.126-0.0513-0.735-0.2594-1.399-0.3533-2.019-0.0735-1.199 0.2742-2.306 0.2365-3.426-0.0155-0.656-0.0667-1.391-0.0037-2.084 0.1976-1.227 1.1591-2.235 1.9996-3.093 3.1625-3.245 6.2466-6.455 9.4091-9.7004 0.52-0.5219 1.2753-1.1512 1.9966-0.8171 0.2643 0.1637 0.4861 0.4416 0.5935 0.6769-0.0358-0.0785-0.0716-0.1569-0.1501-0.1211-0.3359-0.3205-1.0708-0.2692-1.1628 0.152-0.5849 0.1723-1.1833 0.7299-1.5822 1.1017-2.9631 3.06-5.8903 6.197-8.7391 9.3-0.3205 0.336-0.641 0.671-0.8899 1.164s-0.3409 0.914-0.3971 1.414c-0.6286 3.605-1.1498 7.445-0.2728 11.025 0.0359 0.079 0.0717 0.157 0.1075 0.236 0 0 0.0784-0.036 0.1569-0.072 0.029 0.271-0.0562 0.5-0.0272 0.771-0.3582-0.785-0.7164-1.569-0.8035-2.382z" clip-path="url(#clipPath38604)" fill="#8b8b8b" style=""/>
<path d="m23.3 102.43c-0.2662-1.205 0.2025-2.4618 0.5928-3.6827 0.0426-0.1143 0.0426-0.1143 0.0853-0.2285 1.8718-2.7507 3.7077-5.5798 5.2794-8.5726-0.9936 3.0131-2.4084 5.9343-4.0517 8.7702-0.3699 0.6429-0.7757 1.2073-0.9955 1.9716-0.6033 1.792 0.0995 3.746 0.9234 5.55-0.2218-0.278-0.4367-0.749-0.5083-0.906-0.2149-0.47-0.3941-0.862-0.609-1.333-0.4076-0.477-0.6225-0.948-0.7164-1.569z" clip-path="url(#clipPath38598)" fill="#8b8b8b" style=""/>
<path d="m39.187 104.04c0.0852-0.228 0.2131-0.571 0.2983-0.8 0.0784-0.036 0.121-0.15 0.121-0.15 0.3699-0.643 0.7398-1.286 1.0313-1.893 0.4687-1.2564 0.6388-2.2283 0.2584-3.4764-0.2081-0.6633-0.9904-1.7027-1.277-2.3302-0.8238-1.8039-0.5329-3.8166-0.7361-5.7144-0.21-1.7051 2.4883-5.1345 3.1946-6.9285 0.7062-1.7939 1.0269-2.0821 1.7156-3.2985 1.1035-1.9491 0.9955-1.9713 1.4932-2.9569 0.6256-1.3284 0.7126-1.9891 2.2126-2.4891 2 0 4.493 2.5003 6.5 2.5003 1.1428-0.8664 0.5121-1.4938 0.795-2.9501 0.2198-0.7639 0.4396-1.5278 0.8096-2.1707 1.7526-1.5588 3.5411-3.0392 5.2153-4.5621-0.4552 0.8714-1.1388 1.6576-1.8583 2.3653-0.9973 0.9295-2.2164 1.581-2.9136 2.7526-0.8183 1.3216-0.7225 2.9841-1.048 4.5546-0.4736 2.4912-7.4351-3.316-8.6726-1.0445-1.2376 2.2714-2.4309 3.8077-2.4049 6.3551 0.0686 2.4333-4.5321 7.736-4.2282 10.062 0.0513 0.735 0.2168 1.5125 0.4607 2.2542 0.1365 0.5064 0.3515 0.977 0.6022 1.526 0.2866 0.6274 0.5373 1.1764 0.7454 1.8397 0.1791 0.3922 0.2798 0.8201 0.2662 1.2055 0.0223 0.4638-0.2266 0.9566-0.4329 1.3354-0.704 1.364-1.408 2.728-2.1478 4.014z" clip-path="url(#clipPath38592)" fill="#8b8b8b" style=""/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 57 KiB

271
application/src/main/data/json/system/scada_symbols/vertical-ball-valve.svg

@ -0,0 +1,271 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="200" height="200" fill="none" version="1.1" viewBox="0 0 200 200">
<tb:metadata xmlns=""><![CDATA[{
"title": "Vertical ball valve",
"description": "Vertical ball valve with open/close animation and state colors.",
"searchTags": [
"valve",
"ball"
],
"widgetSizeX": 1,
"widgetSizeY": 1,
"tags": [
{
"tag": "background",
"stateRenderFunction": "var opened = ctx.values.opened;\nvar openAnimate = element.remember('openAnimate');\nvar color = opened ? ctx.properties.openedColor : ctx.properties.closedColor;\nif (!openAnimate) {\n element.attr({fill: color});\n} else {\n ctx.api.animate(element, 500).attr({fill: color});\n element.remember('openAnimate', false);\n}\n",
"actions": null
},
{
"tag": "clickArea",
"stateRenderFunction": null,
"actions": {
"click": {
"actionFunction": " ctx.tags.wheel.forEach(e => {\n e.remember('openAnimate', true);\n });\n ctx.tags.background.forEach(e => {\n e.remember('openAnimate', true);\n });\n\n\nvar opened = ctx.values.opened;\nvar action = opened ? 'close' : 'open';\n\nctx.api.callAction(event, action, undefined, {\n next: () => {\n ctx.api.setValue('opened', !opened);\n }\n});"
}
}
},
{
"tag": "wheel",
"stateRenderFunction": "var opened = ctx.values.opened;\nvar openAnimate = element.remember('openAnimate');\nvar angle = opened ? ctx.properties.openedRotationAngle : ctx.properties.closedRotationAngle;\nif (!openAnimate) {\n element.transform({rotate: angle, originY: 100});\n} else {\n ctx.api.animate(element, 500).transform({rotate: angle, originY: 100});\n element.remember('openAnimate', false);\n}\n",
"actions": null
}
],
"behavior": [
{
"id": "opened",
"name": "{i18n:scada.symbol.opened}",
"hint": "{i18n:scada.symbol.opened-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.opened}",
"defaultGetValueSettings": {
"action": "GET_ATTRIBUTE",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": "SHARED_SCOPE",
"key": "open"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "open",
"name": "{i18n:scada.symbol.open}",
"hint": "{i18n:scada.symbol.open-hint}",
"group": null,
"type": "action",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": {
"action": "SET_ATTRIBUTE",
"executeRpc": {
"method": "setState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"setAttribute": {
"scope": "SHARED_SCOPE",
"key": "open"
},
"putTimeSeries": {
"key": "state"
},
"valueToData": {
"type": "CONSTANT",
"constantValue": false,
"valueToDataFunction": "/* Convert input boolean value to RPC parameters or attribute/time-series value */\nreturn value;"
}
},
"defaultWidgetActionSettings": null
},
{
"id": "close",
"name": "{i18n:scada.symbol.close}",
"hint": "{i18n:scada.symbol.close-hint}",
"group": null,
"type": "action",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": {
"action": "SET_ATTRIBUTE",
"executeRpc": {
"method": "setState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"setAttribute": {
"scope": "SHARED_SCOPE",
"key": "open"
},
"putTimeSeries": {
"key": "state"
},
"valueToData": {
"type": "CONSTANT",
"constantValue": true,
"valueToDataFunction": "/* Convert input boolean value to RPC parameters or attribute/time-series value */\nreturn value;"
}
},
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "openedColor",
"name": "{i18n:scada.symbol.opened-color}",
"type": "color",
"default": "#1C943E",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "closedColor",
"name": "{i18n:scada.symbol.closed-color}",
"type": "color",
"default": "#696969",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "openedRotationAngle",
"name": "{i18n:scada.symbol.opened-rotation-angle}",
"type": "number",
"default": 0,
"required": true,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": -179,
"max": 179,
"step": null
},
{
"id": "closedRotationAngle",
"name": "{i18n:scada.symbol.closed-rotation-angle}",
"type": "number",
"default": 90,
"required": true,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": -179,
"max": 179,
"step": null
}
]
}]]></tb:metadata><defs>
<linearGradient id="paint0_linear_1595_99338" x1="58.72" x2="58.3" y1="46.5" y2="153.51" gradientTransform="rotate(-90,100,100)" gradientUnits="userSpaceOnUse">
<stop stop-color="#020202" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".18316"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".35085"/>
<stop stop-color="#fff" stop-opacity=".25" offset=".49829"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".64825"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".82318"/>
<stop stop-color="#020202" stop-opacity=".35" offset="1"/>
</linearGradient>
<filter id="filter0_d_1595_99338" x="65" y="65" width="131" height="70" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset/>
<feGaussianBlur stdDeviation="4"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
<feBlend in2="BackgroundImageFix" result="effect1_dropShadow_1595_99338"/>
<feBlend in="SourceGraphic" in2="effect1_dropShadow_1595_99338" result="shape"/>
</filter>
<filter id="filter1_d_1595_99338" x="100" y="76.174" width="100" height="47.652" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset/>
<feGaussianBlur stdDeviation="2"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
<feBlend in2="BackgroundImageFix" result="effect1_dropShadow_1595_99338"/>
<feBlend in="SourceGraphic" in2="effect1_dropShadow_1595_99338" result="shape"/>
</filter>
<radialGradient id="paint1_radial_1595_99338" cx="0" cy="0" r="1" gradientTransform="matrix(0,10.846,-89.342,0,180.83,100.52)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" offset="0"/>
<stop stop-color="#9B9B9B" offset="1"/>
</radialGradient>
<filter id="filter2_ii_1595_99338" x="69.875" y="69.875" width="60.25" height="60.25" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset dx="3.12497" dy="-3.12497"/>
<feGaussianBlur stdDeviation="3.12497"/>
<feComposite in2="hardAlpha" k2="-1" k3="1" operator="arithmetic"/>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0"/>
<feBlend in2="shape" result="effect1_innerShadow_1595_99338"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset dx="-3.12497" dy="3.12497"/>
<feGaussianBlur stdDeviation="3.12497"/>
<feComposite in2="hardAlpha" k2="-1" k3="1" operator="arithmetic"/>
<feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.5 0"/>
<feBlend in2="effect1_innerShadow_1595_99338" result="effect2_innerShadow_1595_99338"/>
</filter>
<filter id="filter3_i_1595_99338" x="72" y="77" width="51" height="51" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset dx="-5" dy="5"/>
<feGaussianBlur stdDeviation="4"/>
<feComposite in2="hardAlpha" k2="-1" k3="1" operator="arithmetic"/>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0"/>
<feBlend in2="shape" result="effect1_innerShadow_1595_99338"/>
</filter>
</defs><rect transform="rotate(-90)" x="-198.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/><path d="m63.075 186s-5.5691-25.882-8.8079-43c-3.1469-16.632-3.767-26.182-3.767-43s0.6201-26.368 3.767-43c3.2388-17.118 8.8079-43 8.8079-43h73.833s4.816 25.882 8.055 43c3.147 16.632 4.374 26.182 4.52 43 0.147 16.807-0.639 26.377-3.767 43-3.231 17.177-8.808 43-8.808 43z" fill="#1c943e" tb:tag="background"/><path d="m63.075 186s-5.5691-25.882-8.8079-43c-3.1469-16.632-3.767-26.182-3.767-43s0.6201-26.368 3.767-43c3.2388-17.118 8.8079-43 8.8079-43h73.833s4.816 25.882 8.055 43c3.147 16.632 4.374 26.182 4.52 43 0.147 16.807-0.639 26.377-3.767 43-3.231 17.177-8.808 43-8.808 43z" fill="url(#paint0_linear_1595_99338)" style="fill:url(#paint0_linear_1595_99338)"/><path d="m63.621 18.62c0.281-1.321 0.5079-2.384 0.6661-3.123h71.375c0.137 0.738 0.333 1.787 0.575 3.086 0.502 2.694 1.205 6.465 2.01 10.77 1.608 8.611 3.622 19.362 5.242 27.923 3.135 16.568 4.349 26.026 4.494 42.734 0.146 16.714-0.632 26.186-3.741 42.71-1.613 8.5733-3.812 19.311-5.61 27.912-0.898 4.299-1.696 8.0616-2.269 10.749-0.281 1.3186-0.508 2.3784-0.666 3.1159h-71.41c-0.1582-0.7391-0.3851-1.8016-0.6661-3.1235-0.5724-2.6925-1.3694-6.4608-2.2675-10.764-1.7967-8.6083-3.9963-19.347-5.6129-27.892-3.1259-16.521-3.7409-25.975-3.7409-42.721s0.615-26.2 3.7409-42.721c1.6166-8.545 3.8162-19.283 5.6129-27.892 0.8981-4.303 1.6951-8.071 2.2675-10.764z" stroke="#000" stroke-opacity=".12" stroke-width="3"/><rect transform="rotate(-90)" x="-12.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/><g tb:tag="wheel">
<path transform="rotate(-90,100,100)" d="m100 80.174s21.238 7.876 45.5 8c14.198 0.0726 28.327-1.0525 38.64-2.1526 8.35-0.8908 15.86 5.581 15.86 13.979 0 8.3981-7.51 14.869-15.86 13.979-10.313-1.1-24.442-2.226-38.64-2.153-24.262 0.124-45.5 8-45.5 8z" fill="url(#paint1_radial_1595_99338)" style="fill:url(#paint1_radial_1595_99338);filter:url(#filter1_d_1595_99338)"/>
<path transform="rotate(-90,100,100)" d="m100.5 119.12v-38.234c0.09 0.0315 0.19 0.0659 0.298 0.1029 0.632 0.217 1.561 0.5266 2.75 0.8983 2.38 0.7432 5.804 1.7348 9.988 2.7301 8.365 1.99 19.78 3.9978 31.961 4.06 14.224 0.0727 28.373-1.0542 38.696-2.1554 8.068-0.8607 15.307 5.3942 15.307 13.482 0 8.0871-7.239 14.342-15.307 13.481-10.323-1.101-24.472-2.228-38.696-2.155-12.181 0.062-23.596 2.07-31.961 4.06-4.184 0.995-7.608 1.987-9.988 2.73-1.189 0.372-2.118 0.681-2.75 0.898-0.108 0.037-0.208 0.072-0.298 0.103z" stroke="#000" stroke-opacity=".12" style="filter:url(#filter1_d_1595_99338)"/>
</g><g filter="url(#filter2_ii_1595_99338)">
<circle cx="100" cy="100" r="27" fill="#d9d9d9"/>
</g><path d="m123 100c0 12.703-10.297 23-23 23-12.702 0-23-10.297-23-23 0-12.702 10.298-23 23-23 12.703 0 23 10.298 23 23z" fill="#000" fill-opacity=".05" style="filter:url(#filter0_d_1595_99338)"/><g filter="url(#filter3_i_1595_99338)">
<path d="m123 100c0 12.703-10.297 23-23 23-12.702 0-23-10.297-23-23 0-12.702 10.298-23 23-23 12.703 0 23 10.298 23 23z" fill="#1c943e" tb:tag="background"/>
</g><path d="m122 100c0 12.15-9.85 22-22 22s-22-9.85-22-22 9.8497-22 22-22c12.15 0 22 9.8497 22 22z" stroke="#fff" stroke-width="2"/><path d="m97.283 90.614c0-0.647-0.6112-1.1214-1.2155-0.8901-4.133 1.5825-7.0677 5.5867-7.0677 10.276 0 6.0751 4.9249 11 11 11 6.075 0 11-4.925 11-11 0-4.5642-2.78-8.4791-6.739-10.144-0.609-0.2563-1.243 0.2209-1.243 0.882 0 0.4223 0.268 0.7938 0.655 0.9649 3.18 1.4098 5.398 4.5944 5.398 8.2973 0 5.0101-4.061 9.0711-9.071 9.0711s-9.0714-4.061-9.0714-9.0711c0-3.8068 2.3447-7.0658 5.6688-8.4117 0.4019-0.1628 0.6858-0.541 0.6858-0.9746z" clip-rule="evenodd" fill="#fff" fill-rule="evenodd"/><path d="m99.514 87.637c0-0.3519 0.2852-0.6372 0.6373-0.6372 0.352 0 0.637 0.2853 0.637 0.6372v10.401c0 0.3519-0.285 0.6372-0.637 0.6372-0.3521 0-0.6373-0.2853-0.6373-0.6372z" fill="#fff"/><rect transform="rotate(-90)" x="-200" y="50" width="200" height="100" fill="#000" fill-opacity="0" stroke-width="0" tb:tag="clickArea"/>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

949
application/src/main/data/json/system/scada_symbols/vertical-inline-flow-meter.svg

@ -0,0 +1,949 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="200" height="400" fill="none" version="1.1" viewBox="0 0 200 400">
<tb:metadata xmlns=""><![CDATA[{
"title": "Vertical inline flow meter",
"description": "Vertical inline flow meter component used to display flow related value and render various states. Includes pipe fluid and leak visualizations.",
"searchTags": [
"meter",
"flow meter"
],
"widgetSizeX": 1,
"widgetSizeY": 2,
"tags": [
{
"tag": "background",
"stateRenderFunction": "var value = ctx.values.value;\nvar colorProcessor = ctx.properties.backgroundColor;\ncolorProcessor.update(value);\nvar fill = colorProcessor.color;\nelement.attr({fill: fill});",
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'displayClick');"
}
}
},
{
"tag": "border",
"stateRenderFunction": "var value = ctx.values.value;\nvar colorProcessor = ctx.properties.defaultBorderColor;\nif (ctx.values.critical) {\n colorProcessor = ctx.properties.criticalBorderColor;\n} else if (ctx.values.warning) {\n colorProcessor = ctx.properties.warningBorderColor;\n} else if (value) {\n colorProcessor = ctx.properties.activeBorderColor;\n}\ncolorProcessor.update(value);\nvar fill = colorProcessor.color;\nelement.attr({fill: fill});\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.animate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetAnimation(element);\n }\n}",
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'displayClick');"
}
}
},
{
"tag": "broken",
"stateRenderFunction": "var broken = ctx.values.broken;\nif (broken) {\n element.show();\n} else {\n element.hide();\n}",
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'displayClick');"
}
}
},
{
"tag": "fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\nvar flow = ctx.values.flow;\nvar flowDirection = ctx.values.flowDirection;\n\nvar elementFluid = element.remember('fluid');\nvar elementFlow = null;\nvar elementFlowDirection = null;\n\nif (fluid !== elementFluid) {\n element.remember('fluid', fluid);\n elementFlow = null;\n elementFlowDirection = null;\n} else {\n elementFlow = element.remember('flow');\n elementFlowDirection = element.remember('flowDirection');\n}\n\nvar liquidPattern = ctx.svg.defs().findOne('pattern#liquid');\nif (liquidPattern) {\n liquidPattern.id(ctx.api.generateElementId());\n element.fill(liquidPattern);\n} else {\n liquidPattern = element.reference('fill');\n}\n\nif (fluid) {\n element.show();\n if (flow !== elementFlow) {\n element.remember('flow', flow);\n if (flow) {\n element.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n } else {\n if (liquidPattern) {\n ctx.api.resetAnimation(liquidPattern);\n }\n }\n } else if (flow && elementFlowDirection !== flowDirection) {\n element.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n }\n if (flow && liquidPattern) {\n liquidPattern.timeline().speed(ctx.values.flowAnimationSpeed);\n }\n} else {\n if (liquidPattern) {\n ctx.api.resetAnimation(liquidPattern);\n }\n element.hide();\n}\n\nfunction animateFlow(liquidPattern, forwardElseReverse) {\n if (liquidPattern) {\n ctx.api.resetAnimation(liquidPattern);\n var deltaX = forwardElseReverse ? 172 : -172;\n liquidPattern.animate(1000).ease('-').relative(deltaX, 0).loop();\n }\n}",
"actions": null
},
{
"tag": "fluid-background",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.fluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
},
{
"tag": "value",
"stateRenderFunction": "var value = ctx.values.value;\nctx.api.text(element, value.toFixed(0));\n",
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'displayClick');"
}
}
},
{
"tag": "valueUnits",
"stateRenderFunction": "var units = ctx.properties.valueUnits;\nctx.api.text(element, units || '');\n",
"actions": {
"click": {
"actionFunction": "ctx.api.callAction(event, 'displayClick');"
}
}
}
],
"behavior": [
{
"id": "value",
"name": "{i18n:scada.symbol.value}",
"hint": "{i18n:scada.symbol.flow-meter-value-hint}",
"group": "{i18n:scada.symbol.display}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "GET_TIME_SERIES",
"defaultValue": 0,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "flowRate"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "warning",
"name": "{i18n:scada.symbol.warning-state}",
"hint": "{i18n:scada.symbol.warning-state-hint}",
"group": "{i18n:scada.symbol.display}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.warning}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "critical",
"name": "{i18n:scada.symbol.critical-state}",
"hint": "{i18n:scada.symbol.critical-state-hint}",
"group": "{i18n:scada.symbol.display}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.critical}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "criticalAnimation",
"name": "{i18n:scada.symbol.critical-state-animation}",
"hint": "{i18n:scada.symbol.critical-state-animation-hint}",
"group": "{i18n:scada.symbol.display}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.animation}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "broken",
"name": "{i18n:scada.symbol.broken}",
"hint": "{i18n:scada.symbol.broken-hint}",
"group": "{i18n:scada.symbol.display}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.broken}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "displayClick",
"name": "{i18n:scada.symbol.on-display-click}",
"hint": "{i18n:scada.symbol.on-display-click-hint}",
"group": "{i18n:scada.symbol.display}",
"type": "widgetAction",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": {
"type": "doNothing",
"openInSeparateDialog": false,
"openInPopover": false
}
},
{
"id": "fluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": "{i18n:scada.symbol.pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": "{i18n:scada.symbol.pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": "{i18n:scada.symbol.pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": "{i18n:scada.symbol.pipe}",
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": "{i18n:scada.symbol.pipe}",
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "valueUnits",
"name": "{i18n:scada.symbol.units}",
"type": "units",
"default": "m³/hr",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "medium-width",
"min": null,
"max": null,
"step": null
},
{
"id": "defaultBorderColor",
"name": "{i18n:scada.symbol.default-border-color}",
"type": "color_settings",
"default": {
"type": "constant",
"color": "#4A4848",
"gradient": {
"advancedMode": false,
"gradient": [
"rgba(0, 255, 0, 1)",
"rgba(255, 0, 0, 1)"
],
"gradientAdvanced": [
{
"source": {
"type": "constant"
},
"color": "rgba(0, 255, 0, 1)"
},
{
"source": {
"type": "constant"
},
"color": "rgba(255, 0, 0, 1)"
}
],
"minValue": 0,
"maxValue": 100
},
"rangeList": {
"advancedMode": false,
"range": [],
"rangeAdvanced": []
},
"colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';"
},
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "activeBorderColor",
"name": "{i18n:scada.symbol.active-border-color}",
"type": "color_settings",
"default": {
"type": "constant",
"color": "#1C943E",
"gradient": {
"advancedMode": false,
"gradient": [
"rgba(0, 255, 0, 1)",
"rgba(255, 0, 0, 1)"
],
"gradientAdvanced": [
{
"source": {
"type": "constant"
},
"color": "rgba(0, 255, 0, 1)"
},
{
"source": {
"type": "constant"
},
"color": "rgba(255, 0, 0, 1)"
}
],
"minValue": 0,
"maxValue": 100
},
"rangeList": {
"advancedMode": false,
"range": [],
"rangeAdvanced": []
},
"colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';"
},
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "warningBorderColor",
"name": "{i18n:scada.symbol.warning-border-color}",
"type": "color_settings",
"default": {
"type": "constant",
"color": "#FAA405",
"gradient": {
"advancedMode": false,
"gradient": [
"rgba(0, 255, 0, 1)",
"rgba(255, 0, 0, 1)"
],
"gradientAdvanced": [
{
"source": {
"type": "constant"
},
"color": "rgba(0, 255, 0, 1)"
},
{
"source": {
"type": "constant"
},
"color": "rgba(255, 0, 0, 1)"
}
],
"minValue": 0,
"maxValue": 100
},
"rangeList": {
"advancedMode": false,
"range": [],
"rangeAdvanced": []
},
"colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';"
},
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "criticalBorderColor",
"name": "{i18n:scada.symbol.critical-border-color}",
"type": "color_settings",
"default": {
"type": "constant",
"color": "#D12730",
"gradient": {
"advancedMode": false,
"gradient": [
"rgba(0, 255, 0, 1)",
"rgba(255, 0, 0, 1)"
],
"gradientAdvanced": [
{
"source": {
"type": "constant"
},
"color": "rgba(0, 255, 0, 1)"
},
{
"source": {
"type": "constant"
},
"color": "rgba(255, 0, 0, 1)"
}
],
"minValue": 0,
"maxValue": 100
},
"rangeList": {
"advancedMode": false,
"range": [],
"rangeAdvanced": []
},
"colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';"
},
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "backgroundColor",
"name": "{i18n:scada.symbol.background-color}",
"type": "color_settings",
"default": {
"type": "constant",
"color": "#FFFFFF",
"gradient": {
"advancedMode": false,
"gradient": [
"rgba(0, 255, 0, 1)",
"rgba(255, 0, 0, 1)"
],
"gradientAdvanced": [
{
"source": {
"type": "constant"
},
"color": "rgba(0, 255, 0, 1)"
},
{
"source": {
"type": "constant"
},
"color": "rgba(255, 0, 0, 1)"
}
],
"minValue": 0,
"maxValue": 100
},
"rangeList": {
"advancedMode": false,
"range": [],
"rangeAdvanced": []
},
"colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';"
},
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "fluidColor",
"name": "{i18n:scada.symbol.fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata>
<rect transform="rotate(-90)" x="-386" y="64" width="372" height="72" fill="#fff" tb:tag="pipe-background"/><rect transform="rotate(-90)" x="-386" y="64" width="372" height="72" fill="url(#paint0_linear_1595_101503)" style="fill:url(#paint0_linear_1595_101503)"/><rect transform="rotate(-90)" x="-384.5" y="65.5" width="369" height="69" stroke="#000" stroke-opacity=".12" stroke-width="3"/><rect transform="rotate(-90)" x="-12.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/><rect transform="rotate(-90)" x="-398.5" y="51.5" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/><rect transform="rotate(90)" x="14" y="-136" width="372" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><rect transform="rotate(90)" x="14" y="-136" width="372" height="72" fill="url(#liquid)" stroke-width="0" style="display: none;" tb:tag="fluid"/><defs>
<mask id="path-5-inside-1_1595_102361" fill="#ffffff">
<path d="m300 100c0 55.228-44.772 100-100 100s-100-44.772-100-100 44.772-100 100-100 100 44.772 100 100zm-188 0c0 48.603 39.401 88.004 88.004 88.004s88.004-39.401 88.004-88.004c0-48.604-39.401-88.004-88.004-88.004s-88.004 39.401-88.004 88.004z"/>
</mask>
<linearGradient id="paint1_linear_1595_102361" x1="165.06" x2="182.56" y1="50.125" y2="69.188" gradientTransform="translate(-100,100)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".25" offset="0"/>
<stop stop-opacity=".3" offset="1"/>
</linearGradient>
<linearGradient id="paint2_linear_1595_102361" x1="218.06" x2="235.56" y1="50.125" y2="69.188" gradientTransform="translate(-100,100)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".25" offset="0"/>
<stop stop-opacity=".3" offset="1"/>
</linearGradient>
<linearGradient id="paint0_linear_1595_101503" x1="160.72" x2="160.63" y1="386" y2="458.01" gradientTransform="translate(-450,-322)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<pattern id="liquid" width="172" height="72" patternTransform="translate(14,8)" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<linearGradient id="paint28_linear_1182_32781-5" x1="19.316" x2="21" y1="8.2632" y2="23" gradientTransform="translate(-36,6)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint29_linear_1182_32781-1" x1="148.32" x2="150" y1="8.2632" y2="23" gradientTransform="translate(-165,135)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint30_linear_1182_32781-7" x1="111.32" x2="113" y1="9.2632" y2="24" gradientTransform="translate(-129,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint31_linear_1182_32781-4" x1="32.316" x2="34" y1="51.263" y2="66" gradientTransform="translate(-92,-24)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint32_linear_1182_32781-3" x1="153.32" x2="155" y1="51.263" y2="66" gradientTransform="translate(-213,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint33_linear_1182_32781-1" x1="31.947" x2="33" y1="21.789" y2="31" gradientTransform="translate(-59,7)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint34_linear_1182_32781-4" x1="160.95" x2="162" y1="21.789" y2="31" gradientTransform="translate(-188,136)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint35_linear_1182_32781-6" x1="3.9474" x2="5" y1="32.79" y2="42" gradientTransform="translate(-42,-32)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint36_linear_1182_32781-9" x1="93.158" x2="94" y1="4.6316" y2="12" gradientTransform="translate(-102,86)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint37_linear_1182_32781-4" x1="71.158" x2="72" y1="56.632" y2="64" gradientTransform="translate(-132,12)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint38_linear_1182_32781-2" x1="110.95" x2="112" y1="32.79" y2="42" gradientTransform="translate(-149,75)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint39_linear_1182_32781-2" x1="57.947" x2="59" y1="34.79" y2="44" gradientTransform="translate(-98,20)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint40_linear_1182_32781-6" x1="113.95" x2="115" y1="57.79" y2="67" gradientTransform="translate(-177,53)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint41_linear_1182_32781-4" x1="137.95" x2="139" y1="37.79" y2="47" gradientTransform="translate(-181,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint42_linear_1182_32781-1" x1="74.947" x2="76" y1="16.789" y2="26" gradientTransform="translate(-97,55)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint43_linear_1182_32781-2" x1="125.97" x2="126.5" y1="48.395" y2="53" gradientTransform="translate(-177,76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint44_linear_1182_32781-8" x1="168.97" x2="169.5" y1="44.395" y2="49" gradientTransform="translate(-216,123)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint45_linear_1182_32781-8" x1="56.974" x2="57.5" y1="7.3947" y2="12" gradientTransform="translate(-67,48)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint46_linear_1182_32781-9" x1="95.974" x2="96.5" y1="33.395" y2="38" gradientTransform="translate(-132,61)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint47_linear_1182_32781-2" x1="90.974" x2="91.5" y1="21.395" y2="26" gradientTransform="translate(-115,68)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint48_linear_1182_32781-88" x1="21.974" x2="22.5" y1="38.395" y2="43" gradientTransform="translate(-63,-18)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint49_linear_1182_32781-8" x1="123.97" x2="124.5" y1="21.395" y2="26" gradientTransform="translate(-148,101)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint50_linear_1182_32781-6" x1="85.974" x2="86.5" y1="45.395" y2="50" gradientTransform="translate(-134,39)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint51_linear_1182_32781-8" x1="50.974" x2="51.5" y1="19.395" y2="24" gradientTransform="translate(-73,30)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint52_linear_1182_32781-3" x1="47.974" x2="48.5" y1="49.395" y2="54" gradientTransform="translate(-100,-3)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint53_linear_1182_32781-83" x1="13.158" x2="14" y1="60.632" y2="68" gradientTransform="translate(-78,-50)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint54_linear_1182_32781-33" x1="134.16" x2="135" y1="60.632" y2="68" gradientTransform="translate(-199,71)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint55_linear_1182_32781-8" x1="93.5" x2="95.5" y1="50.5" y2="68" gradientTransform="translate(-154,37)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint84_linear_1182_32781-8" x1="248" x2="248" y1="1.8513e-7" y2="72" gradientTransform="scale(.33333 1)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" offset=".10895"/>
<stop stop-color="#fff" stop-opacity="0" offset=".11331"/>
<stop stop-color="#fff" stop-opacity="0" offset=".88736"/>
<stop stop-color="#727171" offset=".89138"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
</defs><path transform="translate(-100,100)" d="m300 100c0 55.228-44.772 100-100 100s-100-44.772-100-100 44.772-100 100-100 100 44.772 100 100zm-188 0c0 48.603 39.401 88.004 88.004 88.004s88.004-39.401 88.004-88.004c0-48.604-39.401-88.004-88.004-88.004s-88.004 39.401-88.004 88.004z" fill="#4a4848" mask="url(#path-5-inside-1_1595_102361)" stroke="#727171" stroke-width="6" tb:tag="border"/><circle cx="100" cy="200" r="88" fill="#fff" tb:tag="background"/><path d="m35.5 188.36c0-2.1302 1.727-3.8571 3.857-3.8571h121.29c2.13 0 3.857 1.7269 3.857 3.8571v23.286c0 2.13-1.727 3.857-3.857 3.857h-121.29c-2.13 0-3.857-1.727-3.857-3.857z" fill="#4a4848" fill-opacity=".06" tb:tag="border"/><path d="m39.36 183c-2.9408 0-5.3574 2.4165-5.3574 5.3574v23.285c0 2.9408 2.4166 5.3574 5.3574 5.3574h121.29c2.9408 0 5.3574-2.4166 5.3574-5.3574v-23.285c0-2.9409-2.4167-5.3574-5.3574-5.3574zm0 3h121.29c1.3192 0 2.3574 1.0379 2.3574 2.3574v23.285c0 1.3192-1.0382 2.3574-2.3574 2.3574h-121.29c-1.3192 0-2.3574-1.0382-2.3574-2.3574v-23.285c0-1.3195 1.0382-2.3574 2.3574-2.3574z" fill="#4a4848" tb:tag="border"/><circle cx="73.5" cy="159.5" r="12.5" fill="url(#paint1_linear_1595_102361)" style="fill:url(#paint1_linear_1595_102361)"/><circle cx="73.5" cy="159.5" r="12" stroke="#000" stroke-opacity=".12"/><circle cx="126.5" cy="159.5" r="12.5" fill="url(#paint2_linear_1595_102361)" style="fill:url(#paint2_linear_1595_102361)"/><circle cx="126.5" cy="159.5" r="12" stroke="#000" stroke-opacity=".12"/><text x="100.00586" y="202.19141" dominant-baseline="middle" fill="#000000" fill-opacity=".87" text-anchor="middle" style="font-family:Roboto;font-size:24px;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-weight:500" tb:tag="value" xml:space="preserve"><tspan>0</tspan></text><text x="99.617188" y="238.77344" dominant-baseline="middle" fill="#000000" fill-opacity=".87" text-anchor="middle" style="font-family:Roboto;font-size:16px;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-weight:500" tb:tag="valueUnits" xml:space="preserve"><tspan>m³/hr</tspan></text><g transform="translate(-100,100)" style="display: none;" tb:tag="broken">
<circle cx="200" cy="100" r="88" fill="#000" fill-opacity=".24" style=""/>
<path d="m253.92 84.931c-0.174 0.5228-0.309 1.1931-0.577 1.6622-0.577 1.6623-1.583 3.2037-2.991 4.1417-0.697 0.3484-1.488 0.6431-2.226 0.8439-1.971 0.6161-3.848 1.2858-5.725 1.9555-1.636 0.6832-3.513 1.3529-5.122 0.682 0.013-0.2414-0.027-0.3888-0.013-0.6302-2.977 0.4146-0.922 2.811-8.792 8.1516-11.067 2.815-27.05 6.112-29.128 6.044-0.724-0.041-1.408 0.066-2.038 0.08-1.113-0.014-2.172-0.122-3.218-0.471-0.764-0.188-1.515-0.617-2.225-0.899-2.038-0.792-4.183-1.396-6.448-1.571 0.603 0.47 1.206 0.939 1.809 1.409 0 0 0.121 0.442 0.081 0.295 0.201-0.134 0.482 0.027 0.616 0.228-0.751 0.442-1.502 0.884-2.199 1.232-3.647 2.024-7.389 3.993-11.304 5.614 3.875-0.897 7.683-2.33 11.411-4.058 0.845-0.389 1.595-0.831 2.574-1.018 2.306-0.549 4.666 0.551 6.824 1.785l0.094 0.054c0.187 0.107 0.469 0.268 0.455 0.509 0.081 0.295-0.228 0.617-0.483 0.845-1.368 1.085-2.642 2.225-3.916 3.364-1.582 1.461-2.883 3.082-4.56 4.489-1.475 1.274-3.084 2.346-4.64 3.324-0.75 0.442-1.408 0.938-2.239 1.085-0.885 0.241-1.756 0.241-2.668 0.093-1.153-0.161-2.212-0.269-3.311-0.524-6.314-1.37-17.674 5.248-23.787 2.873 2.44 1.395 5.027 2.75 7.466 4.145-3.66 0.522-7.133 2.022-10.7 3.469-0.992 0.428-1.984 0.857-3.111 1.085-0.884 0.241-1.903 0.281-2.775 0.28-1.743 0-3.526-0.148-4.973-1.101 0.831 0.724 1.769 1.261 2.667 1.65-0.255 0.228-0.563 0.55-0.818 0.778-2.146 2.01-4.198 4.074-6.29 5.99 1.14-0.469 2.199-1.232 3.165-2.05 1.274-1.139 2.226-2.587 3.768-3.324 1.743-0.87 3.808-0.561 5.806-0.789 3.164-0.307 6.154-1.834 9.131-3.12s5.228-3.036 10.264-4.758c3.63-1.241 9.543-3.131 12.411-2.486 0.912 0.148 1.864 0.443 2.762 0.832 0.617 0.228 1.18 0.55 1.836 0.926 0.751 0.429 1.408 0.805 2.212 1.14 0.469 0.268 0.992 0.443 1.475 0.47 0.576 0.08 1.22-0.174 1.716-0.388 1.783-0.724 3.567-1.447 5.35-2.17-0.295 0.08-0.737 0.2-1.032 0.281-2.36 0.642-4.666 1.191-6.972 0.869-0.483-0.027-1.006-0.202-1.327-0.51-0.094-0.054-0.188-0.107-0.134-0.201-0.362-0.456-0.214-1.368 0.322-1.435 0.282-0.71 1.046-1.394 1.556-1.849 4.157-3.351 8.408-6.647 12.606-9.85 0.456-0.362 0.912-0.724 1.555-0.978 0.644-0.255 1.18-0.322 1.81-0.335 4.572-0.374 19.939-3.129 23.095-4.335 5.049-1.929 5.348-0.685 7.45-3.208 0.335 0.067 7.054-8.7036 7.39-8.6365 2.252 0.4164 4.343 1.9858 6.099 3.4875 1.45 1.565-2.243 6.524-2.272 7.287-0.032 0.867-18.866 17.201-20.503 18.31-0.751 0.442-2.24 0.274-2.533 0.546-0.103 0.096-0.557 1.991 0.264 0.492-0.764-0.029-8.29 2.174-13.599 1.877-0.482-0.027-1.059-0.108-1.582-0.282-0.335-0.067-0.616-0.228-0.844-0.483-0.094-0.054-0.134-0.201-0.174-0.349-0.04-0.147 0.107-0.188 0.161-0.281 2.803-3.378 6.276-6.621 7.203-11.072-0.201 0.134-0.255 0.228-0.456 0.362-0.054 0.094-0.201 0.134-0.308 0.321-1.744 1.743-3.085 4.089-5.003 5.482-0.858 0.63-1.81 1.206-2.441 2.091-0.791 1.166-1.033 2.895-2.052 3.807-0.51 0.455-1.207 0.804-1.797 0.964-1.623 0.442-3.419 0.535-5.001 1.125-0.792 0.295-1.596 0.831-2.387 1.125-0.148 0.04-0.201 0.134-0.349 0.174-1.783 0.724-7.731 4.384-9.661 4.276 1.689 0.095 7.288-3.392 8.963-3.056-1.797 1.836-3.54 3.579-5.525 5.307 1.904-1.152 3.674-2.505 5.311-4.06 0.818-0.777 1.636-1.555 2.588-2.131 1.85-1.058 4.451-0.816 5.51 1.034 0.134 0.202 0.268 0.403 0.254 0.644 0.415 1.234 0.241 2.628 0.12 3.928-0.551 3.794-1.236 7.387-2.029 11.168-0.591 2.775-1.275 5.496-2.764 7.882-0.108 0.188-0.309 0.322-0.496 0.214 0.442 0.751 0.106 1.555-0.417 2.252-0.429 0.751-1.046 1.394-1.569 2.091-0.47 0.604-0.939 1.207-1.409 1.81-2.239 2.828-4.573 5.602-7.135 8.122 1.556-0.978 3.031-2.251 4.184-3.833 0.886-1.112 1.583-2.332 2.509-3.297 0.979-1.059 2.226-1.715 3.205-2.774 0.416-0.51 0.885-1.113 1.395-1.568 0.066 1.407 0.039 2.761 0.106 4.169 0.201-1.005 0.403-2.011 0.604-3.016 0.215-1.247 0.524-2.44 0.832-3.633 0.94-2.949 2.885-5.697 3.395-8.767 0.014-0.241 0.027-0.483 0.041-0.724-0.201 0.134-0.309 0.322-0.51 0.456-0.04-0.148 0.067-0.336 0.027-0.483 0.055-2.708 0.646-5.483 1.371-8.057 0.563-2.293 1.235-4.773 2.965-6.274 0.509-0.455 1.113-0.857 1.622-1.313 0.51-0.456 0.845-1.26 0.738-1.944 3.178 0.323 6.66 1.265 9.329-0.571 2.065-1.434 4.621-0.818 5.075-2.713-0.792 0.735 1.103 1.189 2.659 0.483s23.915-14.808 24.838-26.835c-0.911-1.8908-2.519-3.4332-4.316-4.2114-0.094-0.0537-0.094-0.0537-0.187-0.1073 2.923-1.1923 5.993-2.4246 8.796-4.0593 0.805-0.536 1.703-1.0184 2.28-1.8092 0.671-1.6086 0.832-3.633 0.94-5.5635z" fill="#5c5a5a" style=""/>
<path d="m221.07 127.62c-1.005-0.202-1.526-0.498-2.558-0.217-2.065 0.562-2.591 1.325-4.575 2.183-2.226 0.844-3.364 0.839-5.79 0.946-1.261 0.026-2.467-0.041-3.62-0.203 0.187 0.979-1.8 2.31-2.564 2.993-0.764 0.684-1.717 1.26-2.106 2.158-0.442 0.992-0.309 2.065-0.416 3.124-0.162 1.153-0.658 2.238-1.061 3.378-0.711 2.332-0.605 4.759-0.351 7.146 0.054-0.094 0.054-0.094 0.108-0.188 0.054-2.708 0.645-5.483 1.37-8.057 0.564-2.293 1.235-4.773 2.965-6.274 0.51-0.455 1.113-0.857 1.623-1.313 0.509-0.456 2.054-1.666 1.946-2.349 3.178 0.322 5.388 1.065 8.056-0.771 2.066-1.434 2.736-1.244 5.15-1.98 0.402-0.268 1.14-0.469 1.823-0.576z" fill="#8b8b8b" style=""/>
<path d="m210.29 116.29c-0.201 0.134-0.255 0.228-0.456 0.362-0.054 0.094-0.201 0.134-0.309 0.321-0.053 0.094-0.053 0.094-0.053 0.094-0.282 0.711-0.564 1.421-1.087 2.118-0.322 0.563-0.791 1.166-1.207 1.676-1.771 2.225-4.104 4.128-5.365 6.768 0.656 0.376 1.313 0.751 1.984 0.886-0.336-0.067-0.617-0.228-0.845-0.483-0.094-0.054-0.134-0.201-0.174-0.349-0.04-0.147 0.107-0.187 0.161-0.281 3.044-3.364 6.424-6.661 7.351-11.112z" fill="#8b8b8b" style=""/>
<path d="m196.36 131.72c-0.751-0.429-1.756-0.631-2.682-0.537-0.925 0.094-1.917 0.522-2.896 0.71-0.147 0.04-0.201 0.134-0.348 0.174-1.784 0.723-7.024 3.988-8.955 3.88 1.69 0.094 6.581-2.996 8.257-2.66-1.797 1.836-3.782 3.616-5.766 5.345 1.904-1.152 3.915-2.544 5.551-4.099 0.818-0.777 1.636-1.554 2.588-2.131 1.851-1.058 4.452-0.816 5.51 1.035 0.134 0.201 0.268 0.402 0.255 0.643-0.067-0.536-0.188-0.978-0.456-1.381-0.174-0.348-0.589-0.711-1.058-0.979z" fill="#8b8b8b" style=""/>
<path d="m198.9 148.65c-0.832 0.147-1.556 0.978-1.784 1.595-0.403 1.139-0.711 2.332-1.074 3.619-0.349 1.046-0.604 2.145-1.047 3.137-1.153 2.453-3.058 4.477-5.137 6.152 0 0-0.053 0.094-0.147 0.04-2.24 2.828-4.574 5.603-7.135 8.122 1.555-0.978 3.03-2.251 4.184-3.832 0.885-1.113 1.583-2.333 2.508-3.298 0.979-1.059 2.226-1.715 3.205-2.774 0.416-0.509 0.886-1.112 1.395-1.568 0.067 1.408 0.039 2.762 0.106 4.17 0.201-1.006 0.403-2.011 0.604-3.017 0.215-1.247 0.524-2.44 0.833-3.633 1.181-2.935 2.978-5.643 3.489-8.713z" fill="#8b8b8b" style=""/>
<path d="m233.47 101.11c-0.266 0.482-0.521 1.116-0.87 1.529-0.381 0.952-0.775 1.751-1.557 2.506-0.92 0.92-2.089 1.63-3.2 2.105-2 0.856-4.12 1.185-6.24 1.514-0.984 0.158-1.955 0.468-2.584 1.211 0.152-0.013 0.152-0.013 0.305-0.026-0.083-0.069-0.083-0.069-0.165-0.139 3.091-0.64 6.335-1.291 9.389-2.388 0.888-0.38 1.86-0.691 2.571-1.363 1.365-1.11 1.893-3.071 2.351-4.949z" fill="#8b8b8b" style=""/>
<path d="m211.4 113.38c-0.858-0.241-1.783-0.148-2.641-0.39-0.911-0.147-1.716-0.483-2.48-0.671-1.488-0.228-2.909 0.08-4.303-0.095-0.818-0.094-1.73-0.242-2.601-0.242-1.555 0.106-2.923 1.192-4.09 2.143-4.412 3.579-8.771 7.063-13.183 10.641-0.711 0.59-1.582 1.461-1.247 2.399 0.174 0.349 0.495 0.658 0.777 0.818-0.094-0.053-0.188-0.107-0.134-0.201-0.362-0.456-0.214-1.367 0.322-1.434 0.282-0.711 1.046-1.394 1.556-1.85 4.157-3.35 8.408-6.647 12.606-9.849 0.456-0.362 0.912-0.724 1.555-0.979 0.644-0.254 1.18-0.321 1.81-0.334 4.572-0.374 9.426-0.587 13.796 0.916 0.094 0.054 0.188 0.108 0.281 0.161 0 0-0.053 0.094-0.107 0.188 0.335 0.067 0.63-0.013 0.965 0.054-0.938-0.537-1.876-1.073-2.882-1.275z" fill="#8b8b8b" style=""/>
<path d="m190.5 107.58c-1.474-0.47-3.097-0.028-4.665 0.32-0.148 0.04-0.148 0.04-0.295 0.08-3.648 2.023-7.389 3.993-11.304 5.614 3.875-0.897 7.683-2.33 11.41-4.059 0.845-0.388 1.596-0.83 2.575-1.018 2.306-0.549 4.665 0.552 6.823 1.786-0.321-0.309-0.884-0.631-1.072-0.738-0.563-0.322-1.032-0.59-1.595-0.912-0.55-0.563-1.113-0.885-1.877-1.073z" fill="#8b8b8b" style=""/>
<path d="m190.69 127.59c-0.295 0.08-0.737 0.2-1.032 0.281-0.054 0.094-0.201 0.134-0.201 0.134-0.845 0.388-1.69 0.777-2.481 1.071-1.622 0.442-2.855 0.544-4.37-0.073-0.804-0.336-2.012-1.431-2.763-1.86-2.158-1.234-4.704-1.101-7.05-1.571-2.105-0.456-6.694 2.521-9.014 3.199-2.32 0.677-2.716 1.044-4.313 1.765-2.56 1.156-2.575 1.018-3.862 1.527-1.73 0.63-3.526 0.723-5.256 1.353-1.14 0.469-2.199 1.232-3.285 1.607-1.784 0.724-3.808 0.562-5.658 0.749-0.979 0.188-1.958 0.375-2.803 0.764-2.146 2.01-4.198 4.074-6.29 5.99 1.14-0.469 2.2-1.232 3.165-2.05 1.274-1.139 2.227-2.587 3.769-3.324 1.743-0.87 3.807-0.561 5.805-0.789 3.164-0.307 6.155-1.834 9.131-3.12 2.977-1.286 5.031-2.601 8.208-2.278 3.03 0.363 10.175-4.776 13.044-4.131 0.911 0.147 1.863 0.443 2.761 0.832 0.617 0.228 1.18 0.55 1.837 0.925 0.75 0.43 1.407 0.805 2.211 1.141 0.469 0.268 0.992 0.443 1.475 0.47 0.576 0.08 1.22-0.174 1.716-0.389 1.783-0.723 3.567-1.446 5.256-2.223z" fill="#8b8b8b" style=""/>
<path d="m186.97 26.632c0.126 0.5365 0.199 1.2163 0.423 1.7079 0.424 1.7079 1.286 3.3344 2.603 4.3966 0.662 0.4103 1.423 0.7757 2.139 1.0428 1.907 0.7927 3.716 1.6304 5.524 2.468 1.567 0.8291 3.376 1.6668 5.039 1.1449 8e-3 -0.2415 0.062-0.3847 0.07-0.6263 2.927 0.6836 6.129 0.4094 9.061-0.4546 2.003-0.5582 4.023-1.5995 6.099-1.478 0.724 0.0255 1.395 0.1943 2.022 0.2647 1.109 0.0875 2.174 0.0766 3.247-0.1758 0.778-0.1177 1.564-0.4769 2.297-0.6929 2.102-0.6031 4.293-1.0096 6.565-0.9779-0.644 0.4126-1.287 0.8253-1.93 1.2379 0 0-0.161 0.4297-0.107 0.2865-0.188-0.1517-0.483-0.017-0.635 0.1711 0.708 0.5086 1.415 1.0173 2.078 1.4276 3.448 2.3465 6.995 4.6481 10.747 6.6183-3.778-1.2456-7.44-3.0192-10.995-5.0792-0.806-0.4638-1.513-0.9724-2.471-1.248-2.247-0.7563-4.696 0.1247-6.958 1.1575l-0.098 0.045c-0.197 0.0898-0.491 0.2245-0.5 0.466-0.107 0.2865 0.171 0.6348 0.404 0.8849 1.264 1.2054 2.429 2.4557 3.594 3.706 1.443 1.5987 2.591 3.3321 4.133 4.8858 1.353 1.4021 2.858 2.616 4.318 3.7316 0.708 0.5086 1.317 1.0621 2.132 1.2843 0.859 0.3205 1.727 0.3995 2.648 0.3352 1.163-0.0558 2.227-0.0666 3.345-0.2207 6.413-0.7898 17.124 6.8335 23.427 5.0242 1.601-0.343 3.48 0 1.601 2.1643-2.508 1.8804-2.507 2.5072-2.507 6.268 0.949 0.5172-2.508 4.3877-2.508 6.2681-0.626 1.2536 0.473 1.1803 1.34 1.2592 1.736 0.1579 3.525 0.1726 5.054-0.6442-0.894 0.6457-1.877 1.0948-2.807 1.4006 0.233 0.25 0.511 0.5984 0.744 0.8485 1.954 2.1971 3.81 4.4391 5.719 6.5379-1.092-0.5705-2.078-1.4276-2.965-2.3295-1.165-1.2503-1.982-2.7785-3.451-3.6525-1.656-1.0258-3.74-0.9058-5.709-1.3137-3.123-0.5938 4.377-8.5748 1.529-10.126-2.847-1.5514-4.93-3.4988-9.789-5.6716-3.502-1.5658-9.218-3.9854-12.133-3.6044-0.922 0.0642-1.896 0.2717-2.826 0.5776-0.635 0.1711-1.225 0.4405-1.913 0.7548-0.787 0.3593-1.475 0.6736-2.306 0.9345-0.492 0.2245-1.029 0.3507-1.512 0.3337-0.581 0.0279-1.199-0.2841-1.673-0.5427-1.711-0.8825-3.421-1.7651-5.131-2.6476 0.286 0.1068 0.716 0.2671 1.003 0.3739 2.291 0.8547 4.538 1.611 6.864 1.4995 0.483 0.017 1.019-0.1092 1.368-0.3871 0.098-0.0449 0.196-0.0898 0.151-0.1881 0.402-0.4212 0.338-1.3425-0.19-1.4578-0.216-0.7332-0.915-1.4834-1.381-1.9835-3.836-3.7145-7.77-7.3841-11.658-10.955-0.422-0.4018-0.843-0.8036-1.46-1.1156-0.618-0.3119-1.146-0.4273-1.773-0.4977-4.519-0.7881-9.332-1.4414-13.821-0.342-0.099 0.0449-0.197 0.0898-0.295 0.1347 0 0 0.045 0.0983 0.09 0.1967-0.34 0.0363-0.627-0.0705-0.967-0.0341-2.28 0.2099-4.505 1.5825-6.39 2.9188-1.588 1.4265-2.241 2.2161-2.282 2.9793-0.046 0.8664-0.208 3.8116 1.321 5.0646 0.707 0.5086 2.206 0.477 2.473 0.7741 0.094 0.1049 0.374 2.0333-0.308 0.4662 0.763 0.0407 8.058 2.9182 13.372 3.1055 0.483 0.017 1.065-0.0108 1.601-0.137 0.34-0.0364 0.635-0.1712 0.885-0.4042 0.098-0.0449 0.152-0.1881 0.205-0.3313 0.054-0.1433-0.09-0.1967-0.135-0.295-2.484-3.6185-5.648-7.1643-6.166-11.681 0.188 0.1518 0.233 0.2501 0.421 0.4018 0.045 0.0983 0.188 0.1518 0.278 0.3484 1.578 1.8936 2.7 4.3517 4.483 5.914 0.798 0.7052 1.694 1.3656 2.241 2.3039 0.682 1.2333 0.766 2.9775 1.698 3.9778 0.466 0.5001 1.129 0.9104 1.701 1.1241 1.576 0.5876 3.357 0.8438 4.879 1.5746 0.761 0.3654 1.513 0.9724 2.274 1.3378 0.143 0.0534 0.188 0.1517 0.332 0.2051 1.71 0.8826 7.3 5.0687 9.232 5.1368-1.691-0.0596-6.949-4.0406-8.649-3.8586 1.623 1.9919 3.201 3.8856 5.02 5.7877-1.791-1.3207-3.431-2.8296-4.919-4.5266-0.744-0.8485-1.488-1.697-2.384-2.3573-1.746-1.2224-4.358-1.2178-5.581 0.5288-0.152 0.1882-0.303 0.3763-0.312 0.6178-0.526 1.1908-0.478 2.5951-0.476 3.9012 0.204 3.8284 0.559 7.4686 1.004 11.306 0.336 2.8172 0.771 5.5896 2.037 8.1011 0.089 0.1966 0.278 0.3483 0.474 0.2585-0.508 0.7077-0.247 1.5391 0.21 2.2808 0.359 0.7866 0.915 1.4833 1.373 2.225 0.412 0.6433 0.825 1.2867 1.238 1.93 1.973 3.0201 4.045 5.9953 6.367 8.7374-1.46-1.1156-2.814-2.5176-3.819-4.1976-0.78-1.1883-1.364-2.4665-2.198-3.5117-0.878-1.1434-2.061-1.9106-2.939-3.0541-0.368-0.545-0.781-1.1884-1.247-1.6885-0.194 1.3959-0.29 2.7469-0.484 4.1427-0.109-1.0196-0.219-2.0392-0.328-3.0588-0.1-1.2611-0.299-2.4774-0.498-3.6936-0.668-3.0225-2.355-5.9357-2.584-9.0394 8e-3 -0.2416 0.017-0.4831 0.025-0.7247 0.189 0.1518 0.278 0.3484 0.467 0.5001 0.053-0.1432-0.037-0.3398 0.017-0.4831 0.192-2.7019-0.145-5.5192-0.632-8.1483-0.353-2.3342-0.796-4.865-2.383-6.5171-0.466-0.5001-1.03-0.9553-1.496-1.4554-0.466-0.5002-0.727-1.3316-0.558-2.0029-3.194 0.0326-6.748 0.6536-9.238-1.4173-1.927-1.6157-4.528-1.2346-4.808-3.163 0.723 0.8039-1.206 1.0837-2.692 0.2391-1.485-0.8447-2.114-7.5219-0.981-9.4652 1.079-1.8 2.821-3.1897 4.68-3.8013 0.099-0.0449 0.099-0.0449 0.197-0.0898-2.803-1.4531-5.748-2.9597-8.391-4.8424-0.752-0.607-1.603-1.169-2.106-2.009-0.521-1.663-0.498-3.6937-0.43-5.6261z" fill="#5c5a5a" style=""/>
<path d="m194.49 52.611c1.02-0.1092 1.565-0.3571 2.568 0.0168 2.005 0.7478 2.459 1.5554 4.357 2.5897 2.14 1.0428 3.274 1.1419 5.681 1.4686 1.252 0.1409 2.46 0.1835 3.623 0.1277-0.276 0.9577 1.582 2.4634 2.281 3.2135 0.699 0.7502 1.595 1.4106 1.9 2.3404 0.351 1.0281 0.12 2.0841 0.131 3.1486 0.056 1.1628 0.452 2.2893 0.749 3.4606 0.496 2.3876 0.17 4.7946-0.3 7.1481-0.045-0.0983-0.045-0.0983-0.09-0.1966 0.192-2.7019-0.144-5.5192-0.632-8.1484-0.353-2.3341-0.796-4.8649-2.382-6.517-0.466-0.5002-1.031-0.9554-1.497-1.4555s-1.894-1.8455-1.725-2.5168c-3.193 0.0326-5.462 0.5706-7.952-1.5003-1.926-1.6157-2.612-1.4871-4.948-2.4401-0.376-0.3035-1.093-0.5706-1.764-0.7393z" fill="#8b8b8b" style=""/>
<path d="m206.25 42.312c0.188 0.1518 0.233 0.2501 0.421 0.4018 0.045 0.0983 0.188 0.1518 0.278 0.3484 0.045 0.0983 0.045 0.0983 0.045 0.0983 0.216 0.7332 0.432 1.4663 0.889 2.208 0.27 0.5899 0.682 1.2333 1.05 1.7783 1.561 2.3767 3.712 4.484 4.728 7.2285-0.689 0.3144-1.377 0.6287-2.057 0.7015 0.34-0.0364 0.635-0.1711 0.885-0.4042 0.099-0.0449 0.152-0.1881 0.205-0.3313 0.054-0.1432-0.089-0.1967-0.134-0.295-2.726-3.627-5.792-7.2177-6.31-11.734z" fill="#8b8b8b" style=""/>
<path d="m218.73 58.943c0.786-0.3592 1.806-0.4684 2.719-0.2911s1.862 0.6944 2.819 0.97c0.144 0.0534 0.189 0.1517 0.332 0.2051 1.71 0.8826 6.632 4.6101 8.564 4.6782-1.691-0.0596-6.281-3.5819-7.98-3.4 1.622 1.992 3.437 3.9459 5.256 5.8481-1.791-1.3208-3.668-2.8899-5.156-4.5869-0.744-0.8485-1.488-1.697-2.384-2.3574-1.746-1.2224-4.358-1.2177-5.581 0.5289-0.151 0.1881-0.303 0.3762-0.312 0.6178 0.116-0.528 0.276-0.9577 0.579-1.334 0.206-0.3313 0.652-0.6542 1.144-0.8787z" fill="#8b8b8b" style=""/>
<path d="m214.65 75.569c0.814 0.2222 1.46 1.1156 1.631 1.7505 0.297 1.1713 0.496 2.3875 0.74 3.7021 0.252 1.073 0.407 2.191 0.757 3.2191 0.926 2.5478 2.639 4.7364 4.556 6.5937 0 0 0.045 0.0983 0.144 0.0534 1.973 3.0201 4.045 5.9953 6.367 8.7374-1.46-1.1156-2.814-2.5176-3.819-4.1976-0.78-1.1884-1.364-2.4665-2.198-3.5117-0.878-1.1434-2.061-1.9106-2.939-3.0541-0.368-0.545-0.781-1.1884-1.247-1.6885-0.194 1.3959-0.29 2.7468-0.484 4.1427-0.109-1.0196-0.219-2.0392-0.328-3.0588-0.1-1.2612-0.299-2.4774-0.498-3.6937-0.909-3.0309-2.453-5.8907-2.682-8.9945z" fill="#8b8b8b" style=""/>
<path d="m186.97 26.632c0.126 0.5365 0.199 1.2162 0.424 1.7078 0.109 1.0196 0.272 1.896 0.819 2.8343 0.637 1.135 1.569 2.1352 2.51 2.8939 1.693 1.3657 3.645 2.2567 5.597 3.1478 0.904 0.4188 1.755 0.9808 2.159 1.8657-0.143-0.0534-0.143-0.0534-0.287-0.1068 0.099-0.0449 0.099-0.0449 0.197-0.0898-2.803-1.4531-5.748-2.9596-8.391-4.8424-0.752-0.607-1.603-1.169-2.106-2.009-1.013-1.4384-0.99-3.4691-0.922-5.4015z" fill="#8b8b8b" style=""/>
<path d="m205.07 38.684c0.876-0.1626 1.789 0.0146 2.666-0.148 0.921-0.0642 1.752-0.3251 2.53-0.4428 1.503-0.0922 2.891 0.3437 4.295 0.2964 0.823-0.0194 1.744-0.0836 2.612-0.0047 1.539 0.2477 2.803 1.4531 3.878 2.5068 4.068 3.9645 8.092 7.8308 12.16 11.795 0.655 0.6519 1.443 1.5987 1.025 2.503-0.206 0.3313-0.554 0.6093-0.849 0.744 0.098-0.0449 0.197-0.0898 0.152-0.1881 0.402-0.4212 0.337-1.3425-0.191-1.4578-0.216-0.7332-0.915-1.4834-1.381-1.9835-3.835-3.7145-7.769-7.3841-11.658-10.955-0.421-0.4018-0.842-0.8036-1.46-1.1155-0.618-0.312-1.146-0.4274-1.772-0.4978-4.519-0.7881-9.333-1.4414-13.822-0.342-0.098 0.0449-0.196 0.0898-0.295 0.1347 0 0 0.045 0.0983 0.09 0.1967-0.34 0.0364-0.626-0.0705-0.966-0.0341 0.983-0.449 1.966-0.8981 2.986-1.0072z" fill="#8b8b8b" style=""/>
<path d="m226.76 35.435c1.511-0.3337 3.086 0.2539 4.617 0.7431 0.143 0.0534 0.143 0.0534 0.286 0.1069 3.449 2.3465 6.995 4.6481 10.747 6.6183-3.777-1.2456-7.439-3.0192-10.994-5.0793-0.806-0.4637-1.514-0.9723-2.471-1.2479-2.247-0.7564-4.697 0.1247-6.958 1.1575 0.348-0.2779 0.938-0.5474 1.135-0.6372 0.59-0.2694 1.081-0.4939 1.671-0.7633 0.599-0.511 1.189-0.7804 1.967-0.8981z" fill="#8b8b8b" style=""/>
<path d="m224.75 55.351c0.287 0.1068 0.716 0.2671 1.003 0.3739 0.045 0.0984 0.188 0.1518 0.188 0.1518 0.806 0.4637 1.612 0.9274 2.373 1.2928 1.575 0.5876 2.794 0.8009 4.358 0.3239 0.832-0.2609 2.135-1.2416 2.921-1.6008 2.262-1.0328 4.785-0.6681 7.164-0.9228 2.137-0.2633 6.436 3.1194 8.685 4.0047 2.249 0.8854 2.611 1.2874 4.136 2.1507 2.443 1.3835 2.471 1.248 3.706 1.8719 1.666 0.7843 2.494 0.8934 3.121 2.7738 0 2.5072-3.135 5.6324-3.135 8.1485 1.086 1.4326 1.873 0.6419 3.699 0.9965 0.957 0.2756 1.915 0.5512 2.721 1.0149 1.954 2.1971 3.81 4.4392 5.719 6.538-1.093-0.5706-2.078-1.4276-2.965-2.3295-1.165-1.2503-1.982-2.7786-3.451-3.6526-1.657-1.0258-3.741-0.9057-5.71-1.3137-3.123-0.5938 4.157-9.3207 1.31-10.872-2.848-1.5515-4.774-3.0474-7.967-3.0148-3.05 0.086-9.698-5.6815-12.614-5.3005-0.921 0.0643-1.896 0.2718-2.825 0.5776-0.635 0.1711-1.225 0.4405-1.913 0.7548-0.787 0.3593-1.475 0.6736-2.307 0.9345-0.491 0.2245-1.028 0.3508-1.511 0.3337-0.581 0.0279-1.199-0.2841-1.674-0.5426-1.71-0.8826-3.42-1.7651-5.032-2.6926z" fill="#8b8b8b" style=""/>
</g><g transform="translate(-1e-4)" style="display: none;" tb:tag="leak">
<path d="m134.05 354.08c-0.101-0.428-0.159-0.97-0.338-1.362-0.338-1.362-1.025-2.66-2.076-3.507-0.529-0.327-1.136-0.619-1.707-0.832-1.521-0.632-2.964-1.301-4.406-1.969-1.25-0.661-2.693-1.329-4.019-0.913-7e-3 0.193-0.05 0.307-0.057 0.5-2.334-0.546-4.888-0.327-7.228 0.362-1.597 0.446-3.209 1.276-4.864 1.179-0.578-0.02-1.114-0.155-1.613-0.211-0.885-0.07-1.734-0.061-2.59 0.14-0.621 0.094-1.249 0.381-1.833 0.553-1.676 0.481-3.4241 0.805-5.2367 0.78l1.5396-0.987s0.1278-0.343 0.0852-0.229c0.1501 0.121 0.3849 0.014 0.5059-0.136-0.564-0.406-1.1284-0.812-1.6571-1.139-2.7507-1.872-5.5798-3.708-8.5725-5.28 3.0131 0.994 5.9342 2.409 8.7701 4.052 0.6429 0.37 1.2074 0.776 1.9715 0.996 1.792 0.603 3.746-0.1 5.55-0.924l0.078-0.036c0.157-0.071 0.393-0.179 0.399-0.371 0.086-0.229-0.136-0.507-0.322-0.706-1.008-0.962-1.937-1.959-2.867-2.956-1.151-1.276-2.067-2.658-3.297-3.898-1.0791-1.118-2.2797-2.087-3.4444-2.977-0.5645-0.405-1.0505-0.847-1.7002-1.024-0.6855-0.256-1.3778-0.319-2.1127-0.267-0.9276 0.044-1.7768 0.053-2.6685 0.176-5.1153 0.63-13.66-5.451-18.688-4.008-1.2766 0.273-2.776 0-1.2765-1.727 2.0005-1.5 1.9998-2 1.9998-5-0.7572-0.412 2-3.5 2-5 0.5-1-0.3767-0.941-1.069-1.004-1.3846-0.126-2.8118-0.138-4.0308 0.514 0.7126-0.515 1.4969-0.874 2.2386-1.117-0.1859-0.2-0.4076-0.478-0.5935-0.677-1.5587-1.753-3.0391-3.541-4.562-5.216 0.8714 0.456 1.6575 1.139 2.3653 1.859 0.9294 0.997 1.581 2.216 2.7525 2.913 1.3216 0.819 2.9841 0.723 4.5546 1.048 2.4913 0.474-3.4917 6.84-1.2202 8.078 2.2714 1.237 3.9327 2.791 7.8089 4.524 2.7934 1.249 7.3531 3.179 9.6789 2.875 0.7349-0.051 1.5124-0.217 2.2541-0.46 0.5064-0.137 0.977-0.352 1.526-0.603 0.6274-0.286 1.1765-0.537 1.8397-0.745 0.3922-0.179 0.8202-0.28 1.2055-0.266 0.4638-0.022 0.9566 0.226 1.3356 0.433l4.092 2.112c-0.228-0.086-0.571-0.213-0.799-0.299-1.828-0.681-3.621-1.285-5.4759-1.196-0.3853-0.013-0.8133 0.087-1.0912 0.309-0.0784 0.036-0.1569 0.072-0.121 0.15-0.3206 0.336-0.2693 1.071 0.1519 1.163 0.1723 0.585 0.73 1.183 1.1018 1.582 3.0594 2.963 6.1974 5.89 9.2994 8.739 0.336 0.321 0.672 0.641 1.165 0.89s0.914 0.341 1.413 0.397c3.605 0.629 7.445 1.15 11.026 0.273 0.078-0.036 0.157-0.072 0.235-0.107 0 0-0.036-0.079-0.071-0.157 0.271-0.029 0.499 0.056 0.77 0.027 1.82-0.168 3.595-1.263 5.098-2.328 1.266-1.138 1.788-1.768 1.82-2.377 0.037-0.691 0.166-3.041-1.053-4.04-0.565-0.406-1.76-0.381-1.973-0.618-0.075-0.083-0.298-1.622 0.245-0.371-0.608-0.033-6.427-2.328-10.666-2.478-0.386-0.013-0.85 9e-3 -1.278 0.11-0.271 0.029-0.506 0.136-0.705 0.322-0.079 0.036-0.121 0.15-0.164 0.264-0.043 0.115 0.072 0.157 0.107 0.236 1.982 2.886 4.506 5.715 4.92 9.317-0.151-0.121-0.186-0.199-0.336-0.32-0.036-0.078-0.151-0.121-0.222-0.278-1.259-1.511-2.154-3.471-3.577-4.718-0.636-0.562-1.35-1.089-1.787-1.837-0.544-0.984-0.611-2.376-1.354-3.173-0.372-0.399-0.901-0.727-1.358-0.897-1.256-0.469-2.677-0.673-3.891-1.256-0.607-0.292-1.207-0.776-1.814-1.067-0.115-0.043-0.15-0.121-0.265-0.164-1.364-0.704-5.823-4.043-7.3644-4.098 1.3487 0.048 5.5434 3.224 6.8994 3.078-1.295-1.589-2.553-3.099-4.0048-4.616 1.4288 1.053 2.7368 2.257 3.9238 3.61 0.594 0.677 1.187 1.354 1.902 1.881 1.393 0.975 3.477 0.971 4.452-0.422 0.121-0.15 0.242-0.3 0.249-0.493 0.419-0.95 0.381-2.07 0.379-3.112-0.162-3.054-0.445-5.957-0.801-9.018-0.268-2.247-0.614-4.459-1.624-6.462-0.072-0.157-0.222-0.278-0.379-0.207 0.406-0.564 0.198-1.227-0.167-1.819-0.286-0.627-0.73-1.183-1.095-1.775l-0.987-1.539c-1.575-2.41-3.227-4.783-5.079-6.97 1.164 0.89 2.244 2.008 3.045 3.348 0.623 0.948 1.089 1.968 1.754 2.801 0.701 0.913 1.644 1.525 2.345 2.437 0.293 0.434 0.622 0.948 0.994 1.347 0.155-1.114 0.232-2.192 0.387-3.305 0.087 0.813 0.174 1.627 0.261 2.44 0.08 1.006 0.239 1.976 0.398 2.946 0.532 2.411 1.878 4.735 2.061 7.211-7e-3 0.193-0.014 0.386-0.021 0.578-0.15-0.121-0.221-0.278-0.372-0.399-0.042 0.114 0.029 0.271-0.013 0.386-0.153 2.155 0.115 4.402 0.504 6.5 0.282 1.861 0.635 3.88 1.9 5.198 0.372 0.399 0.822 0.762 1.194 1.161s0.58 1.062 0.445 1.598c2.548-0.026 5.383-0.521 7.369 1.13 1.537 1.289 3.612 0.985 3.835 2.524-0.576-0.642 0.962-0.865 2.148-0.191 1.185 0.674 1.686 6 0.783 7.55-0.861 1.436-2.251 2.545-3.734 3.033-0.078 0.035-0.078 0.035-0.157 0.071 2.236 1.159 4.586 2.361 6.693 3.863 0.601 0.484 1.279 0.932 1.68 1.603 0.416 1.326 0.398 2.946 0.344 4.487z" fill="#5c5a5a" style=""/>
<path d="m128.06 333.36c-0.813 0.087-1.248 0.285-2.048-0.013-1.599-0.597-1.962-1.241-3.476-2.066-1.707-0.832-2.611-0.911-4.531-1.171-0.999-0.113-1.963-0.147-2.89-0.102 0.22-0.764-1.262-1.965-1.82-2.564-0.557-0.598-1.272-1.125-1.516-1.867-0.28-0.82-0.096-1.662-0.104-2.511-0.045-0.928-0.36-1.826-0.598-2.761-0.395-1.904-0.135-3.824 0.24-5.702 0.036 0.079 0.036 0.079 0.072 0.157-0.153 2.155 0.115 4.403 0.504 6.5 0.281 1.862 0.635 3.881 1.9 5.199 0.372 0.399 0.822 0.762 1.194 1.161s1.511 1.472 1.376 2.007c2.547-0.026 4.357-0.455 6.343 1.197 1.537 1.289 2.084 1.186 3.948 1.947 0.3 0.242 0.871 0.455 1.406 0.589z" fill="#8b8b8b" style=""/>
<path d="m118.67 341.57c-0.15-0.121-0.186-0.199-0.336-0.32-0.036-0.078-0.15-0.121-0.222-0.278-0.036-0.078-0.036-0.078-0.036-0.078-0.172-0.585-0.344-1.17-0.709-1.762-0.215-0.47-0.544-0.983-0.838-1.418-1.245-1.896-2.96-3.577-3.771-5.766 0.549-0.251 1.098-0.502 1.641-0.56-0.272 0.029-0.507 0.137-0.706 0.322-0.079 0.036-0.121 0.151-0.164 0.265s0.072 0.157 0.107 0.235c2.175 2.893 4.621 5.758 5.034 9.36z" fill="#8b8b8b" style=""/>
<path d="m108.72 328.3c-0.627 0.287-1.44 0.374-2.169 0.232-0.728-0.141-1.485-0.554-2.249-0.774-0.114-0.042-0.15-0.121-0.264-0.163-1.364-0.704-5.2903-3.678-6.8317-3.732 1.3487 0.048 5.0107 2.857 6.3657 2.712-1.294-1.589-2.741-3.147-4.1928-4.665 1.4288 1.054 2.9258 2.306 4.1128 3.659 0.594 0.677 1.187 1.354 1.902 1.881 1.393 0.975 3.476 0.971 4.452-0.422 0.121-0.15 0.242-0.3 0.248-0.493-0.092 0.421-0.219 0.764-0.461 1.064-0.164 0.264-0.52 0.522-0.913 0.701z" fill="#8b8b8b" style=""/>
<path d="m111.97 315.04c-0.65-0.177-1.165-0.89-1.301-1.396-0.238-0.935-0.396-1.905-0.591-2.953-0.201-0.856-0.324-1.748-0.604-2.568-0.738-2.033-2.105-3.778-3.634-5.26 0 0-0.036-0.078-0.115-0.043-1.574-2.409-3.226-4.782-5.079-6.969 1.165 0.889 2.245 2.008 3.046 3.348 0.623 0.948 1.089 1.968 1.754 2.801 0.701 0.912 1.644 1.524 2.345 2.437 0.293 0.434 0.622 0.947 0.994 1.346 0.155-1.113 0.231-2.191 0.386-3.304 0.088 0.813 0.175 1.626 0.262 2.44 0.08 1.006 0.239 1.976 0.397 2.946 0.726 2.418 1.957 4.699 2.14 7.175z" fill="#8b8b8b" style=""/>
<path d="m134.05 354.08c-0.1-0.428-0.159-0.97-0.338-1.362-0.087-0.813-0.216-1.512-0.653-2.261-0.508-0.905-1.252-1.703-2.002-2.308-1.351-1.09-2.908-1.8-4.465-2.511-0.721-0.334-1.4-0.783-1.722-1.489l0.228 0.086c-0.078 0.035-0.078 0.035-0.156 0.071 2.235 1.159 4.585 2.361 6.693 3.863 0.6 0.484 1.279 0.933 1.68 1.603 0.808 1.147 0.79 2.767 0.735 4.308z" fill="#8b8b8b" style=""/>
<path d="m119.62 344.46c-0.699 0.13-1.428-0.011-2.127 0.118-0.735 0.052-1.398 0.26-2.018 0.354-1.199 0.073-2.306-0.275-3.426-0.237-0.657 0.016-1.392 0.067-2.084 4e-3 -1.228-0.198-2.235-1.159-3.093-2-3.246-3.162-6.455-6.246-9.7006-9.409-0.5218-0.52-1.1511-1.275-0.8171-1.996 0.1637-0.265 0.4416-0.486 0.6769-0.594-0.0784 0.036-0.1569 0.072-0.1211 0.15-0.3205 0.336-0.2692 1.071 0.152 1.163 0.1723 0.585 0.73 1.183 1.1018 1.582 3.0591 2.963 6.1971 5.89 9.2991 8.739 0.336 0.321 0.672 0.641 1.165 0.89s0.914 0.341 1.414 0.397c3.605 0.629 7.445 1.15 11.025 0.273 0.079-0.036 0.157-0.072 0.235-0.107 0 0-0.035-0.079-0.071-0.157 0.271-0.029 0.499 0.056 0.771 0.027-0.785 0.358-1.569 0.716-2.382 0.803z" fill="#8b8b8b" style=""/>
<path d="m102.31 347.06c-1.205 0.266-2.4618-0.202-3.6827-0.593-0.1143-0.042-0.1143-0.042-0.2285-0.085-2.7507-1.872-5.5798-3.708-8.5726-5.279 3.0131 0.993 5.9343 2.408 8.7702 4.051 0.6429 0.37 1.2073 0.776 1.9716 0.996 1.792 0.603 3.746-0.1 5.55-0.924-0.278 0.222-0.749 0.437-0.906 0.509-0.47 0.215-0.862 0.394-1.333 0.609-0.477 0.407-0.948 0.622-1.569 0.716z" fill="#8b8b8b" style=""/>
<path d="m103.92 331.17c-0.229-0.085-0.571-0.213-0.8-0.298-0.036-0.079-0.15-0.121-0.15-0.121-0.643-0.37-1.286-0.74-1.893-1.032-1.2566-0.469-2.2285-0.639-3.4766-0.258-0.6632 0.208-1.7027 0.99-2.3302 1.277-1.8039 0.824-3.8166 0.533-5.7144 0.736-1.7051 0.21-5.1344-2.488-6.9284-3.195-1.794-0.706-2.0822-1.027-3.2986-1.715-1.9491-1.104-1.9713-0.996-2.9569-1.493-1.3284-0.626-1.9891-0.713-2.4891-2.213 0-2 2.5003-4.493 2.5003-6.5-0.8663-1.143-1.4938-0.512-2.9501-0.795-0.7639-0.22-1.5278-0.44-2.1707-0.81-1.5588-1.752-3.0391-3.541-4.5621-5.215 0.8714 0.455 1.6576 1.139 2.3653 1.858 0.9295 0.998 1.581 2.217 2.7526 2.914 1.3216 0.818 2.9841 0.722 4.5546 1.048 2.4913 0.474-3.316 7.435-1.0445 8.673 2.2714 1.237 3.8077 2.43 6.3552 2.404 2.4332-0.068 7.7359 4.533 10.062 4.229 0.7349-0.052 1.5124-0.217 2.2541-0.461 0.5064-0.137 0.977-0.352 1.526-0.602 0.6274-0.287 1.1765-0.538 1.8397-0.746 0.3922-0.179 0.8201-0.279 1.2055-0.266 0.4638-0.022 0.9566 0.227 1.3352 0.433 1.3644 0.704 2.7284 1.408 4.0144 2.148z" fill="#8b8b8b" style=""/>
<path d="m75.498 98.649c0.4289-0.0966 0.9716-0.1495 1.3655-0.3249 1.3655-0.3249 2.6694-1 3.5266-2.0424 0.3323-0.5256 0.6295-1.1298 0.848-1.699 0.6467-1.5151 1.3285-2.9513 2.0103-4.3876 0.6732-1.2437 1.355-2.6799 0.9513-4.0103-0.1926-0.0087-0.3064-0.0524-0.499-0.061 0.5673-2.3291 0.3728-4.8853-0.2943-7.2311-0.4301-1.6018-1.2455-3.2208-1.1329-4.8755 0.0259-0.5778 0.1655-1.112 0.2264-1.611 0.0782-0.8843 0.0776-1.7335-0.1157-2.5913-0.088-0.6215-0.3686-1.2517-0.5354-1.8381-0.4652-1.6806-0.7729-3.4313-0.7304-5.2435 0.3243 0.5163 0.6486 1.0326 0.9729 1.5488 0 0 0.3415 0.1311 0.2277 0.0874-0.1225 0.1489-0.0173 0.3852 0.1317 0.5077 0.411-0.5606 0.8221-1.1212 1.1544-1.6467 1.8977-2.7329 3.7604-5.5445 5.3603-8.5223-1.0221 3.0036-2.4645 5.9113-4.1345 8.7315-0.376 0.6393-0.7871 1.2-1.0141 1.9618-0.6203 1.7864 0.064 3.7469 0.8708 5.5585l0.035 0.0788c0.0702 0.1575 0.1754 0.3938 0.368 0.4025 0.2277 0.0873 0.5077-0.1317 0.7089-0.3157 0.971-0.9988 1.9772-1.9188 2.9833-2.8387 1.2861-1.1391 2.6774-2.0418 3.9284-3.2597 1.1286-1.0689 2.1082-2.2602 3.0091-3.4165 0.4111-0.5606 0.8572-1.0424 1.0406-1.6904 0.2621-0.6831 0.3317-1.3747 0.2874-2.1101-0.0357-0.928-0.0364-1.7772-0.1508-2.6701-0.5816-5.121 5.5805-13.607 4.1845-18.649-0.262-1.2791 0.026-2.7758 1.738-1.26 1.481 2.0145 1.981 2.0185 4.981 2.0469 0.42-0.7532 3.481 2.0331 4.981 2.0473 0.995 0.5094 0.945-0.3678 1.015-1.0594 0.139-1.3834 0.164-2.8104-0.476-4.0356 0.508 0.7175 0.859 1.5052 1.096 2.2492 0.201-0.184 0.481-0.4031 0.682-0.5871 1.768-1.5421 3.57-3.0055 5.259-4.5125-0.464 0.867-1.155 1.6467-1.881 2.3476-1.006 0.92-2.231 1.56-2.939 2.7249-0.831 1.3138-0.751 2.9771-1.091 4.5444-0.498 2.4867-6.807-3.5562-8.066-1.2966s-2.828 3.9062-4.598 7.7658c-1.276 2.7815-3.2487 7.3227-2.9668 9.6512 0.0443 0.7354 0.2024 1.5144 0.4394 2.2584 0.1317 0.5077 0.3421 0.9802 0.5877 1.5316 0.2807 0.6301 0.5257 1.1815 0.7277 1.8467 0.176 0.3938 0.272 0.8228 0.255 1.208 0.018 0.464-0.236 0.9544-0.445 1.331-0.7174 1.3575-1.4343 2.715-2.1512 4.0725 0.0874-0.2277 0.2185-0.5692 0.3059-0.7969 0.699-1.8215 1.3193-3.6079 1.2479-5.4638 0.0172-0.3852-0.0794-0.8141-0.2985-1.0941-0.0351-0.0788-0.0701-0.1576-0.1489-0.1225-0.3329-0.3237-1.0683-0.2794-1.1643 0.1409-0.5864 0.1668-1.1901 0.7188-1.5925 1.0868-2.9919 3.0313-5.9487 6.1414-8.8267 9.2164-0.3237 0.3329-0.6474 0.6658-0.9009 1.1563-0.2535 0.4904-0.3495 0.9107-0.4104 1.4097-0.6627 3.5987-1.2202 7.4336-0.3771 11.022 0.035 0.0788 0.0701 0.1576 0.1052 0.2363 0 0 0.0787-0.035 0.1575-0.0701 0.0265 0.2714-0.0609 0.4991-0.0344 0.7704 0.1501 1.8209 1.2283 3.606 2.2799 5.1198 1.1259 1.2769 1.7508 1.8044 2.3593 1.8426 0.6907 0.0434 3.0388 0.1944 4.0498-1.0156 0.411-0.5606 0.3972-1.756 0.6361-1.9667 0.0844-0.0744 1.6248-0.283 0.3695 0.249 0.0383-0.6085 2.3887-6.4055 2.5782-10.643 0.0172-0.3852-6e-4 -0.8492-0.0973-1.2781-0.0264-0.2714-0.1317-0.5077-0.3157-0.7089-0.035-0.0788-0.1489-0.1225-0.2627-0.1661-0.1139-0.0437-0.1575 0.0701-0.2363 0.1052-2.9051 1.9544-5.7573 4.4516-9.364 4.8307 0.1225-0.1489 0.2013-0.184 0.3237-0.3329 0.0788-0.0351 0.1225-0.1489 0.28-0.2191 1.5224-1.2443 3.4916-2.1212 4.7512-3.5316 0.5686-0.6308 1.1021-1.3403 1.8547-1.7698 0.9889-0.5348 2.3808-0.5883 3.1857-1.3243 0.4025-0.368 0.7348-0.8935 0.9095-1.3489 0.4808-1.2523 0.6988-2.6707 1.2928-3.8793 0.297-0.6043 0.787-1.1999 1.084-1.8042 0.044-0.1139 0.123-0.1489 0.166-0.2628 0.717-1.3575 4.099-5.7847 4.168-7.3255-0.061 1.3482-3.276 5.5127-3.144 6.8695 1.602-1.2793 3.124-2.5236 4.655-3.9605-1.067 1.419-2.283 2.7156-3.648 3.8897-0.682 0.5871-1.365 1.1742-1.898 1.8837-0.988 1.384-1.004 3.4676 0.379 4.4558 0.149 0.1225 0.298 0.2449 0.491 0.2536 0.946 0.4282 2.066 0.4012 3.108 0.4092 3.055-0.1336 5.962-0.3896 9.026-0.7158 2.249-0.2468 4.464-0.5723 6.477-1.5631 0.158-0.0701 0.28-0.2191 0.21-0.3766 0.56 0.4111 1.226 0.2092 1.821-0.1502 0.63-0.2806 1.19-0.7187 1.785-1.0781 0.516-0.3243 1.032-0.6486 1.549-0.9729 2.424-1.5513 4.812-3.1815 7.017-5.0128-0.901 1.1563-2.029 2.2252-3.377 3.0141-0.954 0.6135-1.978 1.0695-2.818 1.7267-0.918 0.6923-1.539 1.6295-2.458 2.3218-0.437 0.2892-0.954 0.6135-1.356 0.9815 1.112 0.1655 2.189 0.2523 3.301 0.4178-0.814 0.0794-1.629 0.1588-2.443 0.2382-1.006 0.0708-1.978 0.2203-2.95 0.3698-2.416 0.5096-4.752 1.8333-7.23 1.9927-0.192-0.0087-0.385-0.0173-0.577-0.0259 0.122-0.1489 0.279-0.2191 0.402-0.368-0.114-0.0437-0.271 0.0265-0.385-0.0172-2.154-0.1735-4.404 0.0733-6.505 0.4425-1.864 0.264-3.886 0.5982-5.216 1.8511-0.403 0.368-0.77 0.8147-1.172 1.1827-0.403 0.368-1.068 0.5699-1.6021 0.4302 0.0018 2.5476 0.4701 5.3871-1.2003 7.3581-1.3034 1.5243-1.019 3.6022-2.5594 3.8109 0.6468-0.5703 0.8554 0.9701 0.1704 2.1488-0.6849 1.1788-6.0158 1.6298-7.5573 0.7117-1.4277-0.8744-2.5231-2.2744-2.9969-3.7623-0.0351-0.0788-0.0351-0.0788-0.0702-0.1575-1.1802 2.2245-2.4041 4.5629-3.9259 6.6564-0.4898 0.5957-0.9446 1.2701-1.6184 1.6646-1.3304 0.4037-2.95 0.3698-4.4909 0.3009z" fill="#5c5a5a" style=""/>
<path d="m96.278 92.849c-0.0794-0.8141-0.273-1.251 0.0328-2.0479 0.6117-1.5938 1.2593-1.9501 2.0986-3.4565 0.848-1.699 0.9356-2.6023 1.2144-4.5197 0.1218-0.9982 0.1649-1.9612 0.1292-2.8892 0.7622 0.2271 1.9772-1.2432 2.5802-1.7951 0.604-0.552 1.138-1.2615 1.881-1.4985 0.823-0.272 1.664-0.08 2.513-0.0806 0.928-0.0357 1.829-0.3428 2.766-0.5711 1.908-0.3778 3.826-0.0991 5.7 0.2935-0.079 0.0351-0.079 0.0351-0.158 0.0701-2.154-0.1735-4.404 0.0733-6.504 0.4425-1.865 0.2641-3.887 0.5982-5.217 1.8511-0.402 0.368-0.77 0.8148-1.172 1.1827-0.402 0.368-1.486 1.4968-2.021 1.3571 2e-3 2.5476 0.414 4.3609-1.2564 6.332-1.3033 1.5242-1.2059 2.0718-1.9837 3.9284-0.2449 0.2978-0.4634 0.867-0.6031 1.4012z" fill="#8b8b8b" style=""/>
<path d="m88.15 83.387c0.1225-0.1489 0.2013-0.184 0.3237-0.3329 0.0788-0.0351 0.1225-0.1489 0.28-0.2191l0.0788-0.0351c0.5864-0.1667 1.1729-0.3335 1.7679-0.6929 0.4726-0.2104 0.9889-0.5347 1.4264-0.824 1.9076-1.227 3.6048-2.9267 5.8016-3.7162 0.2456 0.5514 0.4911 1.1027 0.544 1.6455-0.0264-0.2714-0.1317-0.5077-0.3157-0.7089-0.035-0.0788-0.1489-0.1225-0.2627-0.1662-0.1139-0.0437-0.1576 0.0702-0.2363 0.1053-2.9137 2.147-5.801 4.5654-9.4077 4.9445z" fill="#8b8b8b" style=""/>
<path d="m101.51 73.563c-0.281-0.6301-0.36-1.4442-0.212-2.171 0.149-0.7267 0.568-1.4799 0.795-2.2418 0.044-0.1138 0.123-0.1489 0.166-0.2627 0.717-1.3575 3.728-5.2552 3.797-6.7961-0.061 1.3482-2.905 4.9832-2.773 6.3401 1.602-1.2794 3.174-2.7119 4.705-4.1488-1.067 1.4191-2.333 2.9039-3.698 4.078-0.682 0.5871-1.365 1.1741-1.898 1.8836-0.988 1.384-1.004 3.4676 0.38 4.4559 0.148 0.1224 0.297 0.2449 0.49 0.2535-0.42-0.096-0.762-0.2271-1.06-0.472-0.262-0.1661-0.517-0.5249-0.692-0.9187z" fill="#8b8b8b" style=""/>
<path d="m114.74 76.937c0.183-0.6479 0.9-1.1562 1.408-1.2879 0.937-0.2283 1.908-0.3779 2.959-0.5625 0.858-0.1932 1.75-0.3077 2.573-0.5797 2.039-0.7194 3.798-2.0689 5.294-3.5845 0 0 0.079-0.0351 0.044-0.1139 2.424-1.5513 4.813-3.1815 7.017-5.0128-0.901 1.1563-2.029 2.2252-3.377 3.0141-0.954 0.6135-1.977 1.0695-2.817 1.7267-0.919 0.6923-1.54 1.6295-2.459 2.3218-0.437 0.2892-0.954 0.6135-1.356 0.9815 1.112 0.1656 2.189 0.2523 3.301 0.4178-0.814 0.0794-1.629 0.1588-2.443 0.2382-1.006 0.0708-1.978 0.2203-2.95 0.3699-2.424 0.7021-4.717 1.9119-7.194 2.0713z" fill="#8b8b8b" style=""/>
<path d="m75.498 98.648c0.4289-0.0966 0.9716-0.1495 1.3655-0.3249 0.8141-0.0794 1.5144-0.2025 2.267-0.632 0.9101-0.4997 1.715-1.2356 2.3272-1.9802 1.1021-1.3403 1.8276-2.8904 2.5531-4.4405 0.3409-0.7182 0.7957-1.3926 1.5046-1.7083-0.0437 0.1138-0.0437 0.1138-0.0874 0.2277-0.0351-0.0788-0.0351-0.0788-0.0701-0.1575-1.1803 2.2245-2.4042 4.5629-3.926 6.6564-0.4898 0.5957-0.9446 1.2701-1.6184 1.6646-1.155 0.7975-2.7747 0.7636-4.3155 0.6947z" fill="#8b8b8b" style=""/>
<path d="m85.248 84.302c-0.1231-0.7003 0.0252-1.427-0.0978-2.1273-0.0444-0.7354-0.2462-1.4006-0.3342-2.0221-0.0622-1.1993 0.296-2.3027 0.2689-3.4232-0.0093-0.6566-0.0536-1.392 0.016-2.0837 0.2092-1.2258 1.1802-2.2245 2.0288-3.0743 3.1931-3.2154 6.3074-6.3956 9.5005-9.6109 0.5249-0.5169 1.2861-1.139 2.0042-0.7981 0.2628 0.1661 0.4819 0.4461 0.5871 0.6824-0.0351-0.0788-0.0702-0.1575-0.1489-0.1225-0.3329-0.3236-1.0683-0.2793-1.1643 0.141-0.5864 0.1667-1.1901 0.7187-1.5926 1.0867-2.9918 3.0313-5.9486 6.1414-8.8266 9.2164-0.3237 0.3329-0.6474 0.6658-0.9009 1.1563-0.2535 0.4904-0.3495 0.9107-0.4104 1.4098-0.6628 3.5986-1.2202 7.4336-0.3772 11.022 0.0351 0.0788 0.0702 0.1575 0.1053 0.2363 0 0 0.0787-0.0351 0.1575-0.0702 0.0265 0.2714-0.0609 0.4991-0.0345 0.7705-0.3507-0.7877-0.7015-1.5754-0.7809-2.3895z" fill="#8b8b8b" style=""/>
<path d="m82.82 66.978c-0.2548-1.2079 0.2258-2.4602 0.6277-3.6774 0.0437-0.1139 0.0436-0.1139 0.0873-0.2277 1.8978-2.7328 3.7605-5.5445 5.3604-8.5222-1.0221 3.0036-2.4645 5.9112-4.1346 8.7314-0.3759 0.6394-0.787 1.2-1.0141 1.9618-0.6202 1.7864 0.0641 3.747 0.8708 5.5586-0.219-0.28-0.4295-0.7526-0.4997-0.9101-0.2104-0.4726-0.3858-0.8665-0.5963-1.3391-0.403-0.4812-0.6135-0.9538-0.7015-1.5753z" fill="#8b8b8b" style=""/>
<path d="m98.691 68.731c0.0874-0.2277 0.2185-0.5692 0.3059-0.7969 0.0787-0.035 0.1224-0.1489 0.1224-0.1489 0.376-0.6394 0.752-1.2787 1.049-1.883 0.481-1.2523 0.66-2.2225 0.291-3.4741-0.201-0.6652-0.9738-1.7121-1.2544-2.3422-0.8068-1.8116-0.4968-3.8215-0.682-5.7211-0.1939-1.7071 2.5364-5.1107 3.2604-6.8979 0.723-1.7873 1.046-2.0724 1.746-3.2822 1.122-1.9386 1.014-1.9618 1.521-2.9427 0.639-1.3224 0.732-1.9822 2.237-2.468 1.999 0.0189 4.469 2.5427 6.476 2.5617 1.151-0.8555 0.526-1.4889 0.822-2.9424 0.227-0.7618 0.455-1.5236 0.831-2.163 1.767-1.5421 3.569-3.0055 5.258-4.5125-0.464 0.867-1.155 1.6467-1.881 2.3476-1.006 0.92-2.231 1.56-2.939 2.7249-0.831 1.3138-0.751 2.9771-1.091 4.5444-0.498 2.4867-7.404-3.3861-8.663-1.1265s-2.466 3.7845-2.465 6.3321c0.046 2.4338-4.6047 7.6928-4.3229 10.021 0.0443 0.7353 0.2025 1.5144 0.4394 2.2584 0.1317 0.5076 0.3425 0.9802 0.5875 1.5316 0.281 0.6301 0.526 1.1815 0.728 1.8467 0.176 0.3938 0.272 0.8227 0.255 1.208 0.018 0.4639-0.236 0.9544-0.446 1.331-0.716 1.3575-1.4333 2.715-2.1853 3.9937z" fill="#8b8b8b" style=""/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 76 KiB

422
application/src/main/data/json/system/scada_symbols/vertical-pipe.svg

@ -0,0 +1,422 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="200" height="200" fill="none" version="1.1" viewBox="0 0 200 200">
<tb:metadata xmlns=""><![CDATA[{
"title": "Vertical pipe",
"description": "Vertical pipe with fluid and leak visualizations.",
"searchTags": [
"pipe",
"vertical pipe"
],
"widgetSizeX": 1,
"widgetSizeY": 1,
"tags": [
{
"tag": "fluid",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\nvar flow = ctx.values.flow;\nvar flowDirection = ctx.values.flowDirection;\n\nvar elementFluid = element.remember('fluid');\nvar elementFlow = null;\nvar elementFlowDirection = null;\n\nif (fluid !== elementFluid) {\n element.remember('fluid', fluid);\n elementFlow = null;\n elementFlowDirection = null;\n} else {\n elementFlow = element.remember('flow');\n elementFlowDirection = element.remember('flowDirection');\n}\n\nvar liquidPattern = ctx.svg.defs().findOne('pattern#liquid');\nif (liquidPattern) {\n liquidPattern.id(ctx.api.generateElementId());\n element.fill(liquidPattern);\n} else {\n liquidPattern = element.reference('fill');\n}\n\nif (fluid) {\n element.show();\n if (flow !== elementFlow) {\n element.remember('flow', flow);\n if (flow) {\n element.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n } else {\n if (liquidPattern) {\n ctx.api.resetAnimation(liquidPattern);\n }\n }\n } else if (flow && elementFlowDirection !== flowDirection) {\n element.remember('flowDirection', flowDirection);\n animateFlow(liquidPattern, flowDirection);\n }\n if (flow && liquidPattern) {\n liquidPattern.timeline().speed(ctx.values.flowAnimationSpeed);\n }\n} else {\n if (liquidPattern) {\n ctx.api.resetAnimation(liquidPattern);\n }\n element.hide();\n}\n\nfunction animateFlow(liquidPattern, forwardElseReverse) {\n if (liquidPattern) {\n ctx.api.resetAnimation(liquidPattern);\n var deltaX = forwardElseReverse ? 172 : -172;\n liquidPattern.animate(1000).ease('-').relative(deltaX, 0).loop();\n }\n}",
"actions": null
},
{
"tag": "fluid-background",
"stateRenderFunction": "var fluid = ctx.values.fluid && !ctx.values.leak;\nif (fluid) {\n var color = ctx.properties.fluidColor;\n element.attr({fill: color});\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "leak",
"stateRenderFunction": "var leak = ctx.values.leak;\nif (leak) {\n element.show();\n} else {\n element.hide();\n}",
"actions": null
},
{
"tag": "pipe-background",
"stateRenderFunction": "var color = ctx.properties.pipeColor;\nelement.attr({fill: color});",
"actions": null
}
],
"behavior": [
{
"id": "fluid",
"name": "{i18n:scada.symbol.fluid-presence}",
"hint": "{i18n:scada.symbol.fluid-presence-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.fluid-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flow",
"name": "{i18n:scada.symbol.flow-presence}",
"hint": "{i18n:scada.symbol.flow-presence-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.present}",
"falseLabel": "{i18n:scada.symbol.absent}",
"stateLabel": "{i18n:scada.symbol.flow-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowDirection",
"name": "{i18n:scada.symbol.flow-direction}",
"hint": "{i18n:scada.symbol.flow-direction-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": "{i18n:scada.symbol.forward}",
"falseLabel": "{i18n:scada.symbol.reverse}",
"stateLabel": "{i18n:scada.symbol.forward}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": true,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "flowAnimationSpeed",
"name": "{i18n:scada.symbol.flow-animation-speed}",
"hint": "{i18n:scada.symbol.flow-animation-speed-hint}",
"group": null,
"type": "value",
"valueType": "DOUBLE",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": 1,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;"
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "leak",
"name": "{i18n:scada.symbol.leak}",
"hint": "{i18n:scada.symbol.leak-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.leak-present}",
"defaultGetValueSettings": {
"action": "DO_NOTHING",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": null,
"key": "state"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "fluidColor",
"name": "{i18n:scada.symbol.fluid-color}",
"type": "color",
"default": "#1EC1F480",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "pipeColor",
"name": "{i18n:scada.symbol.pipe-color}",
"type": "color",
"default": "#FFFFFF",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
}
]
}]]></tb:metadata>
<path d="m64 186v-172h72v172h-72z" fill="#fff" tb:tag="pipe-background"/><path d="m64 186v-172h72v172h-72z" fill="url(#paint0_linear_1245_55957)"/><g stroke-width="3">
<path d="m65.5 184.5v-169h69v169h-69z" stroke="#000" stroke-opacity=".12"/>
<rect transform="rotate(-90 51.5 198.5)" x="51.5" y="198.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171"/>
<rect transform="rotate(-90 51.5 12.5)" x="51.5" y="12.5" width="11" height="97" rx="5.5" fill="#D9D9D9" stroke="#727171"/>
</g><defs>
<linearGradient id="paint0_linear_1245_55957" x1="64" x2="136" y1="141.28" y2="141.47" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".26388"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".41759"/>
<stop stop-color="#fff" stop-opacity="0" offset=".49829"/>
<stop stop-color="#727171" stop-opacity=".1" offset=".58094"/>
<stop stop-color="#727171" stop-opacity=".35" offset=".71855"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<pattern id="liquid" width="172" height="72" patternTransform="translate(14,8)" patternUnits="userSpaceOnUse">
<circle transform="rotate(-90)" cx="-15" cy="21" r="8" fill="url(#paint28_linear_1182_32781-5)"/>
<circle transform="rotate(-90)" cx="-15" cy="150" r="8" fill="url(#paint29_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-16" cy="113" r="8" fill="url(#paint30_linear_1182_32781-7)"/>
<circle transform="rotate(-90)" cx="-58" cy="34" r="8" fill="url(#paint31_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-58" cy="155" r="8" fill="url(#paint32_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-26" cy="33" r="5" fill="url(#paint33_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-26" cy="162" r="5" fill="url(#paint34_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="5" r="5" fill="url(#paint35_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-8" cy="94" r="4" fill="url(#paint36_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-60" cy="72" r="4" fill="url(#paint37_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-37" cy="112" r="5" fill="url(#paint38_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-39" cy="59" r="5" fill="url(#paint39_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-62" cy="115" r="5" fill="url(#paint40_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-42" cy="139" r="5" fill="url(#paint41_linear_1182_32781-4)"/>
<circle transform="rotate(-90)" cx="-21" cy="76" r="5" fill="url(#paint42_linear_1182_32781-1)"/>
<circle transform="rotate(-90)" cx="-50.5" cy="126.5" r="2.5" fill="url(#paint43_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-46.5" cy="169.5" r="2.5" fill="url(#paint44_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-9.5" cy="57.5" r="2.5" fill="url(#paint45_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-35.5" cy="96.5" r="2.5" fill="url(#paint46_linear_1182_32781-9)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="91.5" r="2.5" fill="url(#paint47_linear_1182_32781-2)"/>
<circle transform="rotate(-90)" cx="-40.5" cy="22.5" r="2.5" fill="url(#paint48_linear_1182_32781-88)"/>
<circle transform="rotate(-90)" cx="-23.5" cy="124.5" r="2.5" fill="url(#paint49_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-47.5" cy="86.5" r="2.5" fill="url(#paint50_linear_1182_32781-6)"/>
<circle transform="rotate(-90)" cx="-21.5" cy="51.5" r="2.5" fill="url(#paint51_linear_1182_32781-8)"/>
<circle transform="rotate(-90)" cx="-51.5" cy="48.5" r="2.5" fill="url(#paint52_linear_1182_32781-3)"/>
<circle transform="rotate(-90)" cx="-64" cy="14" r="4" fill="url(#paint53_linear_1182_32781-83)"/>
<circle transform="rotate(-90)" cx="-64" cy="135" r="4" fill="url(#paint54_linear_1182_32781-33)"/>
<circle transform="rotate(-90)" cx="-58.5" cy="95.5" r="9.5" fill="url(#paint55_linear_1182_32781-8)"/>
<path d="m0 0h172v72h-172z" fill="url(#paint84_linear_1182_32781-8)" stroke-width=".57735"/>
</pattern>
<linearGradient id="paint28_linear_1182_32781-5" x1="19.316" x2="21" y1="8.2632" y2="23" gradientTransform="translate(-36,6)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint29_linear_1182_32781-1" x1="148.32" x2="150" y1="8.2632" y2="23" gradientTransform="translate(-165,135)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint30_linear_1182_32781-7" x1="111.32" x2="113" y1="9.2632" y2="24" gradientTransform="translate(-129,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint31_linear_1182_32781-4" x1="32.316" x2="34" y1="51.263" y2="66" gradientTransform="translate(-92,-24)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint32_linear_1182_32781-3" x1="153.32" x2="155" y1="51.263" y2="66" gradientTransform="translate(-213,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint33_linear_1182_32781-1" x1="31.947" x2="33" y1="21.789" y2="31" gradientTransform="translate(-59,7)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint34_linear_1182_32781-4" x1="160.95" x2="162" y1="21.789" y2="31" gradientTransform="translate(-188,136)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint35_linear_1182_32781-6" x1="3.9474" x2="5" y1="32.79" y2="42" gradientTransform="translate(-42,-32)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint36_linear_1182_32781-9" x1="93.158" x2="94" y1="4.6316" y2="12" gradientTransform="translate(-102,86)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint37_linear_1182_32781-4" x1="71.158" x2="72" y1="56.632" y2="64" gradientTransform="translate(-132,12)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint38_linear_1182_32781-2" x1="110.95" x2="112" y1="32.79" y2="42" gradientTransform="translate(-149,75)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint39_linear_1182_32781-2" x1="57.947" x2="59" y1="34.79" y2="44" gradientTransform="translate(-98,20)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint40_linear_1182_32781-6" x1="113.95" x2="115" y1="57.79" y2="67" gradientTransform="translate(-177,53)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint41_linear_1182_32781-4" x1="137.95" x2="139" y1="37.79" y2="47" gradientTransform="translate(-181,97)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint42_linear_1182_32781-1" x1="74.947" x2="76" y1="16.789" y2="26" gradientTransform="translate(-97,55)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint43_linear_1182_32781-2" x1="125.97" x2="126.5" y1="48.395" y2="53" gradientTransform="translate(-177,76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint44_linear_1182_32781-8" x1="168.97" x2="169.5" y1="44.395" y2="49" gradientTransform="translate(-216,123)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint45_linear_1182_32781-8" x1="56.974" x2="57.5" y1="7.3947" y2="12" gradientTransform="translate(-67,48)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint46_linear_1182_32781-9" x1="95.974" x2="96.5" y1="33.395" y2="38" gradientTransform="translate(-132,61)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint47_linear_1182_32781-2" x1="90.974" x2="91.5" y1="21.395" y2="26" gradientTransform="translate(-115,68)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint48_linear_1182_32781-88" x1="21.974" x2="22.5" y1="38.395" y2="43" gradientTransform="translate(-63,-18)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint49_linear_1182_32781-8" x1="123.97" x2="124.5" y1="21.395" y2="26" gradientTransform="translate(-148,101)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint50_linear_1182_32781-6" x1="85.974" x2="86.5" y1="45.395" y2="50" gradientTransform="translate(-134,39)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint51_linear_1182_32781-8" x1="50.974" x2="51.5" y1="19.395" y2="24" gradientTransform="translate(-73,30)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint52_linear_1182_32781-3" x1="47.974" x2="48.5" y1="49.395" y2="54" gradientTransform="translate(-100,-3)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint53_linear_1182_32781-83" x1="13.158" x2="14" y1="60.632" y2="68" gradientTransform="translate(-78,-50)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint54_linear_1182_32781-33" x1="134.16" x2="135" y1="60.632" y2="68" gradientTransform="translate(-199,71)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint55_linear_1182_32781-8" x1="93.5" x2="95.5" y1="50.5" y2="68" gradientTransform="translate(-154,37)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity=".4" offset="0"/>
<stop stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="paint84_linear_1182_32781-8" x1="248" x2="248" y1="1.8513e-7" y2="72" gradientTransform="scale(.33333 1)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" offset=".10895"/>
<stop stop-color="#fff" stop-opacity="0" offset=".11331"/>
<stop stop-color="#fff" stop-opacity="0" offset=".88736"/>
<stop stop-color="#727171" offset=".89138"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
</defs><rect transform="rotate(90)" x="14" y="-136" width="172" height="72" fill="#1ec1f4" stroke-width="0" style="display: none;" tb:tag="fluid-background"/><rect transform="rotate(90)" x="14" y="-136" width="172" height="72" fill="url(#liquid)" stroke-width="0" style="display: none;" tb:tag="fluid"/><g transform="rotate(90 97.572 102.65)" style="display: none;" tb:tag="leak">
<path d="m34.253 100.01c0.5162 0.38 1.0932 0.926 1.6625 1.191 1.6625 1.191 3.6513 1.98 5.617 1.926 0.8955-0.136 1.8442-0.387 2.6789-0.691 2.2843-0.737 4.5155-1.36 6.7467-1.983 2.0111-0.448 4.2423-1.0713 5.3196-2.7869-0.1747-0.2201-0.2354-0.387-0.41-0.6071 3.1037-1.6023 5.7289-4.2595 7.671-7.2353 1.3504-2.004 2.3515-4.4482 4.2789-5.906 0.6601-0.5239 1.381-0.8808 1.9881-1.2909 1.0471-0.7592 1.9804-1.5716 2.7391-2.604 0.5994-0.6909 1.0241-1.6018 1.5096-2.3457 1.4035-2.1179 3.0347-4.1297 5.0683-5.8152-0.2579 0.8501-0.5156 1.7002-0.7734 2.5504 0 0 0.1823 0.5008 0.1215 0.3339-0.2808 0.0077-0.4401 0.3492-0.4324 0.63 1.0094-0.0837 2.0188-0.1675 2.9143-0.3044 4.8193-0.5251 9.6917-1.1641 14.496-2.2508-4.2801 1.7469-8.8563 2.9398-13.554 3.7988-1.0625 0.1977-2.0719 0.2815-3.1267 0.7599-2.5575 1.0254-4.0594 3.6519-5.2806 6.2707l-0.0531 0.1138c-0.1062 0.2278-0.2655 0.5694-0.0909 0.7894 0.1216 0.3339 0.6301 0.4324 1.0248 0.4778 2.0265 0.1133 3.9999 0.3404 5.9733 0.5675 2.4819 0.3256 4.8045 0.9928 7.3396 1.2046 2.2542 0.2194 4.5007 0.1581 6.6334 0.0436 1.0094-0.0838 1.9657-0.0537 2.8536-0.4714 1.0017-0.3646 1.8288-0.9493 2.5952-1.7009 0.9863-0.9262 1.9193-1.7386 2.7923-2.7179 5.076-5.5344 20.298-6.8695 24.508-13.223-1.38 2.9604-2.928 5.9816-4.308 8.942 3.824-1.9593 8.128-2.8637 12.484-3.882 1.229-0.2585 2.459-0.5169 3.68-1.0561 1.002-0.3646 1.996-1.01 2.823-1.5947 1.655-1.1693 3.248-2.5055 3.984-4.3804-0.304 1.2448-0.834 2.3834-1.426 3.3551 0.394 0.0454 0.903 0.1439 1.298 0.1893 3.385 0.4696 6.717 1.053 9.988 1.4695-1.396 0.3192-2.914 0.3044-4.379 0.1758-1.973-0.2271-3.848-0.9627-5.806-0.6282-2.239 0.3422-3.992 2.02-6.041 3.1439-3.21 1.8301-7.073 2.3853-10.761 3.1605-3.688 0.7753-6.999 0.6235-12.935 2.3663-4.278 1.256-11.158 3.4266-13.449 5.9623-0.767 0.7516-1.472 1.6701-2.064 2.6418-0.4326 0.6301-0.7511 1.3132-1.1228 2.1103-0.4247 0.9108-0.7964 1.7079-1.335 2.5657-0.2655 0.5693-0.6448 1.0855-1.0849 1.4348-0.4932 0.4631-1.2749 0.6531-1.8896 0.7823-2.1781 0.5091-4.3562 1.0183-6.5343 1.5274 0.3339-0.1215 0.8348-0.3038 1.1687-0.4254 2.6713-0.9722 5.2287-1.9976 7.2015-3.8501 0.4401-0.3492 0.8194-0.8654 0.9179-1.374 0.0531-0.1138 0.1062-0.2277-0.0076-0.2808 0.0377-0.6755-0.7139-1.4418-1.2679-1.1457-0.7439-0.4855-1.9279-0.6217-2.7173-0.7126-6.1933-0.3928-12.44-0.6718-18.572-0.8977-0.6755-0.0377-1.351-0.0755-2.1326 0.1145-0.7817 0.19-1.3357 0.4861-1.9427 0.8961-4.591 2.7109-9.3413 5.7634-12.482 10.121-0.0531 0.1139-0.1062 0.2277-0.1593 0.3416 0 0 0.1138 0.0531 0.2277 0.1062-0.2731 0.288-0.607 0.41-0.8802 0.698-1.8589 1.906-2.7916 4.798-3.4511 7.401-0.3281 2.459-0.3109 3.65 0.2287 4.356 0.6125 0.801 2.6907 3.528 4.9877 3.483 1.0094-0.084 2.3108-1.242 2.7709-1.18 0.1625 0.022 1.8643 1.516 0.0794 0.644 0.7057-0.539 9.3274-3.495 14.168-7.337 0.4401-0.35 0.9333-0.813 1.3126-1.329 0.2732-0.288 0.4325-0.63 0.4779-1.025 0.0531-0.113-0.0077-0.28-0.0684-0.447-0.0608-0.167-0.2278-0.107-0.3416-0.16-4.9261-1.326-10.398-2.076-14.263-5.6801 0.2809-0.0077 0.3947 0.0454 0.6755 0.0377 0.1139 0.0531 0.2808-0.0077 0.5086 0.0985 2.8235 0.4849 5.67 1.8119 8.4251 1.8499 1.2371 0.022 2.5273-0.07 3.719 0.348 1.5333 0.576 2.9227 2.056 4.5014 2.237 0.7894 0.091 1.6849-0.046 2.3527-0.289 1.8365-0.668 3.6046-1.785 5.5019-2.286 0.9486-0.251 2.0719-0.281 3.0205-0.532 0.167-0.061 0.2809-8e-3 0.4478-0.069 2.1781-0.509 10.278-1.0219 12.04-2.4189-1.541 1.2224-9.1936 1.667-10.559 3.1099 2.9374 0.538 5.7609 1.023 8.8043 1.333-2.58 0.183-5.1684 0.085-7.7642-0.294-1.2979-0.189-2.5958-0.379-3.886-0.287-2.4666 0.236-4.7733 2.21-4.5373 4.676 0.0077 0.281 0.0154 0.562 0.19 0.782 0.433 1.45 1.5339 2.656 2.5209 3.809 3.0672 3.233 6.1267 6.184 9.414 9.242 2.4216 2.238 4.8966 4.363 7.9106 5.629 0.227 0.106 0.508 0.099 0.614-0.129 0.084 1.009 0.942 1.548 1.906 1.859 0.911 0.425 1.928 0.622 2.892 0.932l2.55 0.774c4.023 1.183 8.099 2.252 12.22 2.926-2.132 0.114-4.386-0.105-6.542-0.833-1.587-0.463-3.067-1.153-4.592-1.448-1.64-0.349-3.264-0.136-4.903-0.485-0.737-0.204-1.587-0.462-2.376-0.553 0.881 1.381 1.815 2.648 2.695 4.029-0.865-0.819-1.731-1.638-2.596-2.458-1.04-1.039-2.133-1.965-3.227-2.891-2.869-2.169-6.5581-3.474-9.1014-6.046-0.1746-0.22-0.3493-0.44-0.5239-0.66 0.2808-8e-3 0.5086 0.098 0.7894 0.091-0.0608-0.167-0.2885-0.273-0.3493-0.44-1.8678-2.535-4.2896-4.773-6.7037-6.73-2.0725-1.799-4.3727-3.703-7.0216-3.968-0.7894-0.091-1.6318-0.068-2.4212-0.158-0.7894-0.091-1.6471-0.63-2.0041-1.351-2.7999 2.437-5.4747 5.667-9.2392 5.713-2.922 0.024-4.9354 2.323-6.6372 0.828 1.2453 0.166-0.2492 1.868-2.2002 2.242-1.951 0.373-7.5425-5.058-8.0062-7.631-0.403-2.406 0.0896-4.949 1.273-6.892l0.1062-0.228c-3.5745 0.828-7.316 1.718-11.073 2.045-1.1233 0.031-2.2996 0.175-3.3775-0.189-1.7156-1.077-3.2264-2.89-4.6235-4.651z" fill="#5c5a5a" style=""/>
<g fill="#8b8b8b" style="">
<path d="m60.493 117.31c0.8195-0.865 1.1148-1.496 2.2835-1.921 2.3374-0.851 3.3482-0.479 5.8071-0.996 2.679-0.691 3.756-1.458 6.1312-2.985 1.2141-0.82 2.3143-1.693 3.3007-2.619 0.4785 1.055 3.2567 0.986 4.4408 1.122 1.184 0.136 2.4742 0.045 3.4459 0.637 1.0855 0.644 1.6778 1.752 2.4902 2.686 0.9262 0.986 2.1256 1.684 3.2719 2.496 2.2395 1.737 3.7657 4.112 5.125 6.548-0.1139-0.053-0.1139-0.053-0.2277-0.106-1.8678-2.535-4.2896-4.773-6.7037-6.73-2.0726-1.798-4.3728-3.703-7.0217-3.968-0.7893-0.09-1.6318-0.067-2.4211-0.158-0.7894-0.091-3.0668-0.204-3.4237-0.925-2.7999 2.437-4.4002 4.623-8.1647 4.67-2.9221 0.023-3.4312 0.654-6.2164 1.573-0.5616 0.016-1.3964 0.319-2.1173 0.676z" style=""/>
<path d="m63.131 99.331c0.2809-0.0077 0.3947 0.0454 0.6755 0.0377 0.1139 0.0531 0.2808-0.0077 0.5086 0.0985l0.1138 0.0531c0.744 0.4857 1.4879 0.9707 2.4519 1.2817 0.6832 0.319 1.5333 0.577 2.2695 0.781 3.1728 0.925 6.6642 1.167 9.6322 2.828-0.3716 0.797-0.7433 1.595-1.2896 2.172 0.2732-0.289 0.4324-0.631 0.4779-1.025 0.0531-0.114-0.0077-0.281-0.0685-0.448-0.0607-0.167-0.2277-0.106-0.3416-0.159-5.1461-1.152-10.565-2.016-14.43-5.62z" style=""/>
<path d="m86.705 104.64c0.4247-0.911 1.2442-1.777 2.1851-2.308 0.941-0.532 2.1705-0.79 3.2253-1.269 0.1669-0.06 0.2808-7e-3 0.4478-0.068 2.1781-0.509 9.3419-0.924 11.102-2.321-1.54 1.2224-8.256 1.569-9.6217 3.011 2.9373 0.538 6.0157 0.898 9.0587 1.208-2.58 0.183-5.4229 0.21-8.0186-0.168-1.2979-0.19-2.5958-0.379-3.8861-0.288-2.4665 0.236-4.7732 2.21-4.5372 4.677 0.0077 0.281 0.0153 0.562 0.1899 0.782-0.2961-0.554-0.4784-1.055-0.4938-1.617-0.0684-0.447 0.0832-1.07 0.3487-1.639z" style=""/>
<path d="m95.641 122.41c0.8879-0.418 2.1327-0.115 2.7628 0.318 1.1463 0.811 2.2399 1.737 3.4469 2.716 1.032 0.758 2.011 1.631 3.097 2.276 2.74 1.555 5.905 2.199 9.002 2.395 0 0 0.114 0.053 0.167-0.06 4.023 1.182 8.099 2.251 12.22 2.926-2.132 0.114-4.387-0.105-6.542-0.833-1.587-0.463-3.067-1.153-4.593-1.449-1.639-0.348-3.263-0.135-4.903-0.484-0.736-0.205-1.586-0.462-2.375-0.553 0.88 1.381 1.814 2.648 2.695 4.029-0.865-0.819-1.731-1.639-2.596-2.458-1.04-1.04-2.134-1.965-3.227-2.891-3.089-1.995-6.6114-3.36-9.1547-5.932z" style=""/>
<path d="m34.254 100.01c0.5162 0.379 1.0932 0.926 1.6625 1.191 0.8655 0.82 1.6702 1.472 2.8619 1.889 1.4194 0.524 2.9981 0.705 4.4022 0.667 2.5274-0.069 4.9255-0.753 7.3237-1.437 1.1156-0.311 2.2919-0.456 3.3167 0.022-0.167 0.061-0.167 0.061-0.3339 0.122l0.1062-0.228c-3.5745 0.828-7.316 1.717-11.073 2.045-1.1233 0.03-2.2997 0.175-3.3775-0.189-1.9811-0.508-3.4919-2.321-4.889-4.082z" style=""/>
<path d="m59.351 97.017c0.6525-0.8047 1.5935-1.3363 2.246-2.141 0.7663-0.7516 1.3049-1.6094 1.9043-2.3002 1.2595-1.2148 2.8152-1.8755 4.0217-2.9764 0.7132-0.6377 1.4796-1.3893 2.3067-1.974 1.548-0.9416 3.5745-0.8283 5.3201-0.7074 6.588 0.4383 13.062 0.8234 19.65 1.2617 1.0701 0.0831 2.4819 0.3256 2.7934 1.4412 0.0684 0.4478-0.0301 0.9563-0.1894 1.2979 0.0531-0.1139 0.1062-0.2277-0.0076-0.2808 0.0377-0.6755-0.7139-1.4419-1.2678-1.1457-0.744-0.4855-1.928-0.6218-2.7174-0.7126-6.1933-0.3929-12.44-0.6718-18.572-0.8977-0.6755-0.0378-1.351-0.0755-2.1326 0.1145-0.7817 0.1899-1.3357 0.4861-1.9427 0.8961-4.591 2.7109-9.3413 5.7634-12.482 10.121-0.0531 0.1138-0.1062 0.2277-0.1593 0.3415 0 0 0.1139 0.0531 0.2277 0.1062-0.2731 0.2885-0.607 0.4101-0.8802 0.6982 0.531-1.1383 1.0619-2.2769 1.8813-3.1423z" style=""/>
<path d="m76.081 77.786c1.0849-1.4348 2.9214-2.1032 4.6441-2.8247 0.1669-0.0608 0.1669-0.0608 0.3339-0.1216 4.8193-0.5251 9.6917-1.164 14.496-2.2508-4.2801 1.7469-8.8564 2.9399-13.554 3.7989-1.0625 0.1976-2.0719 0.2814-3.1268 0.7599-2.5574 1.0253-4.0594 3.6518-5.2805 6.2706 0.0985-0.5085 0.417-1.1917 0.5232-1.4194 0.3186-0.6832 0.5841-1.2525 0.9026-1.9357 0.144-0.9032 0.4625-1.5863 1.0619-2.2772z" style=""/>
<path d="m89.324 96.916c0.334-0.1215 0.8348-0.3038 1.1687-0.4253 0.1139 0.0531 0.2808-0.0077 0.2808-0.0077 1.0625-0.1977 2.125-0.3953 3.0737-0.646 1.8365-0.6685 3.0748-1.3986 4.099-3.0004 0.5386-0.8578 0.9515-2.7078 1.3763-3.6187 1.2208-2.6188 3.7278-4.199 5.6398-6.2184 1.692-1.8448 8.045-2.0951 10.702-3.0081 2.657-0.9129 3.279-0.8298 5.279-1.2162 3.204-0.6191 3.127-0.7599 4.69-1.1398 2.064-0.5623 3.832-1.6785 5.896-2.2407 1.397-0.3192 2.915-0.3045 4.197-0.6768 2.178-0.5091 3.992-2.02 5.874-3.0831 1.055-0.4785 2.11-0.9569 3.172-1.1546 3.385 0.4696 6.717 1.053 9.989 1.4695-1.397 0.3191-2.915 0.3044-4.38 0.1758-1.973-0.2271-3.848-0.9627-5.806-0.6282-2.239 0.3422-3.992 2.02-6.04 3.1439-3.21 1.8301-7.073 2.3853-10.762 3.1605-3.688 0.7752-6.519 0.9046-9.319 3.3417-2.633 2.3764-12.862 2.2885-15.153 4.8241-0.767 0.7517-1.472 1.6702-2.064 2.6419-0.432 0.6301-0.751 1.3132-1.123 2.1102-0.4243 0.9109-0.7959 1.708-1.3346 2.5658-0.2654 0.5693-0.6448 1.0855-1.0849 1.4347-0.4931 0.4632-1.2748 0.6531-1.8896 0.7823-2.1781 0.5092-4.3562 1.0183-6.4812 1.4136z" style=""/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 31 KiB

1394
application/src/main/data/json/system/scada_symbols/vertical-tank.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 113 KiB

300
application/src/main/data/json/system/scada_symbols/vertical-wheel-valve.svg

@ -0,0 +1,300 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:tb="https://thingsboard.io/svg" width="200" height="400" fill="none" version="1.1" viewBox="0 0 200 400"><tb:metadata xmlns=""><![CDATA[{
"title": "Vertical wheel valve",
"description": "Vertical wheel valve with open/close animation and state colors.",
"searchTags": [
"valve",
"wheel"
],
"widgetSizeX": 1,
"widgetSizeY": 2,
"tags": [
{
"tag": "background",
"stateRenderFunction": "var opened = ctx.values.opened;\nvar openAnimate = element.remember('openAnimate');\nvar color = opened ? ctx.properties.openedColor : ctx.properties.closedColor;\nif (!openAnimate) {\n element.attr({fill: color});\n} else {\n ctx.api.animate(element, 500).attr({fill: color});\n element.remember('openAnimate', false);\n}\n",
"actions": null
},
{
"tag": "clickArea",
"stateRenderFunction": null,
"actions": {
"click": {
"actionFunction": " ctx.tags.wheel.forEach(e => {\n e.remember('openAnimate', true);\n });\n ctx.tags.background.forEach(e => {\n e.remember('openAnimate', true);\n });\n\n\nvar opened = ctx.values.opened;\nvar action = opened ? 'close' : 'open';\n\nctx.api.callAction(event, action, undefined, {\n next: () => {\n ctx.api.setValue('opened', !opened);\n }\n});"
}
}
},
{
"tag": "wheel",
"stateRenderFunction": "var opened = ctx.values.opened;\nvar openAnimate = element.remember('openAnimate');\nvar angle = opened ? ctx.properties.openedRotationAngle : ctx.properties.closedRotationAngle;\nif (!openAnimate) {\n element.transform({rotate: angle});\n} else {\n ctx.api.animate(element, 500).transform({rotate: angle});\n element.remember('openAnimate', false);\n}\n",
"actions": null
}
],
"behavior": [
{
"id": "opened",
"name": "{i18n:scada.symbol.opened}",
"hint": "{i18n:scada.symbol.opened-hint}",
"group": null,
"type": "value",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": "{i18n:scada.symbol.opened}",
"defaultGetValueSettings": {
"action": "GET_ATTRIBUTE",
"defaultValue": false,
"executeRpc": {
"method": "getState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"getAttribute": {
"scope": "SHARED_SCOPE",
"key": "open"
},
"getTimeSeries": {
"key": "state"
},
"dataToValue": {
"type": "NONE",
"dataToValueFunction": "/* Should return boolean value */\nreturn data;",
"compareToValue": true
}
},
"defaultSetValueSettings": null,
"defaultWidgetActionSettings": null
},
{
"id": "open",
"name": "{i18n:scada.symbol.open}",
"hint": "{i18n:scada.symbol.open-hint}",
"group": null,
"type": "action",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": {
"action": "SET_ATTRIBUTE",
"executeRpc": {
"method": "setState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"setAttribute": {
"scope": "SHARED_SCOPE",
"key": "open"
},
"putTimeSeries": {
"key": "state"
},
"valueToData": {
"type": "CONSTANT",
"constantValue": true,
"valueToDataFunction": "/* Convert input boolean value to RPC parameters or attribute/time-series value */\nreturn value;"
}
},
"defaultWidgetActionSettings": null
},
{
"id": "close",
"name": "{i18n:scada.symbol.close}",
"hint": "{i18n:scada.symbol.close-hint}",
"group": null,
"type": "action",
"valueType": "BOOLEAN",
"trueLabel": null,
"falseLabel": null,
"stateLabel": null,
"defaultGetValueSettings": null,
"defaultSetValueSettings": {
"action": "SET_ATTRIBUTE",
"executeRpc": {
"method": "setState",
"requestTimeout": 5000,
"requestPersistent": false,
"persistentPollingInterval": 1000
},
"setAttribute": {
"scope": "SHARED_SCOPE",
"key": "open"
},
"putTimeSeries": {
"key": "state"
},
"valueToData": {
"type": "CONSTANT",
"constantValue": false,
"valueToDataFunction": "/* Convert input boolean value to RPC parameters or attribute/time-series value */\nreturn value;"
}
},
"defaultWidgetActionSettings": null
}
],
"properties": [
{
"id": "openedColor",
"name": "{i18n:scada.symbol.opened-color}",
"type": "color",
"default": "#1C943E",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "closedColor",
"name": "{i18n:scada.symbol.closed-color}",
"type": "color",
"default": "#696969",
"required": null,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": null,
"max": null,
"step": null
},
{
"id": "openedRotationAngle",
"name": "{i18n:scada.symbol.opened-rotation-angle}",
"type": "number",
"default": 0,
"required": true,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": -179,
"max": 179,
"step": null
},
{
"id": "closedRotationAngle",
"name": "{i18n:scada.symbol.closed-rotation-angle}",
"type": "number",
"default": 90,
"required": true,
"subLabel": null,
"divider": null,
"fieldSuffix": null,
"disableOnProperty": null,
"rowClass": "",
"fieldClass": "",
"min": -179,
"max": 179,
"step": null
}
]
}]]></tb:metadata>
<path d="m171.26 200c0-28.161-0.82311-44.15-5-72-4.2988-28.662-17-72-17-72h13.99c4.4182 0 8-3.5817 8-8v-26c0-4.4183-3.5818-8-8-8h-126c-4.418 0-8 3.5817-8 8v26c0 4.4183 3.582 8 8 8h14.01s-12.711 43.238-17 72c-4.151 27.834-5.195 43.859-5 72 0.19499 28.16 1.823 44.15 6 72 4.299 28.663 16 72 16 72h-14.01c-4.418 0-8 3.582-8 8v26c0 4.418 3.582 8 8 8h126c4.4182 0 8-3.582 8-8v-26c0-4.418-3.5818-8-8-8h-13.99s12.701-43.337 17-72c4.1769-27.85 5-43.839 5-72z" fill="#1c943e" tb:tag="background"/><rect transform="rotate(90)" x="1.5" y="-148.25" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/><rect transform="rotate(90)" x="14" y="-170.75" width="42" height="142" rx="8" fill="url(#paint0_linear_1343_53957)" style="fill:url(#paint0_linear_1343_53957)"/><rect transform="rotate(90)" x="15.5" y="-169.25" width="39" height="139" rx="6.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/><path d="m148.76 56s12.701 43.338 17 72c4.1769 27.85 5 43.839 5 72s-0.8231 44.15-5 72c-4.2988 28.663-17 72-17 72h-98s-11.701-43.337-16-72c-4.177-27.85-5.806-43.84-6-72-0.195-28.141 0.849-44.166 5-72 4.289-28.762 17-72 17-72z" fill="url(#paint1_linear_1343_53957)" style="fill:url(#paint1_linear_1343_53957)"/><path d="m147.87 341.67c-0.09 0.314-0.1699 0.591-0.239 0.831h-95.722c-0.062-0.233-0.133-0.501-0.212-0.802-0.328-1.238-0.801-3.04-1.382-5.292-1.163-4.505-2.758-10.809-4.487-18.008-3.46-14.409-7.448-32.357-9.587-46.62-4.169-27.798-5.789-43.715-5.983-71.788-0.194-28.068 0.844-44.015 4.983-71.769 2.133-14.3 6.366-32.237 10.078-46.632 1.854-7.1905 3.574-13.484 4.83-17.98 0.629-2.2476 1.141-4.0454 1.496-5.2807 0.09-0.3128 0.17-0.5896 0.239-0.8284h95.747c0.0691 0.2396 0.149 0.5174 0.239 0.8314 0.3548 1.2379 0.8668 3.0393 1.4947 5.2909 1.2558 4.5034 2.9751 10.806 4.8284 18.003 3.7103 14.408 7.9439 32.345 10.081 46.596 4.1635 27.761 4.9834 43.674 4.9834 71.778s-0.8199 44.017-4.9834 71.778c-2.1374 14.251-6.371 32.189-10.081 46.596-1.8533 7.197-3.5726 13.5-4.8284 18.004-0.6279 2.251-1.1399 4.053-1.4947 5.291z" stroke="#000" stroke-opacity=".12" stroke-width="3"/><rect transform="rotate(90)" x="344" y="-170.75" width="42" height="142" rx="8" fill="url(#paint2_linear_1343_53957)" style="fill:url(#paint2_linear_1343_53957)"/><rect transform="rotate(90)" x="345.5" y="-169.25" width="39" height="139" rx="6.5" stroke="#000" stroke-opacity=".12" stroke-width="3"/><rect transform="rotate(90)" x="387.5" y="-148.25" width="11" height="97" rx="5.5" fill="#d9d9d9" stroke="#727171" stroke-width="3"/><defs>
<filter id="filter0_ii_1343_53957" x="166.88" y="67.863" width="66.25" height="66.25" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset dx="3.12497" dy="-3.12497"/>
<feGaussianBlur stdDeviation="3.12497"/>
<feComposite in2="hardAlpha" k2="-1" k3="1" operator="arithmetic"/>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0"/>
<feBlend in2="shape" result="effect1_innerShadow_1343_53957"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset dx="-3.12497" dy="3.12497"/>
<feGaussianBlur stdDeviation="3.12497"/>
<feComposite in2="hardAlpha" k2="-1" k3="1" operator="arithmetic"/>
<feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.5 0"/>
<feBlend in2="effect1_innerShadow_1343_53957" result="effect2_innerShadow_1343_53957"/>
</filter>
<filter id="filter1_i_1343_53957" x="172" y="78" width="51" height="51" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset dx="-5" dy="5"/>
<feGaussianBlur stdDeviation="4"/>
<feComposite in2="hardAlpha" k2="-1" k3="1" operator="arithmetic"/>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0"/>
<feBlend in2="shape" result="effect1_innerShadow_1343_53957"/>
</filter>
<linearGradient id="paint0_linear_1343_53957" x1="24.92" x2="21.891" y1="30" y2="171.95" gradientTransform="translate(-1e-5 -200.75)" gradientUnits="userSpaceOnUse">
<stop stop-color="#020202" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".18316"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".35085"/>
<stop stop-color="#fff" stop-opacity=".25" offset=".49829"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".64825"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".82318"/>
<stop stop-color="#020202" stop-opacity=".35" offset="1"/>
</linearGradient>
<linearGradient id="paint1_linear_1343_53957" x1="130.88" x2="130.44" y1="29.988" y2="172.02" gradientTransform="rotate(90 100.37 100.37)" gradientUnits="userSpaceOnUse">
<stop stop-color="#020202" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".18316"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".35085"/>
<stop stop-color="#fff" stop-opacity=".25" offset=".49829"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".64825"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".82318"/>
<stop stop-color="#020202" stop-opacity=".35" offset="1"/>
</linearGradient>
<linearGradient id="paint2_linear_1343_53957" x1="354.92" x2="351.89" y1="30" y2="171.95" gradientTransform="translate(-1e-5 -200.75)" gradientUnits="userSpaceOnUse">
<stop stop-color="#020202" stop-opacity=".35" offset="0"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".18316"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".35085"/>
<stop stop-color="#fff" stop-opacity=".25" offset=".49829"/>
<stop stop-color="#fff" stop-opacity=".08" offset=".64825"/>
<stop stop-color="#020202" stop-opacity=".12" offset=".82318"/>
<stop stop-color="#020202" stop-opacity=".35" offset="1"/>
</linearGradient>
<radialGradient id="paint3_radial_1343_53957" cx="0" cy="0" r="1" gradientTransform="matrix(0,100,-100,0,100,200)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#727171" offset=".75112"/>
<stop stop-color="#fff" offset=".87301"/>
<stop stop-color="#727171" offset="1"/>
</radialGradient>
<linearGradient id="paint4_linear_1343_53957" x1="191" x2="209" y1="44.877" y2="44.877" gradientTransform="translate(-100,99.01)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint5_linear_1343_53957" x1="250.96" x2="257.61" y1="75.954" y2="93.485" gradientTransform="translate(-100,99.01)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint6_linear_1343_53957" x1="173.92" x2="159.04" y1="153.14" y2="141.73" gradientTransform="translate(-100,99.01)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint7_linear_1343_53957" x1="228.3" x2="243.18" y1="153.14" y2="141.73" gradientTransform="translate(-100,99.01)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
<linearGradient id="paint8_linear_1343_53957" x1="142.78" x2="148.28" y1="92.333" y2="74.407" gradientTransform="translate(-100,99.01)" gradientUnits="userSpaceOnUse">
<stop stop-color="#727171" offset="0"/>
<stop stop-color="#fff" offset=".49829"/>
<stop stop-color="#727171" offset="1"/>
</linearGradient>
</defs><g tb:tag="wheel">
<path d="m200 200c0 55.229-44.772 100-100 100s-100-44.771-100-100c0-55.228 44.772-100 100-100s100 44.772 100 100zm-175.01 0c0 41.428 33.584 75.012 75.012 75.012s75.012-33.584 75.012-75.012-33.584-75.012-75.012-75.012-75.012 33.584-75.012 75.012z" fill="url(#paint3_radial_1343_53957)" style="fill:url(#paint3_radial_1343_53957)"/>
<path d="m94.12 175c-1.726 0-3.125-1.3991-3.125-3.125v-46.625c0-3.4517 2.798-6.2499 6.25-6.2499h5.5c3.452 0 6.25 2.7982 6.25 6.2499v46.625c0 1.7259-1.399 3.125-3.125 3.125z" fill="url(#paint4_linear_1343_53957)" style="fill:url(#paint4_linear_1343_53957)"/>
<path d="m122.98 188.92c-0.612-1.6137 0.2-3.418 1.814-4.0301l43.595-16.534c3.227-1.2241 6.836 0.3999 8.06 3.6273l2.217 5.8439c1.224 3.2274-0.4 6.8361-3.628 8.0602l-43.595 16.535c-1.613 0.612-3.418-0.2-4.03-1.814l-4.433-11.688z" fill="url(#paint5_linear_1343_53957)" style="fill:url(#paint5_linear_1343_53957)"/>
<path d="m90.37 225.55c1.37 1.05 1.63 3.012 0.58 4.382l-28.362 37.006c-2.1 2.74-6.023 3.259-8.762 1.159l-4.961-3.802c-2.74-2.099-3.259-6.022-1.159-8.762l28.362-37.007c1.05-1.37 3.011-1.629 4.381-0.579z" fill="url(#paint6_linear_1343_53957)" style="fill:url(#paint6_linear_1343_53957)"/>
<path d="m111.85 225.55c-1.37 1.05-1.63 3.012-0.58 4.382l28.362 37.006c2.1 2.74 6.023 3.259 8.762 1.159l4.961-3.802c2.74-2.099 3.259-6.022 1.159-8.762l-28.362-37.007c-1.05-1.37-3.011-1.629-4.381-0.579z" fill="url(#paint7_linear_1343_53957)" style="fill:url(#paint7_linear_1343_53957)"/>
<path d="m73.44 197.47c-0.506 1.6506-2.253 2.5776-3.903 2.0716l-44.578-13.664c-3.3-1.0116-5.156-4.507-4.144-7.8072l1.832-5.9756c1.011-3.3002 4.507-5.1555 7.807-4.1439l44.578 13.664c1.65 0.5058 2.577 2.2535 2.072 3.9036l-3.664 11.951z" fill="url(#paint8_linear_1343_53957)" style="fill:url(#paint8_linear_1343_53957)"/>
</g><g transform="translate(-100,100)" filter="url(#filter0_ii_1343_53957)">
<circle cx="200" cy="100.99" r="30" fill="#d9d9d9"/>
</g><path d="m123 200.99c0 12.703-10.297 23-23 23s-23-10.297-23-23c0-12.702 10.297-23 23-23s23 10.297 23 23z" fill="#000" fill-opacity=".05"/><g transform="translate(-100,100)" filter="url(#filter1_i_1343_53957)">
<path d="m223 101c0 12.703-10.297 23-23 23s-23-10.297-23-23c0-12.702 10.297-23 23-23s23 10.298 23 23z" fill="#1c943e" tb:tag="background"/>
</g><path d="m122 201c0 12.15-9.85 22-22 22s-22-9.85-22-22 9.85-22 22-22 22 9.8497 22 22z" stroke="#fff" stroke-width="2"/><path d="m97.28 191.61c0-0.647-0.611-1.1214-1.216-0.8901-4.132 1.5826-7.067 5.5867-7.067 10.276 0 6.075 4.925 11 11 11s11-4.925 11-11c0-4.5645-2.78-8.4795-6.739-10.144-0.609-0.2563-1.244 0.2209-1.244 0.882 0 0.4223 0.269 0.7938 0.655 0.9649 3.181 1.4097 5.399 4.5944 5.399 8.2976 0 5.01-4.061 9.071-9.071 9.071s-9.071-4.061-9.071-9.071c0-3.8069 2.344-7.0659 5.668-8.4119 0.402-0.1627 0.686-0.5409 0.686-0.9745z" clip-rule="evenodd" fill="#fff" fill-rule="evenodd"/><path d="m99.51 188.64c0-0.3519 0.285-0.6372 0.637-0.6372s0.637 0.2853 0.637 0.6372v10.401c0 0.3519-0.285 0.6372-0.637 0.6372s-0.637-0.2853-0.637-0.6372z" fill="#fff"/><rect y="100" width="200" height="200" fill="#000" fill-opacity="0" stroke-width="0" tb:tag="clickArea"/>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

14
application/src/main/data/json/system/widget_bundles/scada_symbols.json

@ -0,0 +1,14 @@
{
"widgetsBundle": {
"alias": "scada_symbols",
"title": "SCADA symbols",
"scada": true,
"image": null,
"description": "Bundle with SCADA symbols",
"order": 9200,
"name": "SCADA symbols"
},
"widgetTypeFqns": [
"scada_symbol"
]
}

52
application/src/main/data/json/system/widget_bundles/scada_water_system_symbols.json

@ -0,0 +1,52 @@
{
"widgetsBundle": {
"alias": "scada_water_system_symbols",
"title": "SCADA water system symbols",
"scada": true,
"image": null,
"description": "Bundle with SCADA symbols for water system",
"order": 9300,
"name": "SCADA water system symbols"
},
"widgetTypeFqns": [
"horizontal_pipe",
"long_horizontal_pipe",
"vertical_pipe",
"long_vertical_pipe",
"left_bottom_elbow_pipe",
"bottom_right_elbow_pipe",
"top_right_elbow_pipe",
"left_top_elbow_pipe",
"cross_pipe",
"left_tee_pipe",
"bottom_tee_pipe",
"right_tee_pipe",
"top_tee_pipe",
"right_elbow_drain_pipe",
"left_elbow_drain_pipe",
"left_drain_pipe",
"right_drain_pipe",
"short_left_drain_pipe",
"short_right_drain_pipe",
"top_flow_meter",
"right_flow_meter",
"bottom_flow_meter",
"left_flow_meter",
"horizontal_inline_flow_meter",
"vertical_inline_flow_meter",
"centrifugal_pump",
"small_right_motor_pump",
"small_left_motor_pump",
"right_motor_pump",
"left_motor_pump",
"short_bottom_filter",
"long_bottom_filter",
"short_top_filter",
"long_top_filter",
"horizontal_wheel_valve",
"vertical_wheel_valve",
"horizontal_ball_valve",
"vertical_ball_valve",
"vertical_tank"
]
}

4
application/src/main/data/json/system/widget_types/power_button.json

File diff suppressed because one or more lines are too long

24
application/src/main/data/json/system/widget_types/scada_symbol.json

@ -0,0 +1,24 @@
{
"fqn": "scada_symbol",
"name": "SCADA symbol",
"deprecated": false,
"scada": true,
"image": null,
"description": "",
"descriptor": {
"type": "rpc",
"sizeX": 3,
"sizeY": 3,
"resources": [],
"templateHtml": "<tb-scada-symbol-widget\n [ctx]='ctx'\n [widgetTitlePanel]=\"widgetTitlePanel\">\n</tb-scada-symbol-widget>",
"templateCss": "",
"controllerScript": "self.onInit = function() {\n self.ctx.$scope.actionWidget.onInit();\n}\n\nself.typeParameters = function() {\n return {\n previewWidth: '300px',\n previewHeight: '320px',\n embedTitlePanel: true,\n targetDeviceOptional: true,\n displayRpcMessageToast: false\n };\n};\n\nself.onDestroy = function() {\n}\n",
"settingsSchema": "",
"dataKeySettingsSchema": "{}\n",
"settingsDirective": "tb-scada-symbol-widget-settings",
"hasBasicMode": true,
"basicModeDirective": "tb-scada-symbol-basic-config",
"defaultConfig": "{\"showTitle\":true,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"background\":{\"type\":\"color\",\"imageUrl\":null,\"color\":\"rgb(255, 255, 255)\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"padding\":\"12px\",\"scadaSymbolUrl\":\"\",\"scadaSymbolObjectSettings\":{\"behavior\":{},\"properties\":{}}},\"title\":\"SCADA symbol\",\"dropShadow\":true,\"enableFullscreen\":false,\"widgetStyle\":{},\"actions\":{},\"widgetCss\":\"\",\"noDataDisplayMessage\":\"\",\"titleFont\":{\"size\":16,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":null,\"lineHeight\":\"1.6\"},\"showTitleIcon\":false,\"titleTooltip\":\"\",\"titleStyle\":null,\"pageSize\":1024,\"titleIcon\":\"mdi:lightbulb-outline\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"24px\",\"configMode\":\"basic\",\"targetDevice\":null,\"titleColor\":null,\"borderRadius\":\"0px\",\"margin\":\"0px\"}"
},
"tags": null
}

4
application/src/main/data/json/system/widget_types/toggle_button.json

File diff suppressed because one or more lines are too long

49
application/src/main/data/upgrade/3.7.0/schema_update.sql

@ -14,6 +14,55 @@
-- limitations under the License.
--
-- UPDATE RESOURCE SUB TYPE START
DO
$$
BEGIN
IF NOT EXISTS (
SELECT FROM information_schema.columns
WHERE table_name = 'resource' AND column_name = 'resource_sub_type'
) THEN
ALTER TABLE resource ADD COLUMN resource_sub_type varchar(32);
UPDATE resource SET resource_sub_type = 'IMAGE' WHERE resource_type = 'IMAGE';
END IF;
END;
$$;
-- UPDATE RESOURCE SUB TYPE END
-- UPDATE WIDGETS BUNDLE START
DO
$$
BEGIN
IF NOT EXISTS (
SELECT FROM information_schema.columns
WHERE table_name = 'widgets_bundle' AND column_name = 'scada'
) THEN
ALTER TABLE widgets_bundle ADD COLUMN scada boolean NOT NULL DEFAULT false;
END IF;
END;
$$;
-- UPDATE WIDGETS BUNDLE END
-- UPDATE WIDGET TYPE START
DO
$$
BEGIN
IF NOT EXISTS (
SELECT FROM information_schema.columns
WHERE table_name = 'widget_type' AND column_name = 'scada'
) THEN
ALTER TABLE widget_type ADD COLUMN scada boolean NOT NULL DEFAULT false;
END IF;
END;
$$;
-- UPDATE WIDGET TYPE END
-- KV VERSIONING UPDATE START
CREATE SEQUENCE IF NOT EXISTS attribute_kv_version_seq cache 1;

2
application/src/main/java/org/thingsboard/server/controller/ControllerConstants.java

@ -117,6 +117,8 @@ public class ControllerConstants {
protected static final String RESOURCE_INFO_DESCRIPTION = "Resource Info is a lightweight object that includes main information about the Resource excluding the heavyweight data. ";
protected static final String RESOURCE_DESCRIPTION = "Resource is a heavyweight object that includes main information about the Resource and also data. ";
protected static final String RESOURCE_IMAGE_SUB_TYPE_DESCRIPTION = "A string value representing resource sub-type.";
protected static final String RESOURCE_INCLUDE_SYSTEM_IMAGES_DESCRIPTION = "Use 'true' to include system images. Disabled by default. Ignored for requests by users with system administrator authority.";
protected static final String RESOURCE_TEXT_SEARCH_DESCRIPTION = "The case insensitive 'substring' filter based on the resource title.";

28
application/src/main/java/org/thingsboard/server/controller/ImageController.java

@ -41,6 +41,7 @@ import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.thingsboard.server.common.data.ImageDescriptor;
import org.thingsboard.server.common.data.ImageExportData;
import org.thingsboard.server.common.data.ResourceSubType;
import org.thingsboard.server.common.data.ResourceType;
import org.thingsboard.server.common.data.TbImageDeleteResult;
import org.thingsboard.server.common.data.TbResource;
@ -65,6 +66,7 @@ import java.util.concurrent.TimeUnit;
import static org.thingsboard.server.controller.ControllerConstants.PAGE_NUMBER_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.PAGE_SIZE_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.RESOURCE_IMAGE_SUB_TYPE_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.RESOURCE_INCLUDE_SYSTEM_IMAGES_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.RESOURCE_TEXT_SEARCH_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.SORT_ORDER_DESCRIPTION;
@ -96,7 +98,8 @@ public class ImageController extends BaseController {
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
@PostMapping(value = "/api/image", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public TbResourceInfo uploadImage(@RequestPart MultipartFile file,
@RequestPart(required = false) String title) throws Exception {
@RequestPart(required = false) String title,
@RequestPart(required = false) String imageSubType) throws Exception {
SecurityUser user = getCurrentUser();
TbResource image = new TbResource();
image.setTenantId(user.getTenantId());
@ -109,7 +112,14 @@ public class ImageController extends BaseController {
} else {
image.setTitle(file.getOriginalFilename());
}
ResourceSubType subType = ResourceSubType.IMAGE;
if (StringUtils.isNotEmpty(imageSubType)) {
subType = ResourceSubType.valueOf(imageSubType);
}
image.setResourceType(ResourceType.IMAGE);
image.setResourceSubType(subType);
ImageDescriptor descriptor = new ImageDescriptor();
descriptor.setMediaType(file.getContentType());
image.setDescriptorValue(descriptor);
@ -194,6 +204,7 @@ public class ImageController extends BaseController {
.mediaType(descriptor.getMediaType())
.fileName(imageInfo.getFileName())
.title(imageInfo.getTitle())
.subType(imageInfo.getResourceSubType().name())
.resourceKey(imageInfo.getResourceKey())
.isPublic(imageInfo.isPublic())
.publicResourceKey(imageInfo.getPublicResourceKey())
@ -215,6 +226,11 @@ public class ImageController extends BaseController {
} else {
image.setTitle(imageData.getFileName());
}
if (StringUtils.isNotEmpty(imageData.getSubType())) {
image.setResourceSubType(ResourceSubType.valueOf(imageData.getSubType()));
} else {
image.setResourceSubType(ResourceSubType.IMAGE);
}
image.setResourceType(ResourceType.IMAGE);
image.setResourceKey(imageData.getResourceKey());
image.setPublic(imageData.isPublic());
@ -251,6 +267,8 @@ public class ImageController extends BaseController {
@RequestParam int pageSize,
@Parameter(description = PAGE_NUMBER_DESCRIPTION, required = true)
@RequestParam int page,
@Parameter(description = RESOURCE_IMAGE_SUB_TYPE_DESCRIPTION, schema = @Schema(allowableValues = {"IMAGE", "SCADA_SYMBOL"}))
@RequestParam(required = false) String imageSubType,
@Parameter(description = RESOURCE_INCLUDE_SYSTEM_IMAGES_DESCRIPTION)
@RequestParam(required = false) boolean includeSystemImages,
@Parameter(description = RESOURCE_TEXT_SEARCH_DESCRIPTION)
@ -262,10 +280,14 @@ public class ImageController extends BaseController {
// PE: generic permission
PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
TenantId tenantId = getTenantId();
ResourceSubType subType = ResourceSubType.IMAGE;
if (StringUtils.isNotEmpty(imageSubType)) {
subType = ResourceSubType.valueOf(imageSubType);
}
if (getCurrentUser().getAuthority() == Authority.SYS_ADMIN || !includeSystemImages) {
return checkNotNull(imageService.getImagesByTenantId(tenantId, pageLink));
return checkNotNull(imageService.getImagesByTenantId(tenantId, subType, pageLink));
} else {
return checkNotNull(imageService.getAllImagesByTenantId(tenantId, pageLink));
return checkNotNull(imageService.getAllImagesByTenantId(tenantId, subType, pageLink));
}
}

21
application/src/main/java/org/thingsboard/server/controller/WidgetTypeController.java

@ -41,8 +41,10 @@ import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.data.widget.DeprecatedFilter;
import org.thingsboard.server.common.data.widget.WidgetType;
import org.thingsboard.server.common.data.widget.WidgetTypeDetails;
import org.thingsboard.server.common.data.widget.WidgetTypeFilter;
import org.thingsboard.server.common.data.widget.WidgetTypeInfo;
import org.thingsboard.server.common.data.widget.WidgetsBundle;
import org.thingsboard.server.common.data.widget.WidgetsBundleFilter;
import org.thingsboard.server.config.annotations.ApiOperation;
import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.resource.ImageService;
@ -83,6 +85,7 @@ public class WidgetTypeController extends AutoCommitController {
private static final String WIDGET_TYPE_INFO_DESCRIPTION = "Widget Type Info is a lightweight object that represents Widget Type but does not contain the heavyweight widget descriptor JSON";
private static final String TENANT_ONLY_PARAM_DESCRIPTION = "Optional boolean parameter indicating whether only tenant widget types should be returned";
private static final String FULL_SEARCH_PARAM_DESCRIPTION = "Optional boolean parameter indicating whether search widgets by description not only by name";
private static final String SCADA_FIRST_PARAM_DESCRIPTION = "Optional boolean parameter indicating whether to fetch SCADA symbol widgets first";
private static final String DEPRECATED_FILTER_PARAM_DESCRIPTION = "Optional string parameter indicating whether to include deprecated widgets";
private static final String UPDATE_EXISTING_BY_FQN_PARAM_DESCRIPTION = "Optional boolean parameter indicating whether to update existing widget type by FQN if present instead of creating new one";
private static final String WIDGET_TYPE_ARRAY_DESCRIPTION = "A list of string values separated by comma ',' representing one of the widget type value";
@ -186,18 +189,26 @@ public class WidgetTypeController extends AutoCommitController {
@Parameter(description = DEPRECATED_FILTER_PARAM_DESCRIPTION, schema = @Schema(allowableValues = {"ALL", "ACTUAL", "DEPRECATED"}))
@RequestParam(required = false) String deprecatedFilter,
@Parameter(description = WIDGET_TYPE_ARRAY_DESCRIPTION, array = @ArraySchema(schema = @Schema(type = "string", allowableValues = {"timeseries", "latest", "control", "alarm", "static"})))
@RequestParam(required = false) String[] widgetTypeList) throws ThingsboardException {
@RequestParam(required = false) String[] widgetTypeList,
@Parameter(description = SCADA_FIRST_PARAM_DESCRIPTION)
@RequestParam(required = false) Boolean scadaFirst) throws ThingsboardException {
PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
List<String> widgetTypes = widgetTypeList != null ? Arrays.asList(widgetTypeList) : Collections.emptyList();
boolean fullSearchBool = fullSearch != null && fullSearch;
DeprecatedFilter widgetTypeDeprecatedFilter = StringUtils.isNotEmpty(deprecatedFilter) ? DeprecatedFilter.valueOf(deprecatedFilter) : DeprecatedFilter.ALL;
WidgetTypeFilter widgetTypeFilter = WidgetTypeFilter.builder()
.tenantId(getTenantId())
.widgetTypes(widgetTypes)
.deprecatedFilter(widgetTypeDeprecatedFilter)
.fullSearch(fullSearch != null && fullSearch)
.scadaFirst(scadaFirst != null && scadaFirst)
.build();
if (Authority.SYS_ADMIN.equals(getCurrentUser().getAuthority())) {
return checkNotNull(widgetTypeService.findSystemWidgetTypesByPageLink(getTenantId(), fullSearchBool, widgetTypeDeprecatedFilter, widgetTypes, pageLink));
return checkNotNull(widgetTypeService.findSystemWidgetTypesByPageLink(widgetTypeFilter, pageLink));
} else {
if (tenantOnly != null && tenantOnly) {
return checkNotNull(widgetTypeService.findTenantWidgetTypesByTenantIdAndPageLink(getTenantId(), fullSearchBool, widgetTypeDeprecatedFilter, widgetTypes, pageLink));
return checkNotNull(widgetTypeService.findTenantWidgetTypesByTenantIdAndPageLink(widgetTypeFilter, pageLink));
} else {
return checkNotNull(widgetTypeService.findAllTenantWidgetTypesByTenantIdAndPageLink(getTenantId(), fullSearchBool, widgetTypeDeprecatedFilter, widgetTypes, pageLink));
return checkNotNull(widgetTypeService.findAllTenantWidgetTypesByTenantIdAndPageLink(widgetTypeFilter, pageLink));
}
}
}

18
application/src/main/java/org/thingsboard/server/controller/WidgetsBundleController.java

@ -36,6 +36,7 @@ import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.data.widget.WidgetsBundle;
import org.thingsboard.server.common.data.widget.WidgetsBundleFilter;
import org.thingsboard.server.config.annotations.ApiOperation;
import org.thingsboard.server.dao.resource.ImageService;
import org.thingsboard.server.queue.util.TbCoreComponent;
@ -72,6 +73,7 @@ public class WidgetsBundleController extends BaseController {
private static final String WIDGET_BUNDLE_DESCRIPTION = "Widget Bundle represents a group(bundle) of widgets. Widgets are grouped into bundle by type or use case. ";
private static final String FULL_SEARCH_PARAM_DESCRIPTION = "Optional boolean parameter indicating extended search of widget bundles by description and by name / description of related widget types";
private static final String SCADA_FIRST_PARAM_DESCRIPTION = "Optional boolean parameter indicating whether to fetch widgets bundles with SCADA symbols first. Works only when fullSearch parameter is enabled";
private static final String TENANT_BUNDLES_ONLY_DESCRIPTION = "Optional boolean parameter to include only tenant-level bundles without system";
@ApiOperation(value = "Get Widget Bundle (getWidgetsBundleById)",
@ -198,16 +200,22 @@ public class WidgetsBundleController extends BaseController {
@Parameter(description = TENANT_BUNDLES_ONLY_DESCRIPTION)
@RequestParam(required = false) Boolean tenantOnly,
@Parameter(description = FULL_SEARCH_PARAM_DESCRIPTION)
@RequestParam(required = false) Boolean fullSearch) throws ThingsboardException {
@RequestParam(required = false) Boolean fullSearch,
@Parameter(description = SCADA_FIRST_PARAM_DESCRIPTION)
@RequestParam(required = false) Boolean scadaFirst) throws ThingsboardException {
PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
WidgetsBundleFilter widgetsBundleFilter = WidgetsBundleFilter.builder()
.tenantId(getTenantId())
.fullSearch(fullSearch != null && fullSearch)
.scadaFirst(scadaFirst != null && scadaFirst)
.build();
if (Authority.SYS_ADMIN.equals(getCurrentUser().getAuthority())) {
return checkNotNull(widgetsBundleService.findSystemWidgetsBundlesByPageLink(getTenantId(), fullSearch != null && fullSearch, pageLink));
return checkNotNull(widgetsBundleService.findSystemWidgetsBundlesByPageLink(widgetsBundleFilter, pageLink));
} else {
TenantId tenantId = getCurrentUser().getTenantId();
if (tenantOnly != null && tenantOnly) {
return checkNotNull(widgetsBundleService.findTenantWidgetsBundlesByTenantIdAndPageLink(tenantId, fullSearch != null && fullSearch, pageLink));
return checkNotNull(widgetsBundleService.findTenantWidgetsBundlesByTenantIdAndPageLink(widgetsBundleFilter, pageLink));
} else {
return checkNotNull(widgetsBundleService.findAllTenantWidgetsBundlesByTenantIdAndPageLink(tenantId, fullSearch != null && fullSearch, pageLink));
return checkNotNull(widgetsBundleService.findAllTenantWidgetsBundlesByTenantIdAndPageLink(widgetsBundleFilter, pageLink));
}
}
}

9
application/src/main/java/org/thingsboard/server/service/edge/rpc/fetch/SystemWidgetTypesEdgeEventFetcher.java

@ -20,6 +20,7 @@ import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.widget.DeprecatedFilter;
import org.thingsboard.server.common.data.widget.WidgetTypeFilter;
import org.thingsboard.server.common.data.widget.WidgetTypeInfo;
import org.thingsboard.server.dao.widget.WidgetTypeService;
@ -32,6 +33,12 @@ public class SystemWidgetTypesEdgeEventFetcher extends BaseWidgetTypesEdgeEventF
@Override
protected PageData<WidgetTypeInfo> findWidgetTypes(TenantId tenantId, PageLink pageLink) {
return widgetTypeService.findSystemWidgetTypesByPageLink(tenantId, false, DeprecatedFilter.ALL, null, pageLink);
return widgetTypeService.findSystemWidgetTypesByPageLink(
WidgetTypeFilter.builder()
.tenantId(tenantId)
.fullSearch(false)
.deprecatedFilter(DeprecatedFilter.ALL)
.widgetTypes(null).build(),
pageLink);
}
}

3
application/src/main/java/org/thingsboard/server/service/edge/rpc/fetch/SystemWidgetsBundlesEdgeEventFetcher.java

@ -20,6 +20,7 @@ import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.widget.WidgetsBundle;
import org.thingsboard.server.common.data.widget.WidgetsBundleFilter;
import org.thingsboard.server.dao.widget.WidgetsBundleService;
@Slf4j
@ -31,6 +32,6 @@ public class SystemWidgetsBundlesEdgeEventFetcher extends BaseWidgetsBundlesEdge
@Override
protected PageData<WidgetsBundle> findWidgetsBundles(TenantId tenantId, PageLink pageLink) {
return widgetsBundleService.findSystemWidgetsBundlesByPageLink(tenantId, false, pageLink);
return widgetsBundleService.findSystemWidgetsBundlesByPageLink(WidgetsBundleFilter.fromTenantId(tenantId), pageLink);
}
}

9
application/src/main/java/org/thingsboard/server/service/edge/rpc/fetch/TenantWidgetTypesEdgeEventFetcher.java

@ -20,6 +20,7 @@ import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.widget.DeprecatedFilter;
import org.thingsboard.server.common.data.widget.WidgetTypeFilter;
import org.thingsboard.server.common.data.widget.WidgetTypeInfo;
import org.thingsboard.server.dao.widget.WidgetTypeService;
@ -31,6 +32,12 @@ public class TenantWidgetTypesEdgeEventFetcher extends BaseWidgetTypesEdgeEventF
}
@Override
protected PageData<WidgetTypeInfo> findWidgetTypes(TenantId tenantId, PageLink pageLink) {
return widgetTypeService.findTenantWidgetTypesByTenantIdAndPageLink(tenantId, false, DeprecatedFilter.ALL, null, pageLink);
return widgetTypeService.findTenantWidgetTypesByTenantIdAndPageLink(
WidgetTypeFilter.builder()
.tenantId(tenantId)
.fullSearch(false)
.deprecatedFilter(DeprecatedFilter.ALL)
.widgetTypes(null).build(),
pageLink);
}
}

101
application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java

@ -16,6 +16,7 @@
package org.thingsboard.server.service.install;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.Getter;
import lombok.Setter;
import lombok.SneakyThrows;
@ -26,8 +27,12 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.common.data.Dashboard;
import org.thingsboard.server.common.data.DataConstants;
import org.thingsboard.server.common.data.ImageDescriptor;
import org.thingsboard.server.common.data.ResourceSubType;
import org.thingsboard.server.common.data.ResourceType;
import org.thingsboard.server.common.data.TbResource;
import org.thingsboard.server.common.data.TbResourceInfo;
import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.TenantId;
@ -43,8 +48,10 @@ import org.thingsboard.server.common.data.widget.WidgetsBundle;
import org.thingsboard.server.dao.dashboard.DashboardService;
import org.thingsboard.server.dao.exception.DataValidationException;
import org.thingsboard.server.dao.oauth2.OAuth2ConfigTemplateService;
import org.thingsboard.server.dao.resource.ImageService;
import org.thingsboard.server.dao.resource.ResourceService;
import org.thingsboard.server.dao.rule.RuleChainService;
import org.thingsboard.server.dao.util.ImageUtils;
import org.thingsboard.server.dao.widget.WidgetTypeService;
import org.thingsboard.server.dao.widget.WidgetsBundleService;
import org.thingsboard.server.service.install.update.ImagesUpdater;
@ -84,12 +91,14 @@ public class InstallScripts {
public static final String RULE_CHAINS_DIR = "rule_chains";
public static final String WIDGET_TYPES_DIR = "widget_types";
public static final String WIDGET_BUNDLES_DIR = "widget_bundles";
public static final String SCADA_SYMBOLS_DIR = "scada_symbols";
public static final String OAUTH2_CONFIG_TEMPLATES_DIR = "oauth2_config_templates";
public static final String DASHBOARDS_DIR = "dashboards";
public static final String MODELS_LWM2M_DIR = "lwm2m-registry";
public static final String CREDENTIALS_DIR = "credentials";
public static final String JSON_EXT = ".json";
public static final String SVG_EXT = ".svg";
public static final String XML_EXT = ".xml";
@Value("${install.data_dir:}")
@ -118,6 +127,9 @@ public class InstallScripts {
@Getter @Setter
private boolean updateImages = false;
@Autowired
private ImageService imageService;
Path getTenantRuleChainsDir() {
return Paths.get(getDataDir(), JSON_DIR, TENANT_DIR, RULE_CHAINS_DIR);
}
@ -253,6 +265,7 @@ public class InstallScripts {
);
}
}
this.loadSystemScadaSymbols();
for (var widgetsBundleDescriptorEntry : widgetsBundlesMap.entrySet()) {
Path path = widgetsBundleDescriptorEntry.getKey();
try {
@ -290,6 +303,94 @@ public class InstallScripts {
}
}
private void loadSystemScadaSymbols() throws Exception {
log.info("Loading system SCADA symbols");
Path scadaSymbolsDir = Paths.get(getDataDir(), JSON_DIR, SYSTEM_DIR, SCADA_SYMBOLS_DIR);
if (Files.exists(scadaSymbolsDir)) {
WidgetTypeDetails scadaSymbolWidgetTemplate = widgetTypeService.findWidgetTypeDetailsByTenantIdAndFqn(TenantId.SYS_TENANT_ID, "scada_symbol");
try (DirectoryStream<Path> dirStream = Files.newDirectoryStream(scadaSymbolsDir, path -> path.toString().endsWith(SVG_EXT))) {
dirStream.forEach(
path -> {
try {
var fileName = path.getFileName().toString();
var scadaSymbolData = Files.readAllBytes(path);
var metadata = ImageUtils.processScadaSymbolMetadata(fileName, scadaSymbolData);
TbResourceInfo savedScadaSymbol = saveScadaSymbol(metadata, fileName, scadaSymbolData);
if (scadaSymbolWidgetTemplate != null) {
saveScadaSymbolWidget(scadaSymbolWidgetTemplate, savedScadaSymbol, metadata);
}
} catch (Exception e) {
log.error("Unable to load SCADA symbol from file: [{}]", path.toString());
throw new RuntimeException("Unable to load SCADA symbol from file", e);
}
}
);
}
}
}
private TbResourceInfo saveScadaSymbol(ImageUtils.ScadaSymbolMetadataInfo metadata, String fileName, byte[] scadaSymbolData) {
String etag = imageService.calculateImageEtag(scadaSymbolData);
var existingImage = imageService.findSystemOrTenantImageByEtag(TenantId.SYS_TENANT_ID, etag);
if (existingImage != null && ResourceSubType.SCADA_SYMBOL.equals(existingImage.getResourceSubType())) {
return existingImage;
} else {
var existing = imageService.getImageInfoByTenantIdAndKey(TenantId.SYS_TENANT_ID, fileName);
if (existing != null && ResourceSubType.SCADA_SYMBOL.equals(existing.getResourceSubType())) {
imageService.deleteImage(existing, true);
}
TbResource image = new TbResource();
image.setTenantId(TenantId.SYS_TENANT_ID);
image.setFileName(fileName);
image.setTitle(metadata.getTitle());
image.setResourceSubType(ResourceSubType.SCADA_SYMBOL);
image.setResourceType(ResourceType.IMAGE);
image.setPublic(true);
ImageDescriptor descriptor = new ImageDescriptor();
descriptor.setMediaType("image/svg+xml");
image.setDescriptorValue(descriptor);
image.setData(scadaSymbolData);
return imageService.saveImage(image);
}
}
private WidgetTypeDetails saveScadaSymbolWidget(WidgetTypeDetails template, TbResourceInfo scadaSymbol,
ImageUtils.ScadaSymbolMetadataInfo metadata) {
String symbolUrl = DataConstants.TB_IMAGE_PREFIX + scadaSymbol.getLink();
WidgetTypeDetails scadaSymbolWidget = new WidgetTypeDetails();
JsonNode descriptor = JacksonUtil.clone(template.getDescriptor());
scadaSymbolWidget.setDescriptor(descriptor);
scadaSymbolWidget.setName(metadata.getTitle());
scadaSymbolWidget.setImage(symbolUrl);
scadaSymbolWidget.setDescription(metadata.getDescription());
scadaSymbolWidget.setTags(metadata.getSearchTags());
scadaSymbolWidget.setScada(true);
ObjectNode defaultConfig = null;
if (descriptor.has("defaultConfig")) {
defaultConfig = JacksonUtil.fromString(descriptor.get("defaultConfig").asText(), ObjectNode.class);
}
if (defaultConfig == null) {
defaultConfig = JacksonUtil.newObjectNode();
}
defaultConfig.put("title", metadata.getTitle());
ObjectNode settings;
if (defaultConfig.has("settings")) {
settings = (ObjectNode)defaultConfig.get("settings");
} else {
settings = JacksonUtil.newObjectNode();
defaultConfig.set("settings", settings);
}
settings.put("scadaSymbolUrl", symbolUrl);
((ObjectNode)descriptor).put("defaultConfig", JacksonUtil.toString(defaultConfig));
((ObjectNode)descriptor).put("sizeX", metadata.getWidgetSizeX());
((ObjectNode)descriptor).put("sizeY", metadata.getWidgetSizeY());
String controllerScript = descriptor.get("controllerScript").asText();
controllerScript = controllerScript.replaceAll("previewWidth: '\\d*px'", "previewWidth: '" + (metadata.getWidgetSizeX() * 100) + "px'");
controllerScript = controllerScript.replaceAll("previewHeight: '\\d*px'", "previewHeight: '" + (metadata.getWidgetSizeY() * 100 + 20) + "px'");
((ObjectNode)descriptor).put("controllerScript", controllerScript);
return widgetTypeService.saveWidgetType(scadaSymbolWidget);
}
private void deleteSystemWidgetBundle(String bundleAlias) {
WidgetsBundle widgetsBundle = widgetsBundleService.findWidgetsBundleByTenantIdAndAlias(TenantId.SYS_TENANT_ID, bundleAlias);
if (widgetsBundle != null) {

23
application/src/main/resources/thingsboard.yml

@ -773,7 +773,28 @@ spring:
leakDetectionThreshold: "${SPRING_DATASOURCE_HIKARI_LEAK_DETECTION_THRESHOLD:0}"
# This property increases the number of connections in the pool as demand increases. At the same time, the property ensures that the pool doesn't grow to the point of exhausting a system's resources, which ultimately affects an application's performance and availability
maximumPoolSize: "${SPRING_DATASOURCE_MAXIMUM_POOL_SIZE:16}"
registerMbeans: "${SPRING_DATASOURCE_HIKARI_REGISTER_MBEANS:false}" # true - enable MBean to diagnose pools state via JMX
# Enable MBean to diagnose pools state via JMX
registerMbeans: "${SPRING_DATASOURCE_HIKARI_REGISTER_MBEANS:false}"
events:
# Enable dedicated datasource (a separate database) for events and audit logs.
# Before enabling this, make sure you have set up the following tables in the new DB:
# error_event, lc_event, rule_chain_debug_event, rule_node_debug_event, stats_event, audit_log
enabled: "${SPRING_DEDICATED_EVENTS_DATASOURCE_ENABLED:false}"
# Database driver for Spring JPA for events datasource
driverClassName: "${SPRING_EVENTS_DATASOURCE_DRIVER_CLASS_NAME:org.postgresql.Driver}"
# Database connection URL for events datasource
url: "${SPRING_EVENTS_DATASOURCE_URL:jdbc:postgresql://localhost:5432/thingsboard_events}"
# Database username for events datasource
username: "${SPRING_EVENTS_DATASOURCE_USERNAME:postgres}"
# Database user password for events datasource
password: "${SPRING_EVENTS_DATASOURCE_PASSWORD:postgres}"
hikari:
# This property controls the amount of time that a connection can be out of the pool before a message is logged indicating a possible connection leak for events datasource. A value of 0 means leak detection is disabled
leakDetectionThreshold: "${SPRING_EVENTS_DATASOURCE_HIKARI_LEAK_DETECTION_THRESHOLD:0}"
# This property increases the number of connections in the pool as demand increases for events datasource. At the same time, the property ensures that the pool doesn't grow to the point of exhausting a system's resources, which ultimately affects an application's performance and availability
maximumPoolSize: "${SPRING_EVENTS_DATASOURCE_MAXIMUM_POOL_SIZE:16}"
# Enable MBean to diagnose pools state via JMX for events datasource
registerMbeans: "${SPRING_EVENTS_DATASOURCE_HIKARI_REGISTER_MBEANS:false}"
# Audit log parameters
audit-log:

28
application/src/test/java/org/thingsboard/server/controller/AuditLogControllerTest.java

@ -17,6 +17,7 @@ package org.thingsboard.server.controller;
import com.datastax.oss.driver.api.core.uuid.Uuids;
import com.fasterxml.jackson.core.type.TypeReference;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.junit.After;
import org.junit.Assert;
@ -64,6 +65,7 @@ public class AuditLogControllerTest extends AbstractControllerTest {
@Autowired
private AuditLogDao auditLogDao;
@Getter
@SpyBean
private SqlPartitioningRepository partitioningRepository;
@SpyBean
@ -183,12 +185,12 @@ public class AuditLogControllerTest extends AbstractControllerTest {
@Test
public void whenSavingNewAuditLog_thenCheckAndCreatePartitionIfNotExists() throws ParseException {
long entityTs = ISO_8601_EXTENDED_DATETIME_TIME_ZONE_FORMAT.parse("2024-01-01T01:43:11Z").getTime();
reset(partitioningRepository);
reset(getPartitioningRepository());
AuditLog auditLog = createAuditLog(ActionType.LOGIN, tenantAdminUserId, entityTs);
verify(partitioningRepository).createPartitionIfNotExists(eq("audit_log"), eq(auditLog.getCreatedTime()), eq(partitionDurationInMs));
verify(getPartitioningRepository()).createPartitionIfNotExists(eq("audit_log"), eq(auditLog.getCreatedTime()), eq(partitionDurationInMs));
List<Long> partitions = partitioningRepository.fetchPartitions("audit_log");
assertThat(partitions).contains(partitioningRepository.calculatePartitionStartTime(auditLog.getCreatedTime(), partitionDurationInMs));
List<Long> partitions = getPartitioningRepository().fetchPartitions("audit_log");
assertThat(partitions).contains(getPartitioningRepository().calculatePartitionStartTime(auditLog.getCreatedTime(), partitionDurationInMs));
}
@Test
@ -197,15 +199,15 @@ public class AuditLogControllerTest extends AbstractControllerTest {
final long oldAuditLogTs = ISO_8601_EXTENDED_DATETIME_TIME_ZONE_FORMAT.parse("2020-10-01T00:00:00Z").getTime();
final long currentTimeMillis = oldAuditLogTs + TimeUnit.SECONDS.toMillis(auditLogsTtlInSec) * 2;
final long partitionStartTs = partitioningRepository.calculatePartitionStartTime(oldAuditLogTs, partitionDurationInMs);
partitioningRepository.createPartitionIfNotExists("audit_log", oldAuditLogTs, partitionDurationInMs);
List<Long> partitions = partitioningRepository.fetchPartitions("audit_log");
final long partitionStartTs = getPartitioningRepository().calculatePartitionStartTime(oldAuditLogTs, partitionDurationInMs);
getPartitioningRepository().createPartitionIfNotExists("audit_log", oldAuditLogTs, partitionDurationInMs);
List<Long> partitions = getPartitioningRepository().fetchPartitions("audit_log");
assertThat(partitions).contains(partitionStartTs);
willReturn(currentTimeMillis).given(auditLogsCleanUpService).getCurrentTimeMillis();
auditLogsCleanUpService.cleanUp();
partitions = partitioningRepository.fetchPartitions("audit_log");
partitions = getPartitioningRepository().fetchPartitions("audit_log");
assertThat(partitions).as("partitions cleared").doesNotContain(partitionStartTs);
assertThat(partitions).as("only newer partitions left").allSatisfy(partitionsStart -> {
long partitionEndTs = partitionsStart + partitionDurationInMs;
@ -218,18 +220,18 @@ public class AuditLogControllerTest extends AbstractControllerTest {
// creating partition bigger than sql.audit_logs.partition_size
long entityTs = ISO_8601_EXTENDED_DATETIME_TIME_ZONE_FORMAT.parse("2022-04-29T07:43:11Z").getTime();
//the partition 7 days is overlapping default partition size 1 day, use in the far past to not affect other tests
partitioningRepository.createPartitionIfNotExists("audit_log", entityTs, TimeUnit.DAYS.toMillis(7));
List<Long> partitions = partitioningRepository.fetchPartitions("audit_log");
getPartitioningRepository().createPartitionIfNotExists("audit_log", entityTs, TimeUnit.DAYS.toMillis(7));
List<Long> partitions = getPartitioningRepository().fetchPartitions("audit_log");
log.warn("entityTs [{}], fetched partitions {}", entityTs, partitions);
assertThat(partitions).contains(ISO_8601_EXTENDED_DATETIME_TIME_ZONE_FORMAT.parse("2022-04-28T00:00:00Z").getTime());
partitioningRepository.cleanupPartitionsCache("audit_log", entityTs, 0);
getPartitioningRepository().cleanupPartitionsCache("audit_log", entityTs, 0);
assertDoesNotThrow(() -> {
// expecting partition overlap error on partition save
createAuditLog(ActionType.LOGIN, tenantAdminUserId, entityTs);
});
assertThat(partitioningRepository.fetchPartitions("audit_log"))
.contains(ISO_8601_EXTENDED_DATETIME_TIME_ZONE_FORMAT.parse("2022-04-28T00:00:00Z").getTime());;
assertThat(getPartitioningRepository().fetchPartitions("audit_log"))
.contains(ISO_8601_EXTENDED_DATETIME_TIME_ZONE_FORMAT.parse("2022-04-28T00:00:00Z").getTime());
}
private AuditLog createAuditLog(ActionType actionType, EntityId entityId, long entityTs) {

36
application/src/test/java/org/thingsboard/server/controller/AuditLogControllerTest_DedicatedEventsDataSource.java

@ -0,0 +1,36 @@
/**
* Copyright © 2016-2024 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.controller;
import lombok.Getter;
import org.springframework.boot.test.mock.mockito.SpyBean;
import org.springframework.test.context.TestPropertySource;
import org.thingsboard.server.dao.service.DaoSqlTest;
import org.thingsboard.server.dao.sqlts.insert.sql.DedicatedEventsSqlPartitioningRepository;
@DaoSqlTest
@TestPropertySource(properties = {
"spring.datasource.events.enabled=true",
"spring.datasource.events.url=${spring.datasource.url}",
"spring.datasource.events.driverClassName=${spring.datasource.driverClassName}",
})
public class AuditLogControllerTest_DedicatedEventsDataSource extends AuditLogControllerTest {
@Getter
@SpyBean
private DedicatedEventsSqlPartitioningRepository partitioningRepository;
}

61
application/src/test/java/org/thingsboard/server/controller/ImageControllerTest.java

@ -23,11 +23,14 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.mock.web.MockPart;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.common.data.ImageDescriptor;
import org.thingsboard.server.common.data.ImageExportData;
import org.thingsboard.server.common.data.ResourceSubType;
import org.thingsboard.server.common.data.ResourceType;
import org.thingsboard.server.common.data.StringUtils;
import org.thingsboard.server.common.data.SystemParams;
import org.thingsboard.server.common.data.TbResourceInfo;
import org.thingsboard.server.common.data.page.PageData;
@ -35,6 +38,7 @@ import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.dao.service.DaoSqlTest;
import org.thingsboard.server.dao.sql.resource.TbResourceRepository;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.List;
@ -66,6 +70,8 @@ public class ImageControllerTest extends AbstractControllerTest {
String filename = "my_png_image.png";
TbResourceInfo imageInfo = uploadImage(HttpMethod.POST, "/api/image", filename, "image/png", PNG_IMAGE);
assertThat(imageInfo.getResourceSubType()).isEqualTo(ResourceSubType.IMAGE);
assertThat(imageInfo.getTitle()).isEqualTo(filename);
assertThat(imageInfo.getResourceType()).isEqualTo(ResourceType.IMAGE);
assertThat(imageInfo.getResourceKey()).isEqualTo(filename);
@ -85,6 +91,8 @@ public class ImageControllerTest extends AbstractControllerTest {
String filename = "my_jpeg_image.jpg";
TbResourceInfo imageInfo = uploadImage(HttpMethod.POST, "/api/image", filename, "image/jpeg", JPEG_IMAGE);
assertThat(imageInfo.getResourceSubType()).isEqualTo(ResourceSubType.IMAGE);
ImageDescriptor imageDescriptor = imageInfo.getDescriptor(ImageDescriptor.class);
checkJpegImageDescriptor(imageDescriptor);
@ -97,6 +105,22 @@ public class ImageControllerTest extends AbstractControllerTest {
String filename = "my_svg_image.svg";
TbResourceInfo imageInfo = uploadImage(HttpMethod.POST, "/api/image", filename, "image/svg+xml", SVG_IMAGE);
assertThat(imageInfo.getResourceSubType()).isEqualTo(ResourceSubType.IMAGE);
ImageDescriptor imageDescriptor = imageInfo.getDescriptor(ImageDescriptor.class);
checkSvgImageDescriptor(imageDescriptor);
assertThat(downloadImage("tenant", filename)).containsExactly(SVG_IMAGE);
assertThat(downloadImagePreview("tenant", filename)).hasSize((int) imageDescriptor.getPreviewDescriptor().getSize());
}
@Test
public void testUploadScadaSymbolImage() throws Exception {
String filename = "my_scada_symbol_image.svg";
TbResourceInfo imageInfo = uploadImage(HttpMethod.POST, "/api/image", ResourceSubType.SCADA_SYMBOL.name(), filename, "image/svg+xml", SVG_IMAGE);
assertThat(imageInfo.getResourceSubType()).isEqualTo(ResourceSubType.SCADA_SYMBOL);
ImageDescriptor imageDescriptor = imageInfo.getDescriptor(ImageDescriptor.class);
checkSvgImageDescriptor(imageDescriptor);
@ -175,6 +199,7 @@ public class ImageControllerTest extends AbstractControllerTest {
assertThat(exportData.getMediaType()).isEqualTo("image/png");
assertThat(exportData.getFileName()).isEqualTo(filename);
assertThat(exportData.getTitle()).isEqualTo(filename);
assertThat(exportData.getSubType()).isEqualTo(ResourceSubType.IMAGE.name());
assertThat(exportData.getResourceKey()).isEqualTo(filename);
assertThat(exportData.getData()).isEqualTo(Base64.getEncoder().encodeToString(PNG_IMAGE));
assertThat(exportData.isPublic()).isTrue();
@ -184,6 +209,7 @@ public class ImageControllerTest extends AbstractControllerTest {
TbResourceInfo importedImageInfo = doPut("/api/image/import", exportData, TbResourceInfo.class);
assertThat(importedImageInfo.getTitle()).isEqualTo(filename);
assertThat(exportData.getSubType()).isEqualTo(ResourceSubType.IMAGE.name());
assertThat(importedImageInfo.getResourceKey()).isEqualTo(filename);
assertThat(importedImageInfo.getFileName()).isEqualTo(filename);
assertThat(importedImageInfo.isPublic()).isTrue();
@ -198,20 +224,37 @@ public class ImageControllerTest extends AbstractControllerTest {
String systemImageName = "my_system_png_image.png";
TbResourceInfo systemImage = uploadImage(HttpMethod.POST, "/api/image", systemImageName, "image/png", PNG_IMAGE);
String systemScadaSymbolName = "my_system_scada_symbol_image.svg";
TbResourceInfo systemScadaSymbol = uploadImage(HttpMethod.POST, "/api/image", ResourceSubType.SCADA_SYMBOL.name(), systemScadaSymbolName, "image/svg+xml", SVG_IMAGE);
loginTenantAdmin();
String tenantImageName = "my_jpeg_image.jpg";
TbResourceInfo tenantImage = uploadImage(HttpMethod.POST, "/api/image", tenantImageName, "image/jpeg", JPEG_IMAGE);
String tenantScadaSymbolName = "my_scada_symbol_image.svg";
TbResourceInfo tenantScadaSymbol = uploadImage(HttpMethod.POST, "/api/image", ResourceSubType.SCADA_SYMBOL.name(), tenantScadaSymbolName, "image/svg+xml", SVG_IMAGE);
List<TbResourceInfo> tenantImages = getImages(null, false, 10);
assertThat(tenantImages).containsOnly(tenantImage);
List<TbResourceInfo> tenantScadaSymbols = getImages(null, ResourceSubType.SCADA_SYMBOL.name(), false, 10);
assertThat(tenantScadaSymbols).containsOnly(tenantScadaSymbol);
List<TbResourceInfo> allImages = getImages(null, true, 10);
assertThat(allImages).containsOnly(tenantImage, systemImage);
List<TbResourceInfo> allScadaSymbols = getImages(null, ResourceSubType.SCADA_SYMBOL.name(), true, 10);
assertThat(allScadaSymbols).containsOnly(tenantScadaSymbol, systemScadaSymbol);
assertThat(getImages("png", true, 10))
.containsOnly(systemImage);
assertThat(getImages("jpg", true, 10))
.containsOnly(tenantImage);
assertThat(getImages("my_system_scada_symbol", ResourceSubType.SCADA_SYMBOL.name(), true, 10))
.containsOnly(systemScadaSymbol);
assertThat(getImages("my_scada_symbol", ResourceSubType.SCADA_SYMBOL.name(),true, 10))
.containsOnly(tenantScadaSymbol);
}
@Test
@ -312,7 +355,15 @@ public class ImageControllerTest extends AbstractControllerTest {
}
private List<TbResourceInfo> getImages(String searchText, boolean includeSystemImages, int limit) throws Exception {
PageData<TbResourceInfo> images = doGetTypedWithPageLink("/api/images?includeSystemImages=" + includeSystemImages + "&", new TypeReference<>() {}, new PageLink(limit, 0, searchText));
return this.getImages(searchText, null, includeSystemImages, limit);
}
private List<TbResourceInfo> getImages(String searchText, String imageSubType, boolean includeSystemImages, int limit) throws Exception {
var url = "/api/images?includeSystemImages=" + includeSystemImages + "&";
if (StringUtils.isNotEmpty(imageSubType)) {
url += "imageSubType=" + imageSubType+ "&";
}
PageData<TbResourceInfo> images = doGetTypedWithPageLink(url, new TypeReference<>() {}, new PageLink(limit, 0, searchText));
return images.getData();
}
@ -332,8 +383,16 @@ public class ImageControllerTest extends AbstractControllerTest {
}
private <R> TbResourceInfo uploadImage(HttpMethod httpMethod, String url, String filename, String mediaType, byte[] content) throws Exception {
return this.uploadImage(httpMethod, url, null, filename, mediaType, content);
}
private <R> TbResourceInfo uploadImage(HttpMethod httpMethod, String url, String subType, String filename, String mediaType, byte[] content) throws Exception {
MockMultipartFile file = new MockMultipartFile("file", filename, mediaType, content);
var request = MockMvcRequestBuilders.multipart(httpMethod, url).file(file);
if (StringUtils.isNotEmpty(subType)) {
var imageSubTypePart = new MockPart("imageSubType", subType.getBytes(StandardCharsets.UTF_8));
request.part(imageSubTypePart);
}
setJwtToken(request);
return readResponse(mockMvc.perform(request).andExpect(status().isOk()), TbResourceInfo.class);
}

3
application/src/test/java/org/thingsboard/server/service/install/InstallScriptsTest.java

@ -29,6 +29,7 @@ import org.thingsboard.server.common.data.rule.RuleChain;
import org.thingsboard.server.common.data.rule.RuleChainMetaData;
import org.thingsboard.server.dao.dashboard.DashboardService;
import org.thingsboard.server.dao.oauth2.OAuth2ConfigTemplateService;
import org.thingsboard.server.dao.resource.ImageService;
import org.thingsboard.server.dao.resource.ResourceService;
import org.thingsboard.server.dao.rule.RuleChainService;
import org.thingsboard.server.dao.service.validator.RuleChainDataValidator;
@ -65,6 +66,8 @@ class InstallScriptsTest {
@MockBean
ResourceService resourceService;
@MockBean
ImageService imageService;
@MockBean
ImagesUpdater imagesUpdater;
@SpyBean
InstallScripts installScripts;

7
common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ImageService.java

@ -17,6 +17,7 @@ package org.thingsboard.server.dao.resource;
import org.thingsboard.server.common.data.Dashboard;
import org.thingsboard.server.common.data.HasImage;
import org.thingsboard.server.common.data.ResourceSubType;
import org.thingsboard.server.common.data.TbImageDeleteResult;
import org.thingsboard.server.common.data.TbResource;
import org.thingsboard.server.common.data.TbResourceInfo;
@ -36,9 +37,9 @@ public interface ImageService {
TbResourceInfo getPublicImageInfoByKey(String publicResourceKey);
PageData<TbResourceInfo> getImagesByTenantId(TenantId tenantId, PageLink pageLink);
PageData<TbResourceInfo> getImagesByTenantId(TenantId tenantId, ResourceSubType imageSubType, PageLink pageLink);
PageData<TbResourceInfo> getAllImagesByTenantId(TenantId tenantId, PageLink pageLink);
PageData<TbResourceInfo> getAllImagesByTenantId(TenantId tenantId, ResourceSubType imageSubType, PageLink pageLink);
byte[] getImageData(TenantId tenantId, TbResourceId imageId);
@ -46,6 +47,8 @@ public interface ImageService {
TbImageDeleteResult deleteImage(TbResourceInfo imageInfo, boolean force);
String calculateImageEtag(byte[] imageData);
TbResourceInfo findSystemOrTenantImageByEtag(TenantId tenantId, String etag);
boolean replaceBase64WithImageUrl(HasImage entity, String type);

9
common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java

@ -23,6 +23,7 @@ import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.widget.DeprecatedFilter;
import org.thingsboard.server.common.data.widget.WidgetType;
import org.thingsboard.server.common.data.widget.WidgetTypeDetails;
import org.thingsboard.server.common.data.widget.WidgetTypeFilter;
import org.thingsboard.server.common.data.widget.WidgetTypeInfo;
import org.thingsboard.server.dao.entity.EntityDaoService;
@ -40,11 +41,11 @@ public interface WidgetTypeService extends EntityDaoService {
void deleteWidgetType(TenantId tenantId, WidgetTypeId widgetTypeId);
PageData<WidgetTypeInfo> findSystemWidgetTypesByPageLink(TenantId tenantId, boolean fullSearch, DeprecatedFilter deprecatedFilter, List<String> widgetTypes, PageLink pageLink);
PageData<WidgetTypeInfo> findSystemWidgetTypesByPageLink(WidgetTypeFilter widgetTypeFilter, PageLink pageLink);
PageData<WidgetTypeInfo> findAllTenantWidgetTypesByTenantIdAndPageLink(TenantId tenantId, boolean fullSearch, DeprecatedFilter deprecatedFilter, List<String> widgetTypes, PageLink pageLink);
PageData<WidgetTypeInfo> findAllTenantWidgetTypesByTenantIdAndPageLink(WidgetTypeFilter widgetTypeFilter, PageLink pageLink);
PageData<WidgetTypeInfo> findTenantWidgetTypesByTenantIdAndPageLink(TenantId tenantId, boolean fullSearch, DeprecatedFilter deprecatedFilter, List<String> widgetTypes, PageLink pageLink);
PageData<WidgetTypeInfo> findTenantWidgetTypesByTenantIdAndPageLink(WidgetTypeFilter widgetTypeFilter, PageLink pageLink);
List<WidgetType> findWidgetTypesByWidgetsBundleId(TenantId tenantId, WidgetsBundleId widgetsBundleId);
@ -56,6 +57,8 @@ public interface WidgetTypeService extends EntityDaoService {
WidgetType findWidgetTypeByTenantIdAndFqn(TenantId tenantId, String fqn);
WidgetTypeDetails findWidgetTypeDetailsByTenantIdAndFqn(TenantId tenantId, String fqn);
void updateWidgetsBundleWidgetTypes(TenantId tenantId, WidgetsBundleId widgetsBundleId, List<WidgetTypeId> widgetTypeIds);
void updateWidgetsBundleWidgetFqns(TenantId tenantId, WidgetsBundleId widgetsBundleId, List<String> widgetFqns);

7
common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java

@ -20,6 +20,7 @@ import org.thingsboard.server.common.data.id.WidgetsBundleId;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.widget.WidgetsBundle;
import org.thingsboard.server.common.data.widget.WidgetsBundleFilter;
import org.thingsboard.server.dao.entity.EntityDaoService;
import java.util.List;
@ -34,15 +35,15 @@ public interface WidgetsBundleService extends EntityDaoService {
WidgetsBundle findWidgetsBundleByTenantIdAndAlias(TenantId tenantId, String alias);
PageData<WidgetsBundle> findSystemWidgetsBundlesByPageLink(TenantId tenantId, boolean fullSearch, PageLink pageLink);
PageData<WidgetsBundle> findSystemWidgetsBundlesByPageLink(WidgetsBundleFilter widgetsBundleFilter, PageLink pageLink);
List<WidgetsBundle> findSystemWidgetsBundles(TenantId tenantId);
PageData<WidgetsBundle> findTenantWidgetsBundlesByTenantId(TenantId tenantId, PageLink pageLink);
PageData<WidgetsBundle> findAllTenantWidgetsBundlesByTenantIdAndPageLink(TenantId tenantId, boolean fullSearch, PageLink pageLink);
PageData<WidgetsBundle> findAllTenantWidgetsBundlesByTenantIdAndPageLink(WidgetsBundleFilter widgetsBundleFilter, PageLink pageLink);
PageData<WidgetsBundle> findTenantWidgetsBundlesByTenantIdAndPageLink(TenantId tenantId, boolean fullSearch, PageLink pageLink);
PageData<WidgetsBundle> findTenantWidgetsBundlesByTenantIdAndPageLink(WidgetsBundleFilter widgetsBundleFilter, PageLink pageLink);
List<WidgetsBundle> findAllTenantWidgetsBundlesByTenantId(TenantId tenantId);

1
common/data/src/main/java/org/thingsboard/server/common/data/ImageExportData.java

@ -33,6 +33,7 @@ public class ImageExportData {
private String mediaType;
private String fileName;
private String title;
private String subType;
private String resourceKey;
private boolean isPublic;
private String publicResourceKey;

10
dao/src/main/java/org/thingsboard/server/dao/sql/event/EventCleanupRepository.java → common/data/src/main/java/org/thingsboard/server/common/data/ResourceSubType.java

@ -13,11 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.dao.sql.event;
package org.thingsboard.server.common.data;
public interface EventCleanupRepository {
void cleanupEvents(long eventExpTime, boolean debug);
void migrateEvents(long regularEventTs, long debugEventTs);
public enum ResourceSubType {
IMAGE,
SCADA_SYMBOL
}

3
common/data/src/main/java/org/thingsboard/server/common/data/TbResourceInfo.java

@ -46,6 +46,8 @@ public class TbResourceInfo extends BaseData<TbResourceId> implements HasName, H
private String title;
@Schema(description = "Resource type.", example = "LWM2M_MODEL", accessMode = Schema.AccessMode.READ_ONLY)
private ResourceType resourceType;
@Schema(description = "Resource sub type.", example = "IOT_SVG", accessMode = Schema.AccessMode.READ_ONLY)
private ResourceSubType resourceSubType;
@NoXss
@Length(fieldName = "resourceKey")
@Schema(description = "Resource key.", example = "19_1.0", accessMode = Schema.AccessMode.READ_ONLY)
@ -78,6 +80,7 @@ public class TbResourceInfo extends BaseData<TbResourceId> implements HasName, H
this.tenantId = resourceInfo.tenantId;
this.title = resourceInfo.title;
this.resourceType = resourceInfo.resourceType;
this.resourceSubType = resourceInfo.resourceSubType;
this.resourceKey = resourceInfo.resourceKey;
this.searchText = resourceInfo.searchText;
this.isPublic = resourceInfo.isPublic;

1
common/data/src/main/java/org/thingsboard/server/common/data/TbResourceInfoFilter.java

@ -27,5 +27,6 @@ public class TbResourceInfoFilter {
private TenantId tenantId;
private Set<ResourceType> resourceTypes;
private Set<ResourceSubType> resourceSubTypes;
}

4
common/data/src/main/java/org/thingsboard/server/common/data/widget/BaseWidgetType.java

@ -47,6 +47,9 @@ public class BaseWidgetType extends BaseData<WidgetTypeId> implements HasName, H
@Schema(description = "Whether widget type is deprecated.", example = "true")
private boolean deprecated;
@Schema(description = "Whether widget type is SCADA symbol.", example = "true")
private boolean scada;
private Long version;
public BaseWidgetType() {
@ -63,6 +66,7 @@ public class BaseWidgetType extends BaseData<WidgetTypeId> implements HasName, H
this.fqn = widgetType.getFqn();
this.name = widgetType.getName();
this.deprecated = widgetType.isDeprecated();
this.scada = widgetType.isScada();
this.version = widgetType.getVersion();
}

34
common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetTypeFilter.java

@ -0,0 +1,34 @@
/**
* Copyright © 2016-2024 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.common.data.widget;
import lombok.Builder;
import lombok.Data;
import org.thingsboard.server.common.data.id.TenantId;
import java.util.List;
@Data
@Builder
public class WidgetTypeFilter {
private TenantId tenantId;
private boolean fullSearch;
private boolean scadaFirst;
DeprecatedFilter deprecatedFilter;
List<String> widgetTypes;
}

6
common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetsBundle.java

@ -62,6 +62,11 @@ public class WidgetsBundle extends BaseData<WidgetsBundleId> implements HasName,
@Schema(description = "Relative or external image URL. Replaced with image data URL (Base64) in case of relative URL and 'inlineImages' option enabled.", accessMode = Schema.AccessMode.READ_ONLY)
private String image;
@Getter
@Setter
@Schema(description = "Whether widgets bundle contains SCADA symbol widget types.", accessMode = Schema.AccessMode.READ_ONLY)
private boolean scada;
@NoXss
@Length(fieldName = "description", max = 1024)
@Getter
@ -95,6 +100,7 @@ public class WidgetsBundle extends BaseData<WidgetsBundleId> implements HasName,
this.alias = widgetsBundle.getAlias();
this.title = widgetsBundle.getTitle();
this.image = widgetsBundle.getImage();
this.scada = widgetsBundle.isScada();
this.description = widgetsBundle.getDescription();
this.order = widgetsBundle.getOrder();
this.externalId = widgetsBundle.getExternalId();

38
common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetsBundleFilter.java

@ -0,0 +1,38 @@
/**
* Copyright © 2016-2024 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.common.data.widget;
import lombok.Builder;
import lombok.Data;
import org.thingsboard.server.common.data.id.TenantId;
@Data
@Builder
public class WidgetsBundleFilter {
private TenantId tenantId;
private boolean fullSearch;
private boolean scadaFirst;
public static WidgetsBundleFilter fromTenantId(TenantId tenantId) {
return WidgetsBundleFilter.builder().tenantId(tenantId).fullSearch(false).scadaFirst(false).build();
}
public static WidgetsBundleFilter fullSearchFromTenantId(TenantId tenantId) {
return WidgetsBundleFilter.builder().tenantId(tenantId).fullSearch(true).scadaFirst(false).build();
}
}

7
common/proto/src/main/java/org/thingsboard/server/common/util/ProtoUtils.java

@ -27,6 +27,7 @@ import org.thingsboard.server.common.data.DeviceProfileProvisionType;
import org.thingsboard.server.common.data.DeviceProfileType;
import org.thingsboard.server.common.data.DeviceTransportType;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.ResourceSubType;
import org.thingsboard.server.common.data.ResourceType;
import org.thingsboard.server.common.data.TbResource;
import org.thingsboard.server.common.data.Tenant;
@ -865,6 +866,9 @@ public class ProtoUtils {
if (isNotNull(resource.getPreview())) {
builder.setPreview(ByteString.copyFrom(resource.getPreview()));
}
if (isNotNull(resource.getResourceSubType())) {
builder.setResourceSubType(resource.getResourceSubType().name());
}
return builder.build();
}
@ -896,6 +900,9 @@ public class ProtoUtils {
if (proto.hasPreview()) {
resource.setPreview(proto.getPreview().toByteArray());
}
if (proto.hasResourceSubType()) {
resource.setResourceSubType(ResourceSubType.valueOf(proto.getResourceSubType()));
}
return resource;
}

1
common/proto/src/main/proto/queue.proto

@ -301,6 +301,7 @@ message TbResourceProto {
optional int64 externalIdLSB = 16;
optional bytes data = 17;
optional bytes preview = 18;
optional string resourceSubType = 19;
}
message ApiUsageStateProto {

4
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2mVersionedModelProvider.java

@ -108,9 +108,9 @@ public class LwM2mVersionedModelProvider implements LwM2mModelProvider {
@Override
public ObjectModel getObjectModel(int objectId) {
LwM2mClient lwM2mClient = lwM2mClientContext.getClientByEndpoint(registration.getEndpoint());
String version = lwM2mClient.getSupportedObjectVersion(objectId).toString();
var version = lwM2mClient.getSupportedObjectVersion(objectId);
if (version != null) {
return this.getObjectModelDynamic(objectId, version);
return this.getObjectModelDynamic(objectId, version.toString());
}
return null;
}

37
dao/src/main/java/org/thingsboard/server/dao/JpaDaoConfig.java

@ -1,37 +0,0 @@
/**
* Copyright © 2016-2024 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.dao;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.repository.config.BootstrapMode;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.thingsboard.server.dao.util.TbAutoConfiguration;
/**
* @author Valerii Sosliuk
*/
@Configuration
@TbAutoConfiguration
@ComponentScan({"org.thingsboard.server.dao.sql", "org.thingsboard.server.dao.attributes", "org.thingsboard.server.dao.cache", "org.thingsboard.server.cache"})
@EnableJpaRepositories(value = "org.thingsboard.server.dao.sql", bootstrapMode = BootstrapMode.LAZY)
@EntityScan("org.thingsboard.server.dao.model.sql")
@EnableTransactionManagement
public class JpaDaoConfig {
}

8
dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogServiceImpl.java

@ -408,8 +408,12 @@ public class AuditLogServiceImpl implements AuditLogService {
}
return executor.submit(() -> {
AuditLog auditLog = auditLogDao.save(tenantId, auditLogEntry);
auditLogSink.logAction(auditLog);
try {
AuditLog auditLog = auditLogDao.save(tenantId, auditLogEntry);
auditLogSink.logAction(auditLog);
} catch (Throwable e) {
log.error("[{}] Failed to save audit log: {}", tenantId, auditLogEntry, e);
}
return null;
});
}

26
dao/src/main/java/org/thingsboard/server/dao/config/DedicatedEventsDataSource.java

@ -0,0 +1,26 @@
/**
* Copyright © 2016-2024 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.dao.config;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
@ConditionalOnProperty(value = "spring.datasource.events.enabled", havingValue = "true")
public @interface DedicatedEventsDataSource {
}

91
dao/src/main/java/org/thingsboard/server/dao/config/DedicatedEventsJpaDaoConfig.java

@ -0,0 +1,91 @@
/**
* Copyright © 2016-2024 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.dao.config;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.repository.config.BootstrapMode;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.support.TransactionTemplate;
import org.thingsboard.server.dao.model.sql.AuditLogEntity;
import org.thingsboard.server.dao.model.sql.ErrorEventEntity;
import org.thingsboard.server.dao.model.sql.LifecycleEventEntity;
import org.thingsboard.server.dao.model.sql.RuleChainDebugEventEntity;
import org.thingsboard.server.dao.model.sql.RuleNodeDebugEventEntity;
import org.thingsboard.server.dao.model.sql.StatisticsEventEntity;
import javax.sql.DataSource;
import java.util.Objects;
@DedicatedEventsDataSource
@Configuration
@EnableJpaRepositories(value = {"org.thingsboard.server.dao.sql.event", "org.thingsboard.server.dao.sql.audit"},
bootstrapMode = BootstrapMode.LAZY,
entityManagerFactoryRef = "eventsEntityManagerFactory", transactionManagerRef = "eventsTransactionManager")
public class DedicatedEventsJpaDaoConfig {
public static final String EVENTS_PERSISTENCE_UNIT = "events";
public static final String EVENTS_DATA_SOURCE = EVENTS_PERSISTENCE_UNIT + "DataSource";
public static final String EVENTS_TRANSACTION_MANAGER = EVENTS_PERSISTENCE_UNIT + "TransactionManager";
public static final String EVENTS_TRANSACTION_TEMPLATE = EVENTS_PERSISTENCE_UNIT + "TransactionTemplate";
public static final String EVENTS_JDBC_TEMPLATE = EVENTS_PERSISTENCE_UNIT + "JdbcTemplate";
@Bean
@ConfigurationProperties("spring.datasource.events")
public DataSourceProperties eventsDataSourceProperties() {
return new DataSourceProperties();
}
@ConfigurationProperties(prefix = "spring.datasource.events.hikari")
@Bean(EVENTS_DATA_SOURCE)
public DataSource eventsDataSource(@Qualifier("eventsDataSourceProperties") DataSourceProperties eventsDataSourceProperties) {
return eventsDataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
@Bean
public LocalContainerEntityManagerFactoryBean eventsEntityManagerFactory(@Qualifier(EVENTS_DATA_SOURCE) DataSource eventsDataSource,
EntityManagerFactoryBuilder builder) {
return builder
.dataSource(eventsDataSource)
.packages(LifecycleEventEntity.class, StatisticsEventEntity.class, ErrorEventEntity.class, RuleNodeDebugEventEntity.class, RuleChainDebugEventEntity.class, AuditLogEntity.class)
.persistenceUnit(EVENTS_PERSISTENCE_UNIT)
.build();
}
@Bean(EVENTS_TRANSACTION_MANAGER)
public JpaTransactionManager eventsTransactionManager(@Qualifier("eventsEntityManagerFactory") LocalContainerEntityManagerFactoryBean eventsEntityManagerFactory) {
return new JpaTransactionManager(Objects.requireNonNull(eventsEntityManagerFactory.getObject()));
}
@Bean(EVENTS_TRANSACTION_TEMPLATE)
public TransactionTemplate eventsTransactionTemplate(@Qualifier(EVENTS_TRANSACTION_MANAGER) JpaTransactionManager eventsTransactionManager) {
return new TransactionTemplate(eventsTransactionManager);
}
@Bean(EVENTS_JDBC_TEMPLATE)
public JdbcTemplate eventsJdbcTemplate(@Qualifier(EVENTS_DATA_SOURCE) DataSource eventsDataSource) {
return new JdbcTemplate(eventsDataSource);
}
}

26
dao/src/main/java/org/thingsboard/server/dao/config/DefaultDataSource.java

@ -0,0 +1,26 @@
/**
* Copyright © 2016-2024 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.dao.config;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
@ConditionalOnProperty(value = "spring.datasource.events.enabled", havingValue = "false", matchIfMissing = true)
public @interface DefaultDataSource {
}

15
dao/src/main/java/org/thingsboard/server/dao/SqlTimeseriesDaoConfig.java → dao/src/main/java/org/thingsboard/server/dao/config/DefaultDedicatedJpaDaoConfig.java

@ -13,22 +13,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.dao;
package org.thingsboard.server.dao.config;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.repository.config.BootstrapMode;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.thingsboard.server.dao.util.TbAutoConfiguration;
@DefaultDataSource
@Configuration
@TbAutoConfiguration
@ComponentScan({"org.thingsboard.server.dao.sqlts.dictionary"})
@EnableJpaRepositories(value = {"org.thingsboard.server.dao.sqlts.dictionary"}, bootstrapMode = BootstrapMode.LAZY)
@EntityScan({"org.thingsboard.server.dao.model.sqlts.dictionary"})
@EnableTransactionManagement
public class SqlTimeseriesDaoConfig {
@EnableJpaRepositories(value = {"org.thingsboard.server.dao.sql.event", "org.thingsboard.server.dao.sql.audit"}, bootstrapMode = BootstrapMode.LAZY)
public class DefaultDedicatedJpaDaoConfig {
}

121
dao/src/main/java/org/thingsboard/server/dao/config/JpaDaoConfig.java

@ -0,0 +1,121 @@
/**
* Copyright © 2016-2024 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.dao.config;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.repository.config.BootstrapMode;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.support.TransactionTemplate;
import org.thingsboard.server.dao.sql.audit.AuditLogRepository;
import org.thingsboard.server.dao.sql.event.EventRepository;
import org.thingsboard.server.dao.util.TbAutoConfiguration;
import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Configuration
@TbAutoConfiguration
@ComponentScan({"org.thingsboard.server.dao.sql", "org.thingsboard.server.dao.attributes", "org.thingsboard.server.dao.sqlts.dictionary", "org.thingsboard.server.dao.cache", "org.thingsboard.server.cache"})
@EnableJpaRepositories(value = {"org.thingsboard.server.dao.sql", "org.thingsboard.server.dao.sqlts.dictionary"},
excludeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {EventRepository.class, AuditLogRepository.class}),
bootstrapMode = BootstrapMode.LAZY)
public class JpaDaoConfig {
@Bean
@ConfigurationProperties("spring.datasource")
public DataSourceProperties dataSourceProperties() {
return new DataSourceProperties();
}
@Primary
@ConfigurationProperties(prefix = "spring.datasource.hikari")
@Bean
public DataSource dataSource(@Qualifier("dataSourceProperties") DataSourceProperties dataSourceProperties) {
return dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
@Primary
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(@Qualifier("dataSource") DataSource dataSource,
EntityManagerFactoryBuilder builder,
@Autowired(required = false) SqlTsLatestDaoConfig tsLatestDaoConfig,
@Autowired(required = false) SqlTsDaoConfig tsDaoConfig,
@Autowired(required = false) TimescaleDaoConfig timescaleDaoConfig,
@Autowired(required = false) TimescaleTsLatestDaoConfig timescaleTsLatestDaoConfig) {
List<String> packages = new ArrayList<>();
packages.add("org.thingsboard.server.dao.model.sql");
packages.add("org.thingsboard.server.dao.model.sqlts.dictionary");
if (tsLatestDaoConfig != null) {
packages.add("org.thingsboard.server.dao.model.sqlts.latest");
}
if (tsDaoConfig != null) {
packages.add("org.thingsboard.server.dao.model.sqlts.ts");
}
if (timescaleDaoConfig != null) {
packages.add("org.thingsboard.server.dao.model.sqlts.timescale");
}
if (timescaleTsLatestDaoConfig != null) {
packages.add("org.thingsboard.server.dao.model.sqlts.latest");
}
return builder
.dataSource(dataSource)
.packages(packages.toArray(String[]::new))
.persistenceUnit("default")
.build();
}
@Primary
@Bean
public JpaTransactionManager transactionManager(@Qualifier("entityManagerFactory") LocalContainerEntityManagerFactoryBean entityManagerFactory) {
return new JpaTransactionManager(Objects.requireNonNull(entityManagerFactory.getObject()));
}
@Primary
@Bean
public TransactionTemplate transactionTemplate(@Qualifier("transactionManager") JpaTransactionManager transactionManager) {
return new TransactionTemplate(transactionManager);
}
@Primary
@Bean
public JdbcTemplate jdbcTemplate(@Qualifier("dataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Primary
@Bean
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(@Qualifier("dataSource") DataSource dataSource) {
return new NamedParameterJdbcTemplate(dataSource);
}
}

4
dao/src/main/java/org/thingsboard/server/dao/SqlTsDaoConfig.java → dao/src/main/java/org/thingsboard/server/dao/config/SqlTsDaoConfig.java

@ -13,9 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.dao;
package org.thingsboard.server.dao.config;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@ -28,7 +27,6 @@ import org.thingsboard.server.dao.util.TbAutoConfiguration;
@TbAutoConfiguration
@ComponentScan({"org.thingsboard.server.dao.sqlts.sql", "org.thingsboard.server.dao.sqlts.insert.sql"})
@EnableJpaRepositories(value = {"org.thingsboard.server.dao.sqlts.ts", "org.thingsboard.server.dao.sqlts.insert.sql"}, bootstrapMode = BootstrapMode.LAZY)
@EntityScan({"org.thingsboard.server.dao.model.sqlts.ts"})
@EnableTransactionManagement
@SqlTsDao
public class SqlTsDaoConfig {

4
dao/src/main/java/org/thingsboard/server/dao/SqlTsLatestDaoConfig.java → dao/src/main/java/org/thingsboard/server/dao/config/SqlTsLatestDaoConfig.java

@ -13,9 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.dao;
package org.thingsboard.server.dao.config;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@ -28,7 +27,6 @@ import org.thingsboard.server.dao.util.TbAutoConfiguration;
@TbAutoConfiguration
@ComponentScan({"org.thingsboard.server.dao.sqlts.sql"})
@EnableJpaRepositories(value = {"org.thingsboard.server.dao.sqlts.insert.latest.sql", "org.thingsboard.server.dao.sqlts.latest"}, bootstrapMode = BootstrapMode.LAZY)
@EntityScan({"org.thingsboard.server.dao.model.sqlts.latest"})
@EnableTransactionManagement
@SqlTsLatestDao
public class SqlTsLatestDaoConfig {

4
dao/src/main/java/org/thingsboard/server/dao/TimescaleDaoConfig.java → dao/src/main/java/org/thingsboard/server/dao/config/TimescaleDaoConfig.java

@ -13,9 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.dao;
package org.thingsboard.server.dao.config;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@ -28,7 +27,6 @@ import org.thingsboard.server.dao.util.TimescaleDBTsDao;
@TbAutoConfiguration
@ComponentScan({"org.thingsboard.server.dao.sqlts.timescale"})
@EnableJpaRepositories(value = {"org.thingsboard.server.dao.sqlts.timescale", "org.thingsboard.server.dao.sqlts.insert.timescale"}, bootstrapMode = BootstrapMode.LAZY)
@EntityScan({"org.thingsboard.server.dao.model.sqlts.timescale"})
@EnableTransactionManagement
@TimescaleDBTsDao
public class TimescaleDaoConfig {

4
dao/src/main/java/org/thingsboard/server/dao/TimescaleTsLatestDaoConfig.java → dao/src/main/java/org/thingsboard/server/dao/config/TimescaleTsLatestDaoConfig.java

@ -13,9 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.dao;
package org.thingsboard.server.dao.config;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@ -28,7 +27,6 @@ import org.thingsboard.server.dao.util.TimescaleDBTsLatestDao;
@TbAutoConfiguration
@ComponentScan({"org.thingsboard.server.dao.sqlts.timescale"})
@EnableJpaRepositories(value = {"org.thingsboard.server.dao.sqlts.insert.latest.sql", "org.thingsboard.server.dao.sqlts.latest"}, bootstrapMode = BootstrapMode.LAZY)
@EntityScan({"org.thingsboard.server.dao.model.sqlts.latest"})
@EnableTransactionManagement
@TimescaleDBTsLatestDao
public class TimescaleTsLatestDaoConfig {

1
dao/src/main/java/org/thingsboard/server/dao/event/EventDao.java

@ -101,5 +101,4 @@ public interface EventDao {
*/
void removeEvents(UUID tenantId, UUID entityId, EventFilter eventFilter, Long startTime, Long endTime);
void migrateEvents(long regularEventTs, long debugEventTs);
}

4
dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java

@ -304,6 +304,7 @@ public class ModelConstants {
public static final String WIDGETS_BUNDLE_ALIAS_PROPERTY = ALIAS_PROPERTY;
public static final String WIDGETS_BUNDLE_TITLE_PROPERTY = TITLE_PROPERTY;
public static final String WIDGETS_BUNDLE_IMAGE_PROPERTY = "image";
public static final String WIDGETS_BUNDLE_SCADA_PROPERTY = "scada";
public static final String WIDGETS_BUNDLE_DESCRIPTION = "description";
public static final String WIDGETS_BUNDLE_ORDER = "widgets_bundle_order";
@ -322,6 +323,8 @@ public class ModelConstants {
public static final String WIDGET_TYPE_DEPRECATED_PROPERTY = "deprecated";
public static final String WIDGET_TYPE_SCADA_PROPERTY = "scada";
public static final String WIDGET_TYPE_WIDGET_TYPE_PROPERTY = "widget_type";
public static final String WIDGET_TYPE_INFO_VIEW_TABLE_NAME = "widget_type_info_view";
@ -500,6 +503,7 @@ public class ModelConstants {
public static final String RESOURCE_TABLE_NAME = "resource";
public static final String RESOURCE_TENANT_ID_COLUMN = TENANT_ID_COLUMN;
public static final String RESOURCE_TYPE_COLUMN = "resource_type";
public static final String RESOURCE_SUB_TYPE_COLUMN = "resource_sub_type";
public static final String RESOURCE_KEY_COLUMN = "resource_key";
public static final String RESOURCE_TITLE_COLUMN = TITLE_PROPERTY;
public static final String RESOURCE_FILE_NAME_COLUMN = "file_name";

6
dao/src/main/java/org/thingsboard/server/dao/model/sql/AbstractWidgetTypeEntity.java

@ -44,6 +44,9 @@ public abstract class AbstractWidgetTypeEntity<T extends BaseWidgetType> extends
@Column(name = ModelConstants.WIDGET_TYPE_DEPRECATED_PROPERTY)
private boolean deprecated;
@Column(name = ModelConstants.WIDGET_TYPE_SCADA_PROPERTY)
private boolean scada;
public AbstractWidgetTypeEntity() {
super();
}
@ -56,6 +59,7 @@ public abstract class AbstractWidgetTypeEntity<T extends BaseWidgetType> extends
this.fqn = widgetType.getFqn();
this.name = widgetType.getName();
this.deprecated = widgetType.isDeprecated();
this.scada = widgetType.isScada();
}
public AbstractWidgetTypeEntity(AbstractWidgetTypeEntity widgetTypeEntity) {
@ -64,6 +68,7 @@ public abstract class AbstractWidgetTypeEntity<T extends BaseWidgetType> extends
this.fqn = widgetTypeEntity.getFqn();
this.name = widgetTypeEntity.getName();
this.deprecated = widgetTypeEntity.isDeprecated();
this.scada = widgetTypeEntity.isScada();
}
protected BaseWidgetType toBaseWidgetType() {
@ -76,6 +81,7 @@ public abstract class AbstractWidgetTypeEntity<T extends BaseWidgetType> extends
widgetType.setFqn(fqn);
widgetType.setName(name);
widgetType.setDeprecated(deprecated);
widgetType.setScada(scada);
return widgetType;
}

1
dao/src/main/java/org/thingsboard/server/dao/model/sql/AuditLogEntity.java

@ -149,4 +149,5 @@ public class AuditLogEntity extends BaseSqlEntity<AuditLog> implements BaseEntit
auditLog.setActionFailureDetails(this.actionFailureDetails);
return auditLog;
}
}

9
dao/src/main/java/org/thingsboard/server/dao/model/sql/TbResourceEntity.java

@ -22,6 +22,7 @@ import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.thingsboard.server.common.data.ResourceSubType;
import org.thingsboard.server.common.data.ResourceType;
import org.thingsboard.server.common.data.TbResource;
import org.thingsboard.server.common.data.id.TbResourceId;
@ -40,6 +41,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_FILE_NAME
import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_IS_PUBLIC_COLUMN;
import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_KEY_COLUMN;
import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_PREVIEW_COLUMN;
import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_SUB_TYPE_COLUMN;
import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_TABLE_NAME;
import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_TENANT_ID_COLUMN;
import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_TITLE_COLUMN;
@ -61,6 +63,9 @@ public class TbResourceEntity extends BaseSqlEntity<TbResource> {
@Column(name = RESOURCE_TYPE_COLUMN)
private String resourceType;
@Column(name = RESOURCE_SUB_TYPE_COLUMN)
private String resourceSubType;
@Column(name = RESOURCE_KEY_COLUMN)
private String resourceKey;
@ -105,6 +110,9 @@ public class TbResourceEntity extends BaseSqlEntity<TbResource> {
}
this.title = resource.getTitle();
this.resourceType = resource.getResourceType().name();
if (resource.getResourceSubType() != null) {
this.resourceSubType = resource.getResourceSubType().name();
}
this.resourceKey = resource.getResourceKey();
this.searchText = resource.getSearchText();
this.fileName = resource.getFileName();
@ -124,6 +132,7 @@ public class TbResourceEntity extends BaseSqlEntity<TbResource> {
resource.setTenantId(TenantId.fromUUID(tenantId));
resource.setTitle(title);
resource.setResourceType(ResourceType.valueOf(resourceType));
resource.setResourceSubType(resourceSubType != null ? ResourceSubType.valueOf(resourceSubType) : null);
resource.setResourceKey(resourceKey);
resource.setSearchText(searchText);
resource.setFileName(fileName);

9
dao/src/main/java/org/thingsboard/server/dao/model/sql/TbResourceInfoEntity.java

@ -22,6 +22,7 @@ import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.thingsboard.server.common.data.ResourceSubType;
import org.thingsboard.server.common.data.ResourceType;
import org.thingsboard.server.common.data.TbResourceInfo;
import org.thingsboard.server.common.data.id.TbResourceId;
@ -39,6 +40,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_ETAG_COLU
import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_FILE_NAME_COLUMN;
import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_IS_PUBLIC_COLUMN;
import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_KEY_COLUMN;
import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_SUB_TYPE_COLUMN;
import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_TABLE_NAME;
import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_TENANT_ID_COLUMN;
import static org.thingsboard.server.dao.model.ModelConstants.RESOURCE_TITLE_COLUMN;
@ -60,6 +62,9 @@ public class TbResourceInfoEntity extends BaseSqlEntity<TbResourceInfo> implemen
@Column(name = RESOURCE_TYPE_COLUMN)
private String resourceType;
@Column(name = RESOURCE_SUB_TYPE_COLUMN)
private String resourceSubType;
@Column(name = RESOURCE_KEY_COLUMN)
private String resourceKey;
@ -96,6 +101,9 @@ public class TbResourceInfoEntity extends BaseSqlEntity<TbResourceInfo> implemen
this.tenantId = resource.getTenantId().getId();
this.title = resource.getTitle();
this.resourceType = resource.getResourceType().name();
if (resource.getResourceSubType() != null) {
this.resourceSubType = resource.getResourceSubType().name();
}
this.resourceKey = resource.getResourceKey();
this.searchText = resource.getSearchText();
this.etag = resource.getEtag();
@ -113,6 +121,7 @@ public class TbResourceInfoEntity extends BaseSqlEntity<TbResourceInfo> implemen
resource.setTenantId(TenantId.fromUUID(tenantId));
resource.setTitle(title);
resource.setResourceType(ResourceType.valueOf(resourceType));
resource.setResourceSubType(resourceSubType != null ? ResourceSubType.valueOf(resourceSubType) : null);
resource.setResourceKey(resourceKey);
resource.setSearchText(searchText);
resource.setEtag(etag);

5
dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java

@ -47,6 +47,9 @@ public final class WidgetsBundleEntity extends BaseVersionedEntity<WidgetsBundle
@Column(name = ModelConstants.WIDGETS_BUNDLE_IMAGE_PROPERTY)
private String image;
@Column(name = ModelConstants.WIDGETS_BUNDLE_SCADA_PROPERTY)
private boolean scada;
@Column(name = ModelConstants.WIDGETS_BUNDLE_DESCRIPTION)
private String description;
@ -68,6 +71,7 @@ public final class WidgetsBundleEntity extends BaseVersionedEntity<WidgetsBundle
this.alias = widgetsBundle.getAlias();
this.title = widgetsBundle.getTitle();
this.image = widgetsBundle.getImage();
this.scada = widgetsBundle.isScada();
this.description = widgetsBundle.getDescription();
this.order = widgetsBundle.getOrder();
if (widgetsBundle.getExternalId() != null) {
@ -86,6 +90,7 @@ public final class WidgetsBundleEntity extends BaseVersionedEntity<WidgetsBundle
widgetsBundle.setAlias(alias);
widgetsBundle.setTitle(title);
widgetsBundle.setImage(image);
widgetsBundle.setScada(scada);
widgetsBundle.setDescription(description);
widgetsBundle.setOrder(order);
if (externalId != null) {

32
dao/src/main/java/org/thingsboard/server/dao/resource/BaseImageService.java

@ -36,6 +36,7 @@ import org.thingsboard.server.common.data.DataConstants;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.HasImage;
import org.thingsboard.server.common.data.ImageDescriptor;
import org.thingsboard.server.common.data.ResourceSubType;
import org.thingsboard.server.common.data.ResourceType;
import org.thingsboard.server.common.data.TbImageDeleteResult;
import org.thingsboard.server.common.data.TbResource;
@ -103,6 +104,7 @@ public class BaseImageService extends BaseResourceService implements ImageServic
WIDGET_TYPE_BASE64_MAPPING.put("settings.markerImages", "Map marker image $index");
WIDGET_TYPE_BASE64_MAPPING.put("settings.background.imageUrl", "$prefix background");
WIDGET_TYPE_BASE64_MAPPING.put("settings.background.imageBase64", "$prefix background");
WIDGET_TYPE_BASE64_MAPPING.put("settings.scadaSymbolUrl", "$prefix SCADA symbol");
WIDGET_TYPE_BASE64_MAPPING.put("datasources.*.dataKeys.*.settings.customIcon", "$prefix custom icon");
}
@ -140,6 +142,9 @@ public class BaseImageService extends BaseResourceService implements ImageServic
if (image.getId() == null) {
image.setResourceKey(getUniqueKey(image.getTenantId(), StringUtils.defaultIfEmpty(image.getResourceKey(), image.getFileName())));
}
if (image.getResourceSubType() == null) {
image.setResourceSubType(ResourceSubType.IMAGE);
}
resourceValidator.validate(image, TbResourceInfo::getTenantId);
ImageDescriptor descriptor = image.getDescriptor(ImageDescriptor.class);
@ -220,21 +225,23 @@ public class BaseImageService extends BaseResourceService implements ImageServic
}
@Override
public PageData<TbResourceInfo> getImagesByTenantId(TenantId tenantId, PageLink pageLink) {
public PageData<TbResourceInfo> getImagesByTenantId(TenantId tenantId, ResourceSubType imageSubType, PageLink pageLink) {
log.trace("Executing getImagesByTenantId [{}]", tenantId);
TbResourceInfoFilter filter = TbResourceInfoFilter.builder()
.tenantId(tenantId)
.resourceTypes(Set.of(ResourceType.IMAGE))
.resourceSubTypes(Set.of(imageSubType))
.build();
return findTenantResourcesByTenantId(filter, pageLink);
}
@Override
public PageData<TbResourceInfo> getAllImagesByTenantId(TenantId tenantId, PageLink pageLink) {
public PageData<TbResourceInfo> getAllImagesByTenantId(TenantId tenantId, ResourceSubType imageSubType, PageLink pageLink) {
log.trace("Executing getAllImagesByTenantId [{}]", tenantId);
TbResourceInfoFilter filter = TbResourceInfoFilter.builder()
.tenantId(tenantId)
.resourceTypes(Set.of(ResourceType.IMAGE))
.resourceSubTypes(Set.of(imageSubType))
.build();
return findAllTenantResourcesByTenantId(filter, pageLink);
}
@ -280,6 +287,11 @@ public class BaseImageService extends BaseResourceService implements ImageServic
return result.success(success).build();
}
@Override
public String calculateImageEtag(byte[] imageData) {
return calculateEtag(imageData);
}
@Override
public TbResourceInfo findSystemOrTenantImageByEtag(TenantId tenantId, String etag) {
log.trace("Executing findSystemOrTenantImageByEtag [{}] [{}]", tenantId, etag);
@ -419,7 +431,7 @@ public class BaseImageService extends BaseResourceService implements ImageServic
return base64ToImageUrl(tenantId, name, data, false);
}
private static final Pattern TB_IMAGE_METADATA_PATTERN = Pattern.compile("^tb-image:(.*):(.*);data:(.*);.*");
private static final Pattern TB_IMAGE_METADATA_PATTERN = Pattern.compile("^tb-image:([^:]*):([^:]*):?([^:]*)?;data:(.*);.*");
private UpdateResult base64ToImageUrl(TenantId tenantId, String name, String data, boolean strict) {
if (StringUtils.isBlank(data)) {
@ -429,11 +441,15 @@ public class BaseImageService extends BaseResourceService implements ImageServic
boolean matches = matcher.matches();
String mdResourceKey = null;
String mdResourceName = null;
String mdResourceSubType = null;
String mdMediaType;
if (matches) {
mdResourceKey = new String(Base64.getDecoder().decode(matcher.group(1)), StandardCharsets.UTF_8);
mdResourceName = new String(Base64.getDecoder().decode(matcher.group(2)), StandardCharsets.UTF_8);
mdMediaType = matcher.group(3);
if (StringUtils.isNotBlank(matcher.group(3))) {
mdResourceSubType = new String(Base64.getDecoder().decode(matcher.group(3)), StandardCharsets.UTF_8);
};
mdMediaType = matcher.group(4);
} else if (data.startsWith(DataConstants.TB_IMAGE_PREFIX + "data:image/") || (!strict && data.startsWith("data:image/"))) {
mdMediaType = StringUtils.substringBetween(data, "data:", ";base64");
} else {
@ -462,6 +478,11 @@ public class BaseImageService extends BaseResourceService implements ImageServic
} else {
fileName = mdResourceKey;
}
if (StringUtils.isBlank(mdResourceSubType)) {
image.setResourceSubType(ResourceSubType.IMAGE);
} else {
image.setResourceSubType(ResourceSubType.valueOf(mdResourceSubType));
}
image.setFileName(fileName);
image.setDescriptor(JacksonUtil.newObjectNode().put("mediaType", mdMediaType));
image.setData(imageData);
@ -623,7 +644,8 @@ public class BaseImageService extends BaseResourceService implements ImageServic
String tbImagePrefix = "";
if (addTbImagePrefix) {
tbImagePrefix = "tb-image:" + Base64.getEncoder().encodeToString(imageInfo.getResourceKey().getBytes(StandardCharsets.UTF_8)) + ":"
+ Base64.getEncoder().encodeToString(imageInfo.getName().getBytes(StandardCharsets.UTF_8)) + ";";
+ Base64.getEncoder().encodeToString(imageInfo.getName().getBytes(StandardCharsets.UTF_8)) + ":"
+ Base64.getEncoder().encodeToString(imageInfo.getResourceSubType().name().getBytes(StandardCharsets.UTF_8)) + ";";
}
return tbImagePrefix + "data:" + descriptor.getMediaType() + ";base64," + Base64.getEncoder().encodeToString(data);
}

4
dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java

@ -187,7 +187,7 @@ public class BaseResourceService extends AbstractCachedEntityService<ResourceInf
public List<TbResource> findTenantResourcesByResourceTypeAndObjectIds(TenantId tenantId, ResourceType resourceType, String[] objectIds) {
log.trace("Executing findTenantResourcesByResourceTypeAndObjectIds [{}][{}][{}]", tenantId, resourceType, objectIds);
validateId(tenantId, id -> INCORRECT_TENANT_ID + id);
return resourceDao.findResourcesByTenantIdAndResourceType(tenantId, resourceType, objectIds, null);
return resourceDao.findResourcesByTenantIdAndResourceType(tenantId, resourceType, null, objectIds, null);
}
@Override
@ -201,7 +201,7 @@ public class BaseResourceService extends AbstractCachedEntityService<ResourceInf
public PageData<TbResource> findTenantResourcesByResourceTypeAndPageLink(TenantId tenantId, ResourceType resourceType, PageLink pageLink) {
log.trace("Executing findTenantResourcesByResourceTypeAndPageLink [{}][{}][{}]", tenantId, resourceType, pageLink);
validateId(tenantId, id -> INCORRECT_TENANT_ID + id);
return resourceDao.findResourcesByTenantIdAndResourceType(tenantId, resourceType, pageLink);
return resourceDao.findResourcesByTenantIdAndResourceType(tenantId, resourceType, null, pageLink);
}
@Override

3
dao/src/main/java/org/thingsboard/server/dao/resource/TbResourceDao.java

@ -15,6 +15,7 @@
*/
package org.thingsboard.server.dao.resource;
import org.thingsboard.server.common.data.ResourceSubType;
import org.thingsboard.server.common.data.ResourceType;
import org.thingsboard.server.common.data.TbResource;
import org.thingsboard.server.common.data.id.TbResourceId;
@ -35,10 +36,12 @@ public interface TbResourceDao extends Dao<TbResource>, TenantEntityWithDataDao,
PageData<TbResource> findResourcesByTenantIdAndResourceType(TenantId tenantId,
ResourceType resourceType,
ResourceSubType resourceSubType,
PageLink pageLink);
List<TbResource> findResourcesByTenantIdAndResourceType(TenantId tenantId,
ResourceType resourceType,
ResourceSubType resourceSubType,
String[] objectIds,
String searchText);

19
dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDao.java

@ -55,10 +55,6 @@ public abstract class JpaAbstractDao<E extends BaseEntity<D>, D>
@PersistenceContext
private EntityManager entityManager;
protected abstract Class<E> getEntityClass();
protected abstract JpaRepository<E, UUID> getRepository();
@Override
@Transactional
public D save(TenantId tenantId, D domain) {
@ -85,6 +81,7 @@ public abstract class JpaAbstractDao<E extends BaseEntity<D>, D>
}
protected E doSave(E entity, boolean isNew) {
EntityManager entityManager = getEntityManager();
if (isNew) {
if (entity instanceof HasVersion versionedEntity) {
versionedEntity.setVersion(1L);
@ -176,11 +173,23 @@ public abstract class JpaAbstractDao<E extends BaseEntity<D>, D>
}
query += " ORDER BY id LIMIT ?";
return jdbcTemplate.queryForList(query, UUID.class, params);
return getJdbcTemplate().queryForList(query, UUID.class, params);
}
protected String getTenantIdColumn() {
return ModelConstants.TENANT_ID_COLUMN;
}
protected EntityManager getEntityManager() {
return entityManager;
}
protected JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
protected abstract Class<E> getEntityClass();
protected abstract JpaRepository<E, UUID> getRepository();
}

87
dao/src/main/java/org/thingsboard/server/dao/sql/audit/DedicatedJpaAuditLogDao.java

@ -0,0 +1,87 @@
/**
* Copyright © 2016-2024 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.dao.sql.audit;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.thingsboard.server.common.data.audit.AuditLog;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.dao.config.DedicatedEventsDataSource;
import org.thingsboard.server.dao.sqlts.insert.sql.DedicatedEventsSqlPartitioningRepository;
import org.thingsboard.server.dao.util.SqlDao;
import java.util.Collection;
import java.util.UUID;
import static org.thingsboard.server.dao.config.DedicatedEventsJpaDaoConfig.EVENTS_JDBC_TEMPLATE;
import static org.thingsboard.server.dao.config.DedicatedEventsJpaDaoConfig.EVENTS_PERSISTENCE_UNIT;
import static org.thingsboard.server.dao.config.DedicatedEventsJpaDaoConfig.EVENTS_TRANSACTION_MANAGER;
@DedicatedEventsDataSource
@Component
@SqlDao
public class DedicatedJpaAuditLogDao extends JpaAuditLogDao {
@Autowired
@Qualifier(EVENTS_JDBC_TEMPLATE)
private JdbcTemplate jdbcTemplate;
@PersistenceContext(unitName = EVENTS_PERSISTENCE_UNIT)
private EntityManager entityManager;
public DedicatedJpaAuditLogDao(AuditLogRepository auditLogRepository, DedicatedEventsSqlPartitioningRepository partitioningRepository) {
super(auditLogRepository, partitioningRepository);
}
@Transactional(transactionManager = EVENTS_TRANSACTION_MANAGER)
@Override
public AuditLog save(TenantId tenantId, AuditLog domain) {
return super.save(tenantId, domain);
}
@Transactional(transactionManager = EVENTS_TRANSACTION_MANAGER)
@Override
public AuditLog saveAndFlush(TenantId tenantId, AuditLog domain) {
return super.saveAndFlush(tenantId, domain);
}
@Transactional(transactionManager = EVENTS_TRANSACTION_MANAGER)
@Override
public void removeById(TenantId tenantId, UUID id) {
super.removeById(tenantId, id);
}
@Transactional(transactionManager = EVENTS_TRANSACTION_MANAGER)
@Override
public void removeAllByIds(Collection<UUID> ids) {
super.removeAllByIds(ids);
}
@Override
protected EntityManager getEntityManager() {
return entityManager;
}
@Override
protected JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
}

35
dao/src/main/java/org/thingsboard/server/dao/sql/audit/JpaAuditLogDao.java

@ -19,7 +19,6 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.audit.ActionType;
import org.thingsboard.server.common.data.audit.AuditLog;
@ -30,7 +29,7 @@ import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.TimePageLink;
import org.thingsboard.server.dao.DaoUtil;
import org.thingsboard.server.dao.audit.AuditLogDao;
import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.config.DefaultDataSource;
import org.thingsboard.server.dao.model.sql.AuditLogEntity;
import org.thingsboard.server.dao.sql.JpaPartitionedAbstractDao;
import org.thingsboard.server.dao.sqlts.insert.sql.SqlPartitioningRepository;
@ -40,6 +39,9 @@ import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_TABLE_NAME;
@DefaultDataSource
@Component
@SqlDao
@RequiredArgsConstructor
@ -48,24 +50,9 @@ public class JpaAuditLogDao extends JpaPartitionedAbstractDao<AuditLogEntity, Au
private final AuditLogRepository auditLogRepository;
private final SqlPartitioningRepository partitioningRepository;
private final JdbcTemplate jdbcTemplate;
@Value("${sql.audit_logs.partition_size:168}")
private int partitionSizeInHours;
@Value("${sql.ttl.audit_logs.ttl:0}")
private long ttlInSec;
private static final String TABLE_NAME = ModelConstants.AUDIT_LOG_TABLE_NAME;
@Override
protected Class<AuditLogEntity> getEntityClass() {
return AuditLogEntity.class;
}
@Override
protected JpaRepository<AuditLogEntity, UUID> getRepository() {
return auditLogRepository;
}
@Override
public PageData<AuditLog> findAuditLogsByTenantIdAndEntityId(UUID tenantId, EntityId entityId, List<ActionType> actionTypes, TimePageLink pageLink) {
@ -124,12 +111,22 @@ public class JpaAuditLogDao extends JpaPartitionedAbstractDao<AuditLogEntity, Au
@Override
public void cleanUpAuditLogs(long expTime) {
partitioningRepository.dropPartitionsBefore(TABLE_NAME, expTime, TimeUnit.HOURS.toMillis(partitionSizeInHours));
partitioningRepository.dropPartitionsBefore(AUDIT_LOG_TABLE_NAME, expTime, TimeUnit.HOURS.toMillis(partitionSizeInHours));
}
@Override
public void createPartition(AuditLogEntity entity) {
partitioningRepository.createPartitionIfNotExists(TABLE_NAME, entity.getCreatedTime(), TimeUnit.HOURS.toMillis(partitionSizeInHours));
partitioningRepository.createPartitionIfNotExists(AUDIT_LOG_TABLE_NAME, entity.getCreatedTime(), TimeUnit.HOURS.toMillis(partitionSizeInHours));
}
@Override
protected Class<AuditLogEntity> getEntityClass() {
return AuditLogEntity.class;
}
@Override
protected JpaRepository<AuditLogEntity, UUID> getRepository() {
return auditLogRepository;
}
}

36
dao/src/main/java/org/thingsboard/server/dao/sql/event/DedicatedEventInsertRepository.java

@ -0,0 +1,36 @@
/**
* Copyright © 2016-2024 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.dao.sql.event;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.support.TransactionTemplate;
import org.thingsboard.server.dao.config.DedicatedEventsDataSource;
import static org.thingsboard.server.dao.config.DedicatedEventsJpaDaoConfig.EVENTS_JDBC_TEMPLATE;
import static org.thingsboard.server.dao.config.DedicatedEventsJpaDaoConfig.EVENTS_TRANSACTION_TEMPLATE;
@DedicatedEventsDataSource
@Repository
public class DedicatedEventInsertRepository extends EventInsertRepository {
public DedicatedEventInsertRepository(@Qualifier(EVENTS_JDBC_TEMPLATE) JdbcTemplate jdbcTemplate,
@Qualifier(EVENTS_TRANSACTION_TEMPLATE) TransactionTemplate transactionTemplate) {
super(jdbcTemplate, transactionTemplate);
}
}

45
dao/src/main/java/org/thingsboard/server/dao/sql/event/DedicatedJpaEventDao.java

@ -0,0 +1,45 @@
/**
* Copyright © 2016-2024 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.dao.sql.event;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.stats.StatsFactory;
import org.thingsboard.server.dao.config.DedicatedEventsDataSource;
import org.thingsboard.server.dao.sql.ScheduledLogExecutorComponent;
import org.thingsboard.server.dao.sqlts.insert.sql.DedicatedEventsSqlPartitioningRepository;
import org.thingsboard.server.dao.util.SqlDao;
@DedicatedEventsDataSource
@Component
@SqlDao
public class DedicatedJpaEventDao extends JpaBaseEventDao {
public DedicatedJpaEventDao(EventPartitionConfiguration partitionConfiguration,
DedicatedEventsSqlPartitioningRepository partitioningRepository,
LifecycleEventRepository lcEventRepository,
StatisticsEventRepository statsEventRepository,
ErrorEventRepository errorEventRepository,
DedicatedEventInsertRepository eventInsertRepository,
RuleNodeDebugEventRepository ruleNodeDebugEventRepository,
RuleChainDebugEventRepository ruleChainDebugEventRepository,
ScheduledLogExecutorComponent logExecutor,
StatsFactory statsFactory) {
super(partitionConfiguration, partitioningRepository, lcEventRepository, statsEventRepository,
errorEventRepository, eventInsertRepository, ruleNodeDebugEventRepository,
ruleChainDebugEventRepository, logExecutor, statsFactory);
}
}

13
dao/src/main/java/org/thingsboard/server/dao/sql/event/EventInsertRepository.java

@ -16,7 +16,7 @@
package org.thingsboard.server.dao.sql.event;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
@ -32,6 +32,7 @@ import org.thingsboard.server.common.data.event.LifecycleEvent;
import org.thingsboard.server.common.data.event.RuleChainDebugEvent;
import org.thingsboard.server.common.data.event.RuleNodeDebugEvent;
import org.thingsboard.server.common.data.event.StatisticsEvent;
import org.thingsboard.server.dao.config.DefaultDataSource;
import org.thingsboard.server.dao.util.SqlDao;
import java.sql.PreparedStatement;
@ -44,9 +45,11 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@DefaultDataSource
@Repository
@Transactional
@SqlDao
@RequiredArgsConstructor
public class EventInsertRepository {
private static final ThreadLocal<Pattern> PATTERN_THREAD_LOCAL = ThreadLocal.withInitial(() -> Pattern.compile(String.valueOf(Character.MIN_VALUE)));
@ -55,11 +58,8 @@ public class EventInsertRepository {
private final Map<EventType, String> insertStmtMap = new ConcurrentHashMap<>();
@Autowired
protected JdbcTemplate jdbcTemplate;
@Autowired
private TransactionTemplate transactionTemplate;
private final JdbcTemplate jdbcTemplate;
private final TransactionTemplate transactionTemplate;
@Value("${sql.remove_null_chars:true}")
private boolean removeNullChars;
@ -236,4 +236,5 @@ public class EventInsertRepository {
}
return strValue;
}
}

73
dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java

@ -19,8 +19,8 @@ import com.datastax.oss.driver.api.core.uuid.Uuids;
import com.google.common.util.concurrent.ListenableFuture;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.StringUtils;
@ -38,6 +38,7 @@ import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.TimePageLink;
import org.thingsboard.server.common.stats.StatsFactory;
import org.thingsboard.server.dao.DaoUtil;
import org.thingsboard.server.dao.config.DefaultDataSource;
import org.thingsboard.server.dao.event.EventDao;
import org.thingsboard.server.dao.model.sql.EventEntity;
import org.thingsboard.server.dao.sql.ScheduledLogExecutorComponent;
@ -54,46 +55,23 @@ import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
/**
* Created by Valerii Sosliuk on 5/3/2017.
*/
@Slf4j
@DefaultDataSource
@Component
@SqlDao
@RequiredArgsConstructor
@Slf4j
public class JpaBaseEventDao implements EventDao {
@Autowired
private EventPartitionConfiguration partitionConfiguration;
@Autowired
private SqlPartitioningRepository partitioningRepository;
@Autowired
private LifecycleEventRepository lcEventRepository;
@Autowired
private StatisticsEventRepository statsEventRepository;
@Autowired
private ErrorEventRepository errorEventRepository;
@Autowired
private EventInsertRepository eventInsertRepository;
@Autowired
private EventCleanupRepository eventCleanupRepository;
@Autowired
private RuleNodeDebugEventRepository ruleNodeDebugEventRepository;
@Autowired
private RuleChainDebugEventRepository ruleChainDebugEventRepository;
@Autowired
ScheduledLogExecutorComponent logExecutor;
@Autowired
private StatsFactory statsFactory;
private final EventPartitionConfiguration partitionConfiguration;
private final SqlPartitioningRepository partitioningRepository;
private final LifecycleEventRepository lcEventRepository;
private final StatisticsEventRepository statsEventRepository;
private final ErrorEventRepository errorEventRepository;
private final EventInsertRepository eventInsertRepository;
private final RuleNodeDebugEventRepository ruleNodeDebugEventRepository;
private final RuleChainDebugEventRepository ruleChainDebugEventRepository;
private final ScheduledLogExecutorComponent logExecutor;
private final StatsFactory statsFactory;
@Value("${sql.events.batch_size:10000}")
private int batchSize;
@ -223,11 +201,6 @@ public class JpaBaseEventDao implements EventDao {
}
}
@Override
public void migrateEvents(long regularEventTs, long debugEventTs) {
eventCleanupRepository.migrateEvents(regularEventTs, debugEventTs);
}
private PageData<? extends Event> findEventByFilter(UUID tenantId, UUID entityId, RuleChainDebugEventFilter eventFilter, TimePageLink pageLink) {
return DaoUtil.toPageData(
ruleChainDebugEventRepository.findEvents(
@ -402,7 +375,7 @@ public class JpaBaseEventDao implements EventDao {
if (regularEventExpTs > 0) {
log.info("Going to cleanup regular events with exp time: {}", regularEventExpTs);
if (cleanupDb) {
eventCleanupRepository.cleanupEvents(regularEventExpTs, false);
cleanupEvents(regularEventExpTs, false);
} else {
cleanupPartitionsCache(regularEventExpTs, false);
}
@ -410,13 +383,25 @@ public class JpaBaseEventDao implements EventDao {
if (debugEventExpTs > 0) {
log.info("Going to cleanup debug events with exp time: {}", debugEventExpTs);
if (cleanupDb) {
eventCleanupRepository.cleanupEvents(debugEventExpTs, true);
cleanupEvents(debugEventExpTs, true);
} else {
cleanupPartitionsCache(debugEventExpTs, true);
}
}
}
private void cleanupEvents(long eventExpTime, boolean debug) {
for (EventType eventType : EventType.values()) {
if (eventType.isDebug() == debug) {
cleanupPartitions(eventType, eventExpTime);
}
}
}
private void cleanupPartitions(EventType eventType, long eventExpTime) {
partitioningRepository.dropPartitionsBefore(eventType.getTable(), eventExpTime, partitionConfiguration.getPartitionSizeInMs(eventType));
}
private void cleanupPartitionsCache(long expTime, boolean isDebug) {
for (EventType eventType : EventType.values()) {
if (eventType.isDebug() == isDebug) {

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save