Browse Source

Merge branch 'master' into improvement/provisioning-gateway-device

pull/11341/head
Illia Barkov 2 years ago
committed by GitHub
parent
commit
4d24702ff5
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. 1401
      application/src/main/data/json/system/scada_symbols/cylindrical-tank.svg
  7. 1632
      application/src/main/data/json/system/scada_symbols/elevated-tank.svg
  8. 271
      application/src/main/data/json/system/scada_symbols/horizontal-ball-valve.svg
  9. 948
      application/src/main/data/json/system/scada_symbols/horizontal-inline-flow-meter.svg
  10. 421
      application/src/main/data/json/system/scada_symbols/horizontal-pipe.svg
  11. 1407
      application/src/main/data/json/system/scada_symbols/horizontal-tank.svg
  12. 300
      application/src/main/data/json/system/scada_symbols/horizontal-wheel-valve.svg
  13. 1392
      application/src/main/data/json/system/scada_symbols/large-cylindrical-tank.svg
  14. 1453
      application/src/main/data/json/system/scada_symbols/large-stand-cylindrical-tank.svg
  15. 1455
      application/src/main/data/json/system/scada_symbols/large-stand-vertical-tank.svg
  16. 1394
      application/src/main/data/json/system/scada_symbols/large-vertical-tank.svg
  17. 558
      application/src/main/data/json/system/scada_symbols/left-bottom-elbow-pipe.svg
  18. 166
      application/src/main/data/json/system/scada_symbols/left-drain-pipe.svg
  19. 181
      application/src/main/data/json/system/scada_symbols/left-elbow-drain-pipe.svg
  20. 964
      application/src/main/data/json/system/scada_symbols/left-flow-meter.svg
  21. 1035
      application/src/main/data/json/system/scada_symbols/left-heat-pump.svg
  22. 526
      application/src/main/data/json/system/scada_symbols/left-motor-pump.svg
  23. 866
      application/src/main/data/json/system/scada_symbols/left-tee-pipe.svg
  24. 558
      application/src/main/data/json/system/scada_symbols/left-top-elbow-pipe.svg
  25. 88
      application/src/main/data/json/system/scada_symbols/long-bottom-filter.svg
  26. 487
      application/src/main/data/json/system/scada_symbols/long-horizontal-pipe.svg
  27. 88
      application/src/main/data/json/system/scada_symbols/long-top-filter.svg
  28. 484
      application/src/main/data/json/system/scada_symbols/long-vertical-pipe.svg
  29. 1056
      application/src/main/data/json/system/scada_symbols/pool.svg
  30. 167
      application/src/main/data/json/system/scada_symbols/right-drain-pipe.svg
  31. 178
      application/src/main/data/json/system/scada_symbols/right-elbow-drain-pipe.svg
  32. 964
      application/src/main/data/json/system/scada_symbols/right-flow-meter.svg
  33. 1044
      application/src/main/data/json/system/scada_symbols/right-heat-pump.svg
  34. 526
      application/src/main/data/json/system/scada_symbols/right-motor-pump.svg
  35. 854
      application/src/main/data/json/system/scada_symbols/right-tee-pipe.svg
  36. 88
      application/src/main/data/json/system/scada_symbols/short-bottom-filter.svg
  37. 160
      application/src/main/data/json/system/scada_symbols/short-left-drain-pipe.svg
  38. 160
      application/src/main/data/json/system/scada_symbols/short-right-drain-pipe.svg
  39. 88
      application/src/main/data/json/system/scada_symbols/short-top-filter.svg
  40. 428
      application/src/main/data/json/system/scada_symbols/small-left-motor-pump.svg
  41. 428
      application/src/main/data/json/system/scada_symbols/small-right-motor-pump.svg
  42. 1426
      application/src/main/data/json/system/scada_symbols/small-spherical-tank.svg
  43. 1456
      application/src/main/data/json/system/scada_symbols/spherical-tank.svg
  44. 1462
      application/src/main/data/json/system/scada_symbols/stand-cylindrical-tank.svg
  45. 648
      application/src/main/data/json/system/scada_symbols/stand-filter.svg
  46. 1468
      application/src/main/data/json/system/scada_symbols/stand-horizontal-tank.svg
  47. 1435
      application/src/main/data/json/system/scada_symbols/stand-vertical-short-tank.svg
  48. 1455
      application/src/main/data/json/system/scada_symbols/stand-vertical-tank.svg
  49. 964
      application/src/main/data/json/system/scada_symbols/top-flow-meter.svg
  50. 558
      application/src/main/data/json/system/scada_symbols/top-right-elbow-pipe.svg
  51. 854
      application/src/main/data/json/system/scada_symbols/top-tee-pipe.svg
  52. 271
      application/src/main/data/json/system/scada_symbols/vertical-ball-valve.svg
  53. 948
      application/src/main/data/json/system/scada_symbols/vertical-inline-flow-meter.svg
  54. 421
      application/src/main/data/json/system/scada_symbols/vertical-pipe.svg
  55. 1374
      application/src/main/data/json/system/scada_symbols/vertical-short-tank.svg
  56. 1394
      application/src/main/data/json/system/scada_symbols/vertical-tank.svg
  57. 300
      application/src/main/data/json/system/scada_symbols/vertical-wheel-valve.svg
  58. 14
      application/src/main/data/json/system/widget_bundles/scada_symbols.json
  59. 70
      application/src/main/data/json/system/widget_bundles/scada_water_system_symbols.json
  60. 4
      application/src/main/data/json/system/widget_types/power_button.json
  61. 24
      application/src/main/data/json/system/widget_types/scada_symbol.json
  62. 4
      application/src/main/data/json/system/widget_types/toggle_button.json
  63. 2
      application/src/main/data/json/tenant/dashboards/gateways.json
  64. 182
      application/src/main/data/upgrade/3.7.0/schema_update.sql
  65. 68
      application/src/main/java/org/springframework/http/converter/xml/MappingJackson2XmlHttpMessageConverter.java
  66. 15
      application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java
  67. 21
      application/src/main/java/org/thingsboard/server/actors/app/AppActor.java
  68. 8
      application/src/main/java/org/thingsboard/server/actors/device/DeviceActor.java
  69. 9
      application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java
  70. 22
      application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java
  71. 4
      application/src/main/java/org/thingsboard/server/actors/service/DefaultActorService.java
  72. 2
      application/src/main/java/org/thingsboard/server/actors/shared/ComponentMsgProcessor.java
  73. 4
      application/src/main/java/org/thingsboard/server/actors/stats/StatsPersistTick.java
  74. 25
      application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java
  75. 15
      application/src/main/java/org/thingsboard/server/config/CustomOAuth2AuthorizationRequestResolver.java
  76. 10
      application/src/main/java/org/thingsboard/server/config/RateLimitProcessingFilter.java
  77. 78
      application/src/main/java/org/thingsboard/server/config/RequestSizeFilter.java
  78. 14
      application/src/main/java/org/thingsboard/server/config/ThingsboardSecurityConfiguration.java
  79. 4
      application/src/main/java/org/thingsboard/server/config/WebConfig.java
  80. 6
      application/src/main/java/org/thingsboard/server/controller/AdminController.java
  81. 3
      application/src/main/java/org/thingsboard/server/controller/AlarmCommentController.java
  82. 3
      application/src/main/java/org/thingsboard/server/controller/AlarmController.java
  83. 3
      application/src/main/java/org/thingsboard/server/controller/AssetController.java
  84. 5
      application/src/main/java/org/thingsboard/server/controller/AssetProfileController.java
  85. 3
      application/src/main/java/org/thingsboard/server/controller/AuditLogController.java
  86. 58
      application/src/main/java/org/thingsboard/server/controller/BaseController.java
  87. 28
      application/src/main/java/org/thingsboard/server/controller/ControllerConstants.java
  88. 3
      application/src/main/java/org/thingsboard/server/controller/DashboardController.java
  89. 5
      application/src/main/java/org/thingsboard/server/controller/DeviceController.java
  90. 9
      application/src/main/java/org/thingsboard/server/controller/DeviceProfileController.java
  91. 132
      application/src/main/java/org/thingsboard/server/controller/DomainController.java
  92. 5
      application/src/main/java/org/thingsboard/server/controller/EdgeController.java
  93. 43
      application/src/main/java/org/thingsboard/server/controller/EntityRelationController.java
  94. 3
      application/src/main/java/org/thingsboard/server/controller/EntityViewController.java
  95. 3
      application/src/main/java/org/thingsboard/server/controller/EventController.java
  96. 28
      application/src/main/java/org/thingsboard/server/controller/ImageController.java
  97. 3
      application/src/main/java/org/thingsboard/server/controller/Lwm2mController.java
  98. 133
      application/src/main/java/org/thingsboard/server/controller/MobileAppController.java
  99. 10
      application/src/main/java/org/thingsboard/server/controller/NotificationController.java
  100. 133
      application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.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-fluid-background');\nvar horizontalLiquidPattern = prepareLiquidPattern('horizontal-fluid');\nvar verticalLiquidPattern = prepareLiquidPattern('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(fluidElementTag) {\n return ctx.tags[fluidElementTag][0].reference('fill');\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-fluid');\nvar rightLiquidPattern = prepareLiquidPattern('right-fluid');\nvar bottomLiquidPattern = prepareLiquidPattern('bottom-fluid');\n\nupdateLiquidPatternAnimation(leftLiquidPattern, 'left');\nupdateLiquidPatternAnimation(rightLiquidPattern, 'right');\nupdateLiquidPatternAnimation(bottomLiquidPattern, 'bottom');\n\n\nfunction prepareLiquidPattern(fluidElementTag) {\n return ctx.tags[fluidElementTag][0].reference('fill');\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: 57 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: 58 KiB

1401
application/src/main/data/json/system/scada_symbols/cylindrical-tank.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 112 KiB

1632
application/src/main/data/json/system/scada_symbols/elevated-tank.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 138 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 = element.reference('fill');\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

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

@ -0,0 +1,421 @@
<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 = element.reference('fill');\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

1407
application/src/main/data/json/system/scada_symbols/horizontal-tank.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 114 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

1392
application/src/main/data/json/system/scada_symbols/large-cylindrical-tank.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 112 KiB

1453
application/src/main/data/json/system/scada_symbols/large-stand-cylindrical-tank.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 119 KiB

1455
application/src/main/data/json/system/scada_symbols/large-stand-vertical-tank.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 120 KiB

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

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 113 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-fluid-background');\nvar horizontalLiquidPattern = prepareLiquidPattern('horizontal-fluid');\nvar verticalLiquidPattern = prepareLiquidPattern('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(fluidElementTag) {\n return ctx.tags[fluidElementTag][0].reference('fill');\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": "#518DA0",
"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="#518DA0" 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

1035
application/src/main/data/json/system/scada_symbols/left-heat-pump.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 56 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-fluid');\nvar topLiquidPattern = prepareLiquidPattern('top-fluid');\nvar bottomLiquidPattern = prepareLiquidPattern('bottom-fluid');\n\nupdateLiquidPatternAnimation(leftLiquidPattern, 'left');\nupdateLiquidPatternAnimation(topLiquidPattern, 'top');\nupdateLiquidPatternAnimation(bottomLiquidPattern, 'bottom');\n\n\nfunction prepareLiquidPattern(fluidElementTag) {\n return ctx.tags[fluidElementTag][0].reference('fill');\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: 57 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-fluid-background');\nvar horizontalLiquidPattern = prepareLiquidPattern('horizontal-fluid');\nvar verticalLiquidPattern = prepareLiquidPattern('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(fluidElementTag) {\n return ctx.tags[fluidElementTag][0].reference('fill');\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: 38 KiB

1056
application/src/main/data/json/system/scada_symbols/pool.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 73 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": "#518DA0",
"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="#518DA0" 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: 73 KiB

1044
application/src/main/data/json/system/scada_symbols/right-heat-pump.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 56 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-fluid');\nvar topLiquidPattern = prepareLiquidPattern('top-fluid');\nvar bottomLiquidPattern = prepareLiquidPattern('bottom-fluid');\n\nupdateLiquidPatternAnimation(rightLiquidPattern, 'right');\nupdateLiquidPatternAnimation(topLiquidPattern, 'top');\nupdateLiquidPatternAnimation(bottomLiquidPattern, 'bottom');\n\nfunction prepareLiquidPattern(fluidElementTag) {\n return ctx.tags[fluidElementTag][0].reference('fill');\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: 57 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": "#518DA0",
"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="#518DA0" 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": "#518DA0",
"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="#518DA0" 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

1426
application/src/main/data/json/system/scada_symbols/small-spherical-tank.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 104 KiB

1456
application/src/main/data/json/system/scada_symbols/spherical-tank.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 118 KiB

1462
application/src/main/data/json/system/scada_symbols/stand-cylindrical-tank.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 119 KiB

648
application/src/main/data/json/system/scada_symbols/stand-filter.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 42 KiB

1468
application/src/main/data/json/system/scada_symbols/stand-horizontal-tank.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 121 KiB

1435
application/src/main/data/json/system/scada_symbols/stand-vertical-short-tank.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 108 KiB

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

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 120 KiB

964
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-fluid-background');\nvar horizontalLiquidPattern = prepareLiquidPattern('horizontal-fluid');\nvar verticalLiquidPattern = prepareLiquidPattern('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(fluidElementTag) {\n return ctx.tags[fluidElementTag][0].reference('fill');\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-fluid');\nvar rightLiquidPattern = prepareLiquidPattern('right-fluid');\nvar topLiquidPattern = prepareLiquidPattern('top-fluid');\n\nupdateLiquidPatternAnimation(leftLiquidPattern, 'left');\nupdateLiquidPatternAnimation(rightLiquidPattern, 'right');\nupdateLiquidPatternAnimation(topLiquidPattern, 'top');\n\n\nfunction prepareLiquidPattern(fluidElementTag) {\n return ctx.tags[fluidElementTag][0].reference('fill');\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: 56 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

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

@ -0,0 +1,948 @@
<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 = element.reference('fill');\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

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

@ -0,0 +1,421 @@
<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 = element.reference('fill');\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

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

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 101 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"
]
}

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

@ -0,0 +1,70 @@
{
"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",
"right_heat_pump",
"left_heat_pump",
"short_bottom_filter",
"long_bottom_filter",
"short_top_filter",
"long_top_filter",
"stand_filter",
"horizontal_wheel_valve",
"vertical_wheel_valve",
"horizontal_ball_valve",
"vertical_ball_valve",
"vertical_tank",
"stand_vertical_tank",
"cylindrical_tank",
"stand_cylindrical_tank",
"vertical_short_tank",
"stand_vertical_short_tank",
"large_cylindrical_tank",
"large_stand_cylindrical_tank",
"large_vertical_tank",
"large_stand_vertical_tank",
"horizontal_tank",
"stand_horizontal_tank",
"spherical_tank",
"small_spherical_tank",
"elevated_tank",
"pool"
]
}

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

2
application/src/main/data/json/tenant/dashboards/gateways.json

@ -200,7 +200,7 @@
"useShowWidgetActionFunction": null,
"showWidgetActionFunction": "return true;",
"type": "customPretty",
"customHtml": "<mat-toolbar fxLayout=\"row\" color=\"primary\">\n <h2 translate>gateway.gateway-configuration</h2>\n <span fxFlex></span>\n <button mat-icon-button (click)=\"cancel()\" type=\"button\">\n <mat-icon class=\"material-icons\">close</mat-icon>\n </button>\n</mat-toolbar>\n<mat-progress-bar color=\"warn\" mode=\"indeterminate\" *ngIf=\"isLoading$ | async\">\n</mat-progress-bar>\n<div style=\"height: 4px;\" *ngIf=\"!(isLoading$ | async)\"></div>\n<tb-gateway-configuration\n class=\"gateway-config\"\n mat-dialog-content\n [device]=\"device\"\n [dialogRef]=\"dialogRef\">\n</tb-gateway-configuration>",
"customHtml": "<mat-progress-bar color=\"warn\" mode=\"indeterminate\" *ngIf=\"isLoading$ | async\">\n</mat-progress-bar>\n<tb-gateway-configuration\n class=\"gateway-config\"\n mat-dialog-content\n [device]=\"device\"\n [dialogRef]=\"dialogRef\">\n</tb-gateway-configuration>",
"customCss": ".gateway-config {\n width: 800px !important;\n padding: 0 !important;\n min-height: 75vh;\n max-width: 100%;\n display: grid !important;\n}\n\n@media screen and (max-width: 599px) {\n .mat-mdc-dialog-content {\n max-height: calc(100% - 60px) !important;\n }\n}",
"customFunction": "let $injector = widgetContext.$scope.$injector;\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\n\nopenAddEntityDialog();\n\nfunction openAddEntityDialog() {\n customDialog.customDialog(htmlTemplate, AddEntityDialogController).subscribe();\n}\n\nfunction AddEntityDialogController(instance) {\n let vm = instance;\n \n vm.device = additionalParams.entity.id;\n\n vm.cancel = function() {\n vm.dialogRef.close(null);\n };\n}\n",
"customResources": [],

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

@ -14,3 +14,185 @@
-- 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;
CREATE SEQUENCE IF NOT EXISTS ts_kv_latest_version_seq cache 1;
ALTER TABLE attribute_kv ADD COLUMN IF NOT EXISTS version bigint default 0;
ALTER TABLE ts_kv_latest ADD COLUMN IF NOT EXISTS version bigint default 0;
-- KV VERSIONING UPDATE END
-- RELATION VERSIONING UPDATE START
CREATE SEQUENCE IF NOT EXISTS relation_version_seq cache 1;
ALTER TABLE relation ADD COLUMN IF NOT EXISTS version bigint default 0;
-- RELATION VERSIONING UPDATE END
-- ENTITIES VERSIONING UPDATE START
ALTER TABLE device ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 1;
ALTER TABLE device_profile ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 1;
ALTER TABLE device_credentials ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 1;
ALTER TABLE asset ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 1;
ALTER TABLE asset_profile ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 1;
ALTER TABLE entity_view ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 1;
ALTER TABLE tb_user ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 1;
ALTER TABLE customer ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 1;
ALTER TABLE edge ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 1;
ALTER TABLE rule_chain ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 1;
ALTER TABLE dashboard ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 1;
ALTER TABLE widget_type ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 1;
ALTER TABLE widgets_bundle ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 1;
ALTER TABLE tenant ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 1;
-- ENTITIES VERSIONING UPDATE END
-- OAUTH2 UPDATE START
ALTER TABLE IF EXISTS oauth2_mobile RENAME TO mobile_app;
ALTER TABLE IF EXISTS oauth2_domain RENAME TO domain;
ALTER TABLE IF EXISTS oauth2_registration RENAME TO oauth2_client;
ALTER TABLE domain ADD COLUMN IF NOT EXISTS oauth2_enabled boolean,
ADD COLUMN IF NOT EXISTS edge_enabled boolean,
ADD COLUMN IF NOT EXISTS tenant_id uuid DEFAULT '13814000-1dd2-11b2-8080-808080808080',
DROP COLUMN IF EXISTS domain_scheme;
-- rename column domain_name to name
DO
$$
BEGIN
IF EXISTS(SELECT 1 FROM information_schema.columns WHERE table_name='domain' and column_name='domain_name') THEN
ALTER TABLE domain RENAME COLUMN domain_name TO name;
END IF;
END
$$;
-- delete duplicated domains
DELETE FROM domain d1 USING (
SELECT MIN(ctid) as ctid, name
FROM domain
GROUP BY name HAVING COUNT(*) > 1
) d2 WHERE d1.name = d2.name AND d1.ctid <> d2.ctid;
ALTER TABLE mobile_app ADD COLUMN IF NOT EXISTS oauth2_enabled boolean,
ADD COLUMN IF NOT EXISTS tenant_id uuid DEFAULT '13814000-1dd2-11b2-8080-808080808080';
-- delete duplicated apps
DELETE FROM mobile_app m1 USING (
SELECT MIN(ctid) as ctid, pkg_name
FROM mobile_app
GROUP BY pkg_name HAVING COUNT(*) > 1
) m2 WHERE m1.pkg_name = m2.pkg_name AND m1.ctid <> m2.ctid;
ALTER TABLE oauth2_client ADD COLUMN IF NOT EXISTS tenant_id uuid DEFAULT '13814000-1dd2-11b2-8080-808080808080',
ADD COLUMN IF NOT EXISTS title varchar(100);
UPDATE oauth2_client SET title = additional_info::jsonb->>'providerName' WHERE additional_info IS NOT NULL;
CREATE TABLE IF NOT EXISTS domain_oauth2_client (
domain_id uuid NOT NULL,
oauth2_client_id uuid NOT NULL,
CONSTRAINT fk_domain FOREIGN KEY (domain_id) REFERENCES domain(id) ON DELETE CASCADE,
CONSTRAINT fk_oauth2_client FOREIGN KEY (oauth2_client_id) REFERENCES oauth2_client(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS mobile_app_oauth2_client (
mobile_app_id uuid NOT NULL,
oauth2_client_id uuid NOT NULL,
CONSTRAINT fk_domain FOREIGN KEY (mobile_app_id) REFERENCES mobile_app(id) ON DELETE CASCADE,
CONSTRAINT fk_oauth2_client FOREIGN KEY (oauth2_client_id) REFERENCES oauth2_client(id) ON DELETE CASCADE
);
-- migrate oauth2_params table
DO
$$
BEGIN
IF EXISTS(SELECT 1 FROM information_schema.tables WHERE table_name = 'oauth2_params') THEN
UPDATE domain SET oauth2_enabled = p.enabled,
edge_enabled = p.edge_enabled
FROM oauth2_params p WHERE p.id = domain.oauth2_params_id;
UPDATE mobile_app SET oauth2_enabled = p.enabled
FROM oauth2_params p WHERE p.id = mobile_app.oauth2_params_id;
INSERT INTO domain_oauth2_client(domain_id, oauth2_client_id)
(SELECT d.id, r.id FROM domain d LEFT JOIN oauth2_client r on d.oauth2_params_id = r.oauth2_params_id
WHERE r.platforms IS NULL OR r.platforms IN ('','WEB'));
INSERT INTO mobile_app_oauth2_client(mobile_app_id, oauth2_client_id)
(SELECT m.id, r.id FROM mobile_app m LEFT JOIN oauth2_client r on m.oauth2_params_id = r.oauth2_params_id
WHERE r.platforms IS NULL OR r.platforms IN ('','ANDROID','IOS'));
ALTER TABLE mobile_app RENAME CONSTRAINT oauth2_mobile_pkey TO mobile_app_pkey;
ALTER TABLE domain RENAME CONSTRAINT oauth2_domain_pkey TO domain_pkey;
ALTER TABLE oauth2_client RENAME CONSTRAINT oauth2_registration_pkey TO oauth2_client_pkey;
ALTER TABLE domain DROP COLUMN oauth2_params_id;
ALTER TABLE mobile_app DROP COLUMN oauth2_params_id;
ALTER TABLE oauth2_client DROP COLUMN oauth2_params_id;
ALTER TABLE mobile_app ADD CONSTRAINT mobile_app_unq_key UNIQUE (pkg_name);
ALTER TABLE domain ADD CONSTRAINT domain_unq_key UNIQUE (name);
DROP TABLE IF EXISTS oauth2_params;
-- drop deprecated tables
DROP TABLE IF EXISTS oauth2_client_registration_info;
DROP TABLE IF EXISTS oauth2_client_registration;
END IF;
END
$$;
-- OAUTH2 UPDATE END

68
application/src/main/java/org/springframework/http/converter/xml/MappingJackson2XmlHttpMessageConverter.java

@ -0,0 +1,68 @@
/**
* 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.springframework.http.converter.xml;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.util.Assert;
import java.lang.reflect.Type;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.List;
/**
* RestTemplate firstly uses MappingJackson2XmlHttpMessageConverter converter instead of MappingJackson2HttpMessageConverter.
* It produces error UnsupportedMediaType, so this converter had to be shadowed for read and write operations to use the correct converter
*/
public class MappingJackson2XmlHttpMessageConverter extends AbstractJackson2HttpMessageConverter {
private static final List<MediaType> problemDetailMediaTypes;
public MappingJackson2XmlHttpMessageConverter() {
this(Jackson2ObjectMapperBuilder.xml().build());
}
public MappingJackson2XmlHttpMessageConverter(ObjectMapper objectMapper) {
super(objectMapper, new MediaType[]{new MediaType("application", "xml", StandardCharsets.UTF_8), new MediaType("text", "xml", StandardCharsets.UTF_8), new MediaType("application", "*+xml", StandardCharsets.UTF_8)});
Assert.isInstanceOf(XmlMapper.class, objectMapper, "XmlMapper required");
}
public void setObjectMapper(ObjectMapper objectMapper) {
Assert.isInstanceOf(XmlMapper.class, objectMapper, "XmlMapper required");
super.setObjectMapper(objectMapper);
}
protected List<MediaType> getMediaTypesForProblemDetail() {
return problemDetailMediaTypes;
}
static {
problemDetailMediaTypes = Collections.singletonList(MediaType.APPLICATION_PROBLEM_XML);
}
@Override
public boolean canRead(Type type, Class<?> contextClass, MediaType mediaType) {
return false;
}
@Override
public boolean canWrite(Class<?> clazz, MediaType mediaType) {
return false;
}
}

15
application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java

@ -68,17 +68,20 @@ import org.thingsboard.server.dao.device.ClaimDevicesService;
import org.thingsboard.server.dao.device.DeviceCredentialsService;
import org.thingsboard.server.dao.device.DeviceProfileService;
import org.thingsboard.server.dao.device.DeviceService;
import org.thingsboard.server.dao.domain.DomainService;
import org.thingsboard.server.dao.edge.EdgeEventService;
import org.thingsboard.server.dao.edge.EdgeService;
import org.thingsboard.server.dao.entity.EntityService;
import org.thingsboard.server.dao.entityview.EntityViewService;
import org.thingsboard.server.dao.event.EventService;
import org.thingsboard.server.dao.mobile.MobileAppService;
import org.thingsboard.server.dao.nosql.CassandraBufferedRateReadExecutor;
import org.thingsboard.server.dao.nosql.CassandraBufferedRateWriteExecutor;
import org.thingsboard.server.dao.notification.NotificationRequestService;
import org.thingsboard.server.dao.notification.NotificationRuleService;
import org.thingsboard.server.dao.notification.NotificationTargetService;
import org.thingsboard.server.dao.notification.NotificationTemplateService;
import org.thingsboard.server.dao.oauth2.OAuth2ClientService;
import org.thingsboard.server.dao.ota.OtaPackageService;
import org.thingsboard.server.dao.queue.QueueService;
import org.thingsboard.server.dao.queue.QueueStatsService;
@ -370,6 +373,18 @@ public class ActorSystemContext {
@Getter
private NotificationRuleService notificationRuleService;
@Autowired
@Getter
private OAuth2ClientService oAuth2ClientService;
@Autowired
@Getter
private DomainService domainService;
@Autowired
@Getter
private MobileAppService mobileAppService;
@Autowired
@Getter
private SlackService slackService;

21
application/src/main/java/org/thingsboard/server/actors/app/AppActor.java

@ -37,12 +37,10 @@ import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
import org.thingsboard.server.common.msg.MsgType;
import org.thingsboard.server.common.msg.TbActorMsg;
import org.thingsboard.server.common.msg.aware.TenantAwareMsg;
import org.thingsboard.server.common.msg.edge.EdgeSessionMsg;
import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg;
import org.thingsboard.server.common.msg.queue.QueueToRuleEngineMsg;
import org.thingsboard.server.common.msg.queue.RuleEngineException;
import org.thingsboard.server.common.msg.queue.ServiceType;
import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.tenant.TenantService;
import org.thingsboard.server.service.transport.msg.TransportToDeviceActorMsgWrapper;
@ -110,11 +108,6 @@ public class AppActor extends ContextAwareActor {
case REMOVE_RPC_TO_DEVICE_ACTOR_MSG:
onToDeviceActorMsg((TenantAwareMsg) msg, true);
break;
case EDGE_EVENT_UPDATE_TO_EDGE_SESSION_MSG:
case EDGE_SYNC_REQUEST_TO_EDGE_SESSION_MSG:
case EDGE_SYNC_RESPONSE_FROM_EDGE_SESSION_MSG:
onToEdgeSessionMsg((EdgeSessionMsg) msg);
break;
case SESSION_TIMEOUT_MSG:
ctx.broadcastToChildrenByType(msg, EntityType.TENANT);
break;
@ -206,20 +199,6 @@ public class AppActor extends ContextAwareActor {
() -> true));
}
private void onToEdgeSessionMsg(EdgeSessionMsg msg) {
TbActorRef target = null;
if (ModelConstants.SYSTEM_TENANT.equals(msg.getTenantId())) {
log.warn("Message has system tenant id: {}", msg);
} else {
target = getOrCreateTenantActor(msg.getTenantId()).orElse(null);
}
if (target != null) {
target.tellWithHighPriority(msg);
} else {
log.debug("[{}] Invalid edge session msg: {}", msg.getTenantId(), msg);
}
}
@Override
public ProcessFailureStrategy onProcessFailure(TbActorMsg msg, Throwable t) {
log.error("Failed to process msg: {}", msg, t);

8
application/src/main/java/org/thingsboard/server/actors/device/DeviceActor.java

@ -16,9 +16,6 @@
package org.thingsboard.server.actors.device;
import lombok.extern.slf4j.Slf4j;
import org.thingsboard.server.common.msg.rule.engine.DeviceAttributesEventNotificationMsg;
import org.thingsboard.server.common.msg.rule.engine.DeviceEdgeUpdateMsg;
import org.thingsboard.server.common.msg.rule.engine.DeviceNameOrTypeUpdateMsg;
import org.thingsboard.server.actors.ActorSystemContext;
import org.thingsboard.server.actors.TbActorCtx;
import org.thingsboard.server.actors.TbActorException;
@ -26,10 +23,13 @@ import org.thingsboard.server.actors.service.ContextAwareActor;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.msg.TbActorMsg;
import org.thingsboard.server.common.msg.timeout.DeviceActorServerSideRpcTimeoutMsg;
import org.thingsboard.server.common.msg.rpc.FromDeviceRpcResponseActorMsg;
import org.thingsboard.server.common.msg.rpc.RemoveRpcActorMsg;
import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequestActorMsg;
import org.thingsboard.server.common.msg.rule.engine.DeviceAttributesEventNotificationMsg;
import org.thingsboard.server.common.msg.rule.engine.DeviceEdgeUpdateMsg;
import org.thingsboard.server.common.msg.rule.engine.DeviceNameOrTypeUpdateMsg;
import org.thingsboard.server.common.msg.timeout.DeviceActorServerSideRpcTimeoutMsg;
import org.thingsboard.server.service.transport.msg.TransportToDeviceActorMsgWrapper;
@Slf4j

9
application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java

@ -56,6 +56,7 @@ import org.thingsboard.server.common.data.security.DeviceCredentials;
import org.thingsboard.server.common.data.security.DeviceCredentialsType;
import org.thingsboard.server.common.msg.TbActorMsg;
import org.thingsboard.server.common.msg.TbMsgMetaData;
import org.thingsboard.server.common.msg.edge.EdgeHighPriorityMsg;
import org.thingsboard.server.common.msg.queue.TbCallback;
import org.thingsboard.server.common.msg.rpc.FromDeviceRpcResponse;
import org.thingsboard.server.common.msg.rpc.FromDeviceRpcResponseActorMsg;
@ -74,6 +75,7 @@ import org.thingsboard.server.gen.transport.TransportProtos.DeviceSessionsCacheE
import org.thingsboard.server.gen.transport.TransportProtos.GetAttributeRequestMsg;
import org.thingsboard.server.gen.transport.TransportProtos.GetAttributeResponseMsg;
import org.thingsboard.server.gen.transport.TransportProtos.SessionCloseNotificationProto;
import org.thingsboard.server.gen.transport.TransportProtos.SessionCloseReason;
import org.thingsboard.server.gen.transport.TransportProtos.SessionEvent;
import org.thingsboard.server.gen.transport.TransportProtos.SessionEventMsg;
import org.thingsboard.server.gen.transport.TransportProtos.SessionInfoProto;
@ -90,7 +92,6 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToTransportUpdateCre
import org.thingsboard.server.gen.transport.TransportProtos.TransportToDeviceActorMsg;
import org.thingsboard.server.gen.transport.TransportProtos.TsKvProto;
import org.thingsboard.server.gen.transport.TransportProtos.UplinkNotificationMsg;
import org.thingsboard.server.gen.transport.TransportProtos.SessionCloseReason;
import org.thingsboard.server.service.rpc.RpcSubmitStrategy;
import org.thingsboard.server.service.state.DefaultDeviceStateService;
import org.thingsboard.server.service.transport.msg.TransportToDeviceActorMsgWrapper;
@ -214,7 +215,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
log.debug("[{}][{}] device is related to edge: [{}]. Saving RPC request: [{}][{}] to edge queue", tenantId, deviceId, edgeId.getId(), rpcId, requestId);
try {
if (systemContext.getEdgeService().isEdgeActiveAsync(tenantId, edgeId, DefaultDeviceStateService.ACTIVITY_STATE).get()) {
saveRpcRequestToEdgeQueue(request, requestId).get();
saveRpcRequestToEdgeQueue(request, requestId);
} else {
log.error("[{}][{}][{}] Failed to save RPC request to edge queue {}. The Edge is currently offline or unreachable", tenantId, deviceId, edgeId.getId(), request);
}
@ -921,7 +922,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
systemContext.getTbCoreToTransportService().process(nodeId, msg);
}
private ListenableFuture<Void> saveRpcRequestToEdgeQueue(ToDeviceRpcRequest msg, Integer requestId) {
private void saveRpcRequestToEdgeQueue(ToDeviceRpcRequest msg, Integer requestId) {
ObjectNode body = JacksonUtil.newObjectNode();
body.put("requestId", requestId);
body.put("requestUUID", msg.getId().toString());
@ -935,7 +936,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
EdgeEvent edgeEvent = EdgeUtils.constructEdgeEvent(tenantId, edgeId, EdgeEventType.DEVICE, EdgeEventActionType.RPC_CALL, deviceId, body);
return systemContext.getEdgeEventService().saveAsync(edgeEvent);
systemContext.getClusterService().onEdgeHighPriorityMsg(new EdgeHighPriorityMsg(tenantId, edgeEvent));
}
void restoreSessions() {

22
application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java

@ -83,17 +83,20 @@ import org.thingsboard.server.dao.dashboard.DashboardService;
import org.thingsboard.server.dao.device.DeviceCredentialsService;
import org.thingsboard.server.dao.device.DeviceProfileService;
import org.thingsboard.server.dao.device.DeviceService;
import org.thingsboard.server.dao.domain.DomainService;
import org.thingsboard.server.dao.edge.EdgeEventService;
import org.thingsboard.server.dao.edge.EdgeService;
import org.thingsboard.server.dao.entity.EntityService;
import org.thingsboard.server.dao.entityview.EntityViewService;
import org.thingsboard.server.dao.event.EventService;
import org.thingsboard.server.dao.mobile.MobileAppService;
import org.thingsboard.server.dao.nosql.CassandraStatementTask;
import org.thingsboard.server.dao.nosql.TbResultSetFuture;
import org.thingsboard.server.dao.notification.NotificationRequestService;
import org.thingsboard.server.dao.notification.NotificationRuleService;
import org.thingsboard.server.dao.notification.NotificationTargetService;
import org.thingsboard.server.dao.notification.NotificationTemplateService;
import org.thingsboard.server.dao.oauth2.OAuth2ClientService;
import org.thingsboard.server.dao.ota.OtaPackageService;
import org.thingsboard.server.dao.queue.QueueService;
import org.thingsboard.server.dao.queue.QueueStatsService;
@ -106,10 +109,8 @@ import org.thingsboard.server.dao.user.UserService;
import org.thingsboard.server.dao.widget.WidgetTypeService;
import org.thingsboard.server.dao.widget.WidgetsBundleService;
import org.thingsboard.server.gen.transport.TransportProtos;
import org.thingsboard.server.queue.TbQueueCallback;
import org.thingsboard.server.queue.TbQueueMsgMetadata;
import org.thingsboard.server.service.executors.PubSubRuleNodeExecutorProvider;
import org.thingsboard.server.queue.common.SimpleTbQueueCallback;
import org.thingsboard.server.service.executors.PubSubRuleNodeExecutorProvider;
import org.thingsboard.server.service.script.RuleNodeJsScriptEngine;
import org.thingsboard.server.service.script.RuleNodeTbelScriptEngine;
@ -827,6 +828,21 @@ class DefaultTbContext implements TbContext {
return mainCtx.getNotificationRuleService();
}
@Override
public OAuth2ClientService getOAuth2ClientService() {
return mainCtx.getOAuth2ClientService();
}
@Override
public DomainService getDomainService() {
return mainCtx.getDomainService();
}
@Override
public MobileAppService getMobileAppService() {
return mainCtx.getMobileAppService();
}
@Override
public SlackService getSlackService() {
return mainCtx.getSlackService();

4
application/src/main/java/org/thingsboard/server/actors/service/DefaultActorService.java

@ -15,6 +15,8 @@
*/
package org.thingsboard.server.actors.service;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -36,8 +38,6 @@ import org.thingsboard.server.queue.discovery.TbApplicationEventListener;
import org.thingsboard.server.queue.discovery.event.PartitionChangeEvent;
import org.thingsboard.server.queue.util.AfterStartUp;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

2
application/src/main/java/org/thingsboard/server/actors/shared/ComponentMsgProcessor.java

@ -78,7 +78,7 @@ public abstract class ComponentMsgProcessor<T extends EntityId> extends Abstract
}
public void scheduleStatsPersistTick(TbActorCtx context, long statsPersistFrequency) {
schedulePeriodicMsgWithDelay(context, new StatsPersistTick(), statsPersistFrequency, statsPersistFrequency);
schedulePeriodicMsgWithDelay(context, StatsPersistTick.INSTANCE, statsPersistFrequency, statsPersistFrequency);
}
protected boolean checkMsgValid(TbMsg tbMsg) {

4
application/src/main/java/org/thingsboard/server/actors/stats/StatsPersistTick.java

@ -18,7 +18,9 @@ package org.thingsboard.server.actors.stats;
import org.thingsboard.server.common.msg.MsgType;
import org.thingsboard.server.common.msg.TbActorMsg;
public final class StatsPersistTick implements TbActorMsg {
public enum StatsPersistTick implements TbActorMsg {
INSTANCE;
@Override
public MsgType getMsgType() {
return MsgType.STATS_PERSIST_TICK_MSG;

25
application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java

@ -33,9 +33,7 @@ import org.thingsboard.server.actors.service.DefaultActorService;
import org.thingsboard.server.common.data.ApiUsageState;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.Tenant;
import org.thingsboard.server.common.data.edge.Edge;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.EdgeId;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.RuleChainId;
import org.thingsboard.server.common.data.id.TenantId;
@ -48,14 +46,12 @@ import org.thingsboard.server.common.msg.TbActorStopReason;
import org.thingsboard.server.common.msg.TbMsg;
import org.thingsboard.server.common.msg.aware.DeviceAwareMsg;
import org.thingsboard.server.common.msg.aware.RuleChainAwareMsg;
import org.thingsboard.server.common.msg.edge.EdgeSessionMsg;
import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg;
import org.thingsboard.server.common.msg.queue.PartitionChangeMsg;
import org.thingsboard.server.common.msg.queue.QueueToRuleEngineMsg;
import org.thingsboard.server.common.msg.queue.RuleEngineException;
import org.thingsboard.server.common.msg.queue.ServiceType;
import org.thingsboard.server.common.msg.rule.engine.DeviceDeleteMsg;
import org.thingsboard.server.service.edge.rpc.EdgeRpcService;
import org.thingsboard.server.service.transport.msg.TransportToDeviceActorMsgWrapper;
import java.util.HashSet;
@ -163,11 +159,6 @@ public class TenantActor extends RuleChainManagerActor {
case RULE_CHAIN_TO_RULE_CHAIN_MSG:
onRuleChainMsg((RuleChainAwareMsg) msg);
break;
case EDGE_EVENT_UPDATE_TO_EDGE_SESSION_MSG:
case EDGE_SYNC_REQUEST_TO_EDGE_SESSION_MSG:
case EDGE_SYNC_RESPONSE_FROM_EDGE_SESSION_MSG:
onToEdgeSessionMsg((EdgeSessionMsg) msg);
break;
default:
return false;
}
@ -270,18 +261,6 @@ public class TenantActor extends RuleChainManagerActor {
initRuleChains();
}
}
if (msg.getEntityId().getEntityType() == EntityType.EDGE && isCore) {
EdgeId edgeId = new EdgeId(msg.getEntityId().getId());
EdgeRpcService edgeRpcService = systemContext.getEdgeRpcService();
if (edgeRpcService != null) {
if (msg.getEvent() == ComponentLifecycleEvent.DELETED) {
edgeRpcService.deleteEdge(tenantId, edgeId);
} else if (msg.getEvent() == ComponentLifecycleEvent.UPDATED) {
Edge edge = systemContext.getEdgeService().findEdgeById(tenantId, edgeId);
edgeRpcService.updateEdge(tenantId, edge);
}
}
}
if (msg.getEntityId().getEntityType() == EntityType.DEVICE && ComponentLifecycleEvent.DELETED == msg.getEvent() && isMyPartition(msg.getEntityId())) {
DeviceId deviceId = (DeviceId) msg.getEntityId();
onToDeviceActorMsg(new DeviceDeleteMsg(tenantId, deviceId), true);
@ -311,10 +290,6 @@ public class TenantActor extends RuleChainManagerActor {
() -> true);
}
private void onToEdgeSessionMsg(EdgeSessionMsg msg) {
systemContext.getEdgeRpcService().onToEdgeSessionMsg(tenantId, msg);
}
private ApiUsageState getApiUsageState() {
if (apiUsageState == null) {
apiUsageState = new ApiUsageState(systemContext.getApiUsageStateService().getApiUsageState(tenantId));

15
application/src/main/java/org/thingsboard/server/config/CustomOAuth2AuthorizationRequestResolver.java

@ -37,8 +37,9 @@ import org.springframework.util.CollectionUtils;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;
import org.thingsboard.server.common.data.StringUtils;
import org.thingsboard.server.common.data.id.OAuth2ClientId;
import org.thingsboard.server.dao.oauth2.OAuth2Configuration;
import org.thingsboard.server.dao.oauth2.OAuth2Service;
import org.thingsboard.server.dao.oauth2.OAuth2ClientService;
import org.thingsboard.server.queue.util.TbCoreComponent;
import org.thingsboard.server.service.security.auth.oauth2.TbOAuth2ParameterNames;
import org.thingsboard.server.service.security.model.token.OAuth2AppTokenFactory;
@ -70,7 +71,7 @@ public class CustomOAuth2AuthorizationRequestResolver implements OAuth2Authoriza
private ClientRegistrationRepository clientRegistrationRepository;
@Autowired
private OAuth2Service oAuth2Service;
private OAuth2ClientService oAuth2ClientService;
@Autowired
private OAuth2AppTokenFactory oAuth2AppTokenFactory;
@ -115,14 +116,14 @@ public class CustomOAuth2AuthorizationRequestResolver implements OAuth2Authoriza
return request.getParameter("appToken");
}
private OAuth2AuthorizationRequest resolve(HttpServletRequest request, String registrationId, String redirectUriAction, String appPackage, String appToken) {
if (registrationId == null) {
private OAuth2AuthorizationRequest resolve(HttpServletRequest request, String oauth2ClientId, String redirectUriAction, String appPackage, String appToken) {
if (oauth2ClientId == null) {
return null;
}
ClientRegistration clientRegistration = this.clientRegistrationRepository.findByRegistrationId(registrationId);
ClientRegistration clientRegistration = this.clientRegistrationRepository.findByRegistrationId(oauth2ClientId);
if (clientRegistration == null) {
throw new IllegalArgumentException("Invalid Client Registration with Id: " + registrationId);
throw new IllegalArgumentException("Invalid Client Registration with Id: " + oauth2ClientId);
}
Map<String, Object> attributes = new HashMap<>();
@ -131,7 +132,7 @@ public class CustomOAuth2AuthorizationRequestResolver implements OAuth2Authoriza
if (StringUtils.isEmpty(appToken)) {
throw new IllegalArgumentException("Invalid application token.");
} else {
String appSecret = this.oAuth2Service.findAppSecret(UUID.fromString(registrationId), appPackage);
String appSecret = this.oAuth2ClientService.findAppSecret(new OAuth2ClientId(UUID.fromString(oauth2ClientId)), appPackage);
if (StringUtils.isEmpty(appSecret)) {
throw new IllegalArgumentException("Invalid package: " + appPackage + ". No application secret found for Client Registration with given application package.");
}

10
application/src/main/java/org/thingsboard/server/config/RateLimitProcessingFilter.java

@ -15,6 +15,10 @@
*/
package org.thingsboard.server.config;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.authentication.BadCredentialsException;
@ -22,18 +26,14 @@ import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import org.thingsboard.server.cache.limits.RateLimitService;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.exception.TenantProfileNotFoundException;
import org.thingsboard.server.common.data.limit.LimitedApi;
import org.thingsboard.server.common.msg.tools.TbRateLimitsException;
import org.thingsboard.server.cache.limits.RateLimitService;
import org.thingsboard.server.exception.ThingsboardErrorResponseHandler;
import org.thingsboard.server.service.security.model.SecurityUser;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@Slf4j

78
application/src/main/java/org/thingsboard/server/config/RequestSizeFilter.java

@ -1,78 +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.config;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.filter.OncePerRequestFilter;
import org.thingsboard.server.common.msg.tools.MaxPayloadSizeExceededException;
import org.thingsboard.server.exception.ThingsboardErrorResponseHandler;
import java.io.IOException;
import java.util.List;
@Slf4j
@Component
@RequiredArgsConstructor
public class RequestSizeFilter extends OncePerRequestFilter {
private final List<String> urls = List.of("/api/plugins/rpc/**", "/api/rpc/**");
private final AntPathMatcher pathMatcher = new AntPathMatcher();
private final ThingsboardErrorResponseHandler errorResponseHandler;
@Value("${transport.http.max_payload_size:65536}")
private int maxPayloadSize;
@Override
public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
if (request.getContentLength() > maxPayloadSize) {
if (log.isDebugEnabled()) {
log.debug("Too large payload size. Url: {}, client ip: {}, content length: {}", request.getRequestURL(),
request.getRemoteAddr(), request.getContentLength());
}
errorResponseHandler.handle(new MaxPayloadSizeExceededException(), response);
return;
}
chain.doFilter(request, response);
}
@Override
protected boolean shouldNotFilter(HttpServletRequest request) {
for (String url : urls) {
if (pathMatcher.match(url, request.getRequestURI())) {
return false;
}
}
return true;
}
@Override
protected boolean shouldNotFilterAsyncDispatch() {
return false;
}
@Override
protected boolean shouldNotFilterErrorDispatch() {
return false;
}
}

14
application/src/main/java/org/thingsboard/server/config/ThingsboardSecurityConfiguration.java

@ -17,6 +17,7 @@ package org.thingsboard.server.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@ -56,6 +57,7 @@ import org.thingsboard.server.service.security.auth.oauth2.HttpCookieOAuth2Autho
import org.thingsboard.server.service.security.auth.rest.RestAuthenticationProvider;
import org.thingsboard.server.service.security.auth.rest.RestLoginProcessingFilter;
import org.thingsboard.server.service.security.auth.rest.RestPublicLoginProcessingFilter;
import org.thingsboard.server.transport.http.config.PayloadSizeFilter;
import java.util.ArrayList;
import java.util.Arrays;
@ -82,6 +84,9 @@ public class ThingsboardSecurityConfiguration {
public static final String MAIL_OAUTH2_PROCESSING_ENTRY_POINT = "/api/admin/mail/oauth2/code";
public static final String DEVICE_CONNECTIVITY_CERTIFICATE_DOWNLOAD_ENTRY_POINT = "/api/device-connectivity/mqtts/certificate/download";
@Value("${server.http.max_payload_size:/api/image*/**=52428800;/api/resource/**=52428800;/api/**=16777216}")
private String maxPayloadSizeConfig;
@Autowired
private ThingsboardErrorResponseHandler restAccessDeniedHandler;
@ -124,8 +129,10 @@ public class ThingsboardSecurityConfiguration {
@Autowired
private RateLimitProcessingFilter rateLimitProcessingFilter;
@Autowired
private RequestSizeFilter requestSizeFilter;
@Bean
protected PayloadSizeFilter payloadSizeFilter() {
return new PayloadSizeFilter(maxPayloadSizeConfig);
}
@Bean
protected FilterRegistrationBean<ShallowEtagHeaderFilter> buildEtagFilter() throws Exception {
@ -214,7 +221,6 @@ public class ThingsboardSecurityConfiguration {
.authorizeHttpRequests(config -> config
.requestMatchers(NON_TOKEN_BASED_AUTH_ENTRY_POINTS).permitAll() // static resources, user activation and password reset end-points (webjars included)
.requestMatchers(
DEVICE_API_ENTRY_POINT, // Device HTTP Transport API
FORM_BASED_LOGIN_ENTRY_POINT, // Login end-point
PUBLIC_LOGIN_ENTRY_POINT, // Public login end-point
TOKEN_REFRESH_ENTRY_POINT, // Token refresh end-point
@ -228,7 +234,7 @@ public class ThingsboardSecurityConfiguration {
.addFilterBefore(buildRestPublicLoginProcessingFilter(), UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(buildJwtTokenAuthenticationProcessingFilter(), UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(buildRefreshTokenProcessingFilter(), UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(requestSizeFilter, UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(payloadSizeFilter(), UsernamePasswordAuthenticationFilter.class)
.addFilterAfter(rateLimitProcessingFilter, UsernamePasswordAuthenticationFilter.class);
if (oauth2Configuration != null) {
http.oauth2Login(login -> login

4
application/src/main/java/org/thingsboard/server/config/WebConfig.java

@ -15,12 +15,12 @@
*/
package org.thingsboard.server.config;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.thingsboard.server.utils.MiscUtils;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller

6
application/src/main/java/org/thingsboard/server/controller/AdminController.java

@ -137,7 +137,7 @@ public class AdminController extends BaseController {
return adminSettings;
}
@ApiOperation(value = "Get the Administration Settings object using key (getAdminSettings)",
@ApiOperation(value = "Creates or Updates the Administration Settings (saveAdminSettings)",
notes = "Creates or Updates the Administration Settings. Platform generates random Administration Settings Id during settings creation. " +
"The Administration Settings Id will be present in the response. Specify the Administration Settings Id when you would like to update the Administration Settings. " +
"Referencing non-existing Administration Settings Id will cause an error." + SYSTEM_AUTHORITY_PARAGRAPH)
@ -160,7 +160,7 @@ public class AdminController extends BaseController {
return adminSettings;
}
@ApiOperation(value = "Get the Security Settings object",
@ApiOperation(value = "Get the Security Settings object (getSecuritySettings)",
notes = "Get the Security Settings object that contains password policy, etc." + SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAuthority('SYS_ADMIN')")
@RequestMapping(value = "/securitySettings", method = RequestMethod.GET)
@ -237,7 +237,7 @@ public class AdminController extends BaseController {
}
}
@ApiOperation(value = "Send test sms (sendTestMail)",
@ApiOperation(value = "Send test sms (sendTestSms)",
notes = "Attempts to send test sms to the System Administrator User using SMS Settings and phone number provided as a parameters of the request. "
+ SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAuthority('SYS_ADMIN')")

3
application/src/main/java/org/thingsboard/server/controller/AlarmCommentController.java

@ -16,11 +16,8 @@
package org.thingsboard.server.controller;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;

3
application/src/main/java/org/thingsboard/server/controller/AlarmController.java

@ -17,12 +17,9 @@ package org.thingsboard.server.controller;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;

3
application/src/main/java/org/thingsboard/server/controller/AssetController.java

@ -18,13 +18,10 @@ package org.thingsboard.server.controller;
import com.google.common.util.concurrent.ListenableFuture;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;

5
application/src/main/java/org/thingsboard/server/controller/AssetProfileController.java

@ -16,13 +16,10 @@
package org.thingsboard.server.controller;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
@ -40,8 +37,8 @@ import org.thingsboard.server.common.data.id.AssetProfileId;
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.dao.resource.ImageService;
import org.thingsboard.server.config.annotations.ApiOperation;
import org.thingsboard.server.dao.resource.ImageService;
import org.thingsboard.server.queue.util.TbCoreComponent;
import org.thingsboard.server.service.entitiy.asset.profile.TbAssetProfileService;
import org.thingsboard.server.service.security.model.SecurityUser;

3
application/src/main/java/org/thingsboard/server/controller/AuditLogController.java

@ -16,10 +16,7 @@
package org.thingsboard.server.controller;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

58
application/src/main/java/org/thingsboard/server/controller/BaseController.java

@ -63,8 +63,10 @@ import org.thingsboard.server.common.data.asset.Asset;
import org.thingsboard.server.common.data.asset.AssetInfo;
import org.thingsboard.server.common.data.asset.AssetProfile;
import org.thingsboard.server.common.data.audit.ActionType;
import org.thingsboard.server.common.data.domain.Domain;
import org.thingsboard.server.common.data.edge.Edge;
import org.thingsboard.server.common.data.edge.EdgeInfo;
import org.thingsboard.server.common.data.exception.EntityVersionMismatchException;
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.AlarmCommentId;
@ -75,11 +77,14 @@ import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.DashboardId;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.DeviceProfileId;
import org.thingsboard.server.common.data.id.DomainId;
import org.thingsboard.server.common.data.id.EdgeId;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.EntityIdFactory;
import org.thingsboard.server.common.data.id.EntityViewId;
import org.thingsboard.server.common.data.id.HasId;
import org.thingsboard.server.common.data.id.MobileAppId;
import org.thingsboard.server.common.data.id.OAuth2ClientId;
import org.thingsboard.server.common.data.id.OtaPackageId;
import org.thingsboard.server.common.data.id.QueueId;
import org.thingsboard.server.common.data.id.RpcId;
@ -92,6 +97,8 @@ import org.thingsboard.server.common.data.id.UUIDBased;
import org.thingsboard.server.common.data.id.UserId;
import org.thingsboard.server.common.data.id.WidgetTypeId;
import org.thingsboard.server.common.data.id.WidgetsBundleId;
import org.thingsboard.server.common.data.mobile.MobileApp;
import org.thingsboard.server.common.data.oauth2.OAuth2Client;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.page.SortOrder;
import org.thingsboard.server.common.data.page.TimePageLink;
@ -118,13 +125,15 @@ import org.thingsboard.server.dao.device.ClaimDevicesService;
import org.thingsboard.server.dao.device.DeviceCredentialsService;
import org.thingsboard.server.dao.device.DeviceProfileService;
import org.thingsboard.server.dao.device.DeviceService;
import org.thingsboard.server.dao.domain.DomainService;
import org.thingsboard.server.dao.edge.EdgeService;
import org.thingsboard.server.dao.entityview.EntityViewService;
import org.thingsboard.server.dao.exception.DataValidationException;
import org.thingsboard.server.dao.exception.IncorrectParameterException;
import org.thingsboard.server.dao.mobile.MobileAppService;
import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.oauth2.OAuth2ConfigTemplateService;
import org.thingsboard.server.dao.oauth2.OAuth2Service;
import org.thingsboard.server.dao.oauth2.OAuth2ClientService;
import org.thingsboard.server.dao.ota.OtaPackageService;
import org.thingsboard.server.dao.queue.QueueService;
import org.thingsboard.server.dao.relation.RelationService;
@ -161,6 +170,9 @@ import org.thingsboard.server.service.sync.vc.EntitiesVersionControlService;
import org.thingsboard.server.service.telemetry.AlarmSubscriptionService;
import org.thingsboard.server.service.telemetry.TelemetrySubscriptionService;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
@ -235,7 +247,13 @@ public abstract class BaseController {
protected DashboardService dashboardService;
@Autowired
protected OAuth2Service oAuth2Service;
protected OAuth2ClientService oAuth2ClientService;
@Autowired
protected DomainService domainService;
@Autowired
protected MobileAppService mobileAppService;
@Autowired
protected OAuth2ConfigTemplateService oAuth2ConfigTemplateService;
@ -390,6 +408,8 @@ public abstract class BaseController {
} else {
return new ThingsboardException("Database error", ThingsboardErrorCode.GENERAL);
}
} else if (exception instanceof EntityVersionMismatchException) {
return new ThingsboardException(exception.getMessage(), exception, ThingsboardErrorCode.VERSION_CONFLICT);
}
return new ThingsboardException(exception.getMessage(), exception, ThingsboardErrorCode.GENERAL);
}
@ -609,6 +629,15 @@ public abstract class BaseController {
case QUEUE:
checkQueueId(new QueueId(entityId.getId()), operation);
return;
case OAUTH2_CLIENT:
checkOauth2ClientId(new OAuth2ClientId(entityId.getId()), operation);
return;
case DOMAIN:
checkDomainId(new DomainId(entityId.getId()), operation);
return;
case MOBILE_APP:
checkMobileAppId(new MobileAppId(entityId.getId()), operation);
return;
default:
checkEntityId(entityId, entitiesService::findEntityByTenantIdAndId, operation);
}
@ -785,6 +814,18 @@ public abstract class BaseController {
return queue;
}
OAuth2Client checkOauth2ClientId(OAuth2ClientId oAuth2ClientId, Operation operation) throws ThingsboardException {
return checkEntityId(oAuth2ClientId, oAuth2ClientService::findOAuth2ClientById, operation);
}
Domain checkDomainId(DomainId domainId, Operation operation) throws ThingsboardException {
return checkEntityId(domainId, domainService::findDomainById, operation);
}
MobileApp checkMobileAppId(MobileAppId mobileAppId, Operation operation) throws ThingsboardException {
return checkEntityId(mobileAppId, mobileAppService::findMobileAppById, operation);
}
protected <I extends EntityId> I emptyId(EntityType entityType) {
return (I) EntityIdFactory.getByTypeAndUuid(entityType, ModelConstants.NULL_UUID);
}
@ -871,4 +912,17 @@ public abstract class BaseController {
}
}
protected List<OAuth2ClientId> getOAuth2ClientIds(UUID[] ids) throws ThingsboardException {
if (ids == null) {
return Collections.emptyList();
}
List<OAuth2ClientId> oAuth2ClientIds = new ArrayList<>();
for (UUID id : ids) {
OAuth2ClientId oauth2ClientId = new OAuth2ClientId(id);
checkOauth2ClientId(oauth2ClientId, Operation.READ);
oAuth2ClientIds.add(oauth2ClientId);
}
return oAuth2ClientIds;
}
}

28
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.";
@ -791,7 +793,7 @@ public class ControllerConstants {
" * 'SHARED_ATTRIBUTE' - used for shared attributes; \n" +
" * 'SERVER_ATTRIBUTE' - used for server attributes; \n" +
" * 'ATTRIBUTE' - used for any of the above; \n" +
" * 'TIME_SERIES' - used for time-series values; \n" +
" * 'TIME_SERIES' - used for time series values; \n" +
" * 'ENTITY_FIELD' - used for accessing entity fields like 'name', 'label', etc. The list of available fields depends on the entity type; \n" +
" * 'ALARM_FIELD' - similar to entity field, but is used in alarm queries only; \n" +
"\n\n Let's review the example:\n\n" +
@ -902,7 +904,7 @@ public class ControllerConstants {
protected static final String KEY_FILTERS =
"\n\n # Key Filters" +
"\nKey Filter allows you to define complex logical expressions over entity field, attribute or latest time-series value. The filter is defined using 'key', 'valueType' and 'predicate' objects. " +
"\nKey Filter allows you to define complex logical expressions over entity field, attribute or latest time series value. The filter is defined using 'key', 'valueType' and 'predicate' objects. " +
"Single Entity Query may have zero, one or multiple predicates. If multiple filters are defined, they are evaluated using logical 'AND'. " +
"The example below checks that temperature of the entity is above 20 degrees:" +
"\n\n" + MARKDOWN_CODE_BLOCK_START +
@ -933,7 +935,7 @@ public class ControllerConstants {
"For example, \"find all devices with profile 'Moisture Sensor'\" or \"Find all devices related to asset 'Building A'\"" +
"\n\nOptional **key filters** allow to filter results of the entity filter by complex criteria against " +
"main entity fields (name, label, type, etc), attributes and telemetry. " +
"For example, \"temperature > 20 or temperature< 10\" or \"name starts with 'T', and attribute 'model' is 'T1000', and timeseries field 'batteryLevel' > 40\"." +
"For example, \"temperature > 20 or temperature< 10\" or \"name starts with 'T', and attribute 'model' is 'T1000', and time series field 'batteryLevel' > 40\"." +
"\n\nLet's review the example:" +
"\n\n" + MARKDOWN_CODE_BLOCK_START +
"{\n" +
@ -968,13 +970,13 @@ public class ControllerConstants {
protected static final String ENTITY_DATA_QUERY_DESCRIPTION =
"Allows to run complex queries over platform entities (devices, assets, customers, etc) " +
"based on the combination of main entity filter and multiple key filters. " +
"Returns the paginated result of the query that contains requested entity fields and latest values of requested attributes and time-series data.\n\n" +
"Returns the paginated result of the query that contains requested entity fields and latest values of requested attributes and time series data.\n\n" +
"# Query Definition\n\n" +
"\n\nMain **entity filter** is mandatory and defines generic search criteria. " +
"For example, \"find all devices with profile 'Moisture Sensor'\" or \"Find all devices related to asset 'Building A'\"" +
"\n\nOptional **key filters** allow to filter results of the **entity filter** by complex criteria against " +
"main entity fields (name, label, type, etc), attributes and telemetry. " +
"For example, \"temperature > 20 or temperature< 10\" or \"name starts with 'T', and attribute 'model' is 'T1000', and timeseries field 'batteryLevel' > 40\"." +
"For example, \"temperature > 20 or temperature< 10\" or \"name starts with 'T', and attribute 'model' is 'T1000', and time series field 'batteryLevel' > 40\"." +
"\n\nThe **entity fields** and **latest values** contains list of entity fields and latest attribute/telemetry fields to fetch for each entity." +
"\n\nThe **page link** contains information about the page to fetch and the sort ordering." +
"\n\nLet's review the example:" +
@ -1052,7 +1054,7 @@ public class ControllerConstants {
protected static final String ALARM_DATA_QUERY_DESCRIPTION = "This method description defines how Alarm Data Query extends the Entity Data Query. " +
"See method 'Find Entity Data by Query' first to get the info about 'Entity Data Query'." +
"\n\n The platform will first search the entities that match the entity and key filters. Then, the platform will use 'Alarm Page Link' to filter the alarms related to those entities. " +
"Finally, platform fetch the properties of alarm that are defined in the **'alarmFields'** and combine them with the other entity, attribute and latest time-series fields to return the result. " +
"Finally, platform fetch the properties of alarm that are defined in the **'alarmFields'** and combine them with the other entity, attribute and latest time series fields to return the result. " +
"\n\n See example of the alarm query below. The query will search first 100 active alarms with type 'Temperature Alarm' or 'Fire Alarm' for any device with current temperature > 0. " +
"The query will return combination of the entity fields: name of the device, device model and latest temperature reading and alarms fields: createdTime, type, severity and status: " +
"\n\n" + MARKDOWN_CODE_BLOCK_START +
@ -1173,7 +1175,7 @@ public class ControllerConstants {
protected static final String ALARM_FILTER_KEY = "## Alarm Filter Key" + NEW_LINE +
"Filter Key defines either entity field, attribute, telemetry or constant. It is a JSON object that consists the key name and type. The following filter key types are supported:\n" +
" * 'ATTRIBUTE' - used for attributes values;\n" +
" * 'TIME_SERIES' - used for time-series values;\n" +
" * 'TIME_SERIES' - used for time series values;\n" +
" * 'ENTITY_FIELD' - used for accessing entity fields like 'name', 'label', etc. The list of available fields depends on the entity type;\n" +
" * 'CONSTANT' - constant value specified." + NEW_LINE + "Let's review the example:" + NEW_LINE +
MARKDOWN_CODE_BLOCK_START +
@ -1291,7 +1293,7 @@ public class ControllerConstants {
protected static final String KEY_FILTERS_DESCRIPTION = "# Key Filters" + NEW_LINE +
"Key filter objects are created under the **'condition'** array. They allow you to define complex logical expressions over entity field, " +
"attribute, latest time-series value or constant. The filter is defined using 'key', 'valueType', " +
"attribute, latest time series value or constant. The filter is defined using 'key', 'valueType', " +
"'value' (refers to the value of the 'CONSTANT' alarm filter key type) and 'predicate' objects. Let's review each object:" + NEW_LINE +
ALARM_FILTER_KEY + FILTER_VALUE_TYPE + NEW_LINE + DEVICE_PROFILE_FILTER_PREDICATE + NEW_LINE;
@ -1604,7 +1606,7 @@ public class ControllerConstants {
protected static final String ATTRIBUTES_JSON_REQUEST_DESCRIPTION = "A string value representing the json object. For example, '{\"key\":\"value\"}'. See API call description for more details.";
protected static final String TELEMETRY_KEYS_BASE_DESCRIPTION = "A string value representing the comma-separated list of telemetry keys.";
protected static final String TELEMETRY_KEYS_DESCRIPTION = TELEMETRY_KEYS_BASE_DESCRIPTION + " If keys are not selected, the result will return all latest timeseries. For example, 'temperature,humidity'.";
protected static final String TELEMETRY_KEYS_DESCRIPTION = TELEMETRY_KEYS_BASE_DESCRIPTION + " If keys are not selected, the result will return all latest time series. For example, 'temperature,humidity'.";
protected static final String TELEMETRY_SCOPE_DESCRIPTION = "Value is deprecated, reserved for backward compatibility and not used in the API call implementation. Specify any scope for compatibility";
protected static final String TELEMETRY_JSON_REQUEST_DESCRIPTION = "A JSON with the telemetry values. See API call description for more details.";
@ -1620,11 +1622,11 @@ public class ControllerConstants {
protected static final String SAVE_ENTITY_ATTRIBUTES_STATUS_UNAUTHORIZED = "User is not authorized to save entity attributes for selected entity. Most likely, User belongs to different Customer or Tenant.";
protected static final String SAVE_ENTITY_ATTRIBUTES_STATUS_INTERNAL_SERVER_ERROR = "The exception was thrown during processing the request. " +
"Platform creates an audit log event about entity attributes updates with action type 'ATTRIBUTES_UPDATED' that includes an error stacktrace.";
protected static final String SAVE_ENTITY_TIMESERIES_STATUS_OK = "Timeseries from the request was created or updated. " +
"Platform creates an audit log event about entity timeseries updates with action type 'TIMESERIES_UPDATED'.";
protected static final String SAVE_ENTITY_TIMESERIES_STATUS_UNAUTHORIZED = "User is not authorized to save entity timeseries for selected entity. Most likely, User belongs to different Customer or Tenant.";
protected static final String SAVE_ENTITY_TIMESERIES_STATUS_OK = "Time series from the request was created or updated. " +
"Platform creates an audit log event about entity time series updates with action type 'TIMESERIES_UPDATED'.";
protected static final String SAVE_ENTITY_TIMESERIES_STATUS_UNAUTHORIZED = "User is not authorized to save entity time series for selected entity. Most likely, User belongs to different Customer or Tenant.";
protected static final String SAVE_ENTITY_TIMESERIES_STATUS_INTERNAL_SERVER_ERROR = "The exception was thrown during processing the request. " +
"Platform creates an audit log event about entity timeseries updates with action type 'TIMESERIES_UPDATED' that includes an error stacktrace.";
"Platform creates an audit log event about entity time series updates with action type 'TIMESERIES_UPDATED' that includes an error stacktrace.";
protected static final String ENTITY_ATTRIBUTE_SCOPES_TEMPLATE = " List of possible attribute scopes depends on the entity type: " +
"\n\n * SERVER_SCOPE - supported for all entity types;" +

3
application/src/main/java/org/thingsboard/server/controller/DashboardController.java

@ -25,7 +25,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
@ -51,8 +50,8 @@ import org.thingsboard.server.common.data.id.EdgeId;
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.dao.resource.ImageService;
import org.thingsboard.server.config.annotations.ApiOperation;
import org.thingsboard.server.dao.resource.ImageService;
import org.thingsboard.server.queue.util.TbCoreComponent;
import org.thingsboard.server.service.entitiy.dashboard.TbDashboardService;
import org.thingsboard.server.service.security.model.SecurityUser;

5
application/src/main/java/org/thingsboard/server/controller/DeviceController.java

@ -21,14 +21,12 @@ import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import jakarta.annotation.Nullable;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
@ -79,7 +77,6 @@ import org.thingsboard.server.service.security.model.SecurityUser;
import org.thingsboard.server.service.security.permission.Operation;
import org.thingsboard.server.service.security.permission.Resource;
import jakarta.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

9
application/src/main/java/org/thingsboard/server/controller/DeviceProfileController.java

@ -16,14 +16,11 @@
package org.thingsboard.server.controller;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
@ -42,8 +39,8 @@ import org.thingsboard.server.common.data.id.DeviceProfileId;
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.dao.resource.ImageService;
import org.thingsboard.server.config.annotations.ApiOperation;
import org.thingsboard.server.dao.resource.ImageService;
import org.thingsboard.server.dao.timeseries.TimeseriesService;
import org.thingsboard.server.queue.util.TbCoreComponent;
import org.thingsboard.server.service.entitiy.device.profile.TbDeviceProfileService;
@ -128,8 +125,8 @@ public class DeviceProfileController extends BaseController {
return checkNotNull(deviceProfileService.findDefaultDeviceProfileInfo(getTenantId()));
}
@ApiOperation(value = "Get time-series keys (getTimeseriesKeys)",
notes = "Get a set of unique time-series keys used by devices that belong to specified profile. " +
@ApiOperation(value = "Get time series keys (getTimeseriesKeys)",
notes = "Get a set of unique time series keys used by devices that belong to specified profile. " +
"If profile is not set returns a list of unique keys among all profiles. " +
"The call is used for auto-complete in the UI forms. " +
"The implementation limits the number of devices that participate in search to 100 as a trade of between accurate results and time-consuming queries. " +

132
application/src/main/java/org/thingsboard/server/controller/DomainController.java

@ -0,0 +1,132 @@
/**
* 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 io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.thingsboard.server.common.data.domain.Domain;
import org.thingsboard.server.common.data.domain.DomainInfo;
import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.DomainId;
import org.thingsboard.server.common.data.id.OAuth2ClientId;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.config.annotations.ApiOperation;
import org.thingsboard.server.queue.util.TbCoreComponent;
import org.thingsboard.server.service.entitiy.domain.TbDomainService;
import org.thingsboard.server.service.security.permission.Operation;
import org.thingsboard.server.service.security.permission.Resource;
import java.util.List;
import java.util.UUID;
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.SORT_ORDER_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.SORT_PROPERTY_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.SYSTEM_AUTHORITY_PARAGRAPH;
import static org.thingsboard.server.controller.ControllerConstants.UUID_WIKI_LINK;
@RestController
@TbCoreComponent
@RequestMapping("/api")
@RequiredArgsConstructor
@Slf4j
public class DomainController extends BaseController {
private final TbDomainService tbDomainService;
@ApiOperation(value = "Save or Update Domain (saveDomain)",
notes = "Create or update the Domain. When creating domain, platform generates Domain Id as " + UUID_WIKI_LINK +
"The newly created Domain Id will be present in the response. " +
"Specify existing Domain Id to update the domain. " +
"Referencing non-existing Domain Id will cause 'Not Found' error." +
"\n\nDomain name is unique for entire platform setup.\n\n" + SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
@PostMapping(value = "/domain")
public Domain saveDomain(
@Parameter(description = "A JSON value representing the Domain.", required = true)
@RequestBody @Valid Domain domain,
@Parameter(description = "A list of oauth2 client registration ids, separated by comma ','", array = @ArraySchema(schema = @Schema(type = "string")))
@RequestParam(name = "oauth2ClientIds", required = false) UUID[] ids) throws Exception {
domain.setTenantId(getTenantId());
checkEntity(domain.getId(), domain, Resource.DOMAIN);
return tbDomainService.save(domain, getOAuth2ClientIds(ids), getCurrentUser());
}
@ApiOperation(value = "Update oauth2 clients (updateOauth2Clients)",
notes = "Update oauth2 clients for the specified domain. ")
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
@PutMapping(value = "/domain/{id}/oauth2Clients")
public void updateOauth2Clients(@PathVariable UUID id,
@RequestBody UUID[] clientIds) throws ThingsboardException {
DomainId domainId = new DomainId(id);
Domain domain = checkDomainId(domainId, Operation.WRITE);
List<OAuth2ClientId> oAuth2ClientIds = getOAuth2ClientIds(clientIds);
tbDomainService.updateOauth2Clients(domain, oAuth2ClientIds, getCurrentUser());
}
@ApiOperation(value = "Get Domain infos (getTenantDomainInfos)", notes = SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
@GetMapping(value = "/domain/infos")
public PageData<DomainInfo> getTenantDomainInfos(@Parameter(description = PAGE_SIZE_DESCRIPTION, required = true)
@RequestParam int pageSize,
@Parameter(description = PAGE_NUMBER_DESCRIPTION, required = true)
@RequestParam int page,
@Parameter(description = "Case-insensitive 'substring' filter based on domain's name")
@RequestParam(required = false) String textSearch,
@Parameter(description = SORT_PROPERTY_DESCRIPTION)
@RequestParam(required = false) String sortProperty,
@Parameter(description = SORT_ORDER_DESCRIPTION)
@RequestParam(required = false) String sortOrder) throws ThingsboardException {
accessControlService.checkPermission(getCurrentUser(), Resource.DOMAIN, Operation.READ);
PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
return domainService.findDomainInfosByTenantId(getTenantId(), pageLink);
}
@ApiOperation(value = "Get Domain info by Id (getDomainInfoById)", notes = SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
@GetMapping(value = "/domain/info/{id}")
public DomainInfo getDomainInfoById(@PathVariable UUID id) throws ThingsboardException {
DomainId domainId = new DomainId(id);
return checkEntityId(domainId, domainService::findDomainInfoById, Operation.READ);
}
@ApiOperation(value = "Delete Domain by ID (deleteDomain)",
notes = "Deletes Domain by ID. Referencing non-existing domain Id will cause an error." + SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAuthority('SYS_ADMIN')")
@DeleteMapping(value = "/domain/{id}")
public void deleteDomain(@PathVariable UUID id) throws Exception {
DomainId domainId = new DomainId(id);
Domain domain = checkDomainId(domainId, Operation.DELETE);
tbDomainService.delete(domain, getCurrentUser());
}
}

5
application/src/main/java/org/thingsboard/server/controller/EdgeController.java

@ -478,8 +478,7 @@ public class EdgeController extends BaseController {
edgeId = checkNotNull(edgeId);
SecurityUser user = getCurrentUser();
TenantId tenantId = user.getTenantId();
ToEdgeSyncRequest request = new ToEdgeSyncRequest(UUID.randomUUID(), tenantId, edgeId);
edgeRpcServiceOpt.get().processSyncRequest(request, fromEdgeSyncResponse -> reply(response, fromEdgeSyncResponse));
edgeRpcServiceOpt.get().processSyncRequest(tenantId, edgeId, fromEdgeSyncResponse -> reply(response, fromEdgeSyncResponse));
} else {
throw new ThingsboardException("Edges support disabled", ThingsboardErrorCode.GENERAL);
}
@ -490,7 +489,7 @@ public class EdgeController extends BaseController {
if (fromEdgeSyncResponse.isSuccess()) {
response.setResult(new ResponseEntity<>(HttpStatus.OK));
} else {
response.setErrorResult(new ThingsboardException("Edge is not connected", ThingsboardErrorCode.GENERAL));
response.setErrorResult(new ThingsboardException(fromEdgeSyncResponse.getError(), ThingsboardErrorCode.GENERAL));
}
}

43
application/src/main/java/org/thingsboard/server/controller/EntityRelationController.java

@ -16,11 +16,8 @@
package org.thingsboard.server.controller;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@ -82,7 +79,23 @@ public class EntityRelationController extends BaseController {
@RequestMapping(value = "/relation", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
public void saveRelation(@Parameter(description = "A JSON value representing the relation.", required = true)
@RequestBody EntityRelation relation) throws ThingsboardException {
@RequestBody EntityRelation relation) throws ThingsboardException {
doSave(relation);
}
@ApiOperation(value = "Create Relation (saveRelationV2)",
notes = "Creates or updates a relation between two entities in the platform. " +
"Relations unique key is a combination of from/to entity id and relation type group and relation type. " +
SECURITY_CHECKS_ENTITIES_DESCRIPTION)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@RequestMapping(value = "/v2/relation", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
public EntityRelation saveRelationV2(@Parameter(description = "A JSON value representing the relation.", required = true)
@RequestBody EntityRelation relation) throws ThingsboardException {
return doSave(relation);
}
private EntityRelation doSave(EntityRelation relation) throws ThingsboardException {
checkNotNull(relation);
checkCanCreateRelation(relation.getFrom());
checkCanCreateRelation(relation.getTo());
@ -90,7 +103,7 @@ public class EntityRelationController extends BaseController {
relation.setTypeGroup(RelationTypeGroup.COMMON);
}
tbEntityRelationService.save(getTenantId(), getCurrentUser().getCustomerId(), relation, getCurrentUser());
return tbEntityRelationService.save(getTenantId(), getCurrentUser().getCustomerId(), relation, getCurrentUser());
}
@ApiOperation(value = "Delete Relation (deleteRelation)",
@ -104,6 +117,24 @@ public class EntityRelationController extends BaseController {
@Parameter(description = RELATION_TYPE_GROUP_PARAM_DESCRIPTION) @RequestParam(value = "relationTypeGroup", required = false) String strRelationTypeGroup,
@Parameter(description = ENTITY_ID_PARAM_DESCRIPTION, required = true) @RequestParam(TO_ID) String strToId,
@Parameter(description = ENTITY_TYPE_PARAM_DESCRIPTION, required = true) @RequestParam(TO_TYPE) String strToType) throws ThingsboardException {
doDelete(strFromId, strFromType, strRelationType, strRelationTypeGroup, strToId, strToType);
}
@ApiOperation(value = "Delete Relation (deleteRelationV2)",
notes = "Deletes a relation between two entities in the platform. " + SECURITY_CHECKS_ENTITIES_DESCRIPTION)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@RequestMapping(value = "/v2/relation", method = RequestMethod.DELETE, params = {FROM_ID, FROM_TYPE, RELATION_TYPE, TO_ID, TO_TYPE})
@ResponseStatus(value = HttpStatus.OK)
public EntityRelation deleteRelationV2(@Parameter(description = ENTITY_ID_PARAM_DESCRIPTION, required = true) @RequestParam(FROM_ID) String strFromId,
@Parameter(description = ENTITY_TYPE_PARAM_DESCRIPTION, required = true) @RequestParam(FROM_TYPE) String strFromType,
@Parameter(description = RELATION_TYPE_PARAM_DESCRIPTION, required = true) @RequestParam(RELATION_TYPE) String strRelationType,
@Parameter(description = RELATION_TYPE_GROUP_PARAM_DESCRIPTION) @RequestParam(value = "relationTypeGroup", required = false) String strRelationTypeGroup,
@Parameter(description = ENTITY_ID_PARAM_DESCRIPTION, required = true) @RequestParam(TO_ID) String strToId,
@Parameter(description = ENTITY_TYPE_PARAM_DESCRIPTION, required = true) @RequestParam(TO_TYPE) String strToType) throws ThingsboardException {
return doDelete(strFromId, strFromType, strRelationType, strRelationTypeGroup, strToId, strToType);
}
private EntityRelation doDelete(String strFromId, String strFromType, String strRelationType, String strRelationTypeGroup, String strToId, String strToType) throws ThingsboardException {
checkParameter(FROM_ID, strFromId);
checkParameter(FROM_TYPE, strFromType);
checkParameter(RELATION_TYPE, strRelationType);
@ -116,7 +147,7 @@ public class EntityRelationController extends BaseController {
RelationTypeGroup relationTypeGroup = parseRelationTypeGroup(strRelationTypeGroup, RelationTypeGroup.COMMON);
EntityRelation relation = new EntityRelation(fromId, toId, strRelationType, relationTypeGroup);
tbEntityRelationService.delete(getTenantId(), getCurrentUser().getCustomerId(), relation, getCurrentUser());
return tbEntityRelationService.delete(getTenantId(), getCurrentUser().getCustomerId(), relation, getCurrentUser());
}
@ApiOperation(value = "Delete common relations (deleteCommonRelations)",

3
application/src/main/java/org/thingsboard/server/controller/EntityViewController.java

@ -17,13 +17,10 @@ package org.thingsboard.server.controller;
import com.google.common.util.concurrent.ListenableFuture;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;

3
application/src/main/java/org/thingsboard/server/controller/EventController.java

@ -16,12 +16,9 @@
package org.thingsboard.server.controller;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;

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));
}
}

3
application/src/main/java/org/thingsboard/server/controller/Lwm2mController.java

@ -16,12 +16,9 @@
package org.thingsboard.server.controller;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;

133
application/src/main/java/org/thingsboard/server/controller/MobileAppController.java

@ -0,0 +1,133 @@
/**
* 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 io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.MobileAppId;
import org.thingsboard.server.common.data.id.OAuth2ClientId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.mobile.MobileApp;
import org.thingsboard.server.common.data.mobile.MobileAppInfo;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.config.annotations.ApiOperation;
import org.thingsboard.server.queue.util.TbCoreComponent;
import org.thingsboard.server.service.entitiy.mobile.TbMobileAppService;
import org.thingsboard.server.service.security.permission.Operation;
import org.thingsboard.server.service.security.permission.Resource;
import java.util.List;
import java.util.UUID;
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.SORT_ORDER_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.SORT_PROPERTY_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.SYSTEM_AUTHORITY_PARAGRAPH;
import static org.thingsboard.server.controller.ControllerConstants.UUID_WIKI_LINK;
@RestController
@TbCoreComponent
@RequestMapping("/api")
@RequiredArgsConstructor
@Slf4j
public class MobileAppController extends BaseController {
private final TbMobileAppService tbMobileAppService;
@ApiOperation(value = "Save Or update Mobile app (saveMobileApp)",
notes = "Create or update the Mobile app. When creating mobile app, platform generates Mobile App Id as " + UUID_WIKI_LINK +
"The newly created Mobile App Id will be present in the response. " +
"Specify existing Mobile App Id to update the mobile app. " +
"Referencing non-existing Mobile App Id will cause 'Not Found' error." +
"\n\nMobile app package name is unique for entire platform setup.\n\n" + SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
@PostMapping(value = "/mobileApp")
public MobileApp saveMobileApp(
@Parameter(description = "A JSON value representing the Mobile Application.", required = true)
@RequestBody @Valid MobileApp mobileApp,
@Parameter(description = "A list of entity oauth2 client ids, separated by comma ','", array = @ArraySchema(schema = @Schema(type = "string")))
@RequestParam(name = "oauth2ClientIds", required = false) UUID[] ids) throws Exception {
mobileApp.setTenantId(getTenantId());
checkEntity(mobileApp.getId(), mobileApp, Resource.MOBILE_APP);
return tbMobileAppService.save(mobileApp, getOAuth2ClientIds(ids), getCurrentUser());
}
@ApiOperation(value = "Update oauth2 clients (updateOauth2Clients)",
notes = "Update oauth2 clients of the specified mobile app. ")
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
@PutMapping(value = "/mobileApp/{id}/oauth2Clients")
public void updateOauth2Clients(@PathVariable UUID id,
@RequestBody UUID[] clientIds) throws ThingsboardException {
MobileAppId mobileAppId = new MobileAppId(id);
MobileApp mobileApp = checkMobileAppId(mobileAppId, Operation.WRITE);
List<OAuth2ClientId> oAuth2ClientIds = getOAuth2ClientIds(clientIds);
tbMobileAppService.updateOauth2Clients(mobileApp, oAuth2ClientIds, getCurrentUser());
}
@ApiOperation(value = "Get mobile app infos (getTenantMobileAppInfos)", notes = SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
@GetMapping(value = "/mobileApp/infos")
public PageData<MobileAppInfo> getTenantMobileAppInfos(@Parameter(description = PAGE_SIZE_DESCRIPTION, required = true)
@RequestParam int pageSize,
@Parameter(description = PAGE_NUMBER_DESCRIPTION, required = true)
@RequestParam int page,
@Parameter(description = "Case-insensitive 'substring' filter based on app's name")
@RequestParam(required = false) String textSearch,
@Parameter(description = SORT_PROPERTY_DESCRIPTION)
@RequestParam(required = false) String sortProperty,
@Parameter(description = SORT_ORDER_DESCRIPTION)
@RequestParam(required = false) String sortOrder) throws ThingsboardException {
accessControlService.checkPermission(getCurrentUser(), Resource.MOBILE_APP, Operation.READ);
PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
return mobileAppService.findMobileAppInfosByTenantId(getTenantId(), pageLink);
}
@ApiOperation(value = "Get mobile info by id (getMobileAppInfoById)", notes = SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
@GetMapping(value = "/mobileApp/info/{id}")
public MobileAppInfo getMobileAppInfoById(@PathVariable UUID id) throws ThingsboardException {
MobileAppId mobileAppId = new MobileAppId(id);
return checkEntityId(mobileAppId, mobileAppService::findMobileAppInfoById, Operation.READ);
}
@ApiOperation(value = "Delete Mobile App by ID (deleteMobileApp)",
notes = "Deletes Mobile App by ID. Referencing non-existing mobile app Id will cause an error." + SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAuthority('SYS_ADMIN')")
@DeleteMapping(value = "/mobileApp/{id}")
public void deleteMobileApp(@PathVariable UUID id) throws Exception {
MobileAppId mobileAppId = new MobileAppId(id);
MobileApp mobileApp = checkMobileAppId(mobileAppId, Operation.DELETE);
tbMobileAppService.delete(mobileApp, getCurrentUser());
}
}

10
application/src/main/java/org/thingsboard/server/controller/NotificationController.java

@ -300,9 +300,15 @@ public class NotificationController extends BaseController {
request.setOriginatorEntityId(user.getId());
List<NotificationTarget> targets = request.getTargets().stream()
.map(NotificationTargetId::new)
.map(targetId -> notificationTargetService.findNotificationTargetById(user.getTenantId(), targetId))
.map(targetId -> {
NotificationTarget target = notificationTargetService.findNotificationTargetById(user.getTenantId(), targetId);
if (target == null) {
throw new IllegalArgumentException("Notification target for id " + targetId + " not found");
}
return target;
})
.sorted(Comparator.comparing(target -> target.getConfiguration().getType()))
.collect(Collectors.toList());
.toList();
NotificationRequestPreview preview = new NotificationRequestPreview();

133
application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java

@ -16,60 +16,75 @@
package org.thingsboard.server.controller;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import org.thingsboard.server.common.data.StringUtils;
import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.OAuth2ClientId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.oauth2.OAuth2Client;
import org.thingsboard.server.common.data.oauth2.OAuth2ClientInfo;
import org.thingsboard.server.common.data.oauth2.OAuth2Info;
import org.thingsboard.server.common.data.oauth2.OAuth2ClientLoginInfo;
import org.thingsboard.server.common.data.oauth2.PlatformType;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.config.annotations.ApiOperation;
import org.thingsboard.server.dao.oauth2.OAuth2Configuration;
import org.thingsboard.server.queue.util.TbCoreComponent;
import org.thingsboard.server.service.entitiy.oauth2client.TbOauth2ClientService;
import org.thingsboard.server.service.security.permission.Operation;
import org.thingsboard.server.service.security.permission.Resource;
import org.thingsboard.server.utils.MiscUtils;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.UUID;
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.SORT_ORDER_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.SORT_PROPERTY_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.SYSTEM_AUTHORITY_PARAGRAPH;
@RestController
@TbCoreComponent
@RequestMapping("/api")
@RequiredArgsConstructor
@Slf4j
public class OAuth2Controller extends BaseController {
@Autowired
private OAuth2Configuration oAuth2Configuration;
private final OAuth2Configuration oAuth2Configuration;
private final TbOauth2ClientService tbOauth2ClientService;
@ApiOperation(value = "Get OAuth2 clients (getOAuth2Clients)", notes = "Get the list of OAuth2 clients " +
"to log in with, available for such domain scheme (HTTP or HTTPS) (if x-forwarded-proto request header is present - " +
"the scheme is known from it) and domain name and port (port may be known from x-forwarded-port header)")
@RequestMapping(value = "/noauth/oauth2Clients", method = RequestMethod.POST)
@ResponseBody
public List<OAuth2ClientInfo> getOAuth2Clients(HttpServletRequest request,
@Parameter(description = "Mobile application package name, to find OAuth2 clients " +
"where there is configured mobile application with such package name")
@RequestParam(required = false) String pkgName,
@Parameter(description = "Platform type to search OAuth2 clients for which " +
"the usage with this platform type is allowed in the settings. " +
"If platform type is not one of allowable values - it will just be ignored",
schema = @Schema(allowableValues = {"WEB", "ANDROID", "IOS"}))
@RequestParam(required = false) String platform) throws ThingsboardException {
@PostMapping(value = "/noauth/oauth2Clients")
public List<OAuth2ClientLoginInfo> getOAuth2Clients(HttpServletRequest request,
@Parameter(description = "Mobile application package name, to find OAuth2 clients " +
"where there is configured mobile application with such package name")
@RequestParam(required = false) String pkgName,
@Parameter(description = "Platform type to search OAuth2 clients for which " +
"the usage with this platform type is allowed in the settings. " +
"If platform type is not one of allowable values - it will just be ignored",
schema = @Schema(allowableValues = {"WEB", "ANDROID", "IOS"}))
@RequestParam(required = false) String platform) {
if (log.isDebugEnabled()) {
log.debug("Executing getOAuth2Clients: [{}][{}][{}]", request.getScheme(), request.getServerName(), request.getServerPort());
Enumeration<String> headerNames = request.getHeaderNames();
@ -80,31 +95,70 @@ public class OAuth2Controller extends BaseController {
}
PlatformType platformType = null;
if (StringUtils.isNotEmpty(platform)) {
try {
platformType = PlatformType.valueOf(platform);
} catch (Exception e) {
}
platformType = PlatformType.valueOf(platform);
}
if (StringUtils.isNotEmpty(pkgName)) {
return oAuth2ClientService.findOAuth2ClientLoginInfosByMobilePkgNameAndPlatformType(pkgName, platformType);
} else {
return oAuth2ClientService.findOAuth2ClientLoginInfosByDomainName(MiscUtils.getDomainNameAndPort(request));
}
return oAuth2Service.getOAuth2Clients(MiscUtils.getScheme(request), MiscUtils.getDomainNameAndPort(request), pkgName, platformType);
}
@ApiOperation(value = "Get current OAuth2 settings (getCurrentOAuth2Info)", notes = SYSTEM_AUTHORITY_PARAGRAPH)
@ApiOperation(value = "Save OAuth2 Client (saveOAuth2Client)", notes = SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
@PostMapping(value = "/oauth2/client")
public OAuth2Client saveOAuth2Client(@RequestBody @Valid OAuth2Client oAuth2Client) throws Exception {
TenantId tenantId = getTenantId();
oAuth2Client.setTenantId(tenantId);
checkEntity(oAuth2Client.getId(), oAuth2Client, Resource.OAUTH2_CLIENT);
return tbOauth2ClientService.save(oAuth2Client, getCurrentUser());
}
@ApiOperation(value = "Get OAuth2 Client infos (findTenantOAuth2ClientInfos)", notes = SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
@RequestMapping(value = "/oauth2/config", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public OAuth2Info getCurrentOAuth2Info() throws ThingsboardException {
accessControlService.checkPermission(getCurrentUser(), Resource.OAUTH2_CONFIGURATION_INFO, Operation.READ);
return oAuth2Service.findOAuth2Info();
@GetMapping(value = "/oauth2/client/infos")
public PageData<OAuth2ClientInfo> findTenantOAuth2ClientInfos(@Parameter(description = PAGE_SIZE_DESCRIPTION, required = true)
@RequestParam int pageSize,
@Parameter(description = PAGE_NUMBER_DESCRIPTION, required = true)
@RequestParam int page,
@Parameter(description = "Case-insensitive 'substring' filter based on client's title")
@RequestParam(required = false) String textSearch,
@Parameter(description = SORT_PROPERTY_DESCRIPTION)
@RequestParam(required = false) String sortProperty,
@Parameter(description = SORT_ORDER_DESCRIPTION)
@RequestParam(required = false) String sortOrder) throws ThingsboardException {
accessControlService.checkPermission(getCurrentUser(), Resource.OAUTH2_CLIENT, Operation.READ);
PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
return oAuth2ClientService.findOAuth2ClientInfosByTenantId(getTenantId(), pageLink);
}
@ApiOperation(value = "Save OAuth2 settings (saveOAuth2Info)", notes = SYSTEM_AUTHORITY_PARAGRAPH)
@ApiOperation(value = "Get OAuth2 Client infos By Ids (findTenantOAuth2ClientInfosByIds)",
notes = "Fetch OAuth2 Client info objects based on the provided ids. ")
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
@RequestMapping(value = "/oauth2/config", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
public OAuth2Info saveOAuth2Info(@RequestBody OAuth2Info oauth2Info) throws ThingsboardException {
accessControlService.checkPermission(getCurrentUser(), Resource.OAUTH2_CONFIGURATION_INFO, Operation.WRITE);
oAuth2Service.saveOAuth2Info(oauth2Info);
return oAuth2Service.findOAuth2Info();
@GetMapping(value = "/oauth2/client/infos", params = {"clientIds"})
public List<OAuth2ClientInfo> findTenantOAuth2ClientInfosByIds(
@Parameter(description = "A list of oauth2 ids, separated by comma ','", array = @ArraySchema(schema = @Schema(type = "string")), required = true)
@RequestParam("clientIds") UUID[] clientIds) throws ThingsboardException {
List<OAuth2ClientId> oAuth2ClientIds = getOAuth2ClientIds(clientIds);
return oAuth2ClientService.findOAuth2ClientInfosByIds(getTenantId(), oAuth2ClientIds);
}
@ApiOperation(value = "Get OAuth2 Client by id (getOAuth2ClientById)", notes = SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
@GetMapping(value = "/oauth2/client/{id}")
public OAuth2Client getOAuth2ClientById(@PathVariable UUID id) throws ThingsboardException {
OAuth2ClientId oAuth2ClientId = new OAuth2ClientId(id);
return checkEntityId(oAuth2ClientId, oAuth2ClientService::findOAuth2ClientById, Operation.READ);
}
@ApiOperation(value = "Delete oauth2 client (deleteOauth2Client)",
notes = "Deletes the oauth2 client. Referencing non-existing oauth2 client Id will cause an error." + SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAuthority('SYS_ADMIN')")
@DeleteMapping(value = "/oauth2/client/{id}")
public void deleteOauth2Client(@PathVariable UUID id) throws Exception {
OAuth2ClientId oAuth2ClientId = new OAuth2ClientId(id);
OAuth2Client oAuth2Client = checkOauth2ClientId(oAuth2ClientId, Operation.DELETE);
tbOauth2ClientService.delete(oAuth2Client, getCurrentUser());
}
@ApiOperation(value = "Get OAuth2 log in processing URL (getLoginProcessingUrl)", notes = "Returns the URL enclosed in " +
@ -112,10 +166,9 @@ public class OAuth2Controller extends BaseController {
"further log in processing. This URL may be configured as 'security.oauth2.loginProcessingUrl' property in yml configuration file, or " +
"as 'SECURITY_OAUTH2_LOGIN_PROCESSING_URL' env variable. By default it is '/login/oauth2/code/'" + SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
@RequestMapping(value = "/oauth2/loginProcessingUrl", method = RequestMethod.GET)
@ResponseBody
@GetMapping(value = "/oauth2/loginProcessingUrl")
public String getLoginProcessingUrl() throws ThingsboardException {
accessControlService.checkPermission(getCurrentUser(), Resource.OAUTH2_CONFIGURATION_INFO, Operation.READ);
accessControlService.checkPermission(getCurrentUser(), Resource.OAUTH2_CLIENT, Operation.READ);
return "\"" + oAuth2Configuration.getLoginProcessingUrl() + "\"";
}

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

Loading…
Cancel
Save